<template>
|
<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"/>
|
|
<NcDocumentTableList ref="ncDocumentTableListRef"
|
:currentNCDocumentAttributionInfo="currentNCDocumentAttributionInfo"
|
@handleTableContextMenuOpen="handleTableContextMenuOpen" :size="tableContainerSize"/>
|
</div>
|
</a-tab-pane>
|
|
<a-tab-pane :key="2" tab="其他文档" v-if="currentTreeNodeInfo.type !==5 && currentTreeNodeInfo.type!==6">
|
<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"/>
|
</div>
|
</template>
|
|
<script>
|
import dncApi from '@/api/dnc'
|
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: {
|
DeviceCustomTypeTableList,
|
DocumentBatchDeleteModal,
|
TableContextMenu,
|
OtherDocumentTableList,
|
NcDocumentTableList
|
},
|
data() {
|
return {
|
activeTabKey: 2,
|
tableContainerSize: 'small',
|
isProcessHasDeviceTypeList: false,
|
isProcessStepHasDeviceTypeList: false,
|
currentRightClickedTableRowInfo: {},
|
currentTreeNodeInfo: {},
|
currentClickedTypeInfo: {},
|
currentNCDocumentAttributionInfo: {},//当前NC文档的所属级即父级的详细信息(引入设备类后NC挂载至设备类下反之则挂载在工序和工步下)
|
hasLoadedDataTabKeyArray: []
|
}
|
},
|
created() {
|
this.$bus.$on('sendCurrentTreeNodeInfo', this.receiveCurrentTreeNodeInfo)
|
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 各层级展示权限key
|
* @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) {
|
console.log('treeNodeInfo', treeNodeInfo)
|
const { id, type } = treeNodeInfo
|
// 从树组件接受树节点信息后从父组件流入子组件并重置数据
|
this.currentClickedTypeInfo = this.currentRightClickedTableRowInfo = {}
|
this.currentTreeNodeInfo = treeNodeInfo
|
this.currentNCDocumentAttributionInfo = Object.assign({}, {
|
attributionId: id,
|
attributionType: type,
|
docClassCode: 'NC'
|
})
|
this.hasLoadedDataTabKeyArray = []
|
|
if (+type === 5 || +type === 6) {
|
this.activeTabKey = 1
|
this.$nextTick(() => {
|
if (this.$refs.deviceCustomTypeTableList) {
|
this.$refs.deviceCustomTypeTableList.setQueryParamAndLoadData()
|
// 切换树之后清空NC程序列表
|
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
|
this.currentClickedTypeInfo = Object.assign({}, record)
|
this.currentNCDocumentAttributionInfo = Object.assign({}, {
|
attributionId: id,
|
attributionType,
|
docClassCode: 'NC'
|
})
|
this.$nextTick(() => {
|
if (this.$refs.ncDocumentTableListRef) this.$refs.ncDocumentTableListRef.loadData(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)
|
},
|
|
/**
|
* 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程序导入/出库/入库/取消出库/发布/归档成功后触发重新加载文档列表
|
* @param docClassCode 文档类别
|
* @param attributionType 文档父级type类型
|
* @param attributionId 文档父级Id
|
*/
|
reloadDocumentListData({ docClassCode, attributionType, attributionId }) {
|
console.log('docClassCode, attributionType, attributionId', docClassCode, attributionType, attributionId)
|
// 在此处设备NC文档父级参数是可此方法是结构树以及设备类两种不同导入方式的共同出口
|
this.currentNCDocumentAttributionInfo = Object.assign({}, { docClassCode, attributionId, attributionType })
|
|
// 判断当前右侧展示的文档的所属是否是当前左键选中树节点或设备类,若不是当前左键选中的则在导入后不刷新右侧的文档列表(避免无效刷新)
|
// 判断是否是在文档列表中进行出库/入库/发布/归档等操作,若是在文档列表中操作则操作成功后直接刷新文档列表
|
if (!this.currentRightClickedTableRowInfo.hasOwnProperty('docId')) {
|
if (this.currentRightClickedTableRowInfo.hasOwnProperty('deviceManagementId')) {
|
// 此种情况是在引入设备类并在设备类列表中进行NC文档导入
|
if (this.currentClickedTypeInfo.id !== attributionId) return
|
} else {
|
// 此种情况是在结构树节点上进行文档导入
|
if (this.currentTreeNodeInfo.id !== attributionId) return
|
}
|
}
|
|
if (docClassCode === 'NC') {
|
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({ docId, docName })
|
.then(res => {
|
if (!res.success) {
|
that.$notification.error({
|
message: '消息',
|
description: res.message
|
})
|
}
|
})
|
.catch(err => {
|
that.$notification.error({
|
message: '消息',
|
description: err.message
|
})
|
})
|
},
|
|
// 删除当前右键选中文档
|
handleDelete() {
|
const { docId, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo
|
const that = this
|
that.$confirm({
|
title: '提示',
|
content: `删除后不可取消,确认删除吗?`,
|
okText: '确认',
|
cancelText: '取消',
|
onOk: () => {
|
dncApi.deleteDocumentApi(docId)
|
.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()
|
}
|
})
|
},
|
|
/**
|
* 点击批量删除后出现弹窗
|
* @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, attributionType } = this.currentRightClickedTableRowInfo
|
that.$confirm({
|
title: '提示',
|
content: `确认${menuLabel}吗?`,
|
okText: '确认',
|
cancelText: '取消',
|
onOk: () => {
|
dncApi.documentOutboundApi({ docId, docName })
|
.then(res => {
|
if (res.success) {
|
that.reloadDocumentListData({ docClassCode: param, attributionId, attributionType })
|
that.$notification.success({
|
message: '消息',
|
description: `${menuLabel}成功`
|
})
|
} else {
|
that.$notification.error({
|
message: '消息',
|
description: res.message
|
})
|
}
|
})
|
.catch(err => {
|
that.$notification.error({
|
message: '消息',
|
description: err.message
|
})
|
})
|
.finally(() => {
|
that.$destroyAll()
|
})
|
},
|
onCancel: () => {
|
that.$destroyAll()
|
}
|
})
|
},
|
|
/**
|
* 取消出库当前右键选中文档
|
* @param menuLabel
|
*/
|
handleCancelPull(menuLabel) {
|
const that = this
|
const { docId, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo
|
that.$confirm({
|
title: '提示',
|
content: `确认${menuLabel}吗?`,
|
okText: '确认',
|
cancelText: '取消',
|
onOk: () => {
|
dncApi.documentCancelOutboundApi(docId)
|
.then(res => {
|
if (res.success) {
|
this.reloadDocumentListData({ docClassCode: param, attributionId, attributionType })
|
that.$notification.success({
|
message: '消息',
|
description: res.message
|
})
|
} else {
|
that.$notification.error({
|
message: '消息',
|
description: res.message
|
})
|
}
|
})
|
.catch(err => {
|
that.$notification.error({
|
message: '消息',
|
description: err.message
|
})
|
})
|
.finally(() => {
|
that.$destroyAll()
|
})
|
},
|
onCancel() {
|
that.$destroyAll()
|
}
|
})
|
},
|
|
/**
|
* 发布当前右键选中文档
|
* @param menuLabel
|
*/
|
handlePublish(menuLabel) {
|
const that = this
|
const { docId, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo
|
that.$confirm({
|
title: '提示',
|
content: `确认${menuLabel}吗?`,
|
okText: '确认',
|
cancelText: '取消',
|
onOk: () => {
|
dncApi.documentPublishApi(docId)
|
.then(res => {
|
if (res.success) {
|
this.reloadDocumentListData({ docClassCode: param, attributionId, attributionType })
|
this.$bus.$emit('reloadMainBottomTableData', 'documentVersion')
|
that.$notification.success({
|
message: '消息',
|
description: res.message
|
})
|
} else {
|
that.$notification.error({
|
message: '消息',
|
description: res.message
|
})
|
}
|
})
|
.catch(err => {
|
that.$notification.error({
|
message: '消息',
|
description: err.message
|
})
|
})
|
.finally(() => {
|
that.$destroyAll()
|
})
|
},
|
onCancel() {
|
that.$destroyAll()
|
}
|
})
|
},
|
|
/**
|
* 重新发布当前右键选中文档并重新发布退回上一文档版本
|
* @param menuLabel
|
*/
|
handleRepublish(menuLabel) {
|
const that = this
|
const { docId, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo
|
that.$confirm({
|
title: '提示',
|
content: `确认${menuLabel}吗?`,
|
okText: '确认',
|
cancelText: '取消',
|
onOk: () => {
|
dncApi.documentRepublishApi(docId)
|
.then(res => {
|
if (res.success) {
|
this.reloadDocumentListData({ docClassCode: param, attributionId, attributionType })
|
that.$notification.success({
|
message: '消息',
|
description: res.message
|
})
|
} else {
|
that.$notification.error({
|
message: '消息',
|
description: res.message
|
})
|
}
|
})
|
.catch(err => {
|
that.$notification.error({
|
message: '消息',
|
description: err.message
|
})
|
})
|
.finally(() => {
|
that.$destroyAll()
|
})
|
},
|
onCancel() {
|
that.$destroyAll()
|
}
|
})
|
},
|
|
/**
|
* 归档当前右键选中文档且后续无法继续发布或归档
|
* @param menuLabel
|
*/
|
handlePigeonhole(menuLabel) {
|
const that = this
|
const { docId, param, attributionId, attributionType } = this.currentRightClickedTableRowInfo
|
that.$confirm({
|
title: '提示',
|
content: `${menuLabel}后不可取消,确认${menuLabel}吗?`,
|
okText: '确认',
|
cancelText: '取消',
|
onOk: () => {
|
dncApi.documentPigeonholeApi(docId)
|
.then(res => {
|
if (res.success) {
|
this.reloadDocumentListData({ docClassCode: param, attributionId, attributionType })
|
that.$notification.success({
|
message: '消息',
|
description: res.message
|
})
|
} else {
|
that.$notification.error({
|
message: '消息',
|
description: res.message
|
})
|
}
|
})
|
.catch(err => {
|
that.$notification.error({
|
message: '消息',
|
description: err.message
|
})
|
})
|
.finally(() => {
|
that.$destroyAll()
|
})
|
},
|
onCancel() {
|
that.$destroyAll()
|
}
|
})
|
},
|
|
// 控制右键菜单关闭
|
handleMenuClose() {
|
this.$refs.tableContextMenuRef.menuVisible = false
|
document.body.removeEventListener('click', this.handleMenuClose)
|
},
|
|
triggerCorrespondingMethod({ methodName, modalTitle }) {
|
if (this[methodName]) this[methodName](modalTitle)
|
}
|
}
|
}
|
</script>
|
|
<style scoped>
|
/deep/ .ant-table-tbody .ant-table-row {
|
cursor: pointer;
|
}
|
</style>
|