Files
cdTestPlant3/cdTMP/src/views/testmanage/projmanage/index.vue

793 lines
31 KiB
Vue
Raw Normal View History

2023-06-08 21:09:28 +08:00
<template>
<div class="ma-content-block p-3 lg:h-full block lg:border-0 lg:flex justify-between">
<div class="h-full w-full lg:ml-3 lg:mr-2 pt-2">
<!-- ma-crud组件 -->
<ma-crud :options="crudOptions" :columns="crudColumns" ref="crudRef">
<template #operationBeforeExtend="{ record }">
2024-03-12 19:22:55 +08:00
<a-popover title="文档生成组合按钮" trigger="click">
<a-button type="primary" size="mini">
<template #icon>
<icon-plus />
</template>
文档生成
</a-button>
<template #content>
2024-03-13 21:18:08 +08:00
<p>
2024-06-07 18:03:11 +08:00
<a-link
:disabled="isGenerating"
:loading="isDgLoading"
@click="createDgItem($event, record)"
>
大纲二段文档
</a-link>
2024-03-13 21:18:08 +08:00
</p>
<p>
2024-06-07 18:03:11 +08:00
<a-link :disabled="isGenerating" :loading="isSmLoading" @click="createSmItem(record)">
说明二段文档
</a-link>
2024-03-13 21:18:08 +08:00
</p>
2024-03-21 19:14:07 +08:00
<p>
2024-06-07 18:03:11 +08:00
<a-link :disabled="isGenerating" :loading="isJlloading" @click="createJLItem(record)">
记录二级文档
</a-link>
2024-03-21 19:14:07 +08:00
</p>
2024-03-29 19:03:35 +08:00
<p>
2024-06-07 18:03:11 +08:00
<a-link :disabled="isGenerating" :loading="isBgLoading" @click="createBgItem(record)">
报告二级文档
</a-link>
2024-03-29 19:03:35 +08:00
</p>
2024-04-02 18:44:26 +08:00
<p>
2024-06-07 18:03:11 +08:00
<a-link :disabled="isGenerating" :loading="ishsmLoading" @click="createHsmItem(record)">
回归说明二级文档
</a-link>
2024-04-02 18:44:26 +08:00
</p>
<p>
2024-06-07 18:03:11 +08:00
<a-link :disabled="isGenerating" :loading="ishjlLoading" @click="createHjlItem(record)">
回归记录二级文档
</a-link>
2024-04-02 18:44:26 +08:00
</p>
2024-05-14 20:02:19 +08:00
<p>
2024-06-07 18:03:11 +08:00
<a-link :disabled="isGenerating" :loading="isWtdLoading" @click="createWtdItem(record)">
问题单二级文档
</a-link>
</p>
<p>
<a-link :disabled="isGenerating" @click="createSeitaiDagang(record)">
<icon-eye />
[测试]生成最后大纲
</a-link>
</p>
<p>
<a-link :disabled="isGenerating" @click="createSeitaiShuoming(record)">
<icon-eye />[测试]生成最后说明
</a-link>
</p>
<p>
<a-link :disabled="isGenerating" @click="createSeitaiJilu(record)"
><icon-eye />[测试]生成最后记录</a-link
>
</p>
<p>
<a-link :disabled="isGenerating" @click="createSeitaiBaogao(record)"
><icon-eye />[测试]生成测评报告</a-link
>
</p>
<p>
<a-link :disabled="isGenerating" @click="createSeitaiHsm(record)"
><icon-eye />[测试]回归测试说明</a-link
>
</p>
<p>
<a-link :disabled="isGenerating" @click="createSeitaiHjl(record)"
><icon-eye />[测试]回归测试记录</a-link
>
</p>
<p>
<a-link :disabled="isGenerating" @click="createSeitaiWtd(record)"
><icon-eye />[测试]生成问题单</a-link
>
2024-05-14 20:02:19 +08:00
</p>
2024-03-12 19:22:55 +08:00
</template>
</a-popover>
2024-06-07 18:03:11 +08:00
<a-button @click="enterWorkPlant(record)" size="mini" status="warning" type="outline">
工作区
</a-button>
<a-link @click="previewRef.open(record)"><icon-eye />预览</a-link>
2023-06-08 21:09:28 +08:00
</template>
</ma-crud>
</div>
2024-06-07 18:03:11 +08:00
<preview ref="previewRef" :columns="crudColumns"></preview>
2024-03-12 19:22:55 +08:00
<Progress
:visible="visible"
:isComplete="isComplete"
:text="ptext"
@clickConfirm="handleModalConfirmClick"
></Progress>
2023-06-08 21:09:28 +08:00
</div>
</template>
<script lang="jsx" setup>
import { ref } from "vue"
2023-08-25 13:28:24 +08:00
import { useRoute, useRouter } from "vue-router"
2023-06-08 21:09:28 +08:00
import projectApi from "@/api/testmanage/project"
import preview from "./cpns/preview.vue"
2023-10-08 20:11:42 +08:00
import dgGenerateApi from "@/api/generate/dgGenerate"
2024-03-12 17:22:22 +08:00
import seitaiGenerateApi from "@/api/generate/seitaiGenerate"
import smGenerateApi from "@/api/generate/smGenerate"
2024-03-13 21:18:08 +08:00
import jlGenerateApi from "@/api/generate/jlGenerate"
2024-03-29 19:03:35 +08:00
import bgGenerateApi from "@/api/generate/bgGenerate"
2024-04-02 18:44:26 +08:00
import hsmGenerateApi from "@/api/generate/hsmGenerate"
import hjlGenerateApi from "@/api/generate/hjlGenerate"
2024-05-14 20:02:19 +08:00
import wtdGenerateApi from "@/api/generate/wtdGenerate"
2023-10-08 20:11:42 +08:00
import { Message } from "@arco-design/web-vue"
2024-03-05 16:28:47 +08:00
import Progress from "./cpns/progress.vue"
2024-03-29 19:03:35 +08:00
import hoosk from "@/views/testmanage/projmanage/hooks.js"
2023-08-25 13:28:24 +08:00
const router = useRouter()
2023-06-08 21:09:28 +08:00
// 定义预览组件的Ref
2024-06-07 18:03:11 +08:00
const previewRef = ref()
2023-08-25 13:28:24 +08:00
// 点击进入工作区函数 - 每次点击后都清除localStorage中树状目录数据
const enterWorkPlant = function (record) {
if (localStorage.getItem("tree_local_data")) {
localStorage.removeItem("tree_local_data")
}
router.push({ name: "project", query: record })
}
2024-03-05 16:28:47 +08:00
// 这里放弹出进度条组件变量
const visible = ref(false)
const isComplete = ref(false)
2024-03-12 19:22:55 +08:00
const ptext = ref("测评大纲")
2024-03-05 16:28:47 +08:00
const handleModalConfirmClick = () => {
visible.value = false
}
2024-06-07 18:03:11 +08:00
// 该变量用于显示所以生成文档的按钮是否->禁用
const isGenerating = ref(false)
// 用于显示是否正在加载(全部按钮各一个)
const isDgLoading = ref(false)
const isSmLoading = ref(false)
const isBgLoading = ref(false)
const isJlloading = ref(false)
const ishsmLoading = ref(false)
const ishjlLoading = ref(false)
const isWtdLoading = ref(false)
2024-03-12 17:22:22 +08:00
// ~~~~~~~~测试说明生成文档~~~~~~~~
const createSeitaiShuoming = async (record) => {
2024-03-12 19:22:55 +08:00
ptext.value = "测试说明"
2024-03-29 19:03:35 +08:00
hoosk.create_entire_doc(visible, isComplete, seitaiGenerateApi.createShuomingSeiTai, record.id)
2024-03-12 17:22:22 +08:00
}
// ~~~~~~~~测试大纲生成文档~~~~~~~~
2024-03-05 16:28:47 +08:00
const createSeitaiDagang = async (record) => {
// 根据一系列文档生成大纲 - 这里有进度条组件、a-modal组件
// 1.打开进度条组件
2024-03-12 19:22:55 +08:00
ptext.value = "测评大纲"
2024-03-29 19:03:35 +08:00
hoosk.create_entire_doc(visible, isComplete, seitaiGenerateApi.createDagangSeiTai, record.id)
2024-03-05 16:28:47 +08:00
}
2024-03-21 19:14:07 +08:00
// ~~~~~~~~记录生成文档~~~~~~~~
const createSeitaiJilu = async (record) => {
ptext.value = "测试记录"
2024-03-29 19:03:35 +08:00
hoosk.create_entire_doc(visible, isComplete, seitaiGenerateApi.createJiluSeiTai, record.id)
}
// ~~~~~~~~报告生成文档~~~~~~~~
const createSeitaiBaogao = async (record) => {
ptext.value = "测评报告"
hoosk.create_entire_doc(visible, isComplete, seitaiGenerateApi.createBgDocument, record.id)
2024-03-21 19:14:07 +08:00
}
2024-04-02 18:44:26 +08:00
// ~~~~~~~~回归测试说明~~~~~~~~
const createSeitaiHsm = async (record) => {
ptext.value = "回归测试说明"
hoosk.create_entire_doc(visible, isComplete, seitaiGenerateApi.createHsmDocument, record.id)
}
// ~~~~~~~~回归测试记录~~~~~~~~
const createSeitaiHjl = async (record) => {
ptext.value = "回归测试记录"
hoosk.create_entire_doc(visible, isComplete, seitaiGenerateApi.createHjlDocument, record.id)
}
2024-05-14 20:02:19 +08:00
// ~~~~~~~~问题单~~~~~~~~
const createSeitaiWtd = async (record) => {
ptext.value = "问题单"
hoosk.create_entire_doc(visible, isComplete, seitaiGenerateApi.createWtdDocument, record.id)
}
2024-03-05 16:28:47 +08:00
2024-03-13 21:18:08 +08:00
// 记录生成二级文档
const createJLItem = async (record) => {
2024-06-07 18:03:11 +08:00
isGenerating.value = true
isJlloading.value = true
await jlGenerateApi.createJLcaserecord({ id: record.id }).finally(() => {
isGenerating.value = false
isJlloading.value = false
})
Message.success("记录-片段库生成成功请查看output/jl文件夹")
2024-03-13 21:18:08 +08:00
}
2024-03-12 17:22:22 +08:00
// 说明生成二级文档
const createSmItem = async (record) => {
2024-06-07 18:03:11 +08:00
isGenerating.value = true
isSmLoading.value = true
const id = record.id
await Promise.all([
dgGenerateApi.createSoftComposition({ id }), // 生成测评对象 - 和大纲一样
dgGenerateApi.createFuncList({ id }), // 生成被测软件功能 - 和大纲重复
dgGenerateApi.createInterface({ id }), // 生成被测软件接口 - 和大纲重复 - 可能会删除
dgGenerateApi.createPerformance({ id }), // 生成被测软件性能 - 和大纲重复 - 可能会删除
dgGenerateApi.createBaseInformation({ id }), // 生成被测软件基本信息 - 和大纲重复 - 可能会删除
dgGenerateApi.createYiju({ id }), // 生成标准类引用文档 - 和大纲重复 - 可能会删除
smGenerateApi.createSMTechyiju({ id }), // 生成技术类引用文档列表 -> 在大纲基础上添加《测评大纲》
dgGenerateApi.createEnvironment({ id }), // 生成软硬件环境(注意标题级别不一样,这个在最后处理)
smGenerateApi.createSMCaseList({ id }), // 生成用例全
smGenerateApi.createSMCaseBreifList({ id }), // 生成用例列表-那个表格
smGenerateApi.createSMTrack({ id }) // 生成说明追踪
]).finally(() => {
isGenerating.value = false
isSmLoading.value = false
})
Message.success("说明-片段库生成成功请查看output/sm文件夹")
2024-03-12 17:22:22 +08:00
}
// 大纲生成二级文档
2024-06-07 18:03:11 +08:00
const createDgItem = async (e, record) => {
isGenerating.value = true
isDgLoading.value = true
const id = record.id
await Promise.all([
dgGenerateApi.createTestDemand({ id }), // 生成第一轮测试项
dgGenerateApi.createYiju({ id }), // 生成依据文件
dgGenerateApi.createTechYiju({ id }), // 技术依据文件
dgGenerateApi.createContact({ id }), // 生成联系人和方式
dgGenerateApi.createTimeaddress({ id }), // 生成测评时间和地点
dgGenerateApi.createFuncList({ id }), // 生成被测软件功能列表
dgGenerateApi.createSoftComposition({ id }), // 生成测评对象-软件组成
dgGenerateApi.createAdequacyEffectiveness({ id }), // 生成测试充分性adequancy和有效性effectiveness说明
dgGenerateApi.createGroup({ id }), // 生成测评组织及分工
dgGenerateApi.createGuarantee({ id }), // 生成测评保障
dgGenerateApi.createAbbreviation({ id }), // 生成缩略语
dgGenerateApi.createInterface({ id }), // 生成-被测软件接口
dgGenerateApi.createPerformance({ id }), // 生成-被测软件性能
dgGenerateApi.createBaseInformation({ id }), // 生成-被测软件基本信息
dgGenerateApi.createRequirement({ id }), // 生成-测试总体要求
dgGenerateApi.createYzComparison({ id }), // 生成-研总-测试项对照表
dgGenerateApi.createXqComparison({ id }), // 生成-需求规格说明-测试项对照表
dgGenerateApi.createFanXqComparison({ id }), // 生成-反向测试项-需求规格说明对照表
dgGenerateApi.createCodeQuality({ id }), // 生成-代码质量度量分析表
dgGenerateApi.createEnvironment({ id }), // 生成-软硬件环境
dgGenerateApi.createMainTech({ id }) // 生成-主要战技指标
]).finally(() => {
isGenerating.value = false
isDgLoading.value = false
})
Message.success("大纲-片段库文档生成成功请查看output/dg文件夹")
2023-10-08 20:11:42 +08:00
}
2024-03-29 19:03:35 +08:00
// 报告生成二级文档
const createBgItem = async (record) => {
2024-06-07 18:03:11 +08:00
isGenerating.value = true
isBgLoading.value = true
const id = record.id
await Promise.all([
bgGenerateApi.deleteBGFiles({ id }), // 删除output/bg文件夹下文件
bgGenerateApi.createBgTechYiju({ id }),
bgGenerateApi.createBgTimeaddress({ id }),
bgGenerateApi.createBgBaseInformation({ id }),
bgGenerateApi.createBgCompletionstatus({ id }),
bgGenerateApi.createBgSummary({ id }),
bgGenerateApi.createBgContentandresults1({ id }),
bgGenerateApi.createBgContentandresults2({ id }),
bgGenerateApi.createBgEffectAndAdquacy({ id }),
bgGenerateApi.createBgDemandEffective({ id }),
bgGenerateApi.createBgQualityEvaluate({ id }),
bgGenerateApi.createBgEntire({ id }),
bgGenerateApi.createBgYzxqTrack({ id }),
bgGenerateApi.createBgProblemsSummary({ id })
]).finally(() => {
isGenerating.value = false
isBgLoading.value = false
})
Message.success("报告-片段库文档生成成功请查看output/bg文件夹")
2024-03-29 19:03:35 +08:00
}
2024-04-02 18:44:26 +08:00
// 回归测试说明二级文档
const createHsmItem = async (record) => {
2024-06-07 18:03:11 +08:00
const id = record.id
isGenerating.value = true
ishsmLoading.value = true
await Promise.all([
hsmGenerateApi.deleteHSMFiles({ id }), // 先删除以前文件
hsmGenerateApi.createBasicInfo({ id }),
hsmGenerateApi.createDocSummary({ id }),
hsmGenerateApi.createJstech({ id }),
hsmGenerateApi.createChangePart({ id }),
hsmGenerateApi.createHdemand({ id }),
hsmGenerateApi.createCaseListDesc({ id }),
hsmGenerateApi.createCaseList({ id }),
hsmGenerateApi.createTrack({ id })
]).finally(() => {
isGenerating.value = false
ishsmLoading.value = false
})
Message.success("回归说明-片段库文档生成成功请查看output/hsm文件夹")
2024-04-02 18:44:26 +08:00
}
// 回归测试记录二级文档
const createHjlItem = async (record) => {
2024-06-07 18:03:11 +08:00
const id = record.id
isGenerating.value = true
ishjlLoading.value = true
await Promise.all([
hjlGenerateApi.deleteHJLFiles({ id }), // 先调用删除文件夹里面文件
hjlGenerateApi.createBasicInfo({ id }),
hjlGenerateApi.createCaseinfo({ id })
]).finally(() => {
isGenerating.value = false
ishjlLoading.value = false
})
Message.success("回归记录-片段库文档生成成功请查看output/hjl文件夹")
2024-04-02 18:44:26 +08:00
}
2024-05-14 20:02:19 +08:00
// 问题单二级文档
const createWtdItem = async (record) => {
2024-06-07 18:03:11 +08:00
isGenerating.value = true
isWtdLoading.value = true
await wtdGenerateApi.createWtdTable({ id: record.id }).finally(() => {
isGenerating.value = false
isWtdLoading.value = false
})
Message.success("问题单-片段库文档生成成功请查看output/wtd文件夹")
2024-05-14 20:02:19 +08:00
}
2024-04-02 18:44:26 +08:00
2023-10-08 20:11:42 +08:00
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2023-06-08 21:09:28 +08:00
// CRUD-OPTIONS
const crudRef = ref()
const crudOptions = ref({
rowSelection: { showCheckedAll: true },
api: projectApi.getPageList,
2023-08-24 19:24:00 +08:00
add: { show: true, api: projectApi.save, text: "新增项目" },
edit: { show: true, api: projectApi.update, text: "编辑项目" },
2023-08-17 20:15:03 +08:00
delete: { show: true, api: projectApi.delete },
2023-06-08 21:09:28 +08:00
searchColNumber: 3,
2023-07-25 20:03:06 +08:00
tablePagination: false,
2023-06-08 21:09:28 +08:00
operationColumn: true,
2023-06-12 20:47:54 +08:00
operationWidth: 500,
2023-06-08 21:09:28 +08:00
showIndex: false,
2024-05-11 18:11:56 +08:00
showTools: false,
2024-06-07 18:03:11 +08:00
operationColumnWidth: 220, // 操作列宽度
operationColumnAlign: "center", // 操作列对齐方式
2023-08-24 19:24:00 +08:00
// 处理弹窗的title
beforeOpenAdd: function () {
crudRef.value.crudFormRef.actionTitle = "项目"
return true
},
beforeOpenEdit: function (record) {
crudRef.value.crudFormRef.actionTitle = record.ident + "" + record.name
return true
},
2023-06-08 21:09:28 +08:00
formOption: {
isFull: true,
layout: [
{
formType: "grid",
cols: [
{ span: 8, formList: [{ dataIndex: "ident" }] },
{ span: 8, formList: [{ dataIndex: "name" }] },
{ span: 8, formList: [{ dataIndex: "engin_model" }] }
]
},
{
formType: "grid",
cols: [
{ span: 8, formList: [{ dataIndex: "section_system" }] },
{ span: 8, formList: [{ dataIndex: "sub_system" }] },
{ span: 8, formList: [{ dataIndex: "device" }] }
]
},
{
2023-06-09 19:31:54 +08:00
formType: "divider"
2023-06-08 21:09:28 +08:00
},
{
formType: "grid",
cols: [
2024-03-21 19:14:07 +08:00
{ span: 6, formList: [{ dataIndex: "beginTime" }] },
{ span: 6, formList: [{ dataIndex: "endTime" }] },
{ span: 6, formList: [{ dataIndex: "duty_person" }] },
{ span: 6, formList: [{ dataIndex: "runtime" }] },
{ span: 12, formList: [{ dataIndex: "member" }] },
{ span: 6, formList: [{ dataIndex: "soft_type" }] },
{ span: 6, formList: [{ dataIndex: "devplant" }] },
2024-03-05 16:28:47 +08:00
{ span: 24, formList: [{ dataIndex: "abbreviation" }] },
2023-08-24 17:05:21 +08:00
{ span: 8, formList: [{ dataIndex: "quality_person" }] },
{ span: 8, formList: [{ dataIndex: "vise_person" }] },
2023-08-24 19:24:00 +08:00
{ span: 8, formList: [{ dataIndex: "config_person" }] }
2023-06-08 21:09:28 +08:00
]
},
{
formType: "grid",
cols: [{ span: 24, formList: [{ dataIndex: "security_level" }] }]
},
{
formType: "grid",
cols: [
{ span: 12, formList: [{ dataIndex: "test_level" }] },
{ span: 12, formList: [{ dataIndex: "plant_type" }] }
]
2023-06-09 19:31:54 +08:00
},
{
formType: "grid",
cols: [{ span: 24, formList: [{ dataIndex: "report_type" }] }]
},
{
formType: "grid",
cols: [{ span: 24, formList: [{ dataIndex: "language" }] }]
},
{
formType: "grid",
cols: [{ span: 24, formList: [{ dataIndex: "standard" }] }]
},
{
formType: "grid-tailwind",
customClass: ["mt-0"],
colNumber: 3,
cols: [
{
formList: [
{
formType: "card",
title: "委托方信息",
customClass: ["mt-3", "mb-5", "mx-1"],
formList: [
2023-08-17 20:15:03 +08:00
{ dataIndex: "entrust_unit" },
2023-06-09 19:31:54 +08:00
{ dataIndex: "entrust_contact" },
{ dataIndex: "entrust_contact_phone" },
{ dataIndex: "entrust_email" }
]
}
]
},
{
formList: [
{
formType: "card",
title: "研制方信息",
customClass: ["mt-3", "mb-5", "mx-1"],
formList: [
2023-08-17 20:15:03 +08:00
{ dataIndex: "dev_unit" },
2023-06-09 19:31:54 +08:00
{ dataIndex: "dev_contact" },
{ dataIndex: "dev_contact_phone" },
{ dataIndex: "dev_email" }
]
}
]
},
{
formList: [
{
formType: "card",
title: "测评中心信息",
customClass: ["mt-3", "mb-5", "mx-1"],
formList: [
2023-08-17 20:15:03 +08:00
{ dataIndex: "test_unit" },
2023-06-09 19:31:54 +08:00
{ dataIndex: "test_contact" },
{ dataIndex: "test_contact_phone" },
{ dataIndex: "test_email" }
]
}
]
}
]
2023-06-08 21:09:28 +08:00
}
]
}
})
// CRUD-CLOMNS
const crudColumns = ref([
{
2024-05-11 18:11:56 +08:00
title: "项目标识",
width: 90,
2023-08-21 19:57:49 +08:00
sortable: { sortDirections: ["ascend"] },
2023-06-08 21:09:28 +08:00
dataIndex: "ident",
search: true,
commonRules: [{ required: true, message: "标识是必填" }],
validateTrigger: "blur"
},
{
title: "项目名称",
dataIndex: "name",
search: true,
commonRules: [{ required: true, message: "名称是必填" }]
},
{ title: "工程型号", dataIndex: "engin_model", hide: true },
{ title: "分系统", dataIndex: "section_system", hide: true },
{ title: "子系统", dataIndex: "sub_system", hide: true },
{ title: "设备", dataIndex: "device", hide: true },
{
title: "开始日期",
dataIndex: "beginTime",
commonRules: [{ required: true, message: "开始时间必填" }],
formType: "date"
},
{
title: "结束时间",
dataIndex: "endTime",
2024-06-07 18:03:11 +08:00
formType: "date",
extra: "注意:开始时间和结束时间影响大纲、报告多个时间,谨慎填写",
commonRules: [
{
required: true,
message: "结束时间必填"
},
{
validator: (value, validationCallbackFunction) => {
let beginTime = crudRef.value.getFormData().beginTime
value < beginTime ? validationCallbackFunction("开始时间必须小于结束时间") : null
}
}
]
2023-06-08 21:09:28 +08:00
},
// 这是只为了搜索的字段
{
title: "时间范围",
hide: true,
dataIndex: "searchOnlyTimeRange",
search: true,
addDisplay: false,
editDisplay: false,
2023-06-09 19:31:54 +08:00
infoShow: false,
2023-06-08 21:09:28 +08:00
formType: "range"
},
{
title: "责任人",
width: 70,
dataIndex: "duty_person",
search: true,
commonRules: [{ required: true, message: "责任人必选" }],
formType: "select",
2023-07-25 20:03:06 +08:00
dict: { url: "system/user/list", props: { label: "name", value: "name" }, translation: true }
2023-06-08 21:09:28 +08:00
},
2024-03-21 19:14:07 +08:00
{
title: "运行环境",
dataIndex: "runtime",
hide: true,
search: false,
formType: "select",
dict: { name: "runtime", props: { label: "title", value: "key" } }
},
2023-06-08 21:09:28 +08:00
{
title: "成员",
dataIndex: "member",
hide: true,
search: true,
formType: "select",
multiple: true,
2023-07-25 20:03:06 +08:00
dict: { url: "system/user/list", props: { label: "name", value: "name" }, translation: true },
2023-06-08 21:09:28 +08:00
commonRules: [{ required: true, message: "成员至少选择一个" }]
},
2024-03-21 19:14:07 +08:00
{
// 后台默认值1可不填
title: "软件类型",
dataIndex: "soft_type",
hide: true,
search: true,
formType: "select",
dict: {
data: [
{ label: "新研", value: 1 },
2024-04-26 19:06:14 +08:00
{ label: "改造", value: 2 },
{ label: "沿用", value: 3 }
2024-03-21 19:14:07 +08:00
],
translation: true
},
commonRules: [{ required: true, message: "软件类型必填" }]
},
{
title: "开发环境",
dataIndex: "devplant",
hide: true,
search: false,
formType: "select",
dict: { name: "devplant", props: { label: "title", value: "key" } }
},
2024-03-05 16:28:47 +08:00
{
title: "缩略语",
dataIndex: "abbreviation",
hide: true,
search: false,
formType: "select",
multiple: true,
dict: { url: "system/abbreviation/index", props: { label: "title", value: "title" }, translation: true }
},
2023-08-24 17:05:21 +08:00
{
title: "质量保证",
dataIndex: "quality_person",
hide: true,
formType: "select",
dict: { url: "system/user/list", props: { label: "name", value: "name" }, translation: true },
commonRules: [{ required: true, message: "至少选择一个质量保证员" }]
},
{
title: "质量监督",
dataIndex: "vise_person",
hide: true,
formType: "select",
dict: { url: "system/user/list", props: { label: "name", value: "name" }, translation: true },
commonRules: [{ required: true, message: "至少选择一个质量监督员" }]
},
{
title: "配置管理",
dataIndex: "config_person",
hide: true,
formType: "select",
dict: { url: "system/user/list", props: { label: "name", value: "name" }, translation: true },
commonRules: [{ required: true, message: "至少选择一个配置管理员" }]
},
2023-06-08 21:09:28 +08:00
{
title: "关键等级",
dataIndex: "security_level",
addDefaultValue: "3",
hide: true,
commonRules: [{ required: true, message: "关键等级必填" }],
search: true,
formType: "radio",
2023-06-28 21:02:31 +08:00
dict: { name: "security_level", props: { label: "title", value: "key" } }
2023-06-08 21:09:28 +08:00
},
{
title: "测试级别",
dataIndex: "test_level",
2023-08-17 15:33:05 +08:00
commonRules: [{ required: true, message: "请至少选择一个测试级别" }],
2023-06-08 21:09:28 +08:00
addDefaultValue: ["6"],
hide: true,
formType: "checkbox",
dict: { name: "test_level", props: { label: "title", value: "key" } }
},
{
title: "平台类型",
dataIndex: "plant_type",
2023-08-17 15:33:05 +08:00
commonRules: [{ required: true, message: "请至少选择一个平台类型" }],
addDefaultValue: ["3"],
2023-06-08 21:09:28 +08:00
hide: true,
2023-08-17 15:33:05 +08:00
formType: "checkbox",
2023-06-08 21:09:28 +08:00
dict: { name: "plant_type", props: { label: "title", value: "key" } }
},
{
title: "报告类型",
dataIndex: "report_type",
addDefaultValue: "1",
search: true,
commonRules: [{ required: true, message: "报告类型必填" }],
// 字典-report_type
formType: "radio",
dict: { name: "report_type", translation: true, props: { label: "title", value: "key" } }
},
{
title: "编程语言",
dataIndex: "language",
addDefaultValue: ["1"],
commonRules: [{ required: true, message: "请至少选择一个" }],
hide: true,
formType: "checkbox",
dict: { name: "language", props: { label: "title", value: "key" } }
},
{
title: "依据标准",
dataIndex: "standard",
addDefaultValue: ["1"],
commonRules: [{ required: true, message: "请至少选择一个" }],
hide: true,
formType: "checkbox",
dict: { name: "standard", props: { label: "title", value: "key" } }
},
{
2023-08-17 20:15:03 +08:00
title: "单位",
dataIndex: "entrust_unit",
2023-06-09 19:31:54 +08:00
hide: true,
2023-08-17 20:15:03 +08:00
commonRules: [{ required: true, message: "单位必选" }],
formType: "select",
dict: { url: "system/contact/index", props: { label: "name", value: "name" }, translation: true }
2023-06-09 19:31:54 +08:00
},
{
formType: "input",
title: "联系人",
dataIndex: "entrust_contact",
hide: true,
rules: [{ required: true, message: "联系人必填" }]
},
{
formType: "input",
title: "联系电话",
dataIndex: "entrust_contact_phone",
hide: true,
rules: [{ required: true, message: "联系电话必填" }]
},
{
formType: "input",
title: "电子邮箱",
dataIndex: "entrust_email",
hide: true,
rules: [{ required: true, message: "电子邮箱必填" }]
},
{
2023-08-17 20:15:03 +08:00
title: "单位",
dataIndex: "dev_unit",
2023-06-09 19:31:54 +08:00
hide: true,
2023-08-17 20:15:03 +08:00
commonRules: [{ required: true, message: "单位必选" }],
formType: "select",
dict: { url: "system/contact/index", props: { label: "name", value: "name" }, translation: true }
2023-06-09 19:31:54 +08:00
},
{
formType: "input",
title: "联系人",
dataIndex: "dev_contact",
hide: true,
rules: [{ required: true, message: "联系人必填" }]
},
{
formType: "input",
title: "联系电话",
dataIndex: "dev_contact_phone",
hide: true,
rules: [{ required: true, message: "联系电话必填" }]
},
{
formType: "input",
title: "电子邮箱",
dataIndex: "dev_email",
hide: true,
rules: [{ required: true, message: "电子邮箱必填" }]
},
{
2023-08-17 20:15:03 +08:00
title: "单位",
dataIndex: "test_unit",
2023-06-09 19:31:54 +08:00
hide: true,
2023-08-17 20:15:03 +08:00
commonRules: [{ required: true, message: "单位必选" }],
formType: "select",
dict: { url: "system/contact/index", props: { label: "name", value: "name" }, translation: true }
2023-06-09 19:31:54 +08:00
},
{
formType: "input",
title: "联系人",
dataIndex: "test_contact",
hide: true,
rules: [{ required: true, message: "联系人必填" }]
},
{
formType: "input",
title: "联系电话",
dataIndex: "test_contact_phone",
hide: true,
rules: [{ required: true, message: "联系电话必填" }]
},
{
formType: "input",
title: "电子邮箱",
dataIndex: "test_email",
hide: true,
rules: [{ required: true, message: "电子邮箱必填" }]
2023-06-08 21:09:28 +08:00
},
{
title: "状态",
dataIndex: "step",
search: true,
formType: "radio",
addDefaultValue: "1",
addDisabled: true,
dict: {
name: "step",
translation: true,
props: { label: "title", value: "key" },
tagColors: { 1: "green", 2: "blue", 3: "red", 4: "yellow" }
}
}
])
</script>
<style lang="less" scoped>
.msg-menu {
// border-right: 1px solid var(--color-border-2);
& li {
border-radius: 1px;
cursor: pointer;
margin-bottom: 5px;
padding: 10px;
padding-left: 20px;
}
& li:hover,
& li.active {
background: var(--color-fill-2);
color: rgb(var(--primary-5));
}
}
</style>
2024-03-12 17:22:22 +08:00
@/api/generate/seitaiGenerate