<template>
    <div class="label-title mt-2">{{ diseaseType === 2 || diseaseType === 5 ? '其他检查' : '辅助检查' }}</div>
    <van-field
        v-if="diseaseType !== 7"
        v-model="form.auxiliaryExaminationName"
        isLink
        readonly
        placeholder="请选择"
        @click="showAuxiliaryExamination = true"
        class="form-input"
    />
    <van-popup v-model:show="showAuxiliaryExamination" position="bottom">
        <div class="p-4" style="height: 100%">
            <div class="flex justify-between items-center mb-4 pop-title">
                <div class="greyColor" @click="showAuxiliaryExamination = false">取消</div>
                <div>辅助检查(可多选)</div>
                <div class="blueColor" @click="auxiliaryConfirm">确定</div>
            </div>
            <div style="height: 80%; overflow: auto">
                <CheckBtn
                    multiple
                    column-2
                    :options="dictList"
                    v-model:value="form.auxiliaryExamination"
                    :fieldNames="{ text: 'name', value: 'value' }"
                />
            </div>
        </div>
    </van-popup>
    <div v-for="(x, xIndex) in viewData" :key="xIndex" class="bg-fa mt-2">
        <div class="label-title" required style="color: #262626; font-size: 14px">{{ x.insName }}</div>
        <!-- 高血压心电图特殊处理 -->
        <template v-if="x.diseaseType === 1 && x.insType === 99" v-for="(y, yIndex) in x.items" :key="`HBP-${yIndex}`">
            <div style="background-color: #fff; padding: 8px; border-radius: 8px">
                <div class="label-title">{{ y.itemName }}</div>
                <van-field style="padding: 0">
                    <template #input>
                        <van-radio-group
                            v-model="y.itemValue"
                            shape="dot"
                            direction="horizontal"
                            class="w-full doc-radio-group"
                        >
                            <van-radio
                                v-for="item in y.dictItemList"
                                :key="item.value"
                                :name="item.value"
                                label-position="left"
                            >
                                {{ item.name }}
                            </van-radio>
                        </van-radio-group>
                    </template>
                </van-field>
                <van-field
                    v-if="y.itemValue === '2'"
                    v-model="y.abnormalSituation"
                    placeholder="异常情况"
                    class="form-input mt-2"
                />
            </div>
            <div v-if="y.itemValue === '2'" style="background-color: #fff; padding: 8px; border-radius: 8px" class="mt-2">
                <div class="label-title">影像报告</div>
                <DocImageUpload
                    description="最多支持上传4个文件,支持上传图片或PDF文件,图片支持上传jpg、png、jpeg格式,文件大小请勿超过10M。"
                    :imageData="y.picturesList" 
                    @change="(ids, option) => y.img = ids"
                    :maxLength="4">
                </DocImageUpload>
            </div>
        </template>
        <template v-else v-for="(y, yIndex) in x.items" :key="`else-${yIndex}`">
            <van-field
                :label="getItemName(y)"
                v-model="y.itemValue"
                :rules="getRule(y)"
                placeholder="请输入"
                class="card-input mt-2"
                v-if="y.itemType === 1"
            >
                <template #extra v-if="y.unit">
                    <span class="ml-1">{{ y.unit }}</span>
                </template>
            </van-field>
            <van-field
                :label="getItemName(y)"
                is-link
                :modelValue="y.itemValue"
                :rules="getRule(y)"
                readonly
                placeholder="请选择或录入"
                @click="setSelectOption(y, y.itemType)"
                class="card-input mt-2"
                v-else-if="y.itemType === 4"
            >
                <template #extra v-if="y.unit">
                    <span class="ml-1">{{ y.unit }}</span>
                </template>
            </van-field>
            <div v-else-if="y.itemType === 5" style="background-color: #fff; padding: 8px; border-radius: 8px" class="mt-2">
                <div class="label-title">{{ y.itemName }}</div>
                <DocImageUpload
                    description="温馨提示:请上传JPG、PNG格式图片,文件大小不超过10M"
                    :imageData="y.picturesList" 
                    @change="(ids, option) => y.img = ids"
                    :maxLength="4">
                </DocImageUpload>
            </div>
        </template>
    </div>
    <div v-if="otherShow" v-for="(item, index) in otherInspectList" :key="index" class="bg-fa mt-2">
        <div style="background-color: #fff; padding: 8px">
            <div style="color: #262626; font-size: 14px">检查名称</div>
            <van-field
                v-model="item.itemName"
                placeholder="请输入"
                :rules="[{ required: true, message: '请输入' }]"
                class="form-input mt-2"
            />
            <div style="color: #262626; font-size: 14px; margin-top: 8px">检查结果</div>
            <van-field
                v-model="item.itemValue"
                placeholder="请输入"
                class="form-input mt-2"
            />
            <div style="color: #262626; font-size: 14px; margin-top: 8px">上传报告</div>
            <DocImageUpload
                description="最多支持上传4个文件,支持上传图片或PDF文件,图片支持上传jpg、png、jpeg格式,文件大小请勿超过10M。"
                :imageData="item.picturesList"
                @change="(ids, option) => item.img = ids"
                :maxLength="4"
                class="mt-2">
            </DocImageUpload>
            <div class="del-btn" @click="onDel(index)">删除</div>
        </div>
    </div>
    <div v-if="otherShow" class="mt-2">
        <van-button type="primary" size="small" plain block @click="onPlus">增加检查</van-button>
    </div>
    <InputSelect
        v-model:show="selectOption.show4"
        :dict="selectOption.dict"
        @change="onSelectInputConfirm">
    </InputSelect>
</template>
<script>
import { useStore } from '@/doctor/store'
import CheckBtn from '@/doctor/components/checkBtn/CheckBtn.vue'
import { getInspectCode } from '@/api/doctor/separateFU'
import InputSelect from '@/doctor/diagnose/common/InputSelect.vue'
import DocImageUpload from '@/doctor/components/docImageUpload/DocImageUpload.vue'
export default {
    components: { CheckBtn, InputSelect, DocImageUpload },
    props: {
        form: {
            type: Object,
            default: () => {}
        },
        diseaseInfo: {
            type: Object,
            default: () => {}
        }
    },
    data() {
        return {
            store: useStore(),
            showAuxiliaryExamination: false,
            inspectList: [],
            viewData: [],
            selectOption: {
                show4: false,
                item: {},
                dict: []
            },
            otherInspectList: []
        }
    },
    computed: {
        diseaseType() {
            return this.diseaseInfo.diseaseType
        },
        dictList() {
            if (this.diseaseType === 1) return this.store.getDict('CP00073')
            if (this.diseaseType === 2) return this.store.getDict('CP00074')
            if (this.diseaseType === 3) return this.store.getDict('CP00075')
            if (this.diseaseType === 4) return this.store.getDict('CP00078')
            if (this.diseaseType === 5) return this.store.getDict('CP00076')
            if (this.diseaseType === 6) return this.store.getDict('CP00077')
        },
        otherShow() {
            if (this.diseaseType === 1 || this.diseaseType === 2) {
                return false
            } else {
                return true
            }
        }
    },
    methods: {
        getCode() {
            return new Promise((resolve, reject) => {
                getInspectCode(this.diseaseType).then(res => {
                    resolve(res.data)
                })
            })
        },

        auxiliaryConfirm() {
            let list = []
            this.dictList.forEach(item => {
                let selected = this.form.auxiliaryExamination.filter(e => e === item.value)
                if (selected && selected.length) {
                    list.push(item.name)
                }
            })
            this.form.auxiliaryExaminationName = list.join()
            this.showAuxiliaryExamination = false

            let inspectList = []
            this.form.auxiliaryExamination.forEach(item => {
                const items = this.inspectList.filter(e => e.insType === item)
                inspectList.push({
                    // 病种
                    diseaseType: items[0].diseaseType,
                    // 1-检验 2-检查
                    configType: items[0].configType,
                    insType: items[0].insType,
                    insName: items[0].insName,
                    items: [...items]
                })
            })
            this.viewData = inspectList
        },
        getItemName(item) {
            if (!item.itemName) {
                return ''
            }
            if (item.itemCode) {
                return `${item.itemName}(${item.itemCode}) : `
            } else {
                return item.itemName + ' : '
            }
        },
        getRule(item) {
            if (!item.pattern) {
                return [{ required: true, message: '请录入' }]
            }
            return [
                { required: true, message: '请录入' },
                { pattern: new RegExp(item.pattern), message: item.message }
            ]
        },
        setSelectOption(item, itemType) {
            this.selectOption['show' + itemType] = true
            this.selectOption.item = item
            this.selectOption.dict = item.dictItemList
        },
        onSelectInputConfirm(option) {
            this.selectOption.item.itemValue = option.value
            this.selectOption.show4 = false
        },
        submit() {
            return new Promise((resolve, reject) => {
                let list = []
                this.viewData.forEach(x => {
                    x.items.forEach(y => {
                        list.push({
                            diseaseType: this.diseaseInfo.diseaseType,
                            dataType: y.configType,
                            insType: y.insType,
                            insName: y.insName,
                            itemCode: y.itemCode,
                            itemName: y.itemName,
                            itemType: y.itemType,
                            itemValue: y.itemValue,
                            abnormalSituation: y.abnormalSituation,
                            img: y.img,
                            unit: y.unit
                        })
                    })
                })
                this.otherInspectList.forEach(item => {
                    item.dataType = 2
                    item.diseaseType = this.diseaseType
                    item.itemType = 1
                    item.itemCode = 'otherInspect'
                })
                resolve([
                    ...list,
                    ...this.otherInspectList
                ])
            })
        },
        dataProcess() {
            let { inspectList = [], auxiliaryExamination = [] } = this.form
            let list = []
            inspectList.forEach(x => {
                this.inspectList.forEach(y => {
                    if (x.insType === y.insType && x.itemCode === y.itemCode) {
                        // if (y.insType === 99) {
                        //     y.itemValue = parseInt(x.itemValue)
                        // } else {
                        //     y.itemValue = x.itemValue
                        // }
                        y.itemValue = x.itemValue
                        y.abnormalSituation = x.abnormalSituation
                        y.img = x.img
                        y.picturesList = x.picturesList
                        list.push(y)
                    }
                })
            })
            this.otherInspectList = inspectList.filter(item => item.itemCode === 'otherInspect')

            let array = []
            auxiliaryExamination?.forEach(x => {
                const items = list.filter(e => e.insType === x)
                if (items.length > 0) {
                    array.push({
                        // 病种
                        diseaseType: items[0].diseaseType,
                        // 1-检验 2-检查
                        configType: items[0].configType,
                        insType: items[0].insType,
                        insName: items[0].insName,
                        items: [...items]
                    })
                }
            })
            this.viewData = array
        },

        onPlus() {
            this.otherInspectList.push({})
        },
        onDel(index) {
            this.otherInspectList.splice(index, 1)
        },
    },
    watch: {
        'form.inspectList': {
            async handler() {
                this.inspectList = await this.getCode()
                this.dataProcess()
            },
            immediate: true
        }
    }
}
</script>
<style lang="less" scoped>
.label-title {
    font-size: 13px;
    color: #595959;
    font-weight: 500;
    margin-bottom: 8px;
    &[required] {
        &::after {
            content: '*';
            color: #FF4D4F;
            font-weight: bold;
            margin-left: 4px;
        }
    }
}
.form-input {
    background-color: #FAFAFA;
    padding: 8px 12px;
    border-radius: 8px;
}
.pop-title {
    color: #262626;
    font-size: 16px;
    font-weight: 600;
}
.greyColor {
    color: var(--van-text-color-2);
    font-weight: 400;
}
.blueColor {
    color: #607FF0;
    font-weight: 500;
}
.bg-fa {
    background-color: #FAFAFA;
    padding: 8px;
    border-radius: 8px;
}
.card-input {
    padding: 8px 12px;
    border-radius: 8px;
}
:deep(.van-field) {
    border-radius: .08rem;
    .van-field__label {
        width: auto;
    }
}
.del-btn {
    text-align: center;
    margin: 8px auto;
    padding: 4px 8px;
    border-radius: 38px;
    border: 1px solid #BFBFBF;
    width: 112px;
    color: #8C8C8C;
    font-size: 13px;
}
</style>