|
@@ -8,21 +8,21 @@
|
|
|
</template>
|
|
|
<template v-if="isTreeMode === 1">
|
|
|
<hc-lazy-tree
|
|
|
- v-if="isShow" :root-menu="treeMenuRoot" is-load-menu :h-props="treeProps" tree-key="id"
|
|
|
- @load-menu="treeLazyMenu" @load="treeLoadNode" @node-tap="treeNodeTap" @menu-tap="treeMenuClick"
|
|
|
+ v-if="isShow" ref="treeRef1" is-load-menu :h-props="treeProps" tree-key="id"
|
|
|
+ @load-menu="treeMenu" @load="treeLoadNode" @node-tap="treeNodeTap" @menu-tap="treeMenuClick"
|
|
|
>
|
|
|
<template #name="{ data }">
|
|
|
- <span class="text-16px font-400">{{ data.name }}</span>
|
|
|
+ <span class="text-16px font-400">{{ data.title }}</span>
|
|
|
</template>
|
|
|
</hc-lazy-tree>
|
|
|
</template>
|
|
|
<template v-if="isTreeMode === 2">
|
|
|
<hc-data-tree
|
|
|
- ref="treeRef" :root-menu="treeMenuRoot" is-load-menu :h-props="treeProps" tree-key="id" :datas="treeData"
|
|
|
- @load-menu="treeDataMenu" @node-tap="treeNodeTap" @menu-tap="treeMenuClick"
|
|
|
+ ref="treeRef2" is-load-menu :h-props="treeProps" tree-key="id" :datas="treeData"
|
|
|
+ @load-menu="treeMenu" @node-tap="treeNodeTap" @menu-tap="treeMenuClick"
|
|
|
>
|
|
|
<template #name="{ data }">
|
|
|
- <span class="text-16px font-400">{{ data.name }}</span>
|
|
|
+ <span class="text-16px font-400">{{ data.title }}</span>
|
|
|
</template>
|
|
|
</hc-data-tree>
|
|
|
</template>
|
|
@@ -36,10 +36,9 @@
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
-import { getArrValue, isNullES } from 'js-fast-way'
|
|
|
import { ref, watch } from 'vue'
|
|
|
-import { useAppStore } from '~src/store'
|
|
|
-import mainApi from '~api/exctab/exceltab'
|
|
|
+import { getArrValue, isNullES } from 'js-fast-way'
|
|
|
+import mainApi from '~api/project/tree'
|
|
|
|
|
|
const props = defineProps({
|
|
|
data: {
|
|
@@ -50,7 +49,6 @@ const props = defineProps({
|
|
|
|
|
|
//事件
|
|
|
const emit = defineEmits(['close'])
|
|
|
-const store = useAppStore()
|
|
|
|
|
|
//双向绑定
|
|
|
const isShow = defineModel('modelValue', {
|
|
@@ -82,63 +80,29 @@ const searchTreeNameClick = async () => {
|
|
|
} else {
|
|
|
isTreeMode.value = 2
|
|
|
await getTreeAllData()
|
|
|
- treeRef.value?.treeRef?.filter(searchTreeName.value)
|
|
|
+ treeRef2.value?.treeRef?.filter(searchTreeName.value)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//树配置
|
|
|
-const treeRef = ref(null)
|
|
|
+const treeRef1 = ref(null)
|
|
|
+const treeRef2 = ref(null)
|
|
|
const treeProps = {
|
|
|
- label: 'name',
|
|
|
+ label: 'title',
|
|
|
children: 'children',
|
|
|
- isLeaf: (item) => {
|
|
|
- return !item.hasChildren
|
|
|
- },
|
|
|
+ isLeaf: 'hasChildren',
|
|
|
}
|
|
|
|
|
|
-//树菜单根节点
|
|
|
-const treeMenuRoot = [
|
|
|
- { icon: 'add-circle', label: '新增', key: 'add' },
|
|
|
- { icon: 'delete-bin', label: '删除', key: 'del' },
|
|
|
-]
|
|
|
-
|
|
|
//懒加载树的菜单
|
|
|
-const treeLazyMenu = ({ item, level }, resolve) => {
|
|
|
+const treeMenu = ({ level }, resolve) => {
|
|
|
let newMenu = []
|
|
|
- if (item.fileType !== 3) {
|
|
|
- newMenu.push({ icon: 'add-circle', label: '新增', key: 'add' })
|
|
|
- }
|
|
|
- if (item.fileType !== 1) {
|
|
|
- newMenu.push({ icon: 'draft', label: '编辑', key: 'edit' })
|
|
|
- }
|
|
|
if (level !== 1) {
|
|
|
- newMenu.push({ icon: 'sort-asc', label: '排序', key: 'sort' })
|
|
|
- }
|
|
|
- if (item.fileType !== 3) {
|
|
|
- newMenu.push({ icon: 'file-upload', label: '上传', key: 'upload' })
|
|
|
- }
|
|
|
- newMenu.push({ icon: 'delete-bin', label: '删除', key: 'del' })
|
|
|
- resolve(newMenu)
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-//全加载树的菜单
|
|
|
-const treeDataMenu = ({ node, item, level }, resolve) => {
|
|
|
- const { isLeaf } = node
|
|
|
- let newMenu = []
|
|
|
- if (item.fileType !== 3) {
|
|
|
newMenu.push({ icon: 'add-circle', label: '新增', key: 'add' })
|
|
|
- }
|
|
|
- if (item.fileType !== 1) {
|
|
|
newMenu.push({ icon: 'draft', label: '编辑', key: 'edit' })
|
|
|
+ newMenu.push({ icon: 'collapse-vertical', label: '排序', key: 'sort' })
|
|
|
+ newMenu.push({ icon: 'delete-bin', label: '删除', key: 'del' })
|
|
|
}
|
|
|
- if (isLeaf) {
|
|
|
- newMenu.push({ icon: 'sort-asc', label: '排序', key: 'sort' })
|
|
|
- }
|
|
|
- if (level !== 1) {
|
|
|
- newMenu.push({ icon: 'file-upload', label: '上传', key: 'upload' })
|
|
|
- }
|
|
|
- newMenu.push({ icon: 'delete-bin', label: '删除', key: 'del' })
|
|
|
+ newMenu.push({ icon: 'refresh', label: '同步', key: 'sync' })
|
|
|
resolve(newMenu)
|
|
|
}
|
|
|
|
|
@@ -159,9 +123,8 @@ const pseudoRefresh = () => {
|
|
|
//全加载树
|
|
|
const treeData = ref([])
|
|
|
const getTreeAllData = async () => {
|
|
|
- const { data } = await mainApi.tabLazyTreeAll({
|
|
|
- modeId: dataInfo.value.id,
|
|
|
- name: '',
|
|
|
+ const { data } = await mainApi.allTree({
|
|
|
+ projectId: dataInfo.value.id,
|
|
|
})
|
|
|
treeData.value = getArrValue(data)
|
|
|
}
|
|
@@ -169,11 +132,41 @@ const getTreeAllData = async () => {
|
|
|
//懒加载树
|
|
|
const treeLoadNode = async ({ item, level }, resolve) => {
|
|
|
const parentId = level === 0 ? 0 : item.id
|
|
|
- const { data } = await mainApi.tabLazyTree({
|
|
|
- parentId: parentId,
|
|
|
- modeId: dataInfo.value.id,
|
|
|
+ if (level === 0) {
|
|
|
+ const arr = await lazyNodeTree(parentId)
|
|
|
+ if (arr.length) {
|
|
|
+ resolve(arr)
|
|
|
+ } else {
|
|
|
+ resolve(await archiveTreeInit())
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ resolve(await lazyNodeTree(parentId))
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//懒加载树接口
|
|
|
+const lazyNodeTree = async (id) => {
|
|
|
+ const { data } = await mainApi.lazyTree({
|
|
|
+ parentId: id,
|
|
|
+ projectId: dataInfo.value.id,
|
|
|
})
|
|
|
- resolve(getArrValue(data))
|
|
|
+ const res = getArrValue(data)
|
|
|
+ for (let i = 0; i < res.length; i++) {
|
|
|
+ res[i].hasChildren = !res[i].hasChildren
|
|
|
+ }
|
|
|
+ return res
|
|
|
+}
|
|
|
+
|
|
|
+//初始化根节点
|
|
|
+const archiveTreeInit = async () => {
|
|
|
+ const { data } = await mainApi.treeInit({
|
|
|
+ projectId: dataInfo.value.id,
|
|
|
+ })
|
|
|
+ const res = getArrValue(data)
|
|
|
+ for (let i = 0; i < res.length; i++) {
|
|
|
+ res[i].hasChildren = !res[i].hasChildren
|
|
|
+ }
|
|
|
+ return res
|
|
|
}
|
|
|
|
|
|
//树节点被点击
|