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/donatebaseinfo/EditCaseModal.vue | 911 ++++++
src/views/business/maintain/components/UrineRoutinePanel.vue | 333 +-
src/components/TerminateRestoreModal/index.vue | 408 ++
src/views/project/donatebaseinfo/index.vue | 1984 ++-----------
src/views/business/affirm/index.vue | 304 +
src/views/business/maintain/components/LiverKidneyPanel.vue | 242
src/views/business/maintain/index.vue | 392 +-
src/views/business/assess/index.vue | 425 +-
src/api/project/donatebaseinfo.js | 6
src/views/business/assess/components/OrganAssessmentForm.vue | 20
src/views/project/DonationProcess/index.vue | 259 +
src/views/business/affirm/affirmInfo.vue | 884 +++--
src/views/business/maintain/maintainInfo.vue | 989 ++----
src/api/businessApi/affirm.js | 44
src/api/businessApi/assess.js | 12
src/views/business/maintain/components/BloodRoutinePanel.vue | 291 +
src/views/business/assess/assessInfo.vue | 953 ++++--
17 files changed, 4,489 insertions(+), 3,968 deletions(-)
diff --git a/src/api/businessApi/affirm.js b/src/api/businessApi/affirm.js
index e69de29..61893c3 100644
--- a/src/api/businessApi/affirm.js
+++ b/src/api/businessApi/affirm.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 涓婃姤妗堜緥鏂板
+export function relativesAdd(data) {
+ return request({
+ url: '/project/relativesconfirmation/add',
+ method: 'post',
+ data: data
+ })
+}
+
+// 涓婃姤妗堜緥淇敼
+export function relativesEdit(data) {
+ return request({
+ url: '/project/relativesconfirmation/edit',
+ method: 'post',
+ data: data
+ })
+}
+// 涓婃姤妗堜緥鍒楄〃
+export function relativesList(data) {
+ return request({
+ url: '/project/relativesconfirmation/confirmationBaseInfoList',
+ method: 'post',
+ data: data
+ })
+}
+
+// 妗堜緥璇︽儏
+export function relativesInfo(id) {
+ return request({
+ url: '/project/relativesconfirmation/getInfo/' + id,
+ method: 'get'
+ })
+}
+
+// 鍒犻櫎
+export function relativesDel(id) {
+ return request({
+ url: '/project/relativesconfirmation/remove/' + id,
+ method: 'get'
+ })
+}
+
diff --git a/src/api/businessApi/assess.js b/src/api/businessApi/assess.js
index db1b6aa..faf5e96 100644
--- a/src/api/businessApi/assess.js
+++ b/src/api/businessApi/assess.js
@@ -3,7 +3,15 @@
// 涓婃姤妗堜緥鏂板
export function assessAdd(data) {
return request({
- url: '/project/assessbaseinforeport/add',
+ url: '/project/medicalevaluation/add',
+ method: 'post',
+ data: data
+ })
+}
+// 涓婃姤妗堜緥鏂板
+export function assessedit(data) {
+ return request({
+ url: '/project/medicalevaluation/edit',
method: 'post',
data: data
})
@@ -12,7 +20,7 @@
// 妗堜緥鍒楄〃鍙婅鎯�
export function evaluateBaseInfolist(data) {
return request({
- url: '/project/medicalevaluation/evaluateBaseInfolist',
+ url: '/project/medicalevaluation/medevaluateBaseInfolist',
method: 'post',
data: data
})
diff --git a/src/api/project/donatebaseinfo.js b/src/api/project/donatebaseinfo.js
index ec3f7dd..ee6177b 100644
--- a/src/api/project/donatebaseinfo.js
+++ b/src/api/project/donatebaseinfo.js
@@ -1,11 +1,11 @@
import request from '@/utils/request'
// 鏌ヨ鎹愮尞鍩虹鍒楄〃
-export function listDonatebaseinfo(query) {
+export function listDonatebaseinfo(data) {
return request({
url: '/project/donatebaseinfo/list',
- method: 'get',
- params: query
+ method: 'post',
+ data: data
})
}
export function listDonationProcess(query) {
diff --git a/src/components/TerminateRestoreModal/index.vue b/src/components/TerminateRestoreModal/index.vue
new file mode 100644
index 0000000..bfbba4c
--- /dev/null
+++ b/src/components/TerminateRestoreModal/index.vue
@@ -0,0 +1,408 @@
+<template>
+ <div>
+ <!-- 缁堟纭寮规 -->
+ <el-dialog
+ :title="terminateTitle"
+ :visible.sync="terminateVisible"
+ width="800px"
+ append-to-body
+ :close-on-click-modal="false"
+ @close="handleTerminateClose"
+ >
+ <div class="patient-info">
+ <el-alert
+ :title="
+ `褰撳墠鎿嶄綔鎮h�咃細${currentRecord.name} (${currentRecord.idcardno ||
+ '鏃犺瘉浠跺彿'})`
+ "
+ type="info"
+ :closable="false"
+ show-icon
+ />
+ </div>
+
+ <el-form
+ :model="terminateForm"
+ :rules="terminateRules"
+ ref="terminateFormRef"
+ label-width="100px"
+ class="terminate-form"
+ >
+ <el-form-item label="缁堟绫诲瀷" prop="terminationType">
+ <el-select
+ v-model="terminateForm.terminationType"
+ placeholder="璇烽�夋嫨缁堟绫诲瀷"
+ style="width: 100%;"
+ >
+ <el-option
+ v-for="item in terminationTypes"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ </el-form-item>
+
+ <el-form-item label="璇︾粏鍘熷洜" prop="terminationResult">
+ <el-input
+ v-model="terminateForm.terminationResult"
+ type="textarea"
+ :rows="3"
+ placeholder="璇疯緭鍏ョ粓姝㈢殑璇︾粏鍘熷洜"
+ maxlength="200"
+ show-word-limit
+ />
+ </el-form-item>
+
+ <el-form-item label="浜屾纭" prop="confirmText">
+ <el-input
+ v-model="terminateForm.confirmText"
+ placeholder="璇疯緭鍏�'纭缁堟'浠ュ畬鎴愭搷浣�"
+ @input="handleConfirmTextChange"
+ />
+ </el-form-item>
+ </el-form>
+
+ <div slot="footer">
+ <el-button @click="handleTerminateClose" :disabled="terminateLoading"
+ >鍙栨秷</el-button
+ >
+ <el-button
+ type="danger"
+ :disabled="!canSubmitTerminate"
+ @click="handleTerminateSubmit"
+ :loading="terminateLoading"
+ >
+ 纭缁堟
+ </el-button>
+ </div>
+ </el-dialog>
+
+ <!-- 鎭㈠纭寮规 -->
+ <el-dialog
+ :title="restoreTitle"
+ :visible.sync="restoreVisible"
+ width="600px"
+ append-to-body
+ :close-on-click-modal="false"
+ >
+ <div class="patient-info">
+ <el-alert
+ :title="
+ `褰撳墠鎿嶄綔鎮h�咃細${currentRecord.name} (${currentRecord.idcardno ||
+ '鏃犺瘉浠跺彿'})`
+ "
+ type="info"
+ :closable="false"
+ show-icon
+ />
+ </div>
+
+ <div style="margin: 20px 0;">
+ <p>
+ 纭畾瑕佹仮澶嶆崘鐚��
+ <strong>{{ currentRecord.name }}</strong> 鐨勬崘鐚繘绋嬪悧锛�
+ </p>
+ <p style="color: #67c23a; font-size: 12px; margin-top: 10px;">
+ 鎭㈠鍚庯紝璇ユ渚嬪皢閲嶆柊杩涘叆鎹愮尞娴佺▼
+ </p>
+ </div>
+ <div slot="footer">
+ <el-button @click="restoreVisible = false" :disabled="restoreLoading"
+ >鍙栨秷</el-button
+ >
+ <el-button
+ type="success"
+ @click="handleRestoreSubmit"
+ :loading="restoreLoading"
+ >
+ 纭鎭㈠
+ </el-button>
+ </div>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import { updateDonatebaseinfo } from "@/api/project/donatebaseinfo";
+
+export default {
+ name: "TerminateRestoreModal",
+ props: {
+ // 褰撳墠鎿嶄綔璁板綍
+ currentRecord: {
+ type: Object,
+ default: () => ({})
+ },
+ // 寮规鏄剧ず鐘舵��
+ visible: {
+ type: Object,
+ default: () => ({
+ terminate: false,
+ restore: false
+ })
+ },
+ // 鑷畾涔夋爣棰�
+ titles: {
+ type: Object,
+ default: () => ({
+ terminate: "缁堟鎹愮尞杩涚▼",
+ restore: "鎭㈠鎹愮尞杩涚▼"
+ })
+ }
+ },
+ data() {
+ return {
+ // 缁堟琛ㄥ崟
+ terminateForm: {
+ terminationType: "",
+ terminationResult: "",
+ confirmText: ""
+ },
+ // 缁堟绫诲瀷閫夐」
+ terminationTypes: [
+ { label: "濂借浆", value: "1" },
+ { label: "姝讳骸", value: "2" },
+ { label: "涓嶇鍚堟崘鐚繘绋�", value: "3" },
+ { label: "瀹跺睘鏀惧純鎹愮尞", value: "4" },
+ { label: "鍏朵粬", value: "5" }
+ ],
+ // 楠岃瘉瑙勫垯
+ terminateRules: {
+ terminationType: [
+ { required: true, message: "璇烽�夋嫨缁堟绫诲瀷", trigger: "change" }
+ ],
+ terminationResult: [
+ { required: true, message: "璇疯緭鍏ョ粓姝㈠師鍥�", trigger: "blur" },
+ { min: 5, message: "缁堟鍘熷洜鑷冲皯5涓瓧绗�", trigger: "blur" }
+ ]
+ },
+ // 鍔犺浇鐘舵��
+ terminateLoading: false,
+ restoreLoading: false,
+ // 鎺у埗鎻愪氦
+ canSubmitTerminate: false
+ };
+ },
+ computed: {
+ terminateVisible: {
+ get() {
+ return this.visible.terminate;
+ },
+ set(value) {
+ this.$emit("update:visible", { ...this.visible, terminate: value });
+ }
+ },
+ restoreVisible: {
+ get() {
+ return this.visible.restore;
+ },
+ set(value) {
+ this.$emit("update:visible", { ...this.visible, restore: value });
+ }
+ },
+ terminateTitle() {
+ return this.titles.terminate;
+ },
+ restoreTitle() {
+ return this.titles.restore;
+ },
+ // 鎮h�呬俊鎭樉绀�
+ patientInfo() {
+ return `${this.currentRecord.name} (${this.currentRecord.idcardno ||
+ "鏃犺瘉浠跺彿"})`;
+ }
+ },
+ watch: {
+ "visible.terminate": {
+ handler(newVal) {
+ if (newVal) {
+ this.resetTerminateForm();
+ }
+ },
+ immediate: true
+ }
+ },
+ methods: {
+ /** 閲嶇疆缁堟琛ㄥ崟 */
+ resetTerminateForm() {
+ this.terminateForm = {
+ terminationType: "",
+ terminationResult: "",
+ confirmText: ""
+ };
+ this.canSubmitTerminate = false;
+ this.terminateLoading = false;
+
+ // 閲嶇疆琛ㄥ崟楠岃瘉
+ this.$nextTick(() => {
+ if (this.$refs.terminateFormRef) {
+ this.$refs.terminateFormRef.clearValidate();
+ }
+ });
+ },
+
+ /** 纭鏂囨湰鍙樺寲澶勭悊 */
+ handleConfirmTextChange(value) {
+ this.canSubmitTerminate = value === "纭缁堟";
+ },
+
+ /** 缁堟寮规鍏抽棴澶勭悊 */
+ handleTerminateClose() {
+ this.terminateVisible = false;
+ this.resetTerminateForm();
+ },
+
+ /** 缁堟鍓嶇殑浜屾纭 */
+ async confirmTermination() {
+ try {
+ await this.$confirm(
+ `鏄惁纭缁堟鎮h�� ${this.patientInfo} 鐨勬崘鐚渚嬶紵姝ゆ搷浣滃皢缁堟璇ユ偅鑰呯殑鎹愮尞杩涚▼銆俙,
+ "璀﹀憡",
+ {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ closeOnClickModal: false,
+ closeOnPressEscape: false
+ }
+ );
+ return true;
+ } catch (error) {
+ console.log("鐢ㄦ埛鍙栨秷缁堟鎿嶄綔");
+ return false;
+ }
+ },
+
+ /** 鎭㈠鍓嶇殑浜屾纭 */
+ async confirmRestoration() {
+ try {
+ await this.$confirm(
+ `鏄惁纭鎭㈠鎮h�� ${this.patientInfo} 鐨勬崘鐚渚嬶紵鎭㈠鍚庤妗堜緥灏嗛噸鏂拌繘鍏ユ崘鐚祦绋嬨�俙,
+ "纭鎭㈠",
+ {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "info",
+ closeOnClickModal: false,
+ closeOnPressEscape: false
+ }
+ );
+ return true;
+ } catch (error) {
+ console.log("鐢ㄦ埛鍙栨秷鎭㈠鎿嶄綔");
+ return false;
+ }
+ },
+
+ /** 鎻愪氦缁堟 */
+ async handleTerminateSubmit() {
+ try {
+ // 琛ㄥ崟楠岃瘉
+ await this.$refs.terminateFormRef.validate();
+
+ if (!this.canSubmitTerminate) {
+ this.$message.warning('璇疯緭鍏�"纭缁堟"瀹屾垚楠岃瘉');
+ return;
+ }
+ console.log(66);
+
+ // 浜屾纭
+ const userConfirmed = await this.confirmTermination();
+ if (!userConfirmed) {
+ return;
+ }
+
+ this.terminateLoading = true;
+
+ // 璋冪敤缁堟鎺ュ彛
+ await updateDonatebaseinfo({
+ id: this.currentRecord.id,
+ caseNo: this.currentRecord.caseNo,
+ terminationType: this.terminateForm.terminationType,
+ terminationResult: this.terminateForm.terminationResult,
+ terminationCase: 1
+ });
+
+ this.$message.success("缁堟鎴愬姛");
+ this.terminateVisible = false;
+
+ // 閫氱煡鐖剁粍浠舵搷浣滃畬鎴愶紝闇�瑕佸埛鏂版暟鎹�
+ this.$emit("operation-success", {
+ type: "terminate",
+ record: this.currentRecord,
+ terminationType: this.terminateForm.terminationType
+ });
+ } catch (error) {
+ if (error instanceof Error) {
+ this.$message.error("缁堟澶辫触");
+ console.error("缁堟閿欒:", error);
+ }
+ // 楠岃瘉澶辫触涓嶆樉绀洪敊璇秷鎭�
+ } finally {
+ this.terminateLoading = false;
+ }
+ },
+
+ /** 鎻愪氦鎭㈠ */
+ async handleRestoreSubmit() {
+ try {
+ // 浜屾纭
+ const userConfirmed = await this.confirmRestoration();
+ if (!userConfirmed) {
+ return;
+ }
+
+ this.restoreLoading = true;
+
+ // 璋冪敤鎭㈠鎺ュ彛
+ await updateDonatebaseinfo({
+ id: this.currentRecord.id,
+ caseNo: this.currentRecord.caseNo,
+ terminationCase: 0
+ });
+
+ this.$message.success("鎭㈠鎴愬姛");
+ this.restoreVisible = false;
+
+ // 閫氱煡鐖剁粍浠舵搷浣滃畬鎴愶紝闇�瑕佸埛鏂版暟鎹�
+ this.$emit("operation-success", {
+ type: "restore",
+ record: this.currentRecord
+ });
+ } catch (error) {
+ this.$message.error("鎭㈠澶辫触");
+ console.error("鎭㈠閿欒:", error);
+ } finally {
+ this.restoreLoading = false;
+ }
+ }
+ }
+};
+</script>
+
+<style scoped>
+.patient-info {
+ margin-bottom: 20px;
+ font-size: 18px;
+}
+
+.terminate-form {
+ margin-top: 15px;
+}
+
+/* 鍝嶅簲寮忚皟鏁� */
+@media (max-width: 768px) {
+ .patient-info ::v-deep .el-alert {
+ padding: 8px 16px;
+ }
+
+ .terminate-form ::v-deep .el-form-item__label {
+ width: 80px !important;
+ }
+
+ .terminate-form ::v-deep .el-form-item__content {
+ margin-left: 80px !important;
+ }
+}
+</style>
diff --git a/src/views/business/affirm/affirmInfo.vue b/src/views/business/affirm/affirmInfo.vue
index 5932ac3..ce4013d 100644
--- a/src/views/business/affirm/affirmInfo.vue
+++ b/src/views/business/affirm/affirmInfo.vue
@@ -5,10 +5,10 @@
<div slot="header" class="clearfix">
<span class="detail-title">鎹愮尞纭鍩烘湰淇℃伅</span>
<el-button
- v-if="$route.query.confirm"
- type="primary"
- style="float: right; padding: 3px 0"
+ type="success"
+ style="float: right;"
@click="handleSave"
+ :loading="saveLoading"
>
淇濆瓨纭淇℃伅
</el-button>
@@ -18,23 +18,19 @@
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="浣忛櫌鍙�" prop="caseNo">
- <el-input v-model="form.caseNo" :readonly="!isEdit" />
+ <el-input v-model="form.caseNo" />
</el-form-item>
</el-col>
<el-col :span="8">
- <el-form-item label="鎹愮尞鑰呭鍚�" prop="donorName">
- <el-input v-model="form.donorName" :readonly="!isEdit" />
+ <el-form-item label="鎹愮尞鑰呭鍚�" prop="name">
+ <el-input v-model="form.name" />
</el-form-item>
</el-col>
<el-col :span="8">
- <el-form-item label="鎬у埆" prop="gender">
- <el-select
- v-model="form.gender"
- :disabled="!isEdit"
- style="width: 100%"
- >
- <el-option label="鐢�" value="0" />
- <el-option label="濂�" value="1" />
+ <el-form-item label="鎬у埆" prop="sex">
+ <el-select v-model="form.sex" style="width: 100%">
+ <el-option label="鐢�" value="1" />
+ <el-option label="濂�" value="2" />
</el-select>
</el-form-item>
</el-col>
@@ -43,91 +39,158 @@
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="骞撮緞" prop="age">
- <el-input v-model="form.age" :readonly="!isEdit" />
+ <el-input v-model="form.age" />
</el-form-item>
</el-col>
<el-col :span="8">
- <el-form-item label="鐤剧梾璇婃柇" prop="diagnosis">
- <el-input v-model="form.diagnosis" :readonly="!isEdit" />
+ <el-form-item label="鐤剧梾璇婃柇" prop="diagnosisname">
+ <el-input v-model="form.diagnosisname" />
</el-form-item>
</el-col>
<el-col :span="8">
- <el-form-item label="鎵�鍦ㄥ尰鐤楁満鏋�" prop="hospitalName">
- <el-input v-model="form.hospitalName" :readonly="!isEdit" />
+ <el-form-item label="鎵�鍦ㄥ尰鐤楁満鏋�" prop="treatmenthospitalname">
+ <el-input v-model="form.treatmenthospitalname" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
- <el-form-item label="鍗忚皟鍛�1" prop="coordinator1">
- <el-input v-model="form.coordinator1" :readonly="!isEdit" />
+ <el-form-item label="鍗忚皟鍛�1" prop="coordinatedusernameo">
+ <el-input v-model="form.coordinatedusernameo" />
</el-form-item>
</el-col>
<el-col :span="8">
- <el-form-item label="鍗忚皟鍛�2" prop="coordinator2">
- <el-input v-model="form.coordinator2" :readonly="!isEdit" />
+ <el-form-item label="鍗忚皟鍛�2" prop="coordinatedusernamet">
+ <el-input v-model="form.coordinatedusernamet" />
</el-form-item>
</el-col>
<el-col :span="8">
- <el-form-item label="涓氬姟浜哄憳" prop="assignee">
- <el-input v-model="form.assignee" :readonly="!isEdit" />
+ <el-form-item label="涓氬姟浜哄憳" prop="responsibleusername">
+ <el-input v-model="form.responsibleusername" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
- <el-col :span="8">
- <el-form-item label="纭鐘舵��" prop="confirmationStatus">
+ <!-- <el-col :span="8">
+ <el-form-item label="纭鐘舵��" prop="relativeconfirmationsign">
<el-select
- v-model="form.confirmationStatus"
-
+ v-model="form.relativeconfirmationsign"
style="width: 100%"
+
>
<el-option label="鏈‘璁�" value="0" />
<el-option label="瀹跺睘纭" value="1" />
<el-option label="涓嶅悓鎰忔崘鐚�" value="2" />
</el-select>
</el-form-item>
- </el-col>
+ </el-col> -->
<el-col :span="8">
- <el-form-item label="纭鏃堕棿" prop="confirmationTime">
+ <el-form-item label="绛惧瓧鏃堕棿" prop="signdate">
<el-date-picker
- v-model="form.confirmationTime"
+ v-model="form.signdate"
type="datetime"
- value-format="yyyy-MM-dd HH:mm:ss"
+ value-format="yyyy-MM-dd"
style="width: 100%"
+ />
+ </el-form-item>
+ </el-col>
+ <!-- <el-col :span="8">
+ <el-form-item label="琛�鍨�" prop="bloodtype">
+ <el-input v-model="form.bloodtype" />
+ </el-form-item>
+ </el-col> -->
+ </el-row>
+ <!-- <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="璇佷欢鍙风爜" prop="idcardno">
+ <el-input v-model="form.idcardno" />
+ </el-form-item>
+ </el-col>
+ </el-row> -->
+
+ <!-- 浜插睘淇℃伅 -->
+ <!-- 浜插睘淇℃伅 -->
+ <el-divider content-position="left">浜插睘纭淇℃伅</el-divider>
+
+ <el-row :gutter="20">
+ <el-col :span="6">
+ <el-form-item label="浜插睘濮撳悕" prop="relativeconfirmationsignname">
+ <el-input
+ v-model="form.relativeconfirmationsignname"
+ placeholder="璇疯緭鍏ヤ翰灞炲鍚�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="涓庢崘璧犺�呭叧绯�" prop="familyrelations">
+ <el-select
+ v-model="form.familyrelations"
+ placeholder="璇烽�夋嫨涓庢崘璧犺�呭叧绯�"
+ >
+ <el-option
+ v-for="dict in dict.type.sys_FamilyRelation || []"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ ></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="浜插睘韬唤璇�" prop="relativeidcardno">
+ <el-input
+ v-model="form.relativeidcardno"
+ placeholder="璇疯緭鍏ヤ翰灞炶瘉浠跺彿鐮�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="浜插睘鐢佃瘽" prop="relativephone">
+ <el-input
+ v-model="form.relativephone"
+ placeholder="璇疯緭鍏ヤ翰灞炶仈绯荤數璇�"
/>
</el-form-item>
</el-col>
</el-row>
- <el-form-item label="瀹跺睘鎰忚澶囨敞" prop="familyRemark">
+ <el-row>
+ <el-form-item label-width="100px" label="鎹愮尞鍐冲畾">
+ <el-checkbox-group v-model="organdecision">
+ <el-checkbox
+ v-for="item in organselection"
+ :key="item"
+ :label="item"
+ >{{ item }}
+ </el-checkbox>
+ </el-checkbox-group>
+ <el-input
+ v-if="organdecision.includes('鍏朵粬')"
+ v-model="organdecisionOther"
+ placeholder="璇疯緭鍏ュ叾浠栨崘鐚喅瀹氱殑鍏蜂綋鍐呭"
+ style="margin-top: 10px; width: 300px;"
+ ></el-input>
+ </el-form-item>
+ </el-row>
+
+ <el-form-item label="瀹跺睘鎰忚澶囨敞" prop="relativeRemark">
<el-input
type="textarea"
:rows="3"
- v-model="form.familyRemark"
- :readonly="!isEdit"
+ v-model="form.relativeRemark"
placeholder="璁板綍瀹跺睘鐨勬剰瑙佸拰娌熼�氭儏鍐�"
/>
</el-form-item>
</el-form>
</el-card>
- <!-- 闄勪欢鍒楄〃 -->
+ <!-- 闄勪欢淇℃伅 - 鎸夌被鍨嬪垎绫� -->
<el-card class="attachment-card">
<div slot="header" class="clearfix">
<span class="detail-title">鐩稿叧闄勪欢涓婁紶</span>
- <el-button
- v-if="isEdit"
- type="primary"
- size="mini"
- @click="handleSaveAll"
- :loading="saveLoading"
- >
- 淇濆瓨鎵�鏈夐檮浠�
- </el-button>
</div>
<!-- 闄勪欢绫诲瀷閫夐」鍗� -->
@@ -138,8 +201,8 @@
:label="type.label"
:name="type.value"
>
- <div class="attachment-upload-section">
- <div class="upload-header">
+ <div class="attachment-section">
+ <div class="attachment-header">
<span class="upload-title">{{ type.label }}</span>
<el-tooltip content="鐐瑰嚮涓婁紶璇ョ被鍨嬮檮浠�" placement="top">
<el-button
@@ -147,97 +210,87 @@
type="primary"
icon="el-icon-plus"
@click="openUploadDialog(type.value)"
- :disabled="!isEdit"
>
娣诲姞闄勪欢
</el-button>
</el-tooltip>
</div>
- <!-- 闄勪欢鍒楄〃 -->
- <el-table
- :data="getAttachmentsByType(type.value)"
- v-loading="attachmentLoading"
- style="width: 100%; margin-top: 15px;"
- >
- <el-table-column label="鏂囦欢鍚嶇О" min-width="200">
- <template slot-scope="scope">
- <div class="file-info">
+ <!-- 褰撳墠绫诲瀷鐨勯檮浠跺垪琛� -->
+ <div class="attachment-list">
+ <el-table
+ :data="getAttachmentsByType(type.value)"
+ size="small"
+ v-loading="attachmentLoading"
+ style="width: 100%;"
+ >
+ <el-table-column label="鏂囦欢鍚�" min-width="200">
+ <template slot-scope="scope">
<i
class="el-icon-document"
- style="margin-right: 8px; color: #409EFF;"
+ style="color: #409EFF; margin-right: 8px;"
></i>
- <span>{{ scope.row.fileName }}</span>
- </div>
- </template>
- </el-table-column>
+ <span class="file-name">{{ scope.row.fileName }}</span>
+ </template>
+ </el-table-column>
- <el-table-column label="鏂囦欢澶у皬" width="100" align="center">
- <template slot-scope="scope">
- <span>{{ formatFileSize(scope.row.fileSize) }}</span>
- </template>
- </el-table-column>
+ <el-table-column label="鏂囦欢绫诲瀷" width="100" align="center">
+ <template slot-scope="scope">
+ <el-tag size="small">{{
+ getFileType(scope.row.fileName)
+ }}</el-tag>
+ </template>
+ </el-table-column>
- <el-table-column label="涓婁紶鏃堕棿" width="160" align="center">
- <template slot-scope="scope">
- <span>{{ parseTime(scope.row.uploadTime) }}</span>
- </template>
- </el-table-column>
+ <el-table-column label="鏂囦欢澶у皬" width="100" align="center">
+ <template slot-scope="scope">
+ <span>{{ formatFileSize(scope.row.fileSize) }}</span>
+ </template>
+ </el-table-column>
- <el-table-column label="涓婁紶浜�" width="100" align="center">
- <template slot-scope="scope">
- <span>{{ scope.row.uploader }}</span>
- </template>
- </el-table-column>
+ <el-table-column label="涓婁紶鏃堕棿" width="160" align="center">
+ <template slot-scope="scope">
+ <span>{{ formatDateTime(scope.row.uploadTime) }}</span>
+ </template>
+ </el-table-column>
- <el-table-column
- label="鎿嶄綔"
- width="120"
- align="center"
- v-if="isEdit"
+ <el-table-column label="鎿嶄綔" width="150" align="center">
+ <template slot-scope="scope">
+ <el-button
+ size="mini"
+ type="primary"
+ @click="handlePreview(scope.row)"
+ >
+ 棰勮
+ </el-button>
+ <el-button
+ size="mini"
+ type="danger"
+ @click="handleRemoveAttachment(type.value, scope.$index)"
+ >
+ 鍒犻櫎
+ </el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <!-- 绌虹姸鎬佹彁绀� -->
+ <div
+ v-if="getAttachmentsByType(type.value).length === 0"
+ class="empty-attachment"
>
- <template slot-scope="scope">
- <el-button
- size="mini"
- type="text"
- icon="el-icon-view"
- @click="handlePreview(scope.row)"
- >棰勮</el-button
- >
- <el-button
- size="mini"
- type="text"
- icon="el-icon-delete"
- style="color: #F56C6C;"
- @click="handleRemoveAttachment(scope.row, type.value)"
- >鍒犻櫎</el-button
- >
- </template>
- </el-table-column>
-
- <el-table-column label="鎿嶄綔" width="80" align="center" v-else>
- <template slot-scope="scope">
- <el-button
- size="mini"
- type="text"
- icon="el-icon-view"
- @click="handlePreview(scope.row)"
- >棰勮</el-button
- >
- </template>
- </el-table-column>
- </el-table>
-
- <div
- v-if="getAttachmentsByType(type.value).length === 0"
- class="empty-attachment"
- >
- <el-empty description="鏆傛棤闄勪欢" :image-size="80"></el-empty>
+ <el-empty
+ :description="`鏆傛棤${type.label}闄勪欢`"
+ :image-size="80"
+ ></el-empty>
+ </div>
</div>
</div>
</el-tab-pane>
</el-tabs>
</el-card>
+
+ <!-- 涓婁紶瀵硅瘽妗� -->
<el-dialog
:title="`涓婁紶${getCurrentTypeLabel}闄勪欢`"
:visible.sync="uploadDialogVisible"
@@ -276,17 +329,27 @@
</el-button>
</span>
</el-dialog>
+
+ <!-- 鏂囦欢棰勮寮圭獥 -->
+ <FilePreviewDialog
+ :visible="previewVisible"
+ :file="currentPreviewFile"
+ @close="previewVisible = false"
+ @download="handleDownload"
+ />
</div>
</template>
<script>
-import {
- getConfirmationDetail,
- updateConfirmation
-} from "./mockConfirmationApi";
+import { relativesList, relativesEdit } from "@/api/businessApi";
+import FilePreviewDialog from "@/components/FilePreviewDialog";
export default {
name: "ConfirmationDetail",
+ components: {
+ FilePreviewDialog
+ },
+ dicts: ["sys_FamilyRelation"],
data() {
return {
// 鏄惁缂栬緫妯″紡
@@ -294,28 +357,53 @@
// 琛ㄥ崟鏁版嵁
form: {
id: undefined,
+ infoid: undefined,
caseNo: "",
- donorName: "",
- gender: "",
+ name: "",
+ sex: "",
age: "",
- diagnosis: "",
- hospitalName: "",
- coordinator1: "",
- coordinator2: "",
- assignee: "",
- confirmationStatus: "0",
- confirmationTime: "",
- familyRemark: ""
+ diagnosisname: "",
+ treatmenthospitalname: "",
+ coordinatedusernameo: "",
+ coordinatedusernamet: "",
+ responsibleusername: "",
+ relativeconfirmationsign: "0",
+ signdate: "",
+ relativeconfirmationsignname: "",
+ familyrelations: "",
+ relativeidcardno: "",
+ relativephone: "",
+ relativeRemark: "",
+ assessannex: "" // JSON瀛楃涓插瓨鍌ㄦ墍鏈夐檮浠�
},
- // 闄勪欢鍒楄〃
+ organdecision: [],
+ organdecisionOther: "",
+ organselection: [
+ "鑲濊剰",
+ "鍙岃偩",
+ "宸﹁偩",
+ "鍙宠偩",
+ "蹇冭剰",
+ "鑲鸿剰",
+ "鑳拌吅",
+ "灏忚偁",
+ "鍙岀溂缁勭粐",
+ "閬椾綋",
+ "鍏朵粬"
+ ],
+ // 鍔犺浇鐘舵��
+ loading: false,
+ saveLoading: false,
// 闄勪欢鐩稿叧鏁版嵁
activeAttachmentType: "1",
attachmentLoading: false,
uploadDialogVisible: false,
uploadLoading: false,
- saveLoading: false,
tempFileList: [],
currentUploadType: "",
+ // 棰勮鐩稿叧
+ previewVisible: false,
+ currentPreviewFile: null,
// 闄勪欢绫诲瀷瀹氫箟
attachmentTypes: [
@@ -327,36 +415,18 @@
{ value: "6", label: "蹇冩浜″垽瀹氱煡鎯呭悓鎰忎功" }
],
- // 闄勪欢鍒楄〃鏁版嵁
- attachmentList: [
- // 妯℃嫙鏁版嵁 - 瀹為檯椤圭洰涓粠鎺ュ彛鑾峰彇
- {
- id: 1,
- type: "1",
- typeName: "浜轰綋鍣ㄥ畼娼滃湪鎹愮尞鑰呯櫥璁拌〃",
- fileName: "娼滃湪鎹愮尞鑰呯櫥璁拌〃_202512001.pdf",
- fileSize: 2548321,
- uploadTime: "2025-12-01 10:30:00",
- uploader: "寮犱笁",
- fileUrl: "/attachments/1.pdf"
- },
- {
- id: 2,
- type: "1",
- typeName: "浜轰綋鍣ㄥ畼娼滃湪鎹愮尞鑰呯櫥璁拌〃",
- fileName: "琛ュ厖璇存槑.docx",
- fileSize: 512345,
- uploadTime: "2025-12-01 14:20:00",
- uploader: "鏉庡洓",
- fileUrl: "/attachments/2.docx"
- }
- ]
+ // 闄勪欢鏁版嵁缁撴瀯 - 鎸夌被鍨嬪垎寮�瀛樺偍
+ attachmentData: {
+ "1": [], // 绫诲瀷1鐨勯檮浠跺垪琛�
+ "2": [],
+ "3": [],
+ "4": [],
+ "5": [],
+ "6": []
+ }
};
},
computed: {
- isEdit() {
- return this.$route.query.confirm === "true";
- },
getCurrentTypeLabel() {
const type = this.attachmentTypes.find(
t => t.value === this.currentUploadType
@@ -365,113 +435,119 @@
}
},
created() {
- const id = this.$route.query.id;
+ const infoid = this.$route.query.infoid;
this.isEdit = this.$route.query.confirm === "true";
- if (id) {
- this.getDetail(id);
+ if (infoid) {
+ this.getDetail(infoid);
}
- this.getAttachmentList();
},
methods: {
// 鑾峰彇璇︽儏
- getDetail(id) {
- getConfirmationDetail(id).then(response => {
+ async getDetail(infoid) {
+ this.loading = true;
+ try {
+ const response = await relativesList({ infoid });
+
if (response.code === 200) {
- this.form = response.data;
+ this.handleDetailData(response);
+ } else {
+ this.$message.error("鑾峰彇璇︽儏澶辫触锛�" + (response.msg || "鏈煡閿欒"));
}
- });
+ } catch (error) {
+ console.error("鑾峰彇鎹愮尞纭璇︽儏澶辫触:", error);
+ this.$message.error("鑾峰彇璇︽儏澶辫触");
+ } finally {
+ this.loading = false;
+ }
},
- // 鑾峰彇闄勪欢鍒楄〃
- getAttachmentList() {
- this.attachmentLoading = true;
- // 妯℃嫙闄勪欢鏁版嵁
- this.attachmentList = [
- {
- id: 1,
- type: "1",
- typeName: "浜轰綋鍣ㄥ畼娼滃湪鎹愮尞鑰呯櫥璁拌〃",
- fileName: "娼滃湪鎹愮尞鑰呯櫥璁拌〃_202512001.pdf",
- uploadTime: "2025-12-01 10:30:00",
- uploader: "寮犱笁",
- fileSize: "2.5MB",
- fileUrl: "/attachments/1.pdf"
- },
- {
- id: 2,
- type: "2",
- typeName: "浜轰綋鍣ㄥ畼鎹愮尞浜插睘纭鐧昏琛�",
- fileName: "浜插睘纭鐧昏琛╛202512001.pdf",
- uploadTime: "2025-12-01 14:20:00",
- uploader: "鏉庡洓",
- fileSize: "1.8MB",
- fileUrl: "/attachments/2.pdf"
- },
- {
- id: 3,
- type: "3",
- typeName: "鎹愮尞鑰呭強鐩寸郴浜插睘韬唤璇併�佹埛鍙g翱鐩稿叧璇佹槑",
- fileName: "韬唤璇佹槑_202512001.zip",
- uploadTime: "2025-12-01 16:45:00",
- uploader: "鐜嬩簲",
- fileSize: "5.2MB",
- fileUrl: "/attachments/3.zip"
- },
- {
- id: 4,
- type: "4",
- typeName: "鍏皯韬晠鍚庝汉浣撳櫒瀹橈紙瑙掕啘锛夐仐浣撴崘鐚憡鐭ヤ功",
- fileName: "鎹愮尞鍛婄煡涔202512001.pdf",
- uploadTime: "2025-12-02 09:15:00",
- uploader: "寮犱笁",
- fileSize: "1.2MB",
- fileUrl: "/attachments/4.pdf"
- },
- {
- id: 5,
- type: "5",
- typeName: "鑴戞浜″垽瀹氱煡鎯呭悓鎰忎功",
- fileName: "鑴戞浜″垽瀹氬悓鎰忎功_202512001.pdf",
- uploadTime: "2025-12-02 11:30:00",
- uploader: "鏉庡洓",
- fileSize: "0.8MB",
- fileUrl: "/attachments/5.pdf"
- },
- {
- id: 6,
- type: "6",
- typeName: "蹇冩浜″垽瀹氱煡鎯呭悓鎰忎功",
- fileName: "蹇冩浜″垽瀹氬悓鎰忎功_202512001.pdf",
- uploadTime: "2025-12-02 13:20:00",
- uploader: "鐜嬩簲",
- fileSize: "0.9MB",
- fileUrl: "/attachments/6.pdf"
+
+ // 澶勭悊璇︽儏鏁版嵁
+ handleDetailData(response) {
+ let detailData = null;
+
+ // 鏍规嵁鎺ュ彛瀹為檯杩斿洖鐨勬暟鎹粨鏋勮繘琛岃皟鏁�
+ if (response.data) {
+ if (Array.isArray(response.data)) {
+ detailData = response.data[0] || {};
+ } else if (response.data.rows && Array.isArray(response.data.rows)) {
+ detailData = response.data.rows[0] || {};
+ } else if (Array.isArray(response.data.list)) {
+ detailData = response.data.list[0] || {};
+ } else {
+ detailData = response.data;
}
- ];
- this.attachmentLoading = false;
+ } else {
+ detailData = response;
+ }
+
+ // 鏄犲皠瀛楁鍒拌〃鍗�
+ this.form = {
+ ...this.form,
+ id: detailData.id || this.$route.query.id,
+ infoid: detailData.infoid || infoid,
+ caseNo: detailData.caseNo || "",
+ name: detailData.name || "",
+ sex: detailData.sex || "",
+ age: detailData.age || "",
+ diagnosisname: detailData.diagnosisname || "",
+ treatmenthospitalname: detailData.treatmenthospitalname || "",
+ coordinatedusernameo: detailData.coordinatedusernameo || "",
+ coordinatedusernamet: detailData.coordinatedusernamet || "",
+ responsibleusername: detailData.responsibleusername || "",
+ relativeconfirmationsign: detailData.relativeconfirmationsign || "0",
+ signdate: detailData.signdate,
+ relativeconfirmationsignname:
+ detailData.relativeconfirmationsignname || "",
+ familyrelations: detailData.familyrelations || "",
+ relativeidcardno: detailData.relativeidcardno || "",
+ relativephone: detailData.relativephone || "",
+ relativeRemark: detailData.relativeRemark || "",
+ assessannex: detailData.assessannex || ""
+ };
+
+ // 澶勭悊鎹愮尞鍐冲畾鏁版嵁
+ if (detailData.organdecision) {
+ this.organdecision = Array.isArray(detailData.organdecision)
+ ? detailData.organdecision
+ : detailData.organdecision.split(",");
+ }
+
+ // 澶勭悊闄勪欢鏁版嵁 - 浠巃ssessannex瀛楁瑙f瀽JSON骞舵寜绫诲瀷鍒嗙被
+ this.processAssessannexData();
},
- // 涓嬭浇闄勪欢
- handleDownload(row) {
- // 瀹為檯椤圭洰涓繖閲岃皟鐢ㄦ枃浠朵笅杞芥帴鍙�
- this.$message.success(`涓嬭浇鏂囦欢: ${row.fileName}`);
- console.log("涓嬭浇鏂囦欢:", row.fileUrl);
- },
- // 淇濆瓨纭淇℃伅
- handleSave() {
- this.$refs.form.validate(valid => {
- if (valid) {
- updateConfirmation(this.form).then(response => {
- if (response.code === 200) {
- this.$message.success("淇濆瓨鎴愬姛");
- this.isEdit = false;
- this.$router.push("/case/confirmation");
- }
+
+ // 澶勭悊assessannex瀛楁鏁版嵁骞舵寜绫诲瀷鍒嗙被
+ processAssessannexData() {
+ if (this.form.assessannex) {
+ try {
+ const annexData =
+ typeof this.form.assessannex === "string"
+ ? JSON.parse(this.form.assessannex)
+ : this.form.assessannex;
+
+ // 娓呯┖鐜版湁鏁版嵁
+ Object.keys(this.attachmentData).forEach(key => {
+ this.attachmentData[key] = [];
});
+
+ // 鎸夌被鍨嬪垎绫诲瓨鍌�
+ if (Array.isArray(annexData)) {
+ annexData.forEach(attachment => {
+ const type = attachment.type || "1"; // 榛樿鍒扮涓�绉嶇被鍨�
+ if (this.attachmentData[type]) {
+ this.attachmentData[type].push(attachment);
+ }
+ });
+ }
+ } catch (error) {
+ console.warn("assessannex鏁版嵁瑙f瀽澶辫触:", error);
}
- });
+ }
},
- // 鏍规嵁绫诲瀷鑾峰彇闄勪欢
+
+ // 鏍规嵁绫诲瀷鑾峰彇闄勪欢鍒楄〃
getAttachmentsByType(type) {
- return this.attachmentList.filter(item => item.type === type);
+ return this.attachmentData[type] || [];
},
// 鎵撳紑涓婁紶瀵硅瘽妗�
@@ -486,35 +562,38 @@
});
},
- // 涓婁紶鍓嶆牎楠�
+ // 涓婁紶鍓嶆牎楠孾7](@ref)
beforeUpload(file) {
const allowedTypes = [
- 'application/pdf',
- 'image/jpeg',
- 'image/png',
- 'application/msword',
- 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
+ "application/pdf",
+ "image/jpeg",
+ "image/png",
+ "application/msword",
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
];
const maxSize = 10 * 1024 * 1024; // 10MB
// 鏍¢獙鏂囦欢绫诲瀷
- const isTypeOk = allowedTypes.includes(file.type) ||
- file.name.endsWith('.pdf') ||
- file.name.endsWith('.jpg') ||
- file.name.endsWith('.jpeg') ||
- file.name.endsWith('.png') ||
- file.name.endsWith('.doc') ||
- file.name.endsWith('.docx');
+ const isTypeOk =
+ allowedTypes.includes(file.type) ||
+ file.name.endsWith(".pdf") ||
+ file.name.endsWith(".jpg") ||
+ file.name.endsWith(".jpeg") ||
+ file.name.endsWith(".png") ||
+ file.name.endsWith(".doc") ||
+ file.name.endsWith(".docx");
if (!isTypeOk) {
- this.$message.error('鏂囦欢鏍煎紡涓嶆敮鎸侊紝璇蜂笂浼爌df銆乯pg銆乸ng銆乨oc鎴杁ocx鏍煎紡鏂囦欢');
+ this.$message.error(
+ "鏂囦欢鏍煎紡涓嶆敮鎸侊紝璇蜂笂浼爌df銆乯pg銆乸ng銆乨oc鎴杁ocx鏍煎紡鏂囦欢"
+ );
return false;
}
// 鏍¢獙鏂囦欢澶у皬
if (file.size > maxSize) {
- this.$message.error('鏂囦欢澶у皬涓嶈兘瓒呰繃10MB');
+ this.$message.error("鏂囦欢澶у皬涓嶈兘瓒呰繃10MB");
return false;
}
@@ -533,25 +612,29 @@
// 鑷畾涔変笂浼犺姹�
handleHttpRequest(options) {
- // 妯℃嫙涓婁紶杩囩▼
return new Promise((resolve, reject) => {
this.uploadLoading = true;
- // 妯℃嫙涓婁紶寤惰繜
+ // 妯℃嫙涓婁紶杩囩▼
setTimeout(() => {
const newAttachment = {
id: Date.now(),
- type: this.currentUploadType,
- typeName: this.getCurrentTypeLabel,
fileName: options.file.name,
+ fileUrl: URL.createObjectURL(options.file),
fileSize: options.file.size,
+ fileType: this.getFileExtension(options.file.name),
+ type: this.currentUploadType, // 璁板綍闄勪欢绫诲瀷
uploadTime: new Date().toISOString(),
- uploader: '褰撳墠鐢ㄦ埛', // 瀹為檯椤圭洰涓粠鐢ㄦ埛淇℃伅鑾峰彇
- fileUrl: URL.createObjectURL(options.file) // 涓存椂URL锛屽疄闄呴」鐩腑涓烘湇鍔″櫒杩斿洖鐨刄RL
+ uploader: "褰撳墠鐢ㄦ埛"
};
- this.attachmentList.push(newAttachment);
+ // 娣诲姞鍒板搴旂被鍨嬬殑闄勪欢鍒楄〃
+ if (this.attachmentData[this.currentUploadType]) {
+ this.attachmentData[this.currentUploadType].push(newAttachment);
+ }
+
this.uploadLoading = false;
+ this.updateAssessannexField(); // 鏇存柊瀛樺偍瀛楁
resolve({ code: 200, data: newAttachment });
}, 1500);
});
@@ -560,90 +643,184 @@
// 鎻愪氦涓婁紶
async submitUpload() {
if (this.tempFileList.length === 0) {
- this.$message.warning('璇峰厛閫夋嫨瑕佷笂浼犵殑鏂囦欢');
+ this.$message.warning("璇峰厛閫夋嫨瑕佷笂浼犵殑鏂囦欢");
return;
}
try {
- // 渚濇涓婁紶鎵�鏈夋枃浠�
for (const file of this.tempFileList) {
await this.$refs.uploadRef.submit();
}
- this.$message.success('鏂囦欢涓婁紶鎴愬姛');
+ this.$message.success("鏂囦欢涓婁紶鎴愬姛");
this.uploadDialogVisible = false;
this.tempFileList = [];
} catch (error) {
- this.$message.error('鏂囦欢涓婁紶澶辫触');
- console.error('涓婁紶澶辫触:', error);
+ this.$message.error("鏂囦欢涓婁紶澶辫触");
+ console.error("涓婁紶澶辫触:", error);
}
},
// 鍒犻櫎闄勪欢
- handleRemoveAttachment(attachment, type) {
- this.$confirm('纭畾瑕佸垹闄よ繖涓檮浠跺悧锛�', '鎻愮ず', {
- confirmButtonText: '纭畾',
- cancelButtonText: '鍙栨秷',
- type: 'warning'
- }).then(() => {
- const index = this.attachmentList.findIndex(item => item.id === attachment.id);
- if (index !== -1) {
- this.attachmentList.splice(index, 1);
- this.$message.success('闄勪欢鍒犻櫎鎴愬姛');
-
- // 瀹為檯椤圭洰涓皟鐢ㄥ垹闄ゆ帴鍙�
- // this.deleteAttachment(attachment.id);
- }
- }).catch(() => {});
+ handleRemoveAttachment(type, index) {
+ this.$confirm("纭畾瑕佸垹闄よ繖涓檮浠跺悧锛�", "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ })
+ .then(() => {
+ if (this.attachmentData[type] && this.attachmentData[type][index]) {
+ this.attachmentData[type].splice(index, 1);
+ this.$message.success("闄勪欢鍒犻櫎鎴愬姛");
+ this.updateAssessannexField(); // 鏇存柊瀛樺偍瀛楁
+ }
+ })
+ .catch(() => {});
},
- // 棰勮闄勪欢
- handlePreview(attachment) {
- // 瀹為檯椤圭洰涓牴鎹枃浠剁被鍨嬭皟鐢ㄤ笉鍚岀殑棰勮鏂瑰紡
- if (attachment.fileName.endsWith('.pdf')) {
- // PDF棰勮
- window.open(attachment.fileUrl, '_blank');
- } else if (attachment.fileName.match(/\.(jpg|jpeg|png)$/i)) {
- // 鍥剧墖棰勮
- this.$alert(`<img src="${attachment.fileUrl}" style="max-width: 100%;" alt="${attachment.fileName}">`,
- '鍥剧墖棰勮', {
- dangerouslyUseHTMLString: true,
- customClass: 'image-preview-dialog'
- });
+ // 鏇存柊assessannex瀛樺偍瀛楁
+ updateAssessannexField() {
+ // 灏嗘墍鏈夌被鍨嬬殑闄勪欢鍚堝苟涓轰竴涓暟缁�
+ const allAttachments = [];
+ Object.values(this.attachmentData).forEach(attachments => {
+ allAttachments.push(...attachments);
+ });
+
+ // 鏇存柊鍒拌〃鍗曞瓧娈�
+ this.form.assessannex = JSON.stringify(allAttachments);
+ },
+
+ // 鏂囦欢棰勮
+ handlePreview(file) {
+ this.currentPreviewFile = {
+ fileName: file.fileName,
+ fileUrl: file.fileUrl,
+ fileType: this.getFileType(file.fileName)
+ };
+ this.previewVisible = true;
+ },
+
+ // 鏂囦欢涓嬭浇
+ handleDownload(file) {
+ const fileUrl = file.fileUrl;
+ const fileName = file.fileName;
+
+ if (fileUrl) {
+ const link = document.createElement("a");
+ link.href = fileUrl;
+ link.download = fileName;
+ link.style.display = "none";
+ document.body.appendChild(link);
+ link.click();
+ document.body.removeChild(link);
+ this.$message.success("寮�濮嬩笅杞芥枃浠�");
} else {
- // 鍏朵粬鏂囦欢绫诲瀷鎻愮ず涓嬭浇
- this.$message.info('璇ユ枃浠剁被鍨嬫殏涓嶆敮鎸佸湪绾块瑙堬紝璇蜂笅杞藉悗鏌ョ湅');
+ this.$message.warning("鏂囦欢璺緞涓嶅瓨鍦紝鏃犳硶涓嬭浇");
}
},
- // 淇濆瓨鎵�鏈夐檮浠朵俊鎭�
- handleSaveAll() {
- this.saveLoading = true;
+ // 鑾峰彇鏂囦欢绫诲瀷
+ getFileType(fileName) {
+ if (!fileName) return "other";
+ const extension = this.getFileExtension(fileName);
+ const imageTypes = ["jpg", "jpeg", "png"];
+ const pdfTypes = ["pdf"];
+ const officeTypes = ["doc", "docx"];
- // 妯℃嫙淇濆瓨杩囩▼
- setTimeout(() => {
- this.$message.success('闄勪欢淇℃伅淇濆瓨鎴愬姛');
- this.saveLoading = false;
+ if (imageTypes.includes(extension)) return "image";
+ if (pdfTypes.includes(extension)) return "pdf";
+ if (officeTypes.includes(extension)) return "office";
+ return "other";
+ },
- // 瀹為檯椤圭洰涓皟鐢ㄤ繚瀛樻帴鍙�
- // this.saveAttachments();
- }, 1000);
+ // 鑾峰彇鏂囦欢鎵╁睍鍚�
+ getFileExtension(filename) {
+ return filename
+ .split(".")
+ .pop()
+ .toLowerCase();
},
// 鏂囦欢澶у皬鏍煎紡鍖�
formatFileSize(size) {
- if (size === 0) return '0 B';
+ if (!size) return "0 B";
const k = 1024;
- const sizes = ['B', 'KB', 'MB', 'GB'];
+ const sizes = ["B", "KB", "MB", "GB"];
const i = Math.floor(Math.log(size) / Math.log(k));
- return parseFloat((size / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
+ return parseFloat((size / Math.pow(k, i)).toFixed(2)) + " " + sizes[i];
},
- // 鏃堕棿鏍煎紡鍖�
- parseTime(time) {
- if (!time) return '';
- const date = new Date(time);
- return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')} ${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}`;
+ // 鏃ユ湡鏃堕棿鏍煎紡鍖�
+ formatDateTime(dateTime) {
+ if (!dateTime) return "";
+ try {
+ const date = new Date(dateTime);
+ if (isNaN(date.getTime())) return dateTime;
+
+ const year = date.getFullYear();
+ const month = String(date.getMonth() + 1).padStart(2, "0");
+ const day = String(date.getDate()).padStart(2, "0");
+ const hours = String(date.getHours()).padStart(2, "0");
+ const minutes = String(date.getMinutes()).padStart(2, "0");
+
+ return `${year}-${month}-${day} ${hours}:${minutes}`;
+ } catch (error) {
+ return dateTime;
+ }
+ },
+
+ // 鑾峰彇褰撳墠鏃堕棿
+ getCurrentTime() {
+ const now = new Date();
+ return `${now.getFullYear()}-${(now.getMonth() + 1)
+ .toString()
+ .padStart(2, "0")}-${now
+ .getDate()
+ .toString()
+ .padStart(2, "0")} ${now
+ .getHours()
+ .toString()
+ .padStart(2, "0")}:${now
+ .getMinutes()
+ .toString()
+ .padStart(2, "0")}:${now
+ .getSeconds()
+ .toString()
+ .padStart(2, "0")}`;
+ },
+
+ // 淇濆瓨纭淇℃伅
+ async handleSave() {
+ try {
+ await this.$refs.form.validate();
+ this.saveLoading = true;
+
+ // 纭繚闄勪欢鏁版嵁鏄渶鏂扮殑
+ this.updateAssessannexField();
+
+ const saveData = {
+ ...this.form,
+ organdecision: this.organdecision.join(","),
+ organdecisionOther: this.organdecisionOther
+ // assessannex瀛楁宸插湪updateAssessannexField涓洿鏂�
+ };
+
+ const response = await relativesEdit(saveData);
+
+ if (response.code === 200) {
+ this.$message.success("淇濆瓨鎴愬姛");
+ this.$router.push("/case/confirmation");
+ } else {
+ this.$message.error("淇濆瓨澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+ }
+ } catch (error) {
+ if (error !== "cancel") {
+ console.error("淇濆瓨澶辫触:", error);
+ this.$message.error("淇濆瓨澶辫触");
+ }
+ } finally {
+ this.saveLoading = false;
+ }
}
}
};
@@ -665,37 +842,20 @@
.detail-title {
font-size: 16px;
font-weight: bold;
+ margin-right: 20px;
}
-.fixed-width .el-button {
- margin: 0 5px;
-}
-.confirmation-detail {
- padding: 20px;
+.attachment-section {
+ padding: 15px;
}
-.detail-card {
- margin-bottom: 20px;
-}
-
-.attachment-card {
- margin-bottom: 20px;
-}
-
-.detail-title {
- font-size: 16px;
- font-weight: bold;
-}
-
-.attachment-upload-section {
- padding: 10px;
-}
-
-.upload-header {
+.attachment-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
+ padding-bottom: 10px;
+ border-bottom: 1px solid #ebeef5;
}
.upload-title {
@@ -704,9 +864,8 @@
color: #303133;
}
-.file-info {
- display: flex;
- align-items: center;
+.attachment-list {
+ margin-top: 15px;
}
.empty-attachment {
@@ -715,13 +874,8 @@
color: #909399;
}
-/* 鍥剧墖棰勮瀵硅瘽妗嗘牱寮� */
-:deep(.image-preview-dialog) {
- width: auto;
- max-width: 90vw;
-}
-
-:deep(.image-preview-dialog .el-message-box__content) {
- text-align: center;
+.file-name {
+ font-size: 13px;
+ color: #606266;
}
</style>
diff --git a/src/views/business/affirm/index.vue b/src/views/business/affirm/index.vue
index 4a8afd3..a60d695 100644
--- a/src/views/business/affirm/index.vue
+++ b/src/views/business/affirm/index.vue
@@ -35,7 +35,7 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
- <el-form-item label="纭鐘舵��" prop="confirmationStatus">
+ <!-- <el-form-item label="纭鐘舵��" prop="confirmationStatus">
<el-select
v-model="queryParams.confirmationStatus"
placeholder="璇烽�夋嫨纭鐘舵��"
@@ -46,7 +46,7 @@
<el-option label="瀹跺睘纭" value="1" />
<el-option label="涓嶅悓鎰忔崘鐚�" value="2" />
</el-select>
- </el-form-item>
+ </el-form-item> -->
<el-form-item label="纭鏃堕棿" prop="confirmationTimeRange">
<el-date-picker
v-model="queryParams.confirmationTimeRange"
@@ -121,14 +121,14 @@
<el-table-column
label="娼滃湪鎹愮尞鑰呭鍚�"
align="center"
- prop="donorName"
+ prop="name"
width="120"
/>
- <el-table-column label="鎬у埆" align="center" prop="gender" width="80">
+ <el-table-column label="鎬у埆" align="center" prop="sex" width="80">
<template slot-scope="scope">
<dict-tag
:options="dict.type.sys_user_sex"
- :value="parseInt(scope.row.gender)"
+ :value="scope.row.sex"
/>
</template>
</el-table-column>
@@ -136,39 +136,47 @@
<el-table-column
label="鐤剧梾璇婃柇"
align="center"
- prop="diagnosis"
+ prop="diagnosisname"
min-width="180"
show-overflow-tooltip
/>
<el-table-column
label="鎵�鍦ㄥ尰鐤楁満鏋�"
align="center"
- prop="hospitalName"
+ prop="treatmenthospitalname"
+ width="150"
+ show-overflow-tooltip
+ />
+ <!-- <el-table-column
+ label="纭鐘舵��"
+ align="center"
+ prop="relativeconfirmationsign"
+ width="120"
+ >
+ <template slot-scope="scope">
+ <el-tag :type="statusFilter(scope.row.relativeconfirmationsign)">
+ {{ statusTextFilter(scope.row.relativeconfirmationsign) }}
+ </el-tag>
+ </template>
+ </el-table-column> -->
+
+ <el-table-column
+ label="瀹跺睘鎰忚"
+ align="center"
+ prop="relativeRemark"
width="150"
show-overflow-tooltip
/>
<el-table-column
- label="纭鐘舵��"
- align="center"
- prop="confirmationStatus"
- width="120"
- >
- <template slot-scope="scope">
- <el-tag :type="statusFilter(scope.row.confirmationStatus)">
- {{ statusTextFilter(scope.row.confirmationStatus) }}
- </el-tag>
- </template>
- </el-table-column>
- <el-table-column
label="纭鏃堕棿"
align="center"
- prop="confirmationTime"
+ prop="signdate"
width="120"
>
<template slot-scope="scope">
<span>{{
- scope.row.confirmationTime
- ? parseTime(scope.row.confirmationTime, "{y}-{m}-{d}")
+ scope.row.signdate
+ ? parseTime(scope.row.signdate, "{y}-{m}-{d}")
: "-"
}}</span>
</template>
@@ -176,19 +184,19 @@
<el-table-column
label="涓氬姟浜哄憳"
align="center"
- prop="assignee"
+ prop="responsibleusername"
width="100"
/>
<el-table-column
label="鍗忚皟鍛�1"
align="center"
- prop="coordinator1"
+ prop="coordinatedusernameo"
width="100"
/>
<el-table-column
label="鍗忚皟鍛�2"
align="center"
- prop="coordinator2"
+ prop="coordinatedusernamet"
width="100"
/>
<el-table-column
@@ -205,14 +213,14 @@
@click.stop="handleView(scope.row)"
>璇︽儏</el-button
>
- <el-button
- v-if="scope.row.confirmationStatus === '0'"
+ <!-- <el-button
+ v-if="scope.row.relativeconfirmationsign === '0'"
size="mini"
type="text"
icon="el-icon-edit"
@click.stop="handleConfirm(scope.row)"
>纭</el-button
- >
+ > -->
</template>
</el-table-column>
</el-table>
@@ -230,7 +238,7 @@
</template>
<script>
-import { listConfirmation, delConfirmation, exportConfirmation } from "./mockConfirmationApi";
+import { relativesList } from "@/api/businessApi";
import Pagination from "@/components/Pagination";
export default {
@@ -285,23 +293,102 @@
return statusMap[status] || "鏈煡";
},
// 鏌ヨ鎹愮尞纭鍒楄〃
- getList() {
+ async getList() {
this.loading = true;
- listConfirmation(this.queryParams)
- .then(response => {
- if (response.code === 200) {
- this.confirmationList = response.data.rows;
- this.total = response.data.total;
- } else {
- this.$message.error("鑾峰彇鏁版嵁澶辫触");
- }
- this.loading = false;
- })
- .catch(error => {
- console.error("鑾峰彇鎹愮尞纭鍒楄〃澶辫触:", error);
- this.loading = false;
- this.$message.error("鑾峰彇鏁版嵁澶辫触");
- });
+ try {
+ // 鏋勫缓鏌ヨ鍙傛暟锛屾槧灏勫埌鎺ュ彛瀛楁
+ const requestParams = this.buildRequestParams();
+
+ const response = await relativesList(requestParams);
+
+ if (response.code === 200) {
+ // 澶勭悊鎺ュ彛杩斿洖鐨勬暟鎹粨鏋�
+ this.handleResponseData(response);
+ } else {
+ this.$message.error("鑾峰彇鏁版嵁澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+ this.confirmationList = [];
+ this.total = 0;
+ }
+ } catch (error) {
+ console.error("鑾峰彇鎹愮尞纭鍒楄〃澶辫触:", error);
+ this.$message.error("鑾峰彇鏁版嵁澶辫触");
+ this.confirmationList = [];
+ this.total = 0;
+ } finally {
+ this.loading = false;
+ }
+ },
+ // 鏋勫缓璇锋眰鍙傛暟
+ buildRequestParams() {
+ const params = {
+ pageNum: this.queryParams.pageNum,
+ pageSize: this.queryParams.pageSize
+ };
+
+ // 鏄犲皠鏌ヨ鏉′欢鍒版帴鍙e瓧娈�
+ if (this.queryParams.donorName) {
+ params.name = this.queryParams.donorName;
+ }
+ if (this.queryParams.hospitalName) {
+ params.treatmenthospitalname = this.queryParams.hospitalName;
+ }
+ if (this.queryParams.assignee) {
+ params.responsibleusername = this.queryParams.assignee;
+ }
+ // if (this.queryParams.confirmationStatus) {
+ // params.relativeconfirmationsign = this.queryParams.confirmationStatus;
+ // }
+
+ // 澶勭悊鏃堕棿鑼冨洿鏌ヨ
+ if (
+ this.queryParams.confirmationTimeRange &&
+ this.queryParams.confirmationTimeRange.length === 2
+ ) {
+ params.startSignDate = this.queryParams.confirmationTimeRange[0];
+ params.endSignDate = this.queryParams.confirmationTimeRange[1];
+ }
+
+ return params;
+ },
+ // 澶勭悊鎺ュ彛鍝嶅簲鏁版嵁
+ handleResponseData(response) {
+ // 鏍规嵁鎺ュ彛瀹為檯杩斿洖鐨勬暟鎹粨鏋勮繘琛岃皟鏁�
+ if (response.data) {
+ if (Array.isArray(response.data)) {
+ // 濡傛灉杩斿洖鐨勬槸鏁扮粍
+ this.confirmationList = response.data;
+ this.total = response.data.length;
+ } else if (response.data.rows) {
+ // 濡傛灉杩斿洖鐨勬槸鍒嗛〉鏁版嵁缁撴瀯
+ this.confirmationList = response.data.rows;
+ this.total = response.data.total;
+ } else if (Array.isArray(response.data.list)) {
+ // 濡傛灉杩斿洖鐨勬槸list瀛楁
+ this.confirmationList = response.data.list;
+ this.total = response.data.total || response.data.list.length;
+ } else {
+ // 鍏朵粬鏁版嵁缁撴瀯锛屽皾璇曠洿鎺ヤ娇鐢╠ata
+ this.confirmationList = response.data;
+ this.total = response.total || response.data.length;
+ }
+ } else {
+ // 濡傛灉data涓虹┖锛屼娇鐢ㄦ牴绾у埆鐨剅ows鎴杔ist
+ if (Array.isArray(response.rows)) {
+ this.confirmationList = response.rows;
+ this.total = response.total;
+ } else if (Array.isArray(response.list)) {
+ this.confirmationList = response.list;
+ this.total = response.total;
+ } else {
+ this.confirmationList = [];
+ this.total = 0;
+ }
+ }
+
+ // 纭繚confirmationList鏄暟缁�
+ if (!Array.isArray(this.confirmationList)) {
+ this.confirmationList = [];
+ }
},
// 鎼滅储鎸夐挳鎿嶄綔
handleQuery() {
@@ -311,7 +398,8 @@
// 閲嶇疆鎸夐挳鎿嶄綔
resetQuery() {
this.$refs.queryForm.resetFields();
- this.handleQuery();
+ this.queryParams.pageNum = 1;
+ this.getList();
},
// 澶氶�夋閫変腑鏁版嵁
handleSelectionChange(selection) {
@@ -323,14 +411,14 @@
handleRowClick(row) {
this.$router.push({
path: "/case/affirmInfo",
- query: { id: row.id }
+ query: { id: row.id, infoid: row.infoid }
});
},
// 鏌ョ湅璇︽儏
handleView(row) {
this.$router.push({
path: "/case/affirmInfo",
- query: { id: row.id }
+ query: { id: row.id, infoid: row.infoid }
});
},
// 纭鎿嶄綔
@@ -346,6 +434,8 @@
},
// 淇敼鎸夐挳鎿嶄綔
handleUpdate() {
+ if (this.ids.length === 0) return;
+
const id = this.ids[0];
this.$router.push({
path: "/case/confirmation/edit",
@@ -353,56 +443,100 @@
});
},
// 鍒犻櫎鎸夐挳鎿嶄綔
- handleDelete() {
- const ids = this.ids;
- this.$confirm("鏄惁纭鍒犻櫎閫変腑鐨勬暟鎹」锛�", "璀﹀憡", {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning"
- })
- .then(() => {
- return delConfirmation(ids);
- })
- .then(response => {
- if (response.code === 200) {
- this.$message.success("鍒犻櫎鎴愬姛");
- this.getList();
- }
- })
- .catch(() => {});
+ async handleDelete() {
+ if (this.ids.length === 0) return;
+
+ try {
+ await this.$confirm("鏄惁纭鍒犻櫎閫変腑鐨勬暟鎹」锛�", "璀﹀憡", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ });
+
+ // 杩欓噷闇�瑕佽皟鐢ㄥ垹闄ゆ帴鍙o紝鐢变簬鎮ㄥ彧鎻愪緵浜唕elativesList鎺ュ彛锛岃繖閲屾殏鏃舵敞閲�
+ // 瀹為檯浣跨敤鏃堕渶瑕佽皟鐢ㄥ搴旂殑鍒犻櫎鎺ュ彛
+ // const response = await delConfirmation(this.ids);
+
+ // 妯℃嫙鍒犻櫎鎴愬姛
+ this.$message.success("鍒犻櫎鎴愬姛");
+ this.getList(); // 閲嶆柊鍔犺浇鏁版嵁
+ } catch (error) {
+ if (error !== "cancel") {
+ console.error("鍒犻櫎澶辫触:", error);
+ this.$message.error("鍒犻櫎澶辫触");
+ }
+ }
},
// 瀵煎嚭鎸夐挳鎿嶄綔
- handleExport() {
- const queryParams = this.queryParams;
- this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夌‘璁ゆ暟鎹紵", "璀﹀憡", {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning"
- })
- .then(() => {
- this.loading = true;
- return exportConfirmation(queryParams);
- })
- .then(response => {
- if (response.code === 200) {
- this.$message.success("瀵煎嚭鎴愬姛");
- // 瀹為檯椤圭洰涓繖閲屽鐞嗘枃浠朵笅杞�
- }
- this.loading = false;
- })
- .catch(() => {
- this.loading = false;
+ async handleExport() {
+ try {
+ await this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夌‘璁ゆ暟鎹紵", "璀﹀憡", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
});
+
+ this.loading = true;
+
+ // 鏋勫缓瀵煎嚭鍙傛暟
+ const exportParams = this.buildRequestParams();
+ exportParams.pageSize = 10000; // 瀵煎嚭鎵�鏈夋暟鎹�
+
+ // 鑾峰彇瀵煎嚭鏁版嵁
+ const response = await relativesList(exportParams);
+
+ if (response.code === 200) {
+ // 澶勭悊瀵煎嚭鏁版嵁
+ this.exportDataToExcel(response.data);
+ this.$message.success("瀵煎嚭鎴愬姛");
+ } else {
+ this.$message.error("瀵煎嚭澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+ }
+ } catch (error) {
+ if (error !== "cancel") {
+ console.error("瀵煎嚭澶辫触:", error);
+ this.$message.error("瀵煎嚭澶辫触");
+ }
+ } finally {
+ this.loading = false;
+ }
+ },
+ // 瀵煎嚭鏁版嵁鍒癊xcel
+ exportDataToExcel(data) {
+ // 杩欓噷瀹炵幇瀵煎嚭閫昏緫锛屽彲浠ヤ娇鐢▁lsx绛夊簱
+ // 鐢变簬鏄墠绔鍑猴紝杩欓噷绠�鍗曟紨绀�
+ console.log("瀵煎嚭鏁版嵁:", data);
+ // 瀹為檯椤圭洰涓渶瑕佸疄鐜板畬鏁寸殑Excel瀵煎嚭鍔熻兘
},
// 鏃堕棿鏍煎紡鍖�
parseTime(time, pattern) {
if (!time) return "";
const date = new Date(time);
+ if (pattern) {
+ // 绠�鍗曠殑妯″紡鍖归厤
+ if (pattern === "{y}-{m}-{d}") {
+ return `${date.getFullYear()}-${(date.getMonth() + 1)
+ .toString()
+ .padStart(2, "0")}-${date
+ .getDate()
+ .toString()
+ .padStart(2, "0")}`;
+ }
+ }
return `${date.getFullYear()}-${(date.getMonth() + 1)
.toString()
.padStart(2, "0")}-${date
.getDate()
.toString()
+ .padStart(2, "0")} ${date
+ .getHours()
+ .toString()
+ .padStart(2, "0")}:${date
+ .getMinutes()
+ .toString()
+ .padStart(2, "0")}:${date
+ .getSeconds()
+ .toString()
.padStart(2, "0")}`;
}
}
diff --git a/src/views/business/assess/assessInfo.vue b/src/views/business/assess/assessInfo.vue
index 330cff8..e1d7ddf 100644
--- a/src/views/business/assess/assessInfo.vue
+++ b/src/views/business/assess/assessInfo.vue
@@ -17,44 +17,38 @@
assessmentData.caseNo
}}</el-descriptions-item>
<el-descriptions-item label="娼滃湪鎹愮尞鑰呭鍚�">{{
- assessmentData.donorName
+ assessmentData.name || assessmentData.donorName
}}</el-descriptions-item>
<el-descriptions-item label="鎬у埆">
- <dict-tag :options="genderOptions" :value="assessmentData.gender" />
+ <dict-tag
+ :options="dict.type.sys_user_sex"
+ :value="assessmentData.sex"
+ />
</el-descriptions-item>
<el-descriptions-item label="骞撮緞"
>{{ assessmentData.age }}宀�</el-descriptions-item
>
<el-descriptions-item label="琛�鍨�">
- <dict-tag
- :options="bloodTypeOptions"
- :value="assessmentData.bloodType"
- />
+ {{ assessmentData.bloodtype }}
</el-descriptions-item>
<el-descriptions-item label="璇佷欢鍙风爜">{{
- assessmentData.idCardNo
+ assessmentData.idcardno
}}</el-descriptions-item>
<el-descriptions-item label="鐤剧梾璇婃柇">{{
- assessmentData.diagnosis
+ assessmentData.diagnosisname
}}</el-descriptions-item>
<el-descriptions-item label="鎵�鍦ㄥ尰鐤楁満鏋�">{{
- assessmentData.hospitalName
+ assessmentData.treatmenthospitalname
}}</el-descriptions-item>
- <el-descriptions-item label="涓绘不鍖荤敓">{{
- assessmentData.doctorName
+ <el-descriptions-item label="鍗忚皟鍛�">{{
+ assessmentData.coordinatorName
}}</el-descriptions-item>
- <el-descriptions-item label="鐢宠璇勪及鏃堕棿">{{
- assessmentData.applyTime
+ <el-descriptions-item label="璇勪及鏃堕棿">{{
+ assessmentData.assessTime
}}</el-descriptions-item>
- <el-descriptions-item label="璇勪及绫诲瀷">
- <dict-tag
- :options="assessmentTypeOptions"
- :value="assessmentData.assessmentType"
- />
- </el-descriptions-item>
<el-descriptions-item label="璇勪及鐘舵��">
- <el-tag :type="statusFilter(assessmentData.assessmentStatus)">
- {{ statusTextFilter(assessmentData.assessmentStatus) }}
+ <el-tag :type="statusFilter(assessmentData.assessState)">
+ {{ statusTextFilter(assessmentData.assessState) }}
</el-tag>
</el-descriptions-item>
</el-descriptions>
@@ -69,6 +63,7 @@
type="primary"
size="mini"
@click="handleCompleteAssessment"
+ :loading="saveLoading"
>
纭瀹屾垚璇勪及
</el-button>
@@ -76,9 +71,15 @@
褰撳墠瑙掕壊锛歿{ currentDepartment }}璇勪及浜哄憳
</span>
</div>
- <el-row>
- <el-form-item label-width="100px" label="璇勪及鍣ㄥ畼">
- <el-checkbox-group v-model="organdecision">
+
+ <!-- 鎹愮尞鍐冲畾琛ㄥ崟 -->
+ <el-form>
+ <el-form-item label-width="100px" label="鎹愮尞鍐冲畾">
+ <el-checkbox-group
+ v-model="organdecision"
+ @change="handleOrganDecisionChange"
+ :disabled="!isEdit"
+ >
<el-checkbox
v-for="item in organselection"
:key="item"
@@ -88,22 +89,27 @@
</el-checkbox-group>
<el-input
v-if="organdecision.includes('鍏朵粬')"
- v-model="assessmentData.organdecisionOther"
+ v-model="organdecisionOther"
placeholder="璇疯緭鍏ュ叾浠栨崘鐚喅瀹氱殑鍏蜂綋鍐呭"
style="margin-top: 10px; width: 300px;"
+ :readonly="!isEdit"
+ @input="handleOtherDecisionInput"
></el-input>
</el-form-item>
- </el-row>
+ </el-form>
+
+ <!-- 鍣ㄥ畼璇勪及琛ㄦ牸 -->
<el-table
- :data="organAssessmentList"
+ :data="filteredOrganAssessmentList"
v-loading="assessmentLoading"
style="width: 100%"
:row-class-name="getRowClassName"
:expand-row-keys="expandedRowKeys"
@expand-change="handleExpandChange"
- row-key="organType"
+ row-key="organno"
+ empty-text="褰撳墠鎹愮尞鍐冲畾涓嬫殏鏃犻渶瑕佽瘎浼扮殑鍣ㄥ畼"
>
- <el-table-column type="expand" width="60">
+ <el-table-column type="expand">
<template slot-scope="scope">
<div class="organ-expand-content" v-if="scope.row.expanded">
<el-tabs
@@ -123,13 +129,15 @@
:assessment-data="assessment"
:assessment-index="index"
:readonly="!canAssessOrgan(scope.row)"
- @save="handleSaveOrganAssessment"
@add-assessment="handleAddAssessment"
/>
</el-tab-pane>
<!-- 娣诲姞璇勪及鎸夐挳 -->
- <el-tab-pane name="add" v-if="canAssessOrgan(scope.row)">
+ <el-tab-pane
+ name="add"
+ v-if="canAssessOrgan(scope.row) && isEdit"
+ >
<template slot="label">
<el-button
type="text"
@@ -150,10 +158,10 @@
<div class="assessment-summary">
<el-descriptions title="璇勪及缁撴灉姹囨��" :column="2" border>
<el-descriptions-item label="鍣ㄥ畼绫诲瀷">{{
- scope.row.organName
+ scope.row.organname
}}</el-descriptions-item>
- <el-descriptions-item label="璇勪及绉戝">{{
- scope.row.department
+ <el-descriptions-item label="鑾峰彇鏈烘瀯">{{
+ scope.row.gainhospitalname
}}</el-descriptions-item>
<el-descriptions-item label="璇勪及娆℃暟" :span="2">
<el-tag type="info"
@@ -165,34 +173,58 @@
</el-descriptions-item>
</el-descriptions>
- <!-- 闄勪欢姹囨�� -->
- <el-card header="鎵�鏈夎瘎浼伴檮浠�" style="margin-top: 20px;">
- <el-table
- :data="getAllAttachments(scope.row)"
- size="small"
- empty-text="鏆傛棤闄勪欢"
- >
- <el-table-column label="闄勪欢鍚嶇О" prop="fileName" />
- <el-table-column label="璇勪及闃舵" width="120">
- <template slot-scope="{ row }">
- 绗瑊{ row.assessmentIndex + 1 }}娆¤瘎浼�
- </template>
- </el-table-column>
- <el-table-column
- label="涓婁紶鏃堕棿"
- prop="uploadTime"
- width="180"
- />
- <el-table-column label="鎿嶄綔" width="120">
- <template slot-scope="{ row }">
- <el-button
- type="text"
- @click="handlePreviewAttachment(row)"
- >棰勮</el-button
- >
- </template>
- </el-table-column>
- </el-table>
+ <!-- 璇勪及璇︽儏姹囨�� -->
+ <el-card header="璇勪及璇︽儏" style="margin-top: 20px;">
+ <el-descriptions :column="1" border>
+ <el-descriptions-item label="鑾峰彇鍓嶆椿妫�">
+ <el-tag
+ :type="
+ scope.row.isbiopsybefore === '1'
+ ? 'success'
+ : 'info'
+ "
+ >
+ {{ scope.row.isbiopsybefore === "1" ? "鏄�" : "鍚�" }}
+ </el-tag>
+ </el-descriptions-item>
+ <el-descriptions-item label="鑾峰彇鍚庢椿妫�">
+ <el-tag
+ :type="
+ scope.row.isbiopsyafter === '1'
+ ? 'success'
+ : 'info'
+ "
+ >
+ {{ scope.row.isbiopsyafter === "1" ? "鏄�" : "鍚�" }}
+ </el-tag>
+ </el-descriptions-item>
+ <el-descriptions-item label="杈圭紭鍣ㄥ畼">
+ <el-tag
+ :type="
+ scope.row.ismarginalorgan === '1'
+ ? 'warning'
+ : 'info'
+ "
+ >
+ {{
+ scope.row.ismarginalorgan === "1" ? "鏄�" : "鍚�"
+ }}
+ </el-tag>
+ </el-descriptions-item>
+ <el-descriptions-item label="鐥呭師鑿岄槼鎬�">
+ <el-tag
+ :type="
+ scope.row.ispathogenpositive === '1'
+ ? 'danger'
+ : 'info'
+ "
+ >
+ {{
+ scope.row.ispathogenpositive === "1" ? "鏄�" : "鍚�"
+ }}
+ </el-tag>
+ </el-descriptions-item>
+ </el-descriptions>
</el-card>
</div>
</el-tab-pane>
@@ -201,28 +233,16 @@
</template>
</el-table-column>
- <el-table-column
- label="鍣ㄥ畼绫诲瀷"
- align="center"
- prop="organType"
- width="120"
- >
- <template slot-scope="scope">
- <dict-tag
- :options="organTypeOptions"
- :value="scope.row.organType"
- />
- </template>
- </el-table-column>
+ <el-table-column label="鍣ㄥ畼绫诲瀷" align="center" prop="organname" />
+
+ <el-table-column label="鍣ㄥ畼缂栧彿" align="center" prop="organnumber" />
<el-table-column
- label="璇勪及绉戝"
+ label="鑾峰彇鏈烘瀯"
align="center"
- prop="department"
- width="120"
+ prop="gainhospitalname"
+ show-overflow-tooltip
/>
-
- <el-table-column label="璇勪及浜哄憳" align="center" prop="assessor" />
<!-- 鍔ㄦ�佹樉绀鸿瘎浼扮姸鎬佸垪 -->
<el-table-column
@@ -247,10 +267,16 @@
<el-table-column label="鏁翠綋鐘舵��" align="center" width="100">
<template slot-scope="scope">
<el-tag
- :type="scope.row.assessmentStatus === '1' ? 'success' : 'primary'"
+ :type="
+ getOrganOverallStatus(scope.row) === 'completed'
+ ? 'success'
+ : getOrganOverallStatus(scope.row) === 'assessing'
+ ? 'primary'
+ : 'warning'
+ "
size="small"
>
- {{ scope.row.assessmentStatus === "1" ? "宸插畬鎴�" : "璇勪及涓�" }}
+ {{ getOrganOverallStatusText(scope.row) }}
</el-tag>
</template>
</el-table-column>
@@ -263,13 +289,23 @@
>
<template slot-scope="scope">
<el-button
- v-if="canAssessOrgan(scope.row)"
+ v-if="canAssessOrgan(scope.row) && isEdit"
size="mini"
type="text"
@click="handleToggleExpand(scope.row)"
>
{{
- expandedRowKeys.includes(scope.row.organType) ? "鏀惰捣" : "璇︽儏"
+ expandedRowKeys.includes(scope.row.organno) ? "鏀惰捣" : "璇︽儏"
+ }}
+ </el-button>
+ <el-button
+ v-else-if="!isEdit"
+ size="mini"
+ type="text"
+ @click="handleToggleExpand(scope.row)"
+ >
+ {{
+ expandedRowKeys.includes(scope.row.organno) ? "鏀惰捣" : "鏌ョ湅"
}}
</el-button>
<el-button v-else size="mini" type="text" disabled
@@ -279,6 +315,12 @@
</el-table-column>
</el-table>
</el-card>
+
+ <!-- 鏁翠綋淇濆瓨鎸夐挳 -->
+ <div class="footer-actions" v-if="isEdit">
+ <el-button type="primary" @click="handleSaveAll" :loading="saveLoading">淇濆瓨璇勪及琛�</el-button>
+ <el-button @click="handleCancel">鍙栨秷</el-button>
+ </div>
<!-- 鏂囦欢棰勮寮圭獥 -->
<FilePreviewDialog
@@ -291,61 +333,38 @@
<script>
import {
- getAssessment,
- updateOrganAssessment,
- completeAssessment
-} from "./mockAssessmentApi";
+ evaluateBaseInfolist,
+ assessedit,
+ assessAdd
+} from "@/api/businessApi/index";
import FilePreviewDialog from "@/components/FilePreviewDialog";
import OrganAssessmentForm from "./components/OrganAssessmentForm.vue";
export default {
name: "AssessmentDetail",
components: { OrganAssessmentForm, FilePreviewDialog },
+ dicts: ["sys_user_sex", "sys_Organ", "sys_0_1"],
data() {
return {
- assessmentId: undefined,
- assessmentData: {},
- organAssessmentList: [],
- attachmentList: [],
+ // 鏄惁缂栬緫妯″紡
+ isEdit: false,
+ // 鍔犺浇鐘舵��
assessmentLoading: false,
- organdecision: [],
+ saveLoading: false,
+ // 鏁版嵁ID
+ infoid: undefined,
+ assessmentId: undefined,
+ // 涓昏鏁版嵁
+ assessmentData: {},
+ organAssessmentList: [], // 鎵�鏈夊櫒瀹樻暟鎹�
// 灞曞紑琛岀浉鍏�
expandedRowKeys: [],
+ // 闄勪欢鐩稿叧
currentPreviewFile: null,
attachmentVisible: false,
-
- currentUser: {
- id: "001",
- name: "寮犲尰鐢�",
- department: "鍗忚皟鍛�",
- role: "coordinator"
- },
- //department锛氬績鑴忋�乧oordinator锛氬崗璋冨憳
- // 瀛楀吀閫夐」
- genderOptions: [
- { value: "0", label: "鐢�" },
- { value: "1", label: "濂�" }
- ],
- bloodTypeOptions: [
- { value: "A", label: "A鍨�" },
- { value: "B", label: "B鍨�" },
- { value: "O", label: "O鍨�" },
- { value: "AB", label: "AB鍨�" }
- ],
- assessmentTypeOptions: [
- { value: "1", label: "鍒濇璇勪及" },
- { value: "2", label: "鏈�缁堣瘎浼�" }
- ],
- organTypeOptions: [
- { value: "heart", label: "蹇冭剰" },
- { value: "liver", label: "鑲濊剰" },
- { value: "kidney", label: "鑲捐剰" },
- { value: "lung", label: "鑲鸿剰" },
- { value: "pancreas", label: "鑳拌吅" },
- { value: "intestine", label: "鑲犻亾" },
- { value: "cornea", label: "瑙掕啘" },
- { value: "skin", label: "鐨偆" }
- ],
+ // 鎹愮尞鍐冲畾鐩稿叧
+ organdecision: [],
+ organdecisionOther: "",
organselection: [
"鑲濊剰",
"鍙岃偩",
@@ -358,7 +377,28 @@
"鍙岀溂缁勭粐",
"閬椾綋",
"鍏朵粬"
- ]
+ ],
+ // 鍣ㄥ畼绫诲瀷鏄犲皠鍏崇郴
+ organDecisionMapping: {
+ 鑲濊剰: ["鑲濊剰"],
+ 鍙岃偩: ["宸﹁偩", "鍙宠偩"],
+ 宸﹁偩: ["宸﹁偩"],
+ 鍙宠偩: ["鍙宠偩"],
+ 蹇冭剰: ["蹇冭剰"],
+ 鑲鸿剰: ["鑲鸿剰"],
+ 鑳拌吅: ["鑳拌吅"],
+ 灏忚偁: ["灏忚偁"],
+ 鍙岀溂缁勭粐: ["瑙掕啘"],
+ 閬椾綋: ["鐨偆", "楠ㄩ", "鍏朵粬缁勭粐"],
+ 鍏朵粬: [] // 鍏朵粬绫诲瀷涓嶆槧灏勫叿浣撳櫒瀹�
+ },
+ // 鐢ㄦ埛淇℃伅
+ currentUser: {
+ id: "001",
+ name: "寮犲尰鐢�",
+ department: "蹇冭剰绉�",
+ role: "doctor" // coordinator, doctor
+ }
};
},
computed: {
@@ -368,8 +408,27 @@
currentDepartment() {
return this.currentUser.department;
},
+ // 鏍规嵁鎹愮尞鍐冲畾杩囨护鍚庣殑鍣ㄥ畼鍒楄〃
+ filteredOrganAssessmentList() {
+ if (!this.organdecision || this.organdecision.length === 0) {
+ return [];
+ }
+
+ // 鑾峰彇鎵�鏈夐�変腑鐨勫櫒瀹樼被鍨�
+ const selectedOrgans = new Set();
+ this.organdecision.forEach(decision => {
+ const organs = this.organDecisionMapping[decision] || [];
+ organs.forEach(organ => selectedOrgans.add(organ));
+ });
+
+ // 杩囨护鍣ㄥ畼璇勪及鍒楄〃
+ return this.organAssessmentList.filter(organ =>
+ selectedOrgans.has(organ.organname)
+ );
+ },
+ // 妫�鏌ユ墍鏈夎繃婊ゅ悗鐨勫櫒瀹樻槸鍚﹂兘宸茶瘎浼�
allOrgansAssessed() {
- return this.organAssessmentList.every(
+ return this.filteredOrganAssessmentList.every(
organ =>
organ.assessments &&
organ.assessments.length > 0 &&
@@ -379,86 +438,364 @@
);
}
},
+ watch: {
+ // 鐩戝惉鎹愮尞鍐冲畾鍙樺寲锛岀敤浜庡鏉傞�昏緫澶勭悊
+ organdecision: {
+ handler(newVal, oldVal) {
+ this.handleComplexDecisionChange(newVal, oldVal);
+ },
+ deep: true
+ }
+ },
created() {
+ this.infoid = this.$route.query.infoid;
this.assessmentId = this.$route.query.id;
+ this.isEdit = this.$route.query.assess === "true";
this.getAssessmentDetail();
},
methods: {
+ // 鏁翠綋淇濆瓨鏂规硶
+ async handleSaveAll() {
+ this.saveLoading = true;
+ try {
+ // 1. 鍑嗗涓昏瘎浼拌〃鏁版嵁
+ const saveData = {
+ // 鏍规嵁 id 鏄惁瀛樺湪鍐冲畾鏄洿鏂拌繕鏄柊澧�
+ id: this.assessmentData.id || undefined,
+ infoid: this.infoid,
+ caseNo: this.assessmentData.caseNo,
+ donorno: this.assessmentData.donorno,
+ treatmenthospitalname: this.assessmentData.treatmenthospitalname,
+ treatmenthospitalno: this.assessmentData.treatmenthospitalno,
+ sex: this.assessmentData.sex,
+ age: this.assessmentData.age,
+ bloodtype: this.assessmentData.bloodtype,
+ idcardno: this.assessmentData.idcardno,
+ diagnosisname: this.assessmentData.diagnosisname,
+ coordinatorName: this.assessmentData.coordinatorName,
+ assessTime: this.assessmentData.assessTime || new Date().toISOString(),
+ assessState: this.assessmentData.assessState,
+ assessannex: this.assessmentData.assessannex,
+ // 鎹愮尞鍐冲畾淇℃伅
+ organdecision: this.organdecision.join(','),
+ organdecisionOther: this.organdecisionOther,
+ // 鍣ㄥ畼璇勪及鍒楄〃
+ serviceMedicalevaluationorgans: this.organAssessmentList.map(organ => ({
+ id: organ.id,
+ infoid: organ.infoid,
+ donorno: organ.donorno,
+ organno: organ.organno,
+ organname: organ.organname,
+ organnumber: organ.organnumber,
+ gainhospitalno: organ.gainhospitalno,
+ gainhospitalname: organ.gainhospitalname,
+ isbiopsybefore: organ.isbiopsybefore,
+ isbiopsyafter: organ.isbiopsyafter,
+ ismarginalorgan: organ.ismarginalorgan,
+ ispathogenpositive: organ.ispathogenpositive,
+ ispnf: organ.ispnf,
+ isdgf: organ.isdgf,
+ // 灏� assessments 鏁扮粍搴忓垪鍖栧埌 assesscontent 瀛楁
+ assesscontent: JSON.stringify(organ.assessments)
+ }))
+ };
+
+ // 2. 鏍规嵁 id 鍒ゆ柇璋冪敤鍝釜 API
+ const saveMethod = this.assessmentData.id ? assessedit : assessAdd;
+ const response = await saveMethod(saveData);
+
+ if (response.code === 200) {
+ this.$message.success('璇勪及琛ㄤ繚瀛樻垚鍔燂紒');
+ // 淇濆瓨鎴愬姛鍚庯紝鏇存柊鏈湴鐨� assessmentData.id锛堝浜庢柊澧炴儏鍐碉級
+ if (!this.assessmentData.id && response.data && response.data.id) {
+ this.assessmentData.id = response.data.id;
+ }
+ } else {
+ this.$message.error('淇濆瓨澶辫触锛�' + (response.msg || '鏈煡閿欒'));
+ }
+ } catch (error) {
+ console.error('淇濆瓨璇勪及琛ㄥけ璐�:', error);
+ this.$message.error('淇濆瓨澶辫触锛岃閲嶈瘯');
+ } finally {
+ this.saveLoading = false;
+ }
+ },
+
+ // 鍙栨秷鎸夐挳浜嬩欢
+ handleCancel() {
+ this.$router.go(-1);
+ },
+
+ // 鎹愮尞鍐冲畾鍙樻洿澶勭悊
+ handleOrganDecisionChange(newDecision) {
+ // 鑷姩澶勭悊鐩稿叧閫昏緫
+ this.autoHandleDecisionChange(newDecision);
+ // 寮哄埗閲嶆柊娓叉煋
+ this.$forceUpdate();
+ // 濡傛灉浠庢湁閫夋嫨鍙樹负鏃犻�夋嫨锛屾竻绌哄睍寮�鐘舵��
+ if (newDecision.length === 0) {
+ this.expandedRowKeys = [];
+ }
+ },
+
+ // 鍏朵粬鎹愮尞鍐冲畾杈撳叆澶勭悊
+ handleOtherDecisionInput(value) {
+ // 杈撳叆鏃朵笉鍋氬崟鐙繚瀛橈紝绛夊緟鏁翠綋淇濆瓨
+ },
+
+ // 鑷姩澶勭悊鍐冲畾鍙樻洿閫昏緫
+ autoHandleDecisionChange(newDecision) {
+ // 濡傛灉閫夋嫨浜�"鍙岃偩"锛岃嚜鍔ㄥ彇娑堝崟鐙殑"宸﹁偩"鍜�"鍙宠偩"閫夋嫨
+ if (newDecision.includes("鍙岃偩")) {
+ this.organdecision = newDecision.filter(
+ item => item !== "宸﹁偩" && item !== "鍙宠偩"
+ );
+ }
+ // 濡傛灉閫夋嫨浜�"宸﹁偩"鎴�"鍙宠偩"锛屽彇娑�"鍙岃偩"閫夋嫨
+ else if (newDecision.includes("宸﹁偩") || newDecision.includes("鍙宠偩")) {
+ this.organdecision = newDecision.filter(item => item !== "鍙岃偩");
+ }
+
+ // 澶勭悊浜掓枼閫昏緫
+ this.handleExclusiveDecisions();
+ },
+
+ // 澶勭悊浜掓枼鐨勬崘鐚喅瀹�
+ handleExclusiveDecisions() {
+ // 閬椾綋鎹愮尞涓庡叾浠栧櫒瀹樻崘鐚簰鏂ワ紙鏍规嵁涓氬姟闇�姹傝皟鏁达級
+ if (this.organdecision.includes("閬椾綋")) {
+ // 鍙互璁剧疆鍙繚鐣欓仐浣撴崘鐚紝鎴栬�呮牴鎹笟鍔¢渶姹傚鐞�
+ }
+ },
+
+ // 澶嶆潅鍐崇瓥鍙樺寲澶勭悊
+ handleComplexDecisionChange(newVal, oldVal) {
+ // 澶勭悊鏂板鐨勯�夋嫨
+ const addedDecisions = newVal.filter(item => !oldVal.includes(item));
+ const removedDecisions = oldVal.filter(item => !newVal.includes(item));
+
+ // 瀵规柊澧炲姞鐨勯�夋嫨杩涜鐗规畩澶勭悊
+ addedDecisions.forEach(decision => {
+ this.handleNewDecision(decision);
+ });
+
+ // 瀵圭Щ闄ょ殑閫夋嫨杩涜娓呯悊
+ removedDecisions.forEach(decision => {
+ this.handleRemovedDecision(decision);
+ });
+ },
+
+ // 澶勭悊鏂板鐨勬崘鐚喅瀹�
+ handleNewDecision(decision) {
+ // 鏍规嵁鏄犲皠鍏崇郴鑷姩鍒涘缓瀵瑰簲鐨勫櫒瀹樿瘎浼伴」
+ this.autoCreateOrganAssessments(decision);
+ },
+
+ // 鑷姩鍒涘缓鍣ㄥ畼璇勪及椤�
+ autoCreateOrganAssessments(decision) {
+ const organsToCreate = this.organDecisionMapping[decision];
+
+ if (organsToCreate && organsToCreate.length > 0) {
+ organsToCreate.forEach(organName => {
+ this.ensureOrganExists(organName);
+ });
+
+ // 鏄剧ず鍒涘缓鎻愮ず
+ if (organsToCreate.length > 0) {
+ this.$message.success(
+ `宸蹭负銆�${decision}銆戝垱寤�${organsToCreate.length}涓瘎浼伴」`
+ );
+ }
+ } else {
+ console.warn(`鎹愮尞鍐冲畾銆�${decision}銆戞病鏈夐厤缃櫒瀹樻槧灏勫叧绯籤);
+ }
+ },
+
+ // 澶勭悊绉婚櫎鐨勬崘鐚喅瀹�
+ handleRemovedDecision(decision) {
+ // 鏍规嵁涓氬姟闇�姹傛坊鍔犳竻鐞嗛�昏緫
+ const relatedOrgans = this.organDecisionMapping[decision] || [];
+ relatedOrgans.forEach(organ => {
+ // 鍙互鍦ㄨ繖閲屾坊鍔犳竻鐞嗙浉鍏冲櫒瀹樿瘎浼扮殑閫昏緫
+ });
+ },
+
+ // 纭繚鍣ㄥ畼瀛樺湪锛堝甫閲嶅妫�鏌ワ級
+ ensureOrganExists(organName) {
+ // 妫�鏌ユ槸鍚﹀凡瀛樺湪鍚屽悕鍣ㄥ畼璇勪及椤�
+ const exists = this.organAssessmentList.some(
+ organ => organ.organname === organName
+ );
+
+ if (!exists) {
+ // 鍒涘缓鏂扮殑鍣ㄥ畼璇勪及椤�
+ const newOrgan = {
+ id: `organ_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
+ organno: `ORG${Date.now()}`,
+ organname: organName,
+ gainhospitalname: "寰呭垎閰嶆満鏋�",
+ isbiopsybefore: "0",
+ isbiopsyafter: "0",
+ ismarginalorgan: "0",
+ ispathogenpositive: "0",
+ assessments: [this.getDefaultAssessment(0)],
+ activeAssessmentTab: "assessment_0",
+ expanded: false,
+ createTime: new Date().toISOString()
+ };
+
+ this.organAssessmentList = [...this.organAssessmentList, newOrgan];
+ return true;
+ }
+ return false;
+ },
+
+ // 鑾峰彇璇勪及璇︽儏
+ async getAssessmentDetail() {
+ this.assessmentLoading = true;
+ try {
+ const response = await evaluateBaseInfolist({ infoid: this.infoid });
+
+ if (response.code === 200) {
+ this.handleResponseData(response);
+ } else {
+ this.$message.error("鑾峰彇璇︽儏澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+ }
+ } catch (error) {
+ console.error("鑾峰彇璇勪及璇︽儏澶辫触:", error);
+ this.$message.error("鑾峰彇璇︽儏澶辫触");
+ } finally {
+ this.assessmentLoading = false;
+ }
+ },
+
+ // 澶勭悊鎺ュ彛鍝嶅簲鏁版嵁
+ handleResponseData(response) {
+ let detailData = null;
+
+ // 鏍规嵁鎺ュ彛瀹為檯杩斿洖鐨勬暟鎹粨鏋勮繘琛岃皟鏁�
+ if (response.data) {
+ if (Array.isArray(response.data)) {
+ detailData = response.data[0] || {};
+ } else if (response.data.rows && Array.isArray(response.data.rows)) {
+ detailData = response.data.rows[0] || {};
+ } else if (Array.isArray(response.data.list)) {
+ detailData = response.data.list[0] || {};
+ } else {
+ detailData = response.data;
+ }
+ } else {
+ detailData = response;
+ }
+
+ // 鏄犲皠瀛楁鍒拌瘎浼版暟鎹�
+ this.assessmentData = {
+ id: detailData.id || this.assessmentId,
+ infoid: detailData.infoid || this.infoid,
+ caseNo: detailData.caseNo || "",
+ name: detailData.name || detailData.donorName || "",
+ sex: detailData.sex || "",
+ age: detailData.age || "",
+ bloodtype: detailData.bloodtype || "",
+ idcardno: detailData.idcardno || "",
+ diagnosisname: detailData.diagnosisname || "",
+ treatmenthospitalname: detailData.treatmenthospitalname || "",
+ coordinatorName: detailData.coordinatorName || "",
+ assessTime: detailData.assessTime || "",
+ assessState: detailData.assessState || "1",
+ assessannex: detailData.assessannex || ""
+ };
+
+ // 澶勭悊鎹愮尞鍐冲畾鏁版嵁
+ if (detailData.organdecision) {
+ this.organdecision = Array.isArray(detailData.organdecision)
+ ? detailData.organdecision
+ : (detailData.organdecision || "").split(",");
+ this.organdecisionOther = detailData.organdecisionOther || "";
+ }
+
+ // 澶勭悊鍣ㄥ畼璇勪及鏁版嵁
+ this.processOrganAssessmentData(detailData);
+ },
+
+ // 澶勭悊鍣ㄥ畼璇勪及鏁版嵁
+ processOrganAssessmentData(detailData) {
+ let organList = [];
+
+ // 浠庢帴鍙f暟鎹腑鑾峰彇鍣ㄥ畼璇勪及鍒楄〃
+ if (detailData.serviceMedicalevaluationorgans) {
+ if (Array.isArray(detailData.serviceMedicalevaluationorgans)) {
+ organList = detailData.serviceMedicalevaluationorgans;
+ }
+ }
+
+ // 杞崲鍣ㄥ畼鏁版嵁鏍煎紡锛屾敮鎸佸娆¤瘎浼�
+ this.organAssessmentList = organList.map(organ => {
+ const assessments = [];
+
+ // 瑙f瀽assesscontent瀛楁涓殑澶氭璇勪及鏁版嵁
+ if (organ.assesscontent) {
+ try {
+ const assessData = typeof organ.assesscontent === "string"
+ ? JSON.parse(organ.assesscontent)
+ : organ.assesscontent;
+
+ if (Array.isArray(assessData)) {
+ assessments.push(
+ ...assessData.map((item, index) => ({
+ ...item,
+ index: index,
+ status: item.status || "assessed"
+ }))
+ );
+ }
+ } catch (error) {
+ console.warn("瑙f瀽璇勪及鍐呭澶辫触:", error);
+ assessments.push(this.getDefaultAssessment(0));
+ }
+ } else {
+ assessments.push(this.getDefaultAssessment(0));
+ }
+
+ return {
+ ...organ,
+ assessments: assessments,
+ activeAssessmentTab: assessments.length > 0 ? "assessment_0" : "summary",
+ expanded: false
+ };
+ });
+ },
+
// 鑾峰彇榛樿璇勪及鏁版嵁缁撴瀯
- getDefaultAssessment() {
+ getDefaultAssessment(index) {
return {
+ index: index,
status: "pending",
assessmentTime: "",
assessor: "",
functionStatus: "",
assessmentOpinion: "",
- attachments: [],
clinicalData: {},
- labResults: {}
+ labResults: {},
+ createTime: new Date().toISOString()
};
},
- // 鑾峰彇璇勪及璇︽儏
- getAssessmentDetail() {
- this.assessmentLoading = true;
- getAssessment(this.assessmentId)
- .then(response => {
- if (response.code === 200) {
- this.assessmentData = response.data.caseInfo;
- this.organAssessmentList = this.transformOrganData(
- response.data.organAssessments || []
- );
- }
- this.assessmentLoading = false;
- })
- .catch(error => {
- console.error("鑾峰彇璇勪及璇︽儏澶辫触:", error);
- this.assessmentLoading = false;
- });
- },
-
- // 杞崲鍣ㄥ畼鏁版嵁鏍煎紡锛屾敮鎸佸娆¤瘎浼�
- transformOrganData(organList) {
- return organList.map(organ => {
- const organName = this.getOrganName(organ.organType);
-
- // 杞崲涓哄娆¤瘎浼扮殑鏁版嵁缁撴瀯
- const assessments = [];
- if (organ.firstAssessment) {
- assessments.push({ ...organ.firstAssessment, index: 0 });
- }
- if (organ.secondAssessment) {
- assessments.push({ ...organ.secondAssessment, index: 1 });
- }
- // 鍙互缁х画娣诲姞鏇村璇勪及...
-
- // 璁剧疆鍣ㄥ畼鍚嶇О鍜岃瘎浼版暟鎹�
- organ.organName = organName;
- organ.assessments = assessments;
- organ.activeAssessmentTab =
- assessments.length > 0 ? "assessment_0" : "summary";
- organ.expanded = false;
-
- // 璁$畻鏁翠綋璇勪及鐘舵��
- organ.assessmentStatus = this.calculateOverallStatus(organ);
-
- return organ;
- });
- },
-
- // 璁$畻鏈�澶ц瘎浼版鏁帮紙鐢ㄤ簬琛ㄥご鏄剧ず锛�
+ // 璁$畻鏈�澶ц瘎浼版鏁�
getMaxAssessmentCount() {
const maxCount = Math.max(
...this.organAssessmentList.map(organ =>
organ.assessments ? organ.assessments.length : 0
)
);
- return Math.max(maxCount, 2); // 鑷冲皯鏄剧ず2鍒�
+ return Math.max(maxCount, 1);
},
- // 璁$畻鏁翠綋璇勪及鐘舵��
- calculateOverallStatus(organ) {
- if (!organ.assessments || organ.assessments.length === 0) return "0";
+ // 鑾峰彇鍣ㄥ畼鏁翠綋鐘舵��
+ getOrganOverallStatus(organ) {
+ if (!organ.assessments || organ.assessments.length === 0) {
+ return "pending";
+ }
const allAssessed = organ.assessments.every(
assessment => assessment.status === "assessed"
@@ -467,14 +804,24 @@
assessment => assessment.status === "assessed"
);
- if (allAssessed) return "1";
- if (someAssessed) return "2";
- return "0";
+ if (allAssessed) return "completed";
+ if (someAssessed) return "assessing";
+ return "pending";
+ },
+
+ getOrganOverallStatusText(organ) {
+ const status = this.getOrganOverallStatus(organ);
+ const statusMap = {
+ pending: "寰呰瘎浼�",
+ assessing: "璇勪及涓�",
+ completed: "宸插畬鎴�"
+ };
+ return statusMap[status] || "鏈煡";
},
// 鍒囨崲灞曞紑琛�
handleToggleExpand(row) {
- const key = row.organType;
+ const key = row.organno;
const index = this.expandedRowKeys.indexOf(key);
if (index > -1) {
@@ -483,83 +830,36 @@
} else {
this.expandedRowKeys = [key];
this.organAssessmentList.forEach(item => {
- item.expanded = item.organType === key;
+ item.expanded = item.organno === key;
});
}
},
// 灞曞紑琛屽彉鍖�
handleExpandChange(row, expandedRows) {
- this.expandedRowKeys = expandedRows.map(item => item.organType);
+ this.expandedRowKeys = expandedRows.map(item => item.organno);
this.organAssessmentList.forEach(item => {
- item.expanded = this.expandedRowKeys.includes(item.organType);
+ item.expanded = this.expandedRowKeys.includes(item.organno);
});
},
// 娣诲姞鏂拌瘎浼�
handleAddNewAssessment(organ) {
const newAssessment = {
- ...this.getDefaultAssessment(),
- index: organ.assessments.length
+ ...this.getDefaultAssessment(organ.assessments.length),
+ assessor: this.currentUser.name
};
organ.assessments.push(newAssessment);
organ.activeAssessmentTab = `assessment_${organ.assessments.length - 1}`;
-
- // 鏇存柊鏁翠綋鐘舵��
- organ.assessmentStatus = this.calculateOverallStatus(organ);
this.$message.success("宸叉坊鍔犳柊鐨勮瘎浼�");
},
// 澶勭悊娣诲姞璇勪及浜嬩欢
handleAddAssessment(data) {
- const { organData, currentIndex } = data;
+ const { organData } = data;
this.handleAddNewAssessment(organData);
- },
-
- // 淇濆瓨璇勪及
- handleSaveOrganAssessment(saveData) {
- const { organData, assessmentData, assessmentIndex } = saveData;
-
- const organToUpdate = {
- ...organData,
- assessments: organData.assessments.map((assessment, index) =>
- index === assessmentIndex
- ? {
- ...assessmentData,
- status: "assessed",
- assessmentTime: new Date().toISOString(),
- assessor: this.currentUser.name
- }
- : assessment
- )
- };
-
- // 鏇存柊鏁翠綋鐘舵��
- organToUpdate.assessmentStatus = this.calculateOverallStatus(
- organToUpdate
- );
-
- updateOrganAssessment(organToUpdate)
- .then(response => {
- if (response.code === 200) {
- this.$message.success(`绗�${assessmentIndex + 1}娆¤瘎浼颁繚瀛樻垚鍔焋);
- this.getAssessmentDetail();
-
- // 鏇存柊褰撳墠灞曞紑琛岀殑鏁版嵁
- const index = this.organAssessmentList.findIndex(
- item => item.organType === organData.organType
- );
- if (index !== -1) {
- this.organAssessmentList.splice(index, 1, organToUpdate);
- }
- }
- })
- .catch(error => {
- console.error("淇濆瓨璇勪及澶辫触:", error);
- this.$message.error("淇濆瓨澶辫触");
- });
},
// 鑾峰彇鏈�鏂拌瘎浼版椂闂�
@@ -572,55 +872,6 @@
return assessed.sort(
(a, b) => new Date(b.assessmentTime) - new Date(a.assessmentTime)
)[0].assessmentTime;
- },
-
- // 鑾峰彇鎵�鏈夐檮浠�
- getAllAttachments(organ) {
- const attachments = [];
-
- if (organ.assessments) {
- organ.assessments.forEach((assessment, index) => {
- if (assessment.attachments) {
- assessment.attachments.forEach(att => {
- attachments.push({
- ...att,
- assessmentIndex: index,
- assessmentNumber: index + 1
- });
- });
- }
- });
- }
-
- return attachments;
- },
-
- // 棰勮闄勪欢
- handlePreviewAttachment(attachment) {
- this.currentPreviewFile = {
- fileName: attachment.fileName,
- fileUrl: attachment.path || attachment.fileUrl,
- fileType: this.getFileType(attachment.fileName)
- };
- this.attachmentVisible = true;
- },
-
- // 鑾峰彇鏂囦欢绫诲瀷
- getFileType(fileName) {
- if (!fileName) return "other";
-
- const extension = fileName
- .split(".")
- .pop()
- .toLowerCase();
- const imageTypes = ["jpg", "jpeg", "png", "gif", "bmp", "webp"];
- const pdfTypes = ["pdf"];
- const officeTypes = ["doc", "docx", "xls", "xlsx", "ppt", "pptx"];
-
- if (imageTypes.includes(extension)) return "image";
- if (pdfTypes.includes(extension)) return "pdf";
- if (officeTypes.includes(extension)) return "office";
- return "other";
},
// 鑾峰彇璇勪及鐘舵�佹爣绛剧被鍨�
@@ -643,16 +894,16 @@
return textMap[status] || "鏈煡";
},
- // 鑾峰彇鍣ㄥ畼鍚嶇О
- getOrganName(organType) {
- const organ = this.organTypeOptions.find(opt => opt.value === organType);
- return organ ? organ.label : organType;
- },
-
// 妫�鏌ヨ瘎浼版潈闄�
canAssessOrgan(organ) {
+ console.log(organ,'organ');
+
if (this.isCoordinator) return true;
- return organ.department === this.currentDepartment;
+ if (!this.isEdit) return false;
+ return (
+ organ.gainhospitalname &&
+ organ.gainhospitalname.includes(this.currentDepartment)
+ );
},
// 鑾峰彇琛岀被鍚�
@@ -663,46 +914,79 @@
// 鐘舵�佽繃婊ゅ櫒
statusFilter(status) {
const statusMap = {
- "0": "warning",
- "1": "primary",
- "2": "success",
- "3": "danger"
+ "1": "warning",
+ "2": "primary",
+ "3": "success"
};
return statusMap[status] || "info";
},
statusTextFilter(status) {
const statusMap = {
- "0": "寰呰瘎浼�",
- "1": "璇勪及涓�",
- "2": "宸插畬鎴�",
- "3": "宸插叧闂�"
+ "1": "寰呰瘎浼�",
+ "2": "璇勪及涓�",
+ "3": "宸插畬鎴�"
};
return statusMap[status] || "鏈煡";
},
+ // 鏌ョ湅闄勪欢
handleAttachmentPreview() {
- this.attachmentVisible = true;
+ if (this.assessmentData.assessannex) {
+ try {
+ const annexData = typeof this.assessmentData.assessannex === "string"
+ ? JSON.parse(this.assessmentData.assessannex)
+ : this.assessmentData.assessannex;
+
+ if (Array.isArray(annexData) && annexData.length > 0) {
+ this.currentPreviewFile = annexData[0];
+ this.attachmentVisible = true;
+ } else {
+ this.$message.info("鏆傛棤闄勪欢鍙瑙�");
+ }
+ } catch (error) {
+ this.$message.info("闄勪欢鏁版嵁鏍煎紡閿欒");
+ }
+ } else {
+ this.$message.info("鏆傛棤闄勪欢");
+ }
},
- handleCompleteAssessment() {
- this.$confirm("纭瀹屾垚鎵�鏈夊櫒瀹樿瘎浼板悧锛熷畬鎴愬悗灏嗘棤娉曚慨鏀�", "纭鎿嶄綔", {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning"
- }).then(() => {
- completeAssessment(this.assessmentId)
- .then(response => {
- if (response.code === 200) {
- this.$message.success("璇勪及瀹屾垚纭鎴愬姛");
- this.getAssessmentDetail();
- }
- })
- .catch(error => {
- console.error("瀹屾垚璇勪及澶辫触:", error);
- this.$message.error("鎿嶄綔澶辫触");
- });
- });
+ // 瀹屾垚璇勪及
+ async handleCompleteAssessment() {
+ try {
+ await this.$confirm(
+ "纭瀹屾垚鎵�鏈夊櫒瀹樿瘎浼板悧锛熷畬鎴愬悗灏嗘棤娉曚慨鏀�",
+ "纭鎿嶄綔",
+ {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ }
+ );
+
+ // 鏇存柊璇勪及鐘舵�佷负宸插畬鎴�
+ const updateData = {
+ ...this.assessmentData,
+ assessState: "3",
+ assessTime: new Date().toISOString()
+ };
+
+ const response = await assessedit(updateData);
+
+ if (response.code === 200) {
+ this.$message.success("璇勪及瀹屾垚纭鎴愬姛");
+ this.assessmentData.assessState = "3";
+ this.isEdit = false;
+ } else {
+ this.$message.error("鎿嶄綔澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+ }
+ } catch (error) {
+ if (error !== "cancel") {
+ console.error("瀹屾垚璇勪及澶辫触:", error);
+ this.$message.error("鎿嶄綔澶辫触");
+ }
+ }
}
}
};
@@ -742,6 +1026,14 @@
.assessment-summary {
padding: 10px;
+}
+
+/* 搴曢儴淇濆瓨鎸夐挳鏍峰紡 */
+.footer-actions {
+ margin-top: 20px;
+ text-align: center;
+ padding: 20px;
+ border-top: 1px solid #eaeaea;
}
/* 鍝嶅簲寮忚璁� */
@@ -790,4 +1082,17 @@
.fixed-width .el-button {
margin: 0 2px;
}
+
+/* 鎹愮尞鍐冲畾鏍峰紡浼樺寲 */
+.organ-decision-info {
+ margin: 10px 0;
+ padding: 10px;
+ background-color: #f8f9fa;
+ border-radius: 4px;
+ border-left: 4px solid #409eff;
+}
+
+.decision-tag {
+ margin: 2px 5px;
+}
</style>
diff --git a/src/views/business/assess/components/OrganAssessmentForm.vue b/src/views/business/assess/components/OrganAssessmentForm.vue
index 49ce6cd..2ef0c11 100644
--- a/src/views/business/assess/components/OrganAssessmentForm.vue
+++ b/src/views/business/assess/components/OrganAssessmentForm.vue
@@ -2,7 +2,7 @@
<div class="organ-assessment-form">
<el-form :model="assessmentData" label-width="120px">
<el-form-item label="鍔熻兘鐘舵��">
- <el-select v-model="assessmentData.functionStatus" :disabled="readonly">
+ <el-select v-model="assessmentData.functionStatus">
<el-option label="姝e父" value="1" />
<el-option label="杞诲害寮傚父" value="2" />
<el-option label="閲嶅害寮傚父" value="3" />
@@ -15,7 +15,6 @@
type="textarea"
v-model="assessmentData.assessmentOpinion"
:rows="4"
- :disabled="readonly"
placeholder="璇疯緭鍏ヨ瘎浼版剰瑙�"
/>
</el-form-item>
@@ -268,13 +267,17 @@
/** 涓婁紶鎴愬姛澶勭悊 */
handleUploadSuccess({ file, fileList, response }) {
- if (response.code === 200) {
+ console.log(response);
+
+ if (response.code == 200) {
+ console.log(1);
+
const attachmentObj = {
- id:
- response.data.fileId ||
- Math.random()
- .toString(36)
- .substr(2),
+ // id:
+ // response.data.fileId ||
+ // Math.random()
+ // .toString(36)
+ // .substr(2),
fileName: file.name,
path: response.data.fileUrl || file.url,
fileUrl: response.data.fileUrl || file.url,
@@ -284,6 +287,7 @@
assessmentType: this.assessmentType,
organType: this.organData.organType
};
+ console.log(2,attachmentObj);
this.assessmentData.attachments.push(attachmentObj);
this.$message.success("鏂囦欢涓婁紶鎴愬姛");
diff --git a/src/views/business/assess/index.vue b/src/views/business/assess/index.vue
index fb1ab31..c509edc 100644
--- a/src/views/business/assess/index.vue
+++ b/src/views/business/assess/index.vue
@@ -8,9 +8,9 @@
:inline="true"
label-width="100px"
>
- <el-form-item label="鎹愮尞鑰呭鍚�" prop="donorName">
+ <el-form-item label="鎹愮尞鑰呭鍚�" prop="name">
<el-input
- v-model="queryParams.donorName"
+ v-model="queryParams.name"
placeholder="璇疯緭鍏ユ崘鐚�呭鍚�"
clearable
style="width: 200px"
@@ -35,22 +35,22 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
- <el-form-item label="璇勪及鐘舵��" prop="firstAssessState">
+ <el-form-item label="璇勪及鐘舵��" prop="assessState">
<el-select
- v-model="queryParams.firstAssessState"
+ v-model="queryParams.assessState"
placeholder="璇烽�夋嫨璇勪及鐘舵��"
clearable
style="width: 200px"
>
- <el-option label="寰呰瘎浼�" value="0" />
- <el-option label="璇勪及涓�" value="1" />
- <el-option label="宸插畬鎴�" value="2" />
- <el-option label="宸插叧闂�" value="3" />
+ <el-option label="寰呰瘎浼�" value="1" />
+ <el-option label="璇勪及涓�" value="2" />
+ <el-option label="宸插畬鎴�" value="3" />
+ <el-option label="宸插叧闂�" value="4" />
</el-select>
</el-form-item>
<el-form-item label="鐢宠鏃堕棿" prop="applyTimeRange">
<el-date-picker
- v-model="applyTimeRange"
+ v-model="queryParams.applyTimeRange"
type="daterange"
range-separator="鑷�"
start-placeholder="寮�濮嬫棩鏈�"
@@ -59,9 +59,9 @@
style="width: 240px"
/>
</el-form-item>
- <el-form-item label="璇勪及鏃堕棿" prop="assessmentTimeRange">
+ <el-form-item label="璇勪及鏃堕棿" prop="assessTimeRange">
<el-date-picker
- v-model="assessmentTimeRange"
+ v-model="queryParams.assessTimeRange"
type="daterange"
range-separator="鑷�"
start-placeholder="寮�濮嬫棩鏈�"
@@ -133,15 +133,14 @@
<el-table-column
label="娼滃湪鎹愮尞鑰呭鍚�"
align="center"
- prop="donorName"
+ prop="name"
width="120"
/>
- <el-table-column label="鎬у埆" align="center" prop="gender" width="80">
+ <el-table-column label="鎬у埆" align="center" prop="sex" width="80">
<template slot-scope="scope">
- <!-- <dict-tag :options="genderOptions" :value="scope.row.gender" /> -->
<dict-tag
:options="dict.type.sys_user_sex"
- :value="parseInt(scope.row.gender)"
+ :value="scope.row.sex"
/>
</template>
</el-table-column>
@@ -149,14 +148,14 @@
<el-table-column
label="鐤剧梾璇婃柇"
align="center"
- prop="diagnosis"
+ prop="diagnosisname"
min-width="180"
show-overflow-tooltip
/>
<el-table-column
label="鎵�鍦ㄥ尰鐤楁満鏋�"
align="center"
- prop="hospitalName"
+ prop="treatmenthospitalname"
width="150"
show-overflow-tooltip
/>
@@ -173,13 +172,13 @@
<el-table-column
label="璇勪及鏃堕棿"
align="center"
- prop="assessmentTime"
+ prop="assessTime"
width="120"
>
<template slot-scope="scope">
<span>{{
- scope.row.assessmentTime
- ? parseTime(scope.row.assessmentTime, "{y}-{m}-{d}")
+ scope.row.assessTime
+ ? parseTime(scope.row.assessTime, "{y}-{m}-{d}")
: "-"
}}</span>
</template>
@@ -187,12 +186,12 @@
<el-table-column
label="璇勪及鐘舵��"
align="center"
- prop="firstAssessState"
+ prop="assessState"
width="100"
>
<template slot-scope="scope">
- <el-tag :type="statusFilter(scope.row.firstAssessState)">
- {{ statusTextFilter(scope.row.firstAssessState) }}
+ <el-tag :type="statusFilter(scope.row.assessState)">
+ {{ statusTextFilter(scope.row.assessState) }}
</el-tag>
</template>
</el-table-column>
@@ -202,19 +201,6 @@
prop="coordinatorName"
width="100"
/>
- <!-- <el-table-column
- label="璇勪及绫诲瀷"
- align="center"
- prop="assessmentType"
- width="100"
- >
- <template slot-scope="scope">
- <dict-tag
- :options="dict.type.assessment_Type"
- :value="parseInt(scope.row.assessmentType)"
- />
- </template>
- </el-table-column> -->
<el-table-column
label="鎿嶄綔"
align="center"
@@ -231,8 +217,8 @@
>
<el-button
v-if="
- scope.row.firstAssessState === '0' ||
- scope.row.firstAssessState === '1'
+ scope.row.assessState === '1' ||
+ scope.row.assessState === '2'
"
size="mini"
type="text"
@@ -241,7 +227,7 @@
>璇勪及</el-button
>
<el-button
- v-if="scope.row.firstAssessState === '2'"
+ v-if="scope.row.assessState === '3'"
size="mini"
type="text"
icon="el-icon-check"
@@ -265,19 +251,13 @@
</template>
<script>
-// import { listAssessment, delAssessment, exportAssessment } from "@/api/case/assessment";
-import {
- listAssessment,
- delAssessment,
- exportAssessment
-} from "./mockAssessmentApi";
import { evaluateBaseInfolist } from "@/api/businessApi/index";
import Pagination from "@/components/Pagination";
export default {
name: "AssessmentList",
components: { Pagination },
- dicts: ["sys_user_sex", "assessment_Type"],
+ dicts: ["sys_user_sex"],
data() {
return {
// 閬僵灞�
@@ -296,24 +276,13 @@
queryParams: {
pageNum: 1,
pageSize: 10,
- donorName: undefined,
+ name: undefined,
hospitalName: undefined,
coordinatorName: undefined,
- firstAssessState: undefined,
-
- },
- applyTimeRange: [],
- assessmentTimeRange: [],
- // 鎬у埆閫夐」
- genderOptions: [
- { value: "0", label: "鐢�" },
- { value: "1", label: "濂�" }
- ],
- // 璇勪及绫诲瀷閫夐」
- assessmentTypeOptions: [
- { value: "1", label: "鍒濇璇勪及" },
- { value: "2", label: "鏈�缁堣瘎浼�" }
- ]
+ assessState: undefined,
+ applyTimeRange: [],
+ assessTimeRange: []
+ }
};
},
created() {
@@ -323,41 +292,121 @@
// 鐘舵�佽繃婊ゅ櫒
statusFilter(status) {
const statusMap = {
- "0": "warning", // 寰呰瘎浼�
- "1": "primary", // 璇勪及涓�
- "2": "success", // 宸插畬鎴�
- "3": "danger" // 宸插叧闂�
+ "1": "warning", // 寰呰瘎浼�
+ "2": "primary", // 璇勪及涓�
+ "3": "success", // 宸插畬鎴�
+ "4": "danger" // 宸插叧闂�
};
return statusMap[status] || "info";
},
statusTextFilter(status) {
const statusMap = {
- "0": "寰呰瘎浼�",
- "1": "璇勪及涓�",
- "2": "宸插畬鎴�",
- "3": "宸插叧闂�"
+ "1": "寰呰瘎浼�",
+ "2": "璇勪及涓�",
+ "3": "宸插畬鎴�",
+ "4": "宸插叧闂�"
};
return statusMap[status] || "鏈煡";
},
// 鏌ヨ璇勪及鍒楄〃
- getList() {
+ async getList() {
this.loading = true;
- evaluateBaseInfolist(this.queryParams);
- listAssessment(this.queryParams)
- .then(response => {
- if (response.code === 200) {
- this.assessmentList = response.data.rows;
- this.total = response.data.total;
- } else {
- this.$message.error("鑾峰彇鏁版嵁澶辫触");
- }
- this.loading = false;
- })
- .catch(error => {
- console.error("鑾峰彇璇勪及鍒楄〃澶辫触:", error);
- this.loading = false;
- this.$message.error("鑾峰彇鏁版嵁澶辫触");
- });
+ try {
+ // 鏋勫缓鏌ヨ鍙傛暟锛屾槧灏勫埌鎺ュ彛瀛楁
+ const requestParams = this.buildRequestParams();
+
+ const response = await evaluateBaseInfolist(requestParams);
+
+ if (response.code === 200) {
+ // 澶勭悊鎺ュ彛杩斿洖鐨勬暟鎹粨鏋�
+ this.handleResponseData(response);
+ } else {
+ this.$message.error("鑾峰彇鏁版嵁澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+ this.assessmentList = [];
+ this.total = 0;
+ }
+ } catch (error) {
+ console.error("鑾峰彇璇勪及鍒楄〃澶辫触:", error);
+ this.$message.error("鑾峰彇鏁版嵁澶辫触");
+ this.assessmentList = [];
+ this.total = 0;
+ } finally {
+ this.loading = false;
+ }
+ },
+ // 鏋勫缓璇锋眰鍙傛暟
+ buildRequestParams() {
+ const params = {
+ pageNum: this.queryParams.pageNum,
+ pageSize: this.queryParams.pageSize
+ };
+
+ // 鏄犲皠鏌ヨ鏉′欢鍒版帴鍙e瓧娈�
+ if (this.queryParams.name) {
+ params.name = this.queryParams.name;
+ }
+ if (this.queryParams.hospitalName) {
+ params.treatmenthospitalname = this.queryParams.hospitalName;
+ }
+ if (this.queryParams.coordinatorName) {
+ params.coordinatorName = this.queryParams.coordinatorName;
+ }
+ if (this.queryParams.assessState) {
+ params.assessState = this.queryParams.assessState;
+ }
+
+ // 澶勭悊鏃堕棿鑼冨洿鏌ヨ
+ if (this.queryParams.applyTimeRange && this.queryParams.applyTimeRange.length === 2) {
+ params.startApplyTime = this.queryParams.applyTimeRange[0];
+ params.endApplyTime = this.queryParams.applyTimeRange[1];
+ }
+
+ if (this.queryParams.assessTimeRange && this.queryParams.assessTimeRange.length === 2) {
+ params.startAssessTime = this.queryParams.assessTimeRange[0];
+ params.endAssessTime = this.queryParams.assessTimeRange[1];
+ }
+
+ return params;
+ },
+ // 澶勭悊鎺ュ彛鍝嶅簲鏁版嵁
+ handleResponseData(response) {
+ // 鏍规嵁鎺ュ彛瀹為檯杩斿洖鐨勬暟鎹粨鏋勮繘琛岃皟鏁�
+ if (response.data) {
+ if (Array.isArray(response.data)) {
+ // 濡傛灉杩斿洖鐨勬槸鏁扮粍
+ this.assessmentList = response.data;
+ this.total = response.data.length;
+ } else if (response.data.rows) {
+ // 濡傛灉杩斿洖鐨勬槸鍒嗛〉鏁版嵁缁撴瀯
+ this.assessmentList = response.data.rows;
+ this.total = response.data.total;
+ } else if (Array.isArray(response.data.list)) {
+ // 濡傛灉杩斿洖鐨勬槸list瀛楁
+ this.assessmentList = response.data.list;
+ this.total = response.data.total || response.data.list.length;
+ } else {
+ // 鍏朵粬鏁版嵁缁撴瀯锛屽皾璇曠洿鎺ヤ娇鐢╠ata
+ this.assessmentList = response.data;
+ this.total = response.total || response.data.length;
+ }
+ } else {
+ // 濡傛灉data涓虹┖锛屼娇鐢ㄦ牴绾у埆鐨剅ows鎴杔ist
+ if (Array.isArray(response.rows)) {
+ this.assessmentList = response.rows;
+ this.total = response.total;
+ } else if (Array.isArray(response.list)) {
+ this.assessmentList = response.list;
+ this.total = response.total;
+ } else {
+ this.assessmentList = [];
+ this.total = 0;
+ }
+ }
+
+ // 纭繚assessmentList鏄暟缁�
+ if (!Array.isArray(this.assessmentList)) {
+ this.assessmentList = [];
+ }
},
// 鎼滅储鎸夐挳鎿嶄綔
handleQuery() {
@@ -367,7 +416,8 @@
// 閲嶇疆鎸夐挳鎿嶄綔
resetQuery() {
this.$refs.queryForm.resetFields();
- this.handleQuery();
+ this.queryParams.pageNum = 1;
+ this.getList();
},
// 澶氶�夋閫変腑鏁版嵁
handleSelectionChange(selection) {
@@ -379,34 +429,41 @@
handleRowClick(row) {
this.$router.push({
path: "/case/assessInfo",
- query: { id: row.id }
+ query: { id: row.id, infoid: row.infoid }
});
},
// 鏌ョ湅璇︽儏
handleView(row) {
- this.$router.push({ path: "/case/assessInfo", query: { id: row.id } });
+ this.$router.push({
+ path: "/case/assessInfo",
+ query: { id: row.id, infoid: row.infoid }
+ });
},
// 杩涜璇勪及
handleAssess(row) {
this.$router.push({
path: "/case/assessInfo",
- query: { id: row.id, assess: true }
+ query: { id: row.id, infoid: row.infoid, assess: true }
});
},
// 纭璇勪及
- handleConfirm(row) {
- this.$confirm("纭瀹屾垚璇ユ渚嬬殑璇勪及鍚楋紵", "璀﹀憡", {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning"
- })
- .then(() => {
- // 璋冪敤Mock纭API
- this.$message.success("纭鎴愬姛");
- // 鍒锋柊鍒楄〃
- this.getList();
- })
- .catch(() => {});
+ async handleConfirm(row) {
+ try {
+ await this.$confirm("纭瀹屾垚璇ユ渚嬬殑璇勪及鍚楋紵", "璀﹀憡", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ });
+
+ // 杩欓噷闇�瑕佽皟鐢ㄧ‘璁よ瘎浼版帴鍙o紝鏆傛椂妯℃嫙鎴愬姛
+ this.$message.success("纭鎴愬姛");
+ // 鍒锋柊鍒楄〃
+ this.getList();
+ } catch (error) {
+ if (error !== 'cancel') {
+ console.error("纭澶辫触:", error);
+ }
+ }
},
// 鏂板鎸夐挳鎿嶄綔
handleCreate() {
@@ -414,71 +471,117 @@
},
// 淇敼鎸夐挳鎿嶄綔
handleUpdate() {
+ if (this.ids.length === 0) return;
+
const id = this.ids[0];
- this.$router.push({ path: "/case/assessment/edit", query: { id: id } });
+ this.$router.push({
+ path: "/case/assessment/edit",
+ query: { id: id }
+ });
},
- // 鍒犻櫎鎸夐挳鎿嶄綔 - 浣跨敤Mock API
- handleDelete() {
- const ids = this.ids;
- this.$confirm("鏄惁纭鍒犻櫎閫変腑鐨勬暟鎹」锛�", "璀﹀憡", {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning"
- })
- .then(() => {
- return delAssessment(ids);
- })
- .then(response => {
- if (response.code === 200) {
- this.$message.success("鍒犻櫎鎴愬姛");
- this.getList();
- }
- })
- .catch(() => {});
- },
- // 瀵煎嚭鎸夐挳鎿嶄綔 - 浣跨敤Mock API
- handleExport() {
- const queryParams = this.queryParams;
- this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夎瘎浼版暟鎹紵", "璀﹀憡", {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning"
- })
- .then(() => {
- this.loading = true;
- return exportAssessment(queryParams);
- })
- .then(response => {
- if (response.code === 200) {
- this.$message.success("瀵煎嚭鎴愬姛锛屽紑濮嬩笅杞芥枃浠�");
- // 妯℃嫙鏂囦欢涓嬭浇
- const link = document.createElement("a");
- link.href = response.data.downloadUrl;
- link.download = "妗堜緥璇勪及鏁版嵁.xlsx";
- link.click();
- }
- this.loading = false;
- })
- .catch(() => {
- this.loading = false;
+ // 鍒犻櫎鎸夐挳鎿嶄綔
+ async handleDelete() {
+ if (this.ids.length === 0) return;
+
+ try {
+ await this.$confirm("鏄惁纭鍒犻櫎閫変腑鐨勬暟鎹」锛�", "璀﹀憡", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
});
+
+ // 杩欓噷闇�瑕佽皟鐢ㄥ垹闄ゆ帴鍙o紝鏆傛椂妯℃嫙鎴愬姛
+ this.$message.success("鍒犻櫎鎴愬姛");
+ this.getList();
+
+ } catch (error) {
+ if (error !== "cancel") {
+ console.error("鍒犻櫎澶辫触:", error);
+ this.$message.error("鍒犻櫎澶辫触");
+ }
+ }
+ },
+ // 瀵煎嚭鎸夐挳鎿嶄綔
+ async handleExport() {
+ try {
+ await this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夎瘎浼版暟鎹紵", "璀﹀憡", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ });
+
+ this.loading = true;
+
+ // 鏋勫缓瀵煎嚭鍙傛暟
+ const exportParams = this.buildRequestParams();
+ exportParams.pageSize = 10000; // 瀵煎嚭鎵�鏈夋暟鎹�
+
+ // 鑾峰彇瀵煎嚭鏁版嵁
+ const response = await evaluateBaseInfolist(exportParams);
+
+ if (response.code === 200) {
+ // 澶勭悊瀵煎嚭鏁版嵁
+ this.exportDataToExcel(response.data);
+ this.$message.success("瀵煎嚭鎴愬姛");
+ } else {
+ this.$message.error("瀵煎嚭澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+ }
+
+ } catch (error) {
+ if (error !== "cancel") {
+ console.error("瀵煎嚭澶辫触:", error);
+ this.$message.error("瀵煎嚭澶辫触");
+ }
+ } finally {
+ this.loading = false;
+ }
+ },
+ // 瀵煎嚭鏁版嵁鍒癊xcel
+ exportDataToExcel(data) {
+ // 杩欓噷瀹炵幇瀵煎嚭閫昏緫锛屽彲浠ヤ娇鐢▁lsx绛夊簱
+ // 鐢变簬鏄墠绔鍑猴紝杩欓噷绠�鍗曟紨绀�
+ console.log("瀵煎嚭鏁版嵁:", data);
+ // 瀹為檯椤圭洰涓渶瑕佸疄鐜板畬鏁寸殑Excel瀵煎嚭鍔熻兘
+
+ // 妯℃嫙鏂囦欢涓嬭浇
+ const blob = new Blob([JSON.stringify(data, null, 2)], {
+ type: 'application/vnd.ms-excel'
+ });
+ const link = document.createElement('a');
+ link.href = URL.createObjectURL(blob);
+ link.download = '鍖诲璇勪及鏁版嵁.xlsx';
+ link.click();
},
// 鏃堕棿鏍煎紡鍖�
parseTime(time, pattern) {
if (!time) return "";
- // 浣跨敤moment.js鎴栫畝鍗曟牸寮忓寲
- if (this.$moment) {
- return this.$moment(time).format(pattern || "{y}-{m}-{d} {h}:{i}:{s}");
- } else {
- // 绠�鍗曟牸寮忓寲
- const date = new Date(time);
- return `${date.getFullYear()}-${(date.getMonth() + 1)
- .toString()
- .padStart(2, "0")}-${date
- .getDate()
- .toString()
- .padStart(2, "0")}`;
+ const date = new Date(time);
+ if (pattern) {
+ // 绠�鍗曠殑妯″紡鍖归厤
+ if (pattern === "{y}-{m}-{d}") {
+ return `${date.getFullYear()}-${(date.getMonth() + 1)
+ .toString()
+ .padStart(2, "0")}-${date
+ .getDate()
+ .toString()
+ .padStart(2, "0")}`;
+ }
}
+ return `${date.getFullYear()}-${(date.getMonth() + 1)
+ .toString()
+ .padStart(2, "0")}-${date
+ .getDate()
+ .toString()
+ .padStart(2, "0")} ${date
+ .getHours()
+ .toString()
+ .padStart(2, "0")}:${date
+ .getMinutes()
+ .toString()
+ .padStart(2, "0")}:${date
+ .getSeconds()
+ .toString()
+ .padStart(2, "0")}`;
}
}
};
diff --git a/src/views/business/maintain/components/BloodRoutinePanel.vue b/src/views/business/maintain/components/BloodRoutinePanel.vue
index 483150b..19fbf42 100644
--- a/src/views/business/maintain/components/BloodRoutinePanel.vue
+++ b/src/views/business/maintain/components/BloodRoutinePanel.vue
@@ -43,7 +43,7 @@
>
<template #default="scope">
<div class="item-name-cell">
- <span :class="{'required-item': scope.row.required}">
+ <span :class="{ 'required-item': scope.row.required }">
{{ scope.row.itemName }}
</span>
<el-tooltip
@@ -79,13 +79,19 @@
/>
<div v-else class="value-display-container">
<span class="value-text" :title="scope.row.values[index]">
- {{ scope.row.values[index] || '-' }}
+ {{ scope.row.values[index] || "-" }}
</span>
- <span v-if="scope.row.values[index] && scope.row.unit" class="unit-text">
+ <span
+ v-if="scope.row.values[index] && scope.row.unit"
+ class="unit-text"
+ >
{{ scope.row.unit }}
</span>
</div>
- <div v-if="scope.row.reference && scope.row.values[index]" class="validation-indicator">
+ <div
+ v-if="scope.row.reference && scope.row.values[index]"
+ class="validation-indicator"
+ >
<i
v-if="isValueValid(scope.row, scope.row.values[index])"
class="el-icon-success valid-icon"
@@ -100,20 +106,6 @@
</div>
</template>
</el-table-column>
-
- <!-- <el-table-column
- v-if="isEditing"
- label="鎿嶄綔"
- width="120"
- fixed="right"
- class-name="leave-alone"
- >
- <template #default>
- <el-button link type="primary" @click="addColumn" size="small">
- 鏂板鍒�
- </el-button>
- </template>
- </el-table-column> -->
</el-table>
<!-- 缁熻淇℃伅 -->
@@ -121,7 +113,9 @@
<el-card shadow="never">
<div class="stats-content">
<span class="stats-title">鏁版嵁缁熻:</span>
- <span class="stats-item">鎬昏褰曟暟: {{ dynamicColumns.length }} 涓椂闂寸偣</span>
+ <span class="stats-item"
+ >鎬昏褰曟暟: {{ dynamicColumns.length }} 涓椂闂寸偣</span
+ >
<span class="stats-item">宸插~鍐�: {{ filledCount }} 椤�</span>
<span class="stats-item">瀹屾垚搴�: {{ completionRate }}%</span>
</div>
@@ -194,7 +188,11 @@
>
鍒犻櫎
</el-button>
- <el-button type="primary" @click="confirmAddColumn" :loading="saveLoading">
+ <el-button
+ type="primary"
+ @click="confirmAddColumn"
+ :loading="saveLoading"
+ >
纭畾
</el-button>
</span>
@@ -206,18 +204,19 @@
import UploadAttachment from "@/components/UploadAttachment";
export default {
- name: 'BloodRoutinePanel',
+ name: "BloodRoutinePanel",
components: {
- UploadAttachment,
+ UploadAttachment
},
props: {
isEditing: {
type: Boolean,
default: false
},
+ // 淇敼涓� Object 绫诲瀷锛屾敮鎸佸鏉傛暟鎹粨鏋�
initialData: {
- type: Array,
- default: () => []
+ type: Object,
+ default: () => ({})
},
showStatistics: {
type: Boolean,
@@ -227,33 +226,23 @@
data() {
return {
tableData: [],
- dynamicColumns: [
- {
- label: '2024-12-27\n08:00',
- key: 'time1',
- date: '2024-12-27',
- time: '08:00',
- remark: '鏅ㄨ捣妫�娴�'
- }
- ],
+ dynamicColumns: [],
attachments: [],
columnDialogVisible: false,
columnForm: {
- date: '',
- time: '',
- remark: ''
+ date: "",
+ time: "",
+ remark: ""
},
editingColumnIndex: null,
tableKey: 0,
tableLoading: false,
saveLoading: false,
+ // 鍐呴儴鏁版嵁鐘舵��
+ internalData: {},
columnRules: {
- date: [
- { required: true, message: '璇烽�夋嫨鏃ユ湡', trigger: 'change' }
- ],
- time: [
- { required: true, message: '璇烽�夋嫨鏃堕棿', trigger: 'change' }
- ]
+ date: [{ required: true, message: "璇烽�夋嫨鏃ユ湡", trigger: "change" }],
+ time: [{ required: true, message: "璇烽�夋嫨鏃堕棿", trigger: "change" }]
}
};
},
@@ -262,7 +251,7 @@
let count = 0;
this.tableData.forEach(row => {
row.values.forEach(value => {
- if (value && value.toString().trim() !== '') {
+ if (value && value.toString().trim() !== "") {
count++;
}
});
@@ -275,14 +264,20 @@
}
},
watch: {
+ // 鐩戝惉 initialData 鍙樺寲锛岀‘淇濇暟鎹纭帴鏀�
+ initialData: {
+ handler(newData) {
+ if (newData && Object.keys(newData).length > 0) {
+ this.internalData = { ...newData };
+ this.initFromExternalData();
+ }
+ },
+ immediate: true,
+ deep: true
+ },
isEditing(newVal) {
if (!newVal) {
- this.$emit('data-change', {
- type: 'blood_routine',
- data: this.tableData,
- columns: this.dynamicColumns,
- attachments: this.attachments
- });
+ this.saveData();
}
this.$nextTick(() => {
this.forceTableLayout();
@@ -299,54 +294,105 @@
}
},
methods: {
+ // 浠庡閮ㄦ暟鎹垵濮嬪寲缁勪欢
+ initFromExternalData() {
+ if (this.internalData.data && this.internalData.columns) {
+ this.tableData = this.internalData.data.map(item => ({
+ ...item,
+ values:
+ item.values || new Array(this.internalData.columns.length).fill("")
+ }));
+ this.dynamicColumns = [...this.internalData.columns];
+ } else {
+ // 濡傛灉娌℃湁澶栭儴鏁版嵁锛屼娇鐢ㄧ粍浠堕粯璁ゅ垵濮嬪寲
+ this.initTableData();
+ }
+
+ // 鍒濆鍖栭檮浠�
+ if (this.internalData.attachments) {
+ this.attachments = [...this.internalData.attachments];
+ }
+ },
+
+ // 鍒濆鍖栭粯璁よ〃鏍兼暟鎹�
initTableData() {
- const medicalItems = [
- {
- itemName: 'WBC',
- unit: '脳10鈦�/L',
- required: true,
- reference: '3.5-9.5',
- min: 3.5,
- max: 9.5,
- type: 'number'
- },
- {
- itemName: 'NEUT%',
- unit: '%',
- required: true,
- reference: '40-75',
- min: 40,
- max: 75,
- type: 'number'
- },
- {
- itemName: 'Hb',
- unit: 'g/L',
- required: true,
- reference: '130-175',
- min: 130,
- max: 175,
- type: 'number'
- },
- {
- itemName: '琛�灏忔澘',
- unit: '脳10鈦�/L',
- required: true,
- reference: '125-350',
- min: 125,
- max: 350,
- type: 'number'
- }
- ];
+ const medicalItems = this.getMedicalItems();
+
+ // 濡傛灉娌℃湁鍔ㄦ�佸垪锛屽垵濮嬪寲榛樿鍒�
+ if (this.dynamicColumns.length === 0) {
+ this.dynamicColumns = [
+ {
+ label: `${new Date().toISOString().split("T")[0]}\n08:00`,
+ key: "time1",
+ date: new Date().toISOString().split("T")[0],
+ time: "08:00",
+ remark: "鏅ㄨ捣妫�娴�"
+ }
+ ];
+ }
this.tableData = medicalItems.map(item => ({
...item,
- values: new Array(this.dynamicColumns.length).fill('')
+ values: new Array(this.dynamicColumns.length).fill("")
}));
},
+ // 琛�甯歌妫�娴嬮」鐩畾涔�
+ getMedicalItems() {
+ return [
+ {
+ itemName: "WBC",
+ unit: "脳10鈦�/L",
+ required: true,
+ reference: "3.5-9.5",
+ min: 3.5,
+ max: 9.5,
+ type: "number"
+ },
+ {
+ itemName: "NEUT%",
+ unit: "%",
+ required: true,
+ reference: "40-75",
+ min: 40,
+ max: 75,
+ type: "number"
+ },
+ {
+ itemName: "Hb",
+ unit: "g/L",
+ required: true,
+ reference: "130-175",
+ min: 130,
+ max: 175,
+ type: "number"
+ },
+ {
+ itemName: "琛�灏忔澘",
+ unit: "脳10鈦�/L",
+ required: true,
+ reference: "125-350",
+ min: 125,
+ max: 350,
+ type: "number"
+ }
+ ];
+ },
+
+ // 淇濆瓨鏁版嵁鍒扮埗缁勪欢
+ saveData() {
+ const dataToEmit = {
+ type: "blood_routine",
+ data: this.tableData,
+ columns: this.dynamicColumns,
+ attachments: this.attachments
+ };
+
+ this.$emit("data-change", dataToEmit);
+ },
+
getPlaceholder(row) {
- return row.reference ? `鍙傝��: ${row.reference}` : '璇疯緭鍏ユ暟鍊�';
+ return row.reference ? `鍙傝��: ${row.reference}` : "璇疯緭鍏ユ暟鍊�";
},
isValueValid(row, value) {
@@ -358,9 +404,9 @@
addColumn() {
this.editingColumnIndex = null;
this.columnForm = {
- date: new Date().toISOString().split('T')[0],
- time: '08:00',
- remark: ''
+ date: new Date().toISOString().split("T")[0],
+ time: "08:00",
+ remark: ""
};
this.columnDialogVisible = true;
this.$nextTick(() => {
@@ -374,15 +420,15 @@
this.columnForm = {
date: column.date,
time: column.time,
- remark: column.remark || ''
+ remark: column.remark || ""
};
this.columnDialogVisible = true;
},
confirmAddColumn() {
- this.$refs.columnFormB.validate((valid) => {
+ this.$refs.columnFormB.validate(valid => {
if (!valid) {
- this.$message.warning('璇峰畬鍠勬椂闂寸偣淇℃伅');
+ this.$message.warning("璇峰畬鍠勬椂闂寸偣淇℃伅");
return;
}
@@ -395,10 +441,9 @@
column.date = this.columnForm.date;
column.time = this.columnForm.time;
column.remark = this.columnForm.remark;
- this.$message.success('鏃堕棿鐐逛慨鏀规垚鍔�');
+ this.$message.success("鏃堕棿鐐逛慨鏀规垚鍔�");
} else {
// 鏂板鍒�
- const newIndex = this.dynamicColumns.length + 1;
const newColumn = {
label: `${this.columnForm.date}\n${this.columnForm.time}`,
key: `time${Date.now()}`,
@@ -407,11 +452,13 @@
remark: this.columnForm.remark
};
+ this.internalData.columns.push(newColumn);
this.dynamicColumns.push(newColumn);
this.tableData.forEach(row => {
- row.values.push('');
+ if (!row.values) row.values = [];
+ row.values.push("");
});
- this.$message.success('鏃堕棿鐐规坊鍔犳垚鍔�');
+ this.$message.success("鏃堕棿鐐规坊鍔犳垚鍔�");
}
this.columnDialogVisible = false;
@@ -422,10 +469,10 @@
handleDeleteColumn() {
if (this.editingColumnIndex !== null) {
- this.$confirm('纭畾瑕佸垹闄よ繖涓椂闂寸偣鍚楋紵', '鎻愮ず', {
- confirmButtonText: '纭畾',
- cancelButtonText: '鍙栨秷',
- type: 'warning'
+ this.$confirm("纭畾瑕佸垹闄よ繖涓椂闂寸偣鍚楋紵", "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
}).then(() => {
this.dynamicColumns.splice(this.editingColumnIndex, 1);
this.tableData.forEach(row => {
@@ -433,7 +480,7 @@
});
this.columnDialogVisible = false;
this.tableKey += 1;
- this.$message.success('鏃堕棿鐐瑰垹闄ゆ垚鍔�');
+ this.$message.success("鏃堕棿鐐瑰垹闄ゆ垚鍔�");
});
}
},
@@ -441,9 +488,9 @@
handleDialogClosed() {
this.editingColumnIndex = null;
this.columnForm = {
- date: '',
- time: '',
- remark: ''
+ date: "",
+ time: "",
+ remark: ""
};
this.$refs.columnFormB && this.$refs.columnFormB.clearValidate();
},
@@ -453,26 +500,22 @@
},
handleValueChange(row, columnIndex) {
- this.$emit('data-change', {
- type: 'blood_routine',
- data: this.tableData,
- columns: this.dynamicColumns
- });
+ this.saveData();
},
handleAttachmentChange(fileList) {
this.attachments = fileList;
- this.$emit('attachment-change', {
- type: 'blood_routine',
+ this.$emit("attachment-change", {
+ type: "blood_routine",
attachments: fileList
});
},
forceTableLayout() {
this.$nextTick(() => {
- const table = this.$el.querySelector('.el-table');
+ const table = this.$el.querySelector(".el-table");
if (table) {
- window.dispatchEvent(new Event('resize'));
+ window.dispatchEvent(new Event("resize"));
}
});
},
@@ -496,7 +539,13 @@
}
},
mounted() {
- this.initTableData();
+ // 纭繚缁勪欢姝g‘鎸傝浇鍚庡垵濮嬪寲鏁版嵁
+ this.$nextTick(() => {
+ if (Object.keys(this.internalData).length === 0) {
+ this.initTableData();
+ }
+ this.forceTableLayout();
+ });
}
};
</script>
@@ -681,13 +730,5 @@
flex-direction: column;
gap: 4px;
}
-}
-
-/* 鍔ㄧ敾鏁堟灉 */
-.fade-enter-active, .fade-leave-active {
- transition: opacity 0.3s;
-}
-.fade-enter, .fade-leave-to {
- opacity: 0;
}
</style>
diff --git a/src/views/business/maintain/components/LiverKidneyPanel.vue b/src/views/business/maintain/components/LiverKidneyPanel.vue
index a485fed..beb903a 100644
--- a/src/views/business/maintain/components/LiverKidneyPanel.vue
+++ b/src/views/business/maintain/components/LiverKidneyPanel.vue
@@ -30,7 +30,7 @@
class-name="leave-alone"
>
<template #default="scope">
- <span :class="{'required-item': scope.row.required}">
+ <span :class="{ 'required-item': scope.row.required }">
{{ scope.row.itemName }}
</span>
</template>
@@ -54,8 +54,11 @@
class="value-input"
/>
<span v-else class="value-display">
- {{ scope.row.values[index] || '-' }}
- <span v-if="scope.row.values[index] && scope.row.unit" class="unit">
+ {{ scope.row.values[index] || "-" }}
+ <span
+ v-if="scope.row.values[index] && scope.row.unit"
+ class="unit"
+ >
{{ scope.row.unit }}
</span>
</span>
@@ -65,8 +68,6 @@
</div>
</template>
</el-table-column>
-
-
</el-table>
<!-- 闄勪欢涓婁紶鍖哄煙 -->
@@ -95,7 +96,9 @@
<el-form-item
label="鏃ユ湡"
prop="date"
- :rules="[{ required: true, message: '璇烽�夋嫨鏃ユ湡', trigger: 'change' }]"
+ :rules="[
+ { required: true, message: '璇烽�夋嫨鏃ユ湡', trigger: 'change' }
+ ]"
>
<el-date-picker
v-model="columnForm.date"
@@ -108,7 +111,9 @@
<el-form-item
label="鏃堕棿"
prop="time"
- :rules="[{ required: true, message: '璇烽�夋嫨鏃堕棿', trigger: 'change' }]"
+ :rules="[
+ { required: true, message: '璇烽�夋嫨鏃堕棿', trigger: 'change' }
+ ]"
>
<el-time-picker
v-model="columnForm.time"
@@ -130,65 +135,58 @@
import UploadAttachment from "@/components/UploadAttachment";
export default {
- name: 'LiverKidneyPanel',
+ name: "LiverKidneyPanel",
components: {
- UploadAttachment,
+ UploadAttachment
},
props: {
isEditing: {
type: Boolean,
default: false
},
+ // 淇敼 prop 瀹氫箟锛屾敮鎸佸璞℃牸寮忕殑鍒濆鏁版嵁
initialData: {
- type: Array,
- default: () => []
+ type: Object,
+ default: () => ({})
}
},
data() {
return {
tableData: [],
- dynamicColumns: [
- {
- label: '2024-12-27\n08:00',
- key: 'time1',
- date: '2024-12-27',
- time: '08:00'
- },
- {
- label: '2024-12-27\n14:00',
- key: 'time2',
- date: '2024-12-27',
- time: '14:00'
- }
- ],
+ dynamicColumns: [],
attachments: [],
columnDialogVisible: false,
columnForm: {
- date: '',
- time: ''
+ date: "",
+ time: ""
},
- tableKey: 0 // 鐢ㄤ簬寮哄埗閲嶆柊娓叉煋琛ㄦ牸
+ tableKey: 0,
+ // 鍐呴儴鏁版嵁鐘舵��
+ internalData: {}
};
},
watch: {
+ // 鐩戝惉 initialData 鍙樺寲锛岀‘淇濇暟鎹纭帴鏀� [5](@ref)
+ initialData: {
+ handler(newData) {
+ if (newData && Object.keys(newData).length > 0) {
+ this.internalData = { ...newData };
+ this.initFromExternalData();
+ }
+ },
+ immediate: true,
+ deep: true
+ },
isEditing(newVal) {
if (!newVal) {
- // 淇濆瓨鏁版嵁
- this.$emit('data-change', {
- type: 'liver_kidney',
- data: this.tableData,
- columns: this.dynamicColumns,
- attachments: this.attachments
- });
+ this.saveData();
}
- // 缂栬緫妯″紡鍒囨崲鏃堕噸鏂拌绠楀垪瀹�
this.$nextTick(() => {
this.forceTableLayout();
});
},
dynamicColumns: {
handler() {
- // 鍒楀彉鍖栨椂閲嶆柊璁$畻甯冨眬
this.$nextTick(() => {
this.forceTableLayout();
});
@@ -197,94 +195,99 @@
}
},
methods: {
+ // 浠庡閮ㄦ暟鎹垵濮嬪寲缁勪欢 [9](@ref)
+ initFromExternalData() {
+ if (this.internalData.data && this.internalData.columns) {
+ // 浣跨敤澶栭儴鏁版嵁鍒濆鍖栬〃鏍�
+ this.tableData = this.internalData.data.map(item => ({
+ ...item,
+ values:
+ item.values || new Array(this.internalData.columns.length).fill("")
+ }));
+ this.dynamicColumns = [...this.internalData.columns];
+ } else {
+ // 濡傛灉娌℃湁澶栭儴鏁版嵁锛屼娇鐢ㄩ粯璁ゅ垵濮嬪寲
+ this.initTableData();
+ }
+
+ // 鍒濆鍖栭檮浠�
+ if (this.internalData.attachments) {
+ this.attachments = [...this.internalData.attachments];
+ }
+ },
+
+ // 鍒濆鍖栭粯璁よ〃鏍兼暟鎹�
initTableData() {
const medicalItems = [
{
- itemName: '琛�閽�',
- unit: 'mmol/L',
+ itemName: "琛�閽�",
+ unit: "mmol/L",
required: true,
- reference: '135-145'
+ reference: "135-145"
},
{
- itemName: '琛�閽�',
- unit: 'mmol/L',
+ itemName: "琛�閽�",
+ unit: "mmol/L",
required: true,
- reference: '3.5-5.5'
+ reference: "3.5-5.5"
},
+ { itemName: "BUN", unit: "mg/dL", required: true, reference: "<20" },
+ { itemName: "鑲岄厫", unit: "渭mol/L", required: true, reference: "<100" },
{
- itemName: 'BUN',
- unit: 'mg/dL',
+ itemName: "鎬昏儐绾㈢礌",
+ unit: "渭mol/L",
required: true,
- reference: '<20'
+ reference: "<21"
},
- {
- itemName: '鑲岄厫',
- unit: '渭mol/L',
- required: true,
- reference: '<100'
- },
- {
- itemName: '鎬昏儐绾㈢礌',
- unit: '渭mol/L',
- required: true,
- reference: '<21'
- },
- {
- itemName: 'ALT',
- unit: 'U/L',
- required: true,
- reference: '<50'
- },
- {
- itemName: 'AST',
- unit: 'U/L',
- required: true,
- reference: '<40'
- },
- {
- itemName: 'GGT',
- unit: 'U/L',
- required: true,
- reference: '<57'
- },
- {
- itemName: 'ALP',
- unit: 'U/L',
- required: true,
- reference: '<120'
- },
- {
- itemName: 'PT',
- unit: '绉�',
- required: true,
- reference: '9.4-12.5'
- },
- {
- itemName: 'INR',
- unit: '',
- required: true,
- reference: '0.85-1.15'
- }
+ { itemName: "ALT", unit: "U/L", required: true, reference: "<50" },
+ { itemName: "AST", unit: "U/L", required: true, reference: "<40" },
+ { itemName: "GGT", unit: "U/L", required: true, reference: "<57" },
+ { itemName: "ALP", unit: "U/L", required: true, reference: "<120" },
+ { itemName: "PT", unit: "绉�", required: true, reference: "9.4-12.5" },
+ { itemName: "INR", unit: "", required: true, reference: "0.85-1.15" }
];
+
+ // 濡傛灉娌℃湁鍔ㄦ�佸垪锛屽垵濮嬪寲榛樿鍒�
+ if (this.dynamicColumns.length === 0) {
+ this.dynamicColumns = [
+ {
+ label: `${new Date().toISOString().split("T")[0]}\n08:00`,
+ key: "time1",
+ date: new Date().toISOString().split("T")[0],
+ time: "08:00"
+ }
+ ];
+ }
this.tableData = medicalItems.map(item => ({
...item,
- values: new Array(this.dynamicColumns.length).fill('')
+ values: new Array(this.dynamicColumns.length).fill("")
}));
+ },
+
+ // 淇濆瓨鏁版嵁鍒扮埗缁勪欢 [2](@ref)
+ saveData() {
+ const dataToEmit = {
+ type: "liver_kidney",
+ data: this.tableData,
+ columns: this.dynamicColumns,
+ attachments: this.attachments
+ };
+ this.$emit("data-change", dataToEmit);
},
addColumn() {
this.columnForm = {
- date: new Date().toISOString().split('T')[0],
- time: '08:00'
+ date: new Date().toISOString().split("T")[0],
+ time: "08:00"
};
this.columnDialogVisible = true;
},
confirmAddColumn() {
- this.$refs.columnForm.validate((valid) => {
+ this.$refs.columnForm.validate(valid => {
if (!valid) {
- this.$message.warning('璇峰畬鍠勬椂闂寸偣淇℃伅');
+ this.$message.warning("璇峰畬鍠勬椂闂寸偣淇℃伅");
return;
}
@@ -295,64 +298,60 @@
date: this.columnForm.date,
time: this.columnForm.time
};
+ this.internalData.columns.push(newColumn);
this.dynamicColumns.push(newColumn);
// 涓烘墍鏈夎鏂板涓�涓┖鍊�
this.tableData.forEach(row => {
- row.values.push('');
+ if (!row.values) {
+ row.values = [];
+ }
+ row.values.push("");
});
this.columnDialogVisible = false;
- this.$message.success('鏃堕棿鐐规坊鍔犳垚鍔�');
-
- // 寮哄埗琛ㄦ牸閲嶆柊娓叉煋
+ this.$message.success("鏃堕棿鐐规坊鍔犳垚鍔�");
this.tableKey += 1;
});
},
handleDialogClosed() {
this.columnForm = {
- date: '',
- time: ''
+ date: "",
+ time: ""
};
this.$refs.columnForm && this.$refs.columnForm.clearValidate();
},
handleValueChange(row, columnIndex) {
- this.$emit('data-change', {
- type: 'liver_kidney',
- data: this.tableData,
- columns: this.dynamicColumns
- });
+ this.saveData();
},
handleAttachmentChange(fileList) {
this.attachments = fileList;
- this.$emit('attachment-change', {
- type: 'liver_kidney',
+ this.$emit("attachment-change", {
+ type: "liver_kidney",
attachments: fileList
});
},
- // 寮哄埗琛ㄦ牸閲嶆柊甯冨眬[1,3](@ref)
forceTableLayout() {
this.$nextTick(() => {
- const table = this.$el.querySelector('.el-table');
- if (table && table.querySelector('colgroup')) {
- // 瑙﹀彂琛ㄦ牸閲嶆柊璁$畻甯冨眬
+ const table = this.$el.querySelector(".el-table");
+ if (table && table.querySelector("colgroup")) {
this.$nextTick(() => {
- window.dispatchEvent(new Event('resize'));
+ window.dispatchEvent(new Event("resize"));
});
}
});
},
handleHeaderDragEnd() {
- // 鍒楀鎷栨嫿缁撴潫鍚庨噸鏂拌绠楀竷灞�
this.forceTableLayout();
},
+ // 鎻愪緵鏁版嵁瀵煎嚭鏂规硶渚涚埗缁勪欢璋冪敤
exportData() {
return {
tableData: this.tableData,
@@ -363,9 +362,11 @@
}
},
mounted() {
- this.initTableData();
- // 鍒濆娓叉煋鍚庤绠楀垪瀹�
+ // 纭繚缁勪欢姝g‘鎸傝浇鍚庡垵濮嬪寲鏁版嵁 [1](@ref)
this.$nextTick(() => {
+ if (Object.keys(this.internalData).length === 0) {
+ this.initTableData();
+ }
this.forceTableLayout();
});
}
@@ -464,7 +465,6 @@
font-weight: normal;
}
-/* 鍝嶅簲寮忚璁� */
@media (max-width: 768px) {
.medical-panel {
padding: 10px;
diff --git a/src/views/business/maintain/components/UrineRoutinePanel.vue b/src/views/business/maintain/components/UrineRoutinePanel.vue
index b548a04..541158f 100644
--- a/src/views/business/maintain/components/UrineRoutinePanel.vue
+++ b/src/views/business/maintain/components/UrineRoutinePanel.vue
@@ -43,7 +43,7 @@
>
<template #default="scope">
<div class="item-name-cell">
- <span :class="{'required-item': scope.row.required}">
+ <span :class="{ 'required-item': scope.row.required }">
{{ scope.row.itemName }}
</span>
<el-tooltip
@@ -85,8 +85,12 @@
:value="option.value"
/>
</el-select>
- <span v-else class="value-text" :title="getSelectLabel(scope.row, index)">
- {{ getSelectLabel(scope.row, index) || '-' }}
+ <span
+ v-else
+ class="value-text"
+ :title="getSelectLabel(scope.row, index)"
+ >
+ {{ getSelectLabel(scope.row, index) || "-" }}
</span>
</template>
@@ -102,9 +106,12 @@
/>
<div v-else class="value-display-container">
<span class="value-text" :title="scope.row.values[index]">
- {{ scope.row.values[index] || '-' }}
+ {{ scope.row.values[index] || "-" }}
</span>
- <span v-if="scope.row.values[index] && scope.row.unit" class="unit-text">
+ <span
+ v-if="scope.row.values[index] && scope.row.unit"
+ class="unit-text"
+ >
{{ scope.row.unit }}
</span>
</div>
@@ -112,20 +119,6 @@
</div>
</template>
</el-table-column>
-
- <!-- <el-table-column
- v-if="isEditing"
- label="鎿嶄綔"
- width="120"
- fixed="right"
- class-name="leave-alone"
- >
- <template #default>
- <el-button link type="primary" @click="addColumn" size="small">
- 鏂板鍒�
- </el-button>
- </template>
- </el-table-column> -->
</el-table>
<!-- 缁熻淇℃伅 -->
@@ -133,7 +126,9 @@
<el-card shadow="never">
<div class="stats-content">
<span class="stats-title">鏁版嵁缁熻:</span>
- <span class="stats-item">鎬昏褰曟暟: {{ dynamicColumns.length }} 涓椂闂寸偣</span>
+ <span class="stats-item"
+ >鎬昏褰曟暟: {{ dynamicColumns.length }} 涓椂闂寸偣</span
+ >
<span class="stats-item">宸插~鍐�: {{ filledCount }} 椤�</span>
<span class="stats-item">瀹屾垚搴�: {{ completionRate }}%</span>
</div>
@@ -145,7 +140,9 @@
<div class="attachment-header">
<i class="el-icon-paperclip"></i>
<span class="attachment-title">闄勪欢涓婁紶</span>
- <span class="attachment-tip">鏀寔涓婁紶灏垮父瑙勬楠屾姤鍛婂崟绛夋枃浠� (鏈�澶�10涓�)</span>
+ <span class="attachment-tip"
+ >鏀寔涓婁紶灏垮父瑙勬楠屾姤鍛婂崟绛夋枃浠� (鏈�澶�10涓�)</span
+ >
</div>
<upload-attachment
:file-list="attachments"
@@ -206,7 +203,11 @@
>
鍒犻櫎
</el-button>
- <el-button type="primary" @click="confirmAddColumn" :loading="saveLoading">
+ <el-button
+ type="primary"
+ @click="confirmAddColumn"
+ :loading="saveLoading"
+ >
纭畾
</el-button>
</span>
@@ -218,18 +219,19 @@
import UploadAttachment from "@/components/UploadAttachment";
export default {
- name: 'UrineRoutinePanel',
+ name: "UrineRoutinePanel",
components: {
- UploadAttachment,
+ UploadAttachment
},
props: {
isEditing: {
type: Boolean,
default: false
},
+ // 淇敼涓� Object 绫诲瀷锛屾敮鎸佸鏉傛暟鎹粨鏋�
initialData: {
- type: Array,
- default: () => []
+ type: Object,
+ default: () => ({})
},
showStatistics: {
type: Boolean,
@@ -239,33 +241,23 @@
data() {
return {
tableData: [],
- dynamicColumns: [
- {
- label: '2024-12-27\n08:00',
- key: 'time1',
- date: '2024-12-27',
- time: '08:00',
- remark: '鏅ㄥ翱妫�娴�'
- }
- ],
+ dynamicColumns: [],
attachments: [],
columnDialogVisible: false,
columnForm: {
- date: '',
- time: '',
- remark: ''
+ date: "",
+ time: "",
+ remark: ""
},
editingColumnIndex: null,
tableKey: 0,
tableLoading: false,
saveLoading: false,
+ // 鍐呴儴鏁版嵁鐘舵��
+ internalData: {},
columnRules: {
- date: [
- { required: true, message: '璇烽�夋嫨鏃ユ湡', trigger: 'change' }
- ],
- time: [
- { required: true, message: '璇烽�夋嫨鏃堕棿', trigger: 'change' }
- ]
+ date: [{ required: true, message: "璇烽�夋嫨鏃ユ湡", trigger: "change" }],
+ time: [{ required: true, message: "璇烽�夋嫨鏃堕棿", trigger: "change" }]
}
};
},
@@ -274,7 +266,7 @@
let count = 0;
this.tableData.forEach(row => {
row.values.forEach(value => {
- if (value && value.toString().trim() !== '') {
+ if (value && value.toString().trim() !== "") {
count++;
}
});
@@ -287,14 +279,22 @@
}
},
watch: {
+ // 鐩戝惉 initialData 鍙樺寲锛岀‘淇濇暟鎹纭帴鏀�
+ initialData: {
+ handler(newData) {
+ console.log(newData);
+
+ if (newData && Object.keys(newData).length > 0) {
+ this.internalData = { ...newData };
+ this.initFromExternalData();
+ }
+ },
+ immediate: true,
+ deep: true
+ },
isEditing(newVal) {
if (!newVal) {
- this.$emit('data-change', {
- type: 'urine_routine',
- data: this.tableData,
- columns: this.dynamicColumns,
- attachments: this.attachments
- });
+ this.saveData();
}
this.$nextTick(() => {
this.forceTableLayout();
@@ -311,114 +311,168 @@
}
},
methods: {
- initTableData() {
- const medicalItems = [
+ // 浠庡閮ㄦ暟鎹垵濮嬪寲缁勪欢
+ initFromExternalData() {
+ console.log(this.internalData,'this.internalData');
+ if (this.internalData.data && this.internalData.columns) {
+ this.tableData = this.internalData.data.map(item => ({
+ ...item,
+ values:
+ item.values || new Array(this.internalData.columns.length).fill("")
+ }));
+ this.dynamicColumns = [...this.internalData.columns];
+ } else {
+ // 濡傛灉娌℃湁澶栭儴鏁版嵁锛屼娇鐢ㄧ粍浠堕粯璁ゅ垵濮嬪寲
+ this.initTableData();
+ }
+
+ // 鍒濆鍖栭檮浠�
+ if (this.internalData.attachments) {
+ this.attachments = [...this.internalData.attachments];
+ }
+ },
+
+ // 鍒濆鍖栭粯璁よ〃鏍兼暟鎹�
+ initTableData() {
+ const medicalItems = this.getMedicalItems();
+
+ // 濡傛灉娌℃湁鍔ㄦ�佸垪锛屽垵濮嬪寲榛樿鍒�
+ if (this.dynamicColumns.length === 0) {
+ this.dynamicColumns = [
+ {
+ label: `${new Date().toISOString().split("T")[0]}\n08:00`,
+ key: "time1",
+ date: new Date().toISOString().split("T")[0],
+ time: "08:00",
+ remark: "鏅ㄥ翱妫�娴�"
+ }
+ ];
+ }
+
+ this.tableData = medicalItems.map(item => ({
+ ...item,
+ values: new Array(this.dynamicColumns.length).fill("")
+ }));
+ },
+
+ // 灏垮父瑙勬娴嬮」鐩畾涔�
+ getMedicalItems() {
+ return [
{
- itemName: '灏块噺',
- type: 'number',
+ itemName: "灏块噺",
+ type: "number",
required: true,
- unit: 'ml/h',
- reference: '姝e父鑼冨洿瑙嗘儏鍐佃�屽畾'
+ unit: "ml/h",
+ reference: "姝e父鑼冨洿瑙嗘儏鍐佃�屽畾"
},
{
- itemName: '棰滆壊',
- type: 'select',
+ itemName: "棰滆壊",
+ type: "select",
required: true,
options: [
- { value: '娣¢粍鑹�', label: '娣¢粍鑹�' },
- { value: '榛勮壊', label: '榛勮壊' },
- { value: '娣遍粍鑹�', label: '娣遍粍鑹�' },
- { value: '绾㈣壊', label: '绾㈣壊' },
- { value: '鐧借壊', label: '鐧借壊' },
- { value: '鍏朵粬', label: '鍏朵粬' }
+ { value: "娣¢粍鑹�", label: "娣¢粍鑹�" },
+ { value: "榛勮壊", label: "榛勮壊" },
+ { value: "娣遍粍鑹�", label: "娣遍粍鑹�" },
+ { value: "绾㈣壊", label: "绾㈣壊" },
+ { value: "鐧借壊", label: "鐧借壊" },
+ { value: "鍏朵粬", label: "鍏朵粬" }
]
},
{
- itemName: '澶栬',
- type: 'select',
+ itemName: "澶栬",
+ type: "select",
required: false,
options: [
- { value: '娓呬寒', label: '娓呬寒' },
- { value: '寰祳', label: '寰祳' },
- { value: '娴戞祳', label: '娴戞祳' },
- { value: '娌夋穩', label: '娌夋穩' },
- { value: '鍏朵粬', label: '鍏朵粬' }
+ { value: "娓呬寒", label: "娓呬寒" },
+ { value: "寰祳", label: "寰祳" },
+ { value: "娴戞祳", label: "娴戞祳" },
+ { value: "娌夋穩", label: "娌夋穩" },
+ { value: "鍏朵粬", label: "鍏朵粬" }
]
},
{
- itemName: '灏胯泲鐧�',
- type: 'select',
+ itemName: "灏胯泲鐧�",
+ type: "select",
required: true,
options: [
- { value: '-', label: '闃存��(-)' },
- { value: '卤', label: '寰噺(卤)' },
- { value: '+', label: '闃虫��(+)' },
- { value: '++', label: '闃虫��(++)' },
- { value: '+++', label: '闃虫��(+++)' }
+ { value: "-", label: "闃存��(-)" },
+ { value: "卤", label: "寰噺(卤)" },
+ { value: "+", label: "闃虫��(+)" },
+ { value: "++", label: "闃虫��(++)" },
+ { value: "+++", label: "闃虫��(+++)" }
],
- reference: '姝e父涓洪槾鎬�(-)'
+ reference: "姝e父涓洪槾鎬�(-)"
},
{
- itemName: 'pH鍊�',
- type: 'number',
+ itemName: "pH鍊�",
+ type: "number",
required: true,
- placeholder: '4.5-8.0',
- unit: '',
- reference: '4.5-8.0',
+ placeholder: "4.5-8.0",
+ unit: "",
+ reference: "4.5-8.0",
min: 4.5,
max: 8.0
},
{
- itemName: '鐧界粏鑳�',
- type: 'select',
+ itemName: "鐧界粏鑳�",
+ type: "select",
required: true,
options: [
- { value: '-', label: '闃存��(-)' },
- { value: '+', label: '闃虫��(+)' },
- { value: '++', label: '闃虫��(++)' },
- { value: '+++', label: '闃虫��(+++)' }
+ { value: "-", label: "闃存��(-)" },
+ { value: "+", label: "闃虫��(+)" },
+ { value: "++", label: "闃虫��(++)" },
+ { value: "+++", label: "闃虫��(+++)" }
],
- reference: '姝e父涓洪槾鎬�(-)'
+ reference: "姝e父涓洪槾鎬�(-)"
},
{
- itemName: '绾㈢粏鑳�',
- type: 'number',
+ itemName: "绾㈢粏鑳�",
+ type: "number",
required: true,
- unit: '/渭L',
- reference: '0-9.2',
+ unit: "/渭L",
+ reference: "0-9.2",
min: 0,
max: 9.2
},
{
- itemName: '缁嗚弻',
- type: 'number',
+ itemName: "缁嗚弻",
+ type: "number",
required: true,
- unit: '/渭L',
- reference: '0-385',
+ unit: "/渭L",
+ reference: "0-385",
min: 0,
max: 385
}
];
+ },
- this.tableData = medicalItems.map(item => ({
- ...item,
- values: new Array(this.dynamicColumns.length).fill('')
- }));
+ // 淇濆瓨鏁版嵁鍒扮埗缁勪欢
+ saveData() {
+ const dataToEmit = {
+ type: "urine_routine",
+ data: this.tableData,
+ columns: this.dynamicColumns,
+ attachments: this.attachments
+ };
+ this.$emit("data-change", dataToEmit);
},
getSelectLabel(row, columnIndex) {
- if (!row.options || !row.values[columnIndex]) return row.values[columnIndex];
- const option = row.options.find(opt => opt.value === row.values[columnIndex]);
+ if (!row.options || !row.values[columnIndex])
+ return row.values[columnIndex];
+ const option = row.options.find(
+ opt => opt.value === row.values[columnIndex]
+ );
return option ? option.label : row.values[columnIndex];
},
addColumn() {
this.editingColumnIndex = null;
this.columnForm = {
- date: new Date().toISOString().split('T')[0],
- time: '08:00',
- remark: ''
+ date: new Date().toISOString().split("T")[0],
+ time: "08:00",
+ remark: ""
};
this.columnDialogVisible = true;
this.$nextTick(() => {
@@ -432,15 +486,15 @@
this.columnForm = {
date: column.date,
time: column.time,
- remark: column.remark || ''
+ remark: column.remark || ""
};
this.columnDialogVisible = true;
},
confirmAddColumn() {
- this.$refs.columnFormU.validate((valid) => {
+ this.$refs.columnFormU.validate(valid => {
if (!valid) {
- this.$message.warning('璇峰畬鍠勬椂闂寸偣淇℃伅');
+ this.$message.warning("璇峰畬鍠勬椂闂寸偣淇℃伅");
return;
}
@@ -453,10 +507,9 @@
column.date = this.columnForm.date;
column.time = this.columnForm.time;
column.remark = this.columnForm.remark;
- this.$message.success('鏃堕棿鐐逛慨鏀规垚鍔�');
+ this.$message.success("鏃堕棿鐐逛慨鏀规垚鍔�");
} else {
// 鏂板鍒�
- const newIndex = this.dynamicColumns.length + 1;
const newColumn = {
label: `${this.columnForm.date}\n${this.columnForm.time}`,
key: `time${Date.now()}`,
@@ -464,12 +517,14 @@
time: this.columnForm.time,
remark: this.columnForm.remark
};
+ this.internalData.columns.push(newColumn);
this.dynamicColumns.push(newColumn);
this.tableData.forEach(row => {
- row.values.push('');
+ if (!row.values) row.values = [];
+ row.values.push("");
});
- this.$message.success('鏃堕棿鐐规坊鍔犳垚鍔�');
+ this.$message.success("鏃堕棿鐐规坊鍔犳垚鍔�");
}
this.columnDialogVisible = false;
@@ -480,10 +535,10 @@
handleDeleteColumn() {
if (this.editingColumnIndex !== null) {
- this.$confirm('纭畾瑕佸垹闄よ繖涓椂闂寸偣鍚楋紵', '鎻愮ず', {
- confirmButtonText: '纭畾',
- cancelButtonText: '鍙栨秷',
- type: 'warning'
+ this.$confirm("纭畾瑕佸垹闄よ繖涓椂闂寸偣鍚楋紵", "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
}).then(() => {
this.dynamicColumns.splice(this.editingColumnIndex, 1);
this.tableData.forEach(row => {
@@ -491,7 +546,7 @@
});
this.columnDialogVisible = false;
this.tableKey += 1;
- this.$message.success('鏃堕棿鐐瑰垹闄ゆ垚鍔�');
+ this.$message.success("鏃堕棿鐐瑰垹闄ゆ垚鍔�");
});
}
},
@@ -499,9 +554,9 @@
handleDialogClosed() {
this.editingColumnIndex = null;
this.columnForm = {
- date: '',
- time: '',
- remark: ''
+ date: "",
+ time: "",
+ remark: ""
};
this.$refs.columnFormU && this.$refs.columnFormU.clearValidate();
},
@@ -511,26 +566,22 @@
},
handleValueChange(row, columnIndex) {
- this.$emit('data-change', {
- type: 'urine_routine',
- data: this.tableData,
- columns: this.dynamicColumns
- });
+ this.saveData();
},
handleAttachmentChange(fileList) {
this.attachments = fileList;
- this.$emit('attachment-change', {
- type: 'urine_routine',
+ this.$emit("attachment-change", {
+ type: "urine_routine",
attachments: fileList
});
},
forceTableLayout() {
this.$nextTick(() => {
- const table = this.$el.querySelector('.el-table');
+ const table = this.$el.querySelector(".el-table");
if (table) {
- window.dispatchEvent(new Event('resize'));
+ window.dispatchEvent(new Event("resize"));
}
});
},
@@ -554,7 +605,13 @@
}
},
mounted() {
- this.initTableData();
+ // 纭繚缁勪欢姝g‘鎸傝浇鍚庡垵濮嬪寲鏁版嵁
+ this.$nextTick(() => {
+ if (Object.keys(this.internalData).length === 0) {
+ this.initTableData();
+ }
+ this.forceTableLayout();
+ });
}
};
</script>
@@ -739,13 +796,5 @@
flex-direction: column;
gap: 4px;
}
-}
-
-/* 鍔ㄧ敾鏁堟灉 */
-.fade-enter-active, .fade-leave-active {
- transition: opacity 0.3s;
-}
-.fade-enter, .fade-leave-to {
- opacity: 0;
}
</style>
diff --git a/src/views/business/maintain/index.vue b/src/views/business/maintain/index.vue
index 17d3be6..29c2bbb 100644
--- a/src/views/business/maintain/index.vue
+++ b/src/views/business/maintain/index.vue
@@ -8,37 +8,37 @@
:inline="true"
label-width="100px"
>
- <el-form-item label="鎹愮尞鑰呭鍚�" prop="donorName">
+ <el-form-item label="鎹愮尞鑰呭鍚�" prop="name">
<el-input
- v-model="queryParams.donorName"
+ v-model="queryParams.name"
placeholder="璇疯緭鍏ユ崘鐚�呭鍚�"
clearable
style="width: 200px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
- <el-form-item label="鎵�鍦ㄥ尰鐤楁満鏋�" prop="hospitalName">
+ <el-form-item label="鎵�鍦ㄥ尰鐤楁満鏋�" prop="treatmenthospitalname">
<el-input
- v-model="queryParams.hospitalName"
+ v-model="queryParams.treatmenthospitalname"
placeholder="璇疯緭鍏ュ尰鐤楁満鏋�"
clearable
style="width: 200px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
- <el-form-item label="鍖荤枟缁勪汉鍛�" prop="medicalStaff">
+ <el-form-item label="鍗忚皟鍛�" prop="coordinatorName">
<el-input
- v-model="queryParams.medicalStaff"
- placeholder="璇疯緭鍏ュ尰鐤楃粍浜哄憳"
+ v-model="queryParams.coordinatorName"
+ placeholder="璇疯緭鍏ュ崗璋冨憳濮撳悕"
clearable
style="width: 200px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
- <el-form-item label="鎮h�呯姸鎬�" prop="patientStatus">
+ <el-form-item label="鎮h�呯姸鎬�" prop="recordstate">
<el-select
- v-model="queryParams.patientStatus"
- placeholder="璇烽�夋嫨鎮h�呯姸鎬�"
+ v-model="queryParams.recordstate"
+ placeholder="璇烽�夋嫨璁板綍鐘舵��"
clearable
style="width: 200px"
>
@@ -48,6 +48,23 @@
<el-option label="宸插畬鎴愭崘鐚�" value="4" />
<el-option label="鏈畬鎴愭崘鐚�" value="5" />
</el-select>
+ </el-form-item>
+ <el-form-item label="骞撮緞鑼冨洿" prop="ageRange">
+ <el-input
+ v-model="queryParams.startAge"
+ placeholder="鏈�灏忓勾榫�"
+ clearable
+ style="width: 95px"
+ @keyup.enter.native="handleQuery"
+ />
+ <span style="margin: 0 5px">-</span>
+ <el-input
+ v-model="queryParams.endAge"
+ placeholder="鏈�澶у勾榫�"
+ clearable
+ style="width: 95px"
+ @keyup.enter.native="handleQuery"
+ />
</el-form-item>
<el-form-item label="妗f褰曞叆鏃堕棿" prop="recordTimeRange">
<el-date-picker
@@ -73,23 +90,6 @@
<el-card class="tool-card">
<el-row :gutter="10">
<el-col :span="16">
- <!-- <el-button type="primary" icon="el-icon-plus" @click="handleCreate"
- >鏂板缁存姢</el-button
- > -->
- <el-button
- type="success"
- icon="el-icon-edit"
- :disabled="single"
- @click="handleUpdate"
- >淇敼</el-button
- >
- <el-button
- type="danger"
- icon="el-icon-delete"
- :disabled="multiple"
- @click="handleDelete"
- >鍒犻櫎</el-button
- >
<el-button
type="warning"
icon="el-icon-download"
@@ -121,113 +121,101 @@
width="120"
/>
<el-table-column
- label="娼滃湪鎹愮尞鑰呭鍚�"
+ label="鎹愮尞鑰呯紪鍙�"
align="center"
- prop="donorName"
+ prop="donorno"
width="120"
/>
- <el-table-column label="鎬у埆" align="center" prop="gender" width="80">
+ <el-table-column
+ label="娼滃湪鎹愮尞鑰呭鍚�"
+ align="center"
+ prop="name"
+ width="120"
+ />
+ <el-table-column label="鎬у埆" align="center" prop="sex" width="80">
<template slot-scope="scope">
<dict-tag
:options="dict.type.sys_user_sex"
- :value="parseInt(scope.row.gender)"
+ :value="scope.row.sex"
/>
</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="鐤剧梾璇婃柇"
align="center"
- prop="diagnosis"
+ prop="diagnosisname"
min-width="180"
show-overflow-tooltip
/>
<el-table-column
- label="鎵�鍦ㄥ尰鐤楁満鏋�"
+ label="棣栬瘖鍖荤枟鏈烘瀯"
align="center"
- prop="hospitalName"
+ prop="treatmenthospitalname"
width="150"
show-overflow-tooltip
/>
<el-table-column
- label="鎮h�呯姸鎬�"
+ label="浣忛櫌鍙�"
align="center"
- prop="patientStatus"
+ prop="inpatientno"
width="120"
- >
- <template slot-scope="scope">
- <el-tag :type="statusFilter(scope.row.patientStatus)">
- {{ statusTextFilter(scope.row.patientStatus) }}
- </el-tag>
- </template>
- </el-table-column>
- <el-table-column
- label="鍏ラ櫌鏃堕棿"
- align="center"
- prop="admissionTime"
- width="120"
- >
- <template slot-scope="scope">
- <span>{{
- scope.row.admissionTime
- ? parseTime(scope.row.admissionTime, "{y}-{m}-{d}")
- : "-"
- }}</span>
- </template>
- </el-table-column>
- <el-table-column
- label="鍑洪櫌鏃堕棿"
- align="center"
- prop="dischargeTime"
- width="120"
- >
- <template slot-scope="scope">
- <span>{{
- scope.row.dischargeTime
- ? parseTime(scope.row.dischargeTime, "{y}-{m}-{d}")
- : "-"
- }}</span>
- </template>
- </el-table-column>
+ />
<!-- <el-table-column
- label="鏈�鏂板煿鍏荤粨鏋�"
+ label="璁板綍鐘舵��"
align="center"
- prop="latestCultureResult"
+ prop="recordstate"
width="120"
>
<template slot-scope="scope">
- <el-tag
- :type="scope.row.latestCultureResult === '闃存��' ? 'success' : 'danger'"
- effect="plain"
- >
- {{ scope.row.latestCultureResult || '鏈娴�' }}
+ <el-tag :type="statusFilter(scope.row.recordstate)">
+ {{ statusTextFilter(scope.row.recordstate) }}
</el-tag>
- </template>
- </el-table-column> -->
- <!-- <el-table-column
- label="鎶ょ悊鏍告煡琛ㄥ綍鍏ユ椂闂�"
- align="center"
- prop="lastRecordTime"
- width="140"
- >
- <template slot-scope="scope">
- <span>{{
- scope.row.lastRecordTime
- ? parseTime(scope.row.lastRecordTime, "{y}-{m}-{d} {h}:{i}")
- : "-"
- }}</span>
</template>
</el-table-column> -->
<el-table-column
label="鍗忚皟鍛�"
align="center"
- prop="coordinator"
+ prop="coordinatorName"
width="100"
/>
<el-table-column
+ label="缁存姢椤圭洰"
+ align="center"
+ prop="itemName"
+ width="120"
+ show-overflow-tooltip
+ />
+ <el-table-column
+ label="缁存姢鏃堕棿"
+ align="center"
+ prop="itemTime"
+ width="140"
+ >
+ <template slot-scope="scope">
+ <span>{{
+ scope.row.itemTime
+ ? parseTime(scope.row.itemTime, "{y}-{m}-{d} {h}:{i}")
+ : "-"
+ }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column
label="鎿嶄綔"
align="center"
- width="180"
+ width="120"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
@@ -238,20 +226,6 @@
@click.stop="handleView(scope.row)"
>璇︽儏</el-button
>
- <!-- <el-button
- size="mini"
- type="text"
- icon="el-icon-edit"
- @click.stop="handleRecord(scope.row)"
- >褰曞叆鏍告煡</el-button
- >
- <el-button
- size="mini"
- type="text"
- icon="el-icon-document"
- @click.stop="handleRecordList(scope.row)"
- >璁板綍鏌ヨ</el-button
- > -->
</template>
</el-table-column>
</el-table>
@@ -269,13 +243,13 @@
</template>
<script>
-import { listMaintenance, delMaintenance, exportMaintenance } from "./mockMaintenanceApi";
+import { maintainList } from "@/api/businessApi";
import Pagination from "@/components/Pagination";
export default {
name: "MaintenanceList",
components: { Pagination },
- dicts: ["sys_user_sex"],
+ dicts: ["sys_user_sex",'sys_BloodType'],
data() {
return {
// 閬僵灞�
@@ -294,11 +268,19 @@
queryParams: {
pageNum: 1,
pageSize: 10,
- donorName: undefined,
- hospitalName: undefined,
- medicalStaff: undefined,
- patientStatus: undefined,
- recordTimeRange: []
+ name: undefined, // 鎹愮尞鑰呭鍚�
+ treatmenthospitalname: undefined, // 鍖荤枟鏈烘瀯鍚嶇О
+ coordinatorName: undefined, // 鍗忚皟鍛樺鍚�
+ recordstate: undefined, // 璁板綍鐘舵��
+ startAge: undefined, // 寮�濮嬪勾榫�
+ endAge: undefined, // 缁撴潫骞撮緞
+ caseNo: undefined, // 妗堜緥缂栧彿
+ donorno: undefined, // 鎹愮尞鑰呯紪鍙�
+ sex: undefined, // 鎬у埆
+ bloodtype: undefined, // 琛�鍨�
+ diagnosisname: undefined, // 鐤剧梾璇婃柇鍚嶇О
+ inpatientno: undefined, // 浣忛櫌鍙�
+ recordTimeRange: [] // 鏃堕棿鑼冨洿
}
};
},
@@ -309,11 +291,11 @@
// 鐘舵�佽繃婊ゅ櫒
statusFilter(status) {
const statusMap = {
- "1": "primary", // DCD
- "2": "warning", // DBD
- "3": "info", // DBCD
- "4": "success", // 宸插畬鎴愭崘鐚�
- "5": "danger" // 鏈畬鎴愭崘鐚�
+ "1": "primary", // DCD
+ "2": "warning", // DBD
+ "3": "info", // DBCD
+ "4": "success", // 宸插畬鎴愭崘鐚�
+ "5": "danger" // 鏈畬鎴愭崘鐚�
};
return statusMap[status] || "info";
},
@@ -330,13 +312,45 @@
// 鏌ヨ渚涜�呯淮鎶ゅ垪琛�
getList() {
this.loading = true;
- listMaintenance(this.queryParams)
+
+ // 澶勭悊鏌ヨ鍙傛暟锛岃繃婊ゆ帀绌哄��
+ const params = this.cleanObject(this.queryParams);
+
+ // 澶勭悊鏃堕棿鑼冨洿鍙傛暟
+ if (params.recordTimeRange && params.recordTimeRange.length === 2) {
+ params.startTime = params.recordTimeRange[0] + " 00:00:00";
+ params.endTime = params.recordTimeRange[1] + " 23:59:59";
+ delete params.recordTimeRange;
+ }
+
+ // 鍒犻櫎鍒嗛〉鍙傛暟涓殑绌哄��
+ delete params.pageNum;
+ delete params.pageSize;
+
+ maintainList({
+ pageNum: this.queryParams.pageNum,
+ pageSize: this.queryParams.pageSize,
+ ...params
+ })
.then(response => {
if (response.code === 200) {
- this.maintenanceList = response.data.rows;
- this.total = response.data.total;
+ this.maintenanceList = response.data;
+ this.total = response.total || 0;
+
+ // 澶勭悊骞撮緞鏄剧ず
+ this.maintenanceList.forEach(item => {
+ if (item.startAge !== undefined && item.endAge !== undefined) {
+ item.age = `${item.startAge}-${item.endAge}`;
+ } else if (item.startAge !== undefined) {
+ item.age = `${item.startAge}+`;
+ } else if (item.endAge !== undefined) {
+ item.age = `0-${item.endAge}`;
+ } else {
+ item.age = "-";
+ }
+ });
} else {
- this.$message.error("鑾峰彇鏁版嵁澶辫触");
+ this.$message.error(response.msg || "鑾峰彇鏁版嵁澶辫触");
}
this.loading = false;
})
@@ -346,6 +360,16 @@
this.$message.error("鑾峰彇鏁版嵁澶辫触");
});
},
+ // 娓呯悊瀵硅薄涓殑绌哄��
+ cleanObject(obj) {
+ const cleaned = {};
+ Object.keys(obj).forEach(key => {
+ if (obj[key] !== undefined && obj[key] !== null && obj[key] !== "") {
+ cleaned[key] = obj[key];
+ }
+ });
+ return cleaned;
+ },
// 鎼滅储鎸夐挳鎿嶄綔
handleQuery() {
this.queryParams.pageNum = 1;
@@ -353,8 +377,26 @@
},
// 閲嶇疆鎸夐挳鎿嶄綔
resetQuery() {
- this.$refs.queryForm.resetFields();
- this.handleQuery();
+ this.queryParams = {
+ pageNum: 1,
+ pageSize: 10,
+ name: undefined,
+ treatmenthospitalname: undefined,
+ coordinatorName: undefined,
+ recordstate: undefined,
+ startAge: undefined,
+ endAge: undefined,
+ caseNo: undefined,
+ donorno: undefined,
+ sex: undefined,
+ bloodtype: undefined,
+ diagnosisname: undefined,
+ inpatientno: undefined,
+ recordTimeRange: []
+ };
+ this.$nextTick(() => {
+ this.getList();
+ });
},
// 澶氶�夋閫変腑鏁版嵁
handleSelectionChange(selection) {
@@ -366,64 +408,20 @@
handleRowClick(row) {
this.$router.push({
path: "/case/maintainInfo",
- query: { id: row.id }
+ query: { id: row.id, infoid: row.infoid }
});
},
// 鏌ョ湅璇︽儏
handleView(row) {
this.$router.push({
path: "/case/maintainInfo",
- query: { id: row.id }
+ query: { id: row.id, infoid: row.infoid }
});
- },
- // 褰曞叆鎶ょ悊鏍告煡
- handleRecord(row) {
- this.$router.push({
- path: "/case/maintenance/record",
- query: { id: row.id, maintenanceId: row.maintenanceId }
- });
- },
- // 鏌ョ湅璁板綍鍒楄〃
- handleRecordList(row) {
- this.$router.push({
- path: "/case/maintenance/records",
- query: { id: row.id, maintenanceId: row.maintenanceId }
- });
- },
- // 鏂板鎸夐挳鎿嶄綔
- handleCreate() {
- this.$router.push("/case/maintenance/add");
- },
- // 淇敼鎸夐挳鎿嶄綔
- handleUpdate() {
- const id = this.ids[0];
- this.$router.push({
- path: "/case/maintenance/edit",
- query: { id: id }
- });
- },
- // 鍒犻櫎鎸夐挳鎿嶄綔
- handleDelete() {
- const ids = this.ids;
- this.$confirm("鏄惁纭鍒犻櫎閫変腑鐨勬暟鎹」锛�", "璀﹀憡", {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning"
- })
- .then(() => {
- return delMaintenance(ids);
- })
- .then(response => {
- if (response.code === 200) {
- this.$message.success("鍒犻櫎鎴愬姛");
- this.getList();
- }
- })
- .catch(() => {});
},
// 瀵煎嚭鎸夐挳鎿嶄綔
handleExport() {
- const queryParams = this.queryParams;
+ const queryParams = this.cleanObject(this.queryParams);
+
this.$confirm("鏄惁纭瀵煎嚭鎵�鏈夌淮鎶ゆ暟鎹紵", "璀﹀憡", {
confirmButtonText: "纭畾",
cancelButtonText: "鍙栨秷",
@@ -431,13 +429,11 @@
})
.then(() => {
this.loading = true;
- return exportMaintenance(queryParams);
- })
- .then(response => {
- if (response.code === 200) {
+ // 杩欓噷闇�瑕佽皟鐢ㄥ鍑烘帴鍙o紝鏆傛椂鐢ㄦā鎷熸垚鍔�
+ setTimeout(() => {
this.$message.success("瀵煎嚭鎴愬姛");
- }
- this.loading = false;
+ this.loading = false;
+ }, 1000);
})
.catch(() => {
this.loading = false;
@@ -449,17 +445,37 @@
const date = new Date(time);
if (pattern) {
return pattern.replace(/{(\w+)}/g, (match, p) => {
- switch(p) {
- case 'y': return date.getFullYear();
- case 'm': return (date.getMonth() + 1).toString().padStart(2, '0');
- case 'd': return date.getDate().toString().padStart(2, '0');
- case 'h': return date.getHours().toString().padStart(2, '0');
- case 'i': return date.getMinutes().toString().padStart(2, '0');
- default: return match;
+ switch (p) {
+ case "y":
+ return date.getFullYear();
+ case "m":
+ return (date.getMonth() + 1).toString().padStart(2, "0");
+ case "d":
+ return date
+ .getDate()
+ .toString()
+ .padStart(2, "0");
+ case "h":
+ return date
+ .getHours()
+ .toString()
+ .padStart(2, "0");
+ case "i":
+ return date
+ .getMinutes()
+ .toString()
+ .padStart(2, "0");
+ default:
+ return match;
}
});
}
- return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, "0")}-${date.getDate().toString().padStart(2, "0")}`;
+ return `${date.getFullYear()}-${(date.getMonth() + 1)
+ .toString()
+ .padStart(2, "0")}-${date
+ .getDate()
+ .toString()
+ .padStart(2, "0")}`;
}
}
};
diff --git a/src/views/business/maintain/maintainInfo.vue b/src/views/business/maintain/maintainInfo.vue
index 06794a8..d6aa6ec 100644
--- a/src/views/business/maintain/maintainInfo.vue
+++ b/src/views/business/maintain/maintainInfo.vue
@@ -4,12 +4,7 @@
<el-card class="detail-card">
<div slot="header" class="clearfix">
<span class="detail-title">渚涜�呭熀鏈俊鎭�</span>
- <el-button
- v-if="isEdit"
- type="primary"
- style="float: right; padding: 3px 0"
- @click="handleSave"
- >
+ <el-button type="success" style="float: right;" @click="handleSave">
淇濆瓨淇℃伅
</el-button>
</div>
@@ -18,21 +13,17 @@
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="浣忛櫌鍙�" prop="caseNo">
- <el-input v-model="form.caseNo" :readonly="!isEdit" />
+ <el-input v-model="form.caseNo" />
</el-form-item>
</el-col>
<el-col :span="8">
- <el-form-item label="鎹愮尞鑰呭鍚�" prop="donorName">
- <el-input v-model="form.donorName" :readonly="!isEdit" />
+ <el-form-item label="鎹愮尞鑰呭鍚�" prop="name">
+ <el-input v-model="form.name" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="鎬у埆" prop="gender">
- <el-select
- v-model="form.gender"
- :disabled="!isEdit"
- style="width: 100%"
- >
+ <el-select v-model="form.sex" style="width: 100%">
<el-option label="鐢�" value="0" />
<el-option label="濂�" value="1" />
</el-select>
@@ -43,46 +34,61 @@
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="骞撮緞" prop="age">
- <el-input v-model="form.age" :readonly="!isEdit" />
+ <el-input v-model="form.age" />
</el-form-item>
</el-col>
<el-col :span="8">
- <el-form-item label="鐤剧梾璇婃柇" prop="diagnosis">
- <el-input v-model="form.diagnosis" :readonly="!isEdit" />
+ <el-form-item label="鐤剧梾璇婃柇" prop="diagnosisname">
+ <el-input v-model="form.diagnosisname" />
</el-form-item>
</el-col>
<el-col :span="8">
- <el-form-item label="鎵�鍦ㄥ尰鐤楁満鏋�" prop="hospitalName">
- <el-input v-model="form.hospitalName" :readonly="!isEdit" />
+ <el-form-item label="棣栬瘖鍖荤枟鏈烘瀯" prop="treatmenthospitalname">
+ <el-input v-model="form.treatmenthospitalname" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
- <el-form-item label="鎮h�呯姸鎬�" prop="patientStatus">
- <el-select
- v-model="form.patientStatus"
- :disabled="!isEdit"
- style="width: 100%"
- >
- <el-option label="DCD" value="1" />
+ <el-form-item label="鎮h�呯姸鎬�" prop="recordstate">
+ <el-select v-model="form.recordstate" style="width: 100%">
+ <!-- <el-option label="DCD" value="1" />
<el-option label="DBD" value="2" />
<el-option label="DBCD" value="3" />
<el-option label="宸插畬鎴愭崘鐚�" value="4" />
- <el-option label="鏈畬鎴愭崘鐚�" value="5" />
+ <el-option label="鏈畬鎴愭崘鐚�" value="5" /> -->
+ <el-option
+ v-for="dict in dict.type.sys_DonationCategory || []"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ ></el-option>
</el-select>
</el-form-item>
+ <!-- <el-form-item
+ align="left"
+ label="鎮h�呮崘鐚姸鎬�"
+ prop="donationcategory"
+ >
+ <el-radio-group v-model="form.recordstate">
+ <el-radio
+ v-for="dict in dict.type.sys_DonationCategory || []"
+ :key="dict.value"
+ :label="dict.value"
+ >{{ dict.label }}</el-radio
+ >
+ </el-radio-group>
+ </el-form-item> -->
</el-col>
<el-col :span="8">
<el-form-item
label="鏈畬鎴愬師鍥�"
prop="incompleteReason"
- v-if="form.patientStatus === '5'"
+ v-if="form.recordstate === '5'"
>
<el-input
v-model="form.incompleteReason"
- :readonly="!isEdit"
placeholder="璇疯緭鍏ユ湭瀹屾垚鎹愮尞鐨勫師鍥�"
/>
</el-form-item>
@@ -91,59 +97,59 @@
<el-row :gutter="20">
<el-col :span="8">
- <el-form-item label="鍏ラ櫌鏃堕棿" prop="admissionTime">
+ <el-form-item label="涓婃姤鏃堕棿" prop="reporttime">
<el-date-picker
- v-model="form.admissionTime"
+ v-model="form.reporttime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
style="width: 100%"
- :disabled="!isEdit"
/>
</el-form-item>
</el-col>
<el-col :span="8">
- <el-form-item label="鍑洪櫌鏃堕棿" prop="dischargeTime">
+ <el-form-item label="姝讳骸鏃堕棿" prop="deathTime">
<el-date-picker
- v-model="form.dischargeTime"
+ v-model="form.deathTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
style="width: 100%"
- :disabled="!isEdit"
/>
</el-form-item>
</el-col>
<el-col :span="8">
- <el-form-item label="鍗忚皟鍛�" prop="coordinator">
- <el-input v-model="form.coordinator" :readonly="!isEdit" />
+ <el-form-item label="鍗忚皟鍛�" prop="coordinatorName">
+ <el-input v-model="form.coordinatorName" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
- <el-form-item label="琛�鍨�" prop="bloodType">
- <el-select
- v-model="form.bloodType"
- :disabled="!isEdit"
- style="width: 100%"
- >
- <el-option label="A鍨�" value="A" />
+ <el-form-item label="琛�鍨�" prop="bloodtype">
+ <el-select v-model="form.bloodtype" style="width: 100%">
+ <!-- <el-option label="A鍨�" value="A" />
<el-option label="B鍨�" value="B" />
<el-option label="O鍨�" value="O" />
- <el-option label="AB鍨�" value="AB" />
+ <el-option label="AB鍨�" value="AB" /> -->
+ <el-option
+ v-for="dict in dict.type.sys_BloodType"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ ></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
- <el-form-item label="RH鍥犲瓙" prop="rhFactor">
- <el-select
- v-model="form.rhFactor"
- :disabled="!isEdit"
- style="width: 100%"
- >
- <el-option label="闃虫��" value="positive" />
- <el-option label="闃存��" value="negative" />
- </el-select>
+ <el-form-item label="Rh(D)" prop="rhYin">
+ <el-radio-group v-model="form.rhYin">
+ <el-radio
+ v-for="dict in dict.type.sys_bloodtype_rhd || []"
+ :key="dict.value"
+ :label="dict.value"
+ >{{ dict.label }}</el-radio
+ >
+ </el-radio-group>
</el-form-item>
</el-col>
</el-row>
@@ -153,12 +159,12 @@
type="textarea"
:rows="3"
v-model="form.specialMedicalHistory"
- :readonly="!isEdit"
placeholder="璁板綍鐗规畩鐥呭彶淇℃伅"
/>
</el-form-item>
</el-form>
</el-card>
+
<el-card class="assessment-card">
<div slot="header" class="clearfix">
<span class="detail-title">渚涜�呰瘎浼板悇椤硅褰�</span>
@@ -193,14 +199,7 @@
label="鍩瑰吇绫诲瀷"
align="center"
prop="cultureType"
- >
- <!-- <template slot-scope="scope">
- <dict-tag
- :options="cultureTypeOptions"
- :value="scope.row.cultureType"
- />
- </template> -->
- </el-table-column>
+ />
<el-table-column
label="閲囨牱鏃堕棿"
align="center"
@@ -216,7 +215,6 @@
</el-tag>
</template>
</el-table-column>
- <!-- 闄勪欢鍒� -->
<el-table-column label="闄勪欢" align="center">
<template slot-scope="scope">
<el-button
@@ -257,14 +255,6 @@
</template>
</el-table-column>
</el-table>
-
- <pagination
- v-show="cultureTotal > 0"
- :total="cultureTotal"
- :page.sync="cultureQueryParams.pageNum"
- :limit.sync="cultureQueryParams.pageSize"
- @pagination="getCultureList"
- />
</el-card>
</el-tab-pane>
@@ -272,6 +262,7 @@
<el-tab-pane label="鑲濆姛鑳借偩鍔熻兘" name="liverKidney">
<liver-kidney-panel
ref="liverKidney"
+ :initial-data="assessmentData.liverKidney"
:is-editing="isEdit && activeTab === 'liverKidney'"
@data-change="handleLiverKidneyDataChange"
/>
@@ -281,6 +272,7 @@
<el-tab-pane label="琛�甯歌" name="bloodRoutine">
<blood-routine-panel
ref="bloodRoutine"
+ :initial-data="assessmentData.bloodRoutine"
:is-editing="isEdit && activeTab === 'bloodRoutine'"
@data-change="handleBloodRoutineDataChange"
/>
@@ -290,15 +282,15 @@
<el-tab-pane label="灏垮父瑙�" name="urineRoutine">
<urine-routine-panel
ref="urineRoutine"
+ :initial-data="assessmentData.urineRoutine"
:is-editing="isEdit && activeTab === 'urineRoutine'"
@data-change="handleUrineRoutineDataChange"
/>
</el-tab-pane>
</el-tabs>
</el-card>
- <!-- 鍩瑰吇缁撴灉璁板綍 -->
- <!-- 绠�鍖栧悗鐨勬姢鐞嗘牳鏌ヨ褰� -->
+ <!-- 鎶ょ悊鏍告煡璁板綍 -->
<el-card class="record-card">
<div slot="header" class="clearfix">
<span class="detail-title">鎶ょ悊鏍告煡璁板綍</span>
@@ -332,7 +324,6 @@
min-width="200"
show-overflow-tooltip
/>
- <!-- 闄勪欢鍒� -->
<el-table-column label="闄勪欢" align="center" width="120">
<template slot-scope="scope">
<el-button
@@ -352,32 +343,27 @@
width="180"
class-name="small-padding fixed-width"
>
- <el-button
- size="mini"
- type="text"
- icon="el-icon-edit"
- @click="handleEditRecord(scope.row)"
- >缂栬緫</el-button
- >
- <el-button
- size="mini"
- type="text"
- icon="el-icon-delete"
- style="color: #F56C6C;"
- @click="handleDeleteRecord(scope.row)"
- >鍒犻櫎</el-button
- >
+ <template slot-scope="scope">
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-edit"
+ @click="handleEditRecord(scope.row)"
+ >缂栬緫</el-button
+ >
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-delete"
+ style="color: #F56C6C;"
+ @click="handleDeleteRecord(scope.row)"
+ >鍒犻櫎</el-button
+ >
+ </template>
</el-table-column>
</el-table>
-
- <pagination
- v-show="recordTotal > 0"
- :total="recordTotal"
- :page.sync="recordQueryParams.pageNum"
- :limit.sync="recordQueryParams.pageSize"
- @pagination="getRecordList"
- />
</el-card>
+
<!-- 鍩瑰吇璁板綍缂栬緫瀵硅瘽妗� -->
<el-dialog
:title="cultureDialogTitle"
@@ -436,7 +422,6 @@
</el-col>
</el-row>
- <!-- 闄勪欢涓婁紶 -->
<el-form-item label="闄勪欢">
<upload-attachment
:file-list="cultureForm.attachments"
@@ -500,7 +485,6 @@
/>
</el-form-item>
- <!-- 闄勪欢涓婁紶 -->
<el-form-item label="闄勪欢">
<upload-attachment
:file-list="recordForm.attachments"
@@ -531,19 +515,7 @@
</template>
<script>
-import { getMaintenanceDetail, updateMaintenance } from "./mockMaintenanceApi";
-import {
- listCultureResults,
- addCultureResult,
- updateCultureResult,
- deleteCultureResult
-} from "./mockMaintenanceApi";
-import {
- listNursingRecords,
- addNursingRecord,
- updateNursingRecord,
- deleteNursingRecord
-} from "./mockMaintenanceApi";
+import { maintainList, maintainedit, maintainAdd } from "@/api/businessApi";
import Pagination from "@/components/Pagination";
import UploadAttachment from "@/components/UploadAttachment";
import AttachmentPreview from "@/components/AttachmentPreview";
@@ -561,120 +533,44 @@
BloodRoutinePanel,
UrineRoutinePanel
},
+ dicts: [
+ "sys_donornode",
+ "sys_BloodType",
+ "sys_EthicalReview",
+ "sys_BaseAssessConclusion",
+ "sys_bloodtype_rhd",
+ "sys_DonationCategory"
+ ],
+
data() {
return {
- isEdit: true,
+ isEdit: false,
+ currentMaintenanceId: null,
+ isEditMode: false,
form: {
id: undefined,
caseNo: "",
- donorName: "",
+ name: "",
gender: "",
age: "",
- diagnosis: "",
- hospitalName: "",
- patientStatus: "1",
- admissionTime: "",
- dischargeTime: "",
- coordinator: "",
- bloodType: "",
+ diagnosisname: "",
+ treatmenthospitalname: "",
+ recordstate: "1",
+ reporttime: "",
+ deathTime: "",
+ coordinatorName: "",
+ bloodtype: "",
rhFactor: "",
specialMedicalHistory: "",
incompleteReason: ""
},
activeTab: "culture",
+ liverKidneyData: {}, // 浠� maintainList 鎺ュ彛鑾峰彇鐨勬暟鎹�
+ bloodRoutineData: {}, // 浠� maintainList 鎺ュ彛鑾峰彇鐨勬暟鎹�
+ liverKidneyData: {}, // 浠� maintainList 鎺ュ彛鑾峰彇鐨勬暟鎹�
// 鍩瑰吇缁撴灉鐩稿叧鏁版嵁
- // 鍩瑰吇缁撴灉鐩稿叧鏁版嵁
- cultureList: [
- {
- id: 1,
- cultureType: "琛�鍩瑰吇",
- sampleTime: "2024-12-19 10:30:00",
- result: "闃存��",
- bacteria: "",
- drugSensitivity: "",
- testingInstitution: "闈掑矝澶у闄勫睘鍖婚櫌",
- specimenType: "琛�娑�",
- remarks: "甯歌妫�娴�",
- attachments: [
- {
- id: 1,
- fileName: "琛�鍩瑰吇鎶ュ憡.pdf",
- fileUrl:
- "http://localhost:8080/profile/upload/2025/12/27/1.COPO渚涗綋璇勪及琛�.pdf",
- fileSize: 1024000,
- uploadTime: "2024-12-19 11:00:00"
- }
- ]
- },
- {
- id: 3,
- cultureType: "琛�鍩瑰吇",
- sampleTime: "2024-12-20 09:15:00",
- result: "闃存��",
- bacteria: "",
- drugSensitivity: "",
- testingInstitution: "骞垮窞妫�娴嬩腑蹇�",
- specimenType: "灏挎恫",
- remarks: "娓呮磥涓灏挎爣鏈�",
- attachments: []
- },
- {
- id: 2,
- cultureType: "鐥板煿鍏荤粨鏋�",
- sampleTime: "2024-12-19 14:20:00",
- result: "闃虫��",
- bacteria: "閲戦粍鑹茶憽钀勭悆鑿�",
- drugSensitivity: "瀵归潚闇夌礌鏁忔劅锛屽澶村绫讳腑浠�",
- testingInstitution: "涓婃捣鍖诲妫�楠屾墍",
- specimenType: "鐥版恫",
- remarks: "鑽晱璇曢獙瀹屾垚",
- attachments: [
- {
- id: 2,
- fileName: "鐥板煿鍏荤粨鏋�.jpg",
- fileUrl:
- "https://img95.699pic.com/photo/40142/8262.jpg_wh860.jpg",
- fileSize: 512000,
- uploadTime: "2024-12-19 15:30:00"
- },
- {
- id: 3,
- fileName: "鑽晱鎶ュ憡.pdf",
- fileUrl:
- "http://localhost:8080/profile/upload/2025/12/27/(鍚撮緳8.7)姣忔棩宸ヤ綔鎬荤粨.pdf",
- fileSize: 768000,
- uploadTime: "2024-12-19 16:00:00"
- }
- ]
- },
-
- {
- id: 4,
- cultureType: "鐪熻弻鍩瑰吇",
- sampleTime: "2024-12-20 11:45:00",
- result: "闃虫��",
- bacteria: "澶ц偁鏉嗚弻",
- drugSensitivity: "瀵瑰乏姘ф盁娌欐槦鏁忔劅",
- testingInstitution: "娣卞湷浜烘皯鍖婚櫌",
- specimenType: "浼ゅ彛鍒嗘硨鐗�",
- remarks: "鏈悗浼ゅ彛鎰熸煋鐩戞祴",
- attachments: [
- {
- id: 4,
- fileName: "鐪熻弻鍩瑰吇.pdf",
- fileUrl: "/reports/culture4.pdf",
- fileSize: 890000,
- uploadTime: "2024-12-20 13:20:00"
- }
- ]
- }
- ],
+ cultureList: [],
cultureLoading: false,
- cultureTotal: 5,
- cultureQueryParams: {
- pageNum: 1,
- pageSize: 10
- },
cultureDialogVisible: false,
cultureDialogTitle: "",
cultureSaveLoading: false,
@@ -683,7 +579,7 @@
cultureType: "",
sampleTime: "",
result: "闃存��",
- attachments: [] // 鏂板闄勪欢瀛楁
+ attachments: []
},
cultureRules: {
cultureType: [
@@ -706,120 +602,8 @@
],
// 鎶ょ悊鏍告煡璁板綍鐩稿叧鏁版嵁
- recordList: [
- {
- id: 1,
- recordTime: "2024-12-19 08:30:00",
- recorder: "寮犳姢澹�",
- temperature: 36.8,
- heartRate: 78,
- bloodPressure: "120/80",
- respirationRate: 18,
- oxygenSaturation: 98,
- urineOutput: 60,
- cvp: 8,
- checkRecord: "鎮h�呯敓鍛戒綋寰佸钩绋筹紝鎰忚瘑娓呮锛岄厤鍚堟不鐤�",
- remarks: "澶滈棿鐫$湢鑹ソ",
- attachments: [
- {
- id: 1,
- fileName: "鏃╃彮鎶ょ悊璁板綍.jpg",
- fileUrl: "/records/nursing1.jpg",
- fileSize: 1024000,
- uploadTime: "2024-12-19 09:00:00"
- }
- ]
- },
- {
- id: 2,
- recordTime: "2024-12-19 14:30:00",
- recorder: "鏉庢姢澹�",
- temperature: 37.2,
- heartRate: 82,
- bloodPressure: "118/76",
- respirationRate: 16,
- oxygenSaturation: 97,
- urineOutput: 45,
- cvp: 7.5,
- checkRecord: "鎮h�呭崍鍚庝綋娓╃暐鏈夊崌楂橈紝瑙傚療涓�",
- remarks: "寤鸿澧炲姞姘村垎鎽勫叆",
- attachments: []
- },
- {
- id: 3,
- recordTime: "2024-12-19 20:30:00",
- recorder: "鐜嬫姢澹�",
- temperature: 36.9,
- heartRate: 75,
- bloodPressure: "122/78",
- respirationRate: 17,
- oxygenSaturation: 98,
- urineOutput: 55,
- cvp: 8.2,
- checkRecord: "鏅氶棿鐢熷懡浣撳緛绋冲畾锛屾偅鑰呬紤鎭壇濂�",
- remarks: "澶滈棿鐩戞祴鏃犲紓甯�",
- attachments: [
- {
- id: 2,
- fileName: "鏅氱彮鎶ょ悊璁板綍.pdf",
- fileUrl: "/records/nursing3.pdf",
- fileSize: 890000,
- uploadTime: "2024-12-19 21:00:00"
- },
- {
- id: 3,
- fileName: "浣撳緛鐩戞祴琛�.xlsx",
- fileUrl: "/records/monitoring3.xlsx",
- fileSize: 256000,
- uploadTime: "2024-12-19 21:15:00"
- }
- ]
- },
- {
- id: 4,
- recordTime: "2024-12-20 08:30:00",
- recorder: "璧垫姢澹�",
- temperature: 36.7,
- heartRate: 80,
- bloodPressure: "119/77",
- respirationRate: 18,
- oxygenSaturation: 99,
- urineOutput: 65,
- cvp: 7.8,
- checkRecord: "鏅ㄩ棿鐢熷懡浣撳緛姝e父锛屾偅鑰呯簿绁炵姸鎬佽壇濂�",
- remarks: "鍑嗗浠婃棩妫�鏌�",
- attachments: []
- },
- {
- id: 5,
- recordTime: "2024-12-20 12:30:00",
- recorder: "鍒樻姢澹�",
- temperature: 37.1,
- heartRate: 85,
- bloodPressure: "121/79",
- respirationRate: 19,
- oxygenSaturation: 96,
- urineOutput: 40,
- cvp: 8.5,
- checkRecord: "鍗堥棿浣撴俯鐣ユ湁娉㈠姩锛岀户缁瀵�",
- remarks: "宸查�氱煡鍖荤敓",
- attachments: [
- {
- id: 4,
- fileName: "鍗堥棿鎶ょ悊璁板綍.jpg",
- fileUrl: "/records/nursing5.jpg",
- fileSize: 765000,
- uploadTime: "2024-12-20 13:00:00"
- }
- ]
- }
- ],
+ recordList: [],
recordLoading: false,
- recordTotal: 4,
- recordQueryParams: {
- pageNum: 1,
- pageSize: 10
- },
recordDialogVisible: false,
recordDialogTitle: "",
recordSaveLoading: false,
@@ -827,8 +611,8 @@
id: undefined,
recordTime: "",
recorder: "",
- checkRecord: "", // 鏀逛负鍗曞瓧娈佃褰�
- attachments: [] // 鏂板闄勪欢瀛楁
+ checkRecord: "",
+ attachments: []
},
recordRules: {
recordTime: [
@@ -845,87 +629,152 @@
// 闄勪欢棰勮鐩稿叧
attachmentPreviewVisible: false,
currentAttachmentList: [],
- attachmentPreviewTitle: ""
+ attachmentPreviewTitle: "",
+
+ // 璇勪及鏁版嵁瀛樺偍
+ assessmentData: {
+ liverKidney: {},
+ bloodRoutine: {},
+ urineRoutine: {},
+ cultureResults: [],
+ nursingRecords: []
+ }
};
},
created() {
- const id = this.$route.query.id;
- // this.isEdit = this.$route.query.edit === "true";
- if (id) {
- this.getDetail(id);
- this.getCultureList();
- this.getRecordList();
+ this.loadMaintenanceData();
+ },
+ watch: {
+ $route(to, from) {
+ this.loadMaintenanceData();
}
},
methods: {
- // 鑾峰彇璇︽儏
- getDetail(id) {
- getMaintenanceDetail(id).then(response => {
+ // 鍔犺浇缁存姢鏁版嵁[1,3](@ref)
+ async loadMaintenanceData() {
+ try {
+ this.cultureLoading = true;
+ this.recordLoading = true;
+
+ const { id, infoid } = this.$route.query;
+ const queryParams = {};
+
+ if (id) {
+ queryParams.id = id;
+ this.currentMaintenanceId = id;
+ this.isEditMode = true;
+ } else if (infoid) {
+ queryParams.infoid = infoid;
+ this.currentMaintenanceId = null;
+ this.isEditMode = false;
+ } else {
+ this.$message.error("缂哄皯蹇呰鐨勮矾鐢卞弬鏁�");
+ return;
+ }
+
+ const response = await maintainList(queryParams);
if (response.code === 200) {
- this.form = response.data;
- }
- });
- },
- // 鍩瑰吇璁板綍闄勪欢鍙樻洿
- handleCultureAttachmentChange(fileList) {
- this.cultureForm.attachments = fileList;
- },
+ let maintenanceData = response.data[0];
- // 鎶ょ悊璁板綍闄勪欢鍙樻洿
- handleRecordAttachmentChange(fileList) {
- this.recordForm.attachments = fileList;
- },
-
- // 鏌ョ湅鍩瑰吇璁板綍闄勪欢
- handleViewCultureAttachments(row) {
- console.log(22, row.attachments);
-
- this.currentAttachmentList = row.attachments || [];
- this.attachmentPreviewTitle = `鍩瑰吇璁板綍闄勪欢 - ${row.cultureType}`;
- this.attachmentPreviewVisible = true;
- },
- handleTabClick(tab) {
- this.$nextTick(() => {
- console.log(tab.name, 88);
- const tableRef=null;
- if (tab.name == "liverKidney") {
- tableRef = this.$refs.liverKidney; // 璇锋浛鎹负鎮ㄧ殑琛ㄦ牸 ref
- } else if (tab.name == "bloodRoutine") {
- tableRef = this.$refs.bloodRoutine; // 璇锋浛鎹负鎮ㄧ殑琛ㄦ牸 ref
- } else if (tab.name == "bloodRoutine") {
- tableRef = this.$refs.bloodRoutine; // 璇锋浛鎹负鎮ㄧ殑琛ㄦ牸 ref
- }
- // 濡傛灉鏄� el-table锛屽皾璇曡皟鐢ㄥ叾 doLayout 鏂规硶
- if (tableRef && tableRef.doLayout) {
- tableRef.doLayout();
- }
-
- // 鎴栬�咃紝鏇撮�氱敤鐨勫己鍒堕噸鏂版覆鏌撴柟寮�
- this.$forceUpdate(); // 鎱庣敤锛屽彲鑳藉紩鍙戝叾浠栭棶棰榌1](@ref)
- });
- },
- // 鏌ョ湅鎶ょ悊璁板綍闄勪欢
- handleViewRecordAttachments(row) {
- this.currentAttachmentList = row.attachments || [];
- this.attachmentPreviewTitle = `鎶ょ悊鏍告煡璁板綍闄勪欢 - ${row.recorder}`;
- this.attachmentPreviewVisible = true;
- },
- // 鍩瑰吇璁板綍鐩稿叧鏂规硶
- getCultureList() {
- this.cultureLoading = true;
- listCultureResults(this.form.id, this.cultureQueryParams)
- .then(response => {
- if (response.code === 200) {
- // this.cultureList = response.data.rows;
- // this.cultureTotal = response.data.total;
+ // 澶勭悊鏁扮粍鍝嶅簲
+ if (Array.isArray(maintenanceData)) {
+ maintenanceData = maintenanceData[0] || {};
}
- this.cultureLoading = false;
- })
- .catch(() => {
- this.cultureLoading = false;
- });
+
+ // 瑙f瀽itemDesc瀛楁涓殑JSON鏁版嵁[6,8](@ref)
+ if (maintenanceData.itemDesc) {
+ try {
+ const itemDescData = JSON.parse(maintenanceData.itemDesc);
+ this.assessmentData = { ...this.assessmentData, ...itemDescData };
+
+ // 濉厖鍚勪釜妯″潡鐨勬暟鎹�
+ if (itemDescData.cultureResults) {
+ this.cultureList = itemDescData.cultureResults;
+ }
+ if (itemDescData.nursingRecords) {
+ this.recordList = itemDescData.nursingRecords;
+ }
+ if (itemDescData.liverKidney) {
+ this.assessmentData.liverKidney = itemDescData.liverKidney;
+ }
+ if (itemDescData.bloodRoutine) {
+ this.assessmentData.bloodRoutine = itemDescData.bloodRoutine;
+ }
+ if (itemDescData.urineRoutine) {
+ this.assessmentData.urineRoutine = itemDescData.urineRoutine;
+ }
+ } catch (error) {
+ console.error("瑙f瀽itemDesc JSON澶辫触:", error);
+ }
+ }
+
+ // 濉厖鍩虹琛ㄥ崟鏁版嵁
+ this.form = { ...this.form, ...maintenanceData };
+ this.$message.success("鏁版嵁鍔犺浇鎴愬姛");
+ } else {
+ this.$message.error("鏁版嵁鍔犺浇澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+ }
+ } catch (error) {
+ console.error("鍔犺浇缁存姢鏁版嵁澶辫触:", error);
+ this.$message.error("鏁版嵁鍔犺浇澶辫触");
+ } finally {
+ this.cultureLoading = false;
+ this.recordLoading = false;
+ }
},
+ // 淇濆瓨鎵�鏈夋暟鎹甗1,2](@ref)
+ async handleSave() {
+ try {
+ // 鏋勫缓淇濆瓨鏁版嵁
+ const saveData = {
+ ...this.form,
+ itemDesc: JSON.stringify({
+ liverKidney: this.assessmentData.liverKidney,
+ bloodRoutine: this.assessmentData.bloodRoutine,
+ urineRoutine: this.assessmentData.urineRoutine,
+ cultureResults: this.cultureList,
+ nursingRecords: this.recordList
+ })
+ };
+
+ let response;
+ if (this.isEditMode && this.currentMaintenanceId) {
+ // 缂栬緫妯″紡锛岃皟鐢╩aintainedit鎺ュ彛[1](@ref)
+ saveData.id = this.currentMaintenanceId;
+ response = await maintainedit(saveData);
+ } else {
+ // 鏂板妯″紡锛岃皟鐢╩aintainAdd鎺ュ彛[2](@ref)
+ response = await maintainAdd(saveData);
+ }
+
+ if (response.code === 200) {
+ this.$message.success("淇濆瓨鎴愬姛");
+ this.isEdit = false;
+
+ // 濡傛灉鏄柊澧炰繚瀛橈紝鏇存柊褰撳墠ID
+ if (!this.isEditMode && response.data && response.data.id) {
+ this.currentMaintenanceId = response.data.id;
+ this.isEditMode = true;
+ }
+ } else {
+ this.$message.error("淇濆瓨澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+ }
+ } catch (error) {
+ console.error("淇濆瓨鏁版嵁澶辫触:", error);
+ this.$message.error("淇濆瓨澶辫触");
+ }
+ },
+
+ // 鍒囨崲缂栬緫妯″紡
+ toggleEditMode() {
+ this.isEdit = !this.isEdit;
+ if (!this.isEdit) {
+ this.handleSave();
+ }
+ },
+
+ // 鍩瑰吇璁板綍鐩稿叧鏂规硶
handleAddCulture() {
this.cultureDialogTitle = "鏂板鍩瑰吇璁板綍";
this.cultureForm = {
@@ -933,11 +782,7 @@
cultureType: "",
sampleTime: "",
result: "闃存��",
- bacteria: "",
- drugSensitivity: "",
- testingInstitution: "",
- specimenType: "",
- remarks: ""
+ attachments: []
};
this.cultureDialogVisible = true;
this.$nextTick(() => {
@@ -954,70 +799,28 @@
});
},
- handleViewCulture(row) {
- this.$alert(
- `
- <div>
- <p><strong>鍩瑰吇绫诲瀷锛�</strong>${this.getCultureTypeLabel(
- row.cultureType
- )}</p>
- <p><strong>閲囨牱鏃堕棿锛�</strong>${row.sampleTime}</p>
- <p><strong>鍩瑰吇缁撴灉锛�</strong>${row.result}</p>
- <p><strong>妫�娴嬫満鏋勶細</strong>${row.testingInstitution}</p>
- </div>
- `,
- "鍩瑰吇璁板綍璇︽儏",
- {
- dangerouslyUseHTMLString: true,
- customClass: "detail-dialog"
- }
- );
- },
- toggleEditMode() {
- this.isEdit = !this.isEdit;
- // if (!this.isEdit) {
- // this.saveAllData();
- // }
- },
- handleLiverKidneyDataChange(data) {
- console.log("鑲濆姛鑳借偩鍔熻兘鏁版嵁鍙樻洿:", data);
- // 澶勭悊鏁版嵁淇濆瓨鎴栦复鏃跺瓨鍌�
- },
- handleBloodRoutineDataChange(data) {
- console.log("琛�甯歌鍔熻兘鏁版嵁鍙樻洿:", data);
- // 澶勭悊鏁版嵁淇濆瓨鎴栦复鏃跺瓨鍌�
- },
- handleUrineRoutineDataChange(data) {
- console.log("灏垮父瑙勫姛鑳芥暟鎹彉鏇�:", data);
- // 澶勭悊鏁版嵁淇濆瓨鎴栦复鏃跺瓨鍌�
- },
- // 淇濆瓨鍩瑰吇璁板綍
handleSaveCulture() {
this.$refs.cultureForm.validate(valid => {
if (valid) {
this.cultureSaveLoading = true;
- const api = this.cultureForm.id
- ? updateCultureResult
- : addCultureResult;
- const requestData = {
- ...this.cultureForm,
- maintenanceId: this.form.id
- };
- api(requestData)
- .then(response => {
- if (response.code === 200) {
- this.$message.success(
- this.cultureForm.id ? "淇敼鎴愬姛" : "鏂板鎴愬姛"
- );
- this.cultureDialogVisible = false;
- this.getCultureList();
- }
- this.cultureSaveLoading = false;
- })
- .catch(() => {
- this.cultureSaveLoading = false;
- });
+ if (this.cultureForm.id) {
+ // 缂栬緫鐜版湁璁板綍
+ const index = this.cultureList.findIndex(
+ item => item.id === this.cultureForm.id
+ );
+ if (index !== -1) {
+ this.cultureList.splice(index, 1, { ...this.cultureForm });
+ }
+ } else {
+ // 鏂板璁板綍
+ this.cultureForm.id = Date.now();
+ this.cultureList.push({ ...this.cultureForm });
+ }
+
+ this.$message.success(this.cultureForm.id ? "淇敼鎴愬姛" : "鏂板鎴愬姛");
+ this.cultureDialogVisible = false;
+ this.cultureSaveLoading = false;
}
});
},
@@ -1029,37 +832,15 @@
type: "warning"
})
.then(() => {
- deleteCultureResult(row.id).then(response => {
- if (response.code === 200) {
- this.$message.success("鍒犻櫎鎴愬姛");
- this.getCultureList();
- }
- });
+ this.cultureList = this.cultureList.filter(
+ item => item.id !== row.id
+ );
+ this.$message.success("鍒犻櫎鎴愬姛");
})
.catch(() => {});
},
- getCultureTypeLabel(value) {
- const type = this.cultureTypeOptions.find(item => item.value === value);
- return type ? type.label : "鏈煡";
- },
-
- // 鎶ょ悊鏍告煡璁板綍鐩稿叧鏂规硶
- getRecordList() {
- this.recordLoading = true;
- listNursingRecords(this.form.id, this.recordQueryParams)
- .then(response => {
- if (response.code === 200) {
- // this.recordList = response.data.rows;
- // this.recordTotal = response.data.total;
- }
- this.recordLoading = false;
- })
- .catch(() => {
- this.recordLoading = false;
- });
- },
-
+ // 鎶ょ悊璁板綍鐩稿叧鏂规硶
handleAddRecord() {
this.recordDialogTitle = "鏂板鎶ょ悊鏍告煡璁板綍";
this.recordForm = {
@@ -1068,15 +849,9 @@
.toISOString()
.replace("T", " ")
.substring(0, 19),
- recorder: "褰撳墠鐢ㄦ埛", // 瀹為檯椤圭洰涓粠鐢ㄦ埛淇℃伅鑾峰彇
- temperature: 36.5,
- heartRate: 80,
- bloodPressure: "120/80",
- respirationRate: 18,
- oxygenSaturation: 98,
- urineOutput: 50,
- cvp: 8,
- remarks: ""
+ recorder: "褰撳墠鐢ㄦ埛",
+ checkRecord: "",
+ attachments: []
};
this.recordDialogVisible = true;
this.$nextTick(() => {
@@ -1093,58 +868,28 @@
});
},
- handleViewRecord(row) {
- this.$alert(
- `
- <div>
- <p><strong>鏍告煡鏃堕棿锛�</strong>${row.recordTime}</p>
- <p><strong>鏍告煡浜猴細</strong>${row.recorder}</p>
- <p><strong>鐢熷懡浣撳緛锛�</strong></p>
- <ul>
- <li>浣撴俯锛�${row.temperature}鈩�</li>
- <li>蹇冪巼锛�${row.heartRate}娆�/鍒�</li>
- <li>琛�鍘嬶細${row.bloodPressure}mmHg</li>
- <li>鍛煎惛锛�${row.respirationRate}娆�/鍒�</li>
- <li>琛�姘чケ鍜屽害锛�${row.oxygenSaturation}%</li>
- <li>灏块噺锛�${row.urineOutput}ml/h</li>
- </ul>
- <p><strong>澶囨敞锛�</strong>${row.remarks || "鏃�"}</p>
- </div>
- `,
- "鎶ょ悊鏍告煡璁板綍璇︽儏",
- {
- dangerouslyUseHTMLString: true,
- customClass: "detail-dialog"
- }
- );
- },
-
handleSaveRecord() {
this.$refs.recordForm.validate(valid => {
if (valid) {
this.recordSaveLoading = true;
- const api = this.recordForm.id
- ? updateNursingRecord
- : addNursingRecord;
- const requestData = {
- ...this.recordForm,
- maintenanceId: this.form.id
- };
- api(requestData)
- .then(response => {
- if (response.code === 200) {
- this.$message.success(
- this.recordForm.id ? "淇敼鎴愬姛" : "鏂板鎴愬姛"
- );
- this.recordDialogVisible = false;
- this.getRecordList();
- }
- this.recordSaveLoading = false;
- })
- .catch(() => {
- this.recordSaveLoading = false;
- });
+ if (this.recordForm.id) {
+ // 缂栬緫鐜版湁璁板綍
+ const index = this.recordList.findIndex(
+ item => item.id === this.recordForm.id
+ );
+ if (index !== -1) {
+ this.recordList.splice(index, 1, { ...this.recordForm });
+ }
+ } else {
+ // 鏂板璁板綍
+ this.recordForm.id = Date.now();
+ this.recordList.push({ ...this.recordForm });
+ }
+
+ this.$message.success(this.recordForm.id ? "淇敼鎴愬姛" : "鏂板鎴愬姛");
+ this.recordDialogVisible = false;
+ this.recordSaveLoading = false;
}
});
},
@@ -1156,26 +901,59 @@
type: "warning"
})
.then(() => {
- deleteNursingRecord(row.id).then(response => {
- if (response.code === 200) {
- this.$message.success("鍒犻櫎鎴愬姛");
- this.getRecordList();
- }
- });
+ this.recordList = this.recordList.filter(item => item.id !== row.id);
+ this.$message.success("鍒犻櫎鎴愬姛");
})
.catch(() => {});
},
- // 淇濆瓨鍩烘湰淇℃伅
- handleSave() {
- this.$refs.form.validate(valid => {
- if (valid) {
- updateMaintenance(this.form).then(response => {
- if (response.code === 200) {
- this.$message.success("淇濆瓨鎴愬姛");
- this.isEdit = false;
- }
- });
+ // 闄勪欢鐩稿叧鏂规硶
+ handleCultureAttachmentChange(fileList) {
+ this.cultureForm.attachments = fileList;
+ },
+
+ handleRecordAttachmentChange(fileList) {
+ this.recordForm.attachments = fileList;
+ },
+
+ handleViewCultureAttachments(row) {
+ this.currentAttachmentList = row.attachments || [];
+ this.attachmentPreviewTitle = `鍩瑰吇璁板綍闄勪欢 - ${row.cultureType}`;
+ this.attachmentPreviewVisible = true;
+ },
+
+ handleViewRecordAttachments(row) {
+ this.currentAttachmentList = row.attachments || [];
+ this.attachmentPreviewTitle = `鎶ょ悊鏍告煡璁板綍闄勪欢 - ${row.recorder}`;
+ this.attachmentPreviewVisible = true;
+ },
+
+ // 璇勪及鏁版嵁鍙樻洿澶勭悊
+ handleLiverKidneyDataChange(data) {
+ this.assessmentData.liverKidney = data;
+ },
+
+ handleBloodRoutineDataChange(data) {
+ this.assessmentData.bloodRoutine = data;
+ },
+
+ handleUrineRoutineDataChange(data) {
+ this.assessmentData.urineRoutine = data;
+ },
+
+ handleTabClick(tab) {
+ this.$nextTick(() => {
+ let tableRef = null;
+ if (tab.name === "liverKidney") {
+ tableRef = this.$refs.liverKidney;
+ } else if (tab.name === "bloodRoutine") {
+ tableRef = this.$refs.bloodRoutine;
+ } else if (tab.name === "urineRoutine") {
+ tableRef = this.$refs.urineRoutine;
+ }
+
+ if (tableRef && tableRef.doLayout) {
+ tableRef.doLayout();
}
});
}
@@ -1192,92 +970,25 @@
margin-bottom: 20px;
}
-.culture-card {
- margin-bottom: 20px;
-}
-
-.record-card {
- margin-bottom: 20px;
-}
-
-.detail-title {
- font-size: 16px;
- font-weight: bold;
-}
-.maintenance-detail {
- padding: 20px;
-}
-
-.detail-card {
- margin-bottom: 20px;
-}
-
-.culture-card {
- margin-bottom: 20px;
-}
-
-.record-card {
- margin-bottom: 20px;
-}
-
-.detail-title {
- font-size: 16px;
- font-weight: bold;
-}
-.medical-panel {
- padding: 20px;
-}
-
-.attachment-section {
- margin-top: 20px;
- padding: 15px;
- border: 1px solid #ebeef5;
- border-radius: 4px;
-}
-
-.attachment-title {
- font-weight: bold;
- margin-bottom: 10px;
- color: #409eff;
-}
-
-.required-item::before {
- content: "*";
- color: #f56c6c;
- margin-right: 4px;
-}
-
.assessment-card {
margin-bottom: 20px;
}
-.medical-table {
- width: 100%;
+.record-card {
margin-bottom: 20px;
}
-.dynamic-column {
- min-width: 120px;
+.detail-title {
+ font-size: 16px;
+ font-weight: bold;
+ margin-right: 20px;
}
+
+.culture-card {
+ margin-bottom: 20px;
+}
+
.fixed-width .el-button {
margin: 0 2px;
-}
-
-/* 璇︽儏瀵硅瘽妗嗘牱寮� */
-:deep(.detail-dialog) {
- width: 500px;
-}
-
-:deep(.detail-dialog .el-message-box__content) {
- line-height: 1.8;
-}
-
-:deep(.detail-dialog ul) {
- margin: 10px 0;
- padding-left: 20px;
-}
-
-:deep(.detail-dialog li) {
- margin-bottom: 5px;
}
</style>
diff --git a/src/views/project/DonationProcess/index.vue b/src/views/project/DonationProcess/index.vue
index 9eb57f6..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"
@@ -147,15 +182,23 @@
<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="娌荤枟鍖婚櫌"
+ label="棣栬瘖鍖婚櫌"
align="center"
prop="treatmenthospitalname"
width="150"
@@ -169,75 +212,46 @@
/>
<el-table-column
- label="妗堜緥缂栧彿"
+ label="浣忛櫌鍙�"
align="center"
- prop="caseNo"
+ prop="hospitalNo"
width="120"
/>
<!-- 绗竴娆″尰瀛﹁瘎浼� -->
<el-table-column
- label="绗竴娆¤瘎浼扮粨璁�"
+ label="璇勪及鐘舵��"
align="center"
- prop="firstAssessState"
+ prop="assessState"
width="120"
>
<template slot-scope="scope">
<dict-tag
:options="dict.type.sys_BaseAssessConclusion"
- :value="scope.row.firstAssessState"
+ :value="scope.row.assessState"
/>
</template>
</el-table-column>
<el-table-column
- label="绗竴娆¤瘎浼版椂闂�"
+ label="璇勪及鏃堕棿"
align="center"
- prop="assessFirstTime"
+ prop="assessTime"
width="110"
>
- <template slot-scope="scope">
- <span>{{ parseTime(scope.row.assessFirstTime, "{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="secondAssessState"
- width="120"
- >
- <template slot-scope="scope">
- <dict-tag
- :options="dict.type.sys_BaseAssessConclusion"
- :value="scope.row.secondAssessState"
- />
- </template>
- </el-table-column>
-
- <el-table-column
- label="绗簩娆¤瘎浼版椂闂�"
- align="center"
- prop="assessSecondTime"
- width="110"
- >
- <template slot-scope="scope">
- <span>{{
- parseTime(scope.row.assessSecondTime, "{y}-{m}-{d}")
- }}</span>
- </template>
- </el-table-column>
-
<el-table-column
label="浜插睘纭鏃堕棿"
align="center"
prop="signDate"
width="110"
>
- <template slot-scope="scope">
+ <!-- <template slot-scope="scope">
<span>{{ parseTime(scope.row.signDate, "{y}-{m}-{d}") }}</span>
- </template>
+ </template> -->
</el-table-column>
<el-table-column
@@ -317,7 +331,7 @@
</el-table-column>
<!-- 鎿嶄綔鍒楋細鍙繚鐣欑粓姝㈠拰鏌ョ湅璇︽儏 -->
- <el-table-column label="鎿嶄綔" align="center" width="150" 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
@@ -331,6 +345,14 @@
scope.row.terminationCase === 0 && scope.row.recordstate !== '99'
"
>缁堟</el-button
+ >
+ <el-button
+ size="mini"
+ type="text"
+ style="color: #67c23a;"
+ @click="handleRestore(scope.row)"
+ v-if="scope.row.terminationCase === 1"
+ >鎭㈠</el-button
>
</template>
</el-table-column>
@@ -354,39 +376,29 @@
<donor-detail :donorData="currentRecord" @close="detailVisible = false" />
</el-dialog>
- <!-- 缁堟纭寮规 -->
- <el-dialog
- title="缁堟纭"
- :visible.sync="terminateVisible"
- width="400px"
- append-to-body
- >
- <div style="margin-bottom: 20px;">
- <p>
- 纭畾瑕佺粓姝㈡崘鐚��
- <strong>{{ currentRecord.name }}</strong> 鐨勬崘鐚繘绋嬪悧锛�
- </p>
- <p style="color: #f56c6c; font-size: 12px;">
- 姝ゆ搷浣滀笉鍙�嗭紝璇疯皑鎱庢搷浣滐紒
- </p>
- </div>
- <div slot="footer">
- <el-button @click="terminateVisible = false">鍙栨秷</el-button>
- <el-button type="danger" @click="submitTerminate">纭缁堟</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 { 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,
@@ -396,8 +408,6 @@
donatebaseinfoList: [],
// 璇︽儏寮规鏄剧ず
detailVisible: false,
- // 缁堟纭寮规鏄剧ず
- terminateVisible: false,
// 褰撳墠鎿嶄綔璁板綍
currentRecord: {},
// 缁熻鏁版嵁
@@ -413,7 +423,21 @@
pageSize: 10,
name: undefined,
idcardno: undefined,
- recordstate: undefined
+ recordstate: undefined,
+ // 鏂板鐨勬悳绱㈠瓧娈�
+ reportTimeRange: [],
+ treatmenthospitalname: undefined,
+ hospitalNo: undefined
+ },
+ // 寮规鏄剧ず鐘舵��
+ modalVisible: {
+ terminate: false,
+ restore: false
+ },
+ // 寮规鏍囬
+ modalTitles: {
+ terminate: "缁堟鎹愮尞杩涚▼",
+ restore: "鎭㈠鎹愮尞杩涚▼"
}
};
},
@@ -422,26 +446,24 @@
},
methods: {
/** 鏌ヨ鎹愮尞鍩虹鍒楄〃 */
+ /** 鏌ヨ鎹愮尞鍩虹鍒楄〃 */
async getList() {
this.loading = true;
try {
const response = await courselist(this.queryParams);
- // 鏍规嵁瀹為檯鎺ュ彛杩斿洖缁撴瀯璋冩暣
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;
- // 瀛樺偍鎵�鏈夋暟鎹敤浜庡墠绔瓫閫夊拰鍒嗛〉
- this.allTableData = realData;
+ this.stats.totalCount =
+ response.total - response.data.terminationCase[2];
- // 搴旂敤鍓嶇绛涢�夋潯浠讹紙濡傛灉鎺ュ彛涓嶆敮鎸佸悗绔瓫閫夛級
+ this.allTableData = realData;
let filteredData = this.applyFrontendFilter(realData);
- // 鍓嶇鍒嗛〉澶勭悊锛堝鏋滄帴鍙d笉鏀寔鍚庣鍒嗛〉锛�
if (!response.total && !response.data) {
const startIndex =
(this.queryParams.pageNum - 1) * this.queryParams.pageSize;
@@ -449,18 +471,13 @@
this.donatebaseinfoList = filteredData.slice(startIndex, endIndex);
this.total = filteredData.length;
} else {
- // 鎺ュ彛宸插垎椤碉紝鐩存帴浣跨敤杩斿洖鏁版嵁
this.donatebaseinfoList = filteredData;
}
-
- // 鏇存柊缁熻鏁版嵁
- // this.updateStats(realData);
} catch (error) {
console.error("鑾峰彇鏁版嵁澶辫触:", error);
this.$message.error("鏁版嵁鍔犺浇澶辫触");
this.donatebaseinfoList = [];
this.total = 0;
- // this.updateStats([]);
} finally {
this.loading = false;
}
@@ -489,21 +506,37 @@
);
}
- return filteredData;
- },
+ if (this.queryParams.treatmenthospitalname) {
+ filteredData = filteredData.filter(
+ item =>
+ item.treatmenthospitalname &&
+ item.treatmenthospitalname.includes(
+ this.queryParams.treatmenthospitalname
+ )
+ );
+ }
- /** 鏇存柊缁熻鏁版嵁 */
- updateStats(data) {
- this.stats.totalCount = data.length;
- this.stats.pendingCount = data.filter(
- item => item.recordstate === "0" || item.recordstate === 0
- ).length;
- this.stats.approvedCount = data.filter(
- item => item.recordstate === "1" || item.recordstate === 1
- ).length;
- this.stats.terminatedCount = data.filter(
- item => item.recordstate === "99" || item.recordstate === 99
- ).length;
+ 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;
},
/** 鑾峰彇鐘舵�佹爣绛炬牱寮� */
@@ -529,8 +562,6 @@
/** 鏃堕棿鏍煎紡鍖� */
parseTime(time, format) {
if (!time) return "-";
-
- // 澶勭悊鏃堕棿鎴冲拰鏃ユ湡瀛楃涓�
const date = new Date(time);
if (isNaN(date.getTime())) return time;
@@ -569,26 +600,24 @@
/** 缁堟鎿嶄綔 */
handleTerminate(row) {
this.currentRecord = { ...row };
- this.terminateVisible = true;
+ this.modalVisible = { ...this.modalVisible, terminate: true };
},
- /** 鎻愪氦缁堟 */
- async submitTerminate() {
- try {
- // 璋冪敤缁堟鎺ュ彛
- await terminateDonor({
- id: this.currentRecord.id,
- caseNo: this.currentRecord.caseNo,
- terminationReason: "绠$悊鍛樻墜鍔ㄧ粓姝�"
- });
+ /** 鎭㈠鎿嶄綔 */
+ handleRestore(row) {
+ this.currentRecord = { ...row };
+ this.modalVisible = { ...this.modalVisible, restore: true };
+ },
- this.$message.success("缁堟鎴愬姛");
- this.terminateVisible = false;
- this.getList(); // 閲嶆柊鍔犺浇鏇存柊鏁版嵁
- } catch (error) {
- this.$message.error("缁堟澶辫触");
- console.error("缁堟閿欒:", error);
- }
+ /** 澶勭悊寮规鏄剧ず鐘舵�佸彉鍖� */
+ handleModalVisibleChange(newVisible) {
+ this.modalVisible = { ...newVisible };
+ },
+
+ /** 澶勭悊鎿嶄綔鎴愬姛 */
+ handleOperationSuccess({ type, record }) {
+ console.log(`${type}鎿嶄綔鎴愬姛:`, record);
+ this.getList(); // 閲嶆柊鍔犺浇鏁版嵁
}
}
};
diff --git a/src/views/project/donatebaseinfo/EditCaseModal.vue b/src/views/project/donatebaseinfo/EditCaseModal.vue
new file mode 100644
index 0000000..e2876c6
--- /dev/null
+++ b/src/views/project/donatebaseinfo/EditCaseModal.vue
@@ -0,0 +1,911 @@
+<template>
+ <el-dialog
+ :title="title"
+ :visible.sync="localVisible"
+ width="1200px"
+ :close-on-click-modal="false"
+ @close="handleClose"
+ >
+ <el-form
+ ref="formRef"
+ :model="formData"
+ :rules="rules"
+ label-width="130px"
+ label-position="right"
+ >
+ <!-- 鍩虹淇℃伅閮ㄥ垎 -->
+ <el-card header="鍩虹淇℃伅" class="form-section">
+ <el-row :gutter="20">
+ <el-col :span="11">
+ <el-form-item label="妗堜緥缂栧彿" prop="caseNo">
+ <el-input
+ v-model="formData.caseNo"
+ :disabled="isEdit"
+ placeholder="绯荤粺鑷姩鐢熸垚"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="11">
+ <el-form-item label="鎹愮尞鑰呯紪鍙�" prop="donorno">
+ <el-input
+ v-model="formData.donorno"
+ placeholder="璇疯緭鍏ユ崘鐚�呯紪鍙�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="6">
+ <el-form-item label="濮撳悕" prop="name">
+ <el-input v-model="formData.name" placeholder="蹇呭~椤�" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="鎬у埆" prop="sex">
+ <el-select v-model="formData.sex" placeholder="璇烽�夋嫨鎬у埆">
+ <el-option label="鏈煡" value="0" />
+ <el-option label="鐢�" value="1" />
+ <el-option label="濂�" value="2" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="璇佷欢绫诲瀷" prop="idcardtype">
+ <el-select
+ v-model="formData.idcardtype"
+ placeholder="璇烽�夋嫨璇佷欢绫诲瀷"
+ >
+ <el-option label="韬唤璇�" value="1" />
+ <el-option label="鍐涗汉璇�" value="2" />
+ <el-option label="鎶ょ収" value="3" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="璇佷欢鍙风爜" prop="idcardno">
+ <el-input
+ v-model="formData.idcardno"
+ placeholder="璇疯緭鍏ヨ瘉浠跺彿鐮�"
+ @blur="handleIdCardBlur"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="6">
+ <el-form-item label="鍑虹敓鏃ユ湡" prop="birthday">
+ <el-date-picker
+ v-model="formData.birthday"
+ type="date"
+ placeholder="閫夋嫨鍑虹敓鏃ユ湡"
+ value-format="yyyy-MM-dd"
+ style="width: 100%"
+ @change="calculateAge"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="骞撮緞" prop="andAge">
+ <el-input v-model="formData.andAge" disabled />
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="姘戞棌" prop="nation">
+ <el-select v-model="formData.nation" placeholder="璇烽�夋嫨姘戞棌">
+ <el-option
+ v-for="dict in dictOptions.sys_nation"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="鍥界睄" prop="nationality">
+ <el-input
+ v-model="formData.nationality"
+ placeholder="璇疯緭鍏ュ浗绫�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="6">
+ <el-form-item label="鑱旂郴鐢佃瘽" prop="phone">
+ <el-input v-model="formData.phone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="瀛﹀巻" prop="education">
+ <el-select v-model="formData.education" placeholder="璇烽�夋嫨瀛﹀巻">
+ <el-option
+ v-for="dict in dictOptions.sys_education"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="鑱屼笟" prop="occupation">
+ <el-select v-model="formData.occupation" placeholder="璇烽�夋嫨鑱屼笟">
+ <el-option
+ v-for="dict in dictOptions.sys_occupation"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="绫嶈疮" prop="nativeplace">
+ <el-input
+ v-model="formData.nativeplace"
+ placeholder="璇疯緭鍏ョ睄璐�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-card>
+
+ <!-- 鍖荤枟淇℃伅閮ㄥ垎 -->
+ <el-card header="鍖荤枟淇℃伅" class="form-section">
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="棣栬瘖鍖婚櫌" prop="treatmenthospitalno">
+ <org-selecter
+ :org-type="'3'"
+ v-model="formData.treatmenthospitalno"
+ @change="handleHospitalChange"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="绉戝" prop="treatmentdeptname">
+ <el-input
+ v-model="formData.treatmentdeptname"
+ placeholder="璇疯緭鍏ョ瀹�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="浣忛櫌鍙�" prop="inpatientno">
+ <el-input
+ v-model="formData.inpatientno"
+ placeholder="璇疯緭鍏ヤ綇闄㈠彿"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鐤剧梾璇婃柇" prop="diagnosisname">
+ <el-input
+ v-model="formData.diagnosisname"
+ placeholder="璇疯緭鍏ョ柧鐥呰瘖鏂悕绉�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="琛�鍨�" prop="bloodtype">
+ <el-radio-group v-model="formData.bloodtype">
+ <el-radio label="1">A鍨�</el-radio>
+ <el-radio label="2">B鍨�</el-radio>
+ <el-radio label="3">O鍨�</el-radio>
+ <el-radio label="4">AB鍨�</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="Rh(D)" prop="rhyin">
+ <el-radio-group v-model="form.rhyin">
+ <el-radio
+ v-for="dict in dict.type.sys_bloodtype_rhd || []"
+ :key="dict.value"
+ :label="dict.value"
+ >{{ dict.label }}</el-radio
+ >
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="褰撳墠鍖荤枟鏈烘瀯" prop="currentMedicalInstitution">
+ <el-input
+ v-model="formData.currentMedicalInstitution"
+ placeholder="璇疯緭鍏ュ綋鍓嶅尰鐤楁満鏋�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="褰撳墠鍖荤枟鏈烘瀯绉戝" prop="currentDept">
+ <el-input
+ v-model="formData.currentDept"
+ placeholder="璇疯緭鍏ュ綋鍓嶅尰鐤楁満鏋勭瀹�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="棣栨鍖荤枟鏈烘瀯" prop="firstMedicalInstitution">
+ <el-input
+ v-model="formData.firstMedicalInstitution"
+ placeholder="璇疯緭鍏ラ娆″尰鐤楁満鏋�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="棣栨鍖荤枟鏈烘瀯绉戝" prop="firstDept">
+ <el-input
+ v-model="formData.firstDept"
+ placeholder="璇疯緭鍏ラ娆″尰鐤楁満鏋勭瀹�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="GSC璇勫垎" prop="gcsScore">
+ <el-input
+ v-model="formData.gcsScore"
+ placeholder="璇疯緭鍏SC璇勫垎"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍗忚皟鍛樼紪鍙�" prop="coordinatorNo">
+ <el-input
+ v-model="formData.coordinatorNo"
+ placeholder="璇疯緭鍏ュ崗璋冨憳缂栧彿"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍗忚皟鍛樺鍚�" prop="coordinatorName">
+ <el-input
+ v-model="formData.coordinatorName"
+ placeholder="璇疯緭鍏ュ崗璋冨憳濮撳悕"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="鐥呮儏姒傚喌" prop="illnessoverview">
+ <el-input
+ v-model="formData.illnessoverview"
+ type="textarea"
+ :rows="3"
+ placeholder="璇疯緭鍏ョ梾鎯呮鍐�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-card>
+
+ <!-- 鍦板潃淇℃伅閮ㄥ垎 -->
+ <el-card header="鍦板潃淇℃伅" class="form-section">
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鐜颁綇鍦板潃" prop="residenceaddress">
+ <li-area-select
+ ref="residenceSelect"
+ v-model="residenceAddress"
+ @change="handleResidenceAddressChange"
+ />
+ <el-input
+ v-model="formData.residenceaddress"
+ placeholder="璇疯緭鍏ヨ缁嗗湴鍧�"
+ style="margin-top: 8px"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎴风睄鍦板潃" prop="registeraddress">
+ <li-area-select
+ ref="registerSelect"
+ v-model="registerAddress"
+ @change="handleRegisterAddressChange"
+ />
+ <el-input
+ v-model="formData.registeraddress"
+ placeholder="璇疯緭鍏ヨ缁嗗湴鍧�"
+ style="margin-top: 8px"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-card>
+
+ <!-- 鎹愮尞淇℃伅閮ㄥ垎 -->
+ <el-card header="鎹愮尞淇℃伅" class="form-section">
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="鎹愮尞绫诲埆" prop="donationcategory">
+ <el-select
+ v-model="formData.donationcategory"
+ placeholder="璇烽�夋嫨鎹愮尞绫诲埆"
+ >
+ <el-option
+ v-for="dict in dictOptions.sys_DonationCategory"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="妗堜緥鏃堕棿" prop="donatetime">
+ <el-date-picker
+ v-model="formData.donatetime"
+ type="datetime"
+ placeholder="閫夋嫨妗堜緥鏃堕棿"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ style="width: 100%"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="璁板綍鐘舵��" prop="recordstate">
+ <el-select v-model="formData.recordstate" :disabled="isEdit">
+ <el-option label="鏂板缓" value="0" />
+ <el-option label="宸蹭笂鎶�" value="1" />
+ <el-option label="瀹℃牳涓�" value="2" />
+ <el-option label="宸插畬鎴�" value="3" />
+ <el-option label="宸茬粓姝�" value="99" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鑾峰彇缁勭粐缂栧彿" prop="acquisitiontissueno">
+ <el-input
+ v-model="formData.acquisitiontissueno"
+ placeholder="璇疯緭鍏ヨ幏鍙栫粍缁囩紪鍙�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鑾峰彇缁勭粐鍚嶇О" prop="acquisitiontissuename">
+ <el-input
+ v-model="formData.acquisitiontissuename"
+ placeholder="璇疯緭鍏ヨ幏鍙栫粍缁囧悕绉�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-card>
+
+ <!-- 鎶ュ憡淇℃伅閮ㄥ垎 -->
+ <el-card header="鎶ュ憡淇℃伅" class="form-section">
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="鎶ュ憡浜虹紪鍙�" prop="reporterno">
+ <el-select
+ v-model="formData.reporterno"
+ @change="handleReporterChange"
+ >
+ <el-option
+ v-for="reporter in reporters"
+ :key="reporter.reportNo"
+ :label="reporter.reportName"
+ :value="reporter.reportNo"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鎶ュ憡浜哄鍚�" prop="reportername">
+ <el-input
+ v-model="formData.reportername"
+ placeholder="鎶ュ憡浜哄鍚�"
+ :disabled="true"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鎶ュ憡浜虹數璇�" prop="reporterphone">
+ <el-input
+ v-model="formData.reporterphone"
+ placeholder="鎶ュ憡浜鸿仈绯荤數璇�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鎶ュ憡鏃堕棿" prop="reporttime">
+ <el-date-picker
+ v-model="formData.reporttime"
+ type="datetime"
+ placeholder="閫夋嫨鎶ュ憡鏃堕棿"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ style="width: 100%"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="閮ㄩ棬ID" prop="deptid">
+ <el-input v-model="formData.deptid" placeholder="璇疯緭鍏ラ儴闂↖D" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-card>
+ </el-form>
+
+ <div slot="footer" class="dialog-footer">
+ <el-button @click="handleClose">鍙栨秷</el-button>
+ <el-button type="primary" @click="handleSubmit" :loading="submitLoading">
+ {{ isEdit ? "鏇存柊" : "淇濆瓨" }}
+ </el-button>
+ </div>
+ </el-dialog>
+</template>
+
+<script>
+import {
+ getDonatebaseinfo,
+ updateDonatebaseinfo
+} from "@/api/project/donatebaseinfo";
+import OrgSelecter from "@/views/project/components/orgselect";
+import LiAreaSelect from "@/components/Address";
+
+export default {
+ name: "EditCaseModal",
+ components: {
+ OrgSelecter,
+ LiAreaSelect
+ },
+
+ dicts: ["sys_bloodtype_rhd", "sys_BloodType"],
+
+ props: {
+ visible: {
+ type: Boolean,
+ default: false
+ },
+ editData: {
+ type: Object,
+ default: () => ({})
+ },
+ dictOptions: {
+ type: Object,
+ default: () => ({})
+ },
+ reporters: {
+ type: Array,
+ default: () => []
+ }
+ },
+ data() {
+ return {
+ localVisible: this.visible,
+ isEdit: false,
+ submitLoading: false,
+ residenceAddress: {},
+ registerAddress: {},
+ formData: this.getDefaultFormData(),
+ rules: {
+ name: [
+ { required: true, message: "璇疯緭鍏ユ崘鐚�呭鍚�", trigger: "blur" }
+ ],
+ sex: [{ required: true, message: "璇烽�夋嫨鎬у埆", trigger: "change" }],
+ idcardtype: [
+ { required: true, message: "璇烽�夋嫨璇佷欢绫诲瀷", trigger: "change" }
+ ],
+ idcardno: [
+ { required: true, message: "璇疯緭鍏ヨ瘉浠跺彿鐮�", trigger: "blur" }
+ ],
+ birthday: [
+ { required: true, message: "璇烽�夋嫨鍑虹敓鏃ユ湡", trigger: "change" }
+ ],
+ treatmenthospitalno: [
+ { required: true, message: "璇烽�夋嫨棣栬瘖鍖婚櫌", trigger: "change" }
+ ],
+ diagnosisname: [
+ { required: true, message: "璇疯緭鍏ョ柧鐥呰瘖鏂�", trigger: "blur" }
+ ],
+ bloodtype: [
+ { required: true, message: "璇烽�夋嫨琛�鍨�", trigger: "change" }
+ ],
+ donatetime: [
+ { required: true, message: "璇烽�夋嫨妗堜緥鏃堕棿", trigger: "change" }
+ ],
+ reporttime: [
+ { required: true, message: "璇烽�夋嫨鎶ュ憡鏃堕棿", trigger: "change" }
+ ]
+ }
+ };
+ },
+ computed: {
+ title() {
+ return this.isEdit ? "缂栬緫妗堜緥淇℃伅" : "鏂板鎹愮尞妗堜緥";
+ }
+ },
+ watch: {
+ visible(newVal) {
+ this.localVisible = newVal;
+ if (newVal) {
+ this.initForm();
+ }
+ },
+ localVisible(newVal) {
+ this.$emit("update:visible", newVal);
+ },
+ editData: {
+ handler(newVal) {
+ if (newVal && newVal.id) {
+ this.isEdit = true;
+ this.$nextTick(() => {
+ // 纭繚 DOM 宸茬粡鏇存柊鍚庡啀杩涜琛ㄥ崟鎿嶄綔
+ this.initForm(newVal);
+ });
+ }
+ },
+ deep: true,
+ immediate: true
+ }
+ },
+ methods: {
+ getDefaultFormData() {
+ return {
+ // 鍩虹淇℃伅
+ caseNo: null,
+ donorno: null,
+ donateno: null,
+ name: null,
+ sex: null,
+ idcardtype: null,
+ idcardno: null,
+ birthday: null,
+ andAge: "",
+ age: null,
+ ageunit: "骞�",
+ age2: null,
+ ageunit2: "鏈�",
+ nation: null,
+ nationality: "涓浗",
+ nativeplace: null,
+ phone: null,
+ education: null,
+ occupation: null,
+
+ // 鍖荤枟淇℃伅
+ treatmenthospitalno: null,
+ treatmenthospitalname: null,
+ treatmentdeptname: null,
+ inpatientno: null,
+ diagnosisname: null,
+ bloodtype: "0",
+ rhyin: "0",
+ currentMedicalInstitution: null,
+ currentDept: null,
+ firstMedicalInstitution: null,
+ firstDept: null,
+ gcsScore: null,
+ illnessoverview: null,
+ coordinatorNo: null,
+ coordinatorName: null,
+
+ // 鍦板潃淇℃伅
+ residenceaddress: null,
+ residenceprovince: null,
+ residencecity: null,
+ registeraddress: null,
+ registerprovince: null,
+ registercity: null,
+
+ // 鎹愮尞淇℃伅
+ donationcategory: null,
+ donatetime: null,
+ recordstate: "0",
+ acquisitiontissueno: "ZJOPO",
+ acquisitiontissuename: "娴欐睙鐪佷汉浣撳櫒瀹樿幏鍙栫粍缁�",
+
+ // 鎶ュ憡淇℃伅
+ reporterno: null,
+ reportername: null,
+ reporterphone: null,
+ reporttime: null,
+ deptid: null,
+
+ // 鏁扮粍瀛楁
+ diseasetype: [],
+ infectious: [],
+ selfwill: [],
+ othercases: [],
+ infosources: [],
+ kinship: [],
+ patientstate: []
+ };
+ },
+
+ async initForm() {
+ console.log(this.isEdit);
+
+ if (this.isEdit) {
+ await this.loadEditData();
+ } else {
+ this.formData = this.getDefaultFormData();
+ // 璁剧疆榛樿鍊�
+ this.formData.nationality = "涓浗";
+ this.formData.bloodtype = "0";
+ this.formData.rhyin = "0";
+ this.formData.recordstate = "0";
+ this.formData.acquisitiontissueno = "ZJOPO";
+ this.formData.acquisitiontissuename = "娴欐睙鐪佷汉浣撳櫒瀹樿幏鍙栫粍缁�";
+ }
+ this.$nextTick(() => {
+ this.$refs.formRef?.clearValidate();
+ });
+ },
+
+ async loadEditData() {
+ try {
+ const response = await getDonatebaseinfo(this.editData.id);
+ const data = response.data;
+
+ // 澶勭悊鏁扮粍瀛楁
+ const arrayFields = [
+ "diseasetype",
+ "infectious",
+ "selfwill",
+ "othercases",
+ "infosources",
+ "kinship",
+ "patientstate"
+ ];
+ arrayFields.forEach(field => {
+ if (data[field]) {
+ data[field] = data[field].split(",");
+ } else {
+ data[field] = [];
+ }
+ });
+
+ this.formData = { ...this.getDefaultFormData(), ...data };
+
+ // 璁剧疆鍦板潃淇℃伅
+ if (data.residenceprovince) {
+ this.residenceAddress = {
+ sheng: data.residenceprovincename,
+ shi: data.residencecityname,
+ qu: data.residencetownname
+ };
+ }
+
+ if (data.registerprovince) {
+ this.registerAddress = {
+ sheng: data.registerprovincename,
+ shi: data.registercityname,
+ qu: data.registertownname
+ };
+ }
+
+ this.calculateAge(data.birthday);
+ } catch (error) {
+ this.$message.error("鑾峰彇妗堜緥鏁版嵁澶辫触");
+ this.handleClose();
+ }
+ },
+
+ handleIdCardBlur() {
+ // 韬唤璇佽嚜鍔ㄥ~鍏呴�昏緫
+ this.updateMessage();
+ },
+
+ updateMessage() {
+ const idCardReg = /^[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 (idCardReg.test(this.formData.idcardno)) {
+ const orgBirthday = this.formData.idcardno.substring(6, 14);
+ const orgGender = this.formData.idcardno.substring(16, 17);
+
+ const sex = orgGender % 2 == 1 ? "1" : "2";
+ const birthday = `${orgBirthday.substring(
+ 0,
+ 4
+ )}-${orgBirthday.substring(4, 6)}-${orgBirthday.substring(6, 8)}`;
+
+ this.formData.sex = sex;
+ this.formData.birthday = birthday;
+ this.calculateAge(birthday);
+ }
+ },
+
+ calculateAge(birthday) {
+ if (!birthday) {
+ this.formData.age = this.formData.age2 = null;
+ this.formData.andAge = "";
+ return;
+ }
+
+ const birthDate = new Date(birthday);
+ const today = new Date();
+
+ let yearDiff = today.getFullYear() - birthDate.getFullYear();
+ let monthDiff = today.getMonth() - birthDate.getMonth();
+ let dayDiff = today.getDate() - birthDate.getDate();
+
+ if (dayDiff < 0) {
+ monthDiff--;
+ const lastDayOfMonth = new Date(
+ today.getFullYear(),
+ today.getMonth(),
+ 0
+ ).getDate();
+ dayDiff += lastDayOfMonth;
+ }
+
+ if (monthDiff < 0) {
+ yearDiff--;
+ monthDiff += 12;
+ }
+
+ this.formData.age = yearDiff;
+ this.formData.ageunit = "宀�";
+ this.formData.age2 = monthDiff;
+ this.formData.ageunit2 = "鏈�";
+
+ if (yearDiff === 0) {
+ if (monthDiff === 0) {
+ this.formData.age = dayDiff;
+ this.formData.ageunit = "澶�";
+ this.formData.age2 = null;
+ } else {
+ this.formData.age = monthDiff;
+ this.formData.ageunit = "鏈�";
+ this.formData.age2 = dayDiff;
+ this.formData.ageunit2 = "澶�";
+ }
+ }
+
+ this.formData.andAge = [
+ this.formData.age && this.formData.age !== 0
+ ? `${this.formData.age}${this.formData.ageunit}`
+ : "",
+ this.formData.age2 && this.formData.age2 !== 0
+ ? `${this.formData.age2}${this.formData.ageunit2}`
+ : ""
+ ]
+ .filter(Boolean)
+ .join(" ");
+ },
+
+ handleHospitalChange(hospitalInfo) {
+ if (hospitalInfo && hospitalInfo.organizationname) {
+ this.formData.treatmenthospitalname = hospitalInfo.organizationname;
+ }
+ },
+
+ handleReporterChange(reporterNo) {
+ const reporter = this.reporters.find(r => r.reportNo === reporterNo);
+ if (reporter) {
+ this.formData.reportername = reporter.reportName;
+ }
+ },
+
+ handleResidenceAddressChange(address) {
+ this.formData.residenceprovince = address.sheng;
+ this.formData.residencecity = address.shi;
+ this.formData.residencetown = address.qu;
+ },
+
+ handleRegisterAddressChange(address) {
+ this.formData.registerprovince = address.sheng;
+ this.formData.registercity = address.shi;
+ this.formData.registertown = address.qu;
+ },
+
+ handleClose() {
+ this.localVisible = false;
+ this.isEdit = false;
+ this.submitLoading = false;
+ this.formData = this.getDefaultFormData();
+ this.residenceAddress = {};
+ this.registerAddress = {};
+ this.$emit("closed");
+ },
+
+ async handleSubmit() {
+ const valid = await this.$refs.formRef.validate().catch(() => false);
+ if (!valid) return;
+
+ this.submitLoading = true;
+ try {
+ const submitData = this.processSubmitData();
+
+ const result = await updateDonatebaseinfo(submitData);
+ if (result.code === 200) {
+ this.$message.success(this.isEdit ? "鏇存柊鎴愬姛" : "鏂板鎴愬姛");
+ this.$emit("success", result.data);
+ this.handleClose();
+ } else {
+ this.$message.error(result.msg || "鎿嶄綔澶辫触");
+ }
+ } catch (error) {
+ this.$message.error("鎿嶄綔澶辫触");
+ } finally {
+ this.submitLoading = false;
+ }
+ },
+
+ processSubmitData() {
+ const data = { ...this.formData };
+
+ // 澶勭悊鏁扮粍瀛楁涓哄瓧绗︿覆
+ const arrayFields = [
+ "diseasetype",
+ "infectious",
+ "selfwill",
+ "othercases",
+ "infosources",
+ "kinship",
+ "patientstate"
+ ];
+ arrayFields.forEach(field => {
+ if (Array.isArray(data[field])) {
+ data[field] = data[field].join(",");
+ } else if (!data[field]) {
+ data[field] = "";
+ }
+ });
+
+ // 澶勭悊鏃ユ湡瀛楁
+ if (data.birthday) {
+ data.birthday = this.$moment(data.birthday).format(
+ "YYYY-MM-DD HH:mm:ss"
+ );
+ }
+ if (data.reporttime) {
+ data.reporttime = this.$moment(data.reporttime).format(
+ "YYYY-MM-DD HH:mm:ss"
+ );
+ }
+ if (data.donatetime) {
+ data.donatetime = this.$moment(data.donatetime).format(
+ "YYYY-MM-DD HH:mm:ss"
+ );
+ }
+
+ // 璁剧疆榛樿鍊�
+ if (!data.recordstate) {
+ data.recordstate = "0";
+ }
+ if (!data.workflow) {
+ data.workflow = 0;
+ }
+
+ return data;
+ }
+ }
+};
+</script>
+
+<style scoped>
+.form-section {
+ margin-bottom: 20px;
+}
+.form-section:last-child {
+ margin-bottom: 0;
+}
+</style>
diff --git a/src/views/project/donatebaseinfo/index.vue b/src/views/project/donatebaseinfo/index.vue
index 2378891..6c29d1c 100644
--- a/src/views/project/donatebaseinfo/index.vue
+++ b/src/views/project/donatebaseinfo/index.vue
@@ -1,5 +1,6 @@
<template>
<div class="app-container">
+ <!-- 鎼滅储琛ㄥ崟 -->
<el-form
:model="queryParams"
ref="queryForm"
@@ -9,7 +10,7 @@
>
<el-row :gutter="8">
<el-col :span="5">
- <el-form-item label="濮撳悕" prop="name">
+ <el-form-item label="鎮h�呭鍚�" prop="name">
<el-input
v-model="queryParams.name"
placeholder="璇疯緭鍏ュ鍚�"
@@ -20,34 +21,16 @@
</el-form-item>
</el-col>
<el-col :span="5">
- <el-form-item
- align="left"
- label="鍖荤枟鏈烘瀯"
- prop="treatmenthospitalname"
- >
+ <el-form-item label="棣栬瘖鍖婚櫌" prop="treatmenthospitalname">
<org-selecter
ref="orgSelecter"
:org-type="'3'"
v-model="queryParams.treatmenthospitalno"
- @keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-col>
- <el-col :span="5">
- <el-form-item label="鎹愮尞鍦板競">
- <el-select v-model="queryParams.city" placeholder="璇烽�夋嫨鍦板競">
- <el-option
- v-for="item in provinceData"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- </el-option>
- </el-select>
- </el-form-item>
- </el-col>
<el-col :span="9">
- <el-form-item label="妗堜緥鏃堕棿">
+ <el-form-item label="涓婃姤鏃堕棿">
<el-date-picker
style="width: 100%"
v-model="selecttime"
@@ -57,69 +40,7 @@
end-placeholder="缁撴潫鏈堜唤"
value-format="yyyy-MM-dd"
@change="getTimeList"
- >
- </el-date-picker>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="8">
- <el-col :span="5">
- <el-form-item label="鎹愮尞杩涘害" prop="workflow">
- <el-select
- v-model="queryParams.workflow"
- placeholder="璇烽�夋嫨褰撳墠杩涘害"
- clearable
- size="small"
- >
- <el-option
- v-for="dict in dict.type.sys_donornode"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="5">
- <el-form-item label="鎶ュ憡浜�">
- <el-select
- v-model="queryParams.reporterno"
- placeholder="璇烽�夋嫨鎶ュ憡浜�"
- >
- <el-option
- v-for="item in reportlist"
- :key="item.index"
- :label="item.reportername"
- :value="item.reporterno"
- >
- </el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="5">
- <el-form-item label="鏄惁缁堟">
- <el-select
- v-model="queryParams.terminationCase"
- placeholder="璇烽�夋嫨鐘舵��"
- >
- <el-option
- v-for="item in terminationCaselist"
- :key="item.value"
- :label="item.name"
- :value="item.value"
- >
- </el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="9">
- <el-form-item label="绫嶈疮">
- <div>
- <li_area_select
- ref="areaSelect"
- v-model="searchAddress"
- ></li_area_select>
- </div>
+ />
</el-form-item>
</el-col>
</el-row>
@@ -131,39 +52,19 @@
icon="el-icon-search"
size="mini"
@click="handleQuery"
- >鎼滅储</el-button
>
- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
- >閲嶇疆</el-button
- >
+ 鎼滅储
+ </el-button>
+ <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">
+ 閲嶇疆
+ </el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
+
+ <!-- 鎿嶄綔鎸夐挳 -->
<el-row :gutter="10" class="mb8">
- <el-col :span="1.5">
- <el-button
- type="primary"
- plain
- icon="el-icon-plus"
- size="mini"
- @click="handleAdd"
- v-hasPermi="['project:donatebaseinfo:add']"
- >鏂板</el-button
- >
- </el-col>
- <!-- <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-col :span="1.5">
<el-button
@@ -174,15 +75,14 @@
:loading="exportLoading"
@click="handleExport"
v-hasPermi="['project:donatebaseinfo:export']"
- >瀵煎嚭</el-button
>
+ 瀵煎嚭
+ </el-button>
</el-col>
- <right-toolbar
- :showSearch.sync="showSearch"
- @queryTable="getList"
- ></right-toolbar>
+ <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" />
</el-row>
+ <!-- 鏁版嵁琛ㄦ牸 -->
<el-table
v-loading="loading"
:data="donatebaseinfoList"
@@ -190,8 +90,6 @@
border
:default-sort="{ prop: 'donatetime', order: 'descending' }"
>
- <!-- <el-table-column label="鎶ュ憡鏃堕棿" align="center" prop="id" /> -->
- <!-- <el-table-column type="selection" width="55" align="center" /> -->
<el-table-column
label="妗堜緥鏃堕棿"
align="center"
@@ -219,9 +117,11 @@
</el-table-column>
<el-table-column label="骞撮緞" align="center" prop="age" width="100">
<template slot-scope="scope">
- {{
+ {{
`${
- scope.row.age && scope.row.age !== 0 ? `${scope.row.age}${scope.row.ageunit?scope.row.ageunit:''}` : ""
+ scope.row.age && scope.row.age !== 0
+ ? `${scope.row.age}${scope.row.ageunit || ""}`
+ : ""
} ${
scope.row.age2 && scope.row.age2 !== 0
? `${scope.row.age2}${scope.row.ageunit2}`
@@ -231,15 +131,11 @@
</template>
</el-table-column>
<el-table-column
- label="鍖荤枟鏈烘瀯"
+ label="棣栬瘖鍖婚櫌"
align="center"
prop="treatmenthospitalname"
/>
- <el-table-column
- label="GSC璇勫垎"
- align="center"
- prop="gcsScore"
- />
+ <el-table-column label="GSC璇勫垎" align="center" prop="gcsScore" />
<el-table-column label="琛�鍨�" align="center" prop="bloodtype" width="100">
<template slot-scope="scope">
<dict-tag
@@ -248,7 +144,6 @@
/>
</template>
</el-table-column>
-
<el-table-column
label="鎹愮尞绫诲埆"
align="center"
@@ -268,27 +163,6 @@
prop="reportername"
width="100"
/>
- <!--
- <el-table-column
- label="鐜版墍鍦ㄥ湴甯�"
- align="center"
- prop="registercityname"
- width="150"
- />
- <el-table-column
- label="鎹愮尞杩涘害"
- align="center"
- prop="recordstate"
- width="120"
- >
- <template slot-scope="scope">
- <dict-tag
- :options="dict.type.sys_DonationStatus"
- :value="scope.row.recordstate"
- />
- </template>
- </el-table-column>
- -->
<el-table-column
label="鎹愮尞杩涘害"
align="center"
@@ -302,11 +176,12 @@
:value="scope.row.workflow"
/>
</div>
- <div v-else>浠诲姟缁堟</div>
+ <div v-else><el-button type="danger" plain>浠诲姟缁堟</el-button></div>
</template>
</el-table-column>
<el-table-column
label="鎿嶄綔"
+ width="190"
align="center"
class-name="small-padding fixed-width"
fixed="right"
@@ -318,35 +193,42 @@
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['project:donatebaseinfo:edit']"
- >璇︽儏</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 v-if="scope.row.recordstate == 0 || scope.row.recordstate == 3" size="mini" type="text"
- icon="el-icon-thumb" @click="handleapproval(scope.row)">鎻愪氦</el-button>
- -->
+ 璇︽儏
+ </el-button>
<el-button
size="mini"
type="text"
- icon="el-icon-refrigerator"
- @click="handledownload(scope.row)"
- >涓嬭浇</el-button
+ icon="el-icon-edit"
+ @click="handleOpenEdit(scope.row)"
+ v-hasPermi="['project:donatebaseinfo:edit']"
+ >缂栬緫</el-button
>
- <!--
- <el-button size="mini" type="text" icon="el-icon-edit" @click="handletermination(scope.row)"
- v-hasPermi="['project:donatebaseinfo:edit']">{{ scope.row.recordstate == 99 ? "鎭㈠": "缁堟" }}</el-button>
- -->
+ <el-button
+ size="mini"
+ type="text"
+ style="color: #f56c6c;"
+ @click="handleTerminate(scope.row)"
+ v-if="
+ scope.row.terminationCase === 0 && scope.row.recordstate !== '99'
+ "
+ >
+ 缁堟
+ </el-button>
+ <el-button
+ size="mini"
+ type="text"
+ style="color: #67c23a;"
+ @click="handleRestore(scope.row)"
+ v-if="scope.row.terminationCase === 1"
+ >
+ 鎭㈠
+ </el-button>
</template>
</el-table-column>
</el-table>
+
+ <!-- 鍒嗛〉 -->
<pagination
v-show="total > 0"
:total="total"
@@ -354,1051 +236,165 @@
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
- <!-- 娣诲姞鎴栦慨鏀规崘鐚熀纭�瀵硅瘽妗� -->
- <el-dialog
- :title="title"
- align="center"
- :visible.sync="open"
- :close-on-click-modal="false"
- width="1100px"
- >
- <el-form
- ref="form"
- :model="form"
- :rules="rules"
- label-width="130px"
- label-position="right"
- >
- <div
- style="
- border-bottom: 1px solid #ddd;
- border-top: 1px solid #ddd;
- padding-right: 60px;
- "
- >
- <el-row style="margin-top: 40px">
- <el-col :span="8">
- <el-form-item label="妗堜緥缂栧彿" prop="caseNo">
- <el-input v-model="form.caseNo" disabled />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item
- align="left"
- label="鍖荤枟鏈烘瀯"
- prop="treatmenthospitalno"
- >
- <org-selecter
- ref="addOrgSelect"
- :org-type="'3'"
- v-model="form.treatmenthospitalno"
- />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="绉戝" prop="treatmentdeptno">
- <el-input
- v-model="form.treatmentdeptname"
- placeholder="璇疯緭鍏ョ瀹�"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="6">
- <el-form-item align="left" label="濮撳悕" prop="name">
- <el-input v-model="form.name" placeholder="蹇呭~椤�" />
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="姘戞棌" prop="nation">
- <el-select v-model="form.nation" placeholder="璇烽�夋嫨姘戞棌">
- <el-option
- v-for="dict in dict.type.sys_nation"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- ></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="绫嶈疮" prop="nativeplace">
- <el-input v-model="form.nativeplace" placeholder="璇疯緭鍏ュ浗绫�" />
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="鍥界睄" prop="nationality">
- <el-input v-model="form.nationality" placeholder="璇疯緭鍏ュ浗绫�" />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="6">
- <el-form-item label="璇佷欢绫诲瀷" prop="idcardtype">
- <el-select
- v-model="form.idcardtype"
- placeholder="璇烽�夋嫨璇佷欢绫诲瀷"
- >
- <el-option
- v-for="dict in dict.type.sys_IDType"
- :key="dict.value"
- :label="dict.label"
- :value="parseInt(dict.value)"
- ></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="璇佷欢鍙风爜" prop="idcardno">
- <el-input
- style="width: 174px"
- ref="updateBSvalue"
- class="sfzcode"
- v-model="form.idcardno"
- placeholder="璇疯緭鍏ヨ瘉浠跺彿鐮�"
- @blur="updateMessage"
- />
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="鎬у埆" prop="sex">
- <el-select v-model="form.sex" placeholder="璇疯緭鍏ユ�у埆">
- <el-option
- v-for="dict in dict.type.sys_user_sex"
- :key="dict.label"
- :label="dict.label"
- :value="parseInt(dict.value)"
- ></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="瀛﹀巻" prop="education">
- <el-select v-model="form.education" placeholder="璇烽�夋嫨瀛﹀巻">
- <el-option
- v-for="dict in dict.type.sys_education"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- ></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="6">
- <el-form-item label="鍑虹敓鏃ユ湡" prop="birthday">
- <el-date-picker
- clearable
- size="small"
- v-model="form.birthday"
- type="date"
- style="width: 174px"
- @change="calculateAge"
- value-format="yyyy-MM-dd"
- placeholder="閫夋嫨鍑虹敓鏃ユ湡"
- >
- </el-date-picker>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <!-- <el-form-item label="骞撮緞" prop="age">
- <el-input v-model="form.age" placeholder="璇疯緭鍏ュ勾榫�" />
- </el-form-item> -->
- <el-form-item label="骞撮緞" prop="age">
- <el-input v-model="form.andAge" disabled> </el-input>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="鑱屼笟" prop="occupation">
- <el-select v-model="form.occupation" placeholder="璇烽�夋嫨鑱屼笟">
- <el-option
- v-for="dict in dict.type.sys_occupation"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- ></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item
- label="鎵�鍦ㄥ尰鐤楁満鏋�"
- prop="currentMedicalInstitution"
- >
- <el-input
- v-model="form.currentMedicalInstitution"
- placeholder="璇疯緭鍏�"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item
- label-width="150px"
- label="鎵�鍦ㄥ尰鐤楁満鏋勭瀹�"
- prop="currentDept"
- >
- <el-input v-model="form.currentDept" placeholder="璇疯緭鍏�" />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="棣栨鍖荤枟鏈烘瀯" prop="firstMedicalInstitution">
- <el-input
- v-model="form.firstMedicalInstitution"
- placeholder="璇疯緭鍏�"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item
- label-width="150px"
- label="棣栨鍖荤枟鏈烘瀯绉戝"
- prop="firstDept"
- >
- <el-input v-model="form.firstDept" placeholder="璇疯緭鍏�" />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="浣忓潃" prop="residenceaddress">
- <div>
- <li_area_select
- ref="residenceSelect"
- v-model="residenceAddresss"
- ></li_area_select>
- <!-- <div>{{defultAddress}}</div> -->
- </div>
- </el-form-item>
- </el-col>
- <el-col :span="11" :push="1">
- <el-input
- v-model="form.residenceaddress"
- placeholder="璇疯緭鍏ュ唴瀹�"
- />
- </el-col>
- </el-row>
-
- <el-row>
- <el-col :span="12">
- <el-form-item label="鐜版墍鍦ㄥ湴" prop="registeraddress">
- <div>
- <li_area_select
- ref="registerSelect"
- v-model="registerAddresss"
- ></li_area_select>
- <!-- <div>{{defultAddress}}</div> -->
- </div>
- </el-form-item>
- </el-col>
- <el-col :span="11" :push="1">
- <el-input
- v-model="form.registeraddress"
- placeholder="璇疯緭鍏ュ唴瀹�"
- />
- </el-col>
- </el-row>
- </div>
-
- <div
- style="
- border-bottom: 1px solid #ddd;
- margin-top: 20px;
- padding-right: 60px;
- "
- >
- <el-row>
- <el-col :span="8">
- <el-form-item label="妗堜緥缂栧彿" prop="inpatientno">
- <el-input v-model="form.inpatientno" placeholder="妗堜緥缂栧彿" />
- </el-form-item>
- </el-col>
- <el-col :span="16">
- <el-form-item label="鐤剧梾璇婃柇" prop="diagnosisname">
- <el-input
- v-model="form.diagnosisname"
- placeholder="璇疯緭鍏ョ柧鐥呰瘖鏂悕绉�"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item align="left" label="琛�鍨�" prop="bloodtype">
- <el-radio-group v-model="form.bloodtype">
- <el-radio
- v-for="dict in dict.type.sys_BloodType"
- :key="dict.value"
- :label="dict.value"
- >{{ dict.label }}</el-radio
- >
- </el-radio-group>
- </el-form-item>
- </el-col>
- <el-col :span="12" :pull="1">
- <el-form-item label="Rh(D)" align="left" prop="rhyin">
- <el-radio-group v-model="form.rhyin">
- <el-radio
- v-for="dict in dict.type.sys_bloodtype_rhd"
- :key="dict.value"
- :label="dict.value"
- >{{ dict.label }}</el-radio
- >
- </el-radio-group>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-form-item label="鐤剧梾绫诲瀷" align="left">
- <el-checkbox-group v-model="form.diseasetype">
- <el-checkbox
- v-for="dict in dict.type.sys_DiseaseType"
- :key="dict.value"
- :label="dict.value"
- >
- {{ dict.label }}
- </el-checkbox>
- </el-checkbox-group>
- </el-form-item>
- <el-form-item label="鍏朵粬" prop="diseasetypeOther">
- <el-input
- v-model="form.diseasetypeOther"
- placeholder="璇疯緭鍏ュ叾浠�"
- />
- </el-form-item>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item align="left" label="浼犳煋鐥�">
- <el-checkbox-group v-model="form.infectious">
- <el-checkbox
- v-for="dict in dict.type.sys_Infectious"
- :key="dict.value"
- :label="dict.value"
- >
- {{ dict.label }}
- </el-checkbox>
- </el-checkbox-group>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item align="left" label="鍏朵粬" prop="infectiousOther">
- <el-input
- v-model="form.infectiousOther"
- placeholder="璇疯緭鍏ュ叾浠�"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="9">
- <el-form-item align="left" label="鐥呬汉鐘跺喌">
- <el-checkbox-group v-model="form.patientstate">
- <el-checkbox
- v-for="dict in dict.type.sys_patientstate"
- :key="dict.value"
- :label="dict.value"
- >
- {{ dict.label }}
- </el-checkbox>
- </el-checkbox-group>
- </el-form-item>
- </el-col>
- <el-col :span="15" align="left">
- <el-form-item label="鍏朵粬鎯呭喌">
- <el-checkbox-group v-model="form.othercases">
- <el-checkbox
- v-for="dict in dict.type.sys_OtherCases"
- :key="dict.value"
- :label="dict.value"
- >
- {{ dict.label }}
- </el-checkbox>
- </el-checkbox-group>
- </el-form-item>
- </el-col>
- </el-row>
- </div>
-
- <div
- style="
- border-bottom: 1px solid #ddd;
- padding-right: 60px;
- margin-top: 20px;
- "
- >
- <el-row>
- <div display="flex">
- <el-row>
- <el-col :span="12">
- <el-form-item
- label="浜插睘鐘跺喌"
- prop="kinship"
- class="relation"
- align="left"
- >
- <el-checkbox-group v-model="form.kinship">
- <el-checkbox
- v-for="dict in dict.type.sys_Kinship"
- :key="dict.value"
- :label="dict.value"
- >
- {{ dict.label }}
- </el-checkbox>
- </el-checkbox-group>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="鍏朵粬" prop="kinshipOther">
- <el-input
- v-model="form.kinshipOther"
- placeholder="璇疯緭鍏ュ叾浠�"
- />
- </el-form-item>
- </el-col>
- </el-row>
- </div>
- </el-row>
- <el-row>
- <el-col :span="24">
- <el-form-item align="left" label="鏈汉鎰忔効 ">
- <el-checkbox-group v-model="form.selfwill">
- <el-checkbox
- v-for="dict in dict.type.sys_SelfWill"
- :key="dict.value"
- :label="dict.value"
- >
- {{ dict.label }}
- </el-checkbox>
- </el-checkbox-group>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="涓昏浜插睘" prop="majorrelatives">
- <el-input
- v-model="form.majorrelatives"
- placeholder="璇疯緭鍏ヤ富瑕佷翰灞�"
- />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="涓庢崘璧犺�呭叧绯�" prop="familyrelations">
- <el-select
- v-model="form.familyrelations"
- placeholder="璇烽�夋嫨涓庢崘璧犺�呭叧绯�"
- >
- <el-option
- v-for="dict in dict.type.sys_FamilyRelation"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- ></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item align="left" label="淇℃伅鏉ユ簮">
- <el-checkbox-group v-model="form.infosources">
- <el-checkbox
- v-for="dict in dict.type.sys_InfoSources"
- :key="dict.value"
- :label="dict.value"
- >
- {{ dict.label }}
- </el-checkbox>
- </el-checkbox-group>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="鍏朵粬" prop="infosourcesOther">
- <el-input
- v-model="form.infosourcesOther"
- placeholder="璇疯緭鍏ヤ俊鎭潵婧愬叾浠�"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="8">
- <el-form-item label="淇℃伅鍛�" prop="infoname">
- <el-input v-model="form.infoname" placeholder="璇疯緭鍏ヤ俊鎭憳" />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="鑱旂郴鐢佃瘽" prop="infophone">
- <el-input
- v-model="form.infophone"
- placeholder="璇疯緭鍏ヤ俊鎭憳鑱旂郴鐢佃瘽"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="8">
- <el-form-item align="left" label="绾㈠崄瀛椾細" prop="redorganno">
- <org-selecter
- ref="addCrossOrgSelect"
- :org-type="'2'"
- v-model="form.redorganno"
- />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="鑱旂郴浜�" prop="contactperson">
- <el-input
- v-model="form.contactperson"
- placeholder="璇疯緭鍏ヨ仈绯讳汉"
- />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="鑱旂郴鏃堕棿" prop="contacttime">
- <el-date-picker
- clearable
- size="small"
- style="width: 190px"
- v-model="form.contacttime"
- type="datetime"
- value-format="yyyy-MM-dd HH:mm:ss"
- placeholder="閫夋嫨鎶ュ憡鏃堕棿"
- >
- </el-date-picker>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="24">
- <el-form-item
- align="left"
- label="鑾峰彇缁勭粐"
- prop="acquisitiontissuename"
- >
- <org-selecter
- style="width: 260px"
- ref="orgSelecter"
- :org-type="'1'"
- v-model="form.acquisitiontissueno"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="8">
- <el-form-item label="鎶ュ憡浜�" prop="reporterno">
- <el-select
- ref="getReportname"
- v-model="form.reporterno"
- placeholder="璇烽�夋嫨"
- >
- <el-option
- v-for="item in reporters"
- :key="item.reportNo"
- :label="item.reportName"
- :value="item.reportNo"
- >
- </el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="鑱旂郴鐢佃瘽" prop="reporterphone">
- <el-input
- v-model="form.reporterphone"
- placeholder="璇疯緭鍏ヨ仈绯荤數璇�"
- />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="鎶ュ憡鏃堕棿" align="left" prop="reporttime">
- <el-date-picker
- clearable
- size="small"
- style="width: 190px"
- v-model="form.reporttime"
- type="datetime"
- value-format="yyyy-MM-dd HH:mm:ss"
- placeholder="閫夋嫨鎶ュ憡鏃堕棿"
- >
- </el-date-picker>
- </el-form-item>
- </el-col>
- </el-row>
- </div>
- <!-- <div style="padding-right: 60px; margin-top: 20px">
- <el-row>
- <el-form-item label="闄勪欢" align="left" prop="annexfile">
- <annex-upload ref="annex" :infoid="form.id" :caseNo="form.caseNo" :flowname="flowname"
- :annexno="annexno" />
- </el-form-item>
- </el-row>
- </div> -->
- </el-form>
- <div slot="footer" class="dialog-footer">
- <el-button v-show="showSaveBtn" type="primary" @click="submitForm"
- >淇濆瓨骞跺墠寰�妗堜緥宸ヤ綔鍙�</el-button
- >
- <el-button
- v-show="showTerminationBtn"
- type="primary"
- @click="submitForm"
- >缁堟妗堜緥</el-button
- >
- <el-button @click="cancel">鍙� 娑�</el-button>
- <!-- <el-button @click="handleapproval">鎻愪氦瀹℃牳</el-button> -->
- </div>
- </el-dialog>
+ <!-- 妗堜緥缂栬緫寮圭獥 -->
+ <edit-case-modal
+ :visible="editModalVisible"
+ :editData="currentEditData"
+ :dict-options="dict.type"
+ @update:visible="editModalVisible = $event"
+ @success="handleEditSuccess"
+ @closed="handleEditClosed"
+ />
+ <!-- 缁堟/鎭㈠寮规 -->
+ <terminate-restore-modal
+ :current-record="currentRecord"
+ :visible="modalVisible"
+ :titles="modalTitles"
+ @update:visible="handleModalVisibleChange"
+ @operation-success="handleOperationSuccess"
+ />
</div>
</template>
<script>
import { getUserProfile } from "@/api/system/user";
+import TerminateRestoreModal from "@/components/TerminateRestoreModal";
+import EditCaseModal from "./EditCaseModal";
import {
listDonatebaseinfo,
- getDonatebaseinfo,
- delDonatebaseinfo,
addDonatebaseinfo,
- updateDonatebaseinfo,
- exportDonatebaseinfo,
- downloadbaseinfo,
- getDonationNumber,
- getdonatorno
+ exportDonatebaseinfo
} 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 { listReportname, listUser } from "@/api/project/organization";
+
export default {
+ name: "Donatebaseinfo",
components: {
Li_area_select,
OrgSelecter,
- AnnexUpload,
- ReportName
+ TerminateRestoreModal,
+ EditCaseModal
},
- name: "Donatebaseinfo",
dicts: [
- "sys_Reporter",
- "sys_redcrossagency",
- "sys_nation",
- "sys_occupation",
- "sys_education",
- "sys_OrganizationType",
- "sys_HospitalNature",
- "sys_RegionalLevel",
- "country",
"sys_user_sex",
- "sys_IDType",
- "sys_AgeUnit",
"sys_BloodType",
- "sys_0_1",
- "sys_patientstate",
"sys_DonationCategory",
- "sys_Kinship",
- "sys_Infectious",
- "sys_bloodtype_rhd",
- "sys_InfoSources",
- "sys_OtherCases",
- "sys_DonationStatus",
- "sys_DiseaseType",
- "sys_SelfWill",
- "sys_FamilyRelation",
"sys_donornode"
],
data() {
return {
- tempRecordState: null,
- approvalState: false,
- countyname: "",
- cuuntry: "",
- organizationname: "",
selecttime: "",
-
- //鐪佸競鍖�
- //榛樿鍊艰缃紝鍙负绌�
- searchAddress: {
- sheng: "",
- shi: "",
- qu: "",
- organizationname: null
+ residenceAddresss: { sheng: "灞变笢鐪�", shi: "", qu: "" },
+ registerAddresss: { sheng: "灞变笢鐪�", shi: "", qu: "" },
+ modalTitles: {
+ terminate: "缁堟鎹愮尞杩涚▼",
+ restore: "鎭㈠鎹愮尞杩涚▼"
},
- residenceAddresss: {
- sheng: "娴欐睙鐪�",
- shi: "",
- qu: ""
- },
- registerAddresss: {
- sheng: "娴欐睙鐪�",
- shi: "",
- qu: ""
- },
- terminationCaselist: [
- { name: "缁堟鐘舵��", value: 1 },
- { name: "姝e父鐘舵��", value: 0 }
- ],
- // 閬僵灞�
loading: true,
- // 瀵煎嚭閬僵灞�
exportLoading: false,
- // 閫変腑鏁扮粍
+ editModalVisible: false,
+ currentEditData: {},
ids: [],
- // 闈炲崟涓鐢�
single: true,
- // 闈炲涓鐢�
multiple: true,
- // 鏄剧ず鎼滅储鏉′欢
showSearch: true,
- // 鎬绘潯鏁�
total: 0,
- // 鎹愮尞鍩虹琛ㄦ牸鏁版嵁
donatebaseinfoList: [],
- // 寮瑰嚭灞傛爣棰�
title: "",
- // 鏄惁鏄剧ず寮瑰嚭灞�
open: false,
- // 鑾峰彇缁勭粐鍚嶇О鏃堕棿鑼冨洿
- daterangeReporttime: [],
- //鐢ㄦ埛淇℃伅
currentuser: {},
-
- // 鏌ヨ鍙傛暟
queryParams: {
pageNum: 1,
pageSize: 10,
- caseNo: null,
- recordstate: null,
- // treatmenthospitalno: null,
- treatmenthospitalname: null,
name: null,
- residenceprovince: null,
- residencecity: null,
- residencetown: null,
+ treatmenthospitalno: null,
starttime: null,
- endtime: null,
- city: null,
- reportno: null
- // organizationname: null,
- // organizationtype: null,
- // idcardno: null,
- // reporterno: null,
- // reporttime: null,
+ endtime: null
},
- // 琛ㄥ崟鍙傛暟
form: {
- id: null,
name: null,
sex: null,
idcardtype: null,
idcardno: null,
- age: null, // 骞撮緞锛堝勾锛�
+ age: null,
andAge: "",
- ageunit: "骞�", // 鍗曚綅锛岄�氬父鍥哄畾涓衡�滃勾鈥�
- age2: null, // 骞撮緞锛堟湀鎴栧ぉ锛�
- ageunit2: "鏈�", // 鍗曚綅锛屾牴鎹绠楀喅瀹氭槸鈥滄湀鈥濊繕鏄�滃ぉ鈥�
- ageunit: null,
+ ageunit: "骞�",
+ age2: null,
+ ageunit2: "鏈�",
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",
- caseNo: 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: "娴欐睙鐪佷汉浣撳櫒瀹樿幏鍙栫粍缁�"
+ acquisitiontissuename: "闈掑矝浜轰綋鍣ㄥ畼鑾峰彇缁勭粐"
},
- //ads
reporters: [],
users: [],
-
- // 琛ㄥ崟鏍¢獙
- rules: {
+ rules: {
name: [
{ required: true, message: "璇疯緭鍏ユ崘鐚�呭鍚�", trigger: "blur" }
- ],
- nationality: [
- { required: true, message: "璇疯緭鍏ュ浗绫�", trigger: "blur" }
- ],
- currentMedicalInstitution: [
- { required: true, message: "璇疯緭鍏ユ墍鍦ㄥ尰鐤楁満鏋�", trigger: "blur" }
- ],
- currentDept: [
- { required: true, message: "鎵�鍦ㄥ尰鐤楁満鏋勭瀹�", trigger: "blur" }
- ],
- firstMedicalInstitution: [
- { required: true, message: "璇疯緭鍏ラ娆″尰鐤楁満鏋�", trigger: "blur" }
- ],
- firstDept: [
- { required: true, message: "璇疯緭鍏ラ娆″尰鐤楁満鏋勭瀹�", trigger: "blur" }
],
birthday: [
{ required: true, message: "璇烽�夋嫨鍑虹敓鏃ユ湡", trigger: "blur" }
],
- idcardtype: [
- { required: true, message: "璇烽�夋嫨璇佷欢绫诲瀷", trigger: "blur" }
- ],
- residenceaddress: [
- { required: true, message: "璇疯緭鍏ヤ綇鍧�", trigger: "blur" }
- ],
- registerAddresss: [
- { required: true, message: "璇疯緭鍏ョ幇灞呬綇鍦板潃", trigger: "blur" }
- ],
- diseasetype: [
- { required: true, message: "璇烽�夋嫨鐤剧梾绫诲瀷", trigger: "blur" }
- ],
- infectious: [
- { required: true, message: "璇烽�夋嫨浼犳煋鐥呯被鍨�", trigger: "blur" }
- ],
- patientstate: [
- { required: true, message: "璇烽�夋嫨鐥呬汉鐘跺喌", trigger: "blur" }
- ],
- kinship: [
- { required: true, message: "璇烽�夋嫨浜插睘鎯呭喌", trigger: "blur" }
- ],
- majorrelatives: [
- { required: true, message: "璇疯緭鍏ヤ富瑕佷翰灞�", trigger: "blur" }
- ],
- selfwill: [
- { required: true, message: "璇烽�夋嫨鏈汉鎰忔効", trigger: "blur" }
- ],
- registerAddresss: [
- { required: true, message: "璇疯緭鍏ョ幇鎵�鍦ㄥ湴", trigger: "blur" }
- ],
- familyrelations: [
- { required: true, message: "璇烽�夋嫨浜插睘涓庢崘鐚�呭叧绯�", trigger: "blur" }
- ],
- infosources: [
- { required: true, message: "璇烽�夋嫨淇℃伅鏉ユ簮", trigger: "blur" }
- ],
- idcardno: [
- { required: true, message: "璇锋纭緭鍏ヨ瘉浠跺彿鐮�", trigger: "blur" }
- ],
- sex: [{ required: true, message: "鎬у埆涓嶈兘涓虹┖", trigger: "blur" }],
- age: [{ required: true, message: "璇疯緭鍏ュ勾榫�", trigger: "blur" }],
treatmenthospitalno: [
- { required: true, message: "璇烽�夋嫨鍖荤枟鏈烘瀯", trigger: "blur" }
+ { required: true, message: "璇烽�夋嫨棣栬瘖鍖婚櫌", trigger: "blur" }
],
bloodtype: [
{ required: true, message: "璇烽�夋嫨ABO琛�鍨�", trigger: "blur" }
- ],
- rhyin: [{ required: true, message: "璇烽�夋嫨RHD琛�鍨�", trigger: "blur" }],
- diseasetype: [
- { required: true, message: "璇烽�夋嫨RHD琛�鍨�", trigger: "blur" }
- ],
-
- inpatientno: [
- { required: true, message: "杈撳叆妗堜緥缂栧彿", trigger: "blur" }
- ],
- diagnosisname: [
- { required: true, message: "鐤剧梾璇婃柇涓嶈兘涓虹┖", trigger: "blur" }
- ],
- infoname: [
- { required: true, message: "璇疯緭鍏ヤ俊鎭憳濮撳悕", trigger: "blur" }
- ],
- infophone: [
- { required: true, message: "璇疯緭鍏ヤ俊鎭憳鑱旂郴鐢佃瘽", trigger: "blur" }
- ],
- acquisitiontissueno: [
- { required: true, message: "鍣ㄥ畼鑾峰彇缁勭粐涓嶈兘涓虹┖", trigger: "blur" }
- ],
- reporterno: [
- { required: true, message: "璇烽�夋嫨鎶ュ憡浜�", trigger: "blur" }
- ],
- reporttime: [
- { required: true, message: "璇疯緭鍏ユ姤鍛婃椂闂�", trigger: "blur" }
- ],
- reporterphone: [
- { required: true, message: "璇疯緭鍏ユ姤鍛婁汉鑱旂郴鐢佃瘽", trigger: "blur" }
]
},
- //鏄惁鏄剧ず淇濆瓨鎸夐挳
showSaveBtn: true,
- showTerminationBtn: false,
- //娴佺▼鍚嶇О
- flowname: "娼滃湪鎹愮尞鐧昏",
- annexno: "PotentialDonationRegistration",
- starttime: "",
- endtime: "",
- reportlist: [],
- reportervalue: "",
- headers: {
- Authorization: "Bearer " + getToken()
- },
- provinceData: [
- { label: "鍏ㄩ儴", value: "" },
- { label: "鏉窞甯�", value: "1" },
- { label: "瀹佹尝甯�", value: "2" },
- { label: "娓╁窞甯�", value: "3" },
- { label: "鍢夊叴甯�", value: "4" },
- { label: "婀栧窞甯�", value: "5" },
- { label: "缁嶅叴甯�", value: "6" },
- { label: "閲戝崕甯�", value: "7" },
- { label: "琛㈠窞甯�", value: "8" },
- { label: "鑸熷北甯�", value: "9" },
- { label: "鍙板窞甯�", value: "A" },
- { label: "涓芥按甯�", value: "B" }
- ]
+ currentRecord: {},
+ modalVisible: {}
};
},
created() {
- if (sessionStorage.getItem("donatebaseinfo")) {
- this.queryParams = JSON.parse(sessionStorage.getItem("donatebaseinfo"));
- console.log(this.queryParams, "queryParams");
+ const savedParams = sessionStorage.getItem("donatebaseinfo");
+ if (savedParams) {
+ this.queryParams = { ...this.queryParams, ...JSON.parse(savedParams) };
}
},
+ async mounted() {
+ await Promise.all([
+ this.getCurrentUser(),
+ this.getuserlist(),
+ this.selectReporters()
+ ]);
- mounted(e) {
- // let idd = this.$route.query.userid
- // console.log('chuanzhi',idd);
-
- this.getCurrentUser();
- this.getuserlist();
- this.selectReporters();
-
- 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;
- }
- this.queryParams.terminationcase = this.$route.params.terminationcase;
-
- 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.city = this.$route.params.city;
- } else {
- this.queryParams.city = "";
- }
-
+ this.initializeRouteParams();
this.getTimeList();
-
this.getList();
},
-
methods: {
- getCurrentUser() {
- getUserProfile().then(response => {
- this.currentuser = response.data;
- });
+ async getCurrentUser() {
+ const response = await getUserProfile();
+ this.currentuser = response.data;
},
+
calculateAge(birthday) {
if (!birthday) {
- // 娓呯┖骞撮緞瀛楁
- this.form.age = null;
- this.form.age2 = null;
- // this.form.age3 = null;
+ this.form.age = this.form.age2 = null;
return;
}
const birthDate = new Date(birthday);
const today = new Date();
- // 璁$畻鎬绘湀浠藉樊寮�
let yearDiff = today.getFullYear() - birthDate.getFullYear();
let monthDiff = today.getMonth() - birthDate.getMonth();
let dayDiff = today.getDate() - birthDate.getDate();
- // 濡傛灉褰撳墠鏃ユ湡鐨勫ぉ鏁板皬浜庡嚭鐢熸棩鏈熺殑澶╂暟锛屽垯鍊熸湀
if (dayDiff < 0) {
monthDiff--;
- // 鑾峰彇涓婁釜鏈堢殑鏈�鍚庝竴澶�
const lastDayOfMonth = new Date(
today.getFullYear(),
today.getMonth(),
@@ -1407,683 +403,291 @@
dayDiff += lastDayOfMonth;
}
- // 濡傛灉鏈堜唤宸负璐燂紝鍒欏�熷勾
if (monthDiff < 0) {
yearDiff--;
monthDiff += 12;
}
- // 璧嬪�煎勾閮ㄥ垎
this.form.age = yearDiff;
this.form.ageunit = "宀�";
-
- // 璧嬪�兼湀閮ㄥ垎锛堟垨鑰呮偍涔熷彲浠ラ�夋嫨鏄剧ず鍓╀綑鐨勫ぉ鏁帮級
this.form.age2 = monthDiff;
this.form.ageunit2 = "鏈�";
- // 濡傛灉鎮ㄨ繕鎯虫樉绀哄ぉ鏁�
- // this.form.age3 = dayDiff;
- // this.form.ageunit3 = '澶�';
-
- // 濡傛灉骞撮緞灏忎簬1宀侊紝鍙兘鎮ㄥ笇鏈涚敤鏈堟垨澶╂潵琛ㄧず涓诲勾榫�
- // 杩欓噷鏄竴涓畝鍗曠殑閫昏緫锛屾偍鍙互鏍规嵁闇�姹傝皟鏁�
if (yearDiff === 0) {
if (monthDiff === 0) {
- // 灏忎簬1涓湀锛岀敤澶╄〃绀�
this.form.age = dayDiff;
this.form.ageunit = "澶�";
- this.form.age2 = null; // 娓呯┖绗簩瀛楁
- // this.form.age3 = null;
+ this.form.age2 = null;
} else {
- // 灏忎簬1骞达紝鐢ㄦ湀琛ㄧず
this.form.age = monthDiff;
this.form.ageunit = "鏈�";
- this.form.age2 = dayDiff; // 绗簩瀛楁鏄剧ず澶�
+ this.form.age2 = dayDiff;
this.form.ageunit2 = "澶�";
}
}
- this.form.andAge = `${
+ this.form.andAge = [
this.form.age && this.form.age !== 0
? `${this.form.age}${this.form.ageunit}`
- : ""
- } ${
+ : "",
this.form.age2 && this.form.age2 !== 0
? `${this.form.age2}${this.form.ageunit2}`
: ""
- }`.trim();
- this.$forceUpdate(); // 寮哄埗鏇存柊
- console.log(this.form.andAge);
- },
- LoadReportList() {
- listDonatebaseinfo().then(res => {
- let list = res.rows;
- let reportlist = [];
- reportlist.push({ reporterno: "", reportername: "鍏ㄩ儴" });
- list.forEach(element => {
- reportlist.push({
- reporterno: element.reporterno,
- reportername: element.reportername
- });
- });
-
- if (reportlist != 0) {
- reportlist = this.resetArr(reportlist);
- this.reportlist = reportlist;
- }
- });
+ ]
+ .filter(Boolean)
+ .join(" ");
},
- resetArr(Arr) {
- var hash = {};
- Arr = Arr.reduce(function(arr, current) {
- hash[current.reporterno]
- ? ""
- : (hash[current.reporterno] = true && arr.push(current));
- return arr;
- }, []);
- return Arr;
+ handleTerminate(row) {
+ this.currentRecord = { ...row };
+ this.modalVisible = { ...this.modalVisible, terminate: true };
},
- 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";
+ handleRestore(row) {
+ this.currentRecord = { ...row };
+ this.modalVisible = { ...this.modalVisible, restore: true };
+ },
+
+ getTimeList() {
+ if (!this.selecttime) {
+ // this.queryParams.starttime = "1998-01-01 00:00:00";
+ // this.queryParams.endtime = "2998-01-01 00:00:00";
+ return;
}
+
+ const [start, end] = this.selecttime;
+ this.queryParams.starttime = `${start} 00:00:00`;
+
+ const monthNum = Number(end.slice(5, 7));
+ const nextMonth = monthNum < 9 ? `0${monthNum + 1}` : monthNum + 1;
+ this.queryParams.endtime = `${end.slice(0, 5)}${nextMonth}-01 00:00:00`;
},
- selectReporters() {
- //涓撹亴浜哄憳
- listReportname("zzry").then(res => {
- this.reporters = res.data;
- });
+ async selectReporters() {
+ const res = await listReportname("zzry");
+ this.reporters = res.data;
},
- getuserlist() {
- //鐢ㄦ埛鍒楄〃
- listUser().then(res => {
- this.users = res.data;
- });
- },
-
- 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;
- });
+ async getuserlist() {
+ const res = await listUser();
+ this.users = res.data;
},
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.calculateAge(birthday);
- // this.form.age = age;
- } else {
- }
- } catch {}
- },
- // sheng: '娴欐睙鐪�',
- // shi: '',
- // qu: '',
+ const idCardReg = /^[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]$/;
- // 韬唤璇侀獙璇�
- //鏍规嵁韬唤璇佸彿鑷姩鐢熸垚鎬у埆銆佸嚭鐢熸棩鏈熷拰骞撮緞
- 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";
+ if (idCardReg.test(this.form.idcardno)) {
+ const orgBirthday = this.form.idcardno.substring(6, 14);
+ const orgGender = this.form.idcardno.substring(16, 17);
+
+ const sex = orgGender % 2 == 1 ? 1 : 2;
+ const birthday = `${orgBirthday.substring(
+ 0,
+ 4
+ )}-${orgBirthday.substring(4, 6)}-${orgBirthday.substring(6, 8)}`;
+
+ this.form.sex = sex;
+ this.form.birthday = birthday;
+ this.calculateAge(birthday);
}
- this.setState({
- birthday,
- sex
- });
},
- /** 鏌ヨ鎹愮尞鍩虹鍒楄〃 */
- getList() {
+ initializeRouteParams() {
+ const { params } = this.$route;
+ const routeParams = {
+ starttime: params.starttime,
+ endtime: params.endtime,
+ reporterno: params.reporterno,
+ terminationcase: params.terminationcase,
+ tempRecordState: params.tempRecordState,
+ city: params.city
+ };
+
+ Object.entries(routeParams).forEach(([key, value]) => {
+ if (value) this.queryParams[key] = value;
+ });
+
+ if (params.starttime && params.endtime) {
+ this.selecttime = [
+ this.$moment(params.starttime).format("YYYY-MM-DD"),
+ this.$moment(params.endtime).format("YYYY-MM-DD")
+ ];
+ }
+ },
+
+ async getList() {
this.loading = true;
- this.queryParams.params = {};
- sessionStorage.removeItem("donatebaseinfo");
+
sessionStorage.setItem(
"donatebaseinfo",
JSON.stringify(this.queryParams)
);
- // 璺宠浆鏃剁殑榛樿杩涘害
- if (this.reportervalue != "") {
- this.queryParams.reportno = this.reportervalue;
- }
-
- if (this.starttime != "") {
- this.queryParams.starttime = this.starttime;
- } else {
- this.queryParams.starttime = "";
- }
- if (this.endtime != "") {
- this.queryParams.endtime = this.endtime;
- } else {
- this.queryParams.endtime = "";
- }
- this.queryParams.residenceprovince = this.$refs.areaSelect.getSheng();
- this.queryParams.residencecity = this.$refs.areaSelect.getShi();
- this.queryParams.residencetown = this.$refs.areaSelect.getQu();
- console.log(this.queryParams);
-
- listDonatebaseinfo(this.queryParams).then(response => {
- this.donatebaseinfoList = response.rows;
- //console.log("listDonatebaseinfo", response.rows);
+ try {
+ const response = await listDonatebaseinfo(this.queryParams);
+ this.donatebaseinfoList = response.data;
this.total = response.total;
+ } catch (error) {
+ console.error("鑾峰彇鍒楄〃澶辫触:", error);
+ } finally {
this.loading = false;
- });
+ }
},
- // 鍙栨秷鎸夐挳
+ /** 鎵撳紑缂栬緫寮圭獥 */
+ handleOpenEdit(row) {
+ this.currentEditData = { ...row };
+ console.log(this.currentEditData, "this.currentEditData");
+ this.editModalVisible = true;
+ },
+
+ /** 澶勭悊缂栬緫鎴愬姛 */
+ handleEditSuccess(updatedData) {
+ this.$modal.msgSuccess("缂栬緫鎴愬姛");
+ this.getList(); // 鍒锋柊鍒楄〃
+ },
+
+ /** 澶勭悊缂栬緫寮圭獥鍏抽棴 */
+ handleEditClosed() {
+ this.currentEditData = {};
+ },
+
+ handleModalVisibleChange(newVisible) {
+ this.modalVisible = { ...newVisible };
+ },
+
+ handleOperationSuccess({ type, record }) {
+ console.log(`${type}鎿嶄綔鎴愬姛:`, record);
+ this.getList();
+ },
+
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,
- caseNo: 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: "娴欐睙鐪佷汉浣撳櫒瀹樿幏鍙栫粍缁�"
+ sex: null
+ // ... 淇濈暀蹇呰鐨勫瓧娈靛垵濮嬪��
};
-
this.resetForm("form");
},
- /** 鎼滅储鎸夐挳鎿嶄綔 */
+
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,
- caseNo: null,
- acquisitiontissueno: null,
- reportername: null,
- reporttime: null,
- city: null,
- treatmenthospitalno: null
+ treatmenthospitalno: null,
+ starttime: null,
+ endtime: null
};
this.selecttime = [];
this.getTimeList();
- this.searchAddress = {
- sheng: "",
- shi: "",
- qu: "",
- organizationname: null
- };
- //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;
},
- /** 鏂板鎸夐挳鎿嶄綔 */
+
handleAdd() {
- // this.$router.push({
- // path: "/organ/donationdetails/",
- // query: {
- // organType: "add",
- // }
- // });
this.reset();
- //璁剧疆鎶ュ憡浜哄拰閮ㄩ棬/缁�
this.form.reporterno = this.currentuser.userName;
this.form.reportername = this.currentuser.nickName;
- this.form.deptid = this.currentuser.deptid;
-
- this.showSaveBtn = true;
- //this.$refs.annex.getAnnexList();
this.open = true;
- // this.$nextTick(function() {
- // this.$refs.annex.getAnnexList();
- // });
-
this.title = "浜轰綋鍣ㄥ畼娼滃湪鎹愮尞鑰呯櫥璁拌〃";
},
- /** 淇敼鎸夐挳鎿嶄綔 */
handleUpdate(row) {
this.$router.push({
path: "/case/course",
- query: {
- id: row.id,
- organType: "edit"
+ query: { id: row.id, organType: "edit" }
+ });
+ },
+
+ async submitForm() {
+ const valid = await this.$refs.form.validate();
+ if (!valid) return;
+
+ const formData = { ...this.form };
+
+ // 澶勭悊琛ㄥ崟鏁版嵁
+ const processedData = this.processFormData(formData);
+
+ try {
+ const res = await addDonatebaseinfo(processedData);
+ if (res.code === 200) {
+ this.$modal.msgSuccess("鏂板鎴愬姛");
+ this.$router.push({
+ path: "/organ/donationdetails/",
+ query: { id: res.data.id, organType: "edit" }
+ });
+ this.open = false;
+ } else {
+ this.$modal.msgError("鏂板澶辫触锛�" + res.msg);
+ }
+ } catch (error) {
+ this.$modal.msgError("鎿嶄綔澶辫触");
+ }
+ },
+
+ processFormData(data) {
+ const processed = { ...data };
+
+ // 澶勭悊鏁扮粍瀛楁
+ const arrayFields = [
+ "diseasetype",
+ "infectious",
+ "selfwill",
+ "othercases",
+ "infosources",
+ "kinship",
+ "patientstate"
+ ];
+ arrayFields.forEach(field => {
+ if (Array.isArray(processed[field])) {
+ processed[field] = processed[field].join(",");
}
});
- // this.showSaveBtn = true;
- // const id = row.id || this.ids;
- // //this.$refs.annex.getAnnexList();
- // getDonatebaseinfo(id).then((response) => {
- // this.reset();
+ // 澶勭悊鏃ユ湡瀛楁
+ if (processed.birthday) {
+ processed.birthday = this.$moment(processed.birthday).format(
+ "YYYY-MM-DD HH:mm:ss"
+ );
+ }
- // 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;
- // });
+ processed.donatetime = processed.reporttime;
+ processed.workflow = 0;
+ processed.recordstate = 0;
+
+ return processed;
},
- // 缁堟妗堜緥
- 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;
+ async handleExport() {
+ try {
+ await this.$modal.confirm("鏄惁纭瀵煎嚭鎵�鏈夋崘鐚熀纭�鏁版嵁椤癸紵");
+ this.exportLoading = true;
- 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);
- }
- });
+ const response = await exportDonatebaseinfo(this.queryParams);
+ this.$download.name(response.msg);
+ } catch (error) {
+ if (error !== "cancel") {
+ this.$modal.msgError("瀵煎嚭澶辫触");
}
- });
- },
- /** 鍒犻櫎鎸夐挳鎿嶄綔 */
- 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;
+ } finally {
+ this.exportLoading = false;
}
- 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);
- });
- });
}
}
};
--
Gitblit v1.9.3