| | |
| | | :addBtn="false" |
| | | :option="option" |
| | | :table-loading="loading" |
| | | :data="data" |
| | | :data="treeData" |
| | | ref="crud" |
| | | v-model:search="search" |
| | | v-model:page="mypage" |
| | |
| | | @tree-load="treeLoad" |
| | | @row-click="rowClick" |
| | | > |
| | | <template #menu-left> |
| | | <el-button :size="size" type="primary" @click="showAdd()">新增根节点</el-button> |
| | | <template #search> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="6"> |
| | | <el-input v-model="search.name" placeholder="请输入节点名称" clearable/> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-select v-model="search.nodeType" placeholder="请输入节点类型" clearable> |
| | | <el-option v-for="item in nodeTypeList" :key="item.dictValue" :label="item.dictValue" :value="item.dictKey"/> |
| | | </el-select> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-button type="primary" @click="searchTree"><el-icon class="el-icon--right" style="margin-right: 6px;"><Search /></el-icon>搜索</el-button> |
| | | <el-button :icon="Delete" @click="setClearTree"><el-icon class="el-icon--right" style="margin-right: 6px;"><Delete /></el-icon>清空</el-button> |
| | | </el-col> |
| | | </el-row> |
| | | </template> |
| | | <!-- <template #menu-left> |
| | | <el-button :size="size" type="primary" @click="showAdd()">新增根节点</el-button> |
| | | </template> --> |
| | | <template #name="{ row }"> |
| | | <span>{{row.name}}</span> |
| | | <el-button :size="size" text v-if="row.nodeType != 70" icon="el-icon-setting" type="primary" placeholder="修改" @click="showEdit(row)" title="修改"></el-button> |
| | | <el-button :size="size" text icon="el-icon-delete" type="primary" @click="showDel(row)" placeholder="删除" title="删除"></el-button> |
| | | <el-button :size="size" text v-if="row.nodeType < 60" icon="el-icon-document-add" type="primary" @click="showAdd(row)" placeholder="新增子级" title="新增子级"></el-button> |
| | | <el-button :size="size" text v-if="row.nodeType == 60" icon="el-icon-upload" type="primary" @click="showUpload(row)" placeholder="文件上传" title="文件上传"></el-button> |
| | | <el-button :size="size" text v-if="row.nodeType != 10" icon="el-icon-delete" type="primary" @click="showDel(row)" placeholder="删除" title="删除"></el-button> |
| | | <el-button :size="size" text v-if="row.nodeType != 60 && row.nodeType != 70" icon="el-icon-document-add" type="primary" @click="showAdd(row)" placeholder="新增子级" title="新增子级"></el-button> |
| | | <el-button :size="size" text v-if="row.nodeType == 60 || row.nodeType == 50" icon="el-icon-upload" type="primary" @click="showUpload(row)" placeholder="文件上传" title="文件上传"></el-button> |
| | | <!-- 涉密网才有 --> |
| | | <el-button :size="size" text v-if="row.nodeType == 70 && isSM" icon="el-icon-pie-chart" type="primary" @click="upgrade(row)" placeholder="升版" title="升版"></el-button> |
| | | <!-- 工控网才有 --> |
| | |
| | | <avue-form v-if="tabsType == 'tab1'" :option="tabsFormOption" v-model="tabsForm"></avue-form> |
| | | <span v-else-if="tabsType == 'tab2'">版本信息</span> |
| | | <template v-else-if="tabsType == 'tab3'"> |
| | | {{fileContent}} |
| | | <div v-html="convertToHtml(fileContent)"></div> |
| | | </template> |
| | | <el-dialog title="升版" append-to-body v-model="upgradeModal" width="500"> |
| | | <avue-form :option="upgradeModalOption" v-model="upgradeModalForm" @submit="upgradeSubmit" @reset-change="upgradeCancel"></avue-form> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | |
| | | import { ElMessage } from 'element-plus'; |
| | | export default { |
| | | data() { |
| | | return { |
| | | targetRow: {}, |
| | | upgradeModal: false, |
| | | file: null, |
| | | fileContent: "", |
| | |
| | | menuPosition: "right", |
| | | column: [ |
| | | { |
| | | label: '节点类型', |
| | | label: '节点类型1', |
| | | prop: 'nodeType', |
| | | labelWidth: "120", |
| | | type: 'select', |
| | |
| | | id: "", |
| | | parentId:1, |
| | | search: { |
| | | keyword: "", |
| | | machineGroupCode: "" |
| | | name: "", |
| | | nodeType: "" |
| | | }, |
| | | loading: true, |
| | | mypage: { |
| | |
| | | total: 0, |
| | | }, |
| | | option: { |
| | | highlightCurrentRow: true, |
| | | rowKey: "id", |
| | | treeProps: { |
| | | children: "children", |
| | | hasChildren: 'hasChildren', |
| | | }, |
| | | defaultExpandAll: false, |
| | | lazy: true, |
| | | rowKey: 'id', |
| | | addBtn: false, |
| | |
| | | delBtn: false, |
| | | fit: true, |
| | | menu: false, |
| | | searchBtn: false, |
| | | emptyBtn: false, |
| | | column: [ |
| | | { |
| | | label: '目录', |
| | |
| | | label: '设备', |
| | | prop: 'machineCode' |
| | | }, |
| | | /* |
| | | { |
| | | label: '固化状态', |
| | | prop: 'abc' |
| | | }, |
| | | */ |
| | | { |
| | | label: '锁定状态', |
| | | prop: 'abc' |
| | | prop: 'isLocked', |
| | | formatter: (val, value, label) => { |
| | | if(val.nodeType == '60' || val.nodeType == '70'){ |
| | | if(value==1){ |
| | | return '已锁定'; |
| | | }else{ |
| | | return '未锁定'; |
| | | } |
| | | } |
| | | } |
| | | |
| | | }, |
| | | { |
| | | label: '流程状态', |
| | | prop: 'abc' |
| | | prop: 'flowStatus', |
| | | formatter: (val, value, label) => { |
| | | if(val.nodeType != '70'){ |
| | | //非程序节点 |
| | | return ''; |
| | | }else{ |
| | | if(value==0||value==null){ |
| | | return '未启动'; |
| | | }else if(value == 1){ |
| | | return '审批中'; |
| | | }else if(value == 2){ |
| | | return '已通过'; |
| | | }else{ |
| | | return '未定义'; |
| | | } |
| | | } |
| | | }, |
| | | }, |
| | | { |
| | | label: '测试程序', |
| | |
| | | } |
| | | ], |
| | | }, |
| | | data: [], |
| | | treeData: [], |
| | | upData: [] |
| | | }; |
| | | }, |
| | |
| | | } |
| | | }, |
| | | methods: { |
| | | convertToHtml(text) { |
| | | return text.replace(/\r\n/g, '<br>'); |
| | | }, |
| | | removeHasChildren(treeData) { //查询时候使用,删掉hasChildren |
| | | return treeData.map(node => { |
| | | if (node.children && node.children.length > 0) { |
| | | node.children = this.removeHasChildren(node.children); |
| | | } |
| | | // 删除当前节点的 hasChildren 属性 |
| | | const { hasChildren, ...rest } = node; |
| | | return rest; |
| | | }); |
| | | }, |
| | | // 递归查找目标行(name="机床1") |
| | | findTargetRow(data, targetName) { |
| | | for (const item of data) { |
| | | if (item.name === targetName) { |
| | | return item; // 找到目标行 |
| | | } |
| | | if (item.children && item.children.length > 0) { |
| | | const found = this.findTargetRow(item.children, targetName); |
| | | if (found) return found; // 在子节点中找到 |
| | | } |
| | | } |
| | | return null; // 未找到 |
| | | }, |
| | | highlightTargetRow() { // 高亮目标行 |
| | | const targetName = this.search.name; |
| | | this.targetRow = this.findTargetRow(this.treeData, targetName); |
| | | if (this.targetRow && this.$refs.crud) { |
| | | this.$refs.crud.setCurrentRow(this.targetRow); // 高亮目标行 |
| | | } |
| | | }, |
| | | searchTree() { |
| | | axios({ |
| | | url: '/blade-mdm/program/node/search-list', |
| | | method: 'get', |
| | | params: this.search, |
| | | }).then(res => { |
| | | this.option.defaultExpandAll = true; |
| | | this.treeData = this.removeHasChildren(res.data.data); |
| | | this.$nextTick(() => { |
| | | this.highlightTargetRow(); // 设置当前行高亮 |
| | | this.tabsForm = this.targetRow; //tabs节点信息 |
| | | this.nodeTypeList.forEach(item=> { |
| | | if(item.dictKey == this.tabsForm.nodeType) { |
| | | this.tabsForm.nodeTypeName = item.dictValue; |
| | | } |
| | | }) |
| | | }) |
| | | if(this.treeData.length == 0) { |
| | | return; |
| | | } |
| | | }); |
| | | }, |
| | | setClearTree() { |
| | | this.option.defaultExpandAll = false; |
| | | this.treeData = []; |
| | | this.$nextTick(()=> { |
| | | this.onLoad(); |
| | | }) |
| | | }, |
| | | upgradeSubmit(row,done) { //升版 |
| | | axios({ |
| | | url: '/blade-mdm/program/ncfile/upgrade-process-edition', |
| | |
| | | var formData = new FormData(); |
| | | formData.append('file', this.file); |
| | | formData.append('nodeId', this.id); |
| | | if(this.isRepeatUpload) { |
| | | formData.append('cofirm','1'); |
| | | } |
| | | Object.keys(this.uploadmodalForm).forEach(key => { |
| | | formData.append(key, this.uploadmodalForm[key]); |
| | | }); |
| | |
| | | url: '/blade-mdm/program/ncfile/upload', |
| | | method: 'post', |
| | | data: formData, |
| | | }).then( |
| | | res => { |
| | | }).then(res => { |
| | | this.loading = false; |
| | | this.uploadmodalBox = false; |
| | | this.addLocalTreeNode(row.id); //重新加载下一级 |
| | | if(res.data.code == 2) { |
| | | this.$confirm('文件名已存在,确定上传吗?', '提示', { |
| | | distinguishCancelAndClose: true, |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.isRepeatUpload = true; |
| | | this.uploadmodalSubmit(row,done); |
| | | }).catch(action => { |
| | | this.isRepeatUpload = false; |
| | | this.$message({ |
| | | type: 'info', |
| | | message:'取消上传' |
| | | }) |
| | | }); |
| | | }else if(res.data.success) { |
| | | this.isRepeatUpload = false; |
| | | this.uploadmodalBox = false; |
| | | this.$message({type: 'success',message: '操作成功!'}); |
| | | this.addLocalTreeNode(row.id); //重新加载下一级 |
| | | }else { |
| | | this.isRepeatUpload = false; |
| | | alert(1) |
| | | } |
| | | done(); |
| | | } |
| | | ); |
| | |
| | | this.tabsForm.nodeTypeName = item.dictValue; |
| | | } |
| | | }) |
| | | if(this.tabsForm.nodeType < 70) { |
| | | if(this.tabsForm.nodeType != 70) { |
| | | this.tabsOption = this.tabsOption1; |
| | | }else { |
| | | this.tabsOption = this.tabsOption2; |
| | |
| | | showAdd (row) { //新增子节点 |
| | | if(!row) { |
| | | this.modalTitle = "新增根节点"; |
| | | this.modalForm.nodeType = "10"; |
| | | this.modalForm.nodeType = this.nodeTypeList[0].dictKey; |
| | | this.modalForm.parentId = 0; |
| | | }else { |
| | | if(row.nodeType == 60) { |
| | | if(row.nodeType == 60) { //程序包 |
| | | return; |
| | | } |
| | | var defalutNodeType = ""; //下一级节点类型 |
| | | for(var i=0;i<this.nodeTypeList.length;i++) { |
| | | if(row.nodeType == this.nodeTypeList[i].dictKey) { |
| | | defalutNodeType = this.nodeTypeList[i+1].dictKey; |
| | | } |
| | | } |
| | | this.modalTitle = "新增子节点"; |
| | | this.selectedColumn.nodeType = String(Number(row.nodeType) + 10); |
| | | this.selectedColumn.nodeType = defalutNodeType; |
| | | this.selectedColumn.parentId = row.id; |
| | | this.selectedColumn.name = ""; |
| | | this.selectedColumn.id = ""; |
| | |
| | | res => { |
| | | var children = res.data.data || []; |
| | | if(parentId == 0) { |
| | | this.data = [...children]; |
| | | this.treeData = [...children]; |
| | | }else { |
| | | this.$refs.crud.$refs.table.store.states.lazyTreeNodeMap.value[parentId] = [...children]; |
| | | } |
| | |
| | | params: obj, |
| | | }).then( |
| | | res => { |
| | | console.log(res.data,111) |
| | | this.loading = false; |
| | | resolve(res.data.data); |
| | | } |
| | |
| | | }).then( |
| | | res => { |
| | | this.loading = false; |
| | | this.data = res.data.data; |
| | | if(this.data.length == 0) { |
| | | this.treeData = res.data.data; |
| | | if(this.treeData.length == 0) { |
| | | return; |
| | | } |
| | | this.tabsForm = res.data.data[0]; //节点信息 |
| | | this.nodeTypeList.forEach(item=> { |
| | | if(item.dictKey == this.data[0].nodeType) { |
| | | if(item.dictKey == this.treeData[0].nodeType) { |
| | | this.tabsForm.nodeTypeName = item.dictValue; |
| | | } |
| | | }) |
| | |
| | | this.nodeTypeList = res.data.data; |
| | | } |
| | | ); |
| | | //判断版本 0:涉密网,1:工控网;//工控网5个,涉密网4个 |
| | | //判断版本 0:涉密网,1:工控网;//工控网5个,涉密网4个 ,工控网取消 |
| | | // axios({url: '/blade-mdm/system/param/getValue?paramKey=networkType',method: 'get'}).then(res => { |
| | | // if(res.data.data === "0") { |
| | | // this.isSM = true; |
| | |
| | | margin-left: 10px; |
| | | margin-top: 12px; |
| | | } |
| | | .highlight-row { |
| | | background-color: #f0f7ff !important; /* 浅蓝色背景 */ |
| | | font-weight: bold; /* 加粗文字 */ |
| | | } |
| | | |
| | | /* 如果需要悬停效果 */ |
| | | .highlight-row:hover { |
| | | background-color: #e6f0ff !important; |
| | | } |
| | | </style> |
| | | <style> |
| | | .highlight-row { |
| | | background-color: #f0f7ff; |
| | | font-weight: bold; |
| | | } |
| | | </style> |