From b96d0e41cb4d68074fef53ae0ef10ee0c6be1b07 Mon Sep 17 00:00:00 2001 From: zhaowei <zhaowei> Date: 星期五, 28 二月 2025 15:46:20 +0800 Subject: [PATCH] DNC模块: 1、解决点击tabs栏空白处出现空内容组件问题 2、新增树内容搜索时若清空内容后还原为搜索前展开的树节点的功能 产品结构树: 1、工艺和工步层级开放其他文档列表的展示 2、零件层级下新增工艺规程版本层级,并实现工艺规程版本层级的相应功能(增删改) 3、解决因设备结构树数据未加载完成就跳转至产品结构树页面导致接口获取到的前页面方法影响后页面从而出现混乱问题 --- src/views/dnc/base/modules/ProductStructure/Part/PartModal.vue | 4 src/views/dnc/base/modules/ProductStructure/ProductStructureTree.vue | 42 +++- src/views/dnc/base/modules/ProductStructure/ProductStructureTreeContextMenu.vue | 19 + src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainBottom.vue | 41 ++-- src/views/dnc/base/modules/ProductStructure/Process/ProcessModal.vue | 34 +- src/views/dnc/base/modules/ProductStructure/ProcessSpecVersion/ProcessSpecVersionModal.vue | 106 ++++++++++ src/views/dnc/base/modules/ProductStructure/ProductStructureMainTop.vue | 46 +++- src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainTop.vue | 26 +- src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue | 39 ++- src/views/dnc/base/modules/ProductStructure/ProcessSpecVersion/ProcessSpecVersionModalForm.vue | 108 ++++++++++ src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepModalForm.vue | 4 src/views/dnc/base/modules/ProductStructure/ProductStructureMainBottom.vue | 75 +++--- src/views/dnc/base/modules/DeviceStructure/DeviceStructureMain.vue | 3 13 files changed, 411 insertions(+), 136 deletions(-) diff --git a/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMain.vue b/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMain.vue index fe7a04a..69be12a 100644 --- a/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMain.vue +++ b/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMain.vue @@ -37,7 +37,7 @@ DeviceStructureMainBottom }, created() { - this.$bus.$on('sendCurrentTreeNodeInfo', this.receiveCurrentTreeNodeInfo) + this.$bus.$on('sendDeviceTreeNodeInfo', this.receiveCurrentTreeNodeInfo) }, data() { return { @@ -58,7 +58,6 @@ if (this.$refs.mainTopRef) this.$refs.mainTopRef.releaseLoadDocumentListApi() }) } - console.log('currentTreeNodeInfo------------------', this.currentTreeNodeInfo) } } } diff --git a/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainBottom.vue b/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainBottom.vue index 5de5c43..9bfa203 100644 --- a/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainBottom.vue +++ b/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainBottom.vue @@ -1,30 +1,31 @@ <template> - <a-tabs style="height: 100%" v-model="activeTabKey" @change="handleTabChange"> - <a-tab-pane :key="1" tab="璁惧灞炴��" v-if="currentTreeNodeInfo.type===2&&!currentDocumentInfo.docId"> - <DeviceInfo :currentLevelDetails="currentTreeNodeInfo.entity" :size="containerSize"/> - </a-tab-pane> - - <template v-if="currentDocumentInfo.docId"> - <a-tab-pane :key="1" tab="鏂囨。灞炴��"> - <DocumentInfo :currentLevelDetails="currentDocumentInfo" :size="containerSize"/> + <div> + <a-tabs v-model="activeTabKey" @change="handleTabChange"> + <a-tab-pane :key="1" tab="璁惧灞炴��" v-if="currentTreeNodeInfo.type===2&&!currentDocumentInfo.docId"> + <DeviceInfo :currentLevelDetails="currentTreeNodeInfo.entity" :size="containerSize"/> </a-tab-pane> - <a-tab-pane :key="2" tab="棰勮"> - <FilePreview ref="filePreviewRef" :currentDocumentInfo="currentDocumentInfo"/> - </a-tab-pane> + <template v-if="currentDocumentInfo.docId"> + <a-tab-pane :key="1" tab="鏂囨。灞炴��"> + <DocumentInfo :currentLevelDetails="currentDocumentInfo" :size="containerSize"/> + </a-tab-pane> - <a-tab-pane :key="3" tab="鏂囨。鐗堟湰"> - <DocumentVersionTableList ref="documentVersionTableRef" :currentDocumentInfo="currentDocumentInfo" - @handleTableContextMenuOpen="handleTableContextMenuOpen" - @releaseFilePreviewApi="releaseFilePreviewApi" - :size="containerSize"/> - </a-tab-pane> - </template> + <a-tab-pane :key="2" tab="棰勮"> + <FilePreview ref="filePreviewRef" :currentDocumentInfo="currentDocumentInfo"/> + </a-tab-pane> + + <a-tab-pane :key="3" tab="鏂囨。鐗堟湰"> + <DocumentVersionTableList ref="documentVersionTableRef" :currentDocumentInfo="currentDocumentInfo" + @handleTableContextMenuOpen="handleTableContextMenuOpen" + @releaseFilePreviewApi="releaseFilePreviewApi" + :size="containerSize"/> + </a-tab-pane> + </template> + </a-tabs> <TableContextMenu :tableRowInfo="currentRightClickedTableRowInfo" ref="tableContextMenuRef"/> - </a-tabs> + </div> </template> - <script> import DeviceInfo from './Device/DeviceInfo' import DocumentInfo from '../../../common/DocumentInfo' diff --git a/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainTop.vue b/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainTop.vue index debcfd5..cfaa481 100644 --- a/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainTop.vue +++ b/src/views/dnc/base/modules/DeviceStructure/DeviceStructureMainTop.vue @@ -1,22 +1,24 @@ <template> - <a-tabs v-model="activeTabKey" @change="handleTabChange" @contextmenu.native="e=>e.preventDefault()" - v-if="Object.keys(currentTreeNodeInfo).length!==0"> - <a-tab-pane :key="1" tab="鍙戦��"> - <HasSentDocumentTableList ref="hasSentDocumentTableListRef" :currentTreeNodeInfo="currentTreeNodeInfo" - @handleTableContextMenuOpen="handleTableContextMenuOpen" :size="tableContainerSize"/> - </a-tab-pane> + <div> + <a-tabs v-model="activeTabKey" @change="handleTabChange" @contextmenu.native="e=>e.preventDefault()" + v-if="Object.keys(currentTreeNodeInfo).length!==0"> + <a-tab-pane :key="1" tab="鍙戦��"> + <HasSentDocumentTableList ref="hasSentDocumentTableListRef" :currentTreeNodeInfo="currentTreeNodeInfo" + @handleTableContextMenuOpen="handleTableContextMenuOpen" :size="tableContainerSize"/> + </a-tab-pane> - <a-tab-pane :key="2" tab="鎺ユ敹"> - <HasReceivedDocumentTableList ref="hasReceivedDocumentTableListRef" :currentTreeNodeInfo="currentTreeNodeInfo" - @handleTableContextMenuOpen="handleTableContextMenuOpen" - :size="tableContainerSize"/> - </a-tab-pane> + <a-tab-pane :key="2" tab="鎺ユ敹"> + <HasReceivedDocumentTableList ref="hasReceivedDocumentTableListRef" :currentTreeNodeInfo="currentTreeNodeInfo" + @handleTableContextMenuOpen="handleTableContextMenuOpen" + :size="tableContainerSize"/> + </a-tab-pane> + </a-tabs> <TableContextMenu :tableRowInfo="currentRightClickedTableRowInfo" ref="tableContextMenuRef"/> <DocumentBatchDeleteModal :currentDocumentInfo="currentRightClickedTableRowInfo" :size="tableContainerSize" @reloadDocumentListData="reloadDocumentListData" ref="documentBatchDeleteModalRef"/> - </a-tabs> + </div> </template> <script> diff --git a/src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue b/src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue index 1caf639..5e53cf4 100644 --- a/src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue +++ b/src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue @@ -59,6 +59,7 @@ treeDataSource: [], selectedKeys: [], expandedKeys: [], + beforeSearchExpandedKeys: [], searchValue: '', dataList: [], autoExpandParent: true, @@ -88,8 +89,8 @@ this.allTreeKeys = [] this.treeDataSource = res.result this.generateList(this.treeDataSource) - this.expandedKeys = this.allTreeKeys - this.$bus.$emit('sendCurrentTreeNodeInfo', this.treeDataSource[0]) + this.expandedKeys = this.beforeSearchExpandedKeys = this.allTreeKeys + this.$bus.$emit('sendDeviceTreeNodeInfo', this.treeDataSource[0]) } else { this.$message.warn(res.message) } @@ -115,7 +116,7 @@ this.currentSelected = Object.assign({}, record) this.selectedKeys = selectedKeys // 鍚戝彸渚х埗绾х粍浠跺彂閫佸綋鍓嶉�変腑鏍戣妭鐐逛俊鎭� - this.$bus.$emit('sendCurrentTreeNodeInfo', this.currentSelected) + this.$bus.$emit('sendDeviceTreeNodeInfo', this.currentSelected) }, /** @@ -135,27 +136,37 @@ * @param expandedKeys 灞曞紑椤筴ey */ handleTreeExpand(expandedKeys) { - this.expandedKeys = expandedKeys + this.expandedKeys = this.beforeSearchExpandedKeys = expandedKeys + console.log('beforeSearchExpandedKeys', this.beforeSearchExpandedKeys) this.autoExpandParent = false }, /* 杈撳叆鏌ヨ鍐呭鍙樺寲鏃惰Е鍙� */ handleSearchInputChange() { let search = this.searchInput - let expandedKeys = this.dataList - .map(item => { - if (item.title != null) { - if (item.title.indexOf(search) > -1) { - return this.getParentKey(item.key, this.treeDataSource) + let expandedKeys + let autoExpandParent + if (search !== '') { + expandedKeys = this.dataList + .map(item => { + if (item.title != null) { + if (item.title.indexOf(search) > -1) { + return this.getParentKey(item.key, this.treeDataSource) + } + return null } - return null - } - }) - .filter((item, i, self) => item && self.indexOf(item) === i) + }) + .filter((item, i, self) => item && self.indexOf(item) === i) + autoExpandParent = true + } else { + expandedKeys = this.beforeSearchExpandedKeys + autoExpandParent = false + } + Object.assign(this, { expandedKeys, searchValue: search, - autoExpandParent: true + autoExpandParent }) }, diff --git a/src/views/dnc/base/modules/ProductStructure/Part/PartModal.vue b/src/views/dnc/base/modules/ProductStructure/Part/PartModal.vue index 54016ff..f9a1acd 100644 --- a/src/views/dnc/base/modules/ProductStructure/Part/PartModal.vue +++ b/src/views/dnc/base/modules/ProductStructure/Part/PartModal.vue @@ -62,8 +62,8 @@ this.$nextTick(() => { if (this.$refs.realForm) { this.$refs.realForm.add({ - productId: this.currentTreeNodeInfo.productId, - componentId: this.currentTreeNodeInfo.componentId + productId: this.currentTreeNodeInfo.entity.productId, + componentId: this.currentTreeNodeInfo.entity.componentId }) } }) diff --git a/src/views/dnc/base/modules/ProductStructure/Process/ProcessModal.vue b/src/views/dnc/base/modules/ProductStructure/Process/ProcessModal.vue index 3d5c716..e1f60d7 100644 --- a/src/views/dnc/base/modules/ProductStructure/Process/ProcessModal.vue +++ b/src/views/dnc/base/modules/ProductStructure/Process/ProcessModal.vue @@ -69,24 +69,6 @@ }) }, - - /** - * 鐐瑰嚮闆朵欢鍒涘缓闆朵欢涓嬬骇宸ュ簭 - */ - handlePartsAddRelative() { - this.isAddNextLevel = true - this.visible = true - this.$nextTick(() => { - if (this.$refs.realForm) { - this.$refs.realForm.add({ - productId: this.currentTreeNodeInfo.entity.productId, - componentId: this.currentTreeNodeInfo.entity.componentId, - partsId: this.currentTreeNodeInfo.entity.partsId - }) - } - }) - }, - /** * 鐐瑰嚮宸ュ簭娣诲姞鍚岀骇宸ュ簭 */ @@ -104,6 +86,22 @@ }) }, + // 鍒涘缓宸ヨ壓瑙勭▼鐗堟湰涓嬬骇宸ュ簭 + handleVersionAddChild() { + this.isAddNextLevel = true + this.visible = true + this.$nextTick(() => { + if (this.$refs.realForm) { + this.$refs.realForm.add({ + productId: this.currentTreeNodeInfo.entity.productId, + componentId: this.currentTreeNodeInfo.entity.componentId, + partsId: this.currentTreeNodeInfo.entity.partsId, + psvId: this.currentTreeNodeInfo.id + }) + } + }) + }, + /** * 缂栬緫宸ュ簭淇℃伅 */ diff --git a/src/views/dnc/base/modules/ProductStructure/ProcessSpecVersion/ProcessSpecVersionModal.vue b/src/views/dnc/base/modules/ProductStructure/ProcessSpecVersion/ProcessSpecVersionModal.vue new file mode 100644 index 0000000..420927b --- /dev/null +++ b/src/views/dnc/base/modules/ProductStructure/ProcessSpecVersion/ProcessSpecVersionModal.vue @@ -0,0 +1,106 @@ +<template> + <j-modal + :title="title" + :width="width" + :visible="visible" + switchFullscreen + :maskClosable="false" + @ok="handleOk" + @cancel="handleCancel" + cancelText="鍏抽棴"> + <ProcessSpecVersionModalForm ref="realForm" @ok="submitCallback" :allDeviceList="allDeviceList"/> + </j-modal> +</template> + +<script> + import dncApi from '@/api/dnc' + import ProcessSpecVersionModalForm from './ProcessSpecVersionModalForm.vue' + + export default { + name: 'ProcessSpecVersionModal', + components: { + ProcessSpecVersionModalForm + }, + props: { + currentTreeNodeInfo: { + type: Object + } + }, + data() { + return { + title: '', + width: 500, + visible: false, + allDeviceList: [], + isAddNextLevel: false // 鏄惁涓烘坊鍔犱笅绾э紝浣滀负鏍戣妭鐐规槸鍚﹀睍寮�鐨勫垽鏂� + } + }, + created() { + this.$bus.$on('treeMenuItemMethodTrigger', this.triggerCorrespondingMethod) + }, + methods: { + handleOk() { + this.$refs.realForm.submitForm() + }, + + + // 鍒涘缓闆朵欢涓嬬骇宸ヨ壓瑙勭▼鐗堟湰 + handlePartsAddRelative() { + this.isAddNextLevel = true + this.visible = true + this.$nextTick(() => { + if (this.$refs.realForm) { + this.$refs.realForm.add({ + productId: this.currentTreeNodeInfo.entity.productId, + componentId: this.currentTreeNodeInfo.entity.componentId, + partsId: this.currentTreeNodeInfo.entity.partsId + }) + } + }) + }, + + // 鍒涘缓鍚岀骇宸ヨ壓瑙勭▼鐗堟湰 + handleVersionAdd() { + this.isAddNextLevel = false + this.visible = true + this.$nextTick(() => { + if (this.$refs.realForm) { + this.$refs.realForm.add({ + productId: this.currentTreeNodeInfo.entity.productId, + componentId: this.currentTreeNodeInfo.entity.componentId, + partsId: this.currentTreeNodeInfo.entity.partsId + }) + } + }) + }, + + // 缂栬緫宸ヨ壓瑙勭▼鐗堟湰 + handleVersionEdit() { + this.isAddNextLevel = false + this.visible = true + this.$nextTick(() => { + if (this.$refs.realForm) { + this.$refs.realForm.edit({ id: this.currentTreeNodeInfo.id, ...this.currentTreeNodeInfo.entity }) + } + }) + }, + + submitCallback() { + this.$emit('submitSuccess', this.isAddNextLevel) + this.visible = false + }, + + handleCancel() { + this.$emit('close') + this.visible = false + }, + + triggerCorrespondingMethod({ methodName, modalTitle }) { + if (this[methodName]) { + this[methodName]() + this.title = modalTitle + } + } + } + } +</script> diff --git a/src/views/dnc/base/modules/ProductStructure/ProcessSpecVersion/ProcessSpecVersionModalForm.vue b/src/views/dnc/base/modules/ProductStructure/ProcessSpecVersion/ProcessSpecVersionModalForm.vue new file mode 100644 index 0000000..1bbbd0f --- /dev/null +++ b/src/views/dnc/base/modules/ProductStructure/ProcessSpecVersion/ProcessSpecVersionModalForm.vue @@ -0,0 +1,108 @@ +<template> + <a-spin :spinning="confirmLoading"> + <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelColLong" :wrapperCol="wrapperColLong"> + <a-row> + <a-col :span="24"> + <a-form-model-item label="宸ヨ壓瑙勭▼鐗堟湰鍙�"> + <a-input v-model="model.processSpecVersionCode" placeholder="璇疯緭鍏ュ伐鑹鸿绋嬬増鏈彿"/> + </a-form-model-item> + </a-col> + + <a-col :span="24"> + <a-form-model-item label="宸ヨ壓瑙勭▼鍚嶇О"> + <a-input v-model="model.processSpecVersionName" placeholder="璇疯緭鍏ュ伐鑹鸿绋嬪悕绉�"/> + </a-form-model-item> + </a-col> + + <a-col :span="24"> + <a-form-model-item label="鎻忚堪"> + <a-textarea v-model="model.description" placeholder="璇疯緭鍏ユ弿杩�"/> + </a-form-model-item> + </a-col> + </a-row> + </a-form-model> + </a-spin> +</template> + +<script> + import { httpAction, getAction } from '@/api/manage' + + export default { + name: 'ProcessSpecVersionModalForm', + components: {}, + data() { + return { + model: {}, + labelColLong: { + xs: { span: 24 }, + sm: { span: 6 } + }, + wrapperColLong: { + xs: { span: 24 }, + sm: { span: 18 } + }, + confirmLoading: false, + validatorRules: { + processCode: [ + { required: true, message: '璇疯緭鍏ュ伐搴忓彿!' } + ], + processName: [ + { required: true, message: '璇疯緭鍏ュ伐搴忓悕绉�!' } + ] + }, + url: { + add: '/nc/processSpecVersion/add', + edit: '/nc/processSpecVersion/edit' + } + } + }, + created() { + //澶囦唤model鍘熷鍊� + this.modelDefault = JSON.parse(JSON.stringify(this.model)) + }, + methods: { + add(params) { + this.edit({ ...this.modelDefault, ...params }) + }, + edit(record) { + this.model = Object.assign({}, record) + console.log('model', this.model) + }, + submitForm() { + const that = this + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + that.confirmLoading = true + let httpUrl = '' + let method = '' + if (!this.model.id) { + httpUrl += this.url.add + method = 'post' + } else { + httpUrl += this.url.edit + `/${this.model.id}` + method = 'put' + } + httpAction(httpUrl, this.model, method).then((res) => { + if (res.success) { + that.$notification.success({ + message: '娑堟伅', + description: res.message + }) + that.$emit('ok') + } else { + that.$notification.warning({ + message: '娑堟伅', + description: res.message + }) + } + }).finally(() => { + that.confirmLoading = false + }) + } + + }) + } + } + } +</script> \ No newline at end of file diff --git a/src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepModalForm.vue b/src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepModalForm.vue index 8fcebaf..7274b23 100644 --- a/src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepModalForm.vue +++ b/src/views/dnc/base/modules/ProductStructure/ProcessStep/ProcessStepModalForm.vue @@ -4,12 +4,12 @@ <a-row> <a-col :span="12"> <a-form-model-item label="宸ユ鍙�" prop="stepCode"> - <a-input v-model="model.stepCode" placeholder="璇疯緭鍏ュ伐搴忓彿"></a-input> + <a-input v-model="model.stepCode" placeholder="璇疯緭鍏ュ伐姝ュ彿"></a-input> </a-form-model-item> </a-col> <a-col :span="12"> <a-form-model-item label="宸ユ鍚嶇О" prop="stepName"> - <a-input v-model="model.stepName" placeholder="璇疯緭鍏ュ伐搴忓悕绉�"></a-input> + <a-input v-model="model.stepName" placeholder="璇疯緭鍏ュ伐姝ュ悕绉�"></a-input> </a-form-model-item> </a-col> </a-row> diff --git a/src/views/dnc/base/modules/ProductStructure/ProductStructureMainBottom.vue b/src/views/dnc/base/modules/ProductStructure/ProductStructureMainBottom.vue index 661bbb0..5f1a973 100644 --- a/src/views/dnc/base/modules/ProductStructure/ProductStructureMainBottom.vue +++ b/src/views/dnc/base/modules/ProductStructure/ProductStructureMainBottom.vue @@ -1,50 +1,51 @@ <template> - <a-tabs style="height: 100%" 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="1" tab="灞炴�т俊鎭�" v-if="currentLevelInfo.type===2"> - <ComponentInfo :currentLevelDetails="currentLevelInfo.entity" :size="containerSize"/> - </a-tab-pane> - - <a-tab-pane :key="1" tab="闆朵欢灞炴��" v-if="currentLevelInfo.type===3"> - <PartInfo :currentLevelDetails="currentLevelInfo.entity" :size="containerSize"/> - </a-tab-pane> - - <a-tab-pane :key="1" tab="宸ュ簭灞炴��" v-if="currentLevelInfo.type===5"> - <ProcessInfo :currentLevelDetails="currentLevelInfo.entity" :size="containerSize"/> - </a-tab-pane> - - <a-tab-pane :key="1" tab="宸ユ灞炴��" v-if="currentLevelInfo.type===6"> - <ProcessStepInfo :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"/> + <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="棰勮"> - <FilePreview ref="filePreviewRef" :currentDocumentInfo="currentLevelInfo"/> + <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 ref="documentVersionTableRef" :currentDocumentInfo="currentLevelInfo" - @handleTableContextMenuOpen="handleTableContextMenuOpen" - @releaseFilePreviewApi="releaseFilePreviewApi" - :size="containerSize"/> + <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 ref="useDocumentEquipmentTableRef" :currentDocumentInfo="currentLevelInfo" - :size="containerSize"/> + <a-tab-pane :key="1" tab="宸ュ簭灞炴��" v-if="currentLevelInfo.type===5"> + <ProcessInfo :currentLevelDetails="currentLevelInfo.entity" :size="containerSize"/> </a-tab-pane> - </template> + + <a-tab-pane :key="1" tab="宸ユ灞炴��" v-if="currentLevelInfo.type===6"> + <ProcessStepInfo :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"/> - </a-tabs> + </div> </template> <script> diff --git a/src/views/dnc/base/modules/ProductStructure/ProductStructureMainTop.vue b/src/views/dnc/base/modules/ProductStructure/ProductStructureMainTop.vue index 7551d6b..4dcd066 100644 --- a/src/views/dnc/base/modules/ProductStructure/ProductStructureMainTop.vue +++ b/src/views/dnc/base/modules/ProductStructure/ProductStructureMainTop.vue @@ -1,21 +1,23 @@ <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 v-if="currentTreeNodeInfo.type!==4"> + <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"> + <NcDocumentTableList ref="ncDocumentTableListRef" :currentTreeNodeInfo="currentTreeNodeInfo" + @handleTableContextMenuOpen="handleTableContextMenuOpen" :size="tableContainerSize"/> + </a-tab-pane> - <a-tab-pane :key="1" tab="鍏朵粬鏂囨。" v-else> - <OtherDocumentTableList ref="otherDocumentTableListRef" :currentTreeNodeInfo="currentTreeNodeInfo" - @handleTableContextMenuOpen="handleTableContextMenuOpen" :size="tableContainerSize"/> - </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"/> <DocumentBatchDeleteModal :currentDocumentInfo="currentRightClickedTableRowInfo" :size="tableContainerSize" @reloadDocumentListData="reloadDocumentListData" ref="documentBatchDeleteModalRef"/> - </a-tabs> + </div> </template> <script> @@ -30,10 +32,11 @@ components: { DocumentBatchDeleteModal, TableContextMenu, OtherDocumentTableList, NcDocumentTableList }, data() { return { - activeTabKey: 1, + activeTabKey: 2, tableContainerSize: 'small', currentRightClickedTableRowInfo: {}, - currentTreeNodeInfo: {} + currentTreeNodeInfo: {}, + hasLoadedDataTabKeyArray: [] } }, created() { @@ -64,18 +67,35 @@ // 浠庢爲缁勪欢鎺ュ彈鏍戣妭鐐逛俊鎭悗浠庣埗缁勪欢娴佸叆瀛愮粍浠� this.currentTreeNodeInfo = treeNodeInfo // 娓呯┖涓婁竴鑺傜偣宸茬粡鍔犺浇杩囧緱鏂囨。鍒楄〃tabKey + this.hasLoadedDataTabKeyArray = [] if (treeNodeInfo.type === 5 || treeNodeInfo.type === 6) { + this.activeTabKey = 1 this.$nextTick(() => { 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) }, /** + * tab鏍忓垏鎹㈡椂瑙﹀彂 + * @param activeTabKey 鍒囨崲鍚庣殑tabKey + */ + handleTabChange(activeTabKey) { + if (!this.hasLoadedDataTabKeyArray.includes(activeTabKey)) { + this.$nextTick(() => { + if (this.$refs.otherDocumentTableListRef) this.$refs.otherDocumentTableListRef.loadData(1) + }) + // 闃绘鎺ュ彛鍦ㄥ悓涓�鏂囨。涓�娆$偣鍑诲唴澶氭瑙﹀彂 + this.hasLoadedDataTabKeyArray.push(activeTabKey) + } + }, + /** * 鏂囨。浠ュ強NC绋嬪簭瀵煎叆/鍑哄簱/鍏ュ簱鎴愬姛鍚庤Е鍙戦噸鏂板姞杞芥枃妗e垪琛� * @param docClassCode 鏂囨。绫诲埆 * @param attributionId 鑺傜偣Id diff --git a/src/views/dnc/base/modules/ProductStructure/ProductStructureTree.vue b/src/views/dnc/base/modules/ProductStructure/ProductStructureTree.vue index ae81024..1a8ebdf 100644 --- a/src/views/dnc/base/modules/ProductStructure/ProductStructureTree.vue +++ b/src/views/dnc/base/modules/ProductStructure/ProductStructureTree.vue @@ -36,6 +36,7 @@ <a-icon slot="product" type="shopping"/> <a-icon slot="component" type="camera"/> <a-icon slot="part" type="hdd"/> + <a-icon slot="processSpecVersion" type="tag"/> <a-icon slot="process" type="apartment"/> <a-icon slot="processStep" type="tool"/> </a-tree> @@ -50,6 +51,8 @@ <ComponentModal :currentTreeNodeInfo="rightClickSelected" @submitSuccess="modalFormSubmitSuccess"/> <!--闆朵欢寮圭獥--> <PartModal :currentTreeNodeInfo="rightClickSelected" @submitSuccess="modalFormSubmitSuccess"/> + <!--宸ヨ壓瑙勭▼鐗堟湰寮圭獥--> + <ProcessSpecVersionModal :currentTreeNodeInfo="rightClickSelected" @submitSuccess="modalFormSubmitSuccess"/> <!--宸ュ簭寮圭獥--> <ProcessModal :currentTreeNodeInfo="rightClickSelected" @submitSuccess="modalFormSubmitSuccess"/> <!--宸ユ寮圭獥--> @@ -66,6 +69,7 @@ import ProductModal from './Product/ProductModal' import ComponentModal from './Component/ComponentModal' import PartModal from './Part/PartModal' + import ProcessSpecVersionModal from './ProcessSpecVersion/ProcessSpecVersionModal' import ProcessModal from './Process/ProcessModal' import ProcessStepModal from './ProcessStep/ProcessStepModal' import AssignPermissionModal from './Permission/AssignPermissionModal' @@ -76,6 +80,7 @@ AssignPermissionModal, ProcessStepModal, ProcessModal, + ProcessSpecVersionModal, PartModal, ComponentModal, ProductModal, @@ -89,6 +94,7 @@ treeDataSource: [], selectedKeys: [], expandedKeys: [], + beforeSearchExpandedKeys: [], searchValue: '', dataList: [], autoExpandParent: true, @@ -116,7 +122,7 @@ this.treeDataSource = res.list this.generateList(this.treeDataSource) // this.expandedKeys = this.allTreeKeys - if (this.expandedKeys.length === 0) this.expandedKeys = [this.treeDataSource[0].id] + if (this.expandedKeys.length === 0) this.expandedKeys = this.beforeSearchExpandedKeys = [this.treeDataSource[0].id] } else { this.$message.warn(res.message) } @@ -203,27 +209,36 @@ * @param expandedKeys 灞曞紑椤筴ey */ handleTreeExpand(expandedKeys) { - this.expandedKeys = expandedKeys + this.expandedKeys = this.beforeSearchExpandedKeys = expandedKeys this.autoExpandParent = false }, /* 杈撳叆鏌ヨ鍐呭鍙樺寲鏃惰Е鍙� */ handleSearchInputChange() { let search = this.searchInput - let expandedKeys = this.dataList - .map(item => { - if (item.title != null) { - if (item.title.indexOf(search) > -1) { - return this.getParentKey(item.key, this.treeDataSource) + let expandedKeys + let autoExpandParent + if (search !== '') { + expandedKeys = this.dataList + .map(item => { + if (item.title != null) { + if (item.title.indexOf(search) > -1) { + return this.getParentKey(item.key, this.treeDataSource) + } + return null } - return null - } - }) - .filter((item, i, self) => item && self.indexOf(item) === i) + }) + .filter((item, i, self) => item && self.indexOf(item) === i) + autoExpandParent = true + } else { + expandedKeys = this.beforeSearchExpandedKeys + autoExpandParent = false + } + Object.assign(this, { expandedKeys, searchValue: search, - autoExpandParent: true + autoExpandParent }) }, @@ -284,6 +299,9 @@ case 3: treeNode.slots = { icon: 'part' } break + case 4: + treeNode.slots = { icon: 'processSpecVersion' } + break case 5: treeNode.slots = { icon: 'process' } break diff --git a/src/views/dnc/base/modules/ProductStructure/ProductStructureTreeContextMenu.vue b/src/views/dnc/base/modules/ProductStructure/ProductStructureTreeContextMenu.vue index 68fa9e7..fc878a6 100644 --- a/src/views/dnc/base/modules/ProductStructure/ProductStructureTreeContextMenu.vue +++ b/src/views/dnc/base/modules/ProductStructure/ProductStructureTreeContextMenu.vue @@ -51,11 +51,20 @@ //闆朵欢 part: [ { label: '娣诲姞闆朵欢', code: 'parts_add', icon: 'plus', isCommonMethod: false }, - { label: '鍒涘缓宸ュ簭', code: 'parts_add_relative', icon: 'plus', isCommonMethod: false }, + { label: '鍒涘缓宸ヨ壓瑙勭▼鐗堟湰', code: 'parts_add_relative', icon: 'plus', isCommonMethod: false }, + // { label: '鍒涘缓宸ュ簭', code: 'parts_add_relative', icon: 'plus', isCommonMethod: false }, { label: '缂栬緫闆朵欢淇℃伅', code: 'parts_edit', icon: 'edit', isCommonMethod: false }, // { label: '瀵煎嚭鏂囨。', code: 'parts_export', icon: 'export', isCommonMethod: true }, { label: '瀵煎叆鍏朵粬鏂囨。', code: 'parts_import', icon: 'import', isCommonMethod: true }, { label: '鍒犻櫎', code: 'parts_delete', icon: 'delete', isCommonMethod: true }, + { label: '鏉冮檺閰嶇疆', code: 'public_assign_permission', icon: 'idcard', isCommonMethod: true } + ], + //宸ヨ壓瑙勭▼鐗堟湰 + processSpecVersion: [ + { label: '鍒涘缓宸ヨ壓瑙勭▼鐗堟湰', code: 'version_add', icon: 'plus', isCommonMethod: false }, + { label: '鍒涘缓宸ュ簭', code: 'version_add_child', icon: 'plus', isCommonMethod: false }, + { label: '缂栬緫宸ヨ壓瑙勭▼鐗堟湰淇℃伅', code: 'version_edit', icon: 'edit', isCommonMethod: false }, + { label: '鍒犻櫎', code: 'version_delete', icon: 'delete', isCommonMethod: true }, { label: '鏉冮檺閰嶇疆', code: 'public_assign_permission', icon: 'idcard', isCommonMethod: true } ], //宸ュ簭 @@ -64,8 +73,8 @@ { label: '鍒涘缓宸ユ', code: 'process_add_child', icon: 'plus', isCommonMethod: false }, { label: '缂栬緫宸ュ簭淇℃伅', code: 'process_edit', icon: 'edit', isCommonMethod: false }, { label: '鍒犻櫎', code: 'process_delete', icon: 'delete', isCommonMethod: true }, - // { label: '瀵煎嚭NC绋嬪簭', code: 'process_export', icon: 'import', isCommonMethod: true }, - { label: '瀵煎叆NC绋嬪簭', code: 'process_import', icon: 'export', isCommonMethod: true }, + // { label: '瀵煎嚭NC绋嬪簭', code: 'process_export', icon: 'export', isCommonMethod: true }, + { label: '瀵煎叆NC绋嬪簭', code: 'process_import', icon: 'import', isCommonMethod: true }, { label: '鏉冮檺閰嶇疆', code: 'public_assign_permission', icon: 'idcard', isCommonMethod: true } ], //宸ユ @@ -74,7 +83,7 @@ { label: '缂栬緫宸ユ淇℃伅', code: 'processStep_edit', icon: 'edit', isCommonMethod: false }, { label: '鍒犻櫎', code: 'processStep_delete', icon: 'delete', isCommonMethod: true }, // { label: '瀵煎嚭NC绋嬪簭', code: 'processStep_export', icon: 'import', isCommonMethod: true }, - { label: '瀵煎叆NC绋嬪簭', code: 'processStep_import', icon: 'export', isCommonMethod: true }, + { label: '瀵煎叆NC绋嬪簭', code: 'processStep_import', icon: 'import', isCommonMethod: true }, { label: '鏉冮檺閰嶇疆', code: 'public_assign_permission', icon: 'idcard', isCommonMethod: true } ] } @@ -89,6 +98,8 @@ return 'component' case 3: return 'part' + case 4: + return 'processSpecVersion' case 5: return 'process' case 6: -- Gitblit v1.9.3