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