From 1b8b8bafca4fe4c3556bda5e66e3ff6252bd7acc Mon Sep 17 00:00:00 2001 From: cuilei <ray_tsu1@163.com> Date: 星期一, 16 六月 2025 14:27:32 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/views/dnc/base/modules/ProductStructure/ProductStructureMainTop.vue | 315 +++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 251 insertions(+), 64 deletions(-) diff --git a/src/views/dnc/base/modules/ProductStructure/ProductStructureMainTop.vue b/src/views/dnc/base/modules/ProductStructure/ProductStructureMainTop.vue index 3619a9b..e0d1f7d 100644 --- a/src/views/dnc/base/modules/ProductStructure/ProductStructureMainTop.vue +++ b/src/views/dnc/base/modules/ProductStructure/ProductStructureMainTop.vue @@ -1,18 +1,32 @@ <template> - <a-tabs v-model="activeTabKey" @contextmenu.native="e=>e.preventDefault()" - v-if="Object.keys(currentTreeNodeInfo).length!==0"> - <a-tab-pane :key="1" tab="NC鏂囨。" v-if="currentTreeNodeInfo.type===5||currentTreeNodeInfo.type===6"> - <NcDocumentTableList ref="ncDocumentTableListRef" :currentTreeNodeInfo="currentTreeNodeInfo" - @handleTableContextMenuOpen="handleTableContextMenuOpen" :size="tableContainerSize"/> - </a-tab-pane> + <div> + <a-tabs v-model="activeTabKey" @contextmenu.native="e=>e.preventDefault()" @change="handleTabChange" + v-if="Object.keys(currentTreeNodeInfo).length!==0"> + <a-tab-pane :key="1" tab="NC绠$悊" v-if="+currentTreeNodeInfo.type===5||+currentTreeNodeInfo.type===6"> + <div style="display: flex;"> + <!--绯荤粺鍙傛暟閰嶇疆涓嫢鍙傛暟涓�1鏃舵墠灞曠ず瀵瑰簲灞傜骇鐨勮澶囩被鍒楄〃--> + <DeviceCustomTypeTableList + v-if="+currentTreeNodeInfo.type===5&&isProcessHasDeviceTypeList||+currentTreeNodeInfo.type===6&&isProcessStepHasDeviceTypeList" + ref="deviceCustomTypeTableList" :currentTreeNodeInfo="currentTreeNodeInfo" + @handleTableContextMenuOpen="handleTableContextMenuOpen" :size="tableContainerSize"/> - <a-tab-pane :key="1" tab="鍏朵粬鏂囨。" v-else> - <OtherDocumentTableList ref="otherDocumentTableListRef" :currentTreeNodeInfo="currentTreeNodeInfo" - @handleTableContextMenuOpen="handleTableContextMenuOpen" :size="tableContainerSize"/> - </a-tab-pane> + <NcDocumentTableList ref="ncDocumentTableListRef" + :currentNCDocumentAttributionInfo="currentNCDocumentAttributionInfo" + @handleTableContextMenuOpen="handleTableContextMenuOpen" :size="tableContainerSize"/> + </div> + </a-tab-pane> + + <a-tab-pane :key="2" tab="鍏朵粬鏂囨。"> + <OtherDocumentTableList ref="otherDocumentTableListRef" :currentTreeNodeInfo="currentTreeNodeInfo" + @handleTableContextMenuOpen="handleTableContextMenuOpen" :size="tableContainerSize"/> + </a-tab-pane> + </a-tabs> <TableContextMenu :tableRowInfo="currentRightClickedTableRowInfo" ref="tableContextMenuRef"/> - </a-tabs> + + <DocumentBatchDeleteModal :currentDocumentInfo="currentRightClickedTableRowInfo" :size="tableContainerSize" + @reloadDocumentListData="reloadDocumentListData" ref="documentBatchDeleteModalRef"/> + </div> </template> <script> @@ -20,31 +34,122 @@ import NcDocumentTableList from './Document/NcDocumentTableList' import OtherDocumentTableList from './Document/OtherDocumentTableList' import TableContextMenu from '../../../common/TableContextMenu' + import DocumentBatchDeleteModal from '../../../common/DocumentBatchDeleteModal' + import DeviceCustomTypeTableList + from '@views/dnc/base/modules/ProductStructure/DeviceCustomType/DeviceCustomTypeTableList.vue' + import { getAction } from '@api/manage' export default { name: 'ProductStructureMainTop', - components: { TableContextMenu, OtherDocumentTableList, NcDocumentTableList }, + components: { + DeviceCustomTypeTableList, + DocumentBatchDeleteModal, + TableContextMenu, + OtherDocumentTableList, + NcDocumentTableList + }, data() { return { - activeTabKey: 1, + activeTabKey: 2, tableContainerSize: 'small', + isProcessHasDeviceTypeList: false, + isProcessStepHasDeviceTypeList: false, currentRightClickedTableRowInfo: {}, - currentTreeNodeInfo: {} + currentTreeNodeInfo: {}, + currentClickedTypeInfo: {}, + currentNCDocumentAttributionInfo: {},//褰撳墠NC鏂囨。鐨勬墍灞炵骇鍗崇埗绾х殑璇︾粏淇℃伅锛堝紩鍏ヨ澶囩被鍚嶯C鎸傝浇鑷宠澶囩被涓嬪弽涔嬪垯鎸傝浇鍦ㄥ伐搴忓拰宸ユ涓嬶級 + hasLoadedDataTabKeyArray: [] } }, created() { this.$bus.$on('sendCurrentTreeNodeInfo', this.receiveCurrentTreeNodeInfo) - this.$bus.$on('importFileSuccess', this.reloadDocumentListData) + this.$bus.$on('sendCurrentClickedTypeInfo', this.receiveCurrentClickedTypeInfo) + this.$bus.$on('reloadDocumentListData', this.reloadDocumentListData) this.$bus.$on('tableMenuItemMethodTrigger', this.triggerCorrespondingMethod) + this.getDeviceTypeListDisplayPermission('dnc_device_type_process', 'isProcessHasDeviceTypeList') + this.getDeviceTypeListDisplayPermission('dnc_device_type_step', 'isProcessStepHasDeviceTypeList') + }, + beforeDestroy() { + this.$bus.$off('sendCurrentTreeNodeInfo', this.receiveCurrentTreeNodeInfo) + this.$bus.$off('sendCurrentClickedTypeInfo', this.receiveCurrentClickedTypeInfo) + this.$bus.$off('reloadDocumentListData', this.reloadDocumentListData) + this.$bus.$off('tableMenuItemMethodTrigger', this.triggerCorrespondingMethod) }, methods: { + /** + * 鑾峰彇璁惧绫诲瀷鍒楄〃鍦ㄥ伐搴忓拰宸ユ灞傜骇鐨勫睍绀烘潈闄� + * @param settingKey 鍚勫眰绾у睍绀烘潈闄恔ey + * @param dataProperty 缁勪欢data涓殑灞炴�у�肩敤鏉ユ帶鍒舵槸鍚﹀睍绀� + */ + getDeviceTypeListDisplayPermission(settingKey, dataProperty) { + getAction(`/system/sysParams/query/by/settingKey?settingKey=${settingKey}`).then(res => { + if (res.success) { + this[dataProperty] = res.result.settingValue === '1' + } + }) + }, + + /** + * 鎺ユ敹鏍戠粍浠朵紶鏉ョ殑褰撳墠閫変腑鐨勬爲鑺傜偣淇℃伅 + * @param treeNodeInfo 鏍戣妭鐐逛俊鎭� + */ + receiveCurrentTreeNodeInfo(treeNodeInfo) { + const { id, type, autoClickedLevelInfo } = treeNodeInfo + // 浠庢爲缁勪欢鎺ュ彈鏍戣妭鐐逛俊鎭悗浠庣埗缁勪欢娴佸叆瀛愮粍浠跺苟閲嶇疆鏁版嵁 + this.currentClickedTypeInfo = this.currentRightClickedTableRowInfo = {} + this.currentTreeNodeInfo = treeNodeInfo + this.currentNCDocumentAttributionInfo = Object.assign({}, { + attributionId: id, + attributionType: type, + docClassCode: 'NC', + autoClickedLevelInfo + }) + this.hasLoadedDataTabKeyArray = [] + + if (+type === 5 || +type === 6) { + this.activeTabKey = 1 + this.$nextTick(() => { + if (this.$refs.deviceCustomTypeTableList) { + this.$refs.deviceCustomTypeTableList.setQueryParamAndLoadData() + // 鍒囨崲鏍戜箣鍚庢竻绌篘C绋嬪簭鍒楄〃 + if (this.$refs.ncDocumentTableListRef && this.$refs.ncDocumentTableListRef.dataSource.length > 0) this.$refs.ncDocumentTableListRef.dataSource = [] + } + else if (this.$refs.ncDocumentTableListRef) this.$refs.ncDocumentTableListRef.loadData(1) + }) + } else { + this.activeTabKey = 2 + this.$nextTick(() => { + if (this.$refs.otherDocumentTableListRef) this.$refs.otherDocumentTableListRef.loadData(1) + }) + } + this.hasLoadedDataTabKeyArray.push(this.activeTabKey) + }, + + /** + * 鎺ュ彈褰撳墠鐐瑰嚮鐨勮澶囩被淇℃伅 + * @param record 褰撳墠鐐瑰嚮鐨勮澶囩被琛屼俊鎭� + */ + receiveCurrentClickedTypeInfo(record) { + const { id, attributionType } = record + const { autoClickedLevelInfo } = this.currentTreeNodeInfo + this.currentClickedTypeInfo = Object.assign({}, record) + this.currentNCDocumentAttributionInfo = Object.assign({}, { + attributionId: id, + attributionType, + docClassCode: 'NC', + autoClickedLevelInfo + }) + this.$nextTick(() => { + if (this.$refs.ncDocumentTableListRef) this.$refs.ncDocumentTableListRef.loadData(1) + }) + }, + /** * 鎺у埗鍙抽敭鑿滃崟寮�鍚� * @param record 褰撳墠琛ㄦ牸琛屼俊鎭� */ handleTableContextMenuOpen(record) { this.currentRightClickedTableRowInfo = Object.assign({}, record) - console.log('currentRightClickedTableRowInfo', this.currentRightClickedTableRowInfo) this.$refs.tableContextMenuRef.currentMenuLevel = record.param this.$refs.tableContextMenuRef.menuStyle.top = event.clientY + 'px' this.$refs.tableContextMenuRef.menuStyle.left = event.clientX + 'px' @@ -53,48 +158,58 @@ }, /** - * 鎺ユ敹鏍戠粍浠朵紶鏉ョ殑褰撳墠閫変腑鐨勬爲鑺傜偣淇℃伅 - * @param treeNodeInfo 鏍戣妭鐐逛俊鎭� + * tab鏍忓垏鎹㈡椂瑙﹀彂 + * @param activeTabKey 鍒囨崲鍚庣殑tabKey */ - receiveCurrentTreeNodeInfo(treeNodeInfo) { - // 浠庢爲缁勪欢鎺ュ彈鏍戣妭鐐逛俊鎭悗浠庣埗缁勪欢娴佸叆瀛愮粍浠� - this.currentTreeNodeInfo = treeNodeInfo - // 娓呯┖涓婁竴鑺傜偣宸茬粡鍔犺浇杩囧緱鏂囨。鍒楄〃tabKey - if (treeNodeInfo.type === 5 || treeNodeInfo.type === 6) { - this.$nextTick(() => { - if (this.$refs.ncDocumentTableListRef) this.$refs.ncDocumentTableListRef.loadData(1) - }) - } else { + handleTabChange(activeTabKey) { + if (!this.hasLoadedDataTabKeyArray.includes(activeTabKey)) { this.$nextTick(() => { if (this.$refs.otherDocumentTableListRef) this.$refs.otherDocumentTableListRef.loadData(1) }) + // 闃绘鎺ュ彛鍦ㄥ悓涓�鏂囨。涓�娆$偣鍑诲唴澶氭瑙﹀彂 + this.hasLoadedDataTabKeyArray.push(activeTabKey) } }, /** - * 鏂囨。浠ュ強NC绋嬪簭瀵煎叆/鍑哄簱/鍏ュ簱鎴愬姛鍚庤Е鍙戦噸鏂板姞杞芥枃妗e垪琛� + * 鏂囨。浠ュ強NC绋嬪簭瀵煎叆/鍑哄簱/鍏ュ簱/鍙栨秷鍑哄簱/鍙戝竷/褰掓。鎴愬姛鍚庤Е鍙戦噸鏂板姞杞芥枃妗e垪琛� * @param docClassCode 鏂囨。绫诲埆 - * @param attributionId 鑺傜偣Id + * @param attributionType 鏂囨。鐖剁骇type绫诲瀷 + * @param attributionId 鏂囨。鐖剁骇Id */ - reloadDocumentListData({ docClassCode, attributionId }) { - // 濡傛灉涓婁紶鐨勬枃妗d笉鏄墍灞炰簬褰撳墠鎵�灞曠ず鑺傜偣鐨勬枃妗e垯涓嶉噸鏂拌幏鍙栨枃妗e垪琛� - if (this.currentTreeNodeInfo.id !== attributionId) return + reloadDocumentListData({ docClassCode, attributionType, attributionId }) { + console.log('docClassCode, attributionType, attributionId', docClassCode, attributionType, attributionId) + // 鍦ㄦ澶勮澶嘚C鏂囨。鐖剁骇鍙傛暟鏄彲姝ゆ柟娉曟槸缁撴瀯鏍戜互鍙婅澶囩被涓ょ涓嶅悓瀵煎叆鏂瑰紡鐨勫叡鍚屽嚭鍙� + this.currentNCDocumentAttributionInfo = Object.assign({}, { docClassCode, attributionId, attributionType }) + + // 鍒ゆ柇褰撳墠鍙充晶灞曠ず鐨勬枃妗g殑鎵�灞炴槸鍚︽槸褰撳墠宸﹂敭閫変腑鏍戣妭鐐规垨璁惧绫伙紝鑻ヤ笉鏄綋鍓嶅乏閿�変腑鐨勫垯鍦ㄥ鍏ュ悗涓嶅埛鏂板彸渚х殑鏂囨。鍒楄〃(閬垮厤鏃犳晥鍒锋柊) + // 鍒ゆ柇鏄惁鏄湪鏂囨。鍒楄〃涓繘琛屽嚭搴�/鍏ュ簱/鍙戝竷/褰掓。绛夋搷浣�,鑻ユ槸鍦ㄦ枃妗e垪琛ㄤ腑鎿嶄綔鍒欐搷浣滄垚鍔熷悗鐩存帴鍒锋柊鏂囨。鍒楄〃 + if (!this.currentRightClickedTableRowInfo.hasOwnProperty('docId')) { + if (this.currentRightClickedTableRowInfo.hasOwnProperty('deviceManagementId')) { + // 姝ょ鎯呭喌鏄湪寮曞叆璁惧绫诲苟鍦ㄨ澶囩被鍒楄〃涓繘琛孨C鏂囨。瀵煎叆 + if (this.currentClickedTypeInfo.id !== attributionId) return + } else { + // 姝ょ鎯呭喌鏄湪缁撴瀯鏍戣妭鐐逛笂杩涜鏂囨。瀵煎叆 + if (this.currentTreeNodeInfo.id !== attributionId) return + } + } + if (docClassCode === 'NC') { - if (this.$refs.ncDocumentTableListRef) this.$refs.ncDocumentTableListRef.loadData(1) + this.$nextTick(() => { + if (this.$refs.ncDocumentTableListRef) this.$refs.ncDocumentTableListRef.loadData(1) + }) } else { if (this.$refs.otherDocumentTableListRef) this.$refs.otherDocumentTableListRef.loadData(1) } }, - /** - * 鐐瑰嚮涓嬭浇鏃惰Е鍙戜笅杞藉綋鍓嶆枃妗� - */ + // 涓嬭浇褰撳墠鍙抽敭閫変腑鏂囨。 handleDownload() { const that = this const { docId, docName } = this.currentRightClickedTableRowInfo - dncApi.downloadDocumentApi({ id: docId, docName }) + dncApi.downloadDocumentApi({ docId, docName }) .then(res => { - if (res && !res.success) { + if (!res.success) { that.$notification.error({ message: '娑堟伅', description: res.message @@ -109,24 +224,68 @@ }) }, + // 鍒犻櫎褰撳墠鍙抽敭閫変腑鏂囨。 + handleDelete() { + const { docId, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo + const that = this + that.$confirm({ + title: '鎻愮ず', + content: `鍒犻櫎鍚庝笉鍙彇娑堬紝纭鍒犻櫎鍚楋紵`, + okText: '纭', + cancelText: '鍙栨秷', + onOk: () => { + dncApi.deleteDocumentApi({ docId, attributionType, attributionId }) + .then((res) => { + if (res.success) { + that.$notification.success({ + message: '娑堟伅', + description: res.message + }) + that.reloadDocumentListData({ docClassCode: param, attributionId, attributionType }) + } else { + that.$notification.warning({ + message: '娑堟伅', + description: res.message + }) + } + }) + .finally(() => { + that.$destroyAll() + }) + }, + onCancel: () => { + that.$destroyAll() + } + }) + }, + /** - * 鐐瑰嚮鍑哄簱鏃惰Е鍙戝綋鍓嶆枃妗e嚭搴� + * 鐐瑰嚮鎵归噺鍒犻櫎鍚庡嚭鐜板脊绐� + * @param modalTitle 寮圭獥鏍囬 + */ + handleBatchRemove(modalTitle) { + if (!this.$refs.documentBatchDeleteModalRef) return + this.$refs.documentBatchDeleteModalRef.title = modalTitle + this.$refs.documentBatchDeleteModalRef.visible = true + }, + + /** + * 鍑哄簱褰撳墠鍙抽敭閫変腑鏂囨。 * @param menuLabel */ handlePull(menuLabel) { const that = this - const { docId, docName, param, attributionId } = this.currentRightClickedTableRowInfo - this.$confirm({ + const { docId, docName, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo + that.$confirm({ title: '鎻愮ず', content: `纭${menuLabel}鍚楋紵`, okText: '纭', cancelText: '鍙栨秷', onOk: () => { - dncApi.documentOutboundApi({ id: docId, docName }) + dncApi.documentOutboundApi({ docId, docName }) .then(res => { - console.log('res------------------', res) if (res.success) { - this.reloadDocumentListData({ docClassCode: param, attributionId }) + that.reloadDocumentListData({ docClassCode: param, attributionId, attributionType }) that.$notification.success({ message: '娑堟伅', description: `${menuLabel}鎴愬姛` @@ -144,18 +303,24 @@ description: err.message }) }) + .finally(() => { + that.$destroyAll() + }) + }, + onCancel: () => { + that.$destroyAll() } }) }, /** - * 鐐瑰嚮鍙栨秷鍑哄簱鏃惰Е鍙戝綋鍓嶆枃妗e彇娑堝嚭搴� + * 鍙栨秷鍑哄簱褰撳墠鍙抽敭閫変腑鏂囨。 * @param menuLabel */ handleCancelPull(menuLabel) { const that = this - const { docId, param, attributionId } = this.currentRightClickedTableRowInfo - this.$confirm({ + const { docId, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo + that.$confirm({ title: '鎻愮ず', content: `纭${menuLabel}鍚楋紵`, okText: '纭', @@ -164,7 +329,7 @@ dncApi.documentCancelOutboundApi(docId) .then(res => { if (res.success) { - this.reloadDocumentListData({ docClassCode: param, attributionId }) + this.reloadDocumentListData({ docClassCode: param, attributionId, attributionType }) that.$notification.success({ message: '娑堟伅', description: res.message @@ -182,19 +347,24 @@ description: err.message }) }) + .finally(() => { + that.$destroyAll() + }) + }, + onCancel() { + that.$destroyAll() } }) }, - /** - * 鐐瑰嚮鍙戝竷鏃惰Е鍙戝綋鍓嶆枃妗e彂甯� + * 鍙戝竷褰撳墠鍙抽敭閫変腑鏂囨。 * @param menuLabel */ handlePublish(menuLabel) { const that = this - const { docId, param, attributionId } = this.currentRightClickedTableRowInfo - this.$confirm({ + const { docId, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo + that.$confirm({ title: '鎻愮ず', content: `纭${menuLabel}鍚楋紵`, okText: '纭', @@ -203,7 +373,8 @@ dncApi.documentPublishApi(docId) .then(res => { if (res.success) { - this.reloadDocumentListData({ docClassCode: param, attributionId }) + this.reloadDocumentListData({ docClassCode: param, attributionId, attributionType }) + this.$bus.$emit('reloadMainBottomTableData', 'documentVersion') that.$notification.success({ message: '娑堟伅', description: res.message @@ -221,18 +392,24 @@ description: err.message }) }) + .finally(() => { + that.$destroyAll() + }) + }, + onCancel() { + that.$destroyAll() } }) }, /** - * 鐐瑰嚮閲嶆柊鍙戝竷鏃惰Е鍙戝綋鍓嶆枃妗i噸鏂板彂甯冮��鍥炰笂涓�鐗堟湰 + * 閲嶆柊鍙戝竷褰撳墠鍙抽敭閫変腑鏂囨。骞堕噸鏂板彂甯冮��鍥炰笂涓�鏂囨。鐗堟湰 * @param menuLabel */ handleRepublish(menuLabel) { const that = this - const { docId, param, attributionId } = this.currentRightClickedTableRowInfo - this.$confirm({ + const { docId, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo + that.$confirm({ title: '鎻愮ず', content: `纭${menuLabel}鍚楋紵`, okText: '纭', @@ -241,7 +418,7 @@ dncApi.documentRepublishApi(docId) .then(res => { if (res.success) { - this.reloadDocumentListData({ docClassCode: param, attributionId }) + this.reloadDocumentListData({ docClassCode: param, attributionId, attributionType }) that.$notification.success({ message: '娑堟伅', description: res.message @@ -259,18 +436,24 @@ description: err.message }) }) + .finally(() => { + that.$destroyAll() + }) + }, + onCancel() { + that.$destroyAll() } }) }, /** - * 鐐瑰嚮褰掓。鏃惰Е鍙戝綋鍓嶆枃妗e綊妗d笖鍚庣画鏃犳硶缁х画鍙戝竷鎴栧綊妗� + * 褰掓。褰撳墠鍙抽敭閫変腑鏂囨。涓斿悗缁棤娉曠户缁彂甯冩垨褰掓。 * @param menuLabel */ handlePigeonhole(menuLabel) { const that = this - const { docId, param, attributionId } = this.currentRightClickedTableRowInfo - this.$confirm({ + const { docId, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo + that.$confirm({ title: '鎻愮ず', content: `${menuLabel}鍚庝笉鍙彇娑堬紝纭${menuLabel}鍚楋紵`, okText: '纭', @@ -279,7 +462,7 @@ dncApi.documentPigeonholeApi(docId) .then(res => { if (res.success) { - this.reloadDocumentListData({ docClassCode: param, attributionId }) + this.reloadDocumentListData({ docClassCode: param, attributionId, attributionType }) that.$notification.success({ message: '娑堟伅', description: res.message @@ -297,13 +480,17 @@ description: err.message }) }) + .finally(() => { + that.$destroyAll() + }) + }, + onCancel() { + that.$destroyAll() } }) }, - /** - * 鎺у埗鍙抽敭鑿滃崟鐐瑰嚮鍏抽棴 - */ + // 鎺у埗鍙抽敭鑿滃崟鍏抽棴 handleMenuClose() { this.$refs.tableContextMenuRef.menuVisible = false document.body.removeEventListener('click', this.handleMenuClose) -- Gitblit v1.9.3