From 7bc5e061afaf2a195b67fbc31ff722ba258d20f6 Mon Sep 17 00:00:00 2001 From: yaojn Date: Fri, 15 Dec 2023 18:54:14 +0800 Subject: [PATCH 1/5] =?UTF-8?q?-=20[=E5=8A=9F=E8=83=BD]CMDB-=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E8=AF=A6=E6=83=85=E9=A1=B5=E9=9D=A2=E3=80=81=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E9=A1=B9=E6=9F=A5=E8=AF=A2=E7=9A=84=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=A0=91=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=20=20-=20[=E5=85=B3=E8=81=94]#[1040591163457536]CMDB-?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E8=AF=A6=E6=83=85=E9=A1=B5=E9=9D=A2=E3=80=81?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E9=A1=B9=E6=9F=A5=E8=AF=A2=E7=9A=84=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E9=A1=B5=E9=9D=A2=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=A0=91?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=20http://192.168.0.96:8090/demo/rdm.html#/st?= =?UTF-8?q?ory-detail/939050947543040/939050947543042/1040591163457536?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/resources/api/cmdb/ci/cicatalog.js | 29 +++ src/resources/api/cmdb/index.js | 4 +- src/resources/assets/languages/term/en.json | 8 +- src/resources/assets/languages/term/zh.json | 8 +- src/views/pages/cmdb/ci/ci-detail.vue | 1 + .../pages/cmdb/ci/ci-directory-dialog.vue | 187 ++++++++++++++++++ src/views/pages/cmdb/ci/ci-edit.vue | 16 +- src/views/pages/cmdb/ci/ci-manage.vue | 17 +- .../pages/cmdb/ci/directory-edit-dialog.vue | 108 ++++++++++ .../pages/cmdb/components/ci/ci-type-list.vue | 79 ++++++-- 10 files changed, 426 insertions(+), 31 deletions(-) create mode 100644 src/resources/api/cmdb/ci/cicatalog.js create mode 100644 src/views/pages/cmdb/ci/ci-directory-dialog.vue create mode 100644 src/views/pages/cmdb/ci/directory-edit-dialog.vue diff --git a/src/resources/api/cmdb/ci/cicatalog.js b/src/resources/api/cmdb/ci/cicatalog.js new file mode 100644 index 00000000..0bc17e37 --- /dev/null +++ b/src/resources/api/cmdb/ci/cicatalog.js @@ -0,0 +1,29 @@ +import axios from '@/resources/api/http'; + +const cicatalog = { + //保存模型 + getCiCatalog(params) { + // 获取模型目录 + return axios.post('/api/rest/cmdb/cicatalog/get', params); + }, + getCiCatalogTreeList(params) { + // 获取模型目录树形列表 + return axios.post('/api/rest/cmdb/cicatalog/listtree', params); + }, + saveCiCatalog(params) { + // 保存模型目录 + return axios.post('/api/rest/cmdb/cicatalog/save', params); + }, + deleteCiCatalog(params) { + // 删除模型目录 + return axios.post('/api/rest/cmdb/cicatalog/delete', params); + }, + moveCicatalog(params) { + // 移动模型目录 + return axios.post('/api/rest/cmdb/cicatalog/move', params); + }, + searchCiCatalogTree(params) { + return axios.post('/api/rest/cmdb/cicatalogandci/listtree', params); + } +}; +export default cicatalog; diff --git a/src/resources/api/cmdb/index.js b/src/resources/api/cmdb/index.js index c5c53306..4f5e94a9 100644 --- a/src/resources/api/cmdb/index.js +++ b/src/resources/api/cmdb/index.js @@ -19,6 +19,7 @@ import dataInit from './dataInit/index.js'; // 资源中心/数据初始化 import globalsearch from './globalsearch/globalsearch.js'; import resourceentity from './resource/resourceentity/resourceentity.js'; import graph from './graph/graph.js'; +import cicatalog from './ci/cicatalog.js'; export default { ci, validator, @@ -39,5 +40,6 @@ export default { dataInit, globalsearch, resourceentity, - graph + graph, + cicatalog }; diff --git a/src/resources/assets/languages/term/en.json b/src/resources/assets/languages/term/en.json index 462e530e..6d2a67fc 100644 --- a/src/resources/assets/languages/term/en.json +++ b/src/resources/assets/languages/term/en.json @@ -87,7 +87,6 @@ "uncommittransaction": "Uncommitted transaction", "radius": "Rounded corners", "transaction": "Transaction", - "typesetting": "Type Setting", "importci": "Import model", "exportci": "Export model", "extendto": "Inherited from", @@ -176,7 +175,12 @@ "rerunsteptosynctip": "After the process is rolled back, when it flows back to the current step, resynchronize", "onlyupward": "Just look upstream", "onlydownward": "Just look downstream", - "noextend": "Hide Extend Relationships" + "noextend": "Hide Extend Relationships", + "cilevel": "Model hierarchy", + "cidirectory": "Model Catalog", + "directoryname": "Catalog Name", + "noaddcidirectory": "No model directory added,", + "currentcatalogcitenodeletedescrition": "The current directory node has been referenced. Please remove the reference and delete it" }, "process": { "workordercenter": "Work Center", diff --git a/src/resources/assets/languages/term/zh.json b/src/resources/assets/languages/term/zh.json index eca1e1a0..4e16242d 100644 --- a/src/resources/assets/languages/term/zh.json +++ b/src/resources/assets/languages/term/zh.json @@ -87,7 +87,6 @@ "uncommittransaction": "未提交事务", "radius": "圆角", "transaction": "事务", - "typesetting": "类型设置", "importci": "导入模型", "exportci": "导出模型", "extendto": "继承自", @@ -176,7 +175,12 @@ "rerunsteptosynctip": "流程回退后,再次流转至当前步骤时,重新同步", "onlyupward": "只看上游", "onlydownward": "只看下游", - "noextend": "隐藏继承关系" + "noextend": "隐藏继承关系", + "cilevel": "模型层级", + "cidirectory": "模型目录", + "directoryname": "目录名称", + "noaddcidirectory": "未添加模型目录,", + "currentcatalogcitenodeletedescrition": "当前目录节点已被引用,请解除引用后删除" }, "process": { "workordercenter": "工单中心", diff --git a/src/views/pages/cmdb/ci/ci-detail.vue b/src/views/pages/cmdb/ci/ci-detail.vue index a2ab0785..ff79cef4 100644 --- a/src/views/pages/cmdb/ci/ci-detail.vue +++ b/src/views/pages/cmdb/ci/ci-detail.vue @@ -402,6 +402,7 @@ export default { this.getCiById(); this.getAttrByCiId(); this.getRelByCiId(); + this.$refs['ciTypeList'] && this.$refs['ciTypeList'].searchTreeData(); } }, closeAttrDialog: function(needRefresh) { diff --git a/src/views/pages/cmdb/ci/ci-directory-dialog.vue b/src/views/pages/cmdb/ci/ci-directory-dialog.vue new file mode 100644 index 00000000..4573bfcf --- /dev/null +++ b/src/views/pages/cmdb/ci/ci-directory-dialog.vue @@ -0,0 +1,187 @@ + + + diff --git a/src/views/pages/cmdb/ci/ci-edit.vue b/src/views/pages/cmdb/ci/ci-edit.vue index f7db11c5..0fff08a6 100644 --- a/src/views/pages/cmdb/ci/ci-edit.vue +++ b/src/views/pages/cmdb/ci/ci-edit.vue @@ -133,7 +133,7 @@ export default { { name: 'typeId', type: 'select', - label: this.$t('page.type'), + label: this.$t('term.cmdb.cilevel'), width: '100%', maxlength: 50, transfer: true, @@ -145,6 +145,20 @@ export default { this.$set(_this.ciData, 'typeId', name); } }, + { + name: 'catalogId', + type: 'tree', + label: this.$t('term.cmdb.cidirectory'), + width: '100%', + transfer: true, + url: '/api/rest/cmdb/cicatalog/listtree', + validateList: ['required'], + valueName: 'id', + textName: 'name', + onChange: id => { + this.$set(_this.ciData, 'catalogId', id); + } + }, { name: 'name', type: 'text', diff --git a/src/views/pages/cmdb/ci/ci-manage.vue b/src/views/pages/cmdb/ci/ci-manage.vue index deb36f8f..6eadde1d 100644 --- a/src/views/pages/cmdb/ci/ci-manage.vue +++ b/src/views/pages/cmdb/ci/ci-manage.vue @@ -8,7 +8,8 @@
{{ $t('page.type') }}
{{ $t('term.cmdb.importci') }}
{{ $t('term.cmdb.exportci') }}
-
{{ $t('term.cmdb.typesetting') }}
+
{{ $t('term.cmdb.cilevel') }}
+
{{ $t('term.cmdb.cidirectory') }}
+
+ diff --git a/src/views/pages/cmdb/components/ci/ci-type-list.vue b/src/views/pages/cmdb/components/ci/ci-type-list.vue index 3b4ac94a..e70754c9 100644 --- a/src/views/pages/cmdb/components/ci/ci-type-list.vue +++ b/src/views/pages/cmdb/components/ci/ci-type-list.vue @@ -7,28 +7,48 @@ border="bottom" :search="true" :placeholder="$t('form.placeholder.pleaseinput', { target: $t('page.keyword') })" + @change="searchTreeData" > +
+ + {{ $t('term.cmdb.cidirectory') }} + {{ $t('term.cmdb.cilevel') }} + +
-
-
{{ item.name }}
-
-
    -
  • - {{ ci.label }} - ({{ ci.name }}) -
  • -
+ + +
@@ -36,7 +56,8 @@ export default { name: '', components: { - TsFormInput: resolve => require(['@/resources/plugins/TsForm/TsFormInput'], resolve) + TsFormInput: resolve => require(['@/resources/plugins/TsForm/TsFormInput'], resolve), + TsZtree: resolve => require(['@/resources/plugins/TsZtree/TsZtree.vue'], resolve) }, filters: {}, props: { @@ -52,13 +73,17 @@ export default { data() { return { ciTypeList: [], - keyword: '' + keyword: '', + treeList: [], + ciName: 'ciDirectory', + treeId: '' }; }, beforeCreate() {}, created() {}, beforeMount() {}, async mounted() { + await this.searchTreeData(); if (this.tree.length === 0) { await this.searchCiTypeCi(); } else { @@ -77,6 +102,20 @@ export default { beforeDestroy() {}, destroyed() {}, methods: { + clickTreeNode(tree, node) { + let {type = ''} = node || {}; + if (type == 'ci') { + this.click('', node); + } + }, + searchTreeData() { + return this.$api.cmdb.cicatalog.searchCiCatalogTree({keyword: this.keyword}).then(res => { + if (res.Status == 'OK') { + this.treeList = res.Return || []; + } + }); + }, + restoreHistory(historyData) { if (historyData) { this.keyword = historyData['keyword'] || ''; -- Gitee From f47db67e2494c896bcdf240e112b0a077b92f106 Mon Sep 17 00:00:00 2001 From: yaojn Date: Mon, 18 Dec 2023 10:06:48 +0800 Subject: [PATCH 2/5] =?UTF-8?q?-=20[=E5=8A=9F=E8=83=BD]=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E5=91=BD=E5=90=8D=EF=BC=8C=E5=B0=86directory?= =?UTF-8?q?=E6=94=B9=E6=88=90catalog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...dit-dialog.vue => catalog-edit-dialog.vue} | 14 +++--- ...ctory-dialog.vue => ci-catalog-dialog.vue} | 44 ++++++++----------- src/views/pages/cmdb/ci/ci-manage.vue | 12 ++--- 3 files changed, 31 insertions(+), 39 deletions(-) rename src/views/pages/cmdb/ci/{directory-edit-dialog.vue => catalog-edit-dialog.vue} (77%) rename src/views/pages/cmdb/ci/{ci-directory-dialog.vue => ci-catalog-dialog.vue} (78%) diff --git a/src/views/pages/cmdb/ci/directory-edit-dialog.vue b/src/views/pages/cmdb/ci/catalog-edit-dialog.vue similarity index 77% rename from src/views/pages/cmdb/ci/directory-edit-dialog.vue rename to src/views/pages/cmdb/ci/catalog-edit-dialog.vue index 3fed907c..ae3a666a 100644 --- a/src/views/pages/cmdb/ci/directory-edit-dialog.vue +++ b/src/views/pages/cmdb/ci/catalog-edit-dialog.vue @@ -24,7 +24,7 @@ export default { TsForm: resolve => require(['@/resources/plugins/TsForm/TsForm'], resolve) }, props: { - directoryData: { + catalogData: { type: Object, default: () => { return {}; @@ -34,20 +34,20 @@ export default { data() { return { formValue: { - id: this.directoryData.id, - parentId: this.directoryData.parentId, + id: this.catalogData.id, + parentId: this.catalogData.parentId, name: '' }, dialogSetting: { isShow: true, - title: this.directoryData?.id ? this.$t('dialog.title.edittarget', {'target': this.$t('term.cmdb.directoryname')}) : this.$t('dialog.title.addtarget', {'target': this.$t('term.cmdb.directoryname')}) + title: this.catalogData?.id ? this.$t('dialog.title.edittarget', {'target': this.$t('term.cmdb.directoryname')}) : this.$t('dialog.title.addtarget', {'target': this.$t('term.cmdb.directoryname')}) }, formConfig: { name: { type: 'text', label: this.$t('page.name'), maxlength: 50, - validateList: ['required', {name: 'searchUrl', url: '/api/rest/cmdb/cicatalog/save', key: 'name', params: {id: this.directoryData.id, parentId: this.directoryData.parentId}}] + validateList: ['required', {name: 'searchUrl', url: '/api/rest/cmdb/cicatalog/save', key: 'name', params: {id: this.catalogData.id, parentId: this.catalogData.parentId}}] } } }; @@ -78,11 +78,11 @@ export default { }); }, getCicatalog() { - if (this.$utils.isEmpty(this.directoryData) || (!this.$utils.isEmpty(this.directoryData) && this.$utils.isEmpty(this.directoryData.id))) { + if (this.$utils.isEmpty(this.catalogData) || (!this.$utils.isEmpty(this.catalogData) && this.$utils.isEmpty(this.catalogData.id))) { return false; } let params = { - id: this.directoryData.id + id: this.catalogData.id }; this.$api.cmdb.cicatalog.getCiCatalog(params).then(res => { if (res.Status == 'OK') { diff --git a/src/views/pages/cmdb/ci/ci-directory-dialog.vue b/src/views/pages/cmdb/ci/ci-catalog-dialog.vue similarity index 78% rename from src/views/pages/cmdb/ci/ci-directory-dialog.vue rename to src/views/pages/cmdb/ci/ci-catalog-dialog.vue index 4573bfcf..47cf43f6 100644 --- a/src/views/pages/cmdb/ci/ci-directory-dialog.vue +++ b/src/views/pages/cmdb/ci/ci-catalog-dialog.vue @@ -29,7 +29,7 @@
- +