From 475a352a4bfd7ac3a81e8c7c92d3bb64e2e01037 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期五, 27 二月 2026 15:48:37 +0800
Subject: [PATCH] 青岛维护提交
---
src/views/project/DonationProcess/index.vue | 476 +++++++++++++++++++++++++++++++----------------------------
1 files changed, 248 insertions(+), 228 deletions(-)
diff --git a/src/views/project/DonationProcess/index.vue b/src/views/project/DonationProcess/index.vue
index 2e0fbd2..451ca73 100644
--- a/src/views/project/DonationProcess/index.vue
+++ b/src/views/project/DonationProcess/index.vue
@@ -40,6 +40,41 @@
<el-option label="宸茬粓姝�" value="99" />
</el-select>
</el-form-item>
+
+ <!-- 鏂板鎼滅储瀛楁 -->
+ <el-form-item label="涓婃姤鏃堕棿" prop="reportTimeRange">
+ <el-date-picker
+ v-model="queryParams.reportTimeRange"
+ type="daterange"
+ range-separator="鑷�"
+ start-placeholder="寮�濮嬫棩鏈�"
+ end-placeholder="缁撴潫鏃ユ湡"
+ value-format="yyyy-MM-dd"
+ size="small"
+ style="width: 240px;"
+ />
+ </el-form-item>
+
+ <el-form-item label="棣栬瘖鍖婚櫌" prop="treatmenthospitalname">
+ <el-input
+ v-model="queryParams.treatmenthospitalname"
+ placeholder="璇疯緭鍏ラ璇婂尰闄�"
+ clearable
+ size="small"
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+
+ <el-form-item label="浣忛櫌鍙�" prop="hospitalNo">
+ <el-input
+ v-model="queryParams.hospitalNo"
+ placeholder="璇疯緭鍏ヤ綇闄㈠彿"
+ clearable
+ size="small"
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+
<el-form-item>
<el-button
type="primary"
@@ -108,25 +143,25 @@
v-loading="loading"
:data="donatebaseinfoList"
border
- :default-sort="{ prop: 'donatetime', order: 'descending' }"
+ :default-sort="{ prop: 'reporttime', order: 'descending' }"
style="width: 100%; margin-top: 20px;"
>
<el-table-column
label="涓婃姤鏃堕棿"
align="center"
- prop="donatetime"
+ prop="reporttime"
width="110"
fixed="left"
>
<template slot-scope="scope">
- <span>{{ parseTime(scope.row.donatetime, "{y}-{m}-{d}") }}</span>
+ <span>{{ parseTime(scope.row.reporttime, "{y}-{m}-{d}") }}</span>
</template>
</el-table-column>
<el-table-column
- label="杩涘害"
+ label="鎹愮尞鐘舵��"
align="center"
- prop="coreteamassessconclusion"
+ prop="recordstate"
width="100"
fixed="left"
>
@@ -141,115 +176,94 @@
<el-table-column label="鎬у埆" align="center" prop="sex" width="80">
<template slot-scope="scope">
- <span>{{ scope.row.sex === 1 ? "鐢�" : "濂�" }}</span>
+ <span>{{ scope.row.sex === "1" ? "鐢�" : "濂�" }}</span>
</template>
</el-table-column>
<el-table-column label="骞撮緞" align="center" prop="age" width="80" />
+ <el-table-column label="琛�鍨�" align="center" prop="bloodtype" width="80">
+ <template slot-scope="scope">
+ <dict-tag
+ :options="dict.type.sys_BloodType"
+ :value="scope.row.bloodtype"
+ />
+ </template>
+ </el-table-column>
<el-table-column
- label="璇佷欢鍙风爜"
+ label="浼犳煋鐥�"
align="center"
- prop="idcardno"
+ prop="infectious"
width="180"
+ />
+
+ <el-table-column
+ label="棣栬瘖鍖婚櫌"
+ align="center"
+ prop="treatmenthospitalname"
+ width="150"
/>
<el-table-column
label="鍗忚皟鍛�"
align="center"
- prop="reportername"
+ prop="coordinatorName"
width="100"
/>
-
<el-table-column
- label="杞负妗堜緥鏃堕棿"
+ label="浣忛櫌鍙�"
align="center"
- prop="donatetime"
- width="110"
- >
- <template slot-scope="scope">
- <span>{{ parseTime(scope.row.donatetime, "{y}-{m}-{d}") }}</span>
- </template>
- </el-table-column>
+ prop="hospitalNo"
+ width="120"
+ />
<!-- 绗竴娆″尰瀛﹁瘎浼� -->
<el-table-column
- label="绗竴娆¤瘎浼扮粨璁�"
+ label="璇勪及鐘舵��"
align="center"
- prop="coreteamassessconclusion"
+ prop="assessState"
width="120"
>
<template slot-scope="scope">
<dict-tag
:options="dict.type.sys_BaseAssessConclusion"
- :value="scope.row.coreteamassessconclusion"
+ :value="scope.row.assessState"
/>
</template>
</el-table-column>
<el-table-column
- label="绗竴娆¤瘎浼版椂闂�"
+ label="璇勪及鏃堕棿"
align="center"
- prop="coreteamassesstime"
+ prop="assessTime"
width="110"
>
- <template slot-scope="scope">
- <span>{{
- parseTime(scope.row.coreteamassesstime, "{y}-{m}-{d}")
- }}</span>
- </template>
+ <!-- <template slot-scope="scope">
+ <span>{{ parseTime(scope.row.assessTime, "{y}-{m}-{d}") }}</span>
+ </template> -->
</el-table-column>
-
- <!-- 绗簩娆″尰瀛﹁瘎浼� -->
- <el-table-column
- label="绗簩娆¤瘎浼扮粨璁�"
- align="center"
- prop="coreteamassessconclusion"
- width="120"
- >
- <template slot-scope="scope">
- <dict-tag
- :options="dict.type.sys_BaseAssessConclusion"
- :value="scope.row.coreteamassessconclusion"
- />
- </template>
- </el-table-column>
-
- <el-table-column
- label="绗簩娆¤瘎浼版椂闂�"
- align="center"
- prop="coreteamassesstime"
- width="110"
- >
- <template slot-scope="scope">
- <span>{{
- parseTime(scope.row.coreteamassesstime, "{y}-{m}-{d}")
- }}</span>
- </template>
- </el-table-column>
-
<el-table-column
label="浜插睘纭鏃堕棿"
align="center"
- prop="signdate"
+ prop="signDate"
width="110"
>
- <template slot-scope="scope">
- <span>{{ parseTime(scope.row.signdate, "{y}-{m}-{d}") }}</span>
- </template>
+ <!-- <template slot-scope="scope">
+ <span>{{ parseTime(scope.row.signDate, "{y}-{m}-{d}") }}</span>
+ </template> -->
</el-table-column>
<el-table-column
label="浼︾悊瀹℃煡缁撹"
align="center"
- prop="expertconclusion"
+ prop="expertConclusion"
width="120"
>
<template slot-scope="scope">
<dict-tag
:options="dict.type.sys_EthicalReview"
- :value="scope.row.expertconclusion"
+ :value="scope.row.expertConclusion"
/>
</template>
</el-table-column>
@@ -257,30 +271,30 @@
<el-table-column
label="浼︾悊瀹℃煡鏃堕棿"
align="center"
- prop="conclusiontime"
+ prop="expertTime"
width="110"
>
<template slot-scope="scope">
- <span>{{ parseTime(scope.row.conclusiontime, "{y}-{m}-{d}") }}</span>
+ <span>{{ parseTime(scope.row.expertTime, "{y}-{m}-{d}") }}</span>
</template>
</el-table-column>
<el-table-column
label="鍣ㄥ畼鍒嗛厤鏁伴噺"
align="center"
- prop="organcount"
+ prop="organCount"
width="100"
/>
<el-table-column
label="鑾峰彇瑙佽瘉鏃堕棿"
align="center"
- prop="operationbegtime"
+ prop="operationBegTime"
width="110"
>
<template slot-scope="scope">
<span>{{
- parseTime(scope.row.operationbegtime, "{y}-{m}-{d}")
+ parseTime(scope.row.operationBegTime, "{y}-{m}-{d}")
}}</span>
</template>
</el-table-column>
@@ -288,26 +302,26 @@
<el-table-column
label="瀹屾垚鐧昏鏃堕棿"
align="center"
- prop="completetime"
+ prop="completeTime"
width="110"
>
<template slot-scope="scope">
- <span>{{ parseTime(scope.row.completetime, "{y}-{m}-{d}") }}</span>
+ <span>{{ parseTime(scope.row.completeTime, "{y}-{m}-{d}") }}</span>
</template>
</el-table-column>
+ <!-- 鎹愮尞杩涘害鍒� -->
<el-table-column
label="鎹愮尞杩涘害"
align="center"
- prop="workflow"
+ prop="recordstate"
width="120"
- fixed="right"
>
<template slot-scope="scope">
- <div v-if="!scope.row.terminationCase">
+ <div v-if="scope.row.terminationCase == 0">
<dict-tag
:options="dict.type.sys_donornode"
- :value="scope.row.workflow"
+ :value="scope.row.recordstate"
/>
</div>
<div v-else>
@@ -316,23 +330,32 @@
</template>
</el-table-column>
- <!-- <el-table-column label="鎿嶄綔" align="center" width="120" fixed="right">
+ <!-- 鎿嶄綔鍒楋細鍙繚鐣欑粓姝㈠拰鏌ョ湅璇︽儏 -->
+ <el-table-column label="鎿嶄綔" align="center" width="200" fixed="right">
<template slot-scope="scope">
+ <el-button size="mini" type="text" @click="handleDetail(scope.row)"
+ >鏌ョ湅璇︽儏</el-button
+ >
<el-button
size="mini"
type="text"
- icon="el-icon-view"
- @click="handleDetail(scope.row)"
- >璇︽儏</el-button>
+ style="color: #f56c6c;"
+ @click="handleTerminate(scope.row)"
+ v-if="
+ scope.row.terminationCase === 0 && scope.row.recordstate !== '99'
+ "
+ >缁堟</el-button
+ >
<el-button
- v-if="scope.row.recordstate == 0"
size="mini"
type="text"
- icon="el-icon-check"
- @click="handleApprove(scope.row)"
- >瀹℃牳</el-button>
+ style="color: #67c23a;"
+ @click="handleRestore(scope.row)"
+ v-if="scope.row.terminationCase === 1"
+ >鎭㈠</el-button
+ >
</template>
- </el-table-column> -->
+ </el-table-column>
</el-table>
<pagination
@@ -345,7 +368,7 @@
<!-- 璇︽儏寮规 -->
<el-dialog
- :title="`鎹愮尞鑰呰鎯� - ${currentRecord.name}`"
+ :title="`鎹愮尞鑰呰鎯� - ${currentRecord.name || ''}`"
:visible.sync="detailVisible"
width="1000px"
append-to-body
@@ -353,47 +376,29 @@
<donor-detail :donorData="currentRecord" @close="detailVisible = false" />
</el-dialog>
- <!-- 瀹℃牳寮规 -->
- <el-dialog
- title="鎹愮尞鑰呭鏍�"
- :visible.sync="approveVisible"
- width="500px"
- append-to-body
- >
- <el-form ref="approveForm" :model="approveForm" label-width="100px">
- <el-form-item label="瀹℃牳缁撴灉">
- <el-radio-group v-model="approveForm.approveResult">
- <el-radio label="1">閫氳繃</el-radio>
- <el-radio label="2">椹冲洖</el-radio>
- </el-radio-group>
- </el-form-item>
- <el-form-item label="瀹℃牳鎰忚">
- <el-input
- type="textarea"
- v-model="approveForm.approveOpinion"
- placeholder="璇疯緭鍏ュ鏍告剰瑙�"
- :rows="4"
- />
- </el-form-item>
- </el-form>
- <div slot="footer">
- <el-button @click="approveVisible = false">鍙栨秷</el-button>
- <el-button type="primary" @click="submitApprove">纭畾</el-button>
- </div>
- </el-dialog>
+ <!-- 缁堟/鎭㈠寮规缁勪欢 -->
+ <terminate-restore-modal
+ :current-record="currentRecord"
+ :visible="modalVisible"
+ :titles="modalTitles"
+ @update:visible="handleModalVisibleChange"
+ @operation-success="handleOperationSuccess"
+ />
</div>
</template>
<script>
-// 瀵煎叆妯℃嫙鏁版嵁鐢熸垚宸ュ叿
-import Mock from "mockjs";
+import { courselist, terminateDonor } from "@/api/businessApi";
+import TerminateRestoreModal from "@/components/TerminateRestoreModal";
export default {
name: "Donatebaseinfo",
- dicts: ["sys_donornode", "sys_EthicalReview", "sys_BaseAssessConclusion"],
+ components: {
+ TerminateRestoreModal
+ },
+ dicts: ["sys_donornode",'sys_BloodType', "sys_EthicalReview", "sys_BaseAssessConclusion"],
data() {
return {
- // 閬僵灞�
loading: false,
// 鏄剧ず鎼滅储鏉′欢
showSearch: true,
@@ -403,8 +408,6 @@
donatebaseinfoList: [],
// 璇︽儏寮规鏄剧ず
detailVisible: false,
- // 瀹℃牳寮规鏄剧ず
- approveVisible: false,
// 褰撳墠鎿嶄綔璁板綍
currentRecord: {},
// 缁熻鏁版嵁
@@ -420,12 +423,21 @@
pageSize: 10,
name: undefined,
idcardno: undefined,
- recordstate: undefined
+ recordstate: undefined,
+ // 鏂板鐨勬悳绱㈠瓧娈�
+ reportTimeRange: [],
+ treatmenthospitalname: undefined,
+ hospitalNo: undefined
},
- // 瀹℃牳琛ㄥ崟
- approveForm: {
- approveResult: "1",
- approveOpinion: ""
+ // 寮规鏄剧ず鐘舵��
+ modalVisible: {
+ terminate: false,
+ restore: false
+ },
+ // 寮规鏍囬
+ modalTitles: {
+ terminate: "缁堟鎹愮尞杩涚▼",
+ restore: "鎭㈠鎹愮尞杩涚▼"
}
};
},
@@ -433,96 +445,105 @@
this.getList();
},
methods: {
- /** 鐢熸垚妯℃嫙鏁版嵁 */
- generateMockData() {
- const mockTemplate = {
- "list|15-30": [
- {
- "id|+1": 1001,
- name: "@cname",
- "sex|1": [1, 2], // 1:鐢�, 2:濂�
- "age|18-65": 1,
- idcardno: /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dX]$/,
- reportername: "@cname",
- treatmenthospitalname: "@ctitle(3, 5)鍖婚櫌",
- donatetime: '@datetime("yyyy-MM-dd HH:mm:ss")',
- "coreteamassessconclusion|1": ["1", "2", "3"], // 璇勪及缁撹
- coreteamassesstime: '@datetime("yyyy-MM-dd HH:mm:ss")',
- signdate: '@datetime("yyyy-MM-dd HH:mm:ss")',
- "expertconclusion|1": ["1", "2", "3"], // 浼︾悊瀹℃煡缁撹
- conclusiontime: '@datetime("yyyy-MM-dd HH:mm:ss")',
- "organcount|0-5": 1,
- operationbegtime: '@datetime("yyyy-MM-dd HH:mm:ss")',
- completetime: '@datetime("yyyy-MM-dd HH:mm:ss")',
- "workflow|1": ["1", "2", "3", "4", "5"], // 宸ヤ綔娴佺姸鎬�
- "recordstate|1": ["0", "1", "99"], // 0:寰呭鏍�, 1:宸插鏍�, 99:宸茬粓姝�
- "terminationCase|1": [true, false]
- }
- ]
- };
-
- return Mock.mock(mockTemplate).list;
- },
-
/** 鏌ヨ鎹愮尞鍩虹鍒楄〃 */
- getList() {
+ /** 鏌ヨ鎹愮尞鍩虹鍒楄〃 */
+ async getList() {
this.loading = true;
+ try {
+ const response = await courselist(this.queryParams);
- // 妯℃嫙API璋冪敤寤惰繜
- setTimeout(() => {
- // 鐢熸垚妯℃嫙鏁版嵁
- const mockData = this.generateMockData();
+ let realData = [];
+ realData = response.data.donatebaseinfoProgressDTOS;
+ this.total = response.total;
+ this.stats.pendingCount = response.data.terminationCase[0];
+ this.stats.approvedCount = response.data.terminationCase[1];
+ this.stats.terminatedCount = response.data.terminationCase[2];
+ this.stats.totalCount =
+ response.total - response.data.terminationCase[2];
- // 搴旂敤绛涢�夋潯浠�
- let filteredData = mockData;
- if (this.queryParams.name) {
- filteredData = filteredData.filter(item =>
- item.name.includes(this.queryParams.name)
- );
+ this.allTableData = realData;
+ let filteredData = this.applyFrontendFilter(realData);
+
+ if (!response.total && !response.data) {
+ const startIndex =
+ (this.queryParams.pageNum - 1) * this.queryParams.pageSize;
+ const endIndex = startIndex + this.queryParams.pageSize;
+ this.donatebaseinfoList = filteredData.slice(startIndex, endIndex);
+ this.total = filteredData.length;
+ } else {
+ this.donatebaseinfoList = filteredData;
}
- if (this.queryParams.idcardno) {
- filteredData = filteredData.filter(item =>
- item.idcardno.includes(this.queryParams.idcardno)
- );
- }
- if (this.queryParams.recordstate) {
- filteredData = filteredData.filter(
- item => item.recordstate === this.queryParams.recordstate
- );
- }
-
- // 鍒嗛〉澶勭悊
- const startIndex =
- (this.queryParams.pageNum - 1) * this.queryParams.pageSize;
- const endIndex = startIndex + this.queryParams.pageSize;
- this.donatebaseinfoList = filteredData.slice(startIndex, endIndex);
- this.total = filteredData.length;
-
- // 鏇存柊缁熻鏁版嵁
- this.updateStats(mockData);
+ } catch (error) {
+ console.error("鑾峰彇鏁版嵁澶辫触:", error);
+ this.$message.error("鏁版嵁鍔犺浇澶辫触");
+ this.donatebaseinfoList = [];
+ this.total = 0;
+ } finally {
this.loading = false;
- }, 500);
+ }
},
- /** 鏇存柊缁熻鏁版嵁 */
- updateStats(data) {
- this.stats.totalCount = data.length;
- this.stats.pendingCount = data.filter(
- item => item.recordstate === "0"
- ).length;
- this.stats.approvedCount = data.filter(
- item => item.recordstate === "1"
- ).length;
- this.stats.terminatedCount = data.filter(
- item => item.recordstate === "99"
- ).length;
+ /** 搴旂敤鍓嶇绛涢�� */
+ applyFrontendFilter(data) {
+ let filteredData = data;
+
+ if (this.queryParams.name) {
+ filteredData = filteredData.filter(
+ item => item.name && item.name.includes(this.queryParams.name)
+ );
+ }
+
+ if (this.queryParams.idcardno) {
+ filteredData = filteredData.filter(
+ item =>
+ item.idcardno && item.idcardno.includes(this.queryParams.idcardno)
+ );
+ }
+
+ if (this.queryParams.recordstate) {
+ filteredData = filteredData.filter(
+ item => item.recordstate === this.queryParams.recordstate
+ );
+ }
+
+ if (this.queryParams.treatmenthospitalname) {
+ filteredData = filteredData.filter(
+ item =>
+ item.treatmenthospitalname &&
+ item.treatmenthospitalname.includes(
+ this.queryParams.treatmenthospitalname
+ )
+ );
+ }
+
+ if (this.queryParams.hospitalNo) {
+ filteredData = filteredData.filter(
+ item =>
+ item.hospitalNo &&
+ item.hospitalNo.includes(this.queryParams.hospitalNo)
+ );
+ }
+
+ if (
+ this.queryParams.reportTimeRange &&
+ this.queryParams.reportTimeRange.length === 2
+ ) {
+ const [startTime, endTime] = this.queryParams.reportTimeRange;
+ filteredData = filteredData.filter(item => {
+ if (!item.reporttime) return false;
+ const reportDate = this.parseTime(item.reporttime, "{y}-{m}-{d}");
+ return reportDate >= startTime && reportDate <= endTime;
+ });
+ }
+
+ return filteredData;
},
/** 鑾峰彇鐘舵�佹爣绛炬牱寮� */
getStatusTag(status) {
const statusMap = {
- "0": "warning", // 寰呭鏍�
- "1": "success", // 宸插鏍�
+ "0": "warning", // 缁存姢涓�
+ "1": "success", // 宸插畬鎴�
"99": "danger" // 宸茬粓姝�
};
return statusMap[status] || "info";
@@ -542,6 +563,8 @@
parseTime(time, format) {
if (!time) return "-";
const date = new Date(time);
+ if (isNaN(date.getTime())) return time;
+
const year = date.getFullYear();
const month = (date.getMonth() + 1).toString().padStart(2, "0");
const day = date
@@ -563,13 +586,8 @@
/** 閲嶇疆鎸夐挳鎿嶄綔 */
resetQuery() {
- this.queryParams = {
- pageNum: 1,
- pageSize: 10,
- name: undefined,
- idcardno: undefined,
- recordstate: undefined
- };
+ this.$refs.queryForm.resetFields();
+ this.queryParams.pageNum = 1;
this.getList();
},
@@ -579,30 +597,27 @@
this.detailVisible = true;
},
- /** 瀹℃牳鎿嶄綔 */
- handleApprove(row) {
+ /** 缁堟鎿嶄綔 */
+ handleTerminate(row) {
this.currentRecord = { ...row };
- this.approveForm = {
- approveResult: "1",
- approveOpinion: ""
- };
- this.approveVisible = true;
+ this.modalVisible = { ...this.modalVisible, terminate: true };
},
- /** 鎻愪氦瀹℃牳 */
- submitApprove() {
- // 妯℃嫙瀹℃牳鎻愪氦
- const index = this.donatebaseinfoList.findIndex(
- item => item.id === this.currentRecord.id
- );
- if (index !== -1) {
- this.donatebaseinfoList[
- index
- ].recordstate = this.approveForm.approveResult;
- this.$message.success("瀹℃牳鎴愬姛");
- this.approveVisible = false;
- this.getList(); // 閲嶆柊鍔犺浇鏇存柊缁熻
- }
+ /** 鎭㈠鎿嶄綔 */
+ handleRestore(row) {
+ this.currentRecord = { ...row };
+ this.modalVisible = { ...this.modalVisible, restore: true };
+ },
+
+ /** 澶勭悊寮规鏄剧ず鐘舵�佸彉鍖� */
+ handleModalVisibleChange(newVisible) {
+ this.modalVisible = { ...newVisible };
+ },
+
+ /** 澶勭悊鎿嶄綔鎴愬姛 */
+ handleOperationSuccess({ type, record }) {
+ console.log(`${type}鎿嶄綔鎴愬姛:`, record);
+ this.getList(); // 閲嶆柊鍔犺浇鏁版嵁
}
}
};
@@ -678,4 +693,9 @@
background-color: #f5f7fa;
font-weight: bold;
}
+
+/* 鎿嶄綔鎸夐挳鏍峰紡 */
+::v-deep .el-button--text {
+ padding: 4px 8px;
+}
</style>
--
Gitblit v1.9.3