完成大纲生成进度条

This commit is contained in:
2024-03-05 16:28:47 +08:00
parent 89fc1102f9
commit f85613f1e6
17 changed files with 704 additions and 48 deletions

View File

@@ -6,18 +6,47 @@
<template #ident="{ record }">
{{ showType(record) }}
</template>
<!-- 表格前置扩展槽:添加关联按钮 -->
<template #tableAfterButtons>
<a-button type="outline" status="warning" @click="handleOpenRelationCSX">
<template #icon>
<icon-tags />
</template>
关联测试项
</a-button>
</template>
</ma-crud>
</div>
<!-- 关联的modal组件 -->
<a-modal v-model:visible="visible" width="700px" draggable :on-before-ok="handleRelatedOk">
<template #title>关联测试项</template>
<div class="pb-3">已存在的关联项:</div>
<a-typography-paragraph>
<ol class="ol-reset">
<li v-for="item in computedRelatedData">{{ item }}</li>
</ol>
</a-typography-paragraph>
<div class="pb-3">选择关联的测试需求项:</div>
<a-cascader
:options="options"
multiple
allow-search
placeholder="暂无关联测试项,请选择..."
:loading="cascaderLoading"
v-model:model-value="relatedData"
/>
</a-modal>
</div>
</template>
<script setup>
import { ref } from "vue"
import { ref, computed } from "vue"
import { useRoute, useRouter } from "vue-router"
import testDemandApi from "@/api/project/testDemand"
import { useTreeDataStore } from "@/store"
import commonApi from "@/api/common"
import PinYinMatch from "pinyin-match"
import { Message } from "@arco-design/web-vue"
const treeDataStore = useTreeDataStore()
const route = useRoute()
@@ -28,6 +57,79 @@ const roundNumber = route.query.key.split("-")[0]
const dutNumber = route.query.key.split("-")[1]
const designDemandNumber = route.query.key.split("-")[2]
const projectId = ref(route.query.id)
// ~~~~~关联相关变量和函数~~~~~
// 定义关联弹窗变量函数
const visible = ref(false)
const relatedData = ref([])
const computedRelatedData = computed(() => {
const labelResultList = []
options.value.forEach((item) => {
if (item.children) {
item.children.forEach((child) => {
if (relatedData.value.includes(child.value)) {
labelResultList.push(child.label)
}
})
}
})
return labelResultList
})
// 定义cascader的加载圈
const cascaderLoading = ref(false)
// 点击关联测试项-button
const handleOpenRelationCSX = async () => {
// 请求接口获取数据
cascaderLoading.value = true
visible.value = true
// 点击进入时清除关联
relatedData.value = []
const res = await testDemandApi.getRelatedTestDemand({ id: projectId.value, round: roundNumber })
options.value = res.data
// 找出本设计需求design对应已关联的测试项
const res_exist = await testDemandApi.getExistRelatedTestDemand({
project_id: projectId.value,
roundNumber,
dutNumber,
designDemandNumber
})
relatedData.value = res_exist.data
cascaderLoading.value = false
}
// 点击关联确定按钮
const handleRelatedOk = async () => {
// 获取级联数据
const relationDestItemIds = relatedData.value
if (relationDestItemIds.length > 0) {
const res = await testDemandApi.solveRelatedTestDemand({
data: relationDestItemIds,
project_id: projectId.value,
roundNumber,
dutNumber,
designDemandNumber
})
if (res.code == 200) {
Message.success(res.message)
return true
}
} else {
const res = await testDemandApi.solveRelatedTestDemand({
data: [],
project_id: projectId.value,
roundNumber,
dutNumber,
designDemandNumber
})
if (res.code == 200) {
Message.success(res.message)
return true
}
}
return false
}
// 级联cascade组件options
const options = ref([])
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 标识显示字段
const testTypeDict = ref([])
!(function () {
@@ -52,7 +154,7 @@ const crudOptions = ref({
edit: { show: true, api: testDemandApi.update },
delete: { show: true, api: testDemandApi.delete },
beforeOpenAdd: function () {
let key_split = route.query.key.split("-")
let key_split = route.query.key.split("-")
let round_key = key_split[0]
let dut_key = key_split[1]
let design_key = key_split[2]
@@ -61,7 +163,7 @@ const crudOptions = ref({
return true
},
beforeOpenEdit: function (record) {
let key_split = route.query.key.split("-")
let key_split = route.query.key.split("-")
let round_key = key_split[0]
let dut_key = key_split[1]
let design_key = key_split[2]
@@ -216,4 +318,8 @@ const crudColumns = ref([
])
</script>
<style lang="less" scoped></style>
<style lang="less" scoped>
.ol-reset {
list-style: auto;
}
</style>

View File

@@ -50,7 +50,7 @@ const crudOptions = ref({
delete: { show: true, api: designDemandApi.delete },
// 处理添加后函数
beforeOpenAdd: function () {
let key_split = route.query.key.split("-")
let key_split = route.query.key.split("-")
let round_key = key_split[0]
let dut_key = key_split[1]
let td = treeDataStore.treeData
@@ -58,7 +58,7 @@ const crudOptions = ref({
return true
},
beforeOpenEdit: function (record) {
let key_split = route.query.key.split("-")
let key_split = route.query.key.split("-")
let round_key = key_split[0]
let dut_key = key_split[1]
let td = treeDataStore.treeData
@@ -98,7 +98,7 @@ const crudColumns = ref([
align: "center",
width: 50,
dataIndex: "id",
commonRules: [{ required: true, message: "标识是必填" }],
commonRules: [{ required: true, message: "ID必填" }],
validateTrigger: "blur"
},
{

View File

@@ -100,7 +100,8 @@ const beiceType = [
{ label: "源代码", value: "SO" },
{ label: "设计说明", value: "SJ" },
{ label: "需求文档", value: "XQ" },
{ label: "通信协议", value: "XY" }
{ label: "通信协议", value: "XY" },
{ label: "研制总要求", value: "YZ" }
]
const crudColumns = ref([
@@ -135,7 +136,7 @@ const crudColumns = ref([
dict: {
data: beiceType,
translation: true,
tagColors: { XQ: "blue", SO: "green", SJ: "orangered", XY: "pinkpurple" }
tagColors: { XQ: "blue", SO: "green", SJ: "orangered", XY: "pinkpurple",YZ:"red" }
},
control: (value, data) => {
if (value === "SO") {
@@ -150,7 +151,6 @@ const crudColumns = ref([
}
} else {
// 其他数据清除
return {
black_line: { display: false },
pure_code_line: { display: false },
@@ -180,6 +180,14 @@ const crudColumns = ref([
commonRules: [{ required: true, message: "版本必填" }],
validateTrigger: "blur"
},
{
title: "用户标识",
align: "center",
dataIndex: "ref",
search: true,
commonRules: [{ required: true, message: "用户标识或编号必填" }],
validateTrigger: "blur"
},
{
title: "单位",
align: "center",