productCassificationTree.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <template>
  2. <div class="bg-white m-4 mr-0 overflow-hidden">
  3. <a-spin :spinning="loading">
  4. <!--组织机构树-->
  5. <a-tree
  6. v-if="!treeReloading"
  7. title="分类列表"
  8. toolbar
  9. search
  10. :checkStrictly="true"
  11. :clickRowToExpand="false"
  12. :treeData="treeData"
  13. :replaceFields="{ key: 'id', title: 'name' }"
  14. :selectedKeys="selectedKeys"
  15. :expandedKeys="expandedKeys"
  16. :autoExpandParent="autoExpandParent"
  17. @select="onSelect"
  18. @expand="onExpand"
  19. >
  20. </a-tree>
  21. </a-spin>
  22. </div>
  23. </template>
  24. <script lang="ts" setup>
  25. import { inject, nextTick, ref ,onMounted} from 'vue';
  26. import { useMessage } from '/@/hooks/web/useMessage';
  27. import { listTree} from './api/productCassification.api';
  28. const prefixCls = inject('prefixCls');
  29. const emit = defineEmits(['select']);
  30. const { createMessage } = useMessage();
  31. let loading = ref<boolean>(false);
  32. // 部门树列表数据
  33. let treeData = ref<any[]>([]);
  34. // 当前展开的项
  35. let expandedKeys = ref<any[]>([]);
  36. // 当前选中的项
  37. let selectedKeys = ref<any[]>([]);
  38. // 是否自动展开父级
  39. let autoExpandParent = ref<boolean>(true);
  40. // 用户身份
  41. let userIdentity = ref<string>('2');
  42. // 树组件重新加载
  43. let treeReloading = ref<boolean>(false);
  44. onMounted(() => {
  45. loadDepartTreeData();
  46. });
  47. // 加载信息
  48. async function loadDepartTreeData() {
  49. loading.value = true;
  50. treeData.value = [];
  51. listTree({pageSize:-1})
  52. .then((res) => {
  53. if (Array.isArray(res)) {
  54. treeData.value[0] = {id:'0',name:'基本分类(Basic Classification)',children:[]};
  55. treeData.value[0].children = res;
  56. expandedKeys.value=['0']
  57. // autoExpandParentNode();
  58. }
  59. })
  60. .finally(() => (loading.value = false));
  61. }
  62. // 自动展开父节点,只展开一级
  63. function autoExpandParentNode() {
  64. expandedKeys.value=['0']
  65. // let keys: Array<any> = [];
  66. // treeData.value.forEach((item, index) => {
  67. // if (item.children && item.children.length > 0) {
  68. // keys.push(item.id);
  69. // }
  70. // });
  71. // if (keys.length > 0) {
  72. // reloadTree();
  73. // expandedKeys.value = keys;
  74. // }
  75. }
  76. // 重新加载树组件,防止无法默认展开数据
  77. async function reloadTree() {
  78. await nextTick();
  79. treeReloading.value = true;
  80. await nextTick();
  81. treeReloading.value = false;
  82. }
  83. // 树选择事件
  84. function onSelect(selKeys, event) {
  85. if (selKeys.length > 0 && selectedKeys.value[0] !== selKeys[0]) {
  86. emit('select', selKeys[0]);
  87. }
  88. }
  89. // 树展开事件
  90. async function onExpand(keys,event) {
  91. expandedKeys.value = keys;
  92. autoExpandParent.value = false;
  93. }
  94. defineExpose({
  95. loadDepartTreeData
  96. });
  97. </script>
  98. <style lang="less" scoped>
  99. /*升级antd3后,查询框与树贴的太近,样式优化*/
  100. :deep(.jeecg-tree-header) {
  101. margin-bottom: 6px;
  102. }
  103. </style>