|
@@ -0,0 +1,312 @@
|
|
|
|
|
+<template>
|
|
|
|
|
+ <Dialog
|
|
|
|
|
+ style="max-width: 100vw; min-width: 76vw"
|
|
|
|
|
+ v-model="dialogVisible"
|
|
|
|
|
+ :title="title"
|
|
|
|
|
+ scroll
|
|
|
|
|
+ class="BloodGlucoseForm"
|
|
|
|
|
+ noPaddingEL="BloodGlucoseForm"
|
|
|
|
|
+ @close="handleClosed"
|
|
|
|
|
+ >
|
|
|
|
|
+ <el-form
|
|
|
|
|
+ v-loading="loading"
|
|
|
|
|
+ ref="formRef"
|
|
|
|
|
+ :model="dataForm"
|
|
|
|
|
+ :rules="isDetail ? [] : dataRule"
|
|
|
|
|
+ :label-width="labelWidth"
|
|
|
|
|
+ >
|
|
|
|
|
+ <div class="info-wrap">
|
|
|
|
|
+ <el-row>
|
|
|
|
|
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
|
|
|
|
|
+ <el-form-item label="长者姓名" prop="elderId">
|
|
|
|
|
+ <search-the-elderly
|
|
|
|
|
+ ref="selectElderRef"
|
|
|
|
|
+ :disabled="isDetail"
|
|
|
|
|
+ @update_elder="elderUp"
|
|
|
|
|
+ v-model="dataForm.elderName"
|
|
|
|
|
+ :tId="dataForm.tenantId"
|
|
|
|
|
+ />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
|
|
|
|
|
+ <el-form-item label="档案号" prop="fileNumber">
|
|
|
|
|
+ <el-input v-if="!isDetail" v-model="dataForm.fileNumber" disabled />
|
|
|
|
|
+ <el-text v-else>{{ dataForm.fileNumber }}</el-text>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ </el-row>
|
|
|
|
|
+
|
|
|
|
|
+ <el-row>
|
|
|
|
|
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
|
|
|
|
|
+ <el-form-item label="性别" prop="elderSex">
|
|
|
|
|
+ <el-input v-if="!isDetail" v-model="dataForm.elderSex" disabled />
|
|
|
|
|
+ <el-text v-else>{{ dataForm.elderSex }}</el-text>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
|
|
|
|
|
+ <el-form-item label="年龄" prop="elderAge">
|
|
|
|
|
+ <el-input v-if="!isDetail" v-model="dataForm.elderAge" disabled />
|
|
|
|
|
+ <el-text v-else>{{ dataForm.elderAge }}</el-text>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ </el-row>
|
|
|
|
|
+
|
|
|
|
|
+ <el-row>
|
|
|
|
|
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
|
|
|
|
|
+ <el-form-item label="入院日期" prop="checkInTime">
|
|
|
|
|
+ <el-input
|
|
|
|
|
+ v-if="!isDetail"
|
|
|
|
|
+ :model-value="
|
|
|
|
|
+ dayjs(dataForm.checkInTime).format('YYYY-MM-DD') === 'Invalid Date'
|
|
|
|
|
+ ? ''
|
|
|
|
|
+ : dayjs(dataForm.checkInTime).format('YYYY-MM-DD')
|
|
|
|
|
+ "
|
|
|
|
|
+ disabled
|
|
|
|
|
+ />
|
|
|
|
|
+ <el-text v-else>{{ dayjs(dataForm.checkInTime).format('YYYY-MM-DD') }}</el-text>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
|
|
|
|
|
+ <el-form-item label="床位号" prop="bedName">
|
|
|
|
|
+ <el-input v-if="!isDetail" v-model="dataForm.bedName" disabled />
|
|
|
|
|
+ <el-text v-else>{{ dataForm.bedName }}</el-text>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ </el-row>
|
|
|
|
|
+
|
|
|
|
|
+ <el-row>
|
|
|
|
|
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
|
|
|
|
|
+ <el-form-item label="护理级别" prop="nurseLevelName">
|
|
|
|
|
+ <el-input v-if="!isDetail" v-model="dataForm.nurseLevelName" disabled />
|
|
|
|
|
+ <el-text v-else>{{ dataForm.nurseLevelName }}</el-text>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
|
|
|
|
|
+ <el-form-item label="记录日期" prop="recordDate">
|
|
|
|
|
+ <el-date-picker
|
|
|
|
|
+ size="default"
|
|
|
|
|
+ style="width: 100%"
|
|
|
|
|
+ v-if="!isDetail"
|
|
|
|
|
+ v-model="dataForm.recordDate"
|
|
|
|
|
+ type="date"
|
|
|
|
|
+ :clearable="false"
|
|
|
|
|
+ :editable="false"
|
|
|
|
|
+ placeholder="选择记录日期"
|
|
|
|
|
+ value-format="YYYY-MM-DD"
|
|
|
|
|
+ format="YYYY-MM-DD"
|
|
|
|
|
+ date-format="YYYY-MM-DD"
|
|
|
|
|
+ />
|
|
|
|
|
+ <el-text v-else>{{ dataForm.recordDate }}</el-text>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ </el-row>
|
|
|
|
|
+
|
|
|
|
|
+ <el-row>
|
|
|
|
|
+ <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
|
|
|
|
|
+ <el-form-item label="血糖值" prop="bloodGlucoseValue">
|
|
|
|
|
+ <el-input-number
|
|
|
|
|
+ v-if="!isDetail"
|
|
|
|
|
+ v-model="dataForm.bloodGlucoseValue"
|
|
|
|
|
+ :min="0"
|
|
|
|
|
+ :max="999"
|
|
|
|
|
+ :precision="2"
|
|
|
|
|
+ style="width: 100%"
|
|
|
|
|
+ placeholder="请输入血糖值"
|
|
|
|
|
+ />
|
|
|
|
|
+ <el-text v-else>{{ dataForm.bloodGlucoseValue }}</el-text>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ </el-row>
|
|
|
|
|
+
|
|
|
|
|
+ <el-row>
|
|
|
|
|
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
|
|
|
|
|
+ <el-form-item label="备注" prop="remark">
|
|
|
|
|
+ <el-input
|
|
|
|
|
+ v-if="!isDetail"
|
|
|
|
|
+ v-model="dataForm.remark"
|
|
|
|
|
+ type="textarea"
|
|
|
|
|
+ :maxlength="500"
|
|
|
|
|
+ show-word-limit
|
|
|
|
|
+ placeholder="请输入备注"
|
|
|
|
|
+ />
|
|
|
|
|
+ <el-text v-else>{{ dataForm.remark }}</el-text>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ </el-row>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </el-form>
|
|
|
|
|
+
|
|
|
|
|
+ <template #footer>
|
|
|
|
|
+ <el-button @click="handleClosed">关闭</el-button>
|
|
|
|
|
+ <el-button v-loading="formLoading" type="primary" v-show="!isDetail" @click="submitForm"
|
|
|
|
|
+ >确定</el-button
|
|
|
|
|
+ >
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </Dialog>
|
|
|
|
|
+</template>
|
|
|
|
|
+
|
|
|
|
|
+<script lang="ts" setup>
|
|
|
|
|
+import { computed, ref } from 'vue'
|
|
|
|
|
+import { FormRules } from 'element-plus'
|
|
|
|
|
+import dayjs from 'dayjs'
|
|
|
|
|
+import { useMediaQuery } from '@vueuse/core'
|
|
|
|
|
+import { createBloodGlucose, getBloodGlucoseDetail, updateBloodGlucose } from '@/api/elderly/assess/blood-glucose'
|
|
|
|
|
+
|
|
|
|
|
+defineOptions({ name: 'BloodGlucoseForm' })
|
|
|
|
|
+
|
|
|
|
|
+const message = useMessage()
|
|
|
|
|
+const { t } = useI18n()
|
|
|
|
|
+
|
|
|
|
|
+const dialogVisible = ref(false)
|
|
|
|
|
+const loading = ref(false)
|
|
|
|
|
+const formRef = ref()
|
|
|
|
|
+const selectElderRef = ref()
|
|
|
|
|
+const isDetail = ref(false)
|
|
|
|
|
+const title = ref('')
|
|
|
|
|
+const formLoading = ref(false)
|
|
|
|
|
+
|
|
|
|
|
+const currentWidth = useMediaQuery('(max-width: 800px)')
|
|
|
|
|
+const labelWidth = computed(() => {
|
|
|
|
|
+ return currentWidth.value ? '130px' : '130px'
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
|
|
+const dataForm = ref<any>({
|
|
|
|
|
+ id: undefined,
|
|
|
|
|
+ tenantId: undefined,
|
|
|
|
|
+ elderId: '',
|
|
|
|
|
+ elderName: '',
|
|
|
|
|
+ fileNumber: '',
|
|
|
|
|
+ elderSex: '',
|
|
|
|
|
+ elderAge: '',
|
|
|
|
|
+ checkInTime: '',
|
|
|
|
|
+ bedName: '',
|
|
|
|
|
+ nurseLevelName: '',
|
|
|
|
|
+ recordDate: dayjs().format('YYYY-MM-DD'),
|
|
|
|
|
+ bloodGlucoseValue: undefined,
|
|
|
|
|
+ remark: ''
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
|
|
+const dataRule = reactive<FormRules>({
|
|
|
|
|
+ elderId: [{ required: true, message: '长者姓名不能为空', trigger: 'blur' }],
|
|
|
|
|
+ recordDate: [{ required: true, message: '记录日期不能为空', trigger: 'change' }],
|
|
|
|
|
+ bloodGlucoseValue: [{ required: true, message: '血糖值不能为空', trigger: 'blur' }]
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
|
|
+const elderUp = (e) => {
|
|
|
|
|
+ dataForm.value.elderName = e.elderName
|
|
|
|
|
+ dataForm.value.elderId = e.id
|
|
|
|
|
+ dataForm.value.elderSex = e.elderSex === 1 ? '男' : '女'
|
|
|
|
|
+ dataForm.value.bedName = e.bedName || ''
|
|
|
|
|
+ dataForm.value.checkInTime = e.checkInTime
|
|
|
|
|
+ dataForm.value.fileNumber = e.fileNumber
|
|
|
|
|
+ dataForm.value.elderAge = e.elderAge
|
|
|
|
|
+ dataForm.value.nurseLevelName = e.nurseLevelName
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+const resetForm = () => {
|
|
|
|
|
+ dataForm.value = {
|
|
|
|
|
+ id: undefined,
|
|
|
|
|
+ tenantId: undefined,
|
|
|
|
|
+ elderId: '',
|
|
|
|
|
+ elderName: '',
|
|
|
|
|
+ fileNumber: '',
|
|
|
|
|
+ elderSex: '',
|
|
|
|
|
+ elderAge: '',
|
|
|
|
|
+ checkInTime: '',
|
|
|
|
|
+ bedName: '',
|
|
|
|
|
+ nurseLevelName: '',
|
|
|
|
|
+ recordDate: dayjs().format('YYYY-MM-DD'),
|
|
|
|
|
+ bloodGlucoseValue: undefined,
|
|
|
|
|
+ remark: ''
|
|
|
|
|
+ }
|
|
|
|
|
+ formRef.value?.resetFields()
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+const open = async (tenantId, id?: any, type: number = 1) => {
|
|
|
|
|
+ resetForm()
|
|
|
|
|
+ dialogVisible.value = true
|
|
|
|
|
+ dataForm.value.tenantId = tenantId
|
|
|
|
|
+ dataForm.value.id = id || undefined
|
|
|
|
|
+ isDetail.value = type === 3
|
|
|
|
|
+
|
|
|
|
|
+ if (type === 1) title.value = '新增-血糖记录'
|
|
|
|
|
+ if (type === 2) title.value = '编辑-血糖记录'
|
|
|
|
|
+ if (type === 3) title.value = '详情-血糖记录'
|
|
|
|
|
+
|
|
|
|
|
+ if (id) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ loading.value = true
|
|
|
|
|
+ const res = await getBloodGlucoseDetail(id)
|
|
|
|
|
+ dataForm.value = { ...dataForm.value, ...res }
|
|
|
|
|
+ if (dataForm.value.recordDate) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ if (Array.isArray(dataForm.value.recordDate)) {
|
|
|
|
|
+ dataForm.value.recordDate = dayjs(
|
|
|
|
|
+ new Date(dataForm.value.recordDate[0], dataForm.value.recordDate[1] - 1, dataForm.value.recordDate[2])
|
|
|
|
|
+ ).format('YYYY-MM-DD')
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch {}
|
|
|
|
|
+ }
|
|
|
|
|
+ loading.value = false
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ const elderRes = await selectElderRef.value?.upData?.(res.elderName, res.elderId)
|
|
|
|
|
+ if (elderRes) elderUp(elderRes)
|
|
|
|
|
+ } catch {}
|
|
|
|
|
+ } catch {
|
|
|
|
|
+ loading.value = false
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+defineExpose({ open })
|
|
|
|
|
+
|
|
|
|
|
+const emit = defineEmits(['success'])
|
|
|
|
|
+const submitForm = async () => {
|
|
|
|
|
+ if (formLoading.value) return
|
|
|
|
|
+ formLoading.value = true
|
|
|
|
|
+ try {
|
|
|
|
|
+ if (!formRef.value) return
|
|
|
|
|
+ const valid = await formRef.value.validate()
|
|
|
|
|
+ if (!valid) return
|
|
|
|
|
+
|
|
|
|
|
+ const params = { ...dataForm.value }
|
|
|
|
|
+ if (params.id) {
|
|
|
|
|
+ const res = await updateBloodGlucose(params)
|
|
|
|
|
+ if (res) {
|
|
|
|
|
+ message.success(t('common.updateSuccess'))
|
|
|
|
|
+ dialogVisible.value = false
|
|
|
|
|
+ emit('success')
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ const res = await createBloodGlucose(params)
|
|
|
|
|
+ if (res) {
|
|
|
|
|
+ message.success(t('common.updateSuccess'))
|
|
|
|
|
+ dialogVisible.value = false
|
|
|
|
|
+ emit('success')
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } finally {
|
|
|
|
|
+ setTimeout(() => {
|
|
|
|
|
+ formLoading.value = false
|
|
|
|
|
+ }, 300)
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+const handleClosed = () => {
|
|
|
|
|
+ dialogVisible.value = false
|
|
|
|
|
+ resetForm()
|
|
|
|
|
+}
|
|
|
|
|
+</script>
|
|
|
|
|
+
|
|
|
|
|
+<style lang="scss" scoped>
|
|
|
|
|
+.BloodGlucoseForm {
|
|
|
|
|
+ .el-form {
|
|
|
|
|
+ padding: 15px 0 !important;
|
|
|
|
|
+ }
|
|
|
|
|
+ .info-wrap {
|
|
|
|
|
+ margin: 15px;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+</style>
|
|
|
|
|
+
|