BaseInfo.vue 6.27 KB
<template>
    <div>
        <van-form ref='form'>
            <archive-common :info='info' ref='archive'></archive-common>
            <div class='flex justify-between items-center mt-5 mb-20'>
                <div class='title'>筛查信息</div>
                <div>
                    <van-button plain size='small' type='primary' @click='toLast'>引入上一次筛查数据</van-button>
                </div>
            </div>

            <div class='label-title mt-5'>筛查病种</div>
            <van-field
                v-model='form.diseaseArraysName'
                readonly
                is-link
                placeholder='请选择'
                class='input-back mt-2 form-input'
                :rules='rules.diseaseArraysName'
                @click='showGroupsArrays= true'
            >
                <template #input>
                    <span class='text-end' v-if='form.diseaseArraysName'>{{ form.diseaseArraysName }}</span>
                    <span class='text-end' v-if='!form.diseaseArraysName' style='color: #dfdfe1'>请选择</span>
                </template>
            </van-field>
            <van-popup v-model:show='showGroupsArrays' position='bottom'>
                <div class='p-4'>
                    <div class='flex justify-between items-center mb-4 pop-title'>
                        <div class='greyColor' @click='showGroupsArrays = false' style='font-weight: 400'>取消</div>
                        <div>筛查病种(可多选)</div>
                        <div class='blueColor' @click='groupsArraysConfirm'>确定</div>
                    </div>
                    <CheckBtn multiple
                              column-1
                              :options='groupArrList'
                              v-model:value='checkGroupsArrays'
                              :fieldNames="{text: 'name', value: 'value'}" />
                </div>
            </van-popup>
        </van-form>
    </div>
</template>

<script>
import ArchiveCommon from '@/doctor/components/archiveCommon/archiveCommon'
import { useStore } from '@/doctor/store'
import CheckBtn from '@/doctor/components/checkBtn/CheckBtn'

export default {
    name: 'BaseInfo',
    props: {
        info: Object
    },
    components: { CheckBtn, ArchiveCommon },
    data() {
        return {
            store: useStore(),
            form: {
                diseaseArrays: [],
                diseaseArraysName: undefined
            },
            rules: {
                diseaseArraysName: [{ required: true, message: '请选择' }]
            },
            showGroupsArrays: false,
            //筛查病种组件双向绑定变量
            checkGroupsArrays: []
        }
    },
    computed: {
        //筛查病种
        groupArrList() {
            let res = []
            res = this.store.getDict('CP00117')
            return res
        }
    },
    watch: {
        'info': {
            handler() {
                this.init()
            },
            immediate: true
        }
    },
    methods: {
        init() {
            if (!this.info.id) {
                //是否是引用上一次复筛数据
                if (this.info.flag && this.info.flag == 'lastInfo') {
                    this.setDis(this.info.diseaseArrays)
                } else {//新增时
                    this.setDis([1,2,3,4,5,6,7])
                }
            } else {
                this.setDis(this.info.diseaseArrays)
            }
        },
        setDis(diseaseArrays) {
            if (diseaseArrays) {
                this.form.diseaseArrays = diseaseArrays
                this.checkGroupsArrays = this.form.diseaseArrays
                let res = []
                this.groupArrList.forEach(item => {
                    let list = this.form.diseaseArrays.filter(i => i == item.value)
                    if (list && list.length) {
                        res.push(item.name)
                    }
                })
                this.form.diseaseArraysName = res.join()
            }
        },
        groupsArraysConfirm() {
            let res = []
            this.groupArrList.forEach(item => {
                let selected = this.checkGroupsArrays.filter(i => i == item.value)
                if (selected && selected.length) {
                    res.push(item.name)
                }
            })
            if (this.checkGroupsArrays && this.checkGroupsArrays.length) {
                this.form.diseaseArrays = this.checkGroupsArrays
                this.form.diseaseArraysName = res.join()
            } else {
                this.form.diseaseArrays = []
                this.form.diseaseArraysName = ''
            }
            this.showGroupsArrays = false
        },
        toLast() {
          this.$emit('getLast', true)
        },
        async onSubmit() {
            let baseInfo = {}
            try {
                 baseInfo = await this.$refs.archive.onSubmit()
            } catch (e) {
            }
            return new Promise((resolve, reject) => {
                this.$refs.form.validate().then(() => {
                    let par = {
                        residentsRecord: {
                            ...this.info,
                            ...baseInfo,
                            id: this.info.personId
                        },
                        diseaseArrays: this.form.diseaseArrays
                    }
                    resolve(par)
                }).catch((e) => {
                    console.warn('baseInfo error', e)
                })
            })
        }
    }
}
</script>

<style scoped lang='less'>
.title {
    font-weight: bold;
}
.mb-20 {
    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;
}

.pop-title {
    color: #262626;
    font-size: 16px;
    line-height: 24px;
    font-weight: bold;
}

:deep(.van-popup) {
    min-height: 30% !important;
}
:deep(.van-cell-group--inset) {
    overflow: visible;
}

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

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