Elementui Tree 树形控件删除功能

深藏阁楼爱情的钟 2022-09-02 08:11 469阅读 0赞

vue-element-admin一个基于 vue2.0 和 Eelement 的控制面板 UI 框架,这是使用vue技术栈开发的前端程序员的首选管理系统模板,模板以及非常的成熟了,并且有相关的社区和维护人员,开发时候遇到问题也不要慌。

推荐指数:
Github 地址:https://github.com/PanJiaChen/vue-element-admin
Demo体验:https://panjiachen.github.io/vue-element-admin/#/dashboard
官方文档:https://panjiachen.github.io/vue-element-admin-site/zh/

b6345aacebb7bafb30ea20bb68ccd962.png

今天就来说一下,怎么使用Tree Table 树形表格。废话不多说,首先看一下官方文档吧,看看官方文档是怎么给到的例子吧:

组件:https://element.eleme.cn/#/zh-CN/component/tree

功能:当鼠标划过Tree 树形控件的节点的时候,会出现一个删除的按钮
点击删除按钮,会出现弹框询问是否删除
选中删除,则删除树节点(最上层的父节点不可删除)

1:在views底下新建一个test文件夹
里面新建一个vue文件和一个json文件
aacad81c70d73252657e7f276a0501ca.png

2:使用
mock.json

  1. {
  2. "msg": "success",
  3. "code": 1,
  4. "data": [
  5. {
  6. "id": 1,
  7. "organName": "yy有限公司",
  8. "parentId": 0,
  9. "manager": "zs",
  10. "phone": "zs",
  11. "companyId": 1,
  12. "address": null
  13. },
  14. {
  15. "id": 2,
  16. "organName": "test311",
  17. "parentId": 1,
  18. "manager": "zs",
  19. "phone": "21",
  20. "companyId": 1,
  21. "address": null
  22. },
  23. {
  24. "id": 10,
  25. "organName": "test4",
  26. "parentId": 1,
  27. "manager": "zs",
  28. "phone": null,
  29. "companyId": 1,
  30. "address": null
  31. },
  32. {
  33. "id": 11,
  34. "organName": "2121",
  35. "parentId": 1,
  36. "manager": "212",
  37. "phone": "13661725475",
  38. "companyId": 1,
  39. "address": null
  40. },
  41. {
  42. "id": 12,
  43. "organName": "212121212",
  44. "parentId": 2,
  45. "manager": "212",
  46. "phone": "13661725475",
  47. "companyId": 1,
  48. "address": null
  49. },
  50. {
  51. "id": 13,
  52. "organName": "www群46",
  53. "parentId": 11,
  54. "manager": "ww",
  55. "phone": "123",
  56. "companyId": 1,
  57. "address": null
  58. },
  59. {
  60. "id": 14,
  61. "organName": "www",
  62. "parentId": 11,
  63. "manager": "ww",
  64. "phone": "123",
  65. "companyId": 1,
  66. "address": null
  67. },
  68. {
  69. "id": 15,
  70. "organName": "",
  71. "parentId": null,
  72. "manager": "",
  73. "phone": "",
  74. "companyId": 1,
  75. "address": null
  76. },
  77. {
  78. "id": 16,
  79. "organName": "21212",
  80. "parentId": null,
  81. "manager": "",
  82. "phone": "",
  83. "companyId": 1,
  84. "address": null
  85. },
  86. {
  87. "id": 17,
  88. "organName": "2131314",
  89. "parentId": null,
  90. "manager": "",
  91. "phone": "",
  92. "companyId": 1,
  93. "address": null
  94. },
  95. {
  96. "id": 18,
  97. "organName": "q313",
  98. "parentId": 2,
  99. "manager": "",
  100. "phone": "",
  101. "companyId": 1,
  102. "address": null
  103. },
  104. {
  105. "id": 19,
  106. "organName": "8888",
  107. "parentId": 1,
  108. "manager": "11",
  109. "phone": "",
  110. "companyId": 1,
  111. "address": null
  112. },
  113. {
  114. "id": 20,
  115. "organName": "21",
  116. "parentId": 1,
  117. "manager": "12",
  118. "phone": "21",
  119. "companyId": 1,
  120. "address": null
  121. },
  122. {
  123. "id": 21,
  124. "organName": "wwww",
  125. "parentId": 1,
  126. "manager": "www",
  127. "phone": "13661725475",
  128. "companyId": 1,
  129. "address": null
  130. },
  131. {
  132. "id": 22,
  133. "organName": "1313",
  134. "parentId": 1,
  135. "manager": "313",
  136. "phone": "31",
  137. "companyId": 1,
  138. "address": null
  139. },
  140. {
  141. "id": 23,
  142. "organName": "test",
  143. "parentId": 1,
  144. "manager": "zs",
  145. "phone": "",
  146. "companyId": 1,
  147. "address": null
  148. },
  149. {
  150. "id": 24,
  151. "organName": "test_01",
  152. "parentId": 23,
  153. "manager": "zs",
  154. "phone": "",
  155. "companyId": 1,
  156. "address": null
  157. },
  158. {
  159. "id": 25,
  160. "organName": "w121",
  161. "parentId": 1,
  162. "manager": "212",
  163. "phone": "212",
  164. "companyId": 1,
  165. "address": null
  166. }
  167. ]
  168. }

3:
test.vue

  1. <template>
  2. <div>
  3. <el-col :span="6">
  4. <div class="ztree">
  5. <el-tree
  6. :data="treeData"
  7. show-checkbox
  8. default-expand-all
  9. node-key="id"
  10. ref="tree"
  11. highlight-current
  12. :props="defaultProps"
  13. @node-click="nodeClickHandler"
  14. @check="checkHandler"
  15. :render-content="renderContent"
  16. >
  17. </el-tree>
  18. </div>
  19. </el-col>
  20. </div>
  21. </template>
  22. <script>
  23. //调用接口
  24. // import { deleteSubject } from "@/api/data/organ";
  25. export default {
  26. data() {
  27. return {
  28. setTree: [],
  29. defaultProps: {
  30. children: "children",
  31. label: "organName",
  32. },
  33. treeData: [],
  34. organList: [],
  35. };
  36. },
  37. created() {
  38. //加载部门管理节点接口定义
  39. this.getQuerycheckList();
  40. },
  41. methods: {
  42. renderContent(h, { node, data, store }) {
  43. console.log(data);
  44. return (
  45. <span
  46. class="custom-tree-node"
  47. on-mouseenter={() => (data.isHover = true)}
  48. on-mouseleave={() => (data.isHover = false)}
  49. >
  50. <span>{data.organName}</span>
  51. {data.parentId !== 0 && data.isHover && (
  52. <i
  53. class="el-icon-error danger"
  54. on-click={(e) => {
  55. e.stopPropagation();
  56. this.remove(node, data);
  57. }}
  58. ></i>
  59. )}
  60. </span>
  61. );
  62. },
  63. remove(node, data) {
  64. this.$confirm("此操作将永久删除该条目, 是否继续?", "提示", {
  65. confirmButtonText: "确定",
  66. cancelButtonText: "取消",
  67. type: "warning",
  68. })
  69. .then(() => {
  70. this.handleDelete(null, data);
  71. if (data.parentId === 0) {
  72. return;
  73. }
  74. const parent = node.parent;
  75. const children = parent.data.children || parent.data;
  76. const index = children.findIndex((d) => d.id === data.id);
  77. children.splice(index, 1);
  78. // 发请求删除
  79. this.$message({
  80. type: "success",
  81. message: "删除成功!",
  82. });
  83. })
  84. .catch(() => {
  85. this.$message({
  86. type: "info",
  87. message: "已取消删除",
  88. });
  89. });
  90. },
  91. //勾选
  92. checkHandler(...value) {
  93. console.log(value[1]);
  94. console.log(value[1].checkedNodes.map((a) => a.organName));
  95. },
  96. //部门管理节点接口定义
  97. getQuerycheckList() {
  98. const params = {};
  99. this.dataLoading = true;
  100. import("./mock").then((res) => {
  101. this.setTree = res.data;
  102. this.organList = res.data.map((a) => ({
  103. label: a.organName,
  104. value: a.id,
  105. }));
  106. this.getListData();
  107. this.dataLoading = false;
  108. });
  109. },
  110. //对json的格式的转化
  111. getListData() {
  112. let dataArray = [];
  113. this.setTree.forEach(function (data) {
  114. let parentId = data.parentId;
  115. if (parentId === 0) {
  116. let objTemp = {
  117. id: data.id,
  118. organName: data.organName,
  119. manager: data.manager,
  120. phone: data.manager,
  121. parentId: parentId,
  122. };
  123. dataArray.push(objTemp);
  124. }
  125. });
  126. this.treeData = this.data2treeDG(this.setTree, dataArray);
  127. },
  128. data2treeDG(datas, dataArray) {
  129. for (let j = 0; j < dataArray.length; j++) {
  130. let dataArrayIndex = dataArray[j];
  131. let childrenArray = [];
  132. let Id = dataArrayIndex.id;
  133. for (let i = 0; i < datas.length; i++) {
  134. let data = datas[i];
  135. let parentId = data.parentId;
  136. if (parentId == Id) {
  137. //判断是否为儿子节点
  138. let objTemp = {
  139. id: data.id,
  140. organName: data.organName,
  141. manager: data.manager,
  142. phone: data.phone,
  143. parentId: parentId,
  144. isHover: false,
  145. };
  146. childrenArray.push(objTemp);
  147. }
  148. }
  149. dataArrayIndex.children = childrenArray;
  150. if (childrenArray.length > 0) {
  151. //有儿子节点则递归
  152. this.data2treeDG(datas, childrenArray);
  153. }
  154. }
  155. return dataArray;
  156. },
  157. //调用删除接口
  158. handleDelete(index, row) {
  159. const params = {
  160. id: row.id,
  161. };
  162. this.dataLoading = true;
  163. deleteSubject(params).then((res) => {
  164. this.$notify({
  165. message: "删除成功",
  166. type: "success",
  167. duration: 2000,
  168. });
  169. this.getQuerycheckList();
  170. console.log(this.pvData);
  171. this.dataLoading = false;
  172. });
  173. },
  174. nodeClickHandler(...rest) {
  175. console.log(rest);
  176. this.form = rest[0];
  177. },
  178. },
  179. };
  180. </script>
  181. <style lang="scss">
  182. .danger {
  183. color: red;
  184. }
  185. </style>

渲染:

5d4b40ed78341a837bc2e43a8a873d22.gif

往期干货:

26个经典微信小程序+35套微信小程序源码+微信小程序合集源码下载(免费)

干货:2021最新前端学习视频~~速度领取

发表评论

表情:
评论列表 (有 0 条评论,469人围观)

还没有评论,来说两句吧...

相关阅读