From d3ee81e33f92f23ee579f3d72c26e011523e166b Mon Sep 17 00:00:00 2001 From: 潘志宝 <979469083@qq.com> Date: 星期四, 26 九月 2024 14:36:34 +0800 Subject: [PATCH] sche 测点配置 --- src/views/model/pre/item/MmPredictItemForm.vue | 270 ++++++++++++----------------- src/views/model/pre/item/index.vue | 42 +++- src/views/model/mcs/sche/model/ScheduleModelForm.vue | 30 +- src/utils/dict.ts | 7 src/api/model/sche/model/index.ts | 44 ++++ src/views/data/ind/item/DerIndDefineForm.vue | 44 ++-- src/views/data/ind/item/index.vue | 2 src/views/model/mcs/sche/model/index.vue | 4 src/api/model/pre/predict/index.ts | 47 ++++ src/views/data/ind/item/AtomIndDefineForm.vue | 43 ++-- 10 files changed, 286 insertions(+), 247 deletions(-) diff --git a/src/api/model/pre/predict/index.ts b/src/api/model/pre/predict/index.ts index 26d2bb2..677b35a 100644 --- a/src/api/model/pre/predict/index.ts +++ b/src/api/model/pre/predict/index.ts @@ -1,4 +1,5 @@ import request from '@/config/axios' +import {UploadRequestOptions} from "element-plus/es/components/upload/src/upload"; export interface MmPredictItemVO { id: string, @@ -72,30 +73,60 @@ // 查询MmPredictItem列表 export const getMmPredictItemPage = (params: MmPredictItemPageReqVO) => { - return request.get({ url: '/model/pre/predict-item/page', params }) + return request.get({ url: '/model/pre/item/page', params }) } // 查询MmPredictItem详情 export const getMmPredictItem = (id: number) => { - return request.get({ url: `/model/pre/predict-item/get/${id}`}) + return request.get({ url: `/model/pre/item/get/${id}`}) } // 新增MmPredictItem export const createMmPredictItem = (data: MmPredictItemVO) => { - return request.post({ url: '/model/pre/predict-item/create', data }) + return request.post({ url: '/model/pre/item/create', data }) } // 修改MmPredictItem export const updateMmPredictItem = (data: MmPredictItemVO) => { - return request.put({ url: '/model/pre/predict-item/update', data }) + return request.put({ url: '/model/pre/item/update', data }) } // 删除MmPredictItem export const deleteMmPredictItem = (id: number) => { - return request.delete({ url: '/model/pre/predict-item/delete?id=' + id }) + return request.delete({ url: '/model/pre/item/delete?id=' + id }) } -// 查询getMmPredictItemList详情 -export const getMmPredictItemList = () => { - return request.get({ url: `/model/pre/predict-item/list`}) +// 查询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 + } } diff --git a/src/api/model/sche/model/index.ts b/src/api/model/sche/model/index.ts index 6fd6866..ebc1603 100644 --- a/src/api/model/sche/model/index.ts +++ b/src/api/model/sche/model/index.ts @@ -1,4 +1,7 @@ import request from '@/config/axios' +import * as DataPointApi from '@/api/data/da/point' +import * as PredictItemApi from '@/api/model/pre/predict' +import {CommonEnabled} from "@/utils/constants"; export interface ScheduleModelVO { id: string @@ -65,11 +68,40 @@ } // 查询模型参数列表 -export const getModelParamList = (modelparamListMap) => { - modelparamListMap['point'] = [] -} +export const getModelParamList = async () => { -// 查询getScheduleWorkPrecessList列表 -export const getScheduleWorkPrecessList = (data: WorkPrecessParamVO) => { - return request.get({ url: '/model/sche/model/work-process/list/all'},data) + const dataPointList = ref([] as DataPointApi.DaPointVO) + dataPointList.value = await DataPointApi.getPointList({}) + const pointList = [] + if (dataPointList.value) { + dataPointList.value.forEach(item => { + pointList.push( + { + id: item.pointNo, + name: item.pointName + } + ) + }) + } + + const predictItemList = ref([] as PredictItemApi.MmPredictItemVO) + predictItemList.value = await PredictItemApi.getMmPredictItemList({ + status: CommonEnabled.ENABLE, + itemtypename: 'NormalItem' + }) + const itemList = [] + if (predictItemList.value) { + predictItemList.value.forEach(item => { + itemList.push( + { + id: item.id, + name: item.itemname + } + ) + }) + } + return { + 'DATAPOINT':pointList, + 'PREDICTITEM': itemList + } } diff --git a/src/utils/dict.ts b/src/utils/dict.ts index b1e134b..7189286 100644 --- a/src/utils/dict.ts +++ b/src/utils/dict.ts @@ -249,7 +249,8 @@ OPCUA_CONNECTION_TYPE = 'opcua_connection_type', HTTP_METHOD = 'http_method', TIME_GRANULARITY = 'time_granularity', - STAT_FUNC = 'stat_func', - TIME_LIMIT = 'time_limit', - ITEM_TYPE = 'item_type', + DATA_STAT_FUNC = 'data_stat_func', + IND_TIME_LIMIT = 'ind_time_limit', + IND_ITEM_TYPE = 'ind_item_type', + COM_IS_INT = 'com_is_int' } diff --git a/src/views/data/ind/item/AtomIndDefineForm.vue b/src/views/data/ind/item/AtomIndDefineForm.vue index f9eaa74..2d25139 100644 --- a/src/views/data/ind/item/AtomIndDefineForm.vue +++ b/src/views/data/ind/item/AtomIndDefineForm.vue @@ -44,31 +44,24 @@ </el-col> </el-row> <el-row> - <el-col :span="8"> + <el-col :span="6"> <el-form-item label="指标精度" prop="precision"> <el-input v-model="formData.precision"/> </el-form-item> </el-col> - <el-col :span="8"> + <el-col :span="6"> <el-form-item label="转换系数" prop="coefficient"> <el-input v-model="formData.coefficient"/> </el-form-item> </el-col> - <el-col :span="8"> + <el-col :span="6"> <el-form-item label="数量单位" prop="unit"> <el-input v-model="formData.unit"/> </el-form-item> </el-col> </el-row> <el-row> - <el-col :span="24"> - <el-form-item label="备注" prop="remark"> - <el-input v-model="formData.remark" type="textarea" maxlength="100"/> - </el-form-item> - </el-col> - </el-row> - <el-row> - <el-col :span="12"> + <el-col :span="6"> <el-form-item label="数据集" prop="atomItem.dataSet"> <el-select v-model="formData.atomItem.dataSet" clearable placeholder="请选择数据集" @change="handleDataSetChange($event)"> <el-option @@ -80,7 +73,7 @@ </el-select> </el-form-item> </el-col> - <el-col :span="12"> + <el-col :span="6"> <el-form-item label="使用字段" prop="atomItem.usingField"> <el-select v-model="formData.atomItem.usingField" clearable placeholder="请选择字段"> <el-option @@ -92,16 +85,23 @@ </el-select> </el-form-item> </el-col> - <el-col :span="12"> + <el-col :span="6"> <el-form-item label="统计方式" prop="statFunc"> <el-select v-model="formData.atomItem.statFunc" placeholder="请选择"> <el-option - v-for="dict in getStrDictOptions(DICT_TYPE.STAT_FUNC)" + v-for="dict in getStrDictOptions(DICT_TYPE.DATA_STAT_FUNC)" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="备注" prop="remark"> + <el-input v-model="formData.remark" type="textarea" maxlength="100"/> </el-form-item> </el-col> </el-row> @@ -135,8 +135,8 @@ itemName: '', itemType: '', itemCategory: '', - coefficient: '', - precision: '', + coefficient: 1, + precision: 0, businessType: '', timeRange: '', timeGranularity: '', @@ -157,10 +157,12 @@ const formRules = reactive({ itemName: [{required: true, message: '指标名称不能为空', trigger: 'blur'}], itemCategory: [{required: true, message: '指标分类不能为空', trigger: 'blur'}], - precision: [{validator: validateAsNumber, trigger: 'blur' }], + /*precision: [{validator: validateAsNumber, trigger: 'blur' }], coefficient: [{validator: validateAsNumber, trigger: 'blur' }], + statFunc: [{required: true, message: '统计方式不能为空', trigger: 'blur'}], + timeGranularity: [{required: true, message: '时间粒度不能为空', trigger: 'blur'}], "atomItem.dataSet": [{required: true, message: '数据集不能为空', trigger: 'blur'}], - "atomItem.usingField":[{required: true, message: '使用字段不能为空', trigger: 'blur'}] + "atomItem.usingField":[{required: true, message: '使用字段不能为空', trigger: 'blur'}]*/ }) const formRef = ref() // 表单 Ref const dataSetList = ref([] as DataSetApi.DataSetVO[]) @@ -197,6 +199,7 @@ /** 提交表单 */ const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 const submitForm = async () => { + debugger // 校验表单 if (!formRef) return const valid = await formRef.value.validate() @@ -234,8 +237,8 @@ itemName: '', itemType: '', itemCategory: '', - coefficient: '', - precision: '', + coefficient: 1, + precision: 0, businessType: '', timeRange: '', timeGranularity: '', diff --git a/src/views/data/ind/item/DerIndDefineForm.vue b/src/views/data/ind/item/DerIndDefineForm.vue index 2d7d1d9..f16a4ea 100644 --- a/src/views/data/ind/item/DerIndDefineForm.vue +++ b/src/views/data/ind/item/DerIndDefineForm.vue @@ -64,12 +64,12 @@ </el-col> </el-row> <el-row> - <el-col :span="8"> + <el-col :span="6"> <el-form-item label="指标精度" prop="precision"> <el-input v-model="formData.precision"/> </el-form-item> </el-col> - <el-col :span="8"> + <el-col :span="6"> <el-form-item label="转换系数" prop="coefficient"> <el-input v-model="formData.coefficient"/> </el-form-item> @@ -81,14 +81,7 @@ </el-col> </el-row> <el-row> - <el-col :span="20"> - <el-form-item label="备注" prop="remark"> - <el-input v-model="formData.remark" type="textarea" maxlength="100"/> - </el-form-item> - </el-col> - </el-row> - <el-row> - <el-col :span="12"> + <el-col :span="6"> <el-form-item label="时间标识" prop="timeLabel"> <el-select v-model="formData.derItem.timeLabel" clearable placeholder="请选择时间标识"> <el-option @@ -100,12 +93,12 @@ </el-select> </el-form-item> </el-col> - <el-col :span="12"> + <el-col :span="6"> <el-form-item label="时间限定" prop="timeLimit"> <el-select v-model="formData.timeLimit" placeholder="请选择" @change="handleTimeLimitChange($event)"> <el-option - v-for="dict in getStrDictOptions(DICT_TYPE.TIME_LIMIT)" + v-for="dict in getStrDictOptions(DICT_TYPE.IND_TIME_LIMIT)" :key="dict.value" :label="dict.label" :value="dict.value" @@ -115,7 +108,7 @@ </el-col> </el-row> <el-row v-if="showTimeChange"> - <el-col :span="12"> + <el-col :span="6"> <el-form-item label="开始时间" prop="timeStart"> <el-date-picker v-model="formData.derItem.timeStart" @@ -124,7 +117,7 @@ /> </el-form-item> </el-col> - <el-col :span="8"> + <el-col :span="6"> <el-form-item label="结束时间" prop="timeEnd"> <el-date-picker v-model="formData.derItem.timeEnd" @@ -135,7 +128,7 @@ </el-col> </el-row> <el-row> - <el-col :span="12"> + <el-col :span="24"> <el-form-item label="分析维度" prop="dimension"> <el-select v-model="formData.derItem.dimension" clearable placeholder="请选择分析维度" multiple> <el-option @@ -145,6 +138,13 @@ :value="item.id + ''" /> </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="备注" prop="remark"> + <el-input v-model="formData.remark" type="textarea" maxlength="100"/> </el-form-item> </el-col> </el-row> @@ -180,8 +180,8 @@ itemName: '', itemType: '', itemCategory: '', - coefficient: '', - precision: '', + coefficient: 1, + precision: 0, businessType: '', timeRange: '', timeGranularity: '', @@ -213,9 +213,9 @@ const formRules = reactive({ itemName: [{required: true, message: '指标名称不能为空', trigger: 'blur'}], itemCategory: [{required: true, message: '指标类型不能为空', trigger: 'blur'}], - precision: [{validator: validateAsNumber, trigger: 'blur' }], - coefficient: [{validator: validateAsNumber, trigger: 'blur' }], - "atomItem.id": [{required: true, message: '原子指标不能为空', trigger: 'blur'}] + /*precision: [{validator: validateAsNumber, trigger: 'blur' }], + coefficient: [{validator: validateAsNumber, trigger: 'blur' }],*/ + /*"atomItem.id": [{required: true, message: '原子指标不能为空', trigger: 'blur'}]*/ }) const formRef = ref() // 表单 Ref const dataSourceList = ref([] as DataSourceConfigApi.DataSourceConfigVO[]) @@ -289,8 +289,8 @@ itemName: '', itemType: '', itemCategory: '', - coefficient: '', - precision: '', + coefficient: 1, + precision: 0, businessType: '', timeRange: '', timeGranularity: '', diff --git a/src/views/data/ind/item/index.vue b/src/views/data/ind/item/index.vue index 281115e..506ebc6 100644 --- a/src/views/data/ind/item/index.vue +++ b/src/views/data/ind/item/index.vue @@ -41,7 +41,7 @@ <el-table-column prop="itemCategoryName" label="指标分类" header-align="center" align="center" min-width="100"/> <el-table-column prop="itemType" label="指标类型" header-align="center" align="center" min-width="60"> <template #default="scope"> - <dict-tag :type="DICT_TYPE.ITEM_TYPE" :value="scope.row.itemType" /> + <dict-tag :type="DICT_TYPE.IND_ITEM_TYPE" :value="scope.row.itemType" /> </template> </el-table-column> <el-table-column prop="coefficient" label="系数" header-align="center" align="center" min-width="60"/> diff --git a/src/views/model/mcs/sche/model/ScheduleModelForm.vue b/src/views/model/mcs/sche/model/ScheduleModelForm.vue index 19518d5..84b1f3d 100644 --- a/src/views/model/mcs/sche/model/ScheduleModelForm.vue +++ b/src/views/model/mcs/sche/model/ScheduleModelForm.vue @@ -130,22 +130,21 @@ filterable placeholder="请选择"> <el-option - v-for="(item, index) in modelparamListMap['k']" + v-for="(item, index) in modelparamListMap[scope.row.modelparamtype]" :key="index" :label="item.name" - :value="item.id" - :disabled="!(item.type === scope.row.modelparamtype)"/> + :value="item.id"/> </el-select> </template> </el-table-column> <el-table-column prop="" label="参数长度" - width="120" + width="160" align="center"> <template #default="scope"> - <el-input size="mini" v-model="scope.row.datalength" maxlength="50" clearable - style="width:100%;hight:100%"/> + <el-input-number v-model="scope.row.datalength" :min="0" clearable controls-position="right" + style="width:100%;hight:100%"/> </template> </el-table-column> <el-table-column @@ -182,7 +181,7 @@ label="键" align="center"> <template #default="scope"> - <el-input size="mini" v-model="scope.row.key" maxlength="256" clearable + <el-input size="mini" v-model="scope.row.key" maxlength="20" clearable style="width:100%;hight:100%"/> </template> </el-table-column> @@ -191,7 +190,7 @@ label="名称" align="center"> <template #default="scope"> - <el-input size="mini" v-model="scope.row.name" maxlength="256" clearable + <el-input size="mini" v-model="scope.row.name" maxlength="20" clearable style="width:100%;hight:100%"/> </template> </el-table-column> @@ -200,8 +199,14 @@ label="类型" align="center"> <template #default="scope"> - <el-input size="mini" v-model="scope.row.valuetype" maxlength="256" clearable - style="width:100%;hight:100%"/> + <el-select v-model="scope.row.valuetype" placeholder="请选择"> + <el-option + v-for="dict in getStrDictOptions(DICT_TYPE.MODEL_METHOD_SETTING_VALUE_TYPE)" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> </template> </el-table-column> <el-table-column @@ -333,10 +338,9 @@ } finally { formLoading.value = false } - - // 加载数据源列表 - await ScheduleModelApi.getModelParamList(modelparamListMap) } + // 加载参数列表 + modelparamListMap.value = await ScheduleModelApi.getModelParamList() } defineExpose({ open }) // 提供 open 方法,用于打开弹窗 diff --git a/src/views/model/mcs/sche/model/index.vue b/src/views/model/mcs/sche/model/index.vue index 8d888a6..87b3cd1 100644 --- a/src/views/model/mcs/sche/model/index.vue +++ b/src/views/model/mcs/sche/model/index.vue @@ -54,10 +54,10 @@ <el-table-column label="模型编号" align="center" prop="modelCode" min-width="100"/> <el-table-column label="模型名称" align="center" prop="modelName" min-width="100"/> <el-table-column label="模型类型" align="center" prop="modelType" min-width="100"/> - <el-table-column label="类名" align="center" prop="className" min-width="200"/> + <el-table-column label="类名" header-align="center" align="left" prop="className" min-width="200"/> <el-table-column label="方法名" align="center" prop="methodName" min-width="100"/> <el-table-column label="参数数量" align="center" prop="portLength" min-width="100"/> - <el-table-column label="参数构造" align="center" prop="paramStructure" min-width="200" /> + <el-table-column label="参数构造" header-align="center" align="left" prop="paramStructure" min-width="200" /> <el-table-column label="调用方式" align="center" prop="invocation" min-width="100"> <template #default="scope"> <dict-tag :type="DICT_TYPE.SCHE_MODEL_INVOCATION" :value="scope.row.invocation" /> diff --git a/src/views/model/pre/item/MmPredictItemForm.vue b/src/views/model/pre/item/MmPredictItemForm.vue index b3806b7..bd2b6d3 100644 --- a/src/views/model/pre/item/MmPredictItemForm.vue +++ b/src/views/model/pre/item/MmPredictItemForm.vue @@ -10,19 +10,20 @@ <el-divider content-position="left">基本信息</el-divider> <el-row> <el-col :span="12"> - <el-form-item label="预测项名"> - <el-input v-model="dataForm.mmPredictItem.itemname" placeholder="预测项名"/> + <el-form-item label="预测项名" prop="mmPredictItem.itemname"> + <el-input v-model="dataForm.mmPredictItem.itemname" placeholder="预测项名" + maxlength="50"/> </el-form-item> </el-col> - <el-col :span="12"> - <el-form-item label="编号"> + <el-col :span="12" v-if="!!dataForm.id"> + <el-form-item label="编号" prop="mmPredictItem.itemno"> <el-input v-model="dataForm.mmPredictItem.itemno" placeholder="编号" maxlength="50"/> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="12"> - <el-form-item label="类型"> + <el-form-item label="类型" prop="mmPredictItem.itemtypeid"> <el-select v-model="dataForm.mmPredictItem.itemtypeid" @change="changeItemtype" placeholder="请选择"> @@ -35,40 +36,47 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="粒度"> - <el-input - v-model="dataForm.mmPredictItem.granularity" placeholder="粒度" - maxlength="5"/> + <el-form-item label="粒度" prop="dataForm.mmPredictItem.granularity"> + <el-select v-model="dataForm.mmPredictItem.granularity" placeholder="请选择"> + <el-option + v-for="dict in getStrDictOptions(DICT_TYPE.TIME_GRANULARITY)" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="12"> - <el-form-item label="是否检查"> + <el-form-item label="是否检查" prop="dataForm.mmPredictItem.workchecked"> <el-select v-model="dataForm.mmPredictItem.workchecked" placeholder="请选择"> <el-option - v-for="item in isList" - :key="item.code" - :label="item.name" - :value="item.code"/> + v-for="dict in getIntDictOptions(DICT_TYPE.COM_IS_INT)" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> </el-select> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="是否启用"> - <el-select v-model="dataForm.dmModuleItem.status" placeholder="请选择"> + <el-form-item label="是否启用" prop="dataForm.mmPredictItem.status"> + <el-select v-model="dataForm.mmPredictItem.status" placeholder="请选择"> <el-option - v-for="item in isList" - :key="item.code" - :label="item.name" - :value="item.code"/> + v-for="dict in getIntDictOptions(DICT_TYPE.COM_IS_INT)" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> </el-select> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="12"> - <el-form-item label="管网"> + <el-form-item label="管网" prop="dataForm.dmModuleItem.moduleid"> <el-select v-model="dataForm.dmModuleItem.moduleid" placeholder="请选择"> <el-option v-for="item in moduleList" @@ -86,12 +94,13 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="排序"> - <el-input v-model="dataForm.dmModuleItem.itemorder" placeholder="排序" maxlength="36"/> + <el-form-item label="排序" prop="dataForm.dmModuleItem.itemorder"> + <el-input-number v-model="dataForm.dmModuleItem.itemorder" :min="1" clearable + controls-position="right"/> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="数据点"> + <el-form-item label="数据点" prop="dataForm.mmItemOutput.pointid"> <el-select v-model="dataForm.mmItemOutput.pointid" filterable @@ -100,25 +109,12 @@ <el-option v-for="item in pointList" :key="item.id" - :label="item.pointname" + :label="item.pointName" :value="item.id"/> </el-select> </el-form-item> </el-col> </el-row> - <!-- <el-row> - <el-col :span="12"> - <el-form-item label="保存点位"> - <el-select v-model="dataForm.mmPredictItem.saveindex" placeholder="请选择"> - <el-option - v-for="item in saveIndexList" - :key="item.code" - :label="item.name" - :value="item.code"/> - </el-select> - </el-form-item> - </el-col> - </el-row>--> <el-row v-if="dataForm.itemtypename === 'MergeItem'"> <el-col :span="12"> <el-form-item label="预测长度"> @@ -130,8 +126,8 @@ </el-row> <el-divider content-position="left" v-if="dataForm.itemtypename === 'NormalItem'">模型信息 </el-divider> - <el-row v-if="dataForm.itemtypename === 'NormalItem'"> - <el-col :span="24"> + <el-row :gutter="8" v-if="dataForm.itemtypename === 'NormalItem'"> + <el-col :span="12"> <el-form-item label="模型名称"> <el-input v-model="dataForm.mmPredictModel.modelname" placeholder="模型名称" @@ -139,33 +135,29 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="编号" v-if="!!dataForm.id"> - <el-input - v-model="dataForm.mmPredictModel.modelno" placeholder="编号" maxlength="32" - disabled/> - </el-form-item> + <el-upload + class="upload-demo" + :limit="1" + :file-list="fileList" + :before-upload="beforeUpload" + :on-success="uploadModelSuccess" + :on-error="uploadModelError" + :action="uploadUrl" + :http-request="httpRequest"> + <el-button type="primary" @click="setReplaceModelOnly(false)"> + <Icon icon="ep:upload"/> + 上传模型 + </el-button> + <el-button + size="small" type="primary" @click="setReplaceModelOnly(true)" + v-if="!!dataForm.id"> + <Icon icon="ep:upload"/> + 更新模型 + </el-button> + </el-upload> </el-col> </el-row> - <el-row v-if="dataForm.itemtypename === 'NormalItem'"> - <el-col :span="12"> - <el-form-item label="上传模型"> - <el-upload - class="upload-demo" - :limit="1" - :file-list="fileList" - :before-upload="beforeUpload" - :on-success="uploadModelSuccess" - :on-error="uploadModelError" - :action="uploadModelUrl"> - <el-button size="small" type="primary" @click="setReplaceModelOnly(0)">点击上传 - </el-button> - <el-button - size="small" type="primary" @click="setReplaceModelOnly(1)" - v-if="!!dataForm.id">只替换模型 - </el-button> - </el-upload> - </el-form-item> - </el-col> + <el-row :gutter="8" v-if="dataForm.itemtypename === 'NormalItem'"> <el-col :span="12"> <el-form-item label="结果"> <el-select v-model="dataForm.mmPredictModel.resultstrid" placeholder="请选择"> @@ -177,8 +169,15 @@ </el-select> </el-form-item> </el-col> + <el-col :span="12"> + <el-form-item label="编号" v-if="!!dataForm.id"> + <el-input + v-model="dataForm.mmPredictModel.modelno" placeholder="编号" maxlength="32" + disabled/> + </el-form-item> + </el-col> </el-row> - <el-row v-if="dataForm.itemtypename === 'NormalItem'"> + <el-row :gutter="8" v-if="dataForm.itemtypename === 'NormalItem'"> <el-col :span="24"> <el-form-item label="路径"> <el-input @@ -187,7 +186,7 @@ </el-form-item> </el-col> </el-row> - <el-row v-if="dataForm.itemtypename === 'NormalItem'"> + <el-row :gutter="8" v-if="dataForm.itemtypename === 'NormalItem'"> <el-col :span="24"> <el-form-item label="类名"> <el-input @@ -196,7 +195,7 @@ </el-form-item> </el-col> </el-row> - <el-row v-if="dataForm.itemtypename === 'NormalItem'"> + <el-row :gutter="8" v-if="dataForm.itemtypename === 'NormalItem'"> <el-col :span="12"> <el-form-item label="方法名"> <el-input @@ -220,13 +219,13 @@ <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="" label="值" align="center"> + <el-table-column prop="" label="值" align="center" min-width="150"> <template #default="scope"> - <el-input v-model="scope.row.value" maxlength="256" style="width:100%;height:100%"/> + <el-input size="mini" v-model="scope.row.value" maxlength="256" + style="width:100%;height:100%"/> </template> </el-table-column> </el-table> - <el-divider content-position="left" v-if="dataForm.itemtypename === 'NormalItem'">输入参数 </el-divider> <el-table @@ -238,14 +237,13 @@ <el-table-column prop="modelparamorder" label="序号" width="60" align="center"/> <el-table-column prop="" label="类型" width="200" align="center"> <template #default="scope"> - <el-select - v-model="scope.row.modelparamtype" - @change="changeModelparamtype(value, scope.row)" placeholder="请选择"> + <el-select v-model="scope.row.modelparamtype" placeholder="请选择"> <el-option - v-for="item in dataForm.modelparamtypeList" - :key="item" - :label="item" - :value="item"/> + v-for="dict in getStrDictOptions(DICT_TYPE.MODEL_PARAM_TYPE)" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> </el-select> </template> </el-table-column> @@ -359,23 +357,25 @@ </Dialog> </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 DmModule from '@/api/model/pre/dm' import * as MmResultTable from '@/api/model/pre/result' import * as DaPoint from '@/api/data/da/point' -import * as ScheduleModelApi from '@/api/model/sche/model' +import {useUpload} from '@/api/model/pre/predict' + +const {uploadUrl, httpRequest} = useUpload() defineOptions({name: 'DataMmPredictItemForm'}) const {t} = useI18n() // 国际化 const message = useMessage() // 消息弹窗 const dialogVisible = ref(false) // 弹窗的是否展示 -const pointLoading = ref(false) // 弹窗的是否展示 const dialogTitle = ref('') // 弹窗的标题 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 const formType = ref('') // 表单的类型:create - 新增;update - 修改 -const uploadModelUrl = '' +const pointLoading = ref(false) const itemTypeList = ref([]) const itemTypeMap = ref({}) const moduleList = ref([]) @@ -387,40 +387,18 @@ const predictList = ref([]) const predictItemList = ref([]) const modelparamList = ref([]) -const modelparamListMap = ref([]) +const modelparamListMap = ref({}) const modelparamMap = ref({}) const expressionList = ref([]) const fileList = ref([]) const operatorList = ['+', '-'] -const replaceModelOnly = ref(0) +const replaceModelOnly = ref(false) const queryParams = reactive({ pageNo: 1, pageSize: 10, pointNo: undefined, pointName: undefined, }) -const isList = ref([ - { - code: 0, - name: '否' - }, - { - code: 1, - name: '是' - }]) -/*const saveIndexList = ref([ - { - code: '2', - name: 'T+2' - }, - { - code: '30', - name: 'T+30' - }, - { - code: 'n', - name: 'T+n' - }])*/ const dataForm = ref({ id: undefined, itemtypename: undefined, @@ -431,11 +409,11 @@ caltypeid: undefined, itemtypeid: undefined, predictlength: undefined, - granularity: undefined, + granularity: 60, status: undefined, isfuse: undefined, predictphase: undefined, - workchecked: '', + workchecked: 0, unittransfactor: undefined, saveindex: undefined }, @@ -443,7 +421,7 @@ id: undefined, moduleid: undefined, itemid: undefined, - itemorder: undefined, + itemorder: 1, status: undefined, categoryid: undefined }, @@ -481,13 +459,27 @@ expression: undefined, num: undefined }, - modelparamtypeList: ['DATAPOINT', 'PREDICTITEM', 'DAYWORKPROCESSPLAN', 'MONTHWORKPROCESSPLAN', 'ST_PLAN_NQ', 'ST_PLAN_BQ', 'ST_PLAN_NQ_HI', 'ST_PLAN_BQ_HI'], mmModelArithSettingsList: [], mmModelParamList: [] }) const formRules = reactive({ - // itemno: [{required: true, message: '编号不能为空', trigger: 'blur'}], - // itemname: [{required: true, message: '预测项名不能为空', trigger: 'blur'}], + 'mmPredictItem.itemname': [{required: true, message: '预测项名不能为空', trigger: 'blur'}], + 'mmPredictItem.itemtypeid': [{required: true, message: '类型不能为空', trigger: 'blur'}], + 'dataForm.mmPredictItem.granularity': [{ + required: true, + message: '粒度不能为空', + trigger: 'blur' + }], + 'dataForm.mmPredictItem.workchecked': [{ + required: true, + message: '是否检查不能为空', + trigger: 'blur' + }], + 'dataForm.mmPredictItem.status': [{required: true, message: '是否启用不能为空', trigger: 'blur'}], + 'dataForm.dmModuleItem.moduleid': [{required: true, message: '管网不能为空', trigger: 'blur'}], + 'dataForm.dmModuleItem.itemorder': [{required: true, message: '排序不能为空', trigger: 'blur'}], + 'dataForm.mmItemOutput.pointid': [{required: true, message: '数据点不能为空', trigger: 'blur'}], + }) const formRef = ref() // 表单 Ref @@ -497,7 +489,6 @@ dialogTitle.value = t('action.' + type) formType.value = type dataForm.value.itemtypename = itemtypename || 'NormalItem' - console.info(dataForm.value.itemtypename) // resetForm() resetFields(dataForm.value) setDefaultFields() @@ -511,7 +502,6 @@ if (id) { formLoading.value = true try { - debugger getInfo(id) } finally { formLoading.value = false @@ -531,7 +521,6 @@ formLoading.value = true try { const data = dataForm.value as unknown as MmPredictItem.MmPredictItemVO - debugger if (expressionList.value && expressionList.value.length > 0) { let expression = '' for (let i = 0; i < expressionList.value.length; i++) { @@ -624,7 +613,7 @@ if (response.code === 0) { message.success(t('上传成功')) dataForm.value.mmModelArithSettingsList = [] - if (!replaceModelOnly) { + if (!replaceModelOnly.value) { dataForm.value.mmModelParamList = [] } dataForm.value.mmPredictModel.modelpath = '' @@ -641,6 +630,7 @@ } }) } + dataForm.value.mmPredictModel.modelname = response.data.originalFilename dataForm.value.mmPredictModel.classname = response.data.className dataForm.value.mmPredictModel.methodname = response.data.methodName if (response.data.paramPathList) { @@ -649,7 +639,7 @@ if (response.data.paramsArray) { dataForm.value.mmPredictModel.modelparamstructure = response.data.paramsArray.join(',') } - if (response.data.paramsCount && !replaceModelOnly) { + if (response.data.paramsCount && !replaceModelOnly.value) { for (let i = 0; i < response.data.paramsCount; i++) { dataForm.value.mmModelParamList.push({ modelparamportorder: (i + 1), @@ -680,7 +670,6 @@ function changeItemtype(value) { dataForm.value.itemtypename = itemTypeMap[value] - console.info(dataForm.value.itemtypename) } function changeModelparamtype(value, row) { @@ -807,42 +796,6 @@ }) modelparamListMap['PREDICTITEM'] = paramList; } - - /*const dayParams = { - 'processType': '日计划' - } - let dayScheduleRes = await ScheduleModelApi.getScheduleWorkPrecessList(dayParams) - paramList = [] - if (dayScheduleRes !== null) { - dayScheduleRes.forEach(function (value) { - paramList.push({ - id: value.id, - code: value.code, - name: value.aliasName, - type: 'DAYWORKPROCESSPLAN' - }) - modelparamMap[value.id] = value.aliasName - }) - modelparamListMap['DAYWORKPROCESSPLAN'] = paramList; - } - - const monthParams = { - 'processType': '月计划' - } - let monthScheduleRes = await ScheduleModelApi.getScheduleWorkPrecessList(monthParams) - paramList = [] - if (monthScheduleRes !== null) { - monthScheduleRes.forEach(function (value) { - paramList.push({ - id: value.id, - code: value.code, - name: value.aliasName, - type: 'MONTHWORKPROCESSPLAN' - }) - modelparamMap[value.id] = value.aliasName - }) - modelparamListMap['MONTHWORKPROCESSPLAN'] = paramList; - }*/ } const setDefaultFields = () => { @@ -866,11 +819,10 @@ } /** 重置表单 */ -/*const resetForm = () => { +const resetForm = () => { dataForm.value = { mmModelArithSettingsList: [], mmModelParamList: [], - modelparamtypeList: [], id: '', itemtypename: '', mmPredictItem: { @@ -880,11 +832,11 @@ caltypeid: '', itemtypeid: '', predictlength: '', - granularity: '', + granularity: 60, status: '', isfuse: '', predictphase: '', - workchecked: '', + workchecked: 0, unittransfactor: '', saveindex: '' }, @@ -892,7 +844,7 @@ id: '', moduleid: '', itemid: '', - itemorder: '', + itemorder: 1, status: 1, categoryid: '' }, @@ -932,7 +884,7 @@ } } formRef.value?.resetFields() -}*/ +} onMounted(() => { init() diff --git a/src/views/model/pre/item/index.vue b/src/views/model/pre/item/index.vue index 84cac42..e0e8861 100644 --- a/src/views/model/pre/item/index.vue +++ b/src/views/model/pre/item/index.vue @@ -52,21 +52,36 @@ <ContentWrap> <el-table v-loading="loading" :data="list"> <el-table-column label="编号" align="center" prop="itemno"/> - <el-table-column label="预测项名" align="center" prop="itemname"/> - <!-- <el-table-column label="类型ID" align="center" prop="itemtypeid" />--> - <el-table-column label="类型名称" align="center" prop="itemtypename"/> - <el-table-column label="粒度" align="center" prop="granularity"/> - <el-table-column label="是否融合" align="center" prop="isfuse"/> - <el-table-column label="是否检查" align="center" prop="workchecked"/> - <!-- <el-table-column label="模块ID" align="center" prop="moduleid" />--> - <!-- <el-table-column label="排序" align="center" prop="itemorder" />--> - <el-table-column label="是否启用" align="center" prop="status"/> - <!-- <el-table-column label="类别ID" align="center" prop="categoryid" />--> - <!-- <el-table-column label="数据点ID" align="center" prop="pointid" />--> + <el-table-column label="预测项名" header-align="center" align="left" min-width="200" prop="itemname"/> + <el-table-column label="类型名称" align="center" 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> + </template> + </el-table-column> + <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" /> + </template> + </el-table-column> + <el-table-column label="是否融合" align="center" prop="isfuse"> + <template #default="scope"> + <dict-tag :type="DICT_TYPE.COM_IS_INT" :value="scope.row.isfuse" /> + </template> + </el-table-column> + <el-table-column label="是否检查" align="center" prop="workchecked"> + <template #default="scope"> + <dict-tag :type="DICT_TYPE.COM_IS_INT" :value="scope.row.workchecked" /> + </template> + </el-table-column> + <el-table-column label="是否启用" align="center" prop="status"> + <template #default="scope"> + <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="存放表ID" align="center" prop="resulttableid" />--> <el-table-column label="存放表" align="center" prop="tablename"/> - <el-table-column label="操作" align="center" min-width="110" fixed="right"> <template #default="scope"> <el-button @@ -104,6 +119,7 @@ <script lang="ts" setup> import MmPredictItemForm from './MmPredictItemForm.vue' import * as MmPredictItem from '@/api/model/pre/predict' +import {DICT_TYPE} from "@/utils/dict"; defineOptions({name: 'DataMmPredictItem'}) -- Gitblit v1.9.3