瀏覽代碼

优化代码

DESKTOP-MINPJAU\Administrator 3 年之前
父節點
當前提交
3181052920

+ 236 - 222
src/components/zhu-yuan-yi-sheng/TianJiaJianChaJianYan.vue

@@ -30,11 +30,24 @@
     </el-aside>
     <el-main>
       <el-button icon="el-icon-arrow-left" style="font-size: 14px" type="text" @click="router.go(-1)">返回</el-button>
-      <el-button :disabled="xuanZhongJianCha.data.length === 0" @click="dianJiBaoCunShenQing">保存</el-button>
-      <el-button :disabled="xuanZhongJianCha.data.length === 0" @click="baoCunMuBan.dialog = true">存为模板</el-button>
+      <el-button @click="dianJiBaoCunShenQing">保存</el-button>
+      <el-button @click="clickSaveTemplate">存为模板</el-button>
       <cuo-wu-xin-xi/>
+      <xc-code code="ctrl + s" description="保存"/>
+      <xc-code code="ctrl + m" description="保存模板"/>
+      <xc-code code="ctrl + 1" description="编辑项目"/>
       <!--   这里是检查的数据信息     -->
       <el-table :data="xuanZhongJianCha.data" :header-cell-class-name="starAdd" :height="windowSize.h / 1.4">
+        <el-table-column label="编辑" width="120" fixed="left">
+          <template #default="scope">
+            <el-button icon="el-icon-edit" round type="primary"
+                       @click="dianJiBianJi(scope.row,scope.$index)"></el-button>
+            <el-button icon="el-icon-delete" round type="danger"
+                       @click="xuanZhongJianCha.data.splice(scope.$index,1);
+                         xuanZhongJianCha.weiBianMa.splice(scope.$index,1)">
+            </el-button>
+          </template>
+        </el-table-column>
         <el-table-column label="项目编码" prop="orderCode"></el-table-column>
         <el-table-column label="项目名称" prop="orderName" show-overflow-tooltip></el-table-column>
         <el-table-column label="检查时间" prop="startTime" show-overflow-tooltip></el-table-column>
@@ -54,15 +67,6 @@
         <el-table-column v-if="jianCha" label="体征信息" prop="reqTzComment" show-overflow-tooltip></el-table-column>
         <el-table-column v-if="jianCha" label="辅检结果" prop="reqOtherResult" show-overflow-tooltip></el-table-column>
         <el-table-column v-if="jianCha" label="临床诊断" prop="diagText" show-overflow-tooltip></el-table-column>
-        <el-table-column label="编辑" width="120">
-          <template #default="scope">
-            <el-button icon="el-icon-edit" round type="primary"
-                       @click="dianJiBianJi(scope.row,scope.$index)"></el-button>
-            <el-button icon="el-icon-delete" round type="danger"
-                       @click="xuanZhongJianCha.data.splice(scope.$index,1);
-                         xuanZhongJianCha.weiBianMa.splice(scope.$index,1)"></el-button>
-          </template>
-        </el-table-column>
       </el-table>
     </el-main>
   </el-container>
@@ -88,7 +92,7 @@
         </el-col>
         <el-col :span="24">
           <el-form-item label="名称" prop="tcName">
-            <el-input v-model="baoCunMuBan.tcName" clearable></el-input>
+            <el-input v-model="baoCunMuBan.tcName" ref="tcNameRef" clearable></el-input>
           </el-form-item>
         </el-col>
         <el-col :span="24">
@@ -111,10 +115,11 @@
       </el-row>
     </el-form>
   </el-dialog>
-  <bian-ji-jian-cha-shen-qing ref="bianJiRef" :jian-cha="jianCha" @fanYe="bianJiFanYe"></bian-ji-jian-cha-shen-qing>
+  <bian-ji-jian-cha-shen-qing ref="bianJiRef" :jian-cha="jianCha" @fanYe="bianJiFanYe"
+                              @dialogCloses="initializationShortcut"/>
 </template>
 
-<script>
+<script setup name="TianJiaJianChaJianYan">
 import {computed, onMounted, ref} from "vue";
 import {
   baoCunJianChaJianYanMuBan,
@@ -139,246 +144,255 @@ import {
 import router from '@/router'
 import {yaoPinXiangMuPiPeiYiBao} from "@/api/public-api";
 import CuoWuXinXi from "@/components/zhu-yuan-yi-sheng/CuoWuXinXi.vue";
+import {logoutShortcut, xcHotKey} from "@/utils/xckeydown";
+import Sleep from "element-plus/packages/test-utils/sleep";
 
-export default {
-  name: "tianJiaJianChaJianYan",
-  components: {CuoWuXinXi, BianJiJianChaShenQing},
-  props: {
-    jianCha: {
-      type: Boolean,
-      default: true,
-    }
-  },
-  setup(props) {
-    const chaZhaoLeiXing = ref(1)
-    const xuanZhongJianCha = ref({
-      data: [],
-      weiBianMa: [],
-      daiXuanZhong: []
-    })
-    const biaoBenShuJu = ref([])
 
-    const windowSize = computed(() => {
-      return store.state.app.windowSize
-    })
-    const xiangXiShuJu = ref({
-      dialog: false,
-      data: [],
-    })
-    const jianChaFenLeiShuJu = ref({
-      currentPage: 1,
-      total: 0,
-      data: []
-    })
-    const bianJiRef = ref(null)
-    const baoCunMuBanRef = ref()
-    const baoCunMuBan = ref({
-      dialog: false,
-      tcName: '',
-      orderType: 1,
-      sortNo: 0,
-      tcFlag: 1,
-      fuGaiYuanShuJu: false,
-      chongFuMing: false
-    })
-
-    const dianJiLeiXingChaXun = () => {
-      jianChaFenLeiShuJu.value.total = 0
-      jianChaFenLeiShuJu.value.currentPage = 1
-      jianChaJianYanFenLei(0, 1, chaZhaoLeiXing.value, props.jianCha).then((res) => {
-        jianChaFenLeiShuJu.value.data = res.records
-        jianChaFenLeiShuJu.value.total = res.total
-      })
-    }
+const props = defineProps({
+  jianCha: {
+    type: Boolean,
+    default: true,
+  }
+})
+const chaZhaoLeiXing = ref(1)
+const xuanZhongJianCha = ref({
+  data: [],
+  weiBianMa: [],
+  daiXuanZhong: []
+})
 
-    const jianChaFenLeiFenYe = (val) => {
-      jianChaFenLeiShuJu.value.currentPage = val
-      jianChaJianYanFenLei(jianChaFenLeiShuJu.value.total, val, chaZhaoLeiXing.value, props.jianCha).then((res) => {
-        jianChaFenLeiShuJu.value.data = res.records
-      })
+const windowSize = computed(() => {
+  return store.state.app.windowSize
+})
+const xiangXiShuJu = ref({
+  dialog: false,
+  data: [],
+})
+const jianChaFenLeiShuJu = ref({
+  currentPage: 1,
+  total: 0,
+  data: []
+})
+const bianJiRef = ref(null)
+const baoCunMuBanRef = ref()
+const tcNameRef = $ref(null)
+const baoCunMuBan = ref({
+  dialog: false,
+  tcName: '',
+  orderType: 1,
+  sortNo: 0,
+  tcFlag: 1,
+  fuGaiYuanShuJu: false,
+  chongFuMing: false
+})
 
-    }
+const dianJiLeiXingChaXun = () => {
+  jianChaFenLeiShuJu.value.total = 0
+  jianChaFenLeiShuJu.value.currentPage = 1
+  jianChaJianYanFenLei(0, 1, chaZhaoLeiXing.value, props.jianCha).then((res) => {
+    jianChaFenLeiShuJu.value.data = res.records
+    jianChaFenLeiShuJu.value.total = res.total
+  })
+}
 
-    const xuanZhong = (val) => {
-      xuanZhongJianCha.value.daiXuanZhong = val
-    }
+const jianChaFenLeiFenYe = (val) => {
+  jianChaFenLeiShuJu.value.currentPage = val
+  jianChaJianYanFenLei(jianChaFenLeiShuJu.value.total, val, chaZhaoLeiXing.value, props.jianCha).then((res) => {
+    jianChaFenLeiShuJu.value.data = res.records
+  })
 
-    const dianJiQueRenXuanZhong = () => {
-      let tiShi = false
-      xuanZhongJianCha.value.daiXuanZhong.forEach((item) => {
-        if (xuanZhongJianCha.value.weiBianMa.indexOf(item.orderCode) > -1) {
-          tiShi = true
-        } else {
-          xuanZhongJianCha.value.data.push(clone(item))
-          xuanZhongJianCha.value.weiBianMa.push(clone(item.orderCode))
-        }
-      })
-      if (tiShi) {
-        ElMessage.error('请勿重复添加。')
-      }
-      xiangXiShuJu.value.dialog = false
-    }
+}
 
-    const dianJiBianJi = (row, index) => {
-      bianJiRef.value.daKaiBenDuiHua(row, index, xuanZhongJianCha.value.data.length)
-    }
+const xuanZhong = (val) => {
+  xuanZhongJianCha.value.daiXuanZhong = val
+}
 
-    const closeDialog = () => {
-      dialog.value = false
+const dianJiQueRenXuanZhong = () => {
+  let tiShi = false
+  xuanZhongJianCha.value.daiXuanZhong.forEach((item) => {
+    if (xuanZhongJianCha.value.weiBianMa.indexOf(item.orderCode) > -1) {
+      tiShi = true
+    } else {
+      xuanZhongJianCha.value.data.push(clone(item))
+      xuanZhongJianCha.value.weiBianMa.push(clone(item.orderCode))
     }
+  })
+  if (tiShi) {
+    ElMessage.error('请勿重复添加。')
+  }
+  xiangXiShuJu.value.dialog = false
+}
 
-    const dianJiBaoCunShenQing = () => {
-      if (youWuXuanZheHuanZhe()) return
-      let listCode = []
-      xuanZhongJianCha.value.data.forEach(item => {
-        listCode.push(item.orderCode + "-00")
-      })
-      yaoPinXiangMuPiPeiYiBao(listCode).then((res) => {
-        if (stringNotBlank(res)) {
-          cuoWuXinXi.value = res
-          ElMessageBox.confirm(res, '提示', {
-            type: 'warning',
-            dangerouslyUseHTMLString: true,
-          }).then(() => {
-            baoCunShuJu()
-          }).catch(() => {
-          })
-        } else {
-          baoCunShuJu()
-        }
-      })
-
-    }
+const dianJiBianJi = (row, index) => {
+  bianJiRef.value.daKaiBenDuiHua(row, index, xuanZhongJianCha.value.data.length)
+}
 
-    function baoCunShuJu() {
-      ElMessageBox.confirm('确定要保存这些数据吗?', '提示', {
-        type: 'warning'
+const dianJiBaoCunShenQing = () => {
+  if (xuanZhongJianCha.value.data.length < 0) {
+    ElMessage.error('请选择数据')
+    return;
+  }
+  if (youWuXuanZheHuanZhe()) {
+    clickSaveTemplate()
+    return;
+  }
+  let listCode = []
+  xuanZhongJianCha.value.data.forEach(item => {
+    listCode.push(item.orderCode + "-00")
+  })
+  yaoPinXiangMuPiPeiYiBao(listCode).then((res) => {
+    if (stringNotBlank(res)) {
+      cuoWuXinXi.value = res
+      ElMessageBox.confirm(res, '提示', {
+        type: 'warning',
+        dangerouslyUseHTMLString: true,
       }).then(() => {
-        let data = huanZheXinXi.value
-        data.list = xuanZhongJianCha.value.data
-        data.reqType = props.jianCha ? 3 : 2
-        baoCunJianYanJianCha(data).then(res => {
-          xuanZhongJianCha.value.weiBianMa = []
-          xuanZhongJianCha.value.data = []
-        }).catch((e) => {
-          cuoWuXinXi.value = e
-        })
+        baoCunShuJu()
       }).catch(() => {
       })
-
+    } else {
+      baoCunShuJu()
     }
+  })
 
+}
 
-    const ceBianLanDianJi = (name, {code, bwCode}) => {
-      if (!props.jianCha) {
-        bwCode = ''
-      }
-      if (name === '查看') {
-        chaKanFenLeiXiangQing(code, chaZhaoLeiXing.value === 1 ? bwCode : 'mb', props.jianCha).then((res) => {
-          if (listNotBlank(res)) {
-            xiangXiShuJu.value.data = res
-            xiangXiShuJu.value.dialog = true
-          } else {
-            ElMessage.error('没有找到对应的数据')
-          }
-        })
-      } else if (name === '删除') {
-        ElMessageBox.confirm('是否要删除该检查模板', '提示', {
-          type: "warning"
-        }).then(() => {
-          shanShuJianChaMuBan(code, store.state.user.info.deptCode)
-        }).catch((e) => {
+function baoCunShuJu() {
+  ElMessageBox.confirm('确定要保存这些数据吗?', '提示', {
+    type: 'warning'
+  }).then(() => {
+    let data = huanZheXinXi.value
+    data.list = xuanZhongJianCha.value.data
+    data.reqType = props.jianCha ? 3 : 2
+    baoCunJianYanJianCha(data).then(res => {
+      xuanZhongJianCha.value.weiBianMa = []
+      xuanZhongJianCha.value.data = []
+    }).catch((e) => {
+      cuoWuXinXi.value = e
+    })
+  }).catch(() => {
+  })
 
-        })
+}
+
+
+const ceBianLanDianJi = (name, {code, bwCode}) => {
+  if (!props.jianCha) {
+    bwCode = ''
+  }
+  if (name === '查看') {
+    chaKanFenLeiXiangQing(code, chaZhaoLeiXing.value === 1 ? bwCode : 'mb', props.jianCha).then((res) => {
+      if (listNotBlank(res)) {
+        xiangXiShuJu.value.data = res
+        xiangXiShuJu.value.dialog = true
+      } else {
+        ElMessage.error('没有找到对应的数据')
       }
-    }
+    })
+  } else if (name === '删除') {
+    ElMessageBox.confirm('是否要删除该检查模板', '提示', {
+      type: "warning"
+    }).then(() => {
+      shanShuJianChaMuBan(code, store.state.user.info.deptCode)
+    }).catch((e) => {
 
-    const baoCunMuBanJiaoYan = ref({
-      tcName: [{required: true, message: '名称不能为空', trigger: 'blur',},
-        {min: 1, max: 30, message: '长度在 1 到 30 个字', trigger: 'blur'}],
-      orderType: [{required: true, message: '名称不能为空', trigger: 'blur',}],
-      sortNo: [{required: true, message: '名称不能为空', trigger: 'blur',}],
-      tcFlag: [{required: true, message: '名称不能为空', trigger: 'blur',}],
     })
+  }
+}
 
-    const dianJiBaoCunMuBan = async (form) => {
-      if (!form) return
-      try {
-        await form.validate()
-        jianChaJianYanMuBanMing(baoCunMuBan.value.tcName, props.jianCha ? "3" : "2").then((res) => {
-          if (res) {
-            ElMessageBox.confirm('已经存在相同的模板名称,请选择覆盖历史数据还是新增相同名称的数据', '温馨提示', {
-              type: 'warning',
-              distinguishCancelAndClose: true,
-              confirmButtonText: '覆盖',
-              cancelButtonText: '取消',
-            }).then(() => {
-              faSongBaoCunMuBan()
-            }).catch((e) => {
-            })
-          } else {
-            faSongBaoCunMuBan()
-          }
+const baoCunMuBanJiaoYan = ref({
+  tcName: [{required: true, message: '名称不能为空', trigger: 'blur',},
+    {min: 1, max: 30, message: '长度在 1 到 30 个字', trigger: 'blur'}],
+  orderType: [{required: true, message: '名称不能为空', trigger: 'blur',}],
+  sortNo: [{required: true, message: '名称不能为空', trigger: 'blur',}],
+  tcFlag: [{required: true, message: '名称不能为空', trigger: 'blur',}],
+})
+
+const dianJiBaoCunMuBan = async (form) => {
+  if (!form) return
+  try {
+    await form.validate()
+    jianChaJianYanMuBanMing(baoCunMuBan.value.tcName, props.jianCha ? "3" : "2").then((res) => {
+      if (res) {
+        ElMessageBox.confirm('已经存在相同的模板名称,请选择覆盖历史数据还是新增相同名称的数据', '温馨提示', {
+          type: 'warning',
+          distinguishCancelAndClose: true,
+          confirmButtonText: '覆盖',
+          cancelButtonText: '取消',
+        }).then(() => {
+          faSongBaoCunMuBan()
+        }).catch((e) => {
         })
-      } catch (e) {
-        console.log(e)
+      } else {
+        faSongBaoCunMuBan()
       }
-    }
+    })
+  } catch (e) {
+    console.log(e)
+  }
+}
 
-    const faSongBaoCunMuBan = () => {
-      baoCunMuBan.value.reqType = props.jianCha ? 3 : 2
-      baoCunMuBan.value.list = xuanZhongJianCha.value.data
-      baoCunMuBan.value.tcExec = store.state.user.info.deptCode
-      baoCunJianChaJianYanMuBan(baoCunMuBan.value).then((res) => {
-        dianJiLeiXingChaXun()
-      })
-    }
+const faSongBaoCunMuBan = () => {
+  baoCunMuBan.value.reqType = props.jianCha ? 3 : 2
+  baoCunMuBan.value.list = xuanZhongJianCha.value.data
+  baoCunMuBan.value.tcExec = store.state.user.info.deptCode
+  baoCunJianChaJianYanMuBan(baoCunMuBan.value).then((res) => {
+    dianJiLeiXingChaXun()
+  })
+}
 
-    const bianJiFanYe = (val) => {
-      let index = val.val - 1
-      bianJiRef.value.daKaiBenDuiHua(xuanZhongJianCha.value.data[index], index, xuanZhongJianCha.value.data.length)
-    }
+const bianJiFanYe = (val) => {
+  let index = val.val - 1
+  bianJiRef.value.daKaiBenDuiHua(xuanZhongJianCha.value.data[index], index, xuanZhongJianCha.value.data.length)
+}
 
-    const starAdd = (obj) => {
-      let index = [0, 1, 2, 3, 6, 7, 8, 9]
-      if (index.indexOf(obj.columnIndex) > -1) {
-        return 'star';
-      }
-    }
+const clickSaveTemplate = async () => {
+  if (xuanZhongJianCha.value.data.length > 0) {
+    baoCunMuBan.value.dialog = true
+    await Sleep(200)
+    tcNameRef.focus()
+  } else {
+    ElMessage.error('请选择数据')
+  }
+}
 
+const shortcutToOpenEditing = () => {
+  if (xuanZhongJianCha.value.data.length > 0) {
+    dianJiBianJi(xuanZhongJianCha.value.data[0], 0);
+  } else {
+    ElMessage.error('您还没有选择数据')
+  }
 
-    onMounted(() => {
-      dianJiLeiXingChaXun()
-    })
+}
 
-    return {
-      jianChaFenLeiShuJu,
-      jianChaFenLeiFenYe,
-      windowSize,
-      xiangXiShuJu,
-      xuanZhong,
-      dianJiQueRenXuanZhong,
-      xuanZhongJianCha,
-      closeDialog,
-      chaZhaoLeiXing,
-      dianJiLeiXingChaXun,
-      dianJiBianJi,
-      bianJiRef,
-      huanHangXianShi,
-      dianJiBaoCunShenQing,
-      ceBianLanDianJi,
-      baoCunMuBan,
-      baoCunMuBanRef,
-      dianJiBaoCunMuBan,
-      baoCunMuBanJiaoYan,
-      bianJiFanYe,
-      jianCha: props.jianCha,
-      biaoBenShuJu,
-      router,
-      starAdd,
-    }
+let hotKeyList = {
+  ctrl: {'s': dianJiBaoCunShenQing, 'm': clickSaveTemplate, '1': shortcutToOpenEditing}
+}
+
+/**
+ * 注册快捷键
+ */
+const initializationShortcut = () => {
+  xcHotKey(hotKeyList)
+  console.log('需要重新注册快捷键')
+}
+
+const starAdd = (obj) => {
+  let index = [0, 1, 2, 3, 6, 7, 8, 9]
+  if (index.indexOf(obj.columnIndex) > -1) {
+    return 'star';
   }
 }
+
+onMounted(() => {
+  initializationShortcut()
+  dianJiLeiXingChaXun()
+})
+
+onUnmounted(() => {
+  logoutShortcut()
+})
+
 </script>
 
 <style scoped>

+ 3 - 5
src/components/zhu-yuan-yi-sheng/hui-zhen-shen-qing/TianJiaHuiZhenShenQing.vue

@@ -240,12 +240,10 @@ export default {
       huanZheZhenDuan.value.zhenDuanLeiXing = val
     }
 
-
     const huanZheZhenDuan = ref({
-          dialog: false,
-          zhenDuanLeiXing: 1
-        }
-    )
+      dialog: false,
+      zhenDuanLeiXing: 1
+    })
 
     const dianJiTianJiaZhuYaoZhenDuan = (val) => {
       if (huiZhenShenQing.value.hzZd.length + val.length >= 100) {

+ 133 - 127
src/views/hospitalization/zhu-yuan-yi-sheng/jian-cha-jian-yan-shen-qing/BianJiJianChaJianYanShenQing.vue

@@ -1,5 +1,7 @@
 <template>
   <el-dialog v-model="dialog" title="编辑检查" @close="guanBi">
+    <xc-code code="alt + ← / →" description="上下翻页"/>
+    <xc-code code="ctrl + s" description="保存"/>
     <el-pagination
         :current-page="index"
         :page-size="1"
@@ -23,8 +25,10 @@
         <el-col :span="12">
           <el-form-item class="bi_tian" label="检查时间:">
             <el-date-picker v-model="bianJiJianChaShuJu.startTime"
+                            ref="checkTheTimeRef"
                             format="YYYY-MM-DD HH:mm:ss" style="width: 180px" type="datetime"
-                            value-format="YYYY-MM-DD HH:mm:ss"></el-date-picker>
+                            value-format="YYYY-MM-DD HH:mm:ss">
+            </el-date-picker>
           </el-form-item>
         </el-col>
         <el-col :span="12">
@@ -136,157 +140,159 @@
   <shuo-ming-mu-ban ref="shouMingMuBan" @huoQuXuanZhongShuJu="xuanZhongMuBan"></shuo-ming-mu-ban>
 </template>
 
-<script>
+<script setup name="BianJiJianChaShenQing">
 import {computed, ref} from "vue";
 import store from "@/store";
 import ShuoMingMuBan from "@/components/zhu-yuan-yi-sheng/jian-cha-shen-qing/ShuoMingMuBan.vue";
 import {ElMessage} from "element-plus";
 import {stringIsBlank, stringNotBlank} from "@/utils/blank-utils";
 import {biaoBenApi, huoQuLinChuangZhenDuan} from "@/api/zhu-yuan-yi-sheng/jian-yan-jian-cha-shen-qing";
+import {logoutShortcut, xcHotKey} from "@/utils/xckeydown";
+import Sleep from "element-plus/packages/test-utils/sleep";
 
-export default {
-  name: "BianJiJianChaShenQing",
-  components: {ShuoMingMuBan},
-  emits: ['fan-ye'],
-  props: {
-    jianCha: {
-      type: Boolean,
-      default: true
-    }
-  },
-  setup(props, ctx) {
-    const windowSize = computed(() => {
-      return store.state.app.windowSize
-    })
+const props = defineProps({
+  jianCha: {
+    type: Boolean,
+    default: true
+  }
+})
 
-    const dialog = ref(false)
-    const bianJiJianChaShuJu = ref({})
-    const shouMingMuBan = ref(null)
-    const linChuangZhenDuanShuJu = ref([])
-    const linChuangDangQianYe = ref(1)
-    const biaoBenShuJu = ref([])
+const emit = defineEmits(['fan-ye', 'dialogCloses'])
 
-    const count = ref(0)
-    const index = ref(0)
+const nextPage = () => {
+  bianJiFenYe(index.value === count.value ? 1 : index.value += 1)
+}
 
-    const shuoMingMuBan = ref({
-      dialog: true,
-      data: [],
-      currentPage: 1,
-      total: 0,
-      leiXing: 2,
-      name: ''
-    })
-    // 诊断来源
-    const zhenDuanLaiYuan = ref(false)
+const previousPage = () => {
+  bianJiFenYe(index.value === 1 ? count.value : index.value -= 1)
+}
 
-    const daKaiBenDuiHua = (val, xiaBiao, zhongShu) => {
-      index.value = xiaBiao + 1
-      count.value = zhongShu
-      dialog.value = true
-      bianJiJianChaShuJu.value = val
-      if (stringNotBlank(val.diagCode)) {
-        linChuangZhenDuanShuJu.value.push({code: val.diagCode, name: val.diagText})
-      }
-      if (!props.jianCha) {
-        if (stringNotBlank(val.inspectStuffName)) {
-          biaoBenShuJu.value.push({code: val.inspectStuff, name: val.inspectStuffName})
-        }
-      }
-    }
+const guanBi = () => {
+  biaoBenShuJu.value = []
+  linChuangZhenDuanShuJu.value = []
+  bianJiJianChaShuJu.value = {}
+  dialog.value = false
+  logoutShortcut()
+  emit('dialogCloses')
+}
 
-    const daKaiShuoMingMuBan = () => {
-      shouMingMuBan.value.dialog = true
-      shouMingMuBan.value.huoQuShuoMingMuBan(0)
-    }
+let hotKeyList = {
+  alt: {'ArrowRight': nextPage, 'ArrowLeft': previousPage},
+  ctrl: {'s': guanBi}
+}
 
-    const xuanZhongMuBan = (val) => {
-      if (stringIsBlank(bianJiJianChaShuJu.value.reqComment)) {
-        bianJiJianChaShuJu.value.reqComment = ''
-      }
-      if (val.length + bianJiJianChaShuJu.value.reqComment.length > 125) {
-        return ElMessage.error('字符超长无法添加,病室摘要最多125个字。')
-      }
-      bianJiJianChaShuJu.value.reqComment += val + ','
-      ElMessage.success('复制成功。')
-    }
+const enableShortcutKeys = () => {
+  xcHotKey(hotKeyList)
+}
 
-    const linChuangZhenDuanSuoSou = (val) => {
-      if (stringNotBlank(val) && val.length > 1) {
-        huoQuLinChuangZhenDuan(val, zhenDuanLaiYuan.value).then(res => {
-          linChuangZhenDuanShuJu.value = res
-        })
-      }
-    }
+const windowSize = computed(() => {
+  return store.state.app.windowSize
+})
 
-    const huoQuXiangXiZhenDuan = (val) => {
-      if (stringIsBlank(val)) return
-      for (let item of linChuangZhenDuanShuJu.value) {
-        if (item.code === val) {
-          return bianJiJianChaShuJu.value.diagText = item.name
-        }
-      }
-    }
+const dialog = ref(false)
+const bianJiJianChaShuJu = ref({})
+const shouMingMuBan = ref(null)
+const linChuangZhenDuanShuJu = ref([])
+const linChuangDangQianYe = ref(1)
+const biaoBenShuJu = ref([])
+let checkTheTimeRef = $ref(null)
 
-    const bianJiFenYe = (val) => {
-      biaoBenShuJu.value = []
-      linChuangZhenDuanShuJu.value = []
-      index.value = val
-      ctx.emit('fan-ye', {val})
-    }
+const count = ref(0)
+const index = ref(0)
 
-    const linChuangFanYe = (val) => {
-      linChuangDangQianYe.value = val
-    }
+const shuoMingMuBan = ref({
+  dialog: true,
+  data: [],
+  currentPage: 1,
+  total: 0,
+  leiXing: 2,
+  name: ''
+})
+// 诊断来源
+const zhenDuanLaiYuan = ref(false)
 
-    const guanBi = () => {
-      biaoBenShuJu.value = []
-      linChuangZhenDuanShuJu.value = []
-      bianJiJianChaShuJu.value = {}
-      dialog.value = false
+const daKaiBenDuiHua = async (val, xiaBiao, zhongShu) => {
+  index.value = xiaBiao + 1
+  count.value = zhongShu
+  bianJiJianChaShuJu.value = val
+  if (stringNotBlank(val.diagCode)) {
+    linChuangZhenDuanShuJu.value.push({code: val.diagCode, name: val.diagText})
+  }
+  if (!props.jianCha) {
+    if (stringNotBlank(val.inspectStuffName)) {
+      biaoBenShuJu.value.push({code: val.inspectStuff, name: val.inspectStuffName})
     }
+  }
+  dialog.value = true
+  enableShortcutKeys()
+  // await Sleep(2000)
+  // checkTheTimeRef.focus()
+}
 
-    const bianBenMing = (val) => {
-      for (let item of biaoBenShuJu.value) {
-        if (item.code === val) {
-          return bianJiJianChaShuJu.value.inspectStuffName = item.name
-        }
-      }
-    }
-    const biaoBenSouSuo = (val) => {
-      if (val.length > 1) {
-        biaoBenApi(val).then((res) => {
-          biaoBenShuJu.value = res
-        })
-      }
+const daKaiShuoMingMuBan = () => {
+  shouMingMuBan.value.dialog = true
+  shouMingMuBan.value.huoQuShuoMingMuBan(0)
+}
+
+const xuanZhongMuBan = (val) => {
+  if (stringIsBlank(bianJiJianChaShuJu.value.reqComment)) {
+    bianJiJianChaShuJu.value.reqComment = ''
+  }
+  if (val.length + bianJiJianChaShuJu.value.reqComment.length > 125) {
+    return ElMessage.error('字符超长无法添加,病室摘要最多125个字。')
+  }
+  bianJiJianChaShuJu.value.reqComment += val + ','
+  ElMessage.success('复制成功。')
+}
+
+const linChuangZhenDuanSuoSou = (val) => {
+  if (stringNotBlank(val) && val.length > 1) {
+    huoQuLinChuangZhenDuan(val, zhenDuanLaiYuan.value).then(res => {
+      linChuangZhenDuanShuJu.value = res
+    })
+  }
+}
+
+const huoQuXiangXiZhenDuan = (val) => {
+  if (stringIsBlank(val)) return
+  for (let item of linChuangZhenDuanShuJu.value) {
+    if (item.code === val) {
+      return bianJiJianChaShuJu.value.diagText = item.name
     }
+  }
+}
+
+const bianJiFenYe = async (val) => {
+  biaoBenShuJu.value = []
+  linChuangZhenDuanShuJu.value = []
+  index.value = val
+  emit('fan-ye', {val})
 
-    return {
-      dialog,
-      bianJiJianChaShuJu,
-      shuoMingMuBan,
-      windowSize,
-      zhenDuanLaiYuan,
-      daKaiShuoMingMuBan,
-      shouMingMuBan,
-      xuanZhongMuBan,
-      linChuangZhenDuanShuJu,
-      linChuangZhenDuanSuoSou,
-      daKaiBenDuiHua,
-      huoQuXiangXiZhenDuan,
-      linChuangDangQianYe,
-      linChuangFanYe,
-      guanBi,
-      bianJiFenYe,
-      count,
-      index,
-      jianCha: props.jianCha,
-      biaoBenShuJu,
-      biaoBenSouSuo,
-      bianBenMing
+}
+
+const linChuangFanYe = (val) => {
+  linChuangDangQianYe.value = val
+}
+
+
+const bianBenMing = (val) => {
+  for (let item of biaoBenShuJu.value) {
+    if (item.code === val) {
+      return bianJiJianChaShuJu.value.inspectStuffName = item.name
     }
   }
 }
+const biaoBenSouSuo = (val) => {
+  if (val.length > 1) {
+    biaoBenApi(val).then((res) => {
+      biaoBenShuJu.value = res
+    })
+  }
+}
+
+
+defineExpose({daKaiBenDuiHua})
+
 </script>
 
 <style scoped>

+ 138 - 18
src/views/hospitalization/zhu-yuan-yi-sheng/yi-zhu-lu-ru/TianJiaYiZhu.vue

@@ -227,11 +227,19 @@
     </el-row>
   </el-form>
   <el-button icon="el-icon-plus" type="primary" @click="tianJiaYiZhu">添加</el-button>
-  <xc-code code="Ctrl+S" description="键盘添加"></xc-code>
-  <xc-code code="Ctrl+f" description="打开搜索框"></xc-code>
-  <xc-code code="Ctrl+1" description="回到第一个输入框"></xc-code>
+  <xc-code code="Ctrl + S" description="键盘添加"/>
+  <xc-code code="Ctrl + F" description="打开搜索框"/>
+  <xc-code code="Ctrl + 1" description="回到第一个输入框(数字1)"/>
+  <xc-code code="Alt + PgUp / PgDn" description="医嘱上下"/>
+  <xc-code code="Alt + ← / →" description="编辑(←) / 复制 (→)"/>
+  <xc-code code="Alt + D " description="删除选中的医嘱"/>
   <el-button @click="dianJiXiuGaiZhiXingKeShi">修改执行科室</el-button>
-  <el-table :data="yiZhuList" :height="windowSize.h / 2.4" @selection-change="dianJiXuanZhongShuJu">
+  <el-table :data="yiZhuList"
+            ref="elTableRef"
+            :height="windowSize.h / 2.4"
+            @selection-change="dianJiXuanZhongShuJu"
+            :row-class-name="doctorSOrderForm"
+            @row-click="whenClickingOnTheForm">
     <el-table-column type="selection"></el-table-column>
     <el-table-column label="排序" type="index"></el-table-column>
     <el-table-column label="uuid" prop="id"></el-table-column>
@@ -319,6 +327,7 @@ import YaoPingXiangQing from '@/components/zhu-yuan-yi-sheng/he-li-yong-yao/YaoP
 import AllergenEntry from "@/components/zhu-yuan-yi-sheng/AllergenEntry.vue";
 import Sleep from "element-plus/packages/test-utils/sleep";
 import {logoutShortcut, xcHotKey} from "@/utils/xckeydown";
+import {BizException, ExceptionEnum} from "@/utils/BizException";
 
 const windowSize = computed(() => {
   return store.state.app.windowSize
@@ -330,6 +339,10 @@ const seconds = ref(600)
 const count = ref('')
 // 转科医嘱 编码
 const zkCode = '06286'
+// 当前的下标
+let dataIndex = $ref(-1)
+// 表格的 ref
+let elTableRef = $ref(null)
 
 const yiZhuData = ref({
   id: '',
@@ -451,7 +464,7 @@ const xuanZhongFeiYong = async (row) => {
             }
           }
         })
-        .catch(async (e) => {
+        .catch(async () => {
           await Sleep(500)
           qingKong()
         })
@@ -468,19 +481,20 @@ const xuanZhongFeiYong = async (row) => {
             yiZhuData.value.dose = 1
           }
         })
-        .catch((e) => {
-          setTimeout(() => {
-            qingKong()
-          }, 500)
+        .catch(async () => {
+          await Sleep(500)
+          qingKong()
         })
   }
   // 判断这个是不是 新添加的数据 如果是空的就是 新数据
-  if (stringIsBlank(row.newData)) {
-    getServerDateApi().then((res) => {
-      yiZhuData.value.orderTime = res
-      yiZhuData.value.startTime = res
-    })
-  }
+  getServerDateApi().then((res) => {
+    if (!yiZhuData.value.orderTime) {
+      yiZhuData.value.orderTime = res;
+    }
+    if (!yiZhuData.value.startTime) {
+      yiZhuData.value.startTime = res;
+    }
+  })
   // 用来加载默认的执行科室
   if (stringIsBlank(row.execUnit)) {
     if (stringNotBlank(huanZheXinXi.value.smallDept)) {
@@ -601,13 +615,23 @@ const tianJiaYiZhu = () => {
       })
 }
 
+
+/**
+ * 是否重置数据下标,这个是用来判断需不需要 回到默认值
+ */
+const whetherToResetTheDataSubscript = () => {
+  if (dataIndex >= yiZhuList.value.length) {
+    dataIndex--
+  }
+}
+
 /* 这个是点击单个修改的 */
 const xiuGaiYiZhu = (val) => {
-  val.newData = true
   xuanZhongFeiYong(val)
   ElMessage.success('你点击了修改')
   yiZhuList.value.splice(val, 1)
   tianJiaYiZhuWeiYiBiaoShi.value.splice(val, 1)
+  whetherToResetTheDataSubscript()
 }
 
 /* 删除表格医嘱 */
@@ -615,6 +639,7 @@ const shanChuBiaoGeYiZhu = (val) => {
   yiZhuList.value.splice(val, 1)
   tianJiaYiZhuWeiYiBiaoShi.value.splice(val, 1)
   ElMessage.success('删除成功')
+  whetherToResetTheDataSubscript()
 }
 
 /* 复制医嘱 */
@@ -868,7 +893,6 @@ let HeLiYongYao = $ref({
   dialog: false,
   code: '',
 })
-
 const tiaoZhuanZhiHeLiYongYao = () => {
   window.open('http://172.16.32.121:9097/index.html')
 }
@@ -877,6 +901,7 @@ const tiaoZhuanZhiHeLiYongYao = () => {
 let allergenDialog = $ref(false)
 /////  过敏源结束
 
+/// 这里是 ctrl 快捷键
 /**
  * 保存或添加医嘱
  */
@@ -895,12 +920,107 @@ const openSearchBox = () => {
   yiZhuMingDialog = true
 }
 
+/// 这里是 ctrl 快捷键 结束
+
 const regainFocus = () => {
   pingLv.focus()
 }
 
+// 这里是表格事件
+/**
+ * 表格样式
+ * @param row 行
+ * @param rowIndex 下标
+ * @returns {string} 样式
+ */
+const doctorSOrderForm = ({row, rowIndex}) => {
+  row.tableIndex = rowIndex
+  if (dataIndex === rowIndex) {
+    return 'input_and_table_to_be_selected'
+  }
+}
+
+/**
+ * 点击表格时触发的事件
+ * @param row 当前表格数据
+ * @param column 当前行
+ * @param event 事件
+ */
+const whenClickingOnTheForm = (row, column, event) => {
+  dataIndex = row.tableIndex
+}
+
+// 这里是表格事件 结束
+
+// 这里是 alt 快捷键
+
+/**
+ * 检查是否存在医嘱数据
+ * @param checkJudgment 判断是否检查选中数据
+ */
+const dataJudgmentIsEmpty = (checkJudgment) => {
+  let pageDataLength = yiZhuList.value.length
+  if (pageDataLength <= 0) {
+    BizException(ExceptionEnum.MESSAGE_ERROR, '请选选择数据')
+  }
+  if (checkJudgment) {
+    if (dataIndex === -1) {
+      BizException(ExceptionEnum.MESSAGE_ERROR, '请选选择数据')
+    }
+  }
+}
+
+const scrollBarSynchronization = () => {
+  try {
+    const targetTop = elTableRef.$el.querySelectorAll('.el-table__body tr')[dataIndex].getBoundingClientRect().top //该行的位置
+    const containerTop = elTableRef.$el.querySelector('.el-table__body').getBoundingClientRect().top //body的位置
+    elTableRef.$refs.bodyWrapper.scrollTop = targetTop - containerTop
+  } catch (e) {
+    // console.error(e)
+  }
+}
+
+const upData = () => {
+  dataJudgmentIsEmpty(false);
+  let pageDataLength = yiZhuList.value.length
+  dataIndex <= 0 ? dataIndex = pageDataLength - 1 : dataIndex--
+  scrollBarSynchronization()
+}
+
+const downData = () => {
+  dataJudgmentIsEmpty(false);
+  let pageDataLength = yiZhuList.value.length
+  dataIndex === pageDataLength - 1 ? dataIndex = 0 : dataIndex++
+  scrollBarSynchronization()
+}
+
+const copyData = () => {
+  dataJudgmentIsEmpty(true);
+  dianJiFuZhiYiZhu(yiZhuList.value[dataIndex]);
+}
+
+const editData = () => {
+  dataJudgmentIsEmpty(true);
+  xiuGaiYiZhu(yiZhuList.value[dataIndex]);
+}
+
+const deleteSelectedOrders = () => {
+  dataJudgmentIsEmpty(true);
+  shanChuBiaoGeYiZhu(yiZhuList.value[dataIndex])
+}
+
+// alt 快捷键结束
+
+// 注册快捷键的 list
 let shortcutKeyRegistration = {
-  ctrl: {'s': saveOrAddADoctorSOrder, 'f': openSearchBox, '1': regainFocus}
+  ctrl: {'s': saveOrAddADoctorSOrder, 'f': openSearchBox, '1': regainFocus,},
+  alt: {
+    'PageUp': upData,
+    'PageDown': downData,
+    'ArrowRight': copyData,
+    'ArrowLeft': editData,
+    'd': deleteSelectedOrders
+  },
 }
 
 onMounted(() => {

+ 5 - 0
src/views/hospitalization/zhu-yuan-yi-sheng/yi-zhu-lu-ru/YiZhuLuRu.vue

@@ -66,6 +66,7 @@
           row-key="actOrderNo"
           @selection-change="huoQuXuanZhongDeShuJu"
           @select-all="quanXuanYiZhu"
+          @row-click="clickOnTheForm"
       >
         <el-table-column fixed="left" type="index"></el-table-column>
         <el-table-column fixed="left" type="selection"></el-table-column>
@@ -385,6 +386,10 @@ const quanXuanYiZhu = (selection) => {
   }
 }
 
+const clickOnTheForm = (row, column, event) => {
+  tableRef.value.toggleRowSelection(row, !xuanZhongDeShuJu.value.includes(row));
+}
+
 /**
  * 点击复制医嘱
  */