|
|
@@ -0,0 +1,69 @@
|
|
|
+<template>
|
|
|
+ <avue-crud v-bind="bindVal" v-on="onEvent" v-model="form"> </avue-crud>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+export default window.$crudCommon(
|
|
|
+ {
|
|
|
+ props: {
|
|
|
+ yearAndMonth: [String, Number],
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ yearAndMonth() {
|
|
|
+ this.loadData();
|
|
|
+ },
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ buildTree(flatList, options = {}) {
|
|
|
+ const {
|
|
|
+ idKey = 'id', // 节点ID的键名
|
|
|
+ parentKey = 'parentId', // 父节点ID的键名
|
|
|
+ childrenKey = 'children' // 子节点列表的键名
|
|
|
+ } = options;
|
|
|
+
|
|
|
+ const nodeMap = {}; // 用于快速查找节点的映射表
|
|
|
+ const tree = []; // 最终生成的树
|
|
|
+
|
|
|
+ // 第一次遍历:创建所有节点的映射
|
|
|
+ flatList.forEach(node => {
|
|
|
+ nodeMap[node[idKey]] = {
|
|
|
+ ...node,
|
|
|
+ [childrenKey]: []
|
|
|
+ };
|
|
|
+ });
|
|
|
+
|
|
|
+ // 第二次遍历:构建父子关系
|
|
|
+ flatList.forEach(node => {
|
|
|
+ const parentId = node[parentKey];
|
|
|
+ if (parentId !== null && parentId !== undefined && nodeMap[parentId]) {
|
|
|
+ // 如果有父节点,则将当前节点添加到父节点的children中
|
|
|
+ nodeMap[parentId][childrenKey].push(nodeMap[node[idKey]]);
|
|
|
+ } else {
|
|
|
+ // 如果没有父节点或父节点不存在,则作为根节点
|
|
|
+ tree.push(nodeMap[node[idKey]]);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ return tree;
|
|
|
+ },
|
|
|
+ loadData() {
|
|
|
+ this.loading = true;
|
|
|
+ this.api[this.option.list || "getList"](
|
|
|
+ { yearAndMonth: this.yearAndMonth }
|
|
|
+ ).then(({ data }) => {
|
|
|
+ console.log(this.buildTree(data.data))
|
|
|
+ this.data = this.buildTree(data.data);
|
|
|
+ this.loading = false;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // getSearchParams() {
|
|
|
+ // return { yearAndMonth: this.yearAndMonth };
|
|
|
+ // },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ // 模块路径
|
|
|
+ name: "basicResource/compDeptList",
|
|
|
+ }
|
|
|
+);
|
|
|
+</script>
|