问题单结构全面修改

This commit is contained in:
2024-05-14 20:02:19 +08:00
parent 17776d5316
commit 2da15bd687
8 changed files with 253 additions and 118 deletions

View File

@@ -65,5 +65,16 @@ export default {
method: "get",
params
})
},
/**
* TODO:生成最终问题单
* @returns 返回是否正确生成问题单
*/
createWtdDocument(params = {}) {
return request({
url: `/create/wtdDocument`,
method: "get",
params
})
}
}

View File

@@ -0,0 +1,14 @@
import { request } from "@/api/request"
export default {
/**
* 生成问题单的多个表格
* @returns Promise(message)
*/
createWtdTable(params = {}) {
return request({
url: `/generateWtd/create/problem`,
method: "get",
params
})
}
}

View File

@@ -205,6 +205,15 @@
content="选择移动/复制"
>
</a-popconfirm>
<!-- w1:外部下拉选项组件 -->
<roundRight
:fvisible="roundRightVisible"
@update:visible="roundRightVisible = false"
:container="roundRightContainer"
@click-problem-show="handleProblemShowClick"
></roundRight>
<!-- w2:轮次的问题单ma-crud这里要传参2个首先是请求另外一个接口然后取消是否关联字段 -->
<problem-choose ref="problemRoundRef" hasRelated="roundProblem" :title="problemTitle"></problem-choose>
</template>
<script setup>
@@ -219,6 +228,10 @@ import copyApi from "@/api/treeOperation/copy"
import caseApi from "@/api/project/case"
import designApi from "@/api/project/designDemand"
import demandApi from "@/api/project/testDemand"
// 轮次的右键菜单,单独一个组件 -> 在treeComponents里面
import roundRight from "./treeComponents/roundRight.vue"
// 问题单ma-crud
import ProblemChoose from "@/views/project/case/components/ProblemChoose.vue"
import { Message, Notification, Tr } from "@arco-design/web-vue"
import { useRoute } from "vue-router"
import { useRouter } from "vue-router"
@@ -731,10 +744,17 @@ const popupVisible = ref(false)
const popupContainer = ref()
/// 组件全局
const rightClickNode = { level: 3, isLeaf: false, nodekey: "", title: "" }
/// 轮次右键dropdown显示变量
const roundRightVisible = ref(false)
/// 轮次右键dropdown的容器
const roundRightContainer = ref(null)
/// 轮次问题单标题表里
const problemTitle = ref("第1轮问题单")
/// 紧点击测试项节点显示右键菜单
const displayRightMenu = (e) => {
const { proxy } = e.target.__vueParentComponent
const { level, isLeaf, nodekey, title } = proxy
// 如果是测试项则弹出【1.根据测试项步骤生成当前测试项用例 2.复制测试项到设计需求】
if (level === 3) {
e.preventDefault()
// 首先将被右键点击的node储存到组件全局
@@ -746,6 +766,22 @@ const displayRightMenu = (e) => {
popupContainer.value = e.target
popupVisible.value = true
}
if (level === 0) {
// 测试显示下拉框
e.preventDefault()
rightClickNode.level = level
rightClickNode.isLeaf = isLeaf
rightClickNode.nodekey = nodekey
rightClickNode.title = title
problemTitle.value = `${+rightClickNode.nodekey + 1}轮问题单`
roundRightContainer.value = e.target.parentElement
roundRightVisible.value = true
}
}
/// 点击轮次-用户选择了打开问题单
const handleProblemShowClick = () => {
// 这里要显示轮次的问题单
problemRoundRef.value.open(rightClickNode.nodekey)
}
/// 点击popup自动生成对应测试项的用例按钮处理函数
const handleDoptionClickGreateCases = async () => {
@@ -912,6 +948,8 @@ const paoCancel2 = async () => {
routeViewRef.value.refresh()
Notification.success("复制用例成功")
}
// ~~~~大功能:轮次问题单~~~~
const problemRoundRef = ref(null)
</script>
<style lang="less" scoped>

View File

@@ -0,0 +1,65 @@
<template>
<div>
<a-dropdown
@select="handleSelect"
:popup-visible="fvisible"
:popup-container="container"
@popup-visible-change="change"
position="bottom"
alignPoint
:style="{ display: 'block' }"
>
<div
:style="{
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
height: '300px',
backgroundColor: 'var(--color-fill-2)'
}"
></div>
<template #content>
<a-dgroup title="执行操作">
<a-doption @click="handleProblemShow">
<template #icon>
<icon-list />
</template>
查看轮次下问题单
</a-doption>
</a-dgroup>
</template>
</a-dropdown>
</div>
</template>
<script setup>
const props = defineProps({
fvisible: {
type: Boolean,
default() {
return false
}
},
container: {
type: Object,
default() {
return false
}
}
})
const emits = defineEmits(["update:visible", "click-problem-show"])
// 点击查看问题单列表
const handleSelect = async (value) => {
emits("update:visible") // 给父组件传递关闭弹窗
}
// 点击空白取消显示
const change = () => {
emits("update:visible") // 给父组件传递关闭弹窗
}
// 点击给父组件发生事件
const handleProblemShow = () => {
emits("click-problem-show")
}
</script>
<style lang="less" scoped></style>

View File

@@ -1,6 +1,6 @@
<template>
<a-modal v-model:visible="visible" width="1200px" :footer="false">
<template #title>关联添加问题单</template>
<a-modal v-model:visible="visible" width="1200px" :footer="false" draggable>
<template #title>{{ title }}</template>
<!-- crud组件 -->
<div class="lg:w-full w-full">
<ma-crud :options="crudOptions" :columns="columns" ref="crudRef">
@@ -34,6 +34,17 @@ import problemApi from "@/api/project/problem"
import { Message } from "@arco-design/web-vue"
import { useRoute, useRouter } from "vue-router"
const route = useRoute()
// 定义props
const props = defineProps({
hasRelated: {
type: String,
default: "relatedProblem"
},
title: {
type: String,
default: "添加关联问题单"
}
})
// 定义emits
const emits = defineEmits(["deleted", "relatedOrunrelated"])
@@ -70,8 +81,17 @@ const visible = ref(false)
// 定义open事件
const open = (row) => {
crudRef.value.requestData() // 手动请求数据
visible.value = true
if (props.hasRelated === "roundProblem") {
const columnService = crudRef.value.getColumnService()
columnService.get("related").setAttr("hide", true)
crudRef.value.requestParams = { round_key: row }
crudRef.value.requestData() // 这里要变化请求的API变化
visible.value = true
}
if (props.hasRelated === "relatedProblem") {
crudRef.value.requestData() // 手动请求数据
visible.value = true
}
}
// crudOptions设置
const crudOptions = ref({
@@ -81,6 +101,7 @@ const crudOptions = ref({
rowSelection: { showCheckedAll: true },
operationWidth: 160,
operationColumnAlign: "center",
add: { show: true, api: problemApi.save, text: "新增无关联用例的问题单" },
edit: { show: true, api: problemApi.modalupdate },
delete: { show: true, api: problemApi.delete },
parameters: {
@@ -120,31 +141,33 @@ const crudOptions = ref({
]
},
{
formType: "divider",
title: "问题详情"
formType: "divider"
},
{
dataIndex: "operation"
},
{
dataIndex: "expect"
},
{
dataIndex: "result"
},
{
dataIndex: "rules"
title: "开发方回填",
formType: "divider"
},
{
dataIndex: "suggest"
dataIndex: "analysis"
},
{
formType: "divider",
title: "解决问题"
dataIndex: "effect_scope"
},
{
dataIndex: "solve"
},
{
formType: "divider"
},
{
dataIndex: "verify_result"
},
{
formType: "divider",
title: "人员信息"
@@ -169,13 +192,6 @@ const crudOptions = ref({
{ span: 12, formList: [{ dataIndex: "verifyPerson" }] },
{ span: 12, formList: [{ dataIndex: "verifyDate" }] }
]
},
{
formType: "grid",
cols: [
{ span: 12, formList: [{ dataIndex: "revokePerson" }] },
{ span: 12, formList: [{ dataIndex: "revokeDate" }] }
]
}
]
},
@@ -297,7 +313,7 @@ const columns = ref([
}
},
{
title: "问题操作",
title: "问题描述",
hide: true,
search: true,
dataIndex: "operation",
@@ -305,44 +321,47 @@ const columns = ref([
addDefaultValue: ""
},
{
title: "期望结果",
hide: true,
dataIndex: "expect",
addDefaultValue: ""
},
{
title: "问题结果",
title: "问题影响",
hide: true,
dataIndex: "result",
formType: "editor",
addDefaultValue: ""
},
{
title: "违反规则",
title: "原因分析",
hide: true,
dataIndex: "rules",
dataIndex: "analysis",
formType: "editor",
addDefaultValue: ""
},
{
title: "修改建议",
title: "影响域分析",
hide: true,
dataIndex: "suggest",
dataIndex: "effect_scope",
formType: "editor",
addDefaultValue: ""
},
{
title: "处理方式",
title: "改正措施",
hide: true,
dataIndex: "solve",
addDefaultValue: "",
formType: "textarea"
},
{
title: "提单人",
title: "回归结果",
hide: true,
dataIndex: "verify_result",
addDefaultValue: "",
formType: "editor"
},
{
title: "测试人员",
dataIndex: "postPerson",
search: true,
hide: true,
formType: "select",
commonRules: [{ required: true, message: "提单人必填" }],
commonRules: [{ required: true, message: "测试人员必填" }],
dict: { url: "system/user/list", translation: true, props: { label: "name", value: "name" } }
},
{
@@ -357,14 +376,14 @@ const columns = ref([
let tagObj
if (record.hang) {
tagObj = (
<a-tag size="small" bordered color="green">
有关联用例
<a-tag size="small" bordered color="red">
悬挂
</a-tag>
)
} else {
tagObj = (
<a-tag size="small" bordered color="red">
悬挂
<a-tag size="small" bordered color="green">
有关联用例
</a-tag>
)
}
@@ -380,50 +399,37 @@ const columns = ref([
editDisplay: false
},
{
title: "提单日期",
title: "测试日期",
hide: true,
dataIndex: "postDate",
formType: "date"
},
{
title: "设师上级",
title: "开发人员",
hide: true,
dataIndex: "designerPerson",
commonRules: [{ required: true, message: "提单人必填" }]
formType: "input",
commonRules: [{ required: true, message: "开发人员必填" }]
},
{
title: "确认日期",
title: "开发方日期",
hide: true,
dataIndex: "designDate",
formType: "date"
},
{
title: "验证人",
title: "回归人员",
hide: true,
dataIndex: "verifyPerson",
formType: "select",
commonRules: [{ required: true, message: "提单人必填" }],
commonRules: [{ required: true, message: "回归人" }],
dict: { url: "system/user/list", translation: true, props: { label: "name", value: "name" } }
},
{
title: "验证日期",
title: "回归日期",
hide: true,
dataIndex: "verifyDate",
formType: "date"
},
{
title: "撤销人",
hide: true,
dataIndex: "revokePerson",
formType: "select",
commonRules: [{ required: true, message: "提单人必填" }],
dict: { url: "system/user/list", translation: true, props: { label: "name", value: "name" } }
},
{
title: "撤销日期",
hide: true,
dataIndex: "revokeDate",
formType: "date"
}
])

View File

@@ -132,31 +132,33 @@ const crudOptions = ref({
]
},
{
formType: "divider",
title: "问题详情"
formType: "divider"
},
{
dataIndex: "operation"
},
{
dataIndex: "expect"
},
{
dataIndex: "result"
},
{
dataIndex: "rules"
},
{
dataIndex: "suggest"
},
{
formType: "divider",
title: "解决问题"
title: "开发方回填"
},
{
dataIndex: "analysis"
},
{
dataIndex: "effect_scope"
},
{
dataIndex: "solve"
},
{
formType: "divider"
},
{
dataIndex: "verify_result"
},
{
formType: "divider",
title: "人员信息"
@@ -182,13 +184,6 @@ const crudOptions = ref({
{ span: 12, formList: [{ dataIndex: "verifyDate" }] }
]
},
{
formType: "grid",
cols: [
{ span: 12, formList: [{ dataIndex: "revokePerson" }] },
{ span: 12, formList: [{ dataIndex: "revokeDate" }] }
]
}
]
}
})
@@ -303,7 +298,7 @@ const crudColumns = ref([
}
},
{
title: "问题操作",
title: "问题描述",
hide: true,
search: true,
dataIndex: "operation",
@@ -311,65 +306,69 @@ const crudColumns = ref([
addDefaultValue: ""
},
{
title: "期望结果",
hide: true,
dataIndex: "expect",
addDefaultValue: ""
},
{
title: "问题结果",
title: "问题影响",
hide: true,
dataIndex: "result",
formType: "editor",
addDefaultValue: ""
},
{
title: "违反规则",
title: "原因分析",
hide: true,
dataIndex: "rules",
dataIndex: "analysis",
formType: "editor",
addDefaultValue: ""
},
{
title: "修改建议",
title: "影响域分析",
hide: true,
dataIndex: "suggest",
dataIndex: "effect_scope",
formType: "editor",
addDefaultValue: ""
},
{
title: "处理方式",
title: "改正措施",
hide: true,
dataIndex: "solve",
addDefaultValue: "",
formType: "textarea"
},
{
title: "提单人",
title: "回归结果",
hide: true,
dataIndex: "verify_result",
addDefaultValue: "",
formType: "editor"
},
{
title: "测试人员",
dataIndex: "postPerson",
search: true,
formType: "select",
commonRules: [{ required: true, message: "提单人必填" }],
commonRules: [{ required: true, message: "测试人员必填" }],
dict: { url: "system/user/list", translation: true, props: { label: "name", value: "name" } }
},
{
title: "提单日期",
title: "测试日期",
hide: true,
dataIndex: "postDate",
formType: "date"
},
{
title: "设师上级",
title: "开发人员",
hide: true,
dataIndex: "designerPerson",
commonRules: [{ required: true, message: "提单人必填" }]
formType: "input",
commonRules: [{ required: true, message: "开发人员必填" }],
},
{
title: "确认日期",
title: "开发方日期",
hide: true,
dataIndex: "designDate",
formType: "date"
},
{
title: "验证人",
title: "回归人员",
hide: true,
dataIndex: "verifyPerson",
formType: "select",
@@ -377,25 +376,11 @@ const crudColumns = ref([
dict: { url: "system/user/list", translation: true, props: { label: "name", value: "name" } }
},
{
title: "验证日期",
title: "回归日期",
hide: true,
dataIndex: "verifyDate",
formType: "date"
},
{
title: "撤销人",
hide: true,
dataIndex: "revokePerson",
formType: "select",
commonRules: [{ required: true, message: "提单人必填" }],
dict: { url: "system/user/list", translation: true, props: { label: "name", value: "name" } }
},
{
title: "撤销日期",
hide: true,
dataIndex: "revokeDate",
formType: "date"
}
])
</script>

View File

@@ -63,6 +63,7 @@ const crudOptions = ref({
},
operationWidth: 500,
showIndex: false,
showTools: false,
rowSelection: { showCheckedAll: true },
searchColNumber: 3,
tablePagination: false,
@@ -180,7 +181,7 @@ const crudColumns = ref([
align: "center",
dataIndex: "black_line",
formType: "input-number",
commonRules: [{ required: true, message: "空行数必填" }],
commonRules: [{ required: true, message: "空行数必填" }]
},
{
title: "纯代码行",
@@ -188,7 +189,7 @@ const crudColumns = ref([
align: "center",
dataIndex: "code_line",
formType: "input-number",
commonRules: [{ required: true, message: "纯代码行数必填" }],
commonRules: [{ required: true, message: "纯代码行数必填" }]
},
{
title: "纯注释行",
@@ -196,7 +197,7 @@ const crudColumns = ref([
align: "center",
dataIndex: "comment_line",
formType: "input-number",
commonRules: [{ required: true, message: "纯注释行数必填" }],
commonRules: [{ required: true, message: "纯注释行数必填" }]
},
{
title: "混合行",
@@ -204,7 +205,7 @@ const crudColumns = ref([
align: "center",
dataIndex: "mix_line",
formType: "input-number",
commonRules: [{ required: true, message: "混合行数必填" }],
commonRules: [{ required: true, message: "混合行数必填" }]
},
{
title: "注释率 %",

View File

@@ -18,6 +18,7 @@
<p><a-link @click="createBgItem(record)">报告二级文档</a-link></p>
<p><a-link @click="createHsmItem(record)">回归说明二级文档</a-link></p>
<p><a-link @click="createHjlItem(record)">回归记录二级文档</a-link></p>
<p><a-link @click="createWtdItem(record)">问题单二级文档</a-link></p>
<p>
<a-link @click="createSeitaiDagang(record)"><icon-eye />[测试]生成最后大纲</a-link>
</p>
@@ -36,6 +37,9 @@
<p>
<a-link @click="createSeitaiHjl(record)"><icon-eye />[测试]回归测试记录</a-link>
</p>
<p>
<a-link @click="createSeitaiWtd(record)"><icon-eye />[测试]生成问题单</a-link>
</p>
</template>
</a-popover>
<a-link @click="enterWorkPlant(record)">进入工作区</a-link>
@@ -64,6 +68,7 @@ import jlGenerateApi from "@/api/generate/jlGenerate"
import bgGenerateApi from "@/api/generate/bgGenerate"
import hsmGenerateApi from "@/api/generate/hsmGenerate"
import hjlGenerateApi from "@/api/generate/hjlGenerate"
import wtdGenerateApi from "@/api/generate/wtdGenerate"
import { Message } from "@arco-design/web-vue"
import Progress from "./cpns/progress.vue"
import hoosk from "@/views/testmanage/projmanage/hooks.js"
@@ -118,6 +123,11 @@ const createSeitaiHjl = async (record) => {
ptext.value = "回归测试记录"
hoosk.create_entire_doc(visible, isComplete, seitaiGenerateApi.createHjlDocument, record.id)
}
// ~~~~~~~~问题单~~~~~~~~
const createSeitaiWtd = async (record) => {
ptext.value = "问题单"
hoosk.create_entire_doc(visible, isComplete, seitaiGenerateApi.createWtdDocument, record.id)
}
// 记录生成二级文档
const createJLItem = async (record) => {
@@ -232,6 +242,11 @@ const createHjlItem = async (record) => {
const st = await hjlGenerateApi.createCaseinfo({ id: record.id })
Message.success(st.message)
}
// 问题单二级文档
const createWtdItem = async (record) => {
const st = await wtdGenerateApi.createWtdTable({ id: record.id })
Message.success(st.message)
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~