diff --git a/src/api/model/paramclass.js b/src/api/model/paramclass.js index 1f2f0f2..b1ffda2 100644 --- a/src/api/model/paramclass.js +++ b/src/api/model/paramclass.js @@ -46,7 +46,7 @@ export function delParamclass(id) { // 导出参数模型信息 export function exportParamclass(query) { return request({ - url: '/${baseUrl}/export', + url: '/model/dcModelParamclass/export', method: 'get', params: query }) diff --git a/src/api/model/params.js b/src/api/model/params.js index 0ce93c9..254902b 100644 --- a/src/api/model/params.js +++ b/src/api/model/params.js @@ -58,4 +58,13 @@ export function exportParams(query) { method: 'get', params: query }) +} + +//获取列表带筛选值 +export function listWithFilterColumn(data){ + return request({ + url: '/model/dcBaseDeviceParam/listWithFilterColumn', + method: 'post', + data: data + }); } \ No newline at end of file diff --git a/src/assets/styles/self-defined.scss b/src/assets/styles/self-defined.scss index 694dba6..be08790 100644 --- a/src/assets/styles/self-defined.scss +++ b/src/assets/styles/self-defined.scss @@ -205,3 +205,32 @@ text-align: right!important; } } + +.fixed-column-toggle { + position: absolute; + left: 0; + top: 50%; + transform: translateY(-50%); + } + .fixed-column-header { + display: flex; + align-items: center; + i { + margin-right: 5px; + } + } + .my-custom-form .el-form-item { + .el-select{ + width:100%; + } + margin-right: 0 !important; + width: 96%; + } + + .paddingBothLeftRight{ + >div{ + padding: 0 20px; + } + } + + diff --git a/src/views/model/alert/deviceparamalert.vue b/src/views/model/alert/deviceparamalert.vue index 2977b1f..f1c8e55 100644 --- a/src/views/model/alert/deviceparamalert.vue +++ b/src/views/model/alert/deviceparamalert.vue @@ -1,6 +1,6 @@ <template> <div class="app-container"> - <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="120px"> + <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="90px" class="my-custom-form"> <el-row> <el-col :span="4"> <el-form-item label="中台设备ID" prop="deviceUuid"> @@ -83,10 +83,16 @@ <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> </el-row> - <el-table ref="deviceParamsTable" v-loading="loading" :data="alertList" :border="true" :column-width-draggable="true"> - <el-table-column type="selection" width="55" align="center" /> + <el-table ref="deviceParamsTable" v-loading="loading" :data="alertList" @selection-change="handleSelectionChange" :max-height="tableHeight" :border="true" :column-width-draggable="true"> + <el-table-column type="selection" width="55" align="center" fixed="left" /> <!-- <el-table-column label="主键" align="center" prop="id" /> --> - <el-table-column label="中台设备ID" align="center" prop="deviceUuid"/> + <el-table-column label="中台设备ID" align="center" prop="deviceUuid" :fixed="fixedColumns?'left':false"> + <template #header> + <div class="fixed-column-header" style="text-align: center;display: block;" @dblclick="toggleFixedColumns"> + <span style="text-align: center;display: block;">操作<img style="width:10px;margin-left:5px" v-show="fixedColumns" :src="lock" alt="Image"/></span> + </div> + </template> + </el-table-column> <el-table-column label="设备名称" align="center" prop="deviceName" :width="120"/> <el-table-column label="参数名称" align="center" prop="paramName" :width="120"/> <el-table-column label="参数类型" align="center" prop="paramType" :width="120"> @@ -100,7 +106,12 @@ <el-switch v-model="scope.row.enabled" :active-value="1" :inactive-value="0" @change="changeEnabled(scope.row)"/> </template> </el-table-column> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" :width="300" :fixed="fixedColumns?'right':false"> + <template #header> + <div class="fixed-column-header" style="text-align: center;display: block;" @dblclick="toggleFixedColumns"> + <span style="text-align: center;display: block;">操作<img style="width:10px;margin-left:5px" v-show="fixedColumns" :src="lock" alt="Image"/></span> + </div> + </template> <template #default="scope"> <el-button type="text" @@ -122,6 +133,7 @@ v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" + class="paddingBothLeftRight" /> <!-- 添加或修改设备告警对话框 --> @@ -251,7 +263,7 @@ <el-row v-show="tableVisiable"> <el-col> <el-table ref="policyTable" v-loading="loading" :data="modelList" :row-key="getRowKey" @selection-change="handleSelectionChange" > - <el-table-column type="selection" reserve-selection="true" width="55" align="center" /> + <el-table-column type="selection" reserve-selection="true" width="55" align="center" fixed="left" /> <el-table-column label="名称" align="center" prop="name"/> <el-table-column label="符号" align="center" prop="code" :width="120"/> <el-table-column label="运算符" align="center" prop="operator" :width="120"> @@ -330,6 +342,7 @@ import { listMethod } from "@/api/model/method"; import { listModelEnabledNoPage } from "@/api/model/alertmodel"; import { ElMessageBox } from 'element-plus'; import {listPolicyInfo,updatePolicy,updatePolicyBatch,addPolicy,addPolicyBatch,listAlertParamSelect } from "@/api/model/policy"; +import lock from "@/assets/icons/svg/lock.svg"; const { proxy } = getCurrentInstance(); const router = useRouter(); const { operator_sign,dc_param_value_type,dc_alert_level } = proxy.useDict('operator_sign','dc_param_value_type','dc_alert_level'); @@ -368,6 +381,12 @@ const dialogWidth = ref('1600px'); const queryModel = ref({}); const levelVisiable = ref(false); const nameVisiable = ref(false); +const fixedColumns = ref(false); +const tableHeight = ref("0px"); +const sortItemMap = ref({}); +const queryParamFilter = ref({}); +const sortProps = ref([]); +const collapseVisible = ref(false); const alert_value = ref([ {label: '1', value: true, elTagType: 'default', elTagClass: null}, {label: '0', value: false, elTagType: 'default', elTagClass: null} @@ -1089,6 +1108,42 @@ function levelChange(value){ } +function toggleFixedColumns() { + fixedColumns.value = !fixedColumns.value; +} + + +onMounted(()=>{ + calculateTableHeight(); + window.addEventListener('resize', calculateTableHeight); + window.onresize = () => { + return (() => { + calculateTableHeight(); + })() + } +}) + +onUnmounted(() => { + window.removeEventListener('resize', calculateTableHeight); +}); +watch( + [collapseVisible,showSearch], + () => { + calculateTableHeight(); + } +); +const calculateTableHeight = () => { + nextTick(() => { + const heightForm = proxy.$refs.queryRef?.$el.clientHeight||0; + const windowHeight = window.innerHeight; + const paginationHeight = 60; + const tableHeaderHeight = 40; + const tableMargin = 20; + const remainingHeight = windowHeight - paginationHeight - tableHeaderHeight - tableMargin - heightForm - 100; + tableHeight.value = remainingHeight + 'px'; + }); +}; + getList(); diff --git a/src/views/model/alert/logicconfig.vue b/src/views/model/alert/logicconfig.vue index b01c83d..833f0ab 100644 --- a/src/views/model/alert/logicconfig.vue +++ b/src/views/model/alert/logicconfig.vue @@ -1,40 +1,49 @@ <template> <div class="app-container"> - <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="120px"> - <el-form-item label="逻辑编码" prop="logicCode"> - <el-select v-model="queryParams.logicCode" placeholder="请选择逻辑编码" clearable> - <el-option - v-for="dict in dc_alert_logic" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item label="参数变量类型" prop="paramValueType"> - <el-select v-model="queryParams.paramValueType" placeholder="请选择参数变量类型" clearable> - <el-option - v-for="dict in dc_param_value_type" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item label="备注" prop="note"> - <el-input - v-model="queryParams.note" - placeholder="请输入备注" - clearable - @keyup.enter="handleQuery" - /> - </el-form-item> - <el-form-item> - <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> - <el-button type="info" plain icon="Refresh" @click="resetQuery">重置</el-button> - </el-form-item> + <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="120px" class="my-custom-form"> + <el-row> + <el-col :span="4"> + <el-form-item label="参数变量类型" prop="paramValueType"> + <el-select v-model="queryParams.paramValueType" placeholder="请选择参数变量类型" clearable> + <el-option + v-for="dict in dc_param_value_type" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item label="逻辑编码" prop="logicCode"> + <el-select v-model="queryParams.logicCode" placeholder="请选择逻辑编码" clearable> + <el-option + v-for="dict in dc_alert_logic" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item label="备注" prop="note"> + <el-input + v-model="queryParams.note" + placeholder="请输入备注" + clearable + @keyup.enter="handleQuery" + /> + </el-form-item> + </el-col> + <el-col :span="6" > + <el-form-item class="childTextAlignRight"> + <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> + <el-button type="info" plain icon="Refresh" @click="resetQuery">重置</el-button> + </el-form-item> + </el-col> + </el-row> </el-form> - <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> <el-button @@ -66,9 +75,8 @@ </el-col> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> </el-row> - - <el-table v-loading="loading" :data="logicconfigList" @selection-change="handleSelectionChange"> - <el-table-column type="selection" width="55" align="center" /> + <el-table v-loading="loading" :data="logicconfigList" @selection-change="handleSelectionChange" :max-height="tableHeight" :border="true" :column-width-draggable="true"> + <el-table-column type="selection" width="55" align="center" fixed="left"/> <el-table-column label="主键" align="center" prop="id" /> <el-table-column label="逻辑编码" align="center" prop="logicCode"> <template #default="scope"> @@ -81,7 +89,12 @@ </template> </el-table-column> <el-table-column label="备注" align="center" prop="note" /> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" :width="200" :fixed="fixedColumns?'right':false"> + <template #header> + <div class="fixed-column-header" style="text-align: center;display: block;" @dblclick="toggleFixedColumns"> + <span style="text-align: center;display: block;">操作<img style="width:10px;margin-left:5px" v-show="fixedColumns" :src="lock" alt="Image"/></span> + </div> + </template> <template #default="scope"> <el-button type="text" @@ -103,42 +116,13 @@ v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" + class="paddingBothLeftRight" /> <!-- 添加或修改告警逻辑对话框 --> <el-dialog :title="title" v-model="open" width="800px" append-to-body> <el-form ref="logicconfigRef" :model="form" :rules="rules" label-width="120px"> -<el-row> - <el-col :span="12"> - <el-form-item label="逻辑编码" prop="logicCode"> - <el-select v-model="form.logicCode" placeholder="请选择逻辑编码"> - <el-option - v-for="dict in dc_alert_logic" - :key="dict.value" - :label="dict.label" -:value="dict.value" ></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="参数变量类型" prop="paramValueType"> - <el-select v-model="form.paramValueType" placeholder="请选择参数变量类型"> - <el-option - v-for="dict in dc_param_value_type" - :key="dict.value" - :label="dict.label" -:value="dict.value" ></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="备注" prop="note"> - <el-input v-model="form.note" placeholder="请输入备注" /> - </el-form-item> - </el-col> - - </el-row> </el-form> <template #footer> <div class="dialog-footer"> @@ -149,10 +133,12 @@ </el-dialog> </div> </template> - +<style lang="scss" > + @import "@/assets/styles/self-defined.scss"; +</style> <script setup name="Logicconfig"> import { listLogicconfig, getLogicconfig, delLogicconfig, addLogicconfig, updateLogicconfig } from "@/api/model/logicconfig"; - +import lock from "@/assets/icons/svg/lock.svg"; const { proxy } = getCurrentInstance(); const { dc_alert_logic, dc_param_value_type } = proxy.useDict('dc_alert_logic', 'dc_param_value_type'); @@ -165,7 +151,13 @@ const single = ref(true); const multiple = ref(true); const total = ref(0); const title = ref(""); - +const fixedColumns = ref(false); +const tableHeight = ref("0px"); +const sortItemMap = ref({}); +const queryParamFilter = ref({}); +const sortProps = ref([]); +const collapseVisible = ref(false); +const editName = ref("更多筛选项"); const data = reactive({ form: {}, queryParams: { @@ -294,5 +286,41 @@ function handleExport() { }, `logicconfig_${new Date().getTime()}.xlsx`) } + +function toggleFixedColumns() { + fixedColumns.value = !fixedColumns.value; +} + +onMounted(()=>{ + calculateTableHeight(); + window.addEventListener('resize', calculateTableHeight); + window.onresize = () => { + return (() => { + calculateTableHeight(); + })() + } +}) + +onUnmounted(() => { + window.removeEventListener('resize', calculateTableHeight); +}); +watch( + [collapseVisible,showSearch], + () => { + calculateTableHeight(); + } +); +const calculateTableHeight = () => { + nextTick(() => { + const heightForm = proxy.$refs.queryRef?.$el.clientHeight||0; + const windowHeight = window.innerHeight; + const paginationHeight = 60; + const tableHeaderHeight = 40; + const tableMargin = 20; + const remainingHeight = windowHeight - paginationHeight - tableHeaderHeight - tableMargin - heightForm - 100; + tableHeight.value = remainingHeight + 'px'; + }); +}; + getList(); </script> diff --git a/src/views/model/alert/method.vue b/src/views/model/alert/method.vue index 19c8254..d1bf495 100644 --- a/src/views/model/alert/method.vue +++ b/src/views/model/alert/method.vue @@ -1,6 +1,6 @@ <template> <div class="app-container"> - <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="100px"> + <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="100px" class="my-custom-form"> <el-row> <el-col :span="4"> <el-form-item label="策略名称" prop="methodName"> @@ -24,7 +24,7 @@ </el-select> </el-form-item> </el-col> - <el-col :span="4"> + <el-col :span="6"> <el-form-item class="childTextAlignCenter"> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="info" plain icon="Refresh" @click="resetQuery">重置</el-button> @@ -64,8 +64,8 @@ <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> </el-row> - <el-table v-loading="loading" :data="methodList" @selection-change="handleSelectionChange"> - <el-table-column type="selection" width="55" align="center" /> + <el-table v-loading="loading" :data="methodList" @selection-change="handleSelectionChange" :max-height="tableHeight" :border="true" :column-width-draggable="true"> + <el-table-column type="selection" width="55" align="center" fixed="left"/> <el-table-column label="主键" align="center" prop="id" /> <el-table-column label="策略名称" align="center" prop="methodName" /> <el-table-column label="是否有效" align="center" prop="flagEnabled" > @@ -73,7 +73,12 @@ <dict-tag :options="flagEnabledTable" :value="scope.row.flagEnabled"/> </template> </el-table-column> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" :width="200" :fixed="fixedColumns?'right':false"> + <template #header> + <div class="fixed-column-header" style="text-align: center;display: block;" @dblclick="toggleFixedColumns"> + <span style="text-align: center;display: block;">操作<img style="width:10px;margin-left:5px" v-show="fixedColumns" :src="lock" alt="Image"/></span> + </div> + </template> <template #default="scope"> <el-button type="text" @@ -95,6 +100,7 @@ v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" + class="paddingBothLeftRight" /> <!-- 添加或修改告警方式对话框 --> @@ -136,9 +142,8 @@ </style> <script setup name="Method"> import { listMethod, getMethod, delMethod, addMethod, updateMethod } from "@/api/model/method"; - +import lock from "@/assets/icons/svg/lock.svg"; const { proxy } = getCurrentInstance(); - const methodList = ref([]); const open = ref(false); const loading = ref(true); @@ -148,6 +153,13 @@ const single = ref(true); const multiple = ref(true); const total = ref(0); const title = ref(""); +const fixedColumns = ref(false); +const tableHeight = ref("0px"); +const sortItemMap = ref({}); +const queryParamFilter = ref({}); +const sortProps = ref([]); +const collapseVisible = ref(false); +const editName = ref("更多筛选项"); const flagEnabledTable = ref([ {label: '可用', value: 'true', elTagType: 'default', elTagClass: null}, {label: '不可用', value: 'false', elTagType: 'default', elTagClass: null} @@ -282,5 +294,41 @@ function handleExport() { }, `method_${new Date().getTime()}.xlsx`) } +function toggleFixedColumns() { + fixedColumns.value = !fixedColumns.value; +} + +onMounted(()=>{ + calculateTableHeight(); + window.addEventListener('resize', calculateTableHeight); + window.onresize = () => { + return (() => { + calculateTableHeight(); + })() + } +}) + +onUnmounted(() => { + window.removeEventListener('resize', calculateTableHeight); +}); +watch( + [collapseVisible,showSearch], + () => { + calculateTableHeight(); + } +); +const calculateTableHeight = () => { + nextTick(() => { + const heightForm = proxy.$refs.queryRef?.$el.clientHeight||0; + const windowHeight = window.innerHeight; + const paginationHeight = 60; + const tableHeaderHeight = 40; + const tableMargin = 20; + const remainingHeight = windowHeight - paginationHeight - tableHeaderHeight - tableMargin - heightForm - 100; + tableHeight.value = remainingHeight + 'px'; + }); +}; + + getList(); </script> diff --git a/src/views/model/alert/model.vue b/src/views/model/alert/model.vue index 203e682..3d3d38e 100644 --- a/src/views/model/alert/model.vue +++ b/src/views/model/alert/model.vue @@ -1,6 +1,6 @@ <template> <div class="app-container"> - <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="120px"> + <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="100px" class="my-custom-form"> <el-row> <el-col :span="4"> <el-form-item label="参数数据类型" prop="paramType"> @@ -14,6 +14,18 @@ </el-select> </el-form-item> </el-col> + <el-col :span="4"> + <el-form-item label="是否有效" prop="flagEnabled"> + <el-select v-model="queryParams.flagEnabled" placeholder="请选择是否有效" clearable> + <el-option + v-for="dict in flagEnabled" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> + </el-form-item> + </el-col> <el-col :span="4"> <el-form-item label="代码" prop="code"> <el-input @@ -25,61 +37,57 @@ </el-form-item> </el-col> <el-col :span="4"> - + <el-form-item label="级别" prop="level"> + <el-select v-model="form.level" placeholder="请选择告警级别"> + <el-option + v-for="dict in dc_alert_level" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> + <el-form-item label="运算符" prop="operator"> + <el-select v-model="queryParams.operator" placeholder="请选择运算符" clearable> + <el-option + v-for="dict in operator_sign" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> + <el-form-item label="名称" prop="name"> + <el-input + v-model="queryParams.name" + placeholder="请输入名称" + clearable + @keyup.enter="handleQuery" + /> + </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> + <el-form-item label="值" prop="value"> + <el-input + v-model="queryParams.value" + placeholder="请输入值" + clearable + @keyup.enter="handleQuery" + /> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item class="childTextAlignRight"> + <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> + <el-button type="info" plain icon="Refresh" @click="resetQuery">重置</el-button> + <el-button @click="toggleCollapse">{{editName}}</el-button> + </el-form-item> </el-col> </el-row> - - - <el-form-item label="是否有效" prop="flagEnabled"> - <el-select v-model="queryParams.flagEnabled" placeholder="请选择是否有效" clearable> - <el-option - v-for="dict in flagEnabled" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item label="级别" prop="level"> - <el-select v-model="form.level" placeholder="请选择告警级别"> - <el-option - v-for="dict in dc_alert_level" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item label="运算符" prop="operator"> - <el-select v-model="queryParams.operator" placeholder="请选择运算符" clearable> - <el-option - v-for="dict in operator_sign" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item label="名称" prop="name"> - <el-input - v-model="queryParams.name" - placeholder="请输入名称" - clearable - @keyup.enter="handleQuery" - /> - </el-form-item> - <el-form-item label="值" prop="value"> - <el-input - v-model="queryParams.value" - placeholder="请输入值" - clearable - @keyup.enter="handleQuery" - /> - </el-form-item> - <el-form-item class="childTextAlignCenter"> - <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> - <el-button type="info" plain icon="Refresh" @click="resetQuery">重置</el-button> - </el-form-item> </el-form> <el-row :gutter="10" class="mb8"> @@ -114,8 +122,8 @@ <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> </el-row> - <el-table ref="modelTable" v-loading="loading" :data="modelList" @selection-change="handleSelectionChange"> - <el-table-column type="selection" width="55" align="center" /> + <el-table ref="modelTable" v-loading="loading" :data="modelList" @selection-change="handleSelectionChange" :max-height="tableHeight" :border="true" :column-width-draggable="true"> + <el-table-column type="selection" width="55" align="center" fixed="left" /> <el-table-column label="主键" align="center" prop="id" /> <el-table-column label="参数数据类型" align="center" prop="paramType" > <template #default="scope"> @@ -141,7 +149,12 @@ </el-table-column> <el-table-column label="名称" align="center" prop="name" /> <el-table-column label="值" align="center" prop="value" /> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" :width="200" :fixed="fixedColumns?'right':false"> + <template #header> + <div class="fixed-column-header" style="text-align: center;display: block;" @dblclick="toggleFixedColumns"> + <span style="text-align: center;display: block;">操作<img style="width:10px;margin-left:5px" v-show="fixedColumns" :src="lock" alt="Image"/></span> + </div> + </template> <template #default="scope"> <el-button type="text" @@ -163,6 +176,7 @@ v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" + class="paddingBothLeftRight" /> <!-- 添加或修改告警模版对话框 --> @@ -266,6 +280,7 @@ <script setup name="Model"> import { listModel,listModelEnabledNoPage, getModel, delModel, addModel, updateModel } from "@/api/model/alertmodel"; import { ElMessageBox } from 'element-plus'; +import lock from "@/assets/icons/svg/lock.svg"; const { proxy } = getCurrentInstance(); const { dc_param_value_type,operator_sign,dc_alert_level } = proxy.useDict('dc_param_value_type','operator_sign','dc_alert_level'); const modelList = ref([]); @@ -284,6 +299,13 @@ const codeVisiable = ref(true); const sortVisiable = ref(true); const operatorVisiable = ref(true); const operatorDisabled = ref(false); +const fixedColumns = ref(false); +const tableHeight = ref("0px"); +const sortItemMap = ref({}); +const queryParamFilter = ref({}); +const sortProps = ref([]); +const collapseVisible = ref(false); +const editName = ref("更多筛选项"); const flagEnabled = ref([ {label: '有效', value: 1, elTagType: 'default', elTagClass: null}, {label: '无效', value: 0, elTagType: 'default', elTagClass: null} @@ -598,6 +620,42 @@ function handleBlurFlagEnabled(value){ } +function toggleFixedColumns() { + fixedColumns.value = !fixedColumns.value; +} + +onMounted(()=>{ + calculateTableHeight(); + window.addEventListener('resize', calculateTableHeight); + window.onresize = () => { + return (() => { + calculateTableHeight(); + })() + } +}) + +onUnmounted(() => { + window.removeEventListener('resize', calculateTableHeight); +}); +watch( + [collapseVisible,showSearch], + () => { + calculateTableHeight(); + } +); +const calculateTableHeight = () => { + nextTick(() => { + const heightForm = proxy.$refs.queryRef?.$el.clientHeight||0; + const windowHeight = window.innerHeight; + const paginationHeight = 60; + const tableHeaderHeight = 40; + const tableMargin = 20; + const remainingHeight = windowHeight - paginationHeight - tableHeaderHeight - tableMargin - heightForm - 100; + tableHeight.value = remainingHeight + 'px'; + }); +}; + + getList(); </script> diff --git a/src/views/model/alert/policy.vue b/src/views/model/alert/policy.vue index a45a946..2edac93 100644 --- a/src/views/model/alert/policy.vue +++ b/src/views/model/alert/policy.vue @@ -1,6 +1,6 @@ <template> <div class="app-container"> - <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="100px"> + <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px" class="my-custom-form" > <el-row> <el-col :span="4"> <el-form-item label="数据类型" prop="paramType"> @@ -15,10 +15,10 @@ </el-form-item> </el-col> <el-col :span="4"> - <el-form-item label="开始值" prop="beginValue"> + <el-form-item label="界限值" prop="beginValue"> <el-input v-model="queryParams.beginValue" - placeholder="请输入开始值" + placeholder="请输入界限值" clearable @keyup.enter="handleQuery" /> @@ -36,7 +36,7 @@ </el-select> </el-form-item> </el-col> - <el-col :span="4"> + <el-col :span="4" v-show="collapseVisible"> <el-form-item label="策略ID" prop="alertId"> <el-input v-model="queryParams.alertId" @@ -46,7 +46,7 @@ /> </el-form-item> </el-col> - <el-col :span="4"> + <el-col :span="4" v-show="collapseVisible"> <el-form-item label="状态值" prop="statusValue"> <el-input v-model="queryParams.statusValue" @@ -56,16 +56,14 @@ /> </el-form-item> </el-col> - <el-col :span="4"> + <el-col :span="4" v-show="collapseVisible"> <el-form-item label="状态类型" prop="statusType"> <el-select v-model="queryParams.statusType" placeholder="请选择状态类型" clearable> <el-option label="请选择字典生成" value="" /> </el-select> </el-form-item> </el-col> - </el-row> - <el-row> - <el-col :span="4"> + <el-col :span="4" v-show="collapseVisible"> <el-form-item label="中台设备ID" prop="deviceId"> <el-input v-model="queryParams.deviceId" @@ -75,12 +73,12 @@ /> </el-form-item> </el-col> - <el-col :span="4"> + <el-col :span="4" v-show="collapseVisible"> <el-form-item label="排序" prop="sortId"> <el-input-number v-model="queryParams.sortId" :min="1" :max="1000" /> </el-form-item> </el-col> - <el-col :span="4"> + <el-col :span="4" v-show="collapseVisible"> <el-form-item label="告警方式" prop="methodId"> <el-select v-model="queryParams.methodId" placeholder="请选择告警方式ID" clearable> <el-option @@ -92,10 +90,11 @@ </el-select> </el-form-item> </el-col> - <el-col :span="4" class="textaligncenter"> + <el-col :span="6" class="childTextAlignRight"> <el-form-item> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="info" plain icon="Refresh" @click="resetQuery">重置</el-button> + <el-button @click="toggleCollapse">{{editName}}</el-button> </el-form-item> </el-col> </el-row> @@ -112,8 +111,8 @@ <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> </el-row> - <el-table v-loading="loading" :data="policyList" @selection-change="handleSelectionChange"> - <el-table-column type="selection" width="55" align="center" /> + <el-table v-loading="loading" :data="policyList" @selection-change="handleSelectionChange" :max-height="tableHeight" :border="true" :column-width-draggable="true"> + <el-table-column type="selection" width="55" align="center" fixed="left"/> <el-table-column label="主键" align="center" prop="id" /> <el-table-column label="设备名称" align="center" prop="deviceName" :width="120"/> <el-table-column label="中台设备ID" align="center" prop="deviceId" /> @@ -144,20 +143,6 @@ <span>{{ getMethodName(scope.row.methodId) }}</span> </template> </el-table-column> - <!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> - <template #default="scope"> - <el-button - type="text" - icon="Edit" - @click="handleUpdate(scope.row)" - >修改</el-button> - <el-button - type="text" - icon="Delete" - @click="handleDelete(scope.row)" - >删除</el-button> - </template> - </el-table-column> --> </el-table> <pagination @@ -166,6 +151,7 @@ v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" + class="paddingBothLeftRight" /> <!-- 添加或修改参数值状态策略对话框 --> @@ -255,6 +241,13 @@ const total = ref(0); const title = ref(""); const methodList = ref([]); const deviceUuid = ref(""); +const fixedColumns = ref(false); +const tableHeight = ref("0px"); +const sortItemMap = ref({}); +const queryParamFilter = ref({}); +const sortProps = ref([]); +const collapseVisible = ref(false); +const editName = ref("更多筛选项"); const alertFlag = ref([ {label: '告警', value: 'true', elTagType: 'default', elTagClass: null}, {label: '不告警', value: 'false', elTagType: 'default', elTagClass: null} @@ -347,23 +340,6 @@ function handleSelectionChange(selection) { multiple.value = !selection.length; } -// /** 新增按钮操作 */ -// function handleAdd() { -// reset(); -// open.value = true; -// title.value = "添加参数值状态策略"; -// } - -// /** 修改按钮操作 */ -// function handleUpdate(row) { -// reset(); -// const _id = row.id || ids.value -// getPolicy(_id).then(response => { -// form.value = response.data; -// open.value = true; -// title.value = "修改参数值状态策略"; -// }); -// } /** 提交按钮 */ function submitForm() { @@ -386,16 +362,6 @@ function submitForm() { }); } -// /** 删除按钮操作 */ -// function handleDelete(row) { -// const _ids = row.id || ids.value; -// proxy.$modal.confirm('是否确认删除参数值状态策略编号为"' + _ids + '"的数据项?').then(function() { -// return delPolicy(_ids); -// }).then(() => { -// getList(); -// proxy.$modal.msgSuccess("删除成功"); -// }).catch(() => {}); -// } /** 导出按钮操作 */ function handleExport() { @@ -425,6 +391,43 @@ function getMethodName(methodId){ return methodNameTable; } + +function toggleFixedColumns() { + fixedColumns.value = !fixedColumns.value; +} + +onMounted(()=>{ + calculateTableHeight(); + window.addEventListener('resize', calculateTableHeight); + window.onresize = () => { + return (() => { + calculateTableHeight(); + })() + } +}) + +onUnmounted(() => { + window.removeEventListener('resize', calculateTableHeight); +}); +watch( + [collapseVisible,showSearch], + () => { + calculateTableHeight(); + } +); +const calculateTableHeight = () => { + nextTick(() => { + const heightForm = proxy.$refs.queryRef?.$el.clientHeight||0; + const windowHeight = window.innerHeight; + const paginationHeight = 60; + const tableHeaderHeight = 40; + const tableMargin = 20; + const remainingHeight = windowHeight - paginationHeight - tableHeaderHeight - tableMargin - heightForm - 100; + tableHeight.value = remainingHeight + 'px'; + }); +}; + + initializeDeviceUuid(); getList(); getMethodList(); diff --git a/src/views/model/device/index.vue b/src/views/model/device/index.vue index 306a1fc..8d097b3 100644 --- a/src/views/model/device/index.vue +++ b/src/views/model/device/index.vue @@ -23,7 +23,7 @@ </el-form-item> </el-col> <el-col :span="4"> - <el-form-item label="通讯来源类型" prop="deviceSource"> + <el-form-item label="通讯来源类型" prop="deviceSourceId"> <el-select v-model="queryParams.deviceSourceId" placeholder="请选择通讯来源类型" clearable> <el-option v-for="dict in dc_device_source" @@ -42,8 +42,6 @@ check-strictly :default-expand-all="true" clearable/> </el-form-item> </el-col> - <!-- <el-collapse-transition> - <div v-show="collapseVisible"> --> <el-col :span="4" v-show="collapseVisible"> <el-form-item label="是否可用" prop="enabledFlag"> <el-select v-model="queryParams.enabledFlag" placeholder="请选择是否可用" clearable> @@ -128,8 +126,6 @@ /> </el-form-item> </el-col> - <!-- </el-row> - <el-row> --> <el-col :span="4" v-show="collapseVisible"> <el-form-item label="经度" prop="lagValue"> <el-input @@ -168,8 +164,6 @@ </el-col> <el-col :span="2"> </el-col> - <!-- </div> - </el-collapse-transition> --> <el-col :span="6"> <el-form-item class="childTextAlignRight"> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> @@ -179,7 +173,6 @@ </el-col> </el-row> </el-form> - <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> <el-button @@ -188,13 +181,6 @@ @click="handleAdd" >新增</el-button> </el-col> - <!-- <el-col :span="1.5"> - <el-button - type="success" - icon="Edit" - @click="handleUpdate" - >修改</el-button> - </el-col> --> <el-col :span="1.5"> <el-button type="success" @@ -214,8 +200,8 @@ </el-row> <el-table ref="deviceTable" v-loading="loading" :data="deviceList" @selection-change="handleSelectionChange" @sort-change="sortChange" @filter-change="filterChange" :max-height="tableHeight" :border="true" :column-width-draggable="true"> <el-table-column type="selection" width="55" align="center" fixed="left"/> - <el-table-column label="中台设备编码" align="center" prop="centerDeviceCode" :width="150"/> - <el-table-column label="设备名称" align="center" prop="deviceName" :width="120" sortable/> + <el-table-column label="中台设备编码" align="center" prop="centerDeviceCode" :width="150" sortable/> + <el-table-column label="设备名称" align="center" prop="deviceName" :width="150" sortable/> <el-table-column label="通讯来源类型" align="center" prop="deviceSource" :width="150" column-key="deviceSource" filter-placement="bottom-end" :filters="getfilterNameItem('deviceSource')" :filter-method="filterMethod" sortable/> <el-table-column label="是否可用" align="center" prop="enabledFlag" :width="120" column-key="enabledFlag" filter-placement="bottom-end" @@ -249,10 +235,10 @@ :filters="getfilterNameItem('deviceModelId')" :filter-method="filterMethod" sortable> </el-table-column> <el-table-column label="租户号" align="center" prop="tentantId" :width="120" sortable/> - <el-table-column label="设备分组" align="center" prop="deviceGroupName" :width="120" column-key="deviceGroupName" filter-placement="bottom-end" + <el-table-column label="设备分组" align="center" prop="deviceGroupName" :width="150" column-key="deviceGroupName" filter-placement="bottom-end" :filters="getfilterNameItem('deviceGroupName')" :filter-method="filterMethod" sortable/> <el-table-column label="设备排序" align="center" prop="sort" :width="120" sortable/> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width" :width="300" :fixed="fixedColumns?'right':false"> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" :width="300" :fixed="fixedColumns?'right':false"> <template #header> <div class="fixed-column-header" style="text-align: center;display: block;" @dblclick="toggleFixedColumns"> <span style="text-align: center;display: block;">操作<img style="width:10px;margin-left:5px" v-show="fixedColumns" :src="lock" alt="Image"/></span> @@ -283,8 +269,8 @@ v-model:page="params.pageNum" v-model:limit="params.pageSize" @pagination="getList" + class="paddingBothLeftRight" /> - <!-- 添加或修改设备信息对话框 --> <el-dialog :title="title" v-model="open" width="800px" append-to-body> <el-form ref="deviceRef" :model="form" :rules="rules" label-width="125px"> @@ -305,8 +291,8 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="通讯来源类型" prop="deviceSource"> - <el-select v-model="form.deviceSource" placeholder="请选择是否可用" @change="deviceSourceChange"> + <el-form-item label="通讯来源类型" prop="deviceSourceId"> + <el-select v-model="form.deviceSourceId" placeholder="请选择是否可用" @change="deviceSourceChange"> <el-option v-for="dict in dc_device_source" :key="dict.value" @@ -488,12 +474,11 @@ const collapseVisible = ref(false); const editName = ref("更多筛选项"); const deptOptions = ref([]); const disabled = ref(false); -const fixedColumns = ref(true); +const fixedColumns = ref(false); const tableHeight = ref("0px"); const sortItemMap = ref({}); const queryParamFilter = ref({}); const sortProps = ref([]); - const enabledFlag = ref([ {label: '可用', value: true, elTagType: 'default', elTagClass: null}, {label: '不可用', value: false, elTagType: 'default', elTagClass: null} @@ -510,7 +495,6 @@ const alertEnabledTable = ref([ {label: '告警', value: 'true', elTagType: 'default', elTagClass: null}, {label: '不告警', value: 'false', elTagType: 'default', elTagClass: null} ]); - const data = reactive({ form: {}, params: { @@ -750,30 +734,25 @@ function selectDept(val){ function deviceSourceChange(val){ form.value.deviceSourceId=val; + dc_device_source.value.forEach(item=>{ + form.value.deviceSource=item.label; + }) +} + +function deviceTypeChange(val){ + let flag = false; + dc_device_type.value.forEach(item=>{ + if(item.value==val){ + flag = true; + form.value.deviceType=item.label; + } + }) } function toggleFixedColumns() { fixedColumns.value = !fixedColumns.value; } -// tableHeight.value = computed(() => { -// const windowHeight = window.innerHeight; -// const paginationHeight = 60; -// const tableHeaderHeight = 40; -// const tableMargin = 20; -// const remainingHeight = windowHeight - paginationHeight - tableHeaderHeight - tableMargin; -// debugger -// return remainingHeight + 'px'; -// }); -// const pageSizeRef = toRef(props, 'pageSize'); -// watch(pageSizeRef, (newSize) => { -// // 当分页条数变化时,重新计算表格高度 -// tableHeight.value = calculateTableHeight(); -// debugger; -// }); - - - onMounted(()=>{ calculateTableHeight(); window.addEventListener('resize', calculateTableHeight); @@ -806,8 +785,6 @@ const calculateTableHeight = () => { }; function getfilterNameItem(value){ - console.log("sortItemMap"); - console.log(sortItemMap); let result = ''; let resultItem = new Object(); if(value==='enabledFlag'){ diff --git a/src/views/model/paramclass/index.vue b/src/views/model/paramclass/index.vue index f38176d..2371e9e 100644 --- a/src/views/model/paramclass/index.vue +++ b/src/views/model/paramclass/index.vue @@ -1,253 +1,384 @@ -<template> - <div class="app-container"> - <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px"> - <el-form-item label="类别" prop="classType"> - <el-select v-model="queryParams.classType" placeholder="请选择类别" clearable> - <el-option v-for="dict in dc_class_type" :key="dict.value" :label="dict.label" :value="dict.value" /> - </el-select> - </el-form-item> - <!-- <el-form-item label="分区" prop="devicePartion"> - <el-select v-model="queryParams.devicePartion" placeholder="请选择分区" clearable> - <el-option v-for="dict in dc_device_partion" :key="dict.value" :label="dict.label" :value="dict.value" /> - </el-select> - </el-form-item> --> - <el-form-item> - <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> - <el-button type="info" plain icon="Refresh" @click="resetQuery">重置</el-button> - </el-form-item> - </el-form> - - <el-row :gutter="10" class="mb8"> - <el-col :span="1.5"> - <el-button type="success" icon="Plus" @click="handleAdd">新增</el-button> - </el-col> - <el-col :span="1.5"> - <el-button type="success" icon="Edit" @click="handleUpdate">修改</el-button> - </el-col> - <el-col :span="1.5"> - <el-button type="success" icon="Delete" @click="handleDelete">删除</el-button> - </el-col> - <el-col :span="1.5"> - <el-button type="warning" icon="Download" @click="handleExport">导出</el-button> - </el-col> - <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> - </el-row> - - <el-table v-loading="loading" :data="paramclassList" @selection-change="handleSelectionChange"> - <el-table-column type="selection" width="55" align="center" /> - <el-table-column label="ID" align="center" width="55" prop="id" /> - <el-table-column label="参数名称" align="center" prop="paramClassName" /> - <el-table-column label="参数编码" align="center" prop="paramClassCode" /> - <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" class-name="small-padding fixed-width"> - <template #default="scope"> - <el-button type="text" icon="Edit" @click="handleUpdate(scope.row)">修改</el-button> - <el-button type="text" icon="Delete" @click="handleDelete(scope.row)">删除</el-button> - </template> - </el-table-column> - </el-table> - - <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" - @pagination="getList" /> - - <!-- 添加或修改参数模型信息对话框 --> - <el-dialog :title="title" v-model="open" width="500px" append-to-body> - <el-form ref="paramclassRef" :model="form" :rules="rules" label-width="80px"> - - <el-row> - <el-col :span="24"> - <el-form-item label="参数名称" prop="paramClassName"> - <el-input v-model="form.paramClassName" placeholder="请输入参数名称" maxlength="30" /> - </el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="参数编码" prop="paramClassCode"> - <el-input v-model="form.paramClassCode" placeholder="请输入参数编码" maxlength="30" /> - </el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="类别" prop="classType"> - <el-select v-model="form.classType" placeholder="请选择类别"> - <el-option v-for="dict in dc_class_type" :key="dict.value" :label="dict.label" - :value="dict.value"></el-option> - </el-select> - </el-form-item> - </el-col> - <!-- <el-col :span="24"> - <el-form-item label="分区" prop="devicePartion"> - <el-select v-model="form.devicePartion" placeholder="请选择分区"> - <el-option v-for="dict in dc_device_partion" :key="dict.value" :label="dict.label" - :value="dict.value"></el-option> - </el-select> - </el-form-item> - </el-col> --> - - </el-row> - </el-form> - <template #footer> - <div class="dialog-footer"> - <el-button type="primary" @click="submitForm">确 定</el-button> - <el-button @click="cancel">取 消</el-button> - </div> - </template> - </el-dialog> - </div> -</template> - -<script setup name="Paramclass"> -import { listParamclass, getParamclass, delParamclass, addParamclass, updateParamclass } from "@/api/model/paramclass"; - -const { proxy } = getCurrentInstance(); -const { dc_class_type, dc_device_partion } = proxy.useDict('dc_class_type', 'dc_device_partion'); - -const paramclassList = ref([]); -const open = ref(false); -const loading = ref(true); -const showSearch = ref(true); -const ids = ref([]); -const single = ref(true); -const multiple = ref(true); -const total = ref(0); -const title = ref(""); - -const data = reactive({ - form: {}, - queryParams: { - pageNum: 1, - pageSize: 10, - createBy: null, - createTime: null, - paramClassName: null, - paramClassCode: null, - classType: null, - devicePartion: null, - }, - rules: { - } -}); - -const { queryParams, form, rules } = toRefs(data); - -/** 查询参数模型信息列表 */ -function getList() { - loading.value = true; - listParamclass(queryParams.value).then(response => { - paramclassList.value = response.rows; - total.value = response.total; - loading.value = false; - }); -} - -// 取消按钮 -function cancel() { - open.value = false; - reset(); -} - -// 表单重置 -function reset() { - form.value = { - tentantId: null, - revision: null, - createBy: null, - createTime: null, - updatedBy: null, - updatedTime: null, - id: null, - paramClassName: null, - paramClassCode: null, - classType: null, - devicePartion: null, - note: null - }; - proxy.resetForm("paramclassRef"); -} - -/** 搜索按钮操作 */ -function handleQuery() { - queryParams.value.pageNum = 1; - getList(); -} - -/** 重置按钮操作 */ -function resetQuery() { - proxy.resetForm("queryRef"); - handleQuery(); -} - -// 多选框选中数据 -function handleSelectionChange(selection) { - ids.value = selection.map(item => item.id); - single.value = selection.length != 1; - multiple.value = !selection.length; -} - -/** 新增按钮操作 */ -function handleAdd() { - reset(); - open.value = true; - title.value = "添加参数模型信息"; -} - -/** 修改按钮操作 */ -function handleUpdate(row) { - reset(); - const _id = row.id || ids.value - getParamclass(_id).then(response => { - form.value = response.data; - open.value = true; - title.value = "修改参数模型信息"; - }); -} - -/** 提交按钮 */ -function submitForm() { - proxy.$refs["paramclassRef"].validate(valid => { - if (valid) { - if (form.value.id != null) { - updateParamclass(form.value).then(response => { - proxy.$modal.msgSuccess("修改成功"); - open.value = false; - getList(); - }); - } else { - addParamclass(form.value).then(response => { - proxy.$modal.msgSuccess("新增成功"); - open.value = false; - getList(); - }); - } - } - }); -} - -/** 删除按钮操作 */ -function handleDelete(row) { - const _ids = row.id || ids.value; - proxy.$modal.confirm('是否确认删除参数模型信息编号为"' + _ids + '"的数据项?').then(function () { - return delParamclass(_ids); - }).then(() => { - getList(); - proxy.$modal.msgSuccess("删除成功"); - }).catch(() => { }); -} - -/** 导出按钮操作 */ -function handleExport() { - proxy.download('system/paramclass/export', { - ...queryParams.value - }, `paramclass_${new Date().getTime()}.xlsx`) -} - -getList(); -</script> +<template> + <div class="app-container"> + <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px" class="my-custom-form"> + <el-row> + <el-col :span="4"> + <el-form-item label="参数名称" prop="paramClassName"> + <el-input + v-model="queryParams.paramClassName" + placeholder="请输入参数名称" + clearable + @keyup.enter="handleQuery" + /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item label="参数编码" prop="paramClassCode"> + <el-input + v-model="queryParams.paramClassCode" + placeholder="请输入参数编码" + clearable + @keyup.enter="handleQuery" + /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item label="类别" prop="classType"> + <el-select v-model="queryParams.classType" placeholder="请选择类别" clearable> + <el-option + v-for="dict in dc_class_type" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item label="单位" prop="paramUnit"> + <el-select v-model="queryParams.paramUnit" placeholder="请选择单位" clearable> + <el-option + v-for="dict in dc_param_uint_type" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item class="childTextAlignCenter"> + <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> + <el-button type="info" plain icon="Refresh" @click="resetQuery">重置</el-button> + </el-form-item> + </el-col> + </el-row> + + + + + </el-form> + + <el-row :gutter="10" class="mb8"> + <el-col :span="1.5"> + <el-button + type="success" + icon="Plus" + @click="handleAdd" + >新增</el-button> + </el-col> + <el-col :span="1.5"> + <el-button + type="success" + icon="Edit" + @click="handleUpdate" + >修改</el-button> + </el-col> + <el-col :span="1.5"> + <el-button + type="success" + icon="Delete" + @click="handleDelete" + >删除</el-button> + </el-col> + <el-col :span="1.5"> + <el-button + type="warning" + icon="Download" + @click="handleExport" + >导出</el-button> + </el-col> + <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> + </el-row> + + <el-table v-loading="loading" :data="paramclassList" @selection-change="handleSelectionChange" :max-height="tableHeight" :border="true" :column-width-draggable="true"> + <el-table-column type="selection" width="55" align="center" fixed="left"/> + <el-table-column label="参数名称" align="center" prop="paramClassName" /> + <el-table-column label="参数编码" align="center" prop="paramClassCode" /> + <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="paramUnit"> + <template #default="scope"> + <dict-tag :options="dc_param_uint_type" :value="scope.row.paramUnit"/> + </template> + </el-table-column> + <el-table-column label="备注" align="center" prop="note" /> + <el-table-column label="主键" align="center" prop="id" /> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" :width="200" :fixed="fixedColumns?'right':false"> + <template #header> + <div class="fixed-column-header" style="text-align: center;display: block;" @dblclick="toggleFixedColumns"> + <span style="text-align: center;display: block;">操作<img style="width:10px;margin-left:5px" v-show="fixedColumns" :src="lock" alt="Image"/></span> + </div> + </template> + <template #default="scope"> + <el-button + type="text" + icon="Edit" + @click="handleUpdate(scope.row)" + >修改</el-button> + <el-button + type="text" + icon="Delete" + @click="handleDelete(scope.row)" + >删除</el-button> + </template> + </el-table-column> + </el-table> + + <pagination + v-show="total>0" + :total="total" + v-model:page="queryParams.pageNum" + v-model:limit="queryParams.pageSize" + @pagination="getList" + class="paddingBothLeftRight" + /> + + <!-- 添加或修改参数模型信息对话框 --> + <el-dialog :title="title" v-model="open" width="500px" append-to-body> + <el-form ref="paramclassRef" :model="form" :rules="rules" label-width="80px"> + +<el-row> + <el-col :span="12"> + <el-form-item label="参数名称" prop="paramClassName"> + <el-input v-model="form.paramClassName" placeholder="请输入参数名称" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="参数编码" prop="paramClassCode"> + <el-input v-model="form.paramClassCode" placeholder="请输入参数编码" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="类别" prop="classType"> + <el-select v-model="form.classType" placeholder="请选择类别"> + <el-option + v-for="dict in dc_class_type" + :key="dict.value" + :label="dict.label" +:value="dict.value" ></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="单位" prop="paramUnit"> + <el-select v-model="form.paramUnit" placeholder="请选择单位"> + <el-option + v-for="dict in dc_param_uint_type" + :key="dict.value" + :label="dict.label" +:value="dict.value" ></el-option> + </el-select> + </el-form-item> + </el-col> + + </el-row> + </el-form> + <template #footer> + <div class="dialog-footer"> + <el-button type="primary" @click="submitForm">确 定</el-button> + <el-button @click="cancel">取 消</el-button> + </div> + </template> + </el-dialog> + </div> +</template> +<style lang="scss" > + @import "@/assets/styles/self-defined.scss"; +</style> +<script setup name="Paramclass"> +import { listParamclass, getParamclass, delParamclass, addParamclass, updateParamclass } from "@/api/model/paramclass"; +import lock from "@/assets/icons/svg/lock.svg"; +const { proxy } = getCurrentInstance(); +const { dc_class_type, dc_param_uint_type } = proxy.useDict('dc_class_type', 'dc_param_uint_type'); + +const paramclassList = ref([]); +const open = ref(false); +const loading = ref(true); +const showSearch = ref(true); +const ids = ref([]); +const single = ref(true); +const multiple = ref(true); +const total = ref(0); +const title = ref(""); +const fixedColumns = ref(false); +const tableHeight = ref("0px"); +const sortItemMap = ref({}); +const queryParamFilter = ref({}); +const sortProps = ref([]); +const collapseVisible = ref(false); +const data = reactive({ + form: {}, + queryParams: { + pageNum: 1, + pageSize: 10, + paramClassName: null, + paramClassCode: null, + classType: null, + paramUnit: null, + note: null, + }, + rules: { + } +}); + +const { queryParams, form, rules } = toRefs(data); + +/** 查询参数模型信息列表 */ +function getList() { + loading.value = true; + listParamclass(queryParams.value).then(response => { + paramclassList.value = response.rows; + total.value = response.total; + loading.value = false; + }); +} + +// 取消按钮 +function cancel() { + open.value = false; + reset(); +} + +// 表单重置 +function reset() { + form.value = { + paramClassName: null, + paramClassCode: null, + classType: null, + paramUnit: null, + note: null, + tentantId: null, + version: null, + createBy: null, + createTime: null, + updateBy: null, + updateTime: null, + deptId: null, + userId: null, + deleteBy: null, + deleteTime: null, + id: null + }; + proxy.resetForm("paramclassRef"); +} + +/** 搜索按钮操作 */ +function handleQuery() { + queryParams.value.pageNum = 1; + getList(); +} + +/** 重置按钮操作 */ +function resetQuery() { + proxy.resetForm("queryRef"); + handleQuery(); +} + +// 多选框选中数据 +function handleSelectionChange(selection) { + ids.value = selection.map(item => item.id); + single.value = selection.length != 1; + multiple.value = !selection.length; +} + +/** 新增按钮操作 */ +function handleAdd() { + reset(); + open.value = true; + title.value = "添加参数模型信息"; +} + +/** 修改按钮操作 */ +function handleUpdate(row) { + reset(); + const _id = row.id || ids.value + getParamclass(_id).then(response => { + form.value = response.data; + open.value = true; + title.value = "修改参数模型信息"; + }); +} + +/** 提交按钮 */ +function submitForm() { + proxy.$refs["paramclassRef"].validate(valid => { + if (valid) { + if (form.value.id != null) { + updateParamclass(form.value).then(response => { + proxy.$modal.msgSuccess("修改成功"); + open.value = false; + getList(); + }); + } else { + addParamclass(form.value).then(response => { + proxy.$modal.msgSuccess("新增成功"); + open.value = false; + getList(); + }); + } + } + }); +} + +/** 删除按钮操作 */ +function handleDelete(row) { + const _ids = row.id || ids.value; + proxy.$modal.confirm('是否确认删除参数模型信息编号为"' + _ids + '"的数据项?').then(function() { + return delParamclass(_ids); + }).then(() => { + getList(); + proxy.$modal.msgSuccess("删除成功"); + }).catch(() => {}); +} + +/** 导出按钮操作 */ +function handleExport() { + proxy.download('model/dcModelParamclass/export', { + ...queryParams.value + }, `paramclass_${new Date().getTime()}.xlsx`) +} + + + +function toggleFixedColumns() { + fixedColumns.value = !fixedColumns.value; +} + +onMounted(()=>{ + calculateTableHeight(); + window.addEventListener('resize', calculateTableHeight); + window.onresize = () => { + return (() => { + calculateTableHeight(); + })() + } +}) + +onUnmounted(() => { + window.removeEventListener('resize', calculateTableHeight); +}); +watch( + [collapseVisible,showSearch], + () => { + calculateTableHeight(); + } +); +const calculateTableHeight = () => { + nextTick(() => { + const heightForm = proxy.$refs.queryRef?.$el.clientHeight||0; + const windowHeight = window.innerHeight; + const paginationHeight = 60; + const tableHeaderHeight = 40; + const tableMargin = 20; + const remainingHeight = windowHeight - paginationHeight - tableHeaderHeight - tableMargin - heightForm - 100; + tableHeight.value = remainingHeight + 'px'; + }); +}; + + +getList(); +</script> diff --git a/src/views/model/params/index.vue b/src/views/model/params/index.vue index 2656065..2a27039 100644 --- a/src/views/model/params/index.vue +++ b/src/views/model/params/index.vue @@ -1,32 +1,48 @@ <template> <div class="app-container"> - <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="120px"> - <el-form-item label="中台设备UUID" prop="deviceUuid"> - <el-input - v-model="queryParams.deviceUuid" - placeholder="请输入中台设备UUID" - :disabled="uuidDisabled" - @keyup.enter="handleQuery" - /> - </el-form-item> - <el-form-item label="参数名称" prop="paramName"> - <el-input - v-model="queryParams.paramName" - placeholder="请输入参数名称" - clearable - @keyup.enter="handleQuery" - /> - </el-form-item> - <el-form-item label="参数编码" prop="paramCode"> - <el-input - v-model="queryParams.paramCode" - placeholder="请输入参数编码" - clearable - @keyup.enter="handleQuery" - /> - </el-form-item> - <el-collapse-transition> - <div v-show="collapseVisible"> + <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="120px" class="my-custom-form"> + <el-row> + <el-col :span="4"> + <el-form-item label="中台设备UUID" prop="deviceUuid"> + <el-input + v-model="queryParams.deviceUuid" + placeholder="请输入中台设备UUID" + :disabled="uuidDisabled" + @keyup.enter="handleQuery" + /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item label="参数名称" prop="paramName"> + <el-input + v-model="queryParams.paramName" + placeholder="请输入参数名称" + clearable + @keyup.enter="handleQuery" + /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item label="参数编码" prop="paramCode"> + <el-input + v-model="queryParams.paramCode" + placeholder="请输入参数编码" + clearable + @keyup.enter="handleQuery" + /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item label="参数编码" prop="paramCode"> + <el-input + v-model="queryParams.paramCode" + placeholder="请输入参数编码" + clearable + @keyup.enter="handleQuery" + /> + </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> <el-form-item label="数据类型" prop="paramType"> <el-select v-model="queryParams.paramType" placeholder="请选择数据类型" clearable> <el-option @@ -37,11 +53,15 @@ /> </el-select> </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> <el-form-item label="是否可控" prop="contrlFlag"> <el-select v-model="queryParams.contrlFlag" placeholder="请选择是否可控" clearable> <el-option label="请选择字典生成" value="" /> </el-select> </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> <el-form-item label="参数单位" prop="contrlType"> <el-select v-model="queryParams.contrlType" placeholder="请选择参数单位" clearable> <el-option @@ -52,11 +72,15 @@ /> </el-select> </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> <el-form-item label="是否有效" prop="enabled"> <el-select v-model="queryParams.enabled" placeholder="请选择是否有效" clearable> <el-option label="请选择字典生成" value="" /> </el-select> </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> <el-form-item label="设置值" prop="setDefautvalue"> <el-input v-model="queryParams.setDefautvalue" @@ -65,6 +89,8 @@ @keyup.enter="handleQuery" /> </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> <el-form-item label="偏移量" prop="setAdjustvalue"> <el-input v-model="queryParams.setAdjustvalue" @@ -73,6 +99,8 @@ @keyup.enter="handleQuery" /> </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> <el-form-item label="验证范围" prop="validateScope"> <el-input v-model="queryParams.validateScope" @@ -81,6 +109,8 @@ @keyup.enter="handleQuery" /> </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> <el-form-item label="全局统一编码" prop="globalCode"> <el-input v-model="queryParams.globalCode" @@ -89,16 +119,22 @@ @keyup.enter="handleQuery" /> </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> <el-form-item label="参数模版ID" prop="paramModelId"> <el-select v-model="queryParams.paramModelId" placeholder="请选择参数模版ID" clearable> <el-option label="请选择字典生成" value="" /> </el-select> </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> <el-form-item label="分区(字典)" prop="partion"> <el-select v-model="queryParams.partion" placeholder="请选择分区(字典)" clearable> <el-option label="请选择字典生成" value="" /> </el-select> </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> <el-form-item label="plc地址" prop="plcAdr"> <el-input v-model="queryParams.plcAdr" @@ -107,15 +143,16 @@ @keyup.enter="handleQuery" /> </el-form-item> - </div> - </el-collapse-transition> - <el-form-item class="childTextAlignCenter"> - <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> - <el-button type="info" plain icon="Refresh" @click="resetQuery">重置</el-button> - <el-button @click="toggleCollapse">{{editName}}</el-button> - </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item class="childTextAlignCenter"> + <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> + <el-button type="info" plain icon="Refresh" @click="resetQuery">重置</el-button> + <el-button @click="toggleCollapse">{{editName}}</el-button> + </el-form-item> + </el-col> + </el-row> </el-form> - <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> <el-button @@ -148,48 +185,53 @@ <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> </el-row> - <el-table v-loading="loading" :data="paramsList" @selection-change="handleSelectionChange"> + <el-table ref="deviceParamTable" v-loading="loading" :data="paramsList" @selection-change="handleSelectionChange" @sort-change="sortChange" @filter-change="filterChange" :max-height="tableHeight" :border="true" :column-width-draggable="true"> <el-table-column type="selection" width="55" align="center" fixed="left"/> <!-- <el-table-column label="主键" align="center" prop="id" /> <el-table-column label="中台设备UUID" align="center" prop="deviceUuid" :width="120"/> --> - <el-table-column label="参数名称" align="center" prop="paramName" :width="120"/> - <el-table-column label="参数编码" align="center" prop="paramCode" :width="120"/> - <el-table-column label="数据类型" align="center" prop="paramType" :width="120"> + <el-table-column label="参数名称" align="center" prop="paramName" :width="130" sortable/> + <el-table-column label="参数编码" align="center" prop="paramCode" :width="120" sortable/> + <el-table-column label="数据类型" align="center" prop="paramType" column-key="paramType" filter-placement="bottom-end" + :filters="getfilterNameItem('paramType')" :filter-method="filterMethod" :width="120" sortable> <template #default="scope"> <dict-tag :options="dc_param_value_type" :value="scope.row.paramType"/> </template> </el-table-column> - <el-table-column label="是否可控" align="center" prop="contrlFlag" :width="120"> + <el-table-column label="是否可控" align="center" prop="contrlFlag" column-key="contrlFlag" filter-placement="bottom-end" + :filters="getfilterNameItem('contrlFlag')" :filter-method="filterMethod" :width="120" sortable> <template #default="scope"> <dict-tag :options="contrlFlagTable" :value="scope.row.contrlFlag"/> </template> </el-table-column> - <el-table-column label="参数单位" align="center" prop="contrlType" :width="120"> - <template #default="scope"> - <dict-tag :options="dc_param_uint_type" :value="scope.row.contrlType"/> - </template> - </el-table-column> - <el-table-column label="是否有效" align="center" prop="enabled" :width="120"> + <el-table-column label="是否有效" align="center" prop="enabled" column-key="enabled" filter-placement="bottom-end" + :filters="getfilterNameItem('enabled')" :filter-method="filterMethod" :width="120" sortable> <template #default="scope"> <dict-tag :options="enabledTable" :value="scope.row.enabled"/> </template> </el-table-column> - <el-table-column label="设置值" align="center" prop="setDefautvalue" :width="120"/> - <el-table-column label="偏移量" align="center" prop="setAdjustvalue" :width="120"/> - <el-table-column label="验证范围" align="center" prop="validateScope" :width="120"/> - <el-table-column label="全局统一编码" align="center" prop="globalCode" :width="120"/> - <el-table-column label="参数模版" align="center" prop="paramModelId" :width="120"> + <el-table-column label="设置值" align="center" prop="setDefautvalue" :width="120" sortable/> + <el-table-column label="偏移量" align="center" prop="setAdjustvalue" :width="120" sortable/> + <el-table-column label="验证范围" align="center" prop="validateScope" :width="120" sortable/> + <el-table-column label="全局统一编码" align="center" prop="globalCode" :width="150" sortable/> + <el-table-column label="参数模版" align="center" prop="paramModelId" column-key="paramModelId" filter-placement="bottom-end" + :filters="getfilterNameItem('paramModelId')" :filter-method="filterMethod" :width="120" sortable> <template #default="scope"> <span>{{ getParamModelName(scope.row.paramModelId) }}</span> </template> </el-table-column> - <el-table-column label="分区(字典)" align="center" prop="partion" :width="120"> + <el-table-column label="分区(字典)" align="center" prop="partion" column-key="partion" filter-placement="bottom-end" + :filters="getfilterNameItem('partion')" :filter-method="filterMethod" :width="130" sortable> <template #default="scope"> <dict-tag :options="dc_device_partion" :value="scope.row.partion"/> </template> </el-table-column> - <el-table-column label="plc地址" align="center" prop="plcAdr" :width="120"/> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width" :width="200" fixed="right"> + <el-table-column label="plc地址" align="center" prop="plcAdr" :width="120" sortable/> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" :width="200" :fixed="fixedColumns?'right':false"> + <template #header> + <div class="fixed-column-header" style="text-align: center;display: block;" @dblclick="toggleFixedColumns"> + <span style="text-align: center;display: block;">操作<img style="width:10px;margin-left:5px" v-show="fixedColumns" :src="lock" alt="Image"/></span> + </div> + </template> <template #default="scope"> <el-button type="text" @@ -208,9 +250,10 @@ <pagination v-show="total>0" :total="total" - v-model:page="queryParams.pageNum" - v-model:limit="queryParams.pageSize" + v-model:page="params.pageNum" + v-model:limit="params.pageSize" @pagination="getList" + class="paddingBothLeftRight" /> <!-- 添加或修改设备参数明细对话框 --> @@ -268,18 +311,6 @@ </el-select> </el-form-item> </el-col> - <el-col :span="12"> - <el-form-item label="参数单位" prop="contrlType"> - <el-select v-model="form.contrlType" placeholder="请选择参数单位"> - <el-option - v-for="dict in dc_param_uint_type" - :key="dict.value" - :label="dict.label" - :value="dict.value"> - </el-option> - </el-select> - </el-form-item> - </el-col> <el-col :span="12"> <el-form-item label="是否有效" prop="enabled"> <el-select v-model="form.enabled" placeholder="请选择是否有效"> @@ -343,8 +374,9 @@ @import "@/assets/styles/self-defined.scss"; </style> <script setup name="Params"> -import { listParams, getParams, delParams, addParams, updateParams } from "@/api/model/params"; +import { listParams, getParams, delParams, addParams, updateParams,listWithFilterColumn } from "@/api/model/params"; import { listParamclass } from "@/api/model/paramclass"; +import lock from "@/assets/icons/svg/lock.svg"; const { proxy } = getCurrentInstance(); const router = useRouter(); const { dc_param_uint_type, dc_param_value_type, dc_device_partion } = proxy.useDict('dc_param_uint_type', 'dc_param_value_type', 'dc_device_partion'); @@ -366,8 +398,12 @@ const paramModelDisabled = ref(false); const partionDisabled = ref(false); const paramClassCodeSeleted = ref(""); const deviceUuid = router.currentRoute._value.query.deviceUuid; -const deviceCode = router.currentRoute._value.query.deviceCode; const deviceUuidDisabled = ref(true); +const fixedColumns = ref(false); +const tableHeight = ref("0px"); +const sortItemMap = ref({}); +const queryParamFilter = ref({}); +const sortProps = ref([]); const contrlFlag = ref([ {label: '可控', value: true, elTagType: 'default', elTagClass: null}, {label: '不可控', value: false, elTagType: 'default', elTagClass: null} @@ -389,9 +425,11 @@ const data = reactive({ contrlFlag:contrlFlag, enabled:enabled, }, - queryParams: { + params: { pageNum: 1, pageSize: 10, + }, + queryParams: { deviceUuid: null, paramName: null, paramCode: null, @@ -405,8 +443,7 @@ const data = reactive({ globalCode: null, paramModelId: null, partion: null, - plcAdr: null, - controllab: null + plcAdr: null }, rules: { deviceUuid: [ @@ -445,27 +482,57 @@ const data = reactive({ }, }); -const { queryParams, form, rules } = toRefs(data); +const { queryParams, form, rules, params } = toRefs(data); /** 查询设备参数明细列表 */ function getList() { loading.value = true; if(deviceUuid != null && deviceUuid != undefined && deviceUuid != ""){ queryParams.value.deviceUuid = deviceUuid; - listParams(queryParams.value).then(response => { - paramsList.value = response.rows; - total.value = response.total; + let param = { + "obj":queryParams.value, + "params":queryParamFilter.value, + "sort":sortProps.value, + "pageNum": params.value.pageNum, + "pageSize": params.value.pageSize, + } + listWithFilterColumn(param).then(response => { + paramsList.value = response.data.tableData.rows; + total.value = response.data.tableData.total; + sortItemMap.value = response.data.filter; + queryParamFilter.value = new Object(); loading.value = false; }); + // listParams(queryParams.value).then(response => { + // paramsList.value = response.rows; + // total.value = response.total; + // loading.value = false; + // }); }else{ - listParams(queryParams.value).then(response => { - paramsList.value = response.rows; - total.value = response.total; + let param = { + "obj":queryParams.value, + "params":queryParamFilter.value, + "sort":sortProps.value, + "pageNum": params.value.pageNum, + "pageSize": params.value.pageSize, + } + listWithFilterColumn(param).then(response => { + paramsList.value = response.data.tableData.rows; + total.value = response.data.tableData.total; + sortItemMap.value = response.data.filter; + queryParamFilter.value = new Object(); loading.value = false; }); + // listParams(queryParams.value).then(response => { + // paramsList.value = response.rows; + // total.value = response.total; + // loading.value = false; + // }); } + } + // 取消按钮 function cancel() { open.value = false; @@ -499,21 +566,24 @@ function reset() { globalCode: null, paramModelId: null, partion: null, - plcAdr: null, - controllab: null + plcAdr: null }; proxy.resetForm("paramsRef"); } /** 搜索按钮操作 */ function handleQuery() { - queryParams.value.pageNum = 1; + params.value.pageNum = 1; getList(); } /** 重置按钮操作 */ function resetQuery() { proxy.resetForm("queryRef"); + proxy.$refs.deviceParamTable.clearSort(); + proxy.$refs.deviceParamTable.clearFilter(); + queryParamFilter.value = new Object(); + sortProps.value = new Array(); handleQuery(); } @@ -529,6 +599,8 @@ function handleAdd() { reset(); form.value.deviceUuid = deviceUuid; paramClassCodeSeleted.value = ""; + paramModelDisabled.value = false; + partionDisabled.value = false; open.value = true; title.value = "添加设备参数明细"; } @@ -638,6 +710,176 @@ function avilileEdit(){ } } +function toggleFixedColumns() { + fixedColumns.value = !fixedColumns.value; +} + +onMounted(()=>{ + calculateTableHeight(); + window.addEventListener('resize', calculateTableHeight); + window.onresize = () => { + return (() => { + calculateTableHeight(); + })() + } +}) + +onUnmounted(() => { + window.removeEventListener('resize', calculateTableHeight); +}); +watch( + [collapseVisible,showSearch], + () => { + calculateTableHeight(); + } +); +const calculateTableHeight = () => { + nextTick(() => { + const heightForm = proxy.$refs.queryRef?.$el.clientHeight||0; + const windowHeight = window.innerHeight; + const paginationHeight = 60; + const tableHeaderHeight = 40; + const tableMargin = 20; + const remainingHeight = windowHeight - paginationHeight - tableHeaderHeight - tableMargin - heightForm - 100; + tableHeight.value = remainingHeight + 'px'; + }); +}; + +function getfilterNameItem(value){ + let result = ''; + let resultItem = new Object(); + if(value==='paramType'){ + if(sortItemMap.value[value]?.length>0){ + result = sortItemMap.value[value].map(element=>{ + dc_param_value_type.value.forEach(item=>{ + if(item.value===element.text){ + resultItem = item.label; + } + }); + return { + text: resultItem, + value: element.value, + }; + }); + } + }else if(value==='contrlFlag'){ + if(sortItemMap.value[value]?.length>0 && sortItemMap.value[value].value != undefined && sortItemMap.value[value].value != null){ + result = sortItemMap.value[value].map(element=>{ + contrlFlag.value.forEach(item=>{ + if(item.value===element.text){ + resultItem = item.label; + } + }); + return { + text: resultItem, + value: element.value, + }; + }); + } + }else if(value==='enabled'){ + if(sortItemMap.value[value]?.length>0){ + result = sortItemMap.value[value].map(element=>{ + enabled.value.forEach(item=>{ + if(item.value===element.text){ + resultItem = item.label; + } + }); + return { + text: resultItem, + value: element.value, + }; + }); + } + }else if(value==='paramModelId'){ + if(sortItemMap.value[value]?.length>0 && sortItemMap.value[value].value != undefined && sortItemMap.value[value].value != null){ + result = sortItemMap.value[value].map(element=>{ + debugger + return { + text: getParamModelName(element.value), + value: element.value, + }; + }); + } + }else if(value==='partion'){ + if(sortItemMap.value[value]?.length>0){ + result = sortItemMap.value[value].map(element=>{ + dc_device_partion.value.forEach(item=>{ + if(item.value===String(element.text)){ + resultItem = item.label; + } + }); + return { + text: resultItem, + value: element.value, + }; + }); + } + }else{ + result = sortItemMap.value[value]; + } + return result; +} + + +function filterChange(filterItem) { + const outerObjectKeys = Object.keys(filterItem); + if(outerObjectKeys.length===1){ + queryParamFilter.value[outerObjectKeys[0]] = filterItem[outerObjectKeys[0]]; + } + + loading.value = true; + let param = { + "obj":queryParams.value, + "params":queryParamFilter.value, + "sort":sortProps.value, + "pageNum": params.value.pageNum, + "pageSize": params.value.pageSize, + } + listWithFilterColumn(param).then(response => { + paramsList.value = response.data.tableData.rows; + total.value = response.data.tableData.total; + sortItemMap.value = response.data.filter; + queryParamFilter.value = new Object(); + loading.value = false; + }); + +} + +function filterMethod(value, row, column){ + if(column==null){ + return; + } + if(queryParamFilter.value[column.property] == null || queryParamFilter.value[column.property].length==0){ + queryParamFilter.value[column.property]=[]; + queryParamFilter.value[column.property].push(value); + }else{ + let flag = false; + queryParamFilter.value[column.property].forEach(item=>{ + if(item==value){ + flag = true; + } + }) + if(!flag){ + queryParamFilter.value[column.property].push(value); + } + + } + +} + +function sortChange({column, prop, order }){ + if(column==null){ + return; + } + sortProps.value = sortProps.value.filter(item => item.prop !== prop); + if(order!=null){ + sortProps.value.push({prop:prop,order:order}); + } + getList(); +} + + + getList(); getParamModel(); avilileEdit(); diff --git a/src/views/transerver/kingcodetransform/index.vue b/src/views/transerver/kingcodetransform/index.vue index 780fd6e..8665a1d 100644 --- a/src/views/transerver/kingcodetransform/index.vue +++ b/src/views/transerver/kingcodetransform/index.vue @@ -1,42 +1,59 @@ <template> <div class="app-container"> - <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="auto"> - <el-form-item label="变量名称" prop="issVarName"> - <el-input - v-model="queryParams.issVarName" - placeholder="请输入变量名称" - clearable - @keyup.enter="handleQuery" - /> - </el-form-item> - <el-form-item label="工程名称" prop="issPrjName"> - <el-input - v-model="queryParams.issPrjName" - placeholder="请输入工程名称" - clearable - @keyup.enter="handleQuery" - /> - </el-form-item> - <el-form-item label="中台设备号" prop="centerDeviceuuid"> - <el-input - v-model="queryParams.centerDeviceuuid" - placeholder="请输入中台设备号" - clearable - @keyup.enter="handleQuery" - /> - </el-form-item> - <el-form-item label="中台参数码" prop="centerParamcode"> - <el-input - v-model="queryParams.centerParamcode" - placeholder="请输入中台参数码" - clearable - @keyup.enter="handleQuery" - /> - </el-form-item> - <el-form-item> - <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> - <el-button type="info" plain icon="Refresh" @click="resetQuery">重置</el-button> - </el-form-item> + <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="auto" class="my-custom-form"> + <el-row> + <el-col :span="4"> + <el-form-item label="变量名称" prop="issVarName"> + <el-input + v-model="queryParams.issVarName" + placeholder="请输入变量名称" + clearable + @keyup.enter="handleQuery" + /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item label="工程名称" prop="issPrjName"> + <el-input + v-model="queryParams.issPrjName" + placeholder="请输入工程名称" + clearable + @keyup.enter="handleQuery" + /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item label="中台设备号" prop="centerDeviceuuid"> + <el-input + v-model="queryParams.centerDeviceuuid" + placeholder="请输入中台设备号" + clearable + @keyup.enter="handleQuery" + /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item label="中台参数码" prop="centerParamcode"> + <el-input + v-model="queryParams.centerParamcode" + placeholder="请输入中台参数码" + clearable + @keyup.enter="handleQuery" + /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item> + <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> + <el-button type="info" plain icon="Refresh" @click="resetQuery">重置</el-button> + </el-form-item> + </el-col> + </el-row> + + + + + </el-form> <el-row :gutter="10" class="mb8"> @@ -71,8 +88,8 @@ <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> </el-row> - <el-table v-loading="loading" :data="kingcodetransformList" @selection-change="handleSelectionChange"> - <el-table-column type="selection" width="55" align="center" /> + <el-table v-loading="loading" :data="kingcodetransformList" @selection-change="handleSelectionChange" :max-height="tableHeight" :border="true" :column-width-draggable="true"> + <el-table-column type="selection" width="55" align="center" fixed="left"/> <el-table-column label="主键" align="center" prop="id" /> <el-table-column label="工程名称" align="center" prop="issPrjName" /> <el-table-column label="服务地址" align="center" prop="issResturl" /> @@ -82,7 +99,12 @@ <el-table-column label="变量类型" align="center" prop="issVarType" /> <el-table-column label="中台设备" align="center" prop="centerDeviceuuid" /> <el-table-column label="中台参数" align="center" prop="centerParamcode" /> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" :width="300" :fixed="fixedColumns?'right':false"> + <template #header> + <div class="fixed-column-header" style="text-align: center;display: block;" @dblclick="toggleFixedColumns"> + <span style="text-align: center;display: block;">操作<img style="width:10px;margin-left:5px" v-show="fixedColumns" :src="lock" alt="Image"/></span> + </div> + </template> <template #default="scope"> <el-button type="text" @@ -104,60 +126,59 @@ v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" + class="paddingBothLeftRight" /> <!-- 添加或修改IOServer变量转换对话框 --> <el-dialog :title="title" v-model="open" width="800px" append-to-body> <el-form ref="kingcodetransformRef" :model="form" :rules="rules" label-width="140px"> -<el-row> - <el-col :span="24"> - <el-form-item label="工程名称" width="150" prop="issPrjName"> - <el-input v-model="form.issPrjName" placeholder="请输入工程名称" required="true"/> - </el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="服务地址" prop="issResturl"> - <el-input v-model="form.issResturl" placeholder="请输入服务地址" /> - </el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="服务端口号" prop="issRestport"> - <el-input v-model="form.issRestport" placeholder="请输入服务端口号" /> - </el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="变量名称" prop="issVarName"> - <el-input v-model="form.issVarName" placeholder="请输入变量名称" required="true" /> - </el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="变量类型" prop="issVarType"> - <el-select v-model="form.issVarType" placeholder="请选择变量类型"> - <el-option v-for="dict in dc_param_value_type" - :key="dict.value" - :label="dict.label" /> - - </el-select> - </el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="组名称" prop="issGroupName"> - <el-input v-model="form.issGroupName" placeholder="请输入组名称" /> - </el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="中台设备号" prop="centerDeviceuuid"> - <el-input v-model="form.centerDeviceuuid" placeholder="请输入中台设备号" /> - </el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="中台参数码" prop="centerParamcode"> - <el-input v-model="form.centerParamcode" placeholder="请输入中台参数码" /> - </el-form-item> - </el-col> - - + <el-row> + <el-col :span="24"> + <el-form-item label="工程名称" width="150" prop="issPrjName"> + <el-input v-model="form.issPrjName" placeholder="请输入工程名称" required="true"/> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="服务地址" prop="issResturl"> + <el-input v-model="form.issResturl" placeholder="请输入服务地址" /> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="服务端口号" prop="issRestport"> + <el-input v-model="form.issRestport" placeholder="请输入服务端口号" /> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="变量名称" prop="issVarName"> + <el-input v-model="form.issVarName" placeholder="请输入变量名称" required="true" /> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="变量类型" prop="issVarType"> + <el-select v-model="form.issVarType" placeholder="请选择变量类型"> + <el-option v-for="dict in dc_param_value_type" + :key="dict.value" + :label="dict.label" /> + + </el-select> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="组名称" prop="issGroupName"> + <el-input v-model="form.issGroupName" placeholder="请输入组名称" /> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="中台设备号" prop="centerDeviceuuid"> + <el-input v-model="form.centerDeviceuuid" placeholder="请输入中台设备号" /> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="中台参数码" prop="centerParamcode"> + <el-input v-model="form.centerParamcode" placeholder="请输入中台参数码" /> + </el-form-item> + </el-col> </el-row> </el-form> <template #footer> @@ -169,10 +190,12 @@ </el-dialog> </div> </template> - +<style lang="scss" > + @import "@/assets/styles/self-defined.scss"; +</style> <script setup name="Kingcodetransform"> import { listKingcodetransform, getKingcodetransform, delKingcodetransform, addKingcodetransform, updateKingcodetransform } from "@/api/transerver/kingcodetransform"; - +import lock from "@/assets/icons/svg/lock.svg"; const { proxy } = getCurrentInstance(); const { dc_param_value_type } = proxy.useDict("dc_param_value_type"); const kingcodetransformList = ref([]); @@ -184,6 +207,13 @@ const single = ref(true); const multiple = ref(true); const total = ref(0); const title = ref(""); +const fixedColumns = ref(false); +const tableHeight = ref("0px"); +const sortItemMap = ref({}); +const queryParamFilter = ref({}); +const sortProps = ref([]); +const collapseVisible = ref(false); +const editName = ref("更多筛选项"); const data = reactive({ form: {}, @@ -307,10 +337,46 @@ function handleDelete(row) { /** 导出按钮操作 */ function handleExport() { - proxy.download('transerver/kingcodetransform/export', { + proxy.download('dc/dcBusiKingcodetransform/export', { ...queryParams.value }, `kingcodetransform_${new Date().getTime()}.xlsx`) } +function toggleFixedColumns() { + fixedColumns.value = !fixedColumns.value; +} + +onMounted(()=>{ + calculateTableHeight(); + window.addEventListener('resize', calculateTableHeight); + window.onresize = () => { + return (() => { + calculateTableHeight(); + })() + } +}) + +onUnmounted(() => { + window.removeEventListener('resize', calculateTableHeight); +}); +watch( + [collapseVisible,showSearch], + () => { + calculateTableHeight(); + } +); +const calculateTableHeight = () => { + nextTick(() => { + const heightForm = proxy.$refs.queryRef?.$el.clientHeight||0; + const windowHeight = window.innerHeight; + const paginationHeight = 60; + const tableHeaderHeight = 40; + const tableMargin = 20; + const remainingHeight = windowHeight - paginationHeight - tableHeaderHeight - tableMargin - heightForm - 100; + tableHeight.value = remainingHeight + 'px'; + }); +}; + + getList(); </script> diff --git a/src/views/transerver/viewConfig/index.vue b/src/views/transerver/viewConfig/index.vue index 09e4921..d533f07 100644 --- a/src/views/transerver/viewConfig/index.vue +++ b/src/views/transerver/viewConfig/index.vue @@ -1,123 +1,166 @@ <template> <div class="app-container"> - <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="120px"> - <el-form-item label="模型编码" prop="colCode"> - <el-select v-model="queryParams.colCode" placeholder="请选择模型编码" clearable> - <el-option label="请选择字典生成" value="" /> - </el-select> - </el-form-item> - <el-form-item label="显示名称" prop="colName"> - <el-input - v-model="queryParams.colName" - placeholder="请输入显示名称" - clearable - @keyup.enter="handleQuery" - /> - </el-form-item> - <el-form-item label="字段类型" prop="colType"> - <el-select v-model="queryParams.colType" placeholder="请选择字段类型" clearable> - <el-option - v-for="dict in dc_param_value_type" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item label="字段宽度" prop="colWidth"> - <el-input - v-model="queryParams.colWidth" - placeholder="请输入字段宽度" - clearable - @keyup.enter="handleQuery" - /> - </el-form-item> - <el-form-item label="字段顺序" prop="colSort"> - <el-input - v-model="queryParams.colSort" - placeholder="请输入字段顺序" - clearable - @keyup.enter="handleQuery" - /> - </el-form-item> - <el-form-item label="显示状态" prop="flagVisible"> - <el-select v-model="queryParams.flagVisible" placeholder="请选择是否显示" clearable> - <el-option - v-for="dict in sys_yes_no" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item label="固定位置" prop="flagLocked"> - <el-select v-model="queryParams.flagLocked" placeholder="请选择是否固定位置" clearable> - <el-option - v-for="dict in sys_yes_no" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item label="是否可控" prop="flagControl"> - <el-select v-model="queryParams.flagControl" placeholder="请选择是否可控" clearable> - <el-option - v-for="dict in sys_yes_no" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item label="控制类型" prop="controlType"> - <el-select v-model="queryParams.controlType" placeholder="请选择控制类型" clearable> - <el-option - v-for="dict in dc_param_control_type" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item label="控制标签地址" prop="controlAddress"> - <el-input - v-model="queryParams.controlAddress" - placeholder="请输入控制标签地址" - clearable - @keyup.enter="handleQuery" - /> - </el-form-item> - <el-form-item label="默认写入值" prop="controlValue"> - <el-input - v-model="queryParams.controlValue" - placeholder="请输入默认写入值" - clearable - @keyup.enter="handleQuery" - /> - </el-form-item> - <el-form-item label="一级标题" prop="groupTittle"> - <el-input - v-model="queryParams.groupTittle" - placeholder="请输入一级标题" - clearable - @keyup.enter="handleQuery" - /> - </el-form-item> - <el-form-item label="视图表类别" prop="viewType"> - <el-select v-model="queryParams.viewType" placeholder="请选择视图表类别" clearable> - <el-option - v-for="dict in dc_param_value_type" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item> - <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> - <el-button type="info" plain icon="Refresh" @click="resetQuery">重置</el-button> - </el-form-item> + <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="100px" class="my-custom-form"> + <el-row> + <el-col :span="4"> + <el-form-item label="模型编码" prop="colCode"> + <el-select v-model="queryParams.colCode" placeholder="请选择模型编码" clearable> + <el-option label="请选择字典生成" value="" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item label="显示名称" prop="colName"> + <el-input + v-model="queryParams.colName" + placeholder="请输入显示名称" + clearable + @keyup.enter="handleQuery" + /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item label="字段类型" prop="colType"> + <el-select v-model="queryParams.colType" placeholder="请选择字段类型" clearable> + <el-option + v-for="dict in dc_param_value_type" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item label="字段宽度" prop="colWidth"> + <el-input + v-model="queryParams.colWidth" + placeholder="请输入字段宽度" + clearable + @keyup.enter="handleQuery" + /> + </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> + <el-form-item label="字段顺序" prop="colSort"> + <el-input + v-model="queryParams.colSort" + placeholder="请输入字段顺序" + clearable + @keyup.enter="handleQuery" + /> + </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> + <el-form-item label="显示状态" prop="flagVisible"> + <el-select v-model="queryParams.flagVisible" placeholder="请选择是否显示" clearable> + <el-option + v-for="dict in sys_yes_no" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> + <el-form-item label="固定位置" prop="flagLocked"> + <el-select v-model="queryParams.flagLocked" placeholder="请选择是否固定位置" clearable> + <el-option + v-for="dict in sys_yes_no" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> + <el-form-item label="是否可控" prop="flagControl"> + <el-select v-model="queryParams.flagControl" placeholder="请选择是否可控" clearable> + <el-option + v-for="dict in sys_yes_no" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> + <el-form-item label="控制类型" prop="controlType"> + <el-select v-model="queryParams.controlType" placeholder="请选择控制类型" clearable> + <el-option + v-for="dict in dc_param_control_type" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> + <el-form-item label="控制类型" prop="controlType"> + <el-select v-model="queryParams.controlType" placeholder="请选择控制类型" clearable> + <el-option + v-for="dict in dc_param_control_type" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> + <el-form-item label="控制标签地址" prop="controlAddress"> + <el-input + v-model="queryParams.controlAddress" + placeholder="请输入控制标签地址" + clearable + @keyup.enter="handleQuery" + /> + </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> + <el-form-item label="默认写入值" prop="controlValue"> + <el-input + v-model="queryParams.controlValue" + placeholder="请输入默认写入值" + clearable + @keyup.enter="handleQuery" + /> + </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> + <el-form-item label="一级标题" prop="groupTittle"> + <el-input + v-model="queryParams.groupTittle" + placeholder="请输入一级标题" + clearable + @keyup.enter="handleQuery" + /> + </el-form-item> + </el-col> + <el-col :span="4" v-show="collapseVisible"> + <el-form-item label="视图表类别" prop="viewType"> + <el-select v-model="queryParams.viewType" placeholder="请选择视图表类别" clearable> + <el-option + v-for="dict in dc_param_value_type" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item class="childTextAlignRight"> + <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> + <el-button type="info" plain icon="Refresh" @click="resetQuery">重置</el-button> + <el-button @click="toggleCollapse">{{editName}}</el-button> + </el-form-item> + </el-col> + </el-row> </el-form> <el-row :gutter="10" class="mb8"> @@ -152,8 +195,8 @@ <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> </el-row> - <el-table v-loading="loading" :data="viewConfigList" @selection-change="handleSelectionChange"> - <el-table-column type="selection" width="55" align="center" /> + <el-table v-loading="loading" :data="viewConfigList" @selection-change="handleSelectionChange" :max-height="tableHeight" :border="true" :column-width-draggable="true"> + <el-table-column type="selection" width="55" align="center" fixed="left"/> <el-table-column label="主键" align="center" prop="id" /> <el-table-column label="模型编码" align="center" prop="colCode" /> <el-table-column label="显示名称" align="center" prop="colName" /> @@ -188,7 +231,12 @@ <dict-tag :options="dc_param_value_type" :value="scope.row.viewType"/> </template> </el-table-column> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" :width="300" :fixed="fixedColumns?'right':false"> + <template #header> + <div class="fixed-column-header" style="text-align: center;display: block;" @dblclick="toggleFixedColumns"> + <span style="text-align: center;display: block;">操作<img style="width:10px;margin-left:5px" v-show="fixedColumns" :src="lock" alt="Image"/></span> + </div> + </template> <template #default="scope"> <el-button type="text" @@ -210,121 +258,122 @@ v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" + class="paddingBothLeftRight" /> <!-- 添加或修改运维监视视图配置对话框 --> <el-dialog :title="title" v-model="open" width="1200px" append-to-body> <el-form ref="viewConfigRef" :model="form" :rules="rules" label-width="140px"> -<el-row> - <el-col :span="12"> - <el-form-item label="模型编码" prop="colCode"> - <el-select v-model="form.colCode" placeholder="请选择模型编码"> - <el-option label="请选择字典生成" value="" /> - </el-select> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="显示名称" prop="colName"> - <el-input v-model="form.colName" placeholder="请输入显示名称" /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="字段类型" prop="colType"> - <el-select v-model="form.colType" placeholder="请选择字段类型"> - <el-option - v-for="dict in dc_param_value_type" - :key="dict.value" - :label="dict.label" -:value="dict.value" ></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="字段宽度" prop="colWidth"> - <el-input v-model="form.colWidth" placeholder="请输入字段宽度" /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="字段顺序" prop="colSort"> - <el-input v-model="form.colSort" placeholder="请输入字段顺序" /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="是否显示"> - <el-radio-group v-model="form.flagVisible"> - <el-radio - v-for="dict in sys_yes_no" - :key="dict.value" -:label="dict.label" - >{{dict.label}}</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="固定位置"> - <el-radio-group v-model="form.flagLocked"> - <el-radio - v-for="dict in sys_yes_no" - :key="dict.value" -:label="dict.label" - >{{dict.label}}</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="是否可控"> - <el-radio-group v-model="form.flagControl"> - <el-radio - v-for="dict in sys_yes_no" - :key="dict.value" -:label="dict.value" - >{{dict.label}}</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="控制类型" prop="controlType"> - <el-select v-model="form.controlType" placeholder="请选择控制类型"> - <el-option - v-for="dict in dc_param_control_type" - :key="dict.value" - :label="dict.label" -:value="dict.value" ></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="控制标签地址" prop="controlAddress"> - <el-input v-model="form.controlAddress" placeholder="请输入控制标签地址" /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="默认写入值" prop="controlValue"> - <el-input v-model="form.controlValue" placeholder="请输入默认写入值" /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="一级标题" prop="groupTittle"> - <el-input v-model="form.groupTittle" placeholder="请输入一级标题" /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="一级标题编码" prop="groupCode"> - <el-input v-model="form.groupCode" placeholder="请输入一级标题编码" value="0" /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="视图表类别" prop="viewType"> - <el-select v-model="form.viewType" placeholder="请选择视图表类别"> - <el-option - v-for="dict in dc_monitor_view_type" - :key="dict.value" - :label="dict.label" -:value="dict.value" ></el-option> - </el-select> - </el-form-item> - </el-col> + <el-row> + <el-col :span="12"> + <el-form-item label="模型编码" prop="colCode"> + <el-select v-model="form.colCode" placeholder="请选择模型编码"> + <el-option label="请选择字典生成" value="" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="显示名称" prop="colName"> + <el-input v-model="form.colName" placeholder="请输入显示名称" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="字段类型" prop="colType"> + <el-select v-model="form.colType" placeholder="请选择字段类型"> + <el-option + v-for="dict in dc_param_value_type" + :key="dict.value" + :label="dict.label" + :value="dict.value" ></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="字段宽度" prop="colWidth"> + <el-input v-model="form.colWidth" placeholder="请输入字段宽度" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="字段顺序" prop="colSort"> + <el-input v-model="form.colSort" placeholder="请输入字段顺序" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="是否显示"> + <el-radio-group v-model="form.flagVisible"> + <el-radio + v-for="dict in sys_yes_no" + :key="dict.value" + :label="dict.label" + >{{dict.label}}</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="固定位置"> + <el-radio-group v-model="form.flagLocked"> + <el-radio + v-for="dict in sys_yes_no" + :key="dict.value" + :label="dict.label" + >{{dict.label}}</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="是否可控"> + <el-radio-group v-model="form.flagControl"> + <el-radio + v-for="dict in sys_yes_no" + :key="dict.value" + :label="dict.value" + >{{dict.label}}</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="控制类型" prop="controlType"> + <el-select v-model="form.controlType" placeholder="请选择控制类型"> + <el-option + v-for="dict in dc_param_control_type" + :key="dict.value" + :label="dict.label" + :value="dict.value" ></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="控制标签地址" prop="controlAddress"> + <el-input v-model="form.controlAddress" placeholder="请输入控制标签地址" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="默认写入值" prop="controlValue"> + <el-input v-model="form.controlValue" placeholder="请输入默认写入值" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="一级标题" prop="groupTittle"> + <el-input v-model="form.groupTittle" placeholder="请输入一级标题" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="一级标题编码" prop="groupCode"> + <el-input v-model="form.groupCode" placeholder="请输入一级标题编码" value="0" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="视图表类别" prop="viewType"> + <el-select v-model="form.viewType" placeholder="请选择视图表类别"> + <el-option + v-for="dict in dc_monitor_view_type" + :key="dict.value" + :label="dict.label" + :value="dict.value" ></el-option> + </el-select> + </el-form-item> + </el-col> </el-row> </el-form> @@ -337,10 +386,12 @@ </el-dialog> </div> </template> - +<style lang="scss" > + @import "@/assets/styles/self-defined.scss"; +</style> <script setup name="ViewConfig"> import { listViewConfig, getViewConfig, delViewConfig, addViewConfig, updateViewConfig } from "@/api/transerver/viewConfig"; - +import lock from "@/assets/icons/svg/lock.svg"; const { proxy } = getCurrentInstance(); const { sys_yes_no, dc_param_value_type,dc_monitor_view_type,dc_param_control_type} = proxy.useDict('sys_yes_no', 'dc_param_value_type', 'dc_monitor_view_type', 'dc_param_control_type'); @@ -353,6 +404,13 @@ const single = ref(true); const multiple = ref(true); const total = ref(0); const title = ref(""); +const fixedColumns = ref(false); +const tableHeight = ref("0px"); +const sortItemMap = ref({}); +const queryParamFilter = ref({}); +const sortProps = ref([]); +const collapseVisible = ref(false); +const editName = ref("更多筛选项"); const data = reactive({ form: {}, @@ -499,5 +557,49 @@ function handleExport() { }, `viewConfig_${new Date().getTime()}.xlsx`) } +function toggleFixedColumns() { + fixedColumns.value = !fixedColumns.value; +} + +onMounted(()=>{ + calculateTableHeight(); + window.addEventListener('resize', calculateTableHeight); + window.onresize = () => { + return (() => { + calculateTableHeight(); + })() + } +}) + +onUnmounted(() => { + window.removeEventListener('resize', calculateTableHeight); +}); +watch( + [collapseVisible,showSearch], + () => { + calculateTableHeight(); + } +); +const calculateTableHeight = () => { + nextTick(() => { + const heightForm = proxy.$refs.queryRef?.$el.clientHeight||0; + const windowHeight = window.innerHeight; + const paginationHeight = 60; + const tableHeaderHeight = 40; + const tableMargin = 20; + const remainingHeight = windowHeight - paginationHeight - tableHeaderHeight - tableMargin - heightForm - 100; + tableHeight.value = remainingHeight + 'px'; + }); +}; + +function toggleCollapse() { + collapseVisible.value = !collapseVisible.value; + if(collapseVisible.value){ + editName.value = "折叠筛选项"; + }else{ + editName.value = "更多筛选项" + } +} + getList(); </script>