import { Ref, ref } from "vue" import projectApi from "@/api/project/project" import { useRoute } from "vue-router" import { useTreeDataStore } from "@/store" import { storeToRefs } from "pinia" import { useRouter } from "vue-router" // 导入组件用于类型 import type { DutSubFormInstance } from "@/views/project/round/DutSubForm" import type { DesignSubFormInstance } from "@/views/project/dut/DesignSubForm" import type { DemandSubFormInstance } from "@/views/project/design-demand/DemandSubForm" import type { CaseSubFormInstance } from "@/views/project/testDemand/CaseSubForm" export default function useNodeClick(expandedKeys: Ref) { // global const route = useRoute() const projectInfo = ref({ ...route.query }) const treeDataStore = useTreeDataStore() const { treeData } = storeToRefs(treeDataStore) const router = useRouter() // variable let timerId: number | null = null let count = 0 // refs const selectedKeys = ref([]) // 中间变量用于判断 const previousKey = ref() // 上一次点击 // SubFormRefs const dutSubFormRef = ref(null) const designSubFormRef = ref(null) const testDemandSubFormRef = ref(null) const caseSubFormRef = ref(null) // 点击节点事件 const pointNode = (value: any, data: any) => { // 获取处理单击不选中,双击选中的变量 let catch_selected_key = selectedKeys.value selectedKeys.value = previousKey.value count++ if (timerId) { return } timerId = setTimeout(async () => { if (count > 1) { // 双击触发 value是点击的节点,data是节点数据 if (data.node.level == "0") { projectApi.getDutInfo(projectInfo.value.id, data.node.key, data.node.level).then((res: any) => { ;(treeData.value[value] as any).children = res.data // 添加需要展开数据,注意不要一直push,判断在已展开节点是否包含点击的节点 if (!expandedKeys.value.includes(value[0])) { expandedKeys.value.push(value[0]) } }) } if (data.node.level == "1") { // 打开弹窗 dutSubFormRef.value!.open(data.node) } if (data.node.level == "2") { designSubFormRef.value!.open(data.node) } if (data.node.level == "3") { testDemandSubFormRef.value!.open(data.node) } if (data.node.level == "4") { caseSubFormRef.value!.open(data.node) } count = 0 if (timerId) clearTimeout(timerId) timerId = null } else { // 单击触发 if (data.node.level === "0") { router.push({ name: "round", query: { ...projectInfo.value, key: data.node.key } }) } if (data.node.level === "1") { router.push({ name: "dut", query: { ...projectInfo.value, key: data.node.key } }) } if (data.node.level === "2") { router.push({ name: "designDemand", query: { ...projectInfo.value, key: data.node.key } }) } if (data.node.level === "3") { router.push({ name: "testDemand", query: { ...projectInfo.value, key: data.node.key } }) } if (data.node.level === "4") { router.push({ name: "case", query: { ...projectInfo.value, key: data.node.key } }) } // if (data.node.level === "5") { // router.push({ name: "problem", query: { ...projectInfo.value, key: data.node.key } }) // } treeDataStore.setCurrentNode(data.node.key) // 单击设置选择的key selectedKeys.value = catch_selected_key // 单击后设置previous选中的key是什么 previousKey.value = catch_selected_key count = 0 timerId && clearTimeout(timerId) timerId = null } }, 250) } return { selectedKeys, pointNode, dutSubFormRef, designSubFormRef, testDemandSubFormRef, caseSubFormRef } }