|
@@ -1,272 +1,245 @@
|
|
|
<template>
|
|
|
<div class="AreaInfo">
|
|
|
- <el-button class="top_btn" size="mini" type="primary" @click="isShowDialog=true">区域信息管理</el-button>
|
|
|
- <hr style="border-top: 2px solid #eee;margin: 10px 0;">
|
|
|
- <el-tree
|
|
|
- class="filter-tree"
|
|
|
- :data="areaInfoTree"
|
|
|
- :props="defaultProps"
|
|
|
- @node-contextmenu="mouseRightCilck"
|
|
|
- ref="tree"
|
|
|
- slot="reference"
|
|
|
- ></el-tree>
|
|
|
+ <header id="header">
|
|
|
+ <el-button @click="add_catalog" type="primary">添加目录</el-button>
|
|
|
+ </header>
|
|
|
+ <hr style="border-top: 2px solid #eee;margin: 10px 0;" />
|
|
|
+ <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 width="40%" title="区域信息管理" :visible.sync="isShowDialog" append-to-body>
|
|
|
- <el-form :model="formData" label-width="100px">
|
|
|
- <el-form-item label="所属区域:">
|
|
|
- <div>
|
|
|
- <p class="hint" style="color: rgb(250, 80, 61)">提示:选择好后,点击旁白就会选中!</p>
|
|
|
-
|
|
|
- <el-row type="flex">
|
|
|
- <el-col :span="14">
|
|
|
- <el-cascader
|
|
|
- style="width:335px;"
|
|
|
- :options="areaInfoTree"
|
|
|
- :props="{ children: 'children', label: 'name' ,value:'id'}"
|
|
|
- @expand-change="handleChange"
|
|
|
- @change="change"
|
|
|
- :placeholder="cascaderPlaceholder"
|
|
|
- ></el-cascader>
|
|
|
- </el-col>
|
|
|
- <el-col :span="6">
|
|
|
- <el-popconfirm
|
|
|
- title="删除此区域信息?"
|
|
|
- @onConfirm="onConfirmDelAll"
|
|
|
- @onCancel="onConfirmDel"
|
|
|
- confirmButtonText="全部删除"
|
|
|
- cancelButtonText="不删除所属区域"
|
|
|
- >
|
|
|
- <el-button type="primary" slot="reference">删除此区域</el-button>
|
|
|
- </el-popconfirm>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- </div>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="区域名字:">
|
|
|
- <el-row type="flex">
|
|
|
- <el-col :span="13">
|
|
|
- <el-input v-model="formData.name" placeholder="请填写所属区域名"></el-input>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item>
|
|
|
- <el-row type="flex">
|
|
|
- <el-col :span="4">
|
|
|
- <el-button @click="isShowDialog=false">取 消</el-button>
|
|
|
- </el-col>
|
|
|
- <el-col :span="6">
|
|
|
- <el-button type="primary" @click="addAreaInfo">添加所属区域</el-button>
|
|
|
- </el-col>
|
|
|
- <el-col :span="6">
|
|
|
- <el-popconfirm title="删除此区域信息?" @onConfirm="onConfirmEdit">
|
|
|
- <el-button type="primary" slot="reference">修 改</el-button>
|
|
|
- </el-popconfirm>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <!-- 直接删除此处就行 -->
|
|
|
- <hr/>
|
|
|
- <el-form-item label="">
|
|
|
- <p>封装组件测试用的 </p>
|
|
|
- <cascader
|
|
|
- :options="areaInfoTree"
|
|
|
- @expandChange="()=>{}"
|
|
|
- @change="()=>{}"
|
|
|
- :props="{ children: 'children', label: 'name' ,value:'id'}"
|
|
|
- ></cascader>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- </el-form>
|
|
|
+ <el-dialog :title="title.title" :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 :label="title.nodeName" 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="title.code" 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";
|
|
|
-import Cascader from "../../components/Cascader/Cascader";
|
|
|
-
|
|
|
+// 表单验证规则
|
|
|
+const rules = {
|
|
|
+ nodeName: [
|
|
|
+ { required: true, message: "请输入节点名称", trigger: "blur" }
|
|
|
+ ],
|
|
|
+ meta: [{ required: true, message: "请输入配置信息", trigger: "blur" }]
|
|
|
+};
|
|
|
+// tree组件 配置
|
|
|
+const defaultProps = { children: "childs", label: "nodeName" };
|
|
|
export default {
|
|
|
name: "AreaInfo",
|
|
|
- components: {
|
|
|
- cascader: Cascader
|
|
|
- },
|
|
|
data() {
|
|
|
return {
|
|
|
- isShowDialog: false,
|
|
|
- selectArr: [],
|
|
|
- selectList: [],
|
|
|
- cascaderPlaceholder: "请选择/不选择默认根级",
|
|
|
- formData: {
|
|
|
- parentId: "-1",
|
|
|
- name: ""
|
|
|
- // orgId: "1"
|
|
|
+ options: [],
|
|
|
+ id: "",
|
|
|
+ dataTree: [],
|
|
|
+ defaultProps,
|
|
|
+ showDialog: false,
|
|
|
+ form: {
|
|
|
+ nodeName: "",
|
|
|
+ meta: "",
|
|
|
+ code: ""
|
|
|
+ },
|
|
|
+ /* 是添加还是编辑状态 { 1:节点后的添加, 2:节点后的编辑, 6:添加目录} */
|
|
|
+ dialogStatus: null,
|
|
|
+ addOrEditThis: {}, // 保存被点击的 this
|
|
|
+ title: {
|
|
|
+ title: "编辑/添加",
|
|
|
+ nodeName: "节点名称",
|
|
|
+ code: "节点代号"
|
|
|
},
|
|
|
- areaInfoTree: [], // tree 数据
|
|
|
- selectedItem: null,
|
|
|
- // tree配置选项
|
|
|
- defaultProps: { children: "children", label: "name" }
|
|
|
+ rules
|
|
|
};
|
|
|
},
|
|
|
- mounted() {
|
|
|
- this.loadTypes();
|
|
|
+ created() {
|
|
|
+ // 获取区域管理 树
|
|
|
+ this.getTreeByCode("AreaInfo");
|
|
|
},
|
|
|
- watch: {},
|
|
|
methods: {
|
|
|
...mapActions(["fetch"]),
|
|
|
- // 加载所有场地信息列表
|
|
|
- loadTypes() {
|
|
|
+ submitForm(formName) {
|
|
|
+ this.$refs[formName].validate(valid => {
|
|
|
+ if (valid) {
|
|
|
+ console.log(this.dyForm);
|
|
|
+ switch (this.dialogStatus) {
|
|
|
+ case 1 /* 添加 */:
|
|
|
+ this.form.parentId = this.addOrEditThis.id;
|
|
|
+ this.reqSave("/publics/treenode/addNode");
|
|
|
+ break;
|
|
|
+ case 2 /* 编辑 */:
|
|
|
+ this.reqSave("/publics/treenode/updateNode");
|
|
|
+ break;
|
|
|
+ case 6 /* 编辑 分类*/:
|
|
|
+ this.form.parentId = this.id;
|
|
|
+ this.reqSave("/publics/treenode/addNode");
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ this.$message.error(
|
|
|
+ "操作错误请刷新!"
|
|
|
+ );
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ // 通过code获取树
|
|
|
+ getTreeByCode(code) {
|
|
|
this.fetch({
|
|
|
- api: "/core/organize-structure/list",
|
|
|
- method: "GET",
|
|
|
- data: { orgId: 1 },
|
|
|
+ api: "/publics/treenode/getTreeByCode",
|
|
|
+ method: "POST",
|
|
|
+ data: { code }, //目前只有一个组织,其他参数调整钟
|
|
|
success: res => {
|
|
|
- this.areaInfoTree = this.findTypesByid(res, -1);
|
|
|
+ this.id = res.id;
|
|
|
+ this.getSubNodeList(res.id);
|
|
|
},
|
|
|
fail: err => {
|
|
|
console.log(err);
|
|
|
- if (err.errMsg) this.$message.error(err.errMsg);
|
|
|
- else this.$message.error("服务器发生异常");
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
- // loadTypes 函数的工具函数
|
|
|
- findTypesByid(resArr, pid) {
|
|
|
- let temArr = [];
|
|
|
- resArr.forEach(item => {
|
|
|
- if (item.parentId == pid) {
|
|
|
- temArr.push(item);
|
|
|
- item.children = this.findTypesByid(resArr, item.id);
|
|
|
+ this.$message.error("请重新登录");
|
|
|
+
|
|
|
+ if (err.errCode == "request_not_authorize") {
|
|
|
+ this.$message({
|
|
|
+ message: "请重新登录",
|
|
|
+ type: "warning"
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
});
|
|
|
- if (temArr.length > 0) return temArr;
|
|
|
- },
|
|
|
- // 树形节点 鼠标右键点击事件
|
|
|
- mouseRightCilck(event, data, Node, me) {
|
|
|
- console.log(data);
|
|
|
},
|
|
|
- // 级联选择器点击事件
|
|
|
- handleChange(value) {
|
|
|
- console.log(value);
|
|
|
- this.formData.parentId = value[value.length - 1];
|
|
|
- // 级联选择时 因组件限制 需拼接 名字字符串在级联选择器上显示
|
|
|
- this.cascaderPlaceholder = this.findAreaName(value);
|
|
|
- },
|
|
|
- change(value) {
|
|
|
- console.log("aa");
|
|
|
- console.log(value);
|
|
|
- this.formData.parentId = value[value.length - 1];
|
|
|
- console.log("a==>>" + this.formData.parentId);
|
|
|
- console.log(this.$children)
|
|
|
- },
|
|
|
- // 级联选择时 因组件限制 需拼接 名字字符串在级联选择器上显示
|
|
|
- findAreaName(tree) {
|
|
|
- let i = 0;
|
|
|
- let tmpStr = "";
|
|
|
- find(this.areaInfoTree);
|
|
|
- function find(subTree) {
|
|
|
- subTree.forEach(item => {
|
|
|
- if (item.id == tree[i]) {
|
|
|
- tmpStr += item.name + "/";
|
|
|
- if (
|
|
|
- i < tree.length &&
|
|
|
- item.children &&
|
|
|
- item.children.length > 0
|
|
|
- ) {
|
|
|
- i++;
|
|
|
- find(item.children);
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- console.log(tmpStr);
|
|
|
- this.cascaderPlaceholder = tmpStr;
|
|
|
- },
|
|
|
- // 保存区域信息
|
|
|
- addAreaInfo(e) {
|
|
|
- if (!this.formData.name) {
|
|
|
- this.$message.error("请填写所属区域名!");
|
|
|
- return;
|
|
|
- }
|
|
|
- console.log(this.formData);
|
|
|
+ // 保存事件,包括新增字节点和编辑当前节点
|
|
|
+ reqSave(api) {
|
|
|
+ if (!this.form.code) delete this.form.code;
|
|
|
this.fetch({
|
|
|
- api: "/core/organize-structure/add",
|
|
|
+ api,
|
|
|
method: "POST",
|
|
|
- data: this.formData,
|
|
|
+ data: this.form,
|
|
|
success: res => {
|
|
|
- console.log(res);
|
|
|
- this.$message.success("添加成功!");
|
|
|
- this.formData.name = "";
|
|
|
- // 加载所有场地信息列表
|
|
|
- this.loadTypes();
|
|
|
+ this.getSubNodeList(this.id);
|
|
|
+ this.$message.success("编辑节点成功!");
|
|
|
+ // this.showDialog = false;
|
|
|
},
|
|
|
fail: err => {
|
|
|
- console.log(err);
|
|
|
if (err.errMsg) this.$message.error(err.errMsg);
|
|
|
else this.$message.error("服务器发生异常");
|
|
|
}
|
|
|
});
|
|
|
},
|
|
|
- // 删除区域信息(删除子节点)
|
|
|
- onConfirmDelAll() {
|
|
|
- console.log("删除区域信息(删除子节点)");
|
|
|
- const url = "/core/organize-structure/delete-refer";
|
|
|
- const id = this.formData.parentId;
|
|
|
- if (id) {
|
|
|
- this.doDel(url, id);
|
|
|
- } else {
|
|
|
- this.$message.fail("没有选择对应要删除的区域");
|
|
|
- }
|
|
|
- },
|
|
|
- // 删除区域信息(不删除子节点)
|
|
|
- onConfirmDel() {
|
|
|
- console.log("删除区域信息(不删除子节点)");
|
|
|
- const url = "/core/organize-structure/delete";
|
|
|
- const id = this.formData.parentId;
|
|
|
- if (id) {
|
|
|
- this.doDel(url, id);
|
|
|
- } else {
|
|
|
- this.$message.fail("没有选择对应要删除的区域");
|
|
|
- }
|
|
|
- },
|
|
|
- // 删除区域信息 总函数
|
|
|
- doDel(url, id) {
|
|
|
- console.log("ID===>>>" + id);
|
|
|
+ // 请求 拿到树列表
|
|
|
+ getSubNodeList(parentId) {
|
|
|
this.fetch({
|
|
|
- api: url,
|
|
|
+ api: "/publics/treenode/listNodeByParent",
|
|
|
method: "POST",
|
|
|
- data: { id },
|
|
|
- success: res => {},
|
|
|
+ data: {
|
|
|
+ parentId,
|
|
|
+ hasSub: true
|
|
|
+ },
|
|
|
+ success: res => {
|
|
|
+ this.dataTree = res;
|
|
|
+ },
|
|
|
fail: err => {
|
|
|
- console.log(err);
|
|
|
- if (err.errCode == 200) {
|
|
|
- // 加载所有场地信息列表
|
|
|
- this.loadTypes();
|
|
|
- this.$message.success(err.errMsg);
|
|
|
- } else if (err.errMsg) {
|
|
|
- this.$message.error(err.errMsg);
|
|
|
- } else this.$message.error("服务器发生异常");
|
|
|
+ if (err.errMsg) this.$message.error(err.errMsg);
|
|
|
+ else this.$message.error("服务器发生异常");
|
|
|
}
|
|
|
});
|
|
|
},
|
|
|
- // 确认修改
|
|
|
- onConfirmEdit() {
|
|
|
- const id = this.formData.parentId;
|
|
|
- const name = this.formData.name;
|
|
|
- if (!name) {
|
|
|
- this.$message.warning("区域名字不能为空!");
|
|
|
- return;
|
|
|
- }
|
|
|
+
|
|
|
+ // 添加目录
|
|
|
+ add_catalog() {
|
|
|
+ this.showDialog = true;
|
|
|
+ this.dialogStatus = 6;
|
|
|
+ this.title = {
|
|
|
+ title: "添加目录",
|
|
|
+ nodeName: "节点名称",
|
|
|
+ code: "节点代号"
|
|
|
+ };
|
|
|
+ },
|
|
|
+
|
|
|
+ // 节点后的添加
|
|
|
+ add(data) {
|
|
|
+ console.log(data);
|
|
|
+ this.showDialog = true;
|
|
|
+ this.dialogStatus = 1;
|
|
|
+ this.title = {
|
|
|
+ title: data.nodeName + ":添加目录",
|
|
|
+ nodeName: "子节点名称",
|
|
|
+ code: "子节点代号"
|
|
|
+ };
|
|
|
+ this.form.parentId = data.id;
|
|
|
+ this.addOrEditThis = data; // 保存当前点击者状态
|
|
|
+ },
|
|
|
+ // 节点后的编辑
|
|
|
+ edit(data) {
|
|
|
+ console.log(data);
|
|
|
+ this.showDialog = true;
|
|
|
+ this.dialogStatus = 2;
|
|
|
+ this.title = {
|
|
|
+ title: data.nodeName + ":编辑节点",
|
|
|
+ nodeName: "子节点名称",
|
|
|
+ code: "子节点代号"
|
|
|
+ };
|
|
|
+ this.addOrEditThis = data; // 保存当前点击者状态 此处只为 dialog 的title显示用
|
|
|
+ delete this.form.parentId;
|
|
|
+ this.form = {
|
|
|
+ id: data.id,
|
|
|
+ nodeName: data.nodeName,
|
|
|
+ meta: JSON.stringify(data.meta, null, 2),
|
|
|
+ code: data.code
|
|
|
+ };
|
|
|
+ },
|
|
|
+ // 节点后的删除
|
|
|
+ del(data) {
|
|
|
this.fetch({
|
|
|
- api: "/core/organize-structure/update",
|
|
|
+ api: "/publics/treenode/deleteNode",
|
|
|
method: "POST",
|
|
|
- data: { id, name },
|
|
|
+ data: { id: data.id },
|
|
|
success: res => {
|
|
|
+ this.getSubNodeList(this.id);
|
|
|
console.log(res);
|
|
|
- // 加载所有场地信息列表
|
|
|
- this.loadTypes();
|
|
|
- this.$message.success("编辑区域信息成功!");
|
|
|
+ this.$message.success("删除成功!");
|
|
|
},
|
|
|
fail: err => {
|
|
|
console.log(err);
|
|
@@ -278,12 +251,29 @@ export default {
|
|
|
}
|
|
|
};
|
|
|
</script>
|
|
|
-
|
|
|
<style lang="scss" scoped>
|
|
|
.AreaInfo {
|
|
|
- .top_btn {
|
|
|
- margin-bottom: 20px;
|
|
|
+ #header {
|
|
|
+ margin-bottom: 15px;
|
|
|
+ }
|
|
|
+ #section {
|
|
|
+ .hint {
|
|
|
+ color: rgb(240, 34, 34);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
-</style>
|
|
|
|
|
|
+.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>
|