From 5d397555769c6f7f2c86a2a2d7b56727422eb160 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 07 十一月 2025 13:50:39 +0800
Subject: [PATCH] 合同管理加下载合同功能

---
 src/views/personnelManagement/contractManagement/index.vue |   63 +++++++++++++++++++++++++++----
 1 files changed, 54 insertions(+), 9 deletions(-)

diff --git a/src/views/personnelManagement/contractManagement/index.vue b/src/views/personnelManagement/contractManagement/index.vue
index a39fcf2..10cd508 100644
--- a/src/views/personnelManagement/contractManagement/index.vue
+++ b/src/views/personnelManagement/contractManagement/index.vue
@@ -70,14 +70,15 @@
 </template>
 
 <script setup>
-import { Search } from "@element-plus/icons-vue";
-import { onMounted, ref } from "vue";
+import { Search, UploadFilled } from "@element-plus/icons-vue";
+import { onMounted, ref, reactive, toRefs, getCurrentInstance, nextTick } from "vue";
 import FormDia from "@/views/personnelManagement/contractManagement/components/formDia.vue";
 import { ElMessageBox } from "element-plus";
-import { staffOnJobListPage } from "@/api/personnelManagement/employeeRecord.js";
+import { staffOnJobListPage, staffOnJobExportCopy } from "@/api/personnelManagement/employeeRecord.js";
 import dayjs from "dayjs";
 import { getToken } from "@/utils/auth.js";
 import FilesDia from "./filesDia.vue";
+import axios from "axios";
 const data = reactive({
   searchForm: {
     staffName: "",
@@ -146,11 +147,6 @@
     width: 100
   },
   {
-    label: "韬唤璇佸彿",
-    prop: "identityCard",
-    width: 200
-  },
-  {
     label: "骞撮緞",
     prop: "age",
   },
@@ -188,7 +184,7 @@
     label: "鎿嶄綔",
     align: "center",
     fixed: 'right',
-    width: 120,
+    width: 180,
     operation: [
       {
         name: "璇︽儏",
@@ -202,6 +198,13 @@
         type: "text",
         clickFun: (row) => {
           openFilesFormDia(row);
+        },
+      },
+      {
+        name: "涓嬭浇鍚堝悓",
+        type: "text",
+        clickFun: (row) => {
+          handleDownloadContract(row);
         },
       },
     ],
@@ -283,6 +286,48 @@
       proxy.$modal.msg("宸插彇娑�");
     });
 };
+// 涓嬭浇鍚堝悓
+const handleDownloadContract = (row) => {
+  const fileName = `${row.staffName || "鍚堝悓"}鍔冲姩鍚堝悓.docx`;
+  proxy.$modal?.loading?.("姝e湪鐢熸垚鍚堝悓锛岃绋嶅��...");
+  staffOnJobExportCopy({ ...row })
+    .then((res) => {
+      proxy.$modal?.closeLoading?.();
+      if (res?.code === 200 && res?.msg) {
+        const javaApi = proxy.javaApi || import.meta.env.VITE_JAVA_API || "";
+        const downloadPath = res.msg.startsWith("/") ? res.msg : `/${res.msg}`;
+        const downloadUrl = `${javaApi}${downloadPath}`;
+        axios({
+          url: downloadUrl,
+          method: "get",
+          responseType: "blob",
+          headers: { Authorization: "Bearer " + getToken() }
+        })
+          .then((resp) => {
+            const blob = new Blob([resp.data], {
+              type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
+            });
+            const url = window.URL.createObjectURL(blob);
+            const link = document.createElement("a");
+            link.href = url;
+            link.download = fileName;
+            document.body.appendChild(link);
+            link.click();
+            document.body.removeChild(link);
+            window.URL.revokeObjectURL(url);
+          })
+          .catch(() => {
+            proxy.$modal.msgError("鍚堝悓涓嬭浇澶辫触锛岃绋嶅悗閲嶈瘯");
+          });
+      } else {
+        proxy.$modal.msgError(res?.msg || "鍚堝悓鐢熸垚澶辫触");
+      }
+    })
+    .catch(() => {
+      proxy.$modal?.closeLoading?.();
+      proxy.$modal.msgError("鍚堝悓鐢熸垚澶辫触锛岃绋嶅悗閲嶈瘯");
+    });
+};
 const upload = reactive({
   // 鏄惁鏄剧ず寮瑰嚭灞傦紙鍚堝悓瀵煎叆锛�
   open: false,

--
Gitblit v1.9.3