Sfoglia il codice sorgente

Merge remote-tracking branch 'upstream/master'

hsh 3 anni fa
parent
commit
449e5e9069

+ 4 - 0
src/api/public-api.js

@@ -116,6 +116,10 @@ export function getBldCat(name) {
     });
 }
 
+/**
+ * 获取 获取转科列表
+ * @returns {*}
+ */
 export function getTheTransferList() {
     return request({
         url: '/publicApi/getTheTransferList',

+ 1 - 0
src/components/index.ts

@@ -2,3 +2,4 @@ export {default as XcSelect} from '../components/xc/select/XcSelect.vue'
 export {default as XcOption} from '../components/xc/select/XcOption.vue'
 export {default as XcCode} from '../components/xc/code/XcCode.vue'
 export {default as InputAndTable} from '../components/input-table-query/InputAndTable.vue'
+export {default as XcSelectV2} from '../components/xc/select-v2/XcSelectV2.vue'

+ 27 - 11
src/components/inpatient/CaseFrontSheetQuality.vue

@@ -3,10 +3,20 @@
     <el-header>
       <span>统计时间:</span>
       <el-select v-model="dateRangeType" style="width: 80px">
-        <el-option value="month" label="按月份"></el-option>
+        <el-option value="monthrange" label="按月份"></el-option>
         <el-option value="year" label="按年度"></el-option>
       </el-select>
-      <el-date-picker v-model="dateRange" :type="dateRangeType" style="width: 100px"> </el-date-picker>
+      <el-date-picker
+        v-if="dateRangeType === 'monthrange'"
+        v-model="monthrange"
+        type="monthrange"
+        style="width: 170px"
+        range-separator="至"
+        start-placeholder="开始月份"
+        end-placeholder="结束月份"
+      >
+      </el-date-picker>
+      <el-date-picker v-else v-model="year" type="year" style="width: 100px"> </el-date-picker>
       <el-divider direction="vertical"></el-divider>
       <span>统计方式:</span>
       <el-select v-model="statisticsType" style="width: 100px">
@@ -36,14 +46,15 @@
 
 <script>
 import { ref, onMounted } from 'vue'
-import { getLastMonth, formatMonth, formatYear } from '@/utils/date'
+import { getOneMonthOffset, formatMonth, formatYear } from '@/utils/date'
 import { analyzeQualityControl } from '@/api/case-front-sheet/index'
 import { Export } from '@/utils/ExportExcel'
 import { ElMessage } from 'element-plus'
 export default {
   setup() {
-    const dateRangeType = ref('month')
-    const dateRange = ref(null)
+    const dateRangeType = ref('monthrange')
+    const year = ref(null)
+    const monthrange = ref([])
     const statisticsType = ref(1)
     const statistics = ref([])
 
@@ -51,10 +62,11 @@ export default {
       const params = {
         type: statisticsType.value,
       }
-      if (dateRangeType.value === 'month') {
-        params.month = formatMonth(dateRange.value)
+      if (dateRangeType.value === 'monthrange') {
+        params.beginMonth = formatMonth(monthrange.value[0])
+        params.endMonth = formatMonth(monthrange.value[1])
       } else {
-        params.year = formatYear(dateRange.value)
+        params.year = formatYear(year.value)
       }
       analyzeQualityControl(params).then((res) => {
         statistics.value = res
@@ -86,17 +98,21 @@ export default {
         bedTurnoverTimes: '病床周转次数',
       }
 
-      const preffix = dateRangeType.value === 'month' ? formatMonth(dateRange.value) : formatYear(dateRange.value)
+      const preffix = dateRangeType.value === 'monthrange' ? formatMonth(monthrange.value[0]) + '至' + formatMonth(monthrange.value[1]) : formatYear(year.value)
       Export(statistics.value, title, `【${preffix}】各科室质控数据`)
     }
 
     onMounted(() => {
-      dateRange.value = getLastMonth()
+      const offset = getOneMonthOffset()
+      monthrange.value[0] = offset.start
+      monthrange.value[1] = offset.end
+      year.value = new Date()
     })
 
     return {
       dateRangeType,
-      dateRange,
+      year,
+      monthrange,
       statisticsType,
       statistics,
       excuteQuery,

+ 187 - 177
src/components/inpatient/WeiGuiFeiYongFenXi.vue

@@ -1,83 +1,89 @@
 <template>
   <el-container>
-    <el-header height="30">
-      <el-descriptions title="患者信息" border>
-        <template #extra>
-          <el-button type="primary" @click="chaoZuoZhiNan = true" icon="Bell" size="small">操作指南</el-button>
-          <el-button type="warning" @click="ziDongPiPeiTuiFei" icon="Refresh" size="small">自动匹配</el-button>
-        </template>
-        <el-descriptions-item label="姓名">{{ huanZheXinXi.name }}</el-descriptions-item>
-        <el-descriptions-item label="住院号">
-          <el-input size="small" style="width: 120px" v-model="huanZheXinXi.inpatientNo" @keyup.enter="chaXunWeiGuiClick(true)"></el-input>
-          <el-divider direction="vertical"></el-divider>
-          <el-button @click="chaXunWeiGuiClick(true)">查询</el-button>
-        </el-descriptions-item>
-        <el-descriptions-item label="住院次数">{{ huanZheXinXi.admissTimes }}</el-descriptions-item>
-        <el-descriptions-item label="未匹配">{{ weiPiPei.data.length }} 条</el-descriptions-item>
-        <el-descriptions-item label="违规费用">{{ weiGuiFeiYong.data.length }} 条</el-descriptions-item>
-      </el-descriptions>
-    </el-header>
     <el-main>
-      <el-tabs v-model="weiGuiTabs">
-        <el-tab-pane label="未匹配" name="未匹配">
-          <el-table
-            :data="weiPiPei.data.slice((weiPiPei.currentPage - 1) * weiPiPei.pageSize, weiPiPei.pageSize * weiPiPei.currentPage)"
-            :height="WinHeight / 1.39"
-            highlight-current-row
-            stripe
-          >
-            <el-table-column label="排序" type="index"></el-table-column>
-            <el-table-column label="项目编码" prop="chargeCodeMx"></el-table-column>
-            <el-table-column label="项目名称" prop="name"></el-table-column>
-          </el-table>
-          <el-pagination
-            @current-change="weiPiPeiCurrentPage"
-            :current-page="weiPiPei.currentPage"
-            :page-size="weiPiPei.pageSize"
-            :page-sizes="[40, 200, 300, 400]"
-            layout=" prev, pager, next,total"
-            :total="weiPiPei.data.length"
-            style="margin-top: 5px"
-            :pager-count="5"
-            background
-          ></el-pagination>
-        </el-tab-pane>
-        <el-tab-pane label="违规退费" name="违规退费">
-          <el-table
-            :data="weiGuiFeiYong.data.slice((weiGuiFeiYong.currentPage - 1) * weiGuiFeiYong.pageSize, weiGuiFeiYong.pageSize * weiGuiFeiYong.currentPage)"
-            :height="WinHeight / 1.39"
-            highlight-current-row
-            stripe
-            @cell-click="zhenShuFeiYong"
-          >
-            <el-table-column label="排序" type="index"></el-table-column>
-            <el-table-column label="流水号" prop="detailSn"></el-table-column>
-            <el-table-column label="医嘱号" prop="orderNo"></el-table-column>
-            <el-table-column label="项目编码" prop="chargeCodeMx"></el-table-column>
-            <el-table-column label="收费时间" prop="chargeDate"></el-table-column>
-            <el-table-column label="项目名称" prop="chargeCodeName"></el-table-column>
-            <el-table-column label="金额" prop="chargeFee"></el-table-column>
-            <el-table-column label="数量" prop="chargeAmount"></el-table-column>
-            <el-table-column label="执行科室" prop="execUnitName"></el-table-column>
-            <el-table-column label="录入人" prop="opIdCode"></el-table-column>
-            <el-table-column label="费用类型" prop="chargeCode">
-              <template #default="scope">
-                <span>{{ scope.row.chargeCode === 'xm' ? '项目' : '药品' }}</span>
-              </template>
-            </el-table-column>
-          </el-table>
-          <el-pagination
-            @current-change="weiGuiFeiYongCurrentPage"
-            :current-page="weiGuiFeiYong.currentPage"
-            :page-size="weiGuiFeiYong.pageSize"
-            layout=" prev, pager, next,total"
-            :total="weiGuiFeiYong.data.length"
-            style="margin-top: 5px"
-            background
-          ></el-pagination>
-        </el-tab-pane>
-      </el-tabs>
+      <el-row>
+        <el-col>
+          <el-descriptions title="患者信息" border>
+            <template #extra>
+              <el-button type="primary" @click="chaoZuoZhiNan = true" icon="Bell" size="small">操作指南</el-button>
+              <el-button type="warning" @click="ziDongPiPeiTuiFei" icon="Refresh" size="small">自动匹配</el-button>
+            </template>
+            <el-descriptions-item label="姓名">{{ huanZheXinXi.name }}</el-descriptions-item>
+            <el-descriptions-item label="住院号">
+              <el-input size="small" style="width: 120px" v-model="huanZheXinXi.inpatientNo"
+                        @keyup.enter="chaXunWeiGuiClick(true)"></el-input>
+              <el-divider direction="vertical"></el-divider>
+              <el-button @click="chaXunWeiGuiClick(true)">查询</el-button>
+            </el-descriptions-item>
+            <el-descriptions-item label="住院次数">{{ huanZheXinXi.admissTimes }}</el-descriptions-item>
+            <el-descriptions-item label="未匹配">{{ weiPiPei.data.length }} 条</el-descriptions-item>
+            <el-descriptions-item label="违规费用">{{ weiGuiFeiYong.data.length }} 条</el-descriptions-item>
+          </el-descriptions>
+        </el-col>
+      </el-row>
+      <el-col>
+        <el-tabs v-model="weiGuiTabs">
+          <el-tab-pane label="未匹配" name="未匹配">
+            <el-table
+                :data="weiPiPei.data.slice((weiPiPei.currentPage - 1) * weiPiPei.pageSize, weiPiPei.pageSize * weiPiPei.currentPage)"
+                :height="WinHeight / 1.39"
+                highlight-current-row
+                stripe
+            >
+              <el-table-column label="排序" type="index"></el-table-column>
+              <el-table-column label="项目编码" prop="chargeCodeMx"></el-table-column>
+              <el-table-column label="项目名称" prop="name"></el-table-column>
+            </el-table>
+            <el-pagination
+                @current-change="weiPiPeiCurrentPage"
+                :current-page="weiPiPei.currentPage"
+                :page-size="weiPiPei.pageSize"
+                :page-sizes="[40, 200, 300, 400]"
+                layout=" prev, pager, next,total"
+                :total="weiPiPei.data.length"
+                style="margin-top: 5px"
+                :pager-count="5"
+                background
+            ></el-pagination>
+          </el-tab-pane>
+          <el-tab-pane label="违规退费" name="违规退费">
+            <el-table
+                :data="weiGuiFeiYong.data.slice((weiGuiFeiYong.currentPage - 1) * weiGuiFeiYong.pageSize, weiGuiFeiYong.pageSize * weiGuiFeiYong.currentPage)"
+                :height="WinHeight / 1.39"
+                highlight-current-row
+                stripe
+                @cell-click="zhenShuFeiYong"
+            >
+              <el-table-column label="排序" type="index"></el-table-column>
+              <el-table-column label="流水号" prop="detailSn"></el-table-column>
+              <el-table-column label="医嘱号" prop="orderNo"></el-table-column>
+              <el-table-column label="项目编码" prop="chargeCodeMx"></el-table-column>
+              <el-table-column label="收费时间" prop="chargeDate"></el-table-column>
+              <el-table-column label="项目名称" prop="chargeCodeName"></el-table-column>
+              <el-table-column label="金额" prop="chargeFee"></el-table-column>
+              <el-table-column label="数量" prop="chargeAmount"></el-table-column>
+              <el-table-column label="执行科室" prop="execUnitName"></el-table-column>
+              <el-table-column label="录入人" prop="opIdCode"></el-table-column>
+              <el-table-column label="费用类型" prop="chargeCode">
+                <template #default="scope">
+                  <span>{{ scope.row.chargeCode === 'xm' ? '项目' : '药品' }}</span>
+                </template>
+              </el-table-column>
+            </el-table>
+            <el-pagination
+                @current-change="weiGuiFeiYongCurrentPage"
+                :current-page="weiGuiFeiYong.currentPage"
+                :page-size="weiGuiFeiYong.pageSize"
+                layout=" prev, pager, next,total"
+                :total="weiGuiFeiYong.data.length"
+                style="margin-top: 5px"
+                background
+            ></el-pagination>
+          </el-tab-pane>
+        </el-tabs>
+      </el-col>
     </el-main>
+
     <el-drawer title="费用修正" v-model="feiYongXiuZhenDrawer" size="60%" :before-close="shiFouBaoCun">
       <div style="margin: auto 20px auto 20px">
         <el-descriptions title="费用信息" border>
@@ -87,41 +93,43 @@
           <el-descriptions-item label="执行科室">{{ fuShuFeiYongXinXi.execUnitName }}</el-descriptions-item>
           <el-descriptions-item label="录入人">{{ fuShuFeiYongXinXi.opIdCode }}</el-descriptions-item>
           <el-descriptions-item label="项目编码">{{ fuShuFeiYongXinXi.chargeCodeMx }}</el-descriptions-item>
-          <el-descriptions-item label="操作" v-if="weiZhaoDaoDuiYingZhenShu"> 请检查执行科室是否一致 </el-descriptions-item>
+          <el-descriptions-item label="操作" v-if="weiZhaoDaoDuiYingZhenShu"> 请检查执行科室是否一致</el-descriptions-item>
           <el-descriptions-item label="操作" v-else>
             <el-button size="small" type="success" @click="PiPeiClick">保存</el-button>
           </el-descriptions-item>
         </el-descriptions>
-        <br />
+        <br/>
         录入日期:
         <el-date-picker
-          type="daterange"
-          v-model="dateRange"
-          placeholder="选择日期"
-          style="width: 280px"
-          range-separator="至"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
-          :shortcuts="shortcuts"
+            type="daterange"
+            v-model="dateRange"
+            placeholder="选择日期"
+            style="width: 280px"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            :shortcuts="shortcuts"
         ></el-date-picker>
-        <el-button @click="riQiPaiXu === 'DESC' ? (riQiPaiXu = 'ASC') : (riQiPaiXu = 'DESC')" type="success" :icon="riQiPaiXu === 'DESC' ? 'CaretBottom' : 'CaretTop'"
-          >{{ riQiPaiXu === 'DESC' ? '日期降序' : '日期升序' }}
+        <el-button @click="riQiPaiXu === 'DESC' ? (riQiPaiXu = 'ASC') : (riQiPaiXu = 'DESC')" type="success"
+                   :icon="riQiPaiXu === 'DESC' ? 'CaretBottom' : 'CaretTop'"
+        >{{ riQiPaiXu === 'DESC' ? '日期降序' : '日期升序' }}
         </el-button>
         <el-button @click="zhenShuFeiYong(fuShuFeiYongXinXi)">查询</el-button>
         <el-table
-          highlight-current-row
-          stripe
-          :data="keYiPiPeiDeZhenShu.data.slice((keYiPiPeiDeZhenShu.currentPage - 1) * keYiPiPeiDeZhenShu.pageSize, keYiPiPeiDeZhenShu.pageSize * keYiPiPeiDeZhenShu.currentPage)"
-          :height="WinHeight / 1.39"
-          @selection-change="handleSelectionChange"
-          class="eltable"
+            highlight-current-row
+            stripe
+            :data="keYiPiPeiDeZhenShu.data.slice((keYiPiPeiDeZhenShu.currentPage - 1) * keYiPiPeiDeZhenShu.pageSize, keYiPiPeiDeZhenShu.pageSize * keYiPiPeiDeZhenShu.currentPage)"
+            :height="WinHeight / 1.39"
+            @selection-change="handleSelectionChange"
+            class="eltable"
         >
           <el-table-column type="selection" v-if="!weiZhaoDaoDuiYingZhenShu"></el-table-column>
           <el-table-column label="排序" type="index"></el-table-column>
           <el-table-column label="医嘱号" prop="orderNo"></el-table-column>
           <el-table-column label="流水号" prop="detailSn" width="70">
             <template #default="scope">
-              <span v-if="weiZhaoDaoDuiYingZhenShu" v-html="tuiFeiTiShi(scope.row.detailSn, scope.row.oriDetailSn)"></span>
+              <span v-if="weiZhaoDaoDuiYingZhenShu"
+                    v-html="tuiFeiTiShi(scope.row.detailSn, scope.row.oriDetailSn)"></span>
               <span v-else>
                 {{ scope.row.detailSn }}
               </span>
@@ -139,39 +147,39 @@
           </el-table-column>
         </el-table>
         <el-pagination
-          @current-change="keYiPiPeiDeZhenShuCurrentPage"
-          @size-change="keYiPiPeiDeZhenShuSizeChange"
-          :current-page="keYiPiPeiDeZhenShu.currentPage"
-          :page-size="keYiPiPeiDeZhenShu.pageSize"
-          layout=" prev, pager, next,total,sizes"
-          :total="keYiPiPeiDeZhenShu.data.length"
-          style="margin-top: 5px"
-          background
+            @current-change="keYiPiPeiDeZhenShuCurrentPage"
+            @size-change="keYiPiPeiDeZhenShuSizeChange"
+            :current-page="keYiPiPeiDeZhenShu.currentPage"
+            :page-size="keYiPiPeiDeZhenShu.pageSize"
+            layout=" prev, pager, next,total,sizes"
+            :total="keYiPiPeiDeZhenShu.data.length"
+            style="margin-top: 5px"
+            background
         ></el-pagination>
       </div>
     </el-drawer>
     <el-dialog v-model="chaoZuoZhiNan" title="操作指南">
-      一、未匹配 <br />
-      1、点击未匹配,可以查询到这个患者没有匹配到医保的医保码<br />
-      二、违规退费<br />
-      1、点击违规退费:会显示这个患者无法上传到医保的费用。<br />
-      2、点击这个费用:会在右边弹出抽屉,上面会显示一些,费用的信息。<br />
-      3、匹配:这条负数的数据退的是那一天(或那几天)的费用,点击弹出来的抽屉中的多选框然后点击保存即可<br />
-      4、查询:查询这些正费用时,可以选择 日期,以及 排序。<br />
-      三、匹配 <br />
+      一、未匹配 <br/>
+      1、点击未匹配,可以查询到这个患者没有匹配到医保的医保码<br/>
+      二、违规退费<br/>
+      1、点击违规退费:会显示这个患者无法上传到医保的费用。<br/>
+      2、点击这个费用:会在右边弹出抽屉,上面会显示一些,费用的信息。<br/>
+      3、匹配:这条负数的数据退的是那一天(或那几天)的费用,点击弹出来的抽屉中的多选框然后点击保存即可<br/>
+      4、查询:查询这些正费用时,可以选择 日期,以及 排序。<br/>
+      三、匹配 <br/>
       1、自动匹配,系统随机挑选一条正数匹配。
     </el-dialog>
   </el-container>
 </template>
 
 <script>
-import { ref, watch } from 'vue'
+import {ref, watch} from 'vue'
 import store from '../../store'
-import { huoQuZhenShuKePiPei, caiFenPiPei, yiZhuTuiFeiPiPei, weiGuiFeiYongFenXi } from '../../api/yibao/xiang-mu-lu-ru'
-import { ElMessage, ElMessageBox } from 'element-plus'
-import { shortcuts } from '../../data/shortcuts'
-import { getDateRangeFormatDate } from '../../utils/date'
-import { stringIsBlank } from '../../utils/blank-utils'
+import {huoQuZhenShuKePiPei, caiFenPiPei, yiZhuTuiFeiPiPei, weiGuiFeiYongFenXi} from '../../api/yibao/xiang-mu-lu-ru'
+import {ElMessage, ElMessageBox} from 'element-plus'
+import {shortcuts} from '../../data/shortcuts'
+import {getDateRangeFormatDate} from '../../utils/date'
+import {stringIsBlank} from '../../utils/blank-utils'
 
 export default {
   props: {
@@ -256,31 +264,31 @@ export default {
         val.execUnit = ''
       }
       huoQuZhenShuKePiPei(val.inpatientNo, val.admissTimes, val.ledgerSn, val.chargeCodeMx, val.execUnit, val.orderNo, startTime, endTime, riQiPaiXu.value)
-        .then((res) => {
-          keYiPiPeiDeZhenShu.value.data = res
-          feiYongXiuZhenDrawer.value = true
-          weiZhaoDaoDuiYingZhenShu.value = false
-        })
-        .catch((e) => {
-          keYiPiPeiDeZhenShu.value.data = e.data
-          if (e.data.length === 0) {
-            ElMessageBox.alert('请检查时间范围或该患者没有对应的费用', '提示', {
-              type: 'warning',
-            })
-            return
-          }
-          feiYongXiuZhenDrawer.value = true
-          weiZhaoDaoDuiYingZhenShu.value = true
-        })
+          .then((res) => {
+            keYiPiPeiDeZhenShu.value.data = res
+            feiYongXiuZhenDrawer.value = true
+            weiZhaoDaoDuiYingZhenShu.value = false
+          })
+          .catch((e) => {
+            keYiPiPeiDeZhenShu.value.data = e.data
+            if (e.data.length === 0) {
+              ElMessageBox.alert('请检查时间范围或该患者没有对应的费用', '提示', {
+                type: 'warning',
+              })
+              return
+            }
+            feiYongXiuZhenDrawer.value = true
+            weiZhaoDaoDuiYingZhenShu.value = true
+          })
     }
 
     watch(
-      () => feiYongXiuZhenDrawer.value,
-      () => {
-        if (!feiYongXiuZhenDrawer.value) {
-          dateRange.value = []
+        () => feiYongXiuZhenDrawer.value,
+        () => {
+          if (!feiYongXiuZhenDrawer.value) {
+            dateRange.value = []
+          }
         }
-      }
     )
 
     const linShiDuoXuan = ref([])
@@ -295,26 +303,27 @@ export default {
       ElMessageBox.confirm('请仔细检查', '提示', {
         type: 'warning',
       })
-        .then(() => {
-          fuShuFeiYongXinXi.value.list = linShiDuoXuan.value
-          fuShuFeiYongXinXi.value.deptCode = store.state.user.info.deptCode
-          caiFenPiPei(fuShuFeiYongXinXi.value).then((res) => {
-            piPeiShiFouDianJi.value = true
-            let data = weiGuiFeiYong.value.data
-            for (let i = 0; i < data.length; i++) {
-              if (
-                data[i].inpatientNo === fuShuFeiYongXinXi.value.inpatientNo &&
-                data[i].admissTimes === fuShuFeiYongXinXi.value.admissTimes &&
-                data[i].ledgerSn === fuShuFeiYongXinXi.value.ledgerSn &&
-                data[i].detailSn === fuShuFeiYongXinXi.value.detailSn
-              ) {
-                weiGuiFeiYong.value.data.splice(i, 1)
+          .then(() => {
+            fuShuFeiYongXinXi.value.list = linShiDuoXuan.value
+            fuShuFeiYongXinXi.value.deptCode = store.state.user.info.deptCode
+            caiFenPiPei(fuShuFeiYongXinXi.value).then((res) => {
+              piPeiShiFouDianJi.value = true
+              let data = weiGuiFeiYong.value.data
+              for (let i = 0; i < data.length; i++) {
+                if (
+                    data[i].inpatientNo === fuShuFeiYongXinXi.value.inpatientNo &&
+                    data[i].admissTimes === fuShuFeiYongXinXi.value.admissTimes &&
+                    data[i].ledgerSn === fuShuFeiYongXinXi.value.ledgerSn &&
+                    data[i].detailSn === fuShuFeiYongXinXi.value.detailSn
+                ) {
+                  weiGuiFeiYong.value.data.splice(i, 1)
+                }
               }
-            }
-            feiYongXiuZhenDrawer.value = false
+              feiYongXiuZhenDrawer.value = false
+            })
+          })
+          .catch(() => {
           })
-        })
-        .catch(() => {})
     }
 
     const shiFouBaoCun = (done) => {
@@ -326,20 +335,20 @@ export default {
           confirmButtonText: '保存',
           cancelButtonText: '放弃',
         })
-          .then((res) => {
-            PiPeiClick()
-          })
-          .catch(() => {
-            done()
-          })
+            .then((res) => {
+              PiPeiClick()
+            })
+            .catch(() => {
+              done()
+            })
       }
     }
 
     watch(
-      () => props.init,
-      () => {
-        genXingShuJu()
-      }
+        () => props.init,
+        () => {
+          genXingShuJu()
+        }
     )
 
     ctx.emit('open', false)
@@ -365,19 +374,20 @@ export default {
 
     const ziDongPiPeiTuiFei = () => {
       ElMessageBox.confirm(
-        '如果你想每天的报表都可以对得上,那么就人工匹配,系统自动匹配<span style="color:#ff0000"> 天知道 </span>,你这一条退的是哪一天的,<br>ヾ(゚∀゚ゞ)。',
-        '提示',
-        {
-          type: 'warning',
-          dangerouslyUseHTMLString: true,
-        }
+          '如果你想每天的报表都可以对得上,那么就人工匹配,系统自动匹配<span style="color:#ff0000"> 天知道 </span>,你这一条退的是哪一天的,<br>ヾ(゚∀゚ゞ)。',
+          '提示',
+          {
+            type: 'warning',
+            dangerouslyUseHTMLString: true,
+          }
       )
-        .then(() => {
-          yiZhuTuiFeiPiPei(huanZheXinXi.value.inpatientNo, huanZheXinXi.value.admissTimes, store.state.user.info.deptCode).then((res) => {
-            chaXunWeiGuiClick(false)
+          .then(() => {
+            yiZhuTuiFeiPiPei(huanZheXinXi.value.inpatientNo, huanZheXinXi.value.admissTimes, store.state.user.info.deptCode).then((res) => {
+              chaXunWeiGuiClick(false)
+            })
+          })
+          .catch(() => {
           })
-        })
-        .catch(() => {})
     }
 
     const chaXunWeiGuiClick = (val) => {

+ 173 - 0
src/components/xc/select-v2/VirtualizationSelect.vue

@@ -0,0 +1,173 @@
+<template>
+  <div v-if="props.dataLength === 0" class="nullData">
+    暂无数据
+  </div>
+  <div v-else class="container" ref="container"
+       :style="{ height: containerHeight + 'px' }">
+    <div class="empty" :style="{ height: emptyHeight + 'px' }"></div>
+    <ul class="list" :style="{ transform: `translateY(${translateY})` }">
+      <li v-for="(item,index) in listData"
+          @click="clickLi(item,index)" :key="item" class="item"
+          :style="styleToLi(item,index)">
+        <slot :item="item"></slot>
+      </li>
+    </ul>
+  </div>
+</template>
+
+<script setup name="VirtualizationSelect">
+import {functionDebounce} from "@/utils/debounce";
+
+const props = defineProps({
+  modelValue: {
+    type: Number
+  },
+  data: {
+    type: Array,
+    default: []
+  },
+  value: {
+    type: String,
+    default: '',
+  },
+  dataLength: {
+    type: Number,
+    default: 0
+  },
+  localSearch: {
+    type: Boolean,
+    default: false
+  }
+})
+
+const emit = defineEmits(['change', 'update:modelValue'])
+
+const itemHeight = 34
+
+let emptyHeight = $ref(itemHeight * props.dataLength)
+let containerHeight = 300
+
+
+let itemCount = Math.ceil(containerHeight / itemHeight)
+
+const container = ref(null)
+const start = ref(0)
+const translateY = ref(0)
+
+const listData = computed(() => {
+  return props.data.slice(start.value, start.value + itemCount + 1)
+})
+
+const clickLi = async (item, index) => {
+  await emit('update:modelValue', start.value + index);
+  await emit('change', item)
+}
+
+const selectedDataSubscript = (idx) => {
+  try {
+    container.value.scrollTop = idx * itemHeight;
+  } catch (e) {
+    // console.error(e)
+  }
+}
+
+const styleToLi = (item, index) => {
+  if (props.value === item.value) {
+    return {
+      height: itemHeight + 'px',
+      backgroundColor: '#409EFF',
+      color: '#ffffff'
+    };
+  } else if (start.value + index === props.modelValue) {
+    return {
+      height: itemHeight + 'px',
+      backgroundColor: '#909399',
+      color: '#ffffff'
+    }
+  } else {
+    return {
+      height: itemHeight + 'px',
+    };
+  }
+}
+
+const enableScrollBar = functionDebounce(() => {
+  try {
+    container.value.addEventListener('scroll', e => {
+      const {scrollTop} = e.target
+      start.value = Math.floor(scrollTop / itemHeight)
+      translateY.value = scrollTop + 'px'
+    })
+  } catch (e) {
+  }
+}, 200)
+
+
+const resetData = () => {
+  emptyHeight = itemHeight * props.dataLength
+  containerHeight = emptyHeight > 300 ? 300 : emptyHeight
+  start.value = 0
+  translateY.value = 0 + 'px'
+  container.value.scrollTop = 0
+  itemCount = Math.ceil(containerHeight / itemHeight)
+  enableScrollBar()
+}
+
+defineExpose({selectedDataSubscript, $el: container, enableScrollBar, resetData})
+
+
+</script>
+<style scoped lang="scss">
+
+.nullData {
+  padding: 10px 0;
+  margin: 0;
+  text-align: center;
+  width: 100%;
+  color: var(--el-text-color-secondary);
+  font-size: var(--el-select-font-size);
+}
+
+.container {
+  overflow: auto;
+  display: flex;
+  width: 100%;
+  direction: rtl;
+
+
+  ul {
+    list-style: none;
+    margin: 0;
+    width: 100%;
+    padding: 0;
+    direction: ltr;
+
+    .item {
+      font-size: var(--el-font-size-base);
+      padding: 0 32px 0 20px;
+      position: relative;
+      white-space: nowrap;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      color: var(--el-text-color-regular);
+      height: 34px;
+      line-height: 34px;
+      box-sizing: border-box;
+      cursor: pointer;
+      width: 100%;
+    }
+
+    .checked {
+      background-color: #4e91f8;
+      color: white;
+    }
+
+    .item:hover {
+      background-color: #fac44d;
+      color: white;
+    }
+  }
+}
+
+
+</style>

+ 336 - 0
src/components/xc/select-v2/XcSelectV2.vue

@@ -0,0 +1,336 @@
+<template>
+  <div class="xc-select-v2_main" style="width: 120px" @mousedown="stopLosingFocus($event)" ref="xcSelectV2Main">
+    <el-input ref="xcInput" @input="inputChange" v-model="label"
+              @blur="loseFocus"
+              :placeholder="placeholder"
+              @keydown.up.stop.prevent="onKeyboardNavigate('up')"
+              @keydown.down.stop.prevent="onKeyboardNavigate('down')"
+              @keydown.enter.stop.prevent="onKeyboardSelect"
+              @keydown.esc.stop.prevent="handleEsc"
+              @click="isShow = !isShow" @focus="getFocus">
+      <template #suffix>
+        <el-icon class="finger"
+                 @mouseenter="isClearable = true"
+                 @mouseleave="isClearable = false">
+            <span v-if="isClearable && props.clearable && props.modelValue[props.value]">
+              <CircleClose @click="clear"/>
+            </span>
+          <span v-else>
+              <ArrowUp v-show="isShow" @mousedown="clickIcon($event,false)"/>
+              <ArrowDown v-show="!isShow" @mousedown="clickIcon($event,true)"/>
+            </span>
+        </el-icon>
+      </template>
+    </el-input>
+    <transition name="el-zoom-in-top">
+      <div v-show="isShow" class="xc-select-v2" :style="inputStyle">
+        <VirtualizationSelect :data="props.data" @change="change"
+                              :value="props.modelValue[props.value]"
+                              v-model="selectedSubscript"
+                              :local-search="whetherToSearchLocally"
+                              ref="selectItem" :data-length="dataLenght">
+          <template #default="{item}">
+            {{ item.value }}
+            {{ item.label }}
+          </template>
+        </VirtualizationSelect>
+      </div>
+    </transition>
+  </div>
+</template>
+
+<script setup name='XcSelectV2'>
+import {debounce} from "@/utils/debounce";
+import VirtualizationSelect from './VirtualizationSelect.vue'
+import sleep from "@/utils/sleep";
+import {nextTick} from "vue";
+
+const props = defineProps({
+  modelValue: {
+    type: Object,
+  },
+  value: {
+    type: String,
+    default: 'code'
+  },
+  label: {
+    type: String,
+    default: 'name'
+  },
+  data: {
+    type: Array,
+    default: []
+  },
+  clearable: {
+    type: Boolean,
+    default: false
+  },
+  remoteMethod: {
+    type: Function,
+    default: null
+  },
+  maxCache: {
+    type: Number,
+    default: 100,
+  },
+  id: {
+    type: String,
+    default: 'id'
+  }
+})
+
+const emit = defineEmits(['change'])
+
+let label = $ref('')
+let isGetFocus = $ref(false)
+let selectItem = $ref(null)
+let xcInput = $ref(null)
+let top = $ref(22)
+let selectedSubscript = $ref(0)
+let dataLenght = $ref(0)
+let isClearable = $ref(false)
+let inputStyle = $ref({})
+let xcSelectV2Main = $ref()
+let whetherToSearchLocally = $ref(!props.remoteMethod)
+
+let isShow = $ref(false)
+
+let placeholder = computed(() => {
+  if (!label) {
+    return props.modelValue[props.label] ? props.modelValue[props.label] : '请选择'
+  }
+})
+
+const clickIcon = async (e, val) => {
+  e.preventDefault()
+  isShow = val
+  await sleep(100)
+}
+
+const inputChange = debounce(value => {
+  if (value) {
+    method(value);
+  }
+}, 1000)
+
+
+const onKeyboardNavigate = (val) => {
+  if (val === 'up') {
+    selectedSubscript - 1 < 0 ? selectedSubscript = dataLenght - 1 : selectedSubscript -= 1
+  } else if (val === 'down') {
+    selectedSubscript + 1 > dataLenght - 1 ? selectedSubscript = 0 : selectedSubscript += 1
+  }
+  selectItem.selectedDataSubscript(selectedSubscript)
+}
+
+const onKeyboardSelect = () => {
+  if (isShow) {
+    change(props.data[selectedSubscript]);
+  } else {
+    isShow = true
+  }
+
+}
+
+const handleEsc = () => {
+  isShow = false
+}
+
+const method = (val) => {
+  if (props.remoteMethod) {
+    props.remoteMethod(val)
+  }
+}
+
+const change = async (data) => {
+  if (data) {
+    props.modelValue[props.value] = data.value
+    props.modelValue[props.label] = data.label
+    label = data.label
+    emit('change', data)
+    await sleep(200)
+    isShow = false
+  }
+}
+
+const clear = () => {
+  props.modelValue[props.value] = ''
+  props.modelValue[props.label] = ''
+}
+
+const stopLosingFocus = (e) => {
+  // 阻止失去焦点
+  e.preventDefault()
+  xcInput.focus()
+}
+
+const getFocus = async () => {
+  await sleep(100)
+  if (!isShow) {
+    isShow = true
+  }
+  label = ''
+  isGetFocus = true
+}
+
+const loseFocus = async () => {
+  label = props.modelValue[props.label] ? props.modelValue[props.label] : props.modelValue[props.value]
+  await sleep(100)
+  isShow = false
+  isGetFocus = false
+}
+
+const focus = () => {
+  xcInput.focus()
+}
+
+const blur = () => {
+  xcInput.focus()
+}
+
+defineExpose({focus, blur})
+
+const selectItemResetData = async () => {
+  try {
+    await selectItem.resetData()
+  } catch (e) {
+    // console.log(e)
+  }
+}
+
+const selectItemDelectedDataSubscript = async () => {
+  try {
+    await selectItem.selectedDataSubscript(selectedSubscript)
+  } catch (e) {
+    // console.log(e)
+  }
+}
+
+
+const valueChange = async (whetherToChangeTheValue) => {
+  dataLenght = props.data.length
+  if (isGetFocus) {
+    return;
+  }
+  let val = props.modelValue[props.value]
+  if (val) {
+    // 在 数据中寻找 找到里就没有必要在找了
+    for (let i = 0; i < dataLenght; i++) {
+      let data = props.data[i];
+      if (data.value === val) {
+        props.modelValue[props.value] = data.value
+        props.modelValue[props.label] = data.label
+        label = data.label
+        selectedSubscript = i
+        return;
+      }
+    }
+
+    if (props.modelValue[props.value] && props.modelValue[props.label]) {
+      label = props.modelValue[props.label]
+      props.data.push({
+        value: props.modelValue[props.value],
+        label: props.modelValue[props.label]
+      })
+      return;
+    }
+
+
+    if (whetherToChangeTheValue) {
+      label = props.modelValue[props.value]
+      await method(props.modelValue[props.value])
+    }
+  }
+}
+
+watch(
+    () => props.modelValue[props.value],
+    (newValue, oldValue) => {
+      valueChange(true)
+    },
+    {immediate: true, deep: true}
+)
+
+watch(
+    () => props.data,
+    async () => {
+      await valueChange(false)
+      await nextTick()
+      await selectItemResetData()
+      selectedSubscript = 0
+    },
+    {immediate: true, deep: true}
+)
+
+
+watch(
+    () => isShow,
+    () => {
+      if (isShow && dataLenght > 0) {
+        nextTick(() => {
+          if (props.data[selectedSubscript].value !== props.modelValue[props.value]) {
+            for (let i = 0; i < dataLenght; i++) {
+              let data = props.data[i];
+              if (data.value === props.modelValue[props.value]) {
+                selectedSubscript = i
+                break
+              }
+            }
+          }
+          selectItemDelectedDataSubscript()
+
+          let docInput = xcInput.input;
+          let inputTop = docInput.getBoundingClientRect().top
+          let inputLeft = docInput.getBoundingClientRect().left
+          let selectBox = selectItem.$el
+          const {innerWidth: windowWidth, innerHeight: windowHeight} = window;
+          selectBox.style.direction = 'rtl'
+          if (inputLeft + selectBox.clientWidth > innerWidth) {
+            inputStyle['right'] = xcSelectV2Main.clientWidth + 'px'
+            inputStyle['top'] = 0 - (selectBox.clientHeight / 2) + 'px'
+            selectBox.style.direction = 'ltr'
+          }
+          if (inputTop + 320 >= innerHeight) {
+            inputStyle['top'] = 0 - (selectBox.clientHeight) + 'px'
+          }
+        });
+      }
+    }
+)
+
+onMounted(() => {
+  nextTick(() => {
+    let docInput = xcInput.input
+    inputStyle = {
+      top: docInput.scrollHeight + 5 + 'px',
+      minWidth: xcSelectV2Main.scrollWidth + 'px',
+      minHeight: '40px',
+    }
+  })
+})
+
+</script>
+
+<style lang="scss">
+.xc-select-v2_main {
+  position: relative;
+  display: inline-block;
+
+  .xc-select-v2 {
+    box-shadow: 0 0 12px rgba(0, 0, 0, 0.12);
+    border-radius: 5px;
+    display: flex;
+    position: absolute;
+    flex-direction: column;
+    z-index: 1000;
+    top: 28px;
+    background-color: white;
+  }
+
+  .finger:hover {
+    cursor: pointer; //悬浮时变手指
+  }
+}
+
+
+</style>

+ 2 - 1
src/components/xc/select/XcSelect.vue

@@ -2,7 +2,8 @@
   <el-select v-model="modelObj" :clearable="props.clearable"
              :remote="props.remote" :remote-method="xcMethod"
              :style="{width: props.width + 'px'}"
-             ref="xcselect" filterable @change="changeStaff" @clear="clear" @focus="getFocus">
+             ref="xcselect" filterable @change="changeStaff"
+             @clear="clear" @focus="getFocus">
     <el-option v-for="(item,index) in props.data" :key="item.index"
                :label="item.name"
                :value="{value:item.code,label:item.name}">

+ 9 - 34
src/components/zhu-yuan-yi-sheng/shou-shu-shen-qing/BianJiShouShu.vue

@@ -50,15 +50,15 @@
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="术前诊断" prop="diagBeforeOpObj">
+          <el-form-item label="术前诊断" prop="diagBeforeCode">
             <!--    TODO  v2 选择器中我绑定了 value 是对象记得搞      -->
-            <el-select-v2 v-model="data.diagBeforeOpObj"
-                          :options="shouShuZhenDuan"
-                          filterable
-                          remote
-                          value-key="value"
-                          :remote-method="souSuoZhenDuan"
-                          size="small"/>
+            <XcSelectV2
+                v-model="data"
+                :data="shouShuZhenDuan"
+                value="diagBeforeCode"
+                label="diagBeforeOp"
+                :remote-method="souSuoZhenDuan"
+            />
             <el-switch
                 v-model="zhenDuanLaiYuan"
                 :active-value="true"
@@ -68,24 +68,6 @@
                 inactive-color="#ff4949"
                 inactive-text="本院">
             </el-switch>
-
-            <!--            <el-select v-model="data.diagBeforeOpObj" :remote-method="souSuoZhenDuan" clearable filterable remote-->
-            <!--                       style="width: 220px" @change="huoQuXialaKuangMing">-->
-            <!--              <el-pagination-->
-            <!--                  :current-page="zhenDuanDangQianYe"-->
-            <!--                  :page-size="20"-->
-            <!--                  :pager-count="7"-->
-            <!--                  :total="shouShuZhenDuan.length"-->
-            <!--                  layout="total,  prev, pager, next"-->
-            <!--                  @current-change="zhenDuanFanYe">-->
-            <!--              </el-pagination>-->
-            <!--              <el-option v-for="item in shouShuZhenDuan.slice((zhenDuanDangQianYe - 1) * 20,zhenDuanDangQianYe * 20)"-->
-            <!--                         :key="item.code" :label="item.name" :value="{label:item.name,value:item.code,laiYuan:'术前诊断'}">-->
-            <!--                <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>-->
-            <!--                <el-divider direction="vertical"></el-divider>-->
-            <!--                <span>{{ item.name }}</span>-->
-            <!--              </el-option>-->
-            <!--            </el-select>-->
           </el-form-item>
         </el-col>
         <el-col :span="12">
@@ -330,12 +312,7 @@ export default {
     const souSuoZhenDuan = (val) => {
       if (val.length > 1) {
         huoQuLinChuangZhenDuan(val, zhenDuanLaiYuan.value).then(res => {
-          res.forEach(item => {
-            let temp = {value: item.value, label: item.label}
-            item.value = temp
-          })
           shouShuZhenDuan.value = res
-          console.log(shouShuZhenDuan.value)
         })
       }
     }
@@ -418,7 +395,7 @@ export default {
       applyDate: [{required: true, message: '申请时间不能为空', trigger: 'blur'}],
       opDatetime: [{required: true, message: '手术时间不能为空', trigger: 'blur'},
         {validator: shenQingShiJian, trigger: 'blur'}],
-      diagBeforeOpObj: [{required: true, message: '术前诊断不能为空', trigger: 'blur'}],
+      diagBeforeCode: [{required: true, message: '术前诊断不能为空', trigger: 'blur'}],
       partCodeObj: [{required: true, message: '手术部位不能为空', trigger: 'blur'}],
       doctorZdObj: [{required: true, message: '主刀医生不能为空', trigger: 'blur'}],
       opScale: [{required: true, message: '手术等级不能为空', trigger: 'blur'}],
@@ -426,8 +403,6 @@ export default {
 
 
     const jiaoYanShuJu = async () => {
-      data.value.diagBeforeCode = data.value.diagBeforeOpObj.value
-      data.value.diagBeforeOp = data.value.diagBeforeOpObj.label
       const form = unref(shouShuBiaoGe);
       if (!form) return
       try {

+ 2 - 2
src/main.js

@@ -22,6 +22,6 @@ app.use(router)
 app.mount('#app')
 
 // 注册全局组件
-for (const name in Component) {
-    app.component(name, Component[name])
+for (const [key, component] of Object.entries(Component)) {
+    app.component(key, component)
 }

+ 5 - 0
src/router/modules/dashboard.js

@@ -563,6 +563,11 @@ const route = [
                 component: createNameComponent(() => import('@/views/settings/permissions/RoleMenuSettings.vue')),
                 meta: {title: '角色菜单管理', icon: 'iconfont icon-juesecaidanguanli'},
             },
+            {
+                path: 'test',
+                component: createNameComponent(() => import('@/views/settings/Test.vue')),
+                meta: {title: '测试页面', icon: 'iconfont icon-dianhua'},
+            },
         ],
     },
 

+ 11 - 1
src/utils/debounce.js

@@ -16,4 +16,14 @@ export function debounce(cb, delay) {
     }
 }
 
-0
+export function functionDebounce(cb, delay) {
+    let timer
+    return function () {
+        if (timer) {
+            clearTimeout(timer)
+        }
+        timer = setTimeout(() => {
+            cb.call(this)
+        }, delay)
+    };
+}

+ 9 - 5
src/views/hospitalization/case-front-sheet/AllCaseFrontSheet.vue

@@ -32,12 +32,13 @@
         <el-button type="primary">功能菜单<i class="el-icon-arrow-down el-icon--right"></i></el-button>
         <template #dropdown>
           <el-dropdown-menu>
-            <el-dropdown-item command="unSign" icon="Printer">解除签收</el-dropdown-item>
-            <el-dropdown-item command="dismissCount" divided icon="Printer">出院患者统计</el-dropdown-item>
-            <el-dropdown-item command="exportLateData" icon="Printer">导出迟交病案</el-dropdown-item>
-            <el-dropdown-item command="exportUnsignedData" icon="Printer">导出未签收病案</el-dropdown-item>
+            <el-dropdown-item command="unSign" icon="Link">解除签收</el-dropdown-item>
+            <el-dropdown-item command="dismissCount" divided icon="OfficeBuilding">出院患者统计</el-dropdown-item>
+            <el-dropdown-item command="exportLateData" icon="Clock">导出迟交病案</el-dropdown-item>
+            <el-dropdown-item command="exportUnsignedData" icon="Files">导出未签收病案</el-dropdown-item>
             <el-dropdown-item command="print1" divided icon="Printer">打印正面</el-dropdown-item>
             <el-dropdown-item command="print2" icon="Printer">打印反面</el-dropdown-item>
+            <el-dropdown-item command="quality" divided icon="DataLine">病案质控</el-dropdown-item>
           </el-dropdown-menu>
         </template>
       </el-dropdown>
@@ -239,7 +240,7 @@ import TailPage from '../../../components/inpatient/frontsheet-printpage/TailPag
 import { Export } from '../../../utils/ExportExcel'
 import SheetQuality from '@/components/inpatient/CaseFrontSheetQuality.vue'
 
-let showSheetQuality = $ref(true)
+let showSheetQuality = $ref(false)
 let currentPage = $ref(1)
 const handleCurrentPageChange = (val) => {
   currentPage = val
@@ -423,6 +424,9 @@ const handleCommand = (val) => {
     case 'unSign':
       unArchiveBa()
       break
+    case 'quality':
+      showSheetQuality = true
+      break
   }
 }
 

+ 2 - 0
src/views/hospitalization/case-front-sheet/FillCaseFrontSheet.vue

@@ -947,6 +947,8 @@ const nextPage = () => {
 }
 const fetchSearchData = () => {
   const param = {
+    patNo: patient.value.bah,
+    times: patient.value.admissTimes,
     method: searchMethod.value,
     target: searchUrl.value,
     content: searchContent.value,

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

@@ -64,14 +64,13 @@
         </el-col>
         <el-col v-if="jianCha" :span="12">
           <el-form-item class="bi_tian" label="临床诊断:" prop="diagCode">
-            <!--    TODO  v2 选择器中我绑定了 value 是对象记得搞      -->
-            <el-select-v2 v-model="bianJiJianChaShuJu.diagCodeObj"
-                          :options="linChuangZhenDuanShuJu"
-                          filterable
-                          remote
-                          :remote-method="linChuangZhenDuanSuoSou"
-                          @change="huoQuXiangXiZhenDuan"
-                          size="small"/>
+            <XcSelectV2
+                v-model="bianJiJianChaShuJu"
+                :data="linChuangZhenDuanShuJu"
+                :remote-method="linChuangZhenDuanSuoSou"
+                value="diagCode"
+                label="diagText"
+            />
           </el-form-item>
         </el-col>
         <el-col v-if="jianCha" :span="12">
@@ -129,7 +128,6 @@ 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 {clone} from "@/utils/clone";
 
 const props = defineProps({
   jianCha: {
@@ -191,17 +189,6 @@ const daKaiBenDuiHua = async (val, xiaBiao, zhongShu) => {
   count.value = zhongShu
   bianJiJianChaShuJu.value = val
 
-  if (stringNotBlank(val.diagCode)) {
-    let index = linChuangZhenDuanShuJu.value.findIndex(item => {
-      return item.key === val.diagCode
-    })
-    if (index === -1) {
-      linChuangZhenDuanShuJu.value.push({
-        value: JSON.stringify({value: val.diagCode, label: val.diagText}),
-        label: val.diagText
-      });
-    }
-  }
   if (!props.jianCha) {
     if (stringNotBlank(val.inspectStuff)) {
       let index = biaoBenShuJu.value.findIndex(item => {
@@ -237,19 +224,9 @@ let options = $ref([])
  * @param val
  */
 const linChuangZhenDuanSuoSou = (val) => {
-  if (stringNotBlank(val) && val.length > 1) {
-    huoQuLinChuangZhenDuan(val, zhenDuanLaiYuan.value).then((res) => {
-      linChuangZhenDuanShuJu.value = res
-    })
-  }
-}
-
-const huoQuXiangXiZhenDuan = (val) => {
-  if (val) {
-    let data = JSON.parse(val)
-    bianJiJianChaShuJu.value.diagText = data.label
-    bianJiJianChaShuJu.value.diagCode = data.value
-  }
+  huoQuLinChuangZhenDuan(val, zhenDuanLaiYuan.value).then((res) => {
+    linChuangZhenDuanShuJu.value = res
+  })
 }
 
 const bianJiFenYe = async (val) => {

+ 43 - 16
src/views/hospitalization/zhu-yuan-yi-sheng/yi-zhu-lu-ru/TianJiaYiZhu.vue

@@ -38,8 +38,15 @@
       </el-col>
       <el-col :span="span">
         <el-form-item class="bi_tian" label="频率:" prop="frequCode">
-          <XcSelect v-model="yiZhuData" :data="yaoPinPingLvData" :name="['frequCode', 'frequCodeName']" clearable remote
-                    @method="pinLvRemoteMethod" ref="pingLv"></XcSelect>
+          <XcSelectV2
+              style="width: 120px"
+              v-model="yiZhuData"
+              :data="yaoPinPingLvData"
+              value="frequCode"
+              label="frequCodeName"
+              :remote-method="pinLvRemoteMethod"
+              ref="pingLv"
+          />
         </el-form-item>
       </el-col>
       <el-col :span="span">
@@ -58,8 +65,15 @@
       </el-col>
       <el-col :span="span">
         <el-form-item class="bi_tian" label="给药方式:" prop="supplyCode">
-          <XcSelect v-model="yiZhuData" :data="geiYaoFangShiData" :name="['supplyCode', 'supplyCodeName']" clearable
-                    remote @method="geiYaoFangShiRemoteMethod"></XcSelect>
+          <XcSelectV2
+              style="width: 120px"
+              v-model="yiZhuData"
+              :data="geiYaoFangShiData"
+              value="supplyCode"
+              label="supplyCodeName"
+              :remote-method="geiYaoFangShiRemoteMethod"
+              clearable
+          />
         </el-form-item>
       </el-col>
       <el-col :span="span">
@@ -97,8 +111,14 @@
       </el-col>
       <el-col :span="span">
         <el-form-item class="bi_tian" label="执行科室:" prop="execUnit">
-          <XcSelect v-model="yiZhuData" :data="zhiXingKeShiData" :name="['execUnit', 'execUnitName']" remote
-                    @method="metZhiXingKeShi"></XcSelect>
+          <XcSelectV2
+              style="width: 120px"
+              v-model="yiZhuData"
+              :data="zhiXingKeShiData"
+              value="execUnit"
+              label="execUnitName"
+              :remote-method="metZhiXingKeShi"
+          />
         </el-form-item>
       </el-col>
       <el-col :span="span">
@@ -156,7 +176,7 @@
       </el-col>
       <el-col v-if="yiZhuData.orderCode === zkCode" :span="span">
         <el-form-item label="转科:" class="bi_tian">
-          <el-select v-model="yiZhuData.zkObj">
+          <el-select v-model="yiZhuData.zkObj" filterable>
             <el-option v-for="(item, index) in zkList" :key="item.value" :label="item.wardName + '|' + item.smallName"
                        :value="item.value">
               <span>{{ item.wardName }}</span>
@@ -268,7 +288,7 @@
     </el-table-column>
     <el-table-column fixed="right" label="操作" width="120">
       <template #default="scope">
-        <el-button circle icon="Edit" type="warning" @click="xiuGaiYiZhu(scope.row)"></el-button>
+        <el-button circle icon="Edit" type="warning" @click="xiuGaiYiZhu(scope.row,scope.$index)"></el-button>
         <el-button circle icon="Delete" type="danger" @click="shanChuBiaoGeYiZhu(scope.$index)"></el-button>
         <el-button circle class="iconfont icon-fuzhi" type="info" @click="dianJiFuZhiYiZhu(scope.row)"></el-button>
       </template>
@@ -316,6 +336,8 @@ import Sleep from '@/utils/sleep'
 import {logoutShortcut, xcHotKey} from '@/utils/xckeydown'
 import {BizException, ExceptionEnum} from '@/utils/BizException'
 import {setScrollTop} from "@/utils/el-table-scroll";
+import XcSelectV2 from "@/components/xc/select-v2/XcSelectV2.vue";
+import {nextTick} from "vue";
 
 const windowSize = computed(() => {
   return store.state.app.windowSize
@@ -407,7 +429,7 @@ const xuanZhongFeiYong = async (row) => {
   if (row.serial !== '00') {
     huoQuFeiYongXinXi(row.orderCode, row.serial)
         .then((res) => {
-          yiZhuData.value.drugFlag = row.orderType
+          yiZhuData.value.drugFlag = row.drugFlag ? row.drugFlag : row.orderType
           // 判断是否 是皮试的药 如果是就只能有这些 给药方式
           if (res.data.psFlag === 1) {
             geiYaoFangShiData.value = res.piShi
@@ -462,7 +484,7 @@ const xuanZhongFeiYong = async (row) => {
     yiZhuData.value.kjywFlag = 0
     huoQuFeiYongXinXi(row.orderCode, '00')
         .then((res) => {
-          yiZhuData.value.drugFlag = row.orderType
+          yiZhuData.value.drugFlag = row.drugFlag ? row.drugFlag : row.orderType
           yiZhuData.value.frequCode = 'ONCE'
           if (stringNotBlank(res.paiChiYiZhu)) {
             tiShiBiaoTi.value.push({title: res.paiChiYiZhu, type: 'error'})
@@ -494,8 +516,12 @@ const xuanZhongFeiYong = async (row) => {
   if (stringIsBlank(row.id)) {
     yiZhuData.value.id = uuid(8, 10)
   }
+  if (!yiZhuData.value.frequCode) {
+    yiZhuData.value.frequCode = 'ONCE'
+  }
   try {
     pingLv.focus()
+
   } catch (e) {
     console.log(e)
   }
@@ -509,6 +535,7 @@ const closeTheDoctorSOrderSearchBox = () => {
 /* 频率 */
 let pingLv = $ref(null)
 const yaoPinPingLvData = ref([])
+
 const pinLvRemoteMethod = (val) => {
   huoQuZhuYuanPinLv(val).then((res) => {
     yaoPinPingLvData.value = res
@@ -586,7 +613,7 @@ const tianJiaYiZhu = () => {
   }
   shangChuanYiZhu(data)
       .then((res) => {
-        let index = tianJiaYiZhuWeiYiBiaoShi.value.indexOf(yiZhuData.value.id)
+        let index = tianJiaYiZhuWeiYiBiaoShi.value.findIndex(item => item.id === yiZhuData.value.id)
         if (index > -1) {
           yiZhuList.value.splice(index, 1)
           tianJiaYiZhuWeiYiBiaoShi.value.splice(index, 1)
@@ -611,11 +638,11 @@ const whetherToResetTheDataSubscript = () => {
 }
 
 /* 这个是点击单个修改的 */
-const xiuGaiYiZhu = (val) => {
+const xiuGaiYiZhu = (val, index) => {
   xuanZhongFeiYong(val)
   ElMessage.success('你点击了修改')
-  yiZhuList.value.splice(val, 1)
-  tianJiaYiZhuWeiYiBiaoShi.value.splice(val, 1)
+  yiZhuList.value.splice(index, 1)
+  tianJiaYiZhuWeiYiBiaoShi.value.splice(index, 1)
   whetherToResetTheDataSubscript()
 }
 
@@ -979,7 +1006,7 @@ const copyData = () => {
 
 const editData = () => {
   dataJudgmentIsEmpty(true)
-  xiuGaiYiZhu(yiZhuList.value[dataIndex])
+  xiuGaiYiZhu(yiZhuList.value[dataIndex], dataIndex)
 }
 
 const deleteSelectedOrders = () => {
@@ -1010,7 +1037,7 @@ onMounted(() => {
   if (stringIsBlank(huanZheXinXi.value.inpatientNo)) {
     ElMessage.warning('您现在进入的是医嘱模板编辑')
   } else {
-    ElMessage.warning('您现在进入的是医嘱编辑模块,' + '您的编辑时间有 10 分钟,你准备好了吗?Are ya ready kids?')
+    ElMessage.warning('您现在进入的是医嘱编辑模块,' + '您的编辑时间有 10 分钟,你准备好了吗?')
     kaiQiDaoJiShi()
     whetherThePatientHasAllergens(huanZheXinXi.value.inpatientNo).then((res) => {
       allergenDialog = res

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

@@ -180,7 +180,8 @@ import store from '@/store'
 import {stringIsBlank, stringNotBlank} from '@/utils/blank-utils'
 import {getServerDateApi, getTheTransferList} from '@/api/public-api'
 import router from '@/router'
-import Sleep from '@/utils/sleep'
+import XcSelectV2 from "@/components/xc/select-v2/XcSelectV2.vue";
+import sleep from "@/utils/sleep";
 
 const windowSize = computed(() => {
   return store.state.app.windowSize
@@ -393,9 +394,9 @@ const dianJiFuZhuXuanZhongYiZhu = () => {
 }
 
 onMounted(async () => {
-  // setTimeout(() => {
-  //   addYiZhuClick()
-  // }, 300)
+  setTimeout(() => {
+    addYiZhuClick()
+  }, 300)
   zkList.value = await getTheTransferList()
 })
 

+ 108 - 109
src/views/med-tec-mod/MenZhenXiangMu.vue

@@ -1,117 +1,116 @@
 <template>
   <el-container>
-    <el-header>
-      <el-date-picker
-          v-model="dateRange"
-          :shortcuts="shortcuts"
-          end-placeholder="结束日期"
-          placeholder="选择日期"
-          range-separator="至"
-          start-placeholder="开始日期"
-          style="width: 280px"
-          type="daterange"
-      ></el-date-picker>
-      患者ID:
-      <el-input v-model="patientId" clearable style="width: 120px" @blur="patientId = $event.target.value.trim()"
-                @keyup.enter="getMzPatientClick"></el-input>
-      <el-select v-model="xiangMuZhuangTai" style="width: 90px">
-        <el-option v-for="item in xiangMuZhuangTaiData" :key="item.code" :label="item.name" :value="item.code">
-          <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
-          <el-divider direction="vertical"></el-divider>
-          <span :style="{ color: item.color }">{{ item.name }}</span>
-        </el-option>
-      </el-select>
-      <el-button icon="Search" type="primary" @click="getMzPatientClick"> 查询</el-button>
-      <el-button icon="Search" type="primary" @click="kuaiSuChaZhaoClick"> 快速查找</el-button>
-      <el-button icon="Search" type="warning" @click="chaoZuoZhiNanDialog = true"> 操作指南</el-button>
-      <el-button icon="Upload" type="success" @click="baoCunClick"> 保存</el-button>
-      <br/>
-      <el-tag effect="dark" size="small">患者姓名: {{ patient.name }}</el-tag>
-      <el-tag effect="dark" size="small" type="warning">性别:{{ cptSex(patient.sex) }}</el-tag>
-      <el-tag effect="dark" size="small">出生日期: {{ patient.birthDay }}</el-tag>
-      <el-tag effect="dark" size="small" type="warning">诊疗卡: {{ patient.icCardNo }}</el-tag>
-    </el-header>
-    <el-container>
-      <el-main>
-        <el-row>
-          <el-col :span="4">
-            <el-table :data="shouFeiData" :height="windowsHeight / 1.1" highlight-current-row stripe
-                      @cell-click="getFeiYongXinXiClick">
-              <el-table-column label="收费信息">
-                <el-table-column label="缴费日期" prop="chargeDate" width="80"></el-table-column>
-                <el-table-column label="流水号">
-                  <template #default="scope">
-                    <el-popover :width="800" placement="right" trigger="click">
-                      <template #reference>
-                        <el-button type="success" @click="getFeiYongXinXiClick(scope.row)">{{
-                            scope.row.realNo
-                          }}
-                        </el-button>
-                      </template>
-                      <el-table :data="feiYongData" :height="windowsHeight / 2" highlight-current-row stripe>
-                        <el-table-column label="缴费明细信息">
-                          <el-table-column label="待确认标志" prop="confirmFlag">
-                            <template #default="scope">
-                              <span v-html="confirmFlag(scope.row.confirmFlag)"></span>
-                            </template>
-                          </el-table-column>
-                          <el-table-column label="项目编码" prop="chargeItemCode"></el-table-column>
-                          <el-table-column label="项目" prop="chargeName"></el-table-column>
-                          <el-table-column label="金额" prop="chargeFee"></el-table-column>
-                          <el-table-column label="确认时间" prop="confirmTime" width="80"></el-table-column>
-                          <el-table-column label="确认人" prop="confirmIdName"></el-table-column>
-                          <el-table-column label="执行科室" prop="execDeptName"></el-table-column>
-                          <el-table-column label="申请号" prop="reqNo"></el-table-column>
-                        </el-table-column>
-                      </el-table>
-                    </el-popover>
-                  </template>
-                </el-table-column>
-              </el-table-column>
-            </el-table>
+    <el-main>
+      <el-row>
+        <el-col>
+          <el-date-picker
+              v-model="dateRange"
+              :shortcuts="shortcuts"
+              end-placeholder="结束日期"
+              placeholder="选择日期"
+              range-separator="至"
+              start-placeholder="开始日期"
+              style="width: 280px"
+              type="daterange"
+          ></el-date-picker>
+          患者ID:
+          <el-input v-model="patientId" clearable style="width: 120px" @blur="patientId = $event.target.value.trim()"
+                    @keyup.enter="getMzPatientClick"></el-input>
+          <el-select v-model="xiangMuZhuangTai" style="width: 90px">
+            <el-option v-for="item in xiangMuZhuangTaiData" :key="item.code" :label="item.name" :value="item.code">
+              <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
+              <el-divider direction="vertical"></el-divider>
+              <span :style="{ color: item.color }">{{ item.name }}</span>
+            </el-option>
+          </el-select>
+          <el-button icon="Search" type="primary" @click="getMzPatientClick"> 查询</el-button>
+          <el-button icon="Search" type="primary" @click="kuaiSuChaZhaoClick"> 快速查找</el-button>
+          <el-button icon="Search" type="warning" @click="chaoZuoZhiNanDialog = true"> 操作指南</el-button>
+          <el-button icon="Upload" type="success" @click="baoCunClick"> 保存</el-button>
+          <el-col>
+            <el-tag effect="dark" size="large">患者姓名: {{ patient.name }}</el-tag>
+            <el-tag effect="dark" size="large" type="warning">性别:{{ cptSex(patient.sex) }}</el-tag>
+            <el-tag effect="dark" size="large">出生日期: {{ patient.birthDay }}</el-tag>
+            <el-tag effect="dark" size="large" type="warning">诊疗卡: {{ patient.icCardNo }}</el-tag>
           </el-col>
-          <el-col :span="20">
-            <el-table :data="keQueRenData" :height="windowsHeight / 1.1" highlight-current-row stripe>
-              <el-table-column label="本科室">
-                <el-table-column label="待确认标志" prop="confirmFlag" width="250">
-                  <template #default="scope">
-                    <el-radio-group v-model="scope.row.confirmFlag">
-                      <el-radio-button :disabled="scope.row.xiangMuZhuangTai === 1 || scope.row.xiangMuZhuangTai === 3"
-                                       :label="0"> 未确认
-                      </el-radio-button>
-                      <el-radio-button :label="1">确认</el-radio-button>
-                      <el-radio-button :label="3">取消</el-radio-button>
-                    </el-radio-group>
-                  </template>
-                </el-table-column>
-                <el-table-column label="项目编码" prop="chargeItemCode"></el-table-column>
-                <el-table-column label="项目" prop="chargeName"></el-table-column>
-                <el-table-column label="金额" prop="chargeFee"></el-table-column>
-                <el-table-column label="确认时间" prop="confirmTime" width="80"></el-table-column>
-                <el-table-column label="确认人" prop="confirmIdName"></el-table-column>
-                <el-table-column label="执行科室" prop="execDeptName"></el-table-column>
-                <el-table-column label="申请号" prop="reqNo">
-                  <template #default="scope">
-                    <el-popover :width="800" placement="left" trigger="click">
-                      <template #reference>
-                        <el-button type="success" @click="getMingXiClick(scope.row)">{{ scope.row.reqNo }}</el-button>
-                      </template>
-                      <el-table :data="danGeXingXi" highlight-current-row stripe>
-                        <el-table-column label="明细">
-                          <el-table-column label="项目编码" prop="chargeItemCode"></el-table-column>
-                          <el-table-column label="项目" prop="chargeName"></el-table-column>
-                          <el-table-column label="金额" prop="chargeFee"></el-table-column>
+        </el-col>
+        <el-col :span="4">
+          <el-table :data="shouFeiData" :height="windowsHeight / 1.1" highlight-current-row stripe
+                    @cell-click="getFeiYongXinXiClick">
+            <el-table-column label="收费信息">
+              <el-table-column label="缴费日期" prop="chargeDate" width="80"></el-table-column>
+              <el-table-column label="流水号">
+                <template #default="scope">
+                  <el-popover :width="800" placement="right" trigger="click">
+                    <template #reference>
+                      <el-button type="success" @click="getFeiYongXinXiClick(scope.row)">{{
+                          scope.row.realNo
+                        }}
+                      </el-button>
+                    </template>
+                    <el-table :data="feiYongData" :height="windowsHeight / 2" highlight-current-row stripe>
+                      <el-table-column label="缴费明细信息">
+                        <el-table-column label="待确认标志" prop="confirmFlag">
+                          <template #default="scope">
+                            <span v-html="confirmFlag(scope.row.confirmFlag)"></span>
+                          </template>
                         </el-table-column>
-                      </el-table>
-                    </el-popover>
-                  </template>
-                </el-table-column>
+                        <el-table-column label="项目编码" prop="chargeItemCode"></el-table-column>
+                        <el-table-column label="项目" prop="chargeName"></el-table-column>
+                        <el-table-column label="金额" prop="chargeFee"></el-table-column>
+                        <el-table-column label="确认时间" prop="confirmTime" width="80"></el-table-column>
+                        <el-table-column label="确认人" prop="confirmIdName"></el-table-column>
+                        <el-table-column label="执行科室" prop="execDeptName"></el-table-column>
+                        <el-table-column label="申请号" prop="reqNo"></el-table-column>
+                      </el-table-column>
+                    </el-table>
+                  </el-popover>
+                </template>
               </el-table-column>
-            </el-table>
-          </el-col>
-        </el-row>
-      </el-main>
-    </el-container>
+            </el-table-column>
+          </el-table>
+        </el-col>
+        <el-col :span="20">
+          <el-table :data="keQueRenData" :height="windowsHeight / 1.1" highlight-current-row stripe>
+            <el-table-column label="本科室">
+              <el-table-column label="待确认标志" prop="confirmFlag" width="250">
+                <template #default="scope">
+                  <el-radio-group v-model="scope.row.confirmFlag">
+                    <el-radio-button :disabled="scope.row.xiangMuZhuangTai === 1 || scope.row.xiangMuZhuangTai === 3"
+                                     :label="0"> 未确认
+                    </el-radio-button>
+                    <el-radio-button :label="1">确认</el-radio-button>
+                    <el-radio-button :label="3">取消</el-radio-button>
+                  </el-radio-group>
+                </template>
+              </el-table-column>
+              <el-table-column label="项目编码" prop="chargeItemCode"></el-table-column>
+              <el-table-column label="项目" prop="chargeName"></el-table-column>
+              <el-table-column label="金额" prop="chargeFee"></el-table-column>
+              <el-table-column label="确认时间" prop="confirmTime" width="80"></el-table-column>
+              <el-table-column label="确认人" prop="confirmIdName"></el-table-column>
+              <el-table-column label="执行科室" prop="execDeptName"></el-table-column>
+              <el-table-column label="申请号" prop="reqNo">
+                <template #default="scope">
+                  <el-popover :width="800" placement="left" trigger="click">
+                    <template #reference>
+                      <el-button type="success" @click="getMingXiClick(scope.row)">{{ scope.row.reqNo }}</el-button>
+                    </template>
+                    <el-table :data="danGeXingXi" highlight-current-row stripe>
+                      <el-table-column label="明细">
+                        <el-table-column label="项目编码" prop="chargeItemCode"></el-table-column>
+                        <el-table-column label="项目" prop="chargeName"></el-table-column>
+                        <el-table-column label="金额" prop="chargeFee"></el-table-column>
+                      </el-table-column>
+                    </el-table>
+                  </el-popover>
+                </template>
+              </el-table-column>
+            </el-table-column>
+          </el-table>
+        </el-col>
+      </el-row>
+    </el-main>
   </el-container>
   <el-dialog v-model="kuaiSuChaZhaoDialog" title="点击表格中的姓名即可">
     <el-table

+ 210 - 192
src/views/med-tec-mod/QueRenYiZhuShouFei.vue

@@ -1,140 +1,152 @@
 <template>
   <el-container>
-    <el-header style="margin-top: 8px">
-      <el-date-picker
-        type="daterange"
-        v-model="dateRange"
-        placeholder="选择日期"
-        style="width: 280px"
-        range-separator="至"
-        start-placeholder="开始日期"
-        end-placeholder="结束日期"
-        :shortcuts="shortcuts"
-      ></el-date-picker>
-      <el-input style="width: 160px" placeholder="请输入住院号" clearable v-model.trim="queryTerm.inpatientNo" @keyup.enter="getHuanZheXinXiClick"></el-input>
-      <el-select v-model="queryTerm.wardCode" filterable clearable placeholder="请选择病区">
-        <el-option v-for="item in wardData" :key="item.code" :label="item.name" :value="item.code">
-          <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
-          <el-divider direction="vertical"></el-divider>
-          <span>{{ item.name }}</span>
-        </el-option>
-      </el-select>
-      <el-divider direction="vertical"></el-divider>
-      <el-button type="primary" icon="Search" @click="getHuanZheXinXiClick">查询</el-button>
-      <el-button type="primary" icon="RefreshLeft" @click="getXuQueFeiYiZhuClick">刷新</el-button>
-      排序:
-      <el-select v-model="queryTerm.fenLei" style="width: 100px; margin: auto 10px auto 10px">
-        <el-option :value="0" label="病区"></el-option>
-        <el-option :value="1" label="执行人"></el-option>
-      </el-select>
-      <el-button type="success" @click="baoCunYiZhuQueFeiClick" icon="Upload" :disabled="queryTerm.liShi === 1"> 保存 </el-button>
-      <el-divider direction="vertical"></el-divider>
-      <el-radio-group v-model="queryTerm.liShi" @change="getHuanZheXinXiClick">
-        <el-radio-button :label="0">未确认</el-radio-button>
-        <el-radio-button :label="1">历史</el-radio-button>
-      </el-radio-group>
-      <el-divider direction="vertical"></el-divider>
-      <el-button type="warning" @click="chaoZuoZhiNan = true">操作指南</el-button>
-      <el-divider direction="vertical"></el-divider>
-      <el-switch
-        v-show="queryTerm.liShi === 1"
-        v-model="zhiKanZiJi"
-        active-color="#13ce66"
-        inactive-color="#ff4949"
-        active-text="只看自己"
-        inactive-text="全部"
-        :active-value="true"
-        :inactive-value="false"
-      >
-      </el-switch>
-    </el-header>
     <el-main>
-      <div v-show="queryTerm.liShi === 0">
-        <el-table :data="huanZheYiZhuFeiYongData" :height="winHeight / 1.15" stripe highlight-current-row @cell-click="lingShiQueFeiShuJuClick" ref="tableRef">
-          <el-table-column prop="name" label="姓名" width="90">
-            <template #default="scope">
-              <el-button size="small" :type="scope.row.shiFouYouChuYuanYiZhu === 0 ? 'success' : 'danger'" style="width: 100px"
-                ><span style="font-size: 20px">{{ scope.row.name }}</span></el-button
-              >
-            </template>
-          </el-table-column>
-          <el-table-column prop="inpatientNo" label="住院号" width="90"></el-table-column>
-          <el-table-column prop="admissTimes" label="住院次数" width="90"></el-table-column>
-          <el-table-column prop="bedNo" label="床号" width="50"></el-table-column>
-          <el-table-column prop="sex" label="性别">
-            <template #default="scope">
-              {{ cptSex(scope.row.sex) }}
-            </template>
-          </el-table-column>
-          <el-table-column prop="admissDate" label="住院日期"></el-table-column>
-          <el-table-column prop="responceTypeName" label="医保身份"></el-table-column>
-          <el-table-column prop="wardName" label="病区"></el-table-column>
-          <el-table-column prop="totalCharge" label="总费用"></el-table-column>
-          <el-table-column label="操作">
-            <template #default="scope">
-              <span v-html="chaoZuo(scope.row.list)"></span>
-            </template>
-          </el-table-column>
-        </el-table>
-        <el-pagination
-          background
-          @current-change="changeYiZhuQueFei"
-          :current-page="queryTerm.currentPage"
-          :page-size="queryTerm.pageSize"
-          layout=" prev, pager, next,total"
-          :total="queryTerm.total"
-          style="margin-top: 5px"
-          :pager-count="5"
-        ></el-pagination>
-      </div>
-      <div v-show="queryTerm.liShi === 1">
-        <el-table
-          :data="liShiShuJu.list.slice((liShiShuJu.currentPage - 1) * liShiShuJu.pageSize, liShiShuJu.currentPage * liShiShuJu.pageSize)"
-          :height="winHeight / 1.15"
-          stripe
-          highlight-current-row
-          ref="liShiShuJuRef"
-        >
-          <el-table-column label="患者姓名" prop="name">
-            <template #default="scope">
-              <el-button size="small" :type="scope.row.color" style="width: 100px"
-                ><span style="font-size: 20px">{{ scope.row.name }}</span></el-button
-              >
-            </template>
-          </el-table-column>
-          <el-table-column label="住院号" prop="inpatientNo"></el-table-column>
-          <el-table-column label="住院次数" prop="admissTimes"></el-table-column>
-          <el-table-column label="医嘱号" prop="actOrderNo"></el-table-column>
-          <el-table-column label="医嘱时间" prop="occTime" width="70"></el-table-column>
-          <el-table-column label="项目名称" prop="chargeName"></el-table-column>
-          <el-table-column label="金额" prop="chargeFee"></el-table-column>
-          <el-table-column label="数量" prop="orderCount"></el-table-column>
-          <el-table-column label="医生姓名" prop="docotrName"></el-table-column>
-          <el-table-column label="操作人" prop="opIdName"></el-table-column>
-          <el-table-column label="操作时间" prop="opDate" width="70"></el-table-column>
-          <el-table-column label="操作内容" prop="chargeStatus">
-            <template #default="scope">
-              <span v-html="yiZhuZhuangTai(scope.row.chargeStatus)"></span>
-            </template>
-          </el-table-column>
-        </el-table>
-        <el-pagination
-          background
-          @current-change="liShiShuJuFanYe"
-          :current-page="liShiShuJu.currentPage"
-          :page-size="liShiShuJu.pageSize"
-          layout=" prev, pager, next,total"
-          :total="liShiShuJu.list.length"
-          style="margin-top: 5px"
-          :pager-count="5"
-        ></el-pagination>
-      </div>
+      <el-row>
+        <el-col>
+          <el-date-picker
+              type="daterange"
+              v-model="dateRange"
+              placeholder="选择日期"
+              style="width: 280px"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              :shortcuts="shortcuts"
+          ></el-date-picker>
+          <el-input style="width: 160px" placeholder="请输入住院号" clearable v-model.trim="queryTerm.inpatientNo"
+                    @keyup.enter="getHuanZheXinXiClick"></el-input>
+          <el-select v-model="queryTerm.wardCode" filterable clearable placeholder="请选择病区">
+            <el-option v-for="item in wardData" :key="item.code" :label="item.name" :value="item.code">
+              <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
+              <el-divider direction="vertical"></el-divider>
+              <span>{{ item.name }}</span>
+            </el-option>
+          </el-select>
+          <el-divider direction="vertical"></el-divider>
+          <el-button type="primary" icon="Search" @click="getHuanZheXinXiClick">查询</el-button>
+          <el-button type="primary" icon="RefreshLeft" @click="getXuQueFeiYiZhuClick">刷新</el-button>
+        </el-col>
+        <el-col>
+          排序:
+          <el-select v-model="queryTerm.fenLei" style="width: 100px; margin: auto 10px auto 10px">
+            <el-option :value="0" label="病区"></el-option>
+            <el-option :value="1" label="执行人"></el-option>
+          </el-select>
+          <el-button type="success" @click="baoCunYiZhuQueFeiClick" icon="Upload" :disabled="queryTerm.liShi === 1"> 保存
+          </el-button>
+          <el-divider direction="vertical"></el-divider>
+          <el-radio-group v-model="queryTerm.liShi" @change="getHuanZheXinXiClick">
+            <el-radio-button :label="0">未确认</el-radio-button>
+            <el-radio-button :label="1">历史</el-radio-button>
+          </el-radio-group>
+          <el-divider direction="vertical"></el-divider>
+          <el-button type="warning" @click="chaoZuoZhiNan = true">操作指南</el-button>
+          <el-divider direction="vertical"></el-divider>
+          <el-switch
+              v-show="queryTerm.liShi === 1"
+              v-model="zhiKanZiJi"
+              active-color="#13ce66"
+              inactive-color="#ff4949"
+              active-text="只看自己"
+              inactive-text="全部"
+              :active-value="true"
+              :inactive-value="false"
+          >
+          </el-switch>
+        </el-col>
+        <el-col>
+          <div v-show="queryTerm.liShi === 0">
+            <el-table :data="huanZheYiZhuFeiYongData" :height="winHeight / 1.15" stripe highlight-current-row
+                      @cell-click="lingShiQueFeiShuJuClick" ref="tableRef">
+              <el-table-column prop="name" label="姓名" width="90">
+                <template #default="scope">
+                  <el-button size="small" :type="scope.row.shiFouYouChuYuanYiZhu === 0 ? 'success' : 'danger'"
+                             style="width: 100px"
+                  ><span style="font-size: 20px">{{ scope.row.name }}</span></el-button
+                  >
+                </template>
+              </el-table-column>
+              <el-table-column prop="inpatientNo" label="住院号" width="90"></el-table-column>
+              <el-table-column prop="admissTimes" label="住院次数" width="90"></el-table-column>
+              <el-table-column prop="bedNo" label="床号" width="50"></el-table-column>
+              <el-table-column prop="sex" label="性别">
+                <template #default="scope">
+                  {{ cptSex(scope.row.sex) }}
+                </template>
+              </el-table-column>
+              <el-table-column prop="admissDate" label="住院日期"></el-table-column>
+              <el-table-column prop="responceTypeName" label="医保身份"></el-table-column>
+              <el-table-column prop="wardName" label="病区"></el-table-column>
+              <el-table-column prop="totalCharge" label="总费用"></el-table-column>
+              <el-table-column label="操作">
+                <template #default="scope">
+                  <span v-html="chaoZuo(scope.row.list)"></span>
+                </template>
+              </el-table-column>
+            </el-table>
+            <el-pagination
+                background
+                @current-change="changeYiZhuQueFei"
+                :current-page="queryTerm.currentPage"
+                :page-size="queryTerm.pageSize"
+                layout=" prev, pager, next,total"
+                :total="queryTerm.total"
+                style="margin-top: 5px"
+                :pager-count="5"
+            ></el-pagination>
+          </div>
+          <div v-show="queryTerm.liShi === 1">
+            <el-table
+                :data="liShiShuJu.list.slice((liShiShuJu.currentPage - 1) * liShiShuJu.pageSize, liShiShuJu.currentPage * liShiShuJu.pageSize)"
+                :height="winHeight / 1.15"
+                stripe
+                highlight-current-row
+                ref="liShiShuJuRef"
+            >
+              <el-table-column label="患者姓名" prop="name">
+                <template #default="scope">
+                  <el-button size="small" :type="scope.row.color" style="width: 100px"
+                  ><span style="font-size: 20px">{{ scope.row.name }}</span></el-button
+                  >
+                </template>
+              </el-table-column>
+              <el-table-column label="住院号" prop="inpatientNo"></el-table-column>
+              <el-table-column label="住院次数" prop="admissTimes"></el-table-column>
+              <el-table-column label="医嘱号" prop="actOrderNo"></el-table-column>
+              <el-table-column label="医嘱时间" prop="occTime" width="70"></el-table-column>
+              <el-table-column label="项目名称" prop="chargeName"></el-table-column>
+              <el-table-column label="金额" prop="chargeFee"></el-table-column>
+              <el-table-column label="数量" prop="orderCount"></el-table-column>
+              <el-table-column label="医生姓名" prop="docotrName"></el-table-column>
+              <el-table-column label="操作人" prop="opIdName"></el-table-column>
+              <el-table-column label="操作时间" prop="opDate" width="70"></el-table-column>
+              <el-table-column label="操作内容" prop="chargeStatus">
+                <template #default="scope">
+                  <span v-html="yiZhuZhuangTai(scope.row.chargeStatus)"></span>
+                </template>
+              </el-table-column>
+            </el-table>
+            <el-pagination
+                background
+                @current-change="liShiShuJuFanYe"
+                :current-page="liShiShuJu.currentPage"
+                :page-size="liShiShuJu.pageSize"
+                layout=" prev, pager, next,total"
+                :total="liShiShuJu.list.length"
+                style="margin-top: 5px"
+                :pager-count="5"
+            ></el-pagination>
+          </div>
+        </el-col>
+      </el-row>
     </el-main>
     <el-drawer v-model="xiangXiYiZhuXinXiDrawer" direction="ltr" size="70%" title="患者医嘱的详细信息">
       <div style="margin: auto 20px auto 20px">
         <el-descriptions :title="lingShiQueFeiShuJu.name" border>
           <template #extra>
-            <el-button type="success" @click="baoCunYiZhuQueFeiClick" icon="Upload" :disabled="queryTerm.liShi === 1">保存 </el-button>
+            <el-button type="success" @click="baoCunYiZhuQueFeiClick" icon="Upload" :disabled="queryTerm.liShi === 1">
+              保存
+            </el-button>
           </template>
           <el-descriptions-item label="住院号">{{ lingShiQueFeiShuJu.inpatientNo }}</el-descriptions-item>
           <el-descriptions-item label="姓名">
@@ -146,10 +158,10 @@
           <el-descriptions-item label="病区">{{ lingShiQueFeiShuJu.wardName }}</el-descriptions-item>
         </el-descriptions>
         <el-table
-          :data="lingShiQueFeiShuJu.list.slice((lingShiQueFeiShuJu.currentPage - 1) * lingShiQueFeiShuJu.pageSize, lingShiQueFeiShuJu.currentPage * lingShiQueFeiShuJu.pageSize)"
-          highlight-current-row
-          stripe
-          :height="winHeight / 1.3"
+            :data="lingShiQueFeiShuJu.list.slice((lingShiQueFeiShuJu.currentPage - 1) * lingShiQueFeiShuJu.pageSize, lingShiQueFeiShuJu.currentPage * lingShiQueFeiShuJu.pageSize)"
+            highlight-current-row
+            stripe
+            :height="winHeight / 1.3"
         >
           <el-table-column label="医嘱信息">
             <el-table-column prop="actOrderNo" label="医嘱号"></el-table-column>
@@ -166,7 +178,8 @@
             </el-table-column>
             <el-table-column label="操作" width="220">
               <template #default="scope">
-                <el-radio-group v-model="scope.row.chargeStatus" :fill="scope.row.chargeStatus === '1' ? '#67C23A' : scope.row.chargeStatus === '2' ? '#F56C6C' : '#909399'">
+                <el-radio-group v-model="scope.row.chargeStatus"
+                                :fill="scope.row.chargeStatus === '1' ? '#67C23A' : scope.row.chargeStatus === '2' ? '#F56C6C' : '#909399'">
                   <el-radio-button label="1">确认</el-radio-button>
                   <el-radio-button label="2">取消</el-radio-button>
                   <el-radio-button label="3">不操作</el-radio-button>
@@ -176,59 +189,63 @@
           </el-table-column>
         </el-table>
         <el-pagination
-          background
-          @current-change="lingShiFanYe"
-          @size-change="handleSizeChange"
-          :current-page="lingShiQueFeiShuJu.currentPage"
-          :page-size="lingShiQueFeiShuJu.pageSize"
-          layout="total, sizes, prev, pager, next, jumper"
-          :page-sizes="[8, 20, 30, 100]"
-          :total="lingShiQueFeiShuJu.total"
-          style="margin-top: 5px"
-          :pager-count="5"
+            background
+            @current-change="lingShiFanYe"
+            @size-change="handleSizeChange"
+            :current-page="lingShiQueFeiShuJu.currentPage"
+            :page-size="lingShiQueFeiShuJu.pageSize"
+            layout="total, sizes, prev, pager, next, jumper"
+            :page-sizes="[8, 20, 30, 100]"
+            :total="lingShiQueFeiShuJu.total"
+            style="margin-top: 5px"
+            :pager-count="5"
         ></el-pagination>
       </div>
     </el-drawer>
     <el-dialog v-model="chaoZuoZhiNan" title="操作指南(*^▽^*)" width="1000px">
       <div id="jinRiShuJuTuXin" style="width: 100%; height: 300px"></div>
       1、输入住院号,点击查询即可查询出该住院患者的信息,同理病区也是一样选择的病区就只会查询该病区的患者,住院号和病区二选一。
-      <br />
-      <br />
+      <br/>
+      <br/>
       2、排序:默认根据病区来排,选择了执行人后会根据算法来把当前登陆的人员,执行过最多的患者来排到靠前的位置。
-      <br /><br />
+      <br/><br/>
       3、未确认和历史:默认会查询患者未确认的项目,点击历史后一定要选择时间,该时间是医嘱的执行时间,默认会查询当天的时间,(提示选择时间的跨度建议不要过长,可能会导致数据加载慢。)同时查询历史时
       也可以使用住院号和病区来查询。
-      <br />
-      <br />
+      <br/>
+      <br/>
       4、患者姓名:有出院医嘱会显示为红色,无则显示绿色。
-      <br />
-      <br />
+      <br/>
+      <br/>
       <span style="color: red">
         5、现在无需点击患者姓名,直接点击该栏会弹出抽屉,患者基本信息会显示在上方,请按照需求来选择对应的操作,默认每页显示八条,表格中的分页按钮,跳转至上一页或下一页。
         点击抽屉外的任意位置即可消失,或点击保存旁边的关闭按钮。
       </span>
-      <br /><br />
+      <br/><br/>
       6、分页:该分页指页面下方的分页,点击下一页后,且没有点击保存,那么您此前的操作将会丢失,请在分页之前(如果有操作)点击保存(小表格中点击分页不会出现该情况)。
-      <br /><br />
+      <br/><br/>
       7、保存:在确定数据正确后,点击保存(数据一旦,保存成功就没有回头路了,请认真仔细的确认),<span style="color: red">点击弹出来的抽屉中的保存也是一样的效果。(新增)</span>
-      <br /><br />
+      <br/><br/>
       8、错误:在点击保存后,系统会自动接受患者的费用,如出错会在右上角,出现提示,可以请对应病区的护士在出院结算页面中点击费用接受重算按钮即可,或在老系统中护士打印费用清单时,会自动接收。
-      <br /><br />
+      <br/><br/>
       9、如有新的需求或出现未知的意外可联系管理员,如是操作失误后果自负(我觉得我已经写的很详细了,各种提示都有,都是简单的操作,还出现操作失误那就没得办法了) (>ω・* )ノ
     </el-dialog>
   </el-container>
 </template>
 
 <script>
-import { onMounted, ref, watch } from 'vue'
-import { getXuQueFeiYiZhu, baoCunYiZhuQueFeiShuJu, huoQuLiShiQueFeiYiZhu } from '../../api/zhu-yuan-yi-ji/que-ren-yi-zhu-shou-fei'
-import { getWard } from '@/api/yibao/xiang-mu-lu-ru'
-import { cptSex } from '@/utils/computed'
+import {onMounted, ref, watch} from 'vue'
+import {
+  getXuQueFeiYiZhu,
+  baoCunYiZhuQueFeiShuJu,
+  huoQuLiShiQueFeiYiZhu
+} from '../../api/zhu-yuan-yi-ji/que-ren-yi-zhu-shou-fei'
+import {getWard} from '@/api/yibao/xiang-mu-lu-ru'
+import {cptSex} from '@/utils/computed'
 import store from '@/store'
-import { getDate, getDateRangeFormatDate } from '@/utils/date'
-import { ElMessage, ElMessageBox } from 'element-plus'
-import { shortcuts } from '@/data/shortcuts'
-import { barUtils } from '@/utils/echarts-utils'
+import {getDate, getDateRangeFormatDate} from '@/utils/date'
+import {ElMessage, ElMessageBox} from 'element-plus'
+import {shortcuts} from '@/data/shortcuts'
+import {barUtils} from '@/utils/echarts-utils'
 
 export default {
   setup() {
@@ -270,9 +287,9 @@ export default {
     const huanZheYiZhuFeiYongData = ref([])
     // 操作
     const chargeStatusData = ref([
-      { code: '1', name: '确认' },
-      { code: '2', name: '取消' },
-      { code: '3', name: '不操作' },
+      {code: '1', name: '确认'},
+      {code: '2', name: '取消'},
+      {code: '3', name: '不操作'},
     ])
 
     const dateRange = ref([new Date(), new Date()])
@@ -289,24 +306,24 @@ export default {
       queryTerm.value.pageSize = 20
       if (queryTerm.value.liShi === 0) {
         getXuQueFeiYiZhu(queryTerm.value)
-          .then((res) => {
-            huanZheYiZhuFeiYongData.value = res.records
-            queryTerm.value.total = res.total
-            qingKongLingShiShuJu()
-          })
-          .catch(() => {
-            huanZheYiZhuFeiYongData.value = []
-            queryTerm.value.total = 0
-          })
+            .then((res) => {
+              huanZheYiZhuFeiYongData.value = res.records
+              queryTerm.value.total = res.total
+              qingKongLingShiShuJu()
+            })
+            .catch(() => {
+              huanZheYiZhuFeiYongData.value = []
+              queryTerm.value.total = 0
+            })
       } else {
         huoQuLiShiQueFeiYiZhu(
-          queryTerm.value.startTimeString,
-          queryTerm.value.endTimeString,
-          queryTerm.value.inpatientNo,
-          queryTerm.value.wardCode,
-          queryTerm.value.execUnit,
-          queryTerm.value.fenLei,
-          zhiKanZiJi.value ? store.state.user.info.code : ''
+            queryTerm.value.startTimeString,
+            queryTerm.value.endTimeString,
+            queryTerm.value.inpatientNo,
+            queryTerm.value.wardCode,
+            queryTerm.value.execUnit,
+            queryTerm.value.fenLei,
+            zhiKanZiJi.value ? store.state.user.info.code : ''
         ).then((res) => {
           liShiShuJu.value.list = res
           if (liShiShuJu.value.list.length > 0) {
@@ -400,17 +417,18 @@ export default {
         type: 'warning',
         dangerouslyUseHTMLString: true,
       })
-        .then(() => {
-          let shaungChuanData = {
-            list: huanZheYiZhuFeiYongData.value,
-            execUnit: store.state.user.info.deptCode,
-          }
-          baoCunYiZhuQueFeiShuJu(shaungChuanData).then((res) => {
-            xiangXiYiZhuXinXiDrawer.value = false
-            getXuQueFeiYiZhuClick()
+          .then(() => {
+            let shaungChuanData = {
+              list: huanZheYiZhuFeiYongData.value,
+              execUnit: store.state.user.info.deptCode,
+            }
+            baoCunYiZhuQueFeiShuJu(shaungChuanData).then((res) => {
+              xiangXiYiZhuXinXiDrawer.value = false
+              getXuQueFeiYiZhuClick()
+            })
+          })
+          .catch(() => {
           })
-        })
-        .catch(() => {})
     }
 
     const qingKongLingShiShuJu = () => {

+ 76 - 0
src/views/settings/Test.vue

@@ -0,0 +1,76 @@
+<template>
+  <xc-select-v2 v-model="obj"
+                value="tcode" label="tname"
+                :data="data" :remote-method="testmethod"/>
+  测试:
+  <el-button @click="test1">清空</el-button>
+  <el-button @click="generateData">生成数据</el-button>
+
+  <el-button @click="testApi">API</el-button>
+</template>
+
+<script setup name='Test'>
+import sleep from "@/utils/sleep";
+import {huoQuLinChuangZhenDuan} from "@/api/zhu-yuan-yi-sheng/jian-yan-jian-cha-shen-qing";
+
+const obj = $ref({
+  tcode: '',
+  tname: ''
+})
+
+let data = $ref([])
+
+const generateData = () => {
+  for (let i = 0; i < 1000; i++) {
+    data.push({
+      value: i.toString(),
+      label: i === 4 ? 'asdghashjgdhjasgdhjasgdhjasgdhjasgdjhasdg' : 'test' + i
+    })
+  }
+
+}
+
+const testmethod = async (val) => {
+  console.log('触发查询事件', val)
+  let length = Math.ceil((Math.random() * 10) * 100)
+  let index = Math.ceil((Math.random() * 10) * 10)
+  data = []
+  for (let i = 0; i < length; i++) {
+    if (i === index) {
+      data.push({
+        value: val,
+        label: i + 'label' + '数据'
+      })
+    }
+    data.push({
+      value: val + i,
+      label: i + 'label'
+    })
+  }
+  await sleep(2000)
+  obj.tname = ''
+  data = []
+}
+
+const test1 = async () => {
+  data = []
+  await sleep(1000)
+  obj.tcode = 'ad' + Math.ceil((Math.random() * 10))
+  console.log(obj.tcode)
+}
+
+
+const te = (val) => {
+  console.log(val)
+}
+
+const testApi = () => {
+  huoQuLinChuangZhenDuan('123', 1).then((res) => {
+    console.log(res)
+  })
+}
+</script>
+
+<style scoped>
+
+</style>