From a2e27e3811d1c0c86653c5ec171994ee94387729 Mon Sep 17 00:00:00 2001 From: guanj Date: Tue, 14 Jul 2026 09:13:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=85=B3=E9=94=AE=E6=8C=87?= =?UTF-8?q?=E6=A0=87=E6=A6=82=E8=A7=88=20=E5=B7=B2=E9=80=89=E6=8C=87?= =?UTF-8?q?=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/api/dictionary.js | 2 + common/js/cacheKey.js | 3 +- pages/index/comp/monitoringPoint.vue | 234 ++++++++++++++++++++------- 3 files changed, 177 insertions(+), 62 deletions(-) diff --git a/common/api/dictionary.js b/common/api/dictionary.js index b735e8e..250a317 100644 --- a/common/api/dictionary.js +++ b/common/api/dictionary.js @@ -23,6 +23,7 @@ export const queryByCode = (code) => { return request({ url: '/system-boot/dictTree/queryByCode', method: 'post', + debounce: false, data: { code, }, @@ -34,6 +35,7 @@ export const queryCsDictTree = (pid) => { return request({ url: '/system-boot/dictTree/query', method: 'post', + debounce: false, data: { pid, }, diff --git a/common/js/cacheKey.js b/common/js/cacheKey.js index 0b1897e..7fcaa83 100644 --- a/common/js/cacheKey.js +++ b/common/js/cacheKey.js @@ -7,5 +7,6 @@ export default { dictData: 'dictData', // 字典数据 messageCount: 'messageCount', // 消息数量 serverConfig: 'serverConfig', // 服务内容配置 - monitorSelectedIndicators: 'monitorSelectedIndicators', // 监测点已选展示指标 + monitorSelectedIndicators: 'monitorSelectedIndicators', // 非治理监测点已选展示指标 + monitorSelectedIndicatorsPqCom: 'monitorSelectedIndicatorsPqCom', // 治理监测点已选展示指标 } diff --git a/pages/index/comp/monitoringPoint.vue b/pages/index/comp/monitoringPoint.vue index 8dfeb0f..ee3aadf 100644 --- a/pages/index/comp/monitoringPoint.vue +++ b/pages/index/comp/monitoringPoint.vue @@ -28,18 +28,38 @@ - - - {{ formatIndicatorTag(tag) }} - + + 治理监测点指标 + + + {{ formatIndicatorTag(tag) }} + + + + +添加指标 + - - +添加指标 + + + 非治理监测点指标 + + + {{ formatIndicatorTag(tag) }} + + + + +添加指标 + @@ -153,26 +173,32 @@ 取消 + {{ indicatorPopupSubtitle }} 确定 - - 暂无指标数据 - - - {{ item.name }} - + + + + 暂无指标数据 + + + {{ item.name }} + + @@ -188,13 +214,15 @@ import { getDevCount } from '@/common/api/device.js' /** 无本地缓存时的默认展示指标:电压、电流 */ const DEFAULT_INDICATOR_CODES = ['Key_Power_Quality_V', 'Key_Power_Quality_I'] -/** 治理测点(lineType=0)卡片默认展示的指标 */ -const GOVERNANCE_DEFAULT_INDICATORS = ['电网电流', '电网电压', '负载电流', '总输出电流'] +/** 治理测点无缓存时的默认展示指标 */ +const GOVERNANCE_DEFAULT_INDICATOR_CODES = ['0', '1'] export default { data() { return { targetLists: [], + targetListsPqCom: [], + indicatorPopupType: 'governance', popupSelectedIndicators: [], engineeringName: '', engineeringId: '', @@ -204,6 +232,7 @@ export default { { label: '监测点总数', value: 0 }, ], selectedIndicators: [], + selectedIndicatorsPqCom: [], phaseColors: [ { name: 'A相', color: '#DAA520' }, { name: 'B相', color: '#2E8B57' }, @@ -219,6 +248,12 @@ export default { } }, computed: { + indicatorPopupSubtitle() { + return this.indicatorPopupType === 'governance' ? '治理监测点指标' : '非治理监测点指标' + }, + currentPopupTargetLists() { + return this.indicatorPopupType === 'governance' ? this.targetListsPqCom : this.targetLists + }, filteredMonitoringPoints() { const keyword = (this.filterKeyword || '').trim().toLowerCase() if (!keyword) return this.monitoringPoints @@ -249,18 +284,21 @@ export default { this.info() } } - if (this.targetLists.length && !skipRefresh) { + if ((this.targetLists.length || this.targetListsPqCom.length) && !skipRefresh) { this.loadSelectedIndicators() } }, // 加载电能质量指标字典 created() { - queryByCode('Key_Power_Quality').then((res) => { - queryCsDictTree(res.data.id).then((resp) => { - this.targetLists = (resp.data || []).slice().reverse() + const loadDictTree = (code) => queryByCode(code).then((res) => queryCsDictTree(res.data.id)) + + Promise.all([loadDictTree('Key_Power_Quality'), loadDictTree('Key_Power_Quality_Pq_Com')]).then( + ([normalResp, pqComResp]) => { + this.targetLists = (normalResp.data || []).slice().reverse() + this.targetListsPqCom = (pqComResp.data || []).slice().reverse() this.loadSelectedIndicators() - }) - }) + }, + ) }, // 下拉刷新 onPullDownRefresh() { @@ -347,7 +385,7 @@ export default { return order.map((key) => map[key]) }, formatPhaseValue(value) { - if (value === null || value === undefined || value === '') return '-' + if (value === null || value === undefined || value === '' || value === 3.14159) return '-' const num = Number(value) if (Number.isNaN(num)) return String(value) return num.toFixed(2) @@ -377,8 +415,13 @@ export default { const selectedBase = (selected || '').replace(/\(.*\)/, '').trim() return base === selectedBase }, - // 从缓存读取已选指标,无缓存时使用默认电压/电流指标 + // 从缓存读取已选指标,无缓存时使用默认指标 loadSelectedIndicators() { + this.loadNormalSelectedIndicators() + this.loadGovernanceSelectedIndicators() + }, + loadNormalSelectedIndicators() { + if (!this.targetLists.length) return const cached = uni.getStorageSync(this.$cacheKey.monitorSelectedIndicators) if (Array.isArray(cached) && cached.length) { const valid = cached.filter((name) => @@ -392,35 +435,68 @@ export default { this.selectedIndicators = this.getDefaultIndicatorsByCode() this.saveSelectedIndicators() }, + loadGovernanceSelectedIndicators() { + if (!this.targetListsPqCom.length) return + const cached = uni.getStorageSync(this.$cacheKey.monitorSelectedIndicatorsPqCom) + if (Array.isArray(cached) && cached.length) { + const valid = cached.filter((name) => + this.targetListsPqCom.some((item) => this.matchIndicator(item.name, name)), + ) + if (valid.length) { + this.selectedIndicatorsPqCom = valid + return + } + } + this.selectedIndicatorsPqCom = this.getDefaultGovernanceIndicators() + this.saveSelectedIndicatorsPqCom() + }, getDefaultIndicatorsByCode() { return this.targetLists .filter((item) => DEFAULT_INDICATOR_CODES.includes(item.code) && item.name) .map((item) => item.name) }, + getDefaultGovernanceIndicators() { + return this.targetListsPqCom + .filter((item) => GOVERNANCE_DEFAULT_INDICATOR_CODES.includes(item.code) && item.name) + .map((item) => item.name) + }, saveSelectedIndicators() { uni.setStorageSync(this.$cacheKey.monitorSelectedIndicators, this.selectedIndicators) }, + saveSelectedIndicatorsPqCom() { + uni.setStorageSync(this.$cacheKey.monitorSelectedIndicatorsPqCom, this.selectedIndicatorsPqCom) + }, // 跳转切换工程 switchEngineering() { uni.navigateTo({ url: '/pages/home/selectEngineering' }) }, // 移除已选指标 - removeIndicator(idx) { - if (this.selectedIndicators.length <= 1) { + removeIndicator(idx, type = 'normal') { + const isGovernance = type === 'governance' + const selected = isGovernance ? this.selectedIndicatorsPqCom : this.selectedIndicators + if (selected.length <= 1) { uni.showToast({ title: '至少保留一个指标', icon: 'none' }) return } - this.selectedIndicators.splice(idx, 1) - this.saveSelectedIndicators() + selected.splice(idx, 1) + if (isGovernance) { + this.saveSelectedIndicatorsPqCom() + } else { + this.saveSelectedIndicators() + } }, // 打开指标选择弹窗 - openIndicatorPopup() { - if (!this.targetLists.length) { + openIndicatorPopup(type = 'governance') { + const isGovernance = type === 'governance' + const targetLists = isGovernance ? this.targetListsPqCom : this.targetLists + const selected = isGovernance ? this.selectedIndicatorsPqCom : this.selectedIndicators + if (!targetLists.length) { uni.showToast({ title: '暂无指标数据', icon: 'none' }) return } - this.popupSelectedIndicators = this.targetLists - .filter((item) => this.selectedIndicators.some((name) => this.matchIndicator(item.name, name))) + this.indicatorPopupType = type + this.popupSelectedIndicators = targetLists + .filter((item) => selected.some((name) => this.matchIndicator(item.name, name))) .map((item) => item.name) this.$refs.indicatorPopup.open() }, @@ -428,6 +504,7 @@ export default { closeIndicatorPopup() { this.$refs.indicatorPopup.close() this.popupSelectedIndicators = [] + this.indicatorPopupType = 'governance' }, onIndicatorPopupChange(e) { this.indicatorPopupShow = !!e.show @@ -447,8 +524,13 @@ export default { uni.showToast({ title: '至少保留一个指标', icon: 'none' }) return } - this.selectedIndicators = [...this.popupSelectedIndicators] - this.saveSelectedIndicators() + if (this.indicatorPopupType === 'governance') { + this.selectedIndicatorsPqCom = [...this.popupSelectedIndicators] + this.saveSelectedIndicatorsPqCom() + } else { + this.selectedIndicators = [...this.popupSelectedIndicators] + this.saveSelectedIndicators() + } this.closeIndicatorPopup() }, // 跳转指标详情页,展示该监测点全部指标 @@ -463,17 +545,13 @@ export default { url: '/pages/index/comp/targetInfo', }) }, - // 治理测点默认 4 项;普通测点按顶部已选指标过滤 + // 按监测点类型取对应已选指标过滤展示 getDisplayChildren(point) { const children = point.children || [] - if (point.lineType === 0) { - return GOVERNANCE_DEFAULT_INDICATORS.map((name) => - children.find((child) => this.matchIndicator(child.name, name)), - ).filter(Boolean) - } - return children.filter((child) => - this.selectedIndicators.some((name) => this.matchIndicator(child.name, name)), - ) + const selected = point.lineType === 0 ? this.selectedIndicatorsPqCom : this.selectedIndicators + return selected + .map((name) => children.find((child) => this.matchIndicator(child.name, name))) + .filter(Boolean) }, // 有指标数据时显示「更多指标」 shouldShowMoreBtn(point) { @@ -639,6 +717,21 @@ export default { padding: 24rpx; } +.indicator-group { + margin-bottom: 20rpx; + + &:last-child { + margin-bottom: 0; + } +} + +.indicator-group-title { + display: block; + margin-bottom: 12rpx; + font-size: 26rpx; + color: #666; +} + .section-title-row { display: flex; align-items: center; @@ -919,6 +1012,14 @@ export default { min-width: 80rpx; } +.indicator-popup-title { + flex: 1; + text-align: center; + font-size: 28rpx; + font-weight: 600; + color: #333333; +} + .indicator-popup-confirm { font-size: 28rpx; color: #376cf3; @@ -928,12 +1029,23 @@ export default { .indicator-popup-list { height: 60vh; - padding: 16rpx 0; + padding: 8rpx 0 16rpx; box-sizing: border-box; } +.indicator-popup-section { + padding-bottom: 8rpx; +} + +.indicator-popup-subtitle { + display: block; + padding: 16rpx 32rpx 8rpx; + font-size: 24rpx; + color: #999999; +} + .indicator-popup-empty { - padding: 80rpx 0; + padding: 40rpx 0; text-align: center; font-size: 28rpx; color: #999999; @@ -943,8 +1055,8 @@ export default { display: flex; align-items: center; justify-content: space-between; - padding: 28rpx 32rpx; - font-size: 28rpx; + padding: 20rpx 32rpx; + font-size: 26rpx; color: #333333; &--active {