This commit is contained in:
2026-01-28 16:54:07 +08:00
parent ec972fac8e
commit a5abc874ab
9 changed files with 154 additions and 128 deletions

View File

@@ -131,5 +131,16 @@ export default {
method: "get",
params
})
},
/**
* 拖拽设计需求排序
* @returns
*/
switch_position(from_key, to_key, pos, project_id) {
return request({
url: "/project/switch_position",
method: "get",
params: { from_key, to_key, pos, project_id }
})
}
}

View File

@@ -3,9 +3,12 @@ import { storeToRefs } from "pinia"
import { Message, Notification } from "@arco-design/web-vue"
import caseApi from "@/api/project/case"
import { useTreeDataStore } from "@/store"
import designApi from "@/api/project/designDemand"
import { useRoute } from "vue-router"
export default function useTreeDrag(projectId, routeViewRef) {
// global
const route = useRoute()
const treeDataStore = useTreeDataStore()
const { treeData } = storeToRefs(treeDataStore)
// 闭包储存变量
@@ -19,15 +22,15 @@ export default function useTreeDrag(projectId, routeViewRef) {
const pao2Container = ref(null)
// a-tree -> 节点在可释放目标释放的操作 - drapNode是被拖拽的节点
// dropNone是释放在哪个节点下dropPosition是释放的位置-1,0...
const ondrop = ({ e, dragNode, dropNode, dropPosition }) => {
const data = treeData.value // 1.这是整体的树数据
// 提示用户只能拖拽用例节点
if (dragNode.level !== "4") {
Message.warning("只能拖拽用例节点")
const ondrop = async ({ e, dragNode, dropNode, dropPosition }) => {
const data = treeData.value // 这是整体的树数据
// 提示用户只能拖拽用例节点、设计需求节点
if (!["2", "4"].includes(dragNode.level)) {
Message.warning("只能拖拽用例节点、设计需求节点")
return
}
// 拖拽逻辑:
// 1.首先只能拖拽用例节点才能实现功能
// 1.用例节点拖拽
if (dragNode.level === "4") {
// 2.1.如果是拖拽到测试项节点下
if (dropNode.level === "3") {
@@ -58,10 +61,19 @@ export default function useTreeDrag(projectId, routeViewRef) {
dragDropPosition = dropPosition
}
}
// 2.设计需求节点拖拽-改变sort字段
if (dragNode.level === "2") {
// 如果位置为0即放在节点上不处理
if (dropPosition === 0) return
// 如果不为0则发出请求传key后端处理即可
const res = await designApi.switch_position(dragNode.key, dropNode.key, dropPosition, route.query.id)
// 最后更新树状目录
treeDataStore.updateDesignDemandTreeData({ key: res.data }, route.query.id)
}
}
// a-tree拖拽时是否允许在某级别节点上释放目前支持在测试项节点、测试用例节点释放
const allowdrop = (options) => {
if (options.dropNode.level === "4" || options.dropNode.level === "3") {
if (["4", "3", "2"].includes(options.dropNode.level)) {
return true
}
return false

View File

@@ -93,7 +93,7 @@ export default function useNodeClick(expandedKeys: Ref<string[]>) {
timerId && clearTimeout(timerId)
timerId = null
}
}, 250)
}, 250) as any
}
return {
selectedKeys,

View File

@@ -23,11 +23,7 @@
<a-tabs default-active-key="login-log" :animation="true">
<a-tab-pane key="login-log" title="登录日志" v-loading="isDataLoading">
<a-timeline class="pl-5 mt-3" v-if="loginLogList.length">
<a-timeline-item
:label="`IP地址${item.ip},操作系统:${item.os}`"
v-for="(item, idx) in loginLogList"
:key="idx"
>
<a-timeline-item :label="`IP地址${item.ip},操作系统:${item.os}`" v-for="(item, idx) in loginLogList" :key="idx">
您于 {{ item.create_datetime }} 登录系统浏览器{{ item.browser }}
</a-timeline-item>
</a-timeline>

View File

@@ -71,7 +71,6 @@ const route = useRoute()
const problemFormRef = ref(null)
const title = ref("问题单表单")
const crudRef = ref()
// 2025年5月新增
const replaceModal = ref()
const handleReplaceClick = () => {