From ada5846270bed870a03b0607f983d47cb31a3f6d Mon Sep 17 00:00:00 2001 From: eight <641137800@qq.com> Date: 星期二, 06 八月 2024 20:58:04 +0800 Subject: [PATCH] 新增 预约功能 step 1 --- src/views/ecg/appointment/index.vue | 412 ++++++++++++++++++++++++++++++++++ src/api/ecg/appointment/index.ts | 56 ++++ src/views/ecg/appointment/AppointmentForm.vue | 218 ++++++++++++++++++ 3 files changed, 686 insertions(+), 0 deletions(-) diff --git a/src/api/ecg/appointment/index.ts b/src/api/ecg/appointment/index.ts new file mode 100644 index 0000000..d980b96 --- /dev/null +++ b/src/api/ecg/appointment/index.ts @@ -0,0 +1,56 @@ +import request from '@/config/axios' + +// 棰勭害 VO +export interface AppointmentVO { + patId: string // 鎮h�呯紪鍙� + patName: string // 鎮h�呭鍚� + patGender: boolean // 鎮h�呮�у埆 + patBirthday: Date // 鎮h�呯敓鏃� + patMobile: string // 鎮h�呮墜鏈� + patPhone: string // 鎮h�呯數璇� + patIdentityId: string // 韬唤璇佸彿 + patAddr: string // 鎮h�呭湴鍧� + patDeptCode: string // 鎮h�呮墍鍦ㄧ瀹や唬鐮� + patDeptDesc: string // 鎮h�呮墍鍦ㄧ瀹ゅ悕绉� + patWardCode: string // 鎮h�呮墍鍦ㄧ梾鍖轰唬鐮� + patWardDesc: string // 鎮h�呮墍鍦ㄧ梾鍖哄悕绉� + patBedNo: string // 搴婂彿 + bookId: string // 棰勭害缂栧彿 + bookPeriodStart: Date // 棰勭害妫�鏌ユ椂闂存 + bookPeriodEnd: Date // 棰勭害妫�鏌ユ椂闂存 + bookTime: Date // 棰勭害鍙戠敓鏃堕棿 + bookCheckType: boolean // 棰勭害妫�鏌ョ被鍨� +} + +// 棰勭害 API +export const AppointmentApi = { + // 鏌ヨ棰勭害鍒嗛〉 + getAppointmentPage: async (params: any) => { + return await request.get({ url: `/ecg/appointment/page`, params }) + }, + + // 鏌ヨ棰勭害璇︽儏 + getAppointment: async (id: number) => { + return await request.get({ url: `/ecg/appointment/get?id=` + id }) + }, + + // 鏂板棰勭害 + createAppointment: async (data: AppointmentVO) => { + return await request.post({ url: `/ecg/appointment/create`, data }) + }, + + // 淇敼棰勭害 + updateAppointment: async (data: AppointmentVO) => { + return await request.put({ url: `/ecg/appointment/update`, data }) + }, + + // 鍒犻櫎棰勭害 + deleteAppointment: async (id: number) => { + return await request.delete({ url: `/ecg/appointment/delete?id=` + id }) + }, + + // 瀵煎嚭棰勭害 Excel + exportAppointment: async (params) => { + return await request.download({ url: `/ecg/appointment/export-excel`, params }) + } +} \ No newline at end of file diff --git a/src/views/ecg/appointment/AppointmentForm.vue b/src/views/ecg/appointment/AppointmentForm.vue new file mode 100644 index 0000000..694fff4 --- /dev/null +++ b/src/views/ecg/appointment/AppointmentForm.vue @@ -0,0 +1,218 @@ +<template> + <Dialog :title="dialogTitle" v-model="dialogVisible"> + <el-form + ref="formRef" + :model="formData" + :rules="formRules" + label-width="100px" + v-loading="formLoading" + > + <el-form-item label="鎮h�呯紪鍙�" prop="patId"> + <el-input v-model="formData.patId" placeholder="璇疯緭鍏ユ偅鑰呯紪鍙�" /> + </el-form-item> + <el-form-item label="鎮h�呭鍚�" prop="patName"> + <el-input v-model="formData.patName" placeholder="璇疯緭鍏ユ偅鑰呭鍚�" /> + </el-form-item> + <el-form-item label="鎮h�呮�у埆" prop="patGender"> + <el-radio-group v-model="formData.patGender"> + <el-radio + v-for="dict in getBoolDictOptions(DICT_TYPE.SYSTEM_USER_SEX)" + :key="dict.value" + :label="dict.value" + > + {{ dict.label }} + </el-radio> + </el-radio-group> + </el-form-item> + <el-form-item label="鎮h�呯敓鏃�" prop="patBirthday"> + <el-date-picker + v-model="formData.patBirthday" + type="date" + value-format="x" + placeholder="閫夋嫨鎮h�呯敓鏃�" + /> + </el-form-item> + <el-form-item label="鎮h�呮墜鏈�" prop="patMobile"> + <el-input v-model="formData.patMobile" placeholder="璇疯緭鍏ユ偅鑰呮墜鏈�" /> + </el-form-item> + <el-form-item label="鎮h�呯數璇�" prop="patPhone"> + <el-input v-model="formData.patPhone" placeholder="璇疯緭鍏ユ偅鑰呯數璇�" /> + </el-form-item> + <el-form-item label="韬唤璇佸彿" prop="patIdentityId"> + <el-input v-model="formData.patIdentityId" placeholder="璇疯緭鍏ヨ韩浠借瘉鍙�" /> + </el-form-item> + <el-form-item label="鎮h�呭湴鍧�" prop="patAddr"> + <el-input v-model="formData.patAddr" placeholder="璇疯緭鍏ユ偅鑰呭湴鍧�" /> + </el-form-item> + <el-form-item label="鎮h�呮墍鍦ㄧ瀹や唬鐮�" prop="patDeptCode"> + <el-input v-model="formData.patDeptCode" placeholder="璇疯緭鍏ユ偅鑰呮墍鍦ㄧ瀹や唬鐮�" /> + </el-form-item> + <el-form-item label="鎮h�呮墍鍦ㄧ瀹ゅ悕绉�" prop="patDeptDesc"> + <el-input v-model="formData.patDeptDesc" placeholder="璇疯緭鍏ユ偅鑰呮墍鍦ㄧ瀹ゅ悕绉�" /> + </el-form-item> + <el-form-item label="鎮h�呮墍鍦ㄧ梾鍖轰唬鐮�" prop="patWardCode"> + <el-input v-model="formData.patWardCode" placeholder="璇疯緭鍏ユ偅鑰呮墍鍦ㄧ梾鍖轰唬鐮�" /> + </el-form-item> + <el-form-item label="鎮h�呮墍鍦ㄧ梾鍖哄悕绉�" prop="patWardDesc"> + <el-input v-model="formData.patWardDesc" placeholder="璇疯緭鍏ユ偅鑰呮墍鍦ㄧ梾鍖哄悕绉�" /> + </el-form-item> + <el-form-item label="搴婂彿" prop="patBedNo"> + <el-input v-model="formData.patBedNo" placeholder="璇疯緭鍏ュ簥鍙�" /> + </el-form-item> + <el-form-item label="棰勭害缂栧彿" prop="bookId"> + <el-input v-model="formData.bookId" placeholder="璇疯緭鍏ラ绾︾紪鍙�" /> + </el-form-item> + <el-form-item label="棰勭害妫�鏌ユ椂闂存" prop="bookPeriodStart"> + <el-date-picker + v-model="formData.bookPeriodStart" + type="date" + value-format="x" + placeholder="閫夋嫨棰勭害妫�鏌ユ椂闂存" + /> + </el-form-item> + <el-form-item label="棰勭害妫�鏌ユ椂闂存" prop="bookPeriodEnd"> + <el-date-picker + v-model="formData.bookPeriodEnd" + type="date" + value-format="x" + placeholder="閫夋嫨棰勭害妫�鏌ユ椂闂存" + /> + </el-form-item> + <el-form-item label="棰勭害鍙戠敓鏃堕棿" prop="bookTime"> + <el-date-picker + v-model="formData.bookTime" + type="date" + value-format="x" + placeholder="閫夋嫨棰勭害鍙戠敓鏃堕棿" + /> + </el-form-item> + <el-form-item label="棰勭害妫�鏌ョ被鍨�" prop="bookCheckType"> + <el-select v-model="formData.bookCheckType" placeholder="璇烽�夋嫨棰勭害妫�鏌ョ被鍨�"> + <el-option + v-for="dict in getBoolDictOptions(DICT_TYPE.ECG_CHECK_TYPE)" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> + </el-form-item> + </el-form> + <template #footer> + <el-button @click="submitForm" type="primary" :disabled="formLoading">纭� 瀹�</el-button> + <el-button @click="dialogVisible = false">鍙� 娑�</el-button> + </template> + </Dialog> +</template> +<script setup lang="ts"> +import { getBoolDictOptions, DICT_TYPE } from '@/utils/dict' +import { AppointmentApi, AppointmentVO } from '@/api/ecg/appointment' + +/** 棰勭害 琛ㄥ崟 */ +defineOptions({ name: 'AppointmentForm' }) + +const { t } = useI18n() // 鍥介檯鍖� +const message = useMessage() // 娑堟伅寮圭獥 + +const dialogVisible = ref(false) // 寮圭獥鐨勬槸鍚﹀睍绀� +const dialogTitle = ref('') // 寮圭獥鐨勬爣棰� +const formLoading = ref(false) // 琛ㄥ崟鐨勫姞杞戒腑锛�1锛変慨鏀规椂鐨勬暟鎹姞杞斤紱2锛夋彁浜ょ殑鎸夐挳绂佺敤 +const formType = ref('') // 琛ㄥ崟鐨勭被鍨嬶細create - 鏂板锛泆pdate - 淇敼 +const formData = ref({ + patId: undefined, + patName: undefined, + patGender: undefined, + patBirthday: undefined, + patMobile: undefined, + patPhone: undefined, + patIdentityId: undefined, + patAddr: undefined, + patDeptCode: undefined, + patDeptDesc: undefined, + patWardCode: undefined, + patWardDesc: undefined, + patBedNo: undefined, + bookId: undefined, + bookPeriodStart: undefined, + bookPeriodEnd: undefined, + bookTime: undefined, + bookCheckType: undefined +}) +const formRules = reactive({ + patId: [{ required: true, message: '鎮h�呯紪鍙蜂笉鑳戒负绌�', trigger: 'blur' }], + patName: [{ required: true, message: '鎮h�呭鍚嶄笉鑳戒负绌�', trigger: 'blur' }], + patGender: [{ required: true, message: '鎮h�呮�у埆涓嶈兘涓虹┖', trigger: 'blur' }], + bookId: [{ required: true, message: '棰勭害缂栧彿涓嶈兘涓虹┖', trigger: 'blur' }], + bookPeriodStart: [{ required: true, message: '棰勭害妫�鏌ユ椂闂存涓嶈兘涓虹┖', trigger: 'blur' }], + bookPeriodEnd: [{ required: true, message: '棰勭害妫�鏌ユ椂闂存涓嶈兘涓虹┖', trigger: 'blur' }], + bookTime: [{ required: true, message: '棰勭害鍙戠敓鏃堕棿涓嶈兘涓虹┖', trigger: 'blur' }], + bookCheckType: [{ required: true, message: '棰勭害妫�鏌ョ被鍨嬩笉鑳戒负绌�', trigger: 'change' }] +}) +const formRef = ref() // 琛ㄥ崟 Ref + +/** 鎵撳紑寮圭獥 */ +const open = async (type: string, id?: number) => { + dialogVisible.value = true + dialogTitle.value = t('action.' + type) + formType.value = type + resetForm() + // 淇敼鏃讹紝璁剧疆鏁版嵁 + if (id) { + formLoading.value = true + try { + formData.value = await AppointmentApi.getAppointment(id) + } finally { + formLoading.value = false + } + } +} +defineExpose({ open }) // 鎻愪緵 open 鏂规硶锛岀敤浜庢墦寮�寮圭獥 + +/** 鎻愪氦琛ㄥ崟 */ +const emit = defineEmits(['success']) // 瀹氫箟 success 浜嬩欢锛岀敤浜庢搷浣滄垚鍔熷悗鐨勫洖璋� +const submitForm = async () => { + // 鏍¢獙琛ㄥ崟 + await formRef.value.validate() + // 鎻愪氦璇锋眰 + formLoading.value = true + try { + const data = formData.value as unknown as AppointmentVO + if (formType.value === 'create') { + await AppointmentApi.createAppointment(data) + message.success(t('common.createSuccess')) + } else { + await AppointmentApi.updateAppointment(data) + message.success(t('common.updateSuccess')) + } + dialogVisible.value = false + // 鍙戦�佹搷浣滄垚鍔熺殑浜嬩欢 + emit('success') + } finally { + formLoading.value = false + } +} + +/** 閲嶇疆琛ㄥ崟 */ +const resetForm = () => { + formData.value = { + patId: undefined, + patName: undefined, + patGender: undefined, + patBirthday: undefined, + patMobile: undefined, + patPhone: undefined, + patIdentityId: undefined, + patAddr: undefined, + patDeptCode: undefined, + patDeptDesc: undefined, + patWardCode: undefined, + patWardDesc: undefined, + patBedNo: undefined, + bookId: undefined, + bookPeriodStart: undefined, + bookPeriodEnd: undefined, + bookTime: undefined, + bookCheckType: undefined + } + formRef.value?.resetFields() +} +</script> \ No newline at end of file diff --git a/src/views/ecg/appointment/index.vue b/src/views/ecg/appointment/index.vue new file mode 100644 index 0000000..54c7f47 --- /dev/null +++ b/src/views/ecg/appointment/index.vue @@ -0,0 +1,412 @@ +<template> + <ContentWrap> + <!-- 鎼滅储宸ヤ綔鏍� --> + <el-form + class="-mb-15px" + :model="queryParams" + ref="queryFormRef" + :inline="true" + label-width="68px" + > + <el-form-item label="鎮h�呯紪鍙�" prop="patId"> + <el-input + v-model="queryParams.patId" + placeholder="璇疯緭鍏ユ偅鑰呯紪鍙�" + clearable + @keyup.enter="handleQuery" + class="!w-240px" + /> + </el-form-item> + <el-form-item label="鎮h�呭鍚�" prop="patName"> + <el-input + v-model="queryParams.patName" + placeholder="璇疯緭鍏ユ偅鑰呭鍚�" + clearable + @keyup.enter="handleQuery" + class="!w-240px" + /> + </el-form-item> + <el-form-item label="鎮h�呮�у埆" prop="patGender"> + <el-select + v-model="queryParams.patGender" + placeholder="璇烽�夋嫨鎮h�呮�у埆" + clearable + class="!w-240px" + > + <el-option + v-for="dict in getBoolDictOptions(DICT_TYPE.SYSTEM_USER_SEX)" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> + </el-form-item> + <el-form-item label="鎮h�呯敓鏃�" prop="patBirthday"> + <el-date-picker + v-model="queryParams.patBirthday" + value-format="YYYY-MM-DD" + type="date" + placeholder="閫夋嫨鎮h�呯敓鏃�" + clearable + class="!w-240px" + /> + </el-form-item> + <el-form-item label="鎮h�呮墜鏈�" prop="patMobile"> + <el-input + v-model="queryParams.patMobile" + placeholder="璇疯緭鍏ユ偅鑰呮墜鏈�" + clearable + @keyup.enter="handleQuery" + class="!w-240px" + /> + </el-form-item> + <el-form-item label="鎮h�呯數璇�" prop="patPhone"> + <el-input + v-model="queryParams.patPhone" + placeholder="璇疯緭鍏ユ偅鑰呯數璇�" + clearable + @keyup.enter="handleQuery" + class="!w-240px" + /> + </el-form-item> + <el-form-item label="韬唤璇佸彿" prop="patIdentityId"> + <el-input + v-model="queryParams.patIdentityId" + placeholder="璇疯緭鍏ヨ韩浠借瘉鍙�" + clearable + @keyup.enter="handleQuery" + class="!w-240px" + /> + </el-form-item> + <el-form-item label="鎮h�呭湴鍧�" prop="patAddr"> + <el-input + v-model="queryParams.patAddr" + placeholder="璇疯緭鍏ユ偅鑰呭湴鍧�" + clearable + @keyup.enter="handleQuery" + class="!w-240px" + /> + </el-form-item> + <el-form-item label="鎮h�呮墍鍦ㄧ瀹や唬鐮�" prop="patDeptCode"> + <el-input + v-model="queryParams.patDeptCode" + placeholder="璇疯緭鍏ユ偅鑰呮墍鍦ㄧ瀹や唬鐮�" + clearable + @keyup.enter="handleQuery" + class="!w-240px" + /> + </el-form-item> + <el-form-item label="鎮h�呮墍鍦ㄧ瀹ゅ悕绉�" prop="patDeptDesc"> + <el-input + v-model="queryParams.patDeptDesc" + placeholder="璇疯緭鍏ユ偅鑰呮墍鍦ㄧ瀹ゅ悕绉�" + clearable + @keyup.enter="handleQuery" + class="!w-240px" + /> + </el-form-item> + <el-form-item label="鎮h�呮墍鍦ㄧ梾鍖轰唬鐮�" prop="patWardCode"> + <el-input + v-model="queryParams.patWardCode" + placeholder="璇疯緭鍏ユ偅鑰呮墍鍦ㄧ梾鍖轰唬鐮�" + clearable + @keyup.enter="handleQuery" + class="!w-240px" + /> + </el-form-item> + <el-form-item label="鎮h�呮墍鍦ㄧ梾鍖哄悕绉�" prop="patWardDesc"> + <el-input + v-model="queryParams.patWardDesc" + placeholder="璇疯緭鍏ユ偅鑰呮墍鍦ㄧ梾鍖哄悕绉�" + clearable + @keyup.enter="handleQuery" + class="!w-240px" + /> + </el-form-item> + <el-form-item label="搴婂彿" prop="patBedNo"> + <el-input + v-model="queryParams.patBedNo" + placeholder="璇疯緭鍏ュ簥鍙�" + clearable + @keyup.enter="handleQuery" + class="!w-240px" + /> + </el-form-item> + <el-form-item label="棰勭害缂栧彿" prop="bookId"> + <el-input + v-model="queryParams.bookId" + placeholder="璇疯緭鍏ラ绾︾紪鍙�" + clearable + @keyup.enter="handleQuery" + class="!w-240px" + /> + </el-form-item> + <el-form-item label="棰勭害妫�鏌ユ椂闂存" prop="bookPeriodStart"> + <el-date-picker + v-model="queryParams.bookPeriodStart" + value-format="YYYY-MM-DD" + type="date" + placeholder="閫夋嫨棰勭害妫�鏌ユ椂闂存" + clearable + class="!w-240px" + /> + </el-form-item> + <el-form-item label="棰勭害妫�鏌ユ椂闂存" prop="bookPeriodEnd"> + <el-date-picker + v-model="queryParams.bookPeriodEnd" + value-format="YYYY-MM-DD" + type="date" + placeholder="閫夋嫨棰勭害妫�鏌ユ椂闂存" + clearable + class="!w-240px" + /> + </el-form-item> + <el-form-item label="棰勭害鍙戠敓鏃堕棿" prop="bookTime"> + <el-date-picker + v-model="queryParams.bookTime" + value-format="YYYY-MM-DD HH:mm:ss" + type="daterange" + start-placeholder="寮�濮嬫棩鏈�" + end-placeholder="缁撴潫鏃ユ湡" + :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" + class="!w-220px" + /> + </el-form-item> + <el-form-item label="棰勭害妫�鏌ョ被鍨�" prop="bookCheckType"> + <el-select + v-model="queryParams.bookCheckType" + placeholder="璇烽�夋嫨棰勭害妫�鏌ョ被鍨�" + clearable + class="!w-240px" + > + <el-option + v-for="dict in getBoolDictOptions(DICT_TYPE.ECG_CHECK_TYPE)" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> + </el-form-item> + <el-form-item label="棰勭害鏉ユ簮锛歑绯荤粺銆佹姢澹墜鍔ㄩ绾�" prop="bookSrc"> + <el-input + v-model="queryParams.bookSrc" + placeholder="璇疯緭鍏ラ绾︽潵婧愶細X绯荤粺銆佹姢澹墜鍔ㄩ绾�" + clearable + @keyup.enter="handleQuery" + class="!w-240px" + /> + </el-form-item> + <el-form-item> + <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 鎼滅储</el-button> + <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 閲嶇疆</el-button> + <el-button + type="primary" + plain + @click="openForm('create')" + v-hasPermi="['ecg:appointment:create']" + > + <Icon icon="ep:plus" class="mr-5px" /> 鏂板 + </el-button> + <el-button + type="success" + plain + @click="handleExport" + :loading="exportLoading" + v-hasPermi="['ecg:appointment:export']" + > + <Icon icon="ep:download" class="mr-5px" /> 瀵煎嚭 + </el-button> + </el-form-item> + </el-form> + </ContentWrap> + + <!-- 鍒楄〃 --> + <ContentWrap> + <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> + <el-table-column label="鎮h�呯紪鍙�" align="center" prop="patId" /> + <el-table-column label="鎮h�呭鍚�" align="center" prop="patName" /> + <el-table-column label="鎮h�呮�у埆" align="center" prop="patGender"> + <template #default="scope"> + <dict-tag :type="DICT_TYPE.SYSTEM_USER_SEX" :value="scope.row.patGender" /> + </template> + </el-table-column> + <el-table-column label="鎮h�呯敓鏃�" align="center" prop="patBirthday" /> + <el-table-column label="鎮h�呮墜鏈�" align="center" prop="patMobile" /> + <el-table-column label="鎮h�呯數璇�" align="center" prop="patPhone" /> + <el-table-column label="韬唤璇佸彿" align="center" prop="patIdentityId" /> + <el-table-column label="鎮h�呭湴鍧�" align="center" prop="patAddr" /> + <el-table-column label="鎮h�呮墍鍦ㄧ瀹や唬鐮�" align="center" prop="patDeptCode" /> + <el-table-column label="鎮h�呮墍鍦ㄧ瀹ゅ悕绉�" align="center" prop="patDeptDesc" /> + <el-table-column label="鎮h�呮墍鍦ㄧ梾鍖轰唬鐮�" align="center" prop="patWardCode" /> + <el-table-column label="鎮h�呮墍鍦ㄧ梾鍖哄悕绉�" align="center" prop="patWardDesc" /> + <el-table-column label="搴婂彿" align="center" prop="patBedNo" /> + <el-table-column label="棰勭害缂栧彿" align="center" prop="bookId" /> + <el-table-column + label="棰勭害妫�鏌ユ椂闂存" + align="center" + prop="bookPeriodStart" + :formatter="dateFormatter" + width="180px" + /> + <el-table-column + label="棰勭害妫�鏌ユ椂闂存" + align="center" + prop="bookPeriodEnd" + :formatter="dateFormatter" + width="180px" + /> + <el-table-column + label="棰勭害鍙戠敓鏃堕棿" + align="center" + prop="bookTime" + :formatter="dateFormatter" + width="180px" + /> + <el-table-column label="棰勭害妫�鏌ョ被鍨�" align="center" prop="bookCheckType"> + <template #default="scope"> + <dict-tag :type="DICT_TYPE.ECG_CHECK_TYPE" :value="scope.row.bookCheckType" /> + </template> + </el-table-column> + <el-table-column label="棰勭害鏉ユ簮锛歑绯荤粺銆佹姢澹墜鍔ㄩ绾�" align="center" prop="bookSrc" /> + <el-table-column label="鎿嶄綔" align="center" min-width="120px"> + <template #default="scope"> + <el-button + link + type="primary" + @click="openForm('update', scope.row.id)" + v-hasPermi="['ecg:appointment:update']" + > + 缂栬緫 + </el-button> + <el-button + link + type="danger" + @click="handleDelete(scope.row.id)" + v-hasPermi="['ecg:appointment:delete']" + > + 鍒犻櫎 + </el-button> + </template> + </el-table-column> + </el-table> + <!-- 鍒嗛〉 --> + <Pagination + :total="total" + v-model:page="queryParams.pageNo" + v-model:limit="queryParams.pageSize" + @pagination="getList" + /> + </ContentWrap> + + <!-- 琛ㄥ崟寮圭獥锛氭坊鍔�/淇敼 --> + <AppointmentForm ref="formRef" @success="getList" /> +</template> + +<script setup lang="ts"> +import { getBoolDictOptions, DICT_TYPE } from '@/utils/dict' +import { dateFormatter } from '@/utils/formatTime' +import download from '@/utils/download' +import { AppointmentApi, AppointmentVO } from '@/api/ecg/appointment' +import AppointmentForm from './AppointmentForm.vue' + +/** 棰勭害 鍒楄〃 */ +defineOptions({ name: 'Appointment' }) + +const message = useMessage() // 娑堟伅寮圭獥 +const { t } = useI18n() // 鍥介檯鍖� + +const loading = ref(true) // 鍒楄〃鐨勫姞杞戒腑 +const list = ref<AppointmentVO[]>([]) // 鍒楄〃鐨勬暟鎹� +const total = ref(0) // 鍒楄〃鐨勬�婚〉鏁� +const queryParams = reactive({ + pageNo: 1, + pageSize: 10, + patId: undefined, + patName: undefined, + patGender: undefined, + patBirthday: undefined, + patBirthday: [], + patMobile: undefined, + patPhone: undefined, + patIdentityId: undefined, + patAddr: undefined, + patDeptCode: undefined, + patDeptDesc: undefined, + patWardCode: undefined, + patWardDesc: undefined, + patBedNo: undefined, + bookId: undefined, + bookPeriodStart: undefined, + bookPeriodStart: [], + bookPeriodEnd: undefined, + bookPeriodEnd: [], + bookTime: [], + bookCheckType: undefined, + bookSrc: undefined +}) +const queryFormRef = ref() // 鎼滅储鐨勮〃鍗� +const exportLoading = ref(false) // 瀵煎嚭鐨勫姞杞戒腑 + +/** 鏌ヨ鍒楄〃 */ +const getList = async () => { + loading.value = true + try { + const data = await AppointmentApi.getAppointmentPage(queryParams) + list.value = data.list + total.value = data.total + } finally { + loading.value = false + } +} + +/** 鎼滅储鎸夐挳鎿嶄綔 */ +const handleQuery = () => { + queryParams.pageNo = 1 + getList() +} + +/** 閲嶇疆鎸夐挳鎿嶄綔 */ +const resetQuery = () => { + queryFormRef.value.resetFields() + handleQuery() +} + +/** 娣诲姞/淇敼鎿嶄綔 */ +const formRef = ref() +const openForm = (type: string, id?: number) => { + formRef.value.open(type, id) +} + +/** 鍒犻櫎鎸夐挳鎿嶄綔 */ +const handleDelete = async (id: number) => { + try { + // 鍒犻櫎鐨勪簩娆$‘璁� + await message.delConfirm() + // 鍙戣捣鍒犻櫎 + await AppointmentApi.deleteAppointment(id) + message.success(t('common.delSuccess')) + // 鍒锋柊鍒楄〃 + await getList() + } catch {} +} + +/** 瀵煎嚭鎸夐挳鎿嶄綔 */ +const handleExport = async () => { + try { + // 瀵煎嚭鐨勪簩娆$‘璁� + await message.exportConfirm() + // 鍙戣捣瀵煎嚭 + exportLoading.value = true + const data = await AppointmentApi.exportAppointment(queryParams) + download.excel(data, '棰勭害.xls') + } catch { + } finally { + exportLoading.value = false + } +} + +/** 鍒濆鍖� **/ +onMounted(() => { + getList() +}) +</script> \ No newline at end of file -- Gitblit v1.9.3