Przeglądaj źródła

血糖记录页面init

xiongxing 4 miesięcy temu
rodzic
commit
bbb8a3079b

+ 51 - 0
src/api/elderly/assess/blood-glucose/index.ts

@@ -0,0 +1,51 @@
+import request from '@/config/axios'
+
+// ==================血糖记录=========================
+
+// 获得分页
+export const getBloodGlucosePage = (query) => {
+  return request.get({
+    url: 'elderly/bloodGlucose/page',
+    params: query
+  })
+}
+
+// 获取详情
+export const getBloodGlucoseDetail = (id) => {
+  return request.get({
+    url: `elderly/bloodGlucose/get?id=${id}`
+  })
+}
+
+// 新增
+export const createBloodGlucose = (data) => {
+  return request.post({
+    url: `elderly/bloodGlucose/create`,
+    data
+  })
+}
+
+// 修改
+export const updateBloodGlucose = (data) => {
+  return request.put({
+    url: `elderly/bloodGlucose/update`,
+    data
+  })
+}
+
+// 删除
+export const deleteBloodGlucose = (id) => {
+  return request.post({
+    url: `elderly/bloodGlucose/delete`,
+    data: [id]
+  })
+}
+
+// 导出
+export const exportBloodGlucoseExcel = (data) => {
+  return request.download({
+    url: `elderly/bloodGlucose/exportExcel`,
+    params: data
+  })
+}
+

+ 312 - 0
src/views/elderly/assess/blood-glucose/component/form.vue

@@ -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>
+

+ 155 - 0
src/views/elderly/assess/blood-glucose/index.vue

@@ -0,0 +1,155 @@
+<template>
+  <ContentWrap>
+    <el-form
+      class="-mb-15px"
+      :model="queryParams"
+      ref="queryFormRef"
+      :inline="true"
+      label-width="90px"
+    >
+      <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds" />
+      <el-form-item label="记录日期" prop="recordDate">
+        <el-date-picker
+          type="daterange"
+          value-format="YYYY-MM-DD HH:mm:ss"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
+          v-model="queryParams.recordDate"
+          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-form-item>
+    </el-form>
+  </ContentWrap>
+
+  <ContentWrap>
+    <div class="mb-10px" style="display:flex;align-items:center;justify-content: space-between;gap: 10px;">
+      <div style="display:flex;align-items:center;gap: 10px;">
+        <el-button type="primary" plain @click="openForm()">
+          <Icon icon="ep:plus" class="mr-5px" />
+          新增
+        </el-button>
+        <el-button type="success" plain @click="handleExport">
+          <Icon icon="ep:download" class="mr-5px" />
+          导出
+        </el-button>
+      </div>
+    </div>
+
+    <Table2
+      v-loading="loading"
+      :data="list"
+      :columns="columns"
+      :queryParams="queryParams"
+    >
+      <template #pre="{scope}">
+        <el-button link type="primary" @click="openForm(scope.row, 2)">编辑</el-button>
+        <el-button link type="primary" @click="handleDelete(scope.row)">删除</el-button>
+      </template>
+    </Table2>
+
+    <Pagination
+      :total="total"
+      v-model:page="queryParams.pageNo"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </ContentWrap>
+
+  <Form ref="formRef" @success="getList" />
+</template>
+
+<script lang="ts" setup>
+import { reactive, ref } from 'vue'
+import { useUserStore } from '@/store/modules/user'
+import Form from './component/form.vue'
+import {
+  deleteBloodGlucose,
+  exportBloodGlucoseExcel,
+  getBloodGlucosePage
+} from '@/api/elderly/assess/blood-glucose'
+
+defineOptions({ name: 'BloodGlucose' })
+
+const userStore = useUserStore()
+const message = useMessage()
+const { t } = useI18n()
+
+const loading = ref(true)
+const total = ref(0)
+const list = ref<any[]>([])
+
+const queryParams = reactive({
+  pageNo: 1,
+  pageSize: 10,
+  tenantIds: userStore.orgTenantId,
+  recordDate: undefined
+})
+
+const queryFormRef = ref()
+
+const columns = reactive([
+  { label: '所属机构', field: 'tenantName', type: '99' },
+  { label: '长者姓名', field: 'elderName' },
+  { label: '房间号', field: 'roomName' },
+  { label: '性别', field: 'elderSexText' },
+  { label: '记录日期', field: 'recordDate' },
+  { label: '血糖值', field: 'bloodGlucoseValue' },
+  { label: '备注', field: 'remark' },
+])
+
+const getList = async () => {
+  loading.value = true
+  try {
+    const data = await getBloodGlucosePage(queryParams)
+    list.value = data.list || []
+    total.value = data.total || 0
+  } finally {
+    loading.value = false
+  }
+}
+
+const handleQuery = async () => {
+  if (!queryFormRef.value) return
+  const valid = await queryFormRef.value.validate()
+  if (!valid) return
+  queryParams.pageNo = 1
+  getList()
+}
+
+const resetQuery = () => {
+  queryFormRef.value?.resetFields()
+  handleQuery()
+}
+
+const formRef = ref()
+const openForm = (row: any = {}, type: number = 1) => {
+  if (queryParams.tenantIds.length == 0 || (queryParams.tenantIds.length > 1 && !row.tenantId)) {
+    message.error('新增只能选择一个机构')
+    return
+  }
+  formRef.value.open(row.tenantId || queryParams.tenantIds[0], row.id, type)
+}
+
+const handleDelete = async (row: any) => {
+  try {
+    await message.delConfirm()
+    await deleteBloodGlucose(row.id)
+    message.success(t('common.delSuccess'))
+    await getList()
+  } catch {}
+}
+
+const handleExport = async () => {
+  await exportBloodGlucoseExcel(queryParams)
+}
+
+onMounted(() => {
+  getList()
+})
+</script>
+