productCassificationTree.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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([]);
  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. await listTree({pageSize:-1})
  51. .then((res) => {
  52. if (Array.isArray(res)) {
  53. treeData.value[0] = {id:'0',name:'基本分类(Basic Classification)',children:[]};
  54. treeData.value[0].children = res;
  55. autoExpandParentNode();
  56. }
  57. })
  58. .finally(() => (loading.value = false));
  59. }
  60. // 自动展开父节点,只展开一级
  61. function autoExpandParentNode() {
  62. reloadTree();
  63. expandedKeys.value = ['0']
  64. }
  65. // 重新加载树组件,防止无法默认展开数据
  66. async function reloadTree() {
  67. await nextTick();
  68. treeReloading.value = true;
  69. await nextTick();
  70. treeReloading.value = false;
  71. }
  72. // 树选择事件
  73. function onSelect(selKeys, event) {
  74. if (selKeys.length > 0 && selectedKeys.value[0] !== selKeys[0]) {
  75. emit('select', selKeys[0]);
  76. }
  77. }
  78. // 树展开事件
  79. async function onExpand(keys,event) {
  80. expandedKeys.value = keys;
  81. autoExpandParent.value = false;
  82. }
  83. defineExpose({
  84. loadDepartTreeData
  85. });
  86. </script>
  87. <style lang="less" scoped>
  88. /*升级antd3后,查询框与树贴的太近,样式优化*/
  89. :deep(.jeecg-tree-header) {
  90. margin-bottom: 6px;
  91. }
  92. </style>