diff --git a/.vscode/extensions.json b/.vscode/extensions.json
deleted file mode 100644
index a06a8c6..0000000
--- a/.vscode/extensions.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "recommendations": [
- "Vue.volar",
- "vitest.explorer",
- "dbaeumer.vscode-eslint",
- "EditorConfig.EditorConfig",
- "esbenp.prettier-vscode"
- ]
-}
diff --git a/index.html b/index.html
index 9e5fc8f..0c6f362 100644
--- a/index.html
+++ b/index.html
@@ -4,7 +4,7 @@
-
Vite App
+ 雷达⽬标识别实装部署系统
diff --git a/package.json b/package.json
index e6e9278..a71421e 100644
--- a/package.json
+++ b/package.json
@@ -13,14 +13,18 @@
"format": "prettier --write src/"
},
"dependencies": {
- "socket.io-client": "^4.2.0",
+ "@types/d3": "^7.4.3",
"ant-design-vue": "4.x",
+ "d3": "^7.9.0",
"echarts": "^5.6.0",
"lodash": "^4.17.21",
"pinia": "^3.0.1",
+ "screenfull": "^5.1.0",
+ "socket.io-client": "^4.2.0",
+ "streamsaver": "^2.0.6",
+ "swiper": "^12.0.3",
"vue": "^3.5.13",
- "vue-router": "^4.5.0",
- "screenfull": "^5.1.0"
+ "vue-router": "^4.5.0"
},
"devDependencies": {
"@ant-design/icons-vue": "^7.0.1",
diff --git a/src/apis/dataManage/statistics.ts b/src/apis/dataManage/statistics.ts
index a490521..5f06399 100644
--- a/src/apis/dataManage/statistics.ts
+++ b/src/apis/dataManage/statistics.ts
@@ -19,4 +19,15 @@ export const lineStatisticsApi = async (bacthId: string, controller?: AbortContr
})
}
+// 根据参数获取频谱图
+export const getSpectrumImgApi = async (data: Record, controller?: AbortController) => {
+ return await request({
+ url: `/data/spectrummap/${data.batchId}/${data.index}`,
+ method: 'GET',
+ getRaw: true,
+ controller: controller
+ })
+
+}
+
diff --git a/src/apis/dataset/index.ts b/src/apis/dataset/index.ts
index a816dc2..9cfc065 100644
--- a/src/apis/dataset/index.ts
+++ b/src/apis/dataset/index.ts
@@ -50,3 +50,13 @@ return request({
method: 'DELETE',
})
}
+
+// 下载数据集
+export const downloadApi = async (params: Record) => {
+ return request({
+ url: `/data/exported_data/${params.id}`,
+ method: 'GET',
+ getRaw: true,
+ params: params
+ })
+}
diff --git a/src/apis/model/index.ts b/src/apis/model/index.ts
index 99199f7..835978d 100644
--- a/src/apis/model/index.ts
+++ b/src/apis/model/index.ts
@@ -41,5 +41,27 @@ export const listApi = async (params?: Record) => {
})
}
+// 给模型导入预训练权重
+export const importPretrainedForModelApi = async (data: FormData) => {
+ const modelId = data.get('modelId')
+ return await request({
+ url: `/train/model/${modelId}/pretrained_weights`,
+ headers: {
+ Accept: 'application/json',
+ authorization: `Bearer ${localStorage.token}`
+ },
+ method: 'PUT',
+ data: data,
+ dataRaw: true,
+ })
+}
+
+export const deletePretrainedForModelApi = async (data: Record) => {
+ return await request({
+ url: `/train/model/${data.modelId}/pretrained_weights/${data.path}`,
+ method: 'DELETE',
+ })
+}
+
diff --git a/src/apis/train/index.ts b/src/apis/train/index.ts
index d86fd7d..5a68720 100644
--- a/src/apis/train/index.ts
+++ b/src/apis/train/index.ts
@@ -58,10 +58,19 @@ export const onInterruptApi = async (taskId: string) => {
})
}
-// 模型导出
-export const modelExportApi = async (taskId: string) => {
+// 获取可导出的模型
+export const getExportModelsApi = async (taskId: string) => {
return await request({
- url: `/train/${taskId}/export`,
+ url: `/train/${taskId}/exports`,
method: 'GET'
})
}
+
+// 模型导出
+export const modelExportApi = async (data: Record) => {
+ return await request({
+ url: `/train/${data.taskId}/export/${data.exportType}`,
+ method: 'GET',
+ getRaw: true
+ })
+}
diff --git a/src/config/index.ts b/src/config/index.ts
index b53e802..34591c8 100644
--- a/src/config/index.ts
+++ b/src/config/index.ts
@@ -3,6 +3,6 @@ import authBg from '@/assets/images/auth/auth-bg.jpg'
export const info = {
logo: logo,
- title: "雷达⽬标识别迁移部署系统",
+ title: "雷达⽬标识别实装部署系统",
bgImg: authBg
}
diff --git a/src/main.ts b/src/main.ts
index 6a56953..88e34a7 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -7,6 +7,11 @@ import { setupStore } from '@/stores'
import { router, setupRouter } from '@/router'
import { setRouteGuard } from '@/router/guard/index'
import { loadComponent, loadFunc } from '@/core/lazy_use'
+import 'swiper/css';
+import 'swiper/css/navigation';
+import 'swiper/css/pagination';
+import 'swiper/css/effect-fade';
+import 'swiper/css/autoplay';
import * as Icons from '@ant-design/icons-vue'
diff --git a/src/router/modules/staticRouter.ts b/src/router/modules/staticRouter.ts
index c3ba8a6..e82adc1 100644
--- a/src/router/modules/staticRouter.ts
+++ b/src/router/modules/staticRouter.ts
@@ -16,7 +16,7 @@ export const staticRouter = [
redirect: '/model-training/index',
meta: {
icon: 'sort',
- title: '模型训练',
+ title: '模型调优',
hidden: false,
},
component: 'ViewLayout',
@@ -27,7 +27,7 @@ export const staticRouter = [
hidden: false,
meta: {
icon: 'sort',
- title: '模型训练',
+ title: '模型调优',
hidden: true,
},
component: 'ModelTraining',
@@ -38,7 +38,7 @@ export const staticRouter = [
hidden: false,
meta: {
icon: 'sort',
- title: '模型训练',
+ title: '模型调优',
hidden: true,
},
component: 'ModelTrainingDetail',
diff --git a/src/views/dataManage/index/components/Modal/ImportModal.vue b/src/views/dataManage/index/components/Modal/ImportModal.vue
index b9a3b6c..5e1d16b 100644
--- a/src/views/dataManage/index/components/Modal/ImportModal.vue
+++ b/src/views/dataManage/index/components/Modal/ImportModal.vue
@@ -18,6 +18,7 @@ import {
Space,
Button,
Input,
+ Textarea,
Upload,
Radio,
RadioGroup,
@@ -51,8 +52,12 @@ const formRef = ref();
// 表单
const form = ref>({
files: [],
+ csvFiles: [],
batch_name: "",
description: "",
+ work_mode: "",
+ system_param: "",
+ system_status: "",
agreement: "38解析协议",
});
@@ -129,6 +134,12 @@ const onUpload = (e: File) => {
return false;
};
+// 上传csv辅助文件
+const onCsvUpload = (e: File) => {
+ form.value.csvFiles[0] = e;
+ return false;
+};
+
const customAgreement = ref("");
// 更新自定义协议
@@ -146,9 +157,13 @@ const reset = () => {
// formRef.value.clearValidate();
form.value = {
files: [],
+ csvFiles: [],
batch_name: "",
description: "",
- agreement: "38解析协议",
+ work_mode: "",
+ system_param: "",
+ system_status: "",
+ // agreement: "38解析协议",
};
customAgreement.value = "";
};
@@ -172,8 +187,14 @@ const onSubmit = async () => {
const formData = new FormData();
formData.append("file", form.value.files[0]);
+ if (form.value.csvFiles.length) {
+ formData.append("csvFile", form.value.csvFiles[0]);
+ }
formData.append("batch_name", form.value.batch_name);
formData.append("description", form.value.description);
+ formData.append("work_mode", form.value.work_mode);
+ formData.append("system_param", form.value.system_param);
+ formData.append("system_status", form.value.system_status);
const res = await props.api.onImportData(formData);
if (res?.code == 200) {
emits("onSuccess");
@@ -188,12 +209,12 @@ const onSubmit = async () => {
v-model:open="open"
title="导入数据"
width="700px"
- style="top: 200px"
+ style="top: 10px"
:loading="props.requestMap.importRequest.loading.value"
:onConfirm="onSubmit"
>
+
+
+
+
diff --git a/src/views/dataManage/index/components/Module/Chat1.vue b/src/views/dataManage/index/components/Module/Chat1.vue
index 2dc4ee3..2eae70c 100644
--- a/src/views/dataManage/index/components/Module/Chat1.vue
+++ b/src/views/dataManage/index/components/Module/Chat1.vue
@@ -8,8 +8,9 @@ export default defineComponent({
+
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
diff --git a/src/views/dataManage/index/components/Module/testDataset.vue b/src/views/dataManage/index/components/Module/testDataset.vue
index 9e9db49..93acc64 100644
--- a/src/views/dataManage/index/components/Module/testDataset.vue
+++ b/src/views/dataManage/index/components/Module/testDataset.vue
@@ -77,6 +77,24 @@ const columns = [
},
];
+const downloadMethod = [
+ {
+ name: "导出为json",
+ type: "json",
+ key: "download_json",
+ },
+ {
+ name: "导出为csv",
+ type: "csv",
+ key: "download_csv",
+ },
+ {
+ name: "导出为mat",
+ type: "mat",
+ key: "download_mat",
+ },
+];
+
const loading = computed(() => {
return (
props.requestMap.testDatasetListRequest.loading.value ||
@@ -204,8 +222,12 @@ const onShowDelete = (info: Record) => {
// 下载
const onDownload = (info: Record) => {
- console.log("onDownload", info);
- const fileId = info.id;
+ const { name, id, type } = info;
+ props.api.onDatasetDownload({
+ id: id,
+ type: type,
+ fileName: name + `测试集.${type}`,
+ });
};
const tableContainRef = ref();
@@ -299,16 +321,33 @@ const prefix = "dataset-test";
{{ dayjs(text).format("YYYY-MM-DD HH:mm:ss") }}
-
+
-
-
+
@@ -412,5 +451,12 @@ $prefix: "dataset-test";
border-start-end-radius: 0px;
}
}
+ .download-option {
+ padding: 4px;
+ cursor: pointer;
+ &:hover {
+ color: #1677ff;
+ }
+ }
}
diff --git a/src/views/dataManage/index/components/Module/trainDataset.vue b/src/views/dataManage/index/components/Module/trainDataset.vue
index 55ee722..d8c8d8e 100644
--- a/src/views/dataManage/index/components/Module/trainDataset.vue
+++ b/src/views/dataManage/index/components/Module/trainDataset.vue
@@ -77,6 +77,24 @@ const columns = [
},
];
+const downloadMethod = [
+ {
+ name: "导出为json",
+ type: "json",
+ key: "download_json",
+ },
+ {
+ name: "导出为csv",
+ type: "csv",
+ key: "download_csv",
+ },
+ {
+ name: "导出为mat",
+ type: "mat",
+ key: "download_mat",
+ },
+];
+
const loading = computed(() => {
props.requestMap.trainDatasetListRequest.loading.value ||
props.requestMap.deleteRequest.loading.value ||
@@ -188,8 +206,12 @@ const onShowDelete = (info: Record) => {
// 下载
const onDownload = (info: Record) => {
- console.log("onDownload", info);
- const fileId = info.id;
+ const { name, id, type } = info;
+ props.api.onDatasetDownload({
+ id: id,
+ type: type,
+ fileName: name + `训练集.${type}`,
+ });
};
// 操作列表
@@ -298,13 +320,31 @@ const prefix = "dataset-test";
-
-
+
+
+
+ {{ opt.name }}
+
+
+
-
+
+
diff --git a/src/views/dataManage/index/components/Table/index.vue b/src/views/dataManage/index/components/Table/index.vue
index fb446d2..200d2fa 100644
--- a/src/views/dataManage/index/components/Table/index.vue
+++ b/src/views/dataManage/index/components/Table/index.vue
@@ -272,6 +272,7 @@ $prefix: "_table-comp";
align-items: start;
justify-content: start;
background-color: #fff;
+ overflow: auto;
&-col {
padding: 16px;
font-size: 16px;
@@ -283,6 +284,7 @@ $prefix: "_table-comp";
align-items: center;
justify-content: start;
// line-height: 32px;
+ flex-shrink: 0;
&::after {
content: "";
position: absolute;
@@ -301,6 +303,7 @@ $prefix: "_table-comp";
}
&-body {
width: 100%;
+ overflow: auto;
&-row {
display: flex;
align-items: start;
@@ -313,6 +316,8 @@ $prefix: "_table-comp";
display: flex;
align-items: start;
justify-content: start;
+ align-self: stretch;
+ flex-shrink: 0;
gap: 10px;
}
}
diff --git a/src/views/dataManage/index/hooks/dataset.ts b/src/views/dataManage/index/hooks/dataset.ts
index edf4c85..38ebf75 100644
--- a/src/views/dataManage/index/hooks/dataset.ts
+++ b/src/views/dataManage/index/hooks/dataset.ts
@@ -1,4 +1,4 @@
-import { datasetListApi, deleteDatasetApi, updateDatasetApi } from '@/apis/dataset/index.ts'
+import { datasetListApi, deleteDatasetApi, updateDatasetApi, downloadApi } from '@/apis/dataset/index.ts'
import { ref } from 'vue'
@@ -65,6 +65,10 @@ export const useDatasetHooks = () => {
return res
}
+ const downloadRequest = async (params: Record) => {
+ return await downloadApi(params)
+ }
+
return {
testDatasetListRequest: {
@@ -82,6 +86,9 @@ export const useDatasetHooks = () => {
updateRequest: {
request: updateRequest,
loading: updateLoading
+ },
+ downloadRequest: {
+ request: downloadRequest
}
}
}
diff --git a/src/views/dataManage/index/hooks/spectrumDiagramChat.ts b/src/views/dataManage/index/hooks/spectrumDiagramChat.ts
new file mode 100644
index 0000000..754756b
--- /dev/null
+++ b/src/views/dataManage/index/hooks/spectrumDiagramChat.ts
@@ -0,0 +1,103 @@
+import { ref } from "vue";
+
+export const useSpectrumDiagramChatHooks = () => {
+
+ const visualColors = ['#5470C6', '#91CC75', '#EE6666', '#73C0DE', '#FAC858', '#3BA272', '#FC8452', '#9A60B4', '#EA7CCC'];
+
+ const options = ref>({
+ // title: {
+ // text: `{a|总量}\n{b|0}`,
+ // textStyle: {
+ // rich: {
+ // a: {
+ // fontSize: 14,
+ // color: "#4E5969",
+ // lineHeight: 24,
+ // },
+ // b: {
+ // fontSize: 16,
+ // color: "#1D2129",
+ // lineHeight: 28,
+ // fontWeight: "bold",
+ // },
+ // },
+ // },
+ // left: "50%", // 水平居中
+ // top: "50%", // 垂直居中
+ // textAlign: "center",
+ // textVerticalAlign: "middle",
+ // },
+ legend: {
+ icon: "circle",
+ bottom: "0",
+ left: "center",
+ itemWidth: 6,
+ itemGap: 20,
+ textStyle: {
+ color: "#556677",
+ },
+ },
+ // tooltip: {
+ // trigger: "item",
+ // },
+ grid: {
+ left: '10%',
+ right: '10%',
+ bottom: '10%',
+ top: '5%',
+ containLabel: true
+ },
+ xAxis: {
+ type: 'category',
+ data: [],
+ name: 'Time (s)',
+ nameLocation: 'middle',
+ nameGap: 30,
+ axisLabel: {
+ interval: 10 // 间隔显示标签,避免拥挤
+ }
+ },
+ yAxis: {
+ type: 'category',
+ data: [],
+ axisLabel: {
+ interval: 10 // 间隔显示标签
+ }
+ },
+ visualMap: {
+ type: 'continuous',
+ min: -60,
+ max: 20,
+ color: visualColors,
+ orient: 'vertical',
+ right: 0,
+ top: 'center',
+ itemWidth: 20,
+ itemHeight: 150,
+ label: {
+ formatter: function(value: any) {
+ return value;
+ }
+ }
+ },
+ series: [
+ {
+ type: 'heatmap',
+ data: [],
+ pointSize: 2,
+ emphasis: {
+ itemStyle: {
+ borderColor: '#333',
+ borderWidth: 1
+ }
+ },
+ // progressive: 1000,
+ // animation: false
+ }
+ ],
+ })
+
+ return {
+ options
+ }
+}
diff --git a/src/views/dataManage/index/hooks/statistics.ts b/src/views/dataManage/index/hooks/statistics.ts
index 9fe83f8..44dbcdc 100644
--- a/src/views/dataManage/index/hooks/statistics.ts
+++ b/src/views/dataManage/index/hooks/statistics.ts
@@ -1,5 +1,5 @@
-import { statisticsApi, lineStatisticsApi } from '@/apis/dataManage/statistics.ts'
+import { statisticsApi, lineStatisticsApi, getSpectrumImgApi } from '@/apis/dataManage/statistics.ts'
import { ref } from 'vue'
export const useMain = () => {
@@ -37,6 +37,14 @@ export const useMain = () => {
}
+ const getSpectrumImg = async (data: Record) => {
+ const res = await getSpectrumImgApi(data).catch(err => {
+ return err
+ })
+ return res
+ }
+
+
return {
statisticsRequest: {
@@ -47,6 +55,9 @@ export const useMain = () => {
request: getLineStatistics,
loading: lineLoading,
interrupt: onLineStatisticsInterrupt
+ },
+ getSpectrumImgRequest: {
+ request: getSpectrumImg
}
}
}
diff --git a/src/views/dataManage/index/index.vue b/src/views/dataManage/index/index.vue
index 0983f81..c573b0b 100644
--- a/src/views/dataManage/index/index.vue
+++ b/src/views/dataManage/index/index.vue
@@ -113,6 +113,8 @@ $prefix: "data-manage";
}
&-grid {
flex: 1;
+ flex-shrink: 0;
+ overflow: hidden;
background: rgba(255, 255, 255, 0.6);
border: 1px solid rgba(231, 239, 251, 0.5);
border-radius: 10px;
@@ -130,8 +132,10 @@ $prefix: "data-manage";
:deep(.wrapper) {
display: flex;
gap: 10px;
- width: 470px;
+ width: 500px;
flex-wrap: wrap;
+ max-height: 600px;
+ overflow: auto;
}
:deep(.index-box) {
width: 150px;
@@ -157,5 +161,16 @@ $prefix: "data-manage";
font-size: 14px;
}
}
+ :deep(.download-option) {
+ padding: 8px 4px;
+ cursor: pointer;
+ border-bottom: 1px solid #d9d9d9;
+ &:hover {
+ color: #1677ff;
+ }
+ &:last-child {
+ border-bottom: none;
+ }
+ }
}
diff --git a/src/views/dataManage/index/services/dataset.ts b/src/views/dataManage/index/services/dataset.ts
index 961cc96..945c072 100644
--- a/src/views/dataManage/index/services/dataset.ts
+++ b/src/views/dataManage/index/services/dataset.ts
@@ -1,8 +1,9 @@
import { useDatasetHooks } from '@/views/dataManage/index/hooks/dataset.ts'
import { ref } from 'vue'
+import { downloadFile } from '@/utils/download/index.ts'
export const useDatasetServer = () => {
- const { testDatasetListRequest, trainDatasetListRequest, deleteRequest, updateRequest } = useDatasetHooks()
+ const { testDatasetListRequest, trainDatasetListRequest, deleteRequest, updateRequest, downloadRequest } = useDatasetHooks()
const testDataset = ref([])
const getTestDataset = async () => {
@@ -32,6 +33,20 @@ export const useDatasetServer = () => {
return res
}
+ const onDatasetDownload = async (data: Record) => {
+ const { fileName, type, id } = data
+
+ const res = await downloadRequest.request(data)
+ console.log('onDatasetDownload', res)
+ // if (res.status != 200) return res
+ const blob = await res.blob()
+ const hrefUrl = window.URL.createObjectURL(blob) // 创建下载的链接
+ downloadFile(hrefUrl, fileName);
+
+ return res
+
+ }
+
const state = {
testDataset,
@@ -42,7 +57,8 @@ export const useDatasetServer = () => {
getTestDataset,
getTrainDataset,
deleteDataset,
- updateDataset
+ updateDataset,
+ onDatasetDownload
}
const requestMap = {
diff --git a/src/views/dataManage/index/services/statistics.ts b/src/views/dataManage/index/services/statistics.ts
index a00c2e8..deb1cb7 100644
--- a/src/views/dataManage/index/services/statistics.ts
+++ b/src/views/dataManage/index/services/statistics.ts
@@ -3,10 +3,12 @@ import { useMain as useCircleChatMain } from "@/views/dataManage/index/hooks/cir
import { useMain as useLineChatMain } from "@/views/dataManage/index/hooks/lineChat.ts";
import { useMain as useDataExportMain } from "@/views/dataManage/index/hooks/dataExport.ts";
import { useMain as useRadarChatMain } from "@/views/dataManage/index/hooks/radarChat.ts";
+import { useSpectrumDiagramChatHooks } from '@/views/dataManage/index/hooks/spectrumDiagramChat.ts'
import { ref } from "vue";
export const useMain = () => {
+ const { options: spectrumDiagramChatOptions } = useSpectrumDiagramChatHooks()
const { options: circleChatOptions } = useCircleChatMain();
const {
listRequest: exportDataListRequest,
@@ -28,8 +30,9 @@ export const useMain = () => {
stopScanAnimation: radarStopScanAnimation,
} = useRadarChatMain();
- const { statisticsRequest, lineStatisticsRequest } = useStatisticsMain();
+ const { statisticsRequest, lineStatisticsRequest, } = useStatisticsMain();
const { lineStatisticsRequest: radarStatisticsRequest } = useStatisticsMain();
+ const { lineStatisticsRequest: SpectrumDiagramStatisticsRequest, getSpectrumImgRequest } = useStatisticsMain();
const statisticsData = ref({});
@@ -73,7 +76,6 @@ export const useMain = () => {
const lineStatisticsData = ref({});
const getLineStaticsData = async (batchId: string) => {
const res = await lineStatisticsRequest.request(batchId);
- console.log("getLineStaticsData", res);
if (res.code == 200) {
lineStatisticsData.value = res.data;
}
@@ -111,13 +113,94 @@ export const useMain = () => {
};
const onUpdateLineChat = async (batchId: string) => {
+ if (!batchId) return;
await getLineStaticsData(batchId);
updateLineChatOptions(lineStatisticsData.value);
};
+ // 频谱图
+ const spectrumDiagramChatData = ref({});
+ const spectrumDiagramChatImgs = ref([])
+ const spectrumImgsLoading = ref(false)
+
+ const getSpectrumDiagramChatData = async (batchId: string) => {
+ if (!batchId) return;
+ const res = await SpectrumDiagramStatisticsRequest.request(batchId);
+ if (res?.code == 200) {
+ spectrumDiagramChatData.value = res.data;
+ }
+ }
+
+ // 更新图谱数据
+ const updateChatImgs = async (batchId: string, rawData: Record) => {
+ const useJem = (rawData?.jem || []).slice(0, 5);
+ spectrumDiagramChatImgs.value = []
+ await Promise.all([
+ await useJem.map(async (item: Record, index: number) => {
+
+ const params = {
+ batchId: batchId,
+ index: index,
+ }
+ const jemRes = await getSpectrumImgRequest.request(params)
+ console.log('jemRes', jemRes)
+ const imgBlob = await jemRes.blob()
+ // 回显为base64图片
+ return new Promise(resolve => {
+ const reader = new FileReader();
+ reader.readAsDataURL(imgBlob);
+ reader.onload = function () {
+ spectrumDiagramChatImgs.value.push(reader.result);
+ resolve(void 0)
+ };
+ })
+
+ })
+
+
+ ])
+
+ // spectrumDiagramChatImgs.value = imgs
+ }
+
+
+ // 频谱图
+ const onUpdateSpectrumDiagramChatOptions = (chatData: Record) => {
+ const { jem } = chatData
+ console.log('jem', jem)
+ // const imax = jem.length
+ // const jmax = 80
+ const data = jem.data
+ const xData = jem.xData
+ const yData = jem.yData
+ // for (let i = 0; i < jem.length; i++) {
+ // for (let j = 0; j < jem[i].length; j++) {
+ // data.push([jem[i][j]]);
+ // }
+ // }
+ console.log('data', data)
+ spectrumDiagramChatOptions.value.series[0].data = data;
+ spectrumDiagramChatOptions.value.yAxis.data = yData;
+ spectrumDiagramChatOptions.value.xAxis.data = xData;
+ spectrumDiagramChatOptions.value = {
+ ...spectrumDiagramChatOptions.value,
+ };
+ }
+
+ const onUpdateSpectrumDiagramChat = async (batchId: string) => {
+ if (!batchId) return;
+ spectrumImgsLoading.value = true
+ await getSpectrumDiagramChatData(batchId);
+ await updateChatImgs(batchId, spectrumDiagramChatData.value)
+ spectrumImgsLoading.value = false
+
+ // onUpdateSpectrumDiagramChatOptions(spectrumDiagramChatData.value);
+ }
+
// 根据batchId获取雷达图统计数据
const radarStatisticsData = ref({});
const getRadatStaticsData = async (batchId: string) => {
+ if (!batchId) return;
const res = await radarStatisticsRequest.request(batchId);
if (res.code == 200) {
radarStatisticsData.value = res.data;
@@ -183,15 +266,21 @@ export const useMain = () => {
lineChatOptions,
radarStatisticsData: radarStatisticsData,
radarChatOptions,
+ spectrumDiagramChatOptions: spectrumDiagramChatOptions,
+ spectrumDiagramChatImgs,
+ spectrumImgsLoading,
exportData: exportData,
};
const api = {
getStatisticsData,
updateCircleChatOptions,
+ onUpdateSpectrumDiagramChatOptions,
+ getSpectrumDiagramChatData,
onUpdateChat,
onUpdateLineChat,
onUpdateRadarChat,
+ onUpdateSpectrumDiagramChat,
radarStartScanAnimation,
radarStopScanAnimation,
getExportData,
diff --git a/src/views/modelReasoning/index/components/Module/Reasoning.vue b/src/views/modelReasoning/index/components/Module/Reasoning.vue
index 0fc7f33..0fb34fc 100644
--- a/src/views/modelReasoning/index/components/Module/Reasoning.vue
+++ b/src/views/modelReasoning/index/components/Module/Reasoning.vue
@@ -356,7 +356,7 @@ const onStart = async () => {
await logCleanup();
const logRes = await props.api.log.getLogs(taskId);
logRead = logRes.body?.getReader();
- onStartTimeCount();
+ onStartStatusTimeCount();
startLogTimecount();
}
};
@@ -378,7 +378,7 @@ const onStop = async () => {
props.api.cleanTaskId();
// 销毁定时器
clearLogTimecount();
- onCleanTimeCount();
+ onCleanStatusTimeCount();
// 重置状态
props.api.resetTaskStatus();
props.api?.getTaskList();
@@ -388,7 +388,7 @@ const onStop = async () => {
let timeCount: any = undefined;
// 清除定时器
-const onCleanTimeCount = () => {
+const onCleanStatusTimeCount = () => {
if (timeCount) {
clearInterval(timeCount);
timeCount = undefined;
@@ -396,15 +396,15 @@ const onCleanTimeCount = () => {
};
// 状态更新定时器
-const onStartTimeCount = () => {
- onCleanTimeCount();
+const onStartStatusTimeCount = () => {
+ onCleanStatusTimeCount();
timeCount = setInterval(async () => {
if (!props.state.relationTaskId.value) return;
const res = await props.api.getTaskStatus(props.state.relationTaskId.value);
if (res?.code == 200) {
const { status, progress } = res.data;
if (["error", "success"].includes(status)) {
- onCleanTimeCount();
+ onCleanStatusTimeCount();
props.api?.getTaskList();
// props.api.cleanTaskId();
}
@@ -463,7 +463,7 @@ const onModelDirChange = (value: string | null) => {
};
onUnmounted(() => {
- onCleanTimeCount();
+ onCleanStatusTimeCount();
clearLogTimecount();
});
diff --git a/src/views/modelTraining/detail/hooks/task.ts b/src/views/modelTraining/detail/hooks/task.ts
index c8a917c..0d9179a 100644
--- a/src/views/modelTraining/detail/hooks/task.ts
+++ b/src/views/modelTraining/detail/hooks/task.ts
@@ -1,17 +1,30 @@
import { ref } from 'vue'
-import { taskParamsApi, onInterruptApi, statusApi, logsApi, modelExportApi } from '@/apis/train/index.ts'
+import { taskParamsApi, onInterruptApi, statusApi, logsApi, modelExportApi, getExportModelsApi } from '@/apis/train/index.ts'
export const useMain = () => {
- // 模型导出
- const exportLoading = ref(false)
- const modelExport = async (taskId: string) => {
- if (exportLoading.value) return false
- exportLoading.value = true
- const res = await modelExportApi(taskId).catch(err => {
+ const getExportModelLoading = ref(false)
+ // 获取可导出的模型
+ const getExportModels = async (taskId: string) => {
+ if (getExportModelLoading.value) return false
+ getExportModelLoading.value = true
+ const res = await getExportModelsApi(taskId).catch(err => {
return err
})
+ getExportModelLoading.value = false
+ return res
+ }
+
+ // 模型导出
+ const exportLoading = ref(false)
+ const modelExport = async (data: Record) => {
+ if (exportLoading.value) return false
+ exportLoading.value = true
+ const res = await modelExportApi(data).catch(err => {
+ return err
+ })
+ console.log('modelExportApi', res)
exportLoading.value = false
return res
}
@@ -84,6 +97,10 @@ export const useMain = () => {
modelExportRequest: {
request: modelExport,
loading: exportLoading
+ },
+ getExportModelsRequest: {
+ loading: getExportModelLoading,
+ request: getExportModels
}
}
}
diff --git a/src/views/modelTraining/detail/index.vue b/src/views/modelTraining/detail/index.vue
index 4874d48..428973a 100644
--- a/src/views/modelTraining/detail/index.vue
+++ b/src/views/modelTraining/detail/index.vue
@@ -6,6 +6,9 @@ export default defineComponent({
+
+
+
+
+
+
+
+