Files
cdTestPlant3/cdTMP/src/layout/treeHooks/mustSoDut.ts

124 lines
4.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { Message, Notification } from "@arco-design/web-vue"
import { useTreeDataStore } from "@/store"
import dutApi from "@/api/project/dut"
import { useRouter } from "vue-router"
import { ref, onMounted } from "vue"
import type { Ref } from "vue"
import MaFormModal from "@/components/ma-form-modal/index.vue"
// 源代码弹窗ma-form的列定义
// 源代码so_dut的弹窗
const soDutColumn = ref([
{
title: "轮次key",
dataIndex: "round_key",
placeholder: "非用户填写",
disabled: true,
rules: [{ required: true, message: "非用户填写,但必填" }]
},
{
title: "代码版本",
dataIndex: "version",
placeholder: "请输入代码版本注意不要带V",
rules: [{ required: true, message: "代码版本必填" }],
openPrepend: true
},
{
title: "用户标识",
dataIndex: "userRef",
placeholder: "请输入用户标识",
help: "客户使用的标识",
rules: [{ required: true, message: "用户标识为客户的标识,必填,可随意填写后面再修改" }]
},
{
title: "单位",
dataIndex: "unit",
placeholder: "请选择单位名称",
formType: "select",
dict: { url: "system/contact/index", props: { label: "name", value: "name" }, translation: true },
rules: [{ required: true, message: "单位必选" }]
},
{
title: "总行数",
dataIndex: "total_lines",
formType: "input-number",
rules: [{ required: true, message: "总行数必填" }],
min: 0
},
{
title: "有效行数",
dataIndex: "effective_lines",
formType: "input-number",
rules: [{ required: true, message: "有效行数必填" }],
min: 0
},
{
title: "注释行数",
dataIndex: "comment_lines",
formType: "input-number",
rules: [{ required: true, message: "注释行数必填" }],
min: 0
}
])
/**判断必须包含源代码被测件的弹窗,用户提交/取消逻辑 */
export default function useMustSoDut(projectId: Ref<string>) {
// global
const treeDataStore = useTreeDataStore()
const router = useRouter()
// refs
const soDutFormRef = ref<InstanceType<typeof MaFormModal>>() // 源代码强制弹窗ref
const soDutModalTitle = ref("强制添加第一轮源代码信息")
// lifecycles
onMounted(async () => {
await treeDataStore.initTreeData(projectId.value)
// 依次找轮次里面是否有源代码被测件,如果没有则强制弹窗让用户创建
handleSoDutExistsForceModal()
})
const handleSoDutExistsForceModal = async () => {
/// 主动后端请求
const res = await dutApi.getSoExists({ id: projectId.value })
res.data.round_list.forEach((item) => {
if (!item.isExists) {
Message.warning(`识别到您未添加第${parseInt(item.key) + 1}轮源代码的信息,请填写信息自动创建`)
soDutModalTitle.value = `强制添加第${parseInt(item.key) + 1}轮源代码的信息`
soDutFormRef.value!.open({ round_key: item.key })
return
}
})
}
// events
/**
* 提交源代码被测件
*/
const handleSoDutSubmit = async (data: object) => {
// 只有一个参数就是被提交的数据然后返回false阻止弹窗消失
const input_data = { ...data, project_id: projectId.value }
const res = await dutApi.createR1SoDut(input_data)
if (res.code == 200) {
treeDataStore.updateDutTreeData(res.data, projectId.value)
Message.success("添加源代码被测件成功,并自动创建第一轮的文档审查、静态分析、代码审查测试项和用例")
setTimeout(() => {
location.reload()
}, 500)
return
}
return false
}
/**
* 用户点击源代码被测件取消按钮 -> 返回项目管理页面
*/
const handleSoDutCancel = () => {
Notification.error("必须按要求添加源代码信息,返回项目列表页面!")
router.replace({ name: "projmanage" })
}
return {
soDutFormRef,
soDutModalTitle,
handleSoDutExistsForceModal,
handleSoDutSubmit,
handleSoDutCancel,
soDutColumn
}
}