| | |
| | | |
| | | .form-card { |
| | | background: #fff; |
| | | // background: #F7F8FA; |
| | | border-radius: 0px 0px 0px 0px; |
| | | // border: 1px solid #000000; |
| | | padding: 18px 0 0 15px; |
| | | } |
| | | |
| | | .table-bg-style { |
| | | background-color: #fff; |
| | | padding-top: 12px; |
| | |
| | | color: "#2979ff", |
| | | }, |
| | | }, |
| | | color: ["#2979ff", "#19be6b", "#ff9900", "#fa3534"], |
| | | color: ["#4dadf8", "#19be6b", "#ff9900", "#3d8a32", "#e8463a", "#ff4e3f"], |
| | | // color: ["#2979ff", "#19be6b", "#ff9900", "#fa3534"], |
| | | tooltip: { |
| | | trigger: "axis", |
| | | axisPointer: { |
| | |
| | | </div> |
| | | <div class="page-container-right"> |
| | | <div class="form-card"> |
| | | <el-form :model="form" ref="queryRef" :inline="true" label-width="85px"> |
| | | <el-form :model="form" ref="queryRef" :inline="true" label-width="68px"> |
| | | <el-form-item prop="eierarchyFlag"> |
| | | <el-radio-group v-model="form.eierarchyFlag"> |
| | | <el-radio label="B" name="eierarchyFlag">本级</el-radio> |
| | |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="时间选择"> |
| | | <el-date-picker v-model="form.dataTime" type="datetimerange" format="YYYY-MM-DD HH:mm:ss" |
| | | value-format="YYYY-MM-DD HH:mm:ss" placeholder="时间" style="width: 370px" unlink-panels |
| | | time-format="HH:mm:ss" /> |
| | | <el-date-picker |
| | | v-model="form.dataTime" |
| | | type="datetimerange" |
| | | format="YYYY-MM-DD HH:mm:ss" |
| | | value-format="YYYY-MM-DD HH:mm:ss" |
| | | placeholder="时间" |
| | | style="width: 340px" |
| | | unlink-panels |
| | | time-format="HH:mm:ss" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="报警类别" prop="indexType"> |
| | | <el-select v-model="form.indexType" placeholder="请选择报警类别" style="width: 200px"> |
| | | <el-option v-for="dict in alarm_record_category" :key="dict.value" :label="dict.label" |
| | | :value="dict.value" /> |
| | | <el-option |
| | | v-for="dict in alarm_record_category" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <!-- <el-form-item label="能源类型" prop="energyType"> |
| | |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <BaseCard :title="currentNode ? currentNode.label + '--节点配置' : '暂无节点配置' |
| | | "> |
| | | <BaseCard :title="currentNode ? currentNode.label + '--节点配置' : '暂无节点配置'"> |
| | | <div class="table-box"> |
| | | <el-table :data="tableData" v-loading="loading" height="calc(100vh - 450px)"> |
| | | <el-table-column type="index" label="序号" width="70" /> |
| | | <el-table-column label="用能单元" prop="modelName" align="center" show-overflow-tooltip /> |
| | | <el-table-column label="指标名称" prop="indexName" align="center" show-overflow-tooltip /> |
| | | <el-table-column label="报警类别" prop="indexType" align="center" show-overflow-tooltip :formatter="(row, column) => |
| | | proxy.selectDictLabel(alarm_record_category, row.indexType) |
| | | " /> |
| | | <el-table-column label="能源类型" prop="energyId" align="center" show-overflow-tooltip :formatter="(row, column) => formatterLabel(energyTypeList, row.energyId) |
| | | " /> |
| | | <el-table-column |
| | | label="报警类别" |
| | | prop="indexType" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | :formatter="(row, column) => proxy.selectDictLabel(alarm_record_category, row.indexType)" |
| | | /> |
| | | <el-table-column |
| | | label="能源类型" |
| | | prop="energyId" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | :formatter="(row, column) => formatterLabel(energyTypeList, row.energyId)" |
| | | /> |
| | | <el-table-column label="预设值" prop="energyType" align="center" show-overflow-tooltip /> |
| | | <el-table-column label="报警值" prop="alarmValue" align="center" show-overflow-tooltip /> |
| | | <el-table-column label="报警时间" prop="alarmBeginTime" align="center" show-overflow-tooltip /> |
| | |
| | | </div> |
| | | </BaseCard> |
| | | |
| | | <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" |
| | | v-model:limit="queryParams.pageSize" @pagination="getList(currentNode)" /> |
| | | <pagination |
| | | v-show="total > 0" |
| | | :total="total" |
| | | v-model:page="queryParams.pageNum" |
| | | v-model:limit="queryParams.pageSize" |
| | | @pagination="getList(currentNode)" |
| | | /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script setup name="alarmRecord"> |
| | | import { listEnergyTypeList } from "@/api/modelConfiguration/energyType"; |
| | | const { proxy } = getCurrentInstance(); |
| | | let { alarm_record_category } = proxy.useDict("alarm_record_category"); |
| | | import { historicalAlarm } from "@/api/alarmManage/alarmManage"; |
| | | import { listEnergyTypeList } from "@/api/modelConfiguration/energyType" |
| | | const { proxy } = getCurrentInstance() |
| | | let { alarm_record_category } = proxy.useDict("alarm_record_category") |
| | | import { historicalAlarm } from "@/api/alarmManage/alarmManage" |
| | | let form = ref({ |
| | | eierarchyFlag: "B", |
| | | dataTime: [ |
| | |
| | | indexType: "", |
| | | // energyType: '', |
| | | indexName: "", |
| | | }); |
| | | const energyTypeList = ref(); |
| | | }) |
| | | const energyTypeList = ref() |
| | | function getEnergyTypeList() { |
| | | listEnergyTypeList().then((res) => { |
| | | energyTypeList.value = res.data; |
| | | form.value.indexType = alarm_record_category.value[0].value; |
| | | energyTypeList.value = res.data |
| | | form.value.indexType = alarm_record_category.value[0].value |
| | | // form.value.energyType = energyTypeList.value[0].enersno |
| | | getList(); |
| | | }); |
| | | getList() |
| | | }) |
| | | } |
| | | // getEnergyTypeList() |
| | | let currentNode = ref(); |
| | | let currentNode = ref() |
| | | function handleNodeClick(data) { |
| | | currentNode.value = data; |
| | | getEnergyTypeList(); |
| | | currentNode.value = data |
| | | getEnergyTypeList() |
| | | } |
| | | |
| | | let tableData = ref([]); |
| | | let total = ref(0); |
| | | let loading = ref(false); |
| | | let tableData = ref([]) |
| | | let total = ref(0) |
| | | let loading = ref(false) |
| | | let queryParams = ref({ |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | }); |
| | | }) |
| | | |
| | | function formatterLabel(list, value) { |
| | | let dict = list.find((item) => item.enersno == value); |
| | | return dict ? dict.enername : ""; |
| | | let dict = list.find((item) => item.enersno == value) |
| | | return dict ? dict.enername : "" |
| | | } |
| | | |
| | | function getList() { |
| | | form.value.nodeId = currentNode.value.id; |
| | | loading.value = true; |
| | | form.value.nodeId = currentNode.value.id |
| | | loading.value = true |
| | | historicalAlarm({ |
| | | ...form.value, |
| | | ...queryParams.value, |
| | | beginTime: form.value.dataTime[0], |
| | | endTime: form.value.dataTime[1], |
| | | }).then((response) => { |
| | | console.log(11, response); |
| | | console.log(11, response) |
| | | if (response.code === 200) { |
| | | tableData.value = response.rows; |
| | | total.value = response.total; |
| | | loading.value = false; |
| | | tableData.value = response.rows |
| | | total.value = response.total |
| | | loading.value = false |
| | | } else { |
| | | proxy.$modal.msgError(response.msg); |
| | | proxy.$modal.msgError(response.msg) |
| | | } |
| | | }); |
| | | }) |
| | | } |
| | | |
| | | function handleQuery() { |
| | | queryParams.value.pageNum = 1; |
| | | getList(); |
| | | queryParams.value.pageNum = 1 |
| | | getList() |
| | | } |
| | | function resetQuery() { |
| | | form.value = { |
| | | eierarchyFlag: 'B', |
| | | dataTime: [proxy.dayjs(new Date()).format("YYYY-MM-DD 00:00:00"), proxy.dayjs(new Date()).format("YYYY-MM-DD 23:59:59")], |
| | | nodeId: '', |
| | | eierarchyFlag: "B", |
| | | dataTime: [ |
| | | proxy.dayjs(new Date()).format("YYYY-MM-DD 00:00:00"), |
| | | proxy.dayjs(new Date()).format("YYYY-MM-DD 23:59:59"), |
| | | ], |
| | | nodeId: "", |
| | | indexType: alarm_record_category.value[0].value, |
| | | // energyType: '', |
| | | indexName: '', |
| | | indexName: "", |
| | | } |
| | | queryParams.value = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | }; |
| | | getList(); |
| | | } |
| | | getList() |
| | | } |
| | | </script> |
| | | |
| | |
| | | .table-box { |
| | | height: calc(100vh - 464px); |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">重置</el-button> |
| | | </el-form-item> |
| | | <el-form-item style="float: right"> |
| | | <el-button type="primary" icon="Plus" @click="handleAdd"> 新增 </el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div class="table-bg-style"> |
| | | <div class="theme-dark-mt20 mb20 ml20"> |
| | | <el-button type="primary" icon="Plus" @click="handleAdd">新增</el-button> |
| | | </div> |
| | | <div class="table-box"> |
| | | <el-table :data="tableData" v-loading="loading"> |
| | | <el-table-column prop="time" label="时间" show-overflow-tooltip align="center" /> |
| | |
| | | </div> |
| | | <div class="page-container-right"> |
| | | <div class="form-card"> |
| | | <el-form |
| | | :model="queryParams" |
| | | ref="queryRef" |
| | | :inline="true" |
| | | v-show="showSearch" |
| | | > |
| | | <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch"> |
| | | <el-form-item label="期间" prop="timeType"> |
| | | <el-select |
| | | v-model="queryParams.timeType" |
| | |
| | | style="width: 120px" |
| | | @change="handleTimeType" |
| | | > |
| | | <el-option |
| | | v-for="dict in period" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | <el-option v-for="dict in period" :key="dict.value" :label="dict.label" :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="时间"> |
| | |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="产品类型"> |
| | | <el-select |
| | | v-model="queryParams.productType" |
| | | placeholder="产品类型" |
| | | style="width: 100%" |
| | | > |
| | | <el-option |
| | | v-for="dict in product_type" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | <el-select v-model="queryParams.productType" placeholder="产品类型" style="width: 100%"> |
| | | <el-option v-for="dict in product_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="primary" icon="Search" @click="handleQuery"> 搜索 </el-button> |
| | | <el-button icon="Refresh" @click="resetQuery"> 重置 </el-button> |
| | | </el-form-item> |
| | | <el-form-item style="float: right"> |
| | | <el-button type="primary" icon="Plus" @click="handleAdd"> 新增 </el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div class="table-box"> |
| | | <div class="mt20 mb20"> |
| | | <el-button type="primary" icon="Plus" @click="handleAdd"> |
| | | 新增 |
| | | </el-button> |
| | | </div> |
| | | <el-table v-loading="loading" :data="productoutputList"> |
| | | <el-table-column |
| | | label="用能单元" |
| | |
| | | prop="nodeName" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="期间" |
| | | align="center" |
| | | key="timeType" |
| | | prop="timeType" |
| | | :show-overflow-tooltip="true" |
| | | > |
| | | <el-table-column label="期间" align="center" key="timeType" prop="timeType" :show-overflow-tooltip="true"> |
| | | <template #default="scope"> |
| | | <dict-tag :options="period" :value="scope.row.timeType" /> |
| | | </template> |
| | |
| | | :show-overflow-tooltip="true" |
| | | > |
| | | <template #default="scope"> |
| | | <dict-tag |
| | | :options="product_type" |
| | | :value="scope.row.productType" |
| | | /> |
| | | <dict-tag :options="product_type" :value="scope.row.productType" /> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column |
| | |
| | | prop="name" |
| | | :show-overflow-tooltip="true" |
| | | /> --> |
| | | <el-table-column |
| | | label="单位" |
| | | align="center" |
| | | key="unit" |
| | | prop="unit" |
| | | :show-overflow-tooltip="true" |
| | | > |
| | | <el-table-column label="单位" align="center" key="unit" prop="unit" :show-overflow-tooltip="true"> |
| | | <template #default="scope"> |
| | | <dict-tag :options="sys_unit" :value="scope.row.unit" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="产量" |
| | | align="center" |
| | | key="number" |
| | | prop="number" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column label="产量" align="center" key="number" prop="number" :show-overflow-tooltip="true" /> |
| | | <el-table-column |
| | | label="提交时间" |
| | | align="center" |
| | |
| | | :show-overflow-tooltip="true" |
| | | width="200" |
| | | /> |
| | | <el-table-column |
| | | label="操作" |
| | | align="center" |
| | | class-name="small-padding fixed-width" |
| | | width="200" |
| | | > |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200"> |
| | | <template #default="scope"> |
| | | <el-tooltip content="编辑" placement="top"> |
| | | <el-button |
| | | link |
| | | type="primary" |
| | | icon="Edit" |
| | | @click="handleUpdate(scope.row)" |
| | | > |
| | | 编辑 |
| | | </el-button> |
| | | <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"> 编辑 </el-button> |
| | | </el-tooltip> |
| | | <el-tooltip content="删除" placement="top"> |
| | | <el-button |
| | | link |
| | | type="primary" |
| | | icon="Delete" |
| | | @click="handleDelete(scope.row)" |
| | | > |
| | | 删除 |
| | | </el-button> |
| | | <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"> 删除 </el-button> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="用能单元" prop="nodeName"> |
| | | <el-input |
| | | v-model="form.nodeName" |
| | | placeholder="请输入用能单元" |
| | | disabled |
| | | /> |
| | | <el-input v-model="form.nodeName" placeholder="请输入用能单元" disabled /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | |
| | | style="width: 100%" |
| | | @change="handleTimeTypeAdd" |
| | | > |
| | | <el-option |
| | | v-for="dict in period" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | <el-option v-for="dict in period" :key="dict.value" :label="dict.label" :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="产品类型" prop="productType"> |
| | | <el-select |
| | | v-model="form.productType" |
| | | placeholder="产品类型" |
| | | clearable |
| | | style="width: 100%" |
| | | > |
| | | <el-option |
| | | v-for="dict in product_type" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | <el-select v-model="form.productType" placeholder="产品类型" clearable style="width: 100%"> |
| | | <el-option v-for="dict in product_type" :key="dict.value" :label="dict.label" :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | </el-col> --> |
| | | <el-col :span="12"> |
| | | <el-form-item label="单位" prop="unit"> |
| | | <el-select |
| | | v-model="form.unit" |
| | | placeholder="请选择单位" |
| | | clearable |
| | | style="width: 100%" |
| | | > |
| | | <el-option |
| | | v-for="dict in sys_unit" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | <el-select v-model="form.unit" placeholder="请选择单位" clearable style="width: 100%"> |
| | | <el-option v-for="dict in sys_unit" :key="dict.value" :label="dict.label" :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | addProductoutput, |
| | | updateProductoutput, |
| | | delProductoutput, |
| | | } from "@/api/auxiliaryEntry/productOutput"; |
| | | const { proxy } = getCurrentInstance(); |
| | | import { useRoute } from "vue-router"; |
| | | const { period, sys_unit, product_type } = proxy.useDict( |
| | | "period", |
| | | "sys_unit", |
| | | "product_type" |
| | | ); |
| | | const productoutputList = ref([]); |
| | | const open = ref(false); |
| | | const loading = ref(false); |
| | | const showSearch = ref(true); |
| | | const title = ref(""); |
| | | } from "@/api/auxiliaryEntry/productOutput" |
| | | const { proxy } = getCurrentInstance() |
| | | import { useRoute } from "vue-router" |
| | | const { period, sys_unit, product_type } = proxy.useDict("period", "sys_unit", "product_type") |
| | | const productoutputList = ref([]) |
| | | const open = ref(false) |
| | | const loading = ref(false) |
| | | const showSearch = ref(true) |
| | | const title = ref("") |
| | | const data = reactive({ |
| | | form: {}, |
| | | queryParams: { |
| | |
| | | }, |
| | | query: { ...useRoute().query }, |
| | | rules: { |
| | | timeType: [ |
| | | { required: true, message: "期间不能为空", trigger: ["blur", "change"] }, |
| | | ], |
| | | dataTime: [ |
| | | { required: true, message: "时间不能为空", trigger: ["blur", "change"] }, |
| | | ], |
| | | timeType: [{ required: true, message: "期间不能为空", trigger: ["blur", "change"] }], |
| | | dataTime: [{ required: true, message: "时间不能为空", trigger: ["blur", "change"] }], |
| | | productType: [ |
| | | { |
| | | required: true, |
| | |
| | | ], |
| | | // name: [{ required: true, message: "产品名称不能为空", trigger: "blur" }], |
| | | unit: [{ required: true, message: "单位不能为空", trigger: "blur" }], |
| | | number: [ |
| | | { required: true, message: "产量不能为空", trigger: ["blur", "change"] }, |
| | | ], |
| | | number: [{ required: true, message: "产量不能为空", trigger: ["blur", "change"] }], |
| | | }, |
| | | }); |
| | | const { queryParams, query, form, rules } = toRefs(data); |
| | | }) |
| | | const { queryParams, query, form, rules } = toRefs(data) |
| | | /** 节点单击事件 */ |
| | | function handleNodeClick(data) { |
| | | queryParams.value.nodeId = data.id; |
| | | queryParams.value.nodeName = data.label; |
| | | queryParams.value.productType = null; |
| | | handleTimeType(period.value[0].value); |
| | | handleQuery(); |
| | | queryParams.value.nodeId = data.id |
| | | queryParams.value.nodeName = data.label |
| | | queryParams.value.productType = null |
| | | handleTimeType(period.value[0].value) |
| | | handleQuery() |
| | | } |
| | | function handleTimeType(e) { |
| | | queryParams.value.timeType = e; |
| | | queryParams.value.timeType = e |
| | | queryParams.value.dataTime = proxy |
| | | .dayjs(new Date()) |
| | | .format(e == "YEAR" ? "YYYY" : e == "MONTH" ? "YYYY-MM" : "YYYY-MM-DD"); |
| | | .format(e == "YEAR" ? "YYYY" : e == "MONTH" ? "YYYY-MM" : "YYYY-MM-DD") |
| | | } |
| | | // 辅助录入-产品产量录入-列表 |
| | | function getList() { |
| | | loading.value = true; |
| | | loading.value = true |
| | | listProductoutput( |
| | | proxy.addDateRange({ |
| | | ...queryParams.value, |
| | | ...query.value, |
| | | }) |
| | | ).then((res) => { |
| | | loading.value = false; |
| | | productoutputList.value = res.rows; |
| | | queryParams.value.total = res.total; |
| | | }); |
| | | loading.value = false |
| | | productoutputList.value = res.rows |
| | | queryParams.value.total = res.total |
| | | }) |
| | | } |
| | | // 辅助录入-产品产量录入-搜索 |
| | | function handleQuery() { |
| | | queryParams.value.pageNum = 1; |
| | | getList(); |
| | | queryParams.value.pageNum = 1 |
| | | getList() |
| | | } |
| | | // 辅助录入-产品产量录入-重置 |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef"); |
| | | queryParams.value.pageNum = 1; |
| | | queryParams.value.pageSize = 10; |
| | | queryParams.value.total = 0; |
| | | queryParams.value.timeType = null; |
| | | queryParams.value.dataTime = null; |
| | | queryParams.value.productType = null; |
| | | handleTimeType(period.value[0].value); |
| | | handleQuery(); |
| | | proxy.resetForm("queryRef") |
| | | queryParams.value.pageNum = 1 |
| | | queryParams.value.pageSize = 10 |
| | | queryParams.value.total = 0 |
| | | queryParams.value.timeType = null |
| | | queryParams.value.dataTime = null |
| | | queryParams.value.productType = null |
| | | handleTimeType(period.value[0].value) |
| | | handleQuery() |
| | | } |
| | | // 辅助录入-产品产量录入-新增 |
| | | function handleAdd() { |
| | | reset(); |
| | | form.value.nodeId = queryParams.value.nodeId; |
| | | form.value.nodeName = queryParams.value.nodeName; |
| | | handleTimeTypeAdd(period.value[0].value); |
| | | title.value = "新增产品产量录入"; |
| | | open.value = true; |
| | | reset() |
| | | form.value.nodeId = queryParams.value.nodeId |
| | | form.value.nodeName = queryParams.value.nodeName |
| | | handleTimeTypeAdd(period.value[0].value) |
| | | title.value = "新增产品产量录入" |
| | | open.value = true |
| | | } |
| | | function handleTimeTypeAdd(e) { |
| | | form.value.timeType = e; |
| | | form.value.dataTime = proxy |
| | | .dayjs(new Date()) |
| | | .format(e == "YEAR" ? "YYYY" : e == "MONTH" ? "YYYY-MM" : "YYYY-MM-DD"); |
| | | form.value.timeType = e |
| | | form.value.dataTime = proxy.dayjs(new Date()).format(e == "YEAR" ? "YYYY" : e == "MONTH" ? "YYYY-MM" : "YYYY-MM-DD") |
| | | } |
| | | // 辅助录入-产品产量录入-编辑 |
| | | function handleUpdate(row) { |
| | | reset(); |
| | | form.value = { ...row }; |
| | | open.value = true; |
| | | title.value = "编辑产品产量录入"; |
| | | reset() |
| | | form.value = { ...row } |
| | | open.value = true |
| | | title.value = "编辑产品产量录入" |
| | | } |
| | | // 辅助录入-产品产量录入-新增/编辑-保存 |
| | | function submitForm() { |
| | |
| | | if (valid) { |
| | | if (form.value.productOutputId != undefined) { |
| | | updateProductoutput(form.value).then((response) => { |
| | | proxy.$modal.msgSuccess("修改成功"); |
| | | open.value = false; |
| | | getList(); |
| | | }); |
| | | proxy.$modal.msgSuccess("修改成功") |
| | | open.value = false |
| | | getList() |
| | | }) |
| | | } else { |
| | | addProductoutput(form.value).then((response) => { |
| | | proxy.$modal.msgSuccess("新增成功"); |
| | | open.value = false; |
| | | getList(); |
| | | }); |
| | | proxy.$modal.msgSuccess("新增成功") |
| | | open.value = false |
| | | getList() |
| | | }) |
| | | } |
| | | } |
| | | }); |
| | | }) |
| | | } |
| | | // 辅助录入-产品产量录入-新增/编辑-取消 |
| | | function cancel() { |
| | | open.value = false; |
| | | reset(); |
| | | open.value = false |
| | | reset() |
| | | } |
| | | // 辅助录入-产品产量录入-新增/编辑-表单重置 |
| | | function reset() { |
| | |
| | | number: "1", |
| | | timeType: "", |
| | | unit: "", |
| | | }; |
| | | proxy.resetForm("formRef"); |
| | | } |
| | | proxy.resetForm("formRef") |
| | | } |
| | | // 辅助录入-产品产量录入-删除 |
| | | function handleDelete(row) { |
| | |
| | | .confirm('是否确认删除时间为"' + row.dataTime + '"的数据项?') |
| | | // .confirm('是否确认删除产品名称为"' + row.name + '"的数据项?') |
| | | .then(function () { |
| | | return delProductoutput(row.productOutputId); |
| | | return delProductoutput(row.productOutputId) |
| | | }) |
| | | .then(() => { |
| | | getList(); |
| | | proxy.$modal.msgSuccess("删除成功"); |
| | | getList() |
| | | proxy.$modal.msgSuccess("删除成功") |
| | | }) |
| | | .catch(() => {}); |
| | | .catch(() => {}) |
| | | } |
| | | </script> |
| | | <style scoped lang="scss"> |
| | |
| | | <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">重置</el-button> |
| | | </el-form-item> |
| | | <el-form-item style="float: right"> |
| | | <el-button type="primary" icon="plus" @click="handleAdd">新增</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | |
| | | <div class="table-bg-style"> |
| | | <div class="theme-dark-mt20 mb20 ml20"> |
| | | <el-button type="primary" icon="plus" @click="handleAdd">新增</el-button> |
| | | <!-- <el-button type="primary" icon="Delete">删除</el-button> --> |
| | | </div> |
| | | <div class="table-box"> |
| | | <el-table :data="tableData" v-loading="loading"> |
| | | <el-table-column prop="limitName" label="限值类型名称" show-overflow-tooltip align="center" /> |
| | |
| | | <el-form-item label="测点数量:" class="header-box"> |
| | | <span class="count">{{ ptNum || 0 }}</span> |
| | | </el-form-item> |
| | | <div class="mb20 ml20 mr20" style="float: right"> |
| | | <el-button type="primary" icon="plus" @click="handleAdd">新增</el-button> |
| | | <el-button type="primary" icon="Download" @click="handleExport">导出</el-button> |
| | | </div> |
| | | </el-form> |
| | | </div> |
| | | <div class="table-bg-style"> |
| | | <div class="theme-dark-mt20 mb20 ml20"> |
| | | <el-button type="primary" icon="plus" @click="handleAdd">新增</el-button> |
| | | <el-button type="primary" icon="Download" @click="handleExport">导出</el-button> |
| | | </div> |
| | | |
| | | <div class="table-box"> |
| | | <el-table :data="tableData" v-loading="loading"> |
| | | <el-table-column prop="gatewayNum" label="网关编号" show-overflow-tooltip align="center" /> |
| | |
| | | <template> |
| | | <div class="page"> |
| | | <div class="page-container"> |
| | | <div class="page-container-left"> |
| | | <LeftTree ref="leftTreeRef" @handleNodeClick="handleNodeClick" /> |
| | | <div class="page"> |
| | | <div class="page-container"> |
| | | <div class="page-container-left"> |
| | | <LeftTree ref="leftTreeRef" @handleNodeClick="handleNodeClick" /> |
| | | </div> |
| | | <div class="page-container-right"> |
| | | <div class="page-container-right"> |
| | | <div class="tab-box"> |
| | | <div class="tab-li" :class="tab == 1 ? 'is-tab' : ''" @click="handleTab('1')">采集点管理</div> |
| | | <div class="tab-li" :class="tab == 2 ? 'is-tab' : ''" @click="handleTab('2')">统计指标管理</div> |
| | | </div> |
| | | <BaseCard :title="currentNode ? currentNode.label + '--节点配置' : '暂无节点配置'"> |
| | | <div> |
| | | <div class="content-box" v-if="tab == '1'"> |
| | | <CollectionPointManage ref="collectionPointManageRef" /> |
| | | </div> |
| | | <div class="content-box" v-if="tab == '2'"> |
| | | <StatisticalIndicatorsManage ref="statisticalIndicatorsManageRef" /> |
| | | </div> |
| | | </div> |
| | | <div class="page-container-right"> |
| | | <div class="page-container-right"> |
| | | <div class="mb20 mt20 ml20 tab-box"> |
| | | <div class="tab-li" :class="tab == 1 ? 'is-tab' : ''" @click="handleTab('1')"> |
| | | 采集点管理 |
| | | </div> |
| | | <div class="tab-li" :class="tab == 2 ? 'is-tab' : ''" @click="handleTab('2')"> |
| | | 统计指标管理 |
| | | </div> |
| | | </div> |
| | | <BaseCard :title="currentNode ? currentNode.label + '--节点配置' : '暂无节点配置'"> |
| | | <div> |
| | | <div class="content-box" v-if="tab == '1'"> |
| | | <CollectionPointManage ref="collectionPointManageRef" /> |
| | | </div> |
| | | <div class="content-box" v-if="tab == '2'"> |
| | | <StatisticalIndicatorsManage ref="statisticalIndicatorsManageRef" /> |
| | | </div> |
| | | </div> |
| | | </BaseCard> |
| | | </div> |
| | | </div> |
| | | |
| | | </BaseCard> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <script setup name="preAlarmManage"> |
| | | import CollectionPointManage from './components/collectionpointmanage/CollectionPointManage.vue' |
| | | import StatisticalIndicatorsManage from './components/statisticalindicatorsmanage/StatisticalIndicatorsManage.vue' |
| | | import CollectionPointManage from "./components/collectionpointmanage/CollectionPointManage.vue" |
| | | import StatisticalIndicatorsManage from "./components/statisticalindicatorsmanage/StatisticalIndicatorsManage.vue" |
| | | |
| | | let currentNode = ref() |
| | | let tab = ref('1') |
| | | let tab = ref("1") |
| | | let collectionPointManageRef = ref() |
| | | let statisticalIndicatorsManageRef = ref('1') |
| | | let statisticalIndicatorsManageRef = ref("1") |
| | | |
| | | function handleTab(value) { |
| | | tab.value = value |
| | | nextTick(() => { |
| | | if (value == 1 && collectionPointManageRef.value) { |
| | | collectionPointManageRef.value.getList(currentNode.value) |
| | | } |
| | | if (value == 2 && statisticalIndicatorsManageRef.value) { |
| | | statisticalIndicatorsManageRef.value.getList(currentNode.value) |
| | | } |
| | | }); |
| | | |
| | | tab.value = value |
| | | nextTick(() => { |
| | | if (value == 1 && collectionPointManageRef.value) { |
| | | collectionPointManageRef.value.getList(currentNode.value) |
| | | } |
| | | if (value == 2 && statisticalIndicatorsManageRef.value) { |
| | | statisticalIndicatorsManageRef.value.getList(currentNode.value) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | function handleNodeClick(data) { |
| | | currentNode.value = data |
| | | handleTab(tab.value) |
| | | // handleQuery(); |
| | | currentNode.value = data |
| | | handleTab(tab.value) |
| | | // handleQuery(); |
| | | } |
| | | |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | |
| | | .page-box { |
| | | height: calc(100vh - 145px); |
| | | height: calc(100vh - 145px); |
| | | |
| | | .tree-box { |
| | | height: calc(100% - 70px); |
| | | overflow-y: auto !important; |
| | | .tree-box { |
| | | height: calc(100% - 70px); |
| | | overflow-y: auto !important; |
| | | } |
| | | |
| | | .select-box { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | :deep .el-icon { |
| | | color: #fff; |
| | | margin: 0 10px 0 15px; |
| | | font-size: 20px; |
| | | // &:hover{ |
| | | // color: #3371EB; |
| | | // } |
| | | } |
| | | } |
| | | |
| | | .select-box { |
| | | display: flex; |
| | | align-items: center; |
| | | .node-opt { |
| | | flex: 1; |
| | | text-align: right; |
| | | margin-right: 5px; |
| | | |
| | | :deep .el-icon { |
| | | color: #fff; |
| | | margin: 0 10px 0 15px; |
| | | font-size: 20px; |
| | | // &:hover{ |
| | | // color: #3371EB; |
| | | // } |
| | | } |
| | | :deep .el-icon { |
| | | color: #fff; |
| | | margin-right: 5px; |
| | | } |
| | | |
| | | .node-opt { |
| | | flex: 1; |
| | | text-align: right; |
| | | margin-right: 5px; |
| | | |
| | | :deep .el-icon { |
| | | color: #fff; |
| | | margin-right: 5px; |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | | |
| | | :deep .el-tabs__nav-wrap:after { |
| | | background: transparent; |
| | | background: transparent; |
| | | } |
| | | |
| | | :deep .el-tabs__item { |
| | | color: #fff; |
| | | font-size: 20px; |
| | | padding: 0 20px; |
| | | color: #fff; |
| | | // font-size: 20px; |
| | | padding: 0 20px; |
| | | |
| | | &.is-active, |
| | | &:hover { |
| | | color: #999 !important; |
| | | } |
| | | &.is-active, |
| | | &:hover { |
| | | color: #999 !important; |
| | | } |
| | | } |
| | | |
| | | .tab-box { |
| | | display: flex; |
| | | align-items: center; |
| | | display: flex; |
| | | align-items: center; |
| | | color: #fff; |
| | | border-bottom: 1px solid #3371eb; |
| | | margin-right: 20px; |
| | | font-size: 15px; |
| | | margin-left: 15px; |
| | | |
| | | .tab-li { |
| | | cursor: pointer; |
| | | border: 1px solid #3371eb; |
| | | padding: 8px 20px; |
| | | border-radius: 5px 5px 0 0; |
| | | } |
| | | |
| | | .is-tab { |
| | | background: #3371eb; |
| | | color: #fff; |
| | | border-bottom: 1px solid #3371EB; |
| | | margin-right: 20px; |
| | | } |
| | | } |
| | | .themeDark { |
| | | .tab-box { |
| | | color: #fff; |
| | | } |
| | | } |
| | | |
| | | .tab-li { |
| | | cursor: pointer; |
| | | border: 1px solid #3371EB; |
| | | padding: 10px 25px; |
| | | border-radius: 5px 5px 0 0; |
| | | } |
| | | |
| | | .is-tab { |
| | | background: #3371EB; |
| | | } |
| | | .themeLight { |
| | | .tab-box { |
| | | color: #333; |
| | | } |
| | | } |
| | | |
| | | .content-box { |
| | | height: calc(100vh - 317px) !important; |
| | | |
| | | height: calc(100vh - 317px) !important; |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | <el-button icon="Refresh" @click="resetQuery">重置</el-button> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Download" @click="handleExport"> 导出 </el-button> |
| | | <el-button type="warning" icon="Download" @click="handleExport"> 导出 </el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div |
| | | style="height: calc(100vh - 220px) !important; max-height: calc(100vh - 220px) !important; overflow-y: auto" |
| | | > |
| | | <div class="card-list" v-if="listTop.length > 1"> |
| | | <!-- <div class="" v-if="listTop.length > 1" style="margin: 12px 0 0 18px"> |
| | | <el-button @click="dialogVisible = true"> 查看更多 </el-button> |
| | | </div> |
| | | </div> --> |
| | | <template v-for="(row, rowIndex) in listTop" :key="rowIndex" v-loading="loading"> |
| | | <div class="card-list" v-if="rowIndex == 0"> |
| | | <template v-for="(item, index) in row" :key="index"> |
| | |
| | | color: "#2979ff", |
| | | }, |
| | | }, |
| | | color: ["#2979ff", "#19be6b", "#ff9900", "#fa3534"], |
| | | color: ["#40c2ff", "#2979ff", "#ff9900", "#fa3534"], |
| | | tooltip: { |
| | | trigger: "axis", |
| | | axisPointer: { |
| | |
| | | }, |
| | | }, |
| | | grid: { |
| | | top: "40", |
| | | top: "60", |
| | | left: "50", |
| | | right: "40", |
| | | bottom: "20", |
| | |
| | | console.log(expectedData) |
| | | |
| | | lineChartData.value = { |
| | | // xData: [ |
| | | // "0时", |
| | | // "1时", |
| | | // "2时", |
| | | // "3时", |
| | | // "4时", |
| | | // "5时", |
| | | // "6时", |
| | | // "7时", |
| | | // "8时", |
| | | // "9时", |
| | | // "10时", |
| | | // "11时", |
| | | // "12时", |
| | | // "13时", |
| | | // "14时", |
| | | // "15时", |
| | | // "16时", |
| | | // "17时", |
| | | // "18时", |
| | | // "19时", |
| | | // "20时", |
| | | // "21时", |
| | | // "22时", |
| | | // "23时", |
| | | // ], |
| | | xData: actualData, |
| | | yData: expectedData, |
| | | title, |
| | |
| | | </div> |
| | | </div> |
| | | <div class="chart-box" v-loading="loading" v-show="activeKey === 1"> |
| | | <LineChart ref="LineChartRef" :chartData="lineChartData" /> |
| | | <LineChart ref="LineChartRef" :chartData="lineChartData" :chartType="'bar'" /> |
| | | </div> |
| | | <div style="margin-top: 16px" v-show="activeKey === 2"> |
| | | <div class="" style="padding: 0 16px"> |
| | |
| | | <div class="form-card"> |
| | | <el-form :model="queryParams" ref="queryRef" :inline="true"> |
| | | <el-form-item label="期间" prop="timeType"> |
| | | <el-select v-model="queryParams.timeType" placeholder="期间" clearable style="width: 120px" |
| | | @change="handleTimeType"> |
| | | <el-select |
| | | v-model="queryParams.timeType" |
| | | placeholder="期间" |
| | | clearable |
| | | style="width: 120px" |
| | | @change="handleTimeType" |
| | | > |
| | | <el-option v-for="dict in period" :key="dict.value" :label="dict.label" :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="时间"> |
| | | <el-date-picker v-model="queryParams.dataTime" :type="queryParams.timeType == 'YEAR' |
| | | ? 'year' |
| | | : queryParams.timeType == 'MONTH' |
| | | ? 'month' |
| | | : 'date' |
| | | " :format="queryParams.timeType == 'YEAR' |
| | | ? 'YYYY' |
| | | : queryParams.timeType == 'MONTH' |
| | | ? 'YYYY-MM' |
| | | : 'YYYY-MM-DD' |
| | | " value-format="YYYY-MM-DD" placeholder="时间" style="width: 100%" /> |
| | | <el-date-picker |
| | | v-model="queryParams.dataTime" |
| | | :type="queryParams.timeType == 'YEAR' ? 'year' : queryParams.timeType == 'MONTH' ? 'month' : 'date'" |
| | | :format=" |
| | | queryParams.timeType == 'YEAR' ? 'YYYY' : queryParams.timeType == 'MONTH' ? 'YYYY-MM' : 'YYYY-MM-DD' |
| | | " |
| | | value-format="YYYY-MM-DD" |
| | | placeholder="时间" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> |
| | | 搜索 |
| | | </el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">重置</el-button> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> 搜索 </el-button> |
| | | <!-- <el-button icon="Refresh" @click="resetQuery">重置</el-button> --> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Download" @click="handleExport"> |
| | | 导出 |
| | | </el-button> |
| | | <el-button type="warning" icon="Download" @click="handleExport"> 导出 </el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div style=" |
| | | height: calc(100vh - 220px) !important; |
| | | max-height: calc(100vh - 220px) !important; |
| | | overflow-y: auto; |
| | | "> |
| | | <div |
| | | style="height: calc(100vh - 220px) !important; max-height: calc(100vh - 220px) !important; overflow-y: auto" |
| | | > |
| | | <BaseCard :title="queryParams.nodeName + '-综合能耗趋势'"> |
| | | <div class="chart-box" v-loading="loading"> |
| | | <div id="Chart1" /> |
| | |
| | | <el-col :span="7"> |
| | | <BaseCard :title="queryParams.nodeName + '-综合能耗同比环比'"> |
| | | <div class="card-list" v-loading="loading"> |
| | | <div class="card-list-item" v-show="settingsStore.sideTheme == 'theme-dark'" |
| | | :style="{ backgroundImage: 'url(' + item.bg + ')' }" v-for="item in comprehensiveTable" |
| | | :key="item.title"> |
| | | <div |
| | | class="card-list-item" |
| | | v-show="settingsStore.sideTheme == 'theme-dark'" |
| | | :style="{ backgroundImage: 'url(' + item.bg + ')' }" |
| | | v-for="item in comprehensiveTable" |
| | | :key="item.title" |
| | | > |
| | | <div class="item-left"> |
| | | {{ Math.abs(item.icon) }}% |
| | | <el-icon :color="item.icon > 0 ? 'green' : item.icon < 0 ? 'red' : '' |
| | | "> |
| | | <el-icon :color="item.icon > 0 ? 'green' : item.icon < 0 ? 'red' : ''"> |
| | | <Top v-if="item.icon > 0" /> |
| | | <Bottom v-if="item.icon < 0" /> |
| | | </el-icon> |
| | |
| | | <div class="item-right-bottom-left"> |
| | | {{ node.label }} |
| | | </div> |
| | | <div class="item-right-bottom-right"> |
| | | {{ Number(node.value.toFixed(2)) }} tce |
| | | </div> |
| | | <div class="item-right-bottom-right">{{ Number(node.value.toFixed(2)) }} tce</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="card-list-item" v-show="settingsStore.sideTheme == 'theme-light'" |
| | | v-for="item in comprehensiveTable" :key="item.title"> |
| | | <div |
| | | class="card-list-item" |
| | | v-show="settingsStore.sideTheme == 'theme-light'" |
| | | v-for="item in comprehensiveTable" |
| | | :key="item.title" |
| | | > |
| | | <div class="item-left"> |
| | | {{ Math.abs(item.icon) }} % |
| | | <el-icon :color="item.icon > 0 ? 'green' : item.icon < 0 ? 'red' : '' |
| | | "> |
| | | <el-icon :color="item.icon > 0 ? 'green' : item.icon < 0 ? 'red' : ''"> |
| | | <Top v-if="item.icon > 0" /> |
| | | <Bottom v-if="item.icon < 0" /> |
| | | </el-icon> |
| | |
| | | <div class="item-right-bottom-left"> |
| | | {{ node.label }} |
| | | </div> |
| | | <div class="item-right-bottom-right"> |
| | | {{ Number(node.value.toFixed(2)) }}tce |
| | | </div> |
| | | <div class="item-right-bottom-right">{{ Number(node.value.toFixed(2)) }}tce</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <BaseCard :title="queryParams.nodeName + '-综合能耗统计分析表'" v-loading="loading"> |
| | | <div class="table-box"> |
| | | <el-table :data="comprehensiveList" show-summary> |
| | | <el-table-column label="日期" align="center" key="currentTime" prop="currentTime" |
| | | :show-overflow-tooltip="true" /> |
| | | <el-table-column label="综合能耗量(tce)" align="center" key="currentValue" prop="currentValue" |
| | | :show-overflow-tooltip="true" /> |
| | | <el-table-column |
| | | label="日期" |
| | | align="center" |
| | | key="currentTime" |
| | | prop="currentTime" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="综合能耗量(tce)" |
| | | align="center" |
| | | key="currentValue" |
| | | prop="currentValue" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | </el-table> |
| | | </div> |
| | | </BaseCard> |
| | |
| | | </template> |
| | | |
| | | <script setup name="comprehensive"> |
| | | import { |
| | | listComprehensive, |
| | | listYoY, |
| | | listEnergyRanking, |
| | | } from "@/api/energyAnalysis/energyAnalysis"; |
| | | import { listEnergyTypeList } from "@/api/modelConfiguration/energyType"; |
| | | import * as echarts from "echarts"; |
| | | const { proxy } = getCurrentInstance(); |
| | | const { period } = proxy.useDict("period"); |
| | | import { useRoute } from "vue-router"; |
| | | import useSettingsStore from "@/store/modules/settings"; |
| | | const settingsStore = useSettingsStore(); |
| | | import { listComprehensive, listYoY, listEnergyRanking } from "@/api/energyAnalysis/energyAnalysis" |
| | | import { listEnergyTypeList } from "@/api/modelConfiguration/energyType" |
| | | import * as echarts from "echarts" |
| | | const { proxy } = getCurrentInstance() |
| | | const { period } = proxy.useDict("period") |
| | | import { useRoute } from "vue-router" |
| | | import useSettingsStore from "@/store/modules/settings" |
| | | const settingsStore = useSettingsStore() |
| | | watch( |
| | | () => settingsStore.sideTheme, |
| | | (val) => { |
| | | getList(); |
| | | getList() |
| | | } |
| | | ); |
| | | import index_card_1 from "@/assets/images/home/index-card-3.png"; |
| | | import index_card_2 from "@/assets/images/home/index-card-4.png"; |
| | | ) |
| | | import index_card_1 from "@/assets/images/home/index-card-3.png" |
| | | import index_card_2 from "@/assets/images/home/index-card-4.png" |
| | | const comprehensiveTable = ref([ |
| | | { |
| | | bg: index_card_1, |
| | |
| | | }, |
| | | ], |
| | | }, |
| | | ]); |
| | | const comprehensiveList = ref([]); |
| | | const loading = ref(false); |
| | | ]) |
| | | const comprehensiveList = ref([]) |
| | | const loading = ref(false) |
| | | const data = reactive({ |
| | | queryParams: { |
| | | nodeId: null, |
| | |
| | | query: { |
| | | modelCode: null, |
| | | }, |
| | | }); |
| | | const { queryParams, query } = toRefs(data); |
| | | }) |
| | | const { queryParams, query } = toRefs(data) |
| | | /** 节点单击事件 */ |
| | | function handleNodeClick(data) { |
| | | queryParams.value.nodeId = data.id; |
| | | queryParams.value.nodeName = data.label; |
| | | handleTimeType(period.value[0].value); |
| | | handleQuery(); |
| | | queryParams.value.nodeId = data.id |
| | | queryParams.value.nodeName = data.label |
| | | handleTimeType(period.value[0].value) |
| | | handleQuery() |
| | | } |
| | | function handleTimeType(e) { |
| | | queryParams.value.timeType = e; |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD"); |
| | | queryParams.value.timeType = e |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") |
| | | } |
| | | // 能耗对比分析-综合能耗分析-列表 |
| | | function getList() { |
| | | loading.value = true; |
| | | loading.value = true |
| | | // 在初始化之前,先dispose旧的实例 |
| | | if (echarts.getInstanceByDom(document.getElementById("Chart1"))) { |
| | | echarts.dispose(document.getElementById("Chart1")); |
| | | echarts.dispose(document.getElementById("Chart1")) |
| | | } |
| | | if (echarts.getInstanceByDom(document.getElementById("Chart2"))) { |
| | | echarts.dispose(document.getElementById("Chart2")); |
| | | echarts.dispose(document.getElementById("Chart2")) |
| | | } |
| | | if (echarts.getInstanceByDom(document.getElementById("Chart3"))) { |
| | | echarts.dispose(document.getElementById("Chart3")); |
| | | echarts.dispose(document.getElementById("Chart3")) |
| | | } |
| | | const myChart1 = echarts.init(document.getElementById("Chart1")); |
| | | const myChart2 = echarts.init(document.getElementById("Chart2")); |
| | | const myChart3 = echarts.init(document.getElementById("Chart3")); |
| | | const myChart1 = echarts.init(document.getElementById("Chart1")) |
| | | const myChart2 = echarts.init(document.getElementById("Chart2")) |
| | | const myChart3 = echarts.init(document.getElementById("Chart3")) |
| | | listComprehensive( |
| | | proxy.addDateRange({ |
| | | ...queryParams.value, |
| | |
| | | }) |
| | | ).then((res) => { |
| | | if (!!res.code && res.code == 200) { |
| | | loading.value = false; |
| | | let xdata = []; |
| | | let yvalue = []; |
| | | let ycompareValue = []; |
| | | let yqoq = []; |
| | | loading.value = false |
| | | let xdata = [] |
| | | let yvalue = [] |
| | | let ycompareValue = [] |
| | | let yqoq = [] |
| | | if (!!res.data.chartDataList) { |
| | | res.data.chartDataList.map((item) => { |
| | | xdata.push( |
| | | proxy |
| | | .dayjs(item.xdata) |
| | | .format( |
| | | queryParams.value.timeType == "YEAR" |
| | | ? "MM月" |
| | | : queryParams.value.timeType == "MONTH" |
| | | ? "DD日" |
| | | : "HH时" |
| | | queryParams.value.timeType == "YEAR" ? "MM月" : queryParams.value.timeType == "MONTH" ? "DD日" : "HH时" |
| | | ) |
| | | ); |
| | | yvalue.push(!!item.yvalue ? item.yvalue : 0); |
| | | ycompareValue.push(!!item.ycompareValue ? item.ycompareValue : 0); |
| | | yqoq.push(!!item.yqoq ? item.yqoq : 0); |
| | | }); |
| | | ) |
| | | yvalue.push(!!item.yvalue ? item.yvalue : 0) |
| | | ycompareValue.push(!!item.ycompareValue ? item.ycompareValue : 0) |
| | | yqoq.push(!!item.yqoq ? item.yqoq : 0) |
| | | }) |
| | | } |
| | | setTimeout(() => { |
| | | myChart1.setOption({ |
| | |
| | | itemWidth: 14, |
| | | itemHeight: 10, |
| | | textStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | grid: { |
| | | top: "45", |
| | | left: "7%", |
| | | top: "60", |
| | | left: "5%", |
| | | right: "5%", |
| | | bottom: "10", |
| | | containLabel: true, |
| | |
| | | axisLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [5, 0, 0, 0], |
| | | // formatter: '{value} ml' |
| | |
| | | type: "value", |
| | | name: "tce", |
| | | nameTextStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [0, 0, 5, 0], |
| | | }, |
| | |
| | | show: true, |
| | | lineStyle: { |
| | | type: "dashed", |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | }, |
| | | }, |
| | |
| | | barWidth: "16", |
| | | tooltip: { |
| | | valueFormatter: function (value) { |
| | | return value + "tce"; |
| | | return value + "tce" |
| | | }, |
| | | }, |
| | | itemStyle: { |
| | |
| | | barWidth: "16", |
| | | tooltip: { |
| | | valueFormatter: function (value) { |
| | | return value + "tce"; |
| | | return value + "tce" |
| | | }, |
| | | }, |
| | | itemStyle: { |
| | |
| | | }, |
| | | }, |
| | | ], |
| | | }); |
| | | }, 100); |
| | | let total = 0; |
| | | let seriesData = []; |
| | | }) |
| | | }, 100) |
| | | let total = 0 |
| | | let seriesData = [] |
| | | if (!!res.data.energyProportion && res.data.energyProportion.length > 0) { |
| | | res.data.energyProportion.map((item) => { |
| | | seriesData.push({ |
| | | name: item.energyName, |
| | | value: Number(item.count).toFixed(2), |
| | | }); |
| | | }); |
| | | }) |
| | | }) |
| | | seriesData.forEach(function (val) { |
| | | total += Number(val.value); |
| | | }); |
| | | total += Number(val.value) |
| | | }) |
| | | } else { |
| | | listEnergyTypeList().then((resEnergyTypeList) => { |
| | | resEnergyTypeList.data.map((item) => { |
| | | seriesData.push({ |
| | | name: item.enername, |
| | | value: Number(0), |
| | | }); |
| | | }); |
| | | }); |
| | | }) |
| | | }) |
| | | }) |
| | | } |
| | | setTimeout(() => { |
| | | myChart2.setOption({ |
| | |
| | | verticalAlign: "middle", |
| | | rich: { |
| | | name: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | }, |
| | | value: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | }, |
| | | rate: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | }, |
| | | }, |
| | | }, |
| | | data: seriesData, |
| | | formatter: (name) => { |
| | | let target, percent, muid; |
| | | let target, percent, muid |
| | | for (let i = 0; i < seriesData.length; i++) { |
| | | if (seriesData[i].name === name) { |
| | | target = seriesData[i].value; |
| | | muid = seriesData[i].muid; |
| | | percent = |
| | | total != 0 ? ((target / total) * 100).toFixed(2) : 0; |
| | | target = seriesData[i].value |
| | | muid = seriesData[i].muid |
| | | percent = total != 0 ? ((target / total) * 100).toFixed(2) : 0 |
| | | } |
| | | } |
| | | return `{name|${name}(tce) }{value| ${target}} {rate| ${percent}%}`; |
| | | return `{name|${name}(tce) }{value| ${target}} {rate| ${percent}%}` |
| | | }, |
| | | }, |
| | | series: [ |
| | |
| | | data: seriesData, |
| | | }, |
| | | ], |
| | | }); |
| | | }, 100); |
| | | }) |
| | | }, 100) |
| | | |
| | | comprehensiveList.value = !!res.data.dataList ? res.data.dataList : []; |
| | | comprehensiveList.value = !!res.data.dataList ? res.data.dataList : [] |
| | | window.addEventListener( |
| | | "resize", |
| | | () => { |
| | | myChart1.resize(); |
| | | myChart2.resize(); |
| | | myChart1.resize() |
| | | myChart2.resize() |
| | | }, |
| | | { passive: true } |
| | | ); |
| | | ) |
| | | } |
| | | }); |
| | | }) |
| | | listYoY( |
| | | proxy.addDateRange({ |
| | | ...queryParams.value, |
| | | }) |
| | | ).then((res) => { |
| | | if (!!res.data.tongbi) { |
| | | comprehensiveTable.value[0].icon = !!res.data.tongbi.ratio |
| | | ? res.data.tongbi.ratio |
| | | : 0; |
| | | comprehensiveTable.value[0].data[0].label = !!res.data.tongbi.currentTime |
| | | ? res.data.tongbi.currentTime |
| | | : 0; |
| | | comprehensiveTable.value[0].data[0].value = !!res.data.tongbi.currentValue |
| | | ? res.data.tongbi.currentValue |
| | | : 0; |
| | | comprehensiveTable.value[0].data[1].label = !!res.data.tongbi.compareTime |
| | | ? res.data.tongbi.compareTime |
| | | : 0; |
| | | comprehensiveTable.value[0].data[1].value = !!res.data.tongbi.compareValue |
| | | ? res.data.tongbi.compareValue |
| | | : 0; |
| | | comprehensiveTable.value[0].icon = !!res.data.tongbi.ratio ? res.data.tongbi.ratio : 0 |
| | | comprehensiveTable.value[0].data[0].label = !!res.data.tongbi.currentTime ? res.data.tongbi.currentTime : 0 |
| | | comprehensiveTable.value[0].data[0].value = !!res.data.tongbi.currentValue ? res.data.tongbi.currentValue : 0 |
| | | comprehensiveTable.value[0].data[1].label = !!res.data.tongbi.compareTime ? res.data.tongbi.compareTime : 0 |
| | | comprehensiveTable.value[0].data[1].value = !!res.data.tongbi.compareValue ? res.data.tongbi.compareValue : 0 |
| | | } |
| | | if (!!res.data.huanbi) { |
| | | comprehensiveTable.value[1].icon = !!res.data.huanbi.ratio |
| | | ? res.data.huanbi.ratio |
| | | : 0; |
| | | comprehensiveTable.value[1].data[0].label = !!res.data.huanbi.currentTime |
| | | ? res.data.huanbi.currentTime |
| | | : 0; |
| | | comprehensiveTable.value[1].data[0].value = !!res.data.huanbi.currentValue |
| | | ? res.data.huanbi.currentValue |
| | | : 0; |
| | | comprehensiveTable.value[1].data[1].label = !!res.data.huanbi.compareTime |
| | | ? res.data.huanbi.compareTime |
| | | : 0; |
| | | comprehensiveTable.value[1].data[1].value = !!res.data.huanbi.compareValue |
| | | ? res.data.huanbi.compareValue |
| | | : 0; |
| | | comprehensiveTable.value[1].icon = !!res.data.huanbi.ratio ? res.data.huanbi.ratio : 0 |
| | | comprehensiveTable.value[1].data[0].label = !!res.data.huanbi.currentTime ? res.data.huanbi.currentTime : 0 |
| | | comprehensiveTable.value[1].data[0].value = !!res.data.huanbi.currentValue ? res.data.huanbi.currentValue : 0 |
| | | comprehensiveTable.value[1].data[1].label = !!res.data.huanbi.compareTime ? res.data.huanbi.compareTime : 0 |
| | | comprehensiveTable.value[1].data[1].value = !!res.data.huanbi.compareValue ? res.data.huanbi.compareValue : 0 |
| | | } |
| | | }); |
| | | }) |
| | | listEnergyRanking( |
| | | proxy.addDateRange({ |
| | | ...queryParams.value, |
| | | }) |
| | | ).then((res) => { |
| | | let nodeName = []; |
| | | let energyConsumption = []; |
| | | let maxenergyConsumption = []; |
| | | let nodeName = [] |
| | | let energyConsumption = [] |
| | | let maxenergyConsumption = [] |
| | | if (!!res.data) { |
| | | res.data.map((item, index) => { |
| | | nodeName.push(item.nodeName); |
| | | energyConsumption.push( |
| | | !!item.energyConsumption ? item.energyConsumption : 0 |
| | | ); |
| | | maxenergyConsumption[index] = res.data[0].energyConsumption; |
| | | }); |
| | | nodeName.push(item.nodeName) |
| | | energyConsumption.push(!!item.energyConsumption ? item.energyConsumption : 0) |
| | | maxenergyConsumption[index] = res.data[0].energyConsumption |
| | | }) |
| | | } |
| | | setTimeout(() => { |
| | | myChart3.setOption({ |
| | |
| | | type: "none", |
| | | }, |
| | | formatter: function (params) { |
| | | return params[0].name + " : " + params[0].value; |
| | | return params[0].name + " : " + params[0].value |
| | | }, |
| | | }, |
| | | xAxis: { |
| | |
| | | inverse: true, |
| | | axisLabel: { |
| | | interval: 0, |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#000", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#000", |
| | | fontSize: 14, |
| | | formatter: function (value, index) { |
| | | if (index == 0) { |
| | | return ( |
| | | "{idx0|" + |
| | | (1 + index + 0) + |
| | | "}{title|" + |
| | | value + |
| | | "}" |
| | | ); |
| | | return "{idx0|" + (1 + index + 0) + "}{title|" + value + "}" |
| | | } else if (index == 1) { |
| | | return ( |
| | | "{idx1|" + |
| | | (1 + index + 0) + |
| | | "}{title|" + |
| | | value + |
| | | "}" |
| | | ); |
| | | return "{idx1|" + (1 + index + 0) + "}{title|" + value + "}" |
| | | } else if (index == 2) { |
| | | return ( |
| | | "{idx2|" + |
| | | (1 + index + 0) + |
| | | "}{title|" + |
| | | value + |
| | | "}" |
| | | ); |
| | | return "{idx2|" + (1 + index + 0) + "}{title|" + value + "}" |
| | | } else { |
| | | return ( |
| | | "{idx|" + (1 + index + 0) + "}{title|" + value + "}" |
| | | ); |
| | | return "{idx|" + (1 + index + 0) + "}{title|" + value + "}" |
| | | } |
| | | }, |
| | | rich: { |
| | |
| | | axisLine: "none", |
| | | show: true, |
| | | axisLabel: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#000", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#000", |
| | | fontSize: "12", |
| | | }, |
| | | data: energyConsumption, |
| | |
| | | data: energyConsumption, |
| | | }, |
| | | ], |
| | | }); |
| | | }, 100); |
| | | }) |
| | | }, 100) |
| | | window.addEventListener( |
| | | "resize", |
| | | () => { |
| | | myChart3.resize(); |
| | | myChart3.resize() |
| | | }, |
| | | { passive: true } |
| | | ); |
| | | }); |
| | | ) |
| | | }) |
| | | } |
| | | // 能耗对比分析-综合能耗分析-搜索 |
| | | function handleQuery() { |
| | | getList(); |
| | | getList() |
| | | } |
| | | // 能耗对比分析-综合能耗分析-重置 |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef"); |
| | | handleTimeType(period.value[0].value); |
| | | queryParams.value.analysisType = "YOY"; |
| | | handleQuery(); |
| | | proxy.resetForm("queryRef") |
| | | handleTimeType(period.value[0].value) |
| | | queryParams.value.analysisType = "YOY" |
| | | handleQuery() |
| | | } |
| | | // 能耗对比分析-综合能耗分析-导出 |
| | | function handleExport() { |
| | |
| | | ...query.value, |
| | | }, |
| | | `${queryParams.value.nodeName}-综合能耗统计分析表_${new Date().getTime()}.xlsx` |
| | | ); |
| | | ) |
| | | } |
| | | </script> |
| | | <style scoped lang="scss"> |
| | |
| | | <div class="form-card"> |
| | | <el-form :model="queryParams" ref="queryRef" :inline="true"> |
| | | <el-form-item label="期间" prop="timeType"> |
| | | <el-select v-model="queryParams.timeType" placeholder="期间" clearable style="width: 120px" |
| | | @change="handleTimeType"> |
| | | <el-select |
| | | v-model="queryParams.timeType" |
| | | placeholder="期间" |
| | | clearable |
| | | style="width: 120px" |
| | | @change="handleTimeType" |
| | | > |
| | | <el-option v-for="dict in period" :key="dict.value" :label="dict.label" :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="时间"> |
| | | <el-date-picker v-model="queryParams.dataTime" :type="queryParams.timeType == 'YEAR' |
| | | ? 'year' |
| | | : queryParams.timeType == 'MONTH' |
| | | ? 'month' |
| | | : 'date' |
| | | " :format="queryParams.timeType == 'YEAR' |
| | | ? 'YYYY' |
| | | : queryParams.timeType == 'MONTH' |
| | | ? 'YYYY-MM' |
| | | : 'YYYY-MM-DD' |
| | | " value-format="YYYY-MM-DD" placeholder="时间" style="width: 100%" /> |
| | | <el-date-picker |
| | | v-model="queryParams.dataTime" |
| | | :type="queryParams.timeType == 'YEAR' ? 'year' : queryParams.timeType == 'MONTH' ? 'month' : 'date'" |
| | | :format=" |
| | | queryParams.timeType == 'YEAR' ? 'YYYY' : queryParams.timeType == 'MONTH' ? 'YYYY-MM' : 'YYYY-MM-DD' |
| | | " |
| | | value-format="YYYY-MM-DD" |
| | | placeholder="时间" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="能源类型" prop="energyType"> |
| | | <el-select v-model="queryParams.energyType" placeholder="能源类型" clearable style="width: 120px"> |
| | | <el-option :label="item.enername" :value="item.enersno" v-for="item in energyTypeList" |
| | | :key="item.enersno" @click="handleEnergyType(item)" /> |
| | | <el-option |
| | | :label="item.enername" |
| | | :value="item.enersno" |
| | | v-for="item in energyTypeList" |
| | | :key="item.enersno" |
| | | @click="handleEnergyType(item)" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> |
| | | 搜索 |
| | | </el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">重置</el-button> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> 搜索 </el-button> |
| | | <!-- <el-button icon="Refresh" @click="resetQuery">重置</el-button> --> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button :type="queryParams.analysisType == 'YOY' ? 'primary' : ''" @click="handleAnalysisType('YOY')"> |
| | | 同比 |
| | | </el-button> |
| | | <el-button :type="queryParams.analysisType == 'MOM' ? 'primary' : ''" @click="handleAnalysisType('MOM')"> |
| | | 环比 |
| | | </el-button> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Download" @click="handleExport"> |
| | | 导出 |
| | | </el-button> |
| | | <el-button type="warning" icon="Download" @click="handleExport"> 导出 </el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div style=" |
| | | height: calc(100vh - 220px) !important; |
| | | max-height: calc(100vh - 220px) !important; |
| | | overflow-y: auto; |
| | | " v-loading="loading"> |
| | | <!-- <el-row :gutter="24"> |
| | | <el-col :span="16"> --> |
| | | <div |
| | | style="height: calc(100vh - 220px) !important; max-height: calc(100vh - 220px) !important; overflow-y: auto" |
| | | v-loading="loading" |
| | | > |
| | | <el-tabs v-model="queryParams.analysisType" type="card" @tab-change="handleAnalysisType"> |
| | | <el-tab-pane label="同比" name="YOY"> </el-tab-pane> |
| | | <el-tab-pane label="环比" name="MOM"> </el-tab-pane> |
| | | </el-tabs> |
| | | <BaseCard :title="queryParams.nodeName + '-厂区能耗分析'"> |
| | | <div class="chart-box"> |
| | | <div id="Chart1" /> |
| | |
| | | </BaseCard> |
| | | </el-col> |
| | | <el-col :span="24"> --> |
| | | <BaseCard :title="queryParams.nodeName + |
| | | '-厂区能耗分析统计分析表-' + |
| | | queryParams.enername |
| | | "> |
| | | <BaseCard :title="queryParams.nodeName + '-厂区能耗分析统计分析表-' + queryParams.enername"> |
| | | <div class="table-box"> |
| | | <el-table :data="departmentList" show-summary> |
| | | <el-table-column label="本期时间" align="center" key="currentTime" prop="currentTime" |
| | | :show-overflow-tooltip="true" /> |
| | | <el-table-column :label="'本期耗' + |
| | | queryParams.enername + |
| | | '(' + |
| | | queryParams.muid + |
| | | ')' |
| | | " align="center" key="currentValue" prop="currentValue" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="同期时间" align="center" key="compareTime" prop="compareTime" |
| | | :show-overflow-tooltip="true" /> |
| | | <el-table-column :label="'同期耗' + |
| | | queryParams.enername + |
| | | '(' + |
| | | queryParams.muid + |
| | | ')' |
| | | " align="center" key="compareValue" prop="compareValue" :show-overflow-tooltip="true" /> |
| | | <el-table-column :label="(queryParams.analysisType == 'YOY' ? '同' : '环') + '比(%)' |
| | | " align="center" key="ratio" prop="ratio" :show-overflow-tooltip="true" width="200" /> |
| | | <el-table-column |
| | | label="本期时间" |
| | | align="center" |
| | | key="currentTime" |
| | | prop="currentTime" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | :label="'本期耗' + queryParams.enername + '(' + queryParams.muid + ')'" |
| | | align="center" |
| | | key="currentValue" |
| | | prop="currentValue" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="同期时间" |
| | | align="center" |
| | | key="compareTime" |
| | | prop="compareTime" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | :label="'同期耗' + queryParams.enername + '(' + queryParams.muid + ')'" |
| | | align="center" |
| | | key="compareValue" |
| | | prop="compareValue" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | :label="(queryParams.analysisType == 'YOY' ? '同' : '环') + '比(%)'" |
| | | align="center" |
| | | key="ratio" |
| | | prop="ratio" |
| | | :show-overflow-tooltip="true" |
| | | width="200" |
| | | /> |
| | | </el-table> |
| | | </div> |
| | | </BaseCard> |
| | |
| | | </template> |
| | | |
| | | <script setup name="department"> |
| | | import { |
| | | listRegion, |
| | | listDepartment, |
| | | } from "@/api/energyAnalysis/energyAnalysis"; |
| | | import { listEnergyTypeList } from "@/api/modelConfiguration/energyType"; |
| | | import * as echarts from "echarts"; |
| | | const { proxy } = getCurrentInstance(); |
| | | const { period } = proxy.useDict("period"); |
| | | import { useRoute } from "vue-router"; |
| | | import useSettingsStore from "@/store/modules/settings"; |
| | | const settingsStore = useSettingsStore(); |
| | | import { listRegion, listDepartment } from "@/api/energyAnalysis/energyAnalysis" |
| | | import { listEnergyTypeList } from "@/api/modelConfiguration/energyType" |
| | | import * as echarts from "echarts" |
| | | const { proxy } = getCurrentInstance() |
| | | const { period } = proxy.useDict("period") |
| | | import { useRoute } from "vue-router" |
| | | import useSettingsStore from "@/store/modules/settings" |
| | | const settingsStore = useSettingsStore() |
| | | watch( |
| | | () => settingsStore.sideTheme, |
| | | (val) => { |
| | | getList(); |
| | | getList() |
| | | } |
| | | ); |
| | | const energyTypeList = ref(undefined); |
| | | const departmentList = ref([]); |
| | | const loading = ref(false); |
| | | ) |
| | | const energyTypeList = ref(undefined) |
| | | const departmentList = ref([]) |
| | | const loading = ref(false) |
| | | const data = reactive({ |
| | | queryParams: { |
| | | nodeId: null, |
| | |
| | | query: { |
| | | modelCode: null, |
| | | }, |
| | | }); |
| | | const { queryParams, query } = toRefs(data); |
| | | }) |
| | | const { queryParams, query } = toRefs(data) |
| | | /** 节点单击事件 */ |
| | | function handleNodeClick(data) { |
| | | queryParams.value.nodeId = data.id; |
| | | queryParams.value.nodeName = data.label; |
| | | handleTimeType(period.value[0].value); |
| | | queryParams.value.nodeId = data.id |
| | | queryParams.value.nodeName = data.label |
| | | handleTimeType(period.value[0].value) |
| | | listEnergyTypeList().then((res) => { |
| | | energyTypeList.value = res.data; |
| | | queryParams.value.energyType = energyTypeList.value[0].enersno; |
| | | queryParams.value.enername = energyTypeList.value[0].enername; |
| | | queryParams.value.muid = energyTypeList.value[0].muid; |
| | | handleQuery(); |
| | | }); |
| | | energyTypeList.value = res.data |
| | | queryParams.value.energyType = energyTypeList.value[0].enersno |
| | | queryParams.value.enername = energyTypeList.value[0].enername |
| | | queryParams.value.muid = energyTypeList.value[0].muid |
| | | handleQuery() |
| | | }) |
| | | } |
| | | function handleTimeType(e) { |
| | | queryParams.value.timeType = e; |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD"); |
| | | queryParams.value.timeType = e |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") |
| | | } |
| | | function handleEnergyType(item) { |
| | | queryParams.value.enername = item.enername; |
| | | queryParams.value.muid = item.muid; |
| | | handleQuery(); |
| | | queryParams.value.enername = item.enername |
| | | queryParams.value.muid = item.muid |
| | | handleQuery() |
| | | } |
| | | function handleAnalysisType(analysisType) { |
| | | queryParams.value.analysisType = analysisType; |
| | | getList(); |
| | | queryParams.value.analysisType = analysisType |
| | | getList() |
| | | } |
| | | // 能耗对比分析-科室能耗分析-列表 |
| | | function getList() { |
| | | loading.value = true; |
| | | loading.value = true |
| | | // 在初始化之前,先dispose旧的实例 |
| | | if (echarts.getInstanceByDom(document.getElementById("Chart1"))) { |
| | | echarts.dispose(document.getElementById("Chart1")); |
| | | echarts.dispose(document.getElementById("Chart1")) |
| | | } |
| | | // if (echarts.getInstanceByDom(document.getElementById("Chart2"))) { |
| | | // echarts.dispose(document.getElementById("Chart2")); |
| | | // } |
| | | const myChart1 = echarts.init(document.getElementById("Chart1")); |
| | | const myChart1 = echarts.init(document.getElementById("Chart1")) |
| | | // const myChart2 = echarts.init(document.getElementById("Chart2")); |
| | | listRegion( |
| | | proxy.addDateRange({ |
| | |
| | | }) |
| | | ).then((res) => { |
| | | if (!!res.code && res.code == 200) { |
| | | loading.value = false; |
| | | let xdata = []; |
| | | let yvalue = []; |
| | | let ycompareValue = []; |
| | | let yqoq = []; |
| | | loading.value = false |
| | | let xdata = [] |
| | | let yvalue = [] |
| | | let ycompareValue = [] |
| | | let yqoq = [] |
| | | if (!!res.data.chartDataList) { |
| | | res.data.chartDataList.map((item) => { |
| | | xdata.push( |
| | | proxy |
| | | .dayjs(item.xdata) |
| | | .format( |
| | | queryParams.value.timeType == "YEAR" |
| | | ? "MM月" |
| | | : queryParams.value.timeType == "MONTH" |
| | | ? "DD日" |
| | | : "HH时" |
| | | queryParams.value.timeType == "YEAR" ? "MM月" : queryParams.value.timeType == "MONTH" ? "DD日" : "HH时" |
| | | ) |
| | | ); |
| | | yvalue.push(!!item.yvalue ? item.yvalue : 0); |
| | | ycompareValue.push(!!item.ycompareValue ? item.ycompareValue : 0); |
| | | yqoq.push(!!item.yqoq ? item.yqoq : 0); |
| | | }); |
| | | ) |
| | | yvalue.push(!!item.yvalue ? item.yvalue : 0) |
| | | ycompareValue.push(!!item.ycompareValue ? item.ycompareValue : 0) |
| | | yqoq.push(!!item.yqoq ? item.yqoq : 0) |
| | | }) |
| | | } |
| | | setTimeout(() => { |
| | | myChart1.setOption({ |
| | | color: ["#2979ff", "#19be6b", "#ff9900", "#fa3534"], |
| | | grid: { |
| | | top: "45", |
| | | left: "7%", |
| | | top: "60", |
| | | left: "5%", |
| | | right: "5%", |
| | | bottom: "10", |
| | | containLabel: true, |
| | |
| | | itemWidth: 14, |
| | | itemHeight: 10, |
| | | textStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | xAxis: { |
| | |
| | | axisLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [5, 0, 0, 0], |
| | | // formatter: '{value} ml' |
| | |
| | | yAxis: [ |
| | | { |
| | | type: "value", |
| | | name: |
| | | "耗" + |
| | | queryParams.value.enername + |
| | | "量(" + |
| | | queryParams.value.muid + |
| | | ")", |
| | | name: "耗" + queryParams.value.enername + "量(" + queryParams.value.muid + ")", |
| | | nameTextStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [0, 0, 5, 0], |
| | | }, |
| | |
| | | show: true, |
| | | lineStyle: { |
| | | type: "dashed", |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | }, |
| | | }, |
| | |
| | | name: queryParams.value.analysisType == "YOY" ? "同比(%)" : "环比(%)", |
| | | alignTicks: true, |
| | | nameTextStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [0, 0, 5, 0], |
| | | }, |
| | |
| | | show: true, |
| | | lineStyle: { |
| | | type: "dashed", |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | splitArea: { |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | }, |
| | | }, |
| | |
| | | barWidth: "8", |
| | | tooltip: { |
| | | valueFormatter: function (value) { |
| | | return value + queryParams.value.muid; |
| | | return value + queryParams.value.muid |
| | | }, |
| | | }, |
| | | itemStyle: { |
| | |
| | | barWidth: "8", |
| | | tooltip: { |
| | | valueFormatter: function (value) { |
| | | return value + queryParams.value.muid; |
| | | return value + queryParams.value.muid |
| | | }, |
| | | }, |
| | | itemStyle: { |
| | |
| | | symbol: "none", // 设置为 'none' 去掉圆点 |
| | | tooltip: { |
| | | valueFormatter: function (value) { |
| | | return value + "%"; |
| | | return value + "%" |
| | | }, |
| | | }, |
| | | data: yqoq, |
| | | }, |
| | | ], |
| | | }); |
| | | }, 100); |
| | | departmentList.value = !!res.data.dataList ? res.data.dataList : []; |
| | | }) |
| | | }, 100) |
| | | departmentList.value = !!res.data.dataList ? res.data.dataList : [] |
| | | window.addEventListener( |
| | | "resize", |
| | | () => { |
| | | myChart1.resize(); |
| | | myChart1.resize() |
| | | }, |
| | | { passive: true } |
| | | ); |
| | | ) |
| | | } |
| | | }); |
| | | }) |
| | | // listDepartment( |
| | | // proxy.addDateRange({ |
| | | // ...queryParams.value, |
| | |
| | | } |
| | | // 能耗对比分析-科室能耗分析-搜索 |
| | | function handleQuery() { |
| | | getList(); |
| | | getList() |
| | | } |
| | | // 能耗对比分析-科室能耗分析-重置 |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef"); |
| | | handleTimeType(period.value[0].value); |
| | | queryParams.value.energyType = energyTypeList.value[0].enersno; |
| | | queryParams.value.enername = energyTypeList.value[0].enername; |
| | | queryParams.value.muid = energyTypeList.value[0].muid; |
| | | queryParams.value.analysisType = "YOY"; |
| | | handleQuery(); |
| | | proxy.resetForm("queryRef") |
| | | handleTimeType(period.value[0].value) |
| | | queryParams.value.energyType = energyTypeList.value[0].enersno |
| | | queryParams.value.enername = energyTypeList.value[0].enername |
| | | queryParams.value.muid = energyTypeList.value[0].muid |
| | | queryParams.value.analysisType = "YOY" |
| | | handleQuery() |
| | | } |
| | | // 能耗对比分析-科室能耗分析-导出 |
| | | function handleExport() { |
| | |
| | | ...query.value, |
| | | }, |
| | | `${queryParams.value.nodeName}-厂区能耗分析_${new Date().getTime()}.xlsx` |
| | | ); |
| | | ) |
| | | } |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | @import "@/assets/styles/page.scss"; |
| | | .el-tabs { |
| | | padding: 0 12px; |
| | | margin-top: 12px; |
| | | :deep(.el-tabs__header) { |
| | | margin: 0; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | <div class="form-card"> |
| | | <el-form :model="queryParams" ref="queryRef" :inline="true"> |
| | | <el-form-item label="期间" prop="timeType"> |
| | | <el-select v-model="queryParams.timeType" placeholder="期间" clearable style="width: 120px" |
| | | @change="handleTimeType"> |
| | | <el-select |
| | | v-model="queryParams.timeType" |
| | | placeholder="期间" |
| | | clearable |
| | | style="width: 120px" |
| | | @change="handleTimeType" |
| | | > |
| | | <el-option v-for="dict in period" :key="dict.value" :label="dict.label" :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="时间"> |
| | | <el-date-picker v-model="queryParams.dataTime" :type="queryParams.timeType == 'YEAR' |
| | | ? 'year' |
| | | : queryParams.timeType == 'MONTH' |
| | | ? 'month' |
| | | : 'date' |
| | | " :format="queryParams.timeType == 'YEAR' |
| | | ? 'YYYY' |
| | | : queryParams.timeType == 'MONTH' |
| | | ? 'YYYY-MM' |
| | | : 'YYYY-MM-DD' |
| | | " value-format="YYYY-MM-DD" placeholder="时间" style="width: 100%" /> |
| | | <el-date-picker |
| | | v-model="queryParams.dataTime" |
| | | :type="queryParams.timeType == 'YEAR' ? 'year' : queryParams.timeType == 'MONTH' ? 'month' : 'date'" |
| | | :format=" |
| | | queryParams.timeType == 'YEAR' ? 'YYYY' : queryParams.timeType == 'MONTH' ? 'YYYY-MM' : 'YYYY-MM-DD' |
| | | " |
| | | value-format="YYYY-MM-DD" |
| | | placeholder="时间" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="能源类型" prop="timeType"> |
| | | <el-select v-model="queryParams.energyType" placeholder="能源类型" clearable style="width: 120px"> |
| | | <el-option :label="item.enername" :value="item.enersno" v-for="item in energyTypeList" |
| | | :key="item.enersno" @click="handleEnergyType(item)" /> |
| | | <el-option |
| | | :label="item.enername" |
| | | :value="item.enersno" |
| | | v-for="item in energyTypeList" |
| | | :key="item.enersno" |
| | | @click="handleEnergyType(item)" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> |
| | | 搜索 |
| | | </el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">重置</el-button> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> 搜索 </el-button> |
| | | <!-- <el-button icon="Refresh" @click="resetQuery">重置</el-button> --> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button :type="queryParams.analysisType == 'YOY' ? 'primary' : ''" @click="handleAnalysisType('YOY')"> |
| | | 同比 |
| | | </el-button> |
| | | <el-button :type="queryParams.analysisType == 'MOM' ? 'primary' : ''" @click="handleAnalysisType('MOM')"> |
| | | 环比 |
| | | </el-button> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Download" @click="handleExport"> |
| | | 导出 |
| | | </el-button> |
| | | <el-button type="warning" icon="Download" @click="handleExport"> 导出 </el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div style=" |
| | | height: calc(100vh - 220px) !important; |
| | | max-height: calc(100vh - 220px) !important; |
| | | overflow-y: auto; |
| | | " v-loading="loading"> |
| | | <!-- <el-row :gutter="24"> |
| | | <el-col :span="16"> --> |
| | | <div |
| | | style="height: calc(100vh - 220px) !important; max-height: calc(100vh - 220px) !important; overflow-y: auto" |
| | | v-loading="loading" |
| | | > |
| | | <el-tabs v-model="queryParams.analysisType" type="card" @tab-change="handleAnalysisType"> |
| | | <el-tab-pane label="同比" name="YOY"> </el-tab-pane> |
| | | <el-tab-pane label="环比" name="MOM"> </el-tab-pane> |
| | | </el-tabs> |
| | | <BaseCard :title="queryParams.nodeName + '-设备能耗趋势'"> |
| | | <div class="chart-box"> |
| | | <div class="chart-box" style="padding: 12px 0 0"> |
| | | <div id="Chart1" /> |
| | | </div> |
| | | </BaseCard> |
| | | <!-- </el-col> |
| | | <el-col :span="8"> |
| | | <BaseCard title="设备能耗趋势"> |
| | | <div class="chart-box"> |
| | | <div id="Chart2" /> |
| | | </div> |
| | | </BaseCard> |
| | | </el-col> |
| | | <el-col :span="24"> --> |
| | | |
| | | <BaseCard :title="queryParams.nodeName + |
| | | '-设备能耗统计分析表-' + |
| | | queryParams.enername |
| | | "> |
| | | <BaseCard :title="queryParams.nodeName + '-设备能耗统计分析表-' + queryParams.enername"> |
| | | <div class="table-box"> |
| | | <el-table :data="departmentList" show-summary> |
| | | <el-table-column label="本期时间" align="center" key="currentTime" prop="currentTime" |
| | | :show-overflow-tooltip="true" /> |
| | | <el-table-column :label="'本期耗' + |
| | | queryParams.enername + |
| | | '(' + |
| | | queryParams.muid + |
| | | ')' |
| | | " align="center" key="currentValue" prop="currentValue" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="同期时间" align="center" key="compareTime" prop="compareTime" |
| | | :show-overflow-tooltip="true" /> |
| | | <el-table-column :label="'同期耗' + |
| | | queryParams.enername + |
| | | '(' + |
| | | queryParams.muid + |
| | | ')' |
| | | " align="center" key="compareValue" prop="compareValue" :show-overflow-tooltip="true" /> |
| | | <el-table-column :label="(queryParams.analysisType == 'YOY' ? '同' : '环') + '比(%)' |
| | | " align="center" key="ratio" prop="ratio" :show-overflow-tooltip="true" width="200" /> |
| | | <el-table-column |
| | | label="本期时间" |
| | | align="center" |
| | | key="currentTime" |
| | | prop="currentTime" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | :label="'本期耗' + queryParams.enername + '(' + queryParams.muid + ')'" |
| | | align="center" |
| | | key="currentValue" |
| | | prop="currentValue" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="同期时间" |
| | | align="center" |
| | | key="compareTime" |
| | | prop="compareTime" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | :label="'同期耗' + queryParams.enername + '(' + queryParams.muid + ')'" |
| | | align="center" |
| | | key="compareValue" |
| | | prop="compareValue" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | :label="(queryParams.analysisType == 'YOY' ? '同' : '环') + '比(%)'" |
| | | align="center" |
| | | key="ratio" |
| | | prop="ratio" |
| | | :show-overflow-tooltip="true" |
| | | width="200" |
| | | /> |
| | | </el-table> |
| | | </div> |
| | | </BaseCard> |
| | |
| | | </template> |
| | | |
| | | <script setup name="equipment"> |
| | | import { |
| | | listRegion, |
| | | listDepartment, |
| | | } from "@/api/energyAnalysis/energyAnalysis"; |
| | | import { listEnergyTypeList } from "@/api/modelConfiguration/energyType"; |
| | | import * as echarts from "echarts"; |
| | | const { proxy } = getCurrentInstance(); |
| | | const { period } = proxy.useDict("period"); |
| | | import { useRoute } from "vue-router"; |
| | | import useSettingsStore from "@/store/modules/settings"; |
| | | const settingsStore = useSettingsStore(); |
| | | import { listRegion, listDepartment } from "@/api/energyAnalysis/energyAnalysis" |
| | | import { listEnergyTypeList } from "@/api/modelConfiguration/energyType" |
| | | import * as echarts from "echarts" |
| | | const { proxy } = getCurrentInstance() |
| | | const { period } = proxy.useDict("period") |
| | | import { useRoute } from "vue-router" |
| | | import useSettingsStore from "@/store/modules/settings" |
| | | const settingsStore = useSettingsStore() |
| | | watch( |
| | | () => settingsStore.sideTheme, |
| | | (val) => { |
| | | getList(); |
| | | getList() |
| | | } |
| | | ); |
| | | const energyTypeList = ref(undefined); |
| | | const departmentList = ref([]); |
| | | const loading = ref(false); |
| | | ) |
| | | const energyTypeList = ref(undefined) |
| | | const departmentList = ref([]) |
| | | const loading = ref(false) |
| | | const data = reactive({ |
| | | queryParams: { |
| | | nodeId: null, |
| | |
| | | query: { |
| | | modelCode: null, |
| | | }, |
| | | }); |
| | | const { queryParams, query } = toRefs(data); |
| | | }) |
| | | const { queryParams, query } = toRefs(data) |
| | | /** 节点单击事件 */ |
| | | function handleNodeClick(data) { |
| | | queryParams.value.nodeId = data.id; |
| | | queryParams.value.nodeName = data.label; |
| | | handleTimeType(period.value[0].value); |
| | | queryParams.value.nodeId = data.id |
| | | queryParams.value.nodeName = data.label |
| | | handleTimeType(period.value[0].value || "DAY") |
| | | listEnergyTypeList().then((res) => { |
| | | energyTypeList.value = res.data; |
| | | queryParams.value.energyType = energyTypeList.value[0].enersno; |
| | | queryParams.value.enername = energyTypeList.value[0].enername; |
| | | queryParams.value.muid = energyTypeList.value[0].muid; |
| | | handleQuery(); |
| | | }); |
| | | energyTypeList.value = res.data |
| | | queryParams.value.energyType = energyTypeList.value[0].enersno |
| | | queryParams.value.enername = energyTypeList.value[0].enername |
| | | queryParams.value.muid = energyTypeList.value[0].muid |
| | | handleQuery() |
| | | }) |
| | | } |
| | | function handleTimeType(e) { |
| | | queryParams.value.timeType = e; |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD"); |
| | | queryParams.value.timeType = e |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") |
| | | } |
| | | function handleEnergyType(item) { |
| | | queryParams.value.enername = item.enername; |
| | | queryParams.value.muid = item.muid; |
| | | handleQuery(); |
| | | queryParams.value.enername = item.enername |
| | | queryParams.value.muid = item.muid |
| | | handleQuery() |
| | | } |
| | | function handleAnalysisType(analysisType) { |
| | | queryParams.value.analysisType = analysisType; |
| | | getList(); |
| | | queryParams.value.analysisType = analysisType |
| | | getList() |
| | | } |
| | | // 能耗对比分析-设备能耗分析-列表 |
| | | function getList() { |
| | | loading.value = true; |
| | | loading.value = true |
| | | // 在初始化之前,先dispose旧的实例 |
| | | if (echarts.getInstanceByDom(document.getElementById("Chart1"))) { |
| | | echarts.dispose(document.getElementById("Chart1")); |
| | | echarts.dispose(document.getElementById("Chart1")) |
| | | } |
| | | // if (echarts.getInstanceByDom(document.getElementById("Chart2"))) { |
| | | // echarts.dispose(document.getElementById("Chart2")); |
| | | // } |
| | | const myChart1 = echarts.init(document.getElementById("Chart1")); |
| | | const myChart1 = echarts.init(document.getElementById("Chart1")) |
| | | // const myChart2 = echarts.init(document.getElementById("Chart2")); |
| | | listRegion( |
| | | proxy.addDateRange({ |
| | |
| | | }) |
| | | ).then((res) => { |
| | | if (!!res.code && res.code == 200) { |
| | | loading.value = false; |
| | | let xdata = []; |
| | | let yvalue = []; |
| | | let ycompareValue = []; |
| | | let yqoq = []; |
| | | loading.value = false |
| | | let xdata = [] |
| | | let yvalue = [] |
| | | let ycompareValue = [] |
| | | let yqoq = [] |
| | | if (!!res.data.chartDataList) { |
| | | res.data.chartDataList.map((item) => { |
| | | xdata.push( |
| | | proxy |
| | | .dayjs(item.xdata) |
| | | .format( |
| | | queryParams.value.timeType == "YEAR" |
| | | ? "MM月" |
| | | : queryParams.value.timeType == "MONTH" |
| | | ? "DD日" |
| | | : "HH时" |
| | | queryParams.value.timeType == "YEAR" ? "MM月" : queryParams.value.timeType == "MONTH" ? "DD日" : "HH时" |
| | | ) |
| | | ); |
| | | yvalue.push(!!item.yvalue ? item.yvalue : 0); |
| | | ycompareValue.push(!!item.ycompareValue ? item.ycompareValue : 0); |
| | | yqoq.push(!!item.yqoq ? item.yqoq : 0); |
| | | }); |
| | | ) |
| | | yvalue.push(!!item.yvalue ? item.yvalue : 0) |
| | | ycompareValue.push(!!item.ycompareValue ? item.ycompareValue : 0) |
| | | yqoq.push(!!item.yqoq ? item.yqoq : 0) |
| | | }) |
| | | } |
| | | setTimeout(() => { |
| | | myChart1.setOption({ |
| | | color: ["#2979ff", "#19be6b", "#ff9900", "#fa3534"], |
| | | grid: { |
| | | top: "45", |
| | | left: "7%", |
| | | top: "60", |
| | | left: "5%", |
| | | right: "5%", |
| | | bottom: "10", |
| | | containLabel: true, |
| | |
| | | itemWidth: 14, |
| | | itemHeight: 10, |
| | | textStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | xAxis: { |
| | |
| | | axisLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [5, 0, 0, 0], |
| | | // formatter: '{value} ml' |
| | |
| | | yAxis: [ |
| | | { |
| | | type: "value", |
| | | name: |
| | | "耗" + |
| | | queryParams.value.enername + |
| | | "量(" + |
| | | queryParams.value.muid + |
| | | ")", |
| | | name: "耗" + queryParams.value.enername + "量(" + queryParams.value.muid + ")", |
| | | nameTextStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [0, 0, 5, 0], |
| | | }, |
| | |
| | | show: true, |
| | | lineStyle: { |
| | | type: "dashed", |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | axisTick: { |
| | |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | }, |
| | | }, |
| | | { |
| | | type: "value", |
| | | name: |
| | | queryParams.value.analysisType == "YOY" ? "同比(%)" : "环比(%)", |
| | | name: queryParams.value.analysisType == "YOY" ? "同比(%)" : "环比(%)", |
| | | alignTicks: true, |
| | | nameTextStyle: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | padding: [0, 0, 5, 0], |
| | | }, |
| | |
| | | show: true, |
| | | lineStyle: { |
| | | type: "dashed", |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | }, |
| | | }, |
| | | splitArea: { |
| | | show: false, |
| | | }, |
| | | axisLabel: { |
| | | color: |
| | | settingsStore.sideTheme == "theme-dark" |
| | | ? "#FFFFFF" |
| | | : "#222222", |
| | | color: settingsStore.sideTheme == "theme-dark" ? "#FFFFFF" : "#222222", |
| | | fontSize: 14, |
| | | }, |
| | | }, |
| | |
| | | barWidth: "8", |
| | | tooltip: { |
| | | valueFormatter: function (value) { |
| | | return value + queryParams.value.muid; |
| | | return value + queryParams.value.muid |
| | | }, |
| | | }, |
| | | itemStyle: { |
| | |
| | | barWidth: "8", |
| | | tooltip: { |
| | | valueFormatter: function (value) { |
| | | return value + queryParams.value.muid; |
| | | return value + queryParams.value.muid |
| | | }, |
| | | }, |
| | | itemStyle: { |
| | |
| | | symbol: "none", // 设置为 'none' 去掉圆点 |
| | | tooltip: { |
| | | valueFormatter: function (value) { |
| | | return value + "%"; |
| | | return value + "%" |
| | | }, |
| | | }, |
| | | data: yqoq, |
| | | }, |
| | | ], |
| | | }); |
| | | }, 100); |
| | | departmentList.value = !!res.data.dataList ? res.data.dataList : []; |
| | | }) |
| | | }, 100) |
| | | departmentList.value = !!res.data.dataList ? res.data.dataList : [] |
| | | window.addEventListener( |
| | | "resize", |
| | | () => { |
| | | myChart1.resize(); |
| | | myChart1.resize() |
| | | }, |
| | | { passive: true } |
| | | ); |
| | | ) |
| | | } |
| | | }); |
| | | }) |
| | | // listDepartment( |
| | | // proxy.addDateRange({ |
| | | // ...queryParams.value, |
| | |
| | | } |
| | | // 能耗对比分析-设备能耗分析-搜索 |
| | | function handleQuery() { |
| | | getList(); |
| | | getList() |
| | | } |
| | | // 能耗对比分析-设备能耗分析-重置 |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef"); |
| | | handleTimeType(period.value[0].value); |
| | | queryParams.value.energyType = energyTypeList.value[0].enersno; |
| | | queryParams.value.enername = energyTypeList.value[0].enername; |
| | | queryParams.value.muid = energyTypeList.value[0].muid; |
| | | queryParams.value.analysisType = "YOY"; |
| | | handleQuery(); |
| | | proxy.resetForm("queryRef") |
| | | handleTimeType(period.value[0].value) |
| | | queryParams.value.energyType = energyTypeList.value[0].enersno |
| | | queryParams.value.enername = energyTypeList.value[0].enername |
| | | queryParams.value.muid = energyTypeList.value[0].muid |
| | | queryParams.value.analysisType = "YOY" |
| | | handleQuery() |
| | | } |
| | | // 能耗对比分析-设备能耗分析-导出 |
| | | function handleExport() { |
| | |
| | | ...query.value, |
| | | }, |
| | | `${queryParams.value.nodeName}-设备能耗统计分析表-${queryParams.enername}_${new Date().getTime()}.xlsx` |
| | | ); |
| | | ) |
| | | } |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | .el-tabs { |
| | | padding: 0 12px; |
| | | margin-top: 12px; |
| | | :deep(.el-tabs__header) { |
| | | margin: 0; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">重置</el-button> |
| | | </el-form-item> |
| | | <el-form-item style="float: right"> |
| | | <el-button type="primary" icon="Plus" @click="handleAdd"> 新增 </el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div class="table-box"> |
| | | <div class="mt20 mb20"> |
| | | <el-button type="primary" icon="plus" @click="handleAdd">新增</el-button> |
| | | <!-- <el-button type="primary" icon="Delete">删除</el-button> --> |
| | | </div> |
| | | <el-table :data="tableData" v-loading="loading"> |
| | | <el-table-column prop="title" label="文件标题" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="typeName" label="文件类别" show-overflow-tooltip align="center" /> |
| | |
| | | <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">重置</el-button> |
| | | </el-form-item> |
| | | <el-form-item style="float: right"> |
| | | <el-button type="primary" icon="plus" @click="handleAdd">新增</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div class="table-box"> |
| | | <div class="mt20 mb20"> |
| | | <el-button type="primary" icon="plus" @click="handleAdd">新增</el-button> |
| | | <!-- <el-button type="primary" icon="Download" @click="handleAdd"> 导出 </el-button> --> |
| | | </div> |
| | | <el-table :data="tableData" v-loading="loading"> |
| | | <el-table-column prop="plan" label="总体计划" show-overflow-tooltip align="center" /> |
| | | <el-table-column prop="implementationPlan" label="实施计划" show-overflow-tooltip align="center" /> |
| | |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> 搜索 </el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">重置</el-button> |
| | | </el-form-item> |
| | | <el-form-item style="float: right"> |
| | | <el-button type="primary" icon="plus" @click="handleAdd">新增</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div class="table-bg-style"> |
| | | <div class="ml20 mb20 theme-dark-mt20"> |
| | | <el-button type="primary" icon="Plus" @click="handleAdd">新增</el-button> |
| | | </div> |
| | | <div class="table-box"> |
| | | <el-table v-loading="loading" :data="energyTypeList"> |
| | | <el-table-column label="编号" align="center" key="code" prop="code" :show-overflow-tooltip="true" /> |
| | |
| | | <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">重置</el-button> |
| | | </el-form-item> |
| | | <el-form-item style="float: right"> |
| | | <el-button type="primary" icon="plus" @click="handleAdd">新增</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div class="table-bg-style"> |
| | | <div class="ml20 mb20 theme-dark-mt20"> |
| | | <el-button type="primary" icon="Plus" @click="handleAdd">新增</el-button> |
| | | </div> |
| | | <div class="table-box"> |
| | | <el-table :data="tableData" v-loading="loading"> |
| | | <el-table-column prop="code" label="编码" show-overflow-tooltip align="center" /> |
| | |
| | | <template> |
| | | <div class="page"> |
| | | <div class="page-container"> |
| | | <div class="page-container-left"> |
| | | <div class="tree page-box"> |
| | | <!-- <CardHeader class="mb20">数据模型管理</CardHeader> --> |
| | | <div class="select-box mb20"> |
| | | <el-select v-model="modelData" placeholder="请选择模型" filterable @change="changeModel"> |
| | | <el-option v-for="model in modelInfoOptions" :key="model.modelCode" :label="model.modelName" |
| | | :value="model.modelCode" /> |
| | | </el-select> |
| | | <el-icon @click="handleModel"> |
| | | <Setting /> |
| | | </el-icon> |
| | | </div> |
| | | <!-- <el-input v-model="filterText" style="width: 240px" placeholder="输入关键字进行过滤" class="mb10" /> --> |
| | | <div class="tree-box" v-loading="treeLoading"> |
| | | <el-link icon="el-icon-plus" style="margin-top: 8px;width:100%" @click="addNode" |
| | | v-if="treeData.length === 0">添加根节点 |
| | | </el-link> |
| | | <template v-else> |
| | | <el-tree ref="treeRef" :props="defaultProps" :data="treeData" node-key="id" |
| | | highlight-current :filter-node-method="filterNode" |
| | | :default-expanded-keys="treeExpandData" :expand-on-click-node="false" |
| | | @node-click="changeNode" accordion> |
| | | <template #default="{ node, data }"> |
| | | <span> |
| | | <el-tooltip v-if="node.label.length > 6" class="item" effect="dark" |
| | | :content="node.label" placement="top-end"> |
| | | <span>{{ node.label.slice(0, 6) + "..." }}</span> |
| | | </el-tooltip> |
| | | <span v-else id="b">{{ node.label }}</span> |
| | | </span> |
| | | <span class="node-opt"> |
| | | <el-link title="新增下级节点" icon="Plus" @click="() => addNode(node, data)"> |
| | | </el-link> |
| | | <el-link title="修改节点" icon="EditPen" @click="() => editNode(node, data)"> |
| | | </el-link> |
| | | <el-link title="删除节点" icon="Delete" @click="() => delNode(node, data)"> |
| | | </el-link> |
| | | </span> |
| | | </template> |
| | | </el-tree> |
| | | </template> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="page-container-right"> |
| | | <div class="mb20 mt20 ml20 tab-box"> |
| | | <div class="tab-li" :class="tab == 1 ? 'is-tab' : ''" @click="handleTab('1')"> |
| | | 计量器具配置信息 |
| | | </div> |
| | | <div class="tab-li" :class="tab == 2 ? 'is-tab' : ''" @click="handleTab('2')"> |
| | | 统计指标 |
| | | </div> |
| | | <div class="tab-li" :class="tab == 3 ? 'is-tab' : ''" @click="handleTab('3')"> |
| | | 采集指标 |
| | | </div> |
| | | <!-- <el-radio-group v-model="tab"> |
| | | <div class="page"> |
| | | <div class="page-container"> |
| | | <div class="page-container-left"> |
| | | <div class="tree page-box"> |
| | | <!-- <CardHeader class="mb20">数据模型管理</CardHeader> --> |
| | | <div class="select-box mb20"> |
| | | <el-select v-model="modelData" placeholder="请选择模型" filterable @change="changeModel"> |
| | | <el-option |
| | | v-for="model in modelInfoOptions" |
| | | :key="model.modelCode" |
| | | :label="model.modelName" |
| | | :value="model.modelCode" |
| | | /> |
| | | </el-select> |
| | | <el-icon @click="handleModel"> |
| | | <Setting /> |
| | | </el-icon> |
| | | </div> |
| | | <!-- <el-input v-model="filterText" style="width: 240px" placeholder="输入关键字进行过滤" class="mb10" /> --> |
| | | <div class="tree-box" v-loading="treeLoading"> |
| | | <el-link |
| | | icon="el-icon-plus" |
| | | style="margin-top: 8px; width: 100%" |
| | | @click="addNode" |
| | | v-if="treeData.length === 0" |
| | | >添加根节点 |
| | | </el-link> |
| | | <template v-else> |
| | | <el-tree |
| | | ref="treeRef" |
| | | :props="defaultProps" |
| | | :data="treeData" |
| | | node-key="id" |
| | | highlight-current |
| | | :filter-node-method="filterNode" |
| | | :default-expanded-keys="treeExpandData" |
| | | :expand-on-click-node="false" |
| | | @node-click="changeNode" |
| | | accordion |
| | | > |
| | | <template #default="{ node, data }"> |
| | | <span> |
| | | <el-tooltip |
| | | v-if="node.label.length > 6" |
| | | class="item" |
| | | effect="dark" |
| | | :content="node.label" |
| | | placement="top-end" |
| | | > |
| | | <span>{{ node.label.slice(0, 6) + "..." }}</span> |
| | | </el-tooltip> |
| | | <span v-else id="b">{{ node.label }}</span> |
| | | </span> |
| | | <span class="node-opt"> |
| | | <el-link title="新增下级节点" icon="Plus" @click="() => addNode(node, data)"> </el-link> |
| | | <el-link title="修改节点" icon="EditPen" @click="() => editNode(node, data)"> </el-link> |
| | | <el-link title="删除节点" icon="Delete" @click="() => delNode(node, data)"> </el-link> |
| | | </span> |
| | | </template> |
| | | </el-tree> |
| | | </template> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="page-container-right"> |
| | | <div class="tab-box"> |
| | | <div class="tab-li" :class="tab == 1 ? 'is-tab' : ''" @click="handleTab('1')">计量器具配置信息</div> |
| | | <div class="tab-li" :class="tab == 2 ? 'is-tab' : ''" @click="handleTab('2')">统计指标</div> |
| | | <div class="tab-li" :class="tab == 3 ? 'is-tab' : ''" @click="handleTab('3')">采集指标</div> |
| | | <!-- <el-radio-group v-model="tab"> |
| | | <el-radio-button label="1" @click="handleTab('1')"> 设备配置</el-radio-button> |
| | | <el-radio-button label="2" @click="handleTab('2')"> 采集指标</el-radio-button> |
| | | </el-radio-group>--> |
| | | </div> |
| | | <BaseCard :title="currentNode ? currentNode.label + '--节点配置' : '暂无节点配置'"> |
| | | <div> |
| | | <div class="content-box" v-if="tab == '1'"> |
| | | <deviceConfig ref='deviceConfigRef' /> |
| | | </div> |
| | | <div class="content-box" v-if="tab == '2'"> |
| | | <statisticalIndicators ref='statisticalIndicatorsRef' /> |
| | | </div> |
| | | <div class="content-box" v-if="tab == '3'"> |
| | | <collectIndicators ref='collectIndicatorsRef' /> |
| | | </div> |
| | | </div> |
| | | </BaseCard> |
| | | </div> |
| | | </div> |
| | | |
| | | <treeNodeModal ref="treeNodeModalRef" @getList="getTreeList" :modelCode="modelData" |
| | | @addTreeList="addTreeList" @addTreeSelectList="addTreeSelectList" /> |
| | | <modelManagementModal ref="modelManagementModalRef" @selectTreeFun="searchList" /> |
| | | |
| | | <BaseCard :title="currentNode ? currentNode.label + '--节点配置' : '暂无节点配置'"> |
| | | <div> |
| | | <div class="content-box" v-if="tab == '1'"> |
| | | <deviceConfig ref="deviceConfigRef" /> |
| | | </div> |
| | | <div class="content-box" v-if="tab == '2'"> |
| | | <statisticalIndicators ref="statisticalIndicatorsRef" /> |
| | | </div> |
| | | <div class="content-box" v-if="tab == '3'"> |
| | | <collectIndicators ref="collectIndicatorsRef" /> |
| | | </div> |
| | | </div> |
| | | </BaseCard> |
| | | </div> |
| | | </div> |
| | | |
| | | <treeNodeModal |
| | | ref="treeNodeModalRef" |
| | | @getList="getTreeList" |
| | | :modelCode="modelData" |
| | | @addTreeList="addTreeList" |
| | | @addTreeSelectList="addTreeSelectList" |
| | | /> |
| | | <modelManagementModal ref="modelManagementModalRef" @selectTreeFun="searchList" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import treeNodeModal from './components/TreeNodeModal.vue' |
| | | import modelManagementModal from './components/modelManagement/modelManagement' |
| | | import { listModel } from '@/api/modelConfiguration/businessModel' |
| | | import { treeList, delModelNode, hasEnergyIndex, } from '@/api/modelConfiguration/indexWarehouse' |
| | | import deviceConfig from './components/deviceConfig/DeviceConfig.vue' |
| | | import collectIndicators from './components/collectIndicators/CollectIndicators.vue' |
| | | import statisticalIndicators from './components/statisticalIndicators/statisticalIndicators.vue' |
| | | import { nextTick } from 'vue'; |
| | | import treeNodeModal from "./components/TreeNodeModal.vue" |
| | | import modelManagementModal from "./components/modelManagement/modelManagement" |
| | | import { listModel } from "@/api/modelConfiguration/businessModel" |
| | | import { treeList, delModelNode, hasEnergyIndex } from "@/api/modelConfiguration/indexWarehouse" |
| | | import deviceConfig from "./components/deviceConfig/DeviceConfig.vue" |
| | | import collectIndicators from "./components/collectIndicators/CollectIndicators.vue" |
| | | import statisticalIndicators from "./components/statisticalIndicators/statisticalIndicators.vue" |
| | | import { nextTick } from "vue" |
| | | let { proxy } = getCurrentInstance() |
| | | let modelManagementModalRef = ref(null) |
| | | let treeLoading = ref(true) |
| | | //模型管理 |
| | | function handleModel() { |
| | | if (modelManagementModalRef.value) { |
| | | modelManagementModalRef.value.handleOpen() |
| | | } |
| | | if (modelManagementModalRef.value) { |
| | | modelManagementModalRef.value.handleOpen() |
| | | } |
| | | } |
| | | let modelData = ref(null) |
| | | let modelInfoOptions = ref([]) //下拉列表 |
| | | //获取下拉列表 |
| | | function searchList(flag) { |
| | | listModel({ isShow: 1 }).then(response => { |
| | | modelInfoOptions.value = response.data; |
| | | if (flag) { |
| | | if (modelInfoOptions.value.length > 0) { |
| | | modelData.value = modelInfoOptions.value[0].modelCode; |
| | | getTreeList(modelData.value) |
| | | } |
| | | } |
| | | }); |
| | | listModel({ isShow: 1 }).then((response) => { |
| | | modelInfoOptions.value = response.data |
| | | if (flag) { |
| | | if (modelInfoOptions.value.length > 0) { |
| | | modelData.value = modelInfoOptions.value[0].modelCode |
| | | getTreeList(modelData.value) |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | |
| | | searchList(true) |
| | | |
| | | |
| | | //下拉选中触发树列表 |
| | | function changeModel(item) { |
| | | // console.log('changeModel', item) |
| | | getTreeList(item) |
| | | // console.log('changeModel', item) |
| | | getTreeList(item) |
| | | } |
| | | |
| | | let treeRef = ref(null) |
| | | let treeData = ref([]) |
| | | |
| | | const defaultProps = ref({ |
| | | children: 'children', |
| | | label: 'label', |
| | | children: "children", |
| | | label: "label", |
| | | }) |
| | | |
| | | //检索树 |
| | | let filterText = ref('') |
| | | let filterText = ref("") |
| | | |
| | | const filterNode = (value, data) => { |
| | | if (!value) return true |
| | | return data.label.includes(value) |
| | | if (!value) return true |
| | | return data.label.includes(value) |
| | | } |
| | | watch(filterText, (val) => { |
| | | // 检查treeRef.value是否是一个有效的ElTree实例 |
| | | if (treeRef.value && typeof treeRef.value.filter === 'function') { |
| | | // 调用filter方法 |
| | | treeRef.value.filter(val); |
| | | } else { |
| | | // treeRef.value无效,处理错误 |
| | | console.error('error'); |
| | | } |
| | | }); |
| | | |
| | | |
| | | // 检查treeRef.value是否是一个有效的ElTree实例 |
| | | if (treeRef.value && typeof treeRef.value.filter === "function") { |
| | | // 调用filter方法 |
| | | treeRef.value.filter(val) |
| | | } else { |
| | | // treeRef.value无效,处理错误 |
| | | console.error("error") |
| | | } |
| | | }) |
| | | |
| | | let currentNode = ref(null) |
| | | let treeExpandData = ref([]) |
| | |
| | | |
| | | //获取树列表 |
| | | function getTreeList(modelCode) { |
| | | treeLoading.value = true |
| | | treeList({ modelCode }).then(res => { |
| | | treeLoading.value = false |
| | | let { data } = res |
| | | treeData.value = data; |
| | | let chooseNode = null; |
| | | if (data.length > 0) { |
| | | if (data[0].children && data[0].children.length !== 0 && isFirstLeafNode.value) { |
| | | if (data[0].children[0].children && data[0].children[0].children.length !== 0) { |
| | | chooseNode = data[0].children[0].children[0]; |
| | | } else { |
| | | chooseNode = data[0].children[0]; |
| | | } |
| | | } else { |
| | | chooseNode = data[0]; |
| | | } |
| | | currentNode.value = chooseNode; |
| | | treeExpandData.value.push(chooseNode.id); |
| | | nextTick(() => { |
| | | treeRef.value.setCurrentKey(chooseNode.id); |
| | | if (tab.value == 1 && deviceConfigRef.value) { |
| | | deviceConfigRef.value.getList(chooseNode) |
| | | } |
| | | if (tab.value == 2 && statisticalIndicatorsRef.value) { |
| | | statisticalIndicatorsRef.value.getList(chooseNode) |
| | | } |
| | | if (tab.value == 3 && collectIndicatorsRef.value) { |
| | | collectIndicatorsRef.value.getList(chooseNode) |
| | | } |
| | | }); |
| | | treeLoading.value = true |
| | | treeList({ modelCode }).then((res) => { |
| | | treeLoading.value = false |
| | | let { data } = res |
| | | treeData.value = data |
| | | let chooseNode = null |
| | | if (data.length > 0) { |
| | | if (data[0].children && data[0].children.length !== 0 && isFirstLeafNode.value) { |
| | | if (data[0].children[0].children && data[0].children[0].children.length !== 0) { |
| | | chooseNode = data[0].children[0].children[0] |
| | | } else { |
| | | chooseNode = data[0].children[0] |
| | | } |
| | | }) |
| | | } else { |
| | | chooseNode = data[0] |
| | | } |
| | | currentNode.value = chooseNode |
| | | treeExpandData.value.push(chooseNode.id) |
| | | nextTick(() => { |
| | | treeRef.value.setCurrentKey(chooseNode.id) |
| | | if (tab.value == 1 && deviceConfigRef.value) { |
| | | deviceConfigRef.value.getList(chooseNode) |
| | | } |
| | | if (tab.value == 2 && statisticalIndicatorsRef.value) { |
| | | statisticalIndicatorsRef.value.getList(chooseNode) |
| | | } |
| | | if (tab.value == 3 && collectIndicatorsRef.value) { |
| | | collectIndicatorsRef.value.getList(chooseNode) |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | //新增后更新树列表 |
| | | function addTreeList(newChild) { |
| | | treeData.value.push(newChild) |
| | | treeData.value.push(newChild) |
| | | } |
| | | //新增成功后更新默认选中,并触发方法 |
| | | function addTreeSelectList(addedNode, newChild) { |
| | | treeExpandData.value.push(addedNode.nodeId) |
| | | nextTick(() => { |
| | | treeRef.value.setCurrentNode(newChild) |
| | | currentNode.value = newChild; |
| | | if (tab.value == 1) { |
| | | if (deviceConfigRef.value) { |
| | | deviceConfigRef.value.getList(newChild) |
| | | } |
| | | } |
| | | if (tab.value == 2) { |
| | | if (statisticalIndicatorsRef.value) { |
| | | statisticalIndicatorsRef.value.getList(newChild) |
| | | } |
| | | } |
| | | if (tab.value == 3) { |
| | | |
| | | if (collectIndicatorsRef.value) { |
| | | collectIndicatorsRef.value.getList(newChild) |
| | | } |
| | | } |
| | | }) |
| | | |
| | | treeExpandData.value.push(addedNode.nodeId) |
| | | nextTick(() => { |
| | | treeRef.value.setCurrentNode(newChild) |
| | | currentNode.value = newChild |
| | | if (tab.value == 1) { |
| | | if (deviceConfigRef.value) { |
| | | deviceConfigRef.value.getList(newChild) |
| | | } |
| | | } |
| | | if (tab.value == 2) { |
| | | if (statisticalIndicatorsRef.value) { |
| | | statisticalIndicatorsRef.value.getList(newChild) |
| | | } |
| | | } |
| | | if (tab.value == 3) { |
| | | if (collectIndicatorsRef.value) { |
| | | collectIndicatorsRef.value.getList(newChild) |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | //树点击 |
| | | function changeNode(data, node, ev) { |
| | | console.log('树点击', data) |
| | | currentNode.value = data; |
| | | if (tab.value == 1) { |
| | | if (deviceConfigRef.value) { |
| | | deviceConfigRef.value.getList(data) |
| | | } |
| | | console.log("树点击", data) |
| | | currentNode.value = data |
| | | if (tab.value == 1) { |
| | | if (deviceConfigRef.value) { |
| | | deviceConfigRef.value.getList(data) |
| | | } |
| | | if (tab.value == 2) { |
| | | if (statisticalIndicatorsRef.value) { |
| | | statisticalIndicatorsRef.value.getList(data) |
| | | } |
| | | } |
| | | if (tab.value == 2) { |
| | | if (statisticalIndicatorsRef.value) { |
| | | statisticalIndicatorsRef.value.getList(data) |
| | | } |
| | | if (tab.value == 3) { |
| | | if (collectIndicatorsRef.value) { |
| | | collectIndicatorsRef.value.getList(data) |
| | | } |
| | | } |
| | | if (tab.value == 3) { |
| | | if (collectIndicatorsRef.value) { |
| | | collectIndicatorsRef.value.getList(data) |
| | | } |
| | | } |
| | | } |
| | | |
| | | let treeNodeModalRef = ref(null) |
| | | function addNode(node, data) { |
| | | if (treeNodeModalRef.value) { |
| | | console.log('treeNodeModalRef', node, data) |
| | | treeNodeModalRef.value.handleOpen(node, data, true) |
| | | } |
| | | if (treeNodeModalRef.value) { |
| | | console.log("treeNodeModalRef", node, data) |
| | | treeNodeModalRef.value.handleOpen(node, data, true) |
| | | } |
| | | } |
| | | function editNode(node, data) { |
| | | if (treeNodeModalRef.value) { |
| | | treeNodeModalRef.value.handleOpen(node, data, false) |
| | | } |
| | | if (treeNodeModalRef.value) { |
| | | treeNodeModalRef.value.handleOpen(node, data, false) |
| | | } |
| | | } |
| | | |
| | | function delNode(node, data) { |
| | | if (data.children && data.children.length > 0) { |
| | | proxy.$modal.msgWarning('包含子节点,不能进行删除!') |
| | | return |
| | | if (data.children && data.children.length > 0) { |
| | | proxy.$modal.msgWarning("包含子节点,不能进行删除!") |
| | | return |
| | | } |
| | | |
| | | hasEnergyIndex(data.id).then((response) => { |
| | | if (response.data) { |
| | | proxy.$modal.msgWarning("当前节点下存在指标,不能进行删除!") |
| | | } else { |
| | | proxy.$modal |
| | | .confirm('是否确认删除名为"' + data.label + '"的节点?', "警告", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(function () { |
| | | return delModelNode(data.id) |
| | | }) |
| | | .then(() => { |
| | | let parent = node.parent |
| | | let children = parent.data.children || parent.data |
| | | let index = children.findIndex((d) => d.id === data.id) |
| | | children.splice(index, 1) |
| | | |
| | | nextTick(() => { |
| | | if (parent.data && parent.data.id) { |
| | | changeNode(parent.data) |
| | | } else { |
| | | changeNode(null) |
| | | } |
| | | }) |
| | | proxy.$modal.msgSuccess("删除成功") |
| | | }) |
| | | .catch(function () {}) |
| | | } |
| | | |
| | | hasEnergyIndex(data.id).then(response => { |
| | | if (response.data) { |
| | | proxy.$modal.msgWarning('当前节点下存在指标,不能进行删除!') |
| | | } else { |
| | | proxy.$modal.confirm('是否确认删除名为"' + data.label + '"的节点?', '警告', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }) |
| | | .then(function () { |
| | | return delModelNode(data.id) |
| | | }) |
| | | .then(() => { |
| | | let parent = node.parent |
| | | let children = parent.data.children || parent.data |
| | | let index = children.findIndex(d => d.id === data.id) |
| | | children.splice(index, 1) |
| | | |
| | | nextTick(() => { |
| | | if (parent.data && parent.data.id) { |
| | | changeNode(parent.data) |
| | | } else { |
| | | changeNode(null) |
| | | } |
| | | }) |
| | | proxy.$modal.msgSuccess('删除成功') |
| | | }) |
| | | .catch(function () { |
| | | }) |
| | | } |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | let tab = ref('1') |
| | | let tab = ref("1") |
| | | function handleTab(value) { |
| | | tab.value = value |
| | | nextTick(() => { |
| | | if (value == 1 && deviceConfigRef.value) { |
| | | deviceConfigRef.value.getList(currentNode.value) |
| | | } |
| | | if (value == 2 && statisticalIndicatorsRef.value) { |
| | | statisticalIndicatorsRef.value.getList(currentNode.value) |
| | | } |
| | | if (value == 3 && collectIndicatorsRef.value) { |
| | | collectIndicatorsRef.value.getList(currentNode.value) |
| | | } |
| | | }); |
| | | |
| | | tab.value = value |
| | | nextTick(() => { |
| | | if (value == 1 && deviceConfigRef.value) { |
| | | deviceConfigRef.value.getList(currentNode.value) |
| | | } |
| | | if (value == 2 && statisticalIndicatorsRef.value) { |
| | | statisticalIndicatorsRef.value.getList(currentNode.value) |
| | | } |
| | | if (value == 3 && collectIndicatorsRef.value) { |
| | | collectIndicatorsRef.value.getList(currentNode.value) |
| | | } |
| | | }) |
| | | } |
| | | </script> |
| | | |
| | |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | .page-box { |
| | | height: calc(100vh - 145px); |
| | | height: calc(100vh - 145px); |
| | | |
| | | .tree-box { |
| | | height: calc(100% - 70px); |
| | | overflow-y: auto !important; |
| | | .tree-box { |
| | | height: calc(100% - 70px); |
| | | overflow-y: auto !important; |
| | | } |
| | | |
| | | .select-box { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | :deep .el-icon { |
| | | color: #fff; |
| | | margin: 0 10px 0 15px; |
| | | font-size: 20px; |
| | | // &:hover{ |
| | | // color: #3371EB; |
| | | // } |
| | | } |
| | | } |
| | | |
| | | .select-box { |
| | | display: flex; |
| | | align-items: center; |
| | | .node-opt { |
| | | flex: 1; |
| | | text-align: right; |
| | | margin-right: 5px; |
| | | |
| | | :deep .el-icon { |
| | | color: #fff; |
| | | margin: 0 10px 0 15px; |
| | | font-size: 20px; |
| | | // &:hover{ |
| | | // color: #3371EB; |
| | | // } |
| | | } |
| | | :deep .el-icon { |
| | | color: #fff; |
| | | margin-right: 5px; |
| | | } |
| | | |
| | | .node-opt { |
| | | flex: 1; |
| | | text-align: right; |
| | | margin-right: 5px; |
| | | |
| | | :deep .el-icon { |
| | | color: #fff; |
| | | margin-right: 5px; |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | | |
| | | :deep .el-tabs__nav-wrap:after { |
| | | background: transparent; |
| | | background: transparent; |
| | | } |
| | | |
| | | :deep .el-tabs__item { |
| | | color: #fff; |
| | | font-size: 20px; |
| | | padding: 0 20px; |
| | | color: #fff; |
| | | font-size: 20px; |
| | | padding: 0 20px; |
| | | |
| | | &.is-active, |
| | | &:hover { |
| | | color: #999 !important; |
| | | } |
| | | &.is-active, |
| | | &:hover { |
| | | color: #999 !important; |
| | | } |
| | | } |
| | | |
| | | .tab-box { |
| | | display: flex; |
| | | align-items: center; |
| | | display: flex; |
| | | align-items: center; |
| | | color: #fff; |
| | | border-bottom: 1px solid #3371eb; |
| | | margin-right: 20px; |
| | | margin-left: 15px; |
| | | font-size: 15px; |
| | | |
| | | .tab-li { |
| | | cursor: pointer; |
| | | border: 1px solid #3371eb; |
| | | padding: 8px 20px; |
| | | border-radius: 5px 5px 0 0; |
| | | } |
| | | |
| | | .is-tab { |
| | | background: #3371eb; |
| | | color: #fff; |
| | | border-bottom: 1px solid #3371EB; |
| | | margin-right: 20px; |
| | | } |
| | | } |
| | | .themeDark { |
| | | .tab-box { |
| | | color: #fff; |
| | | } |
| | | } |
| | | |
| | | .tab-li { |
| | | cursor: pointer; |
| | | border: 1px solid #3371EB; |
| | | padding: 10px 25px; |
| | | border-radius: 5px 5px 0 0; |
| | | } |
| | | |
| | | .is-tab { |
| | | background: #3371EB; |
| | | } |
| | | .themeLight { |
| | | .tab-box { |
| | | color: #333; |
| | | } |
| | | } |
| | | |
| | | .content-box { |
| | | height: calc(100vh - 306px) !important; |
| | | |
| | | height: calc(100vh - 306px) !important; |
| | | } |
| | | </style> |
| | |
| | | <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">重置</el-button> |
| | | </el-form-item> |
| | | <!-- <el-form-item style="float: right"> |
| | | <el-button type="primary" icon="plus" @click="handleAdd">新增</el-button> |
| | | </el-form-item> --> |
| | | </el-form> |
| | | </div> |
| | | <div class="table-box"> |
| | | <el-table :data="tableData" style="width: 100%"> |
| | | <el-table-column prop="funcName" label="函数名" show-overflow-tooltip align="center"> </el-table-column> |
| | | <el-table-column prop="funcText" label="函数文本" show-overflow-tooltip align="center"> </el-table-column> |
| | | <el-table-column prop="info" label="介绍" show-overflow-tooltip align="center"> </el-table-column> |
| | | <!-- <el-table-column prop="prop" label="操作" width="150" align="center"> |
| | | <div class="table-bg-style"> |
| | | <div class="table-box"> |
| | | <el-table :data="tableData" style="width: 100%"> |
| | | <el-table-column prop="funcName" label="函数名" show-overflow-tooltip align="center"> </el-table-column> |
| | | <el-table-column prop="funcText" label="函数文本" show-overflow-tooltip align="center"> </el-table-column> |
| | | <el-table-column prop="info" label="介绍" show-overflow-tooltip align="center"> </el-table-column> |
| | | <!-- <el-table-column prop="prop" label="操作" width="150" align="center"> |
| | | <template #default="scope"> |
| | | <el-button link type="primary" icon="Delete" @click="handleDel(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-table> |
| | | <pagination |
| | | v-show="total > 0" |
| | | :total="total" |
| | | v-model:page="queryParams.pageNum" |
| | | v-model:limit="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | |
| | | <el-button type="primary" @click="handleQuery">搜索</el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">重置</el-button> |
| | | </el-form-item> |
| | | <el-form-item style="float: right"> |
| | | <el-button type="primary" icon="plus" @click="handleAdd">新增</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div class="table-box"> |
| | | <div class=" mt20 mb20"> |
| | | <el-button type="primary" icon="Plus" @click="handleDialog('add')">新增</el-button> |
| | | <div class="table-bg-style"> |
| | | <div class="table-box"> |
| | | <el-table :data="tableData" style="width: 100%"> |
| | | <el-table-column prop="code" label="参数编码" align="center" show-overflow-tooltip /> |
| | | <el-table-column prop="name" label="参数名称" align="center" show-overflow-tooltip /> |
| | | <el-table-column |
| | | prop="unit" |
| | | label="单位" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | :formatter="(row, column) => proxy.selectDictLabel(sys_unit, row.unit)" |
| | | /> |
| | | <el-table-column prop="deviceType" label="设备类型" align="center" show-overflow-tooltip> |
| | | <template #default="scope"> |
| | | <dict-tag :options="sys_device_type" :value="scope.row.deviceType" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column fixed="right" label="操作" width="180" align="center" show-overflow-tooltip> |
| | | <template #default="scope"> |
| | | <el-button link type="primary" icon="Edit" @click="handleEdit(scope.row.id)"> 修改 </el-button> |
| | | |
| | | <el-button link type="primary" icon="Delete" @click="handleDel(scope.row)"> 删除 </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination |
| | | v-show="pageTotal > 0" |
| | | :total="pageTotal" |
| | | v-model:page="queryParams.pageNum" |
| | | v-model:limit="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | </div> |
| | | <el-table :data="tableData" style="width: 100%"> |
| | | <el-table-column prop="code" label="参数编码" align="center" show-overflow-tooltip /> |
| | | <el-table-column prop="name" label="参数名称" align="center" show-overflow-tooltip /> |
| | | <el-table-column prop="unit" label="单位" align="center" show-overflow-tooltip |
| | | :formatter="(row, column) => proxy.selectDictLabel(sys_unit, row.unit)" /> |
| | | <el-table-column prop="deviceType" label="设备类型" align="center" show-overflow-tooltip> |
| | | <template #default="scope"> |
| | | <dict-tag :options="sys_device_type" :value="scope.row.deviceType" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column fixed="right" label="操作" width="180" align="center" show-overflow-tooltip> |
| | | <template #default="scope"> |
| | | <el-button link type="primary" icon="Edit" @click="handleEdit(scope.row.id)"> |
| | | 修改 |
| | | </el-button> |
| | | |
| | | <el-button link type="primary" icon="Delete" @click="handleDel(scope.row)"> |
| | | 删除 |
| | | </el-button> |
| | | </template> |
| | | |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination v-show="pageTotal > 0" :total="pageTotal" v-model:page="queryParams.pageNum" |
| | | v-model:limit="queryParams.pageSize" @pagination="getList" /> |
| | | </div> |
| | | <el-dialog v-model="dialogVisible" :title="dialogTitle" width="500"> |
| | | <el-form ref="formRef" :model="form" :rules="rules" label-width="auto"> |
| | |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | | <el-button @click="handleClose">取消</el-button> |
| | | <el-button type="primary" @click="handleOk"> |
| | | 确认 |
| | | </el-button> |
| | | <el-button type="primary" @click="handleOk"> 确认 </el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | |
| | | </template> |
| | | |
| | | <script setup name="collect"> |
| | | import { listTemplate, addTemplate, getTempById, putTemplate, delTempById } from '@/api/modelConfiguration/collectIndicator.js' |
| | | import { reactive, ref } from 'vue'; |
| | | import { Delete, Edit, Search, Share, Upload } from '@element-plus/icons-vue' |
| | | const { proxy } = getCurrentInstance(); |
| | | const { sys_device_type } = proxy.useDict("sys_device_type"); |
| | | const { sys_unit } = proxy.useDict("sys_unit"); |
| | | |
| | | |
| | | import { |
| | | listTemplate, |
| | | addTemplate, |
| | | getTempById, |
| | | putTemplate, |
| | | delTempById, |
| | | } from "@/api/modelConfiguration/collectIndicator.js" |
| | | import { reactive, ref } from "vue" |
| | | import { Delete, Edit, Search, Share, Upload } from "@element-plus/icons-vue" |
| | | const { proxy } = getCurrentInstance() |
| | | const { sys_device_type } = proxy.useDict("sys_device_type") |
| | | const { sys_unit } = proxy.useDict("sys_unit") |
| | | |
| | | let queryParams = ref({ |
| | | pageNum: 1, |
| | |
| | | }) |
| | | let pageTotal = ref(0) |
| | | let dialogVisible = ref(false) |
| | | let dialogTitle = ref('') |
| | | let dialogTitle = ref("") |
| | | |
| | | let queryForm = ref({}) |
| | | let form = ref({}) |
| | | let tableData = ref([]) |
| | | const rules = { |
| | | code: [{ required: true, message: '请输入', trigger: 'blur' },], |
| | | name: [{ required: true, message: '请输入', trigger: 'blur' },], |
| | | unit: [{ required: true, message: '请选择', trigger: 'change' },], |
| | | deviceType: [{ required: true, message: '请选择', trigger: 'change' },], |
| | | code: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | name: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | unit: [{ required: true, message: "请选择", trigger: "change" }], |
| | | deviceType: [{ required: true, message: "请选择", trigger: "change" }], |
| | | } |
| | | |
| | | function handleQuery() { |
| | |
| | | getList() |
| | | } |
| | | |
| | | |
| | | function resetQuery() { |
| | | queryForm.value = {} |
| | | queryParams.value.pageNum = 1 |
| | | getList() |
| | | } |
| | | function handleEdit(id) { |
| | | getTempById({ id }).then(res => { |
| | | getTempById({ id }).then((res) => { |
| | | if (res.code == 200) { |
| | | handleDialog() |
| | | form.value = JSON.parse(JSON.stringify(res.data)) |
| | |
| | | } |
| | | |
| | | function handleDel(row) { |
| | | proxy.$modal.confirm('是否确认删除指标名为"' + row.name + '"的数据项?', '警告', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | return delTempById(row.id) |
| | | }).then(() => { |
| | | getList() |
| | | proxy.$modal.msgSuccess('删除成功') |
| | | }).catch(function () { |
| | | }) |
| | | |
| | | proxy.$modal |
| | | .confirm('是否确认删除指标名为"' + row.name + '"的数据项?', "警告", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | return delTempById(row.id) |
| | | }) |
| | | .then(() => { |
| | | getList() |
| | | proxy.$modal.msgSuccess("删除成功") |
| | | }) |
| | | .catch(function () {}) |
| | | } |
| | | |
| | | function getList() { |
| | | let params = { |
| | | ...queryParams.value, |
| | | ...queryForm.value |
| | | ...queryForm.value, |
| | | } |
| | | listTemplate(params).then(res => { |
| | | tableData.value = res.rows; |
| | | listTemplate(params).then((res) => { |
| | | tableData.value = res.rows |
| | | pageTotal.value = res.total |
| | | }); |
| | | }) |
| | | } |
| | | |
| | | function handleDialog(type) { |
| | | if (type == 'add') { |
| | | dialogTitle = '新增采集参数模版' |
| | | if (type == "add") { |
| | | dialogTitle = "新增采集参数模版" |
| | | } else { |
| | | dialogTitle = '修改采集参数模版' |
| | | dialogTitle = "修改采集参数模版" |
| | | } |
| | | dialogVisible.value = true |
| | | } |
| | | |
| | | function handleOk() { |
| | | proxy.$refs.formRef.validate(valid => { |
| | | console.log('valid===>', valid); |
| | | proxy.$refs.formRef.validate((valid) => { |
| | | console.log("valid===>", valid) |
| | | if (valid) { |
| | | if (form.value.id) { |
| | | putTemplate(form.value).then(res => { |
| | | putTemplate(form.value).then((res) => { |
| | | proxy.$modal.msgSuccess(res.msg) |
| | | dialogVisible.value = false |
| | | getList() |
| | | }) |
| | | } else { |
| | | addTemplate(form.value).then(res => { |
| | | console.log('res===>新增', res); |
| | | addTemplate(form.value).then((res) => { |
| | | console.log("res===>新增", res) |
| | | proxy.$modal.msgSuccess(res.msg) |
| | | dialogVisible.value = false |
| | | getList() |
| | | }) |
| | | } |
| | | |
| | | } |
| | | }) |
| | | |
| | | } |
| | | |
| | | function handleClose() { |
| | |
| | | } |
| | | |
| | | getList() |
| | | |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | |
| | | <template> |
| | | <div class="page"> |
| | | <div class="form-card"> |
| | | <el-form |
| | | :model="queryParams" |
| | | ref="queryRef" |
| | | :inline="true" |
| | | label-width="80px" |
| | | > |
| | | <el-form :model="queryParams" ref="queryRef" :inline="true" label-width="80px"> |
| | | <el-form-item label="能源类型"> |
| | | <el-input |
| | | v-model="queryParams.enername" |
| | | placeholder="能源类型" |
| | | maxlength="30" |
| | | /> |
| | | <el-input v-model="queryParams.enername" placeholder="能源类型" maxlength="30" /> |
| | | </el-form-item> |
| | | <el-form-item label="能源品种"> |
| | | <el-select |
| | | v-model="queryParams.enerclassid" |
| | | placeholder="能源品种" |
| | | style="width: 100%" |
| | | > |
| | | <el-select v-model="queryParams.enerclassid" placeholder="能源品种" style="width: 100%"> |
| | | <el-option |
| | | v-for="dict in energyVarietiesList" |
| | | :key="dict.enerclassid" |
| | |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery" |
| | | >搜索</el-button |
| | | > |
| | | <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">重置</el-button> |
| | | </el-form-item> |
| | | <el-form-item style="float: right"> |
| | | <el-button type="primary" icon="Plus" @click="handleAdd"> 新增 </el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div class="table-box"> |
| | | <div class="mt20 mb20"> |
| | | <el-button type="primary" icon="Plus" @click="handleAdd" |
| | | >新增</el-button |
| | | > |
| | | <div class="table-bg-style"> |
| | | <div class="table-box"> |
| | | <el-table v-loading="loading" :data="energyTypeList"> |
| | | <el-table-column |
| | | label="能源类型" |
| | | align="center" |
| | | key="enername" |
| | | prop="enername" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column label="计量单位" align="center" key="muid" prop="muid" :show-overflow-tooltip="true" /> |
| | | <el-table-column |
| | | label="能源品种" |
| | | align="center" |
| | | key="enerclassname" |
| | | prop="enerclassname" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column label="能源编号" align="center" key="enersno" prop="enersno" :show-overflow-tooltip="true" /> |
| | | <el-table-column |
| | | label="是否存储" |
| | | align="center" |
| | | key="isstorage" |
| | | prop="isstorage" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column label="单价" align="center" key="price" prop="price" :show-overflow-tooltip="true" /> |
| | | <el-table-column |
| | | label="折标系数" |
| | | align="center" |
| | | key="coefficient" |
| | | prop="coefficient" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="排放因子" |
| | | align="center" |
| | | key="emissionFactors" |
| | | prop="emissionFactors" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column label="备注" align="center" key="note" prop="note" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width"> |
| | | <template #default="scope"> |
| | | <el-tooltip content="编辑" placement="top"> |
| | | <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"> 编辑 </el-button> |
| | | </el-tooltip> |
| | | <el-tooltip content="删除" placement="top"> |
| | | <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"> 删除 </el-button> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination |
| | | v-show="queryParams.total > 0" |
| | | :total="queryParams.total" |
| | | v-model:page="queryParams.pageNum" |
| | | v-model:limit="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | </div> |
| | | <el-table v-loading="loading" :data="energyTypeList"> |
| | | <el-table-column |
| | | label="能源类型" |
| | | align="center" |
| | | key="enername" |
| | | prop="enername" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="计量单位" |
| | | align="center" |
| | | key="muid" |
| | | prop="muid" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="能源品种" |
| | | align="center" |
| | | key="enerclassname" |
| | | prop="enerclassname" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="能源编号" |
| | | align="center" |
| | | key="enersno" |
| | | prop="enersno" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="是否存储" |
| | | align="center" |
| | | key="isstorage" |
| | | prop="isstorage" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="单价" |
| | | align="center" |
| | | key="price" |
| | | prop="price" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="折标系数" |
| | | align="center" |
| | | key="coefficient" |
| | | prop="coefficient" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="排放因子" |
| | | align="center" |
| | | key="emissionFactors" |
| | | prop="emissionFactors" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="备注" |
| | | align="center" |
| | | key="note" |
| | | prop="note" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="操作" |
| | | align="center" |
| | | width="200" |
| | | class-name="small-padding fixed-width" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tooltip content="编辑" placement="top"> |
| | | <el-button |
| | | link |
| | | type="primary" |
| | | icon="Edit" |
| | | @click="handleUpdate(scope.row)" |
| | | > |
| | | 编辑 |
| | | </el-button> |
| | | </el-tooltip> |
| | | <el-tooltip content="删除" placement="top"> |
| | | <el-button |
| | | link |
| | | type="primary" |
| | | icon="Delete" |
| | | @click="handleDelete(scope.row)" |
| | | > |
| | | 删除 |
| | | </el-button> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination |
| | | v-show="queryParams.total > 0" |
| | | :total="queryParams.total" |
| | | v-model:page="queryParams.pageNum" |
| | | v-model:limit="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | </div> |
| | | |
| | | <el-dialog :title="title" v-model="open" width="600px" append-to-body> |
| | | <el-form :model="form" :rules="rules" ref="formRef" label-width="90px"> |
| | | <el-row> |
| | |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="计量单位" prop="muid"> |
| | | <el-select |
| | | v-model="form.muid" |
| | | placeholder="请选项计量单位" |
| | | clearable |
| | | style="width: 100%" |
| | | > |
| | | <el-select v-model="form.muid" placeholder="请选项计量单位" clearable style="width: 100%"> |
| | | <el-option |
| | | v-for="dict in sys_unit" |
| | | :key="dict.value" |
| | |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="能源品种" prop="enerclassid"> |
| | | <el-select |
| | | v-model="form.enerclassid" |
| | | placeholder="请选项能源品种" |
| | | style="width: 100%" |
| | | > |
| | | <el-select v-model="form.enerclassid" placeholder="请选项能源品种" style="width: 100%"> |
| | | <el-option |
| | | v-for="dict in energyVarietiesList" |
| | | :key="dict.enerclassid" |
| | |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="是否存储" prop="isstorage"> |
| | | <el-select |
| | | v-model="form.isstorage" |
| | | placeholder="请选项是否存储" |
| | | style="width: 100%" |
| | | > |
| | | <el-select v-model="form.isstorage" placeholder="请选项是否存储" style="width: 100%"> |
| | | <el-option |
| | | v-for="dict in sys_yes_no" |
| | | :key="dict.value" |
| | |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="备注" prop="note"> |
| | | <el-input |
| | | v-model="form.note" |
| | | placeholder="请输入备注" |
| | | type="textarea" |
| | | /> |
| | | <el-input v-model="form.note" placeholder="请输入备注" type="textarea" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | getEnergyType, |
| | | updateEnergyType, |
| | | delEnergyType, |
| | | } from "@/api/modelConfiguration/energyType"; |
| | | import { listEnergyVarietiesList } from "@/api/modelConfiguration/energyVarieties"; |
| | | const { proxy } = getCurrentInstance(); |
| | | const { sys_unit, sys_yes_no } = proxy.useDict("sys_unit", "sys_yes_no"); |
| | | const energyVarietiesList = ref([]); |
| | | const energyTypeList = ref([]); |
| | | const open = ref(false); |
| | | const loading = ref(false); |
| | | const title = ref(""); |
| | | } from "@/api/modelConfiguration/energyType" |
| | | import { listEnergyVarietiesList } from "@/api/modelConfiguration/energyVarieties" |
| | | const { proxy } = getCurrentInstance() |
| | | const { sys_unit, sys_yes_no } = proxy.useDict("sys_unit", "sys_yes_no") |
| | | const energyVarietiesList = ref([]) |
| | | const energyTypeList = ref([]) |
| | | const open = ref(false) |
| | | const loading = ref(false) |
| | | const title = ref("") |
| | | const data = reactive({ |
| | | form: {}, |
| | | queryParams: { |
| | |
| | | enerclassname: null, |
| | | }, |
| | | rules: { |
| | | enername: [ |
| | | { required: true, message: "能源类型不能为空", trigger: "blur" }, |
| | | ], |
| | | enername: [{ required: true, message: "能源类型不能为空", trigger: "blur" }], |
| | | enersno: [ |
| | | { required: true, message: "能源编号不能为空", trigger: "blur" }, |
| | | { pattern: /^[a-z0-9]*$/, message: "能源编号必须为数字/小写字母" }, |
| | | ], |
| | | enerclassid: [ |
| | | { required: true, message: "能源品种不能为空", trigger: "blur" }, |
| | | ], |
| | | isstorage: [ |
| | | { required: true, message: "是否存储不能为空", trigger: "blur" }, |
| | | ], |
| | | enerclassid: [{ required: true, message: "能源品种不能为空", trigger: "blur" }], |
| | | isstorage: [{ required: true, message: "是否存储不能为空", trigger: "blur" }], |
| | | price: [{ required: true, message: "单价不能为空", trigger: "blur" }], |
| | | coefficient: [ |
| | | { required: true, message: "折标系数不能为空", trigger: "blur" }, |
| | | ], |
| | | coefficient: [{ required: true, message: "折标系数不能为空", trigger: "blur" }], |
| | | }, |
| | | }); |
| | | const { queryParams, form, rules } = toRefs(data); |
| | | getList(); |
| | | getEnergyVarietiesList(); |
| | | }) |
| | | const { queryParams, form, rules } = toRefs(data) |
| | | getList() |
| | | getEnergyVarietiesList() |
| | | // 模型配置管理-能源类型管理-列表 |
| | | function getList() { |
| | | loading.value = true; |
| | | loading.value = true |
| | | listEnergyType(proxy.addDateRange(queryParams.value)).then((res) => { |
| | | loading.value = false; |
| | | energyTypeList.value = res.rows; |
| | | queryParams.value.total = res.total; |
| | | }); |
| | | loading.value = false |
| | | energyTypeList.value = res.rows |
| | | queryParams.value.total = res.total |
| | | }) |
| | | } |
| | | function getEnergyVarietiesList() { |
| | | listEnergyVarietiesList().then((res) => { |
| | | energyVarietiesList.value = res.data; |
| | | }); |
| | | energyVarietiesList.value = res.data |
| | | }) |
| | | } |
| | | // 模型配置管理-能源类型管理-搜索 |
| | | function handleQuery() { |
| | | queryParams.value.pageNum = 1; |
| | | getList(); |
| | | queryParams.value.pageNum = 1 |
| | | getList() |
| | | } |
| | | // 模型配置管理-能源类型管理-重置 |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef"); |
| | | proxy.resetForm("queryRef") |
| | | queryParams.value = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | total: 0, |
| | | enerclassname: null, |
| | | }; |
| | | getList(); |
| | | } |
| | | getList() |
| | | } |
| | | // 模型配置管理-能源类型管理-新增 |
| | | function handleAdd() { |
| | | reset(); |
| | | open.value = true; |
| | | title.value = "新增能源类型"; |
| | | reset() |
| | | open.value = true |
| | | title.value = "新增能源类型" |
| | | } |
| | | function handleClick(label, value) { |
| | | form.value[label] = value; |
| | | console.log(form.value, label, value); |
| | | form.value[label] = value |
| | | console.log(form.value, label, value) |
| | | } |
| | | // 模型配置管理-能源类型管理-编辑 |
| | | function handleUpdate(row) { |
| | | reset(); |
| | | reset() |
| | | getEnergyType(row.enerid).then((response) => { |
| | | form.value = response.data; |
| | | open.value = true; |
| | | title.value = "编辑能源类型"; |
| | | }); |
| | | form.value = response.data |
| | | open.value = true |
| | | title.value = "编辑能源类型" |
| | | }) |
| | | } |
| | | // 模型配置管理-能源类型管理-新增/编辑-保存 |
| | | function submitForm() { |
| | |
| | | if (valid) { |
| | | if (form.value.enerid != undefined) { |
| | | updateEnergyType(form.value).then((response) => { |
| | | proxy.$modal.msgSuccess("修改成功"); |
| | | open.value = false; |
| | | getList(); |
| | | }); |
| | | proxy.$modal.msgSuccess("修改成功") |
| | | open.value = false |
| | | getList() |
| | | }) |
| | | } else { |
| | | addEnergyType(form.value).then((response) => { |
| | | proxy.$modal.msgSuccess("新增成功"); |
| | | open.value = false; |
| | | getList(); |
| | | }); |
| | | proxy.$modal.msgSuccess("新增成功") |
| | | open.value = false |
| | | getList() |
| | | }) |
| | | } |
| | | } |
| | | }); |
| | | }) |
| | | } |
| | | // 模型配置管理-能源类型管理-新增/编辑-取消 |
| | | function cancel() { |
| | | open.value = false; |
| | | reset(); |
| | | open.value = false |
| | | reset() |
| | | } |
| | | // 模型配置管理-能源类型管理-新增/编辑-表单重置 |
| | | function reset() { |
| | |
| | | muidString: null, |
| | | note: null, |
| | | price: null, |
| | | }; |
| | | proxy.resetForm("formRef"); |
| | | } |
| | | proxy.resetForm("formRef") |
| | | } |
| | | // 模型配置管理-能源类型管理-删除 |
| | | function handleDelete(row) { |
| | | proxy.$modal |
| | | .confirm('是否确认删除能源类型为"' + row.enername + '"的数据项?') |
| | | .then(function () { |
| | | return delEnergyType(row.enerid); |
| | | return delEnergyType(row.enerid) |
| | | }) |
| | | .then(() => { |
| | | getList(); |
| | | proxy.$modal.msgSuccess("删除成功"); |
| | | getList() |
| | | proxy.$modal.msgSuccess("删除成功") |
| | | }) |
| | | .catch(() => {}); |
| | | .catch(() => {}) |
| | | } |
| | | </script> |
| | | <style scoped lang="scss"> |
| | |
| | | <template> |
| | | <div class="page"> |
| | | |
| | | <div class="form-card"> |
| | | <el-form :model="queryParams" ref="queryRef" :inline="true" label-width="80px" @submit.prevent> |
| | | <el-form-item label="能源品种"> |
| | |
| | | <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">重置</el-button> |
| | | </el-form-item> |
| | | <el-form-item style="float: right"> |
| | | <el-button type="primary" icon="Plus" @click="handleAdd">新增</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div class="table-box"> |
| | | <div class="mt20 mb20"> |
| | | <el-button type="primary" icon="Plus" @click="handleAdd">新增</el-button> |
| | | <div class="table-bg-style"> |
| | | <div class="table-box"> |
| | | <el-table v-loading="loading" :data="energyVarietiesList"> |
| | | <el-table-column |
| | | label="能源品种" |
| | | align="center" |
| | | key="enerclassname" |
| | | prop="enerclassname" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column label="备注" align="center" key="note" prop="note" :show-overflow-tooltip="true" /> |
| | | <el-table-column |
| | | label="创建人" |
| | | align="center" |
| | | key="createBy" |
| | | prop="createBy" |
| | | :show-overflow-tooltip="true" |
| | | width="100" |
| | | /> |
| | | <el-table-column |
| | | label="创建时间" |
| | | align="center" |
| | | key="createTime" |
| | | prop="createTime" |
| | | :show-overflow-tooltip="true" |
| | | width="200" |
| | | /> |
| | | <el-table-column |
| | | label="更新人" |
| | | align="center" |
| | | key="updateBy" |
| | | prop="updateBy" |
| | | :show-overflow-tooltip="true" |
| | | width="100" |
| | | /> |
| | | <el-table-column |
| | | label="更新时间" |
| | | align="center" |
| | | key="updateTime" |
| | | prop="updateTime" |
| | | :show-overflow-tooltip="true" |
| | | width="200" |
| | | /> |
| | | <el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width"> |
| | | <template #default="scope"> |
| | | <el-tooltip content="编辑" placement="top"> |
| | | <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"> 编辑 </el-button> |
| | | </el-tooltip> |
| | | <el-tooltip content="删除" placement="top"> |
| | | <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"> 删除 </el-button> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination |
| | | v-show="queryParams.total > 0" |
| | | :total="queryParams.total" |
| | | v-model:page="queryParams.pageNum" |
| | | v-model:limit="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | </div> |
| | | <el-table v-loading="loading" :data="energyVarietiesList"> |
| | | <el-table-column label="能源品种" align="center" key="enerclassname" prop="enerclassname" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="备注" align="center" key="note" prop="note" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="创建人" align="center" key="createBy" prop="createBy" :show-overflow-tooltip="true" width="100"/> |
| | | <el-table-column label="创建时间" align="center" key="createTime" prop="createTime" :show-overflow-tooltip="true" width="200"/> |
| | | <el-table-column label="更新人" align="center" key="updateBy" prop="updateBy" :show-overflow-tooltip="true" width="100"/> |
| | | <el-table-column label="更新时间" align="center" key="updateTime" prop="updateTime" :show-overflow-tooltip="true" width="200"/> |
| | | <el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width"> |
| | | <template #default="scope"> |
| | | <el-tooltip content="编辑" placement="top"> |
| | | <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"> |
| | | 编辑 |
| | | </el-button> |
| | | </el-tooltip> |
| | | <el-tooltip content="删除" placement="top"> |
| | | <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"> |
| | | 删除 |
| | | </el-button> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination v-show="queryParams.total > 0" :total="queryParams.total" v-model:page="queryParams.pageNum" |
| | | v-model:limit="queryParams.pageSize" @pagination="getList" /> |
| | | </div> |
| | | <el-dialog :title="title" v-model="open" width="600px" append-to-body> |
| | | <el-form :model="form" :rules="rules" ref="formRef" label-width="100px"> |
| | |
| | | getEnergyVarieties, |
| | | updateEnergyVarieties, |
| | | delEnergyVarieties, |
| | | } from "@/api/modelConfiguration/energyVarieties"; |
| | | const { proxy } = getCurrentInstance(); |
| | | const energyVarietiesList = ref([]); |
| | | const open = ref(false); |
| | | const loading = ref(false); |
| | | const title = ref(""); |
| | | } from "@/api/modelConfiguration/energyVarieties" |
| | | const { proxy } = getCurrentInstance() |
| | | const energyVarietiesList = ref([]) |
| | | const open = ref(false) |
| | | const loading = ref(false) |
| | | const title = ref("") |
| | | const data = reactive({ |
| | | form: {}, |
| | | queryParams: { |
| | |
| | | rules: { |
| | | enerclassname: [{ required: true, message: "能源品种不能为空", trigger: "blur" }], |
| | | }, |
| | | }); |
| | | const { queryParams, form, rules } = toRefs(data); |
| | | getList(); |
| | | }) |
| | | const { queryParams, form, rules } = toRefs(data) |
| | | getList() |
| | | // 模型配置管理-能源品种设置-列表 |
| | | function getList() { |
| | | loading.value = true; |
| | | listEnergyVarieties( |
| | | proxy.addDateRange(queryParams.value) |
| | | ).then((res) => { |
| | | loading.value = false; |
| | | energyVarietiesList.value = res.rows; |
| | | queryParams.value.total = res.total; |
| | | }); |
| | | loading.value = true |
| | | listEnergyVarieties(proxy.addDateRange(queryParams.value)).then((res) => { |
| | | loading.value = false |
| | | energyVarietiesList.value = res.rows |
| | | queryParams.value.total = res.total |
| | | }) |
| | | } |
| | | // 模型配置管理-能源品种设置-搜索 |
| | | function handleQuery() { |
| | | queryParams.value.pageNum = 1; |
| | | getList(); |
| | | queryParams.value.pageNum = 1 |
| | | getList() |
| | | } |
| | | // 模型配置管理-能源品种设置-重置 |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef"); |
| | | proxy.resetForm("queryRef") |
| | | queryParams.value = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | total: 0, |
| | | enerclassname: null, |
| | | } |
| | | getList(); |
| | | getList() |
| | | } |
| | | // 模型配置管理-能源品种设置-新增 |
| | | function handleAdd() { |
| | | reset(); |
| | | open.value = true; |
| | | title.value = "新增能源品种管理"; |
| | | reset() |
| | | open.value = true |
| | | title.value = "新增能源品种管理" |
| | | } |
| | | // 模型配置管理-能源品种设置-编辑 |
| | | // function handleUpdate(row) { |
| | |
| | | // title.value = "编辑能源品种管理"; |
| | | // } |
| | | function handleUpdate(row) { |
| | | reset(); |
| | | getEnergyVarieties(row.enerclassid).then(response => { |
| | | form.value = response.data; |
| | | open.value = true; |
| | | title.value = "编辑能源品种管理"; |
| | | }); |
| | | }; |
| | | reset() |
| | | getEnergyVarieties(row.enerclassid).then((response) => { |
| | | form.value = response.data |
| | | open.value = true |
| | | title.value = "编辑能源品种管理" |
| | | }) |
| | | } |
| | | // 模型配置管理-能源品种设置-新增/编辑-保存 |
| | | function submitForm() { |
| | | proxy.$refs["formRef"].validate((valid) => { |
| | | if (valid) { |
| | | if (form.value.enerclassid != undefined) { |
| | | updateEnergyVarieties(form.value).then((response) => { |
| | | proxy.$modal.msgSuccess("修改成功"); |
| | | open.value = false; |
| | | getList(); |
| | | }); |
| | | proxy.$modal.msgSuccess("修改成功") |
| | | open.value = false |
| | | getList() |
| | | }) |
| | | } else { |
| | | addEnergyVarieties(form.value).then((response) => { |
| | | proxy.$modal.msgSuccess("新增成功"); |
| | | open.value = false; |
| | | getList(); |
| | | }); |
| | | proxy.$modal.msgSuccess("新增成功") |
| | | open.value = false |
| | | getList() |
| | | }) |
| | | } |
| | | } |
| | | }); |
| | | }) |
| | | } |
| | | // 模型配置管理-能源品种设置-新增/编辑-取消 |
| | | function cancel() { |
| | | open.value = false; |
| | | reset(); |
| | | open.value = false |
| | | reset() |
| | | } |
| | | // 模型配置管理-能源品种设置-新增/编辑-表单重置 |
| | | function reset() { |
| | | form.value = { |
| | | enerclassname: '', |
| | | note: '' |
| | | }; |
| | | proxy.resetForm("formRef"); |
| | | enerclassname: "", |
| | | note: "", |
| | | } |
| | | proxy.resetForm("formRef") |
| | | } |
| | | // 模型配置管理-能源品种设置-删除 |
| | | function handleDelete(row) { |
| | | proxy.$modal |
| | | .confirm('是否确认删除能源品种为"' + row.enerclassname + '"的数据项?') |
| | | .then(function () { |
| | | return delEnergyVarieties(row.enerclassid); |
| | | return delEnergyVarieties(row.enerclassid) |
| | | }) |
| | | .then(() => { |
| | | getList(); |
| | | proxy.$modal.msgSuccess("删除成功"); |
| | | getList() |
| | | proxy.$modal.msgSuccess("删除成功") |
| | | }) |
| | | .catch(() => { }); |
| | | .catch(() => {}) |
| | | } |
| | | </script> |
| | | <style scoped lang="scss"> |
| | |
| | | <template> |
| | | <div class="page-box"> |
| | | <div class="form-card"> |
| | | <el-form :model="form" ref="queryRef" :inline="true" label-width="70px"> |
| | | <el-form-item label="编码" prop="indexCategory"> |
| | | <el-select v-model="form.indexCategory" placeholder="请选择指标分类" style="width: 200px"> |
| | | <el-option v-for="dict in sys_index_category" :key="dict.value" :label="dict.label" |
| | | :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="关键字" prop="name"> |
| | | <el-input v-model="form.name" placeholder="请输入指标名称/编码" /> |
| | | </el-form-item> |
| | | <div class="page-box"> |
| | | <div class="form-card"> |
| | | <el-form :model="form" ref="queryRef" :inline="true" label-width="70px"> |
| | | <el-form-item label="编码" prop="indexCategory"> |
| | | <el-select v-model="form.indexCategory" placeholder="请选择指标分类" style="width: 200px"> |
| | | <el-option v-for="dict in sys_index_category" :key="dict.value" :label="dict.label" :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="关键字" prop="name"> |
| | | <el-input v-model="form.name" placeholder="请输入指标名称/编码" /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">重置</el-button> |
| | | <el-button icon="Plus" type="primary" @click="handleAdd">新增</el-button> |
| | | <el-button icon="Delete" :disabled="multiple" @click="handleDel">删除</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <!-- <div class="ml20 mt20 mb20"> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">重置</el-button> |
| | | <el-button icon="Plus" type="primary" @click="handleAdd">新增</el-button> |
| | | <el-button icon="Delete" :disabled="multiple" @click="handleDel">删除</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <!-- <div class="ml20 mt20 mb20"> |
| | | <el-button icon="Plus" type="primary" @click="handleAdd">新增</el-button> |
| | | <el-button icon="Delete" :disabled="multiple" @click="handleDel">删除</el-button> |
| | | <el-button icon="Upload">导入</el-button> |
| | | </div> --> |
| | | <div class="table-box"> |
| | | <el-table :data="tableData" v-loading="loading" height="calc(100vh - 450px)" |
| | | @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" align="center" show-overflow-tooltip /> |
| | | <el-table-column prop="code" label="指标编码" align="center" show-overflow-tooltip /> |
| | | <el-table-column prop="name" label="指标名称" align="center" show-overflow-tooltip /> |
| | | <el-table-column prop="indexCategory" label="系统指标分类" align="center" show-overflow-tooltip |
| | | :formatter="(row, column) => proxy.selectDictLabel(sys_index_category, row.indexCategory)" /> |
| | | <el-table-column prop="unitId" label="单位" align="center" show-overflow-tooltip |
| | | :formatter="(row, column) => proxy.selectDictLabel(sys_unit, row.unitId)" /> |
| | | <el-table-column label="操作" width="230" align="center"> |
| | | <template #default="scope"> |
| | | <el-button link type="primary" icon="Edit" @click="handleAdd(scope.row)"> |
| | | 修改 |
| | | </el-button> |
| | | <el-button link type="primary" icon="Edit" @click="handleSave(scope.row)"> |
| | | 存储 |
| | | </el-button> |
| | | <el-button link type="primary" icon="Delete" @click="handleDel(scope.row)"> |
| | | 删除 |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" |
| | | v-model:limit="queryParams.pageSize" @pagination="getList(currentNode)" /> |
| | | <edit-modal ref="EditModalRef" :indexType="indexType" :sys_index_category='sys_index_category' |
| | | :sys_unit='sys_unit' @getList="getList(currentNode)" /> |
| | | <storageModal ref="storageModalRef" /> |
| | | |
| | | |
| | | <div class="table-box" style="margin-top: 0"> |
| | | <el-table |
| | | :data="tableData" |
| | | v-loading="loading" |
| | | height="calc(100vh - 450px)" |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column type="selection" width="55" align="center" show-overflow-tooltip /> |
| | | <el-table-column prop="code" label="指标编码" align="center" show-overflow-tooltip /> |
| | | <el-table-column prop="name" label="指标名称" align="center" show-overflow-tooltip /> |
| | | <el-table-column |
| | | prop="indexCategory" |
| | | label="系统指标分类" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | :formatter="(row, column) => proxy.selectDictLabel(sys_index_category, row.indexCategory)" |
| | | /> |
| | | <el-table-column |
| | | prop="unitId" |
| | | label="单位" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | :formatter="(row, column) => proxy.selectDictLabel(sys_unit, row.unitId)" |
| | | /> |
| | | <el-table-column label="操作" width="230" align="center"> |
| | | <template #default="scope"> |
| | | <el-button link type="primary" icon="Edit" @click="handleAdd(scope.row)"> 修改 </el-button> |
| | | <el-button link type="primary" icon="Edit" @click="handleSave(scope.row)"> 存储 </el-button> |
| | | <el-button link type="primary" icon="Delete" @click="handleDel(scope.row)"> 删除 </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <pagination |
| | | v-show="total > 0" |
| | | :total="total" |
| | | v-model:page="queryParams.pageNum" |
| | | v-model:limit="queryParams.pageSize" |
| | | @pagination="getList(currentNode)" |
| | | /> |
| | | <edit-modal |
| | | ref="EditModalRef" |
| | | :indexType="indexType" |
| | | :sys_index_category="sys_index_category" |
| | | :sys_unit="sys_unit" |
| | | @getList="getList(currentNode)" |
| | | /> |
| | | <storageModal ref="storageModalRef" /> |
| | | </div> |
| | | </template> |
| | | <script setup> |
| | | import storageModal from './components/storage/StorageModal.vue'; |
| | | import EditModal from './components/EditModal.vue' |
| | | import { listEnergyindex, delEnergyindex } from '@/api/modelConfiguration/indexWarehouse' |
| | | import storageModal from "./components/storage/StorageModal.vue" |
| | | import EditModal from "./components/EditModal.vue" |
| | | import { listEnergyindex, delEnergyindex } from "@/api/modelConfiguration/indexWarehouse" |
| | | const { proxy } = getCurrentInstance() |
| | | const { sys_index_category } = proxy.useDict("sys_index_category"); |
| | | const { sys_unit } = proxy.useDict("sys_unit"); |
| | | const { sys_index_category } = proxy.useDict("sys_index_category") |
| | | const { sys_unit } = proxy.useDict("sys_unit") |
| | | |
| | | const props = defineProps(['indexType']) |
| | | const props = defineProps(["indexType"]) |
| | | let loading = ref(false) |
| | | let form = ref({ |
| | | indexCategory: null, |
| | | name: null |
| | | indexCategory: null, |
| | | name: null, |
| | | }) |
| | | let tableData = ref([]) |
| | | let total = ref(0); |
| | | let total = ref(0) |
| | | let queryParams = ref({ |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | }) |
| | | let currentNode = ref(null) |
| | | function getList(modelNode) { |
| | | currentNode.value = modelNode; |
| | | currentNode.value = modelNode |
| | | |
| | | console.log(111, currentNode.value) |
| | | if (modelNode) { |
| | | loading.value = true; |
| | | form.value.nodeId = modelNode.id; |
| | | form.value.indexType = props.indexType; |
| | | listEnergyindex({ ...queryParams.value, ...form.value }).then(response => { |
| | | tableData.value = response.rows; |
| | | total.value = response.total; |
| | | loading.value = false; |
| | | }); |
| | | } else { |
| | | tableData.value = []; |
| | | } |
| | | console.log(111, currentNode.value) |
| | | if (modelNode) { |
| | | loading.value = true |
| | | form.value.nodeId = modelNode.id |
| | | form.value.indexType = props.indexType |
| | | listEnergyindex({ ...queryParams.value, ...form.value }).then((response) => { |
| | | tableData.value = response.rows |
| | | total.value = response.total |
| | | loading.value = false |
| | | }) |
| | | } else { |
| | | tableData.value = [] |
| | | } |
| | | } |
| | | |
| | | // // 回显数据字典 |
| | |
| | | // 非多个禁用 |
| | | let multiple = ref(true) |
| | | function handleSelectionChange(selection) { |
| | | ids.value = selection.map(item => item.indexId); |
| | | names.value = selection.map(item => item.name); |
| | | multiple.value = !selection.length |
| | | ids.value = selection.map((item) => item.indexId) |
| | | names.value = selection.map((item) => item.name) |
| | | multiple.value = !selection.length |
| | | } |
| | | function handleQuery() { |
| | | getList(currentNode.value) |
| | | getList(currentNode.value) |
| | | } |
| | | |
| | | function resetQuery() { |
| | | form.value = { |
| | | indexCategory: null, |
| | | name: null |
| | | } |
| | | getList(currentNode.value) |
| | | form.value = { |
| | | indexCategory: null, |
| | | name: null, |
| | | } |
| | | getList(currentNode.value) |
| | | } |
| | | |
| | | let EditModalRef = ref('') |
| | | let EditModalRef = ref("") |
| | | function handleAdd(row) { |
| | | if (EditModalRef.value) { |
| | | EditModalRef.value.handleOpen(row, currentNode.value) |
| | | } |
| | | if (EditModalRef.value) { |
| | | EditModalRef.value.handleOpen(row, currentNode.value) |
| | | } |
| | | } |
| | | |
| | | function handleDel(row) { |
| | | const indexIds = row.indexId || ids.value |
| | | const indexNames = row.name || names.value |
| | | proxy.$modal.confirm('是否确认删除指标名为"' + indexNames + '"的数据项?', '警告', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | return delEnergyindex(currentNode.value.id, indexIds) |
| | | }).then(() => { |
| | | getList(currentNode.value) |
| | | proxy.$modal.msgError('删除成功') |
| | | }).catch(function () { |
| | | const indexIds = row.indexId || ids.value |
| | | const indexNames = row.name || names.value |
| | | proxy.$modal |
| | | .confirm('是否确认删除指标名为"' + indexNames + '"的数据项?', "警告", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | return delEnergyindex(currentNode.value.id, indexIds) |
| | | }) |
| | | .then(() => { |
| | | getList(currentNode.value) |
| | | proxy.$modal.msgError("删除成功") |
| | | }) |
| | | .catch(function () {}) |
| | | } |
| | | |
| | | let storageModalRef = ref('') |
| | | let storageModalRef = ref("") |
| | | function handleSave(row) { |
| | | if (storageModalRef.value) { |
| | | storageModalRef.value.handleOpen(row, currentNode.value) |
| | | storageModalRef.value.getIndexStorageFun(row.indexId) |
| | | } |
| | | if (storageModalRef.value) { |
| | | storageModalRef.value.handleOpen(row, currentNode.value) |
| | | storageModalRef.value.getIndexStorageFun(row.indexId) |
| | | } |
| | | } |
| | | |
| | | defineExpose({ getList }) |
| | |
| | | @import "@/assets/styles/page.scss"; |
| | | |
| | | .page-box { |
| | | height: calc(100vh - 115px); |
| | | |
| | | height: calc(100vh - 115px); |
| | | } |
| | | |
| | | .table-box { |
| | | height: calc(100vh - 455px); |
| | | height: calc(100vh - 455px); |
| | | } |
| | | </style> |
| | |
| | | </div> |
| | | </div> |
| | | <div class="page-container-right"> |
| | | <div class="mb20 mt20 ml20 tab-box"> |
| | | <div class="tab-box"> |
| | | <div class="tab-li" :class="tab == 1 ? 'is-tab' : ''" @click="handleTab('1')">计量器具配置信息</div> |
| | | <div class="tab-li" :class="tab == 2 ? 'is-tab' : ''" @click="handleTab('2')">统计指标</div> |
| | | <!-- <el-radio-group v-model="tab"> |
| | |
| | | color: #333; |
| | | border-bottom: 1px solid #3371eb; |
| | | margin-right: 20px; |
| | | margin-left: 15px; |
| | | font-size: 15px; |
| | | |
| | | .tab-li { |
| | | cursor: pointer; |
| | | border: 1px solid #3371eb; |
| | | padding: 10px 25px; |
| | | padding: 8px 20px; |
| | | border-radius: 5px 5px 0 0; |
| | | } |
| | | |
| | |
| | | <el-input v-model="queryParams.remark" placeholder="请输入备注" /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> |
| | | 搜索 |
| | | </el-button> |
| | | <el-button type="primary" icon="Search" @click="handleQuery"> 搜索 </el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">重置</el-button> |
| | | </el-form-item> |
| | | <el-form-item style="float: right"> |
| | | <el-button type="primary" icon="Plus" @click="handleAdd"> 时段配置 </el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div class="table-box"> |
| | | <div class="mt20 mb20"> |
| | | <el-button type="primary" icon="Plus" @click="handleAdd"> |
| | | 时段配置 |
| | | </el-button> |
| | | <div class="table-bg-style"> |
| | | <div class="table-box"> |
| | | <el-table v-loading="loading" :data="productoutputList" style="width: 100%" row-key="id"> |
| | | <el-table-column |
| | | label="生效开始日期" |
| | | align="center" |
| | | key="beginDate" |
| | | prop="beginDate" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="生效结束日期" |
| | | align="center" |
| | | key="endDate" |
| | | prop="endDate" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column label="备注" align="center" key="remark" prop="remark" :show-overflow-tooltip="true" /> |
| | | <el-table-column |
| | | label="创建时间" |
| | | align="center" |
| | | key="createTime" |
| | | prop="createTime" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column label="操作" align="center" width="300" class-name="small-padding fixed-width"> |
| | | <template #default="scope"> |
| | | <el-tooltip content="电价配置" placement="top"> |
| | | <el-button link type="primary" icon="Plus" @click="handleExpandChange(scope.row)"> 电价配置 </el-button> |
| | | </el-tooltip> |
| | | <el-tooltip content="编辑" placement="top"> |
| | | <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"> 编辑 </el-button> |
| | | </el-tooltip> |
| | | <el-tooltip content="删除" placement="top"> |
| | | <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"> 删除 </el-button> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <el-table v-loading="loading" :data="productoutputList" style="width: 100%" row-key="id"> |
| | | <el-table-column label="生效开始日期" align="center" key="beginDate" prop="beginDate" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="生效结束日期" align="center" key="endDate" prop="endDate" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="备注" align="center" key="remark" prop="remark" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="创建时间" align="center" key="createTime" prop="createTime" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="操作" align="center" width="300" class-name="small-padding fixed-width"> |
| | | <template #default="scope"> |
| | | <el-tooltip content="电价配置" placement="top"> |
| | | <el-button link type="primary" icon="Plus" @click="handleExpandChange(scope.row)"> |
| | | 电价配置 |
| | | </el-button> |
| | | </el-tooltip> |
| | | <el-tooltip content="编辑" placement="top"> |
| | | <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"> |
| | | 编辑 |
| | | </el-button> |
| | | </el-tooltip> |
| | | <el-tooltip content="删除" placement="top"> |
| | | <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"> |
| | | 删除 |
| | | </el-button> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <el-dialog :title="title" v-model="open" width="600px" append-to-body> |
| | | <el-form :model="form" :rules="rules" ref="formRef" label-width="120px"> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="生效日期" prop="beginEndDate"> |
| | | <el-date-picker v-model="form.beginEndDate" type="daterange" range-separator="到" format="YYYY-MM-DD" |
| | | value-format="YYYY-MM-DD" start-placeholder="生效开始日期" end-placeholder="生效结束日期" style="width: 100%" /> |
| | | <el-date-picker |
| | | v-model="form.beginEndDate" |
| | | type="daterange" |
| | | range-separator="到" |
| | | format="YYYY-MM-DD" |
| | | value-format="YYYY-MM-DD" |
| | | start-placeholder="生效开始日期" |
| | | end-placeholder="生效结束日期" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | |
| | | </el-row> |
| | | <el-row v-for="(item, index) in formChild.data" :key="item.id"> |
| | | <el-col :span="4"> |
| | | <el-form-item label="类别名称" :prop="'data.' + index + '.type'" :rules="{ |
| | | required: true, |
| | | message: '类别名称不能为空', |
| | | trigger: ['change'], |
| | | }"> |
| | | <el-form-item |
| | | label="类别名称" |
| | | :prop="'data.' + index + '.type'" |
| | | :rules="{ |
| | | required: true, |
| | | message: '类别名称不能为空', |
| | | trigger: ['change'], |
| | | }" |
| | | > |
| | | <el-select v-model="item.type" placeholder="类别名称" clearable style="width: 100%"> |
| | | <el-option v-for="dict in electricity_price" :key="dict.value" :label="dict.label" |
| | | :value="dict.value" /> |
| | | <el-option |
| | | v-for="dict in electricity_price" |
| | | :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="'data.' + index + '.effecticityPrice'" :rules="{ |
| | | required: true, |
| | | message: '时段电价不能为空', |
| | | trigger: ['blur', 'change'], |
| | | }"> |
| | | <el-input-number v-model="item.effecticityPrice" :min="0.0" :precision="2" :step="0.1" |
| | | placeholder="时段电价" style="width: 100%" controls-position="right" /> |
| | | <el-form-item |
| | | label="时段电价" |
| | | :prop="'data.' + index + '.effecticityPrice'" |
| | | :rules="{ |
| | | required: true, |
| | | message: '时段电价不能为空', |
| | | trigger: ['blur', 'change'], |
| | | }" |
| | | > |
| | | <el-input-number |
| | | v-model="item.effecticityPrice" |
| | | :min="0.0" |
| | | :precision="2" |
| | | :step="0.1" |
| | | placeholder="时段电价" |
| | | style="width: 100%" |
| | | controls-position="right" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="4"> |
| | | <el-form-item label="开始时间" :prop="'data.' + index + '.startTime'" :rules="{ |
| | | required: true, |
| | | message: '开始时间不能为空', |
| | | trigger: ['blur', 'change'], |
| | | }"> |
| | | <el-time-select v-model="item.startTime" placeholder="开始时间" :max-time="item.stopTime" start="00:00:00" |
| | | step="00:30:00" end="24:00:00" style="width: 100%" format="HH:mm:00" /> |
| | | <el-form-item |
| | | label="开始时间" |
| | | :prop="'data.' + index + '.startTime'" |
| | | :rules="{ |
| | | required: true, |
| | | message: '开始时间不能为空', |
| | | trigger: ['blur', 'change'], |
| | | }" |
| | | > |
| | | <el-time-select |
| | | v-model="item.startTime" |
| | | placeholder="开始时间" |
| | | :max-time="item.stopTime" |
| | | start="00:00:00" |
| | | step="00:30:00" |
| | | end="24:00:00" |
| | | style="width: 100%" |
| | | format="HH:mm:00" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="4"> |
| | | <el-form-item label="结束时间" :prop="'data.' + index + '.stopTime'" :rules="{ |
| | | required: true, |
| | | message: '结束时间不能为空', |
| | | trigger: ['blur', 'change'], |
| | | }"> |
| | | <el-time-select v-model="item.stopTime" placeholder="结束时间" :min-time="item.startTime" start="00:00:00" |
| | | step="00:30:00" end="24:00:00" style="width: 100%" format="HH:mm:00" :disabled="item.startTime==null" /> |
| | | <el-form-item |
| | | label="结束时间" |
| | | :prop="'data.' + index + '.stopTime'" |
| | | :rules="{ |
| | | required: true, |
| | | message: '结束时间不能为空', |
| | | trigger: ['blur', 'change'], |
| | | }" |
| | | > |
| | | <el-time-select |
| | | v-model="item.stopTime" |
| | | placeholder="结束时间" |
| | | :min-time="item.startTime" |
| | | start="00:00:00" |
| | | step="00:30:00" |
| | | end="24:00:00" |
| | | style="width: 100%" |
| | | format="HH:mm:00" |
| | | :disabled="item.startTime == null" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="4"> |
| | |
| | | </el-col> |
| | | <el-col :span="4"> |
| | | <el-form-item> |
| | | <el-button link type="primary" icon="Plus" @click="handleAddChildChild"> |
| | | 新增 |
| | | </el-button> |
| | | <el-button link type="primary" icon="Delete" @click="handleDeleteChildChild(item, index)" |
| | | v-if="formChild.data.length > 1"> |
| | | <el-button link type="primary" icon="Plus" @click="handleAddChildChild"> 新增 </el-button> |
| | | <el-button |
| | | link |
| | | type="primary" |
| | | icon="Delete" |
| | | @click="handleDeleteChildChild(item, index)" |
| | | v-if="formChild.data.length > 1" |
| | | > |
| | | 删除 |
| | | </el-button> |
| | | </el-form-item> |
| | |
| | | delPeakValleyConfiguration, |
| | | listPeakValleyConfigurationChild, |
| | | updatePeakValleyConfigurationChild, |
| | | } from "@/api/modelConfiguration/setPeakValley"; |
| | | import { nanoid } from "nanoid"; |
| | | const { proxy } = getCurrentInstance(); |
| | | const { electricity_price } = proxy.useDict("electricity_price"); |
| | | const productoutputList = ref([]); |
| | | const open = ref(false); |
| | | const loading = ref(false); |
| | | const showSearch = ref(true); |
| | | const title = ref(""); |
| | | const loadingChild = ref(true); |
| | | const openChild = ref(false); |
| | | const titleChild = ref(""); |
| | | } from "@/api/modelConfiguration/setPeakValley" |
| | | import { nanoid } from "nanoid" |
| | | const { proxy } = getCurrentInstance() |
| | | const { electricity_price } = proxy.useDict("electricity_price") |
| | | const productoutputList = ref([]) |
| | | const open = ref(false) |
| | | const loading = ref(false) |
| | | const showSearch = ref(true) |
| | | const title = ref("") |
| | | const loadingChild = ref(true) |
| | | const openChild = ref(false) |
| | | const titleChild = ref("") |
| | | const data = reactive({ |
| | | form: {}, |
| | | queryParams: { |
| | |
| | | }, |
| | | ], |
| | | }, |
| | | }); |
| | | }) |
| | | |
| | | const { queryParams, form, rules, formChild } = toRefs(data); |
| | | getList(); |
| | | const { queryParams, form, rules, formChild } = toRefs(data) |
| | | getList() |
| | | // 模型配置管理-尖峰平谷配置-列表 |
| | | function getList() { |
| | | loading.value = true; |
| | | listPeakValleyConfiguration(proxy.addDateRange(queryParams.value)).then( |
| | | (res) => { |
| | | loading.value = false; |
| | | productoutputList.value = res.rows; |
| | | queryParams.value.total = res.total; |
| | | } |
| | | ); |
| | | loading.value = true |
| | | listPeakValleyConfiguration(proxy.addDateRange(queryParams.value)).then((res) => { |
| | | loading.value = false |
| | | productoutputList.value = res.rows |
| | | queryParams.value.total = res.total |
| | | }) |
| | | } |
| | | // 模型配置管理-尖峰平谷配置-搜索 |
| | | function handleQuery() { |
| | | queryParams.value.pageNum = 1; |
| | | getList(); |
| | | queryParams.value.pageNum = 1 |
| | | getList() |
| | | } |
| | | // 模型配置管理-尖峰平谷配置-重置 |
| | | function resetQuery() { |
| | | proxy.resetForm("queryRef"); |
| | | (queryParams.value = { |
| | | proxy.resetForm("queryRef") |
| | | ;(queryParams.value = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | timeType: "YEAR", |
| | | dataTime: null, |
| | | total: 0, |
| | | }), |
| | | handleQuery(); |
| | | handleQuery() |
| | | } |
| | | // 模型配置管理-尖峰平谷配置-新增 |
| | | function handleAdd() { |
| | | reset(); |
| | | open.value = true; |
| | | title.value = "新增尖峰平谷时段配置"; |
| | | reset() |
| | | open.value = true |
| | | title.value = "新增尖峰平谷时段配置" |
| | | } |
| | | // 模型配置管理-尖峰平谷配置-编辑 |
| | | function handleUpdate(row) { |
| | | reset(); |
| | | reset() |
| | | getPeakValleyConfiguration(row.id).then((response) => { |
| | | form.value = response.data; |
| | | form.value.beginEndDate = [response.data.beginDate, response.data.endDate]; |
| | | open.value = true; |
| | | title.value = "编辑尖峰平谷时段配置"; |
| | | }); |
| | | form.value = response.data |
| | | form.value.beginEndDate = [response.data.beginDate, response.data.endDate] |
| | | open.value = true |
| | | title.value = "编辑尖峰平谷时段配置" |
| | | }) |
| | | } |
| | | // 模型配置管理-尖峰平谷配置-新增/编辑-保存 |
| | | function submitForm() { |
| | | proxy.$refs["formRef"].validate((valid) => { |
| | | if (valid) { |
| | | form.value.beginDate = form.value.beginEndDate[0]; |
| | | form.value.endDate = form.value.beginEndDate[1]; |
| | | delete form.value.beginEndDate; |
| | | form.value.beginDate = form.value.beginEndDate[0] |
| | | form.value.endDate = form.value.beginEndDate[1] |
| | | delete form.value.beginEndDate |
| | | if (form.value.id != undefined) { |
| | | updatePeakValleyConfiguration(form.value).then((response) => { |
| | | proxy.$modal.msgSuccess("修改成功"); |
| | | open.value = false; |
| | | getList(); |
| | | }); |
| | | proxy.$modal.msgSuccess("修改成功") |
| | | open.value = false |
| | | getList() |
| | | }) |
| | | } else { |
| | | addPeakValleyConfiguration(form.value).then((response) => { |
| | | proxy.$modal.msgSuccess("新增成功"); |
| | | open.value = false; |
| | | getList(); |
| | | }); |
| | | proxy.$modal.msgSuccess("新增成功") |
| | | open.value = false |
| | | getList() |
| | | }) |
| | | } |
| | | } |
| | | }); |
| | | }) |
| | | } |
| | | // 模型配置管理-尖峰平谷配置-新增/编辑-取消 |
| | | function cancel() { |
| | | open.value = false; |
| | | proxy.$refs.formRef.resetFields(); |
| | | reset(); |
| | | open.value = false |
| | | proxy.$refs.formRef.resetFields() |
| | | reset() |
| | | } |
| | | // 模型配置管理-尖峰平谷配置-新增/编辑-表单重置 |
| | | function reset() { |
| | |
| | | beginDate: null, |
| | | endDate: null, |
| | | remark: null, |
| | | }; |
| | | } |
| | | } |
| | | // 模型配置管理-尖峰平谷配置-删除 |
| | | function handleDelete(row) { |
| | | proxy.$modal |
| | | .confirm( |
| | | '是否确认删除生效日期为"' + |
| | | row.beginDate + |
| | | "到" + |
| | | row.endDate + |
| | | '"的数据项?' |
| | | ) |
| | | .confirm('是否确认删除生效日期为"' + row.beginDate + "到" + row.endDate + '"的数据项?') |
| | | .then(function () { |
| | | return delPeakValleyConfiguration(row.id); |
| | | return delPeakValleyConfiguration(row.id) |
| | | }) |
| | | .then(() => { |
| | | getList(); |
| | | proxy.$modal.msgSuccess("删除成功"); |
| | | getList() |
| | | proxy.$modal.msgSuccess("删除成功") |
| | | }) |
| | | .catch(() => { }); |
| | | .catch(() => {}) |
| | | } |
| | | // 模型配置管理-尖峰平谷配置-时段电价配置-新增 |
| | | function handleExpandChange(row) { |
| | | formChild.value.parentId = row.id; |
| | | formChild.value.beginEndDate = [row.beginDate, row.endDate]; |
| | | formChild.value.beginDate = row.beginDate; |
| | | formChild.value.endDate = row.endDate; |
| | | formChild.value.parentId = row.id |
| | | formChild.value.beginEndDate = [row.beginDate, row.endDate] |
| | | formChild.value.beginDate = row.beginDate |
| | | formChild.value.endDate = row.endDate |
| | | listPeakValleyConfigurationChild( |
| | | proxy.addDateRange({ |
| | | parentId: row.id, |
| | | }) |
| | | ).then((res) => { |
| | | loadingChild.value = false; |
| | | loadingChild.value = false |
| | | formChild.value.data = |
| | | res.rows.length > 0 |
| | | ? res.rows |
| | | : [ |
| | | { |
| | | parentId: row.id, |
| | | type: null, |
| | | startTime: null, |
| | | stopTime: null, |
| | | effecticityPrice: 0.0, |
| | | }, |
| | | ]; |
| | | }); |
| | | openChild.value = true; |
| | | titleChild.value = "尖峰平谷时段电价配置"; |
| | | { |
| | | parentId: row.id, |
| | | type: null, |
| | | startTime: null, |
| | | stopTime: null, |
| | | effecticityPrice: 0.0, |
| | | }, |
| | | ] |
| | | }) |
| | | openChild.value = true |
| | | titleChild.value = "尖峰平谷时段电价配置" |
| | | } |
| | | function handleAddChildChild() { |
| | | console.log(formChild.value); |
| | | console.log(formChild.value) |
| | | formChild.value.data.push({ |
| | | parentId: formChild.value.parentId, |
| | | type: null, |
| | | startTime: null, |
| | | stopTime: null, |
| | | effecticityPrice: 0.0, |
| | | }); |
| | | openChild.value = true; |
| | | titleChild.value = "尖峰平谷时段电价配置"; |
| | | }) |
| | | openChild.value = true |
| | | titleChild.value = "尖峰平谷时段电价配置" |
| | | } |
| | | function handleDeleteChildChild(item, index) { |
| | | formChild.value.data.splice(index, 1); |
| | | formChild.value.data.splice(index, 1) |
| | | } |
| | | // 模型配置管理-尖峰平谷配置-时段电价配置-新增/编辑-保存 |
| | | function submitFormChild() { |
| | | proxy.$refs["formChildRef"].validate((valid) => { |
| | | if (valid) { |
| | | updatePeakValleyConfigurationChild(formChild.value.data).then( |
| | | (response) => { |
| | | proxy.$modal.msgSuccess("修改成功"); |
| | | openChild.value = false; |
| | | getList(); |
| | | } |
| | | ); |
| | | updatePeakValleyConfigurationChild(formChild.value.data).then((response) => { |
| | | proxy.$modal.msgSuccess("修改成功") |
| | | openChild.value = false |
| | | getList() |
| | | }) |
| | | } |
| | | }); |
| | | }) |
| | | } |
| | | // 模型配置管理-尖峰平谷配置-新增/编辑-取消 |
| | | function cancelChild() { |
| | | openChild.value = false; |
| | | proxy.$refs.formChildRef.resetFields(); |
| | | openChild.value = false |
| | | proxy.$refs.formChildRef.resetFields() |
| | | } |
| | | </script> |
| | | <style scoped lang="scss"> |
| | |
| | | <div class="form-card"> |
| | | <el-form :model="queryParams" ref="queryRef" :inline="true" label-width="120px"> |
| | | <el-form-item label="标题"> |
| | | <el-input v-model="queryParams.title" placeholder="请输入标题" clearable/> |
| | | <el-input v-model="queryParams.title" placeholder="请输入标题" clearable /> |
| | | </el-form-item> |
| | | <el-form-item label="能源类型"> |
| | | <el-select v-model="queryParams.type" placeholder="请选择能源类型" style="width: 100%" clearable> |
| | | <el-option v-for="dict in types" :key="dict.value" |
| | | :label="dict.label" :value="dict.value" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-select v-model="queryParams.type" placeholder="请选择能源类型" style="width: 100%" clearable> |
| | | <el-option v-for="dict in types" :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 icon="Refresh" @click="resetQuery">重置</el-button> |
| | | </el-form-item> |
| | | <el-form-item style="float: right"> |
| | | <el-button type="primary" icon="plus" @click="handleAdd">新增</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | |
| | | <div class="table-bg-style"> |
| | | <div class="theme-dark-mt20 mb20 ml20"> |
| | | <el-button type="primary" icon="plus" @click="handleAdd">新增</el-button> |
| | | <!-- <el-button type="primary" icon="Delete">删除</el-button> --> |
| | | </div> |
| | | <div class="table-box"> |
| | | <el-table :data="tableData" v-loading="loading"> |
| | | <el-table-column prop="title" label="标题" show-overflow-tooltip align="center" /> |
| | |
| | | /> |
| | | </div> |
| | | </div> |
| | | <edit-modal ref="EditModalRef" @getList="getList" :types="types" /> |
| | | <edit-modal ref="EditModalRef" @getList="getList" :types="types" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import EditModal from "./components/EditModal.vue" |
| | | import { knowledgeBaseList, knowledgeBaseDel,knowledgeBaseInfo } from "@/api/policy/knowledgeBase" |
| | | import EditModal from "./components/EditModal.vue" |
| | | import { knowledgeBaseList, knowledgeBaseDel, knowledgeBaseInfo } from "@/api/policy/knowledgeBase" |
| | | let { proxy } = getCurrentInstance() |
| | | const types = ref([ |
| | | { label: "电", value: 0 }, |
| | | { label: "水", value: 1 }, |
| | | { label: "天然气", value: 2 }, |
| | | { label: "蒸汽", value: 3 }, |
| | | ]); |
| | | ]) |
| | | let loading = ref(false) |
| | | let total = ref(0) |
| | | let tableData = ref([]) |
| | | let queryParams = ref({ |
| | | title: "", |
| | | type:null, |
| | | type: null, |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | }) |
| | |
| | | let EditModalRef = ref("") |
| | | function handleAdd(row) { |
| | | if (EditModalRef.value) { |
| | | if(row.id){ |
| | | if (row.id) { |
| | | knowledgeBaseInfo(row.id).then((res) => { |
| | | EditModalRef.value.handleOpen(res.data) |
| | | }) |
| | | }else{ |
| | | } else { |
| | | EditModalRef.value.handleOpen(row) |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | |
| | | function resetQuery() { |
| | | queryParams.value = { |
| | | title: "", |
| | | type:null, |
| | | type: null, |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | } |
| | |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="选择电表" prop="meterId"> |
| | | <el-select |
| | | v-model="queryParams.meterId" |
| | | placeholder="选择电表" |
| | | clearable |
| | | style="width: 200px" |
| | | @change="handleTimeType" |
| | | > |
| | | <el-select v-model="queryParams.meterId" placeholder="选择电表" clearable style="width: 200px"> |
| | | <el-option |
| | | v-for="dict in electricityMeter" |
| | | :key="dict.value" |
| | |
| | | </div> |
| | | |
| | | <div style="padding: 0 16px"> |
| | | <el-tabs v-model="activeTabKey" type="card"> |
| | | <el-tabs v-model="activeTabKey" type="card" @tab-change="handleTabChange" style="margin-top: 12px"> |
| | | <el-tab-pane label="电压不平衡" name="1"> </el-tab-pane> |
| | | <el-tab-pane label="电流不平衡" name="2"> </el-tab-pane> |
| | | </el-tabs> |
| | |
| | | |
| | | <div class="chart-box" v-loading="loading" v-show="activeKey === 1"> |
| | | <LineChart ref="LineChartRef" :chartData="lineChartData" /> |
| | | <el-table :data="tableData1" v-loading="loading"> |
| | | <el-table :data="tableData1" v-loading="loading" style="padding: 14px"> |
| | | <el-table-column label="类型" prop="type" align="center" /> |
| | | <el-table-column label="三项不平衡极值" prop="value" align="center" /> |
| | | <el-table-column label="发生时间" prop="time" align="center" /> |
| | |
| | | function handleTimeType(e) { |
| | | queryParams.value.timeType = e |
| | | queryParams.value.dataTime = proxy.dayjs(new Date()).format("YYYY-MM-DD") |
| | | getList() |
| | | } |
| | | |
| | | function handleTabChange(e) { |
| | | getList() |
| | | } |
| | | |
| | | function switchBtnType(e) { |
| | |
| | | } |
| | | // 列表 |
| | | function getList() { |
| | | if (!queryParams.value.meterId) { |
| | | // proxy.$message({ |
| | | // message: "请选择节点", |
| | | // type: "warning", |
| | | // }) |
| | | return |
| | | } |
| | | loading.value = true |
| | | let params = { |
| | | nodeId: queryParams.value.nodeId, |