Browse Source

8-14

pull/1/head
lxg 1 year ago
parent
commit
753646818e
  1. 486
      src/views/model/devicemodel/editModel.vue
  2. 4
      src/views/model/devicemodel/index.vue

486
src/views/model/devicemodel/editModel.vue

@ -1,130 +1,123 @@
<template> <template>
<div class="app-container" <div class="app-container" v-loading="loading">
v-loading="loading">
<!-- 添加或修改设备模型信息对话框 --> <!-- 添加或修改设备模型信息对话框 -->
<div class="marginbottom50px"> <div class="marginbottom50px">
<el-steps :active="currentStep"> <el-steps :active="currentStep">
<el-step title="模型信息" description="名称、编号、序号、备注等" /> <el-step title="模型信息" description="名称、编号、序号、备注等" />
<el-step title="参数类别配置" description="模型的参数类别" /> <el-step title="参数类别配置" description="模型的参数类别" />
<el-step title="调控策略" description="模型的调控策略" /> <el-step title="调控策略" description="模型的调控策略" />
</el-steps> </el-steps>
</div> </div>
<div class="overflowscroll"> <div class="overflowscroll">
<el-form ref="devicemodelRef" :model="form" :rules="rules" label-width="100px"> <el-form ref="devicemodelRef" :model="form" :rules="rules" label-width="100px">
<el-carousel ref="carousel" :autoplay="false" :arrow="never" pause-on-hover="false" class="customCarousel" > <el-carousel ref="carousel" :autoplay="false" :arrow="never" pause-on-hover="false" class="customCarousel">
<el-carousel-item :key="1" name="1" class="textaligncenter overflowscroll height300"> <el-carousel-item :key="1" name="1" class="textaligncenter overflowscroll height300">
<div class="widthhalfinlineblock"> <div class="widthhalfinlineblock">
<el-form-item label="模型名称" prop="modelName"> <el-form-item label="模型名称" prop="modelName">
<el-input v-model="form.modelName" placeholder="请输入模型名称" /> <el-input v-model="form.modelName" placeholder="请输入模型名称" />
</el-form-item> </el-form-item>
<el-form-item label="模型编码" prop="modelCode"> <el-form-item label="模型编码" prop="modelCode">
<el-input v-model="form.modelCode" placeholder="请输入模型编码" /> <el-input v-model="form.modelCode" placeholder="请输入模型编码" />
</el-form-item> </el-form-item>
<el-form-item label="排序" prop="sort"> <el-form-item label="排序" prop="sort">
<el-input-number v-model="form.sort" :min="1" :max="100" placeholder="请输入排序"/> <el-input-number v-model="form.sort" :min="1" :max="100" placeholder="请输入排序" />
</el-form-item> </el-form-item>
<el-form-item label="上级" prop="pid"> <el-form-item label="上级" prop="pid">
<el-tree-select <el-tree-select v-model="form.pid" :data="devicemodelOptions"
v-model="form.pid" :props="{ value: 'id', label: 'modelName', children: 'children' }" value-key="id" placeholder="请选择上级"
:data="devicemodelOptions" check-strictly :default-expand-all="true" :default-checked-keys="defaultCheckedKeys" />
:props="{ value: 'id', label: 'modelName', children: 'children' }"
value-key="id"
placeholder="请选择上级"
check-strictly
:default-expand-all="true"
:default-checked-keys="defaultCheckedKeys"
/>
</el-form-item> </el-form-item>
<el-form-item label="模型类别" key="selectmodelType" prop="modelTypeId"> <el-form-item label="模型类别" key="selectmodelType" prop="modelTypeId">
<el-select v-model="form.modelTypeId" placeholder="请选择模型类别" clearable @change="modalTypeControllButton"> <el-select v-model="form.modelTypeId" placeholder="请选择模型类别" clearable @change="modalTypeControllButton">
<!-- <el-option v-for="dict in modeltypeList" :key="dict.id" :label="dict.modelTypeName" :value="dict.id" /> --> <!-- <el-option v-for="dict in modeltypeList" :key="dict.id" :label="dict.modelTypeName" :value="dict.id" /> -->
<el-option v-for="dict in dc_model_type" :key="dict.value" :label="dict.label" :value="dict.value" /> <el-option v-for="dict in dc_model_type" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="是否可用" prop="vailable"> <el-form-item label="是否可用" prop="vailable">
<el-switch <el-switch v-model="form.dc_available" class="ml-2i" style="--el-switch-on-color: #13ce66" />
v-model="form.dc_available"
class="ml-2i"
style="--el-switch-on-color: #13ce66"
/>
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="note"> <el-form-item label="备注" prop="note">
<el-input v-model="form.note" type="textarea" placeholder="请输入内容" /> <el-input v-model="form.note" type="textarea" placeholder="请输入内容" />
</el-form-item> </el-form-item>
</div> </div>
<div class="width50percent textalignright"> <div class="width50percent textalignright">
<el-form-item class="inlineblock marginright6percent divsonmarginleft0"> <el-form-item class="inlineblock marginright6percent divsonmarginleft0">
<el-button type="primary" v-if="prevStepButtonShow" @click="prevStep" style="display: inline-block !important" >上一步</el-button> <el-button type="primary" v-if="prevStepButtonShow" @click="prevStep"
<el-button type="primary" v-if="submitButtonShow" @click="submitForm" style="display: inline-block !important">提交</el-button> style="display: inline-block !important">上一步</el-button>
<el-button type="primary" v-if="nextStepButtonShow" @click="nextStep" style="display: inline-block !important">下一步</el-button> <el-button type="primary" v-if="submitButtonShow" @click="submitForm"
style="display: inline-block !important">提交</el-button>
<el-button type="primary" v-if="nextStepButtonShow" @click="nextStep"
style="display: inline-block !important">下一步</el-button>
<el-button @click="cancel" style="display: inline-block !important"> </el-button> <el-button @click="cancel" style="display: inline-block !important"> </el-button>
</el-form-item> </el-form-item>
</div> </div>
</el-carousel-item> </el-carousel-item>
<el-carousel-item :key="2" name="2" class="textaligncenter overflowscroll height300"> <el-carousel-item :key="2" name="2" class="textaligncenter overflowscroll height300">
<div class="width75percentinlineblock"> <div class="width75percentinlineblock">
<div class="textalignright marginbottom5"> <div class="textalignright marginbottom5">
<el-button type="primary" style="display: inline-block !important" @click="addParamModel">添加参数模版</el-button> <el-button type="primary" style="display: inline-block !important"
</div> @click="addParamModel">添加参数模版</el-button>
<el-table :data="selectedModelList" style="width: 100%" max-height="250" @cell-dblclick="startEditing">
<el-table-column fixed label="序号" width="80" align="center" >
<template #default="scope">
<span>{{ scope.$index+1 }}</span>
</template>
</el-table-column>
<el-table-column label="参数名称" align="center" prop="paramClassName" />
<el-table-column label="参数编码" align="center" prop="paramClassCode" />
<el-table-column label="PLC地址位" align="center" prop="plcAdr" vali>
<template #default="scope">
<ValidationProvider :rules="plcAdr" v-slot="">
<span v-if="!scope.row.editing">{{ scope.row.plcAdr}}</span>
<el-input v-else v-model="scope.row.plcAdr" @blur="saveData(scope.row)"/>
</ValidationProvider>
</template>
</el-table-column>
<el-table-column label="是否可控" align="center" prop="controllab">
<template #default="scope">
<el-switch
v-model="scope.row.controllab"
@change="selectRadio(scope.row)"
class="ml-2i"
style="--el-switch-on-color: #13ce66"
/>
</template>
</el-table-column>
<el-table-column label="类别" align="center" prop="classType">
<template #default="scope">
<dict-tag :options="dc_class_type" :value="scope.row.classType" />
</template>
</el-table-column>
<el-table-column label="分区" align="center" prop="devicePartion">
<template #default="scope">
<dict-tag :options="dc_device_partion" :value="scope.row.devicePartion" />
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="note" />
<el-table-column label="操作" align="center" width="200px">
<template #default="scope">
<el-button style="display:inline-block !important" type="primary" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="fixedbottomright width50percent textalignright">
<el-form-item class="inlineblock marginright6percent divsonmarginleft0">
<el-button type="primary" v-if="prevStepButtonShow" @click="prevStep" style="display: inline-block !important">上一步</el-button>
<el-button type="primary" v-if="submitButtonShow" @click="submitForm" style="display: inline-block !important">提交</el-button>
<el-button type="primary" v-if="nextStepButtonShow" @click="nextStep" style="display: inline-block !important">下一步</el-button>
<el-button @click="cancel" style="display: inline-block !important"> </el-button>
</el-form-item>
</div> </div>
<el-table :data="selectedModelList" style="width: 100%" max-height="250" @cell-dblclick="startEditing">
<el-table-column fixed label="序号" width="80" align="center">
<template #default="scope">
<span>{{ scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column label="参数名称" align="center" prop="paramClassName" />
<el-table-column label="参数编码" align="center" prop="paramClassCode" />
<el-table-column label="PLC地址位" align="center" prop="plcAdr" vali>
<template #default="scope">
<ValidationProvider :rules="plcAdr" v-slot="">
<span v-if="!scope.row.editing">{{ scope.row.plcAdr }}</span>
<el-input v-else v-model="scope.row.plcAdr" @blur="saveData(scope.row)" />
</ValidationProvider>
</template>
</el-table-column>
<el-table-column label="是否可控" align="center" prop="controllab">
<template #default="scope">
<el-switch v-model="scope.row.controllab" @change="selectRadio(scope.row)" class="ml-2i"
style="--el-switch-on-color: #13ce66" />
</template>
</el-table-column>
<el-table-column label="类别" align="center" prop="classType">
<template #default="scope">
<dict-tag :options="dc_class_type" :value="scope.row.classType" />
</template>
</el-table-column>
<el-table-column label="分区" align="center" prop="devicePartion">
<template #default="scope">
<dict-tag :options="dc_device_partion" :value="scope.row.devicePartion" />
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="note" />
<el-table-column label="操作" align="center" width="200px">
<template #default="scope">
<el-button style="display:inline-block !important" type="primary"
@click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="fixedbottomright width50percent textalignright">
<el-form-item class="inlineblock marginright6percent divsonmarginleft0">
<el-button type="primary" v-if="prevStepButtonShow" @click="prevStep"
style="display: inline-block !important">上一步</el-button>
<el-button type="primary" v-if="submitButtonShow" @click="submitForm"
style="display: inline-block !important">提交</el-button>
<el-button type="primary" v-if="nextStepButtonShow" @click="nextStep"
style="display: inline-block !important">下一步</el-button>
<el-button @click="cancel" style="display: inline-block !important"> </el-button>
</el-form-item>
</div>
</el-carousel-item> </el-carousel-item>
</el-carousel> </el-carousel>
</el-form> </el-form>
<el-dialog :title="title" v-model="addParamModelShow" width="800px" append-to-body :dc_device_partion="dc_device_partion" :dc_class_type="dc_class_type"> <el-dialog :title="title" v-model="addParamModelShow" width="800px" append-to-body
:dc_device_partion="dc_device_partion" :dc_class_type="dc_class_type">
<el-table ref="dialogTable" :data="paramModelList" key="newTable" style="width: 100%" max-height="600"> <el-table ref="dialogTable" :data="paramModelList" key="newTable" style="width: 100%" max-height="600">
<el-table-column type="selection" width="55" :selectable="ifselectable"/> <el-table-column type="selection" width="55" :selectable="ifselectable" />
<el-table-column label="参数名称" align="center" prop="paramClassName" /> <el-table-column label="参数名称" align="center" prop="paramClassName" />
<el-table-column label="参数编码" align="center" prop="paramClassCode" /> <el-table-column label="参数编码" align="center" prop="paramClassCode" />
<el-table-column label="类别" align="center" prop="classType"> <el-table-column label="类别" align="center" prop="classType">
@ -142,32 +135,34 @@
<div class="textalignright margintop10"> <div class="textalignright margintop10">
<el-button type="primary" @click="selectedSubmit">提交</el-button> <el-button type="primary" @click="selectedSubmit">提交</el-button>
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
</div> </div>
</template> </template>
<style lang="scss"> <style lang="scss">
@import "@/assets/styles/self-defined.scss"; @import "@/assets/styles/self-defined.scss";
.customCarousel {
div{ .customCarousel {
button { div {
display: none !important; button {
}
}
ul{
display: none !important; display: none !important;
} }
} }
ul {
display: none !important;
}
}
</style> </style>
<script setup name="editdevicemodel"> <script setup name="editdevicemodel">
import { listDevicemodel,addDevicemodel, updateDevicemodel } from "@/api/model/devicemodel"; import { listDevicemodel, addDevicemodel, updateDevicemodel, getDevicemodel} from "@/api/model/devicemodel";
import { listParamclass } from "@/api/model/paramclass"; import { listParamclass } from "@/api/model/paramclass";
import { listModelType} from "@/api/model/modelType"; import { listModelType } from "@/api/model/modelType";
import { required } from "@vee-validate/rules"; import { required } from "@vee-validate/rules";
import { listModelparam, addModelparam, updateModelparam, delModelparam} from "@/api/model/modelparam"; import { listModelparam, addModelparam, updateModelparam, delModelparam } from "@/api/model/modelparam";
import { onMounted, ref } from 'vue'; import { onMounted, ref } from 'vue';
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const {dc_class_type, dc_device_partion, dc_model_type} = proxy.useDict('dc_class_type', 'dc_device_partion','dc_model_type'); const { dc_class_type, dc_device_partion, dc_model_type } = proxy.useDict('dc_class_type', 'dc_device_partion', 'dc_model_type');
const router = useRouter(); const router = useRouter();
const devicemodelOptions = ref([]); const devicemodelOptions = ref([]);
const open = ref(false); const open = ref(false);
@ -191,11 +186,11 @@ console.log(proxy);
const modelId = router.currentRoute._value.query.pid; const modelId = router.currentRoute._value.query.pid;
const data = reactive({ const data = reactive({
form: { form: {
sort:1, sort: 1,
}, },
dc_available: [ dc_available: [
{label: '可用', value: 'true', elTagType: 'default', elTagClass: null}, { label: '可用', value: 'true', elTagType: 'default', elTagClass: null },
{label: '不可用', value: 'false', elTagType: 'default', elTagClass: null} { label: '不可用', value: 'false', elTagType: 'default', elTagClass: null }
], ],
queryParams: { queryParams: {
modelName: null, modelName: null,
@ -228,7 +223,7 @@ const data = reactive({
}); });
const { queryParams, form, rules } = toRefs(data); const { queryParams, form, rules } = toRefs(data);
// //
function cancel() { function cancel() {
open.value = false; open.value = false;
@ -277,72 +272,74 @@ function submitForm() {
// //
// //
let delFlag = true; let delFlag = true;
oldSelectedList.value.forEach((item)=>{ oldSelectedList.value.forEach((item) => {
selectedModelList.value.forEach(element=>{ selectedModelList.value.forEach(element => {
if(item.id == element.id){ if (item.id == element.id) {
delFlag == false; delFlag == false;
} }
}) })
if(delFlag){ if (delFlag) {
deleteModelIds.value.push(item.id); deleteModelIds.value.push(item.id);
} }
}); });
// //
operateModelIds.value.forEach(item=>{ operateModelIds.value.forEach(item => {
selectedModelList.value.forEach(element=>{ selectedModelList.value.forEach(element => {
if(item.id == element.id){ if (item.id == element.id) {
updateModelSubmit.value.push(element); updateModelSubmit.value.push(element);
} }
}) })
}); });
console.log("新增计算"); console.log("新增计算");
// //
let addFlag = true; let addFlag = true;
selectedModelList.value.forEach(item=>{ selectedModelList.value.forEach(item => {
oldSelectedList.value.forEach(element=>{ oldSelectedList.value.forEach(element => {
if(item.id == element.id){ if (item.id == element.id) {
addFlag == false; addFlag == false;
} }
}) })
if(addFlag){ if (addFlag) {
addModelSubmit.value.push(item); addModelSubmit.value.push(item);
} }
}); });
console.log("新增方法"); console.log("新增方法");
console.log(addModelSubmit.value); console.log(addModelSubmit.value);
// //
addModelSubmit.value.forEach(item=>{ addModelSubmit.value.forEach(item => {
delete item.id; delete item.id;
addModelparam(item).then(response => { addModelparam(item).then(response => {
}); });
}); });
// //
updateModelSubmit.value.forEach(item=>{ updateModelSubmit.value.forEach(item => {
updateModelparam(item).then(response => { updateModelparam(item).then(response => {
}); });
}); });
// //
deleteModelIds.value.forEach(item=>{ deleteModelIds.value.forEach(item => {
delModelparam(item).then(response => { delModelparam(item).then(response => {
}); });
}); });
router.go(-1); router.go(-1);
} }
}); });
} }
/** 查询设备模型类型列表 */ /** 查询设备模型类型列表 */
function getModelTypeList() { function getModelTypeList() {
loading.value = true; loading.value = true;
listModelType(queryParams.value).then(response => { listModelType(queryParams.value).then(response => {
console.log(response); console.log(response);
modeltypeList.value = response.rows; modeltypeList.value = response.rows;
loading.value = false; loading.value = false;
}); });
} }
function getTreeselect() {
listDevicemodel().then(response => { function getTreeselect() {
listDevicemodel().then(response => {
devicemodelOptions.value = []; devicemodelOptions.value = [];
const data = { id: 0, modelName: '顶级节点', children: [] }; const data = { id: 0, modelName: '顶级节点', children: [] };
const parentData = response.data.filter(item => { const parentData = response.data.filter(item => {
@ -352,123 +349,124 @@ function submitForm() {
devicemodelOptions.value.push(data); devicemodelOptions.value.push(data);
}); });
} }
onMounted(() => {
onMounted(() => {
console.log("-------------"+modelId);
// console.log("-------------" + modelId);
// //
// form.value.pid=tempPid; //
}); // form.value.pid=tempPid;
function modalTypeControllButton(){ });
if(form.value.modelTypeId == "2"){ function modalTypeControllButton() {
submitButtonShow.value = false; if (form.value.modelTypeId == "2") {
nextStepButtonShow.value = true; submitButtonShow.value = false;
}else if(form.value.modelTypeId == "1"){ nextStepButtonShow.value = true;
} else if (form.value.modelTypeId == "1") {
submitButtonShow.value = true;
nextStepButtonShow.value = false;
}
}
function nextStep() {
console.log("---------------");
proxy.$refs["devicemodelRef"].validate(valid => {
// if (valid) {
selectedModelList.value = oldSelectedList.value;
if (currentStep.value < 2) {
currentStep.value = currentStep.value + 1;
proxy.$refs.carousel.next();
submitButtonShow.value = true; submitButtonShow.value = true;
nextStepButtonShow.value = false; nextStepButtonShow.value = false;
prevStepButtonShow.value = true;
} }
} // }
function nextStep(){ });
console.log("---------------"); }
proxy.$refs["devicemodelRef"].validate(valid => { function prevStep() {
// if (valid) { currentStep.value = currentStep.value - 1;
selectedModelList.value = oldSelectedList.value; proxy.$refs.carousel.prev();
if(currentStep.value<2){ submitButtonShow.value = false;
currentStep.value = currentStep.value + 1; nextStepButtonShow.value = true;
proxy.$refs.carousel.next(); prevStepButtonShow.value = false;
submitButtonShow.value = true; }
nextStepButtonShow.value = false;
prevStepButtonShow.value = true;
}
// }
});
}
function prevStep(){
currentStep.value = currentStep.value - 1;
proxy.$refs.carousel.prev();
submitButtonShow.value = false;
nextStepButtonShow.value = true;
prevStepButtonShow.value = false;
}
/** 查询参数模型信息列表 */ /** 查询参数模型信息列表 */
function addParamModel(){ function addParamModel() {
loading.value = true; loading.value = true;
listParamclass(queryParams.value).then(response => { listParamclass(queryParams.value).then(response => {
console.log(response); console.log(response);
paramModelList.value = response.rows; paramModelList.value = response.rows;
paramModelList.value.forEach(item=>{ paramModelList.value.forEach(item => {
item.paramClassId = item.id; item.paramClassId = item.id;
item.modelId = form.value.modelCode; item.modelId = form.value.modelCode;
item.controllab = false; item.controllab = false;
});
console.log(paramModelList);
addParamModelShow.value = true;
loading.value = false;
}); });
} console.log(paramModelList);
addParamModelShow.value = true;
loading.value = false;
});
}
function handleDelete(element){ function handleDelete(element) {
selectedModelList.value = selectedModelList.value.filter(item => item.id !== element.id); selectedModelList.value = selectedModelList.value.filter(item => item.id !== element.id);
} }
function selectedSubmit(){ function selectedSubmit() {
const newSelectedList = proxy.$refs.dialogTable.getSelectionRows().map(row => ({ const newSelectedList = proxy.$refs.dialogTable.getSelectionRows().map(row => ({
...row, ...row,
editing: false, // 'editing' false editing: false, // 'editing' false
})); }));
if(selectedModelList.value.length>0){ if (selectedModelList.value.length > 0) {
selectedModelList.value = [ selectedModelList.value = [
...selectedModelList.value, ...selectedModelList.value,
...newSelectedList, ...newSelectedList,
]; ];
}else{ } else {
selectedModelList.value = newSelectedList; selectedModelList.value = newSelectedList;
}
addParamModelShow.value = false;
} }
addParamModelShow.value = false;
}
function startEditing(row, column, cell, event) { function startEditing(row, column, cell, event) {
if (!updateModelIds.value.includes(row.id)) { if (!updateModelIds.value.includes(row.id)) {
updateModelIds.value.push(row.id); updateModelIds.value.push(row.id);
}
row.editing = true; //
} }
row.editing = true; //
}
function saveData(row) { function saveData(row) {
// ... // ...
row.editing = false; // row.editing = false; //
} }
function ifselectable(row, index){ function ifselectable(row, index) {
let flag = true; let flag = true;
console.log(selectedModelList.value); console.log(selectedModelList.value);
if(selectedModelList.value.length > 0){ if (selectedModelList.value.length > 0) {
selectedModelList.value.forEach(element => { selectedModelList.value.forEach(element => {
if(element.id == row.id){ if (element.id == row.id) {
flag = false; flag = false;
} }
}); });
}
return flag;
} }
return flag;
}
function selectRadio(row){ function selectRadio(row) {
if (!updateModelIds.value.includes(row.id)) { if (!updateModelIds.value.includes(row.id)) {
updateModelIds.value.push(row.id); updateModelIds.value.push(row.id);
}
} }
}
function getOldModelParams(){ function getOldModelParams() {
listModelparam(queryParams.value).then(response => { listModelparam(queryParams.value).then(response => {
// oldSelectedList.value = response.rows; // oldSelectedList.value = response.rows;
}); });
} }
getTreeselect(); getTreeselect();
getModelTypeList(); getModelTypeList();
getOldModelParams(); getOldModelParams();
</script> </script>

4
src/views/model/devicemodel/index.vue

@ -254,10 +254,6 @@ function getTreeselect() {
devicemodelOptions.value.push(data); devicemodelOptions.value.push(data);
}); });
} }
<<<<<<< HEAD
=======
>>>>>>> 4581b8b996797432f97cb021b35b194e99980dd9
// //
function cancel() { function cancel() {
open.value = false; open.value = false;

Loading…
Cancel
Save