From 49cdf259bfdb99b0c6b3b4430df8b7a715989795 Mon Sep 17 00:00:00 2001
From: wangting <wangting@vci-tech.com>
Date: 星期二, 07 一月 2025 10:59:57 +0800
Subject: [PATCH] 业务类型树图标展示,调整功能模块
---
Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/index.vue | 261 +++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 216 insertions(+), 45 deletions(-)
diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/index.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/index.vue
index d6c1297..70e5cd8 100644
--- a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/index.vue
@@ -11,12 +11,12 @@
<el-radio v-model="treeRadio" label="1" @input="TreeRadioChange">閾炬帴绫诲瀷鏍�</el-radio>
</div>
<avue-tree v-loading="treeLoading" :data="treeData" :option="treeOption" @node-click="nodeClick">
- <span slot-scope="{ node, data }" class="el-tree-node__label">
- <span style="font-size: 15px">
- <i class="el-icon-s-promotion"></i>
- {{ (node || {}).label }}
- </span>
- </span>
+ <span slot-scope="{ node, data }" class="el-tree-node__label">
+ <span>
+ <icon-show :name="data.icon"></icon-show>
+ {{ (node || {}).label }}
+ </span>
+ </span>
</avue-tree>
</div>
</div>
@@ -25,6 +25,15 @@
<el-main>
<basic-container>
+ <div v-if="!tableStatus" style="display: flex;justify-content: left;margin-top: 15px">
+ <el-button v-if="permissionList.addBtn" icon="el-icon-plus" plain size="small" type="primary" @click="addClickHandler">澧炲姞</el-button>
+ <el-button v-if="permissionList.delBtn" icon="el-icon-delete" plain size="small" type="danger" @click="deleteClickHandler">鍒犻櫎</el-button>
+ <el-button v-if="permissionList.cloneBtn" icon="el-icon-document-add" plain size="small" type="primary" @click="copyClickHandler">鍏嬮殕
+ </el-button>
+ <el-button v-if="permissionList.importBtn" icon="el-icon-upload2" plain size="small" type="primary" @click="upLoadClickHandler">瀵煎叆</el-button>
+ <el-button v-if="permissionList.exportBtn" icon="el-icon-download" plain size="small" type="primary" @click="exportClickHandler">瀵煎嚭
+ </el-button>
+ </div>
<avue-crud
v-if="!tableStatus"
ref="crud"
@@ -46,37 +55,56 @@
<el-input v-model="topName" placeholder="璇疯緭鍏ュ唴瀹�" size="mini" style="margin-right: 10px;"></el-input>
<el-button plain size="mini" type="success" @click="nameSearchHandler">鏌ヨ</el-button>
</span>
- <span style="display: flex; align-items: center;">
- <p
- style="display: flex; align-items: center; margin: 0 10px 0 0;flex-shrink: 0;font-size: 14px">鍏嬮殕鐩爣锛�</p>
- <el-input v-model="input" placeholder="璇疯緭鍏ュ唴瀹�" size="mini" style="margin-right: 10px;"></el-input>
- <el-button plain size="mini" type="success">鍏嬮殕鐩爣</el-button>
- </span>
</div>
</template>
<template slot="menu" slot-scope="scope">
- <el-button icon="el-icon-edit" size="small" type="text" @click="editBtnClick(scope.row)">缂栬緫
+ <el-button v-if="permissionList.editBtn" icon="el-icon-edit" size="small" type="text" @click="editBtnClick(scope.row)">缂栬緫
</el-button>
- <el-button icon="el-icon-delete" size="small" type="text" @click="rowDeleteHandler(scope.row)">鍒犻櫎
+ <el-button v-if="permissionList.delBtn" icon="el-icon-delete" size="small" type="text" @click="rowDeleteHandler(scope.row)">鍒犻櫎
</el-button>
</template>
</avue-crud>
- <div v-if="!tableStatus" style="display: flex;justify-content: center;margin-top: 15px">
- <el-button icon="el-icon-plus" plain size="small" type="primary" @click="addClickHandler">澧炲姞</el-button>
- <el-button icon="el-icon-delete" plain size="small" type="danger" @click="deleteClickHandler">鍒犻櫎</el-button>
- <el-button icon="el-icon-document-add" plain size="small" type="primary">鍏嬮殕</el-button>
- <el-button icon="el-icon-upload2" plain size="small" type="primary" @click="upLoadClickHandler">瀵煎叆</el-button>
- <el-button icon="el-icon-download" plain size="small" type="primary" @click="exportClickHandler">瀵煎嚭
- </el-button>
- </div>
</basic-container>
</el-main>
- <form-dialog ref="formDialog" :TreeNodeRow="this.nodeRow" :treeRadio="treeRadio"></form-dialog>
+ <form-dialog ref="formDialog" :TreeNodeRow="this.nodeRow" :editRow="editRow" :treeRadio="treeRadio"
+ @updataTable="getRightPortalVIDatas"></form-dialog>
<table-dialog ref="tableDialog" :TreeNodeRow="this.nodeRow" :treeRadio="treeRadio"
@updataTable="getRightPortalVIDatas"></table-dialog>
<!-- 瀵煎叆 -->
<upload-file ref="upload" :fileType="upFileType" :fileUrl="fileUrl" :tipList="tipList" title="瀵煎叆"
@updata="getRightPortalVIDatas"></upload-file>
+ <el-dialog
+ v-dialogDrag
+ :visible.sync="cloneVisible"
+ append-to-body="true"
+ class="avue-dialog"
+ title="鍏嬮殕"
+ width="50%">
+ <basic-container>
+ <div ref="TreeBox" style="height: calc(100vh - 294px);!important;">
+ <!-- 宸︿晶鏍� -->
+ <div style="height: calc(100vh - 370px);">
+ <div style="margin-bottom: 10px;display: flex;justify-content: center">
+ <el-radio v-model="cloneTreeRadio" label="0" @input="cloneTreeRadioChange">涓氬姟绫诲瀷鏍�</el-radio>
+ <el-radio v-model="cloneTreeRadio" label="1" @input="cloneTreeRadioChange">閾炬帴绫诲瀷鏍�</el-radio>
+ </div>
+ <avue-tree ref="cloneTree" v-loading="cloneTreeLoading" :data="cloneTreeData" :option="treeOption"
+ @node-click="cloneTreeNodeClick">
+ <span slot-scope="{ node, data }" class="el-tree-node__label">
+ <span>
+ <icon-show :name="data.icon"></icon-show>
+ {{ (node || {}).label }}
+ </span>
+ </span>
+ </avue-tree>
+ </div>
+ </div>
+ </basic-container>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="cloneVisible = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="cloneSaveHandler">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
</el-container>
</template>
@@ -84,16 +112,22 @@
import basicOption from "@/util/basic-option";
import FormDialog from "@/views/modelingMenu/ui/formDefine/components/formDialog";
import TableDialog from "@/views/modelingMenu/ui/formDefine/components/tableDialog";
-import {gridPortalVIDatas, getPortalVIById, deleteByIds, exportExcel} from "@/api/UI/formDefine/api";
+import {gridPortalVIDatas, getPortalVIById, deleteByIds, exportExcel, clone} from "@/api/UI/formDefine/api";
import {getBizTypes} from "@/api/modeling/businessType/api";
import {gridLink} from "@/api/modeling/linkType/api";
import func from "@/util/func";
+import {mapGetters} from "vuex";
export default {
name: "index",
components: {FormDialog, TableDialog},
data() {
return {
+ cloneTreeNode: {},
+ cloneTreeRadio: '0',
+ cloneTreeData: [],
+ cloneTreeLoading: false,
+ cloneVisible: false,
tipList: [
"瀵煎叆涓氬姟绫诲瀷鍚嶇О涓嶅彲涓虹┖",
"瀵煎叆鍚嶇О涓嶅彲涓虹┖涓斿悕绉板彧鑳戒负鑻辨枃瀛楁瘝",
@@ -117,6 +151,7 @@
addBtn: false,
editBtn: false,
delBtn: false,
+ calcHeight: -60,
column: [
{
label: '涓氬姟鍚嶇О',
@@ -146,13 +181,25 @@
}
},
dbClickList: [],
- defaultData: [], // 鐢ㄤ簬鏌ヨ鎭㈠鍘熷鍊�
+ defaultData: [], // 鐢ㄤ簬鏌ヨ鎭㈠鍘熷鍊�,
+ editRow: {},
}
},
created() {
this.getTreeList();
},
computed: {
+ ...mapGetters(["permission"]),
+ permissionList() {
+ return {
+ addBtn: this.vaildData(this.permission[this.$route.query.id].ADD, false),
+ delBtn: this.vaildData(this.permission[this.$route.query.id].DELETE, false),
+ editBtn: this.vaildData(this.permission[this.$route.query.id].EDIT, false),
+ exportBtn: this.vaildData(this.permission[this.$route.query.id].EXPORT, false),
+ importBtn: this.vaildData(this.permission[this.$route.query.id].IMPORT, false),
+ cloneBtn: this.vaildData(this.permission[this.$route.query.id].clone, false),
+ };
+ },
tableStatus() {
return func.isEmptyObject(this.nodeRow);
}
@@ -165,11 +212,14 @@
return;
}
if (this.tableRadio === "0") {
+ this.editRow.id = "";
this.$refs.formDialog.visible = true;
this.$refs.formDialog.getTreeList();
} else {
this.$refs.tableDialog.visible = true;
- this.$refs.tableDialog.getDbList();
+ this.$refs.tableDialog.getDbList(); // 鍙屽嚮鎿嶄綔涓嬫媺鎺ュ彛
+ this.$refs.tableDialog.getSearchSelectList(); // 閫夋嫨琛ㄥ崟涓嬫媺鎺ュ彛
+ this.$refs.tableDialog.getFormSelect(); // 鏌ヨ妯℃澘涓嬫媺鎺ュ彛
}
},
@@ -180,9 +230,12 @@
const data = res.data.data.map(item => {
this.processChildren(item); // 澶勭悊姣忎釜鑺傜偣
item.attributes.id = item.attributes.id;
+ item.attributes.icon = item.attributes.imageName;
return item.attributes; // 杩斿洖澶勭悊鍚庣殑 attributes
});
this.treeData = data;
+ this.treeLoading = false;
+ }).catch(error => {
this.treeLoading = false;
});
},
@@ -196,14 +249,16 @@
const data = res.data.data.map(item => {
this.processChildren(item); // 澶勭悊姣忎釜鑺傜偣
item.attributes.id = item.attributes.id;
+ item.attributes.icon = item.attributes.imageName;
return item.attributes; // 杩斿洖澶勭悊鍚庣殑 attributes
});
this.treeData = data;
+ this.treeLoading = false;
});
} else {
gridLink().then(res => {
const data = res.data.data.map(item => {
- item.label = item.name;
+ item.id = item.name;
return item;
});
this.treeData = data;
@@ -217,6 +272,7 @@
if (item.children && item.children.length > 0) {
item.attributes.children = item.children.map(child => {
child.attributes.id = child.attributes.id;
+ child.attributes.icon = child.attributes.imageName;
this.processChildren(child); // 閫掑綊澶勭悊姣忎釜瀛愯妭鐐�
return child.attributes; // 鍙繑鍥炲瓙鑺傜偣鐨� attributes
});
@@ -289,14 +345,19 @@
// 鏇存柊琛ㄥ崟
this.$refs.tableDialog.form = {
...prmItem,
+ itemFieldWidthList: prmItem.itemFieldWidthList.map(item => {
+ return {
+ ...item,
+ $cellEdit: true,
+ }
+ }),
viName: res.data.obj.viName,
+ itemQtName: res.data.obj.prm.formQtName,
editNodeId: row.id,
- itemOutFieldList: (prmItem.itemOutFieldList || []).map(item => ({id: item})),
+ itemOutFieldList: (prmItem.itemOutFieldList || []),
itemSearchFieldList: (prmItem.itemSearchFieldList || []).map(item => ({id: item})),
- itemKeyFieldList: (prmItem.itemKeyFieldList || []).map(item => ({id: item})),
- searchLabel: prmItem.itemSeniorQueryCols || '',
- searchNumber: prmItem.itemSeniorQueryColsCounts || '1',
- searchSql: prmItem.itemQuerySql || '',
+ itemKeyFieldList: (prmItem.itemKeyFieldList || []),
+ searchNumber: '1',
itemFileWidthSelect: (prmItem.itemFieldWidthList && prmItem.itemFieldWidthList.length > 0) ? prmItem.itemFieldWidthList[0].key : '',
itemWidth: (prmItem.itemFieldWidthList && prmItem.itemFieldWidthList.length > 0) ? prmItem.itemFieldWidthList[0].value : '250'
};
@@ -305,9 +366,6 @@
const [width = '0', height = '0'] = (prmItem.itemImgWH || '0,0').split(',');
this.$refs.tableDialog.itemImgWidth = width;
this.$refs.tableDialog.itemImgHeight = height;
-
- // 鍙屽嚮鎿嶄綔鑾峰彇鏁版嵁鏂规硶
- this.$refs.tableDialog.getDbList();
// 鏄剧ず瀵硅瘽妗�
this.$refs.tableDialog.visible = true;
@@ -318,7 +376,7 @@
id: row.id,
viType: row.viType
};
-
+ this.editRow = row;
getPortalVIById(params).then(res => {
if (res.data.code === 200) {
const data = res.data.obj.prm.prmItemList;
@@ -333,8 +391,9 @@
this.$refs.formDialog.formList = updatedData;
this.$refs.formDialog.getTreeList();
this.$refs.formDialog.topForm.viName = res.data.obj.viName;
+ this.$refs.formDialog.topForm.itemQtName = res.data.obj.prm.formQtName;
this.$refs.formDialog.topForm.columnNumber = this.getValueBasedOnInput(res.data.obj.prm.showCols);
-
+ this.$refs.formDialog.topForm.showColumn = res.data.obj.prm.showCols;
this.$refs.formDialog.visible = true;
}
})
@@ -370,12 +429,13 @@
// 鍚嶇О鏌ヨ
nameSearchHandler() {
if (!this.topName) {
- this.data = this.defaultData;
+ this.getRightPortalVIDatas();
return;
}
- const list = this.data.filter(item => item.viName.includes(this.topName.trim()));
+ const list = this.defaultData.filter(item => item.viName.includes(this.topName.trim()));
this.data = list;
+ this.page.total = this.data.length;
},
// 鍒犻櫎鎸夐挳
@@ -384,12 +444,10 @@
this.$message.error('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�');
return;
}
- console.log(this.selectList);
const params = {
ids: this.selectList.map(item => item.id).join(',')
}
deleteByIds(params).then(res => {
- console.log(res);
if (res.data.code === 200) {
this.$message.success('鍒犻櫎鎴愬姛');
this.getRightPortalVIDatas();
@@ -397,7 +455,14 @@
})
},
-
+ rowDeleteHandler(row) {
+ deleteByIds({ids: row.id}).then(res => {
+ if (res.data.code === 200) {
+ this.$message.success('鍒犻櫎鎴愬姛');
+ this.getRightPortalVIDatas();
+ }
+ })
+ },
// 澶氶��
selectChangeHandler(row) {
this.selectList = row;
@@ -413,7 +478,7 @@
this.lastIndex = newIndex;
},
() => {
- this.selectList = [];
+ this.selectList = [row];
}
);
},
@@ -431,14 +496,120 @@
exportExcel(params).then(res => {
func.downloadFileByBlobHandler(res);
this.$message.success('瀵煎嚭鎴愬姛');
- }).catch(err => {
- this.$message.error(err);
});
},
// 瀵煎叆
upLoadClickHandler() {
this.$refs.upload.visible = true;
+ },
+
+ // 鍏嬮殕
+ copyClickHandler() {
+ if (this.selectList.length <= 0) {
+ this.$message.error('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�');
+ return;
+ }
+
+ if (this.selectList.length > 1) {
+ this.$message.error('鍙兘閫夋嫨涓�鏉℃暟鎹�');
+ return;
+ }
+
+ this.cloneVisible = true;
+ this.cloneTreeLoading = true;
+ getBizTypes().then(res => {
+ const data = res.data.data.map(item => {
+ this.processChildren(item); // 澶勭悊姣忎釜鑺傜偣
+ item.attributes.id = item.attributes.id;
+ return item.attributes; // 杩斿洖澶勭悊鍚庣殑 attributes
+ });
+ this.cloneTreeData = data;
+ this.cloneTreeLoading = false;
+ }).catch(error => {
+ this.cloneTreeLoading = false;
+ });
+ },
+
+ // 鍏嬮殕鏍戠偣鍑�
+ cloneTreeNodeClick(row) {
+ this.cloneTreeNode = row;
+ },
+
+ // 鍏嬮殕鏍戠被鍨嬪垏鎹�
+ cloneTreeRadioChange(val) {
+ this.cloneTreeLoading = true;
+ if (val === "0") {
+ getBizTypes().then(res => {
+ const data = res.data.data.map(item => {
+ this.processChildren(item); // 澶勭悊姣忎釜鑺傜偣
+ item.attributes.id = item.attributes.id;
+ return item.attributes; // 杩斿洖澶勭悊鍚庣殑 attributes
+ });
+ this.cloneTreeData = data;
+ this.cloneTreeLoading = false;
+ });
+ } else {
+ gridLink().then(res => {
+ const data = res.data.data.map(item => {
+ item.id = item.name;
+ return item;
+ });
+ this.cloneTreeData = data;
+ this.cloneTreeLoading = false;
+ })
+ }
+ },
+
+ // 鏌ヨ琛ㄦ牸鏁版嵁璇︽儏
+ searchDetail() {
+ return new Promise((resolve, reject) => {
+ const params = {
+ id: this.selectList[0].id,
+ viType: this.selectList[0].viType
+ };
+ getPortalVIById(params).then(res => {
+ const obj = res.data.obj;
+ resolve(obj);
+ }).catch(error => {
+ reject(error);
+ });
+ });
+ },
+
+ // 鍏嬮殕淇濆瓨
+ async cloneSaveHandler() {
+ if (func.isEmptyObject(this.cloneTreeNode)) {
+ this.$message.error('璇烽�夋嫨涓�鏉℃暟鎹繘琛屽厠闅�');
+ return;
+ }
+ const obj = await this.searchDetail();
+ this.$prompt('璇疯緭鍏ュ厠闅嗘枃浠跺悕绉�', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ }).then(({value}) => {
+ const params = {
+ clonePortalVIDTOList: [
+ {
+ viName: value,
+ typeName: this.cloneTreeRadio === '0' ? this.cloneTreeNode.id : this.cloneTreeNode.name,
+ typeFlag: this.cloneTreeRadio,
+ oldPortalVIDTO: {...obj}
+ }
+ ],
+ }
+ clone(params).then(res => {
+ if (res.data.code === 200) {
+ this.$message.success('鍏嬮殕鎴愬姛');
+ this.cloneVisible = false;
+ }
+ })
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '鍙栨秷杈撳叆'
+ });
+ });
}
}
}
--
Gitblit v1.9.3