升级第三方包

This commit is contained in:
2024-12-06 19:02:49 +08:00
parent 9cfecd7309
commit 05a117152c
8 changed files with 631 additions and 515 deletions

754
cdTMP/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -13,10 +13,10 @@
"dependencies": {
"@arco-design/color": "^0.4.0",
"@arco-design/web-vue": "^2.56.3",
"@tanstack/vue-query": "^5.60.6",
"@tanstack/vue-query": "^5.62.2",
"@tinymce/tinymce-vue": "^6.1.0",
"@vueuse/core": "^11.2.0",
"axios": "^1.7.7",
"@vueuse/core": "^12.0.0",
"axios": "^1.7.9",
"dayjs": "^1.11.13",
"echarts": "^5.5.1",
"file2md5": "^1.3.0",
@@ -24,7 +24,7 @@
"mammoth": "^1.8.0",
"mitt": "^3.0.1",
"nprogress": "^0.2.0",
"pinia": "^2.2.6",
"pinia": "^2.3.0",
"pinyin-match": "^1.2.6",
"postcss-import": "^16.1.0",
"qs": "^6.13.1",
@@ -33,29 +33,28 @@
"vue-clipboard3": "^2.0.0",
"vue-color-kit": "^1.0.6",
"vue-echarts": "^7.0.3",
"vue-router": "^4.4.5",
"vue-router": "^4.5.0",
"vuedraggable": "^2.24.3"
},
"devDependencies": {
"@types/lodash-es": "^4.17.12",
"@types/node": "^22.9.1",
"@types/node": "^22.10.1",
"@types/nprogress": "^0.2.3",
"@types/qs": "^6.9.17",
"@vitejs/plugin-vue": "^5.2.0",
"@vitejs/plugin-vue-jsx": "^4.1.0",
"@vitejs/plugin-vue": "^5.2.1",
"@vitejs/plugin-vue-jsx": "^4.1.1",
"@vue/babel-plugin-jsx": "^1.2.5",
"autoprefixer": "^10.4.20",
"browserslist": "^4.24.2",
"caniuse-lite": "^1.0.30001680",
"eslint": "^9.15.0",
"eslint-plugin-vue": "^9.31.0",
"less": "^4.2.0",
"eslint": "^9.16.0",
"eslint-plugin-vue": "^9.32.0",
"less": "^4.2.1",
"less-loader": "^12.2.0",
"postcss": "^8.4.49",
"prettier": "^3.3.3",
"prettier": "^3.4.2",
"rollup-plugin-visualizer": "^5.12.0",
"tailwindcss": "^3.4.15",
"typescript": "^5.6.3",
"vite": "^5.4.11"
"tailwindcss": "^3.4.16",
"typescript": "^5.7.2",
"vite": "^6.0.3"
}
}

View File

@@ -112,11 +112,88 @@ export default {
},
/**
*
* @returns 生成软硬件环境output_dir
* @returns 生成-静态测试环境说明
*/
createEnvironment(params = {}) {
createStaticEnvironment(params = {}) {
return request({
url: `/generate/create/environment`,
url: `/generate/create/static_env`,
method: "get",
params
})
},
/**
*
* @returns 生成-静态软件项文档片段
*/
createStaticSoft(params = {}) {
return request({
url: `/generate/create/static_soft`,
method: "get",
params
})
},
/**
*
* @returns 生成-静态硬件和固件项
*/
createStaticHard(params = {}) {
return request({
url: `/generate/create/static_hard`,
method: "get",
params
})
},
/**
*
* @returns 生成-动态测试环境说明
*/
createDynamicEnv(params = {}) {
return request({
url: `/generate/create/dynamic_env`,
method: "get",
params
})
},
/**
*
* @returns 生成-动态软件项
*/
createDynamicSoft(params = {}) {
return request({
url: `/generate/create/dynamic_soft`,
method: "get",
params
})
},
/**
*
* @returns 生成-动态硬件项
*/
createDynamicHard(params = {}) {
return request({
url: `/generate/create/dynamic_hard`,
method: "get",
params
})
},
/**
*
* @returns 生成-测试数据
*/
createTestData(params = {}) {
return request({
url: `/generate/create/test_data`,
method: "get",
params
})
},
/**
*
* @returns 生成-环境差异性分析
*/
createEnvDiff(params = {}) {
return request({
url: `/generate/create/env_diff`,
method: "get",
params
})

View File

@@ -1,74 +1,63 @@
<template>
<a-modal
:width="prop.width"
:fullscreen="isFull"
v-model:visible="modal.visible"
:on-before-ok="modal.submit"
:unmount-on-close="true"
@cancel="modal.cancel"
>
<template #title>
{{ prop.title }}
</template>
<slot></slot>
<slot name="body"></slot>
<a-card
class="mt-2"
:hoverable="true"
v-for="info in layout"
<a-modal
:width="prop.width"
:fullscreen="isFull"
v-model:visible="modal.visible"
:on-before-ok="modal.submit"
:unmount-on-close="true"
@cancel="modal.cancel"
>
<ma-info
v-if="isArray(info?.child)"
:title="info.title"
:columns="info.child"
:data="infoData"
ref="maInfoRefs"
></ma-info>
<a-descriptions
:title="info.title"
v-else
>
<component
:data="infoData"
:is="info?.component"
<template #title>
{{ prop.title }}
</template>
<slot></slot>
<slot name="body"></slot>
<a-card class="mt-2" :hoverable="true" v-for="info in layout">
<ma-info
v-if="isArray(info?.child)"
:title="info.title"
:columns="info.child"
:data="infoData"
ref="maInfoRefs"
></ma-info>
<a-descriptions :title="info.title" v-else>
<component :data="infoData" :is="info?.component" />
</a-descriptions>
</a-card>
<ma-form
v-model="form"
ref="maFormRef"
v-if="prop.formColumns.length > 0"
:columns="prop.formColumns"
:options="{ showButtons: false, ...prop.formOptions }"
/>
</a-descriptions>
</a-card>
<ma-form
v-model="form"
ref="maFormRef"
v-if="prop.formColumns.length > 0"
:columns="prop.formColumns"
:options="{showButtons: false, ...prop.formOptions}"
/>
</a-modal>
</a-modal>
</template>
<script setup>
import MaInfo from "../ma-info/index.vue";
import {getCurrentInstance, reactive, ref, watch} from "vue";
import {isArray, isFunction, isObject, isString} from "lodash-es";
import {isComponent} from "@arco-design/web-vue/es/_utils/vue-utils";
import {setModalSizeEvent} from "@/utils/common";
const emit = defineEmits(["visible", "validateError", "open", "cancel", "close"]);
import MaInfo from "../ma-info/index.vue"
import { getCurrentInstance, reactive, ref, watch } from "vue"
import { isArray, isFunction, isObject, isString } from "lodash-es"
import { isComponent } from "@arco-design/web-vue/es/_utils/vue-utils"
import { setModalSizeEvent } from "@/utils/common"
const emit = defineEmits(["visible", "validateError", "open", "cancel", "close"])
const app = getCurrentInstance().appContext.app
const maFormRef = ref()
const prop = defineProps({
width: {type: Number, default: 1200}, // modal框大小
isFull: { type: Boolean, default: false},
title: { type: String, default: "" }, // 弹出框标题
column: { type: Array, default: [] }, // ma-form字段
default_visible: { type: Boolean, default: false}, // 默认隐藏
options: { type: Object, default: {} }, // ma-form 属性
submit: { type: Function, default: () => {} },
layout: { type: Object, default:[]},
formOptions: {type: Object, default: {}}, // ma-form-options
formColumns: { type: Array, default: []}
});
width: { type: Number, default: 1200 }, // modal框大小
isFull: { type: Boolean, default: false },
title: { type: String, default: "" }, // 弹出框标题
column: { type: Array, default: [] }, // ma-form字段
default_visible: { type: Boolean, default: false }, // 默认隐藏
options: { type: Object, default: {} }, // ma-form 属性
submit: { type: Function, default: () => {} },
layout: { type: Object, default: [] },
formOptions: { type: Object, default: {} }, // ma-form-options
formColumns: { type: Array, default: [] }
})
const isFull = ref(prop.isFull)
setModalSizeEvent((config) => {
isFull.value = config.isFull
isFull.value = config.isFull
})
const maInfoRefs = ref([])
@@ -76,75 +65,77 @@ const layout = ref([])
const infoData = ref({})
const form = ref({})
watch(() => prop.layout, val => {
layout.value = val
},{
immediate: true,
})
watch(
() => prop.layout,
(val) => {
layout.value = val
},
{
immediate: true
}
)
let columnMap = {}
const init = async () => {
let column = prop.column
column.forEach(item => {
columnMap[item.dataIndex] = item
})
if (layout.value.length > 0) {
layout.value.forEach((item) => {
if (item.component) {
app.component(item.component, item.child)
return;
}
item.child.forEach((child, index) => {
if (isString(child)) {
item.child[index] = columnMap[child]
}
})
let column = prop.column
column.forEach((item) => {
columnMap[item.dataIndex] = item
})
}else{
layout.value.push({
title: "",
child: column,
})
}
if (layout.value.length > 0) {
layout.value.forEach((item) => {
if (item.component) {
app.component(item.component, item.child)
return
}
item.child.forEach((child, index) => {
if (isString(child)) {
item.child[index] = columnMap[child]
}
})
})
} else {
layout.value.push({
title: "",
child: column
})
}
}
const modal = reactive({
visible: prop.default_visible,
open(data, formData = {}) {
modal.visible = true;
for (let [key, value] of Object.entries(data)) {
infoData.value[key] = value;
visible: prop.default_visible,
open(data, formData = {}) {
modal.visible = true
for (let [key, value] of Object.entries(data)) {
infoData.value[key] = value
}
for (let [key, value] of Object.entries(formData)) {
form.value[key] = value
}
emit("open", infoData)
},
close() {
modal.visible = false
},
async submit() {
let validate = await maFormRef.value.validateForm()
if (validate) {
emit("validateError", validate)
return false
}
return prop.submit(form._rawValue)
},
cancel() {
emit("cancel")
}
for (let [key, value] of Object.entries(formData)) {
form.value[key] = value;
}
emit("open", infoData);
},
close() {
modal.visible = false;
},
async submit() {
let validate = await maFormRef.value.validateForm()
if (validate) {
emit("validateError", validate)
return false
}
return prop.submit(form._rawValue)
},
cancel() {
emit("cancel");
},
});
})
init()
defineExpose({
open: modal.open,
close: modal.close,
data: infoData,
});
open: modal.open,
close: modal.close,
data: infoData
})
</script>
<style scoped>
</style>
<style scoped></style>

View File

@@ -13,12 +13,12 @@ const props = defineProps({
const checkResult = (verifyCode) => {
if (!verifyCode || verifyCode.length === 0) {
props.showError && Message.error(t("sys.verifyCode.notice"))
props.showError && Message.error("请输入验证码")
return false
}
if (verifyCode.toLowerCase() !== codeText.value.toLowerCase()) {
props.showError && Message.error(t("sys.verifyCode.error"))
props.showError && Message.error("验证码错误,请刷新后重试")
generateCode()
return false
} else {

View File

@@ -10,6 +10,7 @@ export default function useUser() {
await userStore.logout()
const currentRoute = router.currentRoute.value
Message.success('登出成功')
document.body.setAttribute("arco-theme", "light")
router.push({
name: logoutTo && typeof logoutTo === 'string' ? logoutTo : 'login',
query: {

View File

@@ -43,7 +43,16 @@ const useGenerateSecond = function () {
dgGenerateApi.createBaseInformation({ id }), // 生成被测软件基本信息 - 和大纲重复 - 可能会删除
dgGenerateApi.createYiju({ id }), // 生成标准类引用文档 - 和大纲重复 - 可能会删除
smGenerateApi.createSMTechyiju({ id }), // 生成技术类引用文档列表 -> 在大纲基础上添加《测评大纲》
dgGenerateApi.createEnvironment({ id }), // 生成软硬件环境(注意标题级别不一样,这个在最后处理)
// 拆分软硬件环境
dgGenerateApi.createStaticEnvironment({ id }), // 生成-静态测试环境说明
dgGenerateApi.createStaticSoft({ id }), // 生成-静态软件项
dgGenerateApi.createStaticHard({ id }), // 生成-静态硬件和固件项
dgGenerateApi.createDynamicEnv({ id }), // 生成-动态测试环境说明
dgGenerateApi.createDynamicSoft({ id }), // 生成-动态软件项
dgGenerateApi.createDynamicHard({ id }), // 生成-动态硬件和固件项
dgGenerateApi.createTestData({ id }), // 生成-测评数据
dgGenerateApi.createEnvDiff({ id }), // 生成-环境差异性分析
// ~~~
smGenerateApi.createSMCaseList({ id }), // 生成用例全
smGenerateApi.createSMCaseBreifList({ id }), // 生成用例列表-那个表格
smGenerateApi.createSMTrack({ id }) // 生成说明追踪
@@ -78,7 +87,16 @@ const useGenerateSecond = function () {
dgGenerateApi.createXqComparison({ id }), // 生成-需求规格说明-测试项对照表
dgGenerateApi.createFanXqComparison({ id }), // 生成-反向测试项-需求规格说明对照表
dgGenerateApi.createCodeQuality({ id }), // 生成-代码质量度量分析表
dgGenerateApi.createEnvironment({ id }), // 生成-软硬件环境
// 新增拆分接口
dgGenerateApi.createStaticEnvironment({ id }), // 生成-静态测试环境说明
dgGenerateApi.createStaticSoft({ id }), // 生成-静态软件项
dgGenerateApi.createStaticHard({ id }), // 生成-静态硬件和固件项
dgGenerateApi.createDynamicEnv({ id }), // 生成-动态测试环境说明
dgGenerateApi.createDynamicSoft({ id }), // 生成-动态软件项
dgGenerateApi.createDynamicHard({ id }), // 生成-动态硬件和固件项
dgGenerateApi.createTestData({ id }), // 生成-测评数据
dgGenerateApi.createEnvDiff({ id }), // 生成-环境差异性分析
// ~~~~~~~~~
dgGenerateApi.createMainTech({ id }) // 生成-主要战技指标
]).finally(() => {
isGenerating.value = false
@@ -105,7 +123,16 @@ const useGenerateSecond = function () {
bgGenerateApi.createBgQualityEvaluate({ id }),
bgGenerateApi.createBgEntire({ id }),
bgGenerateApi.createBgYzxqTrack({ id }),
bgGenerateApi.createBgProblemsSummary({ id })
bgGenerateApi.createBgProblemsSummary({ id }),
// 拆分软硬件环境
dgGenerateApi.createStaticEnvironment({ id }), // 生成-静态测试环境说明
dgGenerateApi.createStaticSoft({ id }), // 生成-静态软件项
dgGenerateApi.createStaticHard({ id }), // 生成-静态硬件和固件项
dgGenerateApi.createDynamicEnv({ id }), // 生成-动态测试环境说明
dgGenerateApi.createDynamicSoft({ id }), // 生成-动态软件项
dgGenerateApi.createDynamicHard({ id }), // 生成-动态硬件和固件项
dgGenerateApi.createTestData({ id }), // 生成-测评数据
dgGenerateApi.createEnvDiff({ id }) // 生成-环境差异性分析
]).finally(() => {
isGenerating.value = false
isBgLoading.value = false
@@ -126,7 +153,16 @@ const useGenerateSecond = function () {
hsmGenerateApi.createHdemand({ id }),
hsmGenerateApi.createCaseListDesc({ id }),
hsmGenerateApi.createCaseList({ id }),
hsmGenerateApi.createTrack({ id })
hsmGenerateApi.createTrack({ id }),
// 拆分大纲软硬件环境
dgGenerateApi.createStaticEnvironment({ id }), // 生成-静态测试环境说明
dgGenerateApi.createStaticSoft({ id }), // 生成-静态软件项
dgGenerateApi.createStaticHard({ id }), // 生成-静态硬件和固件项
dgGenerateApi.createDynamicEnv({ id }), // 生成-动态测试环境说明
dgGenerateApi.createDynamicSoft({ id }), // 生成-动态软件项
dgGenerateApi.createDynamicHard({ id }), // 生成-动态硬件和固件项
dgGenerateApi.createTestData({ id }), // 生成-测评数据
dgGenerateApi.createEnvDiff({ id }) // 生成-环境差异性分析
]).finally(() => {
isGenerating.value = false
ishsmLoading.value = false

File diff suppressed because one or more lines are too long