src/api/ecg/room/index.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/ecg/room/RoomForm.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/ecg/room/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/api/ecg/room/index.ts
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,41 @@ import request from '@/config/axios' // è¯å®¤åè¯çåº VO export interface RoomVO { id: number // roomNo: string // è¯å®¤ç¼å· bedNo: string // è¯çåºç¼å· } // è¯å®¤åè¯çåº API export const RoomApi = { // æ¥è¯¢è¯å®¤åè¯çåºå页 getRoomPage: async (params: any) => { return await request.get({ url: `/clinic/room/page`, params }) }, // æ¥è¯¢è¯å®¤åè¯çåºè¯¦æ getRoom: async (id: number) => { return await request.get({ url: `/clinic/room/get?id=` + id }) }, // æ°å¢è¯å®¤åè¯çåº createRoom: async (data: RoomVO) => { return await request.post({ url: `/clinic/room/create`, data }) }, // ä¿®æ¹è¯å®¤åè¯çåº updateRoom: async (data: RoomVO) => { return await request.put({ url: `/clinic/room/update`, data }) }, // å é¤è¯å®¤åè¯çåº deleteRoom: async (id: number) => { return await request.delete({ url: `/clinic/room/delete?id=` + id }) }, // 导åºè¯å®¤åè¯çåº Excel exportRoom: async (params) => { return await request.download({ url: `/clinic/room/export-excel`, params }) } } src/views/ecg/room/RoomForm.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,98 @@ <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="è¯å®¤ç¼å·" prop="roomNo"> <el-input v-model="formData.roomNo" placeholder="请è¾å ¥è¯å®¤ç¼å·" /> </el-form-item> <el-form-item label="è¯çåºç¼å·" prop="bedNo"> <el-input v-model="formData.bedNo" placeholder="请è¾å ¥è¯çåºç¼å·" /> </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 { RoomApi, RoomVO } from '@/api/ecg/room' /** è¯å®¤åè¯çåº è¡¨å */ defineOptions({ name: 'RoomForm' }) const { t } = useI18n() // å½é å const message = useMessage() // æ¶æ¯å¼¹çª const dialogVisible = ref(false) // å¼¹çªçæ¯å¦å±ç¤º const dialogTitle = ref('') // å¼¹çªçæ é¢ const formLoading = ref(false) // 表åçå è½½ä¸ï¼1ï¼ä¿®æ¹æ¶çæ°æ®å è½½ï¼2ï¼æäº¤çæé®ç¦ç¨ const formType = ref('') // 表åçç±»åï¼create - æ°å¢ï¼update - ä¿®æ¹ const formData = ref({ id: undefined, roomNo: undefined, bedNo: undefined }) const formRules = reactive({ roomNo: [{ required: true, message: 'è¯å®¤ç¼å·ä¸è½ä¸ºç©º', trigger: 'blur' }], bedNo: [{ required: true, message: 'è¯çåºç¼å·ä¸è½ä¸ºç©º', trigger: 'blur' }] }) 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 RoomApi.getRoom(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 RoomVO if (formType.value === 'create') { await RoomApi.createRoom(data) message.success(t('common.createSuccess')) } else { await RoomApi.updateRoom(data) message.success(t('common.updateSuccess')) } dialogVisible.value = false // åéæä½æåçäºä»¶ emit('success') } finally { formLoading.value = false } } /** é置表å */ const resetForm = () => { formData.value = { id: undefined, roomNo: undefined, bedNo: undefined } formRef.value?.resetFields() } </script> src/views/ecg/room/index.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,197 @@ <template> <ContentWrap> <!-- æç´¢å·¥ä½æ --> <el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px" > <el-form-item label="è¯å®¤ç¼å·" prop="roomNo"> <el-input v-model="queryParams.roomNo" placeholder="请è¾å ¥è¯å®¤ç¼å·" clearable @keyup.enter="handleQuery" class="!w-240px" /> </el-form-item> <el-form-item label="è¯çåºç¼å·" prop="bedNo"> <el-input v-model="queryParams.bedNo" placeholder="请è¾å ¥è¯çåºç¼å·" clearable @keyup.enter="handleQuery" class="!w-240px" /> </el-form-item> <el-form-item label="å建æ¶é´" prop="createTime"> <el-date-picker v-model="queryParams.createTime" 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> <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:room:create']" > <Icon icon="ep:plus" class="mr-5px" /> æ°å¢ </el-button> <el-button type="success" plain @click="handleExport" :loading="exportLoading" v-hasPermi="['ecg:room: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="è¯å®¤ç¼å·" align="center" prop="roomNo" /> <el-table-column label="è¯çåºç¼å·" align="center" prop="bedNo" /> <el-table-column label="å建æ¶é´" align="center" prop="createTime" :formatter="dateFormatter" width="180px" /> <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:room:update']" > ç¼è¾ </el-button> <el-button link type="danger" @click="handleDelete(scope.row.id)" v-hasPermi="['ecg:room: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> <!-- 表åå¼¹çªï¼æ·»å /ä¿®æ¹ --> <RoomForm ref="formRef" @success="getList" /> </template> <script setup lang="ts"> import { dateFormatter } from '@/utils/formatTime' import download from '@/utils/download' import { RoomApi, RoomVO } from '@/api/ecg/room' import RoomForm from './RoomForm.vue' /** è¯å®¤åè¯çåº å表 */ defineOptions({ name: 'Room' }) const message = useMessage() // æ¶æ¯å¼¹çª const { t } = useI18n() // å½é å const loading = ref(true) // å表çå è½½ä¸ const list = ref<RoomVO[]>([]) // åè¡¨çæ°æ® const total = ref(0) // åè¡¨çæ»é¡µæ° const queryParams = reactive({ pageNo: 1, pageSize: 10, roomNo: undefined, bedNo: undefined, createTime: [] }) const queryFormRef = ref() // æç´¢ç表å const exportLoading = ref(false) // 导åºçå è½½ä¸ /** æ¥è¯¢å表 */ const getList = async () => { loading.value = true try { const data = await RoomApi.getRoomPage(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 RoomApi.deleteRoom(id) message.success(t('common.delSuccess')) // å·æ°å表 await getList() } catch {} } /** å¯¼åºæé®æä½ */ const handleExport = async () => { try { // 导åºçäºæ¬¡ç¡®è®¤ await message.exportConfirm() // åèµ·å¯¼åº exportLoading.value = true const data = await RoomApi.exportRoom(queryParams) download.excel(data, 'è¯å®¤åè¯çåº.xls') } catch { } finally { exportLoading.value = false } } /** åå§å **/ onMounted(() => { getList() }) </script>