From bc55e59f49229ffa77d2b32dd9fd0a9b6049b9b8 Mon Sep 17 00:00:00 2001 From: zhaowei <zhaowei> Date: 星期五, 14 三月 2025 09:44:25 +0800 Subject: [PATCH] 1、设备类管理页面完成增删改查功能 2、产品结构树工序及工步层级引入设备类概念由系统参数配置决定是否展示,若设备类存在时则NC文档挂载在设备类下不存在时则按照对应工序或工步层级下 3、产品结构树工序及工步层级的刀具列表实现增删改查功能 4、新增设备类管理页面并完成布局 5、产品结构树接口调整,产品结构树节点实体信息通过点击后调取接口获取 6、产品结构树搜素输入框增加防抖机制,避免每次输入都重新计算消耗性能使页面卡顿 7、新增工序及工步层级的刀具列表并添加系统权限 8、用户管理页面移除新增用户时的密码校验 9、产品结构树各层级属性信息展示由每行3列调整为每行4列 10、产品结构树页面在工序和工步层级实现对设备类的增删改查功能 --- src/views/dnc/base/modules/ProductStructure/ProductStructureMainBottom.vue | 222 ++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 154 insertions(+), 68 deletions(-) diff --git a/src/views/dnc/base/modules/ProductStructure/ProductStructureMainBottom.vue b/src/views/dnc/base/modules/ProductStructure/ProductStructureMainBottom.vue index 8651ed1..c00a390 100644 --- a/src/views/dnc/base/modules/ProductStructure/ProductStructureMainBottom.vue +++ b/src/views/dnc/base/modules/ProductStructure/ProductStructureMainBottom.vue @@ -1,91 +1,177 @@ <template> - <a-tabs style="height: 100%" v-model="activeTabKey" v-if="Object.keys(currentLevelInfo).length>0"> - <a-tab-pane :key="1" tab="浜у搧灞炴��" v-if="currentLevelInfo.type===1"> - <ProductInfo :currentLevelDetails="currentLevelInfo.entity" :size="descriptionsContainerSize"/> - </a-tab-pane> - - <a-tab-pane :key="1" tab="閮ㄤ欢灞炴��" v-if="currentLevelInfo.type===2"> - <ComponentInfo :currentLevelDetails="currentLevelInfo.entity" :size="descriptionsContainerSize"/> - </a-tab-pane> - - <a-tab-pane :key="1" tab="闆朵欢灞炴��" v-if="currentLevelInfo.type===3"> - <PartInfo :currentLevelDetails="currentLevelInfo.entity" :size="descriptionsContainerSize"/> - </a-tab-pane> - - <a-tab-pane :key="1" tab="宸ュ簭灞炴��" v-if="currentLevelInfo.hasOwnProperty('processType')"> - <ProcessInfo :currentLevelDetails="currentLevelInfo" :size="descriptionsContainerSize"/> - </a-tab-pane> - - <template v-if="currentLevelInfo.hasOwnProperty('attributionType')"> - <a-tab-pane :key="1" tab="鏂囨。灞炴��"> - <DocumentInfo :currentLevelDetails="currentLevelInfo" :size="descriptionsContainerSize"/> + <div v-if="currentLevelInfo.type!==4"> + <a-tabs v-model="activeTabKey" v-if="Object.keys(currentLevelInfo).length>0" @change="handleTabChange"> + <a-tab-pane :key="1" tab="灞炴�т俊鎭�" v-if="+currentLevelInfo.type===1"> + <ProductInfo :currentLevelDetails="currentLevelInfo.entity" :size="containerSize"/> </a-tab-pane> - <a-tab-pane :key="2" tab="棰勮"> - + <a-tab-pane :key="1" tab="灞炴�т俊鎭�" v-if="+currentLevelInfo.type===2"> + <ComponentInfo :currentLevelDetails="currentLevelInfo.entity" :size="containerSize"/> </a-tab-pane> - <a-tab-pane :key="3" tab="鏂囨。鐗堟湰"> - <DocumentVersionTableList/> + <a-tab-pane :key="1" tab="闆朵欢灞炴��" v-if="+currentLevelInfo.type===3"> + <PartInfo :currentLevelDetails="currentLevelInfo.entity" :size="containerSize"/> </a-tab-pane> - <a-tab-pane :key="4" tab="浣跨敤璁惧" v-if="currentLevelInfo.attributionType===5"> - <UseDocumentEquipmentTableList/> + <a-tab-pane :key="1" tab="宸ュ簭灞炴��" v-if="+currentLevelInfo.type===5"> + <ProcessInfo :currentLevelDetails="currentLevelInfo.entity" :size="containerSize"/> </a-tab-pane> - </template> - </a-tabs> + + <a-tab-pane :key="1" tab="宸ユ灞炴��" v-if="+currentLevelInfo.type===6"> + <ProcessStepInfo :currentLevelDetails="currentLevelInfo.entity" :size="containerSize"/> + </a-tab-pane> + + <a-tab-pane :key="2" tab="鍒�鍏蜂俊鎭�" v-if="+currentLevelInfo.type===5||+currentLevelInfo.type===6"> + <CutterInfo :currentLevelDetails="currentLevelInfo.entity" :size="containerSize"/> + </a-tab-pane> + + <template v-if="currentLevelInfo.hasOwnProperty('attributionType')"> + <a-tab-pane :key="1" tab="鏂囨。灞炴��"> + <DocumentInfo :currentLevelDetails="currentLevelInfo" :size="containerSize"/> + </a-tab-pane> + + <a-tab-pane :key="2" tab="棰勮"> + <FilePreview ref="filePreviewRef" :currentDocumentInfo="currentLevelInfo"/> + </a-tab-pane> + + <a-tab-pane :key="3" tab="鏂囨。鐗堟湰"> + <DocumentVersionTableList ref="documentVersionTableRef" :currentDocumentInfo="currentLevelInfo" + @handleTableContextMenuOpen="handleTableContextMenuOpen" + @releaseFilePreviewApi="releaseFilePreviewApi" + :size="containerSize"/> + </a-tab-pane> + + <a-tab-pane :key="4" tab="浣跨敤璁惧" v-if="+currentLevelInfo.attributionType===5"> + <UseDocumentEquipmentTableList ref="useDocumentEquipmentTableRef" :currentDocumentInfo="currentLevelInfo" + :size="containerSize"/> + </a-tab-pane> + </template> + </a-tabs> + + <TableContextMenu :tableRowInfo="currentRightClickedTableRowInfo" ref="tableContextMenuRef"/> + </div> </template> <script> - import ProductInfo from './Product/ProductInfo' - import ComponentInfo from './Component/ComponentInfo' - import PartInfo from './Part/PartInfo' - import ProcessInfo from './Process/ProcessInfo' - import DocumentInfo from './Document/DocumentInfo' - import DocumentVersionTableList from './Document/DocumentVersionTableList' - import UseDocumentEquipmentTableList from './Document/UseDocumentEquipmentTableList' +import ProductInfo from './Product/ProductInfo' +import ComponentInfo from './Component/ComponentInfo' +import PartInfo from './Part/PartInfo' +import ProcessInfo from './Process/ProcessInfo' +import DocumentInfo from '../../../common/DocumentInfo' +import DocumentVersionTableList from '../../../common/DocumentVersionTableList' +import UseDocumentEquipmentTableList from './Document/UseNcDocumentEquipmentTableList' +import ProcessStepInfo from './ProcessStep/ProcessStepInfo' +import FilePreview from '../../../common/FilePreview' +import TableContextMenu from '../../../common/TableContextMenu' +import CutterInfo from '@views/dnc/base/modules/ProductStructure/Cutter/CutterInfo.vue' +import dncApi from '@/api/dnc' - export default { - name: 'ProductStructureMainBottom', - components: { - UseDocumentEquipmentTableList, - DocumentVersionTableList, - DocumentInfo, - ProcessInfo, - PartInfo, - ProductInfo, - ComponentInfo +export default { + name: 'ProductStructureMainBottom', + components: { + CutterInfo, + TableContextMenu, + FilePreview, + ProcessStepInfo, + UseDocumentEquipmentTableList, + DocumentVersionTableList, + DocumentInfo, + ProcessInfo, + PartInfo, + ProductInfo, + ComponentInfo + }, + data() { + return { + activeTabKey: 1, + containerSize: 'small', + currentLevelInfo: {}, + currentRightClickedTableRowInfo: {}, + hasLoadedDataTabKeyArray: [] + } + }, + created() { + this.$bus.$on('sendCurrentClickedDocumentInfo', this.receiveCurrentLevelInfo) + this.$bus.$on('sendCurrentTreeNodeInfo', this.receiveCurrentLevelInfo) + this.$bus.$on('reloadMainBottomTableData', this.reloadMainBottomTableData) + }, + methods: { + /** + * 鎺ユ敹鏍戠粍浠朵互鍙婅〃鏍间紶鏉ョ殑褰撳墠閫変腑鎴栫偣鍑荤殑椤逛俊鎭� + * @param levelInfo 褰撳墠灞傜骇淇℃伅 + */ + receiveCurrentLevelInfo(levelInfo) { + const { id, type } = levelInfo + dncApi.getProductStructureTreeNodeEntityApi({ id, type }) + .then(res => { + if (res.success) { + console.log('res-------------', res) + this.currentLevelInfo = Object.assign(levelInfo, { entity: res.result[0] }) + } + }) + this.activeTabKey = 1 + this.hasLoadedDataTabKeyArray = [] }, - data() { - return { - activeTabKey: 1, - descriptionsContainerSize: 'small', - currentLevelInfo: {} + + handleTabChange(activeTabKey) { + if (!this.hasLoadedDataTabKeyArray.includes(activeTabKey)) { + switch (activeTabKey) { + case 2: + this.$nextTick(() => this.$refs.filePreviewRef.getFilePreviewByApi()) + break + case 3: + this.$nextTick(() => this.$refs.documentVersionTableRef.loadData()) + break + case 4: + this.$nextTick(() => this.$refs.useDocumentEquipmentTableRef.loadData()) + break + default: + } + // 闃绘鎺ュ彛鍦ㄥ悓涓�鏂囨。涓�娆$偣鍑诲唴澶氭瑙﹀彂 + this.hasLoadedDataTabKeyArray.push(activeTabKey) } }, - created() { - this.$bus.$on('sendCurrentLevelInfo', this.receiveCurrentLevelInfo) - this.$bus.$on('sendCurrentTreeNodeInfo', this.receiveCurrentLevelInfo) + + // 閲婃斁鏂囦欢棰勮鎺ュ彛 + releaseFilePreviewApi() { + // 濡傛灉宸茬粡棰勮杩囨鏂囨。锛屽彲鍦ㄦ鏂囨。褰撳墠鐗堟湰鍙戠敓鏀瑰彉鍚庡啀娆¢瑙堟柊鐗堟湰鍐呭 + if (this.hasLoadedDataTabKeyArray.includes(2)) this.hasLoadedDataTabKeyArray = this.hasLoadedDataTabKeyArray.filter(item => item !== 2) }, - methods: { - /** - * 鎺ユ敹鏍戠粍浠朵互鍙婅〃鏍间紶鏉ョ殑褰撳墠閫変腑鎴栫偣鍑荤殑椤逛俊鎭� - * @param levelInfo - */ - receiveCurrentLevelInfo(levelInfo) { - this.currentLevelInfo = levelInfo - if (levelInfo.attributionType) this.activeTabKey = 1 - } + + /** + * 鎺у埗鍙抽敭鑿滃崟寮�鍚� + * @param record 褰撳墠琛ㄦ牸琛屼俊鎭� + */ + handleTableContextMenuOpen(record) { + this.currentRightClickedTableRowInfo = Object.assign({}, record) + this.$refs.tableContextMenuRef.currentMenuLevel = record.param + this.$refs.tableContextMenuRef.menuStyle.top = event.clientY + 'px' + this.$refs.tableContextMenuRef.menuStyle.left = event.clientX + 'px' + this.$refs.tableContextMenuRef.menuVisible = true + document.body.addEventListener('click', this.handleMenuClose) + }, + + /** + * 鎺у埗鍙抽敭鑿滃崟鐐瑰嚮鍏抽棴 + */ + handleMenuClose() { + this.$refs.tableContextMenuRef.menuVisible = false + document.body.removeEventListener('click', this.handleMenuClose) + }, + + reloadMainBottomTableData(tableName) { + if (this.$refs[tableName + 'TableRef']) this.$refs[tableName + 'TableRef'].loadData() } } +} </script> <style scoped> - /deep/ .ant-tabs-content { - height: calc(100% - 65px); - } +/deep/ .ant-tabs-content { + height: calc(100% - 65px); +} - /deep/ .ant-tabs-tabpane { - overflow: auto; - } +/deep/ .ant-tabs-tabpane { + overflow: auto; +} </style> \ No newline at end of file -- Gitblit v1.9.3