<template>
    <div>
        <van-form ref='form'>
            <div class='title'>随访信息</div>
            <van-cell-group inset>
                <div v-if='showOne && firstForm.visitSituation == 1'>
                    <div class='no-req-label'>随访内容</div>
                    <van-field
                        v-model='form.visitContent'
                        placeholder='随访内容'
                        class='input-back mt-2 form-input'
                        rows='2'
                        autosize
                        type='textarea'
                    />
                </div>
                <div v-if='showOne && firstForm.visitSituation == 1'>
                    <div class='no-req-label mt-5'>处置意见</div>
                    <van-field
                        v-model='form.idCard'
                        rows='2'
                        autosize
                        type='textarea'
                        placeholder='处置意见'
                        class='input-back mt-2 form-input'
                    />
                </div>
                <div v-if='(showOne || showTwo) && firstForm.visitSituation == 1 && firstForm.isHealthGuide == 1'>
                    <div class='no-req-label mt-5'>健康指导</div>
                    <div class='health mt-2'>
                        <div class='health-cell mt-2' v-for='item in form.visitHealthGuideList'>
                            <div class='no-req-label' v-if="item.name != '无'">{{ item.name }}</div>
                            <van-field
                                v-model='item.templateContent'
                                rows='1'
                                autosize
                                type='textarea'
                                placeholder='请输入'
                                class='input-back mt-2 form-input'
                            />
                        </div>
                    </div>
                </div>

                <div v-if='showOne && firstForm.visitSituation == 1'>
                    <div class='no-req-label mt-5'>上传随访记录</div>
                    <div class='tips'>
                        支持上传jpg、png、jpeg文件,大小请在10M以内
                    </div>
                    <div class='img-btn mt-2' @click="toUpload('imgId')">
                        <input type='file' id='imgId' multiple @change='choiceImg' style='display: none'
                               :key='new Date().getTime()' accept="image/*">
                        <div class='flex items-center justify-center'>
                            <div>
                                <doc-icon type='doc-upload' class='doc-up' />
                            </div>
                            <div class='ml-2'>上传图片</div>
                        </div>
                    </div>

                    <div class='flex items-center' style='flex-wrap: wrap'>
                        <div v-for='(item, index) in imgList'>
                            <!--                     图片-->
                            <div v-if="item.imgFlag == 'img'" class='mt-2' style='position: relative'>
                                <div>
                                    <doc-icon type='doc-remove' class='remove' @click='delImg(item.indexF)'></doc-icon>
                                </div>
                                <img :src='item.trueDownloadUrl' class='ml-2' style='width: 95px;height: 95px;'
                                     @click='toPreview(imgList,index)'>
                            </div>
                        </div>
                    </div>
                    <!--                pdf-->
                    <div>
                        <div v-for='item in imgList'>
                            <div class='mt-2 pdf' v-if="item.imgFlag == 'pdf'">
                                <div class='flex items-center justify-between'>
                                    <div class='flex items-center' @click.stop='toPdf(item)'>
                                        <div>
                                            <doc-icon type='doc-PDF' style='font-size: .48rem'></doc-icon>
                                        </div>
                                        <div class='ml-1'>{{ item.name }}</div>
                                    </div>
                                    <div>
                                    <span><doc-icon type='doc-remove' style='font-size: .24rem'
                                                    @click='delImg(item.indexF)'></doc-icon></span>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>

                <div v-if='showOne && firstForm.visitSituation == 1'>
                    <div class='no-req-label mt-5'>现场随访照片</div>
                    <div class='tips'>
                        支持上传jpg、png、jpeg文件,大小请在10M以内
                    </div>
                    <div class='img-btn mt-2' @click="toUpload('imgId2')">
                        <input type='file' id='imgId2' multiple @change='choiceImg2' style='display: none'
                               :key='new Date().getTime()-10000'>
                        <div class='flex items-center justify-center'>
                            <div>
                                <doc-icon type='doc-upload' class='doc-up' />
                            </div>
                            <div class='ml-2'>上传图片</div>
                        </div>
                    </div>

                    <div class='flex items-center' style='flex-wrap: wrap'>
                        <div v-for='(item, index) in imgList2'>
                            <!--                     图片-->
                            <div v-if="item.imgFlag == 'img'" class='mt-2' style='position: relative'>
                                <div>
                                    <doc-icon type='doc-remove' class='remove' @click='delImg2(item.indexF)'></doc-icon>
                                </div>
                                <img :src='item.trueDownloadUrl' class='ml-2' style='width: 95px;height: 95px;'
                                     @click='toPreview(imgList2 ,index)'>
                            </div>
                        </div>
                    </div>
                    <!--                pdf-->
                    <div>
                        <div v-for='item in imgList2'>
                            <div class='mt-2 pdf' v-if="item.imgFlag == 'pdf'">
                                <div class='flex items-center justify-between'>
                                    <div class='flex items-center' @click.stop='toPdf(item)'>
                                        <div>
                                            <doc-icon type='doc-PDF' style='font-size: .48rem'></doc-icon>
                                        </div>
                                        <div class='ml-1'>{{ item.name }}</div>
                                    </div>
                                    <div>
                                    <span><doc-icon type='doc-remove' style='font-size: .24rem'
                                                    @click='delImg2(item.indexF)'></doc-icon></span>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>

                <!--                图片预览-->
                <van-overlay :show='imgShow' @click='imgShow = false'>
                    <div class='wrapper'>
                    <van-swipe  class='block' :initial-swipe='initSwipe'>
                        <van-swipe-item v-for='image in showImgList' :key='image'>
                            <img :src='image' style='width: 100%;height: 100%'/>
                        </van-swipe-item>
                    </van-swipe>
                    </div>
                </van-overlay>

                <div v-if='firstForm.visitSituation == 1'>
                    <div class='label-title mt-5'>下次随访日期</div>
                    <van-field
                        v-model='form.nextVisitDate'
                        is-link
                        readonly
                        name='nextVisitDate'
                        placeholder='下次随访日期'
                        class='input-back mt-2 form-input'
                        :rules='rules.nextVisitDate'
                        @click='showDate = true' />
                    <van-popup v-model:show='showDate' position='bottom'>
                        <van-date-picker @confirm='dataConfirm' @cancel='showDate = false' />
                    </van-popup>
                </div>
            </van-cell-group>
        </van-form>
    </div>
</template>

<script>
import { useStore } from '@/resident/store'
import dayjs from 'dayjs'
import DocIcon from '@/components/docIcon/DocIcon'
import { showImagePreview } from 'vant'
import { fetchDataHandle } from '@/utils/common'

export default {
    name: 'GeneralFUForm',
    components: { DocIcon },
    props: {
        info: {
            default: () => {
                return {}
            }
        },
        firstForm: {
            default: () => {
                return {}
            }
        }
    },
    data() {
        return {
            store: useStore(),
            form: {},
            //展示用
            imgList: [],
            imgList2: [],
            //input图片值
            imgInputList1: [],
            imgInputList2: [],
            showDate: false,
            imgShow: false,
            showImgList: [],
            initSwipe: 0,
            rules: {
                nextVisitDate: [{ required: true, message: '请选择' }]
            }
        }
    },
    watch: {
        'info': {
            handler() {
                this.form = this.setForm(this.info)
                if (this.info.id) {
                    this.imgList = this.imgListInfo1
                    this.imgList2 = this.imgListInfo2
                }
            },
            immediate: true
        },
    },
    computed: {
        //复检指导
        showOne() {
            const { visitWay } = this.firstForm
            let res = false
            if (visitWay == 5 || visitWay == 6 || visitWay == 7 || visitWay == 8) {
                res = true
            }
            return res
        },
        //微信、短信指导
        showTwo() {
            const { visitWay } = this.firstForm
            let res = false
            if (visitWay == 9 || visitWay == 11) {
                res = true
            }
            return res
        },
        //催检
        showThree() {
            const { visitWay } = this.firstForm
            let res = false
            if (visitWay == 10 || visitWay == 12) {
                res = true
            }
            return res
        },
        imgListInfo1() {
            const { uploadVisitRecordImageList = [] } = this.info
            uploadVisitRecordImageList.forEach((item, index) => {
                item['imgFlag'] = ''
                item['indexF'] = index + 1
                if (item.fileType == 'pdf') {
                    item['imgFlag'] = 'pdf'
                }
                if (item.fileType == 'img') {
                    item['imgFlag'] = 'img'
                }
            })
            return uploadVisitRecordImageList
        },
        imgListInfo2() {
            const { sceneVisitImageList = [] } = this.info
            sceneVisitImageList.forEach((item, index) => {
                item['imgFlag'] = ''
                item['indexF'] = index + 1
                if (item.fileType == 'pdf') {
                    item['imgFlag'] = 'pdf'
                }
                if (item.fileType == 'img') {
                    item['imgFlag'] = 'img'
                }
            })
            return sceneVisitImageList
        }
    },
    methods: {
        setForm(info = {}) {
            const modeArray = this.store.getDict('DC00084')
            let visitHealthGuideList = []
            if (info.healthGuideContent) {
                visitHealthGuideList = JSON.parse(info.healthGuideContent)
            }
            const form = {
                id: info.id,
                diseaseType: info.diseaseType,
                visitDate: info.visitDate || new dayjs(),
                nextVisitDate: info.nextVisitDate,
                isSms: info.isSms,
                isWx: info.isWx,
                visitContent: info.visitContent,
                disposalOpinion: info.disposalOpinion,
                uploadVisitRecord: info.uploadVisitRecord,
                sceneVisitImage: info.sceneVisitImage,
                sendInfo: info.sendInfo,
                visitHealthGuideList: modeArray.map(e => {
                    const item = visitHealthGuideList.find(i => i.templateMode === e.value)
                    return {
                        templateMode: e.value,
                        name: e.name,
                        templateContent: item ? item.templateContent : '',
                        id: item ? item.visitId : ''
                    }
                })

            }
            return form
        },
        setTemForm(info) {
            const modeArray = this.store.getDict('DC00084')
            const visitHealthGuideList = info.contentList || []
            const form = {
                visitHealthGuideList: modeArray.map(e => {
                    const item = visitHealthGuideList.find(i => i.templateMode === e.value)
                    return {
                        templateMode: e.value,
                        name: e.name,
                        templateContent: item ? item.templateContent : '',
                        id: item ? item.visitId : ''
                    }
                })
            }
            return form.visitHealthGuideList
        },
        toUpload(id) {
            let input = document.getElementById(id)
            input.click()
        },
        choiceImg() {
            let input = document.getElementById('imgId')
            let file = input.files
            let newFile = Array.from(file)
            let maxIndexF = this.imgList.length ? Math.max(...this.imgList.map(item => item.indexF)) : 0
            newFile.forEach((item, index) => {
                item['indexF'] = maxIndexF + index + 1
                item['trueDownloadUrl'] = window.URL.createObjectURL(item)
                item['imgFlag'] = ''
                if (item.type == 'application/pdf') {
                    item['imgFlag'] = 'pdf'
                }
                if (item.type == 'image/jpeg' || item.type == 'image/png' || item.type == 'image/gif' || item.type == 'image/webp') {
                    item['imgFlag'] = 'img'
                }
            })
            this.imgList = this.imgList.concat(newFile)
            this.imgInputList1 = this.imgInputList1.concat(newFile)
        },
        choiceImg2() {
            let input = document.getElementById('imgId2')
            let file = input.files
            let newFile = Array.from(file)
            let maxIndexF = this.imgList2.length ? Math.max(...this.imgList2.map(item => item.indexF)) : 0
            newFile.forEach((item, index) => {
                item['indexF'] = maxIndexF + index + 1
                item['trueDownloadUrl'] = window.URL.createObjectURL(item)
                item['imgFlag'] = ''
                if (item.type == 'application/pdf') {
                    item['imgFlag'] = 'pdf'
                }
                if (item.type == 'image/jpeg' || item.type == 'image/png' || item.type == 'image/gif' || item.type == 'image/webp') {
                    item['imgFlag'] = 'img'
                }
            })
            this.imgList2 = this.imgList2.concat(newFile)
            console.log(this.imgList2)
            this.imgInputList2 = this.imgInputList2.concat(newFile)
        },
        //图片预览
        toPreview(list = [], index) {
            let res = []
            this.showImgList = []
            list.forEach(item => {
                res.push(item.trueDownloadUrl)
            })
            this.showImgList = res
            this.initSwipe = index
            this.imgShow = true
        },
        //pdf预览
        toPdf(item) {
            // window.open(item.trueDownloadUrl)
        },
        delImg(index) {
            this.imgList = this.imgList.filter(item => item.indexF != index)
            this.imgInputList1 = this.imgInputList1.filter(item => item.indexF != index)
        },
        delImg2(index) {
            this.imgList2 = this.imgList2.filter(item => item.indexF != index)
            this.imgInputList2 = this.imgInputList2.filter(item => item.indexF != index)
        },
        dataConfirm({ selectedValues }) {
            this.form.nextVisitDate = selectedValues.join('-')
            this.showDate = false
        },
        onSubmit() {
            return new Promise((resolve, reject) => {
                this.$refs.form.validate().then(() => {
                    let par = {
                        img1: this.imgList || [],
                        img2: this.imgList2 || [],
                        imgInput1: this.imgInputList1,
                        imgInput2: this.imgInputList2,
                        ...this.form,
                        healthGuideContent: JSON.stringify(this.form.visitHealthGuideList)
                    }
                    resolve(par)
                }).catch((e) => {
                    console.warn('ArchiveCommon error', e)
                    // reject(e)
                })
            })
        }
    }
}
</script>

<style scoped lang='less'>
.title {
    font-weight: bold;
    margin-bottom: 20px;
}

.label-title {
    font-size: 13px;
    color: #595959;
    font-weight: 500;

    &::after {
        content: "*";
        color: red;
        font-weight: bold;
        margin-left: 4px;
    }
}

.no-req-label {
    font-size: 13px;
    color: #595959;
    font-weight: 500;
}

.form-input {
    padding: 8px 12px;
    border-radius: 8px;
}

.input-back {
    background: #FAFAFA;
}

.tel-back {
    background: #F5F5F5;
    padding: 8px;
    border-radius: 0px 0px 8px 8px;
}

.tel {
    background: #FFFFFF;
    padding: 8px;
    border-radius: 8px;
}

.tel-label {
    color: #607FF0;
    font-weight: bold;
}

.p-12-0 {
    padding: 12px 0px;
}

.health {
    padding: 1px 8px 8px 8px;
    background: #FAFAFA;
    border-radius: 8px;

    .health-cell {
        padding: 8px;
        background: #FFFFFF;
        border-radius: 8px;
    }
}

.tips {
    color: #A5AEBE;
    font-size: 12px;
    margin-top: 8px;
}

.img-btn {
    border: 1px solid #EEEEEE;
    background: #FAFAFA;
    border-radius: 8px;
    padding: 14px 46px;
    text-align: center;
    color: #607FF0;
}

.doc-up {
    font-size: 20px;
}

.pdf {
    border: 1px solid #EEEEEE;
    border-radius: 8px;
    padding: 8px;
}

.remove {
    font-size: 24px;
    position: absolute;
    right: -8px;
    top: -9px;
    z-index: 1;
}
.wrapper {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100%;
    .block {
        width: 100%;
        height: 300px;
    }
}

:deep(.van-cell-group--inset) {
    overflow: visible;
}

:deep(.van-cell) {
    overflow: visible;
}

:deep(.van-field__error-message) {
    position: absolute;
}

:deep(.van-cell:after) {
    border-bottom: 0px;
}


</style>

<style lang='less'>
.custom-image-preview .van-image-preview__container .van-image-preview__item:not(:first-child):not(last-child) {
    display: block !important;
}

.van-image__img {
    width: 100%;
}

.van-swipe__track {
    width: 100% !important;
}

.van-swipe-item {
    width: 100% !important;
}
</style>