From 0c03027d7f238bf5beb98e85463f53f0bd92bbaa Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期一, 20 四月 2026 17:56:01 +0800
Subject: [PATCH] 青岛维护
---
src/views/business/appear/index.vue | 1681 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 1,472 insertions(+), 209 deletions(-)
diff --git a/src/views/business/appear/index.vue b/src/views/business/appear/index.vue
index 48ac893..4c578c3 100644
--- a/src/views/business/appear/index.vue
+++ b/src/views/business/appear/index.vue
@@ -8,33 +8,33 @@
:inline="true"
class="demo-form-inline"
>
- <el-form-item label="鎹愮尞缂栧彿" prop="donorNo">
+ <el-form-item label="妗堜緥缂栧彿" prop="caseNo">
<el-input
- v-model="queryParams.donorNo"
- placeholder="璇疯緭鍏ユ崘鐚紪鍙�"
+ v-model="queryParams.caseNo"
+ placeholder="璇疯緭鍏ユ渚嬬紪鍙�"
clearable
style="width: 200px"
/>
</el-form-item>
- <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"
/>
</el-form-item>
- <el-form-item label="妗堜緥鐘舵��" prop="status">
+ <el-form-item label="妗堜緥鐘舵��" prop="reportStatus">
<el-select
- v-model="queryParams.status"
+ v-model="queryParams.reportStatus"
placeholder="璇烽�夋嫨鐘舵��"
clearable
style="width: 200px"
>
<el-option label="鍏ㄩ儴" value="" />
- <el-option label="寰呭鎵�" value="0" />
- <el-option label="宸查�氳繃" value="1" />
- <el-option label="宸茬粓姝�" value="2" />
+ <el-option label="宸查槄璇�" value="2" />
+ <el-option label="宸插悓鎰�" value="3" />
+ <el-option label="宸查┏鍥�" value="4" />
</el-select>
</el-form-item>
<el-form-item>
@@ -48,11 +48,11 @@
<!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
<el-row :gutter="10" class="mb8">
- <el-col :span="1.5">
+ <!-- <el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" @click="handleAdd"
>鏂板妗堜緥</el-button
>
- </el-col>
+ </el-col> -->
<el-col :span="1.5">
<el-button
@@ -67,73 +67,93 @@
</el-row>
<!-- 鏁版嵁琛ㄦ牸 -->
+ <!-- 鏁版嵁琛ㄦ牸 -->
<el-table
v-loading="loading"
:data="caseList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" />
- <!-- <el-table-column label="搴忓彿" type="index" width="60" align="center"/>
- <el-table-column label="鎹愮尞缂栧彿" align="center" prop="donorNo" width="140"/> -->
+ <el-table-column
+ label="妗堜緥缂栧彿"
+ align="center"
+ prop="caseNo"
+ width="150"
+ fixed
+ />
<el-table-column
label="涓婃姤鏃堕棿"
align="center"
- prop="reportTime"
+ prop="reporttime"
width="160"
/>
-
<el-table-column
label="鎹愮尞鑰呭鍚�"
align="center"
- prop="donorName"
+ prop="name"
width="100"
/>
- <el-table-column label="鎬у埆" align="center" prop="gender" width="80">
- <template slot-scope="scope">
- <dict-tag :options="genderOptions" :value="scope.row.gender" />
+ <el-table-column label="鎬у埆" align="center" prop="sex" width="80">
+ <template #default="scope">
+ <dict-tag :options="dict.type.sys_user_sex" :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="bloodTypeOptions" :value="scope.row.bloodType" />
+ <template #default="scope">
+ <dict-tag
+ :options="dict.type.sys_BloodType"
+ :value="scope.row.bloodType"
+ />
</template>
</el-table-column>
-
- <el-table-column
+ <el-table-column
label="GCS璇勫垎"
align="center"
- prop="gscScore"
+ prop="gcsScore"
width="80"
show-overflow-tooltip
/>
<el-table-column
label="鐤剧梾璇婃柇"
align="center"
- prop="diagnosis"
+ prop="diagnosisname"
min-width="200"
show-overflow-tooltip
/>
<el-table-column
- label="涓婃姤鍖婚櫌"
+ label="娌荤枟鍖婚櫌"
align="center"
- prop="hospitalName"
+ prop="treatmenthospitalname"
width="150"
/>
- <el-table-column label="鐘舵��" align="center" prop="status" width="100">
- <template slot-scope="scope">
- <el-tag :type="scope.row.status | statusFilter">
- {{ scope.row.status | statusTextFilter }}
+ <el-table-column
+ label="鐘舵��"
+ align="center"
+ prop="reportStatus"
+ width="100"
+ >
+ <template #default="scope">
+ <el-tag :type="scope.row.reportStatus | statusFilter">
+ {{ scope.row.reportStatus | statusTextFilter }}
+ </el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column label="杞繍鐘舵��" align="center" width="100">
+ <template #default="scope">
+ <el-tag :type="getTransportStatusTag(scope.row)">
+ {{ getTransportStatusText(scope.row) }}
</el-tag>
</template>
</el-table-column>
<el-table-column
label="鎿嶄綔"
align="center"
+ fixed="right"
class-name="small-padding fixed-width"
- width="200"
+ width="350"
>
- <template slot-scope="scope">
+ <template #default="scope">
<el-button
size="mini"
type="text"
@@ -141,15 +161,37 @@
@click="handleDetail(scope.row)"
>璇︽儏</el-button
>
-
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-edit"
+ @click="handleEdit(scope.row)"
+ v-if="
+ scope.row.reportStatus !== '3' &&
+ scope.row.reportStatus !== '4' &&
+ scope.row.delFlag === 0
+ "
+ >缂栬緫</el-button
+ >
<el-button
size="mini"
type="text"
icon="el-icon-check"
@click="handleApprove(scope.row)"
- v-if="scope.row.status === '0'"
+ v-if="scope.row.reportStatus === '2' && scope.row.delFlag === 0"
>瀹℃壒</el-button
>
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-truck"
+ :type="shouldShowTransportButton(scope.row) ? 'primary' : 'text'"
+ @click="handleTransport(scope.row)"
+ v-if="shouldShowTransportButton(scope.row)"
+ :disabled="!canGoToTransport(scope.row)"
+ >
+ {{ getTransportButtonText(scope.row) }}
+ </el-button>
</template>
</el-table-column>
</el-table>
@@ -175,7 +217,6 @@
</el-dialog>
<!-- 瀹℃壒寮规 -->
- <!-- 瀹℃壒寮规浼樺寲 -->
<el-dialog
title="妗堜緥瀹℃壒"
:visible.sync="approveOpen"
@@ -205,15 +246,15 @@
>
<el-form-item label="瀹℃壒缁撴灉" prop="approveResult">
<el-radio-group v-model="approveForm.approveResult">
- <el-radio label="1">閫氳繃</el-radio>
- <el-radio label="2">缁堟</el-radio>
+ <el-radio label="3">鍚屾剰</el-radio>
+ <el-radio label="4">椹冲洖</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="瀹℃壒鎰忚" prop="approveOpinion">
<el-input
type="textarea"
v-model="approveForm.approveOpinion"
- placeholder="璇疯緭鍏ヨ缁嗙殑瀹℃壒鎰忚锛屽寘鎷�氳繃鎴栫粓姝㈢殑鐞嗙敱"
+ placeholder="璇疯緭鍏ヨ缁嗙殑瀹℃壒鎰忚锛屽寘鎷�氳繃鎴栭┏鍥炵殑鐞嗙敱"
:rows="6"
maxlength="500"
show-word-limit
@@ -228,20 +269,709 @@
<el-button type="primary" @click="submitApprove">纭畾</el-button>
</div>
</el-dialog>
+
+ <!-- 鏂板/缂栬緫妗堜緥寮规 -->
+ <el-dialog
+ :title="`${isEditing ? '缂栬緫' : '鏂板'}妗堜緥`"
+ :visible.sync="editOpen"
+ width="68%"
+ append-to-body
+ :close-on-click-modal="false"
+ @close="handleEditClose"
+ >
+ <el-form
+ ref="editForm"
+ :model="editForm"
+ :rules="editRules"
+ label-width="120px"
+ >
+ <!-- 鍩烘湰淇℃伅 -->
+ <el-card class="form-section" shadow="never">
+ <div slot="header" class="section-header">
+ <i
+ class="el-icon-user"
+ style="color: #409EFF; margin-right: 8px;"
+ ></i>
+ <span>鍩烘湰淇℃伅</span>
+ </div>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="妗堜緥缂栧彿" prop="caseNo">
+ <el-input
+ v-model="editForm.caseNo"
+ placeholder="璇疯緭鍏ユ渚嬬紪鍙�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎹愮尞鑰呭鍚�" prop="name">
+ <el-input
+ v-model="editForm.name"
+ placeholder="璇疯緭鍏ユ崘鐚�呭鍚�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鎬у埆" prop="sex">
+ <el-select
+ v-model="editForm.sex"
+ placeholder="璇烽�夋嫨鎬у埆"
+ style="width: 100%"
+ >
+ <el-option label="鐢�" value="0" />
+ <el-option label="濂�" value="1" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="骞撮緞" prop="age">
+ <el-input-number
+ v-model="editForm.age"
+ :min="0"
+ :max="120"
+ placeholder="璇疯緭鍏ュ勾榫�"
+ style="width: 100%"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="骞撮緞鍗曚綅" prop="ageunit">
+ <el-select
+ v-model="editForm.ageunit"
+ placeholder="璇烽�夋嫨骞撮緞鍗曚綅"
+ style="width: 100%"
+ >
+ <el-option label="宀�" value="year" />
+ <el-option label="鏈�" value="month" />
+ <el-option label="澶�" value="day" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="琛�鍨�" prop="bloodType">
+ <el-select
+ v-model="editForm.bloodType"
+ placeholder="璇烽�夋嫨琛�鍨�"
+ 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-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="Rh闃存��" prop="rhYin">
+ <el-radio-group v-model="editForm.rhYin">
+ <el-radio label="0">鍚�</el-radio>
+ <el-radio label="1">鏄�</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍑虹敓鏃ユ湡" prop="birthday">
+ <el-date-picker
+ v-model="editForm.birthday"
+ type="date"
+ placeholder="閫夋嫨鍑虹敓鏃ユ湡"
+ value-format="yyyy-MM-dd"
+ style="width: 100%"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="璇佷欢绫诲瀷" prop="idcardtype">
+ <el-select
+ v-model="editForm.idcardtype"
+ placeholder="璇烽�夋嫨璇佷欢绫诲瀷"
+ style="width: 100%"
+ >
+ <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="12">
+ <el-form-item label="璇佷欢鍙风爜" prop="idcardno">
+ <el-input
+ v-model="editForm.idcardno"
+ placeholder="璇疯緭鍏ヨ瘉浠跺彿鐮�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="姘戞棌" prop="nation">
+ <el-input v-model="editForm.nation" placeholder="璇疯緭鍏ユ皯鏃�" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍥界睄" prop="nationality">
+ <el-input
+ v-model="editForm.nationality"
+ placeholder="璇疯緭鍏ュ浗绫�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="绫嶈疮" prop="nativeplace">
+ <el-input
+ v-model="editForm.nativeplace"
+ placeholder="璇疯緭鍏ョ睄璐�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瀛﹀巻" prop="education">
+ <el-input
+ v-model="editForm.education"
+ placeholder="璇疯緭鍏ュ鍘�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鑱屼笟" prop="occupation">
+ <el-input
+ v-model="editForm.occupation"
+ placeholder="璇疯緭鍏ヨ亴涓�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鑱旂郴鐢佃瘽" prop="phone">
+ <el-input
+ v-model="editForm.phone"
+ placeholder="璇疯緭鍏ヨ仈绯荤數璇�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-card>
+
+ <!-- 鍦板潃淇℃伅 -->
+ <el-card class="form-section" shadow="never">
+ <div slot="header" class="section-header">
+ <i
+ class="el-icon-location-information"
+ style="color: #67C23A; margin-right: 8px;"
+ ></i>
+ <span>鍦板潃淇℃伅</span>
+ </div>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鎴风睄鍦板潃鐪�">
+ <el-input
+ v-model="editForm.registerprovincename"
+ placeholder="璇疯緭鍏ユ埛绫嶅湴鍧�鐪�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎴风睄鍦板潃甯�">
+ <el-input
+ v-model="editForm.registercityname"
+ placeholder="璇疯緭鍏ユ埛绫嶅湴鍧�甯�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鎴风睄琛楅亾">
+ <el-input
+ v-model="editForm.registertownname"
+ placeholder="璇疯緭鍏ユ埛绫嶈閬�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎴风睄绀惧尯">
+ <el-input
+ v-model="editForm.registercommunityname"
+ placeholder="璇疯緭鍏ユ埛绫嶇ぞ鍖�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-form-item label="鎴风睄璇︾粏鍦板潃" prop="registeraddress">
+ <el-input
+ v-model="editForm.registeraddress"
+ type="textarea"
+ :rows="2"
+ placeholder="璇疯緭鍏ヨ缁嗙殑鎴风睄鍦板潃"
+ />
+ </el-form-item>
+
+ <el-divider>鐜颁綇鍦板潃</el-divider>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鐜颁綇鍦板潃鐪�">
+ <el-input
+ v-model="editForm.residenceprovincename"
+ placeholder="璇疯緭鍏ョ幇浣忓湴鍧�鐪�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鐜颁綇鍦板潃甯�/鍖�">
+ <el-input
+ v-model="editForm.residencecountyname"
+ placeholder="璇疯緭鍏ョ幇浣忓湴鍧�甯�/鍖�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鐜颁綇鍦板潃琛楅亾">
+ <el-input
+ v-model="editForm.residencetownname"
+ placeholder="璇疯緭鍏ョ幇浣忓湴鍧�琛楅亾"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鐜颁綇鍦板潃绀惧尯">
+ <el-input
+ v-model="editForm.residencecommunityname"
+ placeholder="璇疯緭鍏ョ幇浣忓湴鍧�绀惧尯"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-form-item label="鐜颁綇璇︾粏鍦板潃" prop="residenceaddress">
+ <el-input
+ v-model="editForm.residenceaddress"
+ type="textarea"
+ :rows="2"
+ placeholder="璇疯緭鍏ヨ缁嗙殑鐜颁綇鍦板潃"
+ />
+ </el-form-item>
+ </el-card>
+
+ <!-- 鍖荤枟淇℃伅 -->
+ <el-card class="form-section" shadow="never">
+ <div slot="header" class="section-header">
+ <i
+ class="el-icon-first-aid-kit"
+ style="color: #E6A23C; margin-right: 8px;"
+ ></i>
+ <span>鍖荤枟淇℃伅</span>
+ </div>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鐤剧梾璇婃柇" prop="diagnosisname">
+ <el-input
+ v-model="editForm.diagnosisname"
+ placeholder="璇疯緭鍏ョ柧鐥呰瘖鏂悕绉�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="GCS璇勫垎" prop="gcsScore">
+ <el-input
+ v-model="editForm.gcsScore"
+ placeholder="璇疯緭鍏CS璇勫垎"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-form-item label="鐥呮儏姒傚喌" prop="illnessoverview">
+ <el-input
+ v-model="editForm.illnessoverview"
+ type="textarea"
+ :rows="3"
+ placeholder="璇疯緭鍏ョ梾鎯呮鍐�"
+ maxlength="500"
+ show-word-limit
+ />
+ </el-form-item>
+
+ <el-form-item label="鐥呬汉鐘跺喌" prop="patientstate">
+ <el-input
+ v-model="editForm.patientstate"
+ type="textarea"
+ :rows="2"
+ placeholder="璇疯緭鍏ョ梾浜虹姸鍐�"
+ maxlength="200"
+ show-word-limit
+ />
+ </el-form-item>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="浼犳煋鐥呮儏鍐�" prop="infectious">
+ <el-input
+ v-model="editForm.infectious"
+ placeholder="璇疯緭鍏ヤ紶鏌撶梾鎯呭喌"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="浼犳煋鐥呭叾浠栬鏄�">
+ <el-input
+ v-model="editForm.infectiousOther"
+ placeholder="璇疯緭鍏ヤ紶鏌撶梾鍏朵粬璇存槑"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-form-item label="鏄惁闇�瑕佽浆杩�" prop="isTransport">
+ <el-radio-group v-model="editForm.isTransport">
+ <el-radio label="1">涓嶉渶瑕�</el-radio>
+ <el-radio label="2">闇�瑕�</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-card>
+
+ <!-- 鍖婚櫌淇℃伅 -->
+ <el-card class="form-section" shadow="never">
+ <div slot="header" class="section-header">
+ <i
+ class="el-icon-office-building"
+ style="color: #909399; margin-right: 8px;"
+ ></i>
+ <span>鍖婚櫌淇℃伅</span>
+ </div>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="娌荤枟鍖婚櫌" prop="treatmenthospitalname">
+ <el-input
+ v-model="editForm.treatmenthospitalname"
+ placeholder="璇疯緭鍏ユ不鐤楀尰闄㈠悕绉�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="娌荤枟绉戝" prop="treatmentdeptname">
+ <el-input
+ v-model="editForm.treatmentdeptname"
+ placeholder="璇疯緭鍏ユ不鐤楃瀹ゅ悕绉�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="浣忛櫌鍙�" prop="inpatientno">
+ <el-input
+ v-model="editForm.inpatientno"
+ placeholder="璇疯緭鍏ヤ綇闄㈠彿"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="閮ㄩ棬鍚嶇О" prop="deptName">
+ <el-input
+ v-model="editForm.deptName"
+ placeholder="璇疯緭鍏ラ儴闂ㄥ悕绉�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="閮ㄩ棬缂栧彿" prop="deptNo">
+ <el-input
+ v-model="editForm.deptNo"
+ placeholder="璇疯緭鍏ラ儴闂ㄧ紪鍙�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="涓婃姤鍖婚櫌" prop="toHospital">
+ <el-input
+ v-model="editForm.toHospital"
+ placeholder="璇疯緭鍏ヤ笂鎶ョ殑鍖婚櫌"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-card>
+
+ <!-- 涓婃姤淇℃伅 -->
+ <el-card class="form-section" shadow="never">
+ <div slot="header" class="section-header">
+ <i
+ class="el-icon-s-data"
+ style="color: #F56C6C; margin-right: 8px;"
+ ></i>
+ <span>涓婃姤淇℃伅</span>
+ </div>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鎶ュ憡鑰呭鍚�" prop="infoName">
+ <el-input
+ v-model="editForm.infoName"
+ placeholder="璇疯緭鍏ユ姤鍛婅�呭鍚�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎶ュ憡鑰呯紪鍙�" prop="infoNo">
+ <el-input
+ v-model="editForm.infoNo"
+ placeholder="璇疯緭鍏ユ姤鍛婅�呯紪鍙�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鎶ュ憡鑰呯數璇�" prop="reporterphone">
+ <el-input
+ v-model="editForm.reporterphone"
+ placeholder="璇疯緭鍏ユ姤鍛婅�呰仈绯荤數璇�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍗忚皟鍛樺鍚�" prop="coordinatorName">
+ <el-input
+ v-model="editForm.coordinatorName"
+ placeholder="璇疯緭鍏ュ崗璋冨憳濮撳悕"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鍗忚皟鍛樼紪鍙�" prop="coordinatorNo">
+ <el-input
+ v-model="editForm.coordinatorNo"
+ placeholder="璇疯緭鍏ュ崗璋冨憳缂栧彿"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鏄惁缁堟妗堜緥" prop="terminationCase">
+ <el-radio-group v-model="editForm.terminationCase">
+ <el-radio label="0">杩涜涓�</el-radio>
+ <el-radio label="1">宸茬粓姝�</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-form-item label="涓婃姤鐘舵��" prop="reportStatus">
+ <el-select
+ v-model="editForm.reportStatus"
+ placeholder="璇烽�夋嫨涓婃姤鐘舵��"
+ style="width: 100%"
+ :disabled="isEditing"
+ >
+ <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-card>
+
+ <!-- 闄勪欢淇℃伅 -->
+ <el-card class="form-section" shadow="never">
+ <div slot="header" class="section-header">
+ <i
+ class="el-icon-folder"
+ style="color: #409EFF; margin-right: 8px;"
+ ></i>
+ <span>闄勪欢淇℃伅</span>
+ </div>
+
+ <div class="attachment-section">
+ <div class="attachment-header">
+ <i class="el-icon-paperclip"></i>
+ <span class="attachment-title">闄勪欢涓婁紶</span>
+ <span class="attachment-tip"
+ >鏀寔涓婁紶鐥呭巻銆佹楠屾姤鍛婄瓑鏂囦欢 (鏈�澶歿{
+ attachmentLimit
+ }}涓�)</span
+ >
+ </div>
+
+ <!-- 浣跨敤 UploadAttachment 缁勪欢 -->
+ <UploadAttachment
+ ref="uploadAttachment"
+ :file-list="attachmentFileList"
+ :limit="attachmentLimit"
+ :accept="attachmentAccept"
+ @change="handleAttachmentChange"
+ @upload-success="handleUploadSuccess"
+ @upload-error="handleUploadError"
+ @remove="handleAttachmentRemove"
+ />
+ </div>
+
+ <!-- 闄勪欢鍒楄〃 -->
+ <div
+ class="attachment-list"
+ v-if="editForm.annexfilesList && editForm.annexfilesList.length > 0"
+ >
+ <div class="list-title">
+ 宸蹭笂浼犻檮浠� ({{ editForm.annexfilesList.length }})
+ </div>
+ <el-table
+ :data="editForm.annexfilesList"
+ style="width: 100%"
+ size="small"
+ border
+ >
+ <el-table-column label="鏂囦欢鍚�" min-width="200">
+ <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="100">
+ <template #default="scope">
+ <el-tag size="small">{{
+ getFileType(scope.row.fileName)
+ }}</el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column label="鍒涘缓鏃堕棿" width="160">
+ <template #default="scope">
+ <span>{{ formatDateTime(scope.row.createTime) }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="澶囨敞"
+ min-width="150"
+ show-overflow-tooltip
+ >
+ <template #default="scope">
+ <span>{{ scope.row.remart || "鏃�" }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" width="200" fixed="right">
+ <template #default="scope">
+ <el-button
+ size="mini"
+ type="primary"
+ @click="handlePreview(scope.row)"
+ >
+ 棰勮
+ </el-button>
+ <el-button
+ size="mini"
+ type="danger"
+ @click="handleRemoveAttachment(scope.$index)"
+ >
+ 鍒犻櫎
+ </el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ </el-card>
+
+ <!-- 澶囨敞淇℃伅 -->
+ <el-card class="form-section" shadow="never">
+ <div slot="header" class="section-header">
+ <i
+ class="el-icon-edit"
+ style="color: #67C23A; margin-right: 8px;"
+ ></i>
+ <span>澶囨敞淇℃伅</span>
+ </div>
+ <el-form-item prop="remark">
+ <el-input
+ v-model="editForm.remark"
+ type="textarea"
+ :rows="4"
+ placeholder="璇疯緭鍏ュ娉ㄤ俊鎭�"
+ maxlength="500"
+ show-word-limit
+ />
+ </el-form-item>
+ </el-card>
+ </el-form>
+
+ <div slot="footer" class="dialog-footer">
+ <el-button @click="handleEditClose">鍙栨秷</el-button>
+ <el-button type="primary" :loading="saveLoading" @click="handleSave"
+ >淇濆瓨</el-button
+ >
+ </div>
+ </el-dialog>
+
+ <!-- 鏂囦欢棰勮寮圭獥 -->
+ <FilePreviewDialog
+ :visible="previewVisible"
+ :file="currentPreviewFile"
+ @close="previewVisible = false"
+ @download="handleDownload"
+ />
</div>
</template>
<script>
import CaseDetail from "./caseDetail";
-import CaseDetailPreview from "./CaseDetailPreview";
+import UploadAttachment from "@/components/UploadAttachment";
+import FilePreviewDialog from "@/components/FilePreviewDialog";
+import {
+ donateList,
+ donateInfo,
+ donateDel,
+ donateEdit,
+ donateAdd
+} from "@/api/businessApi/index";
+import dayjs from "dayjs";
+
export default {
name: "CaseList",
- components: { CaseDetail, CaseDetailPreview },
-
+ components: {
+ CaseDetail,
+ UploadAttachment,
+ FilePreviewDialog
+ },
+ dicts: ["sys_user_sex", "sys_BloodType"],
data() {
return {
// 閬僵灞�
loading: false,
+ saveLoading: false,
// 閫変腑鏁扮粍
ids: [],
// 闈炲崟涓鐢�
@@ -256,34 +986,26 @@
detailOpen: false,
// 瀹℃壒寮规鏄惁鏄剧ず
approveOpen: false,
+ // 缂栬緫寮规鏄惁鏄剧ず
+ editOpen: false,
+ // 缂栬緫鐘舵��
+ isEditing: false,
// 璇︽儏寮规鏍囬
detailTitle: "",
// 褰撳墠鎿嶄綔鐨勬渚�
currentCase: {},
- // 鎬у埆閫夐」
- genderOptions: [
- { value: "0", label: "鐢�" },
- { value: "1", label: "濂�" }
- ],
- // 琛�鍨嬮�夐」
- bloodTypeOptions: [
- { value: "A", label: "A鍨�" },
- { value: "B", label: "B鍨�" },
- { value: "O", label: "O鍨�" },
- { value: "AB", label: "AB鍨�" }
- ],
// 鏌ヨ鍙傛暟
queryParams: {
pageNum: 1,
pageSize: 10,
- donorNo: undefined,
- donorName: undefined,
- status: undefined
+ caseNo: undefined,
+ name: undefined,
+ reportStatus: undefined
},
// 瀹℃壒琛ㄥ崟
approveForm: {
- caseId: null,
- approveResult: "1",
+ id: null,
+ approveResult: "3",
approveOpinion: ""
},
// 瀹℃壒琛ㄥ崟楠岃瘉
@@ -294,25 +1016,56 @@
approveOpinion: [
{ required: true, message: "璇疯緭鍏ュ鎵规剰瑙�", trigger: "blur" }
]
- }
+ },
+ // 缂栬緫琛ㄥ崟
+ editForm: this.getDefaultFormData(),
+ // 琛ㄥ崟楠岃瘉瑙勫垯
+ editRules: {
+ caseNo: [
+ { required: true, message: "璇疯緭鍏ユ渚嬬紪鍙�", trigger: "blur" }
+ ],
+ name: [
+ { required: true, message: "璇疯緭鍏ユ崘鐚�呭鍚�", trigger: "blur" }
+ ],
+ sex: [{ required: true, message: "璇烽�夋嫨鎬у埆", trigger: "change" }],
+ age: [{ required: true, message: "璇疯緭鍏ュ勾榫�", trigger: "blur" }],
+ diagnosisname: [
+ { required: true, message: "璇疯緭鍏ョ柧鐥呰瘖鏂�", trigger: "blur" }
+ ],
+ treatmenthospitalname: [
+ { required: true, message: "璇疯緭鍏ユ不鐤楀尰闄�", trigger: "blur" }
+ ],
+ reportStatus: [
+ { required: true, message: "璇烽�夋嫨涓婃姤鐘舵��", trigger: "change" }
+ ]
+ },
+ // 闄勪欢鐩稿叧閰嶇疆
+ attachmentLimit: 10,
+ attachmentAccept: ".pdf,.jpg,.jpeg,.png,.doc,.docx,.xls,.xlsx",
+ attachmentFileList: [],
+ // 棰勮鐩稿叧
+ previewVisible: false,
+ currentPreviewFile: null
};
},
filters: {
- statusFilter(status) {
+ statusFilter(reportStatus) {
const statusMap = {
- "0": "warning", // 寰呭鎵�
- "1": "success", // 宸查�氳繃
- "2": "danger" // 宸茬粓姝�
+ "1": "info", // 宸蹭笂鎶�
+ "2": "warning", // 宸查槄璇伙紙寰呭鎵癸級
+ "3": "success", // 宸插悓鎰�
+ "4": "danger" // 宸查┏鍥�
};
- return statusMap[status];
+ return statusMap[reportStatus] || "info";
},
- statusTextFilter(status) {
+ statusTextFilter(reportStatus) {
const statusMap = {
- "0": "寰呭鎵�",
- "1": "宸查�氳繃",
- "2": "宸茬粓姝�"
+ "1": "宸蹭笂鎶�",
+ "2": "宸查槄璇�",
+ "3": "宸插悓鎰�",
+ "4": "宸查┏鍥�"
};
- return statusMap[status];
+ return statusMap[reportStatus] || "鏈煡鐘舵��";
}
},
created() {
@@ -320,197 +1073,707 @@
},
methods: {
/** 鏌ヨ妗堜緥鍒楄〃 */
- getList() {
+ async getList() {
this.loading = true;
- // 妯℃嫙API璋冪敤寤惰繜
- setTimeout(() => {
- // 娴嬭瘯鏁版嵁
- this.caseList = [
- {
- id: 1,
- donorNo: "DON20241219001",
- donorName: "寮犱笁",
- gender: "2",
- age: 38,
- bloodType: "A",
- gscScore:'1',
- diagnosis:
- "鑴戝浼ゅ鑷磋剳姝讳骸锛岀粡鎶㈡晳鏃犳晥瀹e竷鑴戞浜°�傚灞炲悓鎰忓櫒瀹樻崘鐚��",
- hospitalName: "闈掑矝澶у闄勫睘鍖婚櫌",
- status: "0",
- reportTime: "2024-12-19 09:30:00",
- reporterName: "鏉庡尰鐢�",
- idCardNo: "370203198510123456",
- nation: "姹夋棌",
- phone: "13800138000",
- address: "灞变笢鐪侀潚宀涘競甯傚崡鍖洪娓腑璺�100鍙�",
- inpatientNo: "ZY20241219001",
- departmentName: "绁炵粡澶栫",
- doctorName: "鐜嬩富浠�",
- infectiousDisease: "鏃�",
- medicalRecord:
- "鎮h�呭洜浜ら�氫簨鏁呭鑷翠弗閲嶈剳澶栦激锛岀粡鎶㈡晳鏃犳晥瀹e竷鑴戞浜°��",
- hospitalLevel: "涓夌骇鐢茬瓑",
- contactPerson: "寮犳姢澹�",
- contactPhone: "13900139000",
- hospitalAddress: "灞变笢鐪侀潚宀涘競甯傚崡鍖烘睙鑻忚矾1鍙�"
- },
- {
- id: 2,
- donorNo: "DON20241218001",
- donorName: "鏉庡洓",
- gender: "1",
- age: 45,
- bloodType: "O",
- gscScore:'3',
- diagnosis: "鎬ユ�у績鑲屾姝伙紝蹇冭剰鍔熻兘琛扮",
- hospitalName: "闈掑矝甯傜珛鍖婚櫌",
- status: "1",
- reportTime: "2024-12-18 14:20:00",
- approveTime: "2024-12-18 16:30:00",
- reporterName: "鍒樺尰鐢�",
- approverName: "瀹℃牳涓撳憳A",
- approveOpinion: "璧勬枡榻愬叏锛岀鍚堟崘鐚潯浠讹紝鍚屾剰閫氳繃銆�"
- },
- {
- id: 3,
- donorNo: "DON20241217001",
- donorName: "鐜嬩簲",
- gender: "2",
- age: 52,
- bloodType: "B",
- gscScore:'6',
- diagnosis: "棰呭唴鍑鸿锛岃剳骞插姛鑳戒抚澶�",
- hospitalName: "闈掑矝鐪肩鍖婚櫌",
- status: "2",
- reportTime: "2024-12-17 10:15:00",
- approveTime: "2024-12-17 14:20:00",
- reporterName: "闄堝尰鐢�",
- approverName: "瀹℃牳涓撳憳B",
- approveOpinion: "瀹跺睘鍚屾剰涔︿笉瀹屾暣锛岄渶琛ュ厖鏉愭枡鍚庨噸鏂版彁浜ゃ��"
- },
- {
- id: 4,
- donorNo: "DON20241216001",
- donorName: "璧靛叚",
- gender: "1",
- age: 28,
- bloodType: "AB",
- gscScore:'10',
- diagnosis: "閲嶅瀷棰呰剳鎹熶激锛屽鍣ㄥ畼鍔熻兘琛扮",
- hospitalName: "闈掑矝鍎跨鍖婚櫌",
- status: "0",
- reportTime: "2024-12-16 16:45:00",
- reporterName: "瀛欏尰鐢�"
- }
- ];
- this.total = this.caseList.length;
+ try {
+ const response = await donateList(this.queryParams);
+ this.caseList = response.rows || response.data || [];
+ this.total = response.total || this.caseList.length;
+ } catch (error) {
+ console.error("鑾峰彇妗堜緥鍒楄〃澶辫触:", error);
+ this.$modal.msgError("鑾峰彇妗堜緥鍒楄〃澶辫触");
+ this.caseList = [];
+ this.total = 0;
+ } finally {
this.loading = false;
- }, 500);
+ }
},
+ // 杞繍------------------
+ /** 鍒ゆ柇鏄惁闇�瑕佹樉绀鸿浆杩愭寜閽� */
+ shouldShowTransportButton(row) {
+ // 鍙湁宸插悓鎰忕殑妗堜緥鎵嶈兘杩涜杞繍鎿嶄綔
+ // return row.reportStatus == "3" && row.delFlag == 0;
+ return row.reportStatus != "4";
+ },
+
+ /** 鍒ゆ柇鏄惁鍙互璺宠浆鍒拌浆杩愬崟 */
+ canGoToTransport(row) {
+ // 闇�瑕佽浆杩愶紙isTransport === "2"锛変笖娌℃湁杞繍淇℃伅锛坰erviceTransport涓嶅瓨鍦ㄦ垨涓虹┖鏁扮粍锛�
+ return row.isTransport == "2" && row.serviceTransport;
+ },
+
+ /** 鑾峰彇杞繍鎸夐挳鏂囨湰 */
+ getTransportButtonText(row) {
+ if (row.isTransport == "2") {
+ if (
+ row.serviceTransport &&
+ Array.isArray(row.serviceTransport) &&
+ row.serviceTransport.length > 0
+ ) {
+ return "鏌ョ湅杞繍鍗�";
+ } else {
+ return "鍓嶅線杞繍鍗�";
+ }
+ }
+ return "杞繍";
+ },
+
+ /** 鑾峰彇杞繍鐘舵�佹爣绛炬牱寮� */
+ getTransportStatusTag(row) {
+ if (row.isTransport === "1") {
+ return "info"; // 涓嶉渶瑕佽浆杩�
+ }
+ if (
+ row.serviceTransport &&
+ Array.isArray(row.serviceTransport) &&
+ row.serviceTransport.length > 0
+ ) {
+ // 鏍规嵁杞繍鍗曠姸鎬佹樉绀轰笉鍚岄鑹�
+ const transport = row.serviceTransport[0];
+ if (transport.transitStatus) {
+ switch (transport.transitStatus.toString()) {
+ case "1":
+ return "warning"; // 寰呰浆杩�
+ case "2":
+ return "primary"; // 杞繍涓�
+ case "3":
+ return "success"; // 杞繍瀹屾垚
+ case "4":
+ return "danger"; // 杞繍鍙栨秷
+ case "5":
+ return "info"; // 鏆傚瓨
+ default:
+ return "info";
+ }
+ }
+ return "primary"; // 鏈夎浆杩愪俊鎭絾鏃犵姸鎬�
+ }
+ return "danger"; // 闇�瑕佽浆杩愪絾鏃犺浆杩愪俊鎭�
+ },
+
+ /** 鑾峰彇杞繍鐘舵�佹枃鏈� */
+ getTransportStatusText(row) {
+ if (row.isTransport === "1") {
+ return "鏃犻渶杞繍";
+ }
+ if (
+ row.serviceTransport &&
+ Array.isArray(row.serviceTransport) &&
+ row.serviceTransport.length > 0
+ ) {
+ const transport = row.serviceTransport[0];
+ if (transport.transitStatus) {
+ switch (transport.transitStatus.toString()) {
+ case "1":
+ return "寰呰浆杩�";
+ case "2":
+ return "杞繍涓�";
+ case "3":
+ return "杞繍瀹屾垚";
+ case "4":
+ return "杞繍鍙栨秷";
+ case "5":
+ return "鏆傚瓨";
+ default:
+ return "鏈夎浆杩愬崟";
+ }
+ }
+ return "鏈夎浆杩愬崟";
+ }
+ return "闇�杞繍";
+ },
+
+ /** 澶勭悊杞繍鎿嶄綔 */
+ async handleTransport(row) {
+ try {
+ // 鍏堣幏鍙栨渶鏂扮殑妗堜緥淇℃伅
+ const caseData = row;
+
+ if (caseData.isTransport == "2") {
+ if (
+ caseData.serviceTransport &&
+ Array.isArray(caseData.serviceTransport) &&
+ caseData.serviceTransport.length > 0
+ ) {
+ // 宸叉湁杞繍鍗曪紝璺宠浆鍒拌浆杩愬崟璇︽儏椤�
+ const transport = caseData.serviceTransport[0];
+ this.goToTransportDetail(transport.id, row.caseNo);
+ } else {
+ // 娌℃湁杞繍鍗曪紝璺宠浆鍒板垱寤鸿浆杩愬崟椤甸潰
+ this.goToCreateTransport(row);
+ }
+ } else {
+ this.$message.warning("璇ユ渚嬩笉闇�瑕佽浆杩�");
+ }
+ } catch (error) {
+ console.error("鑾峰彇妗堜緥淇℃伅澶辫触:", error);
+ this.$message.error("鑾峰彇妗堜緥淇℃伅澶辫触");
+ }
+ },
+
+ /** 璺宠浆鍒板垱寤鸿浆杩愬崟椤甸潰 */
+ goToCreateTransport(caseData) {
+ // 杩欓噷鍙互璺宠浆鍒板垱寤鸿浆杩愬崟鐨勯〉闈�
+ // 鏂瑰紡1锛氬湪鏂伴〉闈㈡墦寮�
+ this.$router.push({
+ path: "/report/transfer",
+ query: {
+ autoCreate: "true",
+ caseId: caseData.id,
+ caseNo: caseData.caseNo,
+ patName: caseData.name,
+ age: caseData.age,
+ sex: caseData.sex,
+ diagnosisname: caseData.diagnosisname,
+ treatmentHospitalName: caseData.treatmenthospitalname
+ }
+ });
+
+ // 鏂瑰紡2锛氬湪褰撳墠椤甸潰鎵撳紑寮规锛堟帹鑽愶級
+ // this.openTransportDialog(caseData);
+ },
+
+ /** 鎵撳紑杞繍鍗曞脊妗� */
+ openTransportDialog(caseData) {
+ this.$modal.confirm({
+ title: "鍒涘缓杞繍鍗�",
+ message: `鎮ㄥ皢鍒涘缓妗堜緥銆�${caseData.caseNo} - ${caseData.name}銆戠殑杞繍鍗曪紝鏄惁缁х画锛焋,
+ confirmButtonText: "鍓嶅線鍒涘缓",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ beforeClose: (action, instance, done) => {
+ if (action === "confirm") {
+ // 璺宠浆鍒拌浆杩愬崟鍒涘缓椤甸潰
+ this.$router.push({
+ path: "/report/transfer",
+ query: {
+ caseId: caseData.id,
+ caseNo: caseData.caseNo,
+ patName: caseData.name,
+ age: caseData.age,
+ sex: caseData.sex,
+ diagnosisname: caseData.diagnosisname,
+ treatmentHospitalName: caseData.treatmenthospitalname
+ }
+ });
+ done();
+ } else {
+ done();
+ }
+ }
+ });
+ },
+
+ /** 璺宠浆鍒拌浆杩愬崟璇︽儏椤� */
+ goToTransportDetail(transportId, caseNo) {
+ this.$router.push({
+ path: "/report/transfer",
+ query: {
+ id: transportId,
+ caseNo: caseNo
+ }
+ });
+ },
+ // ---------------------------------end
// 澶氶�夋閫変腑鏁版嵁
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
+
/** 鎼滅储鎸夐挳鎿嶄綔 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
+
/** 閲嶇疆鎸夐挳鎿嶄綔 */
resetQuery() {
- this.resetForm("queryForm");
- this.handleQuery();
+ this.queryParams = {
+ pageNum: 1,
+ pageSize: 10,
+ caseNo: undefined,
+ name: undefined,
+ reportStatus: undefined
+ };
+ this.getList();
},
+
/** 璇︽儏鎸夐挳鎿嶄綔 */
- handleDetail(row) {
- this.currentCase = row;
- this.detailTitle = `妗堜緥璇︽儏 - ${row.donorNo}`;
- this.detailOpen = true;
+ async handleDetail(row) {
+ try {
+ this.currentCase = row;
+
+ // 濡傛灉鐘舵�佹槸"宸蹭笂鎶�"(1)锛屽垯鏇存柊涓�"宸查槄璇�"(2)
+ if (this.currentCase.reportStatus === "1") {
+ try {
+ const updateData = {
+ ...this.currentCase,
+ reportStatus: "2",
+ updateTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
+ updateBy: this.$store.state.user?.name || "褰撳墠鐢ㄦ埛"
+ };
+
+ await donateEdit(updateData);
+ this.currentCase.reportStatus = "2";
+ this.currentCase.updateTime = updateData.updateTime;
+ row.reportStatus = "2";
+ this.$modal.msgSuccess("鐘舵�佸凡鏇存柊涓哄凡闃呰");
+ } catch (updateError) {
+ console.error("鐘舵�佹洿鏂板け璐�:", updateError);
+ }
+ }
+
+ this.detailTitle = `妗堜緥璇︽儏 - ${this.currentCase.caseNo ||
+ row.caseNo}`;
+ this.detailOpen = true;
+ console.log(this.currentCase, "this.currentCase");
+ } catch (error) {
+ console.error("鑾峰彇妗堜緥璇︽儏澶辫触:", error);
+ this.currentCase = row;
+ this.detailTitle = `妗堜緥璇︽儏 - ${row.caseNo}`;
+ this.detailOpen = true;
+ }
},
- // 鍦ㄧ埗缁勪欢涓洿鏂板鎵规柟娉�
- handleApprove(row) {
- this.currentCase = row;
- this.approveForm.caseId = row.id;
- this.approveForm.approveResult = "1";
- this.approveForm.approveOpinion = "";
- this.approveOpen = true;
+
+ /** 缂栬緫鎸夐挳鎿嶄綔 */
+ async handleEdit(row) {
+ try {
+ const response = await donateInfo(row.id);
+ if (response.code === 200 || response.data) {
+ this.isEditing = true;
+ const data = response.data || response;
+
+ // 澶勭悊闄勪欢
+ if (data.annexfilesList) {
+ this.attachmentFileList = this.parseAttachmentToFileList(
+ data.annexfilesList
+ );
+ } else {
+ this.attachmentFileList = [];
+ }
+
+ this.currentCase = data;
+ this.editForm = { ...data };
+ this.editOpen = true;
+ this.$nextTick(() => {
+ this.$refs.editForm && this.$refs.editForm.clearValidate();
+ });
+ } else {
+ this.$message.error(response.msg || "鑾峰彇璁板綍澶辫触");
+ }
+ } catch (error) {
+ console.error("鑾峰彇璁板綍澶辫触:", error);
+ this.$modal.msgError("鑾峰彇璁板綍澶辫触");
+ }
+ },
+
+ /** 鏂板鎸夐挳鎿嶄綔 */
+ handleAdd() {
+ this.isEditing = false;
+ this.editForm = this.getDefaultFormData();
+ this.attachmentFileList = [];
+ this.editOpen = true;
+ this.$nextTick(() => {
+ this.$refs.editForm && this.$refs.editForm.clearValidate();
+ });
+ },
+
+ /** 瀹℃壒鎸夐挳鎿嶄綔 */
+ async handleApprove(row) {
+ try {
+ const response = await donateInfo(row.id);
+ this.currentCase = response.data || response || row;
+
+ this.approveForm.id = row.id;
+ this.approveForm.approveResult = "3";
+ this.approveForm.approveOpinion = "";
+
+ this.$nextTick(() => {
+ if (this.$refs.approveForm) {
+ this.$refs.approveForm.clearValidate();
+ }
+ });
+
+ this.approveOpen = true;
+ } catch (error) {
+ console.error("鑾峰彇妗堜緥璇︽儏澶辫触:", error);
+ this.currentCase = row;
+ this.approveForm.id = row.id;
+ this.approveForm.approveResult = "3";
+ this.approveForm.approveOpinion = "";
+ this.approveOpen = true;
+ this.$modal.msgError("鑾峰彇璇︽儏澶辫触锛屼絾宸叉墦寮�瀹℃壒绐楀彛");
+ }
},
/** 鎻愪氦瀹℃壒 */
- submitApprove() {
- this.$refs["approveForm"].validate(valid => {
+ async submitApprove() {
+ try {
+ const valid = await this.$refs.approveForm.validate();
if (valid) {
- // 妯℃嫙瀹℃壒鎻愪氦
+ const approveData = {
+ ...this.currentCase,
+ reportStatus: this.approveForm.approveResult,
+ remark: this.approveForm.approveOpinion,
+ approvername: this.$store.state.user?.name || "褰撳墠鐢ㄦ埛",
+ approvetime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
+ updateTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
+ updateBy: this.$store.state.user?.name || "褰撳墠鐢ㄦ埛"
+ };
+
+ await donateEdit(approveData);
this.$modal.msgSuccess("瀹℃壒鎴愬姛");
this.approveOpen = false;
- // 鏇存柊妗堜緥鐘舵��
- const caseItem = this.caseList.find(
- item => item.id === this.approveForm.caseId
- );
- if (caseItem) {
- caseItem.status = this.approveForm.approveResult;
- caseItem.approveTime = new Date().toLocaleString();
- caseItem.approverName = "褰撳墠鐢ㄦ埛";
- caseItem.approveOpinion = this.approveForm.approveOpinion;
- }
+ this.getList();
}
- });
- },
- /** 鏂板鎸夐挳鎿嶄綔 */
- handleAdd() {
- this.$router.push("/case/add");
+ } catch (error) {
+ console.error("瀹℃壒澶辫触:", error);
+ if (error !== "cancel") {
+ this.$modal.msgError("瀹℃壒澶辫触");
+ }
+ }
},
/** 鍒犻櫎鎸夐挳鎿嶄綔 */
- handleDelete(row) {
+ async handleDelete(row) {
const ids = row.id || this.ids;
- this.$modal
- .confirm('鏄惁纭鍒犻櫎浣忛櫌鍙蜂负"' + ids + '"鐨勬暟鎹」锛�')
- .then(() => {
- // 妯℃嫙鍒犻櫎鎿嶄綔
- this.caseList = this.caseList.filter(item => !ids.includes(item.id));
- this.total = this.caseList.length;
- this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
- })
- .catch(() => {});
+ try {
+ await this.$modal.confirm(
+ '鏄惁纭鍒犻櫎妗堜緥缂栧彿涓�"' + ids + '"鐨勬暟鎹」锛�'
+ );
+ await donateDel(ids);
+ this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+ this.getList();
+ } catch (error) {
+ if (error !== "cancel") {
+ console.error("鍒犻櫎澶辫触:", error);
+ this.$modal.msgError("鍒犻櫎澶辫触");
+ }
+ }
+ },
+
+ /** 鑾峰彇榛樿琛ㄥ崟鏁版嵁 */
+ getDefaultFormData() {
+ return {
+ id: undefined,
+ caseNo: undefined,
+ name: undefined,
+ sex: undefined,
+ age: undefined,
+ ageunit: "year",
+ bloodType: undefined,
+ rhYin: "0",
+ birthday: undefined,
+ idcardtype: "1",
+ idcardno: undefined,
+ nation: undefined,
+ nationality: undefined,
+ nativeplace: undefined,
+ education: undefined,
+ occupation: undefined,
+ phone: undefined,
+ // 鎴风睄鍦板潃
+ registerprovincename: undefined,
+ registercityname: undefined,
+ registertownname: undefined,
+ registercommunityname: undefined,
+ registeraddress: undefined,
+ // 鐜颁綇鍦板潃
+ residenceprovincename: undefined,
+ residencecountyname: undefined,
+ residencetownname: undefined,
+ residencecommunityname: undefined,
+ residenceaddress: undefined,
+ // 鍖荤枟淇℃伅
+ diagnosisname: undefined,
+ illnessoverview: undefined,
+ patientstate: undefined,
+ gcsScore: undefined,
+ infectious: undefined,
+ infectiousOther: undefined,
+ isTransport: "1",
+ // 鍖婚櫌淇℃伅
+ treatmenthospitalname: undefined,
+ treatmentdeptname: undefined,
+ inpatientno: undefined,
+ deptName: undefined,
+ deptNo: undefined,
+ toHospital: undefined,
+ // 涓婃姤淇℃伅
+ infoName: undefined,
+ infoNo: undefined,
+ reporterphone: undefined,
+ coordinatorName: undefined,
+ coordinatorNo: undefined,
+ terminationCase: "0",
+ reportStatus: "1", // 榛樿宸蹭笂鎶�
+ // 闄勪欢
+ annexfilesList: [],
+ // 鍏朵粬
+ remark: undefined,
+ createBy: undefined,
+ createTime: undefined,
+ updateBy: undefined,
+ updateTime: undefined,
+ delFlag: 0
+ };
+ },
+
+ /** 闄勪欢杞崲 */
+ parseAttachmentToFileList(attachments) {
+ if (!attachments || !Array.isArray(attachments)) return [];
+ return attachments.map((item, index) => ({
+ uid: item.id || `attachment-${index}-${Date.now()}`,
+ name: item.fileName,
+ url: item.path || item.fileUrl,
+ status: "success",
+ raw: item
+ }));
+ },
+
+ /** 闄勪欢鍙樺寲澶勭悊 */
+ handleAttachmentChange(fileList) {
+ this.attachmentFileList = fileList;
+ },
+
+ /** 闄勪欢涓婁紶鎴愬姛澶勭悊 */
+ handleUploadSuccess({ file, fileList, response }) {
+ if (response && response.code === 200) {
+ if (!this.editForm.annexfilesList) {
+ this.editForm.annexfilesList = [];
+ }
+ const attachmentObj = {
+ fileName: file.name,
+ path: response.data || file.url,
+ fileUrl: response.data || file.url,
+ type: this.getFileExtension(file.name),
+ createTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
+ remart: file.raw?.remart || "",
+ caseNo: this.editForm.caseNo
+ };
+
+ this.editForm.annexfilesList.push(attachmentObj);
+ this.$message.success("鏂囦欢涓婁紶鎴愬姛");
+ }
+ },
+
+ /** 闄勪欢涓婁紶閿欒澶勭悊 */
+ handleUploadError({ file, fileList, error }) {
+ console.error("闄勪欢涓婁紶澶辫触:", error);
+ this.$message.error("鏂囦欢涓婁紶澶辫触锛岃閲嶈瘯");
+ },
+
+ /** 闄勪欢绉婚櫎澶勭悊 */
+ handleAttachmentRemove(file) {
+ if (file.url && this.editForm.annexfilesList) {
+ const index = this.editForm.annexfilesList.findIndex(
+ item => item.path === file.url || item.fileUrl === file.url
+ );
+ if (index > -1) {
+ this.editForm.annexfilesList.splice(index, 1);
+ }
+ }
+ },
+
+ /** 鎵嬪姩鍒犻櫎闄勪欢 */
+ handleRemoveAttachment(index) {
+ this.editForm.annexfilesList.splice(index, 1);
+ this.attachmentFileList.splice(index, 1);
+ this.$message.success("闄勪欢鍒犻櫎鎴愬姛");
+ },
+
+ /** 鏂囦欢棰勮 */
+ handlePreview(file) {
+ this.currentPreviewFile = {
+ fileName: file.fileName,
+ fileUrl: file.path || file.fileUrl,
+ fileType: this.getFileType(file.fileName)
+ };
+ this.previewVisible = true;
+ },
+
+ /** 鏂囦欢涓嬭浇 */
+ handleDownload(file) {
+ const fileUrl = file.path || 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.warning("鏂囦欢璺緞涓嶅瓨鍦紝鏃犳硶涓嬭浇");
+ }
+ },
+
+ /** 鑾峰彇鏂囦欢绫诲瀷 */
+ 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"];
+
+ if (imageTypes.includes(extension)) return "image";
+ if (pdfTypes.includes(extension)) return "pdf";
+ if (officeTypes.includes(extension)) return "office";
+ return "other";
+ },
+
+ /** 鑾峰彇鏂囦欢鎵╁睍鍚� */
+ getFileExtension(filename) {
+ if (!filename) return "";
+ return filename
+ .split(".")
+ .pop()
+ .toLowerCase();
+ },
+
+ /** 鏃ユ湡鏃堕棿鏍煎紡鍖� */
+ formatDateTime(dateTime) {
+ if (!dateTime) return "";
+ return dayjs(dateTime).format("YYYY-MM-DD HH:mm:ss");
+ },
+
+ /** 鍏抽棴缂栬緫瀵硅瘽妗� */
+ handleEditClose() {
+ this.editOpen = false;
+ this.currentCase = {};
+ this.editForm = this.getDefaultFormData();
+ this.attachmentFileList = [];
+ this.$nextTick(() => {
+ this.$refs.editForm && this.$refs.editForm.clearValidate();
+ });
+ },
+
+ /** 淇濆瓨琛ㄥ崟 */
+ async handleSave() {
+ try {
+ const valid = await this.$refs.editForm.validate();
+ if (!valid) return;
+
+ const pendingFiles = this.attachmentFileList.filter(
+ item => item.status !== "success"
+ );
+ if (pendingFiles.length > 0) {
+ this.$message.warning(
+ "杩樻湁鏂囦欢鏈笂浼犲畬鎴愶紝璇峰厛涓婁紶鎵�鏈夋枃浠舵垨绉婚櫎鏈笂浼犵殑鏂囦欢"
+ );
+ return;
+ }
+
+ this.saveLoading = true;
+
+ const requestData = { ...this.editForm };
+ let response;
+
+ if (this.isEditing) {
+ response = await donateEdit(requestData);
+ } else {
+ // 鏂板鏃惰缃垱寤轰俊鎭�
+ requestData.createTime = dayjs().format("YYYY-MM-DD HH:mm:ss");
+ requestData.createBy = this.$store.state.user?.name || "褰撳墠鐢ㄦ埛";
+ response = await donateAdd(requestData);
+ }
+
+ if (response.code === 200) {
+ this.$message.success(this.isEditing ? "淇敼鎴愬姛" : "鏂板鎴愬姛");
+ this.handleEditClose();
+ this.getList();
+ } else {
+ this.$message.error(response.msg || "鎿嶄綔澶辫触");
+ }
+ } catch (error) {
+ console.error("淇濆瓨澶辫触:", error);
+ this.$message.error("鎿嶄綔澶辫触锛岃绋嶅悗閲嶈瘯");
+ } finally {
+ this.saveLoading = false;
+ }
}
}
};
</script>
<style scoped>
+.app-container {
+ padding: 20px;
+}
+
.filter-card {
margin-bottom: 20px;
}
+
.mb8 {
margin-bottom: 8px;
}
-/* 璇︽儏椤甸潰鏍峰紡浼樺寲 */
-.case-detail-container {
- max-height: 70vh;
- overflow-y: auto;
- padding: 0 10px;
-}
-.detail-section {
+/* 琛ㄥ崟鍖哄煙鏍峰紡 */
+.form-section {
margin-bottom: 16px;
}
.section-header {
display: flex;
- justify-content: space-between;
align-items: center;
-}
-
-.section-title {
- font-size: 16px;
font-weight: bold;
color: #303133;
}
+.dialog-footer {
+ text-align: right;
+ padding: 20px 0 0;
+}
+
+/* 闄勪欢鏍峰紡 */
+.attachment-section {
+ margin-bottom: 16px;
+}
+
+.attachment-header {
+ display: flex;
+ align-items: center;
+ margin-bottom: 16px;
+ padding: 8px 0;
+ border-bottom: 1px solid #ebeef5;
+}
+
+.attachment-title {
+ font-weight: bold;
+ margin: 0 8px;
+}
+
+.attachment-tip {
+ font-size: 12px;
+ color: #909399;
+}
+
+.attachment-list {
+ margin-top: 16px;
+}
+
+.list-title {
+ font-weight: bold;
+ margin-bottom: 12px;
+ color: #303133;
+}
+
+.file-name {
+ font-size: 13px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
/* 瀹℃壒寮规鏍峰紡 */
.approve-dialog >>> .el-dialog__body {
padding: 0;
--
Gitblit v1.9.3