Bläddra i källkod

医嘱表格滚动和电子病历上一位下一位以及新的日期组件

xiaochan 1 år sedan
förälder
incheckning
ff569f4d8a

+ 98 - 0
src/components/cy/date-range/CyDateRange.vue

@@ -0,0 +1,98 @@
+<script setup lang="ts">
+import {ElDatePicker} from 'element-plus'
+import {listNotBlank} from "@/utils/blank-utils";
+import {DATEFORMAT, elDateRangeAddTime, formatDateToStr} from "@/utils/moment-utils";
+import moment from "moment/moment";
+import XEUtils from "xe-utils";
+
+const shortcuts = [
+  {
+    text: '今天',
+    value: [moment(), moment()]
+  },
+  {
+    text: '最近一周',
+    value: [moment().subtract(7, 'days'), moment()]
+  },
+  {
+    text: '最近一个月',
+    value: [moment().startOf('month'), moment().endOf('month')]
+  },
+  {
+    text: '最近三个月',
+    value: [moment().subtract(3, 'months').startOf('month'), moment().endOf('month')]
+  },
+  {
+    text: '本月',
+    value: [moment().startOf('month'), moment().endOf('month')]
+  },
+  {
+    text: '上个月',
+    value: [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
+  },
+  {
+    text: '今年',
+    value: [moment().startOf('year'), moment()]
+  },
+  {
+    text: '去年',
+    value: [moment().subtract(1, 'year').startOf('year'), moment().subtract(1, 'year').endOf('year')]
+  }
+];
+
+const props = withDefaults(defineProps<{
+  start?: string,
+  end?: string,
+  clearable?: boolean,
+  unlinkPanels?: boolean
+}>(), {
+  start: 'startTime',
+  end: 'endTime',
+  clearable: true,
+  unlinkPanels: true,
+})
+
+const model = defineModel<string[] | object>();
+const isArr = XEUtils.isArray(model)
+
+const dateRange = computed({
+  get() {
+    if (isArr) {
+      if (listNotBlank(model.value)) {
+        const [start, end] = model.value;
+        return [formatDateToStr(start, DATEFORMAT.DATE), formatDateToStr(end, DATEFORMAT.DATE)]
+      }
+      return []
+    } else {
+      // @ts-ignore
+      return [model.value[props.start], model.value[props.end]]
+    }
+  },
+  set(value: string[]) {
+    const {start, end} = elDateRangeAddTime(value)
+    if (isArr) {
+      model.value = [start, end]
+    } else {
+      // @ts-ignore
+      model.value[props.start] = start
+      // @ts-ignore
+      model.value[props.end] = end
+    }
+  },
+})
+</script>
+
+<template>
+  <el-date-picker
+      v-model="dateRange"
+      :unlinkPanels
+      :shortcuts
+      :clearable
+      type="daterange"
+      style="display: inline-flex;vertical-align: middle;width:220px"
+  />
+</template>
+
+<style lang="scss">
+
+</style>

+ 14 - 9
src/components/zhu-yuan-yi-sheng/yi-zhu-lu-ru/yz-header/YzQueryCondition.vue

@@ -1,7 +1,13 @@
 <template>
   <div>
-    <div style="display: flex;align-items: center">
-      <el-button @click="queryYz" v-title="'重新查询患者的医嘱'">重置</el-button>
+    <div>
+      <CyDateRange
+          v-model="queryParam"
+          clearable/>
+      <el-button @click="queryYz"
+                 v-title="'医嘱过多导致查看医嘱困难,可选择时间范围来减少医嘱的条数,默认查询今天到90天前的数据,可通过选择日期后面的删除按钮,取消时间范围的查询'">
+        查询
+      </el-button>
       <el-divider direction="vertical"/>
       <label>
         显示范围:
@@ -15,7 +21,7 @@
 
       <label>
         状态:
-        <select v-model.number="queryParam.zhuangTai" title="医嘱的状态">
+        <select v-model.number="queryParam.zhuangTai" v-title="`医嘱的状态`">
           <option :value="0">全部</option>
           <option :value="1">录入</option>
           <option :value="2">确认</option>
@@ -33,7 +39,8 @@
       <label>
         排序:
         <select v-model="queryParam.sort"
-                @change="setYzOrderGroup">
+                @change="setYzOrderGroup"
+        >
           <option :value="OrderBy.asc">正序</option>
           <option :value="OrderBy.desc">反序</option>
         </select>
@@ -276,7 +283,7 @@ import {
   yzData,
   yzMitt,
   clickTimeLimitReminder,
-  errorMsgFunc, OrderBy, setYzOrderGroup
+  errorMsgFunc, OrderBy, setYzOrderGroup, jsQueryYzData
 } from "@/views/hospitalization/zhu-yuan-yi-sheng/public-js/zhu-yuan-yi-sheng";
 import {BizException, ExceptionEnum} from "@/utils/BizException";
 import router from "@/router";
@@ -296,6 +303,7 @@ import CopyTableDataOrder
 import setDialogToJs from "@/components/js-dialog-comp/useDialogToJs";
 import {CyMessageBox} from "@/components/cy/message-box";
 import {useUserStore} from "@/pinia/user-store";
+import CyDateRange from "@/components/cy/date-range/CyDateRange.vue";
 
 const props = defineProps({
   patientInfo: {
@@ -329,10 +337,7 @@ const queryYz = async (tableScrollTop = true) => {
     if (tableScrollTop) {
       yzMitt.emit('tableScroll', 0);
     }
-    yzData.value = await huoQuYiZhuShuJu({
-      patNo: props.patientInfo.inpatientNo,
-      times: props.patientInfo.admissTimes
-    })
+    await jsQueryYzData()
   } catch (e) {
     yzData.value = []
   }

+ 1 - 1
src/utils/cy-use/useDateRange.tsx

@@ -6,7 +6,7 @@ import moment from 'moment'
 // @ts-ignore
 import {tsxVModel} from "@/utils/cy-use/useTsxUtils";
 
-const shortcuts = [
+export const shortcuts = [
     {
         text: '今天',
         value: [moment(), moment()]

+ 7 - 3
src/utils/moment-utils.ts

@@ -70,10 +70,14 @@ export const getServerDate = async (): Promise<string> => {
     return now
 }
 
-export const currentAndAFewDaysAgo = async (aFewDaysAgo: number = 7, format: DATEFORMAT = DATEFORMAT.DATE): Promise<string[]> => {
+export const currentAndAFewDaysAgo = async (value: number = 7, format: DATEFORMAT = DATEFORMAT.DATE): Promise<string[]> => {
     const date: string = await getServerDate();
-    const now: string = moment(new Date(date)).format(format);
-    const start = moment(new Date(date)).subtract(aFewDaysAgo, 'day');
+    return aFewDaysAgo(date, value, format)
+}
+
+export function aFewDaysAgo(value: string, aFewDaysAgo: number = 7, format: DATEFORMAT = DATEFORMAT.DATE): string[] {
+    const now: string = moment(new Date(value)).format(format);
+    const start = moment(new Date(value)).subtract(aFewDaysAgo, 'day');
     return [moment(start).format(format), now]
 }
 

+ 2 - 2
src/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/Home.vue

@@ -30,7 +30,7 @@
         住院天数:<span style="color:red;">{{ XEUtils.addUnit(patientInfo.actIptDays, '天') }}</span>
         入院时间:<span style="color:red;">{{ patientInfo.admissDate }}</span>
         <el-divider direction="vertical"/>
-        <el-button-group>
+        <el-button-group v-if="query.state === emrStateEnum.在院编辑 || query.state === emrStateEnum.在院只读 ">
           <el-button type="primary" @click="clickPatientNext">上一位</el-button>
           <el-button type="primary" @click="clickPatientNext(false)">下一位</el-button>
         </el-button-group>
@@ -62,7 +62,7 @@ import {
   query,
   resolveRoute,
   unlockEnum,
-  patientInfo,
+  patientInfo, emrStateEnum,
 } from "@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/emr-init";
 import {getMyUnlockByPatNo} from "@/api/zhu-yuan-yi-sheng/emr-control-rule";
 import {ElMessage, ElMessageBox} from "element-plus";

+ 10 - 2
src/views/hospitalization/zhu-yuan-yi-sheng/public-js/zhu-yuan-yi-sheng.ts

@@ -11,12 +11,13 @@ import EventBus from "@/utils/mitt";
 import XEUtils from 'xe-utils'
 import {getAncillaryInformation} from '@/api/zhu-yuan-yi-sheng/jian-yan-jian-cha-shen-qing'
 import {timeLimitPromptByPatientNo} from "@/api/emr-control/emr-time-limit-prompt";
-import {getServerDate} from "@/utils/moment-utils";
+import {aFewDaysAgo, elDateRangeAddTime, getServerDate} from "@/utils/moment-utils";
 import setDialogToJs from "@/components/js-dialog-comp/useDialogToJs";
 import YaoPingXiangQing from "@/components/zhu-yuan-yi-sheng/he-li-yong-yao/YaoPingXiangQing.vue";
 import cyRefList from "@/utils/cyRefList";
 import {reportQueryCenterApiByGet} from "@/api/base-data/report-center";
 import sleep from "@/utils/sleep";
+import {query} from "@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/emr-init";
 
 export interface PatInfo {
     inpatientNo?: string | null
@@ -461,7 +462,9 @@ export const jsQueryYzData = async () => {
     if (stringNotBlank(huanZheXinXi.value.inpatientNo)) {
         yzData.value = await huoQuYiZhuShuJu({
             patNo: huanZheXinXi.value.inpatientNo,
-            times: huanZheXinXi.value.admissTimes
+            times: huanZheXinXi.value.admissTimes,
+            startTime: queryParam.value.startTime,
+            endTime: queryParam.value.endTime,
         })
     }
 }
@@ -469,6 +472,9 @@ export const jsQueryYzData = async () => {
 let newDate = ''
 getServerDate().then((res) => {
     newDate = res
+    const {start, end} = elDateRangeAddTime(aFewDaysAgo(res, 90));
+    queryParam.value.startTime = start;
+    queryParam.value.endTime = end;
 })
 
 // 医嘱查询条件
@@ -480,6 +486,8 @@ export const queryParam = ref({
     groupNo: '73',
     patNo: '',
     times: 0,
+    startTime: '',
+    endTime: '',
 });
 
 // 设置分组符号

+ 1 - 1
src/views/hospitalization/zhu-yuan-yi-sheng/yi-zhu-lu-ru/components/table/YzTableV3.vue

@@ -279,7 +279,7 @@ const rowClick = ({row}) => {
 }
 
 const endDateStyle = (item) => {
-  if (item.endTimeTemp && tableRef.value.isCheckedByCheckboxRow(item)) {
+  if (item.endTimeTemp && tableRef.value!.isCheckedByCheckboxRow(item)) {
     return {
       width: '140px',
       color: 'white',