|
@@ -43,15 +43,32 @@
|
|
<!-- show-checkbox 节点是否可以被选择 -->
|
|
<!-- show-checkbox 节点是否可以被选择 -->
|
|
<el-tree :data="treeData" :props="defaultProps" @node-click="handleNodeClick" :expand-on-click-node="false">
|
|
<el-tree :data="treeData" :props="defaultProps" @node-click="handleNodeClick" :expand-on-click-node="false">
|
|
<span class="custom-tree-node" slot-scope="{ node, data }">
|
|
<span class="custom-tree-node" slot-scope="{ node, data }">
|
|
- <span style="margin-right: 10px;">{{ node.label }}</span>
|
|
|
|
|
|
+ <!-- <span style="margin-right: 10px;">{{ node.label }}</span> -->
|
|
|
|
+ <span style="margin-right: 10px;">
|
|
|
|
+ <template v-if="editingNodeId !== node.id">
|
|
|
|
+ {{ node.label }}
|
|
|
|
+ </template>
|
|
|
|
+ <!-- -->
|
|
|
|
+ <el-input v-else v-model="data[defaultProps.label]" @blur="saveNodeLabel(node, data)"
|
|
|
|
+ @keydown.enter.native="saveNodeLabel(node, data)"></el-input>
|
|
|
|
+ </span>
|
|
<span>
|
|
<span>
|
|
- <el-button icon="el-icon-edit" type="text" @click.stop="() => editNodeLabel(node, data)"></el-button>
|
|
|
|
- <el-button icon="el-icon-plus" type="text" @click.stop="() => addNode(node, data)"></el-button>
|
|
|
|
- <el-button icon="el-icon-delete" type="text" @click.stop="() => deleteNode(node, data)"></el-button>
|
|
|
|
|
|
+ <el-button icon="el-icon-edit" type="text" @click.stop="() => editNodeLabel(node, data)"></el-button>
|
|
|
|
+ <el-button icon="el-icon-plus" type="text" @click.stop="() => openAddDialog(node, data)"></el-button>
|
|
|
|
+ <el-button icon="el-icon-delete" type="text" @click.stop="() => deleteNode(node, data)"></el-button>
|
|
</span>
|
|
</span>
|
|
</span>
|
|
</span>
|
|
</el-tree>
|
|
</el-tree>
|
|
|
|
+ <!-- 新增节点对话框 -->
|
|
|
|
+ <el-dialog title="请输入新节点名称" :visible.sync="dialogVisible" width="30%">
|
|
|
|
+ <el-input v-model="newNodeName" placeholder="请输入内容"></el-input>
|
|
|
|
+ <span slot="footer" class="dialog-footer">
|
|
|
|
+ <el-button @click="dialogVisible = false">取 消</el-button>
|
|
|
|
+ <el-button type="primary" @click="confirmAddNode()">确 定</el-button>
|
|
|
|
+ </span>
|
|
|
|
+ </el-dialog>
|
|
</div>
|
|
</div>
|
|
|
|
+
|
|
<!-- 右侧 -->
|
|
<!-- 右侧 -->
|
|
<div class='container-right'>
|
|
<div class='container-right'>
|
|
<el-table v-loading="loading" :data="tableList" @selection-change="handleSelectionChange" ref="tableRef"
|
|
<el-table v-loading="loading" :data="tableList" @selection-change="handleSelectionChange" ref="tableRef"
|
|
@@ -193,7 +210,7 @@ import {
|
|
getStatisticList,
|
|
getStatisticList,
|
|
} from "@/api/tablelist/commonTable";
|
|
} from "@/api/tablelist/commonTable";
|
|
import {
|
|
import {
|
|
- getTreeData
|
|
|
|
|
|
+ getTreeData, addTreeNode, updateTreeNode, deleteTreeNode
|
|
} from "@/api/treeTableList/commonTable";
|
|
} from "@/api/treeTableList/commonTable";
|
|
import { listData } from "@/api/system/tenant/data";
|
|
import { listData } from "@/api/system/tenant/data";
|
|
import { getToken } from "@/utils/auth";
|
|
import { getToken } from "@/utils/auth";
|
|
@@ -221,6 +238,10 @@ export default {
|
|
},
|
|
},
|
|
data() {
|
|
data() {
|
|
return {
|
|
return {
|
|
|
|
+ editingNodeId: null,
|
|
|
|
+ dialogVisible: false,
|
|
|
|
+ newNodeName: '',
|
|
|
|
+ currentNode: null, // 当前操作的节点
|
|
treeData: [],
|
|
treeData: [],
|
|
defaultProps: {
|
|
defaultProps: {
|
|
children: 'children',
|
|
children: 'children',
|
|
@@ -405,15 +426,126 @@ export default {
|
|
// this.initFormGroupDialog();
|
|
// this.initFormGroupDialog();
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
- editNodeLabel(node, data) {
|
|
|
|
- console.log('editNodeLabel--->',node, data)
|
|
|
|
- },
|
|
|
|
- addNode(node, data) {
|
|
|
|
- console.log('addNode--->', node, data)
|
|
|
|
- },
|
|
|
|
- deleteNode(node, data) {
|
|
|
|
- console.log('deleteNode--->',node, data)
|
|
|
|
- },
|
|
|
|
|
|
+ editNodeLabel(node, data) {
|
|
|
|
+ this.editingNodeId = node.id;
|
|
|
|
+ // if(this.templateData && data){
|
|
|
|
+ // let data ={
|
|
|
|
+ // // 表名称(固定)
|
|
|
|
+ // tableName:this.templateData?.treeTableName,
|
|
|
|
+ // // 主键名(固定)
|
|
|
|
+ // primaryName:this.templateData?.treeTablePrimaryKey,
|
|
|
|
+ // // 主键值
|
|
|
|
+ // // primaryValue:data.id,
|
|
|
|
+ // // 字段名 (固定)
|
|
|
|
+ // columnName:this.templateData?.treeShowLabel,
|
|
|
|
+ // // 字段值
|
|
|
|
+ // // columnValue:data,
|
|
|
|
+ // // 父键的名(固定)
|
|
|
|
+ // parentName:this.templateData?.treeTableDgl,
|
|
|
|
+ // }
|
|
|
|
+ // console.log('editdata',data)
|
|
|
|
+ // }
|
|
|
|
+ this.$nextTick(() => {
|
|
|
|
+ const input = document.querySelector(`input[aria-label="${node.id}"]`);
|
|
|
|
+ if (input) input.focus();
|
|
|
|
+ });
|
|
|
|
+ },
|
|
|
|
+ saveNodeLabel(node, data, t) {
|
|
|
|
+ this.editingNodeId = null;
|
|
|
|
+ let columnValue = data[this.defaultProps.label]
|
|
|
|
+ if (this.templateData && node?.data && columnValue) {
|
|
|
|
+ let data = {
|
|
|
|
+ // 表名称(固定)
|
|
|
|
+ tableName: this.templateData?.treeTableName,
|
|
|
|
+ // 主键名(固定)
|
|
|
|
+ primaryName: this.templateData?.treeTablePrimaryKey,
|
|
|
|
+ // 主键值
|
|
|
|
+ primaryValue: node?.data.id,
|
|
|
|
+ // 字段名 (固定)
|
|
|
|
+ columnName: this.templateData?.treeShowLabel,
|
|
|
|
+ // 字段值
|
|
|
|
+ columnValue: columnValue,
|
|
|
|
+ // 父键的名(固定)
|
|
|
|
+ parentName: this.templateData?.treeTableDgl,
|
|
|
|
+ }
|
|
|
|
+ console.log('editdata', data)
|
|
|
|
+
|
|
|
|
+ updateTreeNode(data).then(res => {
|
|
|
|
+ console.log('editdataRes', res)
|
|
|
|
+ // 成功的话要补上重新调用树形的接口
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 在此处调用你的保存接口
|
|
|
|
+ },
|
|
|
|
+ openAddDialog(node, data) {
|
|
|
|
+ this.currentNode = data; // 记录当前操作的节点
|
|
|
|
+ this.dialogVisible = true; // 显示对话框
|
|
|
|
+ },
|
|
|
|
+ confirmAddNode() {
|
|
|
|
+ if (!this.newNodeName.trim()) {
|
|
|
|
+ this.$message.error('节点名称不能为空');
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ let newNode = {
|
|
|
|
+ id: new Date().getTime(), // 使用时间戳作为ID
|
|
|
|
+ name: this.newNodeName, // 用户输入的新节点名称
|
|
|
|
+ children: []
|
|
|
|
+ };
|
|
|
|
+ if (!this.currentNode.children) {
|
|
|
|
+ this.$set(this.currentNode, 'children', []);
|
|
|
|
+ }
|
|
|
|
+ // this.currentNode.children.push(newNode);
|
|
|
|
+ this.dialogVisible = false; // 关闭对话框
|
|
|
|
+ this.newNodeName = ''; // 清空输入框
|
|
|
|
+ console.log('Added node:', newNode,this.currentNode);
|
|
|
|
+ if(this.currentNode && this.templateData && newNode){
|
|
|
|
+ let data = {
|
|
|
|
+ // 表名称(固定)
|
|
|
|
+ tableName: this.templateData?.treeTableName,
|
|
|
|
+ // 主键名(固定)
|
|
|
|
+ primaryName: this.templateData?.treeTablePrimaryKey,
|
|
|
|
+ // 主键值
|
|
|
|
+ primaryValue: this.currentNode.id,
|
|
|
|
+ // 字段名 (固定)
|
|
|
|
+ columnName: this.templateData?.treeShowLabel,
|
|
|
|
+ // 字段值
|
|
|
|
+ columnValue: newNode?.name,
|
|
|
|
+ // 父键的名(固定)
|
|
|
|
+ parentName: this.templateData?.treeTableDgl,
|
|
|
|
+ }
|
|
|
|
+ console.log('add', data)
|
|
|
|
+ addTreeNode(data).then(res => {
|
|
|
|
+ console.log('addTreeNodeRes', res)
|
|
|
|
+ // 成功的话要补上重新调用树形的接口
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ deleteNode(node, data) {
|
|
|
|
+ console.log('deleteNode--->', node, data)
|
|
|
|
+ if(data && this.templateData){
|
|
|
|
+ let data1 = {
|
|
|
|
+ // 表名称(固定)
|
|
|
|
+ tableName: this.templateData?.treeTableName,
|
|
|
|
+ // 主键名(固定)
|
|
|
|
+ primaryName: this.templateData?.treeTablePrimaryKey,
|
|
|
|
+ // 主键值
|
|
|
|
+ primaryValue: data.id,
|
|
|
|
+ // 字段名 (固定)
|
|
|
|
+ columnName: this.templateData?.treeShowLabel,
|
|
|
|
+ // 字段值
|
|
|
|
+ columnValue: data?.label,
|
|
|
|
+ // 父键的名(固定)
|
|
|
|
+ parentName: this.templateData?.treeTableDgl,
|
|
|
|
+ }
|
|
|
|
+ console.log('add', data1)
|
|
|
|
+ deleteTreeNode(data1).then(res => {
|
|
|
|
+ console.log('deleteTreeNode', res)
|
|
|
|
+ // 成功的话要补上重新调用树形的接口
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ },
|
|
getLeftTreeData(treeTableKey) {
|
|
getLeftTreeData(treeTableKey) {
|
|
getTreeData(treeTableKey).then(res => {
|
|
getTreeData(treeTableKey).then(res => {
|
|
if (res.code === 200 && res.data && res.data.template) {
|
|
if (res.code === 200 && res.data && res.data.template) {
|
|
@@ -2060,4 +2192,17 @@ export default {
|
|
::v-deep .el-table__empty-block {
|
|
::v-deep .el-table__empty-block {
|
|
width: 100% !important;
|
|
width: 100% !important;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+.custom-tree-node ::v-deep .el-input--medium .el-input__inner {
|
|
|
|
+ height: 20px;
|
|
|
|
+ line-height: 20px;
|
|
|
|
+ width: 60px;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.custom-tree-node ::v-deep .el-input--medium {
|
|
|
|
+ font-size: 14px;
|
|
|
|
+ height: 20px;
|
|
|
|
+ line-height: 20px;
|
|
|
|
+ width: 60px;
|
|
|
|
+}
|
|
</style>
|
|
</style>
|