From 53a86ab33c9b6ab0e2c75853d60eae31e60d4d8f Mon Sep 17 00:00:00 2001 From: dongyukun <1208714201@qq.com> Date: 星期二, 27 五月 2025 13:07:33 +0800 Subject: [PATCH] 调度建议快照 --- src/utils/dict.ts | 1 src/views/model/sche/snapshotConf/det/index.vue | 172 ++++++++++++------------ src/views/model/sche/suggest/suggestSnapshot.vue | 76 ++++------ src/api/model/sche/suggest/suggestSnapshotRecord.ts | 8 src/views/model/sche/snapshotConf/det/configDetForm.vue | 153 +++++++++++---------- 5 files changed, 203 insertions(+), 207 deletions(-) diff --git a/src/api/model/sche/suggest/suggestSnapshotRecord.ts b/src/api/model/sche/suggest/suggestSnapshotRecord.ts index 009734d..382ba52 100644 --- a/src/api/model/sche/suggest/suggestSnapshotRecord.ts +++ b/src/api/model/sche/suggest/suggestSnapshotRecord.ts @@ -1,16 +1,12 @@ // 建议快照记录 import request from "@/config/axios"; -export interface ChartListReqVO extends PageParam { - chooseDataList: [] -} - // 列表 export const getList = (id) => { return request.get({ url: '/model/suggest/snapshot/record/list?operationId=' + id }) } // 图表 -export const getChartList = (params: ChartListReqVO) => { - return request.get({ url: '/model/suggest/snapshot/record/chartList' , params}) +export const getChartList = (data : selectedDataList) => { + return request.post({ url: '/model/suggest/snapshot/record/getChartData' , data}) } diff --git a/src/utils/dict.ts b/src/utils/dict.ts index a073307..fd45040 100644 --- a/src/utils/dict.ts +++ b/src/utils/dict.ts @@ -168,6 +168,7 @@ RESULT_TYPE = 'result_type', MATLAB_PLATFORM= 'matlab_platform', MATLAB_VERSION= 'matlab_version', + SUGGEST_SNAPSHOT_DATA_TYPE= 'suggest_snapshot_data_type', // ========== DATA - 数据平台模块 ========== DATA_FIELD_TYPE = 'data_field_type', TAG_DATA_TYPE = 'tag_data_type', diff --git a/src/views/model/sche/snapshotConf/det/configDetForm.vue b/src/views/model/sche/snapshotConf/det/configDetForm.vue index 470a342..6efbbd4 100644 --- a/src/views/model/sche/snapshotConf/det/configDetForm.vue +++ b/src/views/model/sche/snapshotConf/det/configDetForm.vue @@ -10,7 +10,14 @@ <el-row :gutter="24"> <el-col :span="12"> <el-form-item label="数据类型" prop="dataType"> - <el-input v-model="formData.dataType" placeholder=""/> + <el-select v-model="formData.dataType" placeholder="请选择"> + <el-option + v-for="dict in getStrDictOptions(DICT_TYPE.SUGGEST_SNAPSHOT_DATA_TYPE)" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> </el-form-item> </el-col> <el-col :span="12"> @@ -83,38 +90,38 @@ </template> <script lang="ts" setup> import * as ConfigDetApi from '@/api/model/sche/suggest/snapshotConfigDet' -import {deleteIcon} from "@/api/model/mpk/icon"; + import {deleteIcon} from "@/api/model/mpk/icon"; + import {DICT_TYPE, getIntDictOptions, getStrDictOptions} from '@/utils/dict' -defineOptions({ name: 'ConfigDetForm' }) + defineOptions({name: 'ConfigDetForm'}) + const {t} = useI18n() // 国际化 + const message = useMessage() // 消息弹窗 -const { t } = useI18n() // 国际化 -const message = useMessage() // 消息弹窗 - -const dialogVisible = ref(false) // 弹窗的是否展示 -const dialogTitle = ref('') // 弹窗的标题 -const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 -const formType = ref('') // 表单的类型:create - 新增;update - 修改 -const formData = ref({ - id: undefined, - confId: undefined, - dataType: undefined, - dataName: undefined, - dataNo: undefined, - leftLength: undefined, - rightLength: undefined, - sort: undefined, - ext1: undefined, - ext2: undefined, - ext3: undefined, - ext4: undefined, - ext5: undefined, -}) -const formRules = reactive({ - dataType: [{ required: true, message: '不能为空', trigger: 'blur' }], - dataName: [{ required: true, message: '不能为空', trigger: 'blur' }], - dataNo: [{ required: true, message: '不能为空', trigger: 'blur' }], -}) -const formRef = ref() // 表单 Ref + const dialogVisible = ref(false) // 弹窗的是否展示 + const dialogTitle = ref('') // 弹窗的标题 + const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 + const formType = ref('') // 表单的类型:create - 新增;update - 修改 + const formData = ref({ + id: undefined, + confId: undefined, + dataType: undefined, + dataName: undefined, + dataNo: undefined, + leftLength: undefined, + rightLength: undefined, + sort: undefined, + ext1: undefined, + ext2: undefined, + ext3: undefined, + ext4: undefined, + ext5: undefined, + }) + const formRules = reactive({ + dataType: [{required: true, message: '不能为空', trigger: 'blur'}], + dataName: [{required: true, message: '不能为空', trigger: 'blur'}], + dataNo: [{required: true, message: '不能为空', trigger: 'blur'}], + }) + const formRef = ref() // 表单 Ref /** 打开弹窗 */ const open = async (type: string, id?: string, confId?: string) => { @@ -122,7 +129,7 @@ dialogTitle.value = t('action.' + type) formType.value = type resetForm() - formData.confId = confId + formData.value.confId = confId // 修改时,设置数据 if (id) { formLoading.value = true @@ -133,50 +140,50 @@ } } } -defineExpose({ open }) // 提供 open 方法,用于打开弹窗 + defineExpose({open}) // 提供 open 方法,用于打开弹窗 -/** 提交表单 */ -const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 -const submitForm = async () => { - // 校验表单 - if (!formRef) return - const valid = await formRef.value.validate() - if (!valid) return - // 提交请求 - formLoading.value = true - try { - const data = formData.value - if (formType.value === 'create') { - await ConfigDetApi.create(data) - message.success(t('common.createSuccess')) - } else { - await ConfigDetApi.update(data) - message.success(t('common.updateSuccess')) + /** 提交表单 */ + const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 + const submitForm = async () => { + // 校验表单 + if (!formRef) return + const valid = await formRef.value.validate() + if (!valid) return + // 提交请求 + formLoading.value = true + try { + const data = formData.value + if (formType.value === 'create') { + await ConfigDetApi.create(data) + message.success(t('common.createSuccess')) + } else { + await ConfigDetApi.update(data) + message.success(t('common.updateSuccess')) + } + dialogVisible.value = false + // 发送操作成功的事件 + emit('success') + } finally { + formLoading.value = false } - dialogVisible.value = false - // 发送操作成功的事件 - emit('success') - } finally { - formLoading.value = false } -} -/** 重置表单 */ -const resetForm = () => { - formData.value = { - id: undefined, - confId: undefined, - dataType: undefined, - dataNo: undefined, - leftLength: undefined, - rightLength: undefined, - sort: undefined, - ext1: undefined, - ext2: undefined, - ext3: undefined, - ext4: undefined, - ext5: undefined, + /** 重置表单 */ + const resetForm = () => { + formData.value = { + id: undefined, + confId: undefined, + dataType: undefined, + dataNo: undefined, + leftLength: undefined, + rightLength: undefined, + sort: undefined, + ext1: undefined, + ext2: undefined, + ext3: undefined, + ext4: undefined, + ext5: undefined, + } + formRef.value?.resetFields() } - formRef.value?.resetFields() -} </script> diff --git a/src/views/model/sche/snapshotConf/det/index.vue b/src/views/model/sche/snapshotConf/det/index.vue index 36fd064..4d9516b 100644 --- a/src/views/model/sche/snapshotConf/det/index.vue +++ b/src/views/model/sche/snapshotConf/det/index.vue @@ -23,14 +23,14 @@ class="!w-240px" /> </el-form-item> -<!-- <el-form-item label="参数编码" prop="paramCode">--> -<!-- <el-input--> -<!-- v-model="queryParams.paramCode"--> -<!-- placeholder="请输入"--> -<!-- clearable--> -<!-- class="!w-240px"--> -<!-- />--> -<!-- </el-form-item>--> + <!-- <el-form-item label="参数编码" prop="paramCode">--> + <!-- <el-input--> + <!-- v-model="queryParams.paramCode"--> + <!-- placeholder="请输入"--> + <!-- clearable--> + <!-- class="!w-240px"--> + <!-- />--> + <!-- </el-form-item>--> <el-form-item> <el-button @click="handleQuery"> <Icon icon="ep:search" class="mr-5px"/> @@ -45,7 +45,7 @@ plain @click="openForm('create')" > - <Icon icon="ep:plus" class="mr-5px" /> + <Icon icon="ep:plus" class="mr-5px"/> 新增 </el-button> @@ -60,7 +60,11 @@ :data="list" row-key="id" > - <el-table-column prop="dataType" label="数据类型"/> + <el-table-column prop="dataType" align="center" label="数据类型"> + <template #default="scope"> + <dict-tag :type="DICT_TYPE.SUGGEST_SNAPSHOT_DATA_TYPE" :value="scope.row.dataType"/> + </template> + </el-table-column> <el-table-column prop="dataName" label="数据名称"/> <el-table-column prop="dataNo" label="数据编号"/> <el-table-column prop="leftLength" label="左侧长度(min)"/> @@ -98,91 +102,91 @@ </ContentWrap> <!-- 表单弹窗:添加/修改 --> - <ConfigDetForm ref="formRef" @success="getList" /> + <ConfigDetForm ref="formRef" @success="getList"/> </el-drawer> </template> <script lang="ts" setup> -import {dateFormatter} from '@/utils/formatTime' -import * as configDetApi from '@/api/model/sche/suggest/snapshotConfigDet' -import ConfigDetForm from './configDetForm.vue' + import {dateFormatter} from '@/utils/formatTime' + import * as configDetApi from '@/api/model/sche/suggest/snapshotConfigDet' + import ConfigDetForm from './configDetForm.vue' + import type {DrawerProps} from "element-plus"; + import {DICT_TYPE, getIntDictOptions, getStrDictOptions} from '@/utils/dict' -import type {DrawerProps} from "element-plus"; + defineOptions({name: 'ConfigDet'}) -defineOptions({name: 'ConfigDet'}) + const message = useMessage() // 消息弹窗 + const {t} = useI18n() // 国际化 -const message = useMessage() // 消息弹窗 -const {t} = useI18n() // 国际化 + const drawer = ref(false) + const loading = ref(true) // 列表的加载中 + const total = ref(0) // 列表的总页数 + const list = ref([]) // 字典表格数据 + const queryParams = reactive({ + page: 1, + limit: 10, + confId: '', + }) + const queryFormRef = ref() // 搜索的表单 -const drawer = ref(false) -const loading = ref(true) // 列表的加载中 -const total = ref(0) // 列表的总页数 -const list = ref([]) // 字典表格数据 -const queryParams = reactive({ - page: 1, - limit: 10, - confId: '', -}) -const queryFormRef = ref() // 搜索的表单 - -const getList = async () => { - loading.value = true - try { - const data = await configDetApi.getPage(queryParams) - list.value = data.list - total.value = data.total - } finally { - loading.value = false + const getList = async () => { + loading.value = true + try { + const data = await configDetApi.getPage(queryParams) + list.value = data.list + total.value = data.total + } finally { + loading.value = false + } } -} -/** 搜索按钮操作 */ -const handleQuery = () => { - getList() -} - -/** 重置按钮操作 */ -const resetQuery = () => { - queryFormRef.value.resetFields() - handleQuery() -} - -/** 添加/修改操作 */ -const formRef = ref() -const openForm = (type: string, id?: string) => { - formRef.value.open(type, id, queryParams.confId) -} - -/** 删除按钮操作 */ -const handleDelete = async (id: string) => { - try { - // 删除的二次确认 - await message.delConfirm() - // 发起删除 - await configDetApi.del(id) - message.success(t('common.delSuccess')) - // 刷新列表 - await getList() - } catch { - } -} - -/** 打开弹窗 */ -const open = async (confId?: string) => { - resetForm() - drawer.value = true - queryParams.confId = confId - if (confId) { + /** 搜索按钮操作 */ + const handleQuery = () => { getList() } -} -defineExpose({open}) // 提供 open 方法,用于打开弹窗 -/** 重置表单 */ -const resetForm = () => { - queryParams.confId = '' -} + /** 重置按钮操作 */ + const resetQuery = () => { + queryFormRef.value.resetFields() + handleQuery() + } -const handleClose = (done: () => void) => { - drawer.value = false -} + /** 添加/修改操作 */ + const formRef = ref() + const openForm = (type: string, id?: string) => { + formRef.value.open(type, id, queryParams.confId) + } + + /** 删除按钮操作 */ + const handleDelete = async (id: string) => { + try { + // 删除的二次确认 + await message.delConfirm() + // 发起删除 + await configDetApi.del(id) + message.success(t('common.delSuccess')) + // 刷新列表 + await getList() + } catch { + } + } + + /** 打开弹窗 */ + const open = async (confId?: string) => { + resetForm() + drawer.value = true + queryParams.confId = confId + if (confId) { + getList() + } + } + defineExpose({open}) // 提供 open 方法,用于打开弹窗 + + /** 重置表单 */ + const resetForm = () => { + queryParams.confId = '' + } + + const handleClose = (done: () => void) => { + drawer.value = false + } </script> diff --git a/src/views/model/sche/suggest/suggestSnapshot.vue b/src/views/model/sche/suggest/suggestSnapshot.vue index fc2f607..741bea6 100644 --- a/src/views/model/sche/suggest/suggestSnapshot.vue +++ b/src/views/model/sche/suggest/suggestSnapshot.vue @@ -69,53 +69,44 @@ loading.value = true try { - const chartData = await suggestSnapshotApi.getChartList({ - chooseDataList: selectedData.value - }) - // const chartData =[ + const selectedDataList = selectedData.value.map(code => + dataList.value.find(d => d.dataNo === code) + ).filter(Boolean) // 过滤无效项 + const chartData = await suggestSnapshotApi.getChartList( + selectedDataList + ) + // const chartData = [ // { // "dataNo": "F0000101228", - // "categories": [ - // "2024-02-01T00:00:00", - // "2024-02-01T02:00:00", - // "2024-02-01T04:00:00", - // "2024-02-01T06:00:00", - // "2024-02-01T08:00:00", - // "2024-02-01T10:00:00", - // "2024-02-01T12:00:00", - // "2024-02-01T14:00:00", - // "2024-02-01T16:00:00", - // "2024-02-01T18:00:00" - // ], - // "series": [ - // { - // "name": "温度", - // "data": [22.1, 21.8, 21.5, 22.3, 24.5, 26.7, 28.2, 27.9, 25.6, 23.4] - // } + // "dataList": [ + // ["2024-02-01 00:00:00", 220.1], + // ["2024-02-01 01:00:00", 219.8], + // ["2024-02-01 02:00:00", 220.2], + // ["2024-02-01 03:00:00", 219.9], + // ["2024-02-01 04:00:00", 220.5], + // ["2024-02-01 05:00:00", 221.0], + // ["2024-02-01 06:00:00", 220.8], + // ["2024-02-01 07:00:00", 220.6], + // ["2024-02-01 08:00:00", 220.3], + // ["2024-02-01 09:00:00", 220.0] // ] // }, // { // "dataNo": "F0000100152", - // "categories": [ - // "2024-02-01T00:00:00", - // "2024-02-01T02:00:00", - // "2024-02-01T04:00:00", - // "2024-02-01T06:00:00", - // "2024-02-01T08:00:00", - // "2024-02-01T10:00:00", - // "2024-02-01T12:00:00", - // "2024-02-01T14:00:00", - // "2024-02-01T16:00:00", - // "2024-02-01T18:00:00" - // ], - // "series": [ - // { - // "name": "电压", - // "data": [220.1, 219.8, 220.2, 219.9, 220.5, 221.0, 220.8, 220.6, 220.3, 220.0] - // } + // "dataList": [ + // ["2024-02-01 00:00:00", 220.1], + // ["2024-02-01 01:00:00", 219.8], + // ["2024-02-01 02:00:00", 220.2], + // ["2024-02-01 03:00:00", 219.9], + // ["2024-02-01 04:00:00", 220.5], + // ["2024-02-01 05:00:00", 221.0], + // ["2024-02-01 06:00:00", 220.8], + // ["2024-02-01 07:00:00", 220.6], + // ["2024-02-01 08:00:00", 220.3], + // ["2024-02-01 09:00:00", 220.0] // ] // } - // ] + // ]; destroyCharts() // 生成图表配置数据 @@ -160,15 +151,12 @@ }, tooltip: { trigger: 'axis' }, grid: { top: 30, left: '3%', right: '5%', bottom: 20 }, - xAxis: { - type: 'category', - data: chartInfo.data?.categories || [] - }, + xAxis: {type: 'category'}, yAxis: { type: 'value' }, dataZoom: [{ type: 'inside' }], series: [{ type: 'line', - data: chartInfo.data?.series?.[0]?.data || [], + data: chartInfo.data?.dataList || [], lineStyle: { color: '#5B8FF9', width: 1 } }] } -- Gitblit v1.9.3