|
|
|
@ -19,8 +19,11 @@ import { |
|
|
|
Modal, |
|
|
|
RangePicker, |
|
|
|
Row, |
|
|
|
Select, |
|
|
|
Space, |
|
|
|
Spin, |
|
|
|
Steps, |
|
|
|
Table, |
|
|
|
Tabs, |
|
|
|
Transfer, |
|
|
|
} from 'ant-design-vue' |
|
|
|
@ -30,16 +33,21 @@ import { BasicTable, useTable } from '@/components/Table' |
|
|
|
import { PageWrapper } from '@/components/Page' |
|
|
|
import { |
|
|
|
bottomModelApi, |
|
|
|
createDraftVersionApi, |
|
|
|
modelInfoApi, |
|
|
|
testModelApi, |
|
|
|
trainModelApi, |
|
|
|
updateModelInfo, |
|
|
|
versionListApi, |
|
|
|
} from '@/api/alert/model/models' |
|
|
|
import { fetchAssessReportList, fetchAssessReportNames } from '@/api/alert/model/assessReport' |
|
|
|
import type { AssessReportSimple } from '@/api/alert/model/model/assessReportModel' |
|
|
|
import { getExaHistorys } from '@/api/alert/exa/index' |
|
|
|
import { useECharts } from '@/hooks/web/useECharts' |
|
|
|
import { useMessage } from '@/hooks/web/useMessage' |
|
|
|
import { pointListApi } from '@/api/alert/model/select' |
|
|
|
import { useGo } from '@/hooks/web/usePage' |
|
|
|
import Icon from '@/components/Icon' |
|
|
|
|
|
|
|
export default defineComponent({ |
|
|
|
components: { |
|
|
|
@ -53,6 +61,7 @@ export default defineComponent({ |
|
|
|
[Steps.Step.name]: Steps.Step, |
|
|
|
ATabs: Tabs, |
|
|
|
ATabPane: Tabs.TabPane, |
|
|
|
ATable: Table, |
|
|
|
ARangePicker: RangePicker, |
|
|
|
AForm: Form, |
|
|
|
AFormItem: FormItem, |
|
|
|
@ -66,19 +75,26 @@ export default defineComponent({ |
|
|
|
ATransfer: Transfer, |
|
|
|
ARow: Row, |
|
|
|
ACol: Col, |
|
|
|
ASelect: Select, |
|
|
|
ASpace: Space, |
|
|
|
Icon, |
|
|
|
}, |
|
|
|
setup() { |
|
|
|
const { createMessage } = useMessage() |
|
|
|
const route = useRoute() |
|
|
|
const go = useGo() |
|
|
|
const id = route.params.id |
|
|
|
const routeVersion = route.query.version as string | undefined |
|
|
|
const model = ref(null) |
|
|
|
const brushActivated = ref<Set<number>>(new Set()) |
|
|
|
const spinning = ref(false) |
|
|
|
let trainTimeCopy = '' |
|
|
|
const fetchModelInfo = async () => { |
|
|
|
const modelInfo = await modelInfoApi(id) |
|
|
|
const fetchModelInfo = async (version?: string) => { |
|
|
|
const path = version ? `${id}?version=${encodeURIComponent(version)}` : (routeVersion ? `${id}?version=${encodeURIComponent(routeVersion)}` : id) |
|
|
|
const modelInfo = await modelInfoApi(path) |
|
|
|
model.value = normalizeTrainTime(modelInfo) |
|
|
|
selectedVersion.value = modelInfo?.version || modelInfo?.Cur_Version || '' |
|
|
|
await loadReportName(selectedVersion.value) |
|
|
|
trainTimeCopy = JSON.stringify(model.value.trainTime) |
|
|
|
getHistory() |
|
|
|
} |
|
|
|
@ -117,6 +133,22 @@ export default defineComponent({ |
|
|
|
scroll: { y: 300 }, |
|
|
|
}) |
|
|
|
|
|
|
|
const updatePrincipalFromTrainTime = (trainTimeList: any[]) => { |
|
|
|
if (!Array.isArray(trainTimeList) || !model.value) |
|
|
|
return |
|
|
|
// principal is the sum of mode for each trainTime entry |
|
|
|
model.value.principal = trainTimeList.reduce((sum, item) => { |
|
|
|
const modeVal = Number(item?.mode) |
|
|
|
return sum + (Number.isFinite(modeVal) ? modeVal : 0) |
|
|
|
}, 0) |
|
|
|
} |
|
|
|
|
|
|
|
watch( |
|
|
|
() => model.value?.trainTime, |
|
|
|
newTrainTime => updatePrincipalFromTrainTime(newTrainTime as any[]), |
|
|
|
{ deep: true, immediate: true }, |
|
|
|
) |
|
|
|
|
|
|
|
const activeKey = ref('1') |
|
|
|
type RangeValue = [Dayjs, Dayjs] |
|
|
|
const currentDate: Dayjs = dayjs('2023-10-29 00:00:00') |
|
|
|
@ -134,7 +166,7 @@ export default defineComponent({ |
|
|
|
return |
|
|
|
spinning.value = true |
|
|
|
if (model.value.para) { |
|
|
|
getTestData() |
|
|
|
await getTestData() |
|
|
|
} |
|
|
|
else { |
|
|
|
const params = { |
|
|
|
@ -160,12 +192,15 @@ export default defineComponent({ |
|
|
|
spinning.value = false |
|
|
|
} |
|
|
|
|
|
|
|
async function getTestData() { |
|
|
|
async function getTestData(range?: RangeValue) { |
|
|
|
const timeRange = range || historyTime.value |
|
|
|
if (!timeRange) |
|
|
|
return |
|
|
|
const params = { |
|
|
|
Model_id: id, |
|
|
|
version: model.value?.Cur_Version ? model.value?.Cur_Version : 'v-test', |
|
|
|
Test_Data: { |
|
|
|
time: historyTime.value |
|
|
|
time: timeRange |
|
|
|
.map(t => dayjs(t).format('YYYY-MM-DD HH:mm:ss')) |
|
|
|
.join(','), |
|
|
|
points: model.value.pointInfo.map(t => t.pointId).join(','), |
|
|
|
@ -173,20 +208,25 @@ export default defineComponent({ |
|
|
|
}, |
|
|
|
} |
|
|
|
const result = await testModelApi(params) |
|
|
|
const sampleData = result.sampleData |
|
|
|
const reconData = result.reconData |
|
|
|
const sampleData = result?.sampleData ?? result?.SampleData ?? [] |
|
|
|
const reconData = result?.reconData ?? result?.ReconData ?? [] |
|
|
|
if (!Array.isArray(sampleData) || !Array.isArray(reconData) || sampleData.length === 0 || reconData.length === 0) { |
|
|
|
historyList.value = [] |
|
|
|
createMessage.warning('未获取到测试数据') |
|
|
|
return |
|
|
|
} |
|
|
|
const xData = generateTimeList( |
|
|
|
historyTime.value, |
|
|
|
timeRange, |
|
|
|
model.value.sampling * 1000, |
|
|
|
) |
|
|
|
historyList.value = sampleData.map((item, index) => { |
|
|
|
const point = model.value?.pointInfo[index] |
|
|
|
return { |
|
|
|
data: [ |
|
|
|
item.map((t, i) => { |
|
|
|
(Array.isArray(item) ? item : []).map((t, i) => { |
|
|
|
return [xData[i], t] |
|
|
|
}), |
|
|
|
reconData[index].map((t, i) => { |
|
|
|
(Array.isArray(reconData[index]) ? reconData[index] : []).map((t, i) => { |
|
|
|
return [xData[i], t] |
|
|
|
}), |
|
|
|
], |
|
|
|
@ -313,8 +353,8 @@ export default defineComponent({ |
|
|
|
type: 'brush', |
|
|
|
areas, |
|
|
|
}) |
|
|
|
brushActivated.value.add(index) |
|
|
|
isInitBrush.value = true |
|
|
|
brushActivated.value.add(index) |
|
|
|
} |
|
|
|
|
|
|
|
onMounted(async () => { |
|
|
|
@ -349,8 +389,8 @@ export default defineComponent({ |
|
|
|
console.log('Selected train time:', trainTime) |
|
|
|
if (trainTimeCopy === JSON.stringify(trainTime)) |
|
|
|
return |
|
|
|
model.value = normalizeTrainTime({ ...model.value, trainTime }) |
|
|
|
trainTimeCopy = JSON.stringify(model.value.trainTime) |
|
|
|
model.value.trainTime = trainTime |
|
|
|
trainTimeCopy = JSON.stringify(trainTime) |
|
|
|
echartsRefs.value.forEach((chart, index) => { |
|
|
|
if (chart) { |
|
|
|
chart.dispatchAction({ |
|
|
|
@ -447,7 +487,7 @@ export default defineComponent({ |
|
|
|
return |
|
|
|
} |
|
|
|
const params = { |
|
|
|
conditon: modelInfo.alarmmodelset?.alarmcondition || '1==1', |
|
|
|
conditon: modelInfo.alarmmodelset?.alarmcondition || '1=1', |
|
|
|
Hyper_para: { |
|
|
|
percent: modelInfo.rate, |
|
|
|
}, |
|
|
|
@ -492,8 +532,8 @@ export default defineComponent({ |
|
|
|
|
|
|
|
model.value.pointInfo = (model.value.pointInfo || []).map((p: any, idx: number) => { |
|
|
|
const q99 = qcul99Line[idx] |
|
|
|
const upperB = parseFloat(p.upperBound) |
|
|
|
const lowerB = parseFloat(p.lowerBound) |
|
|
|
const upperB = Number.parseFloat(p.upperBound) |
|
|
|
const lowerB = Number.parseFloat(p.lowerBound) |
|
|
|
return { |
|
|
|
...p, |
|
|
|
TMax: pxMax[idx] !== undefined ? Number(pxMax[idx]).toFixed(2) : p.TMax, |
|
|
|
@ -531,7 +571,27 @@ export default defineComponent({ |
|
|
|
} |
|
|
|
|
|
|
|
updateModelInfoDebounced() |
|
|
|
getTestData() |
|
|
|
await updateModelInfoDebounced.flush() |
|
|
|
// 训练完成后自动触发测试,优先使用训练时间范围 |
|
|
|
try { |
|
|
|
if (model.value.trainTime && model.value.trainTime.length > 0) { |
|
|
|
const sorted = [...model.value.trainTime].sort( |
|
|
|
(a, b) => dayjs(a.st).valueOf() - dayjs(b.st).valueOf(), |
|
|
|
) |
|
|
|
const trainRange: RangeValue = [ |
|
|
|
dayjs(sorted[0].st), |
|
|
|
dayjs(sorted[sorted.length - 1].et), |
|
|
|
] |
|
|
|
historyTime.value = trainRange |
|
|
|
await getTestData(trainRange) |
|
|
|
} |
|
|
|
else { |
|
|
|
await getTestData() |
|
|
|
} |
|
|
|
} |
|
|
|
catch (e) { |
|
|
|
console.error('自动测试失败:', e) |
|
|
|
} |
|
|
|
createMessage.success('模型训练成功') |
|
|
|
} |
|
|
|
catch (error) { |
|
|
|
@ -594,7 +654,7 @@ export default defineComponent({ |
|
|
|
} |
|
|
|
|
|
|
|
const mode = ref({ |
|
|
|
alarmcondition: '1==1', |
|
|
|
alarmcondition: '1=1', |
|
|
|
alarmname: '全工况运行', |
|
|
|
}) |
|
|
|
const openEditModeModal = ref<boolean>(false) |
|
|
|
@ -602,7 +662,7 @@ export default defineComponent({ |
|
|
|
function openEditMode() { |
|
|
|
openEditModeModal.value = true |
|
|
|
mode.value = { |
|
|
|
alarmcondition: model.value?.alarmmodelset?.alarmcondition || '1==1', |
|
|
|
alarmcondition: model.value?.alarmmodelset?.alarmcondition || '1=1', |
|
|
|
alarmname: model.value?.alarmmodelset?.alarmname || '全工况运行', |
|
|
|
} |
|
|
|
} |
|
|
|
@ -696,31 +756,214 @@ export default defineComponent({ |
|
|
|
openEditModelModal.value = false |
|
|
|
} |
|
|
|
|
|
|
|
async function bottomModel() { |
|
|
|
if (!model.value.para) { |
|
|
|
const reportModalVisible = ref(false) |
|
|
|
const reportLoading = ref(false) |
|
|
|
const reportList = ref<AssessReportSimple[]>([]) |
|
|
|
const selectedReportId = ref<number | null>(null) |
|
|
|
const reportName = ref<string>('暂无报告') |
|
|
|
const reportNameOptions = ref<{ label: string; value: number }[]>([]) |
|
|
|
const reportNameSelectVisible = ref(false) |
|
|
|
const selectedReportNameId = ref<number | null>(null) |
|
|
|
const isVTestVersion = computed( |
|
|
|
() => (model.value?.Cur_Version || model.value?.version) === 'v-test', |
|
|
|
) |
|
|
|
const isBottomed = computed(() => model.value?.btmState === '已下装') |
|
|
|
const reportColumns = [ |
|
|
|
{ title: '评估时间', dataIndex: 'assessTime' }, |
|
|
|
{ title: '得分', dataIndex: 'score' }, |
|
|
|
{ title: '覆盖面', dataIndex: 'coverRange' }, |
|
|
|
{ title: '验证人', dataIndex: 'identifier' }, |
|
|
|
{ title: '版本', dataIndex: 'version' }, |
|
|
|
{ title: '模式', dataIndex: 'conditionName' }, |
|
|
|
] |
|
|
|
|
|
|
|
function onSelectReport(selectedRowKeys: (string | number)[]) { |
|
|
|
selectedReportId.value = (selectedRowKeys && selectedRowKeys.length > 0) |
|
|
|
? Number(selectedRowKeys[0]) |
|
|
|
: null |
|
|
|
} |
|
|
|
|
|
|
|
function openReportSelector() { |
|
|
|
loadReportName() |
|
|
|
reportNameSelectVisible.value = true |
|
|
|
} |
|
|
|
|
|
|
|
function confirmReportSelect() { |
|
|
|
if (selectedReportNameId.value) |
|
|
|
goAssessReport(selectedReportNameId.value) |
|
|
|
else |
|
|
|
goAssessReport() |
|
|
|
|
|
|
|
reportNameSelectVisible.value = false |
|
|
|
} |
|
|
|
|
|
|
|
async function openBottomModal() { |
|
|
|
if (!model.value?.para) { |
|
|
|
createMessage.error('模型未训练,无法下装') |
|
|
|
return |
|
|
|
} |
|
|
|
if (!model.value?.trainTime || model.value.trainTime.length === 0) { |
|
|
|
createMessage.error('模型尚未建立,无法下装') |
|
|
|
return |
|
|
|
} |
|
|
|
if (model.value?.btmState === '已下装' && (model.value?.Cur_Version || model.value?.version) !== 'v-test') { |
|
|
|
createMessage.error('模型已下装,无法重复操作') |
|
|
|
return |
|
|
|
} |
|
|
|
reportLoading.value = true |
|
|
|
try { |
|
|
|
const version = model.value?.Cur_Version || model.value?.version || 'v-test' |
|
|
|
// todo valid需要改回true,现在为了能下装测试先改成false |
|
|
|
const list = await fetchAssessReportList({ modelId: id as string, version, valid: false }) |
|
|
|
reportList.value = list || [] |
|
|
|
if (!reportList.value.length) { |
|
|
|
createMessage.error('请先完成合格并审核通过的评估报告') |
|
|
|
return |
|
|
|
} |
|
|
|
selectedReportId.value = reportList.value[0]?.id ?? null |
|
|
|
reportModalVisible.value = true |
|
|
|
} |
|
|
|
catch (error) { |
|
|
|
console.error('获取评估报告失败:', error) |
|
|
|
createMessage.error('获取评估报告失败') |
|
|
|
} |
|
|
|
finally { |
|
|
|
reportLoading.value = false |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
async function loadReportName(version?: string) { |
|
|
|
try { |
|
|
|
reportLoading.value = true |
|
|
|
const names = await fetchAssessReportNames({ modelId: id as string, version: version || selectedVersion.value }) |
|
|
|
if (names && names.length > 0) { |
|
|
|
reportName.value = names[0].name |
|
|
|
selectedReportId.value = names[0].id |
|
|
|
selectedReportNameId.value = names[0].id |
|
|
|
reportNameOptions.value = names.map(n => ({ label: n.name, value: n.id })) |
|
|
|
} |
|
|
|
else { |
|
|
|
reportName.value = '暂无报告' |
|
|
|
selectedReportId.value = null |
|
|
|
selectedReportNameId.value = null |
|
|
|
reportNameOptions.value = [] |
|
|
|
} |
|
|
|
} |
|
|
|
catch (error) { |
|
|
|
reportName.value = '暂无报告' |
|
|
|
selectedReportNameId.value = null |
|
|
|
reportNameOptions.value = [] |
|
|
|
} |
|
|
|
finally { |
|
|
|
reportLoading.value = false |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
async function confirmBottomModel() { |
|
|
|
if (!selectedReportId.value) { |
|
|
|
createMessage.warning('请选择评估报告') |
|
|
|
return |
|
|
|
} |
|
|
|
spinning.value = true |
|
|
|
try { |
|
|
|
const response = await bottomModelApi(model.value.id) |
|
|
|
model.value = response |
|
|
|
const response = await bottomModelApi(model.value.id, selectedReportId.value) |
|
|
|
model.value.version = response.version |
|
|
|
createMessage.success('模型下装成功') |
|
|
|
reportModalVisible.value = false |
|
|
|
} |
|
|
|
catch (error) { |
|
|
|
console.error('模型下装失败:', error) |
|
|
|
createMessage.error('模型下装失败') |
|
|
|
} |
|
|
|
finally { |
|
|
|
spinning.value = false |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const versionLoading = ref(false) |
|
|
|
const versionList = ref<any[]>([]) |
|
|
|
const selectedVersion = ref<string>('') |
|
|
|
const versionOptions = computed(() => { |
|
|
|
const options = versionList.value |
|
|
|
.filter(v => v?.version) |
|
|
|
.map(v => ({ label: v.version, value: v.version })) |
|
|
|
if (selectedVersion.value && !options.find(o => o.value === selectedVersion.value)) |
|
|
|
options.unshift({ label: selectedVersion.value, value: selectedVersion.value }) |
|
|
|
|
|
|
|
return options |
|
|
|
}) |
|
|
|
const versionDropdownVisible = ref(false) |
|
|
|
|
|
|
|
async function loadVersionList() { |
|
|
|
versionLoading.value = true |
|
|
|
try { |
|
|
|
const list = await versionListApi(id) |
|
|
|
versionList.value = list || [] |
|
|
|
} |
|
|
|
catch (error) { |
|
|
|
createMessage.error('获取版本列表失败') |
|
|
|
} |
|
|
|
finally { |
|
|
|
versionLoading.value = false |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
async function handleVersionChange(value: string) { |
|
|
|
if (!value) |
|
|
|
return |
|
|
|
await fetchModelInfo(value) |
|
|
|
} |
|
|
|
|
|
|
|
async function createDraftVersion() { |
|
|
|
const confirmed = await new Promise<boolean>((resolve) => { |
|
|
|
Modal.confirm({ |
|
|
|
title: '确认创建草稿版本?', |
|
|
|
content: '创建草稿版本后将显示训练、清除、修改和下装按钮。', |
|
|
|
onOk: () => resolve(true), |
|
|
|
onCancel: () => resolve(false), |
|
|
|
}) |
|
|
|
}) |
|
|
|
if (!confirmed) |
|
|
|
return |
|
|
|
|
|
|
|
try { |
|
|
|
await createDraftVersionApi(id) |
|
|
|
selectedVersion.value = 'v-test' |
|
|
|
if (model.value) { |
|
|
|
model.value = { |
|
|
|
...model.value, |
|
|
|
Cur_Version: 'v-test', |
|
|
|
version: 'v-test', |
|
|
|
} |
|
|
|
} |
|
|
|
createMessage.success('已创建草稿版本 v-test,请重新训练') |
|
|
|
versionList.value = [] |
|
|
|
await fetchModelInfo('v-test') |
|
|
|
} |
|
|
|
catch (error) { |
|
|
|
console.error('底层模型获取失败:', error) |
|
|
|
createMessage.error('底层模型获取失败') |
|
|
|
createMessage.error('创建草稿版本失败') |
|
|
|
} |
|
|
|
} |
|
|
|
const showTrainActions = computed( |
|
|
|
() => !isBottomed.value || isVTestVersion.value || selectedVersion.value === 'v-test', |
|
|
|
) |
|
|
|
|
|
|
|
function goAssessReport() { |
|
|
|
const version = model.value?.Cur_Version || 'v-test' |
|
|
|
function goAssessReport(reportId?: number | null | Event) { |
|
|
|
// 防止直接作为事件处理时收到 PointerEvent |
|
|
|
const rid = (reportId && typeof reportId === 'object') ? null : reportId |
|
|
|
const version = selectedVersion.value || model.value?.Cur_Version || 'v-test' |
|
|
|
const algorithm = model.value?.algorithm || 'PCA' |
|
|
|
go(`/model/assess-report/${id}?version=${encodeURIComponent(version)}&algorithm=${algorithm}`) |
|
|
|
const extra = rid ? `&reportId=${rid}` : '' |
|
|
|
go(`/model/assess-report/${id}?version=${encodeURIComponent(version)}&algorithm=${algorithm}${extra}`) |
|
|
|
} |
|
|
|
|
|
|
|
return { |
|
|
|
pointTable, |
|
|
|
model, |
|
|
|
selectedVersion, |
|
|
|
versionOptions, |
|
|
|
versionDropdownVisible, |
|
|
|
reportName, |
|
|
|
activeKey, |
|
|
|
historyTime, |
|
|
|
historyList, |
|
|
|
@ -752,8 +995,28 @@ export default defineComponent({ |
|
|
|
openEditModel, |
|
|
|
handleEditModelOk, |
|
|
|
handleEditModelCancel, |
|
|
|
bottomModel, |
|
|
|
openBottomModal, |
|
|
|
confirmBottomModel, |
|
|
|
reportModalVisible, |
|
|
|
reportList, |
|
|
|
reportColumns, |
|
|
|
reportLoading, |
|
|
|
selectedReportId, |
|
|
|
onSelectReport, |
|
|
|
reportName, |
|
|
|
reportNameOptions, |
|
|
|
reportNameSelectVisible, |
|
|
|
selectedReportNameId, |
|
|
|
openReportSelector, |
|
|
|
confirmReportSelect, |
|
|
|
loadReportName, |
|
|
|
versionList, |
|
|
|
versionLoading, |
|
|
|
loadVersionList, |
|
|
|
handleVersionChange, |
|
|
|
createDraftVersion, |
|
|
|
goAssessReport, |
|
|
|
showTrainActions, |
|
|
|
} |
|
|
|
}, |
|
|
|
}) |
|
|
|
@ -771,18 +1034,47 @@ export default defineComponent({ |
|
|
|
{{ model?.description || "暂无描述" }} |
|
|
|
</a-descriptions-item> |
|
|
|
<a-descriptions-item label="版本"> |
|
|
|
{{ model?.Cur_Version || "v-test" }} |
|
|
|
<template v-if="!versionDropdownVisible"> |
|
|
|
<span |
|
|
|
style=" text-decoration: underline;cursor: pointer" |
|
|
|
@click="() => { versionDropdownVisible = true; loadVersionList() }" |
|
|
|
> |
|
|
|
{{ selectedVersion || 'v-test' }} |
|
|
|
</span> |
|
|
|
<a-button type="link" size="small" @click="createDraftVersion"> |
|
|
|
<Icon icon="ant-design:plus-circle-outlined" /> |
|
|
|
</a-button> |
|
|
|
</template> |
|
|
|
<template v-else> |
|
|
|
<a-select |
|
|
|
v-model:value="selectedVersion" |
|
|
|
size="small" |
|
|
|
style="min-width: 160px" |
|
|
|
:loading="versionLoading" |
|
|
|
:options="versionOptions" |
|
|
|
placeholder="选择版本" |
|
|
|
:allow-clear="false" |
|
|
|
@change="(v) => { handleVersionChange(v); versionDropdownVisible = false }" |
|
|
|
@blur="versionDropdownVisible = false" |
|
|
|
/> |
|
|
|
</template> |
|
|
|
</a-descriptions-item> |
|
|
|
<a-descriptions-item label="评估报告"> |
|
|
|
<span |
|
|
|
style=" text-decoration: underline;cursor: pointer" |
|
|
|
@click="openReportSelector" |
|
|
|
> |
|
|
|
{{ reportName }} |
|
|
|
</span> |
|
|
|
<a-button type="link" size="small" @click="goAssessReport"> |
|
|
|
新增/查看 |
|
|
|
<Icon icon="ant-design:plus-circle-outlined" /> |
|
|
|
</a-button> |
|
|
|
</a-descriptions-item> |
|
|
|
<a-descriptions-item label="创建人"> |
|
|
|
{{ model?.founder }} |
|
|
|
</a-descriptions-item> |
|
|
|
<a-descriptions-item label="创建时间"> |
|
|
|
{{ model?.creatTime }} |
|
|
|
{{ model?.creatTime || model?.createTime }} |
|
|
|
</a-descriptions-item> |
|
|
|
<a-descriptions-item label="最近修改人"> |
|
|
|
{{ model?.Modifier || "暂无" }} |
|
|
|
@ -832,7 +1124,7 @@ export default defineComponent({ |
|
|
|
style="margin-top: 16px; margin-bottom: -20px" |
|
|
|
> |
|
|
|
<a-button size="large" @click="openEditMode"> |
|
|
|
{{ model?.alarmmodelset.alarmname }} |
|
|
|
{{ model?.alarmmodelset?.alarmname || '全工况运行' }} |
|
|
|
</a-button> |
|
|
|
</a-card> |
|
|
|
|
|
|
|
@ -875,6 +1167,7 @@ export default defineComponent({ |
|
|
|
</a-form-item> |
|
|
|
</a-form> |
|
|
|
<a-button |
|
|
|
v-if="showTrainActions" |
|
|
|
type="primary" |
|
|
|
style="margin-left: auto" |
|
|
|
@click="trainModel" |
|
|
|
@ -882,6 +1175,7 @@ export default defineComponent({ |
|
|
|
模型训练 |
|
|
|
</a-button> |
|
|
|
<a-button |
|
|
|
v-if="showTrainActions" |
|
|
|
type="primary" |
|
|
|
style="margin-left: 10px" |
|
|
|
@click="clearModel" |
|
|
|
@ -889,19 +1183,18 @@ export default defineComponent({ |
|
|
|
清除训练结果 |
|
|
|
</a-button> |
|
|
|
<a-button |
|
|
|
v-if="showTrainActions" |
|
|
|
type="primary" |
|
|
|
style="margin-left: 10px" |
|
|
|
@click="goAssessReport" |
|
|
|
style="margin-left: 6px" |
|
|
|
@click="openEditModel" |
|
|
|
> |
|
|
|
评估报告 |
|
|
|
</a-button> |
|
|
|
<a-button type="primary" style="margin-left: 6px" @click="openEditModel"> |
|
|
|
修改模型 |
|
|
|
</a-button> |
|
|
|
<a-button |
|
|
|
v-if="showTrainActions" |
|
|
|
danger |
|
|
|
style="margin-left: 10px" |
|
|
|
@click="bottomModel" |
|
|
|
@click="openBottomModal" |
|
|
|
> |
|
|
|
下装 |
|
|
|
</a-button> |
|
|
|
@ -931,6 +1224,40 @@ export default defineComponent({ |
|
|
|
</a-spin> |
|
|
|
</a-card> |
|
|
|
</div> |
|
|
|
<a-modal |
|
|
|
v-model:open="reportModalVisible" |
|
|
|
title="选择评估报告" |
|
|
|
:confirm-loading="spinning" |
|
|
|
@ok="confirmBottomModel" |
|
|
|
> |
|
|
|
<a-table |
|
|
|
:columns="reportColumns" |
|
|
|
:data-source="reportList" |
|
|
|
:loading="reportLoading" |
|
|
|
row-key="id" |
|
|
|
:pagination="false" |
|
|
|
size="small" |
|
|
|
:row-selection="{ |
|
|
|
type: 'radio', |
|
|
|
selectedRowKeys: selectedReportId ? [selectedReportId] : [], |
|
|
|
onChange: onSelectReport, |
|
|
|
}" |
|
|
|
/> |
|
|
|
</a-modal> |
|
|
|
<a-modal |
|
|
|
v-model:open="reportNameSelectVisible" |
|
|
|
title="评估报告版本" |
|
|
|
@ok="confirmReportSelect" |
|
|
|
@cancel="() => { reportNameSelectVisible = false }" |
|
|
|
> |
|
|
|
<a-select |
|
|
|
v-model:value="selectedReportNameId" |
|
|
|
:options="reportNameOptions" |
|
|
|
style="width: 100%" |
|
|
|
placeholder="请选择评估报告" |
|
|
|
:loading="reportLoading" |
|
|
|
/> |
|
|
|
</a-modal> |
|
|
|
<a-modal |
|
|
|
v-model:open="openEditPointModal" |
|
|
|
title="更改上下限" |
|
|
|
|