diff --git a/cdTMP/public/tinymce/skins/content/default/content.css b/cdTMP/public/tinymce/skins/content/default/content.css index 7517787..74d6d51 100644 --- a/cdTMP/public/tinymce/skins/content/default/content.css +++ b/cdTMP/public/tinymce/skins/content/default/content.css @@ -1,6 +1,6 @@ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; - line-height: 1.4; + line-height: 1; margin: 1rem; } table { diff --git a/cdTMP/src/api/generate/bgGenerate.js b/cdTMP/src/api/generate/bgGenerate.js index 942ab28..f21cd31 100644 --- a/cdTMP/src/api/generate/bgGenerate.js +++ b/cdTMP/src/api/generate/bgGenerate.js @@ -143,4 +143,15 @@ export default { params }) }, + /** + * 删除output/bg中所有文件,防止之前数据干扰 + * @returns + */ + deleteBGFiles(params = {}) { + return request({ + url: `/generateBG/create/deleteBGDocument`, + method: "get", + params + }) + } } diff --git a/cdTMP/src/api/generate/hjlGenerate.js b/cdTMP/src/api/generate/hjlGenerate.js index 2555444..36961df 100644 --- a/cdTMP/src/api/generate/hjlGenerate.js +++ b/cdTMP/src/api/generate/hjlGenerate.js @@ -22,4 +22,15 @@ export default { params }) }, + /** + * 删除回归测试记录output/hjl里面的所有文件 + * @returns + */ + deleteHJLFiles(params = {}) { + return request({ + url: `/generateHJL/create/deleteHJLDocument`, + method: "get", + params + }) + } } diff --git a/cdTMP/src/api/generate/hsmGenerate.js b/cdTMP/src/api/generate/hsmGenerate.js index 8018747..986f02d 100644 --- a/cdTMP/src/api/generate/hsmGenerate.js +++ b/cdTMP/src/api/generate/hsmGenerate.js @@ -87,5 +87,16 @@ export default { method: "get", params }) + }, + /** + * 删除output/hsm中的所有文件,例如:防止没有第三轮,出现第三轮 + * @returns + */ + deleteHSMFiles(params = {}) { + return request({ + url: `/generateHSM/create/deleteHSMDocument`, + method: "get", + params + }) } } diff --git a/cdTMP/src/assets/login_picture.svg b/cdTMP/src/assets/login_picture.svg index 3db9adb..a650fc9 100644 --- a/cdTMP/src/assets/login_picture.svg +++ b/cdTMP/src/assets/login_picture.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/cdTMP/src/assets/login_picture2.svg b/cdTMP/src/assets/login_picture2.svg new file mode 100644 index 0000000..3f7937b --- /dev/null +++ b/cdTMP/src/assets/login_picture2.svg @@ -0,0 +1 @@ + diff --git a/cdTMP/src/components/ma-editor/index.vue b/cdTMP/src/components/ma-editor/index.vue index 7774ce0..f3020f1 100644 --- a/cdTMP/src/components/ma-editor/index.vue +++ b/cdTMP/src/components/ma-editor/index.vue @@ -42,7 +42,7 @@ const appStore = useAppStore() const props = defineProps({ modelValue: { type: String }, - height: { type: Number, default: 250 }, + height: { type: Number, default: 200 }, id: { type: String, default: () => "tinymce" + new Date().getTime().toString() }, plugins: { type: [String, Array], @@ -51,8 +51,9 @@ const props = defineProps({ }, toolbar: { type: [String, Array], - default: // 如果要取消粘贴只粘贴文本,需要用户加格式请加上pastetext - "code undo redo restoredraft | paste |bold italic underline strikethrough codesample | preview | alignleft alignjustify indent formatpainter | \ + // 如果要取消粘贴只粘贴文本,需要用户加格式请加上pastetext + default: + "code undo redo restoredraft | paste |bold codesample | preview | alignleft alignjustify indent formatpainter | \ styleselect formatselect fontselect fontsizeselect | bullist numlist | blockquote subscript superscript removeformat | charmap pagebreak insertdatetime" } }) @@ -116,3 +117,4 @@ watch( (vl) => emit("change", vl) ) + diff --git a/cdTMP/src/views/login.vue b/cdTMP/src/views/login.vue index 51a0e8f..3704bf5 100644 --- a/cdTMP/src/views/login.vue +++ b/cdTMP/src/views/login.vue @@ -161,7 +161,7 @@ const handleSubmit = async ({ values, errors }) => { height: 491px; background-image: url(@/assets/login_picture.svg); background-repeat: no-repeat; - background-position: center 60px; + background-position: center 140px; background-size: contain; } diff --git a/cdTMP/src/views/project/case/components/ProblemChoose.vue b/cdTMP/src/views/project/case/components/ProblemChoose.vue index 176ff98..88c70b3 100644 --- a/cdTMP/src/views/project/case/components/ProblemChoose.vue +++ b/cdTMP/src/views/project/case/components/ProblemChoose.vue @@ -65,14 +65,15 @@ const handleRelatedChange = async (record) => { record.related = !record.related loading.value = false }) - if (!res.data.isOK) { - // 后台说没关联成功则保持不变 - record.related = !record.related - loading.value = false + if (res) { + if (!res.data.isOK) { + // 后台说没关联成功则保持不变 + record.related = !record.related + loading.value = false + } } loading.value = false emits("relatedOrunrelated") - Message.success(res.message) } // 数据定义 diff --git a/cdTMP/src/views/project/case/index.vue b/cdTMP/src/views/project/case/index.vue index e3bd882..8e3b299 100644 --- a/cdTMP/src/views/project/case/index.vue +++ b/cdTMP/src/views/project/case/index.vue @@ -31,6 +31,7 @@ import { useRoute, useRouter } from "vue-router" import problemApi from "@/api/project/problem" import { useTreeDataStore } from "@/store" import ProblemChoose from "./components/ProblemChoose.vue" +import { Message } from "@arco-design/web-vue" const treeDataStore = useTreeDataStore() const route = useRoute() const router = useRouter() @@ -59,6 +60,12 @@ const crudOptions = ref({ delete: { show: true, api: problemApi.delete }, operationColumnAlign: "center", // 操作列居中 beforeOpenAdd: function () { + // 先判断是否已经有个问题单了,如果有则不让用户创建 + if (crudRef.value.getTableData().length >= 1) { + Message.error("该用例已经存在问题单了,可在轮次树节点右键添加无关联问题单") + return false + } + // 下面是弹窗的标题路径 let key_split = route.query.key.split("-") let round_key = key_split[0] let dut_key = key_split[1] @@ -183,7 +190,7 @@ const crudOptions = ref({ { span: 12, formList: [{ dataIndex: "verifyPerson" }] }, { span: 12, formList: [{ dataIndex: "verifyDate" }] } ] - }, + } ] } }) @@ -359,7 +366,7 @@ const crudColumns = ref([ hide: true, dataIndex: "designerPerson", formType: "input", - commonRules: [{ required: true, message: "开发人员必填" }], + commonRules: [{ required: true, message: "开发人员必填" }] }, { title: "开发方日期", @@ -380,7 +387,7 @@ const crudColumns = ref([ hide: true, dataIndex: "verifyDate", formType: "date" - }, + } ]) diff --git a/cdTMP/src/views/project/design-demand/index.vue b/cdTMP/src/views/project/design-demand/index.vue index 3eaa530..48b4a2d 100644 --- a/cdTMP/src/views/project/design-demand/index.vue +++ b/cdTMP/src/views/project/design-demand/index.vue @@ -299,7 +299,7 @@ const crudColumns = ref([ const subItemFormData = crudRef.value.getFormData().testContent // 取出充分性条件字段字符串 const mapRes = subItemFormData.map((subItem) => subItem.subName) - crudRef.value.getFormData().adequacy = `测试用例覆盖${mapRes}子项要求的全部内容。\n所有用例执行完毕,对于未执行的用例说明未执行原因。` + crudRef.value.getFormData().adequacy = `测试用例覆盖${mapRes.join('、')}子项要求的全部内容。\n所有用例执行完毕,对于未执行的用例说明未执行原因。` } }, { diff --git a/cdTMP/src/views/testmanage/projmanage/index.vue b/cdTMP/src/views/testmanage/projmanage/index.vue index 4f7df08..0f7661d 100644 --- a/cdTMP/src/views/testmanage/projmanage/index.vue +++ b/cdTMP/src/views/testmanage/projmanage/index.vue @@ -164,68 +164,72 @@ const createSmItem = async (record) => { // 大纲生成二级文档 const createDgItem = async (record) => { // 生成测试项文档 - const st = await dgGenerateApi.createTestDemand({ id: record.id }) + await dgGenerateApi.createTestDemand({ id: record.id }) // 标准依据文件 - const st1 = await dgGenerateApi.createYiju({ id: record.id }) + await dgGenerateApi.createYiju({ id: record.id }) // 技术依据文件 - const st2 = await dgGenerateApi.createTechYiju({ id: record.id }) + await dgGenerateApi.createTechYiju({ id: record.id }) // 生成时间和地点 - const st3 = await dgGenerateApi.createTimeaddress({ id: record.id }) + await dgGenerateApi.createTimeaddress({ id: record.id }) // 生成被测软件功能列表 - const st4 = await dgGenerateApi.createFuncList({ id: record.id }) + await dgGenerateApi.createFuncList({ id: record.id }) // 生成测评对象-软件组成 - const st5 = await dgGenerateApi.createSoftComposition({ id: record.id }) + await dgGenerateApi.createSoftComposition({ id: record.id }) // 生成联系人和方式 - const st6 = await dgGenerateApi.createContact({ id: record.id }) + await dgGenerateApi.createContact({ id: record.id }) // 生成测试充分性(adequancy)和有效性(effectiveness)说明 - const st7 = await dgGenerateApi.createAdequacyEffectiveness({ id: record.id }) + await dgGenerateApi.createAdequacyEffectiveness({ id: record.id }) // 生成测评组织及分工 - const st8 = await dgGenerateApi.createGroup({ id: record.id }) + await dgGenerateApi.createGroup({ id: record.id }) // 生成测评保障 - const st9 = await dgGenerateApi.createGuarantee({ id: record.id }) + await dgGenerateApi.createGuarantee({ id: record.id }) // 生成缩略语 - const st10 = await dgGenerateApi.createAbbreviation({ id: record.id }) + await dgGenerateApi.createAbbreviation({ id: record.id }) // 生成-被测软件接口 - const st11 = await dgGenerateApi.createInterface({ id: record.id }) + await dgGenerateApi.createInterface({ id: record.id }) // 生成-被测软件性能 - const st12 = await dgGenerateApi.createPerformance({ id: record.id }) + await dgGenerateApi.createPerformance({ id: record.id }) // 生成-被测软件基本信息 - const st13 = await dgGenerateApi.createBaseInformation({ id: record.id }) + await dgGenerateApi.createBaseInformation({ id: record.id }) // 生成-测试总体要求 - const st14 = await dgGenerateApi.createRequirement({ id: record.id }) + await dgGenerateApi.createRequirement({ id: record.id }) // 生成-研总-测试项对照表 - const st15 = await dgGenerateApi.createYzComparison({ id: record.id }) + await dgGenerateApi.createYzComparison({ id: record.id }) // 生成-需求规格说明-测试项对照表 - const st16 = await dgGenerateApi.createXqComparison({ id: record.id }) + await dgGenerateApi.createXqComparison({ id: record.id }) // 生成-反向测试项-需求规格说明对照表 - const st17 = await dgGenerateApi.createFanXqComparison({ id: record.id }) + await dgGenerateApi.createFanXqComparison({ id: record.id }) // 生成-代码质量度量分析表 - const st18 = await dgGenerateApi.createCodeQuality({ id: record.id }) + await dgGenerateApi.createCodeQuality({ id: record.id }) // 生成-软硬件环境 - const st19 = await dgGenerateApi.createEnvironment({ id: record.id }) + await dgGenerateApi.createEnvironment({ id: record.id }) // 生成-主要战技指标 - const st20 = await dgGenerateApi.createMainTech({ id: record.id }) - Message.success(st20.message) + const st = await dgGenerateApi.createMainTech({ id: record.id }) + Message.success(st.message) } // 报告生成二级文档 const createBgItem = async (record) => { - const st1 = await bgGenerateApi.createBgTechYiju({ id: record.id }) - const st2 = await bgGenerateApi.createBgTimeaddress({ id: record.id }) - const st3 = await bgGenerateApi.createBgBaseInformation({ id: record.id }) - const st4 = await bgGenerateApi.createBgCompletionstatus({ id: record.id }) - const st5 = await bgGenerateApi.createBgSummary({ id: record.id }) - const st6 = await bgGenerateApi.createBgContentandresults1({ id: record.id }) - const st7 = await bgGenerateApi.createBgContentandresults2({ id: record.id }) - const st8 = await bgGenerateApi.createBgEffectAndAdquacy({ id: record.id }) - const st9 = await bgGenerateApi.createBgDemandEffective({ id: record.id }) - const st10 = await bgGenerateApi.createBgQualityEvaluate({ id: record.id }) - const st11 = await bgGenerateApi.createBgEntire({ id: record.id }) - const st12 = await bgGenerateApi.createBgYzxqTrack({ id: record.id }) - const st13 = await bgGenerateApi.createBgProblemsSummary({ id: record.id }) - Message.success(st13.message) + // 删除output/bg文件夹下文件 + await bgGenerateApi.deleteBGFiles({ id: record.id }) + await bgGenerateApi.createBgTechYiju({ id: record.id }) + await bgGenerateApi.createBgTimeaddress({ id: record.id }) + await bgGenerateApi.createBgBaseInformation({ id: record.id }) + await bgGenerateApi.createBgCompletionstatus({ id: record.id }) + await bgGenerateApi.createBgSummary({ id: record.id }) + await bgGenerateApi.createBgContentandresults1({ id: record.id }) + await bgGenerateApi.createBgContentandresults2({ id: record.id }) + await bgGenerateApi.createBgEffectAndAdquacy({ id: record.id }) + await bgGenerateApi.createBgDemandEffective({ id: record.id }) + await bgGenerateApi.createBgQualityEvaluate({ id: record.id }) + await bgGenerateApi.createBgEntire({ id: record.id }) + await bgGenerateApi.createBgYzxqTrack({ id: record.id }) + const st = await bgGenerateApi.createBgProblemsSummary({ id: record.id }) + Message.success(st.message) } // 回归测试说明二级文档 const createHsmItem = async (record) => { + // 先调用删除文件夹里面文件 + await hsmGenerateApi.deleteHSMFiles({ id: record.id }) await hsmGenerateApi.createBasicInfo({ id: record.id }) await hsmGenerateApi.createDocSummary({ id: record.id }) await hsmGenerateApi.createJstech({ id: record.id }) @@ -238,6 +242,8 @@ const createHsmItem = async (record) => { } // 回归测试记录二级文档 const createHjlItem = async (record) => { + // 先调用删除文件夹里面文件 + await hjlGenerateApi.deleteHJLFiles({ id: record.id }) await hjlGenerateApi.createBasicInfo({ id: record.id }) const st = await hjlGenerateApi.createCaseinfo({ id: record.id }) Message.success(st.message)