From 1d160a52bb6d146d6130e449af0f57ba92cbe015 Mon Sep 17 00:00:00 2001 From: dongyukun <1208714201@qq.com> Date: 星期五, 15 十一月 2024 10:27:59 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/views/model/pre/item/index.vue | 32 + src/views/model/pre/item/MmPredictItemChart.vue | 253 ++++++++++++ src/api/model/pre/item/index.ts | 145 ++++++- src/api/model/pre/dm/index.ts | 2 src/views/model/pre/type/ItemTypeForm.vue | 2 src/api/model/mcs/index.ts | 23 + src/views/model/pre/analysis/index.vue | 5 src/views/model/pre/item/MmPredictItemForm.vue | 229 +++++++--- /dev/null | 149 ------- src/api/model/pre/type/index.ts | 43 ++ src/views/model/pre/type/index.vue | 2 src/utils/dict.ts | 3 src/api/model/sche/model/index.ts | 2 src/views/data/point/DaPointChart.vue | 265 ++++++------ 14 files changed, 759 insertions(+), 396 deletions(-) diff --git a/src/api/model/mcs/index.ts b/src/api/model/mcs/index.ts new file mode 100644 index 0000000..0433f38 --- /dev/null +++ b/src/api/model/mcs/index.ts @@ -0,0 +1,23 @@ +import request from '@/config/axios' + +export interface PreDataBarLineReqVO { + queryIds: string[], + predictTime: string, + startTime: string, + endTime: string +} + +export interface PreDataItemChartReqVO { + itemId: string, + startTime: string, + endTime: string +} + + +export const getPreDataCharts = (data: PreDataBarLineReqVO) => { + return request.post({ url: '/model/api/mcs/predict-data/charts', data }) +} + +export const getPreDataItemChart = (data: PreDataItemChartReqVO) => { + return request.post({ url: '/model/api/mcs/predict-data/item-chart', data }) +} diff --git a/src/api/model/pre/dm/index.ts b/src/api/model/pre/dm/index.ts index aa652b6..69e13c3 100644 --- a/src/api/model/pre/dm/index.ts +++ b/src/api/model/pre/dm/index.ts @@ -1,7 +1,7 @@ import request from '@/config/axios' export interface DmModuleVO { - id: string + id: string, modulename: string, moduletype: string, cycle: string diff --git a/src/api/model/pre/item/index.ts b/src/api/model/pre/item/index.ts index 795ca65..e27d8c4 100644 --- a/src/api/model/pre/item/index.ts +++ b/src/api/model/pre/item/index.ts @@ -1,43 +1,140 @@ import request from '@/config/axios' +import {UploadRequestOptions} from "element-plus/es/components/upload/src/upload"; -export interface MmItemTypeVO { - id: string +export interface MmPredictItemVO { + id: string, itemtypename: string, - itemclasstype: string, - assemblyname: string + mmPredictItem: { + id: string, + itemno: string, + itemname: string, + caltypeid: string, + itemtypeid: string, + predictlength: string, + granularity: number, + status: string, + isfuse: number, + predictphase: string, + workchecked: number, + unittransfactor: string, + saveindex: string + }, + dmModuleItem: { + id: string, + moduleid: string, + itemid: string, + itemorder: number, + status: number, + categoryid: string + }, + mmItemOutput: { + id: string, + itemid: string, + pointid: string, + resulttableid: string, + tagname: string, + outputorder: number + }, + mmPredictModel: { + id: string, + modelno: string, + modelname: string, + itemid: string, + arithid: string, + trainsamplength: number, + predictsamplength: string, + isonlinetrain: string, + modelpath: string, + isnormal: string, + normalmax: string, + normalmin: string, + status: number, + classname: string, + methodname: string, + modelparamstructure: string, + resultstrid: string, + settingmap: string + }, + mmPredictMergeItem: { + id: string, + itemid: string, + expression: string, + num: string + }, + modelparamtypeList: [], + mmModelArithSettingsList: [], + mmModelParamList: [] } -export interface MmItemTypePageReqVO extends PageParam { - itemtypename?: string +export interface MmPredictItemPageReqVO extends PageParam { + itemno?: string, + itemname?: string, } -// 查询MmItemType列表 -export const getMmItemTypePage = (params: MmItemTypePageReqVO) => { - return request.get({ url: '/model/pre/item-type/page', params }) +// 查询MmPredictItem列表 +export const getMmPredictItemPage = (params: MmPredictItemPageReqVO) => { + return request.get({ url: '/model/pre/item/page', params }) } -// 查询MmItemType详情 -export const getMmItemType = (id: number) => { - return request.get({ url: `/model/pre/item-type/get/${id}`}) +// 查询MmPredictItem详情 +export const getMmPredictItem = (id: number) => { + return request.get({ url: `/model/pre/item/get/${id}`}) } -// 新增MmItemType -export const createMmItemType = (data: MmItemTypeVO) => { - return request.post({ url: '/model/pre/item-type/create', data }) +// 新增MmPredictItem +export const createMmPredictItem = (data: MmPredictItemVO) => { + return request.post({ url: '/model/pre/item/create', data }) } -// 修改MmItemType -export const updateMmItemType = (data: MmItemTypeVO) => { - return request.put({ url: '/model/pre/item-type/update', data }) +// 修改MmPredictItem +export const updateMmPredictItem = (data: MmPredictItemVO) => { + return request.put({ url: '/model/pre/item/update', data }) } -// 删除MmItemType -export const deleteMmItemType = (id: number) => { - return request.delete({ url: '/model/pre/item-type/delete?id=' + id }) +// 删除MmPredictItem +export const deleteMmPredictItem = (id: number) => { + return request.delete({ url: '/model/pre/item/delete?id=' + id }) } +// 查询MmPredictItem列表 +export const getMmPredictItemList = (params) => { + return request.get({ url: `/model/pre/item/list`, params}) +} -// 查询getItemTypeList详情 -export const getItemTypeList = () => { - return request.get({ url: `/model/pre/item-type/list`}) +export const updateModel = (data: any) => { + return request.upload({ url: '/model/pre/item/upload-model', data }) +} + +export const useUpload = () => { + const uploadUrl = import.meta.env.VITE_BASE_URL + '/admin-api/model/pre/item/upload-model' + + const httpRequest = async (options: UploadRequestOptions) => { + return new Promise((resolve, reject) => { + updateModel({ file: options.file }) + .then((res) => { + if (res.code === 0) { + resolve(res) + } else { + reject(res) + } + }) + .catch((res) => { + reject(res) + }) + }) + + } + + return { + uploadUrl, + httpRequest + } +} + +export const getMmPredictItemTree = () => { + return request.get({ url: `/model/pre/item/tree`}) +} + +export const getViewCharts = (params) => { + return request.get({ url: `/model/pre/item/view-charts`,params}) } diff --git a/src/api/model/pre/predict/index.ts b/src/api/model/pre/predict/index.ts deleted file mode 100644 index e27d8c4..0000000 --- a/src/api/model/pre/predict/index.ts +++ /dev/null @@ -1,140 +0,0 @@ -import request from '@/config/axios' -import {UploadRequestOptions} from "element-plus/es/components/upload/src/upload"; - -export interface MmPredictItemVO { - id: string, - itemtypename: string, - mmPredictItem: { - id: string, - itemno: string, - itemname: string, - caltypeid: string, - itemtypeid: string, - predictlength: string, - granularity: number, - status: string, - isfuse: number, - predictphase: string, - workchecked: number, - unittransfactor: string, - saveindex: string - }, - dmModuleItem: { - id: string, - moduleid: string, - itemid: string, - itemorder: number, - status: number, - categoryid: string - }, - mmItemOutput: { - id: string, - itemid: string, - pointid: string, - resulttableid: string, - tagname: string, - outputorder: number - }, - mmPredictModel: { - id: string, - modelno: string, - modelname: string, - itemid: string, - arithid: string, - trainsamplength: number, - predictsamplength: string, - isonlinetrain: string, - modelpath: string, - isnormal: string, - normalmax: string, - normalmin: string, - status: number, - classname: string, - methodname: string, - modelparamstructure: string, - resultstrid: string, - settingmap: string - }, - mmPredictMergeItem: { - id: string, - itemid: string, - expression: string, - num: string - }, - modelparamtypeList: [], - mmModelArithSettingsList: [], - mmModelParamList: [] -} - -export interface MmPredictItemPageReqVO extends PageParam { - itemno?: string, - itemname?: string, -} - -// 查询MmPredictItem列表 -export const getMmPredictItemPage = (params: MmPredictItemPageReqVO) => { - return request.get({ url: '/model/pre/item/page', params }) -} - -// 查询MmPredictItem详情 -export const getMmPredictItem = (id: number) => { - return request.get({ url: `/model/pre/item/get/${id}`}) -} - -// 新增MmPredictItem -export const createMmPredictItem = (data: MmPredictItemVO) => { - return request.post({ url: '/model/pre/item/create', data }) -} - -// 修改MmPredictItem -export const updateMmPredictItem = (data: MmPredictItemVO) => { - return request.put({ url: '/model/pre/item/update', data }) -} - -// 删除MmPredictItem -export const deleteMmPredictItem = (id: number) => { - return request.delete({ url: '/model/pre/item/delete?id=' + id }) -} - -// 查询MmPredictItem列表 -export const getMmPredictItemList = (params) => { - return request.get({ url: `/model/pre/item/list`, params}) -} - -export const updateModel = (data: any) => { - return request.upload({ url: '/model/pre/item/upload-model', data }) -} - -export const useUpload = () => { - const uploadUrl = import.meta.env.VITE_BASE_URL + '/admin-api/model/pre/item/upload-model' - - const httpRequest = async (options: UploadRequestOptions) => { - return new Promise((resolve, reject) => { - updateModel({ file: options.file }) - .then((res) => { - if (res.code === 0) { - resolve(res) - } else { - reject(res) - } - }) - .catch((res) => { - reject(res) - }) - }) - - } - - return { - uploadUrl, - httpRequest - } -} - -export const getMmPredictItemTree = () => { - return request.get({ url: `/model/pre/item/tree`}) -} - -export const getViewCharts = (params) => { - return request.get({ url: `/model/pre/item/view-charts`,params}) -} diff --git a/src/api/model/pre/result/index.ts b/src/api/model/pre/result/index.ts deleted file mode 100644 index 5561e94..0000000 --- a/src/api/model/pre/result/index.ts +++ /dev/null @@ -1,46 +0,0 @@ -import request from '@/config/axios' - -export interface MmResultTableVO { - id: string - tablename: string, -} - -export interface MmResultTablePageReqVO extends PageParam { - tablename?: string -} - -// 查询MmResultTable列表 -export const getMmResultTablePage = (params: MmResultTablePageReqVO) => { - return request.get({ url: '/model/pre/result-table/page', params }) -} - -// 查询MmResultTable详情 -export const getMmResultTable = (id: number) => { - return request.get({ url: `/model/pre/result-table/get/${id}`}) -} - -// 新增MmResultTable -export const createMmResultTable = (data: MmResultTableVO) => { - return request.post({ url: '/model/pre/result-table/create', data }) -} - -// 修改MmResultTable -export const updateMmResultTable = (data: MmResultTableVO) => { - return request.put({ url: '/model/pre/result-table/update', data }) -} - -// 删除MmResultTable -export const deleteMmResultTable = (id: number) => { - return request.delete({ url: '/model/pre/result-table/delete?id=' + id }) -} - - -// 查询getResulttableList详情 -export const getResulttableList = () => { - return request.get({ url: `/model/pre/result-table/list`}) -} - -// 查询getResulttableList详情 -export const getResultstridList = () => { - return request.get({ url: `/model/pre/model-resultstr/list`}) -} diff --git a/src/api/model/pre/type/index.ts b/src/api/model/pre/type/index.ts new file mode 100644 index 0000000..795ca65 --- /dev/null +++ b/src/api/model/pre/type/index.ts @@ -0,0 +1,43 @@ +import request from '@/config/axios' + +export interface MmItemTypeVO { + id: string + itemtypename: string, + itemclasstype: string, + assemblyname: string +} + +export interface MmItemTypePageReqVO extends PageParam { + itemtypename?: string +} + +// 查询MmItemType列表 +export const getMmItemTypePage = (params: MmItemTypePageReqVO) => { + return request.get({ url: '/model/pre/item-type/page', params }) +} + +// 查询MmItemType详情 +export const getMmItemType = (id: number) => { + return request.get({ url: `/model/pre/item-type/get/${id}`}) +} + +// 新增MmItemType +export const createMmItemType = (data: MmItemTypeVO) => { + return request.post({ url: '/model/pre/item-type/create', data }) +} + +// 修改MmItemType +export const updateMmItemType = (data: MmItemTypeVO) => { + return request.put({ url: '/model/pre/item-type/update', data }) +} + +// 删除MmItemType +export const deleteMmItemType = (id: number) => { + return request.delete({ url: '/model/pre/item-type/delete?id=' + id }) +} + + +// 查询getItemTypeList详情 +export const getItemTypeList = () => { + return request.get({ url: `/model/pre/item-type/list`}) +} diff --git a/src/api/model/sche/model/index.ts b/src/api/model/sche/model/index.ts index b0bf106..3c5b8bc 100644 --- a/src/api/model/sche/model/index.ts +++ b/src/api/model/sche/model/index.ts @@ -1,6 +1,6 @@ import request from '@/config/axios' import * as DataPointApi from '@/api/data/da/point' -import * as PredictItemApi from '@/api/model/pre/predict' +import * as PredictItemApi from '@/api/model/pre/item' import {CommonEnabled} from "@/utils/constants"; export interface ScheduleModelVO { diff --git a/src/utils/dict.ts b/src/utils/dict.ts index 86bd05a..9347dfc 100644 --- a/src/utils/dict.ts +++ b/src/utils/dict.ts @@ -162,6 +162,8 @@ MODEL_TYPE = 'model_type', MODEL_METHOD_SETTING_TYPE = 'model_method_setting_type', MODEL_METHOD_SETTING_VALUE_TYPE = 'model_method_setting_value_type', + PRED_GRANULARITY = 'pred_granularity', + ITEM_RUN_STATUS = 'item_run_status', // ========== DATA - 数据平台模块 ========== DATA_FIELD_TYPE = 'data_field_type', @@ -183,4 +185,5 @@ NVR_ONLINE_STATUS = 'nvr_online_status', CAMERA_BRAND = 'camera_brand', CAPTURE_TYPE = 'capture_type', + MODEL_RESULT_TYPE = 'model_result_type', } diff --git a/src/views/data/point/DaPointChart.vue b/src/views/data/point/DaPointChart.vue index e496d98..4fbed39 100644 --- a/src/views/data/point/DaPointChart.vue +++ b/src/views/data/point/DaPointChart.vue @@ -41,7 +41,8 @@ :loading="exportLoading" v-hasPermi="['data:point:export']" > - <Icon icon="ep:download" />导出 + <Icon icon="ep:download"/> + 导出 </el-button> </el-form-item> </el-form> @@ -50,143 +51,147 @@ </template> <script lang="ts" setup> - import {ref} from 'vue'; - import * as echarts from 'echarts'; - import * as DaPoint from '@/api/data/da/point/daPointChart' - import {getYMDHM0} from "@/utils/dateUtil" - import download from "@/utils/download"; - const message = useMessage() // 消息弹窗 - const visible = ref(false); - const chartDom = ref(null); - let myChart = null; - const chartParams = reactive({ - codes:[], - startDate : undefined, - endDate: undefined, - }) - const dataForm = ref({ - id: "", - pointNo: "", - pointName: "", - pointTypeName: "", - startTime: getYMDHM0(new Date() - 60 * 60 * 1000), - endTime: "", - }); +import {ref} from 'vue'; +import * as echarts from 'echarts'; +import * as DaPoint from '@/api/data/da/point/daPointChart' +import {getYMDHM0} from "@/utils/dateUtil" +import download from "@/utils/download"; - /** 打开弹窗 */ - const open = async (row: object) => { - visible.value = true - dataForm.value.id = row.id; - dataForm.value.pointNo = row.pointNo; - dataForm.value.pointName = row.pointName; - getDataList(); - } +const message = useMessage() // 消息弹窗 +const visible = ref(false); +const chartDom = ref(null); +let myChart = null; +const chartParams = reactive({ + codes: [], + pointNo: undefined, + startDate: undefined, + endDate: undefined, +}) +const dataForm = ref({ + id: "", + pointNo: "", + pointName: "", + pointTypeName: "", + startTime: getYMDHM0(new Date() - 60 * 60 * 1000), + endTime: "", +}); - defineExpose({open}) // 提供 open 方法,用于打开弹窗 +/** 打开弹窗 */ +const open = async (row: object) => { + visible.value = true + dataForm.value.id = row.id; + dataForm.value.pointNo = row.pointNo; + dataForm.value.pointName = row.pointName; + getDataList(); +} - async function getDataList() { - visible.value = true; - if (dataForm.value.id) { - try { - chartParams.codes=[dataForm.value.pointNo]; - chartParams.startDate = dataForm.value.startTime; - chartParams.endDate = dataForm.value.endTime; - const data = await DaPoint.getPointDaChart(chartParams) - let seriesData = [] - data.series.forEach(item => { - seriesData.push({ - name: item.name, - type: "line", - data: item.data, - showSymbol: true, - smooth: false, - lineStyle: { - normal: { - color: "#5B8FF9", - width: 1, - }, - }, - }); - }) +defineExpose({open}) // 提供 open 方法,用于打开弹窗 - myChart = echarts.init(chartDom.value); - const option = { - title: { - text: dataForm.value.pointName, - top: 0, - left: "1%", - textStyle: { - fontSize: 14, - }, - }, - tooltip: { - trigger: "axis", - axisPointer: { - type: "line", - lineStyle: { - color: "#cccccc", - width: "1", - type: "dashed", - }, - }, - }, - legend: { - show: false, - top: 10, - }, - grid: { - top: 30, - left: "3%", - right: "5%", - bottom: 10, - containLabel: true, - }, - xAxis: { - type: "category", - boundaryGap: false, - data: data.categories, - }, - yAxis: { - type: "value", - }, - dataZoom: [ - { - type: "inside", - }, - ], - series: seriesData, - }; - myChart.setOption(option); - } catch (error) { - console.error(error) - } - } - } - /** 导出按钮操作 */ - const exportLoading = ref(false) - const handleExport = async () => { - chartParams.codes=[dataForm.value.pointNo]; - chartParams.startDate = dataForm.value.startTime; - chartParams.endDate = dataForm.value.endTime; +async function getDataList() { + visible.value = true; + if (dataForm.value.id) { try { - // 导出的二次确认 - await message.exportConfirm() - // 发起导出 - exportLoading.value = true - const data = await DaPoint.exportDaPointValue(chartParams) - download.excel(data, dataForm.value.pointName +'.xls') - } catch { - } finally { - exportLoading.value = false + chartParams.codes = [dataForm.value.pointNo]; + chartParams.startDate = dataForm.value.startTime; + chartParams.endDate = dataForm.value.endTime; + const data = await DaPoint.getPointDaChart(chartParams) + let seriesData = [] + data.series.forEach(item => { + seriesData.push({ + name: item.name, + type: "line", + data: item.data, + showSymbol: true, + smooth: false, + lineStyle: { + normal: { + color: "#5B8FF9", + width: 1, + }, + }, + }); + }) + + myChart = echarts.init(chartDom.value); + const option = { + title: { + text: dataForm.value.pointName, + top: 0, + left: "1%", + textStyle: { + fontSize: 14, + }, + }, + tooltip: { + trigger: "axis", + axisPointer: { + type: "line", + lineStyle: { + color: "#cccccc", + width: "1", + type: "dashed", + }, + }, + }, + legend: { + show: false, + top: 10, + }, + grid: { + top: 30, + left: "3%", + right: "5%", + bottom: 10, + containLabel: true, + }, + xAxis: { + type: "category", + boundaryGap: false, + data: data.categories, + }, + yAxis: { + type: "value", + }, + dataZoom: [ + { + type: "inside", + }, + ], + series: seriesData, + }; + myChart.setOption(option); + } catch (error) { + console.error(error) } } +} + +/** 导出按钮操作 */ +const exportLoading = ref(false) +const handleExport = async () => { + try { + // 导出的二次确认 + await message.exportConfirm() + // 发起导出 + exportLoading.value = true + const data = await DaPoint.exportDaPointValue({ + pointNo: dataForm.value.pointNo, + start: dataForm.value.startTime, + end: dataForm.value.endTime + }) + download.excel(data, dataForm.value.pointName + '.xls') + } catch { + } finally { + exportLoading.value = false + } +} </script> <style> - .el-select { - width: 100%; - } +.el-select { + width: 100%; +} - .result-chart { - height: 500px; - } +.result-chart { + height: 500px; +} </style> diff --git a/src/views/model/pre/analysis/index.vue b/src/views/model/pre/analysis/index.vue index 5418745..b21627a 100644 --- a/src/views/model/pre/analysis/index.vue +++ b/src/views/model/pre/analysis/index.vue @@ -164,7 +164,6 @@ </div> </div> </el-form> - </div> </el-card> </template> @@ -173,7 +172,7 @@ import * as CategoryApi from "@/api/data/ind/category"; import * as DmModule from '@/api/model/pre/dm' import * as ItemApi from "@/api/data/ind/item/item"; - import * as MmPredictItem from '@/api/model/pre/predict' + import * as MmPredictItem from '@/api/model/pre/item' import * as echarts from "echarts"; import { onMounted, ref } from 'vue'; import { Search, ArrowLeft, ArrowRight,} from '@element-plus/icons-vue' @@ -684,7 +683,7 @@ .his-body { width: 100%; - height: calc(calc(100vh - 48px - 38px - 130px)); + height: calc(calc(100vh - 68px - 38px - 160px)); display: flex; flex-direction: row; justify-content: flex-start; diff --git a/src/views/model/pre/item/MmPredictItemChart.vue b/src/views/model/pre/item/MmPredictItemChart.vue new file mode 100644 index 0000000..3fd55b5 --- /dev/null +++ b/src/views/model/pre/item/MmPredictItemChart.vue @@ -0,0 +1,253 @@ +<template> + <el-dialog + title="预测数据" + :close-on-click-modal="false" + width="50%" + v-model="visible" + > + <el-form + :inline="true" + :model="dataForm" + @keydown.enter="getDataList()" + > + <el-form-item label="开始时间"> + <el-date-picker + size="mini" + v-model="dataForm.startTime" + format="YYYY-MM-DD HH:mm:00" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + :clearable="false" + placeholder="选择日期时间"/> + </el-form-item> + <el-form-item label="结束时间"> + <el-date-picker + size="mini" + v-model="dataForm.endTime" + format="YYYY-MM-DD HH:mm:00" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + :clearable="false" + placeholder="选择日期时间"/> + </el-form-item> + <el-form-item> + <el-button @click="getDataList()">查询</el-button> + </el-form-item> + <el-form-item> + <el-button + type="success" + plain + @click="handleExport" + :loading="exportLoading" + > + <Icon icon="ep:download"/> + 导出 + </el-button> + </el-form-item> + </el-form> + <div ref="chartDomPre" class="result-chart"></div> + </el-dialog> +</template> + +<script lang="ts" setup> +import {ref} from 'vue'; +import * as echarts from 'echarts'; +import * as McsApi from '@/api/model/mcs' +import {getYMDHM0} from "@/utils/dateUtil" +import download from "@/utils/download"; + +const message = useMessage() // 消息弹窗 +const visible = ref(false); +const chartDomPre = ref(null); +let myChart = null; +const chartParams = reactive({ + itemId: undefined, + startTime: undefined, + endTime: undefined, +}) +const dataForm = ref({ + id: "", + itemName: "", + startTime: getYMDHM0(new Date() - 60 * 60 * 1000), + endTime: getYMDHM0(new Date() + 60 * 60 * 1000), +}); + +/** 打开弹窗 */ +const open = async (row: object) => { + visible.value = true + resetForm() + dataForm.value.id = row.id; + dataForm.value.itemName = row.itemname; + if (row.id) { + getDataList(); + } +} + +defineExpose({open}) // 提供 open 方法,用于打开弹窗 + +async function getDataList() { + visible.value = true; + if (dataForm.value.id) { + try { + chartParams.itemId = dataForm.value.id; + chartParams.startTime = dataForm.value.startTime; + chartParams.endTime = dataForm.value.endTime; + const data = await McsApi.getPreDataItemChart(chartParams) + let legendData = [] + if (data.legend && data.legend.length > 0) { + data.legend.forEach(item => { + legendData.push(item + ":" + '真实值') + legendData.push(item + ":" + '预测值') + }) + } + + let seriesData = [] + if (data.lastTime) { + seriesData.push({ + name: '', + data: [null], + type: 'line', + smooth: true, + color: 'green', + markLine: { + silent: true, + lineStyle: { + color: '#32a487', + width: 2 + }, + data: [{ + xAxis: data.lastTime + }], + label: { + normal: { + formatter: data.lastTime + } + }, + symbol: ['circle', 'none'], + }, + }); + } + + if (data.viewMap) { + Object.keys(data.viewMap).forEach(key => { + let viewData = data.viewMap[key] + seriesData.push({ + name: key + ":" + '真实值', + type: "line", + data: viewData.realData, + showSymbol: false, + smooth: false, + lineStyle: { + normal: { + width: 1, + }, + }, + }) + seriesData.push({ + name: key + ":" + '预测值', + type: "line", + data: viewData.preDataN, + showSymbol: false, + smooth: false, + lineStyle: { + normal: { + width: 1, + }, + }, + }) + }) + } + + myChart = echarts.init(chartDomPre.value); + const option = { + title: { + text: dataForm.value.itemName, + top: 0, + left: "1%", + textStyle: { + fontSize: 14, + }, + }, + tooltip: { + trigger: "axis", + axisPointer: { + type: "line", + lineStyle: { + color: "#cccccc", + width: "1", + type: "dashed", + }, + }, + }, + legend: { + show: true, + top: 20, + data: legendData + }, + grid: { + top: "20%", + left: "3%", + right: "5%", + bottom: 10, + containLabel: true, + }, + xAxis: { + type: "category", + boundaryGap: false, + data: data.categories, + }, + yAxis: { + type: "value", + }, + dataZoom: [ + { + type: "inside", + }, + ], + series: seriesData, + }; + myChart.setOption(option); + } catch (error) { + console.error(error) + } + } +} + +/** 导出按钮操作 */ +const exportLoading = ref(false) +const handleExport = async () => { + chartParams.itemId = dataForm.value.id; + chartParams.startTime = dataForm.value.startTime; + chartParams.endTime = dataForm.value.endTime; + try { + // 导出的二次确认 + await message.exportConfirm() + // 发起导出 + exportLoading.value = true + /*const data = await DaPoint.exportDaPointValue(chartParams) + download.excel(data, dataForm.value.pointName + '.xls')*/ + } catch { + } finally { + exportLoading.value = false + } +} + +/** 重置表单 */ +const resetForm = () => { + dataForm.value = { + id: undefined, + itemName: undefined, + startTime: undefined, + endTime: undefined + } +} +</script> +<style> +.el-select { + width: 100%; +} + +.result-chart { + height: 500px; +} +</style> diff --git a/src/views/model/pre/item/MmPredictItemForm.vue b/src/views/model/pre/item/MmPredictItemForm.vue index 9e5fb9f..e10af7d 100644 --- a/src/views/model/pre/item/MmPredictItemForm.vue +++ b/src/views/model/pre/item/MmPredictItemForm.vue @@ -39,7 +39,7 @@ <el-form-item label="粒度" prop="mmPredictItem.granularity"> <el-select v-model="dataForm.mmPredictItem.granularity" placeholder="请选择"> <el-option - v-for="dict in getIntDictOptions(DICT_TYPE.TIME_GRANULARITY)" + v-for="dict in getIntDictOptions(DICT_TYPE.PRED_GRANULARITY)" :key="dict.value" :label="dict.label" :value="dict.value" @@ -99,21 +99,6 @@ controls-position="right"/> </el-form-item> </el-col> - <el-col :span="12"> - <el-form-item label="数据点" prop="mmItemOutput.pointid"> - <el-select - v-model="dataForm.mmItemOutput.pointid" - filterable - @change="changeOutputPoint" - placeholder="请选择"> - <el-option - v-for="item in pointList" - :key="item.id" - :label="item.pointName" - :value="item.id"/> - </el-select> - </el-form-item> - </el-col> </el-row> <el-row v-if="dataForm.itemtypename === 'MergeItem'"> <el-col :span="12"> @@ -143,6 +128,7 @@ :on-success="uploadModelSuccess" :on-error="uploadModelError" :action="uploadUrl" + :show-file-list="false" :http-request="httpRequest"> <el-button type="primary" @click="setReplaceModelOnly(false)"> <Icon icon="ep:upload"/> @@ -158,18 +144,7 @@ </el-col> </el-row> <el-row v-if="dataForm.itemtypename === 'NormalItem'"> - <el-col :span="8"> - <el-form-item label="结果"> - <el-select v-model="dataForm.mmPredictModel.resultstrid" placeholder="请选择"> - <el-option - v-for="item in resultstridList" - :key="item.id" - :label="item.resultstr" - :value="item.id"/> - </el-select> - </el-form-item> - </el-col> - <el-col :span="8"> + <el-col :span="12"> <el-form-item label="关联项目"> <el-select v-model="dataForm.mmPredictModel.mpkprojectid" placeholder="请选择"> <el-option @@ -180,7 +155,7 @@ </el-select> </el-form-item> </el-col> - <el-col :span="8"> + <el-col :span="12"> <el-form-item label="编号"> <el-input v-model="dataForm.mmPredictModel.modelno" placeholder="编号" maxlength="30" readonly @@ -222,14 +197,81 @@ </el-form-item> </el-col> </el-row> + <el-divider content-position="left" v-if="dataForm.itemtypename === 'NormalItem'">模型输出 + </el-divider> + <el-button + @click="addItemOutput(dataForm.mmItemOutputList)" + type="primary" + size="small"> + 添加 + </el-button> + <el-table + v-if="dataForm.itemtypename === 'NormalItem'" + :data="dataForm.mmItemOutputList" + border + style="width: 100%; margin-top: 5px;"> + <el-table-column prop="outputorder" label="排序" align="center" width="80px" /> + <el-table-column label="结果" align="center" width="150px"> + <template #default="scope"> + <el-input v-model="scope.row.resultstr" placeholder="请输入"/> + </template> + </el-table-column> + <el-table-column label="结果数据类型" align="center" width="150px"> + <template #default="scope"> + <el-select + v-model="scope.row.resultType" + @change="(value) => resultTypeChange(value,scope.row)" + filterable + placeholder="请选择"> + <el-option + v-for="dict in getIntDictOptions(DICT_TYPE.MODEL_RESULT_TYPE)" + :key="dict.value" + :label="dict.label" + :value="dict.value"/> + </el-select> + </template> + </el-table-column> + <el-table-column label="索引" align="center" width="120px"> + <template #default="scope"> + <el-input-number style="width:100%;hight:100%" :disabled="scope.row.resultType !== 2" v-model="scope.row.resultIndex" :min="0" step-strictly controls-position="right"/> + </template> + </el-table-column> + <el-table-column label="数据点" align="center"> + <template #default="scope"> + <el-select + v-model="scope.row.pointid" + filterable + @change="(value) => changeOutputPoint(value,scope.row)" + placeholder="请选择"> + <el-option + v-for="item in pointList" + :key="item.id" + :label="item.pointName" + :value="item.id"/> + </el-select> + </template> + </el-table-column> + <el-table-column prop="" label="操作" width="80" align="center"> + <template #default="scope"> + <el-button + @click="deleteItemOutput(scope.$index, dataForm.mmItemOutputList)" + type="text" + size="small"> + 删除 + </el-button> + </template> + </el-table-column> + </el-table> + <el-divider content-position="left" v-if="dataForm.itemtypename === 'NormalItem'">模型设置参数 + </el-divider> <el-table v-if="dataForm.itemtypename === 'NormalItem'" :data="dataForm.mmModelArithSettingsList" border style="width: 100%; margin-top: 5px;"> - <el-table-column prop="key" label="键" align="center"/> - <el-table-column prop="name" label="名称" align="center"/> - <el-table-column prop="valuetype" label="类型" align="center"/> + <el-table-column prop="key" label="键" align="center" min-width="150"/> + <el-table-column prop="name" label="名称" align="center" min-width="150"/> + <el-table-column prop="valuetype" label="类型" align="center" min-width="150"/> <el-table-column prop="" label="值" align="center" min-width="150"> <template #default="scope"> <el-input size="mini" v-model="scope.row.value" maxlength="256" @@ -237,7 +279,7 @@ </template> </el-table-column> </el-table> - <el-divider content-position="left" v-if="dataForm.itemtypename === 'NormalItem'">输入参数 + <el-divider content-position="left" v-if="dataForm.itemtypename === 'NormalItem'">模型输入参数 </el-divider> <el-table v-if="dataForm.itemtypename === 'NormalItem'" @@ -280,18 +322,18 @@ style="width:100%;hight:100%"/> </template> </el-table-column> - <el-table-column prop="" label="操作" width="140" align="center"> + <el-table-column prop="" label="操作" width="120" align="center"> <template #default="scope"> <el-button @click="addRow(scope.$index, dataForm.mmModelParamList)" type="text" - size="small"> + size="mini"> 添加 </el-button> <el-button @click="deleteRow(scope.$index, dataForm.mmModelParamList)" type="text" - size="small"> + size="mini"> 删除 </el-button> </template> @@ -316,8 +358,8 @@ <el-option v-for="(item, index) in predictItemList" :key="index" - :label="item.name" - :value="item.code"/> + :label="item.itemname" + :value="item.itemno"/> </el-select> </template> </el-table-column> @@ -330,7 +372,7 @@ label="运算符" align="center"> <template #default="scope"> - <el-select v-model="scope.row.operator" placeholder="请选择"> + <el-select v-model="scope.row.operator" placeholder="请选择" clearable> <el-option v-for="item in operatorList" :key="item" @@ -369,13 +411,12 @@ </template> <script lang="ts" setup> import {DICT_TYPE, getIntDictOptions, getStrDictOptions} from '@/utils/dict' -import * as MmPredictItem from '@/api/model/pre/predict' -import * as MmItemType from '@/api/model/pre/item' +import * as MmPredictItem from '@/api/model/pre/item' +import * as MmItemType from '@/api/model/pre/type' import * as DmModule from '@/api/model/pre/dm' -import * as MmResultTable from '@/api/model/pre/result' import * as ProjectApi from '@/api/model/mpk/project' import * as DaPoint from '@/api/data/da/point' -import {useUpload} from '@/api/model/pre/predict' +import {useUpload} from '@/api/model/pre/item' import * as ScheduleModelApi from '@/api/model/sche/model' const {uploadUrl, httpRequest} = useUpload() @@ -391,7 +432,6 @@ const itemTypeList = ref([]) const itemTypeMap = ref({}) const moduleList = ref([]) -const resultstridList = ref([]) const mpkProjectList = ref([]) const pointNoList = ref([]) const pointList = ref([]) @@ -435,14 +475,7 @@ status: undefined, categoryid: undefined }, - mmItemOutput: { - id: undefined, - itemid: undefined, - pointid: undefined, - resulttableid: undefined, - tagname: undefined, - outputorder: undefined - }, + mmItemOutputList: [], mmPredictModel: { id: undefined, modelno: undefined, @@ -489,7 +522,6 @@ 'mmPredictItem.status': [{required: true, message: '是否启用不能为空', trigger: 'blur'}], 'dmModuleItem.moduleid': [{required: true, message: '管网不能为空', trigger: 'blur'}], 'dmModuleItem.itemorder': [{required: true, message: '排序不能为空', trigger: 'blur'}], - 'mmItemOutput.pointid': [{required: true, message: '数据点不能为空', trigger: 'blur'}], }) const formRef = ref() // 表单 Ref @@ -503,15 +535,6 @@ resetForm() resetFields(dataForm.value) setDefaultFields() - // 修改时,设置数据 - if (id) { - formLoading.value = true - try { - getInfo(id) - } finally { - /*formLoading.value = false*/ - } - } // 加载参数列表 modelparamListMap.value = await ScheduleModelApi.getModelParamList() @@ -524,26 +547,37 @@ if (!dataForm.value.id) { dataForm.value.mmPredictItem.itemtypeid = itemTypeList.value[0].id } - dataForm.value.itemtypename = itemTypeMap[dataForm.value.mmPredictItem.itemtypeid] // 获取管网列表 moduleList.value = await DmModule.getModuleList() - // 获取结果字符串列表 - resultstridList.value = await MmResultTable.getResultstridList() - // 获取mpk项目列表 mpkProjectList.value = await ProjectApi.list() + + // 获取normal列表 + predictItemList.value = await MmPredictItem.getMmPredictItemList({ + itemtypename: 'NormalItem' + }) // 获取数据点列表 pointNoList.value = await DaPoint.getPointList(queryParams) if (pointNoList.value.length > 0) { + pointList.value = [] pointNoList.value.forEach(function (value) { pointList.value.push(value) - pointMap[value.id] = value.pointname + pointMap[value.id] = value.pointName }) } + // 修改时,设置数据 + if (id) { + formLoading.value = true + try { + getInfo(id) + } finally { + formLoading.value = false + } + } formLoading.value = false } defineExpose({open}) // 提供 open 方法,用于打开弹窗 @@ -555,6 +589,22 @@ if (!formRef) return const valid = await formRef.value.validate() if (!valid) return + + //校验模型输出 + if (dataForm.value.mmItemOutputList == undefined || dataForm.value.mmItemOutputList.length <= 0) { + message.error("模型输出不为空") + return + } + + let flag = false + dataForm.value.mmItemOutputList.forEach(e => { + if (e.resultstr == undefined || e.resultstr === '' || e.resultType == undefined || e.resultType === '' || e.pointid == undefined || e.pointid === '' || (e.resultType === 2 && (e.resultIndex == undefined || e.resultIndex === ''))) { + message.error("模型输出数据异常") + flag = true + } + }) + if (flag) return + // 提交请求 formLoading.value = true try { @@ -608,6 +658,7 @@ const getInfo = async (id) => { dataForm.value = await MmPredictItem.getMmPredictItem(id) + dataForm.value.itemtypename = itemTypeMap[dataForm.value.mmPredictItem.itemtypeid] expressionList.value = [] if (dataForm.value.mmPredictMergeItem && dataForm.value.mmPredictMergeItem.expression) { let expression = dataForm.value.mmPredictMergeItem.expression @@ -714,8 +765,8 @@ row.modelparamid = '' } -function changeOutputPoint(value) { - dataForm.value.mmItemOutput.tagname = pointMap[value] +function changeOutputPoint(value,row) { + row.tagname = pointMap[value] } function deleteExpressionRow(index, rows) { @@ -740,6 +791,34 @@ let row = JSON.parse(JSON.stringify(rows[index])) rows.splice(index, 0, row) orderRow(rows) +} +function addItemOutput(list) { + list.push({}) + orderItemOutput(list) +} +function deleteItemOutput(index: string, rows) { + if (!rows || rows.length === 1) { + message.error('不能全部删除!') + return + } + rows.splice(index, 1) + orderItemOutput(rows) +} +function orderItemOutput(list) { + list.sort((a, b) => a.outputorder - b.outputorder); + let outputorder = 1 + list.forEach(function (value) { + value.outputorder = outputorder + outputorder++ + }) +} + +function resultTypeChange(value, row) { + if (value === 1) { + row.resultIndex = undefined + }else if (value === 2) { + row.resultIndex = 0 + } } function orderRow(rows) { @@ -766,8 +845,7 @@ dataForm.value.mmPredictModel.trainsamplength = 60 dataForm.value.mmPredictModel.isonlinetrain = 0 dataForm.value.mmPredictModel.status = 1 - dataForm.value.mmItemOutput.outputorder = 1 - dataForm.value.mmItemOutput.resulttableid = '3cc2b483-3a01-40f7-a419-0c260210d8eb' + dataForm.value.mmItemOutputList = [] expressionList.value = [{ point: '', operator: '' @@ -805,14 +883,7 @@ status: 1, categoryid: '' }, - mmItemOutput: { - id: '', - itemid: '', - pointid: '', - resulttableid: '3cc2b483-3a01-40f7-a419-0c260210d8eb', - tagname: '', - outputorder: 1 - }, + mmItemOutputList: [], mmPredictModel: { id: '', modelno: '', diff --git a/src/views/model/pre/item/index.vue b/src/views/model/pre/item/index.vue index e0e8861..f1b2bba 100644 --- a/src/views/model/pre/item/index.vue +++ b/src/views/model/pre/item/index.vue @@ -51,9 +51,9 @@ <!-- 列表 --> <ContentWrap> <el-table v-loading="loading" :data="list"> - <el-table-column label="编号" align="center" prop="itemno"/> + <el-table-column label="编号" align="center" min-width="150" prop="itemno"/> <el-table-column label="预测项名" header-align="center" align="left" min-width="200" prop="itemname"/> - <el-table-column label="类型名称" align="center" prop="itemtypename"> + <el-table-column label="类型名称" align="center" min-width="120" prop="itemtypename"> <template #default="scope"> <el-tag v-if="scope.row.itemtypename === 'NormalItem'" size="small" type="success">{{scope.row.itemtypename}}</el-tag> <el-tag v-else size="small" type="primary">{{scope.row.itemtypename}}</el-tag> @@ -62,7 +62,7 @@ <el-table-column label="预测长度" align="center" prop="predictlength"/> <el-table-column label="粒度" align="center" prop="granularity"> <template #default="scope"> - <dict-tag :type="DICT_TYPE.TIME_GRANULARITY" :value="scope.row.granularity" /> + <dict-tag :type="DICT_TYPE.PRED_GRANULARITY" :value="scope.row.granularity" /> </template> </el-table-column> <el-table-column label="是否融合" align="center" prop="isfuse"> @@ -80,21 +80,29 @@ <dict-tag :type="DICT_TYPE.COM_IS_INT" :value="scope.row.status" /> </template> </el-table-column> - <el-table-column label="数据点名称" align="center" prop="tagname"/> - <el-table-column label="存放表" align="center" prop="tablename"/> - <el-table-column label="操作" align="center" min-width="110" fixed="right"> + <el-table-column label="运行时间" min-width="150" align="center" prop="lastTime"/> + <el-table-column label="运行状态" align="center" prop="runStatus"> + <template #default="scope"> + <dict-tag :type="DICT_TYPE.ITEM_RUN_STATUS" :value="scope.row.runStatus" /> + </template> + </el-table-column> + <el-table-column label="运行耗时(s)" align="center" prop="duration"/> + <el-table-column label="操作" align="center" min-width="120" fixed="right"> <template #default="scope"> <el-button link type="primary" + size="mini" @click="openForm('update', scope.row.id, scope.row.itemtypename)" v-hasPermi="['model:pre-item:update']" > 编辑 </el-button> + <el-button link size="mini" type="primary" @click="chartHandle(scope.row)">数据</el-button> <el-button link type="danger" + size="mini" @click="handleDelete(scope.row.id)" v-hasPermi="['model:pre-item:delete']" > @@ -115,10 +123,14 @@ <!-- 表单弹窗:添加/修改 --> <MmPredictItemForm ref="formRef" @success="getList"/> + <!-- 表单弹窗:数据 --> + <MmPredictItemChart ref="chartView" @success="getList"/> + </template> <script lang="ts" setup> import MmPredictItemForm from './MmPredictItemForm.vue' -import * as MmPredictItem from '@/api/model/pre/predict' +import MmPredictItemChart from './MmPredictItemChart.vue' +import * as MmPredictItem from '@/api/model/pre/item' import {DICT_TYPE} from "@/utils/dict"; defineOptions({name: 'DataMmPredictItem'}) @@ -171,6 +183,12 @@ handleQuery() } +/** 查看数据操作 */ +const chartView = ref() +const chartHandle = (raw: object) => { + chartView.value.open(raw) +} + /** 添加/修改操作 */ const formRef = ref() const openForm = (type: string, id?: number, itemtypename?: string) => { diff --git a/src/views/model/pre/result/MmResultTableForm.vue b/src/views/model/pre/result/MmResultTableForm.vue deleted file mode 100644 index bcb0afa..0000000 --- a/src/views/model/pre/result/MmResultTableForm.vue +++ /dev/null @@ -1,96 +0,0 @@ -<template> - <Dialog v-model="dialogVisible" :title="dialogTitle" width="50%"> - <el-form - ref="formRef" - v-loading="formLoading" - :model="formData" - :rules="formRules" - label-width="120px" - > - <el-row> - <el-col :span="12"> - <el-form-item label="表名" prop="tablename"> - <el-input v-model="formData.tablename" placeholder="请输入表名"/> - </el-form-item> - </el-col> - </el-row> - </el-form> - <template #footer> - <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button> - <el-button @click="dialogVisible = false">取 消</el-button> - </template> - </Dialog> -</template> -<script lang="ts" setup> -import * as MmResultTable from '@/api/model/pre/result' - -defineOptions({name: 'DataMmResultTableForm'}) - -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, - tablename: undefined, -}) -const formRules = reactive({ - tablename: [{required: true, message: '表名不能为空', trigger: 'blur'}], -}) -const formRef = ref() // 表单 Ref - -/** 打开弹窗 */ -const open = async (type: string, id?: number) => { - dialogVisible.value = true - dialogTitle.value = t('action.' + type) - formType.value = type - resetForm() - // 修改时,设置数据 - if (id) { - formLoading.value = true - try { - formData.value = await MmResultTable.getMmResultTable(id) - } finally { - formLoading.value = false - } - } -} -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 as unknown as MmResultTable.MmResultTableVO - if (formType.value === 'create') { - await MmResultTable.createMmResultTable(data) - message.success(t('common.createSuccess')) - } else { - await MmResultTable.updateMmResultTable(data) - message.success(t('common.updateSuccess')) - } - dialogVisible.value = false - // 发送操作成功的事件 - emit('success') - } finally { - formLoading.value = false - } -} - -/** 重置表单 */ -const resetForm = () => { - formData.value = { - id: undefined, - tablename: undefined, - } - formRef.value?.resetFields() -} -</script> diff --git a/src/views/model/pre/result/index.vue b/src/views/model/pre/result/index.vue deleted file mode 100644 index 271e8d6..0000000 --- a/src/views/model/pre/result/index.vue +++ /dev/null @@ -1,149 +0,0 @@ -<template> - <!-- 搜索 --> - <ContentWrap> - <el-form - class="-mb-15px" - :model="queryParams" - ref="queryFormRef" - :inline="true" - label-width="68px" - > - <el-form-item label="表名" prop="tablename"> - <el-input - v-model="queryParams.tablename" - placeholder="请输入表名" - clearable - @keyup.enter="handleQuery" - class="!w-240px" - /> - </el-form-item> - <el-form-item> - <el-button @click="handleQuery"> - <Icon icon="ep:search" class="mr-5px" /> - 搜索 - </el-button> - <el-button @click="resetQuery"> - <Icon icon="ep:refresh" class="mr-5px" /> - 重置 - </el-button> - <el-button - type="primary" - plain - @click="openForm('create')" - v-hasPermi="['model:pre-result:create']" - > - <Icon icon="ep:plus" class="mr-5px" /> - 新增 - </el-button> - </el-form-item> - </el-form> - </ContentWrap> - - <!-- 列表 --> - <ContentWrap> - <el-table v-loading="loading" :data="list"> - <el-table-column label="表名" align="center" prop="tablename" /> - - <el-table-column label="操作" align="center" min-width="110" fixed="right"> - <template #default="scope"> - <el-button - link - type="primary" - @click="openForm('update', scope.row.id)" - v-hasPermi="['model:pre-result:update']" - > - 编辑 - </el-button> - <el-button - link - type="danger" - @click="handleDelete(scope.row.id)" - v-hasPermi="['model:pre-result:delete']" - > - 删除 - </el-button> - </template> - </el-table-column> - </el-table> - <!-- 分页 --> - <Pagination - :total="total" - v-model:page="queryParams.pageNo" - v-model:limit="queryParams.pageSize" - @pagination="getList" - /> - </ContentWrap> - - <!-- 表单弹窗:添加/修改 --> - <MmResultTableForm ref="formRef" @success="getList" /> - -</template> -<script lang="ts" setup> -import MmResultTableForm from './MmResultTableForm.vue' -import * as MmResultTable from '@/api/model/pre/result' - -defineOptions({name: 'DataMmResultTable'}) - - const message = useMessage() // 消息弹窗 - const {t} = useI18n() // 国际化 - - const loading = ref(true) // 列表的加载中 - const total = ref(0) // 列表的总页数 - const list = ref([]) // 列表的数据 - const queryParams = reactive({ - pageNo: 1, - pageSize: 10, - tablename: undefined, - }) - const queryFormRef = ref() // 搜索的表单 - const exportLoading = ref(false) // 导出的加载中 - - /** 查询列表 */ - const getList = async () => { - loading.value = true - try { - const page = await MmResultTable.getMmResultTablePage(queryParams) - list.value = page.list - total.value = page.total - } finally { - loading.value = false - } - } - - /** 搜索按钮操作 */ - const handleQuery = () => { - queryParams.pageNo = 1 - getList() - } - - /** 重置按钮操作 */ - const resetQuery = () => { - queryFormRef.value.resetFields() - handleQuery() - } - - /** 添加/修改操作 */ - const formRef = ref() - const openForm = (type: string, id?: number) => { - formRef.value.open(type, id) - } - - /** 删除按钮操作 */ - const handleDelete = async (id: number) => { - try { - // 删除的二次确认 - await message.delConfirm() - // 发起删除 - await MmResultTable.deleteMmResultTable(id) - message.success(t('common.delSuccess')) - // 刷新列表 - await getList() - } catch { - } - } - - /** 初始化 **/ - onMounted(async () => { - await getList() - }) -</script> diff --git a/src/views/model/pre/type/ItemTypeForm.vue b/src/views/model/pre/type/ItemTypeForm.vue index 5131d27..eb457f4 100644 --- a/src/views/model/pre/type/ItemTypeForm.vue +++ b/src/views/model/pre/type/ItemTypeForm.vue @@ -36,7 +36,7 @@ </Dialog> </template> <script lang="ts" setup> -import * as MmItemType from '@/api/model/pre/item' +import * as MmItemType from '@/api/model/pre/type' defineOptions({name: 'DataMmItemTypeForm'}) diff --git a/src/views/model/pre/type/index.vue b/src/views/model/pre/type/index.vue index 39d8216..601d7c1 100644 --- a/src/views/model/pre/type/index.vue +++ b/src/views/model/pre/type/index.vue @@ -82,7 +82,7 @@ </template> <script lang="ts" setup> import MmItemTypeForm from './ItemTypeForm.vue' -import * as MmItemType from '@/api/model/pre/item' +import * as MmItemType from '@/api/model/pre/type' defineOptions({name: 'DataMmItemType'}) -- Gitblit v1.9.3