From 631c8f37b449b09d19345b76400a39abdb7800f6 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期四, 15 一月 2026 15:48:42 +0800
Subject: [PATCH] api封装档案、上报、转运接入
---
src/views/business/transfer/transportDetail.vue | 326 +++--
src/api/businessApi/allocation.js | 0
src/api/businessApi/ethicalReview.js | 0
src/api/businessApi/decide.js | 0
vue.config.js | 4
src/components/UploadAttachment/index.vue | 145 ++
src/views/business/transfer/TransportEdit.vue | 598 ++++++++++-
src/views/project/donatebaseinfo/index.vue | 29
src/api/businessApi/maintain.js | 0
src/api/businessApi/index.js | 11
src/views/business/maintain/index.vue | 6
src/api/businessApi/GetWitness.js | 0
src/views/business/appear/index.vue | 445 +++++---
src/views/business/transfer/index.vue | 391 +++----
src/api/businessApi/affirm.js | 0
src/views/business/appear/caseDetail.vue | 415 +++++--
src/api/businessApi/course.js | 0
src/store/getters.js | 46
src/api/businessApi/assess.js | 0
src/api/businessApi/OrganUtilization.js | 0
src/components/FilePreviewDialog/index.vue | 493 +++++++++
src/api/businessApi/appear.js | 44
src/api/businessApi/transfer.js | 44
23 files changed, 2,230 insertions(+), 767 deletions(-)
diff --git a/src/api/businessApi/GetWitness.js b/src/api/businessApi/GetWitness.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/api/businessApi/GetWitness.js
diff --git a/src/api/businessApi/OrganUtilization.js b/src/api/businessApi/OrganUtilization.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/api/businessApi/OrganUtilization.js
diff --git a/src/api/businessApi/affirm.js b/src/api/businessApi/affirm.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/api/businessApi/affirm.js
diff --git a/src/api/businessApi/allocation.js b/src/api/businessApi/allocation.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/api/businessApi/allocation.js
diff --git a/src/api/businessApi/appear.js b/src/api/businessApi/appear.js
new file mode 100644
index 0000000..c8d5827
--- /dev/null
+++ b/src/api/businessApi/appear.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 涓婃姤妗堜緥鏂板
+export function donateAdd(data) {
+ return request({
+ url: '/project/donatebaseinforeport/add',
+ method: 'post',
+ data: data
+ })
+}
+
+// 涓婃姤妗堜緥淇敼
+export function donateEdit(data) {
+ return request({
+ url: '/project/donatebaseinforeport/edit',
+ method: 'post',
+ data: data
+ })
+}
+// 涓婃姤妗堜緥鍒楄〃
+export function donateList(data) {
+ return request({
+ url: '/project/donatebaseinforeport/list',
+ method: 'post',
+ data: data
+ })
+}
+
+// 妗堜緥璇︽儏
+export function donateInfo(id) {
+ return request({
+ url: '/project/donatebaseinforeport/getInfo/' + id,
+ method: 'get'
+ })
+}
+
+// 鍒犻櫎
+export function donateDel(id) {
+ return request({
+ url: '/project/donatebaseinforeport/remove/' + id,
+ method: 'get'
+ })
+}
+
diff --git a/src/api/businessApi/assess.js b/src/api/businessApi/assess.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/api/businessApi/assess.js
diff --git a/src/api/businessApi/course.js b/src/api/businessApi/course.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/api/businessApi/course.js
diff --git a/src/api/businessApi/decide.js b/src/api/businessApi/decide.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/api/businessApi/decide.js
diff --git a/src/api/businessApi/ethicalReview.js b/src/api/businessApi/ethicalReview.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/api/businessApi/ethicalReview.js
diff --git a/src/api/businessApi/index.js b/src/api/businessApi/index.js
new file mode 100644
index 0000000..07a8fbe
--- /dev/null
+++ b/src/api/businessApi/index.js
@@ -0,0 +1,11 @@
+export * from "./affirm";
+export * from "./allocation";
+export * from "./appear";
+export * from "./assess";
+export * from "./course";
+export * from "./ethicalReview";
+export * from "./decide";
+export * from "./GetWitness";
+export * from "./maintain";
+export * from "./OrganUtilization";
+export * from "./transfer";
diff --git a/src/api/businessApi/maintain.js b/src/api/businessApi/maintain.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/api/businessApi/maintain.js
diff --git a/src/api/businessApi/transfer.js b/src/api/businessApi/transfer.js
new file mode 100644
index 0000000..a9437d3
--- /dev/null
+++ b/src/api/businessApi/transfer.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 涓婃姤妗堜緥鏂板
+export function transportAdd(data) {
+ return request({
+ url: '/project/transport/add',
+ method: 'post',
+ data: data
+ })
+}
+
+// 涓婃姤妗堜緥淇敼
+export function transportEdit(data) {
+ return request({
+ url: '/project/transport/edit',
+ method: 'post',
+ data: data
+ })
+}
+// 涓婃姤妗堜緥鍒楄〃
+export function transportList(data) {
+ return request({
+ url: '/project/transport/list',
+ method: 'post',
+ data: data
+ })
+}
+
+// 妗堜緥璇︽儏
+export function transportInfo(id) {
+ return request({
+ url: '/project/transport/getInfo/' + id,
+ method: 'get'
+ })
+}
+
+// 鍒犻櫎
+export function transportDel(id) {
+ return request({
+ url: '/project/transport/remove/' + id,
+ method: 'get'
+ })
+}
+
diff --git a/src/components/FilePreviewDialog/index.vue b/src/components/FilePreviewDialog/index.vue
new file mode 100644
index 0000000..ff472c1
--- /dev/null
+++ b/src/components/FilePreviewDialog/index.vue
@@ -0,0 +1,493 @@
+<template>
+ <el-dialog
+ class="file-preview-dialog"
+ :title="previewTitle"
+ :visible.sync="previewVisible"
+ width="80%"
+ top="5vh"
+ :close-on-click-modal="true"
+ append-to-body
+ @close="handleClose"
+ >
+ <!-- 鍔犺浇鐘舵�� -->
+ <div v-if="loading" class="preview-loading">
+ <i class="el-icon-loading" style="font-size: 40px; margin-bottom: 16px;"></i>
+ <span>鏂囦欢鍔犺浇涓�...</span>
+ </div>
+
+ <!-- 鍥剧墖棰勮 -->
+ <div v-else-if="fileType === 'image'" class="preview-container">
+ <div class="image-toolbar">
+ <el-button-group>
+ <el-button size="mini" @click="zoomImageIn" :disabled="imageScale >= 300">
+ <i class="el-icon-zoom-in"></i> 鏀惧ぇ
+ </el-button>
+ <el-button size="mini" disabled>{{ imageScale }}%</el-button>
+ <el-button size="mini" @click="zoomImageOut" :disabled="imageScale <= 50">
+ <i class="el-icon-zoom-out"></i> 缂╁皬
+ </el-button>
+ <el-button size="mini" @click="resetImageZoom">
+ <i class="el-icon-refresh-left"></i> 閲嶇疆
+ </el-button>
+ </el-button-group>
+
+ <el-button size="mini" type="success" @click="handleDownload">
+ <i class="el-icon-download"></i> 涓嬭浇
+ </el-button>
+ </div>
+
+ <div class="image-viewport">
+ <img
+ :src="fileUrl"
+ alt="棰勮鍥剧墖"
+ class="preview-image"
+ :style="{ transform: `scale(${imageScale / 100})` }"
+ @load="handleImageLoad"
+ />
+ </div>
+ </div>
+
+ <!-- PDF棰勮 -->
+ <div v-else-if="fileType === 'pdf'" class="preview-container pdf-preview">
+ <div class="pdf-toolbar">
+ <el-button-group>
+ <el-button
+ size="mini"
+ @click="changePage(currentPage - 1)"
+ :disabled="currentPage <= 1"
+ >
+ <i class="el-icon-arrow-left"></i> 涓婁竴椤�
+ </el-button>
+ <el-button size="mini" disabled>
+ 绗� {{ currentPage }} 椤� / 鍏� {{ pageCount }} 椤�
+ </el-button>
+ <el-button
+ size="mini"
+ @click="changePage(currentPage + 1)"
+ :disabled="currentPage >= pageCount"
+ >
+ <i class="el-icon-arrow-right"></i> 涓嬩竴椤�
+ </el-button>
+ </el-button-group>
+
+ <el-button-group class="zoom-controls">
+ <el-button size="mini" @click="zoomOut" :disabled="scale <= 50">
+ <i class="el-icon-zoom-out"></i> 缂╁皬
+ </el-button>
+ <el-button size="mini" disabled> {{ scale }}% </el-button>
+ <el-button size="mini" @click="zoomIn" :disabled="scale >= 200">
+ <i class="el-icon-zoom-in"></i> 鏀惧ぇ
+ </el-button>
+ <el-button size="mini" @click="resetZoom">
+ <i class="el-icon-refresh-left"></i> 閲嶇疆
+ </el-button>
+ </el-button-group>
+
+ <el-button
+ size="mini"
+ type="success"
+ @click="handleDownload"
+ >
+ <i class="el-icon-download"></i> 涓嬭浇
+ </el-button>
+ </div>
+
+ <div class="pdf-content" v-loading="pdfLoading">
+ <pdf
+ ref="pdf"
+ :src="pdfUrl"
+ :page="currentPage"
+ @num-pages="pageCount = $event"
+ @page-loaded="currentPage = $event"
+ @loaded="loadPdfHandler"
+ @error="pdfErrorHandler"
+ :style="{
+ width: scale + '%',
+ transform: 'scale(' + scale / 100 + ')',
+ transformOrigin: '0 0'
+ }"
+ ></pdf>
+ </div>
+ </div>
+
+ <!-- Office鏂囨。棰勮 -->
+ <div v-else-if="fileType === 'office'" class="preview-container office-preview">
+ <div class="office-toolbar">
+ <el-alert
+ title="Office鏂囨。棰勮鎻愮ず"
+ description="寤鸿涓嬭浇鍚庝娇鐢ㄦ湰鍦癘ffice杞欢鏌ョ湅浠ヨ幏寰楁渶浣充綋楠�"
+ type="info"
+ show-icon
+ :closable="false"
+ />
+ <el-button size="mini" type="success" @click="handleDownload">
+ <i class="el-icon-download"></i> 涓嬭浇鏂囨。
+ </el-button>
+ </div>
+
+ <div class="office-content">
+ <iframe
+ :src="`https://view.officeapps.live.com/op/view.aspx?src=${encodeURIComponent(fileUrl)}`"
+ width="100%"
+ height="600px"
+ frameborder="0"
+ ></iframe>
+ </div>
+ </div>
+
+ <!-- 涓嶆敮鎸侀瑙堢殑鏂囦欢绫诲瀷 -->
+ <div v-else class="preview-container unsupported-preview">
+ <el-alert
+ title="璇ユ枃浠舵牸寮忎笉鏀寔鍦ㄧ嚎棰勮"
+ :description="`鏂囦欢绫诲瀷: ${getFileExtension(fileName)}`"
+ type="warning"
+ show-icon
+ :closable="false"
+ />
+
+ <div class="unsupported-actions">
+ <el-button type="primary" @click="handleDownload">
+ <i class="el-icon-download"></i> 涓嬭浇鏂囦欢
+ </el-button>
+ <el-button @click="handleClose">鍏抽棴</el-button>
+ </div>
+
+ <div class="file-info">
+ <p><strong>鏂囦欢鍚�:</strong> {{ fileName }}</p>
+ <p><strong>鏂囦欢绫诲瀷:</strong> {{ getFileExtension(fileName) }}</p>
+ </div>
+ </div>
+ </el-dialog>
+</template>
+
+<script>
+import pdf from "vue-pdf";
+
+export default {
+ name: "FilePreviewDialog",
+ components: {
+ pdf
+ },
+ props: {
+ visible: {
+ type: Boolean,
+ default: false
+ },
+ file: {
+ type: Object,
+ default: () => ({})
+ }
+ },
+ data() {
+ return {
+ // 棰勮鎺у埗
+ previewVisible: this.visible,
+ // 鍔犺浇鐘舵��
+ loading: false,
+ pdfLoading: false,
+ // 鏂囦欢淇℃伅
+ fileUrl: "",
+ fileName: "",
+ fileType: "",
+ // PDF鐩稿叧
+ currentPage: 1,
+ pageCount: 0,
+ scale: 100,
+ pageRotate: 0,
+ // 鍥剧墖鐩稿叧
+ imageScale: 100
+ };
+ },
+ computed: {
+ previewTitle() {
+ return `鏂囦欢棰勮 - ${this.fileName}`;
+ },
+ pdfUrl() {
+ return this.fileUrl;
+ }
+ },
+ watch: {
+ visible(newVal) {
+ this.previewVisible = newVal;
+ if (newVal) {
+ this.initPreview();
+ }
+ },
+ previewVisible(newVal) {
+ this.$emit('update:visible', newVal);
+ if (!newVal) {
+ this.handleClose();
+ }
+ }
+ },
+ methods: {
+ /** 鍒濆鍖栭瑙� */
+ initPreview() {
+ if (!this.file) return;
+
+ this.fileName = this.file.fileName || this.file.name || "鏈煡鏂囦欢";
+ this.fileUrl = this.file.fileUrl || this.file.path || this.file.url;
+ this.fileType = this.getFileType(this.fileName);
+
+ this.loading = true;
+
+ // 閲嶇疆鐘舵��
+ this.currentPage = 1;
+ this.scale = 100;
+ this.imageScale = 100;
+ this.pageCount = 0;
+
+ // 妯℃嫙鍔犺浇寤惰繜
+ setTimeout(() => {
+ this.loading = false;
+ if (this.fileType === "pdf") {
+ this.pdfLoading = true;
+ }
+ }, 300);
+ },
+
+ /** 鑾峰彇鏂囦欢绫诲瀷 */
+ getFileType(fileName) {
+ if (!fileName) return "other";
+
+ const extension = fileName.split('.').pop().toLowerCase();
+ const imageTypes = ["jpg", "jpeg", "png", "gif", "bmp", "webp"];
+ const pdfTypes = ["pdf"];
+ const officeTypes = ["doc", "docx", "xls", "xlsx", "ppt", "pptx"];
+
+ if (imageTypes.includes(extension)) return "image";
+ if (pdfTypes.includes(extension)) return "pdf";
+ if (officeTypes.includes(extension)) return "office";
+ return "other";
+ },
+
+ /** 鑾峰彇鏂囦欢鎵╁睍鍚� */
+ getFileExtension(filename) {
+ return filename.split('.').pop().toLowerCase() || "鏈煡";
+ },
+
+ /** PDF鍔犺浇瀹屾垚 */
+ loadPdfHandler() {
+ this.pdfLoading = false;
+ this.currentPage = 1;
+ },
+
+ /** PDF鍔犺浇閿欒 */
+ pdfErrorHandler(error) {
+ console.error("PDF鍔犺浇澶辫触:", error);
+ this.pdfLoading = false;
+ this.$message.error("PDF鏂囦欢鍔犺浇澶辫触锛岃灏濊瘯涓嬭浇鍚庢煡鐪�");
+ this.previewVisible = false;
+ },
+
+ /** 鍥剧墖鍔犺浇瀹屾垚 */
+ handleImageLoad() {
+ this.loading = false;
+ },
+
+ /** 鏀瑰彉PDF椤电爜 */
+ changePage(newPage) {
+ if (newPage < 1 || newPage > this.pageCount) return;
+ this.currentPage = newPage;
+ },
+
+ /** PDF鏀惧ぇ */
+ zoomIn() {
+ if (this.scale >= 200) {
+ this.$message.info("宸叉斁澶у埌鏈�澶ф瘮渚�");
+ return;
+ }
+ this.scale += 10;
+ },
+
+ /** PDF缂╁皬 */
+ zoomOut() {
+ if (this.scale <= 50) {
+ this.$message.info("宸茬缉灏忓埌鏈�灏忔瘮渚�");
+ return;
+ }
+ this.scale -= 10;
+ },
+
+ /** PDF閲嶇疆缂╂斁 */
+ resetZoom() {
+ this.scale = 100;
+ },
+
+ /** 鍥剧墖鏀惧ぇ */
+ zoomImageIn() {
+ if (this.imageScale >= 300) {
+ this.$message.info("宸叉斁澶у埌鏈�澶ф瘮渚�");
+ return;
+ }
+ this.imageScale += 20;
+ },
+
+ /** 鍥剧墖缂╁皬 */
+ zoomImageOut() {
+ if (this.imageScale <= 50) {
+ this.$message.info("宸茬缉灏忓埌鏈�灏忔瘮渚�");
+ return;
+ }
+ this.imageScale -= 20;
+ },
+
+ /** 鍥剧墖閲嶇疆缂╂斁 */
+ resetImageZoom() {
+ this.imageScale = 100;
+ },
+
+ /** 涓嬭浇鏂囦欢 */
+ handleDownload() {
+ if (!this.fileUrl) {
+ this.$message.warning("鏂囦欢璺緞涓嶅瓨鍦紝鏃犳硶涓嬭浇");
+ return;
+ }
+
+ const link = document.createElement("a");
+ link.href = this.fileUrl;
+ link.download = this.fileName;
+ link.style.display = "none";
+ document.body.appendChild(link);
+ link.click();
+ document.body.removeChild(link);
+
+ this.$message.success("寮�濮嬩笅杞芥枃浠�");
+ },
+
+ /** 鍏抽棴瀵硅瘽妗� */
+ handleClose() {
+ this.previewVisible = false;
+ this.$emit("close");
+
+ // 娓呯悊璧勬簮
+ if (this.fileUrl && this.fileUrl.startsWith("blob:")) {
+ URL.revokeObjectURL(this.fileUrl);
+ }
+ }
+ }
+};
+</script>
+
+<style scoped>
+.file-preview-dialog {
+ .preview-loading {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 400px;
+ color: #909399;
+ }
+
+ .preview-container {
+ display: flex;
+ flex-direction: column;
+ height: 70vh;
+ }
+
+ /* 宸ュ叿鏍忛�氱敤鏍峰紡 */
+ .image-toolbar,
+ .pdf-toolbar,
+ .office-toolbar {
+ padding: 15px 20px;
+ background: #f5f7fa;
+ border-bottom: 1px solid #ebeef5;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ flex-wrap: wrap;
+ gap: 10px;
+ }
+
+ /* 鍥剧墖棰勮鏍峰紡 */
+ .image-viewport {
+ flex: 1;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ overflow: auto;
+ padding: 20px;
+ background: #f8f9fa;
+ }
+
+ .preview-image {
+ max-width: 100%;
+ max-height: 100%;
+ transition: transform 0.3s ease;
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
+ }
+
+ /* PDF棰勮鏍峰紡 */
+ .pdf-content {
+ flex: 1;
+ overflow: auto;
+ padding: 20px;
+ background: #f8f9fa;
+ display: flex;
+ justify-content: center;
+ align-items: flex-start;
+ }
+
+ /* Office棰勮鏍峰紡 */
+ .office-content {
+ flex: 1;
+ padding: 20px;
+ background: #f8f9fa;
+ }
+
+ /* 涓嶆敮鎸侀瑙堢殑鏍峰紡 */
+ .unsupported-preview {
+ padding: 40px 20px;
+ text-align: center;
+ }
+
+ .unsupported-actions {
+ margin: 30px 0;
+ }
+
+ .unsupported-actions .el-button {
+ margin: 0 10px;
+ }
+
+ .file-info {
+ text-align: left;
+ max-width: 400px;
+ margin: 0 auto;
+ padding: 20px;
+ background: #f5f7fa;
+ border-radius: 4px;
+ }
+
+ .file-info p {
+ margin: 8px 0;
+ }
+}
+
+/* 瀵硅瘽妗嗘牱寮忚皟鏁� */
+:deep(.el-dialog) {
+ margin-top: 5vh !important;
+}
+
+:deep(.el-dialog__body) {
+ padding: 0;
+}
+
+/* 鍝嶅簲寮忚璁� */
+@media (max-width: 768px) {
+ .file-preview-dialog {
+ :deep(.el-dialog) {
+ width: 95% !important;
+ }
+
+ .preview-container {
+ .image-toolbar,
+ .pdf-toolbar,
+ .office-toolbar {
+ flex-direction: column;
+ gap: 10px;
+ }
+ }
+ }
+}
+</style>
diff --git a/src/components/UploadAttachment/index.vue b/src/components/UploadAttachment/index.vue
index 290362c..cbd5e9f 100644
--- a/src/components/UploadAttachment/index.vue
+++ b/src/components/UploadAttachment/index.vue
@@ -1,35 +1,172 @@
<template>
<div class="upload-attachment">
<el-upload
- action="#"
+ ref="upload"
+ :action="uploadAction"
+ :headers="headers"
:file-list="fileList"
:auto-upload="false"
+ :multiple="true"
+ :limit="limit"
+ :accept="accept"
+ :on-exceed="handleExceed"
:on-change="handleFileChange"
:on-remove="handleFileRemove"
- multiple
+ :on-success="handleUploadSuccess"
+ :on-error="handleUploadError"
+ :before-upload="beforeUpload"
>
- <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
- <div slot="tip" class="el-upload__tip">鏀寔jpg銆乸ng銆乸df銆乨oc銆乨ocx绛夋牸寮忥紝鍗曚釜鏂囦欢涓嶈秴杩�10MB</div>
+ <el-button slot="trigger" size="small" type="primary">閫夊彇鏂囦欢</el-button>
+ <el-button
+ style="margin-left: 10px;"
+ size="small"
+ type="success"
+ @click="submitUpload"
+ :disabled="fileList.length === 0"
+ >
+ 涓婁紶鍒版湇鍔″櫒
+ </el-button>
+ <div slot="tip" class="el-upload__tip">
+ 璇蜂笂浼� {{ accept }} 鏍煎紡鐨勬枃浠讹紝鍗曚釜鏂囦欢涓嶈秴杩�10MB锛屾渶澶氬彲涓婁紶{{ limit }}涓枃浠�
+ </div>
</el-upload>
</div>
</template>
<script>
+import { getToken } from "@/utils/auth";
+
export default {
name: "UploadAttachment",
props: {
+ // 鏂囦欢鍒楄〃
fileList: {
type: Array,
default: () => []
+ },
+ // 涓婁紶鏁伴噺闄愬埗
+ limit: {
+ type: Number,
+ default: 10
+ },
+ // 鎺ュ彈鐨勬枃浠剁被鍨�
+ accept: {
+ type: String,
+ default: ".pdf,.jpg,.jpeg,.png,.doc,.docx,.xls,.xlsx"
+ },
+ // 涓婁紶鍦板潃
+ uploadUrl: {
+ type: String,
+ default: process.env.VUE_APP_BASE_API + "/common/upload"
}
},
+ data() {
+ return {
+ uploadAction: process.env.VUE_APP_BASE_API + "/common/upload",
+ headers: {
+ Authorization: "Bearer " + getToken()
+ }
+ };
+ },
methods: {
+ /** 鏂囦欢閫夋嫨鍙樺寲 */
handleFileChange(file, fileList) {
this.$emit('change', fileList);
},
+
+ /** 鏂囦欢绉婚櫎 */
handleFileRemove(file, fileList) {
this.$emit('change', fileList);
+ this.$emit('remove', file);
+ },
+
+ /** 涓婁紶鎴愬姛澶勭悊 */
+ handleUploadSuccess(response, file, fileList) {
+ if (response.code === 200) {
+ file.url = response.data || response.url;
+ this.$message.success('鏂囦欢涓婁紶鎴愬姛');
+ this.$emit('upload-success', {
+ file,
+ fileList,
+ response
+ });
+ } else {
+ this.$message.error(response.msg || '鏂囦欢涓婁紶澶辫触');
+ }
+ },
+
+ /** 涓婁紶閿欒澶勭悊 */
+ handleUploadError(err, file, fileList) {
+ console.error('涓婁紶澶辫触:', err);
+ this.$message.error('鏂囦欢涓婁紶澶辫触锛岃閲嶈瘯');
+ this.$emit('upload-error', {
+ file,
+ fileList,
+ error: err
+ });
+ },
+
+ /** 涓婁紶鍓嶆牎楠� */
+ beforeUpload(file) {
+ // 妫�鏌ユ枃浠剁被鍨�
+ const allowedTypes = this.accept.split(',').map(type => type.trim().toLowerCase());
+ const fileExtension = '.' + file.name.split('.').pop().toLowerCase();
+
+ if (!allowedTypes.includes(fileExtension) && !allowedTypes.includes(fileExtension.substring(1))) {
+ this.$message.error(`涓嶆敮鎸佺殑鏂囦欢鏍煎紡: ${fileExtension}`);
+ return false;
+ }
+
+ // 妫�鏌ユ枃浠跺ぇ灏� (10MB闄愬埗)
+ const isLt10M = file.size / 1024 / 1024 < 10;
+ if (!isLt10M) {
+ this.$message.error('鏂囦欢澶у皬涓嶈兘瓒呰繃 10MB!');
+ return false;
+ }
+
+ return true;
+ },
+
+ /** 鏂囦欢鏁伴噺瓒呭嚭闄愬埗 */
+ handleExceed(files, fileList) {
+ this.$message.warning(`鏈�澶氬彧鑳戒笂浼� ${this.limit} 涓枃浠讹紝褰撳墠閫夋嫨浜� ${files.length} 涓枃浠禶);
+ },
+
+ /** 鎵嬪姩鎻愪氦涓婁紶 */
+ submitUpload() {
+ if (this.fileList.length === 0) {
+ this.$message.warning('璇峰厛閫夋嫨瑕佷笂浼犵殑鏂囦欢');
+ return;
+ }
+
+ this.$refs.upload.submit();
+ },
+
+ /** 娓呯┖鏂囦欢鍒楄〃 */
+ clearFiles() {
+ this.$refs.upload.clearFiles();
+ },
+
+ /** 鑾峰彇褰撳墠鏂囦欢鍒楄〃 */
+ getFileList() {
+ return this.fileList;
}
}
};
</script>
+
+<style scoped>
+.upload-attachment {
+ width: 100%;
+}
+
+::v-deep .el-upload {
+ display: block;
+}
+
+::v-deep .el-upload__tip {
+ margin-top: 8px;
+ font-size: 12px;
+ color: #909399;
+}
+</style>
diff --git a/src/store/getters.js b/src/store/getters.js
index eef9baa..607d027 100644
--- a/src/store/getters.js
+++ b/src/store/getters.js
@@ -14,8 +14,44 @@
rolesor: state => state.user.rolesor,
permissions: state => state.user.permissions,
permission_routes: state => state.permission.routes,
- topbarRouters:state => state.permission.topbarRouters,
- defaultRoutes:state => state.permission.defaultRoutes,
- sidebarRouters:state => state.permission.sidebarRouters,
-}
-export default getters
+ topbarRouters: state => state.permission.topbarRouters,
+ defaultRoutes: state => state.permission.defaultRoutes,
+ sidebarRouters: state => state.permission.sidebarRouters,
+
+ // 浼樺厛鎵ц
+ bloodTypeOptions: state => [
+ {
+ value: 0,
+ label: "璇煶浼樺厛",
+ raw: {
+ cssClass: "",
+ listClass: ""
+ }
+ },
+ {
+ value: 1,
+ label: "鏂囧瓧浼樺厛",
+ raw: {
+ cssClass: "",
+ listClass: ""
+ }
+ },
+ {
+ value: 0,
+ label: "璇煶浼樺厛",
+ raw: {
+ cssClass: "",
+ listClass: ""
+ }
+ },
+ {
+ value: 1,
+ label: "鏂囧瓧浼樺厛",
+ raw: {
+ cssClass: "",
+ listClass: ""
+ }
+ }
+ ]
+};
+export default getters;
diff --git a/src/views/business/appear/caseDetail.vue b/src/views/business/appear/caseDetail.vue
index db0dc01..2c9d4b5 100644
--- a/src/views/business/appear/caseDetail.vue
+++ b/src/views/business/appear/caseDetail.vue
@@ -6,33 +6,77 @@
<span class="section-title">鍩烘湰淇℃伅</span>
</div>
<el-descriptions :column="2" border>
- <el-descriptions-item label="鎹愮尞缂栧彿">{{
- caseData.donorNo
+ <el-descriptions-item label="妗堜緥缂栧彿">{{
+ caseData.caseNo || "-"
}}</el-descriptions-item>
<el-descriptions-item label="鎹愮尞鑰呭鍚�">{{
- caseData.donorName
+ caseData.name || "-"
}}</el-descriptions-item>
<el-descriptions-item label="鎬у埆">
- <dict-tag :options="genderOptions" :value="caseData.gender" />
+ <dict-tag
+ :options="dict.type.sys_user_sex"
+ :value="caseData.sex ? parseInt(caseData.sex) : ''"
+ />
</el-descriptions-item>
- <el-descriptions-item label="骞撮緞"
- >{{ caseData.age }}宀�</el-descriptions-item
- >
+ <el-descriptions-item label="骞撮緞">
+ {{ caseData.age || "-"
+ }}{{
+ caseData.ageunit ? `(${getAgeUnitText(caseData.ageunit)})` : ""
+ }}
+ </el-descriptions-item>
<el-descriptions-item label="琛�鍨�">
- <dict-tag :options="bloodTypeOptions" :value="caseData.bloodType" />
+ <dict-tag
+ :options="dict.type.sys_BloodType"
+ :value="caseData.bloodType"
+ />
+ </el-descriptions-item>
+ <el-descriptions-item label="Rh闃存��">
+ {{
+ caseData.rhYin === "1" ? "鏄�" : caseData.rhYin === "0" ? "鍚�" : "-"
+ }}
+ </el-descriptions-item>
+ <el-descriptions-item label="璇佷欢绫诲瀷">
+ {{ getIdCardTypeText(caseData.idcardtype) }}
</el-descriptions-item>
<el-descriptions-item label="璇佷欢鍙风爜">{{
- caseData.idCardNo
+ caseData.idcardno || "-"
}}</el-descriptions-item>
<el-descriptions-item label="姘戞棌">{{
- caseData.nation
+ caseData.nation || "-"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鍥界睄">{{
+ caseData.nationality || "-"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="绫嶈疮">{{
+ caseData.nativeplace || "-"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="瀛﹀巻">{{
+ caseData.education || "-"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鑱屼笟">{{
+ caseData.occupation || "-"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鍑虹敓鏃ユ湡">{{
+ formatDate(caseData.birthday)
}}</el-descriptions-item>
<el-descriptions-item label="鑱旂郴鐢佃瘽">{{
- caseData.phone
+ caseData.phone || "-"
}}</el-descriptions-item>
- <el-descriptions-item label="浣忓潃" :span="2">{{
- caseData.address
- }}</el-descriptions-item>
+ </el-descriptions>
+ </el-card>
+
+ <!-- 鍦板潃淇℃伅妯″潡 -->
+ <el-card class="detail-section">
+ <div slot="header" class="section-header">
+ <span class="section-title">鍦板潃淇℃伅</span>
+ </div>
+ <el-descriptions :column="1" border>
+ <el-descriptions-item label="鎴风睄鍦板潃">
+ {{ getFullRegisterAddress() }}
+ </el-descriptions-item>
+ <el-descriptions-item label="鐜颁綇鍦板潃">
+ {{ getFullResidenceAddress() }}
+ </el-descriptions-item>
</el-descriptions>
</el-card>
@@ -42,24 +86,29 @@
<span class="section-title">鍖荤枟淇℃伅</span>
</div>
<el-descriptions :column="1" border>
- <el-descriptions-item label="鐤剧梾璇婃柇">{{
- caseData.diagnosis
+ <el-descriptions-item label="鐤剧梾璇婃柇鍚嶇О">{{
+ caseData.diagnosisname || "-"
}}</el-descriptions-item>
- <el-descriptions-item label="浣忛櫌鍙�">{{
- caseData.inpatientNo
+ <el-descriptions-item label="鐥呮儏姒傚喌">{{
+ caseData.illnessoverview || "-"
}}</el-descriptions-item>
- <el-descriptions-item label="鎵�鍦ㄧ瀹�">{{
- caseData.departmentName
+ <el-descriptions-item label="鐥呬汉鐘跺喌">{{
+ caseData.patientstate || "-"
}}</el-descriptions-item>
- <el-descriptions-item label="涓绘不鍖荤敓">{{
- caseData.doctorName
+ <el-descriptions-item label="GCS璇勫垎">{{
+ caseData.gcsScore || "-"
}}</el-descriptions-item>
<el-descriptions-item label="浼犳煋鐥呮儏鍐�">{{
- caseData.infectiousDisease || "鏃�"
+ caseData.infectious || "鏃�"
}}</el-descriptions-item>
- <el-descriptions-item label="鍖荤枟璁板綍">{{
- caseData.medicalRecord
- }}</el-descriptions-item>
+ <el-descriptions-item
+ label="浼犳煋鐥呭叾浠栬鏄�"
+ v-if="caseData.infectiousOther"
+ >{{ caseData.infectiousOther }}</el-descriptions-item
+ >
+ <el-descriptions-item label="鏄惁闇�瑕佽浆杩�">
+ {{ caseData.isTransport === "2" ? "闇�瑕�" : "涓嶉渶瑕�" }}
+ </el-descriptions-item>
</el-descriptions>
</el-card>
@@ -69,31 +118,60 @@
<span class="section-title">鍖婚櫌淇℃伅</span>
</div>
<el-descriptions :column="2" border>
- <el-descriptions-item label="鍖婚櫌鍚嶇О">{{
- caseData.hospitalName
+ <el-descriptions-item label="娌荤枟鍖婚櫌鍚嶇О">{{
+ caseData.treatmenthospitalname || "-"
}}</el-descriptions-item>
- <el-descriptions-item label="鍖婚櫌绾у埆">{{
- caseData.hospitalLevel
+ <el-descriptions-item label="娌荤枟绉戝鍚嶇О">{{
+ caseData.treatmentdeptname || "-"
}}</el-descriptions-item>
- <el-descriptions-item label="鑱旂郴浜�">{{
- caseData.contactPerson
+ <el-descriptions-item label="浣忛櫌鍙�">{{
+ caseData.inpatientno || "-"
}}</el-descriptions-item>
- <el-descriptions-item label="鑱旂郴鐢佃瘽">{{
- caseData.contactPhone
- }}</el-descriptions-item>
- <el-descriptions-item label="鍖婚櫌鍦板潃" :span="2">{{
- caseData.hospitalAddress
+ <el-descriptions-item label="閮ㄩ棬鍚嶇О">{{
+ caseData.deptName || "-"
}}</el-descriptions-item>
</el-descriptions>
</el-card>
- <!-- 闄勪欢淇℃伅妯″潡 -->
+ <!-- 涓婃姤淇℃伅妯″潡 -->
<el-card class="detail-section">
<div slot="header" class="section-header">
+ <span class="section-title">涓婃姤淇℃伅</span>
+ </div>
+ <el-descriptions :column="2" border>
+ <el-descriptions-item label="鎶ュ憡鑰呭鍚�">{{
+ caseData.infoName || "-"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鎶ュ憡鑰呯紪鍙�">{{
+ caseData.infoNo || "-"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鎶ュ憡鑰呰仈绯荤數璇�">{{
+ caseData.reporterphone || "-"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鍗忚皟鍛樺鍚�">{{
+ caseData.coordinatorName || "-"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鍗忚皟鍛樼紪鍙�">{{
+ caseData.coordinatorNo || "-"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="涓婃姤鐘舵��">
+ <el-tag :type="getStatusType(caseData.reportStatus)">
+ {{ getStatusText(caseData.reportStatus) }}
+ </el-tag>
+ </el-descriptions-item>
+ <el-descriptions-item label="鎶ュ憡鏃堕棿">{{
+ formatDateTime(caseData.reporttime)
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鏄惁缁堟妗堜緥">
+ {{ caseData.terminationCase === "1" ? "宸茬粓姝�" : "杩涜涓�" }}
+ </el-descriptions-item>
+ </el-descriptions>
+ </el-card>
+
+ <!-- 闄勪欢淇℃伅妯″潡 -->
+ <el-card class="detail-section" v-if="attachmentList.length > 0">
+ <div slot="header" class="section-header">
<span class="section-title">闄勪欢淇℃伅</span>
- <el-button type="text" icon="el-icon-upload" @click="handleUpload"
- >涓婁紶闄勪欢</el-button
- >
</div>
<el-table :data="attachmentList" style="width: 100%">
<el-table-column label="鏂囦欢鍚�" width="300">
@@ -128,36 +206,33 @@
@click="handleDownload(scope.row)"
>涓嬭浇</el-button
>
- <el-button
- size="mini"
- type="danger"
- @click="handleDelete(scope.row)"
- >鍒犻櫎</el-button
- >
</template>
</el-table-column>
</el-table>
</el-card>
- <!-- 瀹℃壒淇℃伅妯″潡锛堝鏈夛級 -->
- <el-card class="detail-section" v-if="caseData.status !== '0'">
+ <!-- 瀹℃壒淇℃伅妯″潡锛堢姸鎬佷负宸插悓鎰忔垨宸查┏鍥炴椂鏄剧ず锛� -->
+ <el-card
+ class="detail-section"
+ v-if="caseData.reportStatus === '3' || caseData.reportStatus === '4'"
+ >
<div slot="header" class="section-header">
<span class="section-title">瀹℃壒淇℃伅</span>
</div>
<el-descriptions :column="1" border>
<el-descriptions-item label="瀹℃壒缁撴灉">
- <el-tag :type="caseData.status | statusFilter">
- {{ caseData.status | statusTextFilter }}
+ <el-tag :type="caseData.reportStatus === '3' ? 'success' : 'danger'">
+ {{ caseData.reportStatus === "3" ? "宸插悓鎰�" : "宸查┏鍥�" }}
</el-tag>
</el-descriptions-item>
<el-descriptions-item label="瀹℃壒鏃堕棿">{{
- caseData.approveTime
+ formatDateTime(caseData.updateTime)
}}</el-descriptions-item>
<el-descriptions-item label="瀹℃壒浜�">{{
- caseData.approverName
+ caseData.updateBy || "-"
}}</el-descriptions-item>
<el-descriptions-item label="瀹℃壒鎰忚">{{
- caseData.approveOpinion
+ caseData.remark || "鏃�"
}}</el-descriptions-item>
</el-descriptions>
</el-card>
@@ -302,6 +377,7 @@
default: true
}
},
+ dicts: ["sys_user_sex", "sys_BloodType"],
filters: {
statusFilter(status) {
const statusMap = {
@@ -322,74 +398,159 @@
},
data() {
return {
- activeTab: "basic",
- genderOptions: [
- { value: "0", label: "鐢�" },
- { value: "1", label: "濂�" }
- ],
- bloodTypeOptions: [
- { value: "A", label: "A鍨�" },
- { value: "B", label: "B鍨�" },
- { value: "O", label: "O鍨�" },
- { value: "AB", label: "AB鍨�" }
- ],
-
- // 闄勪欢鐩稿叧鏁版嵁
- attachmentList: [
- {
- id: 1,
- fileName: "鎹愮尞鑰呰韩浠借瘉.jpg",
- fileType: "jpg",
- fileSize: 1024000,
- uploadTime: "2024-12-19 10:30:00",
- fileUrl: "https://img95.699pic.com/photo/40142/8262.jpg_wh860.jpg"
- },
- {
- id: 2,
- fileName: "鍖荤枟璇婃柇璇佹槑.pdf",
- fileType: "pdf",
- fileSize: 2048000,
- uploadTime: "2024-12-19 11:20:00",
- fileUrl:
- "http://192.168.100.10:8080/profile/upload/2025/12/19/(鍚撮緳8.7)姣忔棩宸ヤ綔鎬荤粨1766131266142.pdf"
- },
- {
- id: 3,
- fileName: "妫�楠屾姤鍛婂崟.jpg",
- fileType: "docx",
- fileSize: 512000,
- uploadTime: "2024-12-19 14:15:00",
- fileUrl: "https://img95.699pic.com/photo/40019/3490.jpg_wh860.jpg"
- }
- ],
-
- // PDF棰勮鐩稿叧鏁版嵁
+ // 棰勮鐩稿叧鏁版嵁锛堜繚鎸佸師鏈変唬鐮侊級
pdfPreviewVisible: false,
+ imagePreviewVisible: false,
+ unsupportedPreviewVisible: false,
pdfLoading: false,
pdfUrl: "",
currentPage: 1,
pageCount: 0,
scale: 100,
pageRotate: 0,
-
- // 鍥剧墖棰勮鐩稿叧
- imagePreviewVisible: false,
-
- // 涓嶆敮鎸侀瑙堢浉鍏�
- unsupportedPreviewVisible: false,
-
- // 閫氱敤棰勮鏁版嵁
previewTitle: "",
previewUrl: "",
- currentFile: null
+ currentFile: null,
+
+ // 闄勪欢鍒楄〃
+ attachmentList: []
};
+ },
+ watch: {
+ caseData: {
+ immediate: true,
+ handler(newVal) {
+ if (newVal && newVal.annexfilesList) {
+ this.loadAttachments(newVal.annexfilesList);
+ }
+ }
+ }
},
methods: {
handleClose() {
this.$emit("close");
},
- // 鑾峰彇鏂囦欢绫诲瀷
+ // 鍔犺浇闄勪欢
+ loadAttachments(annexfilesList) {
+ if (!annexfilesList || !Array.isArray(annexfilesList)) {
+ this.attachmentList = [];
+ return;
+ }
+
+ this.attachmentList = annexfilesList.map((file, index) => ({
+ id: index + 1,
+ fileName: file.fileName || `闄勪欢${index + 1}`,
+ fileType: this.getFileExtension(file.fileUrl || ""),
+ fileSize: file.fileSize || 0,
+ uploadTime: file.uploadTime || this.formatDateTime(new Date()),
+ fileUrl: file.fileUrl || ""
+ }));
+ },
+
+ // 鑾峰彇鏂囦欢鎵╁睍鍚�
+ getFileExtension(filename) {
+ return (
+ filename
+ .split(".")
+ .pop()
+ ?.toLowerCase() || "unknown"
+ );
+ },
+
+ // 鏍煎紡鍖栨棩鏈熸椂闂�
+ formatDateTime(dateString) {
+ if (!dateString) return "-";
+ return dateString.replace("T", " ").substring(0, 19);
+ },
+
+ // 鏍煎紡鍖栨棩鏈�
+ formatDate(dateString) {
+ if (!dateString) return "-";
+ return dateString.split("T")[0];
+ },
+
+ // 鑾峰彇瀹屾暣鎴风睄鍦板潃
+ getFullRegisterAddress() {
+ const {
+ registerprovincename,
+ registercityname,
+ registertownname,
+ registercommunityname,
+ registeraddress
+ } = this.caseData;
+ const addressParts = [
+ registerprovincename,
+ registercityname,
+ registertownname,
+ registercommunityname,
+ registeraddress
+ ];
+ return addressParts.filter(part => part).join("") || "-";
+ },
+
+ // 鑾峰彇瀹屾暣鐜颁綇鍦板潃
+ getFullResidenceAddress() {
+ const {
+ residenceprovincename,
+ residencecountyname,
+ residencetownname,
+ residencecommunityname,
+ residenceaddress
+ } = this.caseData;
+ const addressParts = [
+ residenceprovincename,
+ residencecountyname,
+ residencetownname,
+ residencecommunityname,
+ residenceaddress
+ ];
+ return addressParts.filter(part => part).join("") || "-";
+ },
+
+ // 鑾峰彇鐘舵�佹枃鏈�
+ getStatusText(status) {
+ const statusMap = {
+ "1": "宸蹭笂鎶�",
+ "2": "宸查槄璇�",
+ "3": "宸插悓鎰�",
+ "4": "宸查┏鍥�"
+ };
+ return statusMap[status] || "鏈煡鐘舵��";
+ },
+
+ // 鑾峰彇鐘舵�佺被鍨�
+ getStatusType(status) {
+ const statusMap = {
+ "1": "info",
+ "2": "warning",
+ "3": "success",
+ "4": "danger"
+ };
+ return statusMap[status] || "info";
+ },
+
+ // 鑾峰彇骞撮緞鍗曚綅鏂囨湰
+ getAgeUnitText(unit) {
+ const unitMap = {
+ year: "宀�",
+ month: "鏈�",
+ day: "澶�"
+ };
+ return unitMap[unit] || unit;
+ },
+
+ // 鑾峰彇璇佷欢绫诲瀷鏂囨湰
+ getIdCardTypeText(type) {
+ const typeMap = {
+ "1": "韬唤璇�",
+ "2": "鎶ょ収",
+ "3": "鍐涘畼璇�"
+ };
+ return typeMap[type] || type || "-";
+ },
+
+ // 鏂囦欢棰勮鐩稿叧鏂规硶锛堜繚鎸佸師鏈変唬鐮侊級
getFileType(fileName) {
const extension = fileName
.split(".")
@@ -397,13 +558,11 @@
.toLowerCase();
const imageTypes = ["jpg", "jpeg", "png", "gif", "bmp", "webp"];
const pdfTypes = ["pdf"];
-
if (imageTypes.includes(extension)) return "image";
if (pdfTypes.includes(extension)) return "pdf";
return "other";
},
- // 鏂囦欢棰勮涓诲叆鍙�
handlePreview(file) {
this.currentFile = file;
this.previewTitle = `棰勮 - ${file.fileName}`;
@@ -423,7 +582,6 @@
}
},
- // PDF棰勮鏂规硶
previewPdf(file) {
this.pdfPreviewVisible = true;
this.pdfLoading = true;
@@ -433,13 +591,11 @@
this.pdfUrl = file.fileUrl;
},
- // PDF鍔犺浇瀹屾垚鍥炶皟
loadPdfHandler() {
this.pdfLoading = false;
this.currentPage = 1;
},
- // PDF鍔犺浇閿欒澶勭悊
pdfErrorHandler(error) {
console.error("PDF鍔犺浇澶辫触:", error);
this.pdfLoading = false;
@@ -447,26 +603,18 @@
this.pdfPreviewVisible = false;
},
- // 缈婚〉鍔熻兘
changePage(newPage) {
if (newPage < 1 || newPage > this.pageCount) return;
this.currentPage = newPage;
},
- // 缂╂斁鍔熻兘
zoomIn() {
- if (this.scale >= 200) {
- this.$message.info("宸叉斁澶у埌鏈�澶ф瘮渚�");
- return;
- }
+ if (this.scale >= 200) return;
this.scale += 10;
},
zoomOut() {
- if (this.scale <= 50) {
- this.$message.info("宸茬缉灏忓埌鏈�灏忔瘮渚�");
- return;
- }
+ if (this.scale <= 50) return;
this.scale -= 10;
},
@@ -474,24 +622,20 @@
this.scale = 100;
},
- // 鍥剧墖棰勮鏂规硶
previewImage(file) {
this.imagePreviewVisible = true;
},
- // 涓嶆敮鎸侀瑙堢殑鏂囦欢绫诲瀷
previewUnsupported(file) {
this.unsupportedPreviewVisible = true;
},
- // PDF瀵硅瘽妗嗗叧闂鐞�
handlePdfDialogClose() {
this.pdfUrl = "";
this.currentPage = 1;
this.pageCount = 0;
},
- // 鏂囦欢涓嬭浇
handleDownload(file) {
const link = document.createElement("a");
link.href = file.fileUrl;
@@ -503,31 +647,10 @@
this.$message.success("寮�濮嬩笅杞芥枃浠�");
},
- // 涓撶敤PDF涓嬭浇鏂规硶
downloadPdf(file) {
this.handleDownload(file);
},
- // 鏂囦欢鍒犻櫎
- handleDelete(file) {
- this.$confirm("纭畾瑕佸垹闄よ繖涓檮浠跺悧锛�", "鎻愮ず", {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning"
- }).then(() => {
- this.attachmentList = this.attachmentList.filter(
- item => item.id !== file.id
- );
- this.$message.success("鍒犻櫎鎴愬姛");
- });
- },
-
- // 涓婁紶闄勪欢
- handleUpload() {
- this.$message.info("涓婁紶鍔熻兘寰呭疄鐜�");
- },
-
- // 鏍煎紡鍖栨枃浠跺ぇ灏�
formatFileSize(bytes) {
if (bytes === 0) return "0 B";
const k = 1024;
diff --git a/src/views/business/appear/index.vue b/src/views/business/appear/index.vue
index 48ac893..f905c3e 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
@@ -73,34 +73,38 @@
@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="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">
+ <el-table-column label="鎬у埆" align="center" prop="sex" width="80">
<template slot-scope="scope">
- <dict-tag :options="genderOptions" :value="scope.row.gender" />
+ <dict-tag
+ :options="dict.type.sys_user_sex"
+ :value="parseInt(scope.row.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" />
+ <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"
@@ -110,20 +114,25 @@
<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">
+ <el-table-column
+ label="鐘舵��"
+ align="center"
+ prop="reportStatus"
+ width="100"
+ >
<template slot-scope="scope">
- <el-tag :type="scope.row.status | statusFilter">
- {{ scope.row.status | statusTextFilter }}
+ <el-tag :type="scope.row.reportStatus | statusFilter">
+ {{ scope.row.reportStatus | statusTextFilter }}
</el-tag>
</template>
</el-table-column>
@@ -147,7 +156,7 @@
type="text"
icon="el-icon-check"
@click="handleApprove(scope.row)"
- v-if="scope.row.status === '0'"
+ v-if="scope.row.reportStatus === '2'"
>瀹℃壒</el-button
>
</template>
@@ -175,7 +184,6 @@
</el-dialog>
<!-- 瀹℃壒寮规 -->
- <!-- 瀹℃壒寮规浼樺寲 -->
<el-dialog
title="妗堜緥瀹℃壒"
:visible.sync="approveOpen"
@@ -205,15 +213,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
@@ -233,11 +241,17 @@
<script>
import CaseDetail from "./caseDetail";
-import CaseDetailPreview from "./CaseDetailPreview";
+import {
+ donateList,
+ donateInfo,
+ donateDel,
+ donateEdit
+} from "@/api/businessApi/index";
+
export default {
name: "CaseList",
- components: { CaseDetail, CaseDetailPreview },
-
+ components: { CaseDetail },
+ dicts: ["sys_user_sex", "sys_BloodType"],
data() {
return {
// 閬僵灞�
@@ -276,14 +290,14 @@
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: ""
},
// 瀹℃壒琛ㄥ崟楠岃瘉
@@ -298,21 +312,23 @@
};
},
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,162 +336,255 @@
},
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: "瀛欏尰鐢�"
- }
- ];
+ 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.getMockData();
this.total = this.caseList.length;
+ } finally {
this.loading = false;
- }, 500);
+ }
},
+
+ /** 妯℃嫙鏁版嵁 */
+ getMockData() {
+ return [
+ {
+ id: 1,
+ caseNo: "DON20241219001",
+ name: "寮犱笁",
+ sex: "0",
+ age: 38,
+ bloodType: "A",
+ gscScore: "1",
+ diagnosisname:
+ "鑴戝浼ゅ鑷磋剳姝讳骸锛岀粡鎶㈡晳鏃犳晥瀹e竷鑴戞浜°�傚灞炲悓鎰忓櫒瀹樻崘鐚��",
+ treatmenthospitalname: "闈掑矝澶у闄勫睘鍖婚櫌",
+ reportStatus: "2",
+ reporttime: "2024-12-19 09:30:00",
+ reportername: "鏉庡尰鐢�",
+ idcardno: "370203198510123456",
+ nation: "姹夋棌",
+ phone: "13800138000",
+ registeraddress: "灞变笢鐪侀潚宀涘競甯傚崡鍖洪娓腑璺�100鍙�",
+ inpatientno: "ZY20241219001",
+ treatmentdeptname: "绁炵粡澶栫",
+ doctorname: "鐜嬩富浠�",
+ infectious: "鏃�",
+ illnessoverview:
+ "鎮h�呭洜浜ら�氫簨鏁呭鑷翠弗閲嶈剳澶栦激锛岀粡鎶㈡晳鏃犳晥瀹e竷鑴戞浜°��",
+ hospitalLevel: "涓夌骇鐢茬瓑",
+ contactperson: "寮犳姢澹�",
+ contactphone: "13900139000",
+ hospitalAddress: "灞变笢鐪侀潚宀涘競甯傚崡鍖烘睙鑻忚矾1鍙�"
+ },
+ {
+ id: 2,
+ caseNo: "DON20241218001",
+ name: "鏉庡洓",
+ sex: "0",
+ age: 45,
+ bloodType: "O",
+ gscScore: "3",
+ diagnosisname: "鎬ユ�у績鑲屾姝伙紝蹇冭剰鍔熻兘琛扮",
+ treatmenthospitalname: "闈掑矝甯傜珛鍖婚櫌",
+ reportStatus: "3",
+ reporttime: "2024-12-18 14:20:00",
+ approvetime: "2024-12-18 16:30:00",
+ reportername: "鍒樺尰鐢�",
+ approvername: "瀹℃牳涓撳憳A",
+ approveopinion: "璧勬枡榻愬叏锛岀鍚堟崘鐚潯浠讹紝鍚屾剰閫氳繃銆�"
+ }
+ ];
+ },
+
// 澶氶�夋閫変腑鏁版嵁
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();
},
+
/** 璇︽儏鎸夐挳鎿嶄綔 */
- handleDetail(row) {
- this.currentCase = row;
- this.detailTitle = `妗堜緥璇︽儏 - ${row.donorNo}`;
- this.detailOpen = true;
+ async handleDetail(row) {
+ try {
+ // 鍏堣幏鍙栨渚嬭鎯�
+ const response = await donateInfo(row.id);
+ this.currentCase = response.data || response || row;
+
+ // 濡傛灉鐘舵�佹槸"宸蹭笂鎶�"(1)锛屽垯浣跨敤瀹屾暣鏁版嵁鏇存柊涓�"宸查槄璇�"(2)
+ if (this.currentCase.reportStatus === "1") {
+ try {
+ // 浣跨敤瀹屾暣鐨勬渚嬫暟鎹綔涓烘洿鏂板熀纭�锛岀‘淇濇墍鏈夊瓧娈甸兘琚繚鐣�
+ const updateData = {
+ ...this.currentCase, // 灞曞紑鎵�鏈夌幇鏈夊瓧娈�
+ reportStatus: "2", // 鏇存柊鐘舵�佷负宸查槄璇�
+ updateTime: new Date()
+ .toISOString()
+ .replace("T", " ")
+ .substring(0, 19),
+ updateBy: "褰撳墠鐢ㄦ埛" // 娣诲姞鏇存柊浜轰俊鎭�
+ };
+
+ await donateEdit(updateData);
+
+ // 鏇存柊鏈湴鏁版嵁鍜屽綋鍓嶆樉绀虹殑鏁版嵁
+ this.currentCase.reportStatus = "2";
+ this.currentCase.updateTime = updateData.updateTime;
+ row.reportStatus = "2"; // 鏇存柊鍒楄〃涓殑鐘舵��
+
+ this.$modal.msgSuccess("鐘舵�佸凡鏇存柊涓哄凡闃呰");
+ } catch (updateError) {
+ console.error("鐘舵�佹洿鏂板け璐�:", updateError);
+ this.$modal.msgError("鐘舵�佹洿鏂板け璐ワ紝浣嗗皢缁х画鏄剧ず璇︽儏");
+ // 鏇存柊澶辫触鏃讹紝缁х画浣跨敤鍘熷鐘舵�佹樉绀鸿鎯�
+ }
+ }
+
+ this.detailTitle = `妗堜緥璇︽儏 - ${this.currentCase.caseNo ||
+ row.caseNo}`;
+ this.detailOpen = true;
+ } catch (error) {
+ console.error("鑾峰彇妗堜緥璇︽儏澶辫触:", error);
+ // 濡傛灉鑾峰彇璇︽儏澶辫触锛屼娇鐢ㄨ鏁版嵁浣滀负鍚庡
+ this.currentCase = row;
+ this.detailTitle = `妗堜緥璇︽儏 - ${row.caseNo}`;
+ this.detailOpen = true;
+
+ // 鍗充娇鑾峰彇璇︽儏澶辫触锛屼篃灏濊瘯鏇存柊鐘舵�侊紙浣跨敤琛屾暟鎹級
+ if (row.reportStatus === "1") {
+ try {
+ const updateData = {
+ id: row.id,
+ reportStatus: "2",
+ updateTime: new Date()
+ .toISOString()
+ .replace("T", " ")
+ .substring(0, 19),
+ updateBy: "褰撳墠鐢ㄦ埛"
+ // 娉ㄦ剰锛氳繖閲屽彧鑳戒紶閫掗儴鍒嗗瓧娈碉紝鍥犱负璇︽儏鑾峰彇澶辫触浜�
+ };
+
+ await donateEdit(updateData);
+ row.reportStatus = "2";
+ this.currentCase.reportStatus = "2";
+ this.$modal.msgSuccess("鐘舵�佸凡鏇存柊涓哄凡闃呰");
+ } catch (updateError) {
+ console.error("鐘舵�佹洿鏂板け璐�:", updateError);
+ }
+ }
+ }
},
- // 鍦ㄧ埗缁勪欢涓洿鏂板鎵规柟娉�
- handleApprove(row) {
- this.currentCase = row;
- this.approveForm.caseId = row.id;
- this.approveForm.approveResult = "1";
- this.approveForm.approveOpinion = "";
- this.approveOpen = true;
+
+ /** 瀹℃壒鎸夐挳鎿嶄綔 */
+ 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,
+ approveOpinion: this.approveForm.approveOpinion,
+ approvername: "褰撳墠鐢ㄦ埛", // 瀹為檯椤圭洰涓簲璇ヨ幏鍙栧綋鍓嶇櫥褰曠敤鎴�
+ approvetime: new Date()
+ .toISOString()
+ .replace("T", " ")
+ .substring(0, 19),
+ updateTime: new Date()
+ .toISOString()
+ .replace("T", " ")
+ .substring(0, 19),
+ updateBy: "褰撳墠鐢ㄦ埛"
+ };
+
+ // 绉婚櫎鍙兘涓嶉渶瑕佺殑瀛楁锛堟牴鎹疄闄匒PI闇�姹傝皟鏁达級
+ delete approveData.createTime; // 鍒涘缓鏃堕棿涓嶅簲琚洿鏂�
+ delete approveData.createBy; // 鍒涘缓浜轰笉搴斿彉
+
+ 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(); // 閲嶆柊鍔犺浇鍒楄〃
}
- });
+ } catch (error) {
+ console.error("瀹℃壒澶辫触:", error);
+ if (error !== "cancel") {
+ this.$modal.msgError("瀹℃壒澶辫触");
+ }
+ }
},
+
/** 鏂板鎸夐挳鎿嶄綔 */
handleAdd() {
this.$router.push("/case/add");
},
/** 鍒犻櫎鎸夐挳鎿嶄綔 */
- 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("鍒犻櫎澶辫触");
+ }
+ }
}
}
};
diff --git a/src/views/business/maintain/index.vue b/src/views/business/maintain/index.vue
index 3efbb4d..ebd1884 100644
--- a/src/views/business/maintain/index.vue
+++ b/src/views/business/maintain/index.vue
@@ -49,7 +49,7 @@
<el-option label="鏈畬鎴愭崘鐚�" value="5" />
</el-select>
</el-form-item>
- <el-form-item label="褰曞叆鏃堕棿" prop="recordTimeRange">
+ <el-form-item label="妗f褰曞叆鏃堕棿" prop="recordTimeRange">
<el-date-picker
v-model="queryParams.recordTimeRange"
type="daterange"
@@ -204,7 +204,7 @@
</el-tag>
</template>
</el-table-column>
- <el-table-column
+ <!-- <el-table-column
label="鎶ょ悊鏍告煡琛ㄥ綍鍏ユ椂闂�"
align="center"
prop="lastRecordTime"
@@ -217,7 +217,7 @@
: "-"
}}</span>
</template>
- </el-table-column>
+ </el-table-column> -->
<el-table-column
label="鍗忚皟鍛�"
align="center"
diff --git a/src/views/business/transfer/TransportEdit.vue b/src/views/business/transfer/TransportEdit.vue
index 227f050..a42de59 100644
--- a/src/views/business/transfer/TransportEdit.vue
+++ b/src/views/business/transfer/TransportEdit.vue
@@ -7,7 +7,12 @@
:close-on-click-modal="false"
@close="handleClose"
>
- <el-form ref="editForm" :model="formData" :rules="formRules" label-width="120px">
+ <el-form
+ ref="editForm"
+ :model="formData"
+ :rules="formRules"
+ label-width="120px"
+ >
<!-- 鍩虹淇℃伅 -->
<el-card class="form-section" shadow="never">
<div slot="header" class="section-header">
@@ -17,28 +22,42 @@
<el-row :gutter="20">
<el-col :span="12">
- <el-form-item label="杞繍鍗曞彿" prop="id">
- <el-input v-model="formData.id" :disabled="isEdit" placeholder="绯荤粺鑷姩鐢熸垚" />
+ <el-form-item label="杞繍鍗曞彿" prop="reportId">
+ <el-input
+ v-model="formData.reportId"
+ :disabled="isEdit"
+ placeholder="绯荤粺鑷姩鐢熸垚"
+ />
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="浣忛櫌鍙�" prop="caseNo">
- <el-input v-model="formData.caseNo" placeholder="璇疯緭鍏ヤ綇闄㈠彿" />
+ <el-form-item label="妗堜緥缂栧彿" prop="caseNo">
+ <el-input
+ v-model="formData.caseNo"
+ placeholder="璇疯緭鍏ユ渚嬬紪鍙�"
+ />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
- <el-form-item label="鎹愮尞鑰呭鍚�" prop="donorName">
- <el-input v-model="formData.donorName" placeholder="璇疯緭鍏ユ崘鐚�呭鍚�" />
+ <el-form-item label="鎮h�呭鍚�" prop="patName">
+ <el-input
+ v-model="formData.patName"
+ placeholder="璇疯緭鍏ユ偅鑰呭鍚�"
+ />
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="鎬у埆" prop="gender">
- <el-select v-model="formData.gender" placeholder="璇烽�夋嫨鎬у埆" style="width: 100%">
- <el-option label="鐢�" value="鐢�" />
- <el-option label="濂�" value="濂�" />
+ <el-form-item label="鎬у埆" prop="sex">
+ <el-select
+ v-model="formData.sex"
+ placeholder="璇烽�夋嫨鎬у埆"
+ style="width: 100%"
+ >
+ <el-option label="鐢�" value="1" />
+ <el-option label="濂�" value="2" />
</el-select>
</el-form-item>
</el-col>
@@ -57,8 +76,38 @@
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="鐤剧梾璇婃柇" prop="diagnosis">
- <el-input v-model="formData.diagnosis" placeholder="璇疯緭鍏ョ柧鐥呰瘖鏂�" />
+ <el-form-item label="鐤剧梾璇婃柇" prop="diagnosisname">
+ <el-input
+ v-model="formData.diagnosisname"
+ 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-office-building" style="color: #67C23A; 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="formData.treatmentHospitalName"
+ placeholder="璇疯緭鍏ユ不鐤楀尰闄㈠悕绉�"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="娌荤枟绉戝" prop="treatmentDeptName">
+ <el-input
+ v-model="formData.treatmentDeptName"
+ placeholder="璇疯緭鍏ユ不鐤楃瀹ゅ悕绉�"
+ />
</el-form-item>
</el-col>
</el-row>
@@ -67,93 +116,228 @@
<!-- 杞繍淇℃伅 -->
<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>
+ <i class="el-icon-location-information" style="color: #E6A23C; margin-right: 8px;"></i>
<span>杞繍淇℃伅</span>
</div>
<el-row :gutter="20">
<el-col :span="12">
- <el-form-item label="鍑哄彂鍖婚櫌" prop="hospitalName">
- <el-input v-model="formData.hospitalName" placeholder="璇疯緭鍏ュ嚭鍙戝尰闄�" />
+ <el-form-item label="鍑哄彂鍦扮偣" prop="transportStartPlace">
+ <el-input
+ v-model="formData.transportStartPlace"
+ placeholder="璇疯緭鍏ュ嚭鍙戝湴鐐�"
+ />
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="鐩殑鍖婚櫌" prop="destinationHospital">
- <el-input v-model="formData.destinationHospital" placeholder="璇疯緭鍏ョ洰鐨勫尰闄�" />
- </el-form-item>
- </el-col>
- </el-row>
-
- <el-row :gutter="20">
- <el-col :span="12">
- <el-form-item label="璁″垝杞繍鏃堕棿" prop="transportTime">
+ <el-form-item label="鍑哄彂鏃堕棿" prop="transportStartTime">
<el-date-picker
- v-model="formData.transportTime"
+ v-model="formData.transportStartTime"
type="datetime"
- placeholder="閫夋嫨杞繍鏃堕棿"
+ placeholder="閫夋嫨鍑哄彂鏃堕棿"
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="coordinator">
- <el-input v-model="formData.coordinator" placeholder="璇疯緭鍏ュ崗璋冨憳濮撳悕" />
+ <el-form-item label="杞繍鐘舵��" prop="transitStatus">
+ <el-select
+ v-model="formData.transitStatus"
+ 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-option label="鏆傚瓨" :value="5" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="璐熻矗鍗忚皟鍛�" prop="contactPerson">
+ <el-input
+ v-model="formData.contactPerson"
+ placeholder="璇疯緭鍏ュ崗璋冨憳濮撳悕"
+ />
</el-form-item>
</el-col>
</el-row>
-
- <el-form-item label="鍑哄彂鍦扮偣" prop="departureLocation">
- <el-input v-model="formData.departureLocation" placeholder="璇疯緭鍏ヨ缁嗗嚭鍙戝湴鐐�" />
- </el-form-item>
</el-card>
- <!-- 鍥㈤槦鎴愬憳 -->
+ <!-- 鍖绘姢浜哄憳淇℃伅 -->
<el-card class="form-section" shadow="never">
<div slot="header" class="section-header">
- <i class="el-icon-user" style="color: #E6A23C; margin-right: 8px;"></i>
- <span>鍥㈤槦鎴愬憳</span>
+ <i class="el-icon-user" style="color: #F56C6C; margin-right: 8px;"></i>
+ <span>鍖绘姢浜哄憳淇℃伅</span>
</div>
<el-row :gutter="20">
<el-col :span="12">
- <el-form-item label="鎬ヨ瘖绉戝尰鐢�" prop="emergencyDoctor">
- <el-input v-model="formData.emergencyDoctor" placeholder="璇疯緭鍏ユ�ヨ瘖绉戝尰鐢�" />
+ <el-form-item label="鎬ヨ瘖绉戝尰鐢�" prop="doctor">
+ <el-input
+ v-model="formData.doctor"
+ placeholder="璇疯緭鍏ユ�ヨ瘖绉戝尰鐢�"
+ />
</el-form-item>
</el-col>
+ <el-col :span="12">
+ <el-form-item label="鍖荤敓鐢佃瘽" prop="doctorPhone">
+ <el-input
+ v-model="formData.doctorPhone"
+ placeholder="璇疯緭鍏ュ尰鐢熸墜鏈哄彿"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
<el-col :span="12">
<el-form-item label="鎶ゅ+" prop="nurse">
<el-input v-model="formData.nurse" placeholder="璇疯緭鍏ユ姢澹鍚�" />
</el-form-item>
</el-col>
+ <el-col :span="12">
+ <el-form-item label="鎶ゅ+鐢佃瘽" prop="nursePhone">
+ <el-input
+ v-model="formData.nursePhone"
+ placeholder="璇疯緭鍏ユ姢澹墜鏈哄彿"
+ />
+ </el-form-item>
+ </el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
- <el-form-item label="鍙告満" prop="driver">
- <el-input v-model="formData.driver" placeholder="璇疯緭鍏ュ徃鏈哄鍚�" />
+ <el-form-item label="椹鹃┒鍛�" prop="driver">
+ <el-input
+ v-model="formData.driver"
+ placeholder="璇疯緭鍏ラ┚椹跺憳濮撳悕"
+ />
</el-form-item>
</el-col>
<el-col :span="12">
+ <el-form-item label="椹鹃┒鍛樼數璇�" prop="driverPhone">
+ <el-input
+ v-model="formData.driverPhone"
+ placeholder="璇疯緭鍏ラ┚椹跺憳鎵嬫満鍙�"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="12">
<el-form-item label="ICU璇勪及鍖荤敓" prop="icuDoctor">
- <el-input v-model="formData.icuDoctor" placeholder="璇疯緭鍏CU鍖荤敓" />
+ <el-input
+ v-model="formData.icuDoctor"
+ placeholder="璇疯緭鍏CU璇勪及鍖荤敓"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="ICU鍖荤敓鐢佃瘽" prop="icuDoctorPhone">
+ <el-input
+ v-model="formData.icuDoctorPhone"
+ placeholder="璇疯緭鍏CU鍖荤敓鎵嬫満鍙�"
+ />
</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-folder" style="color: #909399; 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="formData.annexfilesList && formData.annexfilesList.length > 0">
+ <div class="list-title">宸蹭笂浼犻檮浠� ({{ formData.annexfilesList.length }})</div>
+ <el-table :data="formData.annexfilesList" style="width: 100%" size="small">
+ <el-table-column label="鏂囦欢鍚�" min-width="200">
+ <template slot-scope="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 slot-scope="scope">
+ <el-tag size="small">{{ getFileType(scope.row.fileName) }}</el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column label="鍒涘缓鏃堕棿" width="160">
+ <template slot-scope="scope">
+ <span>{{ formatDateTime(scope.row.createTime) }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" width="180">
+ <template slot-scope="scope">
+ <el-button
+ size="mini"
+ type="primary"
+ @click="handlePreview(scope.row)"
+ >
+ 棰勮
+ </el-button>
+ <el-button
+ size="mini"
+ type="success"
+ @click="handleDownload(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: #909399; margin-right: 8px;"></i>
+ <i class="el-icon-edit" style="color: #409EFF; margin-right: 8px;"></i>
<span>澶囨敞淇℃伅</span>
</div>
- <el-form-item prop="remarks">
+ <el-form-item prop="remark">
<el-input
- v-model="formData.remarks"
+ v-model="formData.remark"
type="textarea"
:rows="4"
- placeholder="璇疯緭鍏ヨ浆杩愬娉ㄤ俊鎭�"
+ placeholder="璇疯緭鍏ュ娉ㄤ俊鎭�"
maxlength="500"
show-word-limit
/>
@@ -165,12 +349,29 @@
<el-button @click="handleClose">鍙栨秷</el-button>
<el-button type="primary" :loading="saveLoading" @click="handleSave">淇濆瓨</el-button>
</div>
+
+ <!-- 鏂囦欢棰勮寮圭獥 -->
+ <FilePreviewDialog
+ :visible="previewVisible"
+ :file="currentPreviewFile"
+ @close="previewVisible = false"
+ @download="handleDownload"
+ />
</el-dialog>
</template>
<script>
+import { transportAdd, transportEdit } from "@/api/businessApi/index";
+import UploadAttachment from "@/components/UploadAttachment";
+import FilePreviewDialog from "@/components/FilePreviewDialog";
+import dayjs from "dayjs";
+
export default {
name: "TransportEdit",
+ components: {
+ UploadAttachment,
+ FilePreviewDialog
+ },
props: {
editOpen: {
type: Boolean,
@@ -188,34 +389,38 @@
data() {
return {
saveLoading: false,
+ // 棰勮鐩稿叧
+ previewVisible: false,
+ currentPreviewFile: null,
+ // 闄勪欢鐩稿叧閰嶇疆
+ attachmentLimit: 10,
+ attachmentAccept: ".pdf,.jpg,.jpeg,.png,.doc,.docx,.xls,.xlsx",
+ attachmentFileList: [],
+ // 琛ㄥ崟鏁版嵁
formData: this.getDefaultFormData(),
formRules: {
caseNo: [
- { required: true, message: '璇疯緭鍏ヤ綇闄㈠彿', trigger: 'blur' }
+ { required: true, message: "璇疯緭鍏ユ渚嬬紪鍙�", trigger: "blur" }
],
- donorName: [
- { required: true, message: '璇疯緭鍏ユ崘鐚�呭鍚�', trigger: 'blur' }
+ patName: [
+ { required: true, message: "璇疯緭鍏ユ偅鑰呭鍚�", trigger: "blur" }
],
- gender: [
- { required: true, message: '璇烽�夋嫨鎬у埆', trigger: 'change' }
+ sex: [{ required: true, message: "璇烽�夋嫨鎬у埆", trigger: "change" }],
+ age: [{ required: true, message: "璇疯緭鍏ュ勾榫�", trigger: "blur" }],
+ diagnosisname: [
+ { required: true, message: "璇疯緭鍏ョ柧鐥呰瘖鏂悕绉�", trigger: "blur" }
],
- age: [
- { required: true, message: '璇疯緭鍏ュ勾榫�', trigger: 'blur' }
+ treatmentHospitalName: [
+ { required: true, message: "璇疯緭鍏ユ不鐤楀尰闄㈠悕绉�", trigger: "blur" }
],
- diagnosis: [
- { required: true, message: '璇疯緭鍏ョ柧鐥呰瘖鏂�', trigger: 'blur' }
+ transportStartPlace: [
+ { required: true, message: "璇疯緭鍏ュ嚭鍙戝湴鐐�", trigger: "blur" }
],
- hospitalName: [
- { required: true, message: '璇疯緭鍏ュ嚭鍙戝尰闄�', trigger: 'blur' }
+ transportStartTime: [
+ { required: true, message: "璇烽�夋嫨鍑哄彂鏃堕棿", trigger: "change" }
],
- destinationHospital: [
- { required: true, message: '璇疯緭鍏ョ洰鐨勫尰闄�', trigger: 'blur' }
- ],
- transportTime: [
- { required: true, message: '璇烽�夋嫨杞繍鏃堕棿', trigger: 'change' }
- ],
- coordinator: [
- { required: true, message: '璇疯緭鍏ヨ礋璐e崗璋冨憳', trigger: 'blur' }
+ contactPerson: [
+ { required: true, message: "璇疯緭鍏ヨ礋璐e崗璋冨憳", trigger: "blur" }
]
}
};
@@ -223,9 +428,11 @@
watch: {
editOpen(val) {
if (val) {
- this.formData = this.isEdit ?
- { ...this.transportData } :
- this.getDefaultFormData();
+ this.formData = this.isEdit
+ ? { ...this.getDefaultFormData(), ...this.transportData }
+ : this.getDefaultFormData();
+
+ this.initAttachmentList();
this.$nextTick(() => {
this.$refs.editForm && this.$refs.editForm.clearValidate();
@@ -234,32 +441,179 @@
}
},
methods: {
+ /** 鑾峰彇榛樿琛ㄥ崟鏁版嵁 */
getDefaultFormData() {
return {
- id: '',
- caseNo: '',
- donorName: '',
- gender: '',
- age: null,
- diagnosis: '',
- hospitalName: '',
- destinationHospital: '',
- transportTime: '',
- coordinator: '',
- departureLocation: '',
- emergencyDoctor: '',
- nurse: '',
- driver: '',
- icuDoctor: '',
- remarks: '',
- status: 'pending',
- statusText: '寰呭嚭鍙�'
+ id: undefined,
+ reportId: undefined,
+ caseNo: undefined,
+ patName: undefined,
+ sex: undefined,
+ age: undefined,
+ diagnosisname: undefined,
+ treatmentHospitalName: undefined,
+ treatmentDeptName: undefined,
+ transportStartPlace: undefined,
+ transportStartTime: undefined,
+ contactPerson: undefined,
+ transitStatus: 1,
+ doctor: undefined,
+ doctorPhone: undefined,
+ nurse: undefined,
+ nursePhone: undefined,
+ driver: undefined,
+ driverPhone: undefined,
+ icuDoctor: undefined,
+ icuDoctorPhone: undefined,
+ annexfilesList: [],
+ remark: undefined,
+ createBy: undefined,
+ createTime: undefined,
+ updateBy: undefined,
+ updateTime: undefined,
+ delFlag: 0
};
},
+ /** 鍒濆鍖栭檮浠跺垪琛� */
+ initAttachmentList() {
+ if (this.isEdit && this.transportData.annexfilesList) {
+ this.formData.annexfilesList = [...this.transportData.annexfilesList];
+ this.attachmentFileList = this.transportData.annexfilesList.map(item => ({
+ uid: item.id || Math.random(),
+ name: item.fileName,
+ url: item.path || item.fileUrl,
+ status: 'success'
+ }));
+ } else {
+ this.formData.annexfilesList = [];
+ this.attachmentFileList = [];
+ }
+ },
+
+ /** 闄勪欢鍙樺寲澶勭悊 */
+ handleAttachmentChange(fileList) {
+ this.attachmentFileList = fileList;
+ },
+
+ /** 闄勪欢绉婚櫎澶勭悊 */
+ handleAttachmentRemove(file) {
+ if (file.url) {
+ const index = this.formData.annexfilesList.findIndex(item =>
+ item.path === file.url || item.fileUrl === file.url
+ );
+ if (index > -1) {
+ this.formData.annexfilesList.splice(index, 1);
+ }
+ }
+ },
+
+ /** 鎵嬪姩鍒犻櫎闄勪欢 */
+ handleRemoveAttachment(index) {
+ this.formData.annexfilesList.splice(index, 1);
+ this.attachmentFileList.splice(index, 1);
+ this.$message.success('闄勪欢鍒犻櫎鎴愬姛');
+ },
+
+ /** 涓婁紶鎴愬姛澶勭悊 */
+ handleUploadSuccess({ file, fileList, response }) {
+ if (response.code === 200) {
+ 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'),
+ transportId: this.formData.id,
+ delFlag: 0,
+ caseNo:this.formData.caseNo
+ };
+
+ this.formData.annexfilesList.push(attachmentObj);
+ this.$message.success('鏂囦欢涓婁紶鎴愬姛');
+ }
+ },
+
+ /** 涓婁紶閿欒澶勭悊 */
+ handleUploadError({ file, fileList, error }) {
+ console.error('闄勪欢涓婁紶澶辫触:', error);
+ this.$message.error('鏂囦欢涓婁紶澶辫触锛岃閲嶈瘯');
+ },
+
+ /** 鏂囦欢棰勮 */
+ 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', 'ppt', 'pptx'];
+
+ if (imageTypes.includes(extension)) return 'image';
+ if (pdfTypes.includes(extension)) return 'pdf';
+ if (officeTypes.includes(extension)) return 'office';
+ return 'other';
+ },
+
+ /** 鑾峰彇鏂囦欢鎵╁睍鍚� */
+ getFileExtension(filename) {
+ return filename.split('.').pop().toLowerCase();
+ },
+
+ /** 鏃ユ湡鏃堕棿鏍煎紡鍖� */
+ formatDateTime(dateTime) {
+ if (!dateTime) return '';
+
+ try {
+ const date = new Date(dateTime);
+ if (isNaN(date.getTime())) return dateTime;
+
+ const year = date.getFullYear();
+ const month = String(date.getMonth() + 1).padStart(2, '0');
+ const day = String(date.getDate()).padStart(2, '0');
+ const hours = String(date.getHours()).padStart(2, '0');
+ const minutes = String(date.getMinutes()).padStart(2, '0');
+ const seconds = String(date.getSeconds()).padStart(2, '0');
+
+ return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
+ } catch (error) {
+ return dateTime;
+ }
+ },
+
handleClose() {
- this.$emit('update:editOpen', false);
- this.$emit('close');
+ this.$emit("update:editOpen", false);
+ this.$emit("close");
+ this.previewVisible = false;
},
async handleSave() {
@@ -267,18 +621,33 @@
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;
- // 妯℃嫙API璋冪敤
- await new Promise(resolve => setTimeout(resolve, 1000));
+ const requestData = { ...this.formData };
+ let response;
- this.$message.success(this.isEdit ? '淇敼鎴愬姛' : '鏂板缓鎴愬姛');
- this.handleClose();
- this.$emit('save-success');
+ if (this.isEdit) {
+ response = await transportEdit(requestData);
+ } else {
+ response = await transportAdd(requestData);
+ }
+ if (response.code === 200) {
+ this.$message.success(this.isEdit ? "淇敼鎴愬姛" : "鏂板缓鎴愬姛");
+ this.handleClose();
+ this.$emit("save-success");
+ } else {
+ this.$message.error(response.msg || "鎿嶄綔澶辫触");
+ }
} catch (error) {
- console.error('淇濆瓨澶辫触:', error);
- this.$message.error('鎿嶄綔澶辫触');
+ console.error("淇濆瓨澶辫触:", error);
+ this.$message.error("鎿嶄綔澶辫触锛岃绋嶅悗閲嶈瘯");
} finally {
this.saveLoading = false;
}
@@ -304,6 +673,47 @@
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;
+}
+
+.file-path {
+ font-size: 12px;
+ color: #909399;
+}
+
::v-deep .el-card__header {
background: #f5f7fa;
border-bottom: 1px solid #ebeef5;
diff --git a/src/views/business/transfer/index.vue b/src/views/business/transfer/index.vue
index 0c9a95a..5325b13 100644
--- a/src/views/business/transfer/index.vue
+++ b/src/views/business/transfer/index.vue
@@ -8,45 +8,37 @@
:inline="true"
label-width="80px"
>
- <el-form-item label="杞繍鍗曞彿" prop="transportNo">
- <el-input
- v-model="queryParams.transportNo"
- placeholder="璇疯緭鍏ヨ浆杩愬崟鍙�"
- clearable
- style="width: 200px"
- @keyup.enter.native="handleQuery"
- />
- </el-form-item>
- <el-form-item label="浣忛櫌鍙�" prop="caseNo">
+ <el-form-item label="妗堜緥缂栧彿" prop="caseNo">
<el-input
v-model="queryParams.caseNo"
- placeholder="璇疯緭鍏ヤ綇闄㈠彿"
+ placeholder="璇疯緭鍏ユ渚嬬紪鍙�"
clearable
style="width: 200px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
- <el-form-item label="鎹愮尞鑰呭鍚�" prop="donorName">
+ <el-form-item label="鎮h�呭鍚�" prop="patName">
<el-input
- v-model="queryParams.donorName"
- placeholder="璇疯緭鍏ユ崘鐚�呭鍚�"
+ v-model="queryParams.patName"
+ placeholder="璇疯緭鍏ユ偅鑰呭鍚�"
clearable
style="width: 200px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
- <el-form-item label="杞繍鐘舵��" prop="status">
+ <el-form-item label="杞繍鐘舵��" prop="transitStatus">
<el-select
- v-model="queryParams.status"
+ v-model="queryParams.transitStatus"
placeholder="杞繍鐘舵��"
clearable
style="width: 200px"
>
<el-option label="鍏ㄩ儴" value="" />
- <el-option label="寰呭嚭鍙�" value="pending" />
- <el-option label="杞繍涓�" value="transporting" />
- <el-option label="宸插畬鎴�" value="completed" />
- <el-option label="宸插彇娑�" value="cancelled" />
+ <el-option label="寰呰浆杩�" :value="1" />
+ <el-option label="杞繍涓�" :value="2" />
+ <el-option label="杞繍瀹屾垚" :value="3" />
+ <el-option label="杞繍鍙栨秷" :value="4" />
+ <el-option label="鏆傚瓨" :value="5" />
</el-select>
</el-form-item>
<el-form-item label="鍒涘缓鏃堕棿">
@@ -148,7 +140,7 @@
></right-toolbar>
</el-row>
- <!-- 鏁版嵁琛ㄦ牸 -->
+ <!-- 鏁版嵁琛ㄦ牸 - 鐩存帴浣跨敤鍚庣杩斿洖鐨勬暟鎹粨鏋� -->
<el-table
v-loading="loading"
:data="transportList"
@@ -156,19 +148,28 @@
>
<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="id" width="140" />
<el-table-column
- label="浣忛櫌鍙�"
+ label="杞繍鍗曞彿"
+ align="center"
+ prop="reportId"
+ width="140"
+ />
+ <el-table-column
+ label="妗堜緥缂栧彿"
align="center"
prop="caseNo"
width="140"
/>
- <el-table-column label="鎹愮尞鑰呬俊鎭�" align="center" width="180">
+ <el-table-column label="鎮h�呬俊鎭�" align="center" width="260">
<template slot-scope="scope">
<div class="donor-info">
- <div class="donor-name">{{ scope.row.donorName }}</div>
+ <div class="donor-name">{{ scope.row.patName }}</div>
<div class="donor-details">
- {{ scope.row.gender }} | {{ scope.row.age }}宀�
+ <dict-tag
+ :options="dict.type.sys_user_sex"
+ :value="parseInt(scope.row.sex)"
+ />
+ | {{ scope.row.age }}宀�
</div>
</div>
</template>
@@ -176,37 +177,37 @@
<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="transportTime"
+ prop="transportStartTime"
width="160"
/>
<el-table-column
label="璐熻矗鍗忚皟鍛�"
align="center"
- prop="coordinator"
+ prop="contactPerson"
width="100"
/>
<el-table-column
label="杞繍鐘舵��"
align="center"
- prop="status"
+ prop="transitStatus"
width="100"
>
<template slot-scope="scope">
- <el-tag :type="scope.row.status | statusFilter">
- {{ scope.row.statusText }}
+ <el-tag :type="getStatusTagType(scope.row.transitStatus)">
+ {{ getStatusText(scope.row.transitStatus) }}
</el-tag>
</template>
</el-table-column>
@@ -242,7 +243,7 @@
type="text"
icon="el-icon-video-play"
@click="handleStartTransport(scope.row)"
- v-if="scope.row.status === 'pending'"
+ v-if="scope.row.transitStatus === 1"
>寮�濮嬭浆杩�</el-button
>
<el-button
@@ -250,7 +251,7 @@
type="text"
icon="el-icon-check"
@click="handleCompleteTransport(scope.row)"
- v-if="scope.row.status === 'transporting'"
+ v-if="scope.row.transitStatus === 2"
>瀹屾垚杞繍</el-button
>
</template>
@@ -296,7 +297,11 @@
append-to-body
>
<div class="action-confirm">
- <p>纭畾瑕亄{ actionText }}杞繍鍗� "{{ currentTransport.id }}" 鍚楋紵</p>
+ <p>
+ 纭畾瑕亄{ actionText }}杞繍鍗� "{{
+ currentTransport.reportId || currentTransport.id
+ }}" 鍚楋紵
+ </p>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="actionOpen = false">鍙� 娑�</el-button>
@@ -308,17 +313,19 @@
<script>
import {
- listTransport,
- getTransport,
- delTransport,
- updateTransportStatus
-} from "@/api/system/business";
+ transportList,
+ transportAdd,
+ transportEdit,
+ transportDelete,
+ transportInfo
+} from "@/api/businessApi/index";
import TransportDetail from "./transportDetail";
import TransportEdit from "./TransportEdit";
export default {
name: "TransportList",
components: { TransportDetail, TransportEdit },
+ dicts: ["sys_user_sex", "sys_BloodType"],
data() {
return {
// 閬僵灞�
@@ -333,7 +340,7 @@
showSearch: true,
// 鎬绘潯鏁�
total: 0,
- // 杞繍鍗曡〃鏍兼暟鎹�
+ // 杞繍鍗曡〃鏍兼暟鎹� - 鐩存帴浣跨敤鍚庣杩斿洖鐨勬暟鎹粨鏋�
transportList: [],
// 璇︽儏寮规鏄惁鏄剧ず
detailOpen: false,
@@ -358,143 +365,101 @@
pendingTransports: 0,
completedTransports: 0
},
- // 鏌ヨ鍙傛暟
+ // 鏌ヨ鍙傛暟锛堝畬鍏ㄩ�傞厤鍚庣鎺ュ彛锛�
queryParams: {
pageNum: 1,
pageSize: 10,
- transportNo: undefined,
- caseNo: undefined,
- donorName: undefined,
- status: undefined
+ caseNo: undefined, // 妗堜緥缂栧彿
+ patName: undefined, // 鎮h�呭鍚�
+ transitStatus: undefined, // 杞繍鐘舵�侊細1寰呰浆杩� 2杞繍涓� 3杞繍瀹屾垚 4杞繍鍙栨秷 5鏆傚瓨
+ searchValue: undefined, // 鎼滅储鍊�
+ params: {} // 鍏朵粬鍙傛暟瀵硅薄
}
};
- },
- filters: {
- statusFilter(status) {
- const statusMap = {
- pending: "warning",
- transporting: "primary",
- completed: "success",
- cancelled: "danger"
- };
- return statusMap[status];
- }
},
created() {
this.getList();
},
methods: {
- /** 鏌ヨ杞繍鍗曞垪琛� */
- getList() {
+ /** 鏌ヨ杞繍鍗曞垪琛� - 鐩存帴浣跨敤鍚庣鏁版嵁缁撴瀯 */
+ async getList() {
this.loading = true;
- // 妯℃嫙API璋冪敤寤惰繜
- setTimeout(() => {
- // 娴嬭瘯鏁版嵁
- this.transportList = [
- {
- id: "T20241217001",
- caseNo: "DON20241216001",
- donorName: "寮犱笁",
- gender: "鐢�",
- age: 38,
- diagnosis:
- "鑴戝浼ゅ鑷磋剳姝讳骸锛岀粡鎶㈡晳鏃犳晥瀹e竷鑴戞浜°�傚灞炲悓鎰忓櫒瀹樻崘鐚��",
- hospitalName: "闈掑矝闀滄箹鍖婚櫌",
- transportTime: "2024-12-17 14:30:00",
- coordinator: "寮犲尰鐢�",
- createTime: "2024-12-16 09:30:00",
- status: "pending",
- statusText: "寰呭嚭鍙�",
- departureLocation: "闈掑矝甯傜珛鍖婚櫌鎬ヨ瘖绉�",
- destinationHospital: "闈掑矝闀滄箹鍖婚櫌",
- emergencyDoctor: "鐜嬪尰鐢�",
- nurse: "鏉庢姢澹�",
- driver: "鍒樺笀鍌�",
- icuDoctor: "璧靛尰鐢�",
- contacts: [
- { role: "鍗忚皟鍛樼數璇�", phone: "13800138000" },
- { role: "鎬ヨ瘖鍖荤敓鐢佃瘽", phone: "13800138001" },
- { role: "鎶ゅ+鐢佃瘽", phone: "13800138002" },
- { role: "鍙告満鐢佃瘽", phone: "13800138003" },
- { role: "ICU鍖荤敓鐢佃瘽", phone: "13800138004" }
- ],
- remarks: "闇�瑕佸噯澶囧懠鍚告満绛夋�ユ晳璁惧"
- },
- {
- id: "T20241217002",
- caseNo: "DON20241216002",
- donorName: "鏉庡洓",
- gender: "濂�",
- age: 45,
- diagnosis: "鑴戞姝伙紝鑴戝共鍔熻兘涓уけ",
- hospitalName: "闈掑矝澶у闄勫睘鍖婚櫌",
- transportTime: "2024-12-17 16:00:00",
- coordinator: "鏉庡尰鐢�",
- createTime: "2024-12-16 11:20:00",
- status: "transporting",
- statusText: "杞繍涓�",
- departureLocation: "闈掑矝澶у闄勫睘鍖婚櫌ICU",
- destinationHospital: "闈掑矝鍣ㄥ畼绉绘涓績",
- currentLocation: "闈掑矝甯傚崡鍖洪娓腑璺�",
- estimatedTime: "30鍒嗛挓"
- },
- {
- id: "T20241216003",
- caseNo: "DON20241215001",
- donorName: "鐜嬩簲",
- gender: "鐢�",
- age: 52,
- diagnosis: "蹇冭剰楠ゅ仠锛屽鍣ㄥ畼鍔熻兘琛扮",
- hospitalName: "闈掑矝甯傜珛鍖婚櫌",
- transportTime: "2024-12-16 10:15:00",
- coordinator: "鐜嬪尰鐢�",
- createTime: "2024-12-15 14:45:00",
- status: "completed",
- statusText: "宸插畬鎴�",
- departureLocation: "闈掑矝甯傜珛鍖婚櫌蹇冨唴绉�",
- destinationHospital: "闈掑矝鍣ㄥ畼绉绘涓績",
- completedTime: "2024-12-16 12:30:00",
- distance: "15鍏噷",
- duration: "2灏忔椂15鍒嗛挓"
- },
- {
- id: "T20241216004",
- caseNo: "DON20241214001",
- donorName: "璧靛叚",
- gender: "濂�",
- age: 29,
- diagnosis: "鎬ユ�ц倽琛扮",
- hospitalName: "闈掑矝绉戝ぇ鍖婚櫌",
- transportTime: "2024-12-16 08:30:00",
- coordinator: "璧靛尰鐢�",
- createTime: "2024-12-14 16:20:00",
- status: "cancelled",
- statusText: "宸插彇娑�",
- cancelReason: "瀹跺睘涓存椂鏀瑰彉鍐冲畾"
- }
- ];
- // 鏇存柊缁熻鏁版嵁
- this.updateStats();
- this.total = this.transportList.length;
+ try {
+ // 鏋勫缓绗﹀悎鍚庣鎺ュ彛鐨勮姹傚弬鏁� [1,2](@ref)
+ const requestParams = {
+ pageNum: this.queryParams.pageNum,
+ pageSize: this.queryParams.pageSize,
+ caseNo: this.queryParams.caseNo,
+ patName: this.queryParams.patName,
+ transitStatus: this.queryParams.transitStatus,
+ searchValue: this.queryParams.searchValue
+ };
+
+ // 澶勭悊鏃堕棿鑼冨洿鍙傛暟 [5](@ref)
+ if (this.dateRange && this.dateRange.length === 2) {
+ requestParams.transportStartTime = this.dateRange.join(",");
+ }
+
+ // 璋冪敤姝e紡鎺ュ彛 [3](@ref)
+ const response = await transportList(requestParams);
+
+ if (response.code === 200) {
+ // 鐩存帴浣跨敤鍚庣杩斿洖鐨勬暟鎹粨鏋勶紝涓嶈繘琛岃浆鎹� [8](@ref)
+ this.transportList = response.rows || response.data || [];
+ this.total = response.total || 0;
+
+ // 鏇存柊缁熻鏁版嵁
+ this.updateStats();
+ } else {
+ this.$modal.msgError(response.msg || "鑾峰彇杞繍鍗曞垪琛ㄥけ璐�");
+ }
+ } catch (error) {
+ console.error("鑾峰彇杞繍鍗曞垪琛ㄥけ璐�:", error);
+ this.$modal.msgError("缃戠粶璇锋眰澶辫触锛岃绋嶅悗閲嶈瘯");
+ } finally {
this.loading = false;
- }, 500);
+ }
+ },
+
+ /** 鑾峰彇鐘舵�佹爣绛剧被鍨� */
+ getStatusTagType(transitStatus) {
+ const statusMap = {
+ 1: "warning", // 寰呰浆杩�
+ 2: "primary", // 杞繍涓�
+ 3: "success", // 杞繍瀹屾垚
+ 4: "danger", // 杞繍鍙栨秷
+ 5: "info" // 鏆傚瓨
+ };
+ return statusMap[transitStatus] || "info";
+ },
+
+ /** 鑾峰彇鐘舵�佹枃鏈� */
+ getStatusText(transitStatus) {
+ const statusMap = {
+ 1: "寰呰浆杩�",
+ 2: "杞繍涓�",
+ 3: "杞繍瀹屾垚",
+ 4: "杞繍鍙栨秷",
+ 5: "鏆傚瓨"
+ };
+ return statusMap[transitStatus] || "鏈煡鐘舵��";
},
// 鏇存柊缁熻鏁版嵁
updateStats() {
this.stats.totalTransports = this.transportList.length;
this.stats.pendingTransports = this.transportList.filter(
- item => item.status === "pending"
+ item => item.transitStatus === 1
).length;
this.stats.completedTransports = this.transportList.filter(
- item => item.status === "completed"
+ item => item.transitStatus === 3
).length;
},
// 澶氶�夋閫変腑鏁版嵁
handleSelectionChange(selection) {
- this.ids = selection.map(item => item.id);
+ this.ids = selection.map(item => item.reportId || item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
@@ -504,6 +469,28 @@
this.queryParams.pageNum = 1;
this.getList();
},
+
+ /** 閲嶇疆鎸夐挳鎿嶄綔 */
+ resetQuery() {
+ this.dateRange = [];
+ this.queryParams = {
+ pageNum: 1,
+ pageSize: 10,
+ caseNo: undefined,
+ patName: undefined,
+ transitStatus: undefined,
+ searchValue: undefined
+ };
+ this.getList();
+ },
+
+ /** 璇︽儏鎸夐挳鎿嶄綔 */
+ handleDetail(row) {
+ this.currentTransport = row;
+ this.detailTitle = `杞繍鍗曡鎯� - ${row.reportId || row.id}`;
+ this.detailOpen = true;
+ },
+
/** 淇敼鎸夐挳鎿嶄綔 */
handleUpdate(row) {
this.currentTransport = row || {};
@@ -528,22 +515,9 @@
handleSaveSuccess() {
this.getList(); // 閲嶆柊鍔犺浇鍒楄〃
},
- /** 閲嶇疆鎸夐挳鎿嶄綔 */
- resetQuery() {
- this.dateRange = [];
- this.resetForm("queryForm");
- this.handleQuery();
- },
-
- /** 璇︽儏鎸夐挳鎿嶄綔 */
- handleDetail(row) {
- this.currentTransport = row;
- this.detailTitle = `杞繍鍗曡鎯� - ${row.id}`;
- this.detailOpen = true;
- },
/** 寮�濮嬭浆杩愭搷浣� */
- handleStartTransport(row) {
+ async handleStartTransport(row) {
this.currentTransport = row;
this.actionTitle = "寮�濮嬭浆杩�";
this.actionText = "寮�濮�";
@@ -551,59 +525,70 @@
},
/** 瀹屾垚杞繍鎿嶄綔 */
- handleCompleteTransport(row) {
+ async handleCompleteTransport(row) {
this.currentTransport = row;
this.actionTitle = "瀹屾垚杞繍";
this.actionText = "瀹屾垚";
this.actionOpen = true;
},
- /** 纭鎿嶄綔 */
- confirmAction() {
- const index = this.transportList.findIndex(
- item => item.id === this.currentTransport.id
- );
- if (index !== -1) {
+ /** 纭鎿嶄綔 - 浣跨敤鍚庣鍘熷鏁版嵁缁撴瀯 [4](@ref) */
+ async confirmAction() {
+ try {
+ let requestData = {
+ id: this.currentTransport.id || this.currentTransport.reportId
+ };
+
if (this.actionText === "寮�濮�") {
- this.transportList[index].status = "transporting";
- this.transportList[index].statusText = "杞繍涓�";
+ requestData.transitStatus = 2; // 璁剧疆涓鸿浆杩愪腑
} else if (this.actionText === "瀹屾垚") {
- this.transportList[index].status = "completed";
- this.transportList[index].statusText = "宸插畬鎴�";
- this.transportList[index].completedTime = new Date().toLocaleString();
+ requestData.transitStatus = 3; // 璁剧疆涓鸿浆杩愬畬鎴�
}
- // 鏇存柊缁熻鏁版嵁
- this.updateStats();
+ // 鐩存帴浼犻�掑悗绔渶瑕佺殑鍙傛暟 [8](@ref)
+ const response = await transportEdit(requestData);
- this.$modal.msgSuccess(`${this.actionText}鎴愬姛`);
+ if (response.code === 200) {
+ this.$modal.msgSuccess(`${this.actionText}杞繍鎴愬姛`);
+ this.getList(); // 鍒锋柊鍒楄〃
+ } else {
+ this.$modal.msgError(response.msg || `${this.actionText}杞繍澶辫触`);
+ }
+ } catch (error) {
+ console.error(`${this.actionText}杞繍澶辫触:`, error);
+ this.$modal.msgError("鎿嶄綔澶辫触锛岃绋嶅悗閲嶈瘯");
}
this.actionOpen = false;
},
+ /** 鍒犻櫎鎸夐挳鎿嶄綔 - 浣跨敤鍚庣鍘熷ID [1](@ref) */
+ async handleDelete(row) {
+ const ids = row.reportId || row.id || this.ids;
+ try {
+ await this.$modal.confirm(
+ '鏄惁纭鍒犻櫎杞繍鍗曠紪鍙蜂负"' + ids + '"鐨勬暟鎹」锛�'
+ );
+ const response = await transportDelete(ids);
-
- /** 鍒犻櫎鎸夐挳鎿嶄綔 */
- handleDelete(row) {
- const ids = row.id || this.ids;
- this.$modal
- .confirm('鏄惁纭鍒犻櫎杞繍鍗曠紪鍙蜂负"' + ids + '"鐨勬暟鎹」锛�')
- .then(() => {
- // 妯℃嫙鍒犻櫎鎿嶄綔
- this.transportList = this.transportList.filter(
- item => !ids.includes(item.id)
- );
- this.total = this.transportList.length;
- this.updateStats();
+ if (response.code === 200) {
this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
- })
- .catch(() => {});
+ this.getList(); // 鍒锋柊鍒楄〃
+ } else {
+ this.$modal.msgError(response.msg || "鍒犻櫎澶辫触");
+ }
+ } catch (error) {
+ if (error !== "cancel") {
+ console.error("鍒犻櫎澶辫触:", error);
+ this.$modal.msgError("鍒犻櫎澶辫触锛岃绋嶅悗閲嶈瘯");
+ }
+ }
},
/** 瀵煎嚭鎸夐挳鎿嶄綔 */
handleExport() {
+ // 鐩存帴浣跨敤鍚庣鍙傛暟缁撴瀯杩涜瀵煎嚭 [5](@ref)
this.download(
"system/transport/export",
{
@@ -675,7 +660,9 @@
}
.donor-info {
- text-align: left;
+ text-align: center;
+ display: flex;
+ justify-content: center
}
.donor-name {
@@ -684,8 +671,10 @@
}
.donor-details {
- font-size: 12px;
- color: #909399;
+ margin-left: 5px;
+ font-size: 16px;
+ color: #093ca4;
+ display: flex;
}
.mb8 {
diff --git a/src/views/business/transfer/transportDetail.vue b/src/views/business/transfer/transportDetail.vue
index 1bd298a..db548c7 100644
--- a/src/views/business/transfer/transportDetail.vue
+++ b/src/views/business/transfer/transportDetail.vue
@@ -3,84 +3,145 @@
<!-- 鍩虹淇℃伅妯″潡 -->
<el-card class="detail-section">
<div slot="header" class="section-header">
- <i class="el-icon-document" style="color: #409EFF; margin-right: 8px;"></i>
+ <i
+ class="el-icon-document"
+ style="color: #409EFF; margin-right: 8px;"
+ ></i>
<span class="section-title">鍩虹淇℃伅</span>
</div>
<el-descriptions :column="2" border>
- <el-descriptions-item label="杞繍鍗曞彿">{{ transportData.id }}</el-descriptions-item>
- <el-descriptions-item label="浣忛櫌鍙�">{{ transportData.caseNo }}</el-descriptions-item>
- <el-descriptions-item label="鎹愮尞鑰呭鍚�">{{ transportData.donorName }}</el-descriptions-item>
- <el-descriptions-item label="鎬у埆">{{ transportData.gender }}</el-descriptions-item>
- <el-descriptions-item label="骞撮緞">{{ transportData.age }}宀�</el-descriptions-item>
- <el-descriptions-item label="鐤剧梾璇婃柇">{{ transportData.diagnosis }}</el-descriptions-item>
- <el-descriptions-item label="鍑哄彂鍖婚櫌">{{ transportData.hospitalName }}</el-descriptions-item>
- <el-descriptions-item label="鐩殑鍖婚櫌">{{ transportData.destinationHospital }}</el-descriptions-item>
- <el-descriptions-item label="璁″垝杞繍鏃堕棿">{{ transportData.transportTime }}</el-descriptions-item>
- <el-descriptions-item label="璐熻矗鍗忚皟鍛�">{{ transportData.coordinator }}</el-descriptions-item>
+ <el-descriptions-item label="杞繍鍗曞彿">{{
+ transportData.reportId || transportData.id
+ }}</el-descriptions-item>
+ <el-descriptions-item label="妗堜緥缂栧彿">{{
+ transportData.caseNo
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鎮h�呭鍚�">{{
+ transportData.patName
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鎬у埆">
+ <dict-tag
+ :options="dict.type.sys_user_sex"
+ :value="parseInt(transportData.sex)"
+ />
+ </el-descriptions-item>
+ <el-descriptions-item label="骞撮緞"
+ >{{ transportData.age }}宀�</el-descriptions-item
+ >
+ <el-descriptions-item label="鐤剧梾璇婃柇">{{
+ transportData.diagnosisname
+ }}</el-descriptions-item>
+ <el-descriptions-item label="娌荤枟鍖婚櫌">{{
+ transportData.treatmentHospitalName
+ }}</el-descriptions-item>
+ <el-descriptions-item label="娌荤枟绉戝">{{
+ transportData.treatmentDeptName
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鍑哄彂鍦扮偣">{{
+ transportData.transportStartPlace
+ }}</el-descriptions-item>
+ <el-descriptions-item label="璁″垝杞繍鏃堕棿">{{
+ transportData.transportStartTime
+ }}</el-descriptions-item>
+ <el-descriptions-item label="璐熻矗鍗忚皟鍛�">{{
+ transportData.contactPerson
+ }}</el-descriptions-item>
<el-descriptions-item label="杞繍鐘舵��">
- <el-tag :type="transportData.status | statusFilter">
- {{ transportData.statusText }}
+ <el-tag :type="getStatusTagType(transportData.transitStatus)">
+ {{ getStatusText(transportData.transitStatus) }}
</el-tag>
</el-descriptions-item>
- <el-descriptions-item label="鍒涘缓鏃堕棿">{{ transportData.createTime }}</el-descriptions-item>
- <el-descriptions-item label="瀹屾垚鏃堕棿" v-if="transportData.completedTime">
- {{ transportData.completedTime }}
- </el-descriptions-item>
+ <el-descriptions-item label="鍒涘缓鏃堕棿">{{
+ transportData.createTime
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鏇存柊鏃堕棿">{{
+ transportData.updateTime
+ }}</el-descriptions-item>
</el-descriptions>
</el-card>
<!-- 杞繍璇︽儏妯″潡 -->
<el-card class="detail-section">
<div slot="header" class="section-header">
- <i class="el-icon-location-information" style="color: #67C23A; margin-right: 8px;"></i>
+ <i
+ class="el-icon-location-information"
+ style="color: #67C23A; margin-right: 8px;"
+ ></i>
<span class="section-title">杞繍璇︽儏</span>
</div>
<el-descriptions :column="2" border>
- <el-descriptions-item label="鍑哄彂鍦扮偣">{{ transportData.departureLocation }}</el-descriptions-item>
- <el-descriptions-item label="鐩殑鍦�">{{ transportData.destinationHospital }}</el-descriptions-item>
- <el-descriptions-item label="褰撳墠浣嶇疆" v-if="transportData.currentLocation">
- {{ transportData.currentLocation }}
- </el-descriptions-item>
- <el-descriptions-item label="棰勮鍒拌揪鏃堕棿" v-if="transportData.estimatedTime">
- {{ transportData.estimatedTime }}
- </el-descriptions-item>
- <el-descriptions-item label="杞繍璺濈" v-if="transportData.distance">
- {{ transportData.distance }}
- </el-descriptions-item>
- <el-descriptions-item label="杞繍鏃堕暱" v-if="transportData.duration">
- {{ transportData.duration }}
+ <el-descriptions-item label="鍑哄彂鍦扮偣">{{
+ transportData.transportStartPlace
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鐩殑鍖婚櫌">{{
+ transportData.treatmentHospitalName
+ }}</el-descriptions-item>
+ <el-descriptions-item label="娌荤枟绉戝">{{
+ transportData.treatmentDeptName
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鍑哄彂鏃堕棿">{{
+ transportData.transportStartTime
+ }}</el-descriptions-item>
+ <el-descriptions-item label="杞繍鐘舵��">
+ <el-tag :type="getStatusTagType(transportData.transitStatus)">
+ {{ getStatusText(transportData.transitStatus) }}
+ </el-tag>
</el-descriptions-item>
</el-descriptions>
</el-card>
- <!-- 鍥㈤槦鎴愬憳妯″潡 -->
+ <!-- 鍖绘姢浜哄憳淇℃伅妯″潡 -->
<el-card class="detail-section">
<div slot="header" class="section-header">
<i class="el-icon-user" style="color: #E6A23C; margin-right: 8px;"></i>
- <span class="section-title">鍥㈤槦鎴愬憳</span>
+ <span class="section-title">鍖绘姢浜哄憳淇℃伅</span>
</div>
<el-descriptions :column="2" border>
- <el-descriptions-item label="鍗忚皟鍛�">{{ transportData.coordinator }}</el-descriptions-item>
- <el-descriptions-item label="鍗忚皟鍛樼數璇�">{{ getContactPhone("鍗忚皟鍛樼數璇�") }}</el-descriptions-item>
- <el-descriptions-item label="鎬ヨ瘖绉戝尰鐢�" v-if="transportData.emergencyDoctor">
- {{ transportData.emergencyDoctor }}
- </el-descriptions-item>
- <el-descriptions-item label="鎬ヨ瘖鍖荤敓鐢佃瘽">{{ getContactPhone("鎬ヨ瘖鍖荤敓鐢佃瘽") }}</el-descriptions-item>
- <el-descriptions-item label="鎶ゅ+" v-if="transportData.nurse">{{ transportData.nurse }}</el-descriptions-item>
- <el-descriptions-item label="鎶ゅ+鐢佃瘽">{{ getContactPhone("鎶ゅ+鐢佃瘽") }}</el-descriptions-item>
- <el-descriptions-item label="鍙告満" v-if="transportData.driver">{{ transportData.driver }}</el-descriptions-item>
- <el-descriptions-item label="鍙告満鐢佃瘽">{{ getContactPhone("鍙告満鐢佃瘽") }}</el-descriptions-item>
- <el-descriptions-item label="ICU璇勪及鍖荤敓" v-if="transportData.icuDoctor">
- {{ transportData.icuDoctor }}
- </el-descriptions-item>
- <el-descriptions-item label="ICU鍖荤敓鐢佃瘽">{{ getContactPhone("ICU鍖荤敓鐢佃瘽") }}</el-descriptions-item>
+ <el-descriptions-item label="鍗忚皟鍛�">{{
+ transportData.contactPerson
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鍗忚皟鍛樼數璇�">{{
+ transportData.contactPhone || "鏈~鍐�"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鎬ヨ瘖绉戝尰鐢�">{{
+ transportData.doctor
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鎬ヨ瘖鍖荤敓鐢佃瘽">{{
+ transportData.doctorPhone
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鎶ゅ+">{{
+ transportData.nurse
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鎶ゅ+鐢佃瘽">{{
+ transportData.nursePhone
+ }}</el-descriptions-item>
+ <el-descriptions-item label="椹鹃┒鍛�">{{
+ transportData.driver
+ }}</el-descriptions-item>
+ <el-descriptions-item label="椹鹃┒鍛樼數璇�">{{
+ transportData.driverPhone
+ }}</el-descriptions-item>
+ <el-descriptions-item label="ICU璇勪及鍖荤敓">{{
+ transportData.icuDoctor
+ }}</el-descriptions-item>
+ <el-descriptions-item label="ICU鍖荤敓鐢佃瘽">{{
+ transportData.icuDoctorPhone
+ }}</el-descriptions-item>
</el-descriptions>
</el-card>
<!-- 闄勪欢淇℃伅妯″潡 -->
- <el-card class="detail-section" v-if="attachmentList.length > 0">
+ <el-card
+ class="detail-section"
+ v-if="
+ transportData.annexfilesList && transportData.annexfilesList.length > 0
+ "
+ >
<div slot="header" class="section-header">
- <i class="el-icon-folder" style="color: #F56C6C; margin-right: 8px;"></i>
+ <i
+ class="el-icon-folder"
+ style="color: #F56C6C; margin-right: 8px;"
+ ></i>
<span class="section-title">闄勪欢淇℃伅</span>
</div>
<el-table :data="attachmentList" style="width: 100%">
@@ -92,41 +153,41 @@
</el-table-column>
<el-table-column label="鏂囦欢绫诲瀷" width="120">
<template slot-scope="scope">
- <el-tag size="small">{{ scope.row.fileType }}</el-tag>
+ <el-tag size="small">{{ scope.row.type }}</el-tag>
</template>
</el-table-column>
- <el-table-column label="澶у皬" width="100">
+ <el-table-column label="鏂囦欢鍦板潃" min-width="200" show-overflow-tooltip>
<template slot-scope="scope">
- <span>{{ formatFileSize(scope.row.fileSize) }}</span>
+ <span>{{ scope.row.path }}</span>
</template>
</el-table-column>
- <el-table-column label="涓婁紶鏃堕棿" width="180">
+ <el-table-column label="鎿嶄綔" width="200">
<template slot-scope="scope">
- <span>{{ scope.row.uploadTime }}</span>
- </template>
- </el-table-column>
- <el-table-column label="鎿嶄綔">
- <template slot-scope="scope">
- <el-button size="mini" @click="handlePreview(scope.row)">棰勮</el-button>
- <el-button size="mini" type="success" @click="handleDownload(scope.row)">涓嬭浇</el-button>
- <el-button size="mini" type="danger" @click="handleDelete(scope.row)">鍒犻櫎</el-button>
+ <el-button size="mini" @click="handlePreview(scope.row)"
+ >棰勮</el-button
+ >
+ <el-button
+ size="mini"
+ type="success"
+ @click="handleDownload(scope.row)"
+ >涓嬭浇</el-button
+ >
</template>
</el-table-column>
</el-table>
</el-card>
<!-- 澶囨敞淇℃伅妯″潡 -->
- <el-card class="detail-section" v-if="transportData.remarks">
+ <el-card class="detail-section" v-if="transportData.remark">
<div slot="header" class="section-header">
<i class="el-icon-edit" style="color: #909399; margin-right: 8px;"></i>
<span class="section-title">澶囨敞淇℃伅</span>
</div>
<div class="remarks-content">
- {{ transportData.remarks }}
+ {{ transportData.remark }}
</div>
</el-card>
- <!-- 棰勮寮圭獥锛堜繚鎸佷笉鍙橈級 -->
<!-- PDF棰勮寮圭獥 -->
<el-dialog
:title="previewTitle"
@@ -139,7 +200,6 @@
@close="handlePdfDialogClose"
>
<div class="pdf-preview-container" v-loading="pdfLoading">
- <!-- PDF鎺у埗宸ュ叿鏍� -->
<div class="pdf-toolbar">
<el-button-group>
<el-button
@@ -186,7 +246,6 @@
</el-button>
</div>
- <!-- PDF娓叉煋鍖哄煙 -->
<div class="pdf-viewport">
<pdf
ref="pdf"
@@ -251,58 +310,27 @@
<script>
import pdf from "vue-pdf";
+import UploadAttachment from "@/components/UploadAttachment";
export default {
name: "TransportDetail",
components: {
pdf
},
+ components: {
+ UploadAttachment
+ },
+ dicts: ["sys_user_sex"],
props: {
transportData: {
type: Object,
default: () => ({})
}
},
- filters: {
- statusFilter(status) {
- const statusMap = {
- pending: "warning",
- transporting: "primary",
- completed: "success",
- cancelled: "danger"
- };
- return statusMap[status];
- }
- },
data() {
return {
// 闄勪欢鐩稿叧鏁版嵁
- attachmentList: [
- {
- id: 1,
- fileName: "杞繍浜ゆ帴鍗�.jpg",
- fileType: "docx",
- fileSize: 102400,
- uploadTime: "2024-12-19 10:30:00",
- fileUrl: "https://img95.699pic.com/photo/40142/8262.jpg_wh860.jpg"
- },
- {
- id: 2,
- fileName: "鍖荤枟璁板綍.pdf",
- fileType: "pdf",
- fileSize: 2048000,
- uploadTime: "2024-12-19 11:20:00",
- fileUrl: "http://192.168.100.10:8080/profile/upload/2025/12/19/(鍚撮緳8.7)姣忔棩宸ヤ綔鎬荤粨1766131266142.pdf"
- },
- {
- id: 3,
- fileName: "鎮h�呯収鐗�.jpg",
- fileType: "jpg",
- fileSize: 512000,
- uploadTime: "2024-12-19 14:15:00",
- fileUrl: "https://img95.699pic.com/photo/40019/3490.jpg_wh860.jpg"
- }
- ],
+ attachmentList: [],
// PDF棰勮鐩稿叧鏁版嵁
pdfPreviewVisible: false,
pdfLoading: false,
@@ -311,34 +339,80 @@
pageCount: 0,
scale: 100,
pageRotate: 0,
-
// 鍥剧墖棰勮鐩稿叧
imagePreviewVisible: false,
-
// 涓嶆敮鎸侀瑙堢浉鍏�
unsupportedPreviewVisible: false,
-
// 閫氱敤棰勮鏁版嵁
previewTitle: "",
previewUrl: "",
currentFile: null
};
},
+ watch: {
+ transportData: {
+ handler(newVal) {
+ this.transformAttachmentData(newVal.annexfilesList);
+ },
+ immediate: true,
+ deep: true
+ }
+ },
methods: {
- // 鑾峰彇鑱旂郴鏂瑰紡
- getContactPhone(role) {
- if (this.transportData.contacts) {
- const contact = this.transportData.contacts.find(
- item => item.role === role
- );
- return contact ? contact.phone : "鏈~鍐�";
+ /** 杞崲闄勪欢鏁版嵁 */
+ transformAttachmentData(annexfilesList) {
+ if (!annexfilesList || !Array.isArray(annexfilesList)) {
+ this.attachmentList = [];
+ return;
}
- return "鏈~鍐�";
+
+ this.attachmentList = annexfilesList;
+ // this.attachmentList = annexfilesList.map((fileUrl, index) => {
+ // const fileName = this.getFileNameFromUrl(fileUrl);
+ // return {
+ // id: index + 1,
+ // fileName: fileName,
+ // fileType: this.getFileType(fileName),
+ // fileUrl: fileUrl
+ // };
+ // });
},
+
+ /** 浠嶶RL涓彁鍙栨枃浠跺悕 */
+ getFileNameFromUrl(url) {
+ if (!url) return "鏈煡鏂囦欢";
+ return url.split("/").pop() || "鏈煡鏂囦欢";
+ },
+
+ /** 鑾峰彇鐘舵�佹爣绛剧被鍨� */
+ getStatusTagType(transitStatus) {
+ const statusMap = {
+ 1: "warning", // 寰呰浆杩�
+ 2: "primary", // 杞繍涓�
+ 3: "success", // 杞繍瀹屾垚
+ 4: "danger", // 杞繍鍙栨秷
+ 5: "info" // 鏆傚瓨
+ };
+ return statusMap[transitStatus] || "info";
+ },
+
+ /** 鑾峰彇鐘舵�佹枃鏈� */
+ getStatusText(transitStatus) {
+ const statusMap = {
+ 1: "寰呰浆杩�",
+ 2: "杞繍涓�",
+ 3: "杞繍瀹屾垚",
+ 4: "杞繍鍙栨秷",
+ 5: "鏆傚瓨"
+ };
+ return statusMap[transitStatus] || "鏈煡鐘舵��";
+ },
+
// 鍏抽棴寮规
handleClose() {
this.$emit("close");
},
+
// 鑾峰彇鏂囦欢绫诲瀷
getFileType(fileName) {
const extension = fileName
@@ -357,8 +431,9 @@
handlePreview(file) {
this.currentFile = file;
this.previewTitle = `棰勮 - ${file.fileName}`;
- this.previewUrl = file.fileUrl;
+ this.previewUrl = file.path;
const fileType = this.getFileType(file.fileName);
+ console.log(this.previewUrl, "this.previewUrl");
switch (fileType) {
case "pdf":
@@ -380,7 +455,7 @@
this.currentPage = 1;
this.scale = 100;
this.pageRotate = 0;
- this.pdfUrl = file.fileUrl;
+ this.pdfUrl = file.path;
},
// PDF鍔犺浇瀹屾垚鍥炶皟
@@ -444,7 +519,7 @@
// 鏂囦欢涓嬭浇
handleDownload(file) {
const link = document.createElement("a");
- link.href = file.fileUrl;
+ link.href = file.path;
link.download = file.fileName;
link.style.display = "none";
document.body.appendChild(link);
@@ -458,21 +533,8 @@
this.handleDownload(file);
},
- // 鏂囦欢鍒犻櫎
- handleDelete(file) {
- this.$confirm("纭畾瑕佸垹闄よ繖涓檮浠跺悧锛�", "鎻愮ず", {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning"
- }).then(() => {
- this.attachmentList = this.attachmentList.filter(
- item => item.id !== file.id
- );
- this.$message.success("鍒犻櫎鎴愬姛");
- });
- },
-
formatFileSize(bytes) {
+ if (!bytes) return "鏈煡澶у皬";
if (bytes === 0) return "0 B";
const k = 1024;
const sizes = ["B", "KB", "MB", "GB"];
@@ -512,7 +574,7 @@
white-space: pre-line;
}
-/* PDF棰勮鐩稿叧鏍峰紡淇濇寔涓嶅彉 */
+/* PDF棰勮鐩稿叧鏍峰紡 */
.pdf-preview-dialog {
margin-top: 5vh !important;
}
diff --git a/src/views/project/donatebaseinfo/index.vue b/src/views/project/donatebaseinfo/index.vue
index dcb6370..2378891 100644
--- a/src/views/project/donatebaseinfo/index.vue
+++ b/src/views/project/donatebaseinfo/index.vue
@@ -203,9 +203,9 @@
</template>
</el-table-column>
<el-table-column
- label="浣忛櫌鍙�"
+ label="妗堜緥缂栧彿"
align="center"
- prop="donorno"
+ prop="caseNo"
width="200"
/>
<el-table-column label="濮撳悕" align="center" prop="name" width="100" />
@@ -234,6 +234,11 @@
label="鍖荤枟鏈烘瀯"
align="center"
prop="treatmenthospitalname"
+ />
+ <el-table-column
+ label="GSC璇勫垎"
+ align="center"
+ prop="gcsScore"
/>
<el-table-column label="琛�鍨�" align="center" prop="bloodtype" width="100">
<template slot-scope="scope">
@@ -373,8 +378,8 @@
>
<el-row style="margin-top: 40px">
<el-col :span="8">
- <el-form-item label="浣忛櫌鍙�" prop="donorno">
- <el-input v-model="form.donorno" disabled />
+ <el-form-item label="妗堜緥缂栧彿" prop="caseNo">
+ <el-input v-model="form.caseNo" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
@@ -609,8 +614,8 @@
>
<el-row>
<el-col :span="8">
- <el-form-item label="浣忛櫌鍙�" prop="inpatientno">
- <el-input v-model="form.inpatientno" placeholder="浣忛櫌鍙�" />
+ <el-form-item label="妗堜緥缂栧彿" prop="inpatientno">
+ <el-input v-model="form.inpatientno" placeholder="妗堜緥缂栧彿" />
</el-form-item>
</el-col>
<el-col :span="16">
@@ -931,7 +936,7 @@
<!-- <div style="padding-right: 60px; margin-top: 20px">
<el-row>
<el-form-item label="闄勪欢" align="left" prop="annexfile">
- <annex-upload ref="annex" :infoid="form.id" :donorno="form.donorno" :flowname="flowname"
+ <annex-upload ref="annex" :infoid="form.id" :caseNo="form.caseNo" :flowname="flowname"
:annexno="annexno" />
</el-form-item>
</el-row>
@@ -1073,7 +1078,7 @@
queryParams: {
pageNum: 1,
pageSize: 10,
- donorno: null,
+ caseNo: null,
recordstate: null,
// treatmenthospitalno: null,
treatmenthospitalname: null,
@@ -1142,7 +1147,7 @@
bloodtype: "0",
inpatientno: null,
rhyin: "0",
- donorno: null,
+ caseNo: null,
donationcategory: null,
illnessoverview: null,
diseasetype: [],
@@ -1256,7 +1261,7 @@
],
inpatientno: [
- { required: true, message: "杈撳叆浣忛櫌鍙�", trigger: "blur" }
+ { required: true, message: "杈撳叆妗堜緥缂栧彿", trigger: "blur" }
],
diagnosisname: [
{ required: true, message: "鐤剧梾璇婃柇涓嶈兘涓虹┖", trigger: "blur" }
@@ -1737,7 +1742,7 @@
bloodtype: "0",
inpatientno: null,
rhyin: 0,
- donorno: null,
+ caseNo: null,
donationcategory: null,
illnessoverview: null,
diseasetype: [],
@@ -1797,7 +1802,7 @@
// "2"
recordstate: null,
treatmenthospitalname: null,
- donorno: null,
+ caseNo: null,
acquisitiontissueno: null,
reportername: null,
reporttime: null,
diff --git a/vue.config.js b/vue.config.js
index 40c759e..d2914fb 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -33,8 +33,8 @@
proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: {
- target:`http://localhost:8080`,
- // target:`http://192.168.100.10:8080`,
+ // target:`http://localhost:8080`,
+ target:`http://192.168.100.10:8080`,
// target:`http://192.168.100.137:8080`,
// target: `https://slb.hospitalstar.com:9093`,
changeOrigin: true,
--
Gitblit v1.9.3