| | |
| | | width="100" |
| | | align="center"> |
| | | <template #default="scope"> |
| | | <el-input v-model="scope.row.modelparamportorder" maxlength="5" clearable :disabled="true" |
| | | <el-input v-model="scope.row.modelparamportorder" maxlength="5" clearable |
| | | style="width:100%; hight:100%"/> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | <el-table-column |
| | | prop="" |
| | | label="键" |
| | | min-width="150" |
| | | align="center"> |
| | | <template #default="scope"> |
| | | <el-input v-model="scope.row.key" maxlength="20" clearable :disabled="true" |
| | |
| | | <el-table-column |
| | | prop="" |
| | | label="名称" |
| | | min-width="150" |
| | | align="center"> |
| | | <template #default="scope"> |
| | | <el-input v-model="scope.row.name" maxlength="20" clearable :disabled="true" |
| | |
| | | <el-table-column |
| | | prop="" |
| | | label="类型" |
| | | min-width="100" |
| | | align="center"> |
| | | <template #default="scope"> |
| | | <el-select v-model="scope.row.valuetype" placeholder="请选择" :disabled="true"> |
| | |
| | | <el-table-column |
| | | prop="" |
| | | label="值" |
| | | min-width="300" |
| | | align="center"> |
| | | <template #default="scope"> |
| | | <el-input v-model="scope.row.value" maxlength="256" clearable :disabled="scope.row.key === 'pyFile'" |
| | | <el-input v-model="scope.row.value" maxlength="256" clearable |
| | | :disabled="scope.row.key === 'pyFile_BAK'" |
| | | style="width:100%;hight:100%"/> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column--> |
| | | <!-- prop=""--> |
| | | <!-- label="操作"--> |
| | | <!-- width="100"--> |
| | | <!-- align="center">--> |
| | | <!-- <template #default="scope">--> |
| | | <!-- <el-button--> |
| | | <!-- @click.prevent="addRow(scope.$index, formData.settingList)"--> |
| | | <!-- link--> |
| | | <!-- type="primary"--> |
| | | <!-- size="small">--> |
| | | <!-- 添加--> |
| | | <!-- </el-button>--> |
| | | <!-- <el-button--> |
| | | <!-- @click.prevent="deleteRow(scope.$index, formData.settingList)"--> |
| | | <!-- link--> |
| | | <!-- type="primary"--> |
| | | <!-- size="small">--> |
| | | <!-- 删除--> |
| | | <!-- </el-button>--> |
| | | <!-- </template>--> |
| | | <!-- </el-table-column>--> |
| | | </el-table> |
| | | <el-divider content-position="left">模型下发配置</el-divider> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="4"> |
| | | <el-button type="primary" size="small" @click="addRowOut()" >新增</el-button> |
| | | </el-col> |
| | | </el-row> |
| | | <el-table |
| | | :data="formData.modelOut" |
| | | border |
| | | style="width: 100%; margin-top: 5px;"> |
| | | <el-table-column prop="resultKey" label="输出key" align="center" min-width="100"> |
| | | <template #default="scope"> |
| | | <el-input size="mini" v-model="scope.row.resultKey" style="width:100%;height:100%"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="resultType" label="数据类型" align="center" min-width="150"> |
| | | <template #default="scope"> |
| | | <el-select v-model="scope.row.resultType" placeholder="请选择"> |
| | | <el-option |
| | | v-for="dict in getStrDictOptions(DICT_TYPE.RESULT_TYPE)" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | </el-select> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="resultPort" label="角标1" align="center" min-width="100"> |
| | | <template #default="scope"> |
| | | <el-input-number :min="0" clearable controls-position="right" size="mini" v-model="scope.row.resultPort" style="width:100%;height:100%"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="resultIndex" label="角标2" align="center" min-width="100"> |
| | | <template #default="scope"> |
| | | <el-input-number :min="0" clearable controls-position="right" size="mini" v-model="scope.row.resultIndex" style="width:100%;height:100%"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="isWrite" label="是否下发" align="center" min-width="100"> |
| | | <template #default="scope"> |
| | | <el-switch size="small" v-model="scope.row.isWrite" :active-value="1" |
| | | :inactive-value="0"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="" |
| | | label="测点名称" |
| | | align="center" min-width="200"> |
| | | <template #default="scope"> |
| | | <el-select v-model="scope.row.pointNo" |
| | | filterable |
| | | placeholder="请选择"> |
| | | <el-option |
| | | v-for="(item, index) in modelparamListMap['DATAPOINT']" |
| | | :key="index" |
| | | :label="item.name" |
| | | :value="item.itemNo"/> |
| | | </el-select> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="disturbancePointNo’" label="无扰切换点位" align="center" min-width="200"> |
| | | <template #default="scope"> |
| | | <el-select v-model="scope.row.disturbancePointNo" |
| | | clearable |
| | | filterable |
| | | placeholder="请选择"> |
| | | <el-option |
| | | v-for="(item, index) in modelparamListMap['DATAPOINT']" |
| | | :key="index" |
| | | :label="item.name" |
| | | :value="item.itemNo"/> |
| | | </el-select> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="操作" fixed="right" header-align="center" align="center" width="100"> |
| | | <template #default="scope"> |
| | | <el-button |
| | | @click="deleteModelOutRow(scope.$index)" |
| | | key="danger" |
| | | type="danger" |
| | | link |
| | | >删除 |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-form> |
| | | <template #footer> |
| | |
| | | import * as ScheduleModelApi from '@/api/model/sche/model' |
| | | import { CommonStatusEnum } from '@/utils/constants' |
| | | import * as MpkApi from "@/api/model/mpk/mpk"; |
| | | import {generateUUID} from "@/utils"; |
| | | import { ElMessage,ElMessageBox } from 'element-plus' |
| | | import { Refresh } from '@element-plus/icons-vue' |
| | | |
| | | defineOptions({ name: 'ScheduleModelForm' }) |
| | | |
| | |
| | | resultStrId: undefined, |
| | | invocation: undefined, |
| | | status: CommonStatusEnum.ENABLE, |
| | | paramList: [], |
| | | settingList: [] |
| | | paramList: [{ |
| | | modelparamportorder: 1 + '', |
| | | modelparamorder: '1', |
| | | modelparamtype: '', |
| | | modelparamid: '', |
| | | datalength: 0 |
| | | }], |
| | | settingList: [], |
| | | modelOut: [] |
| | | }) |
| | | const formRules = reactive({ |
| | | modelCode: [{ required: true, message: '模型编号不能为空', trigger: 'blur' }], |
| | |
| | | if (!formRef) return |
| | | const valid = await formRef.value.validate() |
| | | if (!valid) return |
| | | //校验模型输入 |
| | | formData.value.paramList.forEach(e => { |
| | | if (e.modelparamid == undefined || e.modelparamid == '') { |
| | | message.error("输入数据异常") |
| | | throw new Error('输入数据异常'); |
| | | } |
| | | // ind_ascii类型输出的序号必须是1,且所在端口序号最大为1(一个ind_ascii类型输入独占一个端口) |
| | | if (e.modelparamtype === 'IND_ASCII') { |
| | | if (e.modelparamorder != 1 || formData.value.paramList.filter(p => p.modelparamportorder === e.modelparamportorder).length != 1) { |
| | | message.error("输入数据异常:IND_ASCII类型输入独占一个端口") |
| | | throw new Error('输入数据异常:IND_ASCII类型输入独占一个端口'); |
| | | } |
| | | } |
| | | }) |
| | | |
| | | // 提交请求 |
| | | formLoading.value = true |
| | | try { |
| | |
| | | resultStrId: undefined, |
| | | invocation: undefined, |
| | | status: CommonStatusEnum.ENABLE, |
| | | paramList: [], |
| | | settingList: [] |
| | | paramList: [{ |
| | | modelparamportorder: 1 + '', |
| | | modelparamorder: '1', |
| | | modelparamtype: '', |
| | | modelparamid: '', |
| | | datalength: 0 |
| | | }], |
| | | settingList: [], |
| | | modelOut: [] |
| | | } |
| | | formRef.value?.resetFields() |
| | | } |
| | |
| | | const changeModel = async () => { |
| | | // 校验 |
| | | if (model.value && model.value.length > 0) { |
| | | const modelInfo = model.value[0] |
| | | const methodInfo = model.value[1] |
| | | formData.value.modelName = modelInfo.pyChineseName |
| | | formData.value.className = modelInfo.pkgName + '.impl.' + modelInfo.pyName + 'Impl'; |
| | | formData.value.methodName = methodInfo.methodName |
| | | formData.value.portLength = methodInfo.dataLength |
| | | // 参数构造 |
| | | let paramStructure = [] |
| | | for (let i = 0; i < methodInfo.dataLength; i++) { |
| | | paramStructure.push('[[D') |
| | | } |
| | | if (methodInfo.model === 1) { |
| | | paramStructure.push('java.util.HashMap') |
| | | } |
| | | ElMessageBox.confirm( |
| | | '是否更新输入参数?', |
| | | '提示', |
| | | {confirmButtonText: '是', cancelButtonText: '否', type: 'success',icon: markRaw(Refresh),closeOnClickModal:false,closeOnPressEscape:false} |
| | | ).then(() => { |
| | | relevanceModel(true) |
| | | }).catch(() => { |
| | | relevanceModel(false) |
| | | }) |
| | | }else { |
| | | message.error("请先选择模型") |
| | | } |
| | | } |
| | | |
| | | function relevanceModel(refreshParam) { |
| | | const modelInfo = model.value[0] |
| | | const methodInfo = model.value[1] |
| | | formData.value.modelName = modelInfo.pyChineseName |
| | | formData.value.className = modelInfo.pkgName + '.impl.' + modelInfo.pyName + 'Impl'; |
| | | formData.value.methodName = methodInfo.methodName |
| | | formData.value.portLength = methodInfo.dataLength |
| | | // 参数构造 |
| | | let paramStructure = [] |
| | | for (let i = 0; i < methodInfo.dataLength; i++) { |
| | | paramStructure.push('[[D') |
| | | } |
| | | if (methodInfo.model === 1) { |
| | | paramStructure.push('java.util.HashMap') |
| | | formData.value.paramStructure = paramStructure.join(',') |
| | | formData.value.modelPath = modelInfo.pyModule |
| | | } |
| | | paramStructure.push('java.util.HashMap') |
| | | formData.value.paramStructure = paramStructure.join(',') |
| | | formData.value.modelPath = modelInfo.pyModule |
| | | if (refreshParam) { |
| | | // 输入参数 |
| | | let paramList = [] |
| | | for (let i = 0; i < methodInfo.dataLength; i++) { |
| | |
| | | datalength: 0 |
| | | }) |
| | | } |
| | | |
| | | formData.value.paramList = paramList |
| | | // 设置参数 |
| | | let settingList = [] |
| | | methodInfo.methodSettings.forEach(e => { |
| | | settingList.push({ |
| | | key: e.settingKey, |
| | | value: e.value, |
| | | valuetype: e.valueType, |
| | | name: e.name |
| | | }) |
| | | }) |
| | | formData.value.settingList = settingList |
| | | modelPopover.value.hide() |
| | | }else { |
| | | message.error("请先选择模型") |
| | | } |
| | | // 设置参数 |
| | | let settingList = [] |
| | | methodInfo.methodSettings.forEach(e => { |
| | | settingList.push({ |
| | | key: e.settingKey, |
| | | value: e.value, |
| | | valuetype: e.valueType, |
| | | name: e.name |
| | | }) |
| | | }) |
| | | formData.value.settingList = settingList |
| | | modelPopover.value.hide() |
| | | } |
| | | |
| | | function changeModelparamtype(row) { |
| | | row.modelparamid = '' |
| | | } |
| | | const addRowOut= function () { |
| | | if(formData.value.modelOut===undefined) { |
| | | formData.value.modelOut = [] |
| | | } |
| | | formData.value.modelOut.push({ |
| | | id: generateUUID(), |
| | | resultKey: undefined, |
| | | resultType: "double[][]", |
| | | port: 0, |
| | | index: 0, |
| | | isWrite: 1, |
| | | pointNo:undefined, |
| | | sort:undefined, |
| | | disturbancePointNo:undefined, |
| | | }) |
| | | } |
| | | const deleteModelOutRow = function (index) { |
| | | formData.value.modelOut.splice(index, 1) |
| | | } |
| | | </script> |