| | |
| | | // 建议快照记录 |
| | | 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}) |
| | | } |
| | |
| | | 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', |
| | |
| | | <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"> |
| | |
| | | </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) => { |
| | |
| | | dialogTitle.value = t('action.' + type) |
| | | formType.value = type |
| | | resetForm() |
| | | formData.confId = confId |
| | | formData.value.confId = confId |
| | | // 修改时,设置数据 |
| | | if (id) { |
| | | formLoading.value = true |
| | |
| | | } |
| | | } |
| | | } |
| | | 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> |
| | |
| | | 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"/> |
| | |
| | | plain |
| | | @click="openForm('create')" |
| | | > |
| | | <Icon icon="ep:plus" class="mr-5px" /> |
| | | <Icon icon="ep:plus" class="mr-5px"/> |
| | | 新增 |
| | | </el-button> |
| | | |
| | |
| | | :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)"/> |
| | |
| | | </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> |
| | |
| | | |
| | | 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() |
| | | |
| | | // 生成图表配置数据 |
| | |
| | | }, |
| | | 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 } |
| | | }] |
| | | } |