From 2431480f5859ef40dfdf0eb19e1ba6ddebbd9ef2 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期一, 29 十二月 2025 20:06:22 +0800
Subject: [PATCH] 项目页面优化
---
src/views/project/DonationProcess/index.vue | 1378 ++++++++++++++++++-----------------------------------------
1 files changed, 424 insertions(+), 954 deletions(-)
diff --git a/src/views/project/DonationProcess/index.vue b/src/views/project/DonationProcess/index.vue
index abb89b3..516cc50 100644
--- a/src/views/project/DonationProcess/index.vue
+++ b/src/views/project/DonationProcess/index.vue
@@ -1,99 +1,143 @@
<template>
<div class="app-container">
- <el-form
- :model="queryParams"
- ref="queryForm"
- :inline="true"
- v-show="showSearch"
- label-width="70px"
- >
- <el-form-item label="濮撳悕" prop="name">
- <el-input
- v-model="queryParams.name"
- placeholder="璇疯緭鍏ュ鍚�"
- clearable
- size="small"
- @keyup.enter.native="handleQuery"
- />
- </el-form-item>
+ <!-- 鎼滅储绛涢�夊尯鍩� -->
+ <el-card class="filter-card">
+ <el-form
+ :model="queryParams"
+ ref="queryForm"
+ :inline="true"
+ v-show="showSearch"
+ label-width="70px"
+ >
+ <el-form-item label="濮撳悕" prop="name">
+ <el-input
+ v-model="queryParams.name"
+ placeholder="璇疯緭鍏ュ鍚�"
+ clearable
+ size="small"
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+ <el-form-item label="璇佷欢鍙风爜" prop="idcardno">
+ <el-input
+ v-model="queryParams.idcardno"
+ placeholder="璇疯緭鍏ヨ瘉浠跺彿鐮�"
+ clearable
+ size="small"
+ @keyup.enter.native="handleQuery"
+ />
+ </el-form-item>
+ <el-form-item label="鐘舵��" prop="recordstate">
+ <el-select v-model="queryParams.recordstate" placeholder="璇烽�夋嫨鐘舵��" clearable size="small">
+ <el-option label="鍏ㄩ儴" value="" />
+ <el-option label="寰呭鏍�" value="0" />
+ <el-option label="宸插鏍�" value="1" />
+ <el-option label="宸茬粓姝�" value="99" />
+ </el-select>
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"
+ >鎼滅储</el-button
+ >
+ <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+ </el-form-item>
+ </el-form>
+ </el-card>
- <el-form-item>
- <el-button
- type="primary"
- icon="el-icon-search"
- size="mini"
- @click="handleQuery"
- >鎼滅储</el-button
- >
- </el-form-item>
- </el-form>
+ <!-- 缁熻鍗$墖 -->
+ <el-row :gutter="20" class="stats-row">
+ <el-col :span="6">
+ <el-card class="stats-card total" shadow="hover">
+ <div class="stat-content">
+ <div class="stat-icon">馃搳</div>
+ <div class="stat-info">
+ <div class="stat-count">{{ stats.totalCount }}</div>
+ <div class="stat-label">鎬绘崘鐚��</div>
+ </div>
+ </div>
+ </el-card>
+ </el-col>
+ <el-col :span="6">
+ <el-card class="stats-card pending" shadow="hover">
+ <div class="stat-content">
+ <div class="stat-icon">鈴�</div>
+ <div class="stat-info">
+ <div class="stat-count">{{ stats.pendingCount }}</div>
+ <div class="stat-label">寰呭鏍�</div>
+ </div>
+ </div>
+ </el-card>
+ </el-col>
+ <el-col :span="6">
+ <el-card class="stats-card approved" shadow="hover">
+ <div class="stat-content">
+ <div class="stat-icon">鉁�</div>
+ <div class="stat-info">
+ <div class="stat-count">{{ stats.approvedCount }}</div>
+ <div class="stat-label">宸插鏍�</div>
+ </div>
+ </div>
+ </el-card>
+ </el-col>
+ <el-col :span="6">
+ <el-card class="stats-card terminated" shadow="hover">
+ <div class="stat-content">
+ <div class="stat-icon">鉂�</div>
+ <div class="stat-info">
+ <div class="stat-count">{{ stats.terminatedCount }}</div>
+ <div class="stat-label">宸茬粓姝�</div>
+ </div>
+ </div>
+ </el-card>
+ </el-col>
+ </el-row>
- <!-- <el-col :span="1.5">
- <el-button
- type="success"
- plain
- icon="el-icon-edit"
- size="mini"
- :disabled="single"
- @click="handleUpdate"
- v-hasPermi="['project:donatebaseinfo:edit']"
- >淇敼</el-button
- >
- </el-col> -->
-
+ <!-- 鏁版嵁琛ㄦ牸 -->
<el-table
v-loading="loading"
:data="donatebaseinfoList"
- @selection-change="handleSelectionChange"
border
:default-sort="{ prop: 'donatetime', order: 'descending' }"
+ style="width: 100%; margin-top: 20px;"
>
- <!-- <el-table-column label="鎶ュ憡鏃堕棿" align="center" prop="id" /> -->
- <!-- <el-table-column type="selection" width="55" align="center" /> -->
- <el-table-column
- label="妗堜緥鏃堕棿"
- align="center"
- prop="donatetime"
- width="100"
- >
+ <el-table-column label="涓婃姤鏃堕棿" align="center" prop="donatetime" width="110" fixed="left">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.donatetime, "{y}-{m}-{d}") }}</span>
</template>
</el-table-column>
- <el-table-column label="濮撳悕" align="center" prop="name" width="100" />
- <el-table-column
- label="璇佷欢鍙风爜"
- align="center"
- prop="idcardno"
- width="200"
- />
-
- <el-table-column label="閮ㄩ棬鍚嶇О" align="center" prop="deptname" />
-
- <el-table-column
- label="鎶ュ憡浜�"
- align="center"
- prop="reportername"
- width="100"
- />
- <el-table-column
- label="鎶ュ憡鏃堕棿"
- align="center"
- prop="reporttime"
- width="100"
- >
+ <el-table-column label="杩涘害" align="center" prop="coreteamassessconclusion" width="100" fixed="left">
<template slot-scope="scope">
- <span>{{ parseTime(scope.row.reporttime, "{y}-{m}-{d}") }}</span>
+ <el-tag :type="getStatusTag(scope.row.recordstate)">
+ {{ getStatusText(scope.row.recordstate) }}
+ </el-tag>
</template>
</el-table-column>
- <el-table-column
- label="鍖诲璇勪及缁撹"
- align="center"
- prop="coreteamassessconclusion"
- width="100"
- >
+ <el-table-column label="濮撳悕" align="center" prop="name" width="100" />
+
+ <el-table-column label="鎬у埆" align="center" prop="sex" width="80">
+ <template slot-scope="scope">
+ <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="idcardno" width="180" />
+
+ <el-table-column label="鍗忚皟鍛�" align="center" prop="reportername" width="100" />
+
+ <el-table-column label="娌荤枟鍖婚櫌" align="center" prop="treatmenthospitalname" width="150" show-overflow-tooltip />
+
+ <el-table-column label="杞负妗堜緥鏃堕棿" align="center" prop="donatetime" width="110">
+ <template slot-scope="scope">
+ <span>{{ parseTime(scope.row.donatetime, "{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"
@@ -101,34 +145,36 @@
/>
</template>
</el-table-column>
- <el-table-column
- label="鍖诲璇勪及鏃堕棿"
- align="center"
- prop="coreteamassesstime"
- width="100"
- >
+
+ <el-table-column label="绗竴娆¤瘎浼版椂闂�" align="center" prop="coreteamassesstime" width="110">
<template slot-scope="scope">
- <span>{{
- parseTime(scope.row.coreteamassesstime, "{y}-{m}-{d}")
- }}</span>
+ <span>{{ parseTime(scope.row.coreteamassesstime, "{y}-{m}-{d}") }}</span>
</template>
</el-table-column>
- <el-table-column
- label="浜插睘纭鏃堕棿"
- align="center"
- prop="signdate"
- width="100"
- >
+
+ <!-- 绗簩娆″尰瀛﹁瘎浼� -->
+ <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" width="110">
<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"
- width="100"
- >
+
+ <el-table-column label="浼︾悊瀹℃煡缁撹" align="center" prop="expertconclusion" width="120">
<template slot-scope="scope">
<dict-tag
:options="dict.type.sys_EthicalReview"
@@ -136,50 +182,28 @@
/>
</template>
</el-table-column>
- <el-table-column
- label="浼︾悊瀹℃煡鏃堕棿"
- align="center"
- prop="conclusiontime"
- width="100"
- >
+
+ <el-table-column label="浼︾悊瀹℃煡鏃堕棿" align="center" prop="conclusiontime" width="110">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.conclusiontime, "{y}-{m}-{d}") }}</span>
</template>
</el-table-column>
- <el-table-column
- label="鍣ㄥ畼鍒嗛厤鏁伴噺"
- align="center"
- prop="organcount"
- width="100"
- />
- <el-table-column
- label="鑾峰彇瑙佽瘉鏃堕棿"
- align="center"
- prop="operationbegtime"
- width="100"
- >
+
+ <el-table-column label="鍣ㄥ畼鍒嗛厤鏁伴噺" align="center" prop="organcount" width="100" />
+
+ <el-table-column label="鑾峰彇瑙佽瘉鏃堕棿" align="center" prop="operationbegtime" width="110">
<template slot-scope="scope">
- <span>{{
- parseTime(scope.row.operationbegtime, "{y}-{m}-{d}")
- }}</span>
+ <span>{{ parseTime(scope.row.operationbegtime, "{y}-{m}-{d}") }}</span>
</template>
</el-table-column>
- <el-table-column
- label="瀹屾垚鐧昏鏃堕棿"
- align="center"
- prop="completetime"
- width="100"
- >
+
+ <el-table-column label="瀹屾垚鐧昏鏃堕棿" align="center" prop="completetime" width="110">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.completetime, "{y}-{m}-{d}") }}</span>
</template>
</el-table-column>
- <el-table-column
- label="鎹愮尞杩涘害"
- align="center"
- prop="workflow"
- width="120"
- >
+
+ <el-table-column label="鎹愮尞杩涘害" align="center" prop="workflow" width="120" fixed="right">
<template slot-scope="scope">
<div v-if="!scope.row.terminationCase">
<dict-tag
@@ -187,45 +211,31 @@
:value="scope.row.workflow"
/>
</div>
- <div v-else>浠诲姟缁堟</div>
+ <div v-else>
+ <el-tag type="danger">浠诲姟缁堟</el-tag>
+ </div>
</template>
</el-table-column>
- <!-- <el-table-column
- label="鎿嶄綔"
- align="center"
- class-name="small-padding fixed-width"
- fixed="right"
- >
+
+ <!-- <el-table-column label="鎿嶄綔" align="center" width="120" fixed="right">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
- icon="el-icon-edit"
- @click="handleUpdate(scope.row)"
- v-hasPermi="['project:donatebaseinfo:edit']"
- >璇︽儏</el-button
- >
+ icon="el-icon-view"
+ @click="handleDetail(scope.row)"
+ >璇︽儏</el-button>
<el-button
v-if="scope.row.recordstate == 0"
size="mini"
type="text"
- icon="el-icon-delete"
- @click="handleDelete(scope.row)"
- v-hasPermi="['project:donatebaseinfo:remove']"
- >鍒犻櫎</el-button
- >
-
- <el-button
- size="mini"
- type="text"
- icon="el-icon-refrigerator"
- @click="handledownload(scope.row)"
- >涓嬭浇</el-button
- >
-
+ icon="el-icon-check"
+ @click="handleApprove(scope.row)"
+ >瀹℃牳</el-button>
</template>
</el-table-column> -->
</el-table>
+
<pagination
v-show="total > 0"
:total="total"
@@ -233,864 +243,324 @@
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
+
+ <!-- 璇︽儏寮规 -->
+ <el-dialog
+ :title="`鎹愮尞鑰呰鎯� - ${currentRecord.name}`"
+ :visible.sync="detailVisible"
+ width="1000px"
+ append-to-body
+ >
+ <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>
</div>
</template>
+
<script>
-import { getUserProfile } from "@/api/system/user";
-import {
- listDonationProcess,
- getDonatebaseinfo,
- delDonatebaseinfo,
- addDonatebaseinfo,
- updateDonatebaseinfo,
- exportDonatebaseinfo,
- downloadbaseinfo,
- getDonationNumber,
- getdonatorno
-} from "@/api/project/donatebaseinfo";
-import Li_area_select from "@/components/Address";
-import OrgSelecter from "@/views/project/components/orgselect";
-import AnnexUpload from "@/views/project/components/annexupload";
-import ReportName from "@/views/project/components/organizationUser";
-import { getToken } from "@/utils/auth";
-import {
- listOrganization,
- getOrganization,
- listReportname,
- listUser
-} from "@/api/project/organization";
+// 瀵煎叆妯℃嫙鏁版嵁鐢熸垚宸ュ叿
+import Mock from 'mockjs';
+
export default {
- components: {
- Li_area_select,
- OrgSelecter,
- AnnexUpload,
- ReportName
- },
name: "Donatebaseinfo",
dicts: ["sys_donornode", "sys_EthicalReview", "sys_BaseAssessConclusion"],
data() {
return {
- tempRecordState: null,
- approvalState: false,
- countyname: "",
- cuuntry: "",
- organizationname: "",
- selecttime: "",
-
- //鐪佸競鍖�
- //榛樿鍊艰缃紝鍙负绌�
- searchAddress: {
- sheng: "",
- shi: "",
- qu: "",
- organizationname: null
- },
- residenceAddresss: {
- sheng: "娴欐睙鐪�",
- shi: "",
- qu: ""
- },
- registerAddresss: {
- sheng: "娴欐睙鐪�",
- shi: "",
- qu: ""
- },
- terminationCaselist: [
- { name: "缁堟鐘舵��", value: 1 },
- { name: "姝e父鐘舵��", value: 0 }
- ],
// 閬僵灞�
- loading: true,
- // 瀵煎嚭閬僵灞�
- exportLoading: false,
- // 閫変腑鏁扮粍
- ids: [],
- // 闈炲崟涓鐢�
- single: true,
- // 闈炲涓鐢�
- multiple: true,
+ loading: false,
// 鏄剧ず鎼滅储鏉′欢
showSearch: true,
// 鎬绘潯鏁�
total: 0,
// 鎹愮尞鍩虹琛ㄦ牸鏁版嵁
donatebaseinfoList: [],
- // 寮瑰嚭灞傛爣棰�
- title: "",
- // 鏄惁鏄剧ず寮瑰嚭灞�
- open: false,
- // 鑾峰彇缁勭粐鍚嶇О鏃堕棿鑼冨洿
- daterangeReporttime: [],
-
+ // 璇︽儏寮规鏄剧ず
+ detailVisible: false,
+ // 瀹℃牳寮规鏄剧ず
+ approveVisible: false,
+ // 褰撳墠鎿嶄綔璁板綍
+ currentRecord: {},
+ // 缁熻鏁版嵁
+ stats: {
+ totalCount: 0,
+ pendingCount: 0,
+ approvedCount: 0,
+ terminatedCount: 0
+ },
// 鏌ヨ鍙傛暟
queryParams: {
pageNum: 1,
pageSize: 10,
- donorno: null,
- recordstate: null,
- // treatmenthospitalno: null,
- treatmenthospitalname: null,
- name: null,
- residenceprovince: null,
- residencecity: null,
- residencetown: null,
- starttime: null,
- endtime: null,
- city: null,
- reportno: null
- // organizationname: null,
- // organizationtype: null,
- // idcardno: null,
- // reporterno: null,
- // reporttime: null,
+ name: undefined,
+ idcardno: undefined,
+ recordstate: undefined
},
- // 琛ㄥ崟鍙傛暟
- form: {
- id: null,
- name: null,
- sex: null,
- idcardtype: null,
- idcardno: null,
- age: null,
- ageunit: null,
- birthday: null,
- phone: null,
- residenceaddress: null,
- nationality: "涓浗",
- nativeplace: null,
- residenceprovince: null,
- nation: null,
- residenceprovincename: null,
- occupation: null,
- residencecity: null,
- education: null,
- residencecityname: null,
- residencetown: null,
- residencetownname: null,
- residencecommunity: null,
- residencecommunityname: null,
- residencecountycode: null,
- residencecountyname: null,
- registeraddress: null,
- registerprovince: null,
- registerprovincename: null,
- registercity: null,
- registercityname: null,
- registertown: null,
- registertownname: null,
- registercommunity: null,
- registercommunityname: null,
- registercountycode: null,
- registercountyname: null,
- recordstate: null,
- treatmenthospitalno: null,
- treatmenthospitalname: null,
- treatmentdeptname: null,
- diagnosisno: null,
- diagnosisname: null,
- bloodtype: "0",
- inpatientno: null,
- rhyin: "0",
- donorno: null,
- donationcategory: null,
- illnessoverview: null,
- diseasetype: [],
- infectious: [],
- selfwill: [],
- diseasetypeOther: null,
- othercases: [],
- kinshipwill: 0,
- infosources: [],
- kinship: [],
- redorganno: null,
- redorganname: null,
- contactperson: null,
- infectiousOther: null,
- contactnumber: null,
- contacttime: null,
- reporterno: null,
- reportername: null,
- patientstate: [],
- reporterphone: null,
- infosourcesOther: null,
- reporttime: null,
- delFlag: null,
- createBy: null,
- createTime: null,
- updateBy: null,
- updateTime: null,
- kinshipOther: null,
- majorrelatives: null,
- familyrelations: null,
- acquisitiontissueno: "ZJOPO",
- acquisitiontissuename: "娴欐睙鐪佷汉浣撳櫒瀹樿幏鍙栫粍缁�"
- },
- //ads
- reporters: [],
- users: [],
-
- //鏄惁鏄剧ず淇濆瓨鎸夐挳
- showSaveBtn: true,
- showTerminationBtn: false,
- //娴佺▼鍚嶇О
- flowname: "娼滃湪鎹愮尞鐧昏",
- annexno: "PotentialDonationRegistration",
- starttime: "",
- endtime: "",
- reportlist: [],
- reportervalue: "",
- headers: {
- Authorization: "Bearer " + getToken()
+ // 瀹℃牳琛ㄥ崟
+ approveForm: {
+ approveResult: "1",
+ approveOpinion: ""
}
};
},
created() {
- if (sessionStorage.getItem("donatebaseinfo")) {
- this.queryParams = JSON.parse(sessionStorage.getItem("donatebaseinfo"));
- console.log(this.queryParams, "queryParams");
- }
- },
-
- mounted(e) {
- // let idd = this.$route.query.userid
- // console.log('chuanzhi',idd);
-
- this.LoadReportList();
-
- if (this.$route.params.starttime != null && this.$route.params.endtime) {
- this.selecttime = [
- this.$moment(this.$route.params.starttime).format("YYYY-MM-DD"),
- this.$moment(this.$route.params.endtime).format("YYYY-MM-DD")
- ];
- }
- if (this.$route.params.reporterno != "") {
- this.reporterno = this.$route.params.reporterno;
- }
-
- if (
- this.$route.params.tempRecordState != "" &&
- this.$route.params.tempRecordState != undefined
- ) {
- this.queryParams.recordstate = "" + this.$route.params.tempRecordState;
- }
- if (this.$route.params.reporterno != "") {
- this.reportervalue = this.$route.params.reporterno;
- }
- if (!this.$route.params.shen != "") {
- this.searchAddress.sheng = this.$route.params.shen;
- if (!this.$route.params.shi != "") {
- this.searchAddress.shi = this.$route.params.shi;
- }
- if (!this.$route.params.qu) {
- this.searchAddress.qu = this.$route.params.qu;
- }
- }
-
- if (this.$route.params.city != "") {
- this.queryParams.regionalLevel = this.$route.params.city;
- } else {
- this.queryParams.regionalLevel = "";
- }
-
- this.getTimeList();
-
this.getList();
},
-
methods: {
- LoadReportList() {
- listDonationProcess().then(res => {
- let list = res.rows;
- let reportlist = [];
- reportlist.push({ reporterno: "", reportername: "鍏ㄩ儴" });
- list.forEach(element => {
- reportlist.push({
- reporterno: element.reporterno,
- reportername: element.reportername
- });
- });
+ /** 鐢熸垚妯℃嫙鏁版嵁 */
+ 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]
+ }]
+ };
- if (reportlist != 0) {
- reportlist = this.resetArr(reportlist);
- this.reportlist = reportlist;
- }
- });
- },
-
- resetArr(Arr) {
- var hash = {};
- Arr = Arr.reduce(function(arr, current) {
- hash[current.reporterno]
- ? ""
- : (hash[current.reporterno] = true && arr.push(current));
- return arr;
- }, []);
- return Arr;
- },
-
- getTimeList(e) {
- console.log(this.selecttime);
- if (this.selecttime != null) {
- if (this.selecttime != 0) {
- this.endtime = this.selecttime[1];
- this.starttime = this.selecttime[0];
- // if (this.endtime == this.starttime) {
- let num = Number(this.endtime.slice(5, 7));
- if (num < 9) {
- let mon = Number(this.endtime.slice(6, 7));
- this.endtime =
- this.endtime.slice(0, 5) +
- "0" +
- (mon + 1) +
- "-" +
- "01" +
- " " +
- "00" +
- ":" +
- "00" +
- ":" +
- "00";
- }
- // this.endtime=this.endtime.slice(0,5)骞�
- else if (num >= 10) {
- this.endtime =
- this.endtime.slice(0, 5) +
- (num + 1) +
- "-" +
- "01" +
- " " +
- "00" +
- ":" +
- "00" +
- ":" +
- "00";
- } else {
- this.endtime =
- this.endtime.slice(0, 5) +
- "10" +
- "-" +
- "01" +
- " " +
- "00" +
- ":" +
- "00" +
- ":" +
- "00";
- }
- this.starttime =
- this.starttime + " " + "00" + ":" + "00" + ":" + "00";
- // }
- } else {
- this.starttime = "1998-01-01 00:00:00";
- this.endtime = "2998-01-01 00:00:00";
- }
- } else {
- this.starttime = "1998-01-01 00:00:00";
- this.endtime = "2998-01-01 00:00:00";
- }
- },
-
- handleapproval(row) {
- this.$confirm("鏄惁纭灏嗘渚嬩笂鎶ュ鏍革紵", "鎻愮ず", {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning"
- })
- .then(() => {
- row.recordstate = 1;
- updateDonatebaseinfo(row).then(response => {
- this.$modal.msgSuccess("涓婃姤瀹℃牳鎴愬姛");
- this.getList();
- });
- })
- .catch(() => {
- this.$message({
- type: "info",
- message: "宸插彇娑堜笂鎶�"
- });
- });
- },
- resetapproval(row) {
- this.approvalState = false;
- // this.reset();
- // const id = row.id || this.ids;
- updateDonatebaseinfo(row).then(response => {
- row.recordstate = 0;
- });
- },
-
- updateMessage() {
- try {
- const reg = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
- if (reg.test(this.form.idcardno)) {
- // 韬唤璇佸彿鐮佹槸鍚﹀悎娉�
- var org_birthday = this.form.idcardno.substring(6, 14);
- var org_gender = this.form.idcardno.substring(16, 17);
- var sex = org_gender % 2 == 1 ? 1 : 2;
- var birthday =
- org_birthday.substring(0, 4) +
- "-" +
- org_birthday.substring(4, 6) +
- "-" +
- org_birthday.substring(6, 8);
- var birthdays = new Date(birthday.replace(/-/g, "/"));
- let d = new Date();
- let age =
- d.getFullYear() -
- birthdays.getFullYear() -
- (d.getMonth() < birthdays.getMonth() ||
- (d.getMonth() == birthdays.getMonth() &&
- d.getDate() < birthdays.getDate())
- ? 1
- : 0);
- // 璧嬪�肩粰琛ㄦ牸
- this.form.sex = sex;
- this.form.birthday = birthday;
- this.form.age = age;
- } else {
- }
- } catch {}
- },
- // sheng: '娴欐睙鐪�',
- // shi: '',
- // qu: '',
-
- // 韬唤璇侀獙璇�
- //鏍规嵁韬唤璇佸彿鑷姩鐢熸垚鎬у埆銆佸嚭鐢熸棩鏈熷拰骞撮緞
- inputChange() {
- const idCard = this.props.form.getFieldValue("idCard");
- let birthday = "";
- let sex = "0";
- if (idCard.length === 15) {
- birthday = `19${idCard.substring(6, 8)}-${idCard.substring(
- 9,
- 10
- )}-${idCard.substring(11, 12)}`;
- sex = idCard[14] % 2 === 0 ? "0" : "1";
- } else {
- birthday = `${idCard.substring(6, 10)}-${idCard.substring(
- 11,
- 12
- )}-${idCard.substring(13, 14)}`;
- sex = idCard[16] % 2 === 0 ? "0" : "1";
- }
- this.setState({
- birthday,
- sex
- });
+ return Mock.mock(mockTemplate).list;
},
/** 鏌ヨ鎹愮尞鍩虹鍒楄〃 */
getList() {
this.loading = true;
- // 璺宠浆鏃剁殑榛樿杩涘害
+ // 妯℃嫙API璋冪敤寤惰繜
+ setTimeout(() => {
+ // 鐢熸垚妯℃嫙鏁版嵁
+ const mockData = this.generateMockData();
- if (this.reportervalue != "") {
- this.queryParams.reportno = this.reportervalue;
- }
+ // 搴旂敤绛涢�夋潯浠�
+ let filteredData = mockData;
+ if (this.queryParams.name) {
+ filteredData = filteredData.filter(item =>
+ item.name.includes(this.queryParams.name)
+ );
+ }
+ 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
+ );
+ }
- if (this.starttime != "") {
- this.queryParams.starttime = this.starttime;
- } else {
- this.queryParams.starttime = "";
- }
- if (this.endtime != "") {
- this.queryParams.endtime = this.endtime;
- } else {
- this.queryParams.endtime = "";
- }
- console.log(this.queryParams);
+ // 鍒嗛〉澶勭悊
+ 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;
- listDonationProcess(this.queryParams).then(response => {
- this.donatebaseinfoList = response.rows;
- //console.log("listDonationProcess", response.rows);
- this.total = response.total;
+ // 鏇存柊缁熻鏁版嵁
+ this.updateStats(mockData);
this.loading = false;
- });
+ }, 500);
},
- // 鍙栨秷鎸夐挳
- cancel() {
- this.open = false;
- this.reset();
- },
- // 琛ㄥ崟閲嶇疆
- reset() {
- this.form = {
- id: null,
- name: null,
- sex: null,
- idcardtype: null,
- idcardno: null,
- age: null,
- ageunit: null,
- birthday: null,
- phone: null,
- residenceaddress: null,
- nationality: "涓浗",
- nativeplace: null,
- residenceprovince: null,
- nation: null,
- residenceprovincename: null,
- occupation: null,
- residencecity: null,
- education: null,
- residencecityname: null,
- residencetown: null,
- residencetownname: null,
- residencecommunity: null,
- residencecommunityname: null,
- residencecountycode: null,
- residencecountyname: null,
- registeraddress: null,
- registerprovince: null,
- registerprovincename: null,
- registercity: null,
- registercityname: null,
- registertown: null,
- registertownname: null,
- registercommunity: null,
- registercommunityname: null,
- registercountycode: null,
- registercountyname: null,
- recordstate: null,
- treatmenthospitalno: null,
- treatmenthospitalname: null,
- treatmentdeptname: null,
- diagnosisno: null,
- diagnosisname: null,
- bloodtype: "0",
- inpatientno: null,
- rhyin: 0,
- donorno: null,
- donationcategory: null,
- illnessoverview: null,
- diseasetype: [],
- infectious: [],
- selfwill: [],
- diseasetypeOther: null,
- othercases: [],
- kinshipwill: 0,
- infosources: [],
- kinship: [],
- redorganno: null,
- redorganname: null,
- contactperson: null,
- infectiousOther: null,
- contactnumber: null,
- contacttime: null,
- reporterno: null,
- reportername: null,
- patientstate: [],
- reporterphone: null,
- infosourcesOther: null,
- reporttime: null,
- delFlag: null,
- createBy: null,
- createTime: null,
- updateBy: null,
- updateTime: null,
- kinshipOther: null,
- majorrelatives: null,
- familyrelations: null,
- acquisitiontissueno: "ZJOPO",
- acquisitiontissuename: "娴欐睙鐪佷汉浣撳櫒瀹樿幏鍙栫粍缁�"
- };
- this.resetForm("form");
+ /** 鏇存柊缁熻鏁版嵁 */
+ 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;
},
+
+ /** 鑾峰彇鐘舵�佹爣绛炬牱寮� */
+ getStatusTag(status) {
+ const statusMap = {
+ '0': 'warning', // 寰呭鏍�
+ '1': 'success', // 宸插鏍�
+ '99': 'danger' // 宸茬粓姝�
+ };
+ return statusMap[status] || 'info';
+ },
+
+ /** 鑾峰彇鐘舵�佹枃鏈� */
+ getStatusText(status) {
+ const textMap = {
+ '0': '寰呭鏍�',
+ '1': '宸插鏍�',
+ '99': '宸茬粓姝�'
+ };
+ return textMap[status] || '鏈煡鐘舵��';
+ },
+
+ /** 鏃堕棿鏍煎紡鍖� */
+ parseTime(time, format) {
+ if (!time) return '-';
+ const date = new Date(time);
+ const year = date.getFullYear();
+ const month = (date.getMonth() + 1).toString().padStart(2, '0');
+ const day = date.getDate().toString().padStart(2, '0');
+
+ if (format === '{y}-{m}-{d}') {
+ return `${year}-${month}-${day}`;
+ }
+ return time;
+ },
+
/** 鎼滅储鎸夐挳鎿嶄綔 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
+
/** 閲嶇疆鎸夐挳鎿嶄綔 */
resetQuery() {
- this.daterangeReporttime = [];
-
- this.reportervalue = "";
-
this.queryParams = {
- doname: null,
pageNum: 1,
pageSize: 10,
- name: null,
- idcardno: null,
- residenceprovince: null,
- residencecity: null,
- residencetown: null,
- // "2"
- recordstate: null,
- treatmenthospitalname: null,
- donorno: null,
- acquisitiontissueno: null,
- reportername: null,
- reporttime: null,
- city: null,
- treatmenthospitalno: null
+ name: undefined,
+ idcardno: undefined,
+ recordstate: undefined
};
- this.selecttime = [];
- this.getTimeList();
- this.searchAddress = {
- sheng: "",
- shi: "",
- qu: "",
- organizationname: null
+ this.getList();
+ },
+
+ /** 鏌ョ湅璇︽儏 */
+ handleDetail(row) {
+ this.currentRecord = { ...row };
+ this.detailVisible = true;
+ },
+
+ /** 瀹℃牳鎿嶄綔 */
+ handleApprove(row) {
+ this.currentRecord = { ...row };
+ this.approveForm = {
+ approveResult: "1",
+ approveOpinion: ""
};
- //this.$refs.areaSelect.clean();
-
- this.resetForm("queryForm");
- this.handleQuery();
- },
- // 澶氶�夋閫変腑鏁版嵁
- handleSelectionChange(selection) {
- this.ids = selection.map(item => item.id);
- this.single = selection.length !== 1;
- this.multiple = !selection.length;
+ this.approveVisible = true;
},
- /** 淇敼鎸夐挳鎿嶄綔 */
-
- handleUpdate(row) {
- this.$router.push({
- path: "/organ/donationdetails/",
- query: {
- id: row.id,
- organType: "edit"
- }
- });
- // this.showSaveBtn = true;
- // const id = row.id || this.ids;
- // //this.$refs.annex.getAnnexList();
-
- // getDonatebaseinfo(id).then((response) => {
- // this.reset();
-
- // this.$nextTick(function () {
- // this.$refs.annex.getAnnexList();
- // });
- // this.form = response.data;
- // response.data.sex = parseInt(response.data.sex);
- // this.form.id = response.data.id;
- // this.form.diseasetype = this.form.diseasetype.split(",");
- // this.form.infectious = this.form.infectious.split(",");
- // this.form.selfwill = this.form.selfwill.split(",");
- // this.form.othercases = this.form.othercases.split(",");
- // this.form.infosources = this.form.infosources.split(",");
- // this.form.kinship = this.form.kinship.split(",");
- // this.form.patientstate = this.form.patientstate.split(",");
- // this.open = true;
- // this.title = "浜轰綋鍣ㄥ畼娼滃湪鎹愮尞鑰呯櫥璁拌〃";
- // this.registerAddresss.sheng = response.data.registerprovincename;
- // this.residenceAddresss.sheng = response.data.residenceprovincename;
- // this.registerAddresss.shi = response.data.registercityname;
- // this.residenceAddresss.shi = response.data.residencecityname;
- // this.residenceAddresss.qu = response.data.residencetownname;
- // this.registerAddresss.qu = response.data.registertownname;
- // });
- },
- // 缁堟妗堜緥
- handletermination(row) {
- this.reset();
- this.showSaveBtn = false;
- this.showTerminationBtn = true;
- const id = row.id || this.ids;
- getDonatebaseinfo(id).then(response => {
- this.form = response.data;
- this.form.diseasetype = this.form.diseasetype.split(",");
- this.form.infectious = this.form.infectious.split(",");
- this.form.selfwill = this.form.selfwill.split(",");
- this.form.othercases = this.form.othercases.split(",");
- this.form.infosources = this.form.infosources.split(",");
- this.form.kinship = this.form.kinship.split(",");
- this.form.patientstate = this.form.patientstate.split(",");
- this.registerAddresss.sheng = response.data.registerprovincename;
- this.residenceAddresss.sheng = response.data.residenceprovincename;
- this.registerAddresss.shi = response.data.registercityname;
- this.residenceAddresss.shi = response.data.residencecityname;
- this.residenceAddresss.qu = response.data.residencetownname;
- this.registerAddresss.qu = response.data.registertownname;
- this.open = true;
- this.title = "浜轰綋鍣ㄥ畼娼滃湪鎹愮尞鑰呯櫥璁拌〃";
- this.form.recordstate = 99;
- // this.$nextTick(function() {
- // this.$refs.annex.getAnnexList();
- // });
- });
- },
- /** 鎻愪氦鎸夐挳 */
- submitForm() {
- console.log(this.form);
- this.$refs["form"].validate(valid => {
- if (valid) {
- const date = { ...this.form };
- console.log(date, "date");
- this.form.birthday = this.$moment(this.form.birthday).format(
- "YYYY-MM-DD HH:mm:ss"
- );
- this.form.diseasetype = this.form.diseasetype.join(",");
- this.form.infectious = this.form.infectious.join(",");
- this.form.selfwill = this.form.selfwill.join(",");
- this.form.othercases = this.form.othercases.join(",");
- this.form.infosources = this.form.infosources.join(",");
- this.form.kinship = this.form.kinship.join(",");
- this.form.patientstate = this.form.patientstate.join(",");
- this.form.registerprovince = this.$refs.registerSelect.getSheng();
- this.form.registerprovincename = this.registerAddresss.sheng;
-
- this.form.residenceprovince = this.$refs.residenceSelect.getSheng();
- this.form.residenceprovincename = this.residenceAddresss.sheng;
-
- this.form.registercity = this.$refs.registerSelect.getShi();
- this.form.registercityname = this.registerAddresss.shi;
-
- this.form.residencecity = this.$refs.residenceSelect.getShi();
- this.form.residencecityname = this.residenceAddresss.shi;
-
- this.form.residencetown = this.$refs.residenceSelect.getQu();
- this.form.residencetownname = this.residenceAddresss.qu;
-
- this.form.registertown = this.$refs.registerSelect.getQu();
- this.form.registertownname = this.registerAddresss.qu;
-
- this.form.reportername = this.$refs.getReportname.$data.selectedLabel;
- this.form.donatetime = this.form.reporttime;
-
- try {
- this.form.treatmenthospitalname = this.$refs.addOrgSelect.getOptionByValue(
- this.form.treatmenthospitalno
- ).organizationname;
- } catch {
- this.form.treatmenthospitalname = this.form.treatmenthospitalno;
- }
-
- try {
- this.form.redorganname = this.$refs.addCrossOrgSelect.getOptionByValue(
- this.form.redorganno
- ).organizationname;
- } catch {
- this.form.redorganname = this.form.redorganno;
- }
-
- this.form.workflow = 0;
- this.form.recordstate = 0;
- addDonatebaseinfo(this.form).then(res => {
- console.log("22");
- console.log(res.code);
- if (res.code == 200) {
- this.$modal.msgSuccess("鏂板鎴愬姛");
- this.$router.push({
- path: "/organ/donationdetails/",
- query: {
- id: res.data.id,
- organType: "edit"
- }
- });
- this.open = false;
- } else {
- console.log("1");
- this.form = date;
- console.log(this.form, "form");
- this.$modal.msgError("鏂板澶辫触锛�" + res.msg);
- }
- });
- }
- });
- },
- /** 鍒犻櫎鎸夐挳鎿嶄綔 */
- handleDelete(row) {
- const ids = row.id || this.ids;
- this.$modal
- .confirm('鏄惁纭鍒犻櫎鎹愮尞鍩虹缂栧彿涓�"' + ids + '"鐨勬暟鎹」锛�')
- .then(function() {
- return delDonatebaseinfo(ids);
- })
- .then(() => {
- this.getList();
- this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
- })
- .catch(() => {});
- },
-
- /** 瀵煎嚭鎸夐挳鎿嶄綔 */
- handleExport() {
- const queryParams = this.queryParams;
- this.$modal
- .confirm("鏄惁纭瀵煎嚭鎵�鏈夋崘鐚熀纭�鏁版嵁椤癸紵")
- .then(() => {
- this.exportLoading = true;
- return exportDonatebaseinfo(queryParams);
- })
- .then(response => {
- this.$download.name(response.msg);
- this.exportLoading = false;
- })
- .catch(() => {});
- },
-
- // 瀵硅薄杞垚鎸囧畾瀛楃涓插垎闅�
- listToString(list, separator) {
- let strs = "";
- separator = separator || ",";
- for (let i in list) {
- strs += list[i] + separator;
+ /** 鎻愪氦瀹℃牳 */
+ 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(); // 閲嶆柊鍔犺浇鏇存柊缁熻
}
- return strs != "" ? strs.substr(0, strs.length - 1) : "";
- },
- //瀛楃涓叉牴鎹寚瀹氬瓧绗︿覆鍒嗛殧
- stringToList(str, separator) {
- separator = separator || ",";
- let tempList = [];
- if (str != null && str != undefined && str != "") {
- tempList = str.split(separator);
- }
- return tempList;
- },
-
- //涓嬭浇娼滃湪鐧昏琛�
- handledownload(row) {
- const id = row.id || this.ids;
-
- downloadbaseinfo(id).then(res => {
- var fileUrl = res;
- //鑾峰彇褰撳墠缃戝潃
- var urlBase = process.env.VUE_APP_BASE_API;
- var curWWWPath = window.document.location.href;
- var pos = curWWWPath.indexOf(window.document.location.pathname);
- // 鍒涘缓a鏍囩
- var aEle = document.createElement("a");
- aEle.href =
- curWWWPath.substring(0, pos) + urlBase + fileUrl["downloadUrl"];
- console.log(aEle.href);
- // 娣诲姞Authorization澶撮儴
- fetch(aEle.href, {
- headers: this.headers
- })
- .then(response => {
- // 灏嗘枃浠朵笅杞介摼鎺ヤ綔涓篵lob瀵硅薄杩涜涓嬭浇
- return response.blob();
- })
- .then(blob => {
- const url = window.URL.createObjectURL(new Blob([blob]));
- console.log(url);
- const link = document.createElement("a");
- link.href = url;
- const name = fileUrl["downloadName"];
- link.setAttribute("download", name); // 鏇挎崲file.pdf涓哄疄闄呯殑鏂囦欢鍚�
- document.body.appendChild(link);
- link.click();
- link.parentNode.removeChild(link);
- });
- });
}
}
};
</script>
<style scoped>
-::v-deep .el-dialog__header {
- padding-top: 40px !important;
- margin: auto !important;
- padding-bottom: 0px !important;
+.filter-card {
+ margin-bottom: 20px;
+}
+
+.stats-row {
+ margin-bottom: 20px;
+}
+
+.stats-card {
+ border-radius: 8px;
+ transition: all 0.3s ease;
+}
+
+.stats-card:hover {
+ transform: translateY(-2px);
+}
+
+.stats-card.total {
+ border-left: 4px solid #409EFF;
+}
+
+.stats-card.pending {
+ border-left: 4px solid #E6A23C;
+}
+
+.stats-card.approved {
+ border-left: 4px solid #67C23A;
+}
+
+.stats-card.terminated {
+ border-left: 4px solid #F56C6C;
+}
+
+.stat-content {
+ display: flex;
+ align-items: center;
+ padding: 10px;
+}
+
+.stat-icon {
+ font-size: 32px;
+ margin-right: 15px;
+}
+
+.stat-info {
+ flex: 1;
+}
+
+.stat-count {
+ font-size: 24px;
+ font-weight: bold;
+ color: #303133;
+ margin-bottom: 5px;
+}
+
+.stat-label {
+ font-size: 14px;
+ color: #909399;
+}
+
+/* 琛ㄦ牸鏍峰紡浼樺寲 */
+::v-deep .el-table .cell {
+ padding: 8px 4px;
+}
+
+::v-deep .el-table th {
+ background-color: #f5f7fa;
+ font-weight: bold;
}
</style>
--
Gitblit v1.9.3