From 4cf74834fe5ac6229035b72312b75958495e60d3 Mon Sep 17 00:00:00 2001
From: lkk <364857242@qq.com>
Date: 星期二, 19 八月 2025 15:35:08 +0800
Subject: [PATCH] 1
---
src/views/doctor/inspectCheck/index.vue | 582 +++++++++++++++++++++++++++++----------------------------
1 files changed, 294 insertions(+), 288 deletions(-)
diff --git a/src/views/doctor/inspectCheck/index.vue b/src/views/doctor/inspectCheck/index.vue
index 02ef381..653baea 100644
--- a/src/views/doctor/inspectCheck/index.vue
+++ b/src/views/doctor/inspectCheck/index.vue
@@ -1,157 +1,67 @@
<template>
<div class="app-container">
- <el-form
- :model="queryParams"
- ref="queryForm"
- size="small"
- :inline="true"
- label-width="68px"
- >
+ <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px" @submit.native.prevent>
<el-form-item label="浣撴鍙�" prop="reportDoctorCode">
- <el-input
- ref="inputName"
- v-model="queryParams.tjNum"
- placeholder="璇疯緭鍏ヤ綋妫�鍙�"
- clearable
- @keyup.enter.native="handleQuery"
- style="width: 170px"
- />
+ <el-input ref="inputName" v-model="queryParams.tjNum" placeholder="璇疯緭鍏ヤ綋妫�鍙�" clearable
+ @keyup.enter.native="handleQuery" style="width: 170px" />
</el-form-item>
<el-form-item>
- <el-button
- type="primary"
- icon="el-icon-search"
- size="mini"
- @click="handleQuery"
- style="margin-right: 15px"
- >鏌ヨ</el-button
- >
- <el-button
- icon="el-icon-refresh"
- type="primary"
- size="mini"
- @click="resetQuery"
- >閲嶇疆</el-button
- >
- <el-button
- icon="el-icon-check"
- type="primary"
- size="mini"
- style="margin-right: 15px"
- @click="tongbu"
- :disabled="!selectedFirstTable"
- >鍚屾</el-button
- >
+ <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery" style="margin-right: 15px">
+ 鏌ヨ
+ </el-button>
+ <el-button icon="el-icon-refresh" type="primary" size="mini" @click="resetQuery">
+ 閲嶇疆
+ </el-button>
+ <el-button icon="el-icon-check" type="primary" size="mini" style="margin-right: 15px" @click="tongbu">
+ 鍚屾
+ </el-button>
</el-form-item>
</el-form>
-
- <div class="table-title">
- <h3>妫�楠岃褰�</h3>
+ <div class="box">
+ <div class="table-header">
+ 妫�楠岃褰�
+ </div>
+ <div>
+ <el-table :data="exaLists" border style="width: 100%" @selection-change="handleSelectionChange"
+ :header-cell-style="{ background: '#aad8df', fontSize: '14px', color: '#333' }" height="350" ref="firstTable">
+ <el-table-column fixed type="selection" align="center" label="閫夋嫨" width="50" />
+ <el-table-column label="濮撳悕" align="center" prop="name" width="80" />
+ <el-table-column label="鎬у埆" align="center" prop="gender" width="80" />
+ <el-table-column label="骞撮緞" align="center" prop="patientAge" width="80" />
+ <el-table-column label="閫佹绉戝" align="center" prop="deptName" width="100" />
+ <el-table-column label="妫�楠岄」鐩�" align="center" prop="checkParts" width="350" :show-overflow-tooltip="true" />
+ <el-table-column label="椤圭洰缂栧彿" align="center" prop="jcxmid" width="150" />
+ <el-table-column label="瀹℃牳鍖诲笀" align="center" prop="shys" width="150" />
+ <el-table-column label="鎶ュ憡鏃堕棿" align="center" prop="examinationDate" width="150" />
+ <el-table-column label="闂ㄨ瘖鍙�" align="center" prop="mzh" width="140" />
+ <el-table-column label="鐢宠鍗曞彿" align="center" prop="brid" width="145" />
+ <el-table-column label="鎶ュ憡鍖诲笀" align="center" prop="reportDoctorName" width="120" />
+ <el-table-column label="妫�楠屽尰甯堝悕" align="center" prop="checkDoctorName" width="120" />
+ <el-table-column align="center" label="妫�娴嬮」鐩�" width="100">
+ <template slot-scope="scope">
+ <div>{{ scope.row.proName }}</div>
+ </template>
+ </el-table-column>
+ <el-table-column align="center" prop="proResult" label="妫�娴嬬粨鏋�" width="180" />
+ <el-table-column align="center" prop="company" label="鍗曚綅" width="80" />
+ <el-table-column align="center" prop="conclusion" label="寮傚父" width="180" />
+ <el-table-column align="center" prop="tjStandardGtValue" label="鍙傝�冭寖鍥�" width="120" />
+ </el-table>
+ </div>
</div>
- <el-table
- id="ta"
- ref="tb"
- :data="exaLists"
- v-loading="loading"
- border
- max-height="350"
- @current-change="handleCurrentChange"
- @selection-change="handleSelectionChange"
- :row-class-name="tableRowClassName"
- >
- <el-table-column
- fixed
- type="selection"
- align="center"
- label="閫夋嫨"
- width="40"
- :selectable="isSelectable"
- >
- </el-table-column>
-
- <el-table-column label="濮撳悕" align="center" prop="name" width="80px" />
- <el-table-column label="鎬у埆" align="center" prop="gender" width="80px" />
- <el-table-column
- label="骞撮緞"
- align="center"
- prop="patientAge"
- width="80px"
- >
- </el-table-column>
- <el-table-column
- label="閫佹绉戝"
- align="center"
- prop="deptName"
- width="100px"
- />
-
- <el-table-column
- label="妫�鏌ラ」鐩�"
- align="center"
- prop="checkParts"
- width="150px"
- />
- <el-table-column
- label="鎶ュ憡鏃堕棿"
- align="center"
- prop="examinationDate"
- width="150px"
- />
-
- <el-table-column label="闂ㄨ瘖鍙�" align="center" prop="mzh" width="140px" />
- <el-table-column
- label="鐢宠鍗曞彿"
- align="center"
- prop="brid"
- width="145px"
- />
- <el-table-column
- label="缁撴灉鐘舵��"
- align="center"
- prop="diagnosis"
- width="150"
- :show-overflow-tooltip="true"
- />
- <el-table-column
- label="鎶ュ憡鍖诲笀"
- align="center"
- prop="reportDoctorName"
- width="120px"
- />
- <el-table-column
- label="妫�鏌ュ尰甯堝悕"
- align="center"
- prop="checkDoctorName"
- width="120px"
- />
-
- <el-table-column
- label="缁撴灉琛ㄧ幇"
- align="center"
- prop="examination"
- :show-overflow-tooltip="true"
- />
- </el-table>
-
<div class="table-title">
- <h3>浣撴璁板綍</h3>
- </div>
- <el-table
- border
- max-height="280"
- ref="tab1"
- :data="checkList"
- v-loading="loading"
+ <h3>
+ 浣撴璁板綍锛�
+ <span class="highlight">濮撳悕锛歿{ infoList.tjCustomerName || "鏆傛棤" }}</span>
+ <span class="highlight">鎬у埆锛歿{ infoList.tjCustomerSex == 0 ? "鐢�" : infoList.tjCustomerSex == 1 ? "濂�" : "鏆傛棤" }}</span>
+ <span class="highlight">骞撮緞锛歿{ infoList.tjCustomerAge || "鏆傛棤" }}</span>
+ </h3>
+</div>
+ <el-table border height="350" ref="tab1" :data="checkList" v-loading="loading" style="width: 100%"
@selection-change="handleSelectionChangeSecond"
- >
- <el-table-column type="selection" width="55"> </el-table-column>
- <el-table-column
- label="鐘舵��"
- align="center"
- prop="type"
- :show-overflow-tooltip="true"
- min-width="60"
- >
+ :header-cell-style="{ background: '#aad8df', fontSize: '14px', color: '#333' }">
+ <el-table-column type="selection" width="60" />
+ <el-table-column label="鐘舵��" align="center" prop="type" :show-overflow-tooltip="true" min-width="60">
<template slot-scope="scope">
<span v-if="scope.row.type == '0'">鏈</span>
<span v-if="scope.row.type == '1'">宸叉</span>
@@ -159,75 +69,44 @@
<span v-if="scope.row.type == '3'">寤舵湡</span>
</template>
</el-table-column>
- <el-table-column
- label="绉戝"
- align="center"
- prop="deptName"
- min-width="115"
- />
- <el-table-column
- label="椤圭洰"
- align="center"
- prop="proName"
- min-width="160"
- />
- <el-table-column
- label="鏀惰垂鏂瑰紡"
- align="center"
- prop="sffs"
- min-width="80"
- />
- <el-table-column
- label="鏄惁鏀惰垂"
- align="center"
- prop="isPay"
- min-width="80"
- />
- <el-table-column
- label="妫�鏌ユ椂闂�"
- align="center"
- prop="bcupdateTime"
- min-width="160"
- />
-
- <el-table-column
- label="鏈�鍚庝慨鏀规椂闂�"
- align="center"
- prop="zhupdateTime"
- min-width="160"
- />
+ <el-table-column label="绉戝" align="center" prop="deptName" min-width="115" />
+ <el-table-column label="椤圭洰" align="center" prop="proName" min-width="160" />
+ <el-table-column label="鏀惰垂鏂瑰紡" align="center" prop="sffs" min-width="80" />
+ <el-table-column label="鏄惁鏀惰垂" align="center" prop="isPay" min-width="80" />
+ <el-table-column label="妫�楠屾椂闂�" align="center" prop="bcupdateTime" min-width="160" />
+ <el-table-column label="鏈�鍚庝慨鏀规椂闂�" align="center" prop="zhupdateTime" min-width="160" />
</el-table>
</div>
</template>
-
- <script>
+<script>
import { getlisList, getJyTjList, asyncPacs } from "@/api/doctor/pacsCheck";
+import { getOrderList } from "@/api/hosp/order";
+import moment from "moment";
export default {
dicts: ["dict_tj_status"],
data() {
return {
+ isProcessing: false, // 闃叉姝诲惊鐜�
+ isDeselection: false, // 鏍囪鏄惁涓哄彇娑堥�変腑
+ infoList: {},
dis: false,
code: null,
createTimeList: "",
total: 0,
loading: false,
isSyncing: false,
- // 鏌ヨ鍙傛暟
+ isFetchingRightTableData: false,
queryParams: {
- // page: 1,
- // pageSize: 20,
name: null,
start: null,
end: null,
tjNum: null,
},
- // 缁戝畾鍗曢�夋寜閽�
checkStatus: "0",
exaLists: [],
- selectedFirstTable: null, // 绗竴涓〃鏍奸�変腑琛�
- selectedSecondTable: [], // 绗簩涓〃鏍奸�変腑琛�
- // 琛ㄥ崟鍙傛暟
+ selectedFirstTable: null,
+ selectedSecondTable: [],
form: {},
clearTimeSet: null,
tjNumbers: "",
@@ -276,92 +155,199 @@
this.$refs.inputName.focus();
});
},
+
methods: {
-
- handleDateChange(val){
+ handleDateChange(val) {
if (val && val.length === 2) {
- this.queryParams.start = val[0]; // 璁剧疆寮�濮嬫椂闂�
- this.queryParams.end = val[1]; // 璁剧疆缁撴潫鏃堕棿
+ this.queryParams.start = val[0];
+ this.queryParams.end = val[1];
} else {
this.queryParams.start = null;
this.queryParams.end = null;
}
- console.log('Query Params:', this.queryParams);
+ },
- },
- isSelectable(row) {
- return !!row.mzh;
- },
tableRowClassName({ row }) {
- return !row.mzh ? "row-disabled" : "";
+ return !row.brid ? "row-disabled" : "";
},
- handleSelectionChange(val) {
- console.log(val);
- if (val.length > 1) {
- let del_row = val.shift();
- this.$refs.tb.toggleRowSelection(del_row, false); //璁剧疆杩欎竴琛屽彇娑堥�変腑
- }
- console.log(val, 999);
+handleSelectionChange(val) {
+ // 闃叉閲嶅瑙﹀彂
+ if (this.isProcessingSelection) {
+ return;
+ }
+ this.isProcessingSelection = true;
- if (val.length > 0) {
- const selectedRow = val[0];
- console.log(val[0], 555);
+ // 濡傛灉娌℃湁閫変腑琛岋紝娓呯┖鎵�鏈夐�夋嫨骞惰烦杩囨帴鍙h皟鐢�
+ if (val.length === 0) {
+ this.$refs.firstTable.clearSelection();
+ this.selectedFirstTable = null;
+ this.checkList = [];
+ this.isDeselection = true;
+ this.$nextTick(() => {
+ this.isProcessingSelection = false;
+ this.$refs.firstTable.$forceUpdate(); // 寮哄埗鍒锋柊琛ㄦ牸
+ });
+ return;
+ }
- this.selectedFirstTable = selectedRow;
- console.log("褰撳墠閫変腑鐨勮鏁版嵁:", this.selectedFirstTable);
- this.fetchRightTableData(selectedRow);
- } else {
- this.selectedFirstTable = null;
- this.checkList = [];
+ // 妫�鏌ユ槸鍚︾偣鍑讳簡鍏ㄩ�夋寜閽紙val 闀垮害绛変簬琛ㄦ牸鎬昏鏁帮級
+ if (val.length === this.exaLists.length) {
+ this.selectedFirstTable = [...this.exaLists]; // 閫変腑鎵�鏈夎
+ this.$refs.firstTable.clearSelection();
+ this.exaLists.forEach(row => {
+ if (!row.brid) {
+ return;
}
- },
- // 鏍规嵁閫変腑鐨勮鏁版嵁璇锋眰鍙宠竟琛ㄦ牸鏁版嵁
- fetchRightTableData(selectedRow) {
- const code = selectedRow.mzh;
- if (!code) return;
- this.loading = true;
- getJyTjList(code).then((response) => {
- this.checkList = response.data;
- this.loading = false;
+ this.$refs.firstTable.toggleRowSelection(row, true, false);
+ });
+ } else {
+ // 鑾峰彇鏈�鏂伴�変腑鐨勮
+ const latestSelectedRow = val[val.length - 1];
+
+ // 妫�鏌ユ槸鍚︾偣鍑讳簡宸查�変腑鐨勮锛堝彇娑堟墍鏈夐�変腑锛�
+ const isTogglingSelectedRow = this.selectedFirstTable && this.selectedFirstTable.some(row => row.tempId === latestSelectedRow.tempId);
+ if (isTogglingSelectedRow) {
+ this.$refs.firstTable.clearSelection();
+ this.selectedFirstTable = null;
+ this.checkList = [];
+ this.isDeselection = true;
+ this.$nextTick(() => {
+ this.isProcessingSelection = false;
+ this.$refs.firstTable.$forceUpdate(); // 寮哄埗鍒锋柊琛ㄦ牸
});
+ return;
+ }
+
+ // 姝e父閫変腑閫昏緫锛氭牴鎹� brid 绛涢��
+ const filterKey = 'brid';
+ const filterValue = latestSelectedRow.brid;
+
+ // 娓呯┖鎵�鏈夐�変腑鐘舵��
+ this.$refs.firstTable.clearSelection();
+
+ // 閫変腑涓� brid 鍖归厤鐨勮
+ const rowsToSelect = this.exaLists.filter(row => row.brid === filterValue);
+ rowsToSelect.forEach(row => {
+ if (!row.brid) {
+ console.warn(`鍚嶇О涓� ${row.name} 鐨勮娌℃湁鐢宠鍗曞彿锛岃烦杩囬�夋嫨`);
+ return;
+ }
+ this.$refs.firstTable.toggleRowSelection(row, true, false);
+ });
+
+ // 鏇存柊 selectedFirstTable 涓� brid 鍖归厤鐨勮
+ this.selectedFirstTable = rowsToSelect;
+ }
+
+ // 璋冪敤鍙充晶琛ㄦ牸鏁版嵁
+ if (!this.isFetchingRightTableData && this.selectedFirstTable.length > 0) {
+ this.isFetchingRightTableData = true;
+ this.fetchRightTableData().finally(() => {
+ this.isFetchingRightTableData = false;
+ this.$nextTick(() => {
+ // 浠呮洿鏂版牱寮忥紝涓嶈Е鍙戞柊浜嬩欢
+ this.$refs.firstTable.$forceUpdate();
+ this.isProcessingSelection = false;
+ });
+ });
+ } else {
+ this.isProcessingSelection = false;
+ }
+
+ // 閲嶇疆 isDeselection 鐘舵��
+ this.isDeselection = false;
+},
+ fetchRightTableData() {
+ const code = this.queryParams.tjNum;
+ if (!code) {
+ console.warn('鏈彁渚涗綋妫�鍙凤紝璺宠繃 fetchRightTableData');
+ this.checkList = [];
+ this.loading = false;
+ return Promise.resolve();
+ }
+ this.loading = true;
+ return getJyTjList(code)
+ .then((response) => {
+ this.checkList = response.data || [];
+ this.loading = false;
+ })
+ .catch((error) => {
+ console.error('鑾峰彇 checkList 澶辫触:', error);
+ this.checkList = [];
+ this.loading = false;
+ throw error;
+ });
},
handleSelectionChangeSecond(selectedRows) {
this.selectedSecondTable = selectedRows;
- console.log("褰撳墠閫変腑鐨勮鏁版嵁:", this.selectedSecondTable);
+ if (selectedRows.length > 1) {
+ let del_row = selectedRows.shift();
+ this.$refs.tab1.toggleRowSelection(del_row, false);
+ }
},
- getList() {
+
+ async handleQuery() {
+ if (!this.queryParams.tjNum) {
+ this.$message.error("浣撴鍙蜂笉鑳戒负绌�");
+ return;
+ }
+
+ this.loading = true;
+ try {
+ // 骞惰鎵ц涓や釜鏌ヨ
+ const [orderResponse, lisResponse] = await Promise.all([
+ getOrderList(this.queryParams).catch((error) => {
+ console.error('鑾峰彇 orderList 澶辫触:', error);
+ return { data: { list: [] } }; // 杩斿洖绌烘暟鎹互缁х画鎵ц
+ }),
+ getlisList(this.queryParams),
+ ]);
+
+ // 澶勭悊 getOrderList 缁撴灉
+ if (orderResponse.data?.list?.length > 0) {
+ this.infoList = orderResponse.data.list[0];
+ } else {
+ this.infoList = {};
+ console.warn('getOrderList 杩斿洖绌哄垪琛�');
+ }
+
+ // 澶勭悊 getlisList 缁撴灉
+ if (lisResponse.code === 200) {
+ this.exaLists = lisResponse.data.map((item, index) => ({
+ ...item,
+ brid: item.brid?.trim(), // 娓呯悊绌烘牸
+ mzh: item.mzh?.trim(),
+ tempId: index,
+ }));
+
+ // 鑾峰彇鍙充晶琛ㄦ牸鏁版嵁
+ await this.fetchRightTableData();
+ } else {
+ this.exaLists = [];
+ this.$message.error(lisResponse.msg || "鏌ヨ妫�楠岃褰曞け璐�");
+ }
+ } catch (error) {
+ console.error('鏌ヨ澶辫触:', error);
+ this.$message.error(error?.msg || "鏌ヨ澶辫触锛岃绋嶅悗閲嶈瘯");
+ this.exaLists = [];
+ this.checkList = [];
+ this.infoList = {};
+ } finally {
+ this.loading = false;
+ }
+
+ // 澶勭悊鏃堕棿鑼冨洿
if (this.createTimeList) {
this.queryParams.start = this.createTimeList[0];
this.queryParams.end = this.createTimeList[1];
- } else if (this.createTimeList == null) {
+ } else {
this.queryParams.start = null;
this.queryParams.end = null;
}
},
- /** 鎼滅储鎸夐挳鎿嶄綔 */
- handleQuery() {
- // this.queryParams.page = 1;
- this.loading = true;
- getlisList(this.queryParams)
- .then((res) => {
- console.log(res, 1111);
- if (res.code == 200) {
- this.loading = false;
- this.exaLists = res.data;
- this.code = this.exaLists.mzh;
- }
- })
- .catch((error) => {
- this.loading = false;
- this.$message.error(res.msg || "鏌ヨ澶辫触锛岃绋嶅悗閲嶈瘯");
- });
- this.getList();
- },
-
- /** 閲嶇疆鎸夐挳鎿嶄綔 */
resetQuery() {
this.createTimeList = [];
this.resetForm("queryForm");
@@ -371,40 +357,37 @@
end: null,
tjNum: null,
};
-
- // 娓呯┖鍏朵粬渚濊禆鏁版嵁
this.checkList = [];
this.exaLists = [];
+ this.infoList = {};
},
handleCurrentChange(row) {
this.currentRow = row;
- // console.log('褰撳墠閫変腑鐨勮:', row);
},
setTime() {
- //璁剧疆瀹氭椂鍣�
this.clearTimeSet = setInterval(() => {
this.$modal.closeLoading();
}, 300000);
},
- tongbu(row) {
+
+ tongbu() {
this.$modal.loading("姝e湪鍚屾锛岃绋嶅��...");
this.setTime();
const requestData = {
- pacs: this.selectedFirstTable, // 宸︿晶琛ㄦ牸閫変腑鏁版嵁
- tj: this.selectedSecondTable[0], // 鍙充晶琛ㄦ牸閫変腑鏁版嵁
+ lis: this.selectedFirstTable ? this.selectedFirstTable.map((item) => ({
+ ...item,
+ tjNum: this.queryParams.tjNum,
+ })) : [],
+ jcxmid: this.selectedFirstTable && this.selectedFirstTable.length > 0 ? this.selectedFirstTable[0].jcxmid : null,
+ shys: this.selectedFirstTable && this.selectedFirstTable.length > 0 ? this.selectedFirstTable[0].shys : null,
+ tj: this.selectedSecondTable[0],
};
-
- if (!this.selectedSecondTable || this.selectedSecondTable.length === 0) {
- this.$message.error("鑷冲皯閫変竴鏉℃暟鎹紒");
- return;
- }
-
asyncPacs(requestData)
.then((res) => {
- if (res.code == 200) {
- this.fetchRightTableData(this.selectedFirstTable);
+ if (res.code === 200) {
+ this.fetchRightTableData();
clearInterval(this.clearTimeSet);
this.clearTimeSet = null;
this.$modal.closeLoading();
@@ -417,41 +400,64 @@
clearInterval(this.clearTimeSet);
this.clearTimeSet = null;
this.$modal.closeLoading();
- })
+ });
},
},
-};
-</script>
-
- <style lang="scss" scoped>
-#ta .el-table__header-wrapper .el-checkbox {
- display: none;
+};</script>
+<style lang="scss" scoped>
+.app-container {
+ padding: 20px;
+ background: #f5f7fa;
+}
+
+.table-header {
+ text-align: center;
+ background-color: #aad8df;
+ padding: 10px;
+ font-size: 16px;
+ font-weight: bold;
+ color: #333;
+ margin-top: 10px;
+ border-radius: 4px 4px 0 0;
+}
+
+.table-title {
+ text-align: left;
+ margin: 20px 0;
+ padding: 10px 0;
+}
+
+.table-title h3 {
+ font-size: 16px;
+ color: #333;
+ margin: 0;
+ line-height: 1.5;
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ gap: 20px;
+}
+
+.table-title .highlight {
+ font-weight: bold;
+ color: #2c3e50;
+}
+
+.el-table {
+ border-radius: 4px;
+ font-size: 14px;
}
.el-table .warning-row {
background: #e5f3ff !important;
}
+
::v-deep .el-table__body tr.current-row > td {
background: #edf2fa !important;
}
-.table-title {
- text-align: center;
- margin-bottom: 15px;
-}
.row-disabled {
- color: #ccc; /* 璁剧疆绂佺敤琛岀殑瀛椾綋棰滆壊 */
- pointer-events: none; /* 绂佹榧犳爣鎿嶄綔 */
- background-color: #f5f5f5; /* 璁剧疆绂佺敤琛岀殑鑳屾櫙鑹� */
-}
-
-.pag {
- width: 100%;
- display: flex;
- justify-content: center;
-}
-
-.pag1 {
- width: 30%;
+ color: #999;
+ background-color: #f5f5f5;
}
</style>
\ No newline at end of file
--
Gitblit v1.8.0