This commit is contained in:
2023-06-19 19:51:12 +08:00
parent 57c772a913
commit fc5d2c44ea
12 changed files with 275 additions and 59 deletions

View File

@@ -0,0 +1,15 @@
import { request } from "@/api/request"
export default {
/**
* 根据项目id、round信息请求dut
* @returns dut数据
*/
getDutList(params = {}) {
return request({
url: `project/getDutList`,
method: "get",
params
})
}
}

View File

@@ -11,6 +11,21 @@ export default {
method: "get" method: "get"
}) })
}, },
/**
* 根据项目名、树节点等级和key查找被测件
* @returns 被测件
*/
getDutInfo(projectId, key, level) {
return request({
url: `project/getDutInfo`,
method: "get",
params: {
projectId: projectId,
key: key,
level: level
}
})
},
/** /**
* 根据项目名、树节点等级和key查找设计需求 * 根据项目名、树节点等级和key查找设计需求
* @returns 设计需求树状节点信息 * @returns 设计需求树状节点信息

View File

@@ -14,7 +14,7 @@
</a-space> </a-space>
</div> </div>
<div class="center-side flex items-center justify-center"> <div class="center-side flex items-center justify-center">
{{ title }} <template v-if="title"> 项目名称{{ title }} </template>
<Menu v-if="topMenu"></Menu> <Menu v-if="topMenu"></Menu>
</div> </div>
<ul class="right-side"> <ul class="right-side">

View File

@@ -8,8 +8,8 @@
<a-layout-sider class="layout-sider"> <a-layout-sider class="layout-sider">
<div class="p-2"> <div class="p-2">
<a-input-group class="mb-2 w-full flex items-center" size="mini"> <a-input-group class="mb-2 w-full flex items-center" size="mini">
<a-input style="height: 32px"></a-input> <a-input style="height: 32px" v-model="searchKey" allow-clear></a-input>
<a-button>搜索</a-button> <a-button @click="handleSearchTreeDataClick">搜索</a-button>
</a-input-group> </a-input-group>
<a-input-group class="mb-2 w-full flex items-center justify-between" size="mini"> <a-input-group class="mb-2 w-full flex items-center justify-between" size="mini">
<a-button class="w-1/2" type="primary">增加轮次</a-button> <a-button class="w-1/2" type="primary">增加轮次</a-button>
@@ -25,8 +25,7 @@
showLine showLine
ref="treeRef" ref="treeRef"
border border
:default-expand-selected="true" :default-selected-keys="[currentNode ? currentNode : route.query.key]"
:default-selected-keys="[route.query.key]"
></a-tree> ></a-tree>
</div> </div>
</a-layout-sider> </a-layout-sider>
@@ -47,67 +46,108 @@ import PageLayout from "@/layout/page-layout.vue"
import projectApi from "@/api/project/project" import projectApi from "@/api/project/project"
import { useRoute } from "vue-router" import { useRoute } from "vue-router"
import { useRouter } from "vue-router" import { useRouter } from "vue-router"
import { useTreeDataStore } from "@/store"
import { storeToRefs } from "pinia"
// 缩小后的menu菜单 // 缩小后的menu菜单
const drawerVisible = ref(false) const drawerVisible = ref(false)
provide("toggleDrawerMenu", () => { provide("toggleDrawerMenu", () => {
drawerVisible.value = !drawerVisible.value drawerVisible.value = !drawerVisible.value
}) })
// 搜索绑定与搜索按钮点击
const searchKey = ref("")
const handleSearchTreeDataClick = () => {
const loop = (itemdata) => {
const result = []
itemdata.forEach((item) => {
if (item.title.indexOf(searchKey.value) > -1) {
result.push({ ...item })
} else if (item.children) {
const filterdata = loop(item.children)
if (filterdata.length) {
result.push({
...item,
children: filterdata
})
}
}
})
return result
}
// 返回过滤后的treeData
// treeDataStore.originTreeData
if (searchKey.value) {
treeData.value = loop(treeDataStore.treeData)
} else {
treeData.value = treeDataStore.originTreeData
}
}
// 树状 // 树状
/// 初始化round轮次数据 /// 初始化round轮次数据
const treeDataStore = useTreeDataStore()
const route = useRoute() const route = useRoute()
const router = useRouter() const router = useRouter()
const treeRef = ref() const treeRef = ref()
const treeData = ref([]) const { treeData, currentNode } = storeToRefs(treeDataStore)
const projectInfo = ref({ ...route.query }) const projectInfo = ref({ ...route.query })
const projectId = ref(route.query.projectId) const projectId = ref(route.query.projectId)
onMounted(async () => { onMounted(async () => {
const roundData = await projectApi.getRoundInfo(projectId) treeDataStore.initTreeData(projectId)
treeData.value = roundData
}) })
/// 点击树状节点-参数1:节点数组参数2:树node对象 /// 点击树状节点-参数1:节点数组参数2:树node对象
const pointNode = (value, data) => { const pointNode = (value, data) => {
console.log(data.node) console.log(data.node);
if (data.node.level === "0") { if (data.node.level === "0") {
router.push({ name: "round", query: { ...projectInfo.value, key: data.node.key } }) router.push({ name: "round", query: { ...projectInfo.value, key: data.node.key } })
} }
if (data.node.level === "1") { if (data.node.level === "1") {
router.push({ name: "designDemand", query: { ...projectInfo.value, key: data.node.key } }) router.push({ name: "dut", query: { ...projectInfo.value, key: data.node.key } })
} }
if (data.node.level === "2") { if (data.node.level === "2") {
router.push({ name: "testDemand", query: { ...projectInfo.value, key: data.node.key } }) router.push({ name: "designDemand", query: { ...projectInfo.value, key: data.node.key } })
} }
if (data.node.level === "3") { if (data.node.level === "3") {
router.push({ name: "case", query: { ...projectInfo.value, key: data.node.key } }) router.push({ name: "testDemand", query: { ...projectInfo.value, key: data.node.key } })
} }
if (data.node.level === "4") { 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 } }) router.push({ name: "problem", query: { ...projectInfo.value, key: data.node.key } })
} }
treeDataStore.setCurrentNode(data.node.key)
} }
/// 动态加载函数-参数1:树node对象 /// 动态加载函数-参数1:树node对象
const loadMore = (nodeData) => { const loadMore = (nodeData) => {
console.log("动态加载的节点为:", nodeData) // 输出点击节点的key,以及添加上去的level属性 console.log("动态加载的节点为:", nodeData) // 输出点击节点的key,以及添加上去的level属性
if (nodeData.level == "0") { if (nodeData.level == "0") {
return new Promise(async (resolve) => { return new Promise(async (resolve) => {
const res = await projectApi.getDemandInfo(projectInfo.value.id, nodeData.key, nodeData.level) const res = await projectApi.getDutInfo(projectInfo.value.id, nodeData.key, nodeData.level)
nodeData.children = res nodeData.children = res
resolve() resolve()
}) })
} }
if (nodeData.level == "1") { if (nodeData.level == "1") {
return new Promise(async (resolve) => { return new Promise(async (resolve) => {
const res = await projectApi.getTestInfo(projectInfo.value.id, nodeData.key, nodeData.level) const res = await projectApi.getDemandInfo(projectInfo.value.id, nodeData.key, nodeData.level)
nodeData.children = res nodeData.children = res
resolve() resolve()
}) })
} }
if (nodeData.level == "2") { if (nodeData.level == "2") {
return new Promise(async (resolve) => { return new Promise(async (resolve) => {
const res = await projectApi.getCaseInfo(projectInfo.value.id, nodeData.key, nodeData.level) const res = await projectApi.getTestInfo(projectInfo.value.id, nodeData.key, nodeData.level)
nodeData.children = res nodeData.children = res
resolve() resolve()
}) })
} }
if (nodeData.level == "3") { if (nodeData.level == "3") {
return new Promise(async (resolve) => {
const res = await projectApi.getCaseInfo(projectInfo.value.id, nodeData.key, nodeData.level)
nodeData.children = res
resolve()
})
}
if (nodeData.level == "4") {
return new Promise(async (resolve) => { return new Promise(async (resolve) => {
const res = await projectApi.getProblemInfo(projectInfo.value.id, nodeData.key, nodeData.level) const res = await projectApi.getProblemInfo(projectInfo.value.id, nodeData.key, nodeData.level)
nodeData.children = res nodeData.children = res

View File

@@ -44,6 +44,17 @@ const router = createRouter({
icon: "icon-arrow-right" icon: "icon-arrow-right"
} }
}, },
{
path: "dut",
name: "dut",
component: () => import("@/views/project/dut/index.vue"),
meta: {
requiresAuth: true,
roles: ["*"],
locale: "被测件信息",
icon: "icon-arrow-right"
}
},
{ {
path: "designDemand", path: "designDemand",
name: "designDemand", name: "designDemand",

View File

@@ -6,15 +6,9 @@ import useTabBarStore from "./modules/tab-bar"
import useFormStore from "./modules/form" import useFormStore from "./modules/form"
import useKeepAliveStore from "./modules/keepAlive" import useKeepAliveStore from "./modules/keepAlive"
import useTagStore from "./modules/tag" import useTagStore from "./modules/tag"
import useTreeDataStore from "./project/treeData"
const pinia = createPinia() const pinia = createPinia()
export { export { useUserStore, useAppStore, useTabBarStore, useFormStore, useKeepAliveStore, useTagStore,useTreeDataStore }
useUserStore,
useAppStore,
useTabBarStore,
useFormStore,
useKeepAliveStore,
useTagStore,
}
export default pinia export default pinia

View File

@@ -0,0 +1,27 @@
import { defineStore } from "pinia"
import projectApi from "@/api/project/project"
const useTreeDataStore = defineStore("treeDataStore", {
state: () => {
return {
treeData: [],
originTreeData: [],
currentNode: undefined
}
},
actions: {
// 不能使用箭头函数无法绑定this
async initTreeData(projectId) {
if (this.treeData.length === 0) {
const roundData = await projectApi.getRoundInfo(projectId)
this.treeData = roundData
this.originTreeData = roundData
}
},
setCurrentNode(nodeKey) {
this.currentNode = nodeKey
}
}
})
export default useTreeDataStore

View File

@@ -14,14 +14,16 @@ import problemApi from "@/api/project/problem"
const route = useRoute() const route = useRoute()
const router = useRouter() const router = useRouter()
const roundNumber = route.query.key.split("-")[0] const roundNumber = route.query.key.split("-")[0]
const designDemandNumber = route.query.key.split("-")[1] const dutNumber = route.query.key.split("-")[1]
const testDemandNumber = route.query.key.split("-")[2] const designDemandNumber = route.query.key.split("-")[2]
const caseNumber = route.query.key.split("-")[3] const testDemandNumber = route.query.key.split("-")[3]
const caseNumber = route.query.key.split("-")[4]
const crudOptions = ref({ const crudOptions = ref({
api: problemApi.getProblemList, api: problemApi.getProblemList,
parameters: { parameters: {
projectId: route.query.id, projectId: route.query.id,
round: roundNumber, round: roundNumber,
dut: dutNumber,
designDemand: designDemandNumber, designDemand: designDemandNumber,
testDemand: testDemandNumber, testDemand: testDemandNumber,
case: caseNumber case: caseNumber
@@ -112,7 +114,7 @@ const crudOptions = ref({
{ span: 12, formList: [{ dataIndex: "revokePerson" }] }, { span: 12, formList: [{ dataIndex: "revokePerson" }] },
{ span: 12, formList: [{ dataIndex: "revokeDate" }] } { span: 12, formList: [{ dataIndex: "revokeDate" }] }
] ]
}, }
] ]
} }
}) })
@@ -270,7 +272,7 @@ const crudColumns = ref([
title: "设师上级", title: "设师上级",
hide: true, hide: true,
dataIndex: "designerPerson", dataIndex: "designerPerson",
commonRules: [{ required: true, message: "提单人必填" }], commonRules: [{ required: true, message: "提单人必填" }]
}, },
{ {
title: "提单日期", title: "提单日期",

View File

@@ -15,13 +15,15 @@ const route = useRoute()
const router = useRouter() const router = useRouter()
// 根据传参获取key分别为轮次、设计需求的key // 根据传参获取key分别为轮次、设计需求的key
const roundNumber = route.query.key.split("-")[0] const roundNumber = route.query.key.split("-")[0]
const designDemandNumber = route.query.key.split("-")[1] const dutNumber = route.query.key.split("-")[0]
const designDemandNumber = route.query.key.split("-")[2]
// crud组件 // crud组件
const crudOptions = ref({ const crudOptions = ref({
api: testDemandApi.getTestDemandList, api: testDemandApi.getTestDemandList,
parameters: { parameters: {
projectId: route.query.id, projectId: route.query.id,
round: roundNumber, round: roundNumber,
dut: dutNumber,
designDemand: designDemandNumber designDemand: designDemandNumber
}, },
showIndex: false, showIndex: false,

View File

@@ -0,0 +1,83 @@
<template>
<div class="ma-content-block lg:flex justify-between p-4">
<div class="lg:w-full w-full lg:ml-4 mt-5 lg:mt-0">
<!-- CRUD组件 -->
<ma-crud :options="crudOptions" :columns="crudColumns"></ma-crud>
</div>
</div>
</template>
<script setup>
import { ref } from "vue"
import { useRoute, useRouter } from "vue-router"
import designDemandApi from "@/api/project/designDemand"
const route = useRoute()
const router = useRouter()
const roundNumber = route.query.key.split("-")[0]
const dutNumber = route.query.key.split("-")[1]
// crud组件
const crudOptions = ref({
api: designDemandApi.getDesignDemandList,
parameters: {
projectId: route.query.id,
round: roundNumber,
dut: dutNumber
},
showIndex: false,
rowSelection: { showCheckedAll: true },
add: { show: true },
edit: { show: true },
delete: { show: true },
searchColNumber: 3,
tablePagination: true,
operationColumn: true,
formOption: {
width: 1200
}
})
const crudColumns = ref([
{
title: "ID",
width: 50,
dataIndex: "id",
search: true,
commonRules: [{ required: true, message: "标识是必填" }],
validateTrigger: "blur"
},
{
title: "标识",
width: 120,
dataIndex: "ident",
search: true,
commonRules: [{ required: true, message: "标识是必填" }],
validateTrigger: "blur"
},
{
title: "需求名称",
width: 150,
dataIndex: "name",
search: true,
commonRules: [{ required: true, message: "需求名称是必填" }],
validateTrigger: "blur"
},
{
title: "需求类型",
width: 150,
dataIndex: "demandType",
formType: "radio",
search: true,
dict: { name: "demandType", props: { label: "title", value: "key" }, translation: true },
commonRules: [{ required: true, message: "需求类型是必填" }],
validateTrigger: "blur"
},
{
title: "需求描述",
dataIndex: "description",
width: 300,
formType: "editor",
height: 300
}
])
</script>
<style lang="less" scoped></style>

View File

@@ -10,13 +10,13 @@
<script setup> <script setup>
import { ref } from "vue" import { ref } from "vue"
import { useRoute, useRouter } from "vue-router" import { useRoute, useRouter } from "vue-router"
import designDemandApi from "@/api/project/designDemand" import dutApi from "@/api/project/dut"
const route = useRoute() const route = useRoute()
const router = useRouter() const router = useRouter()
// crud组件 // crud组件
const crudOptions = ref({ const crudOptions = ref({
api: designDemandApi.getDesignDemandList, api: dutApi.getDutList,
parameters: { parameters: {
projectId: route.query.id, projectId: route.query.id,
round: route.query.key round: route.query.key
@@ -30,13 +30,14 @@ const crudOptions = ref({
tablePagination: true, tablePagination: true,
operationColumn: true, operationColumn: true,
formOption: { formOption: {
width: 1200 width: 500
} }
}) })
const crudColumns = ref([ const crudColumns = ref([
{ {
title: "ID", title: "ID",
width: 50, width: 50,
align:'center',
dataIndex: "id", dataIndex: "id",
search: true, search: true,
commonRules: [{ required: true, message: "标识是必填" }], commonRules: [{ required: true, message: "标识是必填" }],
@@ -44,37 +45,61 @@ const crudColumns = ref([
}, },
{ {
title: "标识", title: "标识",
width: 120, width: 150,
align:'center',
dataIndex: "ident", dataIndex: "ident",
search: true, search: true,
commonRules: [{ required: true, message: "标识是必填" }], commonRules: [{ required: true, message: "标识是必填" }],
validateTrigger: "blur" validateTrigger: "blur"
}, },
{ {
title: "需求名称", title: "被测件名",
width: 150, width: 120,
dataIndex: "name", dataIndex: "name",
search: true, search: true,
commonRules: [{ required: true, message: "需求名称是必填" }], commonRules: [{ required: true, message: "需求名称是必填" }],
validateTrigger: "blur" validateTrigger: "blur"
}, },
{ {
title: "需求类型", title:"空行",
width: 150, hide:true,
dataIndex: "demandType", align:'center',
formType: "radio", dataIndex:"black_line"
search: true,
dict: { name: "demandType", props: { label: "title", value: "key" }, translation: true },
commonRules: [{ required: true, message: "需求类型是必填" }],
validateTrigger: "blur"
}, },
{ {
title: "需求描述", title:"纯注释",
dataIndex: "description", hide:true,
width: 300, align:'center',
formType: "editor", dataIndex:"pure_code_line"
height: 300 },
} {
title:"混合行",
hide:true,
align:'center',
dataIndex:"mix_line"
},
{
title:"总注释",
hide:true,
align:'center',
dataIndex:"total_comment_line"
},
{
title:"总代码",
align:'center',
dataIndex:"total_code_line"
},
{
title:"总行数",
align:'center',
dataIndex:"total_line"
},
{
title:"注释率",
align:'center',
dataIndex:"comment_line",
commonRules: [{ required: true, message: "注释率必填" }],
},
]) ])
</script> </script>

View File

@@ -14,14 +14,16 @@ import caseApi from "@/api/project/case"
const route = useRoute() const route = useRoute()
const router = useRouter() const router = useRouter()
const roundNumber = route.query.key.split("-")[0] const roundNumber = route.query.key.split("-")[0]
const designDemandNumber = route.query.key.split("-")[1] const dutNumber = route.query.key.split("-")[1]
const testDemandNumber = route.query.key.split("-")[2] const designDemandNumber = route.query.key.split("-")[2]
const testDemandNumber = route.query.key.split("-")[3]
// crud设置 // crud设置
const crudOptions = ref({ const crudOptions = ref({
api: caseApi.getCaseList, api: caseApi.getCaseList,
parameters: { parameters: {
projectId: route.query.id, projectId: route.query.id,
round: roundNumber, round: roundNumber,
dut: dutNumber,
designDemand: designDemandNumber, designDemand: designDemandNumber,
testDemand: testDemandNumber testDemand: testDemandNumber
}, },