完成大纲生成进度条
This commit is contained in:
46
cdTMP/package-lock.json
generated
46
cdTMP/package-lock.json
generated
@@ -44,6 +44,8 @@
|
|||||||
"@vitejs/plugin-vue-jsx": "^3.0.1",
|
"@vitejs/plugin-vue-jsx": "^3.0.1",
|
||||||
"@vue/babel-plugin-jsx": "^1.1.1",
|
"@vue/babel-plugin-jsx": "^1.1.1",
|
||||||
"autoprefixer": "^10.4.14",
|
"autoprefixer": "^10.4.14",
|
||||||
|
"browserslist": "^4.23.0",
|
||||||
|
"caniuse-lite": "^1.0.30001591",
|
||||||
"eslint": "^8.42.0",
|
"eslint": "^8.42.0",
|
||||||
"eslint-plugin-vue": "^9.14.1",
|
"eslint-plugin-vue": "^9.14.1",
|
||||||
"less": "^4.1.3",
|
"less": "^4.1.3",
|
||||||
@@ -1760,15 +1762,15 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/browserslist": {
|
"node_modules/browserslist": {
|
||||||
"version": "4.21.7",
|
"version": "4.23.0",
|
||||||
"resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.7.tgz",
|
"resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.23.0.tgz",
|
||||||
"integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==",
|
"integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"caniuse-lite": "^1.0.30001489",
|
"caniuse-lite": "^1.0.30001587",
|
||||||
"electron-to-chromium": "^1.4.411",
|
"electron-to-chromium": "^1.4.668",
|
||||||
"node-releases": "^2.0.12",
|
"node-releases": "^2.0.14",
|
||||||
"update-browserslist-db": "^1.0.11"
|
"update-browserslist-db": "^1.0.13"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"browserslist": "cli.js"
|
"browserslist": "cli.js"
|
||||||
@@ -1821,9 +1823,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/caniuse-lite": {
|
"node_modules/caniuse-lite": {
|
||||||
"version": "1.0.30001492",
|
"version": "1.0.30001591",
|
||||||
"resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001492.tgz",
|
"resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001591.tgz",
|
||||||
"integrity": "sha512-2efF8SAZwgAX1FJr87KWhvuJxnGJKOnctQa8xLOskAXNXq8oiuqgl6u1kk3fFpsp3GgvzlRjiK1sl63hNtFADw==",
|
"integrity": "sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/chalk": {
|
"node_modules/chalk": {
|
||||||
@@ -2081,9 +2083,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/electron-to-chromium": {
|
"node_modules/electron-to-chromium": {
|
||||||
"version": "1.4.417",
|
"version": "1.4.686",
|
||||||
"resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.417.tgz",
|
"resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.686.tgz",
|
||||||
"integrity": "sha512-8rY8HdCxuSVY8wku3i/eDac4g1b4cSbruzocenrqBlzqruAZYHjQCHIjC66dLR9DXhEHTojsC4EjhZ8KmzwXqA==",
|
"integrity": "sha512-3avY1B+vUzNxEgkBDpKOP8WarvUAEwpRaiCL0He5OKWEFxzaOFiq4WoZEZe7qh0ReS7DiWoHMnYoQCKxNZNzSg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/enhanced-resolve": {
|
"node_modules/enhanced-resolve": {
|
||||||
@@ -2158,9 +2160,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/escalade": {
|
"node_modules/escalade": {
|
||||||
"version": "3.1.1",
|
"version": "3.1.2",
|
||||||
"resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz",
|
"resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.2.tgz",
|
||||||
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
|
"integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6"
|
"node": ">=6"
|
||||||
@@ -3341,9 +3343,9 @@
|
|||||||
"peer": true
|
"peer": true
|
||||||
},
|
},
|
||||||
"node_modules/node-releases": {
|
"node_modules/node-releases": {
|
||||||
"version": "2.0.12",
|
"version": "2.0.14",
|
||||||
"resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.12.tgz",
|
"resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.14.tgz",
|
||||||
"integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==",
|
"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/normalize-path": {
|
"node_modules/normalize-path": {
|
||||||
@@ -4296,9 +4298,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/update-browserslist-db": {
|
"node_modules/update-browserslist-db": {
|
||||||
"version": "1.0.11",
|
"version": "1.0.13",
|
||||||
"resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
|
"resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
|
||||||
"integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
|
"integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"escalade": "^3.1.1",
|
"escalade": "^3.1.1",
|
||||||
|
|||||||
@@ -47,6 +47,8 @@
|
|||||||
"@vitejs/plugin-vue-jsx": "^3.0.1",
|
"@vitejs/plugin-vue-jsx": "^3.0.1",
|
||||||
"@vue/babel-plugin-jsx": "^1.1.1",
|
"@vue/babel-plugin-jsx": "^1.1.1",
|
||||||
"autoprefixer": "^10.4.14",
|
"autoprefixer": "^10.4.14",
|
||||||
|
"browserslist": "^4.23.0",
|
||||||
|
"caniuse-lite": "^1.0.30001591",
|
||||||
"eslint": "^8.42.0",
|
"eslint": "^8.42.0",
|
||||||
"eslint-plugin-vue": "^9.14.1",
|
"eslint-plugin-vue": "^9.14.1",
|
||||||
"less": "^4.1.3",
|
"less": "^4.1.3",
|
||||||
|
|||||||
@@ -33,4 +33,180 @@ export default {
|
|||||||
params
|
params
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @returns 生成技术依据文件部分
|
||||||
|
*/
|
||||||
|
createTechYiju(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: `/generate/create/techyiju`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @returns 生成测评大纲-测评时间和地点
|
||||||
|
*/
|
||||||
|
createTimeaddress(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: `/generate/create/timeaddress`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @returns 生成测评大纲-被测软件功能
|
||||||
|
*/
|
||||||
|
createFuncList(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: `/generate/create/funcList`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @returns 生成测评大纲-测评对象的软件组成描述
|
||||||
|
*/
|
||||||
|
createSoftComposition(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: `/generate/create/softComposition`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @returns 生成测评大纲-被测软件接口
|
||||||
|
*/
|
||||||
|
createInterface(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: `/generate/create/interface`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @returns 生成测评大纲-被测软件性能
|
||||||
|
*/
|
||||||
|
createPerformance(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: `/generate/create/performance`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @returns 生成测评大纲-被测软件性能
|
||||||
|
*/
|
||||||
|
createBaseInformation(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: `/generate/create/baseInformation`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @returns 生成测评大纲-测试总体要求
|
||||||
|
*/
|
||||||
|
createRequirement(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: `/generate/create/requirement`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @returns 生成-测试内容充分性及测试方法有效性
|
||||||
|
*/
|
||||||
|
createAdequacyEffectiveness(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: `/generate/create/adequacy_effectiveness`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @returns 生成-测评组织及分工
|
||||||
|
*/
|
||||||
|
createGroup(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: `/generate/create/group`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @returns 生成-测评条件和保障
|
||||||
|
*/
|
||||||
|
createGuarantee(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: `/generate/create/guarantee`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @returns 生成-缩略语
|
||||||
|
*/
|
||||||
|
createAbbreviation(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: `/generate/create/abbreviation`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @returns 生成-研制总要求-测试项对比表
|
||||||
|
*/
|
||||||
|
createYzComparison(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: `/generate/create/yzComparison`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @returns 生成-需求规格说明追踪表
|
||||||
|
*/
|
||||||
|
createXqComparison(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: `/generate/create/xqComparison`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @returns 生成-反向测试项-需求规格说明追踪表
|
||||||
|
*/
|
||||||
|
createFanXqComparison(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: `/generate/create/fanXqComparison`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @returns 生成-代码质量度量分析表
|
||||||
|
*/
|
||||||
|
createCodeQuality(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: `/generate/create/codeQuality`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
14
cdTMP/src/api/generate/dgSeitaiGenerate.js
Normal file
14
cdTMP/src/api/generate/dgSeitaiGenerate.js
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
import { request } from "@/api/request"
|
||||||
|
export default {
|
||||||
|
/**
|
||||||
|
* 如果缺少部分文件给与提示
|
||||||
|
* @returns 根据output_dir生成最终大纲文档
|
||||||
|
*/
|
||||||
|
createDagangSeiTai(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: `/create/dgDocument`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -44,4 +44,37 @@ export default {
|
|||||||
data
|
data
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
* 请求一个项目的所有测试需求(即测试项)
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
getRelatedTestDemand(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: "/project/testDemand/getRelatedTestDemand",
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 设计需求关联测试需求(测试项)的接口请求
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
solveRelatedTestDemand(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: "/project/testDemand/solveRelatedTestDemand",
|
||||||
|
method: "post",
|
||||||
|
data: params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 根据当前设计需求design,找出已关联非自己的测试项
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
getExistRelatedTestDemand(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: "/project/testDemand/getExistRelatedTestDemand",
|
||||||
|
method: "post",
|
||||||
|
data: params
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
48
cdTMP/src/api/system/abbreviation.js
Normal file
48
cdTMP/src/api/system/abbreviation.js
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
import { request } from "@/api/request"
|
||||||
|
|
||||||
|
export default {
|
||||||
|
/**
|
||||||
|
* 请求缩略语列表
|
||||||
|
* @returns 请求缩略语的数据
|
||||||
|
*/
|
||||||
|
getlist(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: `system/abbreviation/getlist`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 添加缩略语数据
|
||||||
|
* @returns 返回已添加的缩略语
|
||||||
|
*/
|
||||||
|
save(data = {}) {
|
||||||
|
return request({
|
||||||
|
url: "system/abbreviation/save",
|
||||||
|
method: "post",
|
||||||
|
data
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 更新缩略语
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
update(id, data = {}) {
|
||||||
|
return request({
|
||||||
|
url: "system/abbreviation/update/" + id,
|
||||||
|
method: "put",
|
||||||
|
data
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 删除缩略语
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
delete(data) {
|
||||||
|
return request({
|
||||||
|
url: "system/abbreviation/delete",
|
||||||
|
method: "delete",
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -69,6 +69,7 @@
|
|||||||
"
|
"
|
||||||
type="primary"
|
type="primary"
|
||||||
><icon-eye /> {{ options.see.text || '查看' }}</a-link> -->
|
><icon-eye /> {{ options.see.text || '查看' }}</a-link> -->
|
||||||
|
|
||||||
<a-link
|
<a-link
|
||||||
v-if="
|
v-if="
|
||||||
(isFunction(options.edit.show)
|
(isFunction(options.edit.show)
|
||||||
@@ -106,9 +107,7 @@
|
|||||||
: options.delete.show
|
: options.delete.show
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<a-link
|
<a-link type="primary">
|
||||||
type="primary"
|
|
||||||
>
|
|
||||||
<icon-delete />
|
<icon-delete />
|
||||||
{{
|
{{
|
||||||
props.isRecovery
|
props.isRecovery
|
||||||
|
|||||||
@@ -51,8 +51,8 @@ const props = defineProps({
|
|||||||
},
|
},
|
||||||
toolbar: {
|
toolbar: {
|
||||||
type: [String, Array],
|
type: [String, Array],
|
||||||
default:
|
default: // 如果要取消粘贴只粘贴文本,需要用户加格式请加上pastetext
|
||||||
"code undo redo restoredraft | paste pastetext |bold italic underline strikethrough codesample | preview | alignleft alignjustify indent formatpainter | \
|
"code undo redo restoredraft | paste |bold italic underline strikethrough codesample | preview | alignleft alignjustify indent formatpainter | \
|
||||||
styleselect formatselect fontselect fontsizeselect | bullist numlist | blockquote subscript superscript removeformat | charmap pagebreak insertdatetime"
|
styleselect formatselect fontselect fontsizeselect | bullist numlist | blockquote subscript superscript removeformat | charmap pagebreak insertdatetime"
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -81,6 +81,7 @@ const initConfig = reactive({
|
|||||||
toolbar: props.toolbar,
|
toolbar: props.toolbar,
|
||||||
skeletonScreen: true,
|
skeletonScreen: true,
|
||||||
branding: false,
|
branding: false,
|
||||||
|
paste_as_text: true, // 粘贴文字只能是纯文本
|
||||||
content_css: "/tinymce/skins/content/default/content.css",
|
content_css: "/tinymce/skins/content/default/content.css",
|
||||||
setup: (editor) => {
|
setup: (editor) => {
|
||||||
editor.on("init", () => {
|
editor.on("init", () => {
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<ul class="right-side">
|
<ul class="right-side">
|
||||||
<li>
|
<li>
|
||||||
<a-tooltip content="搜索-暂无">
|
<a-tooltip content="搜索-暂无">
|
||||||
<a-button class="nav-btn" type="outline" :shape="'circle'" @click="testCreate">
|
<a-button class="nav-btn" type="outline" :shape="'circle'">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<icon-search />
|
<icon-search />
|
||||||
</template>
|
</template>
|
||||||
@@ -163,7 +163,6 @@ const testCreate = async ()=>{
|
|||||||
const st = await dgGenerateApi.createTestDemand()
|
const st = await dgGenerateApi.createTestDemand()
|
||||||
Message.success(st.message)
|
Message.success(st.message)
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="less">
|
<style scoped lang="less">
|
||||||
|
|||||||
@@ -32,6 +32,17 @@ const DATAMANAGE = {
|
|||||||
locale: "项目联系信息",
|
locale: "项目联系信息",
|
||||||
icon: "icon-phone"
|
icon: "icon-phone"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "abbreviation",
|
||||||
|
name: "abbreviation",
|
||||||
|
component: () => import("@/views/datamanage/abbreviation/index.vue"),
|
||||||
|
meta: {
|
||||||
|
requiresAuth: true,
|
||||||
|
roles: ["*"],
|
||||||
|
locale: "缩略语",
|
||||||
|
icon: "icon-scissor"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
51
cdTMP/src/views/datamanage/abbreviation/index.vue
Normal file
51
cdTMP/src/views/datamanage/abbreviation/index.vue
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
<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" ref="crudRef"></ma-crud>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="jsx" setup>
|
||||||
|
import { ref } from "vue"
|
||||||
|
import { Message } from "@arco-design/web-vue"
|
||||||
|
import abbreviationApi from "@/api/system/abbreviation"
|
||||||
|
|
||||||
|
const crudRef = ref()
|
||||||
|
const crudOptions = ref({
|
||||||
|
autoRequest: true,
|
||||||
|
api: abbreviationApi.getlist,
|
||||||
|
add: { show: true, api: abbreviationApi.save },
|
||||||
|
edit: { show: true, api: abbreviationApi.update },
|
||||||
|
delete: { show: true, api: abbreviationApi.delete },
|
||||||
|
operationWidth: 160,
|
||||||
|
operationColumn: true,
|
||||||
|
operationColumnAlign: "center",
|
||||||
|
showIndex: false,
|
||||||
|
searchColNumber: 3,
|
||||||
|
tablePagination: false,
|
||||||
|
rowSelection: { showCheckedAll: true }
|
||||||
|
})
|
||||||
|
const crudColumns = ref([
|
||||||
|
{ title: "ID", dataIndex: "id", addDisplay: false, editDisplay: false, width: 50, hide: true },
|
||||||
|
{
|
||||||
|
title: "缩略语",
|
||||||
|
align: "center",
|
||||||
|
dataIndex: "title",
|
||||||
|
search: true,
|
||||||
|
commonRules: [{ required: true, message: "缩略语必填" }]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "全称",
|
||||||
|
align: "center",
|
||||||
|
dataIndex: "des",
|
||||||
|
search: true,
|
||||||
|
width: 500,
|
||||||
|
ellipsis: true,
|
||||||
|
commonRules: [{ required: true, message: "全称和描述必填" }]
|
||||||
|
}
|
||||||
|
])
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped></style>
|
||||||
@@ -59,6 +59,30 @@ const open = (row) => {
|
|||||||
crudRef.value.requestParams = { id: currentRow.value.id }
|
crudRef.value.requestParams = { id: currentRow.value.id }
|
||||||
crudRef.value.requestData()
|
crudRef.value.requestData()
|
||||||
visible.value = true
|
visible.value = true
|
||||||
|
// 判断如果是行数据的code值为standard则不显示‘文档名称’‘发布来源’‘发布日期’,且表单也不显示
|
||||||
|
// columnService可以动态设置表格列的属性!!!
|
||||||
|
const columnService = crudRef.value.getColumnService()
|
||||||
|
if (currentRow.value.code === "standard") {
|
||||||
|
columnService.get("doc_name").setAttr("hide", false)
|
||||||
|
columnService.get("publish_date").setAttr("hide", false)
|
||||||
|
columnService.get("source").setAttr("hide", false)
|
||||||
|
columnService.get("doc_name").setAttr("addDisplay", true)
|
||||||
|
columnService.get("publish_date").setAttr("addDisplay", true)
|
||||||
|
columnService.get("source").setAttr("addDisplay", true)
|
||||||
|
columnService.get("doc_name").setAttr("editDisplay", true)
|
||||||
|
columnService.get("publish_date").setAttr("editDisplay", true)
|
||||||
|
columnService.get("source").setAttr("editDisplay", true)
|
||||||
|
} else {
|
||||||
|
columnService.get("doc_name").setAttr("hide", true)
|
||||||
|
columnService.get("publish_date").setAttr("hide", true)
|
||||||
|
columnService.get("source").setAttr("hide", true)
|
||||||
|
columnService.get("doc_name").setAttr("addDisplay", false)
|
||||||
|
columnService.get("publish_date").setAttr("addDisplay", false)
|
||||||
|
columnService.get("source").setAttr("addDisplay", false)
|
||||||
|
columnService.get("doc_name").setAttr("editDisplay", false)
|
||||||
|
columnService.get("publish_date").setAttr("editDisplay", false)
|
||||||
|
columnService.get("source").setAttr("editDisplay", false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// crudOptions
|
// crudOptions
|
||||||
const crudOptions = ref({
|
const crudOptions = ref({
|
||||||
@@ -76,6 +100,7 @@ const crudOptions = ref({
|
|||||||
edit: { show: true, api: dictApi.updateDictItemData },
|
edit: { show: true, api: dictApi.updateDictItemData },
|
||||||
delete: { show: true, api: dictApi.realDeleteItem }
|
delete: { show: true, api: dictApi.realDeleteItem }
|
||||||
})
|
})
|
||||||
|
|
||||||
// crudColumns
|
// crudColumns
|
||||||
const columns = ref([
|
const columns = ref([
|
||||||
{ title: "ID", dataIndex: "id", addDisplay: false, editDisplay: false, width: 50, hide: true },
|
{ title: "ID", dataIndex: "id", addDisplay: false, editDisplay: false, width: 50, hide: true },
|
||||||
@@ -159,7 +184,7 @@ const columns = ref([
|
|||||||
dataIndex: "source",
|
dataIndex: "source",
|
||||||
align: "center",
|
align: "center",
|
||||||
search: false,
|
search: false,
|
||||||
placeholder: "如果不是标准则不填"
|
placeholder: "如果不是标准则不填",
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|||||||
@@ -6,18 +6,47 @@
|
|||||||
<template #ident="{ record }">
|
<template #ident="{ record }">
|
||||||
{{ showType(record) }}
|
{{ showType(record) }}
|
||||||
</template>
|
</template>
|
||||||
|
<!-- 表格前置扩展槽:添加关联按钮 -->
|
||||||
|
<template #tableAfterButtons>
|
||||||
|
<a-button type="outline" status="warning" @click="handleOpenRelationCSX">
|
||||||
|
<template #icon>
|
||||||
|
<icon-tags />
|
||||||
|
</template>
|
||||||
|
关联测试项
|
||||||
|
</a-button>
|
||||||
|
</template>
|
||||||
</ma-crud>
|
</ma-crud>
|
||||||
</div>
|
</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>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref } from "vue"
|
import { ref, computed } from "vue"
|
||||||
import { useRoute, useRouter } from "vue-router"
|
import { useRoute, useRouter } from "vue-router"
|
||||||
import testDemandApi from "@/api/project/testDemand"
|
import testDemandApi from "@/api/project/testDemand"
|
||||||
import { useTreeDataStore } from "@/store"
|
import { useTreeDataStore } from "@/store"
|
||||||
import commonApi from "@/api/common"
|
import commonApi from "@/api/common"
|
||||||
import PinYinMatch from "pinyin-match"
|
import PinYinMatch from "pinyin-match"
|
||||||
|
import { Message } from "@arco-design/web-vue"
|
||||||
|
|
||||||
const treeDataStore = useTreeDataStore()
|
const treeDataStore = useTreeDataStore()
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -28,6 +57,79 @@ const roundNumber = route.query.key.split("-")[0]
|
|||||||
const dutNumber = route.query.key.split("-")[1]
|
const dutNumber = route.query.key.split("-")[1]
|
||||||
const designDemandNumber = route.query.key.split("-")[2]
|
const designDemandNumber = route.query.key.split("-")[2]
|
||||||
const projectId = ref(route.query.id)
|
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([])
|
const testTypeDict = ref([])
|
||||||
!(function () {
|
!(function () {
|
||||||
@@ -216,4 +318,8 @@ const crudColumns = ref([
|
|||||||
])
|
])
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="less" scoped></style>
|
<style lang="less" scoped>
|
||||||
|
.ol-reset {
|
||||||
|
list-style: auto;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ const crudColumns = ref([
|
|||||||
align: "center",
|
align: "center",
|
||||||
width: 50,
|
width: 50,
|
||||||
dataIndex: "id",
|
dataIndex: "id",
|
||||||
commonRules: [{ required: true, message: "标识是必填" }],
|
commonRules: [{ required: true, message: "ID必填" }],
|
||||||
validateTrigger: "blur"
|
validateTrigger: "blur"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -100,7 +100,8 @@ const beiceType = [
|
|||||||
{ label: "源代码", value: "SO" },
|
{ label: "源代码", value: "SO" },
|
||||||
{ label: "设计说明", value: "SJ" },
|
{ label: "设计说明", value: "SJ" },
|
||||||
{ label: "需求文档", value: "XQ" },
|
{ label: "需求文档", value: "XQ" },
|
||||||
{ label: "通信协议", value: "XY" }
|
{ label: "通信协议", value: "XY" },
|
||||||
|
{ label: "研制总要求", value: "YZ" }
|
||||||
]
|
]
|
||||||
|
|
||||||
const crudColumns = ref([
|
const crudColumns = ref([
|
||||||
@@ -135,7 +136,7 @@ const crudColumns = ref([
|
|||||||
dict: {
|
dict: {
|
||||||
data: beiceType,
|
data: beiceType,
|
||||||
translation: true,
|
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) => {
|
control: (value, data) => {
|
||||||
if (value === "SO") {
|
if (value === "SO") {
|
||||||
@@ -150,7 +151,6 @@ const crudColumns = ref([
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 其他数据清除
|
// 其他数据清除
|
||||||
|
|
||||||
return {
|
return {
|
||||||
black_line: { display: false },
|
black_line: { display: false },
|
||||||
pure_code_line: { display: false },
|
pure_code_line: { display: false },
|
||||||
@@ -180,6 +180,14 @@ const crudColumns = ref([
|
|||||||
commonRules: [{ required: true, message: "版本必填" }],
|
commonRules: [{ required: true, message: "版本必填" }],
|
||||||
validateTrigger: "blur"
|
validateTrigger: "blur"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: "用户标识",
|
||||||
|
align: "center",
|
||||||
|
dataIndex: "ref",
|
||||||
|
search: true,
|
||||||
|
commonRules: [{ required: true, message: "用户标识或编号必填" }],
|
||||||
|
validateTrigger: "blur"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: "单位",
|
title: "单位",
|
||||||
align: "center",
|
align: "center",
|
||||||
|
|||||||
84
cdTMP/src/views/testmanage/projmanage/cpns/progress.vue
Normal file
84
cdTMP/src/views/testmanage/projmanage/cpns/progress.vue
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
<template>
|
||||||
|
<div class="progress">
|
||||||
|
<a-modal
|
||||||
|
draggable
|
||||||
|
:visible="visible"
|
||||||
|
hide-cancel
|
||||||
|
:mask-closable="false"
|
||||||
|
:on-before-ok="handleClickConfirmButton"
|
||||||
|
@cancel="handleClickConfirmButton"
|
||||||
|
>
|
||||||
|
<template #title>生成大纲进度</template>
|
||||||
|
<div><a-progress :percent="percent" size="large" /></div>
|
||||||
|
</a-modal>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, watch, onUnmounted } from "vue"
|
||||||
|
import { Notification } from "@arco-design/web-vue"
|
||||||
|
const emits = defineEmits(["clickConfirm"])
|
||||||
|
const props = defineProps({
|
||||||
|
visible: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
isComplete: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const percent = ref(0)
|
||||||
|
// 点击确定或关闭按钮判断是否完成,未完成则无法关闭进度条modal
|
||||||
|
const handleClickConfirmButton = () => {
|
||||||
|
if (props.isComplete) {
|
||||||
|
emits("clickConfirm")
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
Notification.warning({
|
||||||
|
title: "无法关闭",
|
||||||
|
content: "生成大纲未完成,请等待生成完成后再关闭"
|
||||||
|
})
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// 打开modal后自动移动
|
||||||
|
let timer = null
|
||||||
|
watch(
|
||||||
|
() => props.visible,
|
||||||
|
(newVal, oldVal) => {
|
||||||
|
if (newVal) {
|
||||||
|
timer = setInterval(() => {
|
||||||
|
if (percent.value <= 0.95) {
|
||||||
|
let temp = parseFloat(percent.value.toFixed(2))
|
||||||
|
temp += 0.01
|
||||||
|
percent.value = parseFloat(temp.toFixed(2))
|
||||||
|
}
|
||||||
|
}, 100)
|
||||||
|
} else {
|
||||||
|
// 进度条清零
|
||||||
|
percent.value = 0
|
||||||
|
clearInterval(timer)
|
||||||
|
timer = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
// 监听是否完成大纲生成
|
||||||
|
watch(
|
||||||
|
() => props.isComplete,
|
||||||
|
(newVal, oldVal) => {
|
||||||
|
if (newVal) {
|
||||||
|
percent.value = 1
|
||||||
|
clearInterval(timer)
|
||||||
|
timer = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
onUnmounted(() => {
|
||||||
|
clearInterval(timer)
|
||||||
|
timer = null
|
||||||
|
// 进度条清零
|
||||||
|
percent.value = 0
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped></style>
|
||||||
@@ -6,12 +6,17 @@
|
|||||||
<template #operationBeforeExtend="{ record }">
|
<template #operationBeforeExtend="{ record }">
|
||||||
<a-link @click="enterWorkPlant(record)">进入工作区</a-link>
|
<a-link @click="enterWorkPlant(record)">进入工作区</a-link>
|
||||||
<a-link @click="previewRef.open(record, crudColumns)"><icon-eye />预览</a-link>
|
<a-link @click="previewRef.open(record, crudColumns)"><icon-eye />预览</a-link>
|
||||||
<a-link @click="createYiju(record)"><icon-eye />【测试】生成依据文件</a-link>
|
<a-link @click="createItem(record)">生成测试项</a-link>
|
||||||
<a-link @click="createContact(record)"><icon-eye />【测试】联系方式</a-link>
|
<a-link @click="createYiju(record)"><icon-eye />[测试]生成依据文件</a-link>
|
||||||
|
<a-link @click="createContact(record)"><icon-eye />[测试]联系方式</a-link>
|
||||||
|
<a-link @click="createInter(record)"><icon-eye />[测试]生成接口</a-link>
|
||||||
|
<a-link @click="createZhuiZ(record)"><icon-eye />[测试]研总追踪</a-link>
|
||||||
|
<a-link @click="createSeitaiDagang(record)"><icon-eye />[测试]生成最后大纲</a-link>
|
||||||
</template>
|
</template>
|
||||||
</ma-crud>
|
</ma-crud>
|
||||||
</div>
|
</div>
|
||||||
<preview ref="previewRef"></preview>
|
<preview ref="previewRef"></preview>
|
||||||
|
<Progress :visible="visible" :isComplete="isComplete" @clickConfirm="handleModalConfirmClick"></Progress>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="jsx" setup>
|
<script lang="jsx" setup>
|
||||||
@@ -20,7 +25,9 @@ import { useRoute, useRouter } from "vue-router"
|
|||||||
import projectApi from "@/api/testmanage/project"
|
import projectApi from "@/api/testmanage/project"
|
||||||
import preview from "./cpns/preview.vue"
|
import preview from "./cpns/preview.vue"
|
||||||
import dgGenerateApi from "@/api/generate/dgGenerate"
|
import dgGenerateApi from "@/api/generate/dgGenerate"
|
||||||
|
import dgSeitaiGenerateApi from "@/api/generate/dgSeitaiGenerate"
|
||||||
import { Message } from "@arco-design/web-vue"
|
import { Message } from "@arco-design/web-vue"
|
||||||
|
import Progress from "./cpns/progress.vue"
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
// 定义预览组件的Ref
|
// 定义预览组件的Ref
|
||||||
const previewRef = ref(null)
|
const previewRef = ref(null)
|
||||||
@@ -31,16 +38,96 @@ const enterWorkPlant = function (record) {
|
|||||||
}
|
}
|
||||||
router.push({ name: "project", query: record })
|
router.push({ name: "project", query: record })
|
||||||
}
|
}
|
||||||
|
// 这里放弹出进度条组件变量
|
||||||
|
const visible = ref(false)
|
||||||
|
const isComplete = ref(false)
|
||||||
|
const handleModalConfirmClick = () => {
|
||||||
|
visible.value = false
|
||||||
|
}
|
||||||
// ~~~~~~~~测试生成文档~~~~~~~~
|
// ~~~~~~~~测试生成文档~~~~~~~~
|
||||||
const createYiju = async (record) => {
|
const createSeitaiDagang = async (record) => {
|
||||||
const st = await dgGenerateApi.createYiju({ id: record.id })
|
// 根据一系列文档生成大纲 - 这里有进度条组件、a-modal组件
|
||||||
|
// 1.打开进度条组件
|
||||||
|
visible.value = true
|
||||||
|
isComplete.value = false
|
||||||
|
const st = await dgSeitaiGenerateApi.createDagangSeiTai({ id: record.id }).catch((err) => {
|
||||||
|
isComplete.value = true
|
||||||
|
visible.value = false
|
||||||
|
})
|
||||||
|
isComplete.value = true
|
||||||
Message.success(st.message)
|
Message.success(st.message)
|
||||||
}
|
}
|
||||||
const createContact = async (record) => {
|
|
||||||
const st = await dgGenerateApi.createContact({ id: record.id })
|
const createItem = async (record) => {
|
||||||
|
// 生成测试项文档
|
||||||
|
const st = await dgGenerateApi.createTestDemand({ id: record.id })
|
||||||
Message.success(st.message)
|
Message.success(st.message)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const createYiju = async (record) => {
|
||||||
|
// 标准依据文件
|
||||||
|
const st = await dgGenerateApi.createYiju({ id: record.id })
|
||||||
|
// 技术依据文件
|
||||||
|
const st2 = await dgGenerateApi.createTechYiju({ id: record.id })
|
||||||
|
// 生成时间和地点
|
||||||
|
const st3 = await dgGenerateApi.createTimeaddress({ id: record.id })
|
||||||
|
// 生成被测软件功能列表
|
||||||
|
const st4 = await dgGenerateApi.createFuncList({ id: record.id })
|
||||||
|
// 生成测评对象-软件组成
|
||||||
|
const st5 = await dgGenerateApi.createSoftComposition({ id: record.id })
|
||||||
|
Message.success(st.message)
|
||||||
|
Message.success(st2.message)
|
||||||
|
Message.success(st3.message)
|
||||||
|
Message.success(st4.message)
|
||||||
|
Message.success(st5.message)
|
||||||
|
}
|
||||||
|
const createContact = async (record) => {
|
||||||
|
// 生成联系人和方式
|
||||||
|
const st = await dgGenerateApi.createContact({ id: record.id })
|
||||||
|
// 生成测试充分性(adequancy)和有效性(effectiveness)说明
|
||||||
|
const st2 = await dgGenerateApi.createAdequacyEffectiveness({ id: record.id })
|
||||||
|
// 生成测评组织及分工
|
||||||
|
const st3 = await dgGenerateApi.createGroup({ id: record.id })
|
||||||
|
// 生成测评保障
|
||||||
|
const st4 = await dgGenerateApi.createGuarantee({ id: record.id })
|
||||||
|
// 生成缩略语
|
||||||
|
const st5 = await dgGenerateApi.createAbbreviation({ id: record.id })
|
||||||
|
Message.success(st.message)
|
||||||
|
Message.success(st2.message)
|
||||||
|
Message.success(st3.message)
|
||||||
|
Message.success(st4.message)
|
||||||
|
Message.success(st5.message)
|
||||||
|
}
|
||||||
|
|
||||||
|
const createInter = async (record) => {
|
||||||
|
// 生成-被测软件接口
|
||||||
|
const st = await dgGenerateApi.createInterface({ id: record.id })
|
||||||
|
// 生成-被测软件性能
|
||||||
|
const st2 = await dgGenerateApi.createPerformance({ id: record.id })
|
||||||
|
// 生成-被测软件基本信息
|
||||||
|
const st3 = await dgGenerateApi.createBaseInformation({ id: record.id })
|
||||||
|
// 生成-测试总体要求
|
||||||
|
const st4 = await dgGenerateApi.createRequirement({ id: record.id })
|
||||||
|
Message.success(st.message)
|
||||||
|
Message.success(st2.message)
|
||||||
|
Message.success(st3.message)
|
||||||
|
Message.success(st4.message)
|
||||||
|
}
|
||||||
|
|
||||||
|
const createZhuiZ = async (record) => {
|
||||||
|
// 生成-研总-测试项对照表
|
||||||
|
const st = await dgGenerateApi.createYzComparison({ id: record.id })
|
||||||
|
// 生成-需求规格说明-测试项对照表
|
||||||
|
const st2 = await dgGenerateApi.createXqComparison({ id: record.id })
|
||||||
|
// 生成-反向测试项-需求规格说明对照表
|
||||||
|
const st3 = await dgGenerateApi.createFanXqComparison({ id: record.id })
|
||||||
|
// 生成-代码质量度量分析表
|
||||||
|
const st4 = await dgGenerateApi.createCodeQuality({ id: record.id })
|
||||||
|
Message.success(st.message)
|
||||||
|
Message.success(st2.message)
|
||||||
|
Message.success(st3.message)
|
||||||
|
Message.success(st4.message)
|
||||||
|
}
|
||||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
// CRUD-OPTIONS
|
// CRUD-OPTIONS
|
||||||
@@ -94,6 +181,7 @@ const crudOptions = ref({
|
|||||||
{ span: 8, formList: [{ dataIndex: "endTime" }] },
|
{ span: 8, formList: [{ dataIndex: "endTime" }] },
|
||||||
{ span: 8, formList: [{ dataIndex: "duty_person" }] },
|
{ span: 8, formList: [{ dataIndex: "duty_person" }] },
|
||||||
{ span: 24, formList: [{ dataIndex: "member" }] },
|
{ span: 24, formList: [{ dataIndex: "member" }] },
|
||||||
|
{ span: 24, formList: [{ dataIndex: "abbreviation" }] },
|
||||||
{ span: 8, formList: [{ dataIndex: "quality_person" }] },
|
{ span: 8, formList: [{ dataIndex: "quality_person" }] },
|
||||||
{ span: 8, formList: [{ dataIndex: "vise_person" }] },
|
{ span: 8, formList: [{ dataIndex: "vise_person" }] },
|
||||||
{ span: 8, formList: [{ dataIndex: "config_person" }] }
|
{ span: 8, formList: [{ dataIndex: "config_person" }] }
|
||||||
@@ -240,6 +328,15 @@ const crudColumns = ref([
|
|||||||
dict: { url: "system/user/list", props: { label: "name", value: "name" }, translation: true },
|
dict: { url: "system/user/list", props: { label: "name", value: "name" }, translation: true },
|
||||||
commonRules: [{ required: true, message: "成员至少选择一个" }]
|
commonRules: [{ required: true, message: "成员至少选择一个" }]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: "缩略语",
|
||||||
|
dataIndex: "abbreviation",
|
||||||
|
hide: true,
|
||||||
|
search: false,
|
||||||
|
formType: "select",
|
||||||
|
multiple: true,
|
||||||
|
dict: { url: "system/abbreviation/index", props: { label: "title", value: "title" }, translation: true }
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: "质量保证",
|
title: "质量保证",
|
||||||
dataIndex: "quality_person",
|
dataIndex: "quality_person",
|
||||||
|
|||||||
Reference in New Issue
Block a user