From 5159d19ed210ec3e14d157f9ae6221299bd46e34 Mon Sep 17 00:00:00 2001
From: yangfeng <wanwan926_4@163.com>
Date: 星期二, 29 八月 2023 17:04:47 +0800
Subject: [PATCH] 供应商文件预览、下载、删除

---
 src/api/supplierManage/supplier.js                   |    6 +
 src/views/supplierManage/supplier/index.vue          |    3 
 src/views/supplierManage/supplier/DetailSupplier.vue |    4 
 package-lock.json                                    |   95 ++++++++++++++++--
 src/views/supplierManage/supplier/AddSupplier.vue    |   69 ++++++++++---
 package.json                                         |    2 
 src/router/index.js                                  |    9 +
 src/views/supplierManage/supplier/PreviewFile.vue    |   61 ++++++++++++
 8 files changed, 216 insertions(+), 33 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index c36dd14..2c51123 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,15 +1,17 @@
 {
-  "name": "srm-web",
+  "name": "crm-web",
   "version": "0.1.0",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
-      "name": "srm-web",
+      "name": "crm-web",
       "version": "0.1.0",
       "dependencies": {
         "axios": "^1.4.0",
         "core-js": "^3.8.3",
+        "docx-preview": "^0.1.18",
+        "downloadjs": "^1.4.7",
         "element-ui": "^2.15.13",
         "vue": "^2.6.14",
         "vue-router": "^3.5.1",
@@ -4289,8 +4291,7 @@
     "node_modules/core-util-is": {
       "version": "1.0.3",
       "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz",
-      "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
-      "dev": true
+      "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
     },
     "node_modules/cosmiconfig": {
       "version": "7.1.0",
@@ -4879,6 +4880,14 @@
         "node": ">=6.0.0"
       }
     },
+    "node_modules/docx-preview": {
+      "version": "0.1.18",
+      "resolved": "https://registry.npmmirror.com/docx-preview/-/docx-preview-0.1.18.tgz",
+      "integrity": "sha512-nmkeghp9k4Qw+T3/sttwuMhTnn0gQaq23EN8dLoB7nxb/fEd8S57mh9l8j7SpVgpGg5MSW1WZJffv6Yoy29KaA==",
+      "dependencies": {
+        "jszip": ">=3.0.0"
+      }
+    },
     "node_modules/dom-converter": {
       "version": "0.2.0",
       "resolved": "https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz",
@@ -4952,6 +4961,11 @@
       "resolved": "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
       "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
       "dev": true
+    },
+    "node_modules/downloadjs": {
+      "version": "1.4.7",
+      "resolved": "https://registry.npmmirror.com/downloadjs/-/downloadjs-1.4.7.tgz",
+      "integrity": "sha512-LN1gO7+u9xjU5oEScGFKvXhYf7Y/empUIIEAGBs1LzUq/rg5duiDrkuH5A2lQGd5jfMOb9X9usDa2oVXwJ0U/Q=="
     },
     "node_modules/duplexer": {
       "version": "0.1.2",
@@ -6534,6 +6548,11 @@
         "node": ">= 4"
       }
     },
+    "node_modules/immediate": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz",
+      "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="
+    },
     "node_modules/immutable": {
       "version": "4.3.2",
       "resolved": "https://registry.npmmirror.com/immutable/-/immutable-4.3.2.tgz",
@@ -6584,8 +6603,7 @@
     "node_modules/inherits": {
       "version": "2.0.4",
       "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-      "dev": true
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
     },
     "node_modules/ipaddr.js": {
       "version": "2.1.0",
@@ -6776,8 +6794,7 @@
     "node_modules/isarray": {
       "version": "1.0.0",
       "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz",
-      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
-      "dev": true
+      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
     },
     "node_modules/isexe": {
       "version": "2.0.0",
@@ -6936,6 +6953,44 @@
         "graceful-fs": "^4.1.6"
       }
     },
+    "node_modules/jszip": {
+      "version": "3.10.1",
+      "resolved": "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz",
+      "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
+      "dependencies": {
+        "lie": "~3.3.0",
+        "pako": "~1.0.2",
+        "readable-stream": "~2.3.6",
+        "setimmediate": "^1.0.5"
+      }
+    },
+    "node_modules/jszip/node_modules/readable-stream": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
+      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+      "dependencies": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "node_modules/jszip/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+    },
+    "node_modules/jszip/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
     "node_modules/kind-of": {
       "version": "6.0.3",
       "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz",
@@ -6984,6 +7039,14 @@
       },
       "engines": {
         "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/lie": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmmirror.com/lie/-/lie-3.3.0.tgz",
+      "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
+      "dependencies": {
+        "immediate": "~3.0.5"
       }
     },
     "node_modules/lilconfig": {
@@ -8320,6 +8383,11 @@
         "node": ">=6"
       }
     },
+    "node_modules/pako": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz",
+      "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
+    },
     "node_modules/param-case": {
       "version": "3.0.4",
       "resolved": "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz",
@@ -9085,8 +9153,7 @@
     "node_modules/process-nextick-args": {
       "version": "2.0.1",
       "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
-      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
-      "dev": true
+      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
     },
     "node_modules/progress": {
       "version": "2.0.3",
@@ -9768,6 +9835,11 @@
       "engines": {
         "node": ">= 0.8.0"
       }
+    },
+    "node_modules/setimmediate": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz",
+      "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="
     },
     "node_modules/setprototypeof": {
       "version": "1.2.0",
@@ -10624,8 +10696,7 @@
     "node_modules/util-deprecate": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
-      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
-      "dev": true
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
     },
     "node_modules/utila": {
       "version": "0.4.0",
diff --git a/package.json b/package.json
index 3ceff7f..c408a92 100644
--- a/package.json
+++ b/package.json
@@ -10,6 +10,8 @@
   "dependencies": {
     "axios": "^1.4.0",
     "core-js": "^3.8.3",
+    "docx-preview": "^0.1.18",
+    "downloadjs": "^1.4.7",
     "element-ui": "^2.15.13",
     "vue": "^2.6.14",
     "vue-router": "^3.5.1",
diff --git a/src/api/supplierManage/supplier.js b/src/api/supplierManage/supplier.js
index f044c73..94cad95 100644
--- a/src/api/supplierManage/supplier.js
+++ b/src/api/supplierManage/supplier.js
@@ -81,6 +81,12 @@
     params: data
   })
 }
+// 涓嬭浇鍚堝悓
+export const downloadContract = async (data) => {
+  return await axios.get(`/api/con/downloadContract`, {
+    params: data
+  })
+}
 
 // 鏇存柊鎵�灞炶涓�
 export function updateIndustry(data) {
diff --git a/src/router/index.js b/src/router/index.js
index 0a8541f..4834a64 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -11,6 +11,7 @@
 const supplierManage = (resolve) => require(["@/views/supplierManage/index"], resolve)
 const purchaseManage = (resolve) => require(["@/views/purchaseManage/index"], resolve)
 const productManage = (resolve) => require(["@/views/productManage/index"], resolve)
+const PreviewFile = (resolve) => require(["@/views/supplierManage/supplier/PreviewFile"], resolve)
 
 export const routes = [
   {
@@ -68,6 +69,14 @@
     }
   },
   {
+    path: "/PreviewFile",
+    component: PreviewFile,
+    meta: {
+      isLogin: true,
+      title: "棰勮"
+    }
+  },
+  {
     path: "*",
     component: () => import("@/views/other/error/404"),
     meta: {
diff --git a/src/views/supplierManage/supplier/AddSupplier.vue b/src/views/supplierManage/supplier/AddSupplier.vue
index 52038bd..2fb6519 100644
--- a/src/views/supplierManage/supplier/AddSupplier.vue
+++ b/src/views/supplierManage/supplier/AddSupplier.vue
@@ -160,7 +160,7 @@
                       <span style="margin-left: 5px">鍚堝悓闄勪欢</span>
                     </div>
                   </template>
-                  <div class="annex-view">
+                  <div v-if="file_id === 0" class="annex-view">
                     <div @click="addAnnexClick">
                       <el-upload
                         class="upload-demo"
@@ -178,13 +178,15 @@
                       </el-upload>
                     </div>
                   </div>
-                  <div v-if="file_name && file_name.length > 0" class="file-content">
+                  <!-- v-if="file_name && file_name.length > 0" -->
+                  <div v-else class="file-content">
                     <div>{{ file_name }}</div>
                     <div>
-                      <el-button type="text">棰勮</el-button>
-                      <el-button type="text">涓嬭浇</el-button>
-                      <el-button type="text">鍒犻櫎</el-button>
+                      <el-button type="text" @click="previewClick" style="margin-left: 10px">棰勮</el-button>
+                      <el-button type="text" @click="downloadClick">涓嬭浇</el-button>
+                      <el-button type="text" @click="delContractClick">鍒犻櫎</el-button>
                     </div>
+                    <div ref="file"></div>
                   </div>
                 </el-form-item>
               </el-col>
@@ -208,11 +210,15 @@
   createContract,
   updateSupplier,
   getIndustryList,
-  previewContract
+  getSupplierTypeList,
+  deleteContract
+  // previewContract
 } from "@/api/supplierManage/supplier"
 import EditDropdownDialog from "@/views/other/commonDialog/EditDropdownDialog"
-import { getSupplierTypeList } from "@/api/supplierManage/supplier"
 import { getMemberListFromGrpc } from "@/api/common/other"
+import download from "downloadjs"
+// import { renderAsync } from "docx-preview"
+// import axios from "axios"
 export default {
   name: "AddSupplierDialog",
   props: {
@@ -263,8 +269,10 @@
         infomation: {}
       },
       fileList: [],
-      file_name: "",
-      file_id: this.addCommonConfig.infomation.fileId
+      file_name: this.addCommonConfig.infomation.file_name,
+      file_id: this.addCommonConfig.infomation.fileId,
+      previewUrl: "",
+      loading: false
     }
   },
   created() {
@@ -272,7 +280,7 @@
     this.getIndustryList()
     this.getMemberList()
     if (this.editConfig.title === "淇敼") {
-      this.previewContract()
+      // this.previewContract()
     }
   },
   methods: {
@@ -302,14 +310,6 @@
         pageSize: 100
       }).then((res) => {
         this.industryOptions = res.data.data.list
-      })
-    },
-    // 鍚堝悓闄勪欢淇℃伅
-    async previewContract() {
-      await previewContract({
-        id: 1
-      }).then((res) => {
-        console.log(res.data)
       })
     },
     handleClose() {
@@ -364,7 +364,7 @@
         name: data.name || "",
         number: data.number || "",
         phone: data.phone || "",
-        responsiblePersonId: data.responsiblePersonId || 0,
+        responsiblePersonName: data.responsiblePersonName || "",
         status: data.status || 0,
         supplierType: data.supplierType || "",
         url: data.url || ""
@@ -416,6 +416,37 @@
     handleExceed(files, fileList) {
       console.log(fileList)
       this.$message.warning(`褰撳墠闄愬埗閫夋嫨 1 涓枃浠讹紝鏈閫夋嫨浜� ${files.length} 涓枃浠禶)
+    },
+    // 涓嬭浇鍚堝悓
+    downloadClick() {
+      let url = "/api/con/downloadContract?id=" + this.file_id
+      download(url, "", "")
+    },
+    // 鍒犻櫎鍚堝悓
+    delContractClick() {
+      deleteContract({
+        id: this.file_id
+      }).then((res) => {
+        console.log(res)
+        this.$message.success(res.msg)
+        this.file_id = 0
+      })
+    },
+    // 棰勮鍚堝悓
+    async previewClick() {
+      this.previewUrl = "/api/con/previewContract?id=" + this.file_id
+      if (this.file_name.includes("pdf")) {
+        window.open(this.previewUrl, "_blank")
+      } else {
+        let routeUrl = this.$router.resolve({
+          path: "/PreviewFile",
+          query: {
+            //瑕佷紶鐨勫弬鏁�
+            previewUrl: this.previewUrl
+          }
+        })
+        window.open(routeUrl.href, "_blank")
+      }
     }
   }
 }
diff --git a/src/views/supplierManage/supplier/DetailSupplier.vue b/src/views/supplierManage/supplier/DetailSupplier.vue
index 432702a..8155de0 100644
--- a/src/views/supplierManage/supplier/DetailSupplier.vue
+++ b/src/views/supplierManage/supplier/DetailSupplier.vue
@@ -69,7 +69,9 @@
               </ul>
               <div class="business_scope">
                 <div class="content-title">{{ "鍚堝悓闄勪欢" }}</div>
-                <div class="content-data">{{ record ? record : "--" }}</div>
+                <div class="content-data">
+                  {{ detailConfig.infomation.contract.fileName ? detailConfig.infomation.contract.fileName : "--" }}
+                </div>
               </div>
             </div>
           </div>
diff --git a/src/views/supplierManage/supplier/PreviewFile.vue b/src/views/supplierManage/supplier/PreviewFile.vue
new file mode 100644
index 0000000..a0c198e
--- /dev/null
+++ b/src/views/supplierManage/supplier/PreviewFile.vue
@@ -0,0 +1,61 @@
+<template>
+  <div class="docx-container">
+    <div ref="file"></div>
+  </div>
+</template>
+
+<script>
+import axios from "axios"
+import { renderAsync } from "docx-preview"
+
+export default {
+  props: {
+    url: {
+      type: String,
+      default: ""
+    }
+  },
+  data() {
+    return {
+      docxOptions: {
+        className: "kaimo-docx-666", // string锛氶粯璁ゅ拰鏂囨。鏍峰紡绫荤殑绫诲悕/鍓嶇紑
+        inWrapper: true, // boolean锛氬惎鐢ㄥ洿缁曟枃妗e唴瀹圭殑鍖呰鍣ㄦ覆鏌�
+        ignoreWidth: false, // boolean锛氱鐢ㄩ〉闈㈢殑娓叉煋瀹藉害
+        ignoreHeight: false, // boolean锛氱姝㈡覆鏌撻〉闈㈤珮搴�
+        ignoreFonts: false, // boolean锛氱鐢ㄥ瓧浣撴覆鏌�
+        breakPages: true, // boolean锛氬湪鍒嗛〉绗︿笂鍚敤鍒嗛〉
+        ignoreLastRenderedPageBreak: false, // boolean锛氬湪 lastRenderedPageBreak 鍏冪礌涓婄鐢ㄥ垎椤�
+        experimental: true, // boolean锛氬惎鐢ㄥ疄楠屽姛鑳斤紙鍒惰〃绗﹀仠姝㈣绠楋級
+        trimXmlDeclaration: true, // boolean锛氬鏋滀负true锛岃В鏋愬墠浼氫粠xmlTemplate 鏂囨。涓Щ闄� xmlTemplate 澹版槑
+        useBase64URL: false, // boolean锛氬鏋滀负true锛屽浘鐗囥�佸瓧浣撶瓑浼氳浆涓篵ase 64 URL锛屽惁鍒欎娇鐢║RL.createObjectURL
+        useMathMLPolyfill: false, // boolean锛氬寘鎷敤浜� chrome銆乪dge 绛夌殑 MathML polyfill銆�
+        showChanges: false, // boolean锛氬惎鐢ㄦ枃妗f洿鏀圭殑瀹為獙鎬ф覆鏌擄紙鎻掑叆/鍒犻櫎锛�
+        debug: false // boolean锛氬惎鐢ㄩ澶栫殑鏃ュ織璁板綍
+      }
+    }
+  },
+  mounted() {
+    this.renderFile()
+  },
+  methods: {
+    renderFile() {
+      console.log(this.url)
+      var previewUrl = this.$route.query.previewUrl
+      axios({
+        method: "get",
+        responseType: "blob",
+        url: previewUrl
+      }).then((response) => {
+        renderAsync(response.data, this.$refs.file, null, this.docxOptions)
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+.docx-container ::v-deep .docx-wrapper {
+  background-color: #fff;
+  padding: 40px 40px;
+}
+</style>
diff --git a/src/views/supplierManage/supplier/index.vue b/src/views/supplierManage/supplier/index.vue
index c192460..77a5721 100644
--- a/src/views/supplierManage/supplier/index.vue
+++ b/src/views/supplierManage/supplier/index.vue
@@ -282,6 +282,7 @@
     addBtnClick() {
       this.editConfig.visible = true
       this.editConfig.title = "鏂板缓"
+      this.editConfig.infomation = { fileId: 0 }
     },
     // 鍚敤渚涘簲鍟�
     async enableClick(row, value) {
@@ -300,7 +301,7 @@
     modifyClick(row) {
       this.editConfig.visible = true
       this.editConfig.title = "淇敼"
-      this.editConfig.infomation = { ...row }
+      this.editConfig.infomation = { ...row, file_name: row.contract.fileName }
     },
     // 鐩稿叧渚涘簲鍟�
     raleteClick(row) {

--
Gitblit v1.8.0