From d8f97ebbbe27affff762f4f131f29f773e4c4738 Mon Sep 17 00:00:00 2001
From: he wei <858544502@qq.com>
Date: 星期六, 21 十月 2023 08:55:43 +0800
Subject: [PATCH] UA 物料图纸历史 0809详情等修改

---
 src/pages/resourceManage/product/details/apis.js             |   22 +
 src/pages/resourceManage/materialsCenter/list.vue            |   46 ++
 src/pages/resourceManage/product/list.vue                    |   52 +++
 src/pages/components/filesTable.vue                          |  160 ++++++++++
 src/pages/resourceManage/materialsCenter/history/history.vue |   18 
 src/pages/resourceManage/product/apis.js                     |  105 ++++---
 src/pages/resourceManage/components/ownerDownload.vue        |  217 +++++++++++++++
 src/router/config.js                                         |   10 
 src/pages/resourceManage/product/details/details.vue         |  183 +++++++++++++
 src/assets/js/apis.js                                        |   25 +
 10 files changed, 767 insertions(+), 71 deletions(-)

diff --git a/src/assets/js/apis.js b/src/assets/js/apis.js
index 088c425..a095816 100644
--- a/src/assets/js/apis.js
+++ b/src/assets/js/apis.js
@@ -28,7 +28,7 @@
  * 鏌ヨ涓嬭浇鏃ュ織
  * @param {*} oprateInfo 鐗╂枡浼營d  浜у搧浼爌arentCode + '_' + customCode
  * @param {*} type 鐗╂枡13 浜у搧12
- * @returns 
+ * @returns
  */
 export const getDownloadLog = (oprateInfo, type) => {
   return axios({
@@ -37,3 +37,26 @@
     params: { oprateInfo, type },
   });
 };
+/**
+ * //鏍规嵁鐗╂枡id鏌ヨdwg鍘嗗彶
+ * @returns
+ */
+export const getDwgHisById = (materialId, pageCurr, pageSize) => {
+  return axios({
+    method: "GET",
+    url: "materialHistory/getDwgHisById",
+    params: { materialId, pageCurr, pageSize },
+  });
+};
+
+/**
+ * 鏍规嵁鐗╂枡id鏌ヨpic鍘嗗彶  鐩墠鐢ㄤ笉涓�
+ * @returns
+ */
+export const getPicHisById = (materialId, pageCurr, pageSize) => {
+  return axios({
+    method: "GET",
+    url: "materialHistory/getPicHisById",
+    params: { materialId, pageCurr, pageSize },
+  });
+};
\ No newline at end of file
diff --git a/src/pages/components/filesTable.vue b/src/pages/components/filesTable.vue
index 61ed668..2d1d2a1 100644
--- a/src/pages/components/filesTable.vue
+++ b/src/pages/components/filesTable.vue
@@ -13,14 +13,32 @@
     >
       <template slot="action" slot-scope="text, record">
         <div v-if="record.url">
-          <a v-if="!record.lockFlag && ((record.fileType == 'dwg' && canViewDoc) || (record.fileType != 'dwg' && canViewOther))" @click="view(record)">棰勮</a>
-          <template v-if="((record.fileType == 'dwg' && canDownloadDoc) || (record.fileType != 'dwg' && canDownloadOther)) && !record.lockFlag">
+          <a
+            v-if="
+              !record.lockFlag &&
+              ((record.fileType == 'dwg' && canViewDoc) ||
+                (record.fileType != 'dwg' && canViewOther))
+            "
+            @click="view(record)"
+            >棰勮</a
+          >
+          <template
+            v-if="
+              ((record.fileType == 'dwg' && canDownloadDoc) ||
+                (record.fileType != 'dwg' && canDownloadOther)) &&
+              !record.lockFlag
+            "
+          >
             <a-divider type="vertical"></a-divider>
             <a @click="downloadReason(record)">涓嬭浇</a>
           </template>
           <template v-if="canLockOther && (id || productId)">
             <a-divider v-if="!record.lockFlag" type="vertical"></a-divider>
             <a @click="lock(record)">{{ record.lockFlag ? "瑙i攣" : "閿佸畾" }}</a>
+          </template>
+          <template v-if="isOwnerDwg(record)">
+            <a-divider type="vertical"></a-divider>
+            <a @click="history(record)">鍘嗗彶</a>
           </template>
         </div>
       </template>
@@ -50,7 +68,46 @@
         />
       </a-form-model-item>
     </a-modal>
-    <download-reason :reason-visible.sync="downloadReasonVisible" v-if="downloadReasonVisible" @ok="downloadReasonOk"></download-reason>
+    <download-reason
+      :reason-visible.sync="downloadReasonVisible"
+      v-if="downloadReasonVisible"
+      @ok="downloadReasonOk"
+    ></download-reason>
+    <a-modal
+      :visible="dwgHisVisible"
+      title="鐗╂枡鍥剧焊鍘嗗彶"
+      :width="860"
+      :destroyOnClose="true"
+      @cancel="dwgHisClose"
+    >
+      <a-table
+        ref="table"
+        :columns="dwgColumns"
+        :dataSource="dwgDataSource"
+        :scroll="{ x: 400, y1 }"
+        :row-key="(record, index) => index"
+        :pagination="{
+          current: pageCurr,
+          pageSize: pageSize,
+          total: total,
+          showSizeChanger: true,
+          showLessItems: true,
+          showQuickJumper: true,
+          pageSizeOptions: ['10', '20', '50', '100'],
+          showTotal: (total, range) =>
+            `绗� ${range[0]}-${range[1]} 鏉★紝鎬昏 ${total} 鏉,
+          onChange: onPageChange,
+          onShowSizeChange: onSizeChange,
+        }"
+      >
+        <template slot="action" slot-scope="text, record">
+          <a @click="dwgReview(record.url)">棰勮</a>
+        </template>
+      </a-table>
+      <template v-slot:footer>
+        <a-button @click="dwgHisClose">鍏抽棴</a-button>
+      </template>
+    </a-modal>
   </div>
 </template>
 
@@ -58,11 +115,11 @@
 import getWebUrl from "@/assets/js/tools/getWebUrl";
 import { dwgReview } from "@/pages/workplace/apis";
 // import { downloadLog } from "@/pages/system/logs/apis";
-import { downLoadFileByFilePath } from "@/assets/js/apis";
+import { downLoadFileByFilePath, getDwgHisById } from "@/assets/js/apis";
 import { updateAttachLock } from "@/pages/resourceManage/materialsCenter/apis";
 import { updateProductLock } from "@/pages/resourceManage/product/details/apis";
 import checkPermit from "@/assets/js/tools/checkPermit";
-import DownloadReason from '@/pages/components/downloadReason';
+import DownloadReason from "@/pages/components/downloadReason";
 import PERMITS from "@/assets/js/const/const_permits";
 import { mapGetters } from "vuex";
 export default {
@@ -83,6 +140,10 @@
         return null;
       },
     },
+    subModel: {
+      type: String,
+      default: "",
+    },
     // 绫诲瀷 浜у搧12 鐗╂枡13
     type: {
       type: Number,
@@ -90,8 +151,8 @@
     },
     oprateVersion: {
       type: Number,
-      default: 0
-    }
+      default: 0,
+    },
   },
   data() {
     const columns = [
@@ -117,12 +178,35 @@
         dataIndex: "operation",
         key: "operation",
         align: "center",
+        width: 200,
+        scopedSlots: { customRender: "action" },
+      },
+    ];
+    const dwgColumns = [
+      {
+        title: "鏂囦欢鍚嶇О",
+        dataIndex: "fileName",
+        align: "center",
+        width: 200,
+      },
+      {
+        title: "鎿嶄綔",
+        dataIndex: "operation",
+        key: "operation",
+        align: "center",
         width: 140,
         scopedSlots: { customRender: "action" },
       },
     ];
     return {
-      downloadUrl: '',
+      dwgHisVisible: false,
+      dwgColumns,
+      dwgDataSource: [],
+      pageCurr: 1,
+      pageSize: 10,
+      total: 0,
+      y1: 400,
+      downloadUrl: "",
       downloadReasonVisible: false,
       reason: "",
       reasonVisible: false,
@@ -164,6 +248,9 @@
     handleCancel() {
       this.previewVisible = false;
     },
+    dwgHisClose() {
+      this.dwgHisVisible = false;
+    },
     dwgReview(url) {
       let loading = this.$layer.loading();
       dwgReview(url)
@@ -191,7 +278,13 @@
     downloadLog(url, reason) {
       let reg = /(.*\\+)*(.*)$/;
       let fileName = url.match(reg)[2];
-      downLoadFileByFilePath(url, reason, this.info.oprateInfo, this.oprateVersion, this.type).then((res) => {
+      downLoadFileByFilePath(
+        url,
+        reason,
+        this.info.oprateInfo,
+        this.oprateVersion,
+        this.type
+      ).then((res) => {
         let { data, status } = res;
         if (200 == status && data) {
           let url = window.URL.createObjectURL(data);
@@ -230,7 +323,7 @@
         localReason: this.reason,
         lockFlag,
         materialId: this.id ? this.id : undefined,
-        productId: this.productId ? this.productId : undefined
+        productId: this.productId ? this.productId : undefined,
       };
       let update = isProd ? updateProductLock : updateAttachLock;
       update([params]).then((res) => {
@@ -245,6 +338,53 @@
         }
       });
     },
+    isOwnerDwg(record) {
+      if (!this.subModel) {
+        return false;
+      }
+      let reg = new RegExp("^" + this.subModel, "i");
+      return reg.test(record.fileName) && record.fileType == "dwg";
+    },
+    history(record) {
+      this.getList();
+      this.dwgHisVisible = true;
+    },
+    getList() {
+      getDwgHisById(this.id, this.pageCurr, this.pageSize)
+        .then((res) => {
+          let { code, data, data2 } = res.data;
+          let list = [];
+          let total = 0;
+          if (code && data) {
+            // console.log(data);
+            let reg = /(.*\\+)*(.*)$/;
+            list = data2.list.map((item) => {
+              let url = item.dwgUrl;
+              let fileName = url.match(reg)[2];
+              return {
+                fileName,
+                url,
+              };
+            });
+            total = data2.total;
+          }
+          this.dwgDataSource = list;
+          this.total = total;
+        })
+        .catch((err) => {
+          console.log(err);
+        });
+    },
+    onPageChange(page, pageSize) {
+      this.pageCurr = page;
+      this.pageSize = pageSize;
+      this.getList();
+    },
+    onSizeChange(current, size) {
+      this.pageCurr = 1;
+      this.pageSize = size;
+      this.getList();
+    },
   },
   computed: {
     dataSource() {
diff --git a/src/pages/resourceManage/components/ownerDownload.vue b/src/pages/resourceManage/components/ownerDownload.vue
new file mode 100644
index 0000000..0c011f5
--- /dev/null
+++ b/src/pages/resourceManage/components/ownerDownload.vue
@@ -0,0 +1,217 @@
+<template>
+  <a-card class="card">
+    <div class="p-header">
+      <a-form layout="horizontal" class="flex">
+        <div class="form">
+          <a-row>
+            <a-col :md="8" :sm="24">
+              <a-form-item
+                label="璧锋鏃ユ湡"
+                :labelCol="{ span: 5 }"
+                :wrapperCol="{ span: 18, offset: 1 }"
+              >
+                <a-date-picker
+                  v-model="startDate"
+                  :allowClear="false"
+                  :valueFormat="dateFormat"
+                  :format="dateFormat"
+                  />-
+                  <a-date-picker
+                  v-model="endDate"
+                  :allowClear="false"
+                  :valueFormat="dateFormat"
+                  :format="dateFormat"
+                />
+              </a-form-item>
+            </a-col>
+          </a-row>
+        </div>
+        <span style="float: right; margin-top: 3px">
+          <a-button type="primary" @click="getList">鏌ヨ</a-button>
+        </span>
+      </a-form>
+    </div>
+    <div class="p-content" ref="wraper">
+      <div class="p-inner">
+        <a-table
+          ref="table"
+          :columns="columns"
+          :dataSource="dataSource"
+          :scroll="{ x: 400, y }"
+          row-key="id"
+          :pagination="{
+            current: pageCurr,
+            pageSize: pageSize,
+            total: total,
+            showSizeChanger: true,
+            showLessItems: true,
+            showQuickJumper: true,
+            pageSizeOptions: ['10', '20', '50', '100'],
+            showTotal: (total, range) =>
+              `绗� ${range[0]}-${range[1]} 鏉★紝鎬昏 ${total} 鏉,
+            onChange: onPageChange,
+            onShowSizeChange: onSizeChange,
+          }"
+        >
+          <template slot="dataIndex" slot-scope="{ index }">
+            {{ index + 1 }}
+          </template>
+        </a-table>
+      </div>
+    </div>
+  </a-card>
+</template>
+
+<script>
+import { getUnlockByOwner } from "../product/apis";
+import moment from "moment";
+export default {
+  name: "",
+
+  data() {
+    const columns = [
+      {
+        title: "鎿嶄綔鏃堕棿",
+        dataIndex: "createTime",
+      },
+      {
+        title: "姣嶆枡缂栫爜",
+        dataIndex: "parentCode",
+      },
+      {
+        title: "瀹氬埗鍗曞彿",
+        dataIndex: "customCode",
+      },
+      {
+        title: "鐗堟湰鏃堕棿",
+        dataIndex: "versionTime",
+      },
+      {
+        title: "鎿嶄綔绫诲瀷",
+        dataIndex: "lockType",
+      },
+      {
+        title: "鎿嶄綔鍘熷洜",
+        dataIndex: "reason",
+      },
+    ];
+    const dateFormat='YYYY-MM-DD';
+    return {
+      dateFormat,
+      startDate: moment().subtract(30, 'days').format(dateFormat),
+      endDate: moment().format(dateFormat),
+      update: -1,
+      pageCurr: 1,
+      pageSize: 10,
+      total: 0,
+      y: 400,
+      dataSource: [],
+      columns,
+    };
+  },
+  components: {},
+  watch: {
+    update(n) {
+      if (-1 != n && !this._inactive) {
+        this.$nextTick(() => {
+          const header = document.querySelectorAll(
+            ".doc-center-table .ant-table-header"
+          )[0].clientHeight;
+          const wraper = this.$refs.wraper.clientHeight;
+          const h = wraper - header - 64;
+          console.log(h, "h",wraper, header );
+          this.y = h;
+        });
+      }
+    },
+    affixed() {
+      setTimeout(() => {
+        this.update = Math.random();
+      }, 200);
+    },
+  },
+  methods: {
+    moment,
+    getList() {
+      getUnlockByOwner(this.startDate + " 00:00:00", this.endDate + " 00:00:00", this.pageCurr, this.pageSize)
+        .then((res) => {
+          let { code, data, data2 } = res.data;
+          let list = [];
+          let total = 0;
+          if (code && data) {
+            console.log(data);
+            list = data2.list.map((v) => {
+              v.lockType = v.lockFlag ? "閿佸畾" : "瑙i攣";
+              return v;
+            });
+            total = data2.total;
+          }
+          this.dataSource = list;
+          this.total = total;
+          if (-1 == this.update) {
+            this.update = Math.random();
+          }
+        })
+        .catch((err) => {
+          console.log(err);
+        });
+    },
+    onPageChange(page, pageSize) {
+      this.pageCurr = page;
+      this.pageSize = pageSize;
+      this.getList();
+    },
+    onSizeChange(current, size) {
+      this.pageCurr = 1;
+      this.pageSize = size;
+      this.getList();
+    },
+    resize() {
+      setTimeout(() => {
+        this.update = Math.random();
+      }, 200);
+    },
+  },
+
+  mounted() {
+    this.getList(); 
+    window.addEventListener("resize", this.resize);
+  },
+  destroyed() {
+    window.removeEventListener("resize", this.resize);
+  },
+};
+</script>
+
+<style scoped>
+.flex {
+  display: flex;
+}
+.form {
+  flex: 1;
+}
+.card {
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+}
+.card /deep/ .ant-card-body {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+}
+.p-content {
+  flex: 1;
+  position: relative;
+}
+.p-inner {
+  position: absolute;
+  left: 0;
+  top: 0;
+  right: 0;
+  bottom: 0;
+}
+/deep/ .ant-table-wrapper {
+  height: 100%;
+}
+</style>
\ No newline at end of file
diff --git a/src/pages/resourceManage/materialsCenter/history/history.vue b/src/pages/resourceManage/materialsCenter/history/history.vue
index 753b219..774e017 100644
--- a/src/pages/resourceManage/materialsCenter/history/history.vue
+++ b/src/pages/resourceManage/materialsCenter/history/history.vue
@@ -97,7 +97,7 @@
       :visible="otherDocVisible"
       title="鍏朵粬闄勪欢"
       :destroyOnClose="true"
-      :width="600"
+      :width="850"
       :footer="null"
       @cancel="otherDocCancel"
     >
@@ -149,7 +149,7 @@
 
   data() {
     return {
-      oprateInfo: '',
+      oprateInfo: "",
       downloadlogVisible: false,
       fullScreen: false,
       diffVisible: false,
@@ -268,7 +268,15 @@
           list = data2;
           prods = data2.products;
           attachLocks = data2.attachLocks || [];
-          otherDoc = data3;
+          let subModel = data2.subModel;
+          let reg = new RegExp("^" + subModel, "i");
+          let reg2 = /(.*\\+)*(.*)$/;
+          otherDoc = data3.filter((v) => {
+            let fileName = v.match(reg2)[2];
+            let arr = fileName.split(".");
+            let fileType = arr.length ? arr[arr.length - 1].toLowerCase() : "";
+            return !(reg.test(fileName) && fileType == "dwg");
+          });
         }
         this.dataSource = prods;
         this.record = list;
@@ -354,9 +362,7 @@
     },
     downloadLogs() {
       // console.log(this.record);
-      let {
-        id,
-      } = this.record;
+      let { id } = this.record;
       this.oprateInfo = id;
       this.downloadlogVisible = true;
     },
diff --git a/src/pages/resourceManage/materialsCenter/list.vue b/src/pages/resourceManage/materialsCenter/list.vue
index 054c7d2..b5fde13 100644
--- a/src/pages/resourceManage/materialsCenter/list.vue
+++ b/src/pages/resourceManage/materialsCenter/list.vue
@@ -138,7 +138,12 @@
       :footer="null"
       @cancel="fileListCancel"
     >
-      <files-table :list="fileList" :info="info" :type="13"></files-table>
+      <files-table
+        :list="fileList"
+        :info="info"
+        :sub-model="currentObj.subModel"
+        :type="13"
+      ></files-table>
       <div class="footer">
         <a-space>
           <a-button @click="fileListCancel">鍏抽棴</a-button>
@@ -233,7 +238,7 @@
   mixins: [WSMixin],
   data() {
     return {
-      oprateInfo: '',
+      oprateInfo: "",
       downloadlogVisible: false,
       errorVisible: false,
       errorTbl2: {
@@ -257,7 +262,7 @@
             title: "闂鎻忚堪",
             dataIndex: "irregularDesc",
             align: "center",
-          }
+          },
         ],
         dataSource: [],
       },
@@ -269,7 +274,7 @@
       fileList: [],
       resShow: false,
       submitShow: false,
-      currentObj: null,
+      currentObj: {},
       title: "",
       resList: [],
       // 鏄惁涓烘柊澧炲叧鑱� false琛ㄧず涓哄垹闄ゅ叧鑱�
@@ -451,9 +456,7 @@
   methods: {
     downloadLogs(record) {
       // console.log(record);
-      let {
-        id,
-      } = record;
+      let { id } = record;
       this.oprateInfo = id;
       this.downloadlogVisible = true;
     },
@@ -622,11 +625,27 @@
         subCode,
         subModel,
       };
-
+      let dwgFileName = subModel.toLowerCase() + ".dwg";
       formData.append("materialStr", JSON.stringify(obj));
       this.uploadFileList.forEach((v, i) => {
         formData.append("file", v.originFileObj);
       });
+      if (
+        this.uploadType == "normal" &&
+        this.uploadFileList.some((v) => v.name.toLowerCase() == dwgFileName)
+      ) {
+        this.$message.error("鎵�閫夐檮浠剁被鍨嬩笉鍖归厤");
+        this.$layer.close(loading);
+        return false;
+      }
+      if (
+        this.uploadType == "dwg" &&
+        this.uploadFileList.some((v) => v.name.toLowerCase() != dwgFileName)
+      ) {
+        this.$message.error("鎵�閫夐檮浠剁被鍨嬩笉鍖归厤");
+        this.$layer.close(loading);
+        return false;
+      }
       let upload = this.uploadType != "normal" ? picOrDwg : uploadOthers;
       upload(formData)
         .then((res) => {
@@ -691,13 +710,20 @@
       this.resize();
     },
     panelShow(obj) {
-      const { id, dwgUrl, attachLocks } = obj;
+      const { id, dwgUrl, attachLocks, subModel } = obj;
       this.currentObj = obj;
+      let reg = new RegExp("^" + subModel, "i");
+      let reg2 = /(.*\\+)*(.*)$/;
       getFileList(id).then((res) => {
         const { code, data, data2 } = res.data;
         let list = [];
         if (code && data) {
-          list = data2;
+          list = data2.filter((v) => {
+            let fileName = v.match(reg2)[2];
+            let arr = fileName.split(".");
+            let fileType = arr.length ? arr[arr.length - 1].toLowerCase() : "";
+            return !(reg.test(fileName) && fileType == "dwg");
+          });
         }
         if (dwgUrl) {
           list.unshift(dwgUrl);
diff --git a/src/pages/resourceManage/product/apis.js b/src/pages/resourceManage/product/apis.js
index 4b82249..0796c64 100644
--- a/src/pages/resourceManage/product/apis.js
+++ b/src/pages/resourceManage/product/apis.js
@@ -2,124 +2,145 @@
 
 /**
  * 浜у搧鍒楄〃
- * @returns 
+ * @returns
  */
 export const getList = (pageCurr, pageSize, data) => {
   return axios({
     method: "GET",
     url: "product/getAllProduct",
-    params: { pageCurr, pageSize, ...data }
-  })
-}
+    params: { pageCurr, pageSize, ...data },
+  });
+};
 /**
  * 浜у搧鍒楄〃 涓嶅垎椤�
- * @returns 
+ * @returns
  */
 export const getAllProducts = () => {
   return axios({
     method: "GET",
-    url: "product/getUpBomUseProduct"
-  })
-}
+    url: "product/getUpBomUseProduct",
+  });
+};
 /**
  * 浜у搧涓嬭浇(浜у搧id鍜岀増鏈�<褰撳墠鏈�鏂扮増鏈�>)
- * @returns 
+ * @returns
  */
 export const downloadBom = (productId, version, oprateReason, oprateInfo) => {
   return axios({
     method: "GET",
     url: "product/downloadProduct",
     params: { productId, version, oprateReason, oprateInfo },
-    responseType: "blob"
-  })
-}
+    responseType: "blob",
+  });
+};
 
 /**
  * 鏍规嵁姣嶆枡鍨嬪彿鏌ヨ瀛愪欢淇℃伅鍙婃湁鍏宠仈鐨勬暎瑁呬欢淇℃伅
- * @returns 
+ * @returns
  */
 export const getBomAndMaterial = (productId, version) => {
   return axios({
     method: "GET",
     url: "product/getBomAndMaterial",
-    params: { productId, version }
-  })
-}
+    params: { productId, version },
+  });
+};
 
 /**
  * 鎵归噺淇敼鍏宠仈鍏崇郴
- * @returns 
+ * @returns
  */
 export const materialRelatedSubmit = (data) => {
   return axios({
     method: "POST",
     url: "worksheetMain/materialRelatedSubmit",
-    data
-  })
-}
+    data,
+  });
+};
 /**
  * 涓婁紶浜у搧
- * @returns 
+ * @returns
  */
 export const addProduct = (data) => {
   return axios({
     method: "POST",
     url: "product",
-    data
-  })
-}
+    data,
+  });
+};
 /**
  * 浜у搧鎸囧畾鐗堟湰鐨勬縺娲� 閿佸畾
  * customCode=1&enabled=1&parentCode=1&version=1
- * @returns 
+ * @returns
  */
 export const setpHistoryEnable = (params) => {
   return axios({
     method: "GET",
     url: "product/setpHistoryEnable",
-    params
-  })
-}
+    params,
+  });
+};
 /**
  * 浜у搧鎿嶄綔鏃ュ織鏌ヨ
  * customCode=1&parentCode=1
- * @returns 
+ * @returns
  */
 export const getLogList = (params) => {
   return axios({
     method: "GET",
     url: "productLockLog/listByParentCodeAndCustomCode",
-    params
-  })
-}
+    params,
+  });
+};
 /**
  * 鏍规嵁浜у搧id鏌ヨ琚攣瀹氱殑鐗╂枡dwg鍜屼骇鍝佷笣鍗�
- * @returns 
+ * @returns
  */
 export const getLockedList = (productId) => {
   return axios({
     method: "GET",
     url: "product/getLockedByProductId",
-    params: { productId }
-  })
-}
+    params: { productId },
+  });
+};
 /**
  * 鏌ヨ褰撳墠浣跨敤鐨勬墍鏈夌殑浜у搧 涓嶅垎椤�
- * @returns 
+ * @returns
  */
 export const getCompareProduct = () => {
   return axios({
     method: "GET",
     url: "product/getCompareProduct",
-  })
-}
+  });
+};
 /**
  * 鏌ヨ褰撳墠浣跨敤鐨勬墍鏈夌殑浜у搧 涓嶅垎椤� (杩囨护鎺夐攣瀹氱殑)
- * @returns 
+ * @returns
  */
 export const getFkProduct = () => {
   return axios({
     method: "GET",
     url: "product/getFkProduct",
-  })
-}
\ No newline at end of file
+  });
+};
+/**
+ * 鏌ヨ鐢ㄦ埛鐨勮В閿佹搷浣�
+ * @returns
+ */
+export const getUnlockByOwner = (
+  createTime,
+  createTime1,
+  pageCurr,
+  pageSize
+) => {
+  return axios({
+    method: "GET",
+    url: "productLockLog/getUnlockByOwner",
+    params: {
+      createTime,
+      createTime1,
+      pageCurr,
+      pageSize,
+    },
+  });
+};
\ No newline at end of file
diff --git a/src/pages/resourceManage/product/details/apis.js b/src/pages/resourceManage/product/details/apis.js
index e58ac95..c5f1e7b 100644
--- a/src/pages/resourceManage/product/details/apis.js
+++ b/src/pages/resourceManage/product/details/apis.js
@@ -81,3 +81,25 @@
     data,
   });
 };
+/**
+ * //楠岃瘉姣嶆枡缂栫爜鏄惁瀛樺湪浜у搧涓�
+ * @returns
+ */
+export const checkExist = (parentCode, customCode) => {
+  return axios({
+    method: "GET",
+    url: "product/judgeParentCode",
+    params: { parentCode, customCode },
+  });
+};
+/**
+ * 浜у搧鏌ョ湅鍘熸潵鍘嬬缉鍖呬腑鏂囦欢淇℃伅锛堟枃浠剁洰褰曞拰鏃堕棿锛�
+ * @returns
+ */
+export const getzipAndRarInfo = (fileUrl) => {
+  return axios({
+    method: "GET",
+    url: "zipAndRar/getzipAndRarInfo",
+    params: { fileUrl },
+  });
+};
\ No newline at end of file
diff --git a/src/pages/resourceManage/product/details/details.vue b/src/pages/resourceManage/product/details/details.vue
index 54aaaaf..e15184f 100644
--- a/src/pages/resourceManage/product/details/details.vue
+++ b/src/pages/resourceManage/product/details/details.vue
@@ -129,6 +129,19 @@
                         >璇︽儏</a
                       >
                     </template>
+                    <template v-if="/^08|^09/.test(record.subCode)">
+                      <a-divider
+                        v-if="
+                          record.softwares &&
+                          record.softwares.length &&
+                          canDownloadSoftware
+                        "
+                        type="vertical"
+                      ></a-divider>
+                      <a href="javascript:;" @click="toDetails08_09(record)"
+                        >璇︽儏</a
+                      >
+                    </template>
                   </template>
                 </a-table>
               </a-spin>
@@ -175,6 +188,12 @@
               type="primary"
               @click="checkLock('OriginalZipDownload')"
               >涓嬭浇鍘熷鍖�</a-button
+            >
+            <a-button
+              v-if="isTester && originalZipUrl"
+              type="primary"
+              @click="viewRar"
+              >鏌ョ湅鍘熷鍖�</a-button
             >
             <a-button
               type="primary"
@@ -348,7 +367,9 @@
             <div>
               <span class="user">{{ item.owner }}</span> 鍦�
               <span class="time">{{ item.createTime }}</span>
-              {{ {"-1": "涓婁紶", "0": "婵�娲�", "1": "閿佸畾"}[item.lockFlag] }}浜嗙増鏈�
+              {{
+                { "-1": "涓婁紶", "0": "婵�娲�", "1": "閿佸畾" }[item.lockFlag]
+              }}浜嗙増鏈�
               <span class="version">{{ item.versionTime }}</span>
             </div>
             <div>鎿嶄綔鍘熷洜: {{ item.reason ? item.reason : "鏃�" }}</div>
@@ -368,6 +389,24 @@
       :type="12"
       :oprate-info="oprateInfo"
     ></download-logs>
+    <a-modal
+      :visible="fileTreeVisible"
+      :footer="null"
+      :width="860"
+      title="鏂囦欢鍒楄〃"
+      :destroyOnClose="true"
+      @cancel="fileTreeVisible = false"
+      >
+      <div class="log-content">
+        <a-tree
+          v-if="fileTree.length"
+          :show-line="true"
+          defaultExpandAll
+          :tree-data="fileTree"
+        />
+        <a-empty v-else />
+      </div>
+    </a-modal>
   </div>
 </template>
 
@@ -391,6 +430,8 @@
   getBomHistoryAndMaterial,
   compare,
   getOriginalZip,
+  checkExist,
+  getzipAndRarInfo,
 } from "./apis";
 import {
   searchDefaultMailUser,
@@ -410,6 +451,8 @@
   mixins: [WSMixin],
   data() {
     return {
+      fileTreeVisible: false,
+      fileTree: [],
       userListAll: [],
       mailList: [],
       tester: [],
@@ -1215,6 +1258,10 @@
       if (/^0120/.test(record.subCode)) {
         classList.push("is-0120");
       }
+      // 08 09 寮�澶寸殑鍗婃垚鍝�
+      if (/^08|^09/.test(record.subCode)) {
+        classList.push("is-08_09");
+      }
       return classList;
     },
     toDetails0120(record) {
@@ -1227,6 +1274,137 @@
         path: "/resource/product-details-0120",
         query: { parentCode, customCode: "", parentModel, parentName },
       });
+    },
+    toDetails08_09(record) {
+      const {
+        subCode: parentCode,
+        subModel: parentModel,
+        subName: parentName,
+      } = record;
+      checkExist(parentCode, "")
+        .then((res) => {
+          let { code, data } = res.data;
+          if (code && data) {
+            this.$router.push({
+              path: "/resource/product-details-0809",
+              query: { parentCode, customCode: "", parentModel, parentName },
+            });
+            // console.log(data);
+          } else {
+            this.$message.error("浜у搧鏈笂浼�");
+          }
+        })
+        .catch((err) => {
+          console.log(err);
+        });
+    },
+    getParent(obj, arr, i) {
+      let len = arr.length - 1;
+      if (i > len) {
+        return false;
+      }
+      // if (i == 0) {
+      //   return obj;
+      // }
+      // if (i == 1) {
+      //   return obj[arr[0]];
+      // }
+      let res = obj;
+      let tmp = {};
+      for (let m = 1; m <= i; m++) {
+        // tmp[arr[m]] = {};
+        // tmp = tmp[arr[m]];
+        tmp = arr[m - 1];
+        res = res[tmp];
+      }
+
+      return res;
+    },
+    format(list) {
+      let counter = this.counter();
+      let obj = {
+        counter,
+        key: "root",
+        children: [],
+      };
+      // let root = {
+      //   counter,
+      //   key: "root",
+      //   children: [],
+      // };
+      list.forEach((v) => {
+        let url = v.fileName;
+        let fileTime = v.fileTime;
+        let arr = url.split("/");
+        let fileName = arr.pop();
+        let tmp = obj;
+
+        for (let i = 0, len = arr.length; i < len; i++) {
+          let parent = this.getParent(obj, arr, i);
+          if (!tmp[arr[i]]) {
+            tmp[arr[i]] = {
+              parent,
+              title: arr[i],
+              key: parent.key + "-" + parent.counter(),
+              children: [],
+              counter: this.counter(),
+            };
+            // tmp[arr[i]].parent.children.push(tmp[arr[i]]);
+            parent.children.push(tmp[arr[i]]);
+          }
+          tmp = tmp[arr[i]];
+        }
+        // console.log(tmp.children, 'children')
+        tmp.children.push({
+          fileName,
+          fileTime,
+          key: tmp.key + "-" + tmp.counter(),
+          title: fileName + "  " + fileTime,
+          isLeaf: true,
+        });
+        // console.log(obj, '......')
+        // for (let i = 0, len = arr.length; i < len; i++) {
+        //   // 鍒ゆ柇鏈夋病鏈夌埗绾� i涓�0娌℃湁 i涓哄ぇ浜�1灏辨湁
+        //   let parent = i > 0 ? tmp[arr[i - 1]] : root;
+        //   if (!obj[item]) {
+        //     obj[item] = {
+        //       title: item,
+        //       key: parent.key + "-" + parent.counter(),
+        //       children: [],
+        //       counter: this.counter(),
+        //     };
+        //   }
+        // }
+      });
+      return obj;
+    },
+    counter() {
+      let count = 0;
+      return () => {
+        return count++;
+      };
+    },
+    viewRar() {
+      let loading = this.$layer.loading(); 
+      // console.log(this.originalZipUrl);
+      getzipAndRarInfo(this.originalZipUrl)
+        .then((res) => {
+          let { code, data, data2 } = res.data;
+          let list = [];
+          if (code && data) {
+            console.log(data2);
+            list = this.format(data2);
+          }
+          this.$layer.close(loading);
+          this.fileTree = list.children;
+          this.fileTreeVisible = true;
+          // { title: 'Tree Node', key: '2', isLeaf: true },
+          console.log(list, '===list');
+        })
+        .catch((err) => {
+          this.$layer.close(loading);
+          console.log(err);
+        });
     },
   },
   mounted() {
@@ -1377,9 +1555,12 @@
   /deep/.ant-table-row-level-1.ant-table-row-level-1:hover > td {
     background: #ffbcc9;
   }
+  /deep/.is-08_09 > td,
   /deep/.is-0120 > td {
     background: #ffae00;
   }
+  /deep/.is-08_09.is-08_09.ant-table-row-hover > td,
+  /deep/.is-08_09.is-08_09:hover > td,
   /deep/.is-0120.is-0120.ant-table-row-hover > td,
   /deep/.is-0120.is-0120:hover > td {
     background: #f8c34f;
diff --git a/src/pages/resourceManage/product/list.vue b/src/pages/resourceManage/product/list.vue
index 0e39b12..3d4be88 100644
--- a/src/pages/resourceManage/product/list.vue
+++ b/src/pages/resourceManage/product/list.vue
@@ -41,6 +41,9 @@
                   >鏂板</a-button
                 >
                 <a-button type="primary" @click="prodDiff">浜у搧姣旇緝</a-button>
+                <a-button type="primary" @click="ownerDownloadLog"
+                  >鎴戠殑閿佸畾璁板綍</a-button
+                >
               </a-space>
             </template>
             <template slot="enabled" slot-scope="{ record }">
@@ -351,7 +354,9 @@
             <div>
               <span class="user">{{ item.owner }}</span> 鍦�
               <span class="time">{{ item.createTime }}</span>
-              {{ {"-1": "涓婁紶", "0": "婵�娲�", "1": "閿佸畾"}[item.lockFlag] }}浜嗙増鏈�
+              {{
+                { "-1": "涓婁紶", "0": "婵�娲�", "1": "閿佸畾" }[item.lockFlag]
+              }}浜嗙増鏈�
               <span class="version">{{ item.versionTime }}</span>
             </div>
             <div>鎿嶄綔鍘熷洜: {{ item.reason ? item.reason : "鏃�" }}</div>
@@ -494,6 +499,19 @@
       :type="12"
       :oprate-info="oprateInfo"
     ></download-logs>
+    <a-modal
+      :visible="ownerLogVisible"
+      title="鎴戠殑涓嬭浇璁板綍"
+      width="100%"
+      :destroyOnClose="true"
+      @cancel="ownerLogClose"
+      wrapClassName="full-modal"
+    >
+      <owner-download></owner-download>
+      <template v-slot:footer>
+        <a-button @click="ownerLogClose">鍏抽棴</a-button>
+      </template>
+    </a-modal>
   </div>
 </template>
 
@@ -532,6 +550,7 @@
 import createWs from "@/assets/js/websocket";
 import DiffList from "@/pages/components/diffList";
 import FeedbackForm from "../components/feedbackForm.vue";
+import OwnerDownload from "../components/ownerDownload";
 const WSMixin = createWs("product");
 
 export default {
@@ -618,6 +637,7 @@
       },
     ];
     return {
+      ownerLogVisible: false,
       reason: "",
       reasonVisible: false,
       oprateInfo: "",
@@ -848,6 +868,7 @@
     FeedbackForm,
     DownloadReason,
     DownloadLogs,
+    OwnerDownload,
   },
   methods: {
     rowClassFn(record) {
@@ -1487,6 +1508,12 @@
       this.oprateInfo = parentCode + "_" + customCode;
       this.downloadlogVisible = true;
     },
+    ownerDownloadLog() {
+      this.ownerLogVisible = true;
+    },
+    ownerLogClose() {
+      this.ownerLogVisible = false;
+    },
   },
   watch: {
     update(n) {
@@ -1727,3 +1754,26 @@
   background: #fcd583;
 }
 </style>
+
+<style lang="less">
+.full-modal {
+  height: 100%;
+  .ant-modal {
+    max-width: 100%;
+    height: 100%;
+    top: 0;
+    padding-bottom: 0;
+    margin: 0;
+  }
+  .ant-modal-content {
+    display: flex;
+    flex-direction: column;
+    height: 100%;
+    overflow: hidden;
+    // height: calc(100vh);
+  }
+  .ant-modal-body {
+    flex: 1;
+  }
+}
+</style>
diff --git a/src/router/config.js b/src/router/config.js
index 12aec75..26e3fb9 100644
--- a/src/router/config.js
+++ b/src/router/config.js
@@ -98,6 +98,16 @@
               },
               component: () => import('@/pages/resourceManage/product/details'),
             },
+            // 08|09浜岀骇浜у搧璇︽儏
+            {
+              path: 'product-details-0809',
+              name: '浜岀骇浜у搧璇︽儏',
+              meta: {
+                invisible: true,
+                highlight: '/resource/product'
+              },
+              component: () => import('@/pages/resourceManage/product/details'),
+            },
             {
               path: 'software',
               name: '杞欢涓績',

--
Gitblit v1.9.1