diff --git a/src/api/modules/computerRoom/computerRoom.ts b/src/api/modules/computerRoom/computerRoom.ts new file mode 100644 index 0000000..c67f7f6 --- /dev/null +++ b/src/api/modules/computerRoom/computerRoom.ts @@ -0,0 +1,12 @@ +import http from '@/api'; +import {ADMIN_MODULE} from '@/api/helper/prefix'; +import type {ComputerRoomRow} from "@/api/types/computerRoom/computerRoom"; + +/** + * 获取机房列表 + * @param params + * @returns {*} + */ +export const getListApi = (params: { substationId: number }) => { + return http.get(ADMIN_MODULE + `/computerRoom/list`, params); +}; diff --git a/src/api/modules/monitor/Tree.ts b/src/api/modules/monitor/Tree.ts index eb6e6e2..68e9ceb 100644 --- a/src/api/modules/monitor/Tree.ts +++ b/src/api/modules/monitor/Tree.ts @@ -8,3 +8,6 @@ export const getTreeData = () => { export const getTreePreview=()=>{ return http.get(ADMIN_MODULE + '/tree/preview'); } +export const getTreeSubstation=()=>{ + return http.get(ADMIN_MODULE + '/tree/substation'); +} diff --git a/src/api/modules/teacher/teacherStatistics.ts b/src/api/modules/teacher/teacherStatistics.ts index 6733544..7d452c9 100644 --- a/src/api/modules/teacher/teacherStatistics.ts +++ b/src/api/modules/teacher/teacherStatistics.ts @@ -8,7 +8,7 @@ import type { AxiosRequestConfig } from 'axios'; export const File_Url = 'http://127.0.0.1:9991/api' //http://localhost:8080/data/model/getModelData -export const getModelData = (params: {menuType:string}) => { +export const getModelData = (params: any) => { return http.post(ADMIN_MODULE + `/data/model/getModelData`, params); }; diff --git a/src/api/types/computerRoom/computerRoom.ts b/src/api/types/computerRoom/computerRoom.ts new file mode 100644 index 0000000..acaedf0 --- /dev/null +++ b/src/api/types/computerRoom/computerRoom.ts @@ -0,0 +1,7 @@ +// list或detail返回结构 +export type ComputerRoomRow = { + id?: number; + substationId?: number; + name?: string; + description?: string; +}; \ No newline at end of file diff --git a/src/views/sysmonitortree/sysMonitorTree/components/ComputeRoomModelList.vue b/src/views/sysmonitortree/sysMonitorTree/components/ComputeRoomModelList.vue new file mode 100644 index 0000000..1a0f807 --- /dev/null +++ b/src/views/sysmonitortree/sysMonitorTree/components/ComputeRoomModelList.vue @@ -0,0 +1,108 @@ + + + + + \ No newline at end of file diff --git a/src/views/sysmonitortree/sysMonitorTree/index.vue b/src/views/sysmonitortree/sysMonitorTree/index.vue index fa6cd8d..beee93e 100644 --- a/src/views/sysmonitortree/sysMonitorTree/index.vue +++ b/src/views/sysmonitortree/sysMonitorTree/index.vue @@ -23,11 +23,16 @@ @@ -387,6 +392,8 @@ :curCamera="controlDialogObj.curCamera" /> + + @@ -415,6 +422,8 @@ import {getAlgorithmTaskByCameraId} from "@/api/modules/monitor/algorithmTask"; import type {AlgorithmTaskVO, AlgTaskConfigDto} from "@/api/types/edgebox/EdgeBox"; import DataSync from "@/views/sysmonitortree/sysMonitorTree/components/DataSync.vue"; import {fa} from "element-plus/es/locale"; +import ComputeRoomModelList from "@/views/sysmonitortree/sysMonitorTree/components/ComputeRoomModelList.vue"; +import {getListApi} from "@/api/modules/computerRoom/computerRoom"; const refreshLoading=ref(false); const playLoading = ref(false); const filterText = ref(''); @@ -465,6 +474,16 @@ const rules = reactive({ type: [{ required: true, message: '请填写类型' }], channelDriver: [{ required: true, message: '请填写品牌' }], }); +const computeRoomRef=ref(); +// 查看机房平面图 +const showComputeRoom=(data:any)=>{ + console.log(data) + const params={ + data, + getListApi + } + computeRoomRef.value.acceptParams(params) +} // 算法的映射 const ALGORITHM_MAP: Record = { 8: "明烟明火检测", diff --git a/src/views/teacher/teacherPreview/index.vue b/src/views/teacher/teacherPreview/index.vue index ecc9d77..0f01faa 100644 --- a/src/views/teacher/teacherPreview/index.vue +++ b/src/views/teacher/teacherPreview/index.vue @@ -1,14 +1,17 @@ diff --git a/src/views/teacher/teacherStatistics/components/custom-componet/RoomSelectTree.vue b/src/views/teacher/teacherStatistics/components/custom-componet/RoomSelectTree.vue new file mode 100644 index 0000000..43f6174 --- /dev/null +++ b/src/views/teacher/teacherStatistics/components/custom-componet/RoomSelectTree.vue @@ -0,0 +1,108 @@ + + + + + \ No newline at end of file diff --git a/src/views/teacher/teacherStatistics/components/mt-edit/components/layout/header-panel/index.vue b/src/views/teacher/teacherStatistics/components/mt-edit/components/layout/header-panel/index.vue index 24ab1a4..8d809cb 100644 --- a/src/views/teacher/teacherStatistics/components/mt-edit/components/layout/header-panel/index.vue +++ b/src/views/teacher/teacherStatistics/components/mt-edit/components/layout/header-panel/index.vue @@ -101,6 +101,10 @@ + 保存模型 + + + 模型文件 @@ -177,6 +181,7 @@ const emits = defineEmits([ 'onDrawLineClick', 'onThumbnailClick', 'onRightDrawer', + 'onModelList', 'onImageDialog' ]); const isDark = useDark({ diff --git a/src/views/teacher/teacherStatistics/components/mt-edit/index.vue b/src/views/teacher/teacherStatistics/components/mt-edit/index.vue index 2eb7de1..9ed3021 100644 --- a/src/views/teacher/teacherStatistics/components/mt-edit/index.vue +++ b/src/views/teacher/teacherStatistics/components/mt-edit/index.vue @@ -36,6 +36,7 @@ @on-thumbnail-click="onThumbnailClick" @on-draw-line-click="onDrawLineClick" @on-right-drawer="onRightDrawer" + @on-model-list="onModelList" @on-image-dialog="onImageDialog" > @@ -108,28 +109,43 @@ > - - - 注意:保存后会覆盖之前的模型文件 + + + +
+ 请选择要绑定模型的机房 +
+
- - - - 确定保存或者覆盖 {{ fileName }} 模型文件? + + + +
+ 请选择机房模型 +
+
- + { let drawerVisible = ref(false); let dialogFormVisible = ref(false); let dialogImageVisible = ref(false); -let fileName = ref(''); + let menuType = ref(''); type MtEditProps = { @@ -289,22 +299,37 @@ const onImportYes = async () => { ElMessage.error('导入失败,请检查数据格式'); } }; - +const roomData=ref(); +const handleRoomSelected=(data:any)=>{ + roomData.value=data; +} // 保存数据模型 async function doSaveModel() { fullscreenLoading.value = true; + + if(!roomData.value) + { + ElMessage.error('请选择机房'); + return; + } const { exportJson } = genExportJson(globalStore.canvasCfg, globalStore.gridCfg, globalStore.done_json); - console.log('保存数据',exportJson.json) let endJson = { menuType: menuType.value, canvasCfg: exportJson.canvasCfg, gridCfg: exportJson.gridCfg, json: exportJson.json }; - + if (endJson.json.length == 0) + { + ElMessage.error('请添加模型'); + return; + } try { - const response = await saveOrUpdateModelData(endJson); - // const response = await modelApi.saveOrUpdate_modelData_post(endJson); + const response = await saveOrUpdateModelData({ + ...endJson, + roomId: roomData.value.roomId, + substationId:roomData.value.substationId + }); if (response.code == '0000') { fullscreenLoading.value = false; dialogFormVisible.value = false; @@ -328,17 +353,7 @@ async function doSaveModel() { } } -function saveModel() { - let nodes = treeRef.value?.getCheckedNodes(); - console.log(nodes?.length); - if (nodes?.length === 0) { - ElMessage.warning('请至少选择一个模型文件'); - } else { - dialogFormVisible.value = true; - fileName.value = nodes?.[0].label; - menuType.value = nodes?.[0].id; - } -} + async function loadModel() { fullscreenLoading.value = false; @@ -346,9 +361,11 @@ async function loadModel() { menuType: '' }; console.log('请求数据类型:', typeof JSON.stringify(endJson)); - try { - const response = await getModelData(endJson); + const response = await getModelData({ + ...endJson, + roomId: roomData.value.roomId, + }); // const response = await modelApi.model_getModelData_post(endJson); console.log('响应状态:', typeof response); if (response.code == '0000') { @@ -392,16 +409,17 @@ const onDrawLineClick = (val: boolean) => { line_append_enable.value = val; }; -let fileNames: Array<{ id: string; name: string }> = reactive([]); -let radio = ref('-1'); //加载数据模型 const fullscreenLoading = ref(false); - +const modelListDialogVisible = ref(false); const onRightDrawer = () => { drawerVisible.value = true; // fileRead(); }; +const onModelList=()=>{ + modelListDialogVisible.value=true; +} onMounted(() => { // fileRead(); @@ -433,7 +451,6 @@ const setImportJson = (exportJson: IExportJson) => { return true; }; -const treeRef = ref | null>(); defineExpose({ setImportJson }); @@ -463,4 +480,11 @@ defineExpose({ gap: 5px; align-items: flex-start; } +.tree-header { + font-size: 14px; + font-weight: bold; + margin-bottom: 15px; + color: #606266; + padding-bottom: 8px; +} diff --git a/src/views/teacher/teacherStatistics/components/mt-edit/store/left-aside.ts b/src/views/teacher/teacherStatistics/components/mt-edit/store/left-aside.ts index 2e37952..57307cb 100644 --- a/src/views/teacher/teacherStatistics/components/mt-edit/store/left-aside.ts +++ b/src/views/teacher/teacherStatistics/components/mt-edit/store/left-aside.ts @@ -14,9 +14,7 @@ export const leftAsideStore: ILeftAside = reactive({ ElMessage.info(`title:${title}已被系统占用,请更换名称!`); return; } - if (leftAsideStore.config.has(title)) { - ElMessage.info(`title:${title}已存在,已经将其配置覆盖`); - } + // 已存在时静默覆盖,不再提示 const cfg: ILeftAsideConfigItem[] = config.map((m) => { if (m.type == 'svg') { const { symbol_str, width, height } = svgToSymbol(m.svg!, m.id);