From f5e6487a78789ee372a8c6458bfd0cb740d6a0e8 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期三, 13 五月 2026 22:13:58 +0800
Subject: [PATCH] 青岛维护

---
 src/views/business/decide/DecideInfo copy.vue |  816 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 816 insertions(+), 0 deletions(-)

diff --git a/src/views/business/decide/DecideInfo copy.vue b/src/views/business/decide/DecideInfo copy.vue
new file mode 100644
index 0000000..239e5f9
--- /dev/null
+++ b/src/views/business/decide/DecideInfo copy.vue
@@ -0,0 +1,816 @@
+<template>
+  <div class="death-judgment-detail">
+    <case-basic-info :case-id="caseId" :show-attachment="true" />
+    <el-card class="detail-card">
+      <!-- 鍩虹淇℃伅 -->
+      <div slot="header" class="clearfix">
+        <span class="detail-title">姝讳骸鍒ゅ畾鍩烘湰淇℃伅</span>
+        <el-button
+          v-if="isEdit"
+          type="success"
+          style="float: right"
+          @click="handleSave"
+          :loading="saveLoading"
+        >
+          淇濆瓨淇℃伅
+        </el-button>
+        <el-button
+          v-else
+          type="primary"
+          style="float: right"
+          @click="handleEdit"
+        >
+          缂栬緫淇℃伅
+        </el-button>
+      </div>
+
+      <el-form :model="form" ref="form" :rules="rules" label-width="120px">
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="姝讳骸鍘熷洜" prop="deathreason">
+              <el-input v-model="form.deathreason" :readonly="!isEdit" />
+              <!-- <el-select
+                v-model="form.deathreason"
+                :disabled="!isEdit"
+                style="width: 100%"
+              >
+                <el-option label="鑴戞浜�" value="brain_death" />
+                <el-option label="蹇冩浜�" value="heart_death" />
+                <el-option label="鍏朵粬" value="other" />
+              </el-select> -->
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="璐熻矗浜�" prop="responsibleusername">
+              <el-input
+                v-model="form.responsibleusername"
+                :readonly="!isEdit"
+              />
+            </el-form-item>
+          </el-col>
+          <!-- <el-col :span="8">
+            <el-form-item label="璁板綍鐘舵��" prop="recordstate">
+              <el-tag :type="getStatusTag(form.recordstate)">
+                {{ getStatusText(form.recordstate) }}
+              </el-tag>
+            </el-form-item>
+          </el-col> -->
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="姝讳骸鏃堕棿" prop="deathtime">
+              <el-date-picker
+                v-model="form.deathtime"
+                type="datetime"
+                value-format="yyyy-MM-dd HH:mm:ss"
+                style="width: 100%"
+                :disabled="!isEdit"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="鍒ゅ畾鍖荤敓涓�" prop="deathjudgedocto">
+              <el-input v-model="form.deathjudgedocto" :readonly="!isEdit" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="鍒ゅ畾鍖荤敓浜�" prop="deathjudgedoctt">
+              <el-input v-model="form.deathjudgedoctt" :readonly="!isEdit" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="8">
+            <el-form-item label="鍣ㄥ畼鑾峰彇鏈烘瀯" prop="gainhospitalname">
+              <el-input v-model="form.gainhospitalname" :readonly="!isEdit" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="鏄惁榛樺搥缂呮��" prop="isspendremember">
+              <el-select
+                v-model="form.isspendremember"
+                :disabled="!isEdit"
+                style="width: 100%"
+              >
+                <el-option label="鏄�" :value="1" />
+                <el-option label="鍚�" :value="0" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="鎭㈠閬椾綋浠" prop="isrestoreremains">
+              <el-select
+                v-model="form.isrestoreremains"
+                :disabled="!isEdit"
+                style="width: 100%"
+              >
+                <el-option label="鏄�" :value="1" />
+                <el-option label="鍚�" :value="0" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-form-item label="姝讳骸鍒ゅ畾璇存槑" prop="remark">
+          <el-input
+            type="textarea"
+            :rows="3"
+            v-model="form.remark"
+            :readonly="!isEdit"
+            placeholder="璇︾粏璁板綍姝讳骸鍒ゅ畾杩囩▼鍜屼緷鎹�"
+          />
+        </el-form-item>
+      </el-form>
+    </el-card>
+
+    <!-- 璇勪及琛ㄩ檮浠� -->
+    <el-card class="attachment-card">
+      <div slot="header" class="clearfix">
+        <span class="detail-title">姝讳骸鍒ゅ畾璇勪及琛ㄩ檮浠�</span>
+        <!-- <el-button
+          v-if="isEdit"
+          type="primary"
+          size="mini"
+          @click="openUploadDialog"
+          :loading="uploadLoading"
+        >
+          涓婁紶闄勪欢
+        </el-button> -->
+      </div>
+
+      <!-- 闄勪欢绫诲瀷閫夐」鍗� -->
+      <el-tabs v-model="activeAttachmentType" type="card">
+        <el-tab-pane
+          v-for="type in attachmentTypes"
+          :key="type.value"
+          :label="type.label"
+          :name="type.value"
+        >
+          <div class="attachment-upload-section">
+            <div class="upload-header">
+              <span class="upload-title">{{ type.label }}</span>
+              <el-tooltip content="鐐瑰嚮涓婁紶璇ョ被鍨嬭瘎浼拌〃" placement="top">
+                <el-button
+                  size="mini"
+                  type="primary"
+                  icon="el-icon-plus"
+                  @click="openUploadDialog(type.value)"
+                  :disabled="!isEdit"
+                >
+                  娣诲姞璇勪及琛�
+                </el-button>
+              </el-tooltip>
+            </div>
+
+            <!-- 闄勪欢鍒楄〃 -->
+            <el-table
+              :data="getAttachmentsByType(type.value)"
+              v-loading="attachmentLoading"
+              style="width: 100%; margin-top: 15px;"
+            >
+              <el-table-column label="鏂囦欢鍚嶇О" min-width="200">
+                <template slot-scope="scope">
+                  <div class="file-info">
+                    <i
+                      class="el-icon-document"
+                      style="margin-right: 8px; color: #409EFF;"
+                    ></i>
+                    <span>{{ scope.row.fileName }}</span>
+                  </div>
+                </template>
+              </el-table-column>
+
+              <el-table-column label="鏂囦欢绫诲瀷" width="100" align="center">
+                <template slot-scope="scope">
+                  <el-tag size="small">{{
+                    getFileType(scope.row.fileName)
+                  }}</el-tag>
+                </template>
+              </el-table-column>
+
+              <el-table-column label="鏂囦欢澶у皬" width="100" align="center">
+                <template slot-scope="scope">
+                  <span>{{ formatFileSize(scope.row.fileSize) }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column label="涓婁紶鏃堕棿" width="160" align="center">
+                <template slot-scope="scope">
+                  <span>{{ parseTime(scope.row.uploadTime) }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column label="涓婁紶浜�" width="100" align="center">
+                <template slot-scope="scope">
+                  <span>{{ scope.row.uploader }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column label="鎿嶄綔" width="180" align="center">
+                <template slot-scope="scope">
+                  <el-button
+                    size="mini"
+                    type="text"
+                    icon="el-icon-view"
+                    @click="handlePreview(scope.row)"
+                    >棰勮</el-button
+                  >
+                  <el-button
+                    size="mini"
+                    type="text"
+                    icon="el-icon-download"
+                    @click="handleDownload(scope.row)"
+                    >涓嬭浇</el-button
+                  >
+                  <el-button
+                    v-if="isEdit"
+                    size="mini"
+                    type="text"
+                    icon="el-icon-delete"
+                    style="color: #F56C6C;"
+                    @click="handleRemoveAttachment(scope.row)"
+                    >鍒犻櫎</el-button
+                  >
+                </template>
+              </el-table-column>
+            </el-table>
+
+            <div
+              v-if="getAttachmentsByType(type.value).length === 0"
+              class="empty-attachment"
+            >
+              <el-empty
+                description="鏆傛棤璇勪及琛ㄩ檮浠�"
+                :image-size="80"
+              ></el-empty>
+            </div>
+          </div>
+        </el-tab-pane>
+      </el-tabs>
+    </el-card>
+
+    <!-- 涓婁紶瀵硅瘽妗� -->
+    <el-dialog
+      :title="`涓婁紶${getCurrentTypeLabel}璇勪及琛╜"
+      :visible.sync="uploadDialogVisible"
+      width="500px"
+      :close-on-click-modal="false"
+    >
+      <el-upload
+        ref="uploadRef"
+        class="upload-demo"
+        drag
+        :action="uploadAction"
+        :headers="headers"
+        multiple
+        :file-list="tempFileList"
+        :before-upload="beforeUpload"
+        :on-change="handleFileChange"
+        :on-remove="handleTempRemove"
+        :on-success="handleUploadSuccess"
+        :auto-upload="false"
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">
+          灏嗚瘎浼拌〃鏂囦欢鎷栧埌姝ゅ锛屾垨<em>鐐瑰嚮涓婁紶</em>
+        </div>
+        <div class="el-upload__tip" slot="tip">
+          鏀寔涓婁紶pdf銆乯pg銆乸ng銆乨oc銆乨ocx銆亁ls銆亁lsx鏍煎紡鏂囦欢锛屽崟涓枃浠朵笉瓒呰繃10MB
+        </div>
+      </el-upload>
+
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="uploadDialogVisible = false">鍙栨秷</el-button>
+        <el-button
+          type="primary"
+          @click="submitUpload"
+          :loading="uploadLoading"
+          :disabled="tempFileList.length === 0"
+        >
+          纭涓婁紶
+        </el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  deathinfoedit,
+  deathinfoadd,
+  queryDathInfoBaseInfo
+} from "@/api/businessApi";
+import { getToken } from "@/utils/auth";
+import CaseBasicInfo from "@/components/CaseBasicInfo";
+
+export default {
+  name: "DeathJudgmentDetail",
+  components: { CaseBasicInfo },
+
+  data() {
+    return {
+      caseId: null,
+      // 鏄惁缂栬緫妯″紡
+      isEdit: false,
+      // 淇濆瓨鍔犺浇鐘舵��
+      saveLoading: false,
+      infoid: undefined,
+
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: undefined,
+        infoid: undefined,
+        donorno: "",
+        name: "",
+        sex: "",
+        age: "",
+        diagnosisname: "",
+        deathreason: "",
+        deathtime: "",
+        deathjudgedocto: "",
+        deathjudgedoctt: "",
+        gainhospitalno: "",
+        gainhospitalname: "",
+        isspendremember: 0,
+        isrestoreremains: 0,
+        rememberAnnex: "",
+        responsibleuserid: "",
+        responsibleusername: "",
+        recordstate: "0",
+        judgmentDescription: ""
+      },
+      // 琛ㄥ崟楠岃瘉瑙勫垯
+      rules: {
+        name: [
+          { required: true, message: "鎹愮尞鑰呭鍚嶄笉鑳戒负绌�", trigger: "blur" }
+        ],
+        deathreason: [
+          { required: true, message: "姝讳骸鍘熷洜涓嶈兘涓虹┖", trigger: "change" }
+        ],
+        deathtime: [
+          { required: true, message: "姝讳骸鏃堕棿涓嶈兘涓虹┖", trigger: "change" }
+        ],
+        deathjudgedocto: [
+          { required: true, message: "鍒ゅ畾鍖荤敓涓�涓嶈兘涓虹┖", trigger: "blur" }
+        ]
+      },
+      // 闄勪欢鐩稿叧鏁版嵁
+      activeAttachmentType: "1",
+      attachmentLoading: false,
+      uploadDialogVisible: false,
+      uploadLoading: false,
+      tempFileList: [],
+      currentUploadType: "",
+      uploadAction: process.env.VUE_APP_BASE_API + "/common/upload",
+      headers: {
+        Authorization: "Bearer " + getToken()
+      },
+      // 璇勪及琛ㄧ被鍨嬪畾涔�
+      attachmentTypes: [
+        { value: "1", label: "鑴戞浜″垽瀹氳〃" },
+        { value: "2", label: "鑴戠數鍥捐瘎浼拌〃" },
+        { value: "3", label: "鐭綔浼忔湡浣撴劅璇卞彂鐢典綅璇勪及琛�" },
+        { value: "4", label: "缁忛澶氭櫘鍕掕秴澹拌瘎浼拌褰�" },
+        { value: "5", label: "鍗仴濮旇剳鎹熶激璐ㄦ帶涓績 - 涓村簥缁煎悎璇勪及琛�" },
+        { value: "6", label: "UW璇勫垎琛�" },
+        { value: "7", label: "蹇冩浜″垽瀹氳〃" }
+      ],
+
+      // 闄勪欢鍒楄〃鏁版嵁
+      attachmentList: []
+    };
+  },
+  computed: {
+    getCurrentTypeLabel() {
+      const type = this.attachmentTypes.find(
+        t => t.value === this.currentUploadType
+      );
+      return type ? type.label : "";
+    }
+  },
+  created() {
+    this.infoid = this.$route.query.infoid;
+    this.caseId = this.infoid;
+    const id = this.$route.query.id;
+    this.isEdit = this.$route.query.isEdit;
+    this.getDetail(this.infoid);
+
+    // if (id && !this.$route.path.includes("/add")) {
+    //   this.getDetail(id);
+    // } else if (this.$route.path.includes("/add")) {
+    //   this.generateDonorNo();
+    // }
+    this.getAttachmentList();
+  },
+  methods: {
+    // 鐢熸垚鎹愮尞鑰呯紪鍙�
+    generateDonorNo() {
+      const timestamp = Date.now().toString();
+      this.form.donorno = "DONOR" + timestamp.slice(-8);
+    },
+    // 鑾峰彇璇︽儏
+    async getDetail(infoid) {
+      try {
+        const response = await queryDathInfoBaseInfo({ infoid });
+        let realData = {};
+
+        if (response && response.data) {
+          realData = response.data[0];
+        } else if (response) {
+          realData = response;
+        }
+
+        // 鏄犲皠瀛楁鍒拌〃鍗�
+        this.form = {
+          ...this.form,
+          ...realData,
+          // 纭繚鏁板�肩被鍨嬪瓧娈垫纭浆鎹�
+          isspendremember: realData.isspendremember
+            ? parseInt(realData.isspendremember)
+            : 0,
+          isrestoreremains: realData.isrestoreremains
+            ? parseInt(realData.isrestoreremains)
+            : 0
+        };
+
+        // 瑙f瀽闄勪欢淇℃伅
+        if (realData.rememberAnnex) {
+          this.parseAttachmentData(realData.rememberAnnex);
+        }
+      } catch (error) {
+        console.error("鑾峰彇姝讳骸鍒ゅ畾璇︽儏澶辫触:", error);
+        this.$message.error("鏁版嵁鍔犺浇澶辫触");
+      }
+    },
+    // 瑙f瀽闄勪欢鏁版嵁
+    parseAttachmentData(attachmentJson) {
+      try {
+        if (attachmentJson) {
+          const attachments = JSON.parse(attachmentJson);
+          if (Array.isArray(attachments)) {
+            this.attachmentList = attachments;
+          }
+        }
+      } catch (error) {
+        console.error("瑙f瀽闄勪欢鏁版嵁澶辫触:", error);
+      }
+    },
+    // 鏋勫缓闄勪欢JSON鏁版嵁
+    buildAttachmentJson() {
+      return JSON.stringify(this.attachmentList);
+    },
+    // 鑾峰彇鐘舵�佹爣绛炬牱寮�
+    getStatusTag(status) {
+      const statusMap = {
+        "0": "warning", // 缁存姢涓�
+        "1": "success", // 宸插畬鎴�
+        "99": "danger" // 宸茬粓姝�
+      };
+      return statusMap[status] || "info";
+    },
+    // 鑾峰彇鐘舵�佹枃鏈�
+    getStatusText(status) {
+      const textMap = {
+        "0": "缁存姢涓�",
+        "1": "宸插畬鎴�",
+        "99": "宸茬粓姝�"
+      };
+      return textMap[status] || "鏈煡鐘舵��";
+    },
+    // 鑾峰彇闄勪欢鍒楄〃
+    getAttachmentList() {
+      this.attachmentLoading = true;
+      // 瀹為檯椤圭洰涓粠鎺ュ彛鑾峰彇闄勪欢鏁版嵁
+      setTimeout(() => {
+        this.attachmentLoading = false;
+      }, 500);
+    },
+    // 鏍规嵁绫诲瀷鑾峰彇闄勪欢
+    getAttachmentsByType(type) {
+      return this.attachmentList.filter(item => item.type === type);
+    },
+    // 鑾峰彇鏂囦欢绫诲瀷
+    getFileType(fileName) {
+      const ext = fileName
+        .split(".")
+        .pop()
+        .toLowerCase();
+      const typeMap = {
+        pdf: "PDF",
+        doc: "DOC",
+        docx: "DOCX",
+        xls: "XLS",
+        xlsx: "XLSX",
+        jpg: "JPG",
+        jpeg: "JPEG",
+        png: "PNG"
+      };
+      return typeMap[ext] || ext.toUpperCase();
+    },
+    // 鎵撳紑涓婁紶瀵硅瘽妗�
+    openUploadDialog(type = null) {
+      this.currentUploadType = type || this.activeAttachmentType;
+      this.tempFileList = [];
+      this.uploadDialogVisible = true;
+      this.$nextTick(() => {
+        if (this.$refs.uploadRef) {
+          this.$refs.uploadRef.clearFiles();
+        }
+      });
+    },
+    // 涓婁紶鍓嶆牎楠�
+    beforeUpload(file) {
+      const allowedTypes = [
+        "application/pdf",
+        "image/jpeg",
+        "image/png",
+        "application/msword",
+        "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
+        "application/vnd.ms-excel",
+        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
+      ];
+
+      const maxSize = 10 * 1024 * 1024; // 10MB
+
+      const isTypeOk =
+        allowedTypes.includes(file.type) ||
+        file.name.endsWith(".pdf") ||
+        file.name.endsWith(".jpg") ||
+        file.name.endsWith(".jpeg") ||
+        file.name.endsWith(".png") ||
+        file.name.endsWith(".doc") ||
+        file.name.endsWith(".docx") ||
+        file.name.endsWith(".xls") ||
+        file.name.endsWith(".xlsx");
+
+      if (!isTypeOk) {
+        this.$message.error(
+          "鏂囦欢鏍煎紡涓嶆敮鎸侊紝璇蜂笂浼爌df銆乯pg銆乸ng銆乨oc銆乨ocx銆亁ls鎴杧lsx鏍煎紡鏂囦欢"
+        );
+        return false;
+      }
+
+      if (file.size > maxSize) {
+        this.$message.error("鏂囦欢澶у皬涓嶈兘瓒呰繃10MB");
+        return false;
+      }
+
+      return true;
+    },
+    // 鏂囦欢閫夋嫨鍙樺寲
+    handleFileChange(file, fileList) {
+      this.tempFileList = fileList;
+    },
+    // 绉婚櫎涓存椂鏂囦欢
+    handleTempRemove(file, fileList) {
+      this.tempFileList = fileList;
+    },
+    /** 涓婁紶鎴愬姛澶勭悊 */
+    handleUploadSuccess(response, file, fileList) {
+      if (response.code === 200) {
+        file.url = response.data || response.url;
+        this.$message.success("鏂囦欢涓婁紶鎴愬姛");
+        for (const file of this.tempFileList) {
+          const newAttachment = {
+            id: Date.now() + Math.random(),
+            type: this.currentUploadType,
+            typeName: this.getCurrentTypeLabel,
+            fileName: file.name,
+            fileSize: file.size,
+            uploadTime: new Date().toISOString(),
+            uploader: "褰撳墠鐢ㄦ埛",
+            fileUrl: file.url
+          };
+
+          this.attachmentList.push(newAttachment);
+        }
+
+        // 鏇存柊闄勪欢JSON鏁版嵁鍒拌〃鍗�
+        this.form.rememberAnnex = this.buildAttachmentJson();
+
+        this.$message.success("鏂囦欢涓婁紶鎴愬姛");
+        this.uploadDialogVisible = false;
+        this.uploadLoading = false;
+        this.tempFileList = [];
+      } else {
+        this.$message.error(response.msg || "鏂囦欢涓婁紶澶辫触");
+      }
+    },
+    // 鎻愪氦涓婁紶
+    async submitUpload() {
+      if (this.tempFileList.length === 0) {
+        this.$message.warning("璇峰厛閫夋嫨瑕佷笂浼犵殑鏂囦欢");
+        return;
+      }
+      this.$refs.uploadRef.submit();
+      this.uploadLoading = true;
+
+      // try {
+      //   for (const file of this.tempFileList) {
+      //     const newAttachment = {
+      //       id: Date.now() + Math.random(),
+      //       type: this.currentUploadType,
+      //       typeName: this.getCurrentTypeLabel,
+      //       fileName: file.name,
+      //       fileSize: file.size,
+      //       uploadTime: new Date().toISOString(),
+      //       uploader: "褰撳墠鐢ㄦ埛",
+      //       fileUrl: URL.createObjectURL(file.raw)
+      //     };
+
+      //     this.attachmentList.push(newAttachment);
+      //   }
+
+      //   // 鏇存柊闄勪欢JSON鏁版嵁鍒拌〃鍗�
+      //   this.form.rememberAnnex = this.buildAttachmentJson();
+
+      //   this.$message.success("鏂囦欢涓婁紶鎴愬姛");
+      //   this.uploadDialogVisible = false;
+      //   this.tempFileList = [];
+      // } catch (error) {
+      //   this.$message.error("鏂囦欢涓婁紶澶辫触");
+      //   console.error("涓婁紶澶辫触:", error);
+      // } finally {
+      //   this.uploadLoading = false;
+      // }
+    },
+    // 鍒犻櫎闄勪欢
+    handleRemoveAttachment(attachment) {
+      this.$confirm("纭畾瑕佸垹闄よ繖涓瘎浼拌〃闄勪欢鍚楋紵", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning"
+      })
+        .then(() => {
+          const index = this.attachmentList.findIndex(
+            item => item.id === attachment.id
+          );
+          if (index !== -1) {
+            this.attachmentList.splice(index, 1);
+            // 鏇存柊闄勪欢JSON鏁版嵁鍒拌〃鍗�
+            this.form.rememberAnnex = this.buildAttachmentJson();
+            this.$message.success("璇勪及琛ㄥ垹闄ゆ垚鍔�");
+          }
+        })
+        .catch(() => {});
+    },
+    // 棰勮闄勪欢
+    handlePreview(attachment) {
+      if (attachment.fileName.endsWith(".pdf")) {
+        window.open(attachment.fileUrl, "_blank");
+      } else if (attachment.fileName.match(/\.(jpg|jpeg|png)$/i)) {
+        this.$alert(
+          `<img src="${attachment.fileUrl}" style="max-width: 100%;" alt="${attachment.fileName}">`,
+          "鍥剧墖棰勮",
+          {
+            dangerouslyUseHTMLString: true,
+            customClass: "image-preview-dialog"
+          }
+        );
+      } else {
+        this.$message.info("璇ユ枃浠剁被鍨嬫殏涓嶆敮鎸佸湪绾块瑙堬紝璇蜂笅杞藉悗鏌ョ湅");
+      }
+    },
+    // 涓嬭浇闄勪欢
+    handleDownload(attachment) {
+      const link = document.createElement("a");
+      link.href = attachment.fileUrl;
+      link.download = attachment.fileName;
+      link.click();
+      this.$message.success(`寮�濮嬩笅杞�: ${attachment.fileName}`);
+    },
+    // 缂栬緫淇℃伅
+    handleEdit() {
+      this.isEdit = true;
+    },
+    // 淇濆瓨淇℃伅
+    async handleSave() {
+      this.$refs.form.validate(async valid => {
+        if (valid) {
+          this.saveLoading = true;
+
+          try {
+            // 鏋勫缓鎻愪氦鏁版嵁
+            const submitData = {
+              ...this.form,
+              infoid: this.infoid,
+              // 纭繚闄勪欢鏁版嵁鏈�鏂�
+              rememberannex: this.buildAttachmentJson()
+            };
+            let response = null;
+
+            if (submitData.id) {
+              response = await deathinfoedit(submitData);
+            } else {
+              response = await deathinfoadd(submitData);
+            }
+            // const response = await deathinfoedit(submitData);
+
+            if (response.code === 200) {
+              this.$message.success("淇濆瓨鎴愬姛");
+              this.isEdit = false;
+              if (!this.form.id) {
+                this.form.id = response.data;
+              }
+              if (this.$route.path.includes("/add")) {
+                this.$router.push("/case/deathJudgment");
+              }
+            } else {
+              this.$message.error(response.message || "淇濆瓨澶辫触");
+            }
+          } catch (error) {
+            console.error("淇濆瓨澶辫触:", error);
+            this.$message.error("淇濆瓨澶辫触");
+          } finally {
+            this.saveLoading = false;
+          }
+        }
+      });
+    },
+    // 鏂囦欢澶у皬鏍煎紡鍖�
+    formatFileSize(size) {
+      if (size === 0) return "0 B";
+      const k = 1024;
+      const sizes = ["B", "KB", "MB", "GB"];
+      const i = Math.floor(Math.log(size) / Math.log(k));
+      return parseFloat((size / Math.pow(k, i)).toFixed(2)) + " " + sizes[i];
+    },
+    // 鏃堕棿鏍煎紡鍖�
+    parseTime(time) {
+      if (!time) return "";
+      const date = new Date(time);
+      return `${date.getFullYear()}-${(date.getMonth() + 1)
+        .toString()
+        .padStart(2, "0")}-${date
+        .getDate()
+        .toString()
+        .padStart(2, "0")} ${date
+        .getHours()
+        .toString()
+        .padStart(2, "0")}:${date
+        .getMinutes()
+        .toString()
+        .padStart(2, "0")}`;
+    }
+  }
+};
+</script>
+
+<style scoped>
+.death-judgment-detail {
+  padding: 20px;
+}
+
+.detail-card {
+  margin-bottom: 20px;
+}
+
+.attachment-card {
+  margin-bottom: 20px;
+}
+
+.detail-title {
+  font-size: 16px;
+  font-weight: bold;
+}
+
+.attachment-upload-section {
+  padding: 10px;
+}
+
+.upload-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 15px;
+}
+
+.upload-title {
+  font-size: 14px;
+  font-weight: 600;
+  color: #303133;
+}
+
+.file-info {
+  display: flex;
+  align-items: center;
+}
+
+.empty-attachment {
+  text-align: center;
+  padding: 40px 0;
+  color: #909399;
+}
+
+/* 鍥剧墖棰勮瀵硅瘽妗嗘牱寮� */
+:deep(.image-preview-dialog) {
+  width: auto;
+  max-width: 90vw;
+}
+
+:deep(.image-preview-dialog .el-message-box__content) {
+  text-align: center;
+}
+</style>

--
Gitblit v1.9.3