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