Browse Source

Merge branch 'master' into 淮海科技

lighter 2 months ago
parent
commit
cd026580cc

+ 85 - 2
release/不删除文件.bat

@@ -1,2 +1,85 @@
-net use \\172.16.32.160 "thyy@2018" /user:"administrator"
-robocopy ./dist \\172.16.32.160\D$\a.snapshot\web-server\dist /E /Z /R:1 /W:1
+@echo off
+chcp 65001 >nul
+setlocal enabledelayedexpansion
+
+echo 正在建立网络连接...
+net use \\172.16.32.160 "thyy@2018" /user:"administrator" >nul 2>&1
+if !errorlevel! neq 0 (
+    echo 网络连接失败!
+    pause
+    exit /b 1
+)
+echo 网络连接成功!
+
+echo.
+echo 设置源目录和目标目录...
+set "source_dir=.\dist"
+set "target_dir=\\172.16.32.160\D$\a.snapshot\web-server\dist"
+
+echo 创建目标目录...
+mkdir "%target_dir%" >nul 2>&1
+
+echo.
+echo 扫描目录: %source_dir%
+dir /b "%source_dir%" | find /v ""
+
+echo.
+echo === 开始上传文件夹 ===
+for /d %%d in ("%source_dir%\*") do (
+    set "folder_name=%%~nxd"
+
+    rem 可以在这里添加要排除的文件夹
+    set "exclude=0"
+    if /i "!folder_name!"==".git" set "exclude=1"
+    if /i "!folder_name!"=="node_modules" set "exclude=1"
+    if /i "!folder_name!"=="temp" set "exclude=1"
+
+    if !exclude! equ 0 (
+        echo [文件夹] 正在上传: !folder_name!
+        robocopy "%source_dir%\!folder_name!" "%target_dir%\!folder_name!" /E /Z /R:1 /W:1 /NP
+    ) else (
+        echo [文件夹] 跳过排除的文件夹: !folder_name!
+    )
+)
+
+echo.
+echo === 开始上传文件 ===
+for %%f in ("%source_dir%\*.*") do (
+    set "file_name=%%~nxf"
+    set "file_ext=%%~xf"
+
+    rem 排除系统文件和无效文件名
+    if not "!file_name!"=="" if not "!file_name!"=="." if not "!file_name!"==".." (
+        if exist "%source_dir%\!file_name!" (
+            if not exist "%source_dir%\!file_name!\" (
+
+                rem 可以在这里添加要排除的文件类型
+                set "exclude_file=0"
+                if /i "!file_ext!"==".tmp" set "exclude_file=1"
+                if /i "!file_ext!"==".log" set "exclude_file=1"
+                if /i "!file_ext!"==".bak" set "exclude_file=1"
+
+                if !exclude_file! equ 0 (
+                    echo [文件] 正在上传: !file_name!
+                    robocopy "%source_dir%" "%target_dir%" "!file_name!" /Z /R:1 /W:1 /NP
+                ) else (
+                    echo [文件] 跳过排除的文件: !file_name!
+                )
+            )
+        )
+    )
+)
+
+echo.
+echo === 上传完成 ===
+echo 统计信息:
+echo 源目录: %source_dir%
+echo 目标目录: %target_dir%
+echo 完成时间: %date% %time%
+
+echo.
+echo 断开网络连接...
+net use \\172.16.32.160 /delete >nul 2>&1
+
+echo.
+echo 所有文件已自动上传完成!

+ 14 - 0
src/api/autoCreateEmr.ts

@@ -0,0 +1,14 @@
+import requestV2 from "@/utils/request-v2";
+
+export function createEmr(data: {
+  patNo: string;
+  times: number;
+  createCode?: string;
+  taskName?: string[];
+}) {
+  return requestV2({
+    url: "/autoCreateEmr/createEmr",
+    data,
+    method: "post",
+  });
+}

+ 9 - 0
src/api/yp-codg/yp-codg-match.js

@@ -62,4 +62,13 @@ export function selectMzDrugTracCodgData(data) {
         method: 'post',
         data
     })
+}
+
+// 发药后更新门诊处方药品追溯码匹配情况
+export function updateMzDrugCodgDataNew(data){
+    return request({
+        url: '/ypMatch/updateMzDrugCodgDataNew',
+        method: 'post',
+        data
+    })
 }

+ 27 - 27
src/components/medical-advice/temperature/graphics.vue

@@ -180,41 +180,41 @@
         <!-- <record></record> -->
         <tr class="recorde temperature_mark">
           <td colspan="2" rowspan="45" style="border-right: 1px solid white">
-            <div style="margin-top: 476px; height: 31px">
+            <div style="margin-top: 530px; height: 31px">
               <p style="width: 35px">
-                <span>口表•</span>
-                <span style="color: blue">腋表x</span>
-                <span>肛表o</span>
-                <span style="color: red">脉搏•</span>
-                <span style="color: red">心率o</span>
+                <span>口表•</span><br/>
+                <span style="color: blue">腋表x</span><br/>
+                <span>肛表o</span><br/>
+                <span style="color: red">脉搏•</span><br/>
+                <span style="color: red">心率o</span><br/>
               </p>
               <p></p>
             </div>
           </td>
           <td colspan="3" rowspan="45">
             <div style="color: red" class="num_wrapper">
-              <p style="margin-top: 0; text-align: right">脉搏次/分</p>
-              <p style="margin-top: 32px">180</p>
-              <p style="margin-top: 55px">160</p>
-              <p style="margin-top: 55px">140</p>
-              <p style="margin-top: 55px">120</p>
-              <p style="margin-top: 55px">100</p>
-              <p style="margin-top: 55px">80</p>
-              <p style="margin-top: 56px">60</p>
-              <p style="margin-top: 56px">40</p>
+              <p style="margin-top: 0; text-align: center">脉搏<br/>(次/分)</p>
+              <p style="margin-top: 40px">180</p>
+              <p style="margin-top: 64px">160</p>
+              <p style="margin-top: 64px">140</p>
+              <p style="margin-top: 60px">120</p>
+              <p style="margin-top: 60px">100</p>
+              <p style="margin-top: 60px">80</p>
+              <p style="margin-top: 60px">60</p>
+              <p style="margin-top: 60px">40</p>
             </div>
           </td>
           <td colspan="3" rowspan="45">
             <div style="color: blue" class="num_wrapper">
-              <p style="margin-top: 0">体温<br />x</p>
-              <p style="margin-top: 32px">41</p>
-              <p style="margin-top: 55px">40</p>
-              <p style="margin-top: 55px">39</p>
-              <p style="margin-top: 55px">38</p>
-              <p style="margin-top: 55px">37</p>
-              <p style="margin-top: 55px">36</p>
-              <p style="margin-top: 56px">35</p>
-              <p style="margin-top: 56px">34</p>
+              <p style="margin-top: 0;">体温<br />℃</p>
+              <p style="margin-top: 40px">41</p>
+              <p style="margin-top: 64px">40</p>
+              <p style="margin-top: 64px">39</p>
+              <p style="margin-top: 60px">38</p>
+              <p style="margin-top: 60px">37</p>
+              <p style="margin-top: 60px">36</p>
+              <p style="margin-top: 60px">35</p>
+              <p style="margin-top: 60px">34</p>
             </div>
           </td>
           <td
@@ -824,17 +824,17 @@ export default {
       var yScale = d3
         .scaleLinear()
         .domain([33, 42])
-        .range([height - padding.top - padding.bottom, -56]);
+        .range([height - padding.top - padding.bottom, 0]);
       // 脉搏
       var yScale1 = d3
         .scaleLinear()
         .domain([20, 200])
-        .range([height - padding.top - padding.bottom, -55]);
+        .range([height - padding.top - padding.bottom, 10]);
       // 呼吸
       var yScale2 = d3
         .scaleLinear()
         .domain([0, 40])
-        .range([height - padding.top + 22, -55]);
+        .range([height - padding.top + 22, 10]);
 
       // 创建x轴
       var xAxis = d3.axisBottom().scale(xScale);

+ 28 - 7
src/components/print-poisonous-hemp/PrintPoisonousHempTemplate.vue

@@ -6,6 +6,8 @@ import { cptSex } from "@/utils/computed";
 import Pr from "@/assets/prescription.png";
 import { useVuePrint } from "@/utils/cy-use/useVuePrint";
 import dayjs from "dayjs";
+import { stringIsBlank } from "@/utils/blank-utils";
+import { xcMessage } from "@/utils/xiaochan-element-plus";
 
 const props = defineProps<{
   data: PrintOrderVo;
@@ -20,7 +22,9 @@ const drugFlag = [
 ];
 
 const state = reactive({
-  data: {} as PrintOrderVo,
+  data: {
+    diagnose: "",
+  } as PrintOrderVo,
   // 重新整理一下数据
   tempData: {},
   qrCodeImage: "",
@@ -71,6 +75,7 @@ async function printPrescription(red: boolean) {
   const tmp = [];
   state.currentDrugData = [];
   const canvas = document.createElement("canvas");
+  state.printTime = dayjs().format("YYYY年MM月DD日");
 
   drugFlag.forEach(item => {
     let tmpDrug = [];
@@ -88,7 +93,6 @@ async function printPrescription(red: boolean) {
           height: 6,
           margin: 0,
           displayValue: false,
-          // fontSize: 10,
         });
         i.qrCode = canvas.toDataURL("image/png");
       });
@@ -131,12 +135,18 @@ defineExpose({
     </aside>
     <div class="layout_main layout_container">
       <header>
+        诊断:
+        <el-input v-model="state.data.diagnose" style="width: 120px" />
         <el-button @click="printPrescription(true)">红色处方</el-button>
         <el-button @click="printPrescription(false)">终止妊娠</el-button>
         <el-button
           @click="
             () => {
-              printFunc();
+              if (stringIsBlank(state.data.diagnose)) {
+                xcMessage.error('诊断不能为空');
+              } else {
+                printFunc();
+              }
             }
           "
           >打印
@@ -155,7 +165,8 @@ defineExpose({
                 flex-direction: column;
                 height: 210mm;
                 width: 148mm;
-                padding: 6pt;
+                padding: 10pt;
+                overflow: hidden;
               "
             >
               <div style="text-align: right">
@@ -288,7 +299,7 @@ defineExpose({
                         class="print-poisonous-hemp__tag--underline"
                         colspan="2"
                       >
-                        {{ dayjs(item.startTime).format("YYYY年MM月DD日") }}
+                        {{ state.printTime }}
                       </td>
                     </tr>
                     <tr>
@@ -366,7 +377,9 @@ defineExpose({
                           style="width: 33%"
                           class="print-poisonous-hemp__tag--text-right"
                         >
-                          {{ item.supplyName }}
+                          {{ item.supplyName }}&nbsp;&nbsp;&nbsp;&nbsp;{{
+                            item.frequName
+                          }}
                         </td>
                         <td style="width: 33%"></td>
                       </tr>
@@ -380,7 +393,7 @@ defineExpose({
                               type="number"
                             />mg 按医疗垃圾处理&nbsp;&nbsp;&nbsp;
                           </span>
-                          <span>
+                          <span :class="item.dropAmt ? '' : 'print-none'">
                             双人签名:<span
                               style="width: 90pt; display: inline-block"
                               class="print-poisonous-hemp__tag--underline"
@@ -437,6 +450,14 @@ defineExpose({
                   style="width: 23%"
                 ></div>
               </div>
+              <div style="height: 4pt"></div>
+              <div style="display: flex">
+                <div>领药人:</div>
+                <div
+                  class="print-poisonous-hemp__tag--underline"
+                  style="width: 23%"
+                ></div>
+              </div>
               <div style="margin: 5pt 0; border-top: 0.75pt solid #000"></div>
               <div>说明:根据《处方管理办法》,本处方开具当日有效。</div>
             </div>

+ 0 - 1
src/components/zhu-yuan-yi-sheng/YzTag.vue

@@ -166,7 +166,6 @@ const pathList = ref([
     disable: true,
   },
 ]);
-const fileName = ref("v1.1.0");
 
 const activation = (val, frequCode = "") => {
   if (router.currentRoute.value.href === val) {

+ 13 - 23
src/components/zhu-yuan-yi-sheng/yi-zhu-lu-ru/yz-edit/YzEditor.vue

@@ -58,29 +58,16 @@
         </div>
         <div>
           领量:
-          <template v-if="queryParam.frequCode === 'takeMedicine'">
-            <el-input-number
-              style="width: 60px"
-              ref="drugQuanRef"
-              @keydown="drugQuanChange"
-              v-model="yiZhuData.drugQuan"
-              :min="1"
-              :controls="false"
-            />
-            <span style="color: red">{{ yiZhuData.miniUnitName }}</span>
-          </template>
-          <template v-else-if="yiZhuData.serial === '00'">
-            <el-input-number
-              style="width: 60px"
-              v-model="yiZhuData.drugQuan"
-              :min="0"
-              :controls="false"
-            />
-          </template>
-          <template v-else>
-            {{ yiZhuData.drugQuan }}
-            {{ yiZhuData.miniUnitName }}
-          </template>
+          <el-input-number
+            style="width: 40px"
+            ref="drugQuanRef"
+            class="el-input-number__no-controls"
+            @keydown="drugQuanChange"
+            v-model="yiZhuData.drugQuan"
+            :min="1"
+            :controls="false"
+          />
+          <span style="color: red">{{ yiZhuData.miniUnitName }}</span>
         </div>
       </div>
       <div class="yz_input__box">
@@ -798,6 +785,9 @@ const jiSuanLingLiang = async val => {
   if (yiZhuData.value.selfBuy === "4") {
     return;
   }
+  if (yiZhuData.value.serial === "00") {
+    return;
+  }
   if (jiLiangValue.value <= 0) {
     return;
   }

+ 8 - 2
src/utils/emr/emr-init-v2.ts

@@ -1,6 +1,6 @@
 // @ts-nocheck
 import { EditType, Runtime } from "./edit";
-import { resolveDirective, UnwrapRef, withDirectives } from "vue";
+import { UnwrapRef } from "vue";
 import { BizException, ExceptionEnum } from "../BizException";
 import { ElMessageBox } from "element-plus";
 import XEUtils from "xe-utils";
@@ -113,7 +113,13 @@ export function useEmrDiv(
   options?: Options,
   cb?: (res: UseEmrInitReturn) => void
 ) {
-  const divRef = shallowRef<{ rst: UseEmrInitReturn }>();
+  const divRef = shallowRef<{
+    rst: UseEmrInitReturn;
+    myEmr: {
+      emr: EditType;
+      runtime: Runtime;
+    };
+  }>();
   const showLoading = shallowRef(true);
 
   const DivIframe = defineComponent({

+ 3 - 0
src/views/hospitalization/zhu-yuan-yi-sheng/public-js/zhu-yuan-yi-sheng.ts

@@ -1256,6 +1256,9 @@ export async function longOrderToOnce(orders: number[]) {
       tmp.push(item);
     }
   });
+  if (tmp.length === 0) {
+    return;
+  }
   tmp = XEUtils.orderBy(tmp, [["actOrderNo", "asc"]]);
   return await useDialog(CopyOnceDialog, {
     dialogProps: {

+ 1 - 1
src/views/medical-advice/patient-info/AdjustBed.vue

@@ -391,7 +391,7 @@ const handleAge = (birthDate,currentDate) => {
 function handleSelectPh(val) {
   receiveRow.value.phry = val.code
   showSearchPh.value = false
-  ElMessageBox.confirm(`已选择护人员【${val.name}】,是否确认接收患者?`, '提示', {
+  ElMessageBox.confirm(`已选择护人员【${val.name}】,是否确认接收患者?`, '提示', {
     type: "warning",
     confirmButtonText: "接收",
   }).then(() => {

+ 6 - 3
src/views/yp-codg/YpCodgMatch.vue

@@ -62,10 +62,12 @@
                 <el-table-column prop="mdtrtId" label="就诊ID" width="120"/>
                 <el-table-column fixed="right" label="操作" min-width="180" width="180" header-align="center" align="center">
                   <template #default="scope">
-                    <el-button type="primary" size="small" @click="matchCodgForCf(scope.row)">配药
+                    <el-button type="primary" size="small" @click="matchCodgForCf(scope.row, 0)">配药
                     </el-button>
                     <el-button v-if="scope.row.confirmFlag !== 1 " type="danger" size="small" @click="deleteCodgForCf(scope.row)">删除配药
                     </el-button>
+                    <el-button v-if="scope.row.confirmFlag === 1 " type="danger" size="small" @click="matchCodgForCf(scope.row, 1)">变更配药
+                    </el-button>
                   </template>
                 </el-table-column>
               </el-table>
@@ -177,11 +179,12 @@ const queryMzChargePrescription = () => {
 // 处方匹配药品追溯码
 const showMzMatchCodg = ref(false)
 const ypMzCfData = ref({})
-const matchCodgForCf = (row) => {
+const matchCodgForCf = (row, flag) => {
   ypMzCfData.value = {
     ...row,
     patNo: row.patientId,
-    times: row.times
+    times: row.times,
+    flag: flag
   }
   showMzMatchCodg.value = true
 }

+ 39 - 16
src/views/yp-codg/YpMzCodgMatch.vue

@@ -12,6 +12,7 @@
       <el-button type="danger" icon="Remove" @click="drugBarRepeat" style="margin-left: 5px">去重</el-button>
       <el-button type="warning" icon="Filter" @click="matchCodgData" style="margin-left: 5px">匹配</el-button>
       <el-button type="success" icon="Select" @click="saveMatchCodgData" style="margin-left: 5px" v-if="confirmFlag !== 1">保存</el-button>
+      <el-button type="success" icon="Select" @click="saveMatchCodgData" style="margin-left: 5px" v-if="chargeFlag === 1">变更</el-button>
       <el-button type="danger" v-show="setlText" disabled :icon="Star"><span style="font-size: 14px">医保病人</span></el-button>
     </header>
     <div class="layout_display_flex_y">
@@ -39,11 +40,11 @@
         <el-row :gutter="5">
           <el-col :span="3">
             <el-divider content-position="left">追溯码采集信息</el-divider>
-            <el-input v-model="codgLine" type="textarea" rows="36"/>
+            <el-input v-model="codgLine" type="textarea" :rows="36"/>
           </el-col>
           <el-col :span="3">
             <el-divider content-position="left">追溯码检查信息</el-divider>
-            <el-input v-model="drugTracCodgAt" type="textarea" rows="36"/>
+            <el-input v-model="drugTracCodgAt" type="textarea" :rows="36"/>
           </el-col>
           <el-col :span="18">
             <el-divider content-position="left">追溯码匹配信息</el-divider>
@@ -82,7 +83,8 @@ import {
   selectMatchCodgInfo,
   selectMzCfDetail,
   selectMzDrugTracCodgData,
-  updateMzDrugCodgData
+  updateMzDrugCodgData,
+  updateMzDrugCodgDataNew
 } from "@/api/yp-codg/yp-codg-match.js";
 import {isEmpty} from "xe-utils";
 import {ElMessage, ElMessageBox} from "element-plus";
@@ -96,6 +98,8 @@ const codgTotal = ref(0)
 // 处方匹配的追溯码信息
 const codgInfo = ref([])
 const confirmFlag = ref(0)
+// 已经发药了,变更追溯码信息
+const chargeFlag = ref(0)
 const emit = defineEmits(['close', 'closeYpMzCodgMatch'])
 
 const props = defineProps({
@@ -108,6 +112,7 @@ onMounted( () => {
   nextTick(() => {
     mzCfData.value = props.ypMzCfData
     confirmFlag.value = props.ypMzCfData.confirmFlag
+    chargeFlag.value = props.ypMzCfData.flag
     setlText.value = props.ypMzCfData.setlId
     queryMzCfDetail()
     queryMzDrugCodgMatch()
@@ -116,6 +121,7 @@ onMounted( () => {
 watch(() => props.ypMzCfData, () => {
   mzCfData.value = props.ypMzCfData
   confirmFlag.value = props.ypMzCfData.confirmFlag
+  chargeFlag.value = props.ypMzCfData.flag
   setlText.value = props.ypMzCfData.setlId
 })
 
@@ -279,25 +285,42 @@ const saveMatchCodgData = () => {
     });
     return false
   }
-
-  ElMessageBox.confirm('确定保存药品匹配信息?', {
+  let tips = "确定保存药品匹配信息?"
+  if(chargeFlag.value === 1){
+    tips = "确定变更药品匹配信息?【友情提示:已经上传医保的追溯码,请取消上传再变更追溯码信息!】"
+  }
+  ElMessageBox.confirm(tips, {
     cancelButtonText: '取消',
     confirmButtonText: '确定',
     type: 'warning',
     distinguishCancelAndClose: true,
     dangerouslyUseHTMLString: true
   }).then(() => {
-    updateMzDrugCodgData(codgInfo.value).then((res) => {
-      if(res.code === 0){
-        ElMessage({
-          type: "success",
-          message: res.message,
-          duration: 2500,
-          showClose: true,
-        });
-        emit('closeYpMzCodgMatch', true)
-      }
-    })
+    if(chargeFlag.value === 1){
+      updateMzDrugCodgDataNew(codgInfo.value).then((res) => {
+        if(res.code === 0){
+          ElMessage({
+            type: "success",
+            message: res.message,
+            duration: 2500,
+            showClose: true,
+          });
+          emit('closeYpMzCodgMatch', true)
+        }
+      })
+    } else {
+      updateMzDrugCodgData(codgInfo.value).then((res) => {
+        if(res.code === 0){
+          ElMessage({
+            type: "success",
+            message: res.message,
+            duration: 2500,
+            showClose: true,
+          });
+          emit('closeYpMzCodgMatch', true)
+        }
+      })
+    }
   }).catch((action) => {
     if (action === 'cancel') {
       console.log("已取消。。。")