Compare commits
15 Commits
2026-06
...
cd2be0f4aa
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cd2be0f4aa | ||
|
|
855c569535 | ||
| 6a84d28101 | |||
|
|
1a69be62a0 | ||
|
|
02caca969e | ||
|
|
3f1af5e4cc | ||
|
|
88e9812d5f | ||
|
|
83a827ba5b | ||
| 40b1092718 | |||
|
|
83a1128884 | ||
| 1a44a2f9e0 | |||
|
|
5044c88946 | ||
|
|
51a862ed00 | ||
|
|
1ca8e536dd | ||
|
|
2445cfbff3 |
8813
package-lock.json
generated
8813
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
211
package.json
211
package.json
@@ -1,107 +1,108 @@
|
|||||||
{
|
{
|
||||||
"name": "canneng-admin",
|
"name": "canneng-admin",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite --mode dev",
|
"dev": "vite --mode dev",
|
||||||
"dev:jibei": "vite --mode jibei",
|
"dev:jibei": "vite --mode jibei",
|
||||||
"dev:hainan": "vite --mode hainan",
|
"dev:hainan": "vite --mode hainan",
|
||||||
"dev:qujing": "vite --mode qujing",
|
"dev:qujing": "vite --mode qujing",
|
||||||
"dev:LN": "vite --mode LN",
|
"dev:LN": "vite --mode LN",
|
||||||
"dev:LNqr": "vite --mode LNqr",
|
"dev:LNqr": "vite --mode LNqr",
|
||||||
"dev:removeMode": "vite --mode removeMode",
|
"dev:removeMode": "vite --mode removeMode",
|
||||||
"build": "vite build --mode dev",
|
"build": "vite build --mode dev",
|
||||||
"build:jibei": "vite build --mode jibei",
|
"build:jibei": "vite build --mode jibei",
|
||||||
"build:hainan": "vite build --mode hainan",
|
"build:hainan": "vite build --mode hainan",
|
||||||
"build:qujing": "vite build --mode qujing",
|
"build:qujing": "vite build --mode qujing",
|
||||||
"build:LN": "vite build --mode LN",
|
"build:LN": "vite build --mode LN",
|
||||||
"build:LNqr": "vite build --mode LNqr",
|
"build:LNqr": "vite build --mode LNqr",
|
||||||
"build:removeMode": "vite build --mode removeMode",
|
"build:removeMode": "vite build --mode removeMode",
|
||||||
"preview": "vite preview"
|
"preview": "vite preview"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ant-design/colors": "^7.0.2",
|
"@ant-design/colors": "^7.0.2",
|
||||||
"@element-plus/icons-vue": "^2.3.1",
|
"@element-plus/icons-vue": "^2.3.1",
|
||||||
"@form-create/designer": "^3.1.3",
|
"@form-create/designer": "^3.1.3",
|
||||||
"@form-create/element-ui": "^3.1.24",
|
"@form-create/element-ui": "^3.1.24",
|
||||||
"@fortawesome/fontawesome-free": "^6.5.1",
|
"@fortawesome/fontawesome-free": "^6.5.1",
|
||||||
"@kjgl77/datav-vue3": "^1.7.4",
|
"@kjgl77/datav-vue3": "^1.7.4",
|
||||||
"@vue-office/docx": "^1.6.3",
|
"@vue-office/docx": "^1.6.3",
|
||||||
"@vue-office/excel": "^1.7.8",
|
"@vue-office/excel": "^1.7.8",
|
||||||
"@vue-office/pdf": "^2.0.2",
|
"@vue-office/pdf": "^2.0.2",
|
||||||
"@vueuse/core": "^10.7.0",
|
"@vueuse/core": "^10.7.0",
|
||||||
"@wangeditor/editor": "^5.1.23",
|
"@wangeditor/editor": "^5.1.23",
|
||||||
"@wangeditor/editor-for-vue": "^5.1.12",
|
"@wangeditor/editor-for-vue": "^5.1.12",
|
||||||
"@wangeditor/plugin-formula": "^1.0.11",
|
"@wangeditor/plugin-formula": "^1.0.11",
|
||||||
"axios": "^1.6.2",
|
"axios": "^1.6.2",
|
||||||
"bpmn-js": "8.9.0",
|
"bpmn-js": "8.9.0",
|
||||||
"bpmn-js-properties-panel": "0.46.0",
|
"bpmn-js-properties-panel": "0.46.0",
|
||||||
"bpmn-js-token-simulation": "^0.10.0",
|
"bpmn-js-token-simulation": "^0.10.0",
|
||||||
"bpmn-moddle": "^6.0.0",
|
"bpmn-moddle": "^6.0.0",
|
||||||
"camunda-bpmn-moddle": "^7.0.1",
|
"camunda-bpmn-moddle": "^7.0.1",
|
||||||
"crypto-js": "^4.2.0",
|
"crypto-js": "^4.2.0",
|
||||||
"dayjs": "^1.11.10",
|
"dayjs": "^1.11.10",
|
||||||
"diagram-js": "^11.4.1",
|
"diagram-js": "^11.4.1",
|
||||||
"diagram-js-minimap": "^2.0.4",
|
"diagram-js-minimap": "^2.0.4",
|
||||||
"echarts": "^5.4.3",
|
"echarts": "^5.4.3",
|
||||||
"echarts-gl": "^2.0.9",
|
"echarts-gl": "^2.0.9",
|
||||||
"echarts-liquidfill": "^3.1.0",
|
"echarts-liquidfill": "^3.1.0",
|
||||||
"echarts4": "npm:echarts@^4.9.0",
|
"echarts4": "npm:echarts@^4.9.0",
|
||||||
"element-plus": "^2.9.11",
|
"element-plus": "^2.9.11",
|
||||||
"exceljs": "^4.4.0",
|
"exceljs": "^4.4.0",
|
||||||
"file-saver": "^2.0.5",
|
"file-saver": "^2.0.5",
|
||||||
"grid-layout-plus": "^1.1.0",
|
"grid-layout-plus": "^1.1.0",
|
||||||
"html2canvas": "^1.4.1",
|
"html2canvas": "^1.4.1",
|
||||||
"jquery": "^3.7.1",
|
"jquery": "^3.7.1",
|
||||||
"js-pinyin": "^0.2.5",
|
"js-pinyin": "^0.2.5",
|
||||||
"jsencrypt": "^3.3.2",
|
"jsencrypt": "^3.3.2",
|
||||||
"katex": "^0.16.11",
|
"katex": "^0.16.11",
|
||||||
"less": "^4.2.0",
|
"less": "^4.2.0",
|
||||||
"lodash-es": "^4.17.21",
|
"lodash-es": "^4.17.21",
|
||||||
"luckyexcel": "^1.0.1",
|
"luckyexcel": "^1.0.1",
|
||||||
"luckysheet": "^2.1.13",
|
"luckysheet": "^2.1.13",
|
||||||
"mathjax": "^3.2.2",
|
"mathjax": "^3.2.2",
|
||||||
"min-dash": "^4.2.1",
|
"min-dash": "^4.2.1",
|
||||||
"mitt": "^3.0.1",
|
"mitt": "^3.0.1",
|
||||||
"mqtt": "^5.13.3",
|
"mqtt": "^5.13.3",
|
||||||
"nprogress": "^0.2.0",
|
"nprogress": "^0.2.0",
|
||||||
"pinia": "^2.1.7",
|
"pinia": "^2.1.7",
|
||||||
"pinia-plugin-persistedstate": "^3.2.1",
|
"pinia-plugin-persistedstate": "^3.2.1",
|
||||||
"qs": "^6.12.0",
|
"qs": "^6.12.0",
|
||||||
"screenfull": "^6.0.2",
|
"screenfull": "^6.0.2",
|
||||||
"splitpanes": "^3.1.5",
|
"splitpanes": "^3.1.5",
|
||||||
"steady-xml": "0.1.0",
|
"steady-xml": "0.1.0",
|
||||||
"svg-pan-zoom": "^3.6.2",
|
"svg-pan-zoom": "^3.6.2",
|
||||||
"use-element-plus-theme": "^0.0.5",
|
"use-element-plus-theme": "^0.0.5",
|
||||||
"vexip-ui": "^2.3.28",
|
"vexip-ui": "^2.3.28",
|
||||||
"vue": "^3.3.11",
|
"vue": "^3.3.11",
|
||||||
"vue-baidu-map-3x": "^1.0.35",
|
"vue-baidu-map-3x": "^1.0.35",
|
||||||
"vue-baidu-map-offline": "^1.0.7",
|
"vue-baidu-map-offline": "^1.0.7",
|
||||||
"vue-demi": "^0.14.8",
|
"vue-demi": "^0.14.8",
|
||||||
"vue-draggable-resizable": "3.0.0-beta.2",
|
"vue-draggable-resizable": "3.0.0-beta.2",
|
||||||
"vue-i18n": "9.10.2",
|
"vue-i18n": "9.10.2",
|
||||||
"vue-katex": "^0.5.0",
|
"vue-katex": "^0.5.0",
|
||||||
"vue-router": "4",
|
"vue-router": "4",
|
||||||
"vue-types": "^5.1.1",
|
"vue-types": "^5.1.1",
|
||||||
"vxe-table": "^4.5.17",
|
"vxe-pc-ui": "~4.15.19",
|
||||||
"vxe-table-plugin-export-xlsx": "^4.0.1",
|
"vxe-table": "^4.19.22",
|
||||||
"web-storage-cache": "^1.1.1",
|
"vxe-table-plugin-export-xlsx": "^4.0.7",
|
||||||
"xe-utils": "^3.5.14",
|
"web-storage-cache": "^1.1.1",
|
||||||
"yarn": "^1.22.22"
|
"xe-utils": "^3.5.14",
|
||||||
},
|
"yarn": "^1.22.22"
|
||||||
"devDependencies": {
|
},
|
||||||
"@purge-icons/generated": "^0.9.0",
|
"devDependencies": {
|
||||||
"@types/lodash-es": "^4.17.12",
|
"@purge-icons/generated": "^0.9.0",
|
||||||
"@types/node": "^20.10.5",
|
"@types/lodash-es": "^4.17.12",
|
||||||
"@types/splitpanes": "^2.2.6",
|
"@types/node": "^20.10.5",
|
||||||
"@vitejs/plugin-vue": "^4.5.2",
|
"@types/splitpanes": "^2.2.6",
|
||||||
"@vitejs/plugin-vue-jsx": "^3.1.0",
|
"@vitejs/plugin-vue": "^4.5.2",
|
||||||
"sass": "^1.69.5",
|
"@vitejs/plugin-vue-jsx": "^3.1.0",
|
||||||
"typescript": "^5.2.2",
|
"sass": "^1.69.5",
|
||||||
"unplugin-auto-import": "^0.16.7",
|
"typescript": "^5.2.2",
|
||||||
"vite": "^5.0.8",
|
"unplugin-auto-import": "^0.16.7",
|
||||||
"vite-plugin-mkcert": "^1.17.3",
|
"vite": "^5.0.8",
|
||||||
"vue-tsc": "^1.8.25"
|
"vite-plugin-mkcert": "^1.17.3",
|
||||||
}
|
"vue-tsc": "^1.8.25"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
|
|
||||||
// 获取区域中断终端
|
// 获取区域中断终端
|
||||||
export function getAreaOffDev(data) {
|
export function getAreaOffDev(data:any) {
|
||||||
return request({
|
return request({
|
||||||
url: '/device-boot/device/getAreaOffDev',
|
url: '/device-boot/device/getAreaOffDev',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
@@ -9,10 +9,28 @@ export function getAreaOffDev(data) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 获取区域中断终端
|
// 获取区域中断终端
|
||||||
export function getYwZtSubstation(data) {
|
export function getYwZtSubstation(data:any) {
|
||||||
return request({
|
return request({
|
||||||
url: '/device-boot/ywZt/getYwZtSubstation',
|
url: '/device-boot/ywZt/getYwZtSubstation',
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
params: data
|
params: data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//终端周期检测
|
||||||
|
export function terminalCheckPage(data:any) {
|
||||||
|
return request({
|
||||||
|
url: '/device-boot/alarm/terminalCheckPage',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export function userCheckUpload(data:any) {
|
||||||
|
return request({
|
||||||
|
url: '/device-boot/userReport/userCheckUpload',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div v-loading="loading" style="position: relative; height: 100%">
|
<div v-loading="loading" style="position: relative; height: 100%">
|
||||||
<div id="boxr">
|
<div id="boxr">
|
||||||
<div id="rmsp" :style="`height:${vh};overflow: hidden;min-height: 200px;`">
|
<div id="rmsp" :style="`height:${vh};overflow: hidden;min-height: 200px;`">
|
||||||
@@ -19,6 +19,8 @@ import url from '@/assets/img/point.png'
|
|||||||
import url2 from '@/assets/img/dw.png'
|
import url2 from '@/assets/img/dw.png'
|
||||||
import { buildWaveCacheKey, getWaveCache, setWaveCache } from '@/utils/waveCache'
|
import { buildWaveCacheKey, getWaveCache, setWaveCache } from '@/utils/waveCache'
|
||||||
import { getRmsWorker, buildWorkerPayload } from '@/utils/waveWorkerPool'
|
import { getRmsWorker, buildWorkerPayload } from '@/utils/waveWorkerPool'
|
||||||
|
import { compactRmsWaveResult } from '@/utils/waveDisplayHelper'
|
||||||
|
import { getWaveRawList } from '@/utils/waveRawStore'
|
||||||
|
|
||||||
let waveRequestId = 0
|
let waveRequestId = 0
|
||||||
const pendingCacheKeys = new Map<number, string>()
|
const pendingCacheKeys = new Map<number, string>()
|
||||||
@@ -98,7 +100,6 @@ const eventValue = ref('')
|
|||||||
const persistTime = ref('')
|
const persistTime = ref('')
|
||||||
const lineName = ref('')
|
const lineName = ref('')
|
||||||
const subName = ref('')
|
const subName = ref('')
|
||||||
const waveDatas = ref<WaveData[]>([])
|
|
||||||
const ptpass = ref('')
|
const ptpass = ref('')
|
||||||
const color = ref('#006565')
|
const color = ref('#006565')
|
||||||
const charts = ref({})
|
const charts = ref({})
|
||||||
@@ -144,19 +145,19 @@ watch(
|
|||||||
)
|
)
|
||||||
|
|
||||||
const applyWorkerResult = (data: any) => {
|
const applyWorkerResult = (data: any) => {
|
||||||
titles.value = data.titles
|
const compacted = compactRmsWaveResult(data, props.value)
|
||||||
waveDatas.value = data.waveDatas
|
titles.value = compacted.titles
|
||||||
time.value = data.time
|
time.value = compacted.time
|
||||||
type.value = data.type
|
type.value = compacted.type
|
||||||
severity.value = data.severity
|
severity.value = compacted.severity
|
||||||
iphasic.value = data.iphasic
|
iphasic.value = compacted.iphasic
|
||||||
|
|
||||||
if (Number(severity.value) < 0) {
|
if (Number(severity.value) < 0) {
|
||||||
severity.value = '/'
|
severity.value = '/'
|
||||||
type.value = '/'
|
type.value = '/'
|
||||||
}
|
}
|
||||||
|
|
||||||
initWave(waveDatas.value, time.value, type.value, severity.value, isOpen.value)
|
initWave(compacted.waveDatas, time.value, type.value, severity.value, isOpen.value)
|
||||||
loading.value = false
|
loading.value = false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -174,7 +175,7 @@ onMounted(() => {
|
|||||||
}
|
}
|
||||||
const cacheKey = pendingCacheKeys.get(data.requestId)
|
const cacheKey = pendingCacheKeys.get(data.requestId)
|
||||||
if (cacheKey) {
|
if (cacheKey) {
|
||||||
setWaveCache(cacheKey, data)
|
setWaveCache(cacheKey, compactRmsWaveResult(data, props.value))
|
||||||
pendingCacheKeys.delete(data.requestId)
|
pendingCacheKeys.delete(data.requestId)
|
||||||
}
|
}
|
||||||
applyWorkerResult(data)
|
applyWorkerResult(data)
|
||||||
@@ -252,7 +253,10 @@ const waveData = (
|
|||||||
}
|
}
|
||||||
|
|
||||||
const initWaves = () => {
|
const initWaves = () => {
|
||||||
if (!props.wp?.listRmsData?.length) {
|
const hasData =
|
||||||
|
props.wp?.listRmsData?.length ||
|
||||||
|
getWaveRawList('rms', props.wp?.waveStoreKey)?.length
|
||||||
|
if (!hasData) {
|
||||||
initWave(null, null, null, null, null)
|
initWave(null, null, null, null, null)
|
||||||
loading.value = false
|
loading.value = false
|
||||||
return
|
return
|
||||||
@@ -715,8 +719,8 @@ const initWave = (
|
|||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'value',
|
type: 'value',
|
||||||
name: '时间\n(ms)',
|
name: '时间\n(ms)',
|
||||||
min: props.wp?.listRmsData[0][0] || 0,
|
min: props.wp?.waveTimeRange?.min ?? props.wp?.listRmsData?.[0]?.[0] ?? 0,
|
||||||
max: props.wp?.listRmsData[props.wp?.listRmsData.length - 1][0] + 1 || 1,
|
max: props.wp?.waveTimeRange?.max ?? ((props.wp?.listRmsData?.[props.wp?.listRmsData?.length - 1]?.[0] ?? 0) + 1),
|
||||||
boundaryGap: false,
|
boundaryGap: false,
|
||||||
title: {
|
title: {
|
||||||
text: 'ms',
|
text: 'ms',
|
||||||
@@ -1047,8 +1051,8 @@ const drawPics = (
|
|||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'value',
|
type: 'value',
|
||||||
name: '时间\n(ms)',
|
name: '时间\n(ms)',
|
||||||
min: props.wp.listRmsData[0][0],
|
min: props.wp?.waveTimeRange?.min ?? props.wp?.listRmsData?.[0]?.[0] ?? 0,
|
||||||
max: props.wp.listRmsData[props.wp.listRmsData.length - 1][0] + 1,
|
max: props.wp?.waveTimeRange?.max ?? ((props.wp?.listRmsData?.[props.wp?.listRmsData?.length - 1]?.[0] ?? 0) + 1),
|
||||||
boundaryGap: false,
|
boundaryGap: false,
|
||||||
title: {
|
title: {
|
||||||
text: 'ms',
|
text: 'ms',
|
||||||
@@ -1210,7 +1214,6 @@ const drawPics = (
|
|||||||
}
|
}
|
||||||
|
|
||||||
const backbxlb = () => {
|
const backbxlb = () => {
|
||||||
waveDatas.value = []
|
|
||||||
const charts = [
|
const charts = [
|
||||||
myChartess.value,
|
myChartess.value,
|
||||||
myChartess1.value,
|
myChartess1.value,
|
||||||
@@ -1261,4 +1264,6 @@ const getMinOpen = (temp: number, tempA: number, tempB: number): number => {
|
|||||||
temp = temp < tempB ? temp : tempB
|
temp = temp < tempB ? temp : tempB
|
||||||
return temp
|
return temp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
defineExpose({ backbxlb })
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ import { calcShuYAxisRange, formatAxisLabel } from '@/utils/chartAxisHelper'
|
|||||||
import url from '@/assets/img/point.png'
|
import url from '@/assets/img/point.png'
|
||||||
import { buildWaveCacheKey, getWaveCache, setWaveCache } from '@/utils/waveCache'
|
import { buildWaveCacheKey, getWaveCache, setWaveCache } from '@/utils/waveCache'
|
||||||
import { getShuWorker, buildWorkerPayload } from '@/utils/waveWorkerPool'
|
import { getShuWorker, buildWorkerPayload } from '@/utils/waveWorkerPool'
|
||||||
|
import { compactShuWaveResult } from '@/utils/waveDisplayHelper'
|
||||||
|
import { getWaveRawList } from '@/utils/waveRawStore'
|
||||||
|
|
||||||
let waveRequestId = 0
|
let waveRequestId = 0
|
||||||
const pendingCacheKeys = new Map<number, string>()
|
const pendingCacheKeys = new Map<number, string>()
|
||||||
@@ -75,7 +77,6 @@ const eventValue = ref('')
|
|||||||
const persistTime = ref('')
|
const persistTime = ref('')
|
||||||
const lineName = ref('')
|
const lineName = ref('')
|
||||||
const subName = ref('')
|
const subName = ref('')
|
||||||
const waveDatas = ref<WaveData[]>([])
|
|
||||||
const ptpass = ref('')
|
const ptpass = ref('')
|
||||||
const waveHeight = ref<number>()
|
const waveHeight = ref<number>()
|
||||||
const rmsHeight = ref<number>()
|
const rmsHeight = ref<number>()
|
||||||
@@ -156,12 +157,13 @@ watch(
|
|||||||
)
|
)
|
||||||
|
|
||||||
const applyWorkerResult = (data: any) => {
|
const applyWorkerResult = (data: any) => {
|
||||||
titles.value = data.titles
|
const compacted = compactShuWaveResult(data, props.value)
|
||||||
iphasic.value = data.iphasic
|
titles.value = compacted.titles
|
||||||
time.value = data.time
|
iphasic.value = compacted.iphasic
|
||||||
type.value = data.type
|
time.value = compacted.time
|
||||||
severity.value = data.severity
|
type.value = compacted.type
|
||||||
initWave(data.waveDatas, data.time, data.type, data.severity, isOpen.value)
|
severity.value = compacted.severity
|
||||||
|
initWave(compacted.waveDatas, compacted.time, compacted.type, compacted.severity, isOpen.value)
|
||||||
loading.value = false
|
loading.value = false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -179,7 +181,7 @@ onMounted(() => {
|
|||||||
}
|
}
|
||||||
const cacheKey = pendingCacheKeys.get(data.requestId)
|
const cacheKey = pendingCacheKeys.get(data.requestId)
|
||||||
if (cacheKey) {
|
if (cacheKey) {
|
||||||
setWaveCache(cacheKey, data)
|
setWaveCache(cacheKey, compactShuWaveResult(data, props.value))
|
||||||
pendingCacheKeys.delete(data.requestId)
|
pendingCacheKeys.delete(data.requestId)
|
||||||
}
|
}
|
||||||
applyWorkerResult(data)
|
applyWorkerResult(data)
|
||||||
@@ -240,7 +242,10 @@ const waveData = (instantF: any, instantS: any, shunshiF: any, shunshiS: any, ti
|
|||||||
|
|
||||||
// 在组件中修改initWaves函数
|
// 在组件中修改initWaves函数
|
||||||
const initWaves = () => {
|
const initWaves = () => {
|
||||||
if (!props.wp?.listWaveData?.length) {
|
const hasData =
|
||||||
|
props.wp?.listWaveData?.length ||
|
||||||
|
getWaveRawList('shu', props.wp?.waveStoreKey)?.length
|
||||||
|
if (!hasData) {
|
||||||
initWave(null, null, null, null, null)
|
initWave(null, null, null, null, null)
|
||||||
loading.value = false
|
loading.value = false
|
||||||
return
|
return
|
||||||
@@ -480,8 +485,8 @@ const initWave = (
|
|||||||
type: 'value',
|
type: 'value',
|
||||||
name: '时间\n(ms)',
|
name: '时间\n(ms)',
|
||||||
boundaryGap: false,
|
boundaryGap: false,
|
||||||
min: props.wp?.listWaveData[0][0] || 0,
|
min: props.wp?.waveTimeRange?.min ?? props.wp?.listWaveData?.[0]?.[0] ?? 0,
|
||||||
max: props.wp?.listWaveData[props.wp?.listWaveData.length - 1][0] + 1 || 1,
|
max: props.wp?.waveTimeRange?.max ?? ((props.wp?.listWaveData?.[props.wp?.listWaveData?.length - 1]?.[0] ?? 0) + 1),
|
||||||
title: {
|
title: {
|
||||||
text: 'ms',
|
text: 'ms',
|
||||||
textStyle: {
|
textStyle: {
|
||||||
@@ -789,8 +794,8 @@ const drawPics = (
|
|||||||
type: 'value',
|
type: 'value',
|
||||||
name: '时间\n(ms)',
|
name: '时间\n(ms)',
|
||||||
boundaryGap: false,
|
boundaryGap: false,
|
||||||
min: props.wp.listWaveData[0][0],
|
min: props.wp?.waveTimeRange?.min ?? props.wp?.listWaveData?.[0]?.[0] ?? 0,
|
||||||
max: props.wp.listWaveData[props.wp.listWaveData.length - 1][0] + 1,
|
max: props.wp?.waveTimeRange?.max ?? ((props.wp?.listWaveData?.[props.wp?.listWaveData?.length - 1]?.[0] ?? 0) + 1),
|
||||||
title: {
|
title: {
|
||||||
text: 'ms',
|
text: 'ms',
|
||||||
textStyle: {
|
textStyle: {
|
||||||
@@ -944,7 +949,6 @@ const drawPics = (
|
|||||||
}
|
}
|
||||||
|
|
||||||
const backbxlb = () => {
|
const backbxlb = () => {
|
||||||
waveDatas.value = []
|
|
||||||
const charts = [
|
const charts = [
|
||||||
myChartess.value,
|
myChartess.value,
|
||||||
myChartess1.value,
|
myChartess1.value,
|
||||||
@@ -996,4 +1000,6 @@ const getMinOpen = (temp: number, tempA: number, tempB: number): number => {
|
|||||||
temp = temp < tempB ? temp : tempB
|
temp = temp < tempB ? temp : tempB
|
||||||
return temp
|
return temp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
defineExpose({ backbxlb })
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -55,10 +55,12 @@
|
|||||||
import shushiboxi from '@/components/echarts/shushiboxi.vue'
|
import shushiboxi from '@/components/echarts/shushiboxi.vue'
|
||||||
import rmsboxi from '@/components/echarts/rmsboxi.vue'
|
import rmsboxi from '@/components/echarts/rmsboxi.vue'
|
||||||
import analytics from '@/components/echarts/analytics.vue'
|
import analytics from '@/components/echarts/analytics.vue'
|
||||||
import { ref, reactive } from 'vue'
|
import { ref, shallowRef } from 'vue'
|
||||||
import { analysis } from '@/api/advance-boot/analyse'
|
import { analysis } from '@/api/advance-boot/analyse'
|
||||||
import { mainHeight } from '@/utils/layout'
|
import { mainHeight } from '@/utils/layout'
|
||||||
import { getMonitorEventAnalyseWave, downloadWaveFile } from '@/api/event-boot/transient'
|
import { getMonitorEventAnalyseWave, downloadWaveFile } from '@/api/event-boot/transient'
|
||||||
|
import { buildWaveStoreKey, registerWaveRaw, buildSlimWp, releaseWaveRaw } from '@/utils/waveRawStore'
|
||||||
|
import { clearWaveCache } from '@/utils/waveCache'
|
||||||
const emit = defineEmits(['backbxlb'])
|
const emit = defineEmits(['backbxlb'])
|
||||||
interface Props {
|
interface Props {
|
||||||
// boxoList: any
|
// boxoList: any
|
||||||
@@ -88,7 +90,7 @@ const shushiboxiRef = ref()
|
|||||||
const bxecharts = ref(mainHeight(145).height as any)
|
const bxecharts = ref(mainHeight(145).height as any)
|
||||||
const view2 = ref(true)
|
const view2 = ref(true)
|
||||||
const boxoList: any = ref(null)
|
const boxoList: any = ref(null)
|
||||||
const wp = ref(null)
|
const wp = shallowRef<any>(null)
|
||||||
const showBoxi = ref(true)
|
const showBoxi = ref(true)
|
||||||
const view3 = ref(false)
|
const view3 = ref(false)
|
||||||
const view4 = ref(false)
|
const view4 = ref(false)
|
||||||
@@ -102,7 +104,9 @@ const open = async (row: any) => {
|
|||||||
if (res != undefined) {
|
if (res != undefined) {
|
||||||
boxoList.value = row
|
boxoList.value = row
|
||||||
boxoList.value.pt = res.data.pt
|
boxoList.value.pt = res.data.pt
|
||||||
wp.value = res.data
|
const storeKey = buildWaveStoreKey(row)
|
||||||
|
registerWaveRaw(storeKey, res.data)
|
||||||
|
wp.value = buildSlimWp(res.data, storeKey)
|
||||||
loading.value = false
|
loading.value = false
|
||||||
view4.value = true
|
view4.value = true
|
||||||
}
|
}
|
||||||
@@ -125,6 +129,9 @@ const bxhandleClick = (tab: any) => {
|
|||||||
// console.log(tab, event);
|
// console.log(tab, event);
|
||||||
}
|
}
|
||||||
const backbxlb = () => {
|
const backbxlb = () => {
|
||||||
|
const storeKey = wp.value?.waveStoreKey
|
||||||
|
releaseWaveRaw(storeKey, 'all')
|
||||||
|
clearWaveCache()
|
||||||
boxoList.value = null
|
boxoList.value = null
|
||||||
wp.value = null
|
wp.value = null
|
||||||
|
|
||||||
@@ -154,8 +161,8 @@ const AdvancedAnalytics = () => {
|
|||||||
view2.value = false
|
view2.value = false
|
||||||
}
|
}
|
||||||
const changeView = () => {
|
const changeView = () => {
|
||||||
if (shushiboxiRef.value) shushiboxiRef.value.backbxlb()
|
shushiboxiRef.value?.backbxlb?.()
|
||||||
if (rmsboxiRef.value) rmsboxiRef.value.backbxlb()
|
rmsboxiRef.value?.backbxlb?.()
|
||||||
showBoxi.value = false
|
showBoxi.value = false
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
showBoxi.value = true
|
showBoxi.value = true
|
||||||
|
|||||||
@@ -37,10 +37,10 @@ interface Props {
|
|||||||
const props = withDefaults(defineProps<Props>(), {
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
nextFlag: false,
|
nextFlag: false,
|
||||||
theCurrentTime: false,
|
theCurrentTime: false,
|
||||||
isStatisticData: 1
|
isStatisticData: 0
|
||||||
})
|
})
|
||||||
|
|
||||||
const isMinuteData = computed(() => Number(props.isStatisticData) === 0)
|
const isMinuteData = computed(() => Number(props.isStatisticData) === 1)
|
||||||
const pickerType = computed(() => (isMinuteData.value ? 'datetimerange' : 'daterange'))
|
const pickerType = computed(() => (isMinuteData.value ? 'datetimerange' : 'daterange'))
|
||||||
const pickerValueFormat = computed(() => (isMinuteData.value ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD'))
|
const pickerValueFormat = computed(() => (isMinuteData.value ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD'))
|
||||||
|
|
||||||
|
|||||||
@@ -9,11 +9,8 @@ export const defaultAttribute: VxeTableProps = {
|
|||||||
columnConfig: { resizable: true },
|
columnConfig: { resizable: true },
|
||||||
rowConfig: { isCurrent: true, isHover: true },
|
rowConfig: { isCurrent: true, isHover: true },
|
||||||
scrollX: { scrollToLeftOnChange: true },
|
scrollX: { scrollToLeftOnChange: true },
|
||||||
scrollY: { scrollToTopOnChange: true, enabled: true },
|
scrollY: { scrollToTopOnChange: true, enabled: true, gt: 100 },
|
||||||
treeConfig: {
|
customConfig: { enabled: true, allowFixed: false, showFooter: false, immediate: true ,mode:'default'},
|
||||||
reserve: true
|
showOverflow: 'tooltip',
|
||||||
},
|
showHeaderOverflow: false
|
||||||
showOverflow: true,
|
|
||||||
showFooter:true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,21 +1,39 @@
|
|||||||
<template>
|
<template>
|
||||||
<div ref="tableHeader" class="cn-table-header">
|
<div ref="tableHeader" class="cn-table-header">
|
||||||
<div class="table-header ba-scroll-style">
|
<div class="table-header ba-scroll-style">
|
||||||
<el-form style="flex: 1; height: 32px; display: flex; flex-wrap: wrap" ref="headerForm" @submit.prevent=""
|
<el-form
|
||||||
@keyup.enter="onComSearch" label-position="left" :inline="true">
|
style="flex: 1; height: 32px; display: flex; flex-wrap: wrap"
|
||||||
<el-form-item v-if="datePicker" style="grid-column: span 2; "
|
ref="headerForm"
|
||||||
:style="{ maxWidth: isStatisticData == 0 ? '750px' : '610px' }">
|
@submit.prevent=""
|
||||||
|
@keyup.enter="onComSearch"
|
||||||
|
label-position="left"
|
||||||
|
:inline="true"
|
||||||
|
>
|
||||||
|
<el-form-item
|
||||||
|
v-if="datePicker"
|
||||||
|
style="grid-column: span 2"
|
||||||
|
:style="{ maxWidth: isStatisticData == 1 ? '750px' : '610px' }"
|
||||||
|
>
|
||||||
<template #label>
|
<template #label>
|
||||||
<el-checkbox v-if="showTimeAll" v-model="timeAll" label="统计时间" />
|
<el-checkbox v-if="showTimeAll" v-model="timeAll" label="统计时间" />
|
||||||
<span v-else>{{ dateLabel }}</span>
|
<span v-else>{{ dateLabel }}</span>
|
||||||
</template>
|
</template>
|
||||||
<DatePicker ref="datePickerRef" v-if="timeAll" :nextFlag="nextFlag" :theCurrentTime="theCurrentTime"
|
<DatePicker
|
||||||
:isStatisticData="isStatisticData"></DatePicker>
|
ref="datePickerRef"
|
||||||
|
v-if="timeAll"
|
||||||
|
:nextFlag="nextFlag"
|
||||||
|
:theCurrentTime="theCurrentTime"
|
||||||
|
:isStatisticData="isStatisticData"
|
||||||
|
></DatePicker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="区域" v-if="area">
|
<el-form-item label="区域" v-if="area">
|
||||||
<Area ref="areaRef" v-model="tableStore.table.params.deptIndex" @change-value="onAreaChange"
|
<Area
|
||||||
style="width: 200px;" />
|
ref="areaRef"
|
||||||
|
v-model="tableStore.table.params.deptIndex"
|
||||||
|
@change-value="onAreaChange"
|
||||||
|
style="width: 200px"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<slot name="select"></slot>
|
<slot name="select"></slot>
|
||||||
</el-form>
|
</el-form>
|
||||||
@@ -24,24 +42,44 @@
|
|||||||
<Icon size="14" name="el-icon-ArrowUp" style="color: #fff" v-if="showSelect" />
|
<Icon size="14" name="el-icon-ArrowUp" style="color: #fff" v-if="showSelect" />
|
||||||
<Icon size="14" name="el-icon-ArrowDown" style="color: #fff" v-else />
|
<Icon size="14" name="el-icon-ArrowDown" style="color: #fff" v-else />
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button @click="onComSearch" v-if="showSearch" :loading="tableStore.table.loading" type="primary"
|
<el-button
|
||||||
:icon="Search">
|
@click="onComSearch"
|
||||||
|
v-if="showSearch"
|
||||||
|
:loading="tableStore.table.loading"
|
||||||
|
type="primary"
|
||||||
|
:icon="Search"
|
||||||
|
>
|
||||||
查询
|
查询
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button @click="onResetForm" v-if="showSearch && showReset" :loading="tableStore.table.loading"
|
<el-button
|
||||||
:icon="RefreshLeft">
|
@click="onResetForm"
|
||||||
|
v-if="showSearch && showReset"
|
||||||
|
:loading="tableStore.table.loading"
|
||||||
|
:icon="RefreshLeft"
|
||||||
|
>
|
||||||
重置
|
重置
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button @click="onExport" v-if="showExport" :loading="tableStore.table.exportLoading" type="primary"
|
<el-button
|
||||||
icon="el-icon-Download">
|
@click="onExport"
|
||||||
|
v-if="showExport"
|
||||||
|
:loading="tableStore.table.exportLoading"
|
||||||
|
type="primary"
|
||||||
|
icon="el-icon-Download"
|
||||||
|
>
|
||||||
导出
|
导出
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
<slot name="operation"></slot>
|
<slot name="operation"></slot>
|
||||||
|
<el-button class="ml10" v-if="showCustomColumn" :icon="Setting" @click="openCustomColumn">列设置</el-button>
|
||||||
</div>
|
</div>
|
||||||
<el-form :style="showSelect && showUnfoldButton ? headerFormSecondStyleOpen : headerFormSecondStyleClose"
|
<el-form
|
||||||
ref="headerFormSecond" @submit.prevent="" @keyup.enter="onComSearch" label-position="left"
|
:style="showSelect && showUnfoldButton ? headerFormSecondStyleOpen : headerFormSecondStyleClose"
|
||||||
:inline="true"></el-form>
|
ref="headerFormSecond"
|
||||||
|
@submit.prevent=""
|
||||||
|
@keyup.enter="onComSearch"
|
||||||
|
label-position="left"
|
||||||
|
:inline="true"
|
||||||
|
></el-form>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -52,8 +90,7 @@ import DatePicker from '@/components/form/datePicker/index.vue'
|
|||||||
import Area from '@/components/form/area/index.vue'
|
import Area from '@/components/form/area/index.vue'
|
||||||
import { mainHeight } from '@/utils/layout'
|
import { mainHeight } from '@/utils/layout'
|
||||||
import { useDictData } from '@/stores/dictData'
|
import { useDictData } from '@/stores/dictData'
|
||||||
import { Search, RefreshLeft } from '@element-plus/icons-vue'
|
import { Search, RefreshLeft, Setting } from '@element-plus/icons-vue'
|
||||||
import { defineProps } from 'vue'
|
|
||||||
const emit = defineEmits(['selectChange', 'areaChange'])
|
const emit = defineEmits(['selectChange', 'areaChange'])
|
||||||
const tableStore = inject('tableStore') as TableStore
|
const tableStore = inject('tableStore') as TableStore
|
||||||
const tableHeader = ref()
|
const tableHeader = ref()
|
||||||
@@ -73,7 +110,8 @@ interface Props {
|
|||||||
showExport?: boolean //导出控制
|
showExport?: boolean //导出控制
|
||||||
showTimeAll?: boolean //控制时间是否显示
|
showTimeAll?: boolean //控制时间是否显示
|
||||||
dateLabel?: string //设置时间名称
|
dateLabel?: string //设置时间名称
|
||||||
isStatisticData?: number | string // 0分钟数据 1统计数据
|
isStatisticData?: number | string // 0统计数据 1分钟数据
|
||||||
|
showCustomColumn?: boolean // 列设置
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<Props>(), {
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
@@ -86,7 +124,8 @@ const props = withDefaults(defineProps<Props>(), {
|
|||||||
showExport: false,
|
showExport: false,
|
||||||
showTimeAll: false,
|
showTimeAll: false,
|
||||||
dateLabel: '统计日期',
|
dateLabel: '统计日期',
|
||||||
isStatisticData: 1
|
isStatisticData: 0,
|
||||||
|
showCustomColumn: false
|
||||||
})
|
})
|
||||||
// 动态计算table高度
|
// 动态计算table高度
|
||||||
const resizeObserver = new ResizeObserver(entries => {
|
const resizeObserver = new ResizeObserver(entries => {
|
||||||
@@ -128,7 +167,13 @@ watch(
|
|||||||
}, 500)
|
}, 500)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
const openCustomColumn = () => {
|
||||||
|
tableStore?.table?.ref?.openCustom?.()
|
||||||
|
}
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
if (props.showCustomColumn && tableStore?.table) {
|
||||||
|
tableStore.table.customColumnInHeader = true
|
||||||
|
}
|
||||||
timeAll.value = props.showTimeAll ? false : true
|
timeAll.value = props.showTimeAll ? false : true
|
||||||
if (props.datePicker && timeAll.value) {
|
if (props.datePicker && timeAll.value) {
|
||||||
tableStore.table.params.searchBeginTime = datePickerRef.value.timeValue[0]
|
tableStore.table.params.searchBeginTime = datePickerRef.value.timeValue[0]
|
||||||
@@ -300,7 +345,7 @@ defineExpose({
|
|||||||
margin-left: 12px;
|
margin-left: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mlr-12+.el-button {
|
.mlr-12 + .el-button {
|
||||||
margin-left: 12px;
|
margin-left: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -335,7 +380,7 @@ defineExpose({
|
|||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-button+.el-button {
|
.el-button + .el-button {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -346,7 +391,6 @@ defineExpose({
|
|||||||
|
|
||||||
html.dark {
|
html.dark {
|
||||||
.table-search-button-group {
|
.table-search-button-group {
|
||||||
|
|
||||||
button:focus,
|
button:focus,
|
||||||
button:active {
|
button:active {
|
||||||
background-color: var(--el-color-info-dark-2);
|
background-color: var(--el-color-info-dark-2);
|
||||||
|
|||||||
@@ -1,16 +1,18 @@
|
|||||||
<template>
|
<template>
|
||||||
<div :style="{ height: typeof props.height === 'string' ? props.height : tableStore.table.height }">
|
<div :style="{ height: typeof props.height === 'string' ? props.height : tableStore.table.height }">
|
||||||
|
<div v-if="showCustomColumn && !tableStore?.table?.customColumnInHeader" class="table-custom-toolbar">
|
||||||
|
<el-button icon="el-icon-Setting" @click="openCustomColumn">列设置</el-button>
|
||||||
|
</div>
|
||||||
<vxe-table
|
<vxe-table
|
||||||
ref="tableRef"
|
ref="tableRef"
|
||||||
height="auto"
|
height="auto"
|
||||||
:key="key"
|
:key="key"
|
||||||
:data="tableStore.table.data"
|
:data="tableStore.table.data"
|
||||||
v-loading="tableStore.table.loading"
|
v-loading="tableStore.table.loading"
|
||||||
v-bind="Object.assign({}, defaultAttribute, $attrs)"
|
v-bind="tableBindProps"
|
||||||
@checkbox-all="selectChangeEvent"
|
@checkbox-all="selectChangeEvent"
|
||||||
@checkbox-change="selectChangeEvent"
|
@checkbox-change="selectChangeEvent"
|
||||||
:showOverflow="showOverflow"
|
@cell-click="onCellClick"
|
||||||
|
|
||||||
>
|
>
|
||||||
<!-- @sort-change="handleSortChange" -->
|
<!-- @sort-change="handleSortChange" -->
|
||||||
<!-- Column 组件内部是 el-table-column -->
|
<!-- Column 组件内部是 el-table-column -->
|
||||||
@@ -62,7 +64,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, nextTick, inject, computed, onMounted, watch } from 'vue'
|
import { ref, nextTick, inject, computed, onMounted, watch, useAttrs } from 'vue'
|
||||||
import type { ElTable } from 'element-plus'
|
import type { ElTable } from 'element-plus'
|
||||||
import { VxeTableEvents, VxeTableInstance } from 'vxe-table'
|
import { VxeTableEvents, VxeTableInstance } from 'vxe-table'
|
||||||
import FieldRender from '@/components/table/fieldRender/index.vue'
|
import FieldRender from '@/components/table/fieldRender/index.vue'
|
||||||
@@ -78,17 +80,32 @@ const tableRef = ref<VxeTableInstance>()
|
|||||||
const tableStore = inject('tableStore') as TableStoreClass
|
const tableStore = inject('tableStore') as TableStoreClass
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const key = ref(0)
|
const key = ref(0)
|
||||||
|
const emit = defineEmits<{
|
||||||
|
(e: 'cell-click', params: any): void
|
||||||
|
}>()
|
||||||
interface Props extends /* @vue-ignore */ Partial<InstanceType<typeof ElTable>> {
|
interface Props extends /* @vue-ignore */ Partial<InstanceType<typeof ElTable>> {
|
||||||
isGroup?: boolean
|
isGroup?: boolean
|
||||||
showOverflow?: boolean
|
showOverflow?: boolean | 'ellipsis' | 'title' | 'tooltip'
|
||||||
height?: string | number
|
height?: string | number
|
||||||
|
showCustomColumn?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<Props>(), {
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
isGroup: false,
|
isGroup: false,
|
||||||
showOverflow: true,
|
showOverflow: 'tooltip',
|
||||||
height: undefined
|
height: undefined,
|
||||||
|
showCustomColumn: false
|
||||||
})
|
})
|
||||||
|
const attrs = useAttrs()
|
||||||
|
const tableBindProps = computed(() => {
|
||||||
|
return Object.assign({}, defaultAttribute, attrs, {
|
||||||
|
showOverflow: props.showOverflow,
|
||||||
|
showHeaderOverflow: false
|
||||||
|
})
|
||||||
|
})
|
||||||
|
const onCellClick: VxeTableEvents.CellClick<any> = params => {
|
||||||
|
emit('cell-click', params)
|
||||||
|
}
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
tableStore.table.ref = tableRef.value as VxeTableInstance
|
tableStore.table.ref = tableRef.value as VxeTableInstance
|
||||||
})
|
})
|
||||||
@@ -118,7 +135,9 @@ const selectChangeEvent: VxeTableEvents.CheckboxChange<any> = ({ checked }) => {
|
|||||||
const records = (tableRef.value as VxeTableInstance).getCheckboxRecords()
|
const records = (tableRef.value as VxeTableInstance).getCheckboxRecords()
|
||||||
tableStore.onTableAction('selection-change', records)
|
tableStore.onTableAction('selection-change', records)
|
||||||
}
|
}
|
||||||
|
const openCustomColumn = () => {
|
||||||
|
tableRef.value?.openCustom?.()
|
||||||
|
}
|
||||||
const getRef = () => {
|
const getRef = () => {
|
||||||
return tableRef.value
|
return tableRef.value
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,167 +3,177 @@
|
|||||||
<el-tabs type="border-card" v-model="activeName" @tab-click="handleClick">
|
<el-tabs type="border-card" v-model="activeName" @tab-click="handleClick">
|
||||||
<el-tab-pane label="监测点详情" name="tab1">
|
<el-tab-pane label="监测点详情" name="tab1">
|
||||||
<el-descriptions :column="3" border label-width="150px">
|
<el-descriptions :column="3" border label-width="150px">
|
||||||
<el-descriptions-item label="项目工程">
|
<el-descriptions-item label="项目工程">
|
||||||
{{ details.areaName }}
|
{{ details.areaName }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="项目单位">
|
<el-descriptions-item label="项目单位">
|
||||||
{{ details.gdName }}
|
{{ details.gdName }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="所属变电站">
|
<el-descriptions-item label="所属变电站">
|
||||||
{{ details.bdName }}
|
{{ details.bdName }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="电压等级">
|
<el-descriptions-item label="监测点名称">
|
||||||
{{ details.scale }}
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="终端厂家">
|
|
||||||
{{ details.manufacturer }}
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="终端名称">
|
|
||||||
{{ details.devName }}
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="网络参数">
|
|
||||||
{{ details.ip }}
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="监测点名称">
|
|
||||||
{{ details.lineName }}
|
{{ details.lineName }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="监测点序号">
|
<el-descriptions-item label="监测点对象名称">
|
||||||
{{ details.id }}
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="通讯状态">
|
|
||||||
{{ details.comFlag }}
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="干扰源类型">
|
|
||||||
{{ details.loadType }}
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="监测点对象名称">
|
|
||||||
{{ details.objName }}
|
{{ details.objName }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="接线方式">
|
<el-descriptions-item label="监测点序号">
|
||||||
|
{{ details.id }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
|
||||||
|
<el-descriptions-item label="终端厂家">
|
||||||
|
{{ details.manufacturer }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="终端名称">
|
||||||
|
{{ details.devName }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="终端型号">
|
||||||
|
{{ typeArr.find(item => item.id == details.devType)?.name }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="电压等级">
|
||||||
|
{{ details.scale }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="网络参数">
|
||||||
|
{{ details.ip }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
|
||||||
|
<el-descriptions-item label="通讯状态">
|
||||||
|
{{ details.comFlag }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
|
||||||
|
<el-descriptions-item label="干扰源类型">
|
||||||
|
{{ details.loadType }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
|
||||||
|
<el-descriptions-item label="接线方式">
|
||||||
{{ details.ptType }}
|
{{ details.ptType }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="PT变比">
|
<el-descriptions-item label="统计间隔(分钟)">
|
||||||
|
{{ details.timeInterval }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="PT变比">
|
||||||
{{ details.pt }}
|
{{ details.pt }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="CT变比">
|
<el-descriptions-item label="CT变比">
|
||||||
{{ details.ct }}
|
{{ details.ct }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="基准容量(MVA)">
|
<el-descriptions-item label="基准容量(MVA)">
|
||||||
{{ details.standardCapacity }}
|
{{ details.standardCapacity }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="最小短路容量(MVA)">
|
<el-descriptions-item label="供电设备容量(MVA)">
|
||||||
{{ details.shortCapacity }}
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="供电设备容量(MVA)">
|
|
||||||
{{ details.devCapacity }}
|
{{ details.devCapacity }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="用户协议容量(MVA)">
|
<el-descriptions-item label="最小短路容量(MW)">
|
||||||
|
{{ details.shortCapacity }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="用户协议容量(MW)">
|
||||||
{{ details.dealCapacity }}
|
{{ details.dealCapacity }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="监测点限值" name="tab2">
|
<el-tab-pane label="监测点限值" name="tab2">
|
||||||
<el-descriptions :column="3" border label-width="250px">
|
<el-descriptions :column="3" border label-width="250px">
|
||||||
<el-descriptions-item label="电压偏差上限值(%)">
|
<el-descriptions-item label="电压偏差上限值(%)">
|
||||||
{{ limitValue.voltageDev }}
|
{{ limitValue.voltageDev }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="电压偏差下限值(%)">
|
<el-descriptions-item label="电压偏差下限值(%)">
|
||||||
{{ limitValue.uvoltageDev }}
|
{{ limitValue.uvoltageDev }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="频率偏差限值(Hz)">
|
<el-descriptions-item label="频率偏差限值(Hz)">
|
||||||
{{ limitValue.freqDev }}
|
{{ limitValue.freqDev }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="三相电压不平衡度限值(%)">
|
<el-descriptions-item label="三相电压不平衡度限值(%)">
|
||||||
{{ limitValue.ubalance }}
|
{{ limitValue.ubalance }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="负序电流限值(A)">
|
<el-descriptions-item label="负序电流限值(A)">
|
||||||
{{ limitValue.ineg }}
|
{{ limitValue.ineg }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="长时闪变限值(%)">
|
<el-descriptions-item label="长时闪变限值(%)">
|
||||||
{{ limitValue.flicker }}
|
{{ limitValue.flicker }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="电压总畸变率限值(%)">
|
<el-descriptions-item label="电压总畸变率限值(%)">
|
||||||
{{ limitValue.uaberrance }}
|
{{ limitValue.uaberrance }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="奇次谐波电压含有率限值(%)">
|
<el-descriptions-item label="奇次谐波电压含有率限值(%)">
|
||||||
{{ limitValue.oddHarm }}
|
{{ limitValue.oddHarm }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="偶次谐波电压含有率限值(%)">
|
<el-descriptions-item label="偶次谐波电压含有率限值(%)">
|
||||||
{{ limitValue.evenHarm }}
|
{{ limitValue.evenHarm }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="3次谐波电流幅值限值(A)">
|
<el-descriptions-item label="3次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm3 }}
|
{{ limitValue.iharm3 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="4次谐波电流幅值限值(A)">
|
<el-descriptions-item label="4次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm4 }}
|
{{ limitValue.iharm4 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="5次谐波电流幅值限值(A)">
|
<el-descriptions-item label="5次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm5 }}
|
{{ limitValue.iharm5 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="6次谐波电流幅值限值(A)">
|
<el-descriptions-item label="6次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm6 }}
|
{{ limitValue.iharm6 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="7次谐波电流幅值限值(A)">
|
<el-descriptions-item label="7次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm7 }}
|
{{ limitValue.iharm7 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="8次谐波电流幅值限值(A)">
|
<el-descriptions-item label="8次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm8 }}
|
{{ limitValue.iharm8 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="9次谐波电流幅值限值(A)">
|
<el-descriptions-item label="9次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm9 }}
|
{{ limitValue.iharm9 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="10次谐波电流幅值限值(A)">
|
<el-descriptions-item label="10次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm10 }}
|
{{ limitValue.iharm10 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="11次谐波电流幅值限值(A)">
|
<el-descriptions-item label="11次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm11 }}
|
{{ limitValue.iharm11 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="12次谐波电流幅值限值(A)">
|
<el-descriptions-item label="12次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm12 }}
|
{{ limitValue.iharm12 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="13次谐波电流幅值限值(A)">
|
<el-descriptions-item label="13次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm13 }}
|
{{ limitValue.iharm13 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="14次谐波电流幅值限值(A)">
|
<el-descriptions-item label="14次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm14 }}
|
{{ limitValue.iharm14 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="15次谐波电流幅值限值(A)">
|
<el-descriptions-item label="15次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm15 }}
|
{{ limitValue.iharm15 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="16次谐波电流幅值限值(A)">
|
<el-descriptions-item label="16次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm16 }}
|
{{ limitValue.iharm16 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="17次谐波电流幅值限值(A)">
|
<el-descriptions-item label="17次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm17 }}
|
{{ limitValue.iharm17 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="18次谐波电流幅值限值(A)">
|
<el-descriptions-item label="18次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm18 }}
|
{{ limitValue.iharm18 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="19次谐波电流幅值限值(A)">
|
<el-descriptions-item label="19次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm19 }}
|
{{ limitValue.iharm19 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="20次谐波电流幅值限值(A)">
|
<el-descriptions-item label="20次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm20 }}
|
{{ limitValue.iharm20 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="21次谐波电流幅值限值(A)">
|
<el-descriptions-item label="21次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm21 }}
|
{{ limitValue.iharm21 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="22次谐波电流幅值限值(A)">
|
<el-descriptions-item label="22次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm22 }}
|
{{ limitValue.iharm22 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="23次谐波电流幅值限值(A)">
|
<el-descriptions-item label="23次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm23 }}
|
{{ limitValue.iharm23 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="24次谐波电流幅值限值(A)">
|
<el-descriptions-item label="24次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm24 }}
|
{{ limitValue.iharm24 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="25次谐波电流幅值限值(A)">
|
<el-descriptions-item label="25次谐波电流幅值限值(A)">
|
||||||
{{ limitValue.iharm25 }}
|
{{ limitValue.iharm25 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="0.5-1.5次间谐波电压含有率限值(%)">
|
<el-descriptions-item label="0.5-1.5次间谐波电压含有率限值(%)">
|
||||||
{{ limitValue.inUharm }}
|
{{ limitValue.inUharm }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="2.5-15.5次谐波电压含有率限值(%)">
|
<el-descriptions-item label="2.5-15.5次谐波电压含有率限值(%)">
|
||||||
{{ limitValue.inUharm16 }}
|
{{ limitValue.inUharm16 }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
@@ -174,11 +184,14 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, inject } from 'vue'
|
import { ref, inject } from 'vue'
|
||||||
import { getLineOverLimitData, getLineDetailData } from '@/api/device-boot/line'
|
import { getLineOverLimitData, getLineDetailData } from '@/api/device-boot/line'
|
||||||
|
import { useDictData } from '@/stores/dictData'
|
||||||
const dialogVisible = ref(false)
|
const dialogVisible = ref(false)
|
||||||
const title = ref('')
|
const title = ref('')
|
||||||
const activeName = ref('tab1')
|
const activeName = ref('tab1')
|
||||||
const details: any = ref([])
|
const details: any = ref([])
|
||||||
|
const dictData = useDictData()
|
||||||
const limitValue: any = ref([])
|
const limitValue: any = ref([])
|
||||||
|
const typeArr = dictData.getBasicData('Dev_Type')
|
||||||
const open = (data: any) => {
|
const open = (data: any) => {
|
||||||
details.value = []
|
details.value = []
|
||||||
limitValue.value = []
|
limitValue.value = []
|
||||||
@@ -187,7 +200,7 @@ const open = (data: any) => {
|
|||||||
|
|
||||||
getLineDetailData(data.id).then(res => {
|
getLineDetailData(data.id).then(res => {
|
||||||
details.value = res.data
|
details.value = res.data
|
||||||
|
res.data.objName ? (title.value = res.data.objName + '_' + title.value) : ''
|
||||||
})
|
})
|
||||||
getLineOverLimitData(data.id).then(res => {
|
getLineOverLimitData(data.id).then(res => {
|
||||||
limitValue.value = res.data
|
limitValue.value = res.data
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ import { logout } from '@/api/user-boot/user'
|
|||||||
import Config from './config.vue'
|
import Config from './config.vue'
|
||||||
import PopupPwd from './popup/password.vue'
|
import PopupPwd from './popup/password.vue'
|
||||||
import AdminInfo from './popup/adminInfo.vue'
|
import AdminInfo from './popup/adminInfo.vue'
|
||||||
|
import globalPopUp from './globalPopUp.vue'
|
||||||
const { replace } = useRouter()
|
const { replace } = useRouter()
|
||||||
// 环境标识
|
// 环境标识
|
||||||
const IS_LNQR = import.meta.env.VITE_NAME === 'LNqr'
|
const IS_LNQR = import.meta.env.VITE_NAME === 'LNqr'
|
||||||
@@ -91,9 +92,9 @@ const handleLogout = async () => {
|
|||||||
try {
|
try {
|
||||||
// 1. 调用后端登出接口
|
// 1. 调用后端登出接口
|
||||||
await logout()
|
await logout()
|
||||||
console.log('✅ 后端登出成功')
|
// console.log('✅ 后端登出成功')
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('❌ 登出接口异常', err)
|
// console.error('❌ 登出接口异常', err)
|
||||||
} finally {
|
} finally {
|
||||||
// 2. 清理本地所有数据
|
// 2. 清理本地所有数据
|
||||||
clearLocalData()
|
clearLocalData()
|
||||||
|
|||||||
@@ -4,8 +4,10 @@ import router from './router'
|
|||||||
import pinia from '@/stores/index'
|
import pinia from '@/stores/index'
|
||||||
import { registerIcons } from '@/utils/common'
|
import { registerIcons } from '@/utils/common'
|
||||||
import mitt from 'mitt'
|
import mitt from 'mitt'
|
||||||
|
import VxeUI from 'vxe-pc-ui'
|
||||||
import VXETable from 'vxe-table'
|
import VXETable from 'vxe-table'
|
||||||
import XEUtils from 'xe-utils'
|
import XEUtils from 'xe-utils'
|
||||||
|
import 'vxe-pc-ui/lib/style.css'
|
||||||
import 'vxe-table/lib/style.css'
|
import 'vxe-table/lib/style.css'
|
||||||
import ElementPlus from 'element-plus'
|
import ElementPlus from 'element-plus'
|
||||||
import 'element-plus/dist/index.css'
|
import 'element-plus/dist/index.css'
|
||||||
@@ -61,6 +63,7 @@ const setupAll = async () => {
|
|||||||
await setupI18n(app)
|
await setupI18n(app)
|
||||||
app.use(router)
|
app.use(router)
|
||||||
app.use(pinia)
|
app.use(pinia)
|
||||||
|
app.use(VxeUI)
|
||||||
app.use(ElementPlus)
|
app.use(ElementPlus)
|
||||||
app.use(VXETable)
|
app.use(VXETable)
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,4 @@
|
|||||||
import type { App } from 'vue'
|
import type { App } from 'vue'
|
||||||
// 👇使用 form-create 需额外全局引入 element plus 组件
|
|
||||||
import {
|
|
||||||
ElAlert,
|
|
||||||
ElAside,
|
|
||||||
ElContainer,
|
|
||||||
ElDivider,
|
|
||||||
ElHeader,
|
|
||||||
ElMain,
|
|
||||||
ElPopconfirm,
|
|
||||||
ElTable,
|
|
||||||
ElTableColumn,
|
|
||||||
ElTabPane,
|
|
||||||
ElTabs,
|
|
||||||
ElTransfer
|
|
||||||
} from 'element-plus'
|
|
||||||
import FcDesigner from '@form-create/designer'
|
import FcDesigner from '@form-create/designer'
|
||||||
import formCreate from '@form-create/element-ui'
|
import formCreate from '@form-create/element-ui'
|
||||||
import install from '@form-create/element-ui/auto-import'
|
import install from '@form-create/element-ui/auto-import'
|
||||||
@@ -23,31 +8,13 @@ import { DictSelect } from '@/components/DictSelect'
|
|||||||
import UserSelect from '@/views/system/auth/userList/UserSelect.vue'
|
import UserSelect from '@/views/system/auth/userList/UserSelect.vue'
|
||||||
import { Editor } from '@/components/Editor'
|
import { Editor } from '@/components/Editor'
|
||||||
|
|
||||||
const components = [
|
// Element Plus 已在 main.ts 通过 app.use(ElementPlus) 全局注册,此处仅注册 form-create 自定义组件
|
||||||
ElAside,
|
const components = [UploadImg, UploadImgs, UploadFile, DictSelect, UserSelect, Editor]
|
||||||
ElPopconfirm,
|
|
||||||
ElHeader,
|
|
||||||
ElMain,
|
|
||||||
ElContainer,
|
|
||||||
ElDivider,
|
|
||||||
ElTransfer,
|
|
||||||
ElAlert,
|
|
||||||
ElTabs,
|
|
||||||
ElTable,
|
|
||||||
ElTableColumn,
|
|
||||||
ElTabPane,
|
|
||||||
UploadImg,
|
|
||||||
UploadImgs,
|
|
||||||
UploadFile,
|
|
||||||
DictSelect,
|
|
||||||
UserSelect,
|
|
||||||
Editor
|
|
||||||
]
|
|
||||||
|
|
||||||
// 参考 http://www.form-create.com/v3/element-ui/auto-import.html 文档
|
// 参考 http://www.form-create.com/v3/element-ui/auto-import.html 文档
|
||||||
export const setupFormCreate = (app: App<Element>) => {
|
export const setupFormCreate = (app: App<Element>) => {
|
||||||
components.forEach((component) => {
|
components.forEach((component) => {
|
||||||
app.component(component.name, component)
|
app.component(component.name!, component)
|
||||||
})
|
})
|
||||||
formCreate.use(install)
|
formCreate.use(install)
|
||||||
app.use(formCreate)
|
app.use(formCreate)
|
||||||
|
|||||||
@@ -31,6 +31,8 @@ $border-color: map.merge(
|
|||||||
@include set-component-css-var('border-color', $border-color);
|
@include set-component-css-var('border-color', $border-color);
|
||||||
--vxe-ui-table-row-current-background-color: var(--el-color-primary-light-8);
|
--vxe-ui-table-row-current-background-color: var(--el-color-primary-light-8);
|
||||||
--vxe-ui-table-row-hover-current-background-color: var(--el-color-primary-light-8);
|
--vxe-ui-table-row-hover-current-background-color: var(--el-color-primary-light-8);
|
||||||
|
--vxe-ui-font-primary-color: var(--el-color-primary);
|
||||||
|
--vxe-ui-font-primary-lighten-color: var(--el-color-primary);
|
||||||
// --vxe-table-row-current-background-color: var(--el-color-primary-light-7);
|
// --vxe-table-row-current-background-color: var(--el-color-primary-light-7);
|
||||||
// --vxe-table-row-hover-background-color: var(--el-color-primary-light-9);
|
// --vxe-table-row-hover-background-color: var(--el-color-primary-light-9);
|
||||||
// --vxe-table-row-hover-current-background-color: var(--el-color-primary-light-7);
|
// --vxe-table-row-hover-current-background-color: var(--el-color-primary-light-7);
|
||||||
|
|||||||
@@ -70,7 +70,8 @@
|
|||||||
// .vxe-table--render-default .is--disabled.vxe-cell--checkbox .vxe-checkbox--icon{
|
// .vxe-table--render-default .is--disabled.vxe-cell--checkbox .vxe-checkbox--icon{
|
||||||
// color: #fff0;
|
// color: #fff0;
|
||||||
// }
|
// }
|
||||||
.vxe-table--tooltip-wrapper {
|
.vxe-table--tooltip-wrapper,
|
||||||
|
.vxe-tooltip--wrapper {
|
||||||
z-index: 10000 !important;
|
z-index: 10000 !important;
|
||||||
}
|
}
|
||||||
.is--disabled {
|
.is--disabled {
|
||||||
@@ -98,3 +99,8 @@
|
|||||||
background-color: #000 !important;
|
background-color: #000 !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.vxe-table-custom--panel-list > li {
|
||||||
|
max-width: 28em;
|
||||||
|
min-width: 15em;
|
||||||
|
padding: 0.3em 1em 0.2em 1em;
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
<div class='default-main'>
|
<div class='default-main'>
|
||||||
<!-- 表头 -->
|
<!-- 表头 -->
|
||||||
<!-- date-picker 时间组件 area区域组件-->
|
<!-- date-picker 时间组件 area区域组件-->
|
||||||
<TableHeader date-picker area>
|
<TableHeader date-picker area showCustomColumn>
|
||||||
<template v-slot:select>
|
<template v-slot:select>
|
||||||
<el-form-item label='关键词:'>
|
<el-form-item label='关键词:'>
|
||||||
<el-input
|
<el-input
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { downloadFile } from '@/api/system-boot/file'
|
import { downloadFile } from '@/api/system-boot/file'
|
||||||
|
import { ElMessage } from 'element-plus'
|
||||||
|
|
||||||
const sanitizeUrl = (url: string): string => {
|
const sanitizeUrl = (url: string): string => {
|
||||||
return url.replace(/\[/g, '(').replace(/\]/g, ')')
|
return url.replace(/\[/g, '(').replace(/\]/g, ')')
|
||||||
@@ -7,7 +8,7 @@ const sanitizeUrl = (url: string): string => {
|
|||||||
// 下载文件
|
// 下载文件
|
||||||
export const download = (urls: string) => {
|
export const download = (urls: string) => {
|
||||||
//console.log('下载', urls)
|
//console.log('下载', urls)
|
||||||
|
ElMessage.info('下载中...')
|
||||||
downloadFile({ filePath: urls })
|
downloadFile({ filePath: urls })
|
||||||
.then((res: any) => {
|
.then((res: any) => {
|
||||||
// 1. 确定文件MIME类型(优化:用更简洁的方式)
|
// 1. 确定文件MIME类型(优化:用更简洁的方式)
|
||||||
@@ -43,8 +44,12 @@ export const download = (urls: string) => {
|
|||||||
// 4. 清理资源(优化)
|
// 4. 清理资源(优化)
|
||||||
link.remove()
|
link.remove()
|
||||||
window.URL.revokeObjectURL(url) // 释放blob URL
|
window.URL.revokeObjectURL(url) // 释放blob URL
|
||||||
|
setTimeout(() => {
|
||||||
|
ElMessage.success('下载成功')
|
||||||
|
}, 1000)
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
|
ElMessage.warning('下载失败:', err)
|
||||||
console.error('下载失败:', err)
|
console.error('下载失败:', err)
|
||||||
// 可添加错误提示(如Toast)
|
// 可添加错误提示(如Toast)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ function createAxios<Data = any, T = ApiPromise<Data>>(
|
|||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
// refresh_token + CAS 都过期 → 重新走CAS登录
|
// refresh_token + CAS 都过期 → 重新走CAS登录
|
||||||
window.location.href = '/api/pqs-auth/oauth/lnCheck'
|
//window.location.href = '/api/pqs-auth/oauth/lnCheck'
|
||||||
return Promise.reject(err)
|
return Promise.reject(err)
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
@@ -215,10 +215,14 @@ function createAxios<Data = any, T = ApiPromise<Data>>(
|
|||||||
return Promise.reject(response.data)
|
return Promise.reject(response.data)
|
||||||
} else if (response.data.code == 'A0121') {
|
} else if (response.data.code == 'A0121') {
|
||||||
//统一认证过期
|
//统一认证过期
|
||||||
const casLogoutUrl =
|
//const casLogoutUrl = 'http://privilege-epri.dcloud.ln.dc.sgcc.com.cn/cas/login?service=http://PQMonitoring.dcloud.ln.dc.sgcc.com.cn'
|
||||||
'http://privilege-epri.dcloud.ln.dc.sgcc.com.cn/cas/login?service=http://PQMonitoring.dcloud.ln.dc.sgcc.com.cn'
|
// 1. 清空本地失效token、用户信息
|
||||||
window.location.href = casLogoutUrl
|
adminInfo.removeToken()
|
||||||
|
adminInfo.reset()
|
||||||
|
// 2. 跳转统一鉴权中转接口
|
||||||
|
const authCheckUrl = '/api/pqs-auth/oauth/lnCheck'
|
||||||
|
window.location.href = authCheckUrl
|
||||||
|
// 中断请求
|
||||||
return Promise.reject(response.data)
|
return Promise.reject(response.data)
|
||||||
} else {
|
} else {
|
||||||
if (options.showCodeMessage) {
|
if (options.showCodeMessage) {
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import { compact, isEmpty, reverse } from 'lodash-es'
|
|||||||
import { getRouteMenu, dictDataCache } from '@/api/auth'
|
import { getRouteMenu, dictDataCache } from '@/api/auth'
|
||||||
import { isAdminApp } from '@/utils/common'
|
import { isAdminApp } from '@/utils/common'
|
||||||
import { adminBaseRoutePath } from '@/router/static'
|
import { adminBaseRoutePath } from '@/router/static'
|
||||||
const route:any = useRouter()
|
|
||||||
/**
|
/**
|
||||||
* 导航失败有错误消息的路由push
|
* 导航失败有错误消息的路由push
|
||||||
* @param to — 导航位置,同 router.push
|
* @param to — 导航位置,同 router.push
|
||||||
@@ -319,8 +318,9 @@ export const getMenu = () => {
|
|||||||
}
|
}
|
||||||
handlerMenu(res.data)
|
handlerMenu(res.data)
|
||||||
handleAdminRoute(res.data)
|
handleAdminRoute(res.data)
|
||||||
if (route?.params.to) {
|
const currentRoute = router.currentRoute.value
|
||||||
const lastRoute = JSON.parse(route.params.to as string)
|
if (currentRoute?.params.to) {
|
||||||
|
const lastRoute = JSON.parse(currentRoute.params.to as string)
|
||||||
if (lastRoute.path != adminBaseRoutePath) {
|
if (lastRoute.path != adminBaseRoutePath) {
|
||||||
let query = !isEmpty(lastRoute.query) ? lastRoute.query : {}
|
let query = !isEmpty(lastRoute.query) ? lastRoute.query : {}
|
||||||
routePush({ path: lastRoute.path, query: query })
|
routePush({ path: lastRoute.path, query: query })
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ export default class TableStore {
|
|||||||
filename: null,
|
filename: null,
|
||||||
loading: true,
|
loading: true,
|
||||||
exportLoading: false,
|
exportLoading: false,
|
||||||
|
customColumnInHeader: false,
|
||||||
column: [],
|
column: [],
|
||||||
loadCallback: null,
|
loadCallback: null,
|
||||||
exportProcessingData: null,
|
exportProcessingData: null,
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
const MAX_CACHE_SIZE = 30
|
import { getWaveRawList } from './waveRawStore'
|
||||||
|
|
||||||
|
const MAX_CACHE_SIZE = 6
|
||||||
|
|
||||||
const cache = new Map<string, unknown>()
|
const cache = new Map<string, unknown>()
|
||||||
|
|
||||||
@@ -17,8 +19,10 @@ export function buildWaveCacheKey(
|
|||||||
boxoList: Record<string, any>
|
boxoList: Record<string, any>
|
||||||
): string {
|
): string {
|
||||||
if (!wp) return ''
|
if (!wp) return ''
|
||||||
const waveFp =
|
const rawList = wp.waveStoreKey
|
||||||
type === 'shu' ? dataFingerprint(wp.listWaveData) : dataFingerprint(wp.listRmsData)
|
? getWaveRawList(type, wp.waveStoreKey)
|
||||||
|
: ((type === 'shu' ? wp.listWaveData : wp.listRmsData) as unknown[][] | undefined)
|
||||||
|
const waveFp = dataFingerprint(rawList)
|
||||||
const boxoFp = boxoList?.startTime ?? boxoList?.lineName ?? boxoList?.equipmentName ?? ''
|
const boxoFp = boxoList?.startTime ?? boxoList?.lineName ?? boxoList?.equipmentName ?? ''
|
||||||
return `${type}|${wp.time}|${wp.waveType}|${wp.iphasic}|${value}|${isOpen}|${waveFp}|${boxoFp}`
|
return `${type}|${wp.time}|${wp.waveType}|${wp.iphasic}|${value}|${isOpen}|${waveFp}|${boxoFp}`
|
||||||
}
|
}
|
||||||
@@ -40,3 +44,7 @@ export function setWaveCache(key: string, value: unknown): void {
|
|||||||
if (oldest !== undefined) cache.delete(oldest)
|
if (oldest !== undefined) cache.delete(oldest)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function clearWaveCache(): void {
|
||||||
|
cache.clear()
|
||||||
|
}
|
||||||
|
|||||||
59
src/utils/waveDisplayHelper.ts
Normal file
59
src/utils/waveDisplayHelper.ts
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
const EMPTY_SERIES: number[][] = []
|
||||||
|
|
||||||
|
function ds(data: number[][] | undefined): number[][] {
|
||||||
|
if (!data?.length) return EMPTY_SERIES
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Worker 完整计算后,剔除当前未使用的值类型,降低内存占用 */
|
||||||
|
export function compactShuWaveResult(data: any, value: number) {
|
||||||
|
const waveDatas = data.waveDatas.map((wd: any) => {
|
||||||
|
if (value === 1) {
|
||||||
|
return {
|
||||||
|
...wd,
|
||||||
|
shunshiF: {
|
||||||
|
shunshiFA: ds(wd.shunshiF.shunshiFA),
|
||||||
|
shunshiFB: ds(wd.shunshiF.shunshiFB),
|
||||||
|
shunshiFC: ds(wd.shunshiF.shunshiFC)
|
||||||
|
},
|
||||||
|
shunshiS: { shunshiSA: EMPTY_SERIES, shunshiSB: EMPTY_SERIES, shunshiSC: EMPTY_SERIES }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
...wd,
|
||||||
|
shunshiF: { shunshiFA: EMPTY_SERIES, shunshiFB: EMPTY_SERIES, shunshiFC: EMPTY_SERIES },
|
||||||
|
shunshiS: {
|
||||||
|
shunshiSA: ds(wd.shunshiS.shunshiSA),
|
||||||
|
shunshiSB: ds(wd.shunshiS.shunshiSB),
|
||||||
|
shunshiSC: ds(wd.shunshiS.shunshiSC)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return { ...data, waveDatas }
|
||||||
|
}
|
||||||
|
|
||||||
|
export function compactRmsWaveResult(data: any, value: number) {
|
||||||
|
const waveDatas = data.waveDatas.map((wd: any) => {
|
||||||
|
if (value === 1) {
|
||||||
|
return {
|
||||||
|
...wd,
|
||||||
|
RMSFWave: {
|
||||||
|
rmsFA: ds(wd.RMSFWave.rmsFA),
|
||||||
|
rmsFB: ds(wd.RMSFWave.rmsFB),
|
||||||
|
rmsFC: ds(wd.RMSFWave.rmsFC)
|
||||||
|
},
|
||||||
|
RMSSWave: { rmsSA: EMPTY_SERIES, rmsSB: EMPTY_SERIES, rmsSC: EMPTY_SERIES }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
...wd,
|
||||||
|
RMSFWave: { rmsFA: EMPTY_SERIES, rmsFB: EMPTY_SERIES, rmsFC: EMPTY_SERIES },
|
||||||
|
RMSSWave: {
|
||||||
|
rmsSA: ds(wd.RMSSWave.rmsSA),
|
||||||
|
rmsSB: ds(wd.RMSSWave.rmsSB),
|
||||||
|
rmsSC: ds(wd.RMSSWave.rmsSC)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return { ...data, waveDatas }
|
||||||
|
}
|
||||||
75
src/utils/waveRawStore.ts
Normal file
75
src/utils/waveRawStore.ts
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
/** 原始波形数据存放于 Vue 响应式体系之外,避免大数组触发深度代理与重复持有 */
|
||||||
|
|
||||||
|
interface WaveRawEntry {
|
||||||
|
listWaveData?: unknown[][]
|
||||||
|
listRmsData?: unknown[][]
|
||||||
|
waveTimeRange?: { min: number; max: number }
|
||||||
|
}
|
||||||
|
|
||||||
|
const rawStore = new Map<string, WaveRawEntry>()
|
||||||
|
|
||||||
|
function calcTimeRange(data: unknown[][] | undefined): { min: number; max: number } | undefined {
|
||||||
|
if (!data?.length) return undefined
|
||||||
|
const first = data[0] as number[]
|
||||||
|
const last = data[data.length - 1] as number[]
|
||||||
|
return { min: first[0], max: last[0] + 1 }
|
||||||
|
}
|
||||||
|
|
||||||
|
export function buildWaveStoreKey(boxoList: Record<string, any>): string {
|
||||||
|
const id = boxoList?.eventId ?? boxoList?.id ?? ''
|
||||||
|
return `${id}|${boxoList?.startTime ?? ''}`
|
||||||
|
}
|
||||||
|
|
||||||
|
export function registerWaveRaw(storeKey: string, wp: Record<string, any>): void {
|
||||||
|
if (!storeKey || !wp) return
|
||||||
|
const entry: WaveRawEntry = rawStore.get(storeKey) ?? {}
|
||||||
|
|
||||||
|
if (wp.listWaveData?.length) {
|
||||||
|
entry.listWaveData = wp.listWaveData
|
||||||
|
entry.waveTimeRange = calcTimeRange(wp.listWaveData) ?? entry.waveTimeRange
|
||||||
|
}
|
||||||
|
if (wp.listRmsData?.length) {
|
||||||
|
entry.listRmsData = wp.listRmsData
|
||||||
|
entry.waveTimeRange = calcTimeRange(wp.listRmsData) ?? entry.waveTimeRange
|
||||||
|
}
|
||||||
|
|
||||||
|
rawStore.set(storeKey, entry)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getWaveRawList(type: 'shu' | 'rms', storeKey: string | undefined): unknown[][] | undefined {
|
||||||
|
if (!storeKey) return undefined
|
||||||
|
const entry = rawStore.get(storeKey)
|
||||||
|
return type === 'shu' ? entry?.listWaveData : entry?.listRmsData
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getWaveTimeRange(storeKey: string | undefined): { min: number; max: number } | undefined {
|
||||||
|
if (!storeKey) return undefined
|
||||||
|
return rawStore.get(storeKey)?.waveTimeRange
|
||||||
|
}
|
||||||
|
|
||||||
|
export function releaseWaveRaw(storeKey: string | undefined, type: 'shu' | 'rms' | 'all' = 'all'): void {
|
||||||
|
if (!storeKey) return
|
||||||
|
if (type === 'all') {
|
||||||
|
rawStore.delete(storeKey)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const entry = rawStore.get(storeKey)
|
||||||
|
if (!entry) return
|
||||||
|
if (type === 'shu') delete entry.listWaveData
|
||||||
|
if (type === 'rms') delete entry.listRmsData
|
||||||
|
if (!entry.listWaveData && !entry.listRmsData) {
|
||||||
|
rawStore.delete(storeKey)
|
||||||
|
} else {
|
||||||
|
rawStore.set(storeKey, entry)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 构建不含大数组的 wp 对象,供子组件 props 使用 */
|
||||||
|
export function buildSlimWp(wp: Record<string, any>, storeKey: string): Record<string, any> {
|
||||||
|
const { listWaveData: _w, listRmsData: _r, ...rest } = wp
|
||||||
|
return {
|
||||||
|
...rest,
|
||||||
|
waveStoreKey: storeKey,
|
||||||
|
waveTimeRange: getWaveTimeRange(storeKey) ?? calcTimeRange(_w) ?? calcTimeRange(_r)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import { toRaw } from 'vue'
|
import { toRaw } from 'vue'
|
||||||
|
import { getWaveRawList } from './waveRawStore'
|
||||||
|
|
||||||
type WorkerMessageHandler = (data: any) => void
|
type WorkerMessageHandler = (data: any) => void
|
||||||
|
|
||||||
@@ -53,10 +54,11 @@ export function buildWorkerPayload(
|
|||||||
waveType: plainWp.waveType,
|
waveType: plainWp.waveType,
|
||||||
yzd: plainWp.yzd
|
yzd: plainWp.yzd
|
||||||
}
|
}
|
||||||
|
const storeKey = plainWp.waveStoreKey as string | undefined
|
||||||
if (type === 'shu') {
|
if (type === 'shu') {
|
||||||
wpPayload.listWaveData = plainWp.listWaveData
|
wpPayload.listWaveData = getWaveRawList('shu', storeKey) ?? plainWp.listWaveData
|
||||||
} else {
|
} else {
|
||||||
wpPayload.listRmsData = plainWp.listRmsData
|
wpPayload.listRmsData = getWaveRawList('rms', storeKey) ?? plainWp.listRmsData
|
||||||
}
|
}
|
||||||
|
|
||||||
const plainBoxo: Record<string, unknown> = {}
|
const plainBoxo: Record<string, unknown> = {}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="dictiontary-list-detail child-router">
|
<div class="dictiontary-list-detail child-router">
|
||||||
<TableHeader :showSearch="false">
|
<TableHeader :showSearch="false" showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="">
|
<el-form-item label="">
|
||||||
<span class="text-large font-600 mr-3">{{ props.timePopUpBox.time }}</span>
|
<span class="text-large font-600 mr-3">{{ props.timePopUpBox.time }}</span>
|
||||||
|
|||||||
@@ -779,6 +779,7 @@ const analyseList = (e: string) => {
|
|||||||
provide('tableStore', tableStore)
|
provide('tableStore', tableStore)
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
TableHeaderRef.value.setTheDate(4)
|
||||||
const dom = document.getElementById('navigation-splitpanes')
|
const dom = document.getElementById('navigation-splitpanes')
|
||||||
if (dom) {
|
if (dom) {
|
||||||
size.value = Math.round((180 / dom.offsetHeight) * 120)
|
size.value = Math.round((180 / dom.offsetHeight) * 120)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="default-main">
|
<div class="default-main">
|
||||||
<TableHeader ref="TableHeaderRef">
|
<TableHeader ref="TableHeaderRef" showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="新能源场站名称">
|
<el-form-item label="新能源场站名称">
|
||||||
<el-input v-model="tableStore.table.params.name" clearable placeholder="输入关键字筛选" />
|
<el-input v-model="tableStore.table.params.name" clearable placeholder="输入关键字筛选" />
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="default-main">
|
<div class="default-main">
|
||||||
<div v-show="flg">
|
<div v-show="flg">
|
||||||
<TableHeader datePicker showExport ref="TableHeaderRef">
|
<TableHeader datePicker showExport ref="TableHeaderRef" showCustomColumn>
|
||||||
<template v-slot:select>
|
<template v-slot:select>
|
||||||
<el-form :inline="true" label-width="90px" class="">
|
<el-form :inline="true" label-width="90px" class="">
|
||||||
<el-form-item label="用户名:">
|
<el-form-item label="用户名:">
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="default-main">
|
<div class="default-main">
|
||||||
<div v-show="addedShow">
|
<div v-show="addedShow">
|
||||||
<TableHeader datePicker showExport ref="TableHeaderRef">
|
<TableHeader datePicker showExport ref="TableHeaderRef" showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="评估类型">
|
<el-form-item label="评估类型">
|
||||||
<el-select
|
<el-select
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="default-main">
|
<div class="default-main">
|
||||||
<div>
|
<div>
|
||||||
<TableHeader :showTimeAll="false" showExport ref="TableHeaderRef">
|
<TableHeader :showTimeAll="false" showExport ref="TableHeaderRef" showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="用户类型">
|
<el-form-item label="用户类型">
|
||||||
<el-select
|
<el-select
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<!-- 新增 -->
|
<!-- 新增 -->
|
||||||
<el-dialog draggable title="详情" v-model="dialogVisible" width="1200px">
|
<el-dialog draggable title="详情" v-model="dialogVisible" width="1200px">
|
||||||
<TableHeader datePicker showExport :showReset="false">
|
<TableHeader datePicker showExport :showReset="false" >
|
||||||
<template v-slot:select>
|
<template v-slot:select>
|
||||||
<el-form-item label="筛选数据">
|
<el-form-item label="筛选数据">
|
||||||
<el-input v-model="tableStore.table.params.searchValue" placeholder="请输入筛选数据" clearable maxlength="32" show-word-limit/>
|
<el-input v-model="tableStore.table.params.searchValue" placeholder="请输入筛选数据" clearable maxlength="32" show-word-limit/>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="default-main">
|
<div class="default-main">
|
||||||
<TableHeader datePicker showExport>
|
<TableHeader datePicker showExport showCustomColumn>
|
||||||
<template v-slot:select>
|
<template v-slot:select>
|
||||||
<el-form-item label="筛选数据">
|
<el-form-item label="筛选数据">
|
||||||
<el-input v-model="tableStore.table.params.searchValue" placeholder="请输入筛选数据" clearable maxlength="32" show-word-limit/>
|
<el-input v-model="tableStore.table.params.searchValue" placeholder="请输入筛选数据" clearable maxlength="32" show-word-limit/>
|
||||||
|
|||||||
@@ -462,7 +462,7 @@ const currentChangeEvent = () => {
|
|||||||
hasDevices.value = hasAnyDevices
|
hasDevices.value = hasAnyDevices
|
||||||
|
|
||||||
dataSource.value = res.data.processDeviceList.filter(item => {
|
dataSource.value = res.data.processDeviceList.filter(item => {
|
||||||
item.name = item.processNo + ''
|
item.name = item.processNo + '号进程'
|
||||||
return true // 保持原有的过滤逻辑
|
return true // 保持原有的过滤逻辑
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="default-main">
|
<div class="default-main">
|
||||||
<TableHeader :showReset="false" showExport>
|
<TableHeader :showReset="false" showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="筛选数据">
|
<el-form-item label="筛选数据">
|
||||||
<el-input
|
<el-input
|
||||||
|
|||||||
185
src/views/pqs/business/terminal/terminaCkeck/components/form.vue
Normal file
185
src/views/pqs/business/terminal/terminaCkeck/components/form.vue
Normal file
@@ -0,0 +1,185 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog
|
||||||
|
:title="dialogMode === 'detail' ? '定检详情' : '上传周期检测报告'"
|
||||||
|
:width="dialogMode === 'detail' ? '1000px' : '600px'"
|
||||||
|
v-model="dialogShow"
|
||||||
|
v-if="dialogShow"
|
||||||
|
>
|
||||||
|
<!-- 详情区域 -->
|
||||||
|
<div v-if="dialogMode === 'detail'">
|
||||||
|
</div>
|
||||||
|
<!-- 上传报告表单区域 -->
|
||||||
|
<div v-if="dialogMode === 'upload'">
|
||||||
|
<el-form ref="uploadFormRef" :model="uploadForm" :rules="uploadRules" label-width="120px">
|
||||||
|
<el-form-item label="定检日期" prop="thisCheckTime">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="uploadForm.thisCheckTime"
|
||||||
|
type="date"
|
||||||
|
placeholder="请选择定检日期"
|
||||||
|
@change="calcNextCheckTime"
|
||||||
|
style="width:100%"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="下次定检日期" prop="nextCheckTime">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="uploadForm.nextCheckTime"
|
||||||
|
type="date"
|
||||||
|
placeholder="请选择下次定检日期"
|
||||||
|
style="width:100%"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item class="uploadFile" for="-" label="设备检测报告:">
|
||||||
|
<el-upload
|
||||||
|
v-model:file-list="uploadForm.checkUrl"
|
||||||
|
ref="uploadRef"
|
||||||
|
action=""
|
||||||
|
:accept="acceptType"
|
||||||
|
:limit="1"
|
||||||
|
:on-change="(file) => choose(file, 'checkUrl')"
|
||||||
|
:auto-upload="false"
|
||||||
|
:on-remove="removeFile('checkUrl')"
|
||||||
|
>
|
||||||
|
<template #trigger>
|
||||||
|
<el-button type="primary">上传文件</el-button>
|
||||||
|
</template>
|
||||||
|
</el-upload>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<template #footer>
|
||||||
|
<el-button v-if="dialogMode === 'upload'" @click="dialogShow = false">取消</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="dialogMode === 'upload'"
|
||||||
|
type="primary"
|
||||||
|
:loading="submitLoading"
|
||||||
|
@click="submitUploadReport"
|
||||||
|
>
|
||||||
|
提交
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref, reactive, nextTick } from 'vue'
|
||||||
|
import type { UploadFile } from 'element-plus'
|
||||||
|
import { ElMessage } from 'element-plus'
|
||||||
|
import { uploadFile } from '@/api/system-boot/file'
|
||||||
|
import { userCheckUpload } from '@/api/device-boot/device'
|
||||||
|
|
||||||
|
const emit = defineEmits(['onSubmit'])
|
||||||
|
|
||||||
|
const acceptType = '.pdf,.docx'
|
||||||
|
|
||||||
|
const detailId = ref('')
|
||||||
|
const dialogShow = ref(false)
|
||||||
|
const dialogMode = ref<'detail' | 'upload'>('detail')
|
||||||
|
const submitLoading = ref(false)
|
||||||
|
|
||||||
|
const uploadFormRef = ref()
|
||||||
|
const uploadForm = reactive({
|
||||||
|
thisCheckTime: '',
|
||||||
|
nextCheckTime: '',
|
||||||
|
checkUrl: [] as any[],
|
||||||
|
devId: '',
|
||||||
|
objId: ''
|
||||||
|
})
|
||||||
|
const checkUrlFile = ref('')
|
||||||
|
|
||||||
|
const calcNextCheckTime = (dateVal: string) => {
|
||||||
|
if (!dateVal) {
|
||||||
|
uploadForm.nextCheckTime = ''
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const date = new Date(dateVal)
|
||||||
|
date.setFullYear(date.getFullYear() + 3)
|
||||||
|
const y = date.getFullYear()
|
||||||
|
const m = String(date.getMonth() + 1).padStart(2, '0')
|
||||||
|
const d = String(date.getDate()).padStart(2, '0')
|
||||||
|
uploadForm.nextCheckTime = `${y}-${m}-${d}`
|
||||||
|
}
|
||||||
|
|
||||||
|
const uploadRules = reactive({
|
||||||
|
thisCheckTime: [{ required: true, message: '请选择定检日期', trigger: 'change' }],
|
||||||
|
checkUrl: [{ required: true, message: '请上传设备检测报告', trigger: 'change' }]
|
||||||
|
})
|
||||||
|
|
||||||
|
const submitUploadReport = async () => {
|
||||||
|
await uploadFormRef.value?.validate(async (valid: boolean) => {
|
||||||
|
if (!valid) return
|
||||||
|
submitLoading.value = true
|
||||||
|
try {
|
||||||
|
const params = {
|
||||||
|
devId: uploadForm.devId,
|
||||||
|
objId: uploadForm.objId,
|
||||||
|
thisCheckTime: uploadForm.thisCheckTime,
|
||||||
|
nextCheckTime: uploadForm.nextCheckTime,
|
||||||
|
checkUrl: checkUrlFile.value
|
||||||
|
}
|
||||||
|
const res = await userCheckUpload(params)
|
||||||
|
if (res.code === 'A0000') {
|
||||||
|
ElMessage.success('提交成功')
|
||||||
|
dialogShow.value = false
|
||||||
|
emit('onSubmit')
|
||||||
|
}
|
||||||
|
} catch (err: any) {
|
||||||
|
ElMessage.error(err.msg || '提交失败')
|
||||||
|
} finally {
|
||||||
|
submitLoading.value = false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const getFileName = (filePath: string) => {
|
||||||
|
if (!filePath) return ''
|
||||||
|
const parts = filePath.split('/')
|
||||||
|
return parts[parts.length - 1] || filePath.replace(/^.*?\/(.*?)\//, '')
|
||||||
|
}
|
||||||
|
|
||||||
|
const openUpload = (row: any) => {
|
||||||
|
uploadForm.devId = row.devId
|
||||||
|
uploadForm.objId = row.objId
|
||||||
|
uploadForm.thisCheckTime = row.thisCheckTime || ''
|
||||||
|
uploadForm.nextCheckTime = row.nextCheckTime || ''
|
||||||
|
if (row.checkUrl) {
|
||||||
|
checkUrlFile.value = row.checkUrl
|
||||||
|
uploadForm.checkUrl = [{ name: getFileName(row.checkUrl), url: row.checkUrl }]
|
||||||
|
} else {
|
||||||
|
checkUrlFile.value = ''
|
||||||
|
uploadForm.checkUrl = []
|
||||||
|
}
|
||||||
|
dialogMode.value = 'upload'
|
||||||
|
dialogShow.value = true
|
||||||
|
nextTick(() => {
|
||||||
|
uploadFormRef.value?.clearValidate()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const openDetail = (id: string) => {
|
||||||
|
detailId.value = id
|
||||||
|
dialogMode.value = 'detail'
|
||||||
|
dialogShow.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
const removeFile = (val: string) => {
|
||||||
|
return (_file: UploadFile, fileList: UploadFile[]) => {
|
||||||
|
if (val === 'checkUrl') {
|
||||||
|
checkUrlFile.value = ''
|
||||||
|
}
|
||||||
|
uploadForm[val] = fileList
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const choose = (e: any, field: string) => {
|
||||||
|
uploadFile(e.raw, '/supervision/').then(res => {
|
||||||
|
if (field === 'checkUrl') {
|
||||||
|
checkUrlFile.value = res.data.name
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({ openUpload, openDetail })
|
||||||
|
</script>
|
||||||
205
src/views/pqs/business/terminal/terminaCkeck/index.vue
Normal file
205
src/views/pqs/business/terminal/terminaCkeck/index.vue
Normal file
@@ -0,0 +1,205 @@
|
|||||||
|
<template>
|
||||||
|
<div class="default-main">
|
||||||
|
<TableHeader ref="TableHeaderRef" showExport>
|
||||||
|
<template #select>
|
||||||
|
<el-form-item label="地市">
|
||||||
|
<el-select v-model="tableStore.table.params.city" clearable placeholder="请选择地市">
|
||||||
|
<el-option
|
||||||
|
v-for="item in areaOptionList"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.name"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="监测对象">
|
||||||
|
<el-input
|
||||||
|
style="width: 200px"
|
||||||
|
placeholder="请输入监测对象名称"
|
||||||
|
v-model="tableStore.table.params.searchValue"
|
||||||
|
clearable
|
||||||
|
maxlength="32"
|
||||||
|
show-word-limit
|
||||||
|
></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
<template #operation>
|
||||||
|
<!-- <el-button icon="el-icon-Plus" type="primary" @click="addFormModel">新增定检记录</el-button>-->
|
||||||
|
</template>
|
||||||
|
</TableHeader>
|
||||||
|
<Table ref="tableRef" @cell-click="cellClickEvent" />
|
||||||
|
|
||||||
|
<checkForm ref="checkFormRef" @onSubmit="tableStore.index()" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref, onMounted, provide, watch } from 'vue'
|
||||||
|
|
||||||
|
import TableStore from '@/utils/tableStore'
|
||||||
|
import Table from '@/components/table/index.vue'
|
||||||
|
import TableHeader from '@/components/table/header/index.vue'
|
||||||
|
import checkForm from './components/form.vue'
|
||||||
|
import { useDictData } from '@/stores/dictData'
|
||||||
|
import { useAdminInfo } from '@/stores/adminInfo'
|
||||||
|
import { download } from '@/utils/fileDownLoad'
|
||||||
|
defineOptions({
|
||||||
|
name: 'terminal/terminaCkeck'
|
||||||
|
})
|
||||||
|
|
||||||
|
// 公共依赖
|
||||||
|
const TableHeaderRef = ref()
|
||||||
|
const checkFormRef = ref()
|
||||||
|
const dictData = useDictData()
|
||||||
|
const adminInfo = useAdminInfo()
|
||||||
|
// 地区字典(和你原有地市下拉同源)
|
||||||
|
const areaOptionList = dictData.getBasicData('jibei_area')
|
||||||
|
|
||||||
|
// TableStore 表格配置(仅修改字段映射,其余不动)
|
||||||
|
const tableStore = new TableStore({
|
||||||
|
url: '/device-boot/alarm/terminalCheckPage',
|
||||||
|
method: 'POST',
|
||||||
|
column: [
|
||||||
|
// 多选框
|
||||||
|
{
|
||||||
|
width: '60',
|
||||||
|
type: 'checkbox'
|
||||||
|
},
|
||||||
|
// 序号(分页自增,和你现有逻辑一致)
|
||||||
|
{
|
||||||
|
title: '序号',
|
||||||
|
width: 70,
|
||||||
|
formatter: (row: any) => {
|
||||||
|
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ field: 'areaName', title: '所在地市', minWidth: 100 },
|
||||||
|
{ field: 'bdName', title: '变电站', minWidth: 150 },
|
||||||
|
{ field: 'objName', title: '监测对象', minWidth: 180 },
|
||||||
|
{ field: 'devName', title: '终端名称', minWidth: 180 },
|
||||||
|
{ field: 'loginDate', title: '投运时间', minWidth: 120 },
|
||||||
|
{ field: 'thisCheckTime', title: '本次定检时间', minWidth: 120 },
|
||||||
|
{ field: 'nextCheckTime', title: '下次定检时间', minWidth: 120 },
|
||||||
|
{
|
||||||
|
title: '是否逾期',
|
||||||
|
field: 'checkStatus',
|
||||||
|
align: 'center',
|
||||||
|
width: 80,
|
||||||
|
render: 'customRender',
|
||||||
|
customRender: props => {
|
||||||
|
const val = props.renderValue
|
||||||
|
let text = ''
|
||||||
|
let color = ''
|
||||||
|
if (val === 1) {
|
||||||
|
text = '是'
|
||||||
|
color = '#f56c6c'
|
||||||
|
} else if (val === 0) {
|
||||||
|
text = '否'
|
||||||
|
color = '#67c23a'
|
||||||
|
}
|
||||||
|
return h('span', { style: { color, fontWeight: 'bold' } }, text)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'overdueDay',
|
||||||
|
title: '逾期天数',
|
||||||
|
minWidth: 80,
|
||||||
|
render: 'customRender',
|
||||||
|
customRender: props => {
|
||||||
|
const val = props.renderValue
|
||||||
|
let text = ''
|
||||||
|
let color = ''
|
||||||
|
if (val > 0) {
|
||||||
|
text = val
|
||||||
|
color = '#f56c6c'
|
||||||
|
} else if (val > -30) {
|
||||||
|
text = Math.abs(val).toString() + '天后将逾期'
|
||||||
|
color = '#e6a23c'
|
||||||
|
} else {
|
||||||
|
text = '/'
|
||||||
|
}
|
||||||
|
return h('span', { style: { color, fontWeight: 'bold' } }, text)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'checkUrl',
|
||||||
|
title: '周期检测报告',
|
||||||
|
minWidth: 160,
|
||||||
|
render: 'customRender',
|
||||||
|
customRender: props => {
|
||||||
|
const val = props.renderValue?.replace(/^.*?\/(.*?)\//, '') || ''
|
||||||
|
return val ? h('span', { style: { color: 'var(--el-color-primary)', cursor: 'pointer' } }, val) : '/'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 操作列固定右侧
|
||||||
|
{
|
||||||
|
title: '操作',
|
||||||
|
fixed: 'right',
|
||||||
|
minWidth: 160,
|
||||||
|
render: 'buttons',
|
||||||
|
buttons: [
|
||||||
|
// {
|
||||||
|
// name: 'detail',
|
||||||
|
// title: '详情',
|
||||||
|
// type: 'primary',
|
||||||
|
// icon: 'el-icon-EditPen',
|
||||||
|
// render: 'basicButton',
|
||||||
|
// click: row => {
|
||||||
|
// checkFormRef.value.openDetail(row.devId)
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
{
|
||||||
|
name: 'edit',
|
||||||
|
title: '上传周期检测报告',
|
||||||
|
type: 'primary',
|
||||||
|
icon: 'el-icon-Open',
|
||||||
|
render: 'basicButton',
|
||||||
|
click: row => {
|
||||||
|
checkFormRef.value.openUpload(row)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
beforeSearchFun: () => {
|
||||||
|
// 携带当前登录人部门ID
|
||||||
|
tableStore.table.params.orgId = adminInfo.$state.deptId
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// 初始化查询参数
|
||||||
|
tableStore.table.params.city = ''
|
||||||
|
tableStore.table.params.substation = ''
|
||||||
|
tableStore.table.params.terminalName = ''
|
||||||
|
tableStore.table.params.orgId = adminInfo.$state.deptId
|
||||||
|
|
||||||
|
// 路由跳转带ID回显编辑(复用你原有路由传参逻辑)
|
||||||
|
const props = defineProps({
|
||||||
|
id: { type: String, default: 'null' }
|
||||||
|
})
|
||||||
|
watch(
|
||||||
|
() => props.id,
|
||||||
|
async newVal => {
|
||||||
|
if (newVal === 'null') return
|
||||||
|
const fullId = newVal.split('@')[0]
|
||||||
|
const routeTime = Number(newVal.split('@')[1])
|
||||||
|
if (isNaN(routeTime) || Date.now() - routeTime > import.meta.env.VITE_ROUTE_TIME_OUT) return
|
||||||
|
const res = await getPqCheckById(fullId)
|
||||||
|
if (res.code === 'A0000') {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ immediate: true }
|
||||||
|
)
|
||||||
|
// 点击行
|
||||||
|
const cellClickEvent = ({ row, column }: any) => {
|
||||||
|
if (column.field == 'checkUrl') {
|
||||||
|
row.checkUrl ? download(row.checkUrl) : ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
provide('tableStore', tableStore)
|
||||||
|
onMounted(() => {
|
||||||
|
tableStore.index()
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="19">
|
<el-col :span="19">
|
||||||
<div class="mt10">
|
<div class="mt10">
|
||||||
<TableHeader showExport :showSearch="false" ref="TableHeaderRef">
|
<TableHeader showExport :showSearch="false" ref="TableHeaderRef" showCustomColumn>
|
||||||
<template v-slot:select>
|
<template v-slot:select>
|
||||||
<span style="font-size: 14px; line-height: 40px; color: red;">
|
<span style="font-size: 14px; line-height: 40px; color: red;">
|
||||||
所选变电站:
|
所选变电站:
|
||||||
|
|||||||
@@ -212,7 +212,7 @@
|
|||||||
<el-form-item for="-" v-if="form.userType != '0' && form.userType != '1'" label="PCC点:">
|
<el-form-item for="-" v-if="form.userType != '0' && form.userType != '1'" label="PCC点:">
|
||||||
<el-input v-model.trim="form.pccPoint" autocomplete="off" placeholder="请输入PCC点" />
|
<el-input v-model.trim="form.pccPoint" autocomplete="off" placeholder="请输入PCC点" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<!-- <el-form-item
|
||||||
for="-"
|
for="-"
|
||||||
v-if="form.userType == '2' || form.userType == '3' || form.userType == '4' || form.userType == '5'"
|
v-if="form.userType == '2' || form.userType == '3' || form.userType == '4' || form.userType == '5'"
|
||||||
label="基准短路容量:"
|
label="基准短路容量:"
|
||||||
@@ -273,7 +273,7 @@
|
|||||||
>
|
>
|
||||||
<template #append>MVA</template>
|
<template #append>MVA</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>-->
|
||||||
<el-form-item for="-" v-if="form.userType == '6'" label="行业:">
|
<el-form-item for="-" v-if="form.userType == '6'" label="行业:">
|
||||||
<el-select v-model="form.industry" placeholder="请选择行业">
|
<el-select v-model="form.industry" placeholder="请选择行业">
|
||||||
<el-option v-for="(item, index) in industryList" :label="item.name" :value="item.id" :key="index" />
|
<el-option v-for="(item, index) in industryList" :label="item.name" :value="item.id" :key="index" />
|
||||||
@@ -368,6 +368,48 @@
|
|||||||
show-word-limit
|
show-word-limit
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item
|
||||||
|
class="uploadFile"
|
||||||
|
for="-"
|
||||||
|
label="设备检测报告:"
|
||||||
|
prop="checkUrl"
|
||||||
|
>
|
||||||
|
<el-upload
|
||||||
|
v-model:file-list="form.checkUrl"
|
||||||
|
ref="uploadRef"
|
||||||
|
action=""
|
||||||
|
:accept="acceptType"
|
||||||
|
:limit="1"
|
||||||
|
:on-change="(file) => choose(file, 'checkUrl')"
|
||||||
|
:auto-upload="false"
|
||||||
|
:on-remove="removeFile('checkUrl')"
|
||||||
|
>
|
||||||
|
<template #trigger>
|
||||||
|
<el-button type="primary" >上传文件</el-button>
|
||||||
|
</template>
|
||||||
|
</el-upload>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item
|
||||||
|
class="uploadFile"
|
||||||
|
for="-"
|
||||||
|
label="电能质量评估报告:"
|
||||||
|
prop="evaluation"
|
||||||
|
>
|
||||||
|
<el-upload
|
||||||
|
v-model:file-list="form.assessUrl"
|
||||||
|
ref="uploadRef"
|
||||||
|
action=""
|
||||||
|
:accept="acceptType"
|
||||||
|
:limit="1"
|
||||||
|
:on-change="(file) => choose(file, 'assessUrl')"
|
||||||
|
:auto-upload="false"
|
||||||
|
:on-remove="removeFile('assessUrl')"
|
||||||
|
>
|
||||||
|
<template #trigger>
|
||||||
|
<el-button type="primary">上传文件</el-button>
|
||||||
|
</template>
|
||||||
|
</el-upload>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item for="-" label="预测评估结论:" style="width: 100%">
|
<el-form-item for="-" label="预测评估结论:" style="width: 100%">
|
||||||
<el-input
|
<el-input
|
||||||
type="textarea"
|
type="textarea"
|
||||||
@@ -390,7 +432,7 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, onMounted, reactive, defineExpose, defineProps, defineEmits, watch, onUnmounted } from 'vue'
|
import { ref, onMounted, reactive, defineExpose, defineProps, defineEmits, watch, onUnmounted } from 'vue'
|
||||||
// import { upload, insertTerminal, updateTerminal } from '@/api/process-boot/terminal'
|
// import { upload, insertTerminal, updateTerminal } from '@/api/process-boot/terminal'
|
||||||
import type { UploadInstance, UploadProps, UploadRawFile } from 'element-plus'
|
import type { UploadFile, UploadInstance, UploadProps, UploadRawFile } from 'element-plus'
|
||||||
import { genFileId, ElMessage } from 'element-plus'
|
import { genFileId, ElMessage } from 'element-plus'
|
||||||
import { useDictData } from '@/stores/dictData'
|
import { useDictData } from '@/stores/dictData'
|
||||||
import type { ComponentSize, FormInstance, FormRules } from 'element-plus'
|
import type { ComponentSize, FormInstance, FormRules } from 'element-plus'
|
||||||
@@ -435,10 +477,11 @@ const props = defineProps({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
const emits = defineEmits(['onSubmit'])
|
const emits = defineEmits(['onSubmit'])
|
||||||
|
const IS_LN = import.meta.env.VITE_NAME == 'LN' || import.meta.env.VITE_NAME == 'LNqr'
|
||||||
const dictData = useDictData()
|
const dictData = useDictData()
|
||||||
const dialogFormVisible = ref(false)
|
const dialogFormVisible = ref(false)
|
||||||
// .doc,.docx,.xlsx,.xls,.pdf
|
// .doc,.docx,.xlsx,.xls,.pdf
|
||||||
const acceptType = ''
|
const acceptType = '.pdf,.docx'
|
||||||
const form: any = ref({})
|
const form: any = ref({})
|
||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
const control: any = ref(true)
|
const control: any = ref(true)
|
||||||
@@ -532,6 +575,10 @@ const defaultProps = {
|
|||||||
const nonlinearDeviceTypeList: any = ref('')
|
const nonlinearDeviceTypeList: any = ref('')
|
||||||
//获取登陆用户姓名和部门
|
//获取登陆用户姓名和部门
|
||||||
const adminInfo = useAdminInfo()
|
const adminInfo = useAdminInfo()
|
||||||
|
// 电能质量检测报告
|
||||||
|
const checkUrlFile = ref('')
|
||||||
|
// 电能质量评估报告
|
||||||
|
const evaluationFile = ref('')
|
||||||
const resetForm = () => {
|
const resetForm = () => {
|
||||||
form.value = {
|
form.value = {
|
||||||
reporter: '', //填报人 1
|
reporter: '', //填报人 1
|
||||||
@@ -558,6 +605,8 @@ const resetForm = () => {
|
|||||||
pccPoint: '', //PCC点 1
|
pccPoint: '', //PCC点 1
|
||||||
evaluationType: evaluationTypeList[0].id, //评估类型 1
|
evaluationType: evaluationTypeList[0].id, //评估类型 1
|
||||||
evaluationChekDept: '', //预测评估审单位 1
|
evaluationChekDept: '', //预测评估审单位 1
|
||||||
|
checkUrl: [], //电能质量检测报告
|
||||||
|
assessUrl: [], //电能质量评估报告
|
||||||
minShortCircuitCapacity: '', //系统最小短路容量(MVA) 1
|
minShortCircuitCapacity: '', //系统最小短路容量(MVA) 1
|
||||||
userAgreementCapacity: '', //用户用电协议容量(MVA) 1
|
userAgreementCapacity: '', //用户用电协议容量(MVA) 1
|
||||||
needGovernance: 0, //是否需要治理 1
|
needGovernance: 0, //是否需要治理 1
|
||||||
@@ -581,6 +630,8 @@ const resetForm = () => {
|
|||||||
delete form.value.loadLevel
|
delete form.value.loadLevel
|
||||||
delete form.value.powerSupplyInfo
|
delete form.value.powerSupplyInfo
|
||||||
}
|
}
|
||||||
|
checkUrlFile.value = ''
|
||||||
|
evaluationFile.value = ''
|
||||||
}
|
}
|
||||||
//初始化数据
|
//初始化数据
|
||||||
resetForm()
|
resetForm()
|
||||||
@@ -900,6 +951,10 @@ const open = async (row: any) => {
|
|||||||
} else {
|
} else {
|
||||||
resendId.value = ''
|
resendId.value = ''
|
||||||
form.value.userType = userTypeList.value[0].value
|
form.value.userType = userTypeList.value[0].value
|
||||||
|
checkUrlFile.value = ''
|
||||||
|
evaluationFile.value = ''
|
||||||
|
form.value.checkUrl = []
|
||||||
|
form.value.evaluation = []
|
||||||
}
|
}
|
||||||
await getSubstationSelect().then(res => {
|
await getSubstationSelect().then(res => {
|
||||||
stationList.value = res.data
|
stationList.value = res.data
|
||||||
@@ -917,18 +972,36 @@ async function handleResponse(data: any) {
|
|||||||
// userType logic is commented out; if needed, implement accordingly
|
// userType logic is commented out; if needed, implement accordingly
|
||||||
if (data.userReportProjectPO) {
|
if (data.userReportProjectPO) {
|
||||||
form.value = { ...data, ...data.userReportProjectPO }
|
form.value = { ...data, ...data.userReportProjectPO }
|
||||||
|
fileRaw(data, 'userReportProjectPO')
|
||||||
} else if (data.userReportSubstationPO) {
|
} else if (data.userReportSubstationPO) {
|
||||||
form.value = { ...data, ...data.userReportSubstationPO }
|
form.value = { ...data, ...data.userReportSubstationPO }
|
||||||
|
fileRaw(data, 'userReportSubstationPO')
|
||||||
} else if (data.userReportSensitivePO) {
|
} else if (data.userReportSensitivePO) {
|
||||||
form.value = {
|
form.value = {
|
||||||
...data,
|
...data,
|
||||||
...data.userReportSensitivePO,
|
...data.userReportSensitivePO,
|
||||||
energyQualityIndex: data.userReportSensitivePO.energyQualityIndex.split(', ')
|
energyQualityIndex: data.userReportSensitivePO.energyQualityIndex.split(', ')
|
||||||
}
|
}
|
||||||
|
fileRaw(data, 'userReportSensitivePO')
|
||||||
}
|
}
|
||||||
form.value.orgId = adminInfo.$state.deptName
|
form.value.orgId = adminInfo.$state.deptName
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 处理上传文件回显
|
||||||
|
const fileRaw = (row: any, key: string) => {
|
||||||
|
const fileFields = ['checkUrl', 'assessUrl']
|
||||||
|
for (const field of fileFields) {
|
||||||
|
const filePath = row[key]?.[field] ?? row[field]
|
||||||
|
if (filePath != null && filePath.length > 0) {
|
||||||
|
form.value[field] = [{ name: filePath.split('/')[2] }]
|
||||||
|
} else {
|
||||||
|
form.value[field] = []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
checkUrlFile.value = row[key]?.checkUrl ?? row.checkUrl ?? ''
|
||||||
|
evaluationFile.value = row[key]?.assessUrl ?? row.assessUrl ?? ''
|
||||||
|
}
|
||||||
|
|
||||||
const close = () => {
|
const close = () => {
|
||||||
//重置表单内容
|
//重置表单内容
|
||||||
//取消表单校验状态
|
//取消表单校验状态
|
||||||
@@ -947,14 +1020,25 @@ const handleExceed: UploadProps['onExceed'] = files => {
|
|||||||
file.uid = genFileId()
|
file.uid = genFileId()
|
||||||
uploadRef.value!.handleStart(file)
|
uploadRef.value!.handleStart(file)
|
||||||
}
|
}
|
||||||
let uploadName = ref('')
|
|
||||||
//上传报告字段名称
|
|
||||||
const uploadFileName = (val: any) => {
|
|
||||||
uploadName.value = val
|
|
||||||
}
|
|
||||||
//移除文件上传
|
//移除文件上传
|
||||||
const removeFile = (file: any, uploadFiles: any) => {
|
const removeFile = (val: string) => {
|
||||||
console.log(file, uploadFiles)
|
return (_file: UploadFile, fileList: UploadFile[]) => {
|
||||||
|
if (val === 'checkUrl') {
|
||||||
|
checkUrlFile.value = ''
|
||||||
|
} else if (val === 'assessUrl') {
|
||||||
|
evaluationFile.value = ''
|
||||||
|
}
|
||||||
|
form.value[val] = fileList
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const choose = (e: any, field: string) => {
|
||||||
|
uploadFile(e.raw, '/supervision/').then(res => {
|
||||||
|
if (field === 'checkUrl') {
|
||||||
|
checkUrlFile.value = res.data.name
|
||||||
|
} else if (field === 'assessUrl') {
|
||||||
|
evaluationFile.value = res.data.name
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 关联终端
|
// 关联终端
|
||||||
@@ -981,12 +1065,16 @@ const confirmForm = async (flag: boolean) => {
|
|||||||
subForm.value.reporter = adminInfo.$state.id
|
subForm.value.reporter = adminInfo.$state.id
|
||||||
subForm.value.orgId = adminInfo.$state.deptId
|
subForm.value.orgId = adminInfo.$state.deptId
|
||||||
let confirmFormData = JSON.parse(JSON.stringify(subForm.value))
|
let confirmFormData = JSON.parse(JSON.stringify(subForm.value))
|
||||||
|
confirmFormData.checkUrl = checkUrlFile.value
|
||||||
|
confirmFormData.assessUrl = evaluationFile.value
|
||||||
//1.判断是否上传
|
//1.判断是否上传
|
||||||
if (subForm.value.userType == '0' || subForm.value.userType == '1') {
|
if (subForm.value.userType == '0' || subForm.value.userType == '1') {
|
||||||
{
|
{
|
||||||
//其他报告非必填
|
//其他报告非必填
|
||||||
confirmFormData.userReportProjectPO = {
|
confirmFormData.userReportProjectPO = {
|
||||||
...confirmFormData.userReportProjectPO
|
...confirmFormData.userReportProjectPO,
|
||||||
|
checkUrl: checkUrlFile.value,
|
||||||
|
assessUrl: evaluationFile.value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -999,7 +1087,9 @@ const confirmForm = async (flag: boolean) => {
|
|||||||
) {
|
) {
|
||||||
{
|
{
|
||||||
confirmFormData.userReportSubstationPO = {
|
confirmFormData.userReportSubstationPO = {
|
||||||
...confirmFormData.userReportSubstationPO
|
...confirmFormData.userReportSubstationPO,
|
||||||
|
checkUrl: checkUrlFile.value,
|
||||||
|
assessUrl: evaluationFile.value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1008,7 +1098,9 @@ const confirmForm = async (flag: boolean) => {
|
|||||||
{
|
{
|
||||||
confirmFormData.userReportSensitivePO = {
|
confirmFormData.userReportSensitivePO = {
|
||||||
...confirmFormData.userReportSensitivePO,
|
...confirmFormData.userReportSensitivePO,
|
||||||
energyQualityIndex: confirmFormData.userReportSensitivePO.energyQualityIndex.join(', ')
|
energyQualityIndex: confirmFormData.userReportSensitivePO.energyQualityIndex.join(', '),
|
||||||
|
checkUrl: checkUrlFile.value,
|
||||||
|
assessUrl: evaluationFile.value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1060,8 +1152,6 @@ const filterUsers = (arr: any) => {
|
|||||||
userTypeList.value = userTypeList.value.filter(item => !arr.includes(item.value))
|
userTypeList.value = userTypeList.value.filter(item => !arr.includes(item.value))
|
||||||
}
|
}
|
||||||
const setcontroFlag = () => {
|
const setcontroFlag = () => {
|
||||||
|
|
||||||
|
|
||||||
controFlag.value = true
|
controFlag.value = true
|
||||||
}
|
}
|
||||||
defineExpose({ open, filterUsers, setcontroFlag })
|
defineExpose({ open, filterUsers, setcontroFlag })
|
||||||
|
|||||||
@@ -212,12 +212,21 @@
|
|||||||
})?.name
|
})?.name
|
||||||
}}
|
}}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="敏感电能质量指标" v-if="detailData.userType == 6">
|
<el-descriptions-item :span="2" label="电能质量设备检测报告">
|
||||||
{{
|
<el-icon class="elView" v-if="detailData?.checkUrl">
|
||||||
energyQualityIndexList.find(item => {
|
<View @click="openFile(detailData?.checkUrl)" />
|
||||||
return item.id == proviteData.energyQualityIndex
|
</el-icon>
|
||||||
})?.name
|
<span class="aLoad" @click="download(detailData.checkUrl)" target="_blank">
|
||||||
}}
|
{{ detailData.checkUrl?.replace(/^.*?\/(.*?)\//, '') || '' }}
|
||||||
|
</span>
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item :span="2" label="电能质量评估报告">
|
||||||
|
<el-icon class="elView" v-if="detailData?.assessUrl">
|
||||||
|
<View @click="openFile(detailData?.assessUrl)" />
|
||||||
|
</el-icon>
|
||||||
|
<span class="aLoad" @click="download(detailData.assessUrl)" target="_blank">
|
||||||
|
{{ detailData.assessUrl?.replace(/^.*?\/(.*?)\//, '') || '' }}
|
||||||
|
</span>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
</div>
|
</div>
|
||||||
@@ -233,7 +242,7 @@ import { getDictTreeById } from '@/api/system-boot/dictTree'
|
|||||||
import { useDictData } from '@/stores/dictData'
|
import { useDictData } from '@/stores/dictData'
|
||||||
import { getFileNameAndFilePath } from '@/api/system-boot/file'
|
import { getFileNameAndFilePath } from '@/api/system-boot/file'
|
||||||
import { Link, View } from '@element-plus/icons-vue'
|
import { Link, View } from '@element-plus/icons-vue'
|
||||||
import PreviewFile from '@/components/PreviewFile/index.vue'
|
import { download } from '@/utils/fileDownLoad'
|
||||||
// import { addOrUpdateFile, getFileById } from '@/api/supervision-boot/interfere/index'
|
// import { addOrUpdateFile, getFileById } from '@/api/supervision-boot/interfere/index'
|
||||||
defineOptions({ name: 'BpmUserReportDetail' })
|
defineOptions({ name: 'BpmUserReportDetail' })
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="default-main">
|
<div class="default-main">
|
||||||
<TableHeader ref="TableHeaderRef">
|
<TableHeader ref="TableHeaderRef" showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="项目名称">
|
<el-form-item label="项目名称">
|
||||||
<el-input
|
<el-input
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
<el-button icon="el-icon-Upload" type="primary" @click="importUserData">批量导入</el-button> -->
|
<el-button icon="el-icon-Upload" type="primary" @click="importUserData">批量导入</el-button> -->
|
||||||
</template>
|
</template>
|
||||||
</TableHeader>
|
</TableHeader>
|
||||||
<Table ref="tableRef" />
|
<Table ref="tableRef" @cell-click="cellClickEvent" />
|
||||||
|
|
||||||
<el-dialog title="详情" width="1000px" v-model="dialogShow" v-if="dialogShow">
|
<el-dialog title="详情" width="1000px" v-model="dialogShow" v-if="dialogShow">
|
||||||
<DetailInfo :id="userId" :openType="'sourcesOfInterference'"></DetailInfo>
|
<DetailInfo :id="userId" :openType="'sourcesOfInterference'"></DetailInfo>
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, onMounted, provide, nextTick, watch } from 'vue'
|
import { ref, onMounted, reactive, provide, nextTick, watch, onUnmounted } from 'vue'
|
||||||
import TableStore from '@/utils/tableStore'
|
import TableStore from '@/utils/tableStore'
|
||||||
import Table from '@/components/table/index.vue'
|
import Table from '@/components/table/index.vue'
|
||||||
import TableHeader from '@/components/table/header/index.vue'
|
import TableHeader from '@/components/table/header/index.vue'
|
||||||
@@ -58,6 +58,7 @@ import { downloadSensitiveReportTemplate } from '@/api/supervision-boot/userRepo
|
|||||||
import DetailInfo from './components/detail.vue'
|
import DetailInfo from './components/detail.vue'
|
||||||
import { cancelFormData, getUserReportById } from '@/api/supervision-boot/interfere/index'
|
import { cancelFormData, getUserReportById } from '@/api/supervision-boot/interfere/index'
|
||||||
import { deleteUserReport } from '@/api/device-boot/sensitiveLoadMange'
|
import { deleteUserReport } from '@/api/device-boot/sensitiveLoadMange'
|
||||||
|
import { download } from '@/utils/fileDownLoad'
|
||||||
const addForms = ref()
|
const addForms = ref()
|
||||||
const dictData = useDictData()
|
const dictData = useDictData()
|
||||||
const sensitiveUserPopup = ref()
|
const sensitiveUserPopup = ref()
|
||||||
@@ -88,13 +89,13 @@ const tableStore = new TableStore({
|
|||||||
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ field: 'city', title: '所在地市', minWidth: 80 },
|
{ field: 'city', title: '所在地市', minWidth: 100 },
|
||||||
/* { field: 'substation', title: '厂站名称', minWidth: 100 },*/
|
/* { field: 'substation', title: '厂站名称', minWidth: 100 },*/
|
||||||
{ field: 'projectName', title: '项目名称', minWidth: 170 },
|
{ field: 'projectName', title: '项目名称', minWidth: 150 },
|
||||||
{
|
{
|
||||||
field: 'userType',
|
field: 'userType',
|
||||||
title: '用户性质',
|
title: '用户性质',
|
||||||
minWidth: 150,
|
minWidth: 180,
|
||||||
formatter: (obj: any) => {
|
formatter: (obj: any) => {
|
||||||
const userType = obj.row.userType
|
const userType = obj.row.userType
|
||||||
return getUserTypeName(userType)
|
return getUserTypeName(userType)
|
||||||
@@ -102,18 +103,40 @@ const tableStore = new TableStore({
|
|||||||
},
|
},
|
||||||
|
|
||||||
// { field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130 },
|
// { field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130 },
|
||||||
{ field: 'ratePower', title: '装机容量(MW)', minWidth: 130 },
|
{ field: 'ratePower', title: '装机容量(MW)', minWidth: 80 },
|
||||||
{ field: 'stationId', title: '所属电站', minWidth: 130 },
|
{ field: 'stationId', title: '所属电站', minWidth: 150 },
|
||||||
{
|
{
|
||||||
|
field: 'checkUrl',
|
||||||
|
title: '电能质量设备检测报告',
|
||||||
|
minWidth: 160,
|
||||||
|
render: 'customRender',
|
||||||
|
customRender: props => {
|
||||||
|
const val = props.renderValue?.replace(/^.*?\/(.*?)\//, '') || ''
|
||||||
|
return val ? h('span', { style: { color: 'var(--el-color-primary)', cursor: 'pointer' } }, val) : '/'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'assessUrl',
|
||||||
|
title: '电能质量评估报告',
|
||||||
|
minWidth: 160,
|
||||||
|
render: 'customRender',
|
||||||
|
customRender: props => {
|
||||||
|
const val = props.renderValue?.replace(/^.*?\/(.*?)\//, '') || ''
|
||||||
|
return val ? h('span', { style: { color: 'var(--el-color-primary)', cursor: 'pointer' } }, val) : '/'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* {
|
||||||
field: 'createBy',
|
field: 'createBy',
|
||||||
title: '创建人',
|
title: '创建人',
|
||||||
minWidth: 80,
|
minWidth: 80,
|
||||||
formatter: (row: any) => {
|
formatter: (row: any) => {
|
||||||
return dictData.state.userList.filter(item => item.id == row.cellValue)[0]?.name
|
return dictData.state.userList.filter(item => item.id == row.cellValue)[0]?.name
|
||||||
}
|
}
|
||||||
},
|
},*/
|
||||||
{
|
{
|
||||||
title: '操作',fixed: 'right',
|
title: '操作',
|
||||||
|
fixed: 'right',
|
||||||
minWidth: 150,
|
minWidth: 150,
|
||||||
|
|
||||||
render: 'buttons',
|
render: 'buttons',
|
||||||
@@ -139,7 +162,6 @@ const tableStore = new TableStore({
|
|||||||
return !(row.status == 0)
|
return !(row.status == 0)
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
click: row => {
|
click: row => {
|
||||||
addForms.value.filterUsers([6])
|
addForms.value.filterUsers([6])
|
||||||
|
|
||||||
@@ -148,9 +170,7 @@ const tableStore = new TableStore({
|
|||||||
row: row
|
row: row
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
|
|
||||||
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -209,27 +229,13 @@ const deleteEven = () => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**取消流程操作*/
|
// 点击行
|
||||||
const cancelLeave = async (row: any) => {
|
const cellClickEvent = ({ row, column }: any) => {
|
||||||
// 二次确认
|
if (column.field == 'checkUrl') {
|
||||||
const { value } = await ElMessageBox.prompt('请输入取消原因', '取消流程', {
|
row.checkUrl ? download(row.checkUrl) : ''
|
||||||
confirmButtonText: '确定',
|
} else if (column.field == 'assessUrl') {
|
||||||
cancelButtonText: '取消',
|
row.assessUrl ? download(row.assessUrl) : ''
|
||||||
inputType: 'textarea',
|
|
||||||
inputPattern: /^[\s\S]*.*\S[\s\S]*$/, // 判断非空,且非空格
|
|
||||||
inputErrorMessage: '取消原因不能为空'
|
|
||||||
})
|
|
||||||
// 发起取消
|
|
||||||
let data = {
|
|
||||||
id: row.id,
|
|
||||||
processInstanceId: row.processInstanceId,
|
|
||||||
dataType: 1,
|
|
||||||
reason: value
|
|
||||||
}
|
}
|
||||||
await cancelFormData(data)
|
|
||||||
ElMessage.success('取消成功')
|
|
||||||
// 加载数据
|
|
||||||
tableStore.index()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 新增
|
// 新增
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="default-main">
|
<div class="default-main">
|
||||||
<TableHeader date-picker>
|
<TableHeader date-picker showCustomColumn>
|
||||||
<template v-slot:select>
|
<template v-slot:select>
|
||||||
<!-- <el-form-item label="用户名">
|
<!-- <el-form-item label="用户名">
|
||||||
<el-select v-model="value" class="m-2" placeholder="Select" size="large">
|
<el-select v-model="value" class="m-2" placeholder="Select" size="large">
|
||||||
@@ -33,14 +33,22 @@ const tableStore = new TableStore({
|
|||||||
url: '/system-boot/audit/getAuditLog',
|
url: '/system-boot/audit/getAuditLog',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
column: [
|
column: [
|
||||||
{ title: '操作时间', field: 'time', align: 'center', width: 200 },
|
{
|
||||||
{ title: '操作人员', field: 'userName', align: 'center', width: 120 },
|
title: '序号',
|
||||||
{ title: '操作类型', field: 'operate', align: 'center', width: 220 },
|
field: 'index',
|
||||||
{ title: '事件描述', field: 'describe', align: 'center', showOverflow: true,minWidth: 200 },
|
minWidth: 80,
|
||||||
{ title: '事件类型', field: 'type', align: 'center', width: 160 },
|
formatter: (row: any) => {
|
||||||
{ title: '操作结果', field: 'type', align: 'center', width: 100 },
|
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
||||||
{ title: '操作IP', field: 'ip', align: 'center', width: 120 },
|
}
|
||||||
{ title: '事件等级', field: 'level', align: 'center', width: 100 }
|
},
|
||||||
|
{ title: '操作时间', field: 'time', align: 'center', minWidth: 200 },
|
||||||
|
{ title: '操作人员', field: 'userName', align: 'center', minWidth: 120 },
|
||||||
|
{ title: '操作类型', field: 'operate', align: 'center', minWidth: 220 },
|
||||||
|
{ title: '事件描述', field: 'describe', align: 'center', minWidth: 200 },
|
||||||
|
{ title: '事件类型', field: 'type', align: 'center', minWidth: 160 },
|
||||||
|
{ title: '操作结果', field: 'type', align: 'center', minWidth: 100 },
|
||||||
|
{ title: '操作IP', field: 'ip', align: 'center', minWidth: 120 },
|
||||||
|
{ title: '事件等级', field: 'level', align: 'center', minWidth: 100 }
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
tableStore.table.params.loginName = ''
|
tableStore.table.params.loginName = ''
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="default-main">
|
<div class="default-main">
|
||||||
<div v-show="view">
|
<div v-show="view">
|
||||||
<TableHeader datePicker area showExport>
|
<TableHeader datePicker area showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="筛选数据">
|
<el-form-item label="筛选数据">
|
||||||
<el-input
|
<el-input
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<div class="default-main online">
|
<div class="default-main online">
|
||||||
|
|
||||||
<div class="online_header">
|
<div class="online_header">
|
||||||
<TableHeader date-picker ref="tableHeaderRef">
|
<TableHeader date-picker ref="tableHeaderRef" showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="统计类型">
|
<el-form-item label="统计类型">
|
||||||
<el-select v-model="formData.statisticalType" placeholder="请选择统计类型" value-key="id"
|
<el-select v-model="formData.statisticalType" placeholder="请选择统计类型" value-key="id"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="default-main">
|
<div class="default-main">
|
||||||
<TableHeader date-picker area showExport>
|
<TableHeader date-picker area showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="统计类型" v-if="false">
|
<el-form-item label="统计类型" v-if="false">
|
||||||
<el-select
|
<el-select
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="default-main">
|
<div class="default-main">
|
||||||
<TableHeader date-picker area showExport>
|
<TableHeader date-picker area showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="统计类型:" v-if="false">
|
<el-form-item label="统计类型:" v-if="false">
|
||||||
<el-select
|
<el-select
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="default-main">
|
<div class="default-main">
|
||||||
|
|
||||||
<TableHeader date-picker area showExport>
|
<TableHeader date-picker area showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<!-- <el-form-item label="统计类型:">
|
<!-- <el-form-item label="统计类型:">
|
||||||
<el-select v-model="tableStore.table.params.statisticalType" placeholder="请选择统计类型" value-key="id">
|
<el-select v-model="tableStore.table.params.statisticalType" placeholder="请选择统计类型" value-key="id">
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
用采数据列表
|
用采数据列表
|
||||||
<back-component />
|
<back-component />
|
||||||
</div>
|
</div>
|
||||||
<TableHeader :showReset="false" ref="TableHeaderRef">
|
<TableHeader :showReset="false" ref="TableHeaderRef" showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="筛选数据">
|
<el-form-item label="筛选数据">
|
||||||
<el-input v-model="tableStore.table.params.searchValue" clearable placeholder="请输入关键字" maxlength="32" show-word-limit/>
|
<el-input v-model="tableStore.table.params.searchValue" clearable placeholder="请输入关键字" maxlength="32" show-word-limit/>
|
||||||
@@ -63,6 +63,10 @@ const tableStore = new TableStore({
|
|||||||
method: 'POST',
|
method: 'POST',
|
||||||
publicHeight: 52,
|
publicHeight: 52,
|
||||||
column: [
|
column: [
|
||||||
|
{ title: '序号', field: 'index', width: 80, formatter: (row: any) => {
|
||||||
|
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
||||||
|
}
|
||||||
|
},
|
||||||
{ title: '表名', field: 'name' },
|
{ title: '表名', field: 'name' },
|
||||||
{ title: '起始时间', field: 'startTime' },
|
{ title: '起始时间', field: 'startTime' },
|
||||||
{ title: '截止时间', field: 'endTime' },
|
{ title: '截止时间', field: 'endTime' },
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="dialogVisible" draggable title="完整性不足详情" width="1000">
|
<el-dialog v-model="dialogVisible" draggable title="完整性不足详情" width="1000">
|
||||||
<TableHeader :showReset="false" ref="TableHeaderRef">
|
<TableHeader :showReset="false" ref="TableHeaderRef" showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="筛选数据">
|
<el-form-item label="筛选数据">
|
||||||
<el-input v-model="tableStore.table.params.searchValue" clearable placeholder="请输入关键字" />
|
<el-input v-model="tableStore.table.params.searchValue" clearable placeholder="请输入关键字" />
|
||||||
@@ -27,6 +27,10 @@ const tableStore = new TableStore({
|
|||||||
method: 'POST',
|
method: 'POST',
|
||||||
publicHeight: 547,
|
publicHeight: 547,
|
||||||
column: [
|
column: [
|
||||||
|
{ title: '序号', field: 'index', width: 80, formatter: (row: any) => {
|
||||||
|
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
||||||
|
}
|
||||||
|
},
|
||||||
{ title: '数据名', field: 'name' },
|
{ title: '数据名', field: 'name' },
|
||||||
{ title: '用户名', field: 'userName' },
|
{ title: '用户名', field: 'userName' },
|
||||||
{ title: '测量点局号', field: 'lineNo' },
|
{ title: '测量点局号', field: 'lineNo' },
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="default-main">
|
<div class="default-main">
|
||||||
<!-- 模版 -->
|
<!-- 模版 -->
|
||||||
<TableHeader datePicker showExport :showReset="false" ref="TableHeaderRef">
|
<TableHeader datePicker showExport :showReset="false" ref="TableHeaderRef" showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<!-- <el-form-item label="筛选数据">
|
<!-- <el-form-item label="筛选数据">
|
||||||
<el-input v-model="tableStore.table.params.searchValue" clearable placeholder="请输入关键字" />
|
<el-input v-model="tableStore.table.params.searchValue" clearable placeholder="请输入关键字" />
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="default-main">
|
<div class="default-main">
|
||||||
|
|
||||||
<TableHeader datePicker area showExport>
|
<TableHeader datePicker area showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<!-- <el-form-item label="统计类型:">
|
<!-- <el-form-item label="统计类型:">
|
||||||
<el-select v-model="tableStore.table.params.statisticalType" placeholder="请选择统计类型" value-key="id">
|
<el-select v-model="tableStore.table.params.statisticalType" placeholder="请选择统计类型" value-key="id">
|
||||||
@@ -67,13 +67,13 @@ const tableStore = new TableStore({
|
|||||||
|
|
||||||
column: [
|
column: [
|
||||||
{ field: 'index', title: '序号', width: '80', formatter: (row: any) => { return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1 } },
|
{ field: 'index', title: '序号', width: '80', formatter: (row: any) => { return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1 } },
|
||||||
{ field: 'provinceCompany', title: '地级区', minWidth: "150px", },
|
{ field: 'provinceCompany', title: '地级市', minWidth: "150px", },
|
||||||
{ field: 'cityCompany', title: '供电公司', minWidth: "150px", },
|
/* { field: 'cityCompany', title: '供电公司', minWidth: "150px", },*/
|
||||||
{ field: 'subName', title: '变电站', minWidth: "150px", },
|
{ field: 'subName', title: '变电站', minWidth: "150px", },
|
||||||
{ field: 'lineScale', title: '电压等级', minWidth: "120px", },
|
|
||||||
{ field: 'lineName', title: '监测点名称', minWidth: "150px", },
|
|
||||||
{ field: 'loadType', title: '干扰源类型', minWidth: "150px", },
|
|
||||||
{ field: 'lineObjectName', title: '监测点对象名称', minWidth: "180px", formatter: (row: any) => { return row.cellValue == null ? '/' : row.cellValue } },
|
{ field: 'lineObjectName', title: '监测点对象名称', minWidth: "180px", formatter: (row: any) => { return row.cellValue == null ? '/' : row.cellValue } },
|
||||||
|
{ field: 'lineName', title: '监测点名称', minWidth: "150px", },
|
||||||
|
{ field: 'lineScale', title: '电压等级', minWidth: "120px", },
|
||||||
|
{ field: 'loadType', title: '干扰源类型', minWidth: "150px", },
|
||||||
{ field: 'overDay', title: '超标天数', minWidth: "80px", },
|
{ field: 'overDay', title: '超标天数', minWidth: "80px", },
|
||||||
{ field: 'freqOverDay', title: '频率偏差', minWidth: "100px", },
|
{ field: 'freqOverDay', title: '频率偏差', minWidth: "100px", },
|
||||||
{ field: 'volDevOverDay', title: '电压偏差', minWidth: "100px", },
|
{ field: 'volDevOverDay', title: '电压偏差', minWidth: "100px", },
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<TableHeader datePicker area ref="TableHeaderRef" showExport>
|
<TableHeader datePicker area ref="TableHeaderRef" showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="统计类型">
|
<el-form-item label="统计类型">
|
||||||
<el-select
|
<el-select
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="default-main">
|
<div class="default-main">
|
||||||
<TableHeader datePicker area showExport>
|
<TableHeader datePicker area showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="统计类型">
|
<el-form-item label="统计类型">
|
||||||
<el-select
|
<el-select
|
||||||
|
|||||||
@@ -159,18 +159,19 @@
|
|||||||
</template>
|
</template>
|
||||||
</vxe-column>
|
</vxe-column>
|
||||||
<vxe-column field="cit" title="所在地市" minWidth="110px"></vxe-column>
|
<vxe-column field="cit" title="所在地市" minWidth="110px"></vxe-column>
|
||||||
<vxe-column field="company" title="供电公司" minWidth="110px"></vxe-column>
|
<vxe-column v-if="!IS_LN" field="company" title="供电公司" minWidth="110px"></vxe-column>
|
||||||
<vxe-column field="subStation" title="变电站" minWidth="110px"></vxe-column>
|
<vxe-column field="subStation" title="变电站" minWidth="110px"></vxe-column>
|
||||||
<vxe-column field="manufacturer" title="终端厂家" minWidth="110px"></vxe-column>
|
<vxe-column field="manufacturer" title="终端厂家" minWidth="110px"></vxe-column>
|
||||||
<vxe-column field="deviceName" title="终端名称" minWidth="130px"></vxe-column>
|
<vxe-column field="deviceName" title="终端名称" minWidth="130px"></vxe-column>
|
||||||
<vxe-column field="ip" title="终端IP" :formatter="formatter" width="120px"></vxe-column>
|
<vxe-column field="ip" title="终端IP" :formatter="formatter" width="120px"></vxe-column>
|
||||||
|
<vxe-column v-if="VITE_FLAG" field="objName" title="监测对象" minWidth="130px"></vxe-column>
|
||||||
<vxe-column
|
<vxe-column
|
||||||
field="lineName"
|
field="lineName"
|
||||||
title="监测点名称"
|
title="监测点名称"
|
||||||
:formatter="formatter"
|
:formatter="formatter"
|
||||||
minWidth="130px"
|
minWidth="130px"
|
||||||
></vxe-column>
|
></vxe-column>
|
||||||
<vxe-column v-if="VITE_FLAG" field="objName" title="监测对象" minWidth="130px"></vxe-column>
|
|
||||||
<vxe-column field="runFlag" title="运行状态" width="90px">
|
<vxe-column field="runFlag" title="运行状态" width="90px">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<el-tag
|
<el-tag
|
||||||
@@ -211,14 +212,14 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import TableStore from '@/utils/tableStore'
|
import TableStore from '@/utils/tableStore'
|
||||||
import Table from '@/components/table/index.vue'
|
|
||||||
import TableHeader from '@/components/table/header/index.vue'
|
import TableHeader from '@/components/table/header/index.vue'
|
||||||
import { onMounted, provide, ref, watch } from 'vue'
|
import { onMounted, provide, ref, watch } from 'vue'
|
||||||
import { defaultAttribute } from '@/components/table/defaultAttribute'
|
import { defaultAttribute } from '@/components/table/defaultAttribute'
|
||||||
import { useDictData } from '@/stores/dictData'
|
import { useDictData } from '@/stores/dictData'
|
||||||
import { mainHeight } from '@/utils/layout'
|
import { mainHeight } from '@/utils/layout'
|
||||||
import MyEchart from '@/components/echarts/MyEchart.vue'
|
import MyEchart from '@/components/echarts/MyEchart.vue'
|
||||||
import { getMonitorVerifyDay } from '@/api/device-boot/dataVerify'
|
const IS_LN = import.meta.env.VITE_NAME == 'LN' || import.meta.env.VITE_NAME == 'LNqr'
|
||||||
|
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: 'harmonic-boot/harmonic/getIntegrityData'
|
name: 'harmonic-boot/harmonic/getIntegrityData'
|
||||||
})
|
})
|
||||||
@@ -338,21 +339,19 @@ const echart = () => {
|
|||||||
z: 0,
|
z: 0,
|
||||||
zlevel: 0,
|
zlevel: 0,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
color: {
|
||||||
color: {
|
type: 'linear',
|
||||||
type: 'linear',
|
x: 0,
|
||||||
x: 0,
|
y: 0,
|
||||||
y: 0,
|
x2: 1,
|
||||||
x2: 1,
|
y2: 0,
|
||||||
y2: 0,
|
colorStops: [
|
||||||
colorStops: [
|
{
|
||||||
{
|
offset: 1,
|
||||||
offset: 1,
|
color: '#FF9100' // 100% 处的颜色
|
||||||
color: '#FF9100' // 100% 处的颜色
|
}
|
||||||
}
|
],
|
||||||
],
|
global: false // 缺省为 false
|
||||||
global: false // 缺省为 false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -370,34 +369,30 @@ const echart = () => {
|
|||||||
z: 0,
|
z: 0,
|
||||||
zlevel: 0,
|
zlevel: 0,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
color: {
|
||||||
color: {
|
type: 'linear',
|
||||||
type: 'linear',
|
x: 0,
|
||||||
x: 0,
|
y: 0,
|
||||||
y: 0,
|
x2: 1,
|
||||||
x2: 1,
|
y2: 0,
|
||||||
y2: 0,
|
colorStops: [
|
||||||
colorStops: [
|
{
|
||||||
{
|
offset: 0,
|
||||||
offset: 0,
|
color: '#57bc6e' // 0% 处的颜色
|
||||||
color: '#57bc6e' // 0% 处的颜色
|
},
|
||||||
},
|
{
|
||||||
{
|
offset: 1,
|
||||||
offset: 1,
|
color: '#57bc6e' // 100% 处的颜色
|
||||||
color: '#57bc6e' // 100% 处的颜色
|
}
|
||||||
}
|
],
|
||||||
],
|
global: false // 缺省为 false
|
||||||
global: false // 缺省为 false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'pictorialBar',
|
type: 'pictorialBar',
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
color: '#fff'
|
||||||
color: '#fff'
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
symbolRepeat: 50,
|
symbolRepeat: 50,
|
||||||
// symbolMargin: 300,
|
// symbolMargin: 300,
|
||||||
@@ -418,11 +413,9 @@ const echart = () => {
|
|||||||
barWidth: 18,
|
barWidth: 18,
|
||||||
|
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
color: 'transparent',
|
||||||
color: 'transparent',
|
borderColor: 'rgb(148,217,249)',
|
||||||
barBorderColor: 'rgb(148,217,249)',
|
borderWidth: 1
|
||||||
barBorderWidth: 1
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
z: 2
|
z: 2
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<TableHeader area datePicker ref="TableHeaderRef">
|
<TableHeader area datePicker ref="TableHeaderRef" showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="筛选数据">
|
<el-form-item label="筛选数据">
|
||||||
<el-input v-model="tableStore.table.params.filterName" @keyup="searchEvent" placeholder="输入关键字筛选" />
|
<el-input v-model="tableStore.table.params.filterName" @keyup="searchEvent" placeholder="输入关键字筛选" />
|
||||||
|
|||||||
@@ -157,12 +157,12 @@
|
|||||||
</template>
|
</template>
|
||||||
</vxe-column>
|
</vxe-column>
|
||||||
<vxe-column field="cit" title="所在地市" width="110px"></vxe-column>
|
<vxe-column field="cit" title="所在地市" width="110px"></vxe-column>
|
||||||
<vxe-column field="company" title="供电公司" minWidth="110px"></vxe-column>
|
<vxe-column v-if="!IS_LN" field="company" title="供电公司" minWidth="100px"></vxe-column>
|
||||||
<vxe-column field="subStation" title="变电站" minWidth="110px"></vxe-column>
|
<vxe-column field="subStation" title="变电站" minWidth="100px"></vxe-column>
|
||||||
<vxe-column field="manufacturer" title="终端厂家" minWidth="110px"></vxe-column>
|
<vxe-column field="manufacturer" title="终端厂家" minWidth="90px"></vxe-column>
|
||||||
<vxe-column field="deviceName" title="终端名称" minWidth="130px"></vxe-column>
|
<vxe-column field="deviceName" title="终端名称" minWidth="100px"></vxe-column>
|
||||||
<vxe-column field="ip" title="终端IP" :formatter="formatter" width="120px"></vxe-column>
|
<vxe-column field="ip" title="终端IP" :formatter="formatter" width="120px"></vxe-column>
|
||||||
|
<vxe-column field="timeID" title="最新数据时间" :formatter="formatter" width="160px"></vxe-column>
|
||||||
<vxe-column field="runFlag" title="运行状态" width="90px">
|
<vxe-column field="runFlag" title="运行状态" width="90px">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<el-tag
|
<el-tag
|
||||||
@@ -182,6 +182,19 @@
|
|||||||
</el-tag>
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</vxe-column>
|
</vxe-column>
|
||||||
|
<vxe-column field="comFlag" title="通讯状态" width="90px">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-tag
|
||||||
|
:type="
|
||||||
|
row.comFlag == '正常'
|
||||||
|
? 'success'
|
||||||
|
: 'danger'
|
||||||
|
"
|
||||||
|
>
|
||||||
|
{{ row.comFlag }}
|
||||||
|
</el-tag>
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
<vxe-column field="onlineRate" title="在线率(%)" width="90px"></vxe-column>
|
<vxe-column field="onlineRate" title="在线率(%)" width="90px"></vxe-column>
|
||||||
</vxe-table>
|
</vxe-table>
|
||||||
</div>
|
</div>
|
||||||
@@ -201,16 +214,14 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
// import '@/assets/font/iconfont.css'
|
|
||||||
import TableStore from '@/utils/tableStore'
|
import TableStore from '@/utils/tableStore'
|
||||||
import Table from '@/components/table/index.vue'
|
|
||||||
import TableHeader from '@/components/table/header/index.vue'
|
import TableHeader from '@/components/table/header/index.vue'
|
||||||
import { onMounted, provide, ref } from 'vue'
|
import { onMounted, provide, ref } from 'vue'
|
||||||
import { defaultAttribute } from '@/components/table/defaultAttribute'
|
import { defaultAttribute } from '@/components/table/defaultAttribute'
|
||||||
import { useDictData } from '@/stores/dictData'
|
import { useDictData } from '@/stores/dictData'
|
||||||
import { mainHeight } from '@/utils/layout'
|
import { mainHeight } from '@/utils/layout'
|
||||||
import MyEchart from '@/components/echarts/MyEchart.vue'
|
import MyEchart from '@/components/echarts/MyEchart.vue'
|
||||||
import { getMonitorVerifyDay } from '@/api/device-boot/dataVerify'
|
const IS_LN = import.meta.env.VITE_NAME == 'LN' || import.meta.env.VITE_NAME == 'LNqr'
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: 'harmonic-boot/harmonic/getIntegrityData'
|
name: 'harmonic-boot/harmonic/getIntegrityData'
|
||||||
})
|
})
|
||||||
@@ -335,21 +346,19 @@ const echart = () => {
|
|||||||
z: 0,
|
z: 0,
|
||||||
zlevel: 0,
|
zlevel: 0,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
color: {
|
||||||
color: {
|
type: 'linear',
|
||||||
type: 'linear',
|
x: 0,
|
||||||
x: 0,
|
y: 0,
|
||||||
y: 0,
|
x2: 1,
|
||||||
x2: 1,
|
y2: 0,
|
||||||
y2: 0,
|
colorStops: [
|
||||||
colorStops: [
|
{
|
||||||
{
|
offset: 1,
|
||||||
offset: 1,
|
color: '#FF9100' // 100% 处的颜色
|
||||||
color: '#FF9100' // 100% 处的颜色
|
}
|
||||||
}
|
],
|
||||||
],
|
global: false // 缺省为 false
|
||||||
global: false // 缺省为 false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -361,34 +370,30 @@ const echart = () => {
|
|||||||
z: 0,
|
z: 0,
|
||||||
zlevel: 0,
|
zlevel: 0,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
color: {
|
||||||
color: {
|
type: 'linear',
|
||||||
type: 'linear',
|
x: 0,
|
||||||
x: 0,
|
y: 0,
|
||||||
y: 0,
|
x2: 1,
|
||||||
x2: 1,
|
y2: 0,
|
||||||
y2: 0,
|
colorStops: [
|
||||||
colorStops: [
|
{
|
||||||
{
|
offset: 0,
|
||||||
offset: 0,
|
color: '#57bc6e' // 0% 处的颜色
|
||||||
color: '#57bc6e' // 0% 处的颜色
|
},
|
||||||
},
|
{
|
||||||
{
|
offset: 1,
|
||||||
offset: 1,
|
color: '#57bc6e' // 100% 处的颜色
|
||||||
color: '#57bc6e' // 100% 处的颜色
|
}
|
||||||
}
|
],
|
||||||
],
|
global: false // 缺省为 false
|
||||||
global: false // 缺省为 false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'pictorialBar',
|
type: 'pictorialBar',
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
color: '#fff'
|
||||||
color: '#fff'
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
symbolRepeat: 50,
|
symbolRepeat: 50,
|
||||||
// symbolMargin: 300,
|
// symbolMargin: 300,
|
||||||
@@ -409,11 +414,9 @@ const echart = () => {
|
|||||||
barWidth: 18,
|
barWidth: 18,
|
||||||
|
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
color: 'transparent',
|
||||||
color: 'transparent',
|
borderColor: 'rgb(148,217,249)',
|
||||||
barBorderColor: 'rgb(148,217,249)',
|
borderWidth: 1
|
||||||
barBorderWidth: 1
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
z: 2
|
z: 2
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<TableHeader datePicker ref="TableHeaderRef">
|
<TableHeader datePicker ref="TableHeaderRef" >
|
||||||
<template v-slot:select>
|
<template v-slot:select>
|
||||||
<el-form-item label="超标指标">
|
<el-form-item label="超标指标">
|
||||||
<el-select
|
<el-select
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
<el-tab-pane label="告警数据统计" name="5" lazy v-if="!isReload && VITE_FLAG">
|
<el-tab-pane label="告警数据统计" name="5" lazy v-if="!isReload && VITE_FLAG">
|
||||||
<Gaojingshujutongji v-if="activeName == '5'" />
|
<Gaojingshujutongji v-if="activeName == '5'" />
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="监测点运行状态" name="6" lazy v-if="!isReload">
|
<el-tab-pane label="监测点运行状态" name="6" lazy v-if="!isReload && !VITE_FLAG1 && !IS_LNQR">
|
||||||
<Yunxingzhuangtai v-if="activeName == '6'" />
|
<Yunxingzhuangtai v-if="activeName == '6'" />
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="实时数据" name="7" lazy v-if="!isReload && !VITE_FLAG1 && !IS_LNQR">
|
<el-tab-pane label="实时数据" name="7" lazy v-if="!isReload && !VITE_FLAG1 && !IS_LNQR">
|
||||||
|
|||||||
@@ -10,30 +10,53 @@
|
|||||||
<DatePicker ref="datePickerRef" :theCurrentTime="true"></DatePicker>
|
<DatePicker ref="datePickerRef" :theCurrentTime="true"></DatePicker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="指标类型:">
|
<el-form-item label="指标类型:">
|
||||||
<el-select v-model="formData.condition" multiple collapse-tags :multiple-limit="checked ? 1 : 3"
|
<el-select
|
||||||
filterable placeholder="请选择指标" @change="conditionChange">
|
v-model="formData.condition"
|
||||||
|
multiple
|
||||||
|
collapse-tags
|
||||||
|
:multiple-limit="checked ? 1 : 3"
|
||||||
|
filterable
|
||||||
|
placeholder="请选择指标"
|
||||||
|
@change="conditionChange"
|
||||||
|
>
|
||||||
<el-option-group v-for="group in indexOptions" :key="group.label" :label="group.label">
|
<el-option-group v-for="group in indexOptions" :key="group.label" :label="group.label">
|
||||||
<el-option v-for="item in group.options" :key="item.value" :label="item.label"
|
<el-option
|
||||||
:value="item.value"></el-option>
|
v-for="item in group.options"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
></el-option>
|
||||||
</el-option-group>
|
</el-option-group>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="数值类型:">
|
<el-form-item label="数值类型:">
|
||||||
<el-select style="width: 100%" v-model="formData.valueType" placeholder="请选择类型">
|
<el-select style="width: 100%" v-model="formData.valueType" placeholder="请选择类型">
|
||||||
<el-option v-for="item in typeOptions" :key="item.value" :label="item.label"
|
<el-option
|
||||||
:value="item.value"></el-option>
|
v-for="item in typeOptions"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="谐波次数:" v-show="showXieBoCiShu">
|
<el-form-item label="谐波次数:" v-show="showXieBoCiShu">
|
||||||
<el-select style="width: 100%" v-model="formData.harmonic" placeholder="请选择谐波">
|
<el-select style="width: 100%" v-model="formData.harmonic" placeholder="请选择谐波">
|
||||||
<el-option v-for="item in harmonicOptions" :key="item.value" :label="item.label"
|
<el-option
|
||||||
:value="item.value"></el-option>
|
v-for="item in harmonicOptions"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item v-show="showJianXieBoCiShu" label="间谐波次数:">
|
<el-form-item v-show="showJianXieBoCiShu" label="间谐波次数:">
|
||||||
<el-select style="width: 100%" v-model="formData.inHarmonic" placeholder="请选择间谐波">
|
<el-select style="width: 100%" v-model="formData.inHarmonic" placeholder="请选择间谐波">
|
||||||
<el-option v-for="item in inharmonicOptions" :key="item.value" :label="item.label"
|
<el-option
|
||||||
:value="item.value"></el-option>
|
v-for="item in inharmonicOptions"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
@@ -44,10 +67,21 @@
|
|||||||
<!-- <el-form :inline="true">
|
<!-- <el-form :inline="true">
|
||||||
|
|
||||||
</el-form> -->
|
</el-form> -->
|
||||||
<div id="canvas" class="mt10" :style="height1" style="overflow-y: auto; overflow-x: hidden"
|
<div
|
||||||
v-loading="loading">
|
id="canvas"
|
||||||
<my-echart :options="item.option" v-for="item in list" style="min-height: 190px" :style="height"
|
class="mt10"
|
||||||
@triggerPoint="triggerPoint" @group="group" />
|
:style="height1"
|
||||||
|
style="overflow-y: auto; overflow-x: hidden"
|
||||||
|
v-loading="loading"
|
||||||
|
>
|
||||||
|
<my-echart
|
||||||
|
:options="item.option"
|
||||||
|
v-for="item in list"
|
||||||
|
style="min-height: 190px"
|
||||||
|
:style="height"
|
||||||
|
@triggerPoint="triggerPoint"
|
||||||
|
@group="group"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div :style="{ height: pageHeight.height }" style="padding: 10px; overflow: hidden" v-if="!view">
|
<div :style="{ height: pageHeight.height }" style="padding: 10px; overflow: hidden" v-if="!view">
|
||||||
@@ -72,7 +106,7 @@ import html2canvas from 'html2canvas'
|
|||||||
import { ElMessage } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
import { yMethod, completeTimeSeries } from '@/utils/echartMethod'
|
import { yMethod, completeTimeSeries } from '@/utils/echartMethod'
|
||||||
import * as echarts from 'echarts' // 全引入
|
import * as echarts from 'echarts' // 全引入
|
||||||
import { min } from 'xe-utils'
|
|
||||||
const datePickerRef = ref()
|
const datePickerRef = ref()
|
||||||
const monitoringPoint = useMonitoringPoint()
|
const monitoringPoint = useMonitoringPoint()
|
||||||
const checked = ref(monitoringPoint.state.showCheckBox)
|
const checked = ref(monitoringPoint.state.showCheckBox)
|
||||||
@@ -198,8 +232,8 @@ const shujuchuli = (res: any) => {
|
|||||||
let cvalue = []
|
let cvalue = []
|
||||||
let topLimit = []
|
let topLimit = []
|
||||||
let lowerLimit = []
|
let lowerLimit = []
|
||||||
item.maxValue = (item.topLimit > item.maxValue ? item.topLimit : item.maxValue)
|
item.maxValue = item.topLimit > item.maxValue ? item.topLimit : item.maxValue
|
||||||
item.minValue = (item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue)
|
item.minValue = item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
for (let j = 0; j < item.value.length; j++) {
|
for (let j = 0; j < item.value.length; j++) {
|
||||||
@@ -234,12 +268,7 @@ const shujuchuli = (res: any) => {
|
|||||||
//不存在一个暂降点或1个 //处理暂降点
|
//不存在一个暂降点或1个 //处理暂降点
|
||||||
if (item.eventDetail.length > 0) {
|
if (item.eventDetail.length > 0) {
|
||||||
for (let k = 0; k < item.eventDetail.length; k++) {
|
for (let k = 0; k < item.eventDetail.length; k++) {
|
||||||
chufa.push([
|
chufa.push([item.eventDetail[k].time, (0).toFixed(3), item.eventDetail[k].id, 99])
|
||||||
item.eventDetail[k].time,
|
|
||||||
(0).toFixed(3),
|
|
||||||
item.eventDetail[k].id,
|
|
||||||
99
|
|
||||||
])
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let shuju = {
|
let shuju = {
|
||||||
@@ -267,8 +296,8 @@ const shujuchuli = (res: any) => {
|
|||||||
let gvalue = []
|
let gvalue = []
|
||||||
let topLimit = []
|
let topLimit = []
|
||||||
let lowerLimit = []
|
let lowerLimit = []
|
||||||
item.maxValue = (item.topLimit > item.maxValue ? item.topLimit : item.maxValue)
|
item.maxValue = item.topLimit > item.maxValue ? item.topLimit : item.maxValue
|
||||||
item.minValue = (item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue)
|
item.minValue = item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
for (let j = 0; j < item.value.length; j++) {
|
for (let j = 0; j < item.value.length; j++) {
|
||||||
@@ -289,12 +318,7 @@ const shujuchuli = (res: any) => {
|
|||||||
//不存在一个暂降点或1个 //处理暂降点
|
//不存在一个暂降点或1个 //处理暂降点
|
||||||
if (item.eventDetail.length > 0) {
|
if (item.eventDetail.length > 0) {
|
||||||
for (let k = 0; k < item.eventDetail.length; k++) {
|
for (let k = 0; k < item.eventDetail.length; k++) {
|
||||||
chufa.push([
|
chufa.push([item.eventDetail[k].time, (0).toFixed(3), item.eventDetail[k].id, 99])
|
||||||
item.eventDetail[k].time,
|
|
||||||
(0).toFixed(3),
|
|
||||||
item.eventDetail[k].id,
|
|
||||||
99
|
|
||||||
])
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let shuju = {
|
let shuju = {
|
||||||
@@ -345,7 +369,7 @@ const shujuchuli = (res: any) => {
|
|||||||
let bvalue = []
|
let bvalue = []
|
||||||
let cvalue = []
|
let cvalue = []
|
||||||
let topLimit = []
|
let topLimit = []
|
||||||
item.maxValue = (item.topLimit > item.maxValue ? item.topLimit : item.maxValue)
|
item.maxValue = item.topLimit > item.maxValue ? item.topLimit : item.maxValue
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
for (let j = 0; j < item.value.length; j++) {
|
for (let j = 0; j < item.value.length; j++) {
|
||||||
@@ -379,12 +403,7 @@ const shujuchuli = (res: any) => {
|
|||||||
//不存在一个暂降点或1个 //处理暂降点
|
//不存在一个暂降点或1个 //处理暂降点
|
||||||
if (item.eventDetail.length > 0) {
|
if (item.eventDetail.length > 0) {
|
||||||
for (let k = 0; k < item.eventDetail.length; k++) {
|
for (let k = 0; k < item.eventDetail.length; k++) {
|
||||||
chufa.push([
|
chufa.push([item.eventDetail[k].time, (0).toFixed(3), item.eventDetail[k].id, 99])
|
||||||
item.eventDetail[k].time,
|
|
||||||
(0).toFixed(3),
|
|
||||||
item.eventDetail[k].id,
|
|
||||||
99
|
|
||||||
])
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let shuju = {
|
let shuju = {
|
||||||
@@ -409,7 +428,7 @@ const shujuchuli = (res: any) => {
|
|||||||
if (item.phaiscType.length == 3) {
|
if (item.phaiscType.length == 3) {
|
||||||
let gvalue = []
|
let gvalue = []
|
||||||
let topLimit = []
|
let topLimit = []
|
||||||
item.maxValue = (item.topLimit > item.maxValue ? item.topLimit : item.maxValue)
|
item.maxValue = item.topLimit > item.maxValue ? item.topLimit : item.maxValue
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
for (let j = 0; j < item.value.length; j++) {
|
for (let j = 0; j < item.value.length; j++) {
|
||||||
@@ -479,7 +498,7 @@ const shujuchuli = (res: any) => {
|
|||||||
let bvalue = []
|
let bvalue = []
|
||||||
let cvalue = []
|
let cvalue = []
|
||||||
let lowerLimit = []
|
let lowerLimit = []
|
||||||
item.minValue = (item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue)
|
item.minValue = item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
for (let j = 0; j < item.value.length; j++) {
|
for (let j = 0; j < item.value.length; j++) {
|
||||||
@@ -538,7 +557,7 @@ const shujuchuli = (res: any) => {
|
|||||||
if (item.phaiscType.length == 3) {
|
if (item.phaiscType.length == 3) {
|
||||||
let gvalue = []
|
let gvalue = []
|
||||||
let lowerLimit = []
|
let lowerLimit = []
|
||||||
item.minValue = (item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue)
|
item.minValue = item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
for (let j = 0; j < item.value.length; j++) {
|
for (let j = 0; j < item.value.length; j++) {
|
||||||
@@ -599,7 +618,6 @@ const shujuchuli = (res: any) => {
|
|||||||
}
|
}
|
||||||
//无限值
|
//无限值
|
||||||
if (item.topLimit == 0 && item.lowerLimit == 0) {
|
if (item.topLimit == 0 && item.lowerLimit == 0) {
|
||||||
|
|
||||||
if (item.minValue !== null && item.maxValue !== null) {
|
if (item.minValue !== null && item.maxValue !== null) {
|
||||||
//最小值等于下限值
|
//最小值等于下限值
|
||||||
//图列为A,B,C,暂降
|
//图列为A,B,C,暂降
|
||||||
@@ -638,12 +656,7 @@ const shujuchuli = (res: any) => {
|
|||||||
//不存在一个暂降点或1个 //处理暂降点
|
//不存在一个暂降点或1个 //处理暂降点
|
||||||
if (item.eventDetail.length > 0) {
|
if (item.eventDetail.length > 0) {
|
||||||
for (let k = 0; k < item.eventDetail.length; k++) {
|
for (let k = 0; k < item.eventDetail.length; k++) {
|
||||||
chufa.push([
|
chufa.push([item.eventDetail[k].time, (0).toFixed(3), item.eventDetail[k].id, 99])
|
||||||
item.eventDetail[k].time,
|
|
||||||
(0).toFixed(3),
|
|
||||||
item.eventDetail[k].id,
|
|
||||||
99
|
|
||||||
])
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let shuju = {
|
let shuju = {
|
||||||
@@ -683,12 +696,7 @@ const shujuchuli = (res: any) => {
|
|||||||
//不存在一个暂降点或1个 //处理暂降点
|
//不存在一个暂降点或1个 //处理暂降点
|
||||||
if (item.eventDetail.length > 0) {
|
if (item.eventDetail.length > 0) {
|
||||||
for (let k = 0; k < item.eventDetail.length; k++) {
|
for (let k = 0; k < item.eventDetail.length; k++) {
|
||||||
chufa.push([
|
chufa.push([item.eventDetail[k].time, (0).toFixed(3), item.eventDetail[k].id, 99])
|
||||||
item.eventDetail[k].time,
|
|
||||||
(0).toFixed(3),
|
|
||||||
item.eventDetail[k].id,
|
|
||||||
99
|
|
||||||
])
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let shuju = {
|
let shuju = {
|
||||||
@@ -740,8 +748,8 @@ const shujuchuli = (res: any) => {
|
|||||||
let cvalue = []
|
let cvalue = []
|
||||||
let topLimit = []
|
let topLimit = []
|
||||||
let lowerLimit = []
|
let lowerLimit = []
|
||||||
item.maxValue = (item.topLimit > item.maxValue ? item.topLimit : item.maxValue)
|
item.maxValue = item.topLimit > item.maxValue ? item.topLimit : item.maxValue
|
||||||
item.minValue = (item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue)
|
item.minValue = item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
for (let j = 0; j < item.value.length; j++) {
|
for (let j = 0; j < item.value.length; j++) {
|
||||||
@@ -796,8 +804,8 @@ const shujuchuli = (res: any) => {
|
|||||||
let gvalue = []
|
let gvalue = []
|
||||||
let topLimit = []
|
let topLimit = []
|
||||||
let lowerLimit = []
|
let lowerLimit = []
|
||||||
item.maxValue = (item.topLimit > item.maxValue ? item.topLimit : item.maxValue)
|
item.maxValue = item.topLimit > item.maxValue ? item.topLimit : item.maxValue
|
||||||
item.minValue = (item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue)
|
item.minValue = item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
for (let j = 0; j < item.value.length; j++) {
|
for (let j = 0; j < item.value.length; j++) {
|
||||||
@@ -863,7 +871,7 @@ const shujuchuli = (res: any) => {
|
|||||||
let bvalue = []
|
let bvalue = []
|
||||||
let cvalue = []
|
let cvalue = []
|
||||||
let topLimit = []
|
let topLimit = []
|
||||||
item.maxValue = (item.topLimit > item.maxValue ? item.topLimit : item.maxValue)
|
item.maxValue = item.topLimit > item.maxValue ? item.topLimit : item.maxValue
|
||||||
// item.minValue=item.lowerLimit
|
// item.minValue=item.lowerLimit
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
@@ -916,7 +924,7 @@ const shujuchuli = (res: any) => {
|
|||||||
if (item.phaiscType.length == 2) {
|
if (item.phaiscType.length == 2) {
|
||||||
let gvalue = []
|
let gvalue = []
|
||||||
let topLimit = []
|
let topLimit = []
|
||||||
item.maxValue = (item.topLimit > item.maxValue ? item.topLimit : item.maxValue)
|
item.maxValue = item.topLimit > item.maxValue ? item.topLimit : item.maxValue
|
||||||
// item.minValue=item.lowerLimit
|
// item.minValue=item.lowerLimit
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
@@ -981,7 +989,7 @@ const shujuchuli = (res: any) => {
|
|||||||
let cvalue = []
|
let cvalue = []
|
||||||
let lowerLimit = []
|
let lowerLimit = []
|
||||||
// item.maxValue=item.topLimit
|
// item.maxValue=item.topLimit
|
||||||
item.minValue = (item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue)
|
item.minValue = item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
for (let j = 0; j < item.value.length; j++) {
|
for (let j = 0; j < item.value.length; j++) {
|
||||||
@@ -1034,7 +1042,7 @@ const shujuchuli = (res: any) => {
|
|||||||
let gvalue = []
|
let gvalue = []
|
||||||
let lowerLimit = []
|
let lowerLimit = []
|
||||||
// item.maxValue=item.topLimit
|
// item.maxValue=item.topLimit
|
||||||
item.minValue = (item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue)
|
item.minValue = item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
for (let j = 0; j < item.value.length; j++) {
|
for (let j = 0; j < item.value.length; j++) {
|
||||||
@@ -1202,6 +1210,7 @@ const getSeriesDataValues = (data: any[]) => {
|
|||||||
.filter((v): v is number => v != null && !Number.isNaN(v))
|
.filter((v): v is number => v != null && !Number.isNaN(v))
|
||||||
}
|
}
|
||||||
const buildItemYAxis = (item: any) => {
|
const buildItemYAxis = (item: any) => {
|
||||||
|
console.log('🚀 ~ buildItemYAxis ~ item:', item)
|
||||||
if (item.useDualAxis && item.serise?.length) {
|
if (item.useDualAxis && item.serise?.length) {
|
||||||
const uniqueUnits = [...new Set(item.units.filter((u: string) => u != null && u !== ''))] as string[]
|
const uniqueUnits = [...new Set(item.units.filter((u: string) => u != null && u !== ''))] as string[]
|
||||||
const valuesByUnit: Record<string, number[]> = {}
|
const valuesByUnit: Record<string, number[]> = {}
|
||||||
@@ -1214,8 +1223,8 @@ const buildItemYAxis = (item: any) => {
|
|||||||
if (unit) valuesByUnit[unit].push(...getSeriesDataValues(s.data))
|
if (unit) valuesByUnit[unit].push(...getSeriesDataValues(s.data))
|
||||||
})
|
})
|
||||||
return uniqueUnits.map((unit, index) => {
|
return uniqueUnits.map((unit, index) => {
|
||||||
|
|
||||||
const [min, max] = yMethod(valuesByUnit[unit].length ? valuesByUnit[unit] : [0])
|
const [min, max] = yMethod(valuesByUnit[unit].length ? valuesByUnit[unit] : [0])
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type: 'value',
|
type: 'value',
|
||||||
min,
|
min,
|
||||||
@@ -1232,7 +1241,14 @@ const buildItemYAxis = (item: any) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
const values = item.value?.length ? item.value.map((k: any) => k[1]) : [0]
|
const values = item.value?.length ? item.value.map((k: any) => k[1]) : [0]
|
||||||
const [min, max] = yMethod([item.maxValue, item.minValue, ...values])
|
|
||||||
|
const [min, max] = yMethod([
|
||||||
|
item.maxValue,
|
||||||
|
item.minValue,
|
||||||
|
...values,
|
||||||
|
item.topLimit?.[0]?.[1] || null,
|
||||||
|
item.lowerLimit?.[0]?.[1] || null
|
||||||
|
])
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
type: 'value',
|
type: 'value',
|
||||||
@@ -1281,10 +1297,7 @@ const rendering = () => {
|
|||||||
|
|
||||||
let opitonserise: any[] = []
|
let opitonserise: any[] = []
|
||||||
item.legend.forEach((item2: any) => {
|
item.legend.forEach((item2: any) => {
|
||||||
if (
|
if (item.avalue !== undefined && (item2 == 'A相' || item2 == 'AB相' || item2.startsWith('零序电压'))) {
|
||||||
item.avalue !== undefined &&
|
|
||||||
(item2 == 'A相' || item2 == 'AB相' || item2.startsWith('零序电压'))
|
|
||||||
) {
|
|
||||||
let data = {
|
let data = {
|
||||||
name: item2,
|
name: item2,
|
||||||
symbol: 'none',
|
symbol: 'none',
|
||||||
@@ -1592,10 +1605,7 @@ const getEcharts = () => {
|
|||||||
let tips = ''
|
let tips = ''
|
||||||
tips += '时刻:' + params[0].data[0] + '</br/>'
|
tips += '时刻:' + params[0].data[0] + '</br/>'
|
||||||
for (let i = 0; i < params.length; i++) {
|
for (let i = 0; i < params.length; i++) {
|
||||||
|
|
||||||
|
|
||||||
if (params[i].seriesName == '暂态触发点') {
|
if (params[i].seriesName == '暂态触发点') {
|
||||||
|
|
||||||
tips += ''
|
tips += ''
|
||||||
|
|
||||||
return tips
|
return tips
|
||||||
@@ -1605,29 +1615,29 @@ const getEcharts = () => {
|
|||||||
params[i].marker + params[i].value[1] > 0
|
params[i].marker + params[i].value[1] > 0
|
||||||
? 'A相谐波电流方向:流入<br/>'
|
? 'A相谐波电流方向:流入<br/>'
|
||||||
: params[i].value[1] == 0
|
: params[i].value[1] == 0
|
||||||
? 'A相谐波电流方向:无<br/>'
|
? 'A相谐波电流方向:无<br/>'
|
||||||
: 'A相谐波电流方向:流出<br/>'
|
: 'A相谐波电流方向:流出<br/>'
|
||||||
} else if (params[i].seriesName == 'B相谐波电流方向') {
|
} else if (params[i].seriesName == 'B相谐波电流方向') {
|
||||||
tips +=
|
tips +=
|
||||||
params[i].marker + params[i].value[1] > 0
|
params[i].marker + params[i].value[1] > 0
|
||||||
? 'B相谐波电流方向:流入<br/>'
|
? 'B相谐波电流方向:流入<br/>'
|
||||||
: params[i].value[1] == 0
|
: params[i].value[1] == 0
|
||||||
? 'B相谐波电流方向:无<br/>'
|
? 'B相谐波电流方向:无<br/>'
|
||||||
: 'B相谐波电流方向:流出<br/>'
|
: 'B相谐波电流方向:流出<br/>'
|
||||||
} else if (params[i].seriesName == 'C相谐波电流方向') {
|
} else if (params[i].seriesName == 'C相谐波电流方向') {
|
||||||
tips +=
|
tips +=
|
||||||
params[i].marker + params[i].value[1] > 0
|
params[i].marker + params[i].value[1] > 0
|
||||||
? 'C相谐波电流方向:流入<br/>'
|
? 'C相谐波电流方向:流入<br/>'
|
||||||
: params[i].value[1] == 0
|
: params[i].value[1] == 0
|
||||||
? 'C相谐波电流方向:无<br/>'
|
? 'C相谐波电流方向:无<br/>'
|
||||||
: 'C相谐波电流方向:流出<br/>'
|
: 'C相谐波电流方向:流出<br/>'
|
||||||
} else if (params[i].seriesName == '总谐波电流方向') {
|
} else if (params[i].seriesName == '总谐波电流方向') {
|
||||||
tips +=
|
tips +=
|
||||||
params[i].marker + params[i].value[1] > 0
|
params[i].marker + params[i].value[1] > 0
|
||||||
? '总谐波电流方向:流入<br/>'
|
? '总谐波电流方向:流入<br/>'
|
||||||
: params[i].value[1] == 0
|
: params[i].value[1] == 0
|
||||||
? '总谐波电流方向:无<br/>'
|
? '总谐波电流方向:无<br/>'
|
||||||
: '总谐波电流方向:流出<br/>'
|
: '总谐波电流方向:流出<br/>'
|
||||||
} else if (params[i].seriesName.includes('正序电压')) {
|
} else if (params[i].seriesName.includes('正序电压')) {
|
||||||
let str = (params[i].value[1] * 1).toString()
|
let str = (params[i].value[1] * 1).toString()
|
||||||
let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g
|
let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g
|
||||||
@@ -1699,8 +1709,6 @@ const getEcharts = () => {
|
|||||||
':' +
|
':' +
|
||||||
(Number.isNaN(Number(str2)) ? '/' : str2) +
|
(Number.isNaN(Number(str2)) ? '/' : str2) +
|
||||||
'<br/>'
|
'<br/>'
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1908,7 +1916,6 @@ const getEcharts = () => {
|
|||||||
echarts.connect('group')
|
echarts.connect('group')
|
||||||
}
|
}
|
||||||
const conditionChange = () => {
|
const conditionChange = () => {
|
||||||
|
|
||||||
//判断一个指标时
|
//判断一个指标时
|
||||||
if (formData.condition.length == 1) {
|
if (formData.condition.length == 1) {
|
||||||
if (
|
if (
|
||||||
@@ -2045,7 +2052,6 @@ const conditionChange = () => {
|
|||||||
}
|
}
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
//console.log('🚀 ~ setTimeout ~ tableHeaderRef.value:', tableHeaderRef.value)
|
//console.log('🚀 ~ setTimeout ~ tableHeaderRef.value:', tableHeaderRef.value)
|
||||||
|
|
||||||
//tableHeaderRef.value && tableHeaderRef.value?.computedSearchRow()
|
//tableHeaderRef.value && tableHeaderRef.value?.computedSearchRow()
|
||||||
}, 100)
|
}, 100)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<!--业务用户管理界面-->
|
<!--业务用户管理界面-->
|
||||||
<template>
|
<template>
|
||||||
<div class="default-main">
|
<div class="default-main">
|
||||||
<TableHeader datePicker area showExport>
|
<TableHeader datePicker area showExport showCustomColumn>
|
||||||
<template v-slot:select>
|
<template v-slot:select>
|
||||||
<el-form-item label="筛选数据">
|
<el-form-item label="筛选数据">
|
||||||
<el-input
|
<el-input
|
||||||
|
|||||||
@@ -14,8 +14,8 @@
|
|||||||
<template v-slot:select>
|
<template v-slot:select>
|
||||||
<el-form-item >
|
<el-form-item >
|
||||||
<el-radio-group v-model="isStatisticData" @change="onStatisticDataChange">
|
<el-radio-group v-model="isStatisticData" @change="onStatisticDataChange">
|
||||||
<el-radio-button value="1">统计数据</el-radio-button>
|
<el-radio-button value="0">统计数据</el-radio-button>
|
||||||
<el-radio-button value="0">分钟数据</el-radio-button>
|
<el-radio-button value="1">分钟数据</el-radio-button>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="模板策略">
|
<el-form-item label="模板策略">
|
||||||
@@ -79,7 +79,7 @@ const dotList: any = ref({})
|
|||||||
const Template: any = ref({})
|
const Template: any = ref({})
|
||||||
const reportForm: any = ref('')
|
const reportForm: any = ref('')
|
||||||
const name = ref('')
|
const name = ref('')
|
||||||
const isStatisticData = ref('1')
|
const isStatisticData = ref('0')
|
||||||
const templatePolicy: any = ref([])
|
const templatePolicy: any = ref([])
|
||||||
const reportFormList: any = ref([
|
const reportFormList: any = ref([
|
||||||
{
|
{
|
||||||
@@ -103,8 +103,8 @@ const tableStore = new TableStore({
|
|||||||
tableStore.table.params.tempId = Template.value.id
|
tableStore.table.params.tempId = Template.value.id
|
||||||
tableStore.table.params.lineId = dotList.value.id
|
tableStore.table.params.lineId = dotList.value.id
|
||||||
name.value = dotList.value.name
|
name.value = dotList.value.name
|
||||||
if (Number(isStatisticData.value) === 0) {
|
if (Number(isStatisticData.value) === 1) {
|
||||||
tableStore.table.params.isStatisticData = 0
|
tableStore.table.params.isStatisticData = 1
|
||||||
} else {
|
} else {
|
||||||
delete tableStore.table.params.isStatisticData
|
delete tableStore.table.params.isStatisticData
|
||||||
}
|
}
|
||||||
@@ -163,7 +163,7 @@ const changetype = (val: any) => {
|
|||||||
const onStatisticDataChange = () => {
|
const onStatisticDataChange = () => {
|
||||||
TableHeaderRef.value?.setTheDate(3)
|
TableHeaderRef.value?.setTheDate(3)
|
||||||
if (dotList.value?.id) {
|
if (dotList.value?.id) {
|
||||||
// tableStore.index()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const selectChange = () => {
|
const selectChange = () => {
|
||||||
|
|||||||
@@ -1,48 +1,49 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="default-main">
|
<div class="default-main">
|
||||||
<TableHeader area ref="TableHeaderRef" showExport>
|
<TableHeader area ref="TableHeaderRef" showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="运行状态">
|
<el-form-item label="运行状态">
|
||||||
<el-select filterable multiple collapse-tags v-model="tableStore.table.params.runFlag" clearable
|
<el-select filterable multiple collapse-tags v-model="tableStore.table.params.runFlag" clearable
|
||||||
placeholder="请选择运行状态">
|
placeholder="请选择运行状态">
|
||||||
<el-option v-for="item in runFlagList" :key="item.id" :label="item.name"
|
<el-option v-for="item in runFlagList" :key="item.id" :label="item.name"
|
||||||
:value="item.id"></el-option>
|
:value="item.id"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="通讯状态">
|
<el-form-item label="通讯状态">
|
||||||
<el-select v-model="tableStore.table.params.comFlag" filterable multiple collapse-tags clearable
|
<el-select v-model="tableStore.table.params.comFlag" filterable multiple collapse-tags clearable
|
||||||
placeholder="请选择通讯状态">
|
placeholder="请选择通讯状态">
|
||||||
<el-option v-for="item in communicationstatus" :key="item.value" :label="item.label"
|
<el-option v-for="item in communicationstatus" :key="item.value" :label="item.label"
|
||||||
:value="item.value"></el-option>
|
:value="item.value"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="电压等级">
|
<el-form-item label="电压等级">
|
||||||
<el-select v-model="tableStore.table.params.scale" filterable multiple collapse-tags clearable
|
<el-select v-model="tableStore.table.params.scale" filterable multiple collapse-tags clearable
|
||||||
placeholder="请选择电压等级" value-key="id">
|
placeholder="请选择电压等级" value-key="id">
|
||||||
<el-option v-for="item in voltageleveloption" :key="item.id" :label="item.name"
|
<el-option v-for="item in voltageleveloption" :key="item.id" :label="item.name"
|
||||||
:value="item"></el-option>
|
:value="item"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="终端厂家">
|
<el-form-item label="终端厂家">
|
||||||
<el-select v-model="tableStore.table.params.manufacturer" filterable multiple collapse-tags
|
<el-select v-model="tableStore.table.params.manufacturer" filterable multiple collapse-tags
|
||||||
clearable placeholder="请选择终端厂家" value-key="id">
|
clearable placeholder="请选择终端厂家" value-key="id">
|
||||||
<el-option v-for="item in terminaloption" :key="item.id" :label="item.name"
|
<el-option v-for="item in terminaloption" :key="item.id" :label="item.name"
|
||||||
:value="item"></el-option>
|
:value="item"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="干扰源类型">
|
<el-form-item label="干扰源类型">
|
||||||
<el-select v-model="tableStore.table.params.loadType" filterable multiple collapse-tags clearable
|
<el-select v-model="tableStore.table.params.loadType" filterable multiple collapse-tags clearable
|
||||||
placeholder="请选择干扰源类型" value-key="id">
|
placeholder="请选择干扰源类型" value-key="id">
|
||||||
<el-option v-for="item in interfereoption" :key="item.id" :label="item.name"
|
<el-option v-for="item in interfereoption" :key="item.id" :label="item.name"
|
||||||
:value="item"></el-option>
|
:value="item"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="数据筛选">
|
<el-form-item label="数据筛选">
|
||||||
<el-input style="width: 240px" placeholder="电站名称,终端编号,监测点名称、电压等级、终端厂家、干扰源类型"
|
<el-input style="width: 240px"
|
||||||
v-model="tableStore.table.params.searchValue" clearable maxlength="32"
|
placeholder="电站名称,终端编号,监测点名称、电压等级、终端厂家、干扰源类型"
|
||||||
show-word-limit></el-input>
|
v-model="tableStore.table.params.searchValue" clearable maxlength="32"
|
||||||
|
show-word-limit></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -51,6 +52,9 @@
|
|||||||
</template>
|
</template>
|
||||||
</TableHeader>
|
</TableHeader>
|
||||||
<Table ref="tableRef" />
|
<Table ref="tableRef" />
|
||||||
|
|
||||||
|
<!-- 限值查看弹框 -->
|
||||||
|
<LimitDialog ref="limitDialogRef" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
@@ -58,14 +62,16 @@ import { ref, onMounted, provide, nextTick, watch } from 'vue'
|
|||||||
import TableStore from '@/utils/tableStore'
|
import TableStore from '@/utils/tableStore'
|
||||||
import Table from '@/components/table/index.vue'
|
import Table from '@/components/table/index.vue'
|
||||||
import TableHeader from '@/components/table/header/index.vue'
|
import TableHeader from '@/components/table/header/index.vue'
|
||||||
|
import LimitDialog from './monitorLimit.vue'
|
||||||
import { useDictData } from '@/stores/dictData'
|
import { useDictData } from '@/stores/dictData'
|
||||||
|
|
||||||
const dictData = useDictData()
|
const dictData = useDictData()
|
||||||
const TableHeaderRef = ref()
|
const TableHeaderRef = ref()
|
||||||
const areaOptionList = dictData.getBasicData('jibei_area')
|
const IS_LN = import.meta.env.VITE_NAME == 'LN' || import.meta.env.VITE_NAME == 'LNqr'
|
||||||
const interfereoption = dictData.getBasicData('Interference_Source')
|
const interfereoption = dictData.getBasicData('Interference_Source')
|
||||||
const terminaloption = dictData.getBasicData('Dev_Manufacturers')
|
const terminaloption = dictData.getBasicData('Dev_Manufacturers')
|
||||||
const voltageleveloption = dictData.getBasicData('Dev_Voltage_Stand')
|
const voltageleveloption = dictData.getBasicData('Dev_Voltage_Stand')
|
||||||
|
const limitDialogRef = ref()
|
||||||
const tableStore = new TableStore({
|
const tableStore = new TableStore({
|
||||||
url: '/device-boot/runManage/getLineLedgerComm',
|
url: '/device-boot/runManage/getLineLedgerComm',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
@@ -79,13 +85,22 @@ const tableStore = new TableStore({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
field: 'areaName',
|
visible: !IS_LN,
|
||||||
title: '省公司',
|
field: 'areaName',
|
||||||
minWidth: 100
|
title: '省公司',
|
||||||
},
|
minWidth: 100
|
||||||
|
},
|
||||||
|
|
||||||
{ field: 'gdName', title: '市公司', minWidth: 150 },
|
{ visible: IS_LN,
|
||||||
|
field: 'gdName', title: '市公司', minWidth: 150, formatter: (row: any) => {
|
||||||
|
if (IS_LN) {
|
||||||
|
return row.cellValue.replace('国网', '').replace('供电公司', '')
|
||||||
|
} else {
|
||||||
|
return row.cellValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
field: 'bdName',
|
field: 'bdName',
|
||||||
title: '所属变电站',
|
title: '所属变电站',
|
||||||
@@ -100,7 +115,7 @@ const tableStore = new TableStore({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ field: 'lineName', title: '监测点名称', minWidth: 130 },
|
{ field: 'lineName', title: '监测点名称', minWidth: 130 },
|
||||||
{ field: 'scale', title: '监测点电压等级', minWidth: 120 },
|
{ field: 'scale', title: '监测点电压等级', minWidth: 80 },
|
||||||
|
|
||||||
{ field: 'loadType', title: '干扰源类型', minWidth: 120 },
|
{ field: 'loadType', title: '干扰源类型', minWidth: 120 },
|
||||||
|
|
||||||
@@ -139,52 +154,53 @@ const tableStore = new TableStore({
|
|||||||
{
|
{
|
||||||
field: 'shortCapacity',
|
field: 'shortCapacity',
|
||||||
title: '最小短路容量(MVA)',
|
title: '最小短路容量(MVA)',
|
||||||
minWidth: 150
|
minWidth: 100
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'devCapacity',
|
field: 'devCapacity',
|
||||||
title: '供电设备容量(MVA )',
|
title: '供电设备容量(MVA )',
|
||||||
minWidth: 160
|
minWidth: 100
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'dealCapacity',
|
field: 'dealCapacity',
|
||||||
title: '用户协议容量(MVA)',
|
title: '用户协议容量(MVA)',
|
||||||
minWidth: 150
|
minWidth: 100
|
||||||
},
|
},
|
||||||
|
|
||||||
{ field: 'id', title: '监测点序号', minWidth: 90 },
|
{ field: 'id', title: '监测点序号', minWidth: 70 },
|
||||||
|
|
||||||
{ field: 'devName', title: '监测终端编号 ', minWidth: 140 },
|
{ field: 'devName', title: '监测终端编号 ', minWidth: 140 },
|
||||||
{ field: 'ptType', title: '监测终端接线方式', minWidth: 140 },
|
{ field: 'ptType', title: '监测终端接线方式', minWidth: 140 },
|
||||||
{
|
{
|
||||||
field: 'voltageDev',
|
field: 'voltageDev',
|
||||||
title: '电压偏差上限(%)',
|
title: '电压偏差上限(%)',
|
||||||
minWidth: 140
|
minWidth: 80
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'uvoltageDev',
|
field: 'uvoltageDev',
|
||||||
title: '电压偏差下限(%)',
|
title: '电压偏差下限(%)',
|
||||||
minWidth: 140
|
minWidth: 80
|
||||||
}
|
},
|
||||||
|
|
||||||
/* {
|
{
|
||||||
title: '操作',fixed: 'right',
|
title: '操作',
|
||||||
minWidth: 150,
|
minWidth: 80,
|
||||||
fixed: 'right',
|
fixed: 'right',
|
||||||
render: 'buttons',
|
render: 'buttons',
|
||||||
buttons: [
|
buttons: [
|
||||||
{
|
{
|
||||||
name: 'productSetting',
|
name: 'productSetting',
|
||||||
title: '流程详情',
|
title: '查看限值',
|
||||||
type: 'primary',
|
type: 'primary',
|
||||||
icon: 'el-icon-EditPen',
|
icon: 'el-icon-EditPen',
|
||||||
render: 'basicButton',
|
render: 'basicButton',
|
||||||
click: row => {
|
click: row => {
|
||||||
|
// 打开限值查看弹框
|
||||||
|
limitDialogRef.value?.open(row)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}*/
|
}
|
||||||
],
|
],
|
||||||
|
|
||||||
beforeSearchFun: () => {
|
beforeSearchFun: () => {
|
||||||
@@ -209,7 +225,7 @@ tableStore.table.params.loadType = []
|
|||||||
const runFlagList = [
|
const runFlagList = [
|
||||||
{ id: 0, name: '投运' },
|
{ id: 0, name: '投运' },
|
||||||
{ id: 1, name: '检修' },
|
{ id: 1, name: '检修' },
|
||||||
{ id: 2, name: '停运' },
|
{ id: 2, name: '停运' }
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -224,5 +240,4 @@ onMounted(() => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -0,0 +1,163 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog
|
||||||
|
v-model="dialogVisible"
|
||||||
|
title="限值查看"
|
||||||
|
width="800px"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
destroy-on-close
|
||||||
|
>
|
||||||
|
<!-- 基本信息 -->
|
||||||
|
<div class="basic-info" style="margin-bottom: 20px; padding: 16px; background: #f5f7fa; border-radius: 4px;">
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="8">
|
||||||
|
<div><strong>监测点名称:</strong>{{ currentRow?.lineName || '-' }}</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<div><strong>监测对象名称:</strong>{{ currentRow?.objName || '-' }}</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<div><strong>所属变电站:</strong>{{ currentRow?.bdName || '-' }}</div>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="20" style="margin-top: 10px;">
|
||||||
|
<el-col :span="8">
|
||||||
|
<div><strong>电压等级:</strong>{{ currentRow?.scale || '-' }}</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<div><strong>干扰源类型:</strong>{{ currentRow?.loadType || '-' }}</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<div><strong>终端厂家:</strong>{{ currentRow?.manufacturer || '-' }}</div>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<el-tabs v-model="activeTab">
|
||||||
|
<el-tab-pane label="电能质量限值" name="powerQuality">
|
||||||
|
<el-table :data="limitData" border style="width: 100%" max-height="400">
|
||||||
|
<el-table-column prop="name" label="参数名称" width="300" fixed />
|
||||||
|
<el-table-column prop="value" label="限值" width="300">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<span>{{ row.value !== null && row.value !== undefined ? row.value + '%' : '-' }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</el-tab-pane>
|
||||||
|
|
||||||
|
<el-tab-pane label="谐波电压限值" name="harmonicVoltage">
|
||||||
|
<el-table :data="harmonicVoltageData" border style="width: 100%" max-height="400">
|
||||||
|
<el-table-column prop="harmonic" label="谐波次数" width="300" />
|
||||||
|
<el-table-column prop="limit" label="限值(%)" width="300">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<span>{{ row.limit || '-' }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</el-tab-pane>
|
||||||
|
|
||||||
|
<el-tab-pane label="谐波电流限值" name="harmonicCurrent">
|
||||||
|
<el-table :data="harmonicCurrentData" border style="width: 100%" max-height="400">
|
||||||
|
<el-table-column prop="harmonic" label="谐波次数" width="300" />
|
||||||
|
<el-table-column prop="limit" label="限值(%)" width="300">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<span>{{ row.limit || '-' }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
|
||||||
|
<template #footer>
|
||||||
|
<span class="dialog-footer">
|
||||||
|
<el-button @click="dialogVisible = false">关闭</el-button>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from 'vue'
|
||||||
|
|
||||||
|
const dialogVisible = ref(false)
|
||||||
|
const activeTab = ref('powerQuality')
|
||||||
|
const currentRow = ref<any>(null)
|
||||||
|
|
||||||
|
// 电能质量限值数据
|
||||||
|
const limitData = ref([
|
||||||
|
{ name: '频率偏差', value: 0.2 },
|
||||||
|
{ name: '电压偏差上限', value: null },
|
||||||
|
{ name: '电压偏差下限', value: null },
|
||||||
|
{ name: '电压不平衡度', value: 2 },
|
||||||
|
{ name: '闪变', value: 1 },
|
||||||
|
{ name: '电压波变', value: 3 },
|
||||||
|
{ name: '间谐波电压', value: 0.16 },
|
||||||
|
{ name: '负序电流', value: null },
|
||||||
|
])
|
||||||
|
|
||||||
|
// 谐波电压数据(2-25次)
|
||||||
|
const harmonicVoltageData = ref(
|
||||||
|
Array.from({ length: 24 }, (_, i) => {
|
||||||
|
const harmonicNumber = i + 2
|
||||||
|
let limit = 0
|
||||||
|
if (harmonicNumber <= 3) limit = 2.4
|
||||||
|
else if (harmonicNumber <= 5) limit = 1.2
|
||||||
|
else if (harmonicNumber <= 7) limit = 0.8
|
||||||
|
else if (harmonicNumber <= 9) limit = 0.6
|
||||||
|
else if (harmonicNumber <= 11) limit = 0.5
|
||||||
|
else if (harmonicNumber <= 13) limit = 0.4
|
||||||
|
else if (harmonicNumber <= 15) limit = 0.3
|
||||||
|
else if (harmonicNumber <= 17) limit = 0.2
|
||||||
|
else if (harmonicNumber <= 19) limit = 0.18
|
||||||
|
else limit = 0.15
|
||||||
|
|
||||||
|
return {
|
||||||
|
harmonic: `${harmonicNumber}次`,
|
||||||
|
limit: limit
|
||||||
|
}
|
||||||
|
})
|
||||||
|
)
|
||||||
|
|
||||||
|
// 谐波电流数据(2-25次)
|
||||||
|
const harmonicCurrentData = ref(
|
||||||
|
Array.from({ length: 24 }, (_, i) => {
|
||||||
|
const harmonicNumber = i + 2
|
||||||
|
const limits = {
|
||||||
|
2: 16, 3: 13, 4: 8.1, 5: 13, 6: 5.4, 7: 9.3, 8: 4.1, 9: 4.3,
|
||||||
|
10: 3.3, 11: 5.9, 12: 2.7, 13: 5, 14: 2.3, 15: 2.6, 16: 2, 17: 3.8,
|
||||||
|
18: 1.8, 19: 3.4, 20: 1.6, 21: 1.9, 22: 1.5, 23: 2.8, 24: 1.4, 25: 2.6
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
harmonic: `${harmonicNumber}次`,
|
||||||
|
limit: limits[harmonicNumber as keyof typeof limits] || 0
|
||||||
|
}
|
||||||
|
})
|
||||||
|
)
|
||||||
|
|
||||||
|
// 打开弹框
|
||||||
|
const open = (row: any) => {
|
||||||
|
currentRow.value = row
|
||||||
|
// 更新电能质量限值数据
|
||||||
|
limitData.value.forEach(item => {
|
||||||
|
if (item.name === '电压偏差上限') {
|
||||||
|
item.value = row.voltageDev !== undefined ? row.voltageDev : null
|
||||||
|
} else if (item.name === '电压偏差下限') {
|
||||||
|
item.value = row.uvoltageDev !== undefined ? row.uvoltageDev : null
|
||||||
|
} else if (item.name === '负序电流') {
|
||||||
|
item.value = row.ineg !== undefined ? row.ineg : null
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
dialogVisible.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
open
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.dialog-footer {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="default-main">
|
<div class="default-main">
|
||||||
<TableHeader area ref="TableHeaderRef" showExport>
|
<TableHeader area ref="TableHeaderRef" showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<!-- <el-form-item label="统计类型:">
|
<!-- <el-form-item label="统计类型:">
|
||||||
<el-select v-model="tableStore.table.params.statisticalType" placeholder="请选择统计类型" value-key="id">
|
<el-select v-model="tableStore.table.params.statisticalType" placeholder="请选择统计类型" value-key="id">
|
||||||
@@ -128,6 +128,7 @@ const classificationData = dictData.getBasicData('Statistical_Type', ['Report_Ty
|
|||||||
const voltageleveloption = dictData.getBasicData('Dev_Voltage_Stand')
|
const voltageleveloption = dictData.getBasicData('Dev_Voltage_Stand')
|
||||||
const terminaloption = dictData.getBasicData('Dev_Manufacturers')
|
const terminaloption = dictData.getBasicData('Dev_Manufacturers')
|
||||||
const interfereoption = dictData.getBasicData('Interference_Source')
|
const interfereoption = dictData.getBasicData('Interference_Source')
|
||||||
|
const IS_LN = import.meta.env.VITE_NAME == 'LN' || import.meta.env.VITE_NAME == 'LNqr'
|
||||||
|
|
||||||
const communicationstatus = [
|
const communicationstatus = [
|
||||||
{ value: 0, label: '中断' },
|
{ value: 0, label: '中断' },
|
||||||
@@ -150,8 +151,21 @@ const tableStore = new TableStore({
|
|||||||
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ field: 'areaName', title: '区域', minWidth: 90 },
|
{
|
||||||
{ field: 'gdName', title: '市公司', minWidth: 110 },
|
visible: !IS_LN,
|
||||||
|
field: 'areaName',
|
||||||
|
title: '省公司',
|
||||||
|
minWidth: 100
|
||||||
|
},
|
||||||
|
{ visible: IS_LN,
|
||||||
|
field: 'gdName', title: '市公司', minWidth: 120, formatter: (row: any) => {
|
||||||
|
if (IS_LN) {
|
||||||
|
return row.cellValue.replace('国网', '').replace('供电公司', '')
|
||||||
|
} else {
|
||||||
|
return row.cellValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
field: 'bdName',
|
field: 'bdName',
|
||||||
title: '变电站',
|
title: '变电站',
|
||||||
|
|||||||
@@ -90,6 +90,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="card-Box"
|
class="card-Box"
|
||||||
|
style="max-height: 100px;"
|
||||||
:style="`height:calc((${boxHeight.height} - 50px )/ 3);`"
|
:style="`height:calc((${boxHeight.height} - 50px )/ 3);`"
|
||||||
v-for="val in item.children"
|
v-for="val in item.children"
|
||||||
>
|
>
|
||||||
@@ -302,13 +303,14 @@ const countList: any = ref([
|
|||||||
{
|
{
|
||||||
title: '网公司',
|
title: '网公司',
|
||||||
children: [
|
children: [
|
||||||
|
{ title: '非电网侧监测点', num: 0, onLineNum: 0, integrityRate: 0 },
|
||||||
{
|
{
|
||||||
title: '电网侧监测点',
|
title: '电网侧监测点',
|
||||||
num: 0,
|
num: 0,
|
||||||
onLineNum: 0,
|
onLineNum: 0,
|
||||||
integrityRate: 0
|
integrityRate: 0
|
||||||
},
|
},
|
||||||
{ title: '非电网侧监测点', num: 0, onLineNum: 0, integrityRate: 0 }
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -395,8 +397,8 @@ const info = async (row: any) => {
|
|||||||
})
|
})
|
||||||
// 监测点指标统计
|
// 监测点指标统计
|
||||||
getGridDiagramStatistics(form).then(res => {
|
getGridDiagramStatistics(form).then(res => {
|
||||||
countList.value[0].children[0] = { title: '电网侧监测点', ...res.data.data[0] }
|
countList.value[0].children[0] = { title: '非电网侧监测点', ...res.data.data[1] }
|
||||||
countList.value[0].children[1] = { title: '非电网侧监测点', ...res.data.data[1] }
|
countList.value[0].children[1] = { title: '电网侧监测点', ...res.data.data[0] }
|
||||||
countList.value[1].children[0] = { title: '电网侧监测点', ...res.data.gwData[0] }
|
countList.value[1].children[0] = { title: '电网侧监测点', ...res.data.gwData[0] }
|
||||||
})
|
})
|
||||||
// 监测运行统计
|
// 监测运行统计
|
||||||
|
|||||||
@@ -63,13 +63,10 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 稳态电能质量指标水平评估 -->
|
<!-- 稳态电能质量指标水平评估 -->
|
||||||
<div>
|
<!-- <div>
|
||||||
<div class="title">
|
<div class="title">
|
||||||
<span>技术监督统计</span>
|
<span>技术监督统计</span>
|
||||||
<!-- <span class="info" @click="open(3)">
|
|
||||||
详情
|
|
||||||
<ArrowRight style="width: 12px" />
|
|
||||||
</span> -->
|
|
||||||
</div>
|
</div>
|
||||||
<div style="display: flex" class="mt2">
|
<div style="display: flex" class="mt2">
|
||||||
<img src="@/assets/img/FGX.png" />
|
<img src="@/assets/img/FGX.png" />
|
||||||
@@ -110,7 +107,7 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> -->
|
||||||
<!-- 指标合格率统计 -->
|
<!-- 指标合格率统计 -->
|
||||||
<statistics ref="statisticsRef" />
|
<statistics ref="statisticsRef" />
|
||||||
<!-- 稳态指标超标占比 -->
|
<!-- 稳态指标超标占比 -->
|
||||||
@@ -139,8 +136,8 @@ import { getAssessDetail, evaluationDetail, getGeneralSituation } from '@/api/de
|
|||||||
const dictData = useDictData()
|
const dictData = useDictData()
|
||||||
const height = mainHeight(30)
|
const height = mainHeight(30)
|
||||||
const show = ref(false)
|
const show = ref(false)
|
||||||
const boxHeight: any = mainHeight(220, 3)
|
const boxHeight: any = mainHeight(30, 3)
|
||||||
const EchHeight: any = mainHeight(320, 3)
|
const EchHeight: any = mainHeight(130, 3)
|
||||||
const statisticsRef = ref()
|
const statisticsRef = ref()
|
||||||
const exceededRef = ref()
|
const exceededRef = ref()
|
||||||
const formRow: any = ref({})
|
const formRow: any = ref({})
|
||||||
|
|||||||
@@ -85,11 +85,7 @@ const active: any = ref(1)
|
|||||||
const evaluationData: any = ref([])
|
const evaluationData: any = ref([])
|
||||||
|
|
||||||
const dictData = useDictData()
|
const dictData = useDictData()
|
||||||
const Voltage: any = dictData.getBasicData('Dev_Voltage_Stand').filter(item => {
|
const Voltage: any = dictData.getBasicData('Panoramic_voltage')
|
||||||
if (item.code == '35kV' || item.code == '500kV' || item.code == '220kV' || item.code == '110kV') {
|
|
||||||
return item
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
const chartRef = ref<HTMLDivElement>()
|
const chartRef = ref<HTMLDivElement>()
|
||||||
const url: any = [
|
const url: any = [
|
||||||
|
|||||||
@@ -83,6 +83,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="card-Box"
|
class="card-Box"
|
||||||
|
style="max-height: 100px;"
|
||||||
:style="`height:calc((${boxHeight.height} - 50px )/ 3);`"
|
:style="`height:calc((${boxHeight.height} - 50px )/ 3);`"
|
||||||
v-for="val in item.children"
|
v-for="val in item.children"
|
||||||
>
|
>
|
||||||
@@ -339,13 +340,14 @@ const countList: any = ref([
|
|||||||
{
|
{
|
||||||
title: '网公司',
|
title: '网公司',
|
||||||
children: [
|
children: [
|
||||||
|
{ title: '非电网侧监测点', num: 0, onLineNum: 0, integrityRate: 0 },
|
||||||
|
|
||||||
{
|
{
|
||||||
title: '电网侧监测点',
|
title: '电网侧监测点',
|
||||||
num: 0,
|
num: 0,
|
||||||
onLineNum: 0,
|
onLineNum: 0,
|
||||||
integrityRate: 0
|
integrityRate: 0
|
||||||
},
|
},
|
||||||
{ title: '非电网侧监测点', num: 0, onLineNum: 0, integrityRate: 0 }
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -464,8 +466,8 @@ const info = async (row: any) => {
|
|||||||
})
|
})
|
||||||
// 监测点指标统计
|
// 监测点指标统计
|
||||||
getGridDiagramStatistics(form).then(res => {
|
getGridDiagramStatistics(form).then(res => {
|
||||||
countList.value[0].children[0] = { title: '电网侧监测点', ...res.data.data[0] }
|
countList.value[0].children[0] = { title: '非电网侧监测点', ...res.data.data[1] }
|
||||||
countList.value[0].children[1] = { title: '非电网侧监测点', ...res.data.data[1] }
|
countList.value[0].children[1] = { title: '电网侧监测点', ...res.data.data[0] }
|
||||||
countList.value[1].children[0] = { title: '电网侧监测点', ...res.data.gwData[0] }
|
countList.value[1].children[0] = { title: '电网侧监测点', ...res.data.gwData[0] }
|
||||||
})
|
})
|
||||||
// 监测运行统计
|
// 监测运行统计
|
||||||
|
|||||||
@@ -12,15 +12,15 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<div class="text">
|
<div class="text">
|
||||||
<span style="color: #00B07D">无污染:0</span>
|
<span style="color: #00B07D">优秀:(4.5,5]</span>
|
||||||
<br />
|
<br />
|
||||||
<span style="color: #3399ff">轻微污染:(0 , 100]</span>
|
<span style="color: #3399ff">良好:(4,4.5]</span>
|
||||||
<br />
|
<br />
|
||||||
<span style="color: #ffcc33">轻度污染:(100 , 1000]</span>
|
<span style="color: #ffcc33">合格:(3,4]</span>
|
||||||
<br />
|
<br />
|
||||||
<span style="color: #ff9900">中度污染:(1000 , 10000]</span>
|
<span style="color: #ff9900">较差:(2,3]</span>
|
||||||
<br />
|
<br />
|
||||||
<span style="color: #A52a2a">重度污染:(10000</span>
|
<span style="color: #A52a2a">极差:[1,2]</span>
|
||||||
</div>
|
</div>
|
||||||
</el-popover>
|
</el-popover>
|
||||||
</span>
|
</span>
|
||||||
@@ -169,7 +169,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- 技术监督管理 -->
|
<!-- 技术监督管理 -->
|
||||||
<div>
|
<!-- <div>
|
||||||
<div class="title">
|
<div class="title">
|
||||||
<span>技术监督统计</span>
|
<span>技术监督统计</span>
|
||||||
<span class="info" @click="open(3)">
|
<span class="info" @click="open(3)">
|
||||||
@@ -221,7 +221,7 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> -->
|
||||||
</div>
|
</div>
|
||||||
<img
|
<img
|
||||||
class="imgR"
|
class="imgR"
|
||||||
@@ -266,8 +266,8 @@ import {
|
|||||||
const dictData = useDictData()
|
const dictData = useDictData()
|
||||||
const show = ref(false)
|
const show = ref(false)
|
||||||
const height = mainHeight(30)
|
const height = mainHeight(30)
|
||||||
const boxHeight: any = mainHeight(420, 2)
|
const boxHeight: any = mainHeight(230, 2)
|
||||||
const EchHeight: any = mainHeight(510, 2)
|
const EchHeight: any = mainHeight(320, 2)
|
||||||
const evaluateRef = ref()
|
const evaluateRef = ref()
|
||||||
const steadyStateRef = ref()
|
const steadyStateRef = ref()
|
||||||
const formRow: any = ref({})
|
const formRow: any = ref({})
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="default-main">
|
<div class="default-main">
|
||||||
<div v-show="addedShow">
|
<div v-show="addedShow">
|
||||||
<TableHeader>
|
<TableHeader showCustomColumn>
|
||||||
<template v-slot:select>
|
<template v-slot:select>
|
||||||
<el-form-item label="筛选数据">
|
<el-form-item label="筛选数据">
|
||||||
<el-input v-model="tableStore.table.params.name" clearable placeholder="筛选数据" />
|
<el-input v-model="tableStore.table.params.name" clearable placeholder="筛选数据" />
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="mt10">
|
<div class="mt10">
|
||||||
<TableHeader :showReset="false" ref="TableHeaderRef" showExport>
|
<TableHeader :showReset="false" ref="TableHeaderRef" showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="导线型号">
|
<el-form-item label="导线型号">
|
||||||
<el-input v-model="tableStore.table.params.searchValue" clearable placeholder="请输入导线型号" show-word-limit
|
<el-input v-model="tableStore.table.params.searchValue" clearable placeholder="请输入导线型号" show-word-limit
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="mt10">
|
<div class="mt10">
|
||||||
<TableHeader :showReset="false" ref="TableHeaderRef" showExport>
|
<TableHeader :showReset="false" ref="TableHeaderRef" showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="谐波源名称">
|
<el-form-item label="谐波源名称">
|
||||||
<el-input v-model="tableStore.table.params.searchValue" clearable placeholder="请输入谐波源名称" show-word-limit
|
<el-input v-model="tableStore.table.params.searchValue" clearable placeholder="请输入谐波源名称" show-word-limit
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="mt10">
|
<div class="mt10">
|
||||||
<TableHeader :showReset="false" ref="TableHeaderRef" showExport>
|
<TableHeader :showReset="false" ref="TableHeaderRef" showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="变压器型号">
|
<el-form-item label="变压器型号">
|
||||||
<el-input v-model="tableStore.table.params.searchValue" clearable placeholder="请输入变压器型号" show-word-limit
|
<el-input v-model="tableStore.table.params.searchValue" clearable placeholder="请输入变压器型号" show-word-limit
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
<TableHeader ref="TableHeaderRef" area showExport>
|
<TableHeader ref="TableHeaderRef" area showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<!-- <el-form-item label="所在地市">
|
<!-- <el-form-item label="所在地市">
|
||||||
<el-select v-model="tableStore.table.params.deptId" clearable placeholder="请选择所在地市">
|
<el-select v-model="tableStore.table.params.deptId" clearable placeholder="请选择所在地市">
|
||||||
|
|||||||
@@ -288,21 +288,19 @@ const echart = () => {
|
|||||||
z: 0,
|
z: 0,
|
||||||
zlevel: 0,
|
zlevel: 0,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
color: {
|
||||||
color: {
|
type: 'linear',
|
||||||
type: 'linear',
|
x: 0,
|
||||||
x: 0,
|
y: 0,
|
||||||
y: 0,
|
x2: 1,
|
||||||
x2: 1,
|
y2: 0,
|
||||||
y2: 0,
|
colorStops: [
|
||||||
colorStops: [
|
{
|
||||||
{
|
offset: 1,
|
||||||
offset: 1,
|
color: '#57bc6e' // 100% 处的颜色
|
||||||
color: '#57bc6e' // 100% 处的颜色
|
}
|
||||||
}
|
],
|
||||||
],
|
global: false // 缺省为 false
|
||||||
global: false // 缺省为 false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -314,34 +312,30 @@ const echart = () => {
|
|||||||
z: 0,
|
z: 0,
|
||||||
zlevel: 0,
|
zlevel: 0,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
color: {
|
||||||
color: {
|
type: 'linear',
|
||||||
type: 'linear',
|
x: 0,
|
||||||
x: 0,
|
y: 0,
|
||||||
y: 0,
|
x2: 1,
|
||||||
x2: 1,
|
y2: 0,
|
||||||
y2: 0,
|
colorStops: [
|
||||||
colorStops: [
|
{
|
||||||
{
|
offset: 0,
|
||||||
offset: 0,
|
color: '#FF9100' // 0% 处的颜色
|
||||||
color: '#FF9100' // 0% 处的颜色
|
},
|
||||||
},
|
{
|
||||||
{
|
offset: 1,
|
||||||
offset: 1,
|
color: '#FF9100' // 100% 处的颜色
|
||||||
color: '#FF9100' // 100% 处的颜色
|
}
|
||||||
}
|
],
|
||||||
],
|
global: false // 缺省为 false
|
||||||
global: false // 缺省为 false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'pictorialBar',
|
type: 'pictorialBar',
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
color: '#fff'
|
||||||
color: '#fff'
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
symbolRepeat: 50,
|
symbolRepeat: 50,
|
||||||
// symbolMargin: 300,
|
// symbolMargin: 300,
|
||||||
@@ -362,11 +356,9 @@ const echart = () => {
|
|||||||
barWidth: 18,
|
barWidth: 18,
|
||||||
|
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
color: 'transparent',
|
||||||
color: 'transparent',
|
borderColor: 'rgb(148,217,249)',
|
||||||
barBorderColor: 'rgb(148,217,249)',
|
borderWidth: 1
|
||||||
barBorderWidth: 1
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
z: 2
|
z: 2
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<TableHeader area datePicker ref="TableHeaderRef">
|
<TableHeader area datePicker ref="TableHeaderRef" showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="问题来源">
|
<el-form-item label="问题来源">
|
||||||
<el-select v-model="tableStore.table.params.problemSources" clearable placeholder="请选择问题来源">
|
<el-select v-model="tableStore.table.params.problemSources" clearable placeholder="请选择问题来源">
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<TableHeader area datePicker ref="TableHeaderRef">
|
<TableHeader area datePicker ref="TableHeaderRef" showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="问题来源">
|
<el-form-item label="问题来源" >
|
||||||
<el-select v-model="tableStore.table.params.problemSources" clearable placeholder="请选择问题来源">
|
<el-select v-model="tableStore.table.params.problemSources" clearable placeholder="请选择问题来源">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in problemData"
|
v-for="item in problemData"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<!-- 用户投诉 -->
|
<!-- 用户投诉 -->
|
||||||
<!-- 2 有新增 发起 预警单 -->
|
<!-- 2 有新增 发起 预警单 -->
|
||||||
|
|
||||||
<TableHeader area nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
|
<TableHeader area nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport showCustomColumn>
|
||||||
<template v-slot:select>
|
<template v-slot:select>
|
||||||
<el-form-item label="是否解决">
|
<el-form-item label="是否解决">
|
||||||
<el-select v-model="tableStore.table.params.dealState" clearable placeholder="请选择是否解决">
|
<el-select v-model="tableStore.table.params.dealState" clearable placeholder="请选择是否解决">
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<!-- <div>1 监测点信息 发起预告警单 </div> -->
|
<!-- <div>1 监测点信息 发起预告警单 </div> -->
|
||||||
|
|
||||||
<TableHeader datePicker nextFlag theCurrentTime ref="TableHeaderRef" showExport>
|
<TableHeader datePicker nextFlag theCurrentTime ref="TableHeaderRef" showExport showCustomColumn>
|
||||||
<template v-slot:select>
|
<template v-slot:select>
|
||||||
<el-form-item label="区域">
|
<el-form-item label="区域">
|
||||||
<Area ref="areaRef" v-model="tableStore.table.params.deptId" @changeValue="changeArea" />
|
<Area ref="areaRef" v-model="tableStore.table.params.deptId" @changeValue="changeArea" />
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<!-- <div> 普测结果 发起预告警单</div> -->
|
<!-- <div> 普测结果 发起预告警单</div> -->
|
||||||
<TableHeader area nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
|
<TableHeader area nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport showCustomColumn>
|
||||||
<template v-slot:select>
|
<template v-slot:select>
|
||||||
<el-form-item label="计划名称">
|
<el-form-item label="计划名称">
|
||||||
<el-input
|
<el-input
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<!---试运行列表-->
|
<!---试运行列表-->
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<TableHeader area nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
|
<TableHeader area nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="流程状态">
|
<el-form-item label="流程状态">
|
||||||
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
|
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<TableHeader area datePicker ref="TableHeaderRef">
|
<TableHeader area datePicker ref="TableHeaderRef" showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="是否上传">
|
<el-form-item label="是否上传">
|
||||||
<el-select v-model="tableStore.table.params.isFileUpload" placeholder="请选择是否上传">
|
<el-select v-model="tableStore.table.params.isFileUpload" placeholder="请选择是否上传">
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
<TableHeader area datePicker ref="TableHeaderRef" />
|
<TableHeader area datePicker ref="TableHeaderRef" showCustomColumn/>
|
||||||
<Table ref="tableRef" />
|
<Table ref="tableRef" />
|
||||||
<!-- 审核 -->
|
<!-- 审核 -->
|
||||||
<planAdd ref="planAddRef" @onsubmit="tableStore.index()" />
|
<planAdd ref="planAddRef" @onsubmit="tableStore.index()" />
|
||||||
@@ -26,6 +26,10 @@ const tableStore = new TableStore({
|
|||||||
publicHeight: 65,
|
publicHeight: 65,
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
column: [
|
column: [
|
||||||
|
{ title: '序号', field: 'index', width: 80, formatter: (row: any) => {
|
||||||
|
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
||||||
|
}
|
||||||
|
},
|
||||||
{ field: 'orgName', title: '所属单位' },
|
{ field: 'orgName', title: '所属单位' },
|
||||||
{ field: 'planNo', title: '普测计划编号' },
|
{ field: 'planNo', title: '普测计划编号' },
|
||||||
{ field: 'planName', title: '普测计划名称' },
|
{ field: 'planName', title: '普测计划名称' },
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<TableHeader area datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
|
<TableHeader area datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="监督类型">
|
<el-form-item label="监督类型">
|
||||||
<el-select v-model="tableStore.table.params.supvType" clearable placeholder="请选择监督类型">
|
<el-select v-model="tableStore.table.params.supvType" clearable placeholder="请选择监督类型">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<TableHeader area datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
|
<TableHeader area datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport showCustomColumn>
|
||||||
<template v-slot:select>
|
<template v-slot:select>
|
||||||
<el-form-item label="监督类型">
|
<el-form-item label="监督类型">
|
||||||
<el-select v-model="tableStore.table.params.supvType" clearable placeholder="请选择监督类型">
|
<el-select v-model="tableStore.table.params.supvType" clearable placeholder="请选择监督类型">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<TableHeader area ref="TableHeaderRef">
|
<TableHeader area ref="TableHeaderRef" showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="干扰源类型">
|
<el-form-item label="干扰源类型">
|
||||||
<el-select v-model="tableStore.table.params.loadType" clearable placeholder="请选择干扰源类型">
|
<el-select v-model="tableStore.table.params.loadType" clearable placeholder="请选择干扰源类型">
|
||||||
@@ -49,6 +49,10 @@ const tableStore = new TableStore({
|
|||||||
publicHeight: 65,
|
publicHeight: 65,
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
column: [
|
column: [
|
||||||
|
{ title: '序号', field: 'index', width: 80, formatter: (row: any) => {
|
||||||
|
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
||||||
|
}
|
||||||
|
},
|
||||||
{ field: 'orgName', title: '所属单位' },
|
{ field: 'orgName', title: '所属单位' },
|
||||||
{
|
{
|
||||||
field: 'loadType',
|
field: 'loadType',
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
<TableHeader area ref="TableHeaderRef">
|
<TableHeader area ref="TableHeaderRef" showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="干扰源类型">
|
<el-form-item label="干扰源类型">
|
||||||
<el-select v-model="tableStore.table.params.loadType" clearable placeholder="请选择干扰源类型">
|
<el-select v-model="tableStore.table.params.loadType" clearable placeholder="请选择干扰源类型">
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<TableHeader datePicker nextFlag theCurrentTime showTimeAll showExport ref='TableHeaderRef'>
|
<TableHeader datePicker nextFlag theCurrentTime showTimeAll showExport ref='TableHeaderRef' showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label='项目名称'>
|
<el-form-item label='项目名称'>
|
||||||
<el-input v-model='tableStore.table.params.projectName' placeholder='请输入项目名称' maxlength="32" show-word-limit clearable></el-input>
|
<el-input v-model='tableStore.table.params.projectName' placeholder='请输入项目名称' maxlength="32" show-word-limit clearable></el-input>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<TableHeader datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
|
<TableHeader datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="项目名称">
|
<el-form-item label="项目名称">
|
||||||
<el-input v-model="tableStore.table.params.projectName" placeholder="请输入项目名称" maxlength="32" show-word-limit clearable></el-input>
|
<el-input v-model="tableStore.table.params.projectName" placeholder="请输入项目名称" maxlength="32" show-word-limit clearable></el-input>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
custom-class="fixed-dialog"
|
custom-class="fixed-dialog"
|
||||||
@closed="close"
|
@closed="close"
|
||||||
> -->
|
> -->
|
||||||
<TableHeader :showSearch="false" ref="TableHeaderRef">
|
<TableHeader :showSearch="false" ref="TableHeaderRef" showCustomColumn>
|
||||||
<!-- <template #select>
|
<!-- <template #select>
|
||||||
<el-form-item label="用户名称">
|
<el-form-item label="用户名称">
|
||||||
<el-input v-model="tableStore.table.params.searchValue" clearable></el-input>
|
<el-input v-model="tableStore.table.params.searchValue" clearable></el-input>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<!---技术监督计划-->
|
<!---技术监督计划-->
|
||||||
<template>
|
<template>
|
||||||
<div class="default-main">
|
<div class="default-main">
|
||||||
<TableHeader area datePicker ref="TableHeaderRef">
|
<TableHeader area datePicker ref="TableHeaderRef" showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="流程状态">
|
<el-form-item label="流程状态">
|
||||||
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
|
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<!--待办事项列表-->
|
<!--待办事项列表-->
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<TableHeader date-picker nextFlag theCurrentTime showTimeAll showExport>
|
<TableHeader date-picker nextFlag theCurrentTime showTimeAll showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="流程状态">
|
<el-form-item label="流程状态">
|
||||||
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
|
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<!--待办事项列表-->
|
<!--待办事项列表-->
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<TableHeader date-picker nextFlag theCurrentTime showTimeAll showExport>
|
<TableHeader date-picker nextFlag theCurrentTime showTimeAll showExport showCustomColumn>
|
||||||
<template v-slot:select>
|
<template v-slot:select>
|
||||||
<el-form-item label="流程状态">
|
<el-form-item label="流程状态">
|
||||||
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
|
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<TableHeader area datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
|
<TableHeader area datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="流程状态">
|
<el-form-item label="流程状态">
|
||||||
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
|
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<TableHeader area datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
|
<TableHeader area datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="流程状态">
|
<el-form-item label="流程状态">
|
||||||
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
|
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
<TableHeader datePicker ref="TableHeaderRef">
|
<TableHeader datePicker ref="TableHeaderRef" showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="筛选数据">
|
<el-form-item label="筛选数据">
|
||||||
<el-input
|
<el-input
|
||||||
@@ -45,6 +45,14 @@ const tableStore = new TableStore({
|
|||||||
publicHeight: 345,
|
publicHeight: 345,
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
column: [
|
column: [
|
||||||
|
{
|
||||||
|
title: '序号',
|
||||||
|
field: 'index',
|
||||||
|
width: 80,
|
||||||
|
formatter: (row: any) => {
|
||||||
|
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
||||||
|
}
|
||||||
|
},
|
||||||
{ field: 'name', title: '事务名称' },
|
{ field: 'name', title: '事务名称' },
|
||||||
{ field: 'type', title: '事务类型' },
|
{ field: 'type', title: '事务类型' },
|
||||||
{ field: 'createUser', title: '创建人员' },
|
{ field: 'createUser', title: '创建人员' },
|
||||||
@@ -56,7 +64,8 @@ const tableStore = new TableStore({
|
|||||||
{ field: 'alertType', title: '预警类型' },
|
{ field: 'alertType', title: '预警类型' },
|
||||||
|
|
||||||
{
|
{
|
||||||
title: '操作',fixed: 'right',
|
title: '操作',
|
||||||
|
fixed: 'right',
|
||||||
width: '180',
|
width: '180',
|
||||||
render: 'buttons',
|
render: 'buttons',
|
||||||
buttons: [
|
buttons: [
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
<TableHeader datePicker ref="TableHeaderRef">
|
<TableHeader datePicker ref="TableHeaderRef" showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="筛选数据">
|
<el-form-item label="筛选数据">
|
||||||
<el-input
|
<el-input
|
||||||
@@ -102,6 +102,10 @@ const tableStore = new TableStore({
|
|||||||
publicHeight: 65,
|
publicHeight: 65,
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
column: [
|
column: [
|
||||||
|
{ title: '序号', field: 'index', width: 80, formatter: (row: any) => {
|
||||||
|
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
||||||
|
}
|
||||||
|
},
|
||||||
{ field: 'name', title: '名称' },
|
{ field: 'name', title: '名称' },
|
||||||
{
|
{
|
||||||
field: 'grade',
|
field: 'grade',
|
||||||
|
|||||||
@@ -130,6 +130,10 @@ const tableStore = new TableStore({
|
|||||||
publicHeight: 85,
|
publicHeight: 85,
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
column: [
|
column: [
|
||||||
|
{ title: '序号', field: 'index', width: 80, formatter: (row: any) => {
|
||||||
|
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
||||||
|
}
|
||||||
|
},
|
||||||
{ field: 'id', title: '终端编号' },
|
{ field: 'id', title: '终端编号' },
|
||||||
{
|
{
|
||||||
field: 'manufacture',
|
field: 'manufacture',
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<TableHeader area ref="TableHeaderRef" showExport>
|
<TableHeader area ref="TableHeaderRef" showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="运行状态">
|
<el-form-item label="运行状态">
|
||||||
<el-select v-model="tableStore.table.params.runF" clearable placeholder="请选择运行状态">
|
<el-select v-model="tableStore.table.params.runF" clearable placeholder="请选择运行状态">
|
||||||
@@ -90,6 +90,7 @@ const tableStore = new TableStore({
|
|||||||
{ field: 'devType', title: '终端型号', minWidth: 100 },
|
{ field: 'devType', title: '终端型号', minWidth: 100 },
|
||||||
|
|
||||||
{ field: 'ip', title: '终端网络参数', width: '120px' },
|
{ field: 'ip', title: '终端网络参数', width: '120px' },
|
||||||
|
{ field: 'powerFlag', title: '用户性质', width: '120px' },
|
||||||
{ field: 'port', title: '端口号', minWidth: 70 },
|
{ field: 'port', title: '端口号', minWidth: 70 },
|
||||||
{
|
{
|
||||||
field: 'comFlag',
|
field: 'comFlag',
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<TableHeader ref="TableHeaderRef" showExport>
|
<TableHeader ref="TableHeaderRef" showExport showCustomColumn>
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="项目名称">
|
<el-form-item label="项目名称">
|
||||||
<el-input style="width: 200px" placeholder="请输入项目名称" v-model="tableStore.table.params.projectName"
|
<el-input style="width: 200px" placeholder="请输入项目名称" v-model="tableStore.table.params.projectName"
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user