Просмотр исходного кода

树目录结构全部完成 2020年7月14日17:42:46

linan 5 лет назад
Родитель
Сommit
ceec0223a7
1 измененных файлов с 210 добавлено и 31 удалено
  1. 210 31
      src/views/treeStructure/TreeManagement.vue

+ 210 - 31
src/views/treeStructure/TreeManagement.vue

@@ -1,8 +1,8 @@
 <template>
     <div class="TreeManagement">
-        <header>
+        <header id="header">
             <el-row>
-                <el-select v-model="value" filterable placeholder="请选择">
+                <el-select v-model="id" filterable placeholder="请选择">
                     <el-option
                         v-for="item in options"
                         :key="item.id"
@@ -10,60 +10,218 @@
                         :value="item.id"
                     ></el-option>
                 </el-select>
-                <el-button>查找</el-button>
+                <el-button @click="onfind">查找</el-button>
             </el-row>
         </header>
+        <section id="section">
+            <el-tree
+                :data="dataTree"
+                node-key="id"
+                default-expand-all
+                :expand-on-click-node="false"
+                :props="defaultProps"
+            >
+                <span class="custom-tree-node" slot-scope="{ node, data }">
+                    <span>{{ node.label }}</span>
+                    <span class="right">
+                        <el-tooltip effect="dark" content="添加节点" placement="top-start">
+                            <i class="el-icon-folder-add icon" @click="() => add(data)"></i>
+                        </el-tooltip>
+                        <el-tooltip effect="dark" content="编辑节点" placement="top-start">
+                            <i class="el-icon-edit icon" @click="() => edit(data)" alt="编辑"></i>
+                        </el-tooltip>
+                        <el-tooltip effect="dark" content="删除节点" placement="top-start">
+                            <i class="el-icon-delete icon" @click="() => del(data)"></i>
+                        </el-tooltip>
+                    </span>
+                </span>
+            </el-tree>
+        </section>
+
+        <el-dialog
+            :title="addOrEditThis.nodeName+':'+(isAdd?'添加节点':'编辑节点')"
+            :visible.sync="showDialog"
+        >
+            <el-row type="flex">
+                <el-col :span="14">
+                    <el-form ref="form" :model="form" :rules="rules" label-width="140px">
+                        <el-form-item v-show="isAdd">
+                            <el-switch
+                                @change="switchChange"
+                                style="display: block"
+                                v-model="isAddSubNode"
+                                active-color="#13ce66"
+                                inactive-color="#ff4949"
+                                inactive-text="添加当前节点"
+                                active-text="添加子节点"
+                            ></el-switch>
+                        </el-form-item>
+                        <el-form-item label="子节点名称:" prop="nodeName">
+                            <el-input v-model="form.nodeName"></el-input>
+                        </el-form-item>
+                        <el-form-item label="配置信息:" prop="meta">
+                            <el-input
+                                v-model="form.meta"
+                                type="textarea"
+                                placeholder="请输入内容,JSON格式"
+                                autosize
+                            ></el-input>
+                        </el-form-item>
+                        <el-form-item label="子节点代号:" prop="code">
+                            <el-input v-model="form.code" placeholder="要为这个子节点起个名字吗"></el-input>
+                        </el-form-item>
+                        <el-form-item>
+                            <el-button @click="showDialog=false">取 消</el-button>
+                            <el-button type="primary" @click="submitForm('form')">保 存</el-button>
+                        </el-form-item>
+                    </el-form>
+                </el-col>
+            </el-row>
+        </el-dialog>
     </div>
 </template>
 
 <script>
 import { mapActions } from "vuex";
-
+// 表单验证规则
+const rules = {
+    nodeName: [
+        { required: true, message: "请输入消息点编码", trigger: "blur" }
+    ],
+    meta: [{ required: true, message: "请输入消息点描述", trigger: "blur" }]
+};
+// tree组件 配置
+const defaultProps = { children: "childs", label: "nodeName"};
 export default {
     name: "TreeManagement",
     data() {
         return {
-            options: [
-                {
-                    value: "选项1",
-                    nodeName: "黄金糕"
-                },
-                {
-                    value: "选项2",
-                    label: "双皮奶"
-                },
-                {
-                    value: "选项3",
-                    label: "蚵仔煎"
-                },
-                {
-                    value: "选项4",
-                    label: "龙须面"
-                },
-                {
-                    value: "选项5",
-                    label: "北京烤鸭"
-                }
-            ],
-            value: ""
+            options: [],
+            id: "",
+            dataTree: [],
+            defaultProps,
+            showDialog: false,
+            isAddSubNode: true, // 是添加子节点还是添加当前节点 的 状态标识
+            form: {
+                nodeName: "",
+                meta: "",
+                code: ""
+            },
+            isAdd: null, // 是添加还是编辑状态
+            addOrEditThis: {}, // 保存点击的this
+            rules
         };
     },
     created() {
-        this.get("-1")
+        this.getSubNodeList("-1");
     },
     methods: {
         ...mapActions(["fetch"]),
-        get(parentId) {
+        submitForm(formName) {
+            this.$refs[formName].validate(valid => {
+                if (valid) {
+                    console.log(this.dyForm);
+                    // 添加
+                    if (this.isAdd) {
+                        this.form.parentId = this.isAddSubNode
+                            ? this.addOrEditThis.id
+                            : this.addOrEditThis.parentId;
+                        this.reqSave("/publics/treenode/addNode");
+                    } else {
+                        // 编辑
+                        this.reqSave("/publics/treenode/updateNode");
+                    }
+                } else {
+                    return false;
+                }
+            });
+        },
+
+        // 保存事件,包括新增字节点和编辑当前节点
+        reqSave(api) {
+            if (!this.form.code) delete this.form.code;
+            this.fetch({
+                api,
+                method: "POST",
+                data: this.form,
+                success: res => {
+                    this.getSubNodeList(this.id);
+                    this.$message.success(
+                        this.isAdd
+                            ? "添加" +
+                                  (this.isAddSubNode ? "子" : "") +
+                                  "节点成功!"
+                            : "编辑节点成功!"
+                    );
+                    this.showDialog = false;
+                },
+                fail: err => {
+                    if (err.errMsg) this.$message.error(err.errMsg);
+                    else this.$message.error("服务器发生异常");
+                }
+            });
+        },
+        // 请求 拿到树列表
+        getSubNodeList(parentId) {
             this.fetch({
                 api: "/publics/treenode/listNodeByParent",
                 method: "POST",
                 data: {
                     parentId,
-                    hasSub:false
+                    hasSub: true
                 },
                 success: res => {
+                    parentId == "-1"
+                        ? (this.options = res)
+                        : (this.dataTree = res);
+                },
+                fail: err => {
+                    if (err.errMsg) this.$message.error(err.errMsg);
+                    else this.$message.error("服务器发生异常");
+                }
+            });
+        },
+        //
+        switchChange() {
+            console.log(this.isAddSubNode);
+        },
+        // 点击查找
+        onfind() {
+            console.log(this.id);
+            this.getSubNodeList(this.id);
+        },
+        add(data) {
+            console.log("add");
+            console.log(data);
+            this.showDialog = true;
+            this.isAdd = true;
+            this.form.parentId = data.id;
+            this.addOrEditThis = data; // 保存当前点击者状态
+        },
+        edit(data) {
+            this.showDialog = true;
+            this.isAdd = false;
+            this.addOrEditThis = data; // 保存当前点击者状态 此处只为 dialog 的title显示用
+            delete this.form.parentId;
+            console.log(data);
+            this.form = {
+                id: data.id,
+                nodeName: data.nodeName,
+                meta: JSON.stringify(data.meta, null, 2),
+                code: data.code
+            };
+        },
+        del(data) {
+            console.log("del");
+            console.log(data);
+            this.fetch({
+                api: "/publics/treenode/deleteNode",
+                method: "POST",
+                data: { id: data.id },
+                success: res => {
+                    this.getSubNodeList(this.id);
                     console.log(res);
-                    this.options = res
+                    this.$message.success("删除成功!");
                 },
                 fail: err => {
                     console.log(err);
@@ -75,3 +233,24 @@ export default {
     }
 };
 </script>
+<style lang="scss" scoped>
+.TreeManagement {
+    #header {
+        margin-bottom: 15px;
+    }
+}
+
+.custom-tree-node {
+    flex: 1;
+    display: flex;
+    align-items: center;
+    font-size: 14px;
+    padding-right: 8px;
+    .right {
+        margin-left: 40px;
+        .icon {
+            margin-right: 10px;
+        }
+    }
+}
+</style>