From 68fca91e987fd29b9a8b012ad0818e65559e708d Mon Sep 17 00:00:00 2001 From: chenjiale Date: Mon, 1 Dec 2025 14:48:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E8=AF=84=E4=BC=B0?= =?UTF-8?q?=E9=80=9A=E8=BF=87=E7=8A=B6=E6=80=81=E5=92=8C=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/model/AssessReport.vue | 45 +++++++++++++++++++++----------- src/views/model/train/index.vue | 27 +++++++++++++++---- 2 files changed, 52 insertions(+), 20 deletions(-) diff --git a/src/views/model/AssessReport.vue b/src/views/model/AssessReport.vue index 28ce133..5dff27e 100644 --- a/src/views/model/AssessReport.vue +++ b/src/views/model/AssessReport.vue @@ -100,6 +100,7 @@ export default defineComponent({ const cleanSummary = ref() const cleanModalVisible = ref(false) const selectedVersion = ref(((route.query.version as string) || 'v-test').replace('%20', ' ')) + const evaluatePassed = ref(false) const formModel = reactive<{ version: string @@ -299,6 +300,7 @@ export default defineComponent({ createMessage.error('缺少模型ID') return } + evaluatePassed.value = false loading.value = true try { if (reportId.value) { @@ -350,7 +352,6 @@ export default defineComponent({ } } - const toggleAlarm = (row: AssessPointRow, checked: boolean) => { row.alarm = checked assessRows.value = assessRows.value.filter(item => item.pointId !== row.pointId) @@ -438,6 +439,21 @@ export default defineComponent({ } } + const buildTestTime = () => { + if (formModel.timeRange && formModel.timeRange.length === 2) { + return formModel.timeRange + .map(t => dayjs(t).format('YYYY-MM-DD HH:mm:ss')) + .join(',') + } + const trainTime = baseInfo.value?.trainTime || [] + const pieces: string[] = [] + trainTime.forEach((t: any) => { + if (t.st && t.et) + pieces.push(`${t.st},${t.et}`) + }) + return pieces.join(';') + } + const buildLegacyPayload = (row?: AssessRow) => { const points = pointRows.value const total = points.length @@ -448,7 +464,7 @@ export default defineComponent({ points.forEach((p) => { dead.push(p.dead ? 1 : 0) limit.push(p.limit ? 1 : 0) - uplow.push(`${p.Lower ?? p.lower ?? ''},${p.Upper ?? p.upper ?? ''}`) + uplow.push(`${p.Lower ?? p.lower ?? null},${p.Upper ?? p.upper ?? null}`) }) const selected = row ? [row] : assessRows.value @@ -459,19 +475,7 @@ export default defineComponent({ }) const intervalMs = baseInfo.value?.sampling ? Number(baseInfo.value.sampling) * 1000 : 0 - let time = '' - if (formModel.timeRange && formModel.timeRange.length === 2) { - time = formModel.timeRange.join(',') - } - else { - const trainTime = baseInfo.value?.trainTime || [] - const pieces: string[] = [] - trainTime.forEach((t: any) => { - if (Number(t.mode) > 0 && t.st && t.et) - pieces.push(`${t.st},${t.et}`) - }) - time = pieces.join(';') - } + const time = buildTestTime() const limitValue = (() => { try { const m = baseInfo.value?.para?.Model_info @@ -515,6 +519,12 @@ export default defineComponent({ createMessage.warning('请先选择参与预警的参数') return } + const testTime = buildTestTime() + if (!testTime) { + createMessage.warning('缺少评估时间,请选择时间范围或补充训练时间') + return + } + evaluatePassed.value = false evaluateLoading.value = true try { const legacyPayload = buildLegacyPayload(row) @@ -557,6 +567,7 @@ export default defineComponent({ if (!timestamp.value) timestamp.value = dayjs().format('YYYY-MM-DD HH:mm:ss') + evaluatePassed.value = true createMessage.success('评估完成') } catch (error) { @@ -576,6 +587,10 @@ export default defineComponent({ createMessage.warning('请至少保留一个参与预警的参数') return } + if (!evaluatePassed.value) { + createMessage.warning('评估未通过,无法提交') + return + } submitLoading.value = true try { const scoreSummary = computeScore() diff --git a/src/views/model/train/index.vue b/src/views/model/train/index.vue index 52ee6fd..0903593 100644 --- a/src/views/model/train/index.vue +++ b/src/views/model/train/index.vue @@ -4,7 +4,7 @@ import type { Dayjs } from 'dayjs' import { debounce } from 'lodash-es' import dayjs from 'dayjs' import { computed, defineComponent, onMounted, ref, toRaw, watch } from 'vue' -import { useRoute } from 'vue-router' +import { useRoute, useRouter } from 'vue-router' import { Button, Card, @@ -82,13 +82,17 @@ export default defineComponent({ setup() { const { createMessage } = useMessage() const route = useRoute() + const router = useRouter() const go = useGo() const id = route.params.id - const routeVersion = route.query.version as string | undefined + const routeVersion = computed(() => route.query.version as string | undefined) const model = ref(null) const brushActivated = ref>(new Set()) const spinning = ref(false) let trainTimeCopy = '' + const syncRouteVersion = (version: string) => { + router.replace({ query: { ...route.query, version } }) + } const applyModelValue = (payload: any) => { if (!payload) return @@ -112,10 +116,12 @@ export default defineComponent({ } const fetchModelInfo = async (version?: string) => { - const path = version ? `${id}?version=${encodeURIComponent(version)}` : (routeVersion ? `${id}?version=${encodeURIComponent(routeVersion)}` : id) + const path = version ? `${id}?version=${encodeURIComponent(version)}` : (routeVersion.value ? `${id}?version=${encodeURIComponent(routeVersion.value)}` : id) const modelInfo = await modelInfoApi(path) applyModelValue(modelInfo) selectedVersion.value = modelInfo?.version || modelInfo?.Cur_Version || '' + if (selectedVersion.value) + syncRouteVersion(selectedVersion.value) await loadReportName(selectedVersion.value) getHistory() } @@ -386,6 +392,9 @@ export default defineComponent({ isInitBrush.value = false return } + if (!isInitBrush.value && model.value?.version != 'v-test') + return + const selected = params.batch[0].selected if (selected.length > 0) { const areas = mergeAreas(params.batch[0].areas).map(area => ({ @@ -782,7 +791,7 @@ export default defineComponent({ const reportList = ref([]) const selectedReportId = ref(null) const reportName = ref('暂无报告') - const reportNameOptions = ref<{ label: string; value: number }[]>([]) + const reportNameOptions = ref<{ label: string, value: number }[]>([]) const reportNameSelectVisible = ref(false) const selectedReportNameId = ref(null) const isVTestVersion = computed( @@ -888,7 +897,13 @@ export default defineComponent({ spinning.value = true try { const response = await bottomModelApi(model.value.id, selectedReportId.value) - applyModelValue(response) + const bottomedVersion = response?.Cur_Version || response?.version + if (bottomedVersion) { + selectedVersion.value = bottomedVersion + syncRouteVersion(bottomedVersion) + } + await fetchModelInfo(bottomedVersion) + console.log('模型下装成功:', model.value) createMessage.success('模型下装成功') reportModalVisible.value = false } @@ -933,6 +948,7 @@ export default defineComponent({ if (!value) return await fetchModelInfo(value) + syncRouteVersion(value) } async function createDraftVersion() { @@ -957,6 +973,7 @@ export default defineComponent({ version: 'v-test', } } + syncRouteVersion('v-test') createMessage.success('已创建草稿版本 v-test,请重新训练') versionList.value = [] await fetchModelInfo('v-test')