From c4599aa279fd2f90b741608392e056fbae2282d5 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期四, 20 八月 2026 17:16:54 +0800
Subject: [PATCH] 各表单布局调整
---
src/views/business/course/components/OrganUtilizationStage.vue | 2050 ++++++++++++++++++----------------------------------------
1 files changed, 644 insertions(+), 1,406 deletions(-)
diff --git a/src/views/business/course/components/OrganUtilizationStage.vue b/src/views/business/course/components/OrganUtilizationStage.vue
index 0545d9b..a3e8163 100644
--- a/src/views/business/course/components/OrganUtilizationStage.vue
+++ b/src/views/business/course/components/OrganUtilizationStage.vue
@@ -1,673 +1,254 @@
<template>
- <div class="organ-utilization-detail">
- <el-form :model="form" ref="form" :rules="rules" label-width="120px">
- <!-- 鍩烘湰淇℃伅 -->
- <el-card class="detail-card">
- <div slot="header" class="clearfix">
- <span class="detail-title">鍣ㄥ畼鍒╃敤鍩烘湰淇℃伅</span>
- </div>
+ <div class="organ-procurement-detail">
+ <!-- <case-basic-info :case-id="caseId" :show-attachment="true":column="3" /> -->
- <el-row :gutter="20">
- <el-col :span="6">
- <el-form-item label="璐熻矗浜�" prop="responsibleusername">
- <el-input
- v-model="form.responsibleusername"
- placeholder="璇疯緭鍏ヨ礋璐d汉濮撳悕"
- />
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="鍗忚皟鍛樹竴" prop="coordinatedusernameo">
- <el-input
- v-model="form.coordinatedusernameo"
- placeholder="璇疯緭鍏ュ崗璋冨憳涓�濮撳悕"
- />
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="鍗忚皟鍛樹簩" prop="coordinatedusernamet">
- <el-input
- v-model="form.coordinatedusernamet"
- placeholder="璇疯緭鍏ュ崗璋冨憳浜屽鍚�"
- />
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="瀹屾垚鏃堕棿" prop="completetime">
- <el-date-picker
- v-model="form.completetime"
- type="datetime"
- value-format="yyyy-MM-dd HH:mm:ss"
- style="width: 100%"
- />
- </el-form-item>
- </el-col>
- </el-row>
-
- <!-- <el-row :gutter="20">
- <el-col :span="12">
- <el-form-item label="鐧昏浜�" prop="createBy">
- <el-input v-model="form.createBy" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="鐧昏鏃堕棿" prop="createTime">
- <el-date-picker
- v-model="form.createTime"
- type="datetime"
- value-format="yyyy-MM-dd HH:mm:ss"
- style="width: 100%"
- />
- </el-form-item>
- </el-col>
- </el-row> -->
- </el-card>
- <el-card class="detail-card">
- <div slot="header" class="clearfix">
- <span class="detail-title">閬椾綋鎹愮尞淇℃伅</span>
- </div>
- <el-row :gutter="20">
- <el-col :span="6">
- <el-form-item align="left" label="閬椾綋鎺ユ敹" prop="isbodydonation">
- <el-radio-group v-model="form.isbodydonation">
- <el-radio
- v-for="dict in dict.type.sys_0_1 || []"
- :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 align="left" label="鎺ユ敹瀹跺睘" prop="relationname">
- <el-input
- v-model="form.relationname"
- placeholder="璇疯緭鍏ユ帴鏀跺灞�"
- />
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="涓庢崘鐚�呭叧绯�" prop="signfamilyrelations">
- <el-select
- v-model="form.signfamilyrelations"
- 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-card>
- </el-form>
- <!-- 鍣ㄥ畼鍒╃敤璁板綍閮ㄥ垎 - 鏁村悎鍙楄�呰鎯� -->
- <el-card class="utilization-card">
+ <!-- 鍩烘湰淇℃伅 -->
+ <el-card class="detail-card">
<div slot="header" class="clearfix">
- <span class="detail-title">鍣ㄥ畼鍒╃敤璁板綍</span>
+ <span class="detail-title">鍣ㄥ畼鑾峰彇鍩烘湰淇℃伅</span>
+ </div>
+
+ <el-descriptions title="鎵嬫湳淇℃伅" :column="descriptionColumn" border size="small">
+ <el-descriptions-item label="鎵嬫湳鍖荤敓">{{ form.operationdoctor || '-' }}</el-descriptions-item>
+ <el-descriptions-item label="鎵嬫湳寮�濮嬫椂闂�">{{ form.operationbegtime || '-' }}</el-descriptions-item>
+ <el-descriptions-item label="鎵嬫湳缁撴潫鏃堕棿">{{ form.operationendtime || '-' }}</el-descriptions-item>
+ <el-descriptions-item label="鑵逛富鍔ㄨ剦鎻掔鏃堕棿">{{ form.abdominalaortacannulatime || '-' }}</el-descriptions-item>
+ <el-descriptions-item label="鑵逛富鍔ㄨ剦鐏屾敞鏃堕棿">{{ form.abdominalaortaperfusiontime || '-' }}</el-descriptions-item>
+ <el-descriptions-item label="闂ㄩ潤鑴夋彃绠℃椂闂�">{{ form.portalveincannulatime || '-' }}</el-descriptions-item>
+ <el-descriptions-item label="闂ㄩ潤鑴夌亴娉ㄦ椂闂�">{{ form.portalveinperfusiontime || '-' }}</el-descriptions-item>
+ </el-descriptions>
+
+ <el-descriptions title="鍗忚皟鍛樹俊鎭�" :column="descriptionColumn" border size="small">
+ <el-descriptions-item label="杩涙墜鏈鏃堕棿">{{ form.coordinatorInOperating || '-' }}</el-descriptions-item>
+ <el-descriptions-item label="鍑烘墜鏈鏃堕棿">{{ form.coordinatorOutOperating || '-' }}</el-descriptions-item>
+ <el-descriptions-item label="鏄惁榛樺搥缂呮��">{{ form.isspendremember === 1 ? '鏄�' : form.isspendremember === 0 ? '鍚�' : '-' }}</el-descriptions-item>
+ <el-descriptions-item label="鎭㈠閬椾綋浠">{{ form.isrestoreremains === 1 ? '鏄�' : form.isrestoreremains === 0 ? '鍚�' : '-' }}</el-descriptions-item>
+ </el-descriptions>
+
+ <el-descriptions title="璐熻矗浜轰俊鎭�" :column="descriptionColumn" border size="small">
+ <el-descriptions-item label="璐熻矗浜哄鍚�">{{ form.responsibleusername || '-' }}</el-descriptions-item>
+ <el-descriptions-item label="鍗忚皟鍛樹竴">{{ form.coordinatedusernameo || '-' }}</el-descriptions-item>
+ <el-descriptions-item label="鍗忚皟鍛樹簩">{{ form.coordinatedusernamet || '-' }}</el-descriptions-item>
+ </el-descriptions>
+
+ <el-descriptions title="鑾峰彇鏈烘瀯淇℃伅" :column="descriptionColumn" border size="small">
+ <el-descriptions-item label="鑾峰彇鏈烘瀯鍚嶇О">{{ form.gainhospitalname || '-' }}</el-descriptions-item>
+ </el-descriptions>
+ </el-card>
+
+ <!-- 鍣ㄥ畼鑾峰彇璁板綍閮ㄥ垎 -->
+ <el-card class="procurement-card">
+ <div slot="header" class="clearfix">
+ <span class="detail-title">鍣ㄥ畼鑾峰彇璁板綍</span>
<div style="float: right;">
<dict-tag
- :options="dict.type.utilize_statue"
- :value="form.completeState"
+ :options="dict.type.Obtain_status"
+ :value="form.witnessState"
/>
</div>
</div>
- <el-form
- ref="utilizationForm"
- :rules="utilizationRules"
- :model="utilizationData"
- label-position="right"
- >
- <el-row>
- <el-col>
- <el-form-item label-width="100px" label="绉绘鍣ㄥ畼">
- <el-checkbox-group
- v-model="selectedOrgans"
- @change="handleOrganSelectionChange"
- >
- <el-checkbox
- v-for="dict in dict.type.sys_Organ || []"
- :key="dict.value"
- :label="dict.value"
- >
- {{ dict.label }}
- </el-checkbox>
- </el-checkbox-group>
- </el-form-item>
- </el-col>
- </el-row>
+ <el-descriptions title="鎹愮尞鍣ㄥ畼" :column="1" border size="small" style="margin-bottom: 16px;">
+ <el-descriptions-item label="鎹愮尞鍣ㄥ畼">
+ <template v-if="selectedOrgans && selectedOrgans.length">
+ <span v-for="(v, i) in selectedOrgans" :key="v">
+ {{ getOrganLabel(v) }}<span v-if="i < selectedOrgans.length - 1">銆�</span>
+ </span>
+ </template>
+ <template v-else>-</template>
+ </el-descriptions-item>
+ </el-descriptions>
- <el-row>
- <el-col>
- <el-form-item>
- <el-table
- :data="displayOrgans"
- v-loading="loading"
- border
- style="width: 100%"
- :row-class-name="getOrganRowClassName"
- :expand-row-keys="expandedRows"
- @expand-change="handleExpandChange"
- row-key="organno"
- >
- <el-table-column type="expand" width="60">
- <template slot-scope="scope">
- <!-- 灞曞紑琛屽唴瀹� - 鍙楄�呰缁嗕俊鎭� -->
- <div class="recipient-detail-expand">
- <div class="recipient-header">
- <span class="recipient-title">鍙楄�呰缁嗕俊鎭�</span>
- <el-tag
- v-if="scope.row.transplantstate === '1'"
- type="success"
- size="small"
- >
- 宸茬Щ妞�
- </el-tag>
- <el-tag
- v-else-if="scope.row.transplantstate === '0'"
- type="warning"
- size="small"
- >
- 鏈Щ妞�
- </el-tag>
- <el-tag v-else type="info" size="small">
- 绉绘涓�
- </el-tag>
- </div>
+ <el-table :data="displayOrgans" v-loading="loading" border style="width: 100%">
+ <el-table-column label="鍣ㄥ畼鍚嶇О" align="center" prop="organname" />
+ <el-table-column label="鑾峰彇寮�濮嬫椂闂�" align="center" prop="organStartTime" />
+ <el-table-column label="鍣ㄥ畼绂讳綋鏃堕棿" align="center" prop="organgettime" />
+ <el-table-column label="鑾峰彇鍖婚櫌" align="center" prop="gainhospitalname" show-overflow-tooltip />
+ <el-table-column label="鑾峰彇鍖诲笀" align="center" prop="organgetdoct" />
+ <el-table-column label="璇存槑" align="center" prop="notgetreason" min-width="200" show-overflow-tooltip />
+ </el-table>
- <el-form
- :model="scope.row"
- label-width="140px"
- class="recipient-form"
- >
- <!-- 鍩烘湰淇℃伅閮ㄥ垎 -->
- <div class="form-section">
- <h4 class="section-title">鍩烘湰淇℃伅</h4>
- <el-row :gutter="20">
- <el-col :span="8">
- <el-form-item label="鍙楄�呭鍚�">
- <el-input
- v-model="scope.row.name"
- placeholder="璇疯緭鍏ュ彈鑰呭鍚�"
- />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="鍑虹敓鏃ユ湡">
- <el-date-picker
- v-model="scope.row.birthday"
- type="date"
- value-format="yyyy-MM-dd"
- placeholder="閫夋嫨鍑虹敓鏃ユ湡"
- style="width: 100%"
- />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="鎬у埆">
- <el-select
- v-model="scope.row.sex"
- placeholder="璇烽�夋嫨鎬у埆"
- style="width: 100%"
- >
- <el-option label="鐢�" :value="0" />
- <el-option label="濂�" :value="1" />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
-
- <el-row :gutter="20">
- <el-col :span="8">
- <el-form-item label="骞撮緞">
- <el-input
- v-model="scope.row.age"
- placeholder="骞撮緞"
- />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="璇佷欢绫诲瀷">
- <el-select
- v-model="scope.row.idcardtype"
- placeholder="璇烽�夋嫨璇佷欢绫诲瀷"
- style="width: 100%"
- >
- <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-col>
- <el-col :span="8">
- <el-form-item label="璇佷欢鍙风爜">
- <el-input
- v-model="scope.row.idcardno"
- placeholder="璇佷欢鍙风爜"
- />
- </el-form-item>
- </el-col>
- </el-row>
- </div>
-
- <!-- 鑱旂郴淇℃伅閮ㄥ垎 -->
- <div class="form-section">
- <h4 class="section-title">鑱旂郴淇℃伅</h4>
- <el-row :gutter="20">
- <el-col :span="12">
- <el-form-item label="绉绘涓績鍚嶇О">
- <el-input
- v-model="scope.row.hospitalname"
- placeholder="璇疯緭鍏ョЩ妞嶄腑蹇冨悕绉�"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="鑱旂郴鐢佃瘽">
- <el-input
- v-model="scope.row.phone"
- placeholder="鑱旂郴鐢佃瘽"
- />
- </el-form-item>
- </el-col>
- </el-row>
-
- <el-row :gutter="20">
- <el-col :span="24">
- <el-form-item label="鐜颁綇鍦板潃">
- <el-input
- type="textarea"
- :rows="2"
- v-model="scope.row.residenceaddress"
- placeholder="璇疯緭鍏ヨ缁嗗湴鍧�"
- />
- </el-form-item>
- </el-col>
- </el-row>
- </div>
-
- <!-- 绉绘淇℃伅閮ㄥ垎 -->
- <div
- class="form-section"
- v-if="scope.row.transplantstate === '1'"
- >
- <h4 class="section-title">绉绘淇℃伅</h4>
- <el-row :gutter="20">
- <el-col :span="12">
- <el-form-item label="绉绘鏃堕棿">
- <el-date-picker
- v-model="scope.row.transplanttime"
- type="datetime"
- value-format="yyyy-MM-dd HH:mm:ss"
- placeholder="閫夋嫨绉绘鏃ユ湡"
- style="width: 100%"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="绉绘鍖荤敓">
- <el-input
- v-model="scope.row.transplantdoct"
- placeholder="璇疯緭鍏ョЩ妞嶅尰鐢�"
- />
- </el-form-item>
- </el-col>
- </el-row>
- </div>
-
- <!-- 鏈Щ妞嶅師鍥� -->
- <div
- class="form-section"
- v-if="scope.row.transplantstate === '0'"
- >
- <h4 class="section-title">鏈Щ妞嶄俊鎭�</h4>
- <el-row :gutter="20">
- <el-col :span="24">
- <el-form-item label="鏈Щ妞嶅師鍥�">
- <el-input
- type="textarea"
- :rows="3"
- v-model="scope.row.abandonreason"
- placeholder="璇疯緭鍏ユ湭绉绘鍘熷洜"
- />
- </el-form-item>
- </el-col>
- </el-row>
- </div>
- </el-form>
- </div>
- </template>
- </el-table-column>
-
- <el-table-column
- label="鍣ㄥ畼鍚嶇О"
- align="center"
- prop="organname"
- >
- <template slot-scope="scope">
- <el-input
- v-model="scope.row.organname"
- placeholder="鍣ㄥ畼鍚嶇О"
- :disabled="true"
- />
- </template>
- </el-table-column>
-
- <!-- <el-table-column label="绯荤粺缂栧彿" align="center" prop="caseNo">
- <template slot-scope="scope">
- <el-input
- v-model="scope.row.caseNo"
- placeholder="绯荤粺缂栧彿"
- />
- </template>
- </el-table-column> -->
-
- <el-table-column
- label="绉绘鍖婚櫌"
- align="center"
- width="260"
- prop="hospitalno"
- >
- <template slot-scope="scope">
- <el-autocomplete
- v-model="scope.row.hospitalname"
- :fetch-suggestions="queryHospitalSearch"
- placeholder="璇烽�夋嫨鎴栬緭鍏ョЩ妞嶅尰闄�"
- style="width: 100%"
- clearable
- ></el-autocomplete>
- </template>
- </el-table-column>
- <el-table-column
- label="绉绘鐘舵��"
- align="center"
- prop="transplantstate"
- >
- <template slot-scope="scope">
- <el-select
- v-model="scope.row.transplantstate"
- placeholder="璇烽�夋嫨绉绘鐘舵��"
- style="width: 100%"
- @change="handleTransplantStatusChange(scope.row, $event)"
- >
- <el-option
- v-for="dict in transplantStatusList"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- />
- </el-select>
- </template>
- </el-table-column>
-
- <el-table-column
- label="绉绘鏃堕棿"
- align="center"
- width="220"
- prop="transplanttime"
- >
- <template slot-scope="scope">
- <el-date-picker
- clearable
- size="small"
- style="width: 100%"
- v-model="scope.row.transplanttime"
- type="datetime"
- value-format="yyyy-MM-dd HH:mm:ss"
- placeholder="閫夋嫨绉绘鏃堕棿"
- />
- </template>
- </el-table-column>
-
- <el-table-column
- label="绉绘鍖荤敓"
- align="center"
- prop="transplantdoct"
- >
- <template slot-scope="scope">
- <el-input
- v-model="scope.row.transplantdoct"
- placeholder="鍖诲笀濮撳悕"
- />
- </template>
- </el-table-column>
-
- <el-table-column label="鍙楄�呭鍚�" align="center" prop="name">
- <template slot-scope="scope">
- <el-input v-model="scope.row.name" placeholder="鍙楄�呭鍚�" />
- </template>
- </el-table-column>
- </el-table>
- </el-form-item>
- </el-col>
- </el-row>
-
- <!-- 缁熻淇℃伅 -->
-
- <div
- v-if="
- !utilizationData.serviceDonatecomporganList ||
- utilizationData.serviceDonatecomporganList.length == 0
- "
- class="empty-utilization"
- >
- <el-empty description="鏆傛棤鍒╃敤璁板綍" :image-size="80">
- <span>璇峰厛閫夋嫨瑕佸埄鐢ㄧ殑鍣ㄥ畼</span>
- </el-empty>
- </div>
- </el-form>
+ <div v-if="!displayOrgans.length" class="empty-procurement">
+ <el-empty description="鏆傛棤鑾峰彇璁板綍" :image-size="80" />
+ </div>
</el-card>
- <!-- 闄勪欢绠$悊閮ㄥ垎 -->
<!-- 闄勪欢绠$悊閮ㄥ垎 - 鍒嗙被Tab灞曠ず -->
<el-card class="attachment-card">
<div slot="header" class="clearfix">
<span class="detail-title">鐩稿叧闄勪欢</span>
</div>
- <!-- 涓婁紶鍖哄煙锛堟棤鍒嗙被閫夋嫨锛岀敱Tab鎺у埗锛� -->
- <div class="upload-wrapper">
- <UploadAttachment
- ref="uploadAttachment"
- :file-list="attachmentFileList"
- :limit="attachmentLimit"
- :accept="attachmentAccept"
- :multiple="true"
- @change="handleAttachmentChange"
- @upload-success="handleUploadSuccess"
- @upload-error="handleUploadError"
- @remove="handleAttachmentRemove"
- />
- <div style="font-size:12px; color:#909399; margin-top:4px;">
- 褰撳墠涓婁紶鍒嗙被锛�<el-tag size="small" type="info">{{
- activeTab === "鏈垎绫�" ? "鏈垎绫�" : activeTab
- }}</el-tag>
- 锛堝垏鎹� Tab 鍙敼鍙樹笂浼犲垎绫伙級
- </div>
- </div>
-
- <!-- 闄勪欢鍒楄〃 - 鍒嗙被Tab灞曠ず锛屾敮鎸佷慨鏀瑰垎绫� -->
- <div class="attachment-list" v-if="attachments && attachments.length > 0">
- <el-tabs v-model="activeTab" type="border-card">
- <el-tab-pane
- v-for="category in categories"
- :key="category"
- :label="category + '(' + getCategoryCount(category) + ')'"
- :name="category"
+ <!-- 闄勪欢鍒楄〃 - 鍒嗙被Tab灞曠ず -->
+ <el-tabs v-model="activeTab" type="border-card">
+ <el-tab-pane
+ v-for="category in categories"
+ :key="category"
+ :label="category + '(' + getCategoryCount(category) + ')'"
+ :name="category"
+ >
+ <el-table
+ :data="getCategoryFiles(category)"
+ style="width: 100%"
+ size="small"
+ border
>
- <el-table
- :data="getCategoryFiles(category)"
- style="width: 100%"
- size="small"
- border
- >
- <el-table-column label="鏂囦欢鍚�" min-width="180">
- <template #default="scope">
- <i
- class="el-icon-document"
- style="margin-right: 8px; color: #409EFF;"
- ></i>
- <span class="file-name">{{ scope.row.fileName }}</span>
- </template>
- </el-table-column>
- <!-- 鍙紪杈戝垎绫讳笅鎷� -->
- <el-table-column label="鍒嗙被" width="150">
- <template #default="scope">
- <el-select
- v-model="scope.row.fileType"
- size="small"
- @change="updateAttachmentCategory(scope.row, $event)"
- placeholder="閫夋嫨鍒嗙被"
- >
- <el-option label="鍘熻〃鎷嶇収" value="鍘熻〃鎷嶇収" />
- <el-option label="鎺ュ彈纭涔�" value="鎺ュ彈纭涔�" />
- <el-option label="寮冪敤璇存槑" value="寮冪敤璇存槑" />
- <el-option label="鎹愮尞璇佷功鐓х墖" value="鎹愮尞璇佷功鐓х墖" />
- <el-option label="鏈垎绫�" value="" />
- </el-select>
- </template>
- </el-table-column>
- <el-table-column label="鏂囦欢绫诲瀷" width="100">
- <template #default="scope">
- <el-tag size="small">{{
- getFileTypeText(scope.row.fileName)
- }}</el-tag>
- </template>
- </el-table-column>
- <el-table-column label="涓婁紶鏃堕棿" width="160">
- <template #default="scope">
- <span>{{ formatDateTime(scope.row.uploadTime) }}</span>
- </template>
- </el-table-column>
- <el-table-column label="鏂囦欢澶у皬" width="120">
- <template #default="scope">
- <span>{{ formatFileSize(scope.row.fileSize) }}</span>
- </template>
- </el-table-column>
- <el-table-column label="鎿嶄綔" width="180" fixed="right">
- <template #default="scope">
- <el-button
- size="mini"
- type="primary"
- @click="handlePreview(scope.row)"
- >棰勮</el-button
- >
- <el-button
- size="mini"
- type="danger"
- @click="handleRemoveAttachmentByFile(scope.row)"
- >鍒犻櫎</el-button
- >
- </template>
- </el-table-column>
- </el-table>
- </el-tab-pane>
- </el-tabs>
- </div>
-
- <!-- 鏃犻檮浠舵椂鏄剧ず -->
- <div v-else style="text-align:center; padding:20px; color:#909399;">
- 鏆傛棤闄勪欢锛岃涓婁紶
- </div>
+ <el-table-column label="鏂囦欢鍚�" min-width="180">
+ <template #default="scope">
+ <i
+ class="el-icon-document"
+ style="margin-right: 8px; color: #409EFF;"
+ ></i>
+ <span class="file-name">{{ scope.row.fileName }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="鍒嗙被" width="150">
+ <template #default="scope">
+ <span>{{ scope.row.fileType || '鏈垎绫�' }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="鏂囦欢绫诲瀷" width="100">
+ <template #default="scope">
+ <el-tag size="small">{{
+ getFileTypeText(scope.row.fileName)
+ }}</el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column label="涓婁紶鏃堕棿" width="160">
+ <template #default="scope">
+ <span>{{ formatDateTime(scope.row.uploadTime) }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="鏂囦欢澶у皬" width="100">
+ <template #default="scope">
+ <span>{{ formatFileSize(scope.row.fileSize) }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" width="100" fixed="right">
+ <template #default="scope">
+ <el-button
+ size="mini"
+ type="primary"
+ @click="handlePreview(scope.row)"
+ >棰勮</el-button
+ >
+ </template>
+ </el-table-column>
+ </el-table>
+ <div
+ v-if="getCategoryFiles(category).length === 0"
+ style="text-align:center; padding:20px; color:#909399;"
+ >
+ 鏆傛棤闄勪欢
+ </div>
+ </el-tab-pane>
+ </el-tabs>
</el-card>
- <div style="text-align: center; margin: 30px 0;">
- <el-button type="primary" @click="handleSave" :loading="saveLoading">
- 淇濆瓨
- </el-button>
- <el-button
- type="success"
- @click="handleComplete"
- :loading="confirmLoading"
- >
- 瀹屾垚鍒╃敤
- </el-button>
- </div>
- <!-- 鏂囦欢棰勮瀵硅瘽妗� -->
+ <!-- 鏂囦欢棰勮寮圭獥 -->
<FilePreviewDialog
- :visible="filePreviewVisible"
+ :visible="previewVisible"
:file="currentPreviewFile"
- @close="filePreviewVisible = false"
- @download="handleDownloadAttachment"
+ @close="previewVisible = false"
+ @download="handleDownload"
/>
</div>
</template>
<script>
-import {
- completionList,
- completionadd,
- completionedit
-} from "@/api/businessApi";
-import UploadAttachment from "@/components/UploadAttachment"; // 鏂板瀵煎叆
-import FilePreviewDialog from "@/components/FilePreviewDialog"; // 鏂板瀵煎叆
+import { witnessList, witnessadd, witnessedit } from "@/api/businessApi";
+import FilePreviewDialog from "@/components/FilePreviewDialog";
import CaseBasicInfo from "@/components/CaseBasicInfo";
-import dayjs from "dayjs"; // 鏂板瀵煎叆锛岀敤浜庢椂闂村鐞�
+import { getToken } from "@/utils/auth";
+import dayjs from "dayjs";
+import readonlyDescriptionsMixin from "./readonlyDescriptionsMixin";
export default {
- name: "OrganUtilizationDetail",
+ name: "OrganProcurementDetail",
components: {
- UploadAttachment,
FilePreviewDialog,
CaseBasicInfo
},
- props: {
+ mixins: [readonlyDescriptionsMixin],
+ dicts: [
+ "sys_BloodType",
+ "Geta_hospital",
+ "sys_DonationCategory",
+ "sys_Organ",
+ "Obtain_status"
+ ],
+ props: {
infoid: {
type: String,
default: true
}
},
- dicts: [
- "Geta_hospital",
- "sys_BloodType",
- "sys_Organ",
- "sys_FamilyRelation",
- "sys_0_1",
- "utilize_statue"
- ],
data() {
return {
caseId: null,
- activeTab: "鍘熻〃鎷嶇収", // 褰撳墠婵�娲荤殑闄勪欢鍒嗙被Tab
- presetCategories: ["鍘熻〃鎷嶇収", "鎺ュ彈纭涔�", "寮冪敤璇存槑", "鎹愮尞璇佷功鐓х墖"], // 棰勮鍒嗙被
- // 琛ㄥ崟鏁版嵁 - 鏍规嵁鎺ュ彛鍙傛暟璋冩暣
+ // 琛ㄥ崟鏁版嵁
form: {
id: undefined,
infoid: undefined,
+ name: "",
inpatientno: "",
- completeState: "2",
+ witnessState: "2",
caseNo: "",
donorno: "",
treatmenthospitalname: "",
treatmenthospitalno: "",
sex: "",
- name: "",
age: "",
bloodtype: "",
idcardno: "",
diagnosisname: "",
- completetime: "",
+ coordinatorName: "",
+ gainhospitalno: "",
+ gainhospitalname: "",
+ deathtime: "",
+ deathreason: "",
+ deathjudgedocto: "",
+ deathjudgedoctt: "",
+ deathjudgeannex: "",
+ operationbegtime: "",
+ operationendtime: "",
+ operationdoctor: "",
+ isspendremember: 1,
+ isrestoreremains: 1,
+ rememberannex: "",
responsibleuserid: "",
responsibleusername: "",
coordinateduserido: "",
coordinatedusernameo: "",
coordinateduseridt: "",
coordinatedusernamet: "",
- assessannex: "",
- donateorgan: "",
- isbodydonation: "1",
- receivingunitname: "",
- createBy: "",
- createTime: "",
- updateBy: "",
- updateTime: "",
+ abdominalaortacannulatime: "",
+ abdominalaortaperfusiontime: "",
+ portalveincannulatime: "",
+ portalveinperfusiontime: "",
+ pulmonaryarterycannulatime: "",
+ pulmonaryarteryperfusiontime: "",
+ aortacannulatime: "",
+ aortaperfusiontime: "",
+ organdonation: "",
+ organdonationOther: "",
+ donationcategory: "",
+ coordinatorInOperating: "",
+ coordinatorOutOperating: "",
+ coordinatorSign: "",
+ coordinatorSignTime: "",
attachments: []
+ },
+ activeTab: "鍘熻〃鎷嶇収", // 褰撳墠婵�娲荤殑闄勪欢鍒嗙被Tab
+ presetCategories: [
+ "鍘熻〃鎷嶇収",
+ "浼︾悊瀹℃煡鏉愭枡",
+ "姝讳骸鍒ゅ畾鏉愭枡",
+ "榛樺搥浠紡鐓х墖",
+ "鎹愮尞瑙佽瘉瑙嗛"
+ ], // 棰勮鍒嗙被
+ organExpansionMap: {
+ C64: { subItems: ["C64L", "C64R"], subNames: ["宸﹁偩", "鍙宠偩"] },
+ C34: { subItems: ["C34L", "C34R"], subNames: ["宸﹁偤", "鍙宠偤"] }
},
// 琛ㄥ崟楠岃瘉瑙勫垯
rules: {
@@ -677,12 +258,15 @@
diagnosisname: [
{ required: true, message: "鐤剧梾璇婃柇涓嶈兘涓虹┖", trigger: "blur" }
],
- donorno: [
- { required: true, message: "鎹愮尞鑰呯紪鍙蜂笉鑳戒负绌�", trigger: "blur" }
+ donationcategory: [
+ { required: true, message: "鎹愮尞绫诲埆涓嶈兘涓虹┖", trigger: "change" }
+ ],
+ operationdoctor: [
+ { required: true, message: "鎵嬫湳鍖荤敓涓嶈兘涓虹┖", trigger: "blur" }
]
},
- // 鍒╃敤璁板綍楠岃瘉瑙勫垯
- utilizationRules: {},
+ // 鑾峰彇璁板綍楠岃瘉瑙勫垯
+ procurementRules: {},
// 淇濆瓨鍔犺浇鐘舵��
saveLoading: false,
confirmLoading: false,
@@ -692,44 +276,28 @@
selectedOrgans: [],
// 鍖婚櫌鍒楄〃
hospitalList: [],
- // 绉绘鐘舵�佸垪琛�
- transplantStatusList: [
- { value: "1", label: "宸茬Щ妞�" },
- { value: "0", label: "鏈Щ妞�" },
- { value: "2", label: "绉绘涓�" },
- { value: "3", label: "搴撳瓨" }
- ],
- organExpansionMap: {
- C64: { subItems: ["C64L", "C64R"], subNames: ["宸﹁偩", "鍙宠偩"] },
- C34: { subItems: ["C34L", "C34R"], subNames: ["宸﹁偤", "鍙宠偤"] }
- },
- // 鍒╃敤璁板綍鏁版嵁
- utilizationData: {
- serviceDonatecomporganList: []
- },
- // 闅忚璁板綍鏁版嵁
- followupData: {
- records: []
+ // 鑾峰彇璁板綍鏁版嵁
+ procurementData: {
+ serviceDonationwitnessorgans: []
},
// 闄勪欢鏁版嵁
attachments: [],
- // 灞曞紑鐨勮keys
- expandedRows: [],
+ // 涓婁紶鐩稿叧
+ uploadAction: process.env.VUE_APP_BASE_API + "/common/upload",
+ headers: {
+ Authorization: "Bearer " + getToken()
+ },
+ uploadDialogVisible: false,
+ uploadLoading: false,
+ tempFileList: [],
+ currentUploadCategory: "",
// 缂栬緫瀵硅瘽妗�
editDialogVisible: false,
currentRecord: {},
currentEditIndex: -1,
- // 闄勪欢鐩稿叧閰嶇疆 - 鏂板
- attachmentFileList: [],
- attachmentLimit: 10,
- attachmentAccept:
- ".pdf,.jpg,.jpeg,.png,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.txt",
-
- // 鏂囦欢棰勮鐩稿叧 - 鏂板
- filePreviewVisible: false,
- currentPreviewFile: null,
- currentFollowup: {},
- isEditingFollowup: false
+ // 鏂囦欢棰勮鐩稿叧
+ previewVisible: false,
+ currentPreviewFile: null
};
},
computed: {
@@ -737,25 +305,21 @@
currentUser() {
return JSON.parse(sessionStorage.getItem("user") || "{}");
},
+ displayOrgans() {
+ return (this.procurementData.serviceDonationwitnessorgans || []).filter(
+ item => item.delFlag !== 1
+ );
+ },
categories() {
- // 濮嬬粓杩斿洖鎵�鏈夐璁惧垎绫� + 鏈垎绫伙紝鍗充娇娌℃湁鏁版嵁涔熸樉绀�
- const allCategories = ['鍘熻〃鎷嶇収', '鎺ュ彈纭涔�', '寮冪敤璇存槑', '鎹愮尞璇佷功鐓х墖', '鏈垎绫�'];
- return allCategories;
- },
- // 宸茬Щ妞嶆暟閲�
- transplantedCount() {
- if (!this.utilizationData.serviceDonatecomporganList) return 0;
- return this.utilizationData.serviceDonatecomporganList.filter(
- record => record.transplantstate === "1"
- ).length;
- },
- // 鍞竴鍖婚櫌鏁伴噺
- uniqueHospitals() {
- if (!this.utilizationData.serviceDonatecomporganList) return 0;
- const hospitals = this.utilizationData.serviceDonatecomporganList
- .map(record => record.hospitalno)
- .filter(Boolean);
- return new Set(hospitals).size;
+ // 濮嬬粓杩斿洖鎵�鏈夐璁惧垎绫� + 鏈垎绫伙紝鏃犺鏄惁鏈夋暟鎹�
+ return [
+ "鍘熻〃鎷嶇収",
+ "浼︾悊瀹℃煡鏉愭枡",
+ "姝讳骸鍒ゅ畾鏉愭枡",
+ "榛樺搥浠紡鐓х墖",
+ "鎹愮尞瑙佽瘉瑙嗛",
+ "鏈垎绫�"
+ ];
},
organReverseMap() {
const map = {};
@@ -767,11 +331,24 @@
}
return map;
},
- // 杩囨护鎺� delFlag=1 鐨勮褰曪紙鐢ㄤ簬琛ㄦ牸灞曠ず锛�
- displayOrgans() {
- return (this.utilizationData.serviceDonatecomporganList || []).filter(
- item => item.delFlag !== 1
- );
+ // 涓嶅畬鏁寸殑璁板綍鏁伴噺
+ incompleteRecords() {
+ if (!this.procurementData.serviceDonationwitnessorgans) return 0;
+ return this.procurementData.serviceDonationwitnessorgans.filter(
+ record =>
+ !record.organStartTime ||
+ !record.organgettime ||
+ !record.gainhospitalno ||
+ !record.organgetdoct
+ ).length;
+ },
+ // 鍞竴鍖婚櫌鏁伴噺
+ uniqueHospitals() {
+ if (!this.procurementData.serviceDonationwitnessorgans) return 0;
+ const hospitals = this.procurementData.serviceDonationwitnessorgans
+ .map(record => record.gainhospitalno)
+ .filter(Boolean);
+ return new Set(hospitals).size;
},
// 鑾峰彇鍣ㄥ畼瀛楀吀
organDict() {
@@ -779,47 +356,110 @@
}
},
created() {
+ this.caseId = this.infoid;
+
this.initData();
},
- watch: {
- // 鐩戝惉闄勪欢鏁版嵁鍙樺寲 - 鏂板
- attachments: {
- handler(newAttachments) {
- this.attachmentFileList = newAttachments.map(item => ({
- uid: item.id || Math.random(),
- name: item.fileName,
- fileSize: item.fileSize,
- url: item.path || item.fileUrl,
- uploadTime: item.uploadTime,
- status: "success"
- }));
- },
- deep: true
- }
- },
methods: {
+ // 鏍规嵁瀛楀吀value鑾峰彇label
+ getOrganLabel(organValue) {
+ const dictItem = this.organDict.find(item => item.value === organValue);
+ return dictItem ? dictItem.label : organValue;
+ },
+
// 鍒濆鍖栨暟鎹�
initData() {
- this.caseId = this.infoid;
+ const infoid = this.infoid;
- if (!this.caseId) {
+ if (!infoid) {
this.$message.error("缂哄皯蹇呰鐨勮矾鐢卞弬鏁� infoid");
this.$router.back();
return;
}
- this.form.infoid = this.caseId;
- this.form.createBy =
- this.currentUser.username || this.currentUser.name || "褰撳墠鐢ㄦ埛";
- this.form.createTime = new Date()
- .toISOString()
- .replace("T", " ")
- .substring(0, 19);
+ this.form.infoid = infoid;
+ // this.generateDonorNo();
- this.getDetail();
+ if (infoid) {
+ this.getDetail(infoid);
+ }
+
+ this.getHospitalData();
+ },
+ getOrganNameByNo(organno) {
+ // 妫�鏌ユ槸鍚﹀湪鏄犲皠鐨勫瓙椤逛腑
+ for (const key in this.organExpansionMap) {
+ const { subItems, subNames } = this.organExpansionMap[key];
+ const idx = subItems.indexOf(organno);
+ if (idx !== -1) {
+ return subNames[idx];
+ }
+ }
+ // 鍚﹀垯浠庡瓧鍏镐腑鑾峰彇
+ return this.getOrganLabel(organno);
+ },
+ // 鑾峰彇璇︽儏
+ async getDetail(infoid) {
+ this.loading = true;
+ try {
+ const response = await witnessList({ infoid });
+ if (
+ response.code === 200 &&
+ response.data &&
+ response.data.length > 0
+ ) {
+ const data = response.data[0];
+ if (!data.witnessState || data.witnessState == 1) {
+ data.witnessState = "2";
+ }
+
+ // 濉厖琛ㄥ崟鏁版嵁
+ Object.assign(this.form, data);
+
+ // 鍒濆鍖栭檮浠�
+ if (this.form.deathjudgeannex) {
+ const parsed = JSON.parse(this.form.deathjudgeannex);
+ this.attachments = parsed.map(item => ({
+ ...item,
+ fileType: item.fileType || "" // 榛樿绌哄瓧绗︿覆琛ㄧず鏈垎绫�
+ }));
+ this.form.attachments = this.attachments;
+ } else {
+ this.attachments = [];
+ }
+
+ // 澶勭悊鎹愮尞鍣ㄥ畼瀛楁
+ if (data.organdonation) {
+ const organArray = Array.isArray(data.organdonation)
+ ? data.organdonation
+ : (data.organdonation || "").split(",").filter(item => item);
+ this.selectedOrgans = organArray;
+ this.form.organdonationOther = data.organdonationOther || "";
+ }
+
+ // 澶勭悊鍣ㄥ畼鑾峰彇璁板綍
+ if (data.serviceDonationwitnessorgans) {
+ this.procurementData.serviceDonationwitnessorgans = Array.isArray(
+ data.serviceDonationwitnessorgans
+ )
+ ? data.serviceDonationwitnessorgans
+ : [];
+ }
+
+ this.$message.success("鏁版嵁鍔犺浇鎴愬姛");
+ this.syncOrgansFromSelection();
+ } else {
+ this.$message.warning("鏈壘鍒板搴旂殑鍣ㄥ畼鑾峰彇鏁版嵁");
+ }
+ } catch (error) {
+ console.error("鑾峰彇鍣ㄥ畼鑾峰彇璇︽儏澶辫触:", error);
+ this.$message.error("鑾峰彇璇︽儏澶辫触");
+ } finally {
+ this.loading = false;
+ }
},
syncOrgansFromSelection() {
- const records = this.utilizationData.serviceDonatecomporganList || [];
+ const records = this.procurementData.serviceDonationwitnessorgans || [];
const targetNos = [];
this.selectedOrgans.forEach(val => {
if (this.organExpansionMap[val]) {
@@ -829,125 +469,77 @@
}
});
+ // 鏂板鎴栨仮澶�
targetNos.forEach(no => {
const existing = records.find(r => r.organno === no);
if (existing) {
- if (existing.delFlag === 1) existing.delFlag = 0;
+ if (existing.delFlag === 1) {
+ existing.delFlag = 0; // 鎭㈠鏄剧ず
+ }
} else {
- // 浣跨敤鍒涘缓鏂规硶锛岃嚜鍔ㄥ寘鍚� delFlag:0
- this.createOrganRecord(no);
+ records.push({
+ id: null,
+ organname: this.getOrganNameByNo(no),
+ organno: no,
+ organStartTime: "",
+ organgettime: "",
+ gainhospitalno: "",
+ gainhospitalname: "",
+ organgetdoct: "",
+ assistant: "",
+ procurementNurse: "",
+ operatingRoomNurse: "",
+ anesthesiologist: "",
+ organstate: "1",
+ notgetreason: "",
+ delFlag: 0
+ });
}
});
- // 寮哄埗鎵�鏈夎褰� delFlag=0锛堝姞杞芥椂搴旇鍏ㄩ儴鏈夋晥锛�
- records.forEach(r => (r.delFlag = 0));
- this.form.donateorgan = this.selectedOrgans.join(",");
+ // 锛堝彲閫夛級濡傛灉鍔犺浇鏃跺悗绔繑鍥炰簡 delFlag=1 鐨勮褰曪紝浣嗗疄闄呭簲璇ユ樉绀猴紝寮哄埗閲嶇疆
+ records.forEach(r => {
+ if (r.delFlag === 1) r.delFlag = 0;
+ });
+
+ this.form.organdonation = this.selectedOrgans.join(",");
},
- // 鑾峰彇璇︽儏
- async getDetail() {
- this.loading = true;
+ // 鑾峰彇鍖婚櫌鏁版嵁
+ async getHospitalData() {
try {
- const response = await completionList({ infoid: this.caseId });
- if (
- response.code === 200 &&
- response.data &&
- response.data.length > 0
- ) {
- const data = response.data[0];
- if (!data.completeState || data.completeState == 1) {
- data.completeState = "2";
- }
- this.form = data;
- // 濉厖琛ㄥ崟鏁版嵁
- // Object.assign(this.form, data);
- this.form.signfamilyrelations = this.form.signfamilyrelations || "";
- // 澶勭悊鎹愮尞鍣ㄥ畼瀛楁
- if (data.donateorgan) {
- const organArray = Array.isArray(data.donateorgan)
- ? data.donateorgan
- : (data.donateorgan || "").split(",").filter(item => item);
- this.selectedOrgans = organArray;
- }
-
- // 澶勭悊鍣ㄥ畼鍒╃敤璁板綍
- if (data.serviceDonatecomporganList) {
- this.utilizationData.serviceDonatecomporganList = Array.isArray(
- data.serviceDonatecomporganList
- )
- ? data.serviceDonatecomporganList.map(record => ({
- ...record,
- transplanttime: record.transplanttime || "",
- transplantstate: record.transplantstate
- ? record.transplantstate.toString()
- : "1"
- }))
- : [];
- }
- console.log(this.utilizationData.serviceDonatecomporganList);
-
- // 鍒濆鍖栭檮浠�
- // 鏀逛负锛堢‘淇濇瘡涓檮浠堕兘鏈� fileType 瀛楁锛�
- if (this.form.assessannex) {
- const parsed = JSON.parse(this.form.assessannex);
- this.attachments = parsed.map(item => ({
- ...item,
- fileType: item.fileType || "" // 榛樿绌哄瓧绗︿覆琛ㄧず鏈垎绫�
- }));
- this.form.attachments = this.attachments;
- // 鍚屾 attachmentFileList
- this.attachmentFileList = this.attachments.map(item => ({
- uid: item.id || Math.random(),
- name: item.fileName,
- url: item.path || item.fileUrl,
- fileSize: item.fileSize,
- uploadTime: item.uploadTime,
- status: "success",
- raw: item
- }));
- } else {
- this.attachments = [];
- this.attachmentFileList = [];
- }
-
- this.$message.success("鏁版嵁鍔犺浇鎴愬姛");
- this.syncOrgansFromSelection();
- } else {
- this.$message.warning("鏈壘鍒板搴旂殑鍣ㄥ畼鍒╃敤鏁版嵁");
- }
+ // TODO: 鏇挎崲涓哄疄闄呯殑鍖婚櫌鍒楄〃鎺ュ彛
+ // 鏆傛椂浣跨敤妯℃嫙鏁版嵁
+ this.hospitalList = [
+ { hospitalNo: "H001", hospitalName: "鍖椾含鍗忓拰鍖婚櫌" },
+ { hospitalNo: "H002", hospitalName: "涓婃捣鍗庡北鍖婚櫌" },
+ { hospitalNo: "H003", hospitalName: "骞垮窞涓北鍖婚櫌" },
+ { hospitalNo: "H004", hospitalName: "姝︽眽鍚屾祹鍖婚櫌" },
+ { hospitalNo: "H005", hospitalName: "鎴愰兘鍗庤タ鍖婚櫌" }
+ ];
} catch (error) {
- console.error("鑾峰彇鍣ㄥ畼鍒╃敤璇︽儏澶辫触:", error);
- this.$message.error("鑾峰彇璇︽儏澶辫触");
- } finally {
- this.loading = false;
+ console.error("鑾峰彇鍖婚櫌鏁版嵁澶辫触:", error);
+ this.$message.error("鑾峰彇鍖婚櫌鏁版嵁澶辫触");
}
},
+ // 绉绘鍖婚櫌妯$硦鎼滅储
+ queryHospitalSearch(queryString, cb) {
+ const hospitals = this.dict.type.Geta_hospital || [];
+ const results = queryString
+ ? hospitals.filter(item =>
+ item.label.toLowerCase().includes(queryString.toLowerCase())
+ )
+ : hospitals;
- // 鑾峰彇鍖婚櫌鏁版嵁
- // async getHospitalData() {
- // try {
- // // TODO: 鏇挎崲涓哄疄闄呯殑鍖婚櫌鍒楄〃鎺ュ彛
- // // 鏆傛椂浣跨敤妯℃嫙鏁版嵁
- // this.hospitalList = [
- // { hospitalNo: "H001", hospitalName: "鍖椾含鍗忓拰鍖婚櫌" },
- // { hospitalNo: "H002", hospitalName: "涓婃捣鍗庡北鍖婚櫌" },
- // { hospitalNo: "H003", hospitalName: "涓婃捣鐟為噾鍖婚櫌" },
- // { hospitalNo: "H004", hospitalName: "骞垮窞涓北鍖婚櫌" },
- // { hospitalNo: "H005", hospitalName: "姝︽眽鍚屾祹鍖婚櫌" },
- // { hospitalNo: "H006", hospitalName: "鎴愰兘鍗庤タ鍖婚櫌" }
- // ];
- // } catch (error) {
- // console.error("鑾峰彇鍖婚櫌鏁版嵁澶辫触:", error);
- // this.$message.error("鑾峰彇鍖婚櫌鏁版嵁澶辫触");
- // }
- // },
-
+ // el-autocomplete 闇�瑕� value 瀛楁
+ cb(results.map(item => ({ value: item.label })));
+ },
// 鍣ㄥ畼閫夋嫨鐘舵�佸彉鍖�
async handleOrganSelectionChange(selectedValues) {
// 1. 澶勭悊浜掓枼閫昏緫锛堜慨鏀� this.selectedOrgans锛�
this.handleExclusiveSelections(selectedValues);
const finalSelected = this.selectedOrgans;
- const records = this.utilizationData.serviceDonatecomporganList || [];
+ const records = this.procurementData.serviceDonationwitnessorgans || [];
// 2. 鏋勫缓鐩爣鍣ㄥ畼缂栧彿鍒楄〃锛堝睍寮�缁勫悎鍣ㄥ畼锛�
const targetOrganNos = [];
@@ -959,7 +551,7 @@
}
});
- // 3. 鏂板鎴栨仮澶嶈褰曪紙鏃犻渶寮圭獥锛�
+ // 3. 鏂板鎴栨仮澶嶇洰鏍囧櫒瀹樿褰曪紙鏃犲脊绐楋級
targetOrganNos.forEach(no => {
const existing = records.find(r => r.organno === no);
if (existing) {
@@ -967,11 +559,27 @@
existing.delFlag = 0; // 鎭㈠鏄剧ず
}
} else {
- this.createOrganRecord(no); // 鏂板璁板綍锛堝寘鍚� delFlag:0锛�
+ records.push({
+ id: null,
+ organname: this.getOrganNameByNo(no),
+ organno: no,
+ organStartTime: "",
+ organgettime: "",
+ gainhospitalno: "",
+ gainhospitalname: "",
+ organgetdoct: "",
+ assistant: "",
+ procurementNurse: "",
+ operatingRoomNurse: "",
+ anesthesiologist: "",
+ organstate: "1",
+ notgetreason: "",
+ delFlag: 0
+ });
}
});
- // 4. 鎵惧嚭闇�瑕佸彇娑堢殑璁板綍锛堜笉鍦ㄧ洰鏍囬泦鍚堜腑鐨勶級
+ // 4. 鎵惧嚭闇�瑕佸彇娑堢殑璁板綍锛堜笉鍦ㄧ洰鏍囬泦鍚堜腑锛�
const toRemove = records.filter(r => !targetOrganNos.includes(r.organno));
const toRemoveSaved = toRemove.filter(r => r.id); // 宸蹭繚瀛橈紝闇�纭
const toRemoveUnsaved = toRemove.filter(r => !r.id); // 鏈繚瀛橈紝鐩存帴绉婚櫎
@@ -987,7 +595,7 @@
const organNames = toRemoveSaved.map(r => r.organname).join("銆�");
try {
await this.$confirm(
- `鎮ㄧ‘瀹氳鍙栨秷浠ヤ笅宸蹭繚瀛樼殑鍣ㄥ畼鍒╃敤璁板綍鍚楋紵\n${organNames}\n鍙栨秷鍚庯紝杩欎簺璁板綍灏嗕粠鍒楄〃涓Щ闄わ紙鏁版嵁浠嶄繚鐣欙紝鍙仮澶嶏級銆俙,
+ `鎮ㄧ‘瀹氳鍙栨秷浠ヤ笅宸蹭繚瀛樼殑鍣ㄥ畼鑾峰彇璁板綍鍚楋紵\n${organNames}\n鍙栨秷鍚庯紝杩欎簺璁板綍灏嗕粠鍒楄〃涓Щ闄わ紙鏁版嵁浠嶄繚鐣欙紝鍙仮澶嶏級銆俙,
"鎻愮ず",
{
confirmButtonText: "纭畾绉婚櫎",
@@ -1001,7 +609,6 @@
});
} catch (error) {
// 鐢ㄦ埛鍙栨秷锛氭仮澶嶉�変腑鐘舵��
- // 灏嗗彇娑堢殑鍣ㄥ畼閲嶆柊鍔犲叆 this.selectedOrgans
const parentToRestore = new Set();
toRemoveSaved.forEach(r => {
const parent = this.organReverseMap[r.organno];
@@ -1016,56 +623,37 @@
this.selectedOrgans.push(val);
}
});
- // 鎻愮ず鐢ㄦ埛鎿嶄綔宸插彇娑�
this.$message.info("宸插彇娑堝垹闄ゆ搷浣�");
// 鏇存柊琛ㄥ崟瀛楁锛堜繚鎸佷竴鑷存�э級
- this.form.donateorgan = this.selectedOrgans.join(",");
- // 娉ㄦ剰锛氭鏃� records 涓凡鏂板浜嗙洰鏍囧櫒瀹橈紝骞朵笖涔嬪墠鐨勮褰曟湭琚爣璁板垹闄わ紝鐘舵�佷竴鑷淬��
- // 浣嗘槸锛屾垜浠繕闇�瑕佺Щ闄や箣鍓嶆柊澧炰絾鐢ㄦ埛鍙兘涓嶆兂淇濈暀鐨勮褰曪紵涓嶄細锛屽洜涓烘柊澧炵殑鏄洰鏍囧櫒瀹橈紝鐢ㄦ埛鏄兂淇濈暀鐨勩��
- // 鍥犳鐩存帴杩斿洖鍗冲彲銆�
- return;
+ this.form.organdonation = this.selectedOrgans.join(",");
+ return; // 閫�鍑烘柟娉曪紝閬垮厤缁х画鎵ц
}
}
// 5. 鏇存柊琛ㄥ崟瀛楁
- this.form.donateorgan = this.selectedOrgans.join(",");
+ this.form.organdonation = this.selectedOrgans.join(",");
},
- // 绉绘鍖婚櫌妯$硦鎼滅储
- queryHospitalSearch(queryString, cb) {
- const hospitals = this.dict.type.Geta_hospital || [];
- const results = queryString
- ? hospitals.filter(item =>
- item.label.toLowerCase().includes(queryString.toLowerCase())
- )
- : hospitals;
- // el-autocomplete 闇�瑕� value 瀛楁
- cb(results.map(item => ({ value: item.label })));
- },
// 澶勭悊浜掓枼閫夋嫨
handleExclusiveSelections(selectedValues) {
- // 濡傛灉閫夋嫨浜�"鍙岃偩"(鍋囪瀛楀吀鍊间负C64)锛岃嚜鍔ㄥ彇娑堝崟鐙殑"宸﹁偩"(C64L)鍜�"鍙宠偩"(C64R)閫夋嫨
+ // 鍙岃偩涓庡乏鍙宠偩浜掓枼
if (selectedValues.includes("C64")) {
this.selectedOrgans = selectedValues.filter(
item => item !== "C64L" && item !== "C64R"
);
- }
- // 濡傛灉閫夋嫨浜�"宸﹁偩"鎴�"鍙宠偩"锛屽彇娑�"鍙岃偩"閫夋嫨
- else if (
+ } else if (
selectedValues.includes("C64L") ||
selectedValues.includes("C64R")
) {
this.selectedOrgans = selectedValues.filter(item => item !== "C64");
}
- // 濡傛灉閫夋嫨浜�"鍏ㄨ偤"(鍋囪瀛楀吀鍊间负C34)锛岃嚜鍔ㄥ彇娑堝崟鐙殑"宸﹁偤"(C34L)鍜�"鍙宠偤"(C34R)閫夋嫨
+ // 鍏ㄨ偤涓庡乏鍙宠偤浜掓枼
if (selectedValues.includes("C34")) {
this.selectedOrgans = selectedValues.filter(
item => item !== "C34L" && item !== "C34R"
);
- }
- // 濡傛灉閫夋嫨浜�"宸﹁偤"鎴�"鍙宠偤"锛屽彇娑�"鍏ㄨ偤"閫夋嫨
- else if (
+ } else if (
selectedValues.includes("C34L") ||
selectedValues.includes("C34R")
) {
@@ -1077,158 +665,89 @@
createOrganRecord(organValue) {
const organName = this.getOrganLabel(organValue);
- this.utilizationData.serviceDonatecomporganList.push({
+ this.procurementData.serviceDonationwitnessorgans.push({
+ id: null,
organname: organName,
organno: organValue,
- caseNo: "",
- hospitalno: "",
- hospitalname: "",
- name: "",
- transplantdoct: "",
- transplanttime: "",
- transplantstate: "1",
- abandonreason: "",
- delFlag: 0, // 鏂板
- sex: "",
- age: "",
- birthday: "",
- phone: "",
- residenceaddress: "",
- residenceprovince: "",
- residenceprovincename: "",
- residencecity: "",
- residencecityname: "",
- residencetown: "",
- residencetownname: "",
- residencecommunity: "",
- residencecommunityname: "",
- residencecountycode: "",
- residencecountyname: "",
- idcardtype: "",
- idcardno: "",
- ageunit: ""
+ organStartTime: "",
+ organgettime: "",
+ gainhospitalno: "",
+ gainhospitalname: "",
+ organgetdoct: "",
+ assistant: "",
+ procurementNurse: "",
+ operatingRoomNurse: "",
+ anesthesiologist: "",
+ organstate: "1",
+ notgetreason: ""
});
},
- // 鏍规嵁瀛楀吀value鑾峰彇label
- getOrganLabel(organValue) {
- const dictItem = this.organDict.find(item => item.value === organValue);
- return dictItem ? dictItem.label : organValue;
- },
-
- // 绉绘鐘舵�佸彉鍖栧鐞�
- handleTransplantStatusChange(row, status) {
- if (status === "0") {
- // 濡傛灉鐘舵�佷负鏈Щ妞嶏紝娓呴櫎鐩稿叧瀛楁
- // row.transplanttime = "";
- // row.transplantdoct = "";
- // row.hospitalno = "";
- // row.hospitalname = "";
- } else if (status === "1") {
- // 濡傛灉鐘舵�佷负宸茬Щ妞嶏紝鑷姩璁剧疆绉绘鏃堕棿涓哄綋鍓嶆椂闂�
- if (!row.transplanttime) {
- row.transplanttime = new Date().toISOString().split("T")[0];
- }
+ // 鍖婚櫌閫夋嫨鍙樺寲
+ handleHospitalChange(row, hospitalNo) {
+ const hospital = this.hospitalList.find(
+ item => item.hospitalNo === hospitalNo
+ );
+ if (hospital) {
+ row.gainhospitalname = hospital.hospitalName;
}
},
-
- // 琛屽睍寮�浜嬩欢
- handleExpandChange(row, expandedRows) {
- this.expandedRows = expandedRows.map(item => item.organno);
+ // 缂栬緫鑾峰彇璁板綍
+ handleEditProcurement(row) {
+ const index = this.procurementData.serviceDonationwitnessorgans.findIndex(
+ item => item.organno === row.organno
+ );
+ if (index !== -1) {
+ this.currentRecord = { ...row };
+ this.currentEditIndex = index;
+ this.editDialogVisible = true;
+ }
},
-
- // 鍒犻櫎鍣ㄥ畼璁板綍
- handleRemoveOrgan(index) {
- this.$confirm("纭鍒犻櫎杩欐潯鍣ㄥ畼璁板綍鍚楋紵", "鎻愮ず", {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning"
- })
- .then(() => {
- const organno = this.utilizationData.serviceDonatecomporganList[index]
- .organno;
- this.utilizationData.serviceDonatecomporganList.splice(index, 1);
-
- // 浠庨�変腑鐨勫櫒瀹樹腑绉婚櫎
- const idx = this.selectedOrgans.indexOf(organno);
- if (idx > -1) {
- this.selectedOrgans.splice(idx, 1);
- }
-
- this.$message.success("鍣ㄥ畼璁板綍鍒犻櫎鎴愬姛");
- })
- .catch(() => {});
+ // 纭缂栬緫
+ handleEditConfirm() {
+ if (this.currentEditIndex !== -1) {
+ this.procurementData.serviceDonationwitnessorgans[
+ this.currentEditIndex
+ ] = {
+ ...this.currentRecord
+ };
+ this.$message.success("鑾峰彇璁板綍鏇存柊鎴愬姛");
+ this.editDialogVisible = false;
+ }
},
-
// 鍣ㄥ畼琛屾牱寮�
getOrganRowClassName({ row }) {
if (
- row.transplantstate === "1" &&
- (!row.hospitalno || !row.name || !row.transplanttime)
+ !row.organStartTime ||
+ !row.organgettime ||
+ !row.gainhospitalno ||
+ !row.organgetdoct
) {
- return "warning-row";
- }
- if (row.transplantstate === "0" && !row.abandonreason) {
return "warning-row";
}
return "";
},
-
- // 鑾峰彇鐘舵�佹爣绛剧被鍨�
- getStatusTagType(status) {
- const typeMap = {
- 3: "success",
- 2: "warning",
- 1: "info"
- };
- return typeMap[status] || "info";
- },
-
- // 鑾峰彇鐘舵�佹枃鏈�
- getStatusText(status) {
- const textMap = {
- 3: "宸插畬鎴�",
- 2: "杩涜涓�",
- 1: "寰呭鐞�"
- };
- return textMap[status] || "鏈煡";
- },
-
- // 鑾峰彇闅忚绫诲瀷鏍囩
- getFollowupTypeTag(type) {
- const typeMap = {
- routine: "success",
- emergency: "danger",
- special: "warning"
- };
- return typeMap[type] || "info";
- },
-
- // 鑾峰彇闅忚绫诲瀷鏂囨湰
- getFollowupTypeText(type) {
- const textMap = {
- routine: "甯歌闅忚",
- emergency: "绱ф�ラ殢璁�",
- special: "鐗规畩闅忚"
- };
- return textMap[type] || "鏈煡";
- },
-
// 淇濆瓨鍩烘湰淇℃伅
async handleSave() {
this.$refs.form.validate(async valid => {
if (valid) {
this.saveLoading = true;
try {
+ console.log(this.procurementData.serviceDonationwitnessorgans);
+
const saveData = {
...this.form,
- assessannex: JSON.stringify(this.attachments),
- donateorgan: this.selectedOrgans.join(","),
- serviceDonatecomporganList:
- this.utilizationData.serviceDonatecomporganList || []
+ deathjudgeannex: JSON.stringify(this.attachments),
+ organdonation: this.selectedOrgans.join(","),
+ serviceDonationwitnessorganList:
+ this.procurementData.serviceDonationwitnessorgans || [],
+ serviceDonationwitnessorgans:
+ this.procurementData.serviceDonationwitnessorgans || []
};
+ console.log(saveData.serviceDonationwitnessorganList);
+ console.log(saveData.serviceDonationwitnessorgans);
- const apiMethod = this.form.id ? completionedit : completionadd;
+ const apiMethod = this.form.id ? witnessedit : witnessadd;
const response = await apiMethod(saveData);
if (response.code === 200) {
@@ -1251,14 +770,10 @@
}
});
},
-
- // 淇濆瓨鍒╃敤璁板綍
- async handleSaveUtilization() {
- if (
- !this.utilizationData.serviceDonatecomporganList ||
- this.utilizationData.serviceDonatecomporganList.length === 0
- ) {
- this.$message.warning("璇峰厛娣诲姞鍒╃敤璁板綍");
+ // 淇濆瓨鑾峰彇璁板綍
+ async handleSaveProcurement() {
+ if (!this.form.id) {
+ this.$message.warning("璇峰厛淇濆瓨鍩烘湰淇℃伅");
return;
}
@@ -1267,57 +782,44 @@
const saveData = {
...this.form,
attachments: this.attachments,
- donateorgan: this.selectedOrgans.join(","),
- serviceDonatecomporganList:
- this.utilizationData.serviceDonatecomporganList || []
+ organdonation: this.selectedOrgans.join(","),
+ serviceDonationwitnessorgans:
+ this.procurementData.serviceDonationwitnessorgans || []
};
- const response = await completionedit(saveData);
+ const response = await witnessedit(saveData);
if (response.code === 200) {
- this.$message.success("鍒╃敤璁板綍淇濆瓨鎴愬姛");
+ this.$message.success("鑾峰彇璁板綍淇濆瓨鎴愬姛");
} else {
this.$message.error(
- "淇濆瓨鍒╃敤璁板綍澶辫触锛�" + (response.msg || "鏈煡閿欒")
+ "淇濆瓨鑾峰彇璁板綍澶辫触锛�" + (response.msg || "鏈煡閿欒")
);
}
} catch (error) {
- console.error("淇濆瓨鍒╃敤璁板綍澶辫触:", error);
- this.$message.error("淇濆瓨鍒╃敤璁板綍澶辫触");
+ console.error("淇濆瓨鑾峰彇璁板綍澶辫触:", error);
+ this.$message.error("淇濆瓨鑾峰彇璁板綍澶辫触");
} finally {
this.saveLoading = false;
}
},
-
- // 纭瀹屾垚鍒╃敤
- async handleConfirmUtilization() {
- // 妫�鏌ュ埄鐢ㄨ褰曟槸鍚﹀畬鏁�
- const incompleteRecords = this.utilizationData.serviceDonatecomporganList.filter(
- record => {
- if (record.transplantstate === "1") {
- return !record.hospitalno || !record.name || !record.transplanttime;
- } else if (record.transplantstate === "0") {
- return !record.abandonreason;
- }
- return false;
- }
- );
-
- if (incompleteRecords.length > 0) {
- this.$message.warning("璇峰厛瀹屽杽鎵�鏈夊埄鐢ㄨ褰曠殑淇℃伅");
+ // 纭瀹屾垚鑾峰彇
+ async handleConfirmProcurement() {
+ if (this.incompleteRecords > 0) {
+ this.$message.warning("璇峰厛瀹屽杽鎵�鏈夎幏鍙栬褰曠殑淇℃伅");
return;
}
- this.$confirm("纭瀹屾垚鍣ㄥ畼鍒╃敤鍚楋紵瀹屾垚鍚庡皢鏃犳硶淇敼鍒╃敤淇℃伅銆�", "鎻愮ず", {
+ this.$confirm("纭瀹屾垚鍣ㄥ畼鑾峰彇鍚楋紵瀹屾垚鍚庡皢鏃犳硶淇敼鑾峰彇淇℃伅銆�", "鎻愮ず", {
confirmButtonText: "纭畾",
cancelButtonText: "鍙栨秷",
type: "warning"
})
.then(async () => {
this.confirmLoading = true;
- this.form.completeState = "3";
- this.form.completetime =
- this.form.completetime ||
+ this.form.witnessState = "3";
+ this.form.operationendtime =
+ this.form.operationendtime ||
new Date()
.toISOString()
.replace("T", " ")
@@ -1327,126 +829,131 @@
const saveData = {
...this.form,
attachments: this.attachments,
- donateorgan: this.selectedOrgans.join(","),
- serviceDonatecomporganList:
- this.utilizationData.serviceDonatecomporganList || []
+ organdonation: this.selectedOrgans.join(","),
+ serviceDonationwitnessorgans:
+ this.procurementData.serviceDonationwitnessorgans || []
};
- const response = await completionedit(saveData);
+ const response = await witnessedit(saveData);
if (response.code === 200) {
- this.$message.success("鍣ㄥ畼鍒╃敤宸插畬鎴�");
+ this.$message.success("鍣ㄥ畼鑾峰彇宸插畬鎴�");
} else {
this.$message.error(
- "纭鍒╃敤澶辫触锛�" + (response.msg || "鏈煡閿欒")
+ "纭鑾峰彇澶辫触锛�" + (response.msg || "鏈煡閿欒")
);
- this.form.completeState = "2";
- this.form.completetime = "";
+ this.form.witnessState = "2";
+ this.form.operationendtime = "";
}
} catch (error) {
- console.error("纭鍒╃敤澶辫触:", error);
- this.$message.error("纭鍒╃敤澶辫触");
- this.form.completeState = "2";
- this.form.completetime = "";
+ console.error("纭鑾峰彇澶辫触:", error);
+ this.$message.error("纭鑾峰彇澶辫触");
+ this.form.witnessState = "2";
+ this.form.operationendtime = "";
} finally {
this.confirmLoading = false;
}
})
.catch(() => {});
},
-
- // 瀹屾垚鍒╃敤
- handleComplete() {
- this.handleConfirmUtilization();
+ // 纭鑾峰彇鎸夐挳鍒悕
+ handleProcure() {
+ this.handleConfirmProcurement();
},
- // 淇濆瓨闅忚璁板綍
- handleSaveFollowup() {
- if (!this.currentFollowup.organNo) {
- this.$message.warning("璇烽�夋嫨鍣ㄥ畼");
- return;
- }
-
- if (!this.currentFollowup.followupTime) {
- this.$message.warning("璇烽�夋嫨闅忚鏃堕棿");
- return;
- }
-
- this.saveLoading = true;
-
- // 鑾峰彇鍣ㄥ畼鍚嶇О
- const organRecord = this.utilizationData.serviceDonatecomporganList.find(
- item => item.organno === this.currentFollowup.organNo
- );
- const organName = organRecord ? organRecord.organname : "";
-
- const followupData = {
- ...this.currentFollowup,
- organName: organName,
- utilizationId: this.form.id
- };
-
- // TODO: 鏇挎崲涓哄疄闄呯殑闅忚璁板綍淇濆瓨鎺ュ彛
- setTimeout(() => {
- if (this.isEditingFollowup) {
- // 鏇存柊鐜版湁璁板綍
- const index = this.followupData.records.findIndex(
- item => item.id === this.currentFollowup.id
- );
- if (index !== -1) {
- this.followupData.records[index] = {
- ...followupData,
- id: this.currentFollowup.id
- };
- }
- } else {
- // 娣诲姞鏂拌褰�
- this.followupData.records.push({ ...followupData, id: Date.now() });
+ // ===== 闄勪欢鐩稿叧鏂规硶 =====
+ // 鎵撳紑涓婁紶瀵硅瘽妗�
+ openUploadDialog(category) {
+ this.currentUploadCategory = category;
+ this.tempFileList = [];
+ this.uploadDialogVisible = true;
+ this.$nextTick(() => {
+ if (this.$refs.uploadRef) {
+ this.$refs.uploadRef.clearFiles();
}
- this.$message.success("闅忚璁板綍淇濆瓨鎴愬姛");
- this.followupDialogVisible = false;
- this.saveLoading = false;
- }, 1000);
- },
- /** 闄勪欢鍙樺寲澶勭悊 */
- handleAttachmentChange(fileList) {
- this.attachmentFileList = fileList;
+ });
},
- /** 闄勪欢绉婚櫎澶勭悊 */
- handleAttachmentRemove(file) {
- if (file.url) {
- const index = this.attachments.findIndex(
- item => item.path === file.url || item.fileUrl === file.url
+ // 涓婁紶鍓嶆牎楠�
+ beforeUpload(file) {
+ const allowedTypes = [
+ "application/pdf",
+ "image/jpeg",
+ "image/png",
+ "application/msword",
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
+ ];
+ const maxSize = 10 * 1024 * 1024;
+ 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鏍煎紡鏂囦欢"
);
- if (index > -1) {
- this.attachments.splice(index, 1);
- this.$message.success("闄勪欢鍒犻櫎鎴愬姛");
- }
+ return false;
}
+ if (file.size > maxSize) {
+ this.$message.error("鏂囦欢澶у皬涓嶈兘瓒呰繃10MB");
+ return false;
+ }
+ return true;
},
- /** 涓婁紶鎴愬姛澶勭悊 */
- handleUploadSuccess({ file, fileList, response }) {
- if (response.code === 200) {
- // 鏍规嵁褰撳墠婵�娲荤殑 Tab 鍐冲畾鍒嗙被锛堟湭鍒嗙被 Tab 瀵瑰簲绌哄瓧绗︿覆锛�
- const category = this.activeTab === "鏈垎绫�" ? "" : this.activeTab;
- const attachmentObj = {
- fileName: file.name,
- path: response.fileUrl || file.url,
- fileUrl: response.fileUrl || file.url,
- fileType: category, // 鍏抽敭锛氳褰曞垎绫�
- fileSize: file.size,
- uploadTime: dayjs().format("YYYY-MM-DD HH:mm:ss")
- };
- if (!Array.isArray(this.attachments)) {
- this.attachments = [];
- }
- this.attachments.push(attachmentObj);
- this.attachmentFileList = fileList; // 淇濇寔鍚屾
- this.$message.success("鏂囦欢涓婁紶鎴愬姛");
- }
+ // 鏂囦欢閫夋嫨鍙樺寲
+ handleFileChange(file, fileList) {
+ this.tempFileList = fileList;
},
+
+ // 涓存椂绉婚櫎
+ handleTempRemove(file, fileList) {
+ this.tempFileList = fileList;
+ },
+
+ // 涓婁紶鎴愬姛澶勭悊
+ handleUploadSuccess(response, file, fileList) {
+ if (response.code !== 200) {
+ this.$message.error(response.msg || "涓婁紶澶辫触");
+ return;
+ }
+ // 鏈垎绫诲搴旂┖瀛楃涓诧紝涓庡睍绀�/淇濆瓨閫昏緫涓�鑷�
+ const category =
+ this.currentUploadCategory === "鏈垎绫�"
+ ? ""
+ : this.currentUploadCategory;
+ const attachmentObj = {
+ fileName: file.name,
+ path: response.fileUrl || response.url || response.data || file.url,
+ fileUrl: response.fileUrl || response.url || response.data || file.url,
+ fileType: category,
+ fileSize: file.size,
+ uploadTime: dayjs().format("YYYY-MM-DD HH:mm:ss")
+ };
+ if (!Array.isArray(this.attachments)) {
+ this.attachments = [];
+ }
+ this.attachments.push(attachmentObj);
+ this.$message.success("鏂囦欢涓婁紶鎴愬姛");
+ this.uploadLoading = false;
+ this.uploadDialogVisible = false;
+ this.tempFileList = [];
+ },
+
+ // 鎻愪氦涓婁紶
+ submitUpload() {
+ if (this.tempFileList.length === 0) {
+ this.$message.warning("璇峰厛閫夋嫨瑕佷笂浼犵殑鏂囦欢");
+ return;
+ }
+ this.uploadLoading = true;
+ this.$refs.uploadRef.submit();
+ },
+
// 鑾峰彇鏌愬垎绫荤殑鏂囦欢鏁伴噺
getCategoryCount(category) {
return this.attachments.filter(item => {
@@ -1473,16 +980,7 @@
updateAttachmentCategory(row, newVal) {
const target = this.attachments.find(item => item === row);
if (target) {
- target.fileType = newVal; // 鍙兘涓虹┖瀛楃涓�
- // 鍚屾鏇存柊 attachmentFileList
- const fileItem = this.attachmentFileList.find(
- f => f.raw === row || f.url === row.fileUrl
- );
- if (fileItem) {
- fileItem.raw.fileType = newVal;
- fileItem.fileType = newVal || "鏈垎绫�";
- }
- // 濡傛灉褰撳墠婵�娲荤殑tab娌℃湁鏂囦欢浜嗭紝鑷姩鍒囨崲鍒扮涓�涓湁鏂囦欢鐨則ab
+ target.fileType = newVal;
const currentTabHasFiles =
this.getCategoryFiles(this.activeTab).length > 0;
if (!currentTabHasFiles) {
@@ -1494,42 +992,33 @@
// 鎸夋枃浠跺璞″垹闄わ紙鐢ㄤ簬琛ㄦ牸涓殑鍒犻櫎鎸夐挳锛�
handleRemoveAttachmentByFile(file) {
- const index = this.attachments.findIndex(item => item === file);
- if (index > -1) {
- this.attachments.splice(index, 1);
- // 鍚屾鍒犻櫎 attachmentFileList
- const fileIndex = this.attachmentFileList.findIndex(
- f => f.raw === file || f.url === file.fileUrl
- );
- if (fileIndex > -1) {
- this.attachmentFileList.splice(fileIndex, 1);
- }
- this.$message.success("闄勪欢鍒犻櫎鎴愬姛");
- }
- },
- /** 涓婁紶閿欒澶勭悊 */
- handleUploadError({ file, fileList, error }) {
- console.error("闄勪欢涓婁紶澶辫触:", error);
- this.$message.error("鏂囦欢涓婁紶澶辫触锛岃閲嶈瘯");
+ this.$confirm("纭畾瑕佸垹闄よ繖涓檮浠跺悧锛�", "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ })
+ .then(() => {
+ const index = this.attachments.findIndex(item => item === file);
+ if (index > -1) {
+ this.attachments.splice(index, 1);
+ this.$message.success("闄勪欢鍒犻櫎鎴愬姛");
+ }
+ })
+ .catch(() => {});
},
- /** 鎵嬪姩鍒犻櫎闄勪欢 */
- handleRemoveAttachment(index) {
- // 鐩存帴璋冪敤鏂扮殑鍒犻櫎鏂规硶
- this.handleRemoveAttachmentByFile(file.raw || file);
- },
-
- /** 鏂囦欢棰勮 */
+ // 鏂囦欢棰勮
handlePreview(file) {
this.currentPreviewFile = {
fileName: file.fileName,
fileUrl: file.path || file.fileUrl,
fileType: this.getFileType(file.fileName)
};
- this.filePreviewVisible = true;
+ this.previewVisible = true;
},
- /** 鏂囦欢涓嬭浇 */
- handleDownloadAttachment(file) {
+
+ // 鏂囦欢涓嬭浇
+ handleDownload(file) {
const fileUrl = file.path || file.fileUrl;
const fileName = file.fileName;
@@ -1642,24 +1131,36 @@
};
</script>
-<style lang="scss" scoped>
-.organ-utilization-detail {
+<style scoped>
+.organ-procurement-detail {
padding: 20px;
background-color: #f5f7fa;
min-height: 100vh;
}
-.detail-card,
-.utilization-card,
-.followup-card,
-.attachment-card {
+.detail-card {
margin-bottom: 20px;
border-radius: 8px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
border: 1px solid #e4e7ed;
}
-/* 鏂板闄勪欢澶撮儴鏍峰紡 */
+.procurement-card {
+ margin-bottom: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+ border: 1px solid #e4e7ed;
+}
+
+.attachment-card {
+ margin-bottom: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+ border: 1px solid #e4e7ed;
+ padding: 20px;
+ background: #fafafa;
+}
+
.attachment-header {
display: flex;
align-items: center;
@@ -1672,7 +1173,6 @@
.attachment-title {
font-weight: 600;
color: #303133;
- font-size: 16px;
}
.attachment-tip {
@@ -1682,7 +1182,7 @@
}
.attachment-list {
- margin-top: 20px;
+ margin-top: 16px;
}
.list-title {
@@ -1695,16 +1195,8 @@
.file-name {
font-size: 13px;
margin-left: 8px;
- color: #606266;
}
-/* 鏂囦欢鍥炬爣鏍峰紡 */
-.el-icon-document {
- font-size: 16px;
- vertical-align: middle;
-}
-
-/* 淇濇寔鍘熸湁鏍峰紡 */
.detail-title {
font-size: 18px;
font-weight: 600;
@@ -1712,42 +1204,11 @@
line-height: 1.4;
}
-/* 琛ㄦ牸鏁翠綋鏍峰紡 */
-:deep(.el-table) {
- border-radius: 8px;
- overflow: hidden;
-}
-
-:deep(.el-table th) {
- background-color: #f5f7fa;
- color: #606266;
- font-weight: 600;
-}
-
-:deep(.el-table .cell) {
- padding: 12px 8px;
- line-height: 1.5;
-}
-
-/* 鏂戦┈绾硅〃鏍艰 */
-:deep(.el-table__row.warning-row) {
- background-color: #fdf6ec;
-}
-
-:deep(.el-table__row.default-row) {
- background-color: #f0f9ff;
-}
-
-/* 榧犳爣鎮仠鏁堟灉 */
-:deep(.el-table--enable-row-hover .el-table__body tr:hover > td) {
- background-color: #f5f7fa !important;
-}
-
/* 缁熻淇℃伅鏍峰紡 */
-.utilization-stats {
+.procurement-stats {
margin-top: 20px;
padding: 15px;
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ background: linear-gradient(135deg, #a6b2e7 0%, #8a66ad 100%);
border-radius: 8px;
color: white;
}
@@ -1773,214 +1234,17 @@
color: white;
}
-/* 灞曞紑琛屾牱寮� */
-.recipient-detail-expand {
- padding: 20px;
+/* 绌虹姸鎬佹牱寮� */
+.empty-procurement {
+ text-align: center;
+ padding: 40px 0;
+ color: #909399;
background: #fafafa;
- border-radius: 8px;
- margin: 10px 0;
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
-}
-
-.recipient-header {
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 20px;
- padding-bottom: 15px;
- border-bottom: 2px solid #e4e7ed;
-}
-
-.recipient-title {
- font-size: 16px;
- font-weight: 600;
- color: #303133;
-}
-
-/* 琛ㄥ崟閮ㄥ垎鏍峰紡 */
-.recipient-form {
- background: white;
- padding: 20px;
- border-radius: 8px;
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
-}
-
-/* 琛ㄥ崟閮ㄥ垎鏍囬 */
-.form-section {
- margin-bottom: 25px;
- padding-bottom: 20px;
- border-bottom: 1px solid #f0f0f0;
-
- &:last-child {
- margin-bottom: 0;
- padding-bottom: 0;
- border-bottom: none;
- }
-}
-
-.section-title {
- font-size: 15px;
- font-weight: 600;
- color: #409eff;
- margin: 0 0 15px 0;
- padding-left: 10px;
- border-left: 4px solid #409eff;
- line-height: 1.2;
-}
-
-/* 琛ㄥ崟琛岄棿璺� */
-:deep(.el-form-item) {
- margin-bottom: 20px;
-
- .el-form-item__label {
- font-weight: 500;
- color: #606266;
- padding-right: 10px;
- }
-
- .el-form-item__content {
- line-height: 1.5;
- }
-}
-
-/* 琛ㄥ崟杈撳叆妗嗘牱寮� */
-:deep(.el-input__inner) {
- height: 36px;
- line-height: 36px;
border-radius: 4px;
- transition: all 0.3s ease;
-
- &:focus {
- border-color: #409eff;
- box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.2);
- }
-
- &:disabled {
- background-color: #f5f7fa;
- border-color: #e4e7ed;
- color: #c0c4cc;
- cursor: not-allowed;
- }
-}
-
-/* 鏂囨湰鍩熸牱寮� */
-:deep(.el-textarea__inner) {
- min-height: 80px;
- border-radius: 4px;
- transition: all 0.3s ease;
-
- &:focus {
- border-color: #409eff;
- box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.2);
- }
-
- &:disabled {
- background-color: #f5f7fa;
- border-color: #e4e7ed;
- color: #c0c4cc;
- cursor: not-allowed;
- }
-}
-
-/* 閫夋嫨妗嗘牱寮� */
-:deep(.el-select) {
- width: 100%;
-
- .el-input__inner {
- border-radius: 4px;
- }
-
- &.is-disabled {
- .el-input__inner {
- background-color: #f5f7fa;
- border-color: #e4e7ed;
- color: #c0c4cc;
- }
- }
-}
-
-/* 鏃ユ湡閫夋嫨鍣ㄦ牱寮� */
-:deep(.el-date-editor) {
- width: 100%;
-
- &.el-input__inner {
- border-radius: 4px;
- }
-
- &.is-disabled {
- .el-input__inner {
- background-color: #f5f7fa;
- border-color: #e4e7ed;
- color: #c0c4cc;
- }
- }
-}
-
-/* 鍝嶅簲寮忚皟鏁� */
-@media (max-width: 768px) {
- .recipient-detail-expand {
- padding: 15px;
- }
-
- .recipient-form {
- padding: 15px;
- }
-
- .attachment-header {
- flex-wrap: wrap;
- }
-
- .attachment-tip {
- width: 100%;
- margin-top: 8px;
- margin-left: 0;
- }
-
- .form-section {
- margin-bottom: 20px;
- padding-bottom: 15px;
- }
-
- :deep(.el-form-item) {
- margin-bottom: 15px;
- }
-
- .section-title {
- font-size: 14px;
- margin-bottom: 12px;
- }
-}
-
-:deep(.el-divider) {
margin: 20px 0;
- background-color: #e4e7ed;
}
-/* 琛ㄥ崟鏍囩鍜岃緭鍏ユ鏍峰紡 */
-:deep(.el-form-item__label) {
- font-weight: 500;
- color: #606266;
-}
-
-:deep(.el-input__inner:focus) {
- border-color: #409eff;
- box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.2);
-}
-
-/* 鎸夐挳鏍峰紡浼樺寲 */
-:deep(.el-button--primary) {
- background: linear-gradient(135deg, #409eff 0%, #3375e0 100%);
- border: none;
- border-radius: 4px;
- transition: all 0.3s ease;
-}
-
-:deep(.el-button--primary:hover) {
- transform: translateY(-1px);
- box-shadow: 0 4px 12px rgba(64, 158, 255, 0.4);
-}
-
-/* 搴曢儴鎿嶄綔鎸夐挳 */
+/* 瀵硅瘽妗嗗簳閮ㄦ寜閽� */
.dialog-footer {
margin-top: 20px;
text-align: center;
@@ -1993,49 +1257,23 @@
min-width: 120px;
}
-/* 绌虹姸鎬佹牱寮� */
-.empty-utilization {
- text-align: center;
- padding: 40px 0;
- color: #909399;
- background: #fafafa;
- border-radius: 4px;
- margin: 20px 0;
+/* 琛ㄦ牸琛屾牱寮� */
+:deep(.warning-row) {
+ background-color: #fff7e6 !important;
}
-/* 鏂囦欢淇℃伅鏍峰紡 */
-.file-info {
- display: flex;
- align-items: center;
- padding: 5px 0;
+:deep(.warning-row:hover) {
+ background-color: #ffecc2 !important;
}
-.file-info i {
- font-size: 18px;
- margin-right: 10px;
-}
-
-/* 骞虫澘璁惧閫傞厤 */
-@media (max-width: 1024px) {
- .organ-utilization-detail {
- padding: 15px;
+/* 鍝嶅簲寮忚璁� */
+@media (max-width: 768px) {
+ .organ-procurement-detail {
+ padding: 10px;
}
- :deep(.el-col) {
+ .procurement-stats .el-col {
margin-bottom: 10px;
- }
-}
-
-/* 鎵嬫満璁惧閫傞厤 */
-
-/* 瓒呭皬灞忓箷璁惧 */
-@media (max-width: 480px) {
- .organ-utilization-detail {
- padding: 5px;
- }
-
- :deep(.el-card__header) {
- padding: 10px 15px;
}
}
</style>
--
Gitblit v1.9.3