From 631c8f37b449b09d19345b76400a39abdb7800f6 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期四, 15 一月 2026 15:48:42 +0800
Subject: [PATCH] api封装档案、上报、转运接入
---
src/views/business/transfer/index.vue | 391 +++++++++++++++++++++++++++----------------------------
1 files changed, 190 insertions(+), 201 deletions(-)
diff --git a/src/views/business/transfer/index.vue b/src/views/business/transfer/index.vue
index 0c9a95a..5325b13 100644
--- a/src/views/business/transfer/index.vue
+++ b/src/views/business/transfer/index.vue
@@ -8,45 +8,37 @@
:inline="true"
label-width="80px"
>
- <el-form-item label="杞繍鍗曞彿" prop="transportNo">
- <el-input
- v-model="queryParams.transportNo"
- placeholder="璇疯緭鍏ヨ浆杩愬崟鍙�"
- clearable
- style="width: 200px"
- @keyup.enter.native="handleQuery"
- />
- </el-form-item>
- <el-form-item label="浣忛櫌鍙�" prop="caseNo">
+ <el-form-item label="妗堜緥缂栧彿" prop="caseNo">
<el-input
v-model="queryParams.caseNo"
- placeholder="璇疯緭鍏ヤ綇闄㈠彿"
+ placeholder="璇疯緭鍏ユ渚嬬紪鍙�"
clearable
style="width: 200px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
- <el-form-item label="鎹愮尞鑰呭鍚�" prop="donorName">
+ <el-form-item label="鎮h�呭鍚�" prop="patName">
<el-input
- v-model="queryParams.donorName"
- placeholder="璇疯緭鍏ユ崘鐚�呭鍚�"
+ v-model="queryParams.patName"
+ placeholder="璇疯緭鍏ユ偅鑰呭鍚�"
clearable
style="width: 200px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
- <el-form-item label="杞繍鐘舵��" prop="status">
+ <el-form-item label="杞繍鐘舵��" prop="transitStatus">
<el-select
- v-model="queryParams.status"
+ v-model="queryParams.transitStatus"
placeholder="杞繍鐘舵��"
clearable
style="width: 200px"
>
<el-option label="鍏ㄩ儴" value="" />
- <el-option label="寰呭嚭鍙�" value="pending" />
- <el-option label="杞繍涓�" value="transporting" />
- <el-option label="宸插畬鎴�" value="completed" />
- <el-option label="宸插彇娑�" value="cancelled" />
+ <el-option label="寰呰浆杩�" :value="1" />
+ <el-option label="杞繍涓�" :value="2" />
+ <el-option label="杞繍瀹屾垚" :value="3" />
+ <el-option label="杞繍鍙栨秷" :value="4" />
+ <el-option label="鏆傚瓨" :value="5" />
</el-select>
</el-form-item>
<el-form-item label="鍒涘缓鏃堕棿">
@@ -148,7 +140,7 @@
></right-toolbar>
</el-row>
- <!-- 鏁版嵁琛ㄦ牸 -->
+ <!-- 鏁版嵁琛ㄦ牸 - 鐩存帴浣跨敤鍚庣杩斿洖鐨勬暟鎹粨鏋� -->
<el-table
v-loading="loading"
:data="transportList"
@@ -156,19 +148,28 @@
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="搴忓彿" type="index" width="60" align="center" />
- <el-table-column label="杞繍鍗曞彿" align="center" prop="id" width="140" />
<el-table-column
- label="浣忛櫌鍙�"
+ label="杞繍鍗曞彿"
+ align="center"
+ prop="reportId"
+ width="140"
+ />
+ <el-table-column
+ label="妗堜緥缂栧彿"
align="center"
prop="caseNo"
width="140"
/>
- <el-table-column label="鎹愮尞鑰呬俊鎭�" align="center" width="180">
+ <el-table-column label="鎮h�呬俊鎭�" align="center" width="260">
<template slot-scope="scope">
<div class="donor-info">
- <div class="donor-name">{{ scope.row.donorName }}</div>
+ <div class="donor-name">{{ scope.row.patName }}</div>
<div class="donor-details">
- {{ scope.row.gender }} | {{ scope.row.age }}宀�
+ <dict-tag
+ :options="dict.type.sys_user_sex"
+ :value="parseInt(scope.row.sex)"
+ />
+ | {{ scope.row.age }}宀�
</div>
</div>
</template>
@@ -176,37 +177,37 @@
<el-table-column
label="鐤剧梾璇婃柇"
align="center"
- prop="diagnosis"
+ prop="diagnosisname"
min-width="200"
show-overflow-tooltip
/>
<el-table-column
- label="鍖荤枟鏈烘瀯"
+ label="娌荤枟鍖婚櫌"
align="center"
- prop="hospitalName"
+ prop="treatmentHospitalName"
width="150"
/>
<el-table-column
label="璁″垝杞繍鏃堕棿"
align="center"
- prop="transportTime"
+ prop="transportStartTime"
width="160"
/>
<el-table-column
label="璐熻矗鍗忚皟鍛�"
align="center"
- prop="coordinator"
+ prop="contactPerson"
width="100"
/>
<el-table-column
label="杞繍鐘舵��"
align="center"
- prop="status"
+ prop="transitStatus"
width="100"
>
<template slot-scope="scope">
- <el-tag :type="scope.row.status | statusFilter">
- {{ scope.row.statusText }}
+ <el-tag :type="getStatusTagType(scope.row.transitStatus)">
+ {{ getStatusText(scope.row.transitStatus) }}
</el-tag>
</template>
</el-table-column>
@@ -242,7 +243,7 @@
type="text"
icon="el-icon-video-play"
@click="handleStartTransport(scope.row)"
- v-if="scope.row.status === 'pending'"
+ v-if="scope.row.transitStatus === 1"
>寮�濮嬭浆杩�</el-button
>
<el-button
@@ -250,7 +251,7 @@
type="text"
icon="el-icon-check"
@click="handleCompleteTransport(scope.row)"
- v-if="scope.row.status === 'transporting'"
+ v-if="scope.row.transitStatus === 2"
>瀹屾垚杞繍</el-button
>
</template>
@@ -296,7 +297,11 @@
append-to-body
>
<div class="action-confirm">
- <p>纭畾瑕亄{ actionText }}杞繍鍗� "{{ currentTransport.id }}" 鍚楋紵</p>
+ <p>
+ 纭畾瑕亄{ actionText }}杞繍鍗� "{{
+ currentTransport.reportId || currentTransport.id
+ }}" 鍚楋紵
+ </p>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="actionOpen = false">鍙� 娑�</el-button>
@@ -308,17 +313,19 @@
<script>
import {
- listTransport,
- getTransport,
- delTransport,
- updateTransportStatus
-} from "@/api/system/business";
+ transportList,
+ transportAdd,
+ transportEdit,
+ transportDelete,
+ transportInfo
+} from "@/api/businessApi/index";
import TransportDetail from "./transportDetail";
import TransportEdit from "./TransportEdit";
export default {
name: "TransportList",
components: { TransportDetail, TransportEdit },
+ dicts: ["sys_user_sex", "sys_BloodType"],
data() {
return {
// 閬僵灞�
@@ -333,7 +340,7 @@
showSearch: true,
// 鎬绘潯鏁�
total: 0,
- // 杞繍鍗曡〃鏍兼暟鎹�
+ // 杞繍鍗曡〃鏍兼暟鎹� - 鐩存帴浣跨敤鍚庣杩斿洖鐨勬暟鎹粨鏋�
transportList: [],
// 璇︽儏寮规鏄惁鏄剧ず
detailOpen: false,
@@ -358,143 +365,101 @@
pendingTransports: 0,
completedTransports: 0
},
- // 鏌ヨ鍙傛暟
+ // 鏌ヨ鍙傛暟锛堝畬鍏ㄩ�傞厤鍚庣鎺ュ彛锛�
queryParams: {
pageNum: 1,
pageSize: 10,
- transportNo: undefined,
- caseNo: undefined,
- donorName: undefined,
- status: undefined
+ caseNo: undefined, // 妗堜緥缂栧彿
+ patName: undefined, // 鎮h�呭鍚�
+ transitStatus: undefined, // 杞繍鐘舵�侊細1寰呰浆杩� 2杞繍涓� 3杞繍瀹屾垚 4杞繍鍙栨秷 5鏆傚瓨
+ searchValue: undefined, // 鎼滅储鍊�
+ params: {} // 鍏朵粬鍙傛暟瀵硅薄
}
};
- },
- filters: {
- statusFilter(status) {
- const statusMap = {
- pending: "warning",
- transporting: "primary",
- completed: "success",
- cancelled: "danger"
- };
- return statusMap[status];
- }
},
created() {
this.getList();
},
methods: {
- /** 鏌ヨ杞繍鍗曞垪琛� */
- getList() {
+ /** 鏌ヨ杞繍鍗曞垪琛� - 鐩存帴浣跨敤鍚庣鏁版嵁缁撴瀯 */
+ async getList() {
this.loading = true;
- // 妯℃嫙API璋冪敤寤惰繜
- setTimeout(() => {
- // 娴嬭瘯鏁版嵁
- this.transportList = [
- {
- id: "T20241217001",
- caseNo: "DON20241216001",
- donorName: "寮犱笁",
- gender: "鐢�",
- age: 38,
- diagnosis:
- "鑴戝浼ゅ鑷磋剳姝讳骸锛岀粡鎶㈡晳鏃犳晥瀹e竷鑴戞浜°�傚灞炲悓鎰忓櫒瀹樻崘鐚��",
- hospitalName: "闈掑矝闀滄箹鍖婚櫌",
- transportTime: "2024-12-17 14:30:00",
- coordinator: "寮犲尰鐢�",
- createTime: "2024-12-16 09:30:00",
- status: "pending",
- statusText: "寰呭嚭鍙�",
- departureLocation: "闈掑矝甯傜珛鍖婚櫌鎬ヨ瘖绉�",
- destinationHospital: "闈掑矝闀滄箹鍖婚櫌",
- emergencyDoctor: "鐜嬪尰鐢�",
- nurse: "鏉庢姢澹�",
- driver: "鍒樺笀鍌�",
- icuDoctor: "璧靛尰鐢�",
- contacts: [
- { role: "鍗忚皟鍛樼數璇�", phone: "13800138000" },
- { role: "鎬ヨ瘖鍖荤敓鐢佃瘽", phone: "13800138001" },
- { role: "鎶ゅ+鐢佃瘽", phone: "13800138002" },
- { role: "鍙告満鐢佃瘽", phone: "13800138003" },
- { role: "ICU鍖荤敓鐢佃瘽", phone: "13800138004" }
- ],
- remarks: "闇�瑕佸噯澶囧懠鍚告満绛夋�ユ晳璁惧"
- },
- {
- id: "T20241217002",
- caseNo: "DON20241216002",
- donorName: "鏉庡洓",
- gender: "濂�",
- age: 45,
- diagnosis: "鑴戞姝伙紝鑴戝共鍔熻兘涓уけ",
- hospitalName: "闈掑矝澶у闄勫睘鍖婚櫌",
- transportTime: "2024-12-17 16:00:00",
- coordinator: "鏉庡尰鐢�",
- createTime: "2024-12-16 11:20:00",
- status: "transporting",
- statusText: "杞繍涓�",
- departureLocation: "闈掑矝澶у闄勫睘鍖婚櫌ICU",
- destinationHospital: "闈掑矝鍣ㄥ畼绉绘涓績",
- currentLocation: "闈掑矝甯傚崡鍖洪娓腑璺�",
- estimatedTime: "30鍒嗛挓"
- },
- {
- id: "T20241216003",
- caseNo: "DON20241215001",
- donorName: "鐜嬩簲",
- gender: "鐢�",
- age: 52,
- diagnosis: "蹇冭剰楠ゅ仠锛屽鍣ㄥ畼鍔熻兘琛扮",
- hospitalName: "闈掑矝甯傜珛鍖婚櫌",
- transportTime: "2024-12-16 10:15:00",
- coordinator: "鐜嬪尰鐢�",
- createTime: "2024-12-15 14:45:00",
- status: "completed",
- statusText: "宸插畬鎴�",
- departureLocation: "闈掑矝甯傜珛鍖婚櫌蹇冨唴绉�",
- destinationHospital: "闈掑矝鍣ㄥ畼绉绘涓績",
- completedTime: "2024-12-16 12:30:00",
- distance: "15鍏噷",
- duration: "2灏忔椂15鍒嗛挓"
- },
- {
- id: "T20241216004",
- caseNo: "DON20241214001",
- donorName: "璧靛叚",
- gender: "濂�",
- age: 29,
- diagnosis: "鎬ユ�ц倽琛扮",
- hospitalName: "闈掑矝绉戝ぇ鍖婚櫌",
- transportTime: "2024-12-16 08:30:00",
- coordinator: "璧靛尰鐢�",
- createTime: "2024-12-14 16:20:00",
- status: "cancelled",
- statusText: "宸插彇娑�",
- cancelReason: "瀹跺睘涓存椂鏀瑰彉鍐冲畾"
- }
- ];
- // 鏇存柊缁熻鏁版嵁
- this.updateStats();
- this.total = this.transportList.length;
+ try {
+ // 鏋勫缓绗﹀悎鍚庣鎺ュ彛鐨勮姹傚弬鏁� [1,2](@ref)
+ const requestParams = {
+ pageNum: this.queryParams.pageNum,
+ pageSize: this.queryParams.pageSize,
+ caseNo: this.queryParams.caseNo,
+ patName: this.queryParams.patName,
+ transitStatus: this.queryParams.transitStatus,
+ searchValue: this.queryParams.searchValue
+ };
+
+ // 澶勭悊鏃堕棿鑼冨洿鍙傛暟 [5](@ref)
+ if (this.dateRange && this.dateRange.length === 2) {
+ requestParams.transportStartTime = this.dateRange.join(",");
+ }
+
+ // 璋冪敤姝e紡鎺ュ彛 [3](@ref)
+ const response = await transportList(requestParams);
+
+ if (response.code === 200) {
+ // 鐩存帴浣跨敤鍚庣杩斿洖鐨勬暟鎹粨鏋勶紝涓嶈繘琛岃浆鎹� [8](@ref)
+ this.transportList = response.rows || response.data || [];
+ this.total = response.total || 0;
+
+ // 鏇存柊缁熻鏁版嵁
+ this.updateStats();
+ } else {
+ this.$modal.msgError(response.msg || "鑾峰彇杞繍鍗曞垪琛ㄥけ璐�");
+ }
+ } catch (error) {
+ console.error("鑾峰彇杞繍鍗曞垪琛ㄥけ璐�:", error);
+ this.$modal.msgError("缃戠粶璇锋眰澶辫触锛岃绋嶅悗閲嶈瘯");
+ } finally {
this.loading = false;
- }, 500);
+ }
+ },
+
+ /** 鑾峰彇鐘舵�佹爣绛剧被鍨� */
+ getStatusTagType(transitStatus) {
+ const statusMap = {
+ 1: "warning", // 寰呰浆杩�
+ 2: "primary", // 杞繍涓�
+ 3: "success", // 杞繍瀹屾垚
+ 4: "danger", // 杞繍鍙栨秷
+ 5: "info" // 鏆傚瓨
+ };
+ return statusMap[transitStatus] || "info";
+ },
+
+ /** 鑾峰彇鐘舵�佹枃鏈� */
+ getStatusText(transitStatus) {
+ const statusMap = {
+ 1: "寰呰浆杩�",
+ 2: "杞繍涓�",
+ 3: "杞繍瀹屾垚",
+ 4: "杞繍鍙栨秷",
+ 5: "鏆傚瓨"
+ };
+ return statusMap[transitStatus] || "鏈煡鐘舵��";
},
// 鏇存柊缁熻鏁版嵁
updateStats() {
this.stats.totalTransports = this.transportList.length;
this.stats.pendingTransports = this.transportList.filter(
- item => item.status === "pending"
+ item => item.transitStatus === 1
).length;
this.stats.completedTransports = this.transportList.filter(
- item => item.status === "completed"
+ item => item.transitStatus === 3
).length;
},
// 澶氶�夋閫変腑鏁版嵁
handleSelectionChange(selection) {
- this.ids = selection.map(item => item.id);
+ this.ids = selection.map(item => item.reportId || item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
@@ -504,6 +469,28 @@
this.queryParams.pageNum = 1;
this.getList();
},
+
+ /** 閲嶇疆鎸夐挳鎿嶄綔 */
+ resetQuery() {
+ this.dateRange = [];
+ this.queryParams = {
+ pageNum: 1,
+ pageSize: 10,
+ caseNo: undefined,
+ patName: undefined,
+ transitStatus: undefined,
+ searchValue: undefined
+ };
+ this.getList();
+ },
+
+ /** 璇︽儏鎸夐挳鎿嶄綔 */
+ handleDetail(row) {
+ this.currentTransport = row;
+ this.detailTitle = `杞繍鍗曡鎯� - ${row.reportId || row.id}`;
+ this.detailOpen = true;
+ },
+
/** 淇敼鎸夐挳鎿嶄綔 */
handleUpdate(row) {
this.currentTransport = row || {};
@@ -528,22 +515,9 @@
handleSaveSuccess() {
this.getList(); // 閲嶆柊鍔犺浇鍒楄〃
},
- /** 閲嶇疆鎸夐挳鎿嶄綔 */
- resetQuery() {
- this.dateRange = [];
- this.resetForm("queryForm");
- this.handleQuery();
- },
-
- /** 璇︽儏鎸夐挳鎿嶄綔 */
- handleDetail(row) {
- this.currentTransport = row;
- this.detailTitle = `杞繍鍗曡鎯� - ${row.id}`;
- this.detailOpen = true;
- },
/** 寮�濮嬭浆杩愭搷浣� */
- handleStartTransport(row) {
+ async handleStartTransport(row) {
this.currentTransport = row;
this.actionTitle = "寮�濮嬭浆杩�";
this.actionText = "寮�濮�";
@@ -551,59 +525,70 @@
},
/** 瀹屾垚杞繍鎿嶄綔 */
- handleCompleteTransport(row) {
+ async handleCompleteTransport(row) {
this.currentTransport = row;
this.actionTitle = "瀹屾垚杞繍";
this.actionText = "瀹屾垚";
this.actionOpen = true;
},
- /** 纭鎿嶄綔 */
- confirmAction() {
- const index = this.transportList.findIndex(
- item => item.id === this.currentTransport.id
- );
- if (index !== -1) {
+ /** 纭鎿嶄綔 - 浣跨敤鍚庣鍘熷鏁版嵁缁撴瀯 [4](@ref) */
+ async confirmAction() {
+ try {
+ let requestData = {
+ id: this.currentTransport.id || this.currentTransport.reportId
+ };
+
if (this.actionText === "寮�濮�") {
- this.transportList[index].status = "transporting";
- this.transportList[index].statusText = "杞繍涓�";
+ requestData.transitStatus = 2; // 璁剧疆涓鸿浆杩愪腑
} else if (this.actionText === "瀹屾垚") {
- this.transportList[index].status = "completed";
- this.transportList[index].statusText = "宸插畬鎴�";
- this.transportList[index].completedTime = new Date().toLocaleString();
+ requestData.transitStatus = 3; // 璁剧疆涓鸿浆杩愬畬鎴�
}
- // 鏇存柊缁熻鏁版嵁
- this.updateStats();
+ // 鐩存帴浼犻�掑悗绔渶瑕佺殑鍙傛暟 [8](@ref)
+ const response = await transportEdit(requestData);
- this.$modal.msgSuccess(`${this.actionText}鎴愬姛`);
+ if (response.code === 200) {
+ this.$modal.msgSuccess(`${this.actionText}杞繍鎴愬姛`);
+ this.getList(); // 鍒锋柊鍒楄〃
+ } else {
+ this.$modal.msgError(response.msg || `${this.actionText}杞繍澶辫触`);
+ }
+ } catch (error) {
+ console.error(`${this.actionText}杞繍澶辫触:`, error);
+ this.$modal.msgError("鎿嶄綔澶辫触锛岃绋嶅悗閲嶈瘯");
}
this.actionOpen = false;
},
+ /** 鍒犻櫎鎸夐挳鎿嶄綔 - 浣跨敤鍚庣鍘熷ID [1](@ref) */
+ async handleDelete(row) {
+ const ids = row.reportId || row.id || this.ids;
+ try {
+ await this.$modal.confirm(
+ '鏄惁纭鍒犻櫎杞繍鍗曠紪鍙蜂负"' + ids + '"鐨勬暟鎹」锛�'
+ );
+ const response = await transportDelete(ids);
-
- /** 鍒犻櫎鎸夐挳鎿嶄綔 */
- handleDelete(row) {
- const ids = row.id || this.ids;
- this.$modal
- .confirm('鏄惁纭鍒犻櫎杞繍鍗曠紪鍙蜂负"' + ids + '"鐨勬暟鎹」锛�')
- .then(() => {
- // 妯℃嫙鍒犻櫎鎿嶄綔
- this.transportList = this.transportList.filter(
- item => !ids.includes(item.id)
- );
- this.total = this.transportList.length;
- this.updateStats();
+ if (response.code === 200) {
this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
- })
- .catch(() => {});
+ this.getList(); // 鍒锋柊鍒楄〃
+ } else {
+ this.$modal.msgError(response.msg || "鍒犻櫎澶辫触");
+ }
+ } catch (error) {
+ if (error !== "cancel") {
+ console.error("鍒犻櫎澶辫触:", error);
+ this.$modal.msgError("鍒犻櫎澶辫触锛岃绋嶅悗閲嶈瘯");
+ }
+ }
},
/** 瀵煎嚭鎸夐挳鎿嶄綔 */
handleExport() {
+ // 鐩存帴浣跨敤鍚庣鍙傛暟缁撴瀯杩涜瀵煎嚭 [5](@ref)
this.download(
"system/transport/export",
{
@@ -675,7 +660,9 @@
}
.donor-info {
- text-align: left;
+ text-align: center;
+ display: flex;
+ justify-content: center
}
.donor-name {
@@ -684,8 +671,10 @@
}
.donor-details {
- font-size: 12px;
- color: #909399;
+ margin-left: 5px;
+ font-size: 16px;
+ color: #093ca4;
+ display: flex;
}
.mb8 {
--
Gitblit v1.9.3