6 Commits

Author SHA1 Message Date
guanj
98e0f9de02 修改关键字 2026-05-28 19:28:12 +08:00
guanj
21756e05d4 修改地图 2026-05-27 10:47:31 +08:00
guanj
abfdf29a38 修改页面样式 调整查询条件 2026-05-22 09:58:07 +08:00
guanj
120892808b 提交代码 2026-04-25 15:21:53 +08:00
guanj
0f5cb1d3c5 提交代码 2026-04-09 11:44:06 +08:00
cdf
dbaa42ff7e 通用台账查询页面调整 2026-04-09 11:42:54 +08:00
65 changed files with 3585 additions and 3481 deletions

View File

@@ -18,7 +18,7 @@ pnpm i
#运行项目
npm run dev
#冀北现场启动命令 区分是否加载现场电网一张图内网api
#jb现场启动命令 区分是否加载现场电网一张图内网api
npm run dev:jibei
#去除后台所有模块名 如除/xxxx-boot
@@ -26,9 +26,9 @@ npm run dev:removeMode
#因海南和冀北技术监督不同 通过修改文件的方式来区分
#因海南和jb技术监督不同 通过修改文件的方式来区分
#海南打包 需要吧pqs目录下supervise_hn 文件夹改成supervise 原文件改成supervise_jb
#冀北打包 需要吧pqs目录下supervise_jb 文件夹改成supervise 原文件改成supervise_hn
#jb打包 需要吧pqs目录下supervise_jb 文件夹改成supervise 原文件改成supervise_hn
```
#### 页面编写-示例

View File

@@ -15,7 +15,7 @@
<script src="/static/luckysheet/plugin.js"></script>
<script src="/static/luckysheet/luckysheet.umd.js"></script>
<!-- 冀北地图 -->
<!-- jb地图 -->
<!--引入样式文件-->
<script src="%VITE_NARIMAP%"></script>
<!-- <script src="%VITE_NRGISCOMMON%"></script> -->

View File

@@ -13,9 +13,11 @@ onMounted(async () => {
const response = await fetch('/')
const WebSocketUrl:any = response.headers.get('X-WebSocket-Url')
const WebSocketUrl2:any = response.headers.get('X-WebSocket-Url2')
const WebSocketUrl3:any = response.headers.get('X-WebSocket-Url3')
const MqttUrl:any = response.headers.get('X-MqttUrl-Url')
localStorage.setItem('WebSocketUrl2', WebSocketUrl2)
localStorage.setItem('WebSocketUrl', WebSocketUrl)
localStorage.setItem('WebSocketUrl2', WebSocketUrl2)
localStorage.setItem('WebSocketUrl3', WebSocketUrl3)
localStorage.setItem('MqttUrl', MqttUrl)
})
</script>

BIN
src/assets/imgs/m0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
src/assets/imgs/m1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
src/assets/imgs/m2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

BIN
src/assets/imgs/m3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

BIN
src/assets/imgs/m4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

@@ -183,7 +183,7 @@ const tableStore: any = new TableStore({
if (tableStore.table.params.statisticalType.name == '终端厂家') {
return k.citTotalNum != 0
} else {
return k.citName != '上送国网' && k.citName != '上送国网'
return !k.citName.includes('上送')
}
})
}

View File

@@ -181,7 +181,7 @@ const tableStore: any = new TableStore({
if (tableStore.table.params.statisticalType.name == '终端厂家') {
return k.citTotalNum != 0
} else {
return k.citName != '上送国网' && k.citName != '上送国网'
return !k.citName.includes('上送')
}
})

View File

@@ -233,7 +233,7 @@ const tableStore: any = new TableStore({
if (tableStore.table.params.statisticalType.name == '终端厂家') {
return k.count != 0
} else {
return k.name != '上送国网' && k.name != '上送国网'
return !k.citName.includes('上送')
}
})
}

View File

@@ -1,29 +1,20 @@
<template>
<div ref="tableHeader" class="cn-table-header">
<div class="table-header ba-scroll-style">
<el-form
style="flex: 1; height: 32px; display: flex; flex-wrap: wrap"
ref="headerForm"
@submit.prevent=""
@keyup.enter="onComSearch"
label-position="left"
:inline="true"
>
<el-form style="flex: 1; height: 32px; display: flex; flex-wrap: wrap" ref="headerForm" @submit.prevent=""
@keyup.enter="onComSearch" label-position="left" :inline="true">
<el-form-item v-if="datePicker" style="grid-column: span 2; max-width: 630px">
<template #label>
<el-checkbox v-if="showTimeAll" v-model="timeAll" label="统计时间" />
<span v-else>{{ dateLabel }}</span>
</template>
<DatePicker
ref="datePickerRef"
v-if="timeAll"
:nextFlag="nextFlag"
:theCurrentTime="theCurrentTime"
></DatePicker>
<DatePicker ref="datePickerRef" v-if="timeAll" :nextFlag="nextFlag"
:theCurrentTime="theCurrentTime"></DatePicker>
</el-form-item>
<el-form-item label="区域" v-if="area">
<Area ref="areaRef" v-model="tableStore.table.params.deptIndex" @change-value="onAreaChange" />
<Area ref="areaRef" v-model="tableStore.table.params.deptIndex" @change-value="onAreaChange"
style="width: 200px;" />
</el-form-item>
<slot name="select"></slot>
</el-form>
@@ -32,43 +23,24 @@
<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 />
</el-button>
<el-button
@click="onComSearch"
v-if="showSearch"
:loading="tableStore.table.loading"
type="primary"
:icon="Search"
>
<el-button @click="onComSearch" v-if="showSearch" :loading="tableStore.table.loading" type="primary"
:icon="Search">
查询
</el-button>
<el-button
@click="onResetForm"
v-if="showSearch && showReset"
:loading="tableStore.table.loading"
:icon="RefreshLeft"
>
<el-button @click="onResetForm" v-if="showSearch && showReset" :loading="tableStore.table.loading"
:icon="RefreshLeft">
重置
</el-button>
<el-button
@click="onExport"
v-if="showExport"
:loading="tableStore.table.exportLoading"
type="primary"
icon="el-icon-Download"
>
<el-button @click="onExport" v-if="showExport" :loading="tableStore.table.exportLoading" type="primary"
icon="el-icon-Download">
导出
</el-button>
</template>
<slot name="operation"></slot>
</div>
<el-form
:style="showSelect && showUnfoldButton ? headerFormSecondStyleOpen : headerFormSecondStyleClose"
ref="headerFormSecond"
@submit.prevent=""
@keyup.enter="onComSearch"
label-position="left"
:inline="true"
></el-form>
<el-form :style="showSelect && showUnfoldButton ? headerFormSecondStyleOpen : headerFormSecondStyleClose"
ref="headerFormSecond" @submit.prevent="" @keyup.enter="onComSearch" label-position="left"
:inline="true"></el-form>
</div>
</template>
@@ -81,7 +53,7 @@ import { mainHeight } from '@/utils/layout'
import { useDictData } from '@/stores/dictData'
import { Search, RefreshLeft } 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 tableHeader = ref()
const datePickerRef = ref()
@@ -132,9 +104,8 @@ const headerFormSecondStyleClose = {
padding: '0'
}
const onAreaChange = (data) => {
emit('areaChange', {label: data.label})
const onAreaChange = data => {
emit('areaChange', { label: data.label })
}
watch(
@@ -142,7 +113,6 @@ watch(
newVal => {
setTimeout(() => {
areaRef.value && areaRef.value.change()
}, 0)
}
)
@@ -238,14 +208,14 @@ const onResetForm = () => {
//时间重置成默认值
datePickerRef.value?.setTheDate(3)
if(props.showTimeAll){
timeAll.value = false
delete tableStore.table.params.searchBeginTime
delete tableStore.table.params.searchEndTime
delete tableStore.table.params.startTime
delete tableStore.table.params.endTime
delete tableStore.table.params.timeFlag
delete tableStore.table.params.interval
if (props.showTimeAll) {
timeAll.value = false
delete tableStore.table.params.searchBeginTime
delete tableStore.table.params.searchEndTime
delete tableStore.table.params.startTime
delete tableStore.table.params.endTime
delete tableStore.table.params.timeFlag
delete tableStore.table.params.interval
}
if (props.datePicker && timeAll.value) {
@@ -264,7 +234,6 @@ const setTheDate = (val: any) => {
}
// 导出
const onExport = () => {
tableStore.onTableAction('export', { showAllFlag: true })
}
@@ -300,6 +269,7 @@ defineExpose({
padding: 13px 15px;
font-size: 14px;
overflow: hidden;
.table-header-operate-text {
margin-left: 6px;
}
@@ -327,7 +297,7 @@ defineExpose({
margin-left: 12px;
}
.mlr-12 + .el-button {
.mlr-12+.el-button {
margin-left: 12px;
}
@@ -362,7 +332,7 @@ defineExpose({
border-radius: 0;
}
.el-button + .el-button {
.el-button+.el-button {
margin: 0;
}
@@ -373,6 +343,7 @@ defineExpose({
html.dark {
.table-search-button-group {
button:focus,
button:active {
background-color: var(--el-color-info-dark-2);

View File

@@ -28,66 +28,66 @@ const info = (id: any) => {
expanded.value = [id]
getTerminalTree().then(res => {
// let arr: any[] = []
if (VITE_FLAG) {
res.data.forEach((item: any) => {
item.icon = 'el-icon-Menu'
item.plevel = item.level
item.level = 0
item.children.forEach((item2: any) => {
item2.icon = 'el-icon-HomeFilled'
// if (VITE_FLAG) {
// res.data.forEach((item: any) => {
// item.icon = 'el-icon-Menu'
// item.plevel = item.level
// item.level = 0
// item.children.forEach((item2: any) => {
// item2.icon = 'el-icon-HomeFilled'
item2.plevel = item2.level
item2.level = 100
expanded.value.push(item2.id)
item2.children.forEach((item3: any) => {
item3.icon = 'el-icon-CollectionTag'
item3.plevel = item3.level
item3.level = 200
item3.children.forEach((item4: any) => {
item4.icon = 'el-icon-Flag'
item4.plevel = item4.level
item4.level = 300
// arr.push(item4)
item4.children.forEach((item5: any) => {
item5.icon = 'el-icon-OfficeBuilding'
item5.plevel = item5.level
item5.level = 300
// item5.id = item4.id
item5.children.forEach((item6: any) => {
item6.icon = 'el-icon-HelpFilled'
item6.plevel = 4
if (item6.name == '电网侧' && item6.children.length == 0) {
item6.level = 400
} else {
item6.level = 400
}
item6.children.forEach((item7: any) => {
item7.icon = 'el-icon-Film'
item7.plevel = item7.level
item7.level = 400
item7.children.forEach((item8: any) => {
item8.icon = 'el-icon-Collection'
item8.plevel = item8.level
item8.level = 500
item8.children.forEach((item9: any) => {
item9.icon = 'el-icon-Share'
item9.plevel = item9.level
item9.level = 600
item9.children.forEach((item10: any) => {
item10.icon = 'el-icon-Location'
item10.plevel = item10.level
item10.level = 700
})
})
})
})
})
})
})
})
})
})
} else {
// item2.plevel = item2.level
// item2.level = 100
// expanded.value.push(item2.id)
// item2.children.forEach((item3: any) => {
// item3.icon = 'el-icon-CollectionTag'
// item3.plevel = item3.level
// item3.level = 200
// item3.children.forEach((item4: any) => {
// item4.icon = 'el-icon-Flag'
// item4.plevel = item4.level
// item4.level = 300
// // arr.push(item4)
// item4.children.forEach((item5: any) => {
// item5.icon = 'el-icon-OfficeBuilding'
// item5.plevel = item5.level
// item5.level = 300
// // item5.id = item4.id
// item5.children.forEach((item6: any) => {
// item6.icon = 'el-icon-HelpFilled'
// item6.plevel = 4
// if (item6.name == '电网侧' && item6.children.length == 0) {
// item6.level = 400
// } else {
// item6.level = 400
// }
// item6.children.forEach((item7: any) => {
// item7.icon = 'el-icon-Film'
// item7.plevel = item7.level
// item7.level = 400
// item7.children.forEach((item8: any) => {
// item8.icon = 'el-icon-Collection'
// item8.plevel = item8.level
// item8.level = 500
// item8.children.forEach((item9: any) => {
// item9.icon = 'el-icon-Share'
// item9.plevel = item9.level
// item9.level = 600
// item9.children.forEach((item10: any) => {
// item10.icon = 'el-icon-Location'
// item10.plevel = item10.level
// item10.level = 700
// })
// })
// })
// })
// })
// })
// })
// })
// })
// })
// } else {
res.data.forEach((item: any) => {
item.icon = 'el-icon-Menu'
item.plevel = item.level
@@ -129,7 +129,7 @@ const info = (id: any) => {
})
})
})
}
// }
tree.value = res.data

View File

@@ -50,7 +50,8 @@ import { ref, reactive, onMounted } from 'vue'
import { defaultAttribute } from '@/components/table/defaultAttribute'
import { mainHeight } from '@/utils/layout'
import { useDictData } from '@/stores/dictData'
import MQTT from '@/utils/mqtt'
// import MQTT from '@/utils/mqtt'
import socketClient from '@/utils/webSocketClient'
const dictData = useDictData()
const event = dictData.getBasicData('Event_Statis')
import { useAdminInfo } from '@/stores/adminInfo'
@@ -68,37 +69,72 @@ const handleClose = (done: any) => {
drawer.value = false
done()
}
const init = async () => {
const mqttClient = new MQTT('/sendEvent')
// 设置消息接收回调
try {
await mqttClient.init()
const dataSocket = reactive({
socketServe: socketClient.Instance
})
// const init = async () => {
// const mqttClient = new MQTT('/sendEvent')
// // 设置消息接收回调
// try {
// await mqttClient.init()
// 订阅主题
await mqttClient.subscribe()
// 设置消息接收回调
mqttClient.onMessage((topic, message) => {
const msg = JSON.parse(message.toString())
// console.log('🚀 ~ init ~ msg:', msg)
if (msg.deptList.includes(adminInfo.$state.deptId)) {
drawer.value = true
isLoading.value = true
eventList.value.unshift(msg)
setTimeout(() => {
isLoading.value = false
}, 500)
}
})
} catch (error) {
// console.error('MQTT 初始化失败:', error)
}
// // 订阅主题
// await mqttClient.subscribe()
// // 设置消息接收回调
// mqttClient.onMessage((topic, message) => {
// const msg = JSON.parse(message.toString())
// // console.log('🚀 ~ init ~ msg:', msg)
// if (msg.deptList.includes(adminInfo.$state.deptId)) {
// drawer.value = true
// isLoading.value = true
// eventList.value.unshift(msg)
// setTimeout(() => {
// isLoading.value = false
// }, 500)
// }
// })
// } catch (error) {
// // console.error('MQTT 初始化失败:', error)
// }
// }
const socket = async () => {
const url = localStorage.getItem('WebSocketUrl3') || 'null' //'ws://192.168.2.130:10203/event/'
// const url = 'ws://192.168.1.68:10203/event/'
await dataSocket.socketServe.connect(`${url}${adminInfo.id}`)
await dataSocket.socketServe.registerCallBack('message', (res: any) => {
if (res.deptList.includes(adminInfo.$state.deptId)) {
drawer.value = true
isLoading.value = true
eventList.value.unshift(res)
setTimeout(() => {
isLoading.value = false
}, 500)
}
// logList.value.push({
// type: res.code == 500 ? 'error' : '',
// time: formatDate(new Date(), 'YYYY-MM-DD hh:mm:ss'),
// name: res.message
// })
})
}
onUnmounted(() => {
dataSocket.socketServe?.closeWs()
})
onMounted(() => {
// startMqtt('/sendEvent', (topic, message) => {
// const msg = JSON.parse(message.toString())
// console.log(msg)
// })
init()
setTimeout(() => {
socket()
}, 3000)
})
defineExpose({
open,

View File

@@ -404,6 +404,11 @@ body,
.el-select__wrapper {
height: 32px !important;
}
.BMap_center,
.BMap_top,
.BMap_bottom {
background-color: #fff;
}
@font-face {
font-family: 'AlimamaFangYuanTiVF';
src: url('../assets/font/ali/AlimamaFangYuanTiVF-Thin.woff') format('woff'),

View File

@@ -7,7 +7,7 @@ export const PROCESS_BOOT = '/process-boot'
//工作流模块
export const BPM_BOOT = '/bpm-boot'
//冀北技术监督
//网公司技术监督
export const SUPERVISION_BOOT = '/supervision-boot'
//终端模块

View File

@@ -11,6 +11,7 @@ const calculateValue = (o: number, value: number, num: number, isMin: boolean) =
} else if (value > -1 && value < 0 && isMin == false) {
return 0
}
let base
if (Math.abs(o) >= 100) {
base = 100
@@ -19,8 +20,11 @@ const calculateValue = (o: number, value: number, num: number, isMin: boolean) =
} else if (Math.abs(o) >= 1) {
base = 1
} else {
base = 0.1
const multiple = 1 / 0.1
base = Math.ceil(Math.abs(o) * multiple) / multiple
}
let calculatedValue
if (isMin) {
if (value < 0) {
@@ -35,18 +39,19 @@ const calculateValue = (o: number, value: number, num: number, isMin: boolean) =
calculatedValue = value + num * value
}
}
if (base === 0.1) {
return parseFloat(calculatedValue.toFixed(1))
// return parseFloat(calculatedValue.toFixed(1))
return Math.ceil(calculatedValue * 10) / 10
} else if (isMin) {
return Math.floor(calculatedValue / base) * base
} else {
return Math.ceil(calculatedValue / base) * base
}
}
// 处理y轴最大最小值
export const yMethod = (arr: any) => {
let num = 0.1
let num = 0.2
let numList = dataProcessing(arr)
let maxValue = 0
let minValue = 0
@@ -54,12 +59,9 @@ export const yMethod = (arr: any) => {
let min = 0
maxValue = Math.max(...numList)
minValue = Math.min(...numList)
const o = maxValue - minValue
if (Math.abs(o) >= 300) {
num = 0.02
}
const o = maxValue - minValue == 0 ? maxValue : maxValue - minValue
min = calculateValue(o, minValue, num, true)
max = calculateValue(o, maxValue, num, false)
// if (-100 >= minValue) {
// min = Math.floor((minValue + num * minValue) / 100) * 100
@@ -158,8 +160,6 @@ export const exportCSV = (title: object, data: any, filename: string) => {
URL.revokeObjectURL(link.href)
}
/**
* 补全时间序列数据中缺失的条目
* @param rawData 原始数据,格式为 [["时间字符串", "数值", "单位", "类型"], ...]

View File

@@ -27,8 +27,8 @@ class MQTT {
clean: true,
connectTimeout: 30 * 1000,
clientId: `mqttjs_${Math.random().toString(16).substr(2, 8)}`,
username: 't_user',
password: 'njcnpqs',
username: '',
password: '',
reconnectPeriod: 1000, // 默认1秒重试一次
maxReconnectTimes: 3 // 默认最大重连5次
}

View File

@@ -147,7 +147,39 @@ export const filter = <T = any>(
return listFilter(tree)
}
export const filterTree = <T = any>(
tree: T[],
func: (n: T) => boolean,
config: Partial<TreeHelperConfig> = {}
): T[] => {
config = getConfig(config)
const children = config.children as string
function listFilter(list: T[]) {
return list
.map((node: any) => ({ ...node }))
.filter((node) => {
// 1. 如果当前节点匹配 → 直接保留【所有子节点】,不再过滤下级
if (func(node)) {
return true;
}
// 2. 如果当前节点不匹配,递归过滤子节点
if (node[children]) {
const filteredChildren = listFilter(node[children]);
if (filteredChildren.length > 0) {
node[children] = filteredChildren;
return true;
}
}
// 3. 都不匹配,过滤掉
return false;
})
}
return listFilter(tree)
}
export const forEach = <T = any>(
tree: T[],
func: (n: T) => any,

View File

@@ -44,12 +44,10 @@ export default class SocketService {
return
}
console.log("🚀 ~ SocketService ~ connect ~ url:", url)
if (url === null || (typeof url === 'string' && url.includes('null'))) return;
setTimeout(() => {
// ws://192.168.1.69:10407/mgtt
// const url =
// (localStorage.getItem('WebSocketUrl') == 'null'
// ? 'ws://192.168.1.130:10405'
// : localStorage.getItem('WebSocketUrl')) + id
this.ws = new WebSocket(url)
this.ws.onopen = () => this.handleOpen()
@@ -58,7 +56,6 @@ export default class SocketService {
this.ws.onmessage = event => this.handleMessage(event)
}, 0)
}
// 处理连接成功事件
private handleOpen(): void {
ElMessage.success('webSocket连接服务端成功了')
@@ -90,7 +87,7 @@ export default class SocketService {
if (event.data == '连接成功') {
this.sendHeartbeat()
} else if (event.data == 'connect') {
} else if (event.data == 'over') {
} else if (event.data.length > 10) {
let message: MessageType
try {
@@ -104,7 +101,7 @@ export default class SocketService {
// 通过接受服务端发送的type字段来回调函数
if ((message.key || message.code) && this.callBackMapping['message']) {
if ((message.key || message.code || message.time) && this.callBackMapping['message']) {
this.callBackMapping['message']!(message)
} else {
console.log('抛弃====>')
@@ -112,6 +109,7 @@ export default class SocketService {
// 丢弃或继续写你的逻辑
}
} else {
this.callBackMapping['message']!({ Flag: false })
ElMessage.error(event.data)
}
}

View File

@@ -90,7 +90,6 @@ const loading = ref(false)
const statistics = ref()
const flg = ref(true)
const showMqtt = ref(false)
const zoom = ref('') //图表焦点校验
const resultList = ref([

View File

@@ -2911,7 +2911,7 @@ const selectChanged = async (value: any) => {
capacity = 750
break
case '35':
capacity = 259
capacity = 250
break
case '10':
capacity = 100
@@ -2931,9 +2931,9 @@ const selectChanged = async (value: any) => {
case '750':
capacity = 7000
break
case '800':
capacity = 7000
break
// case '800':
// capacity = 7000
// break
case '1000':
capacity = 9000
break

View File

@@ -2,7 +2,7 @@
<div class="default-main">
<TableHeader :showReset="false" showExport>
<template #select>
<el-form-item label="关键字筛选">
<el-form-item label="筛选数据">
<el-input
maxlength="32"
show-word-limit

View File

@@ -12,7 +12,7 @@
</div>
<el-collapse v-model="activeName" accordion>
<!-- <el-collapse-item title="典型电能质量干扰源" name="1"></el-collapse-item> -->
<el-collapse-item title="国家电网有限公司企业标准" name="2">
<el-collapse-item title="电网有限公司企业标准" name="2">
<!-- <el-empty description="暂无数据" class="custom-empty iframe" /> -->
<div :style="`overflow: auto;`" class="iframe">
<vue-office-docx v-if="urlKey.includes('.doc') || urlKey.includes('.docx')" :src="url" />

View File

@@ -3,7 +3,7 @@
<!-- 案例库 -->
<TableHeader ref="TableHeaderRef">
<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-form-item>

View File

@@ -3,7 +3,7 @@
<!-- 模版 -->
<TableHeader ref="TableHeaderRef" >
<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-form-item>

View File

@@ -3,7 +3,7 @@
<div class="online_header">
<TableHeader date-picker area ref="tableHeaderRef">
<template #select>
<el-form-item label="统计类型:">
<el-form-item label="统计类型">
<el-select
v-model="tableStore.table.params.statisticalType"
placeholder="请选择统计类型"
@@ -19,7 +19,7 @@
</el-select>
</el-form-item>
<el-form-item label="电压等级:">
<el-form-item label="电压等级">
<el-select
v-model="tableStore.table.params.scale"
multiple
@@ -38,21 +38,21 @@
</el-select>
</el-form-item>
<el-form-item label="电网标识">
<el-select
v-model="tableStore.table.params.powerFlag"
clearable
style="width: 100%"
placeholder="请选择电网标识"
>
<el-option
v-for="item in powerFlagList"
:key="item.id"
:label="item.name"
:value="item.algoDescribe"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="终端厂家:">
<el-select
v-model="tableStore.table.params.powerFlag"
clearable
style="width: 100%"
placeholder="请选择电网标识"
>
<el-option
v-for="item in powerFlagList"
:key="item.id"
:label="item.name"
:value="item.algoDescribe"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="终端厂家">
<el-select
v-model="tableStore.table.params.manufacturer"
multiple
@@ -88,6 +88,14 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="筛选数据">
<el-input
v-model.trim="tableStore.table.params.searchValue"
clearable
style="width: 200px"
placeholder="请输入关键字筛选"
/>
</el-form-item>
</template>
</TableHeader>
</div>
@@ -96,7 +104,7 @@
<el-tab-pane :name="0" :lazy="true" label="稳态指标符合性占比表格">
<Table
ref="tableRef"
:tree-config="{ transform: true, parentField: 'uPid', rowField: 'uId' }"
:tree-config="{ transform: true, parentField: 'uPid', rowField: 'uId' }"
:scroll-y="{ enabled: true }"
v-if="activeName == 0"
/>
@@ -117,6 +125,7 @@ import TableHeader from '@/components/table/header/index.vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import charts from './components/charts.vue'
import { filterTree } from '@/utils/tree'
defineOptions({
name: 'harmonic-boot/area/SteadyState'
})
@@ -214,7 +223,12 @@ const tableStore = new TableStore({
],
loadCallback: () => {
tableStore.table.data = tree2List(tableStore.table.data, Math.random() * 1000)
tableStore.table.data = tree2List(
filterTree(tableStore.table.data, node => {
return node.name.includes(tableStore.table.params.searchValue)
}),
Math.random() * 1000
)
tableStore.table.column[0].title = tableStore.table.params.statisticalType.name
chartsRef.value && chartsRef.value.getTableStoreParams(tableStore.table.params)
@@ -230,6 +244,7 @@ tableStore.table.params.manufacturer = []
tableStore.table.params.loadType = []
tableStore.table.params.powerFlag = 2
tableStore.table.params.serverName = 'harmonicBoot'
tableStore.table.params.searchValue = ''
provide('tableStore', tableStore)
const tree2List = (list: any, id?: string) => {
//存储结果的数组

View File

@@ -6,7 +6,7 @@
<el-form-item label="筛选数据">
<el-input v-model="tableStore.table.params.searchValue" placeholder="输入关键字筛选" clearable maxlength="32" show-word-limit/>
</el-form-item>
<el-form-item label="统计类型:">
<el-form-item label="统计类型">
<el-select
v-model="tableStore.table.params.statisticalType"
value-key="id"
@@ -21,7 +21,7 @@
</el-select>
</el-form-item>
<el-form-item label="电压等级:">
<el-form-item label="电压等级">
<el-select
v-model="tableStore.table.params.scale"
multiple
@@ -38,7 +38,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="终端厂家:">
<el-form-item label="终端厂家">
<el-select
v-model="tableStore.table.params.manufacturer"
multiple
@@ -55,7 +55,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="干扰源类型:">
<el-form-item label="干扰源类型">
<el-select
v-model="tableStore.table.params.loadType"
multiple

View File

@@ -3,14 +3,14 @@
<div class="online_header">
<TableHeader date-picker ref="tableHeaderRef">
<template #select>
<el-form-item label="统计类型:">
<el-form-item label="统计类型">
<el-select v-model="formData.statisticalType" placeholder="请选择统计类型" value-key="id"
style="width: 100%">
<el-option v-for="item in classificationData" :key="item.id" :label="item.name"
:value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="区域选择:">
<el-form-item label="区域选择">
<!-- <el-select ref="select1" v-model="deptName" placeholder="请选择所属部门区域" style="width: 100%">
<el-option :value="formData.deptIndex" style="height: auto"> -->
<!-- {{ formData.deptIndex }} -->
@@ -33,28 +33,28 @@
<!-- </el-option>
</el-select> -->
</el-form-item>
<el-form-item label="电压等级:">
<el-form-item label="电压等级">
<el-select v-model="formData.scale" multiple collapse-tags clearable placeholder="请选择电压等级"
style="width: 100%" value-key="id">
<el-option v-for="item in voltageleveloption" :key="item.id" :label="item.name"
:value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="终端厂家:">
<el-form-item label="终端厂家">
<el-select v-model="formData.manufacturer" multiple collapse-tags clearable
placeholder="请选择终端厂家" style="width: 100%" value-key="id">
<el-option v-for="(item, index) in terminaloption" :key="index" :label="item.name"
:value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="干扰源类型:">
<el-form-item label="干扰源类型">
<el-select v-model="formData.loadType" multiple collapse-tags clearable placeholder="请选择干扰源类型"
style="width: 100%" value-key="id">
<el-option v-for="(item, index) in interfereoption" :key="index" :label="item.name"
:value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="关键字筛选:">
<el-form-item label="筛选数据">
<el-input v-model="tableStore.table.params.searchValue" clearable placeholder="请输入关键字"></el-input>
</el-form-item>
</template>
@@ -473,7 +473,7 @@ const makeUpSubmit = () => {
logPopUp.value = true
}
const socket = async (form: any) => {
const url = (localStorage.getItem('WebSocketUrl2') || 'ws://192.168.1.67:10405/api/recell/')
const url = (localStorage.getItem('WebSocketUrl2') || 'null')//'ws://192.168.1.67:10405/api/recell/')
logList.value = []
await dataSocket.socketServe.connect(`${url}${adminInfo.id}`)
await dataSocket.socketServe.send(form)

View File

@@ -3,7 +3,7 @@
<div class="online_header">
<TableHeader date-picker area ref="tableHeaderRef">
<template #select>
<el-form-item label="统计类型:">
<el-form-item label="统计类型">
<el-select
v-model="tableStore.table.params.statisticalType"
placeholder="请选择统计类型"
@@ -19,7 +19,7 @@
</el-select>
</el-form-item>
<el-form-item label="电压等级:">
<el-form-item label="电压等级">
<el-select
v-model="tableStore.table.params.scale"
multiple
@@ -37,7 +37,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="终端厂家:">
<el-form-item label="终端厂家">
<el-select
v-model="tableStore.table.params.manufacturer"
multiple
@@ -55,7 +55,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="干扰源类型:">
<el-form-item label="干扰源类型">
<el-select
v-model="tableStore.table.params.loadType"
multiple
@@ -83,6 +83,14 @@
/>
</el-select>
</el-form-item>
<el-form-item label="筛选数据">
<el-input
v-model.trim="tableStore.table.params.searchValue"
clearable
style="width: 200px"
placeholder="请输入关键字筛选"
/>
</el-form-item>
</template>
</TableHeader>
</div>
@@ -112,6 +120,7 @@ import TableHeader from '@/components/table/header/index.vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import charts from './components/charts.vue'
import { filterTree } from '@/utils/tree'
defineOptions({
name: 'harmonic-boot/area/harmonicDistortionRate'
})
@@ -200,7 +209,13 @@ const tableStore = new TableStore({
],
loadCallback: () => {
tableStore.table.data = tree2List(tableStore.table.data, Math.random() * 1000)
tableStore.table.data = tree2List(
filterTree(tableStore.table.data, node => {
// 筛选条件name 包含关键词
return node.name.includes(tableStore.table.params.searchValue)
}),
Math.random() * 1000
)
tableStore.table.column[0].title = tableStore.table.params.statisticalType.name
chartsRef.value && chartsRef.value.getTableStoreParams(tableStore.table.params)
setTimeout(() => {
@@ -215,6 +230,7 @@ tableStore.table.params.manufacturer = []
tableStore.table.params.loadType = []
tableStore.table.params.powerFlag = sign[0]?.algoDescribe || 0
tableStore.table.params.serverName = 'harmonicBoot'
tableStore.table.params.searchValue = ''
provide('tableStore', tableStore)
const tree2List = (list: any, id?: string) => {
//存储结果的数组

View File

@@ -2,7 +2,7 @@
<div class="default-main">
<TableHeader date-picker area showExport>
<template #select>
<el-form-item label="统计类型:" v-if="false">
<el-form-item label="统计类型" v-if="false">
<el-select
v-model="tableStore.table.params.statisticalType"
placeholder="请选择统计类型"
@@ -18,7 +18,7 @@
</el-select>
</el-form-item>
<el-form-item label="电压等级:" v-if="false">
<el-form-item label="电压等级" v-if="false">
<el-select
v-model="tableStore.table.params.scale"
multiple
@@ -36,7 +36,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="终端厂家:" v-if="false">
<el-form-item label="终端厂家" v-if="false">
<el-select
v-model="tableStore.table.params.manufacturer"
multiple
@@ -55,7 +55,7 @@
</el-select>
</el-form-item>
<el-form-item label="干扰源类型:">
<el-form-item label="干扰源类型">
<el-select
v-model="tableStore.table.params.loadType"
multiple

View File

@@ -3,7 +3,7 @@
<div class="online_header">
<TableHeader date-picker ref="tableHeaderRef">
<template #select>
<el-form-item label="统计类型:">
<el-form-item label="统计类型">
<el-select
v-model="formData.statisticalType"
placeholder="请选择统计类型"
@@ -18,7 +18,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="区域选择:">
<el-form-item label="区域选择">
<!-- <el-select ref="select1" v-model="deptName" placeholder="请选择所属部门区域" style="width: 100%">
<el-option :value="formData.deptIndex" style="height: auto"> -->
<!-- {{ formData.deptIndex }} -->
@@ -48,7 +48,7 @@
<!-- </el-option>
</el-select> -->
</el-form-item>
<el-form-item label="电压等级:">
<el-form-item label="电压等级">
<el-select
v-model="formData.scale"
multiple
@@ -66,7 +66,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="终端厂家:">
<el-form-item label="终端厂家">
<el-select
v-model="formData.manufacturer"
multiple
@@ -84,7 +84,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="干扰源类型:">
<el-form-item label="干扰源类型">
<el-select
v-model="formData.loadType"
multiple
@@ -102,7 +102,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="关键字筛选:">
<el-form-item label="筛选数据">
<el-input
v-model="tableStore.table.params.searchValue"
clearable

View File

@@ -11,7 +11,7 @@
margin-top: 2px;
"
></el-tag>
<span style="color: #A52a2a; font-weight: 400; float: left">&nbsp&nbsp在线<60% &nbsp&nbsp</span>
<span style="color: #A52a2a; font-weight: 400; float: left">&nbsp&nbsp合格<60% &nbsp&nbsp</span>
<el-tag
size="small"
style="
@@ -23,7 +23,7 @@
margin-top: 2px;
"
></el-tag>
<span style="color: #ffcc33; font-weight: 400; float: left">&nbsp&nbsp60%在线<90% &nbsp&nbsp</span>
<span style="color: #ffcc33; font-weight: 400; float: left">&nbsp&nbsp60%合格<90% &nbsp&nbsp</span>
<el-tag
style="
background: #339966;
@@ -34,7 +34,7 @@
margin-top: 2px;
"
></el-tag>
<span style="color: #339966; font-weight: 400; float: left">&nbsp&nbsp在线90%</span>
<span style="color: #339966; font-weight: 400; float: left">&nbsp&nbsp合格90%</span>
</div>
<my-echart
v-loading="loading"

View File

@@ -3,7 +3,7 @@
<div class="online_header">
<TableHeader date-picker area ref="tableHeaderRef">
<template #select>
<el-form-item label="统计类型:">
<el-form-item label="统计类型">
<el-select
v-model="tableStore.table.params.statisticalType"
placeholder="请选择统计类型"
@@ -19,7 +19,7 @@
</el-select>
</el-form-item>
<el-form-item label="电压等级:">
<el-form-item label="电压等级">
<el-select
v-model="tableStore.table.params.scale"
multiple
@@ -37,7 +37,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="终端厂家:">
<el-form-item label="终端厂家">
<el-select
v-model="tableStore.table.params.manufacturer"
multiple
@@ -55,7 +55,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="干扰源类型:">
<el-form-item label="干扰源类型">
<el-select
v-model="tableStore.table.params.loadType"
multiple
@@ -83,6 +83,14 @@
/>
</el-select>
</el-form-item>
<el-form-item label="筛选数据">
<el-input
v-model.trim="tableStore.table.params.searchValue"
clearable
style="width: 200px"
placeholder="请输入关键字筛选"
/>
</el-form-item>
</template>
</TableHeader>
</div>
@@ -113,6 +121,7 @@ import TableHeader from '@/components/table/header/index.vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import charts from './components/charts.vue'
import { filterTree } from '@/utils/tree'
defineOptions({
name: 'harmonic-boot/area/qualifiedRate'
})
@@ -272,7 +281,13 @@ const tableStore = new TableStore({
],
loadCallback: () => {
tableStore.table.data = tree2List(tableStore.table.data, Math.random() * 1000)
tableStore.table.data = tree2List(
filterTree(tableStore.table.data, node => {
// 筛选条件name 包含关键词
return node.name.includes(tableStore.table.params.searchValue)
}),
Math.random() * 1000
)
tableStore.table.column[0].title = tableStore.table.params.statisticalType.name
chartsRef.value && chartsRef.value.getTableStoreParams(tableStore.table.params)
@@ -288,6 +303,7 @@ tableStore.table.params.manufacturer = []
tableStore.table.params.loadType = []
tableStore.table.params.serverName = 'harmonicBoot'
tableStore.table.params.powerFlag = sign[0]?.algoDescribe || 0
tableStore.table.params.searchValue = ''
provide('tableStore', tableStore)
// const tree2List = (list: any, pid?: string) => {
// //存储结果的数组

View File

@@ -3,7 +3,7 @@
<div class="online_header">
<TableHeader date-picker area ref="tableHeaderRef">
<template #select>
<el-form-item label="统计类型:">
<el-form-item label="统计类型">
<el-select
v-model="tableStore.table.params.statisticalType"
placeholder="请选择统计类型"
@@ -19,7 +19,7 @@
</el-select>
</el-form-item>
<el-form-item label="终端厂家:">
<el-form-item label="终端厂家">
<el-select
v-model="tableStore.table.params.manufacturer"
multiple
@@ -37,6 +37,14 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="筛选数据">
<el-input
v-model.trim="tableStore.table.params.searchValue"
clearable
style="width: 200px"
placeholder="请输入关键字筛选"
/>
</el-form-item>
</template>
</TableHeader>
</div>
@@ -88,7 +96,7 @@
<span style="color: #ffcc33">检修状态</span>
</li>
<li>
<p style="background: #A52a2a">
<p style="background: #a52a2a">
<svg
t="1722910570852"
class="icon"
@@ -106,7 +114,7 @@
></path>
</svg>
</p>
<span style="color: #A52a2a">停运状态</span>
<span style="color: #a52a2a">停运状态</span>
</li>
</ul>
</div>
@@ -133,6 +141,7 @@ import TableHeader from '@/components/table/header/index.vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import charts from './components/charts.vue'
import { filterTree } from '@/utils/tree'
defineOptions({
name: 'harmonic-boot/area/terminalonlinerate'
})
@@ -279,7 +288,12 @@ const tableStore = new TableStore({
// // tableStore.table.params.searchEndTime = tableHeaderRef.value.datePickerRef.timeValue[1]
// },
loadCallback: () => {
tableStore.table.data = tree2List(tableStore.table.data, Math.random() * 1000)
tableStore.table.data = tree2List(
filterTree(tableStore.table.data, node => {
return node.name.includes(tableStore.table.params.searchValue)
}),
Math.random() * 1000
)
tableStore.table.column[0].title = formData.value.statisticalType.name
chartsRef.value && chartsRef.value.getTableStoreParams(tableStore.table.params)
@@ -294,7 +308,7 @@ tableStore.table.params.scale = voltageleveloption
tableStore.table.params.manufacturer = terminaloption
tableStore.table.params.loadType = interfereoption
tableStore.table.params.serverName = 'harmonicBoot'
tableStore.table.params.searchValue = ''
provide('tableStore', tableStore)
const tree2List = (list: any, id?: string) => {

View File

@@ -9,21 +9,21 @@
</el-option>
</el-select>
</el-form-item> -->
<el-form-item label="电压等级:">
<el-form-item label="电压等级">
<el-select v-model="tableStore.table.params.scale" filterable multiple collapse-tags clearable
placeholder="请选择电压等级" value-key="id">
<el-option v-for="item in voltageleveloption" :key="item.id" :label="item.name" :value="item">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="终端厂家:">
<el-form-item label="终端厂家">
<el-select v-model="tableStore.table.params.manufacturer" filterable multiple collapse-tags
clearable placeholder="请选择终端厂家" value-key="id">
<el-option v-for="item in terminaloption" :key="item.id" :label="item.name" :value="item">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="干扰源类型:">
<el-form-item label="干扰源类型">
<el-select v-model="tableStore.table.params.loadType" filterable multiple collapse-tags clearable
placeholder="请选择干扰源类型" value-key="id">
<el-option v-for="item in interfereoption" :key="item.id" :label="item.name" :value="item">

View File

@@ -7,7 +7,7 @@
</div>
<TableHeader :showReset="false" ref="TableHeaderRef">
<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-form-item>
</template>

View File

@@ -2,7 +2,7 @@
<el-dialog v-model="dialogVisible" draggable title="完整性不足详情" width="1000">
<TableHeader :showReset="false" ref="TableHeaderRef">
<template #select>
<el-form-item label="关键字">
<el-form-item label="筛选数据">
<el-input v-model="tableStore.table.params.searchValue" clearable placeholder="请输入关键字" />
</el-form-item>
</template>

View File

@@ -3,7 +3,7 @@
<!-- 模版 -->
<TableHeader datePicker showExport :showReset="false" ref="TableHeaderRef">
<template #select>
<!-- <el-form-item label="关键字">
<!-- <el-form-item label="筛选数据">
<el-input v-model="tableStore.table.params.searchValue" clearable placeholder="请输入关键字" />
</el-form-item> -->
</template>

View File

@@ -9,26 +9,31 @@
</el-option>
</el-select>
</el-form-item> -->
<el-form-item label="电压等级:">
<el-form-item label="电压等级">
<el-select v-model="tableStore.table.params.scale" filterable multiple collapse-tags clearable
placeholder="请选择电压等级" value-key="id">
<el-option v-for="item in voltageleveloption" :key="item.id" :label="item.name" :value="item">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="终端厂家:">
<el-form-item label="终端厂家">
<el-select v-model="tableStore.table.params.manufacturer" filterable multiple collapse-tags
clearable placeholder="请选择终端厂家" value-key="id">
<el-option v-for="item in terminaloption" :key="item.id" :label="item.name" :value="item">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="干扰源类型:">
<el-form-item label="干扰源类型">
<el-select v-model="tableStore.table.params.loadType" filterable multiple collapse-tags clearable
placeholder="请选择干扰源类型" value-key="id">
<el-option v-for="item in interfereoption" :key="item.id" :label="item.name" :value="item">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="筛选数据">
<el-input v-model="tableStore.table.params.searchValue" clearable style="width: 240px;"
placeholder="请输入变电站、监测点、监测对象" />
</el-form-item>
</template>
@@ -68,14 +73,14 @@ const tableStore = new TableStore({
{ field: 'lineScale', title: '电压等级', minWidth: "120px", },
{ field: 'lineName', title: '监测点名称', minWidth: "150px", },
{ field: 'loadType', title: '干扰源类型', minWidth: "150px", },
{ field: 'lineObjectName', title: '监测点对象名称', minWidth: "150px", formatter: (row: any) => { return row.cellValue == null ? '/' : row.cellValue } },
{ field: 'lineObjectName', title: '监测点对象名称', minWidth: "180px", formatter: (row: any) => { return row.cellValue == null ? '/' : row.cellValue } },
{ field: 'overDay', title: '超标天数', minWidth: "80px", },
{ field: 'freqOverDay', title: '频率偏差超标天数', minWidth: "100px", },
{ field: 'volDevOverDay', title: '电压偏差超标天数', minWidth: "100px", },
{ field: 'volDisOverDay', title: '电压总畸变率超标天数', minWidth: "100px", },
{ field: 'volContainOverDay', title: '谐波电压含有率超标天数', minWidth: "110px", },
{ field: 'harmVolOverDay', title: '谐波电压超标天数', minWidth: "100px", },
{ field: 'harmCurOverDay', title: '谐波电流超标天数', minWidth: "100px", },
{ field: 'freqOverDay', title: '频率偏差', minWidth: "100px", },
{ field: 'volDevOverDay', title: '电压偏差', minWidth: "100px", },
{ field: 'volDisOverDay', title: '电压总畸变率', minWidth: "100px", },
{ field: 'volContainOverDay', title: '谐波电压含有率', minWidth: "100px", },
{ field: 'harmVolOverDay', title: '谐波电压', minWidth: "100px", },
{ field: 'harmCurOverDay', title: '谐波电流', minWidth: "100px", },
{
title: '各次谐波电压含有率超标天数',
children: [
@@ -104,10 +109,11 @@ const tableStore = new TableStore({
],
},
{ field: 'threeUnbalance', title: '三相电压不平衡度超标天数', minWidth: "110px", },
{ field: 'negativeOverDay', title: '负序电流超标天数', minWidth: "100px", },
{ field: 'flickerOverDay', title: '闪变超标天数', minWidth: "100px", },
{ field: 'monitorNumber', title: '监测点编号', minWidth: "180px", formatter: (row: any) => { return row.cellValue == null ? '/' : row.cellValue } },
{ field: 'intHarmOverDay', title: '间谐波电压含有率', minWidth: "100px", },
{ field: 'threeUnbalance', title: '三相电压不平衡度', minWidth: "100px", },
{ field: 'negativeOverDay', title: '负序电流', minWidth: "100px", },
{ field: 'flickerOverDay', title: '闪变', minWidth: "100px", },
{ field: 'monitorNumber', title: '监测点编号', minWidth: "100px", formatter: (row: any) => { return row.cellValue == null ? '/' : row.cellValue } },
@@ -125,6 +131,7 @@ tableStore.table.params.monitorFlag = 2
tableStore.table.params.scale = []
tableStore.table.params.manufacturer = []
tableStore.table.params.loadType = []
tableStore.table.params.searchValue = ''
const wp = ref({})
provide('tableStore', tableStore)

View File

@@ -2,7 +2,7 @@
<div class="default-main">
<TableHeader datePicker area showExport>
<template #select>
<el-form-item label="统计类型:">
<el-form-item label="统计类型">
<el-select
v-model="tableStore.table.params.statisticalType"
placeholder="请选择统计类型"
@@ -16,7 +16,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="电压等级:">
<el-form-item label="电压等级">
<el-select
v-model="tableStore.table.params.scale"
filterable
@@ -34,7 +34,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="终端厂家:">
<el-form-item label="终端厂家">
<el-select
v-model="tableStore.table.params.manufacturer"
filterable
@@ -52,7 +52,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="干扰源类型:">
<el-form-item label="干扰源类型">
<el-select
v-model="tableStore.table.params.loadType"
filterable

View File

@@ -13,7 +13,7 @@
</el-select>
</el-form-item>
<el-form-item label="筛选数据">
<el-input v-model="tableStore.table.params.searchValue" clearable placeholder="请输入监测点名称" />
<el-input v-model="tableStore.table.params.searchValue" clearable style="width: 240px;" placeholder="请输入变电站、监测点、监测对象" />
</el-form-item>
</template>
@@ -162,14 +162,15 @@
<vxe-column field="company" 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="deviceName" title="终端名称" minWidth="110px"></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="lineName"
title="监测点名称"
:formatter="formatter"
minWidth="110px"
minWidth="130px"
></vxe-column>
<vxe-column v-if="VITE_FLAG" field="objName" title="监测对象" minWidth="130px"></vxe-column>
<vxe-column field="runFlag" title="运行状态" width="90px">
<template #default="{ row }">
<el-tag
@@ -222,6 +223,7 @@ defineOptions({
name: 'harmonic-boot/harmonic/getIntegrityData'
})
import { useRoute } from 'vue-router'
const VITE_FLAG = import.meta.env.VITE_NAME != 'jibei'
const route = useRoute()
const dictData = useDictData()
//字典获取监督对象类型
@@ -275,7 +277,7 @@ const tableStore = new TableStore({
if (tableStore.table.params.statisticalType.name == '终端厂家') {
return k.citTotalNum != 0
} else {
return k.citName != '上送国网' && k.citName != '上送国网'
return !k.citName.includes('上送')
}
})
// 合并子集数据 并去重

View File

@@ -160,8 +160,9 @@
<vxe-column field="company" 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="deviceName" title="终端名称" minWidth="110px"></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="runFlag" title="运行状态" width="90px">
<template #default="{ row }">
<el-tag
@@ -214,6 +215,7 @@ defineOptions({
name: 'harmonic-boot/harmonic/getIntegrityData'
})
import { useRoute } from 'vue-router'
const VITE_FLAG = import.meta.env.VITE_NAME != 'jibei'
const route = useRoute()
const dictData = useDictData()
//字典获取监督对象类型
@@ -268,7 +270,7 @@ const tableStore = new TableStore({
if (tableStore.table.params.statisticalType.name == '终端厂家') {
return k.citTotalNum != 0
} else {
return k.citName != '上送国网' && k.citName != '上送国网'
return !k.citName.includes('上送')
}
})
// console.log(123, tableStore.table.params.statisticalType.name)

View File

@@ -41,7 +41,7 @@
<el-tab-pane label="监测点运行状态" name="6" lazy v-if="!isReload">
<Yunxingzhuangtai v-if="activeName == '6'" />
</el-tab-pane>
<el-tab-pane label="实时数据" name="7" lazy v-if="!isReload && !VITE_FLAG && !VITE_FLAG1">
<el-tab-pane label="实时数据" name="7" lazy v-if="!isReload && !VITE_FLAG1">
<Shishishuju v-if="activeName == '7'" />
</el-tab-pane>
<el-tab-pane label="统计报表" name="8" lazy v-if="!isReload && VITE_FLAG">

View File

@@ -744,16 +744,6 @@ const initEcharts = (color: string, key: number, name: string) => {
}
//渲染echarts
const init = () => {
loading.value = true
const url = localStorage.getItem('WebSocketUrl') || 'ws://192.168.1.68:10407/api/pushMessage/'
echartsDataV1.value = initEcharts('#DAA520', 0, 'A相')
echartsDataV2.value = initEcharts('#2E8B57', 0, 'B相')
echartsDataV3.value = initEcharts('#A52a2a', 0, 'C相')
echartsDataA1.value = initEcharts('#DAA520', 1, 'A相')
echartsDataA2.value = initEcharts('#2E8B57', 1, 'B相')
echartsDataA3.value = initEcharts('#A52a2a', 1, 'C相')
if (!dataSocket.socketServe) {
console.error('WebSocket 客户端实例不存在')
return
@@ -765,9 +755,22 @@ const init = () => {
type: 'warning'
})
}
loading.value = true
const url = localStorage.getItem('WebSocketUrl') || 'null' //'ws://192.168.1.68:10407/api/pushMessage/'
echartsDataV1.value = initEcharts('#DAA520', 0, 'A相')
echartsDataV2.value = initEcharts('#2E8B57', 0, 'B相')
echartsDataV3.value = initEcharts('#A52a2a', 0, 'C相')
echartsDataA1.value = initEcharts('#DAA520', 1, 'A相')
echartsDataA2.value = initEcharts('#2E8B57', 1, 'B相')
echartsDataA3.value = initEcharts('#A52a2a', 1, 'C相')
let pids = monitoringPoint.state.pid.split(',')
dataSocket.socketServe.connect(`${url}${adminInfo.id},${monitoringPoint.state.lineId},${pids[pids.length - 2]}`)
dataSocket.socketServe.registerCallBack('message', (res: any) => {
if (res.Flag === false) {
return (loading.value = false)
}
txtContent.value = res.value
let data = JSON.parse(res.value)
time.value = data.TIME - 0
@@ -779,12 +782,12 @@ const init = () => {
iRmsA: data.I.A?.IRMS, //A相电流
iRmsB: data.I.B?.IRMS, //B相电流
iRmsC: data.I.C?.IRMS, //C相电流
v1AngA: data.V.A?.VFUND_ANGLE, //A相基波电压相位
v1AngB: data.V.B?.VFUND_ANGLE, //B相基波电压相位
v1AngC: data.V.C?.VFUND_ANGLE, //C相基波电压相位
i1AngA: data.I.A?.I_ANGLE, //A相基波电流相位
i1AngB: data.I.B?.I_ANGLE, //B相基波电流相位
i1AngC: data.I.C?.I_ANGLE, //C相基波电流相位
v1AngA: steAngle(data.V.A?.VFUND_ANGLE), //A相基波电压相位
v1AngB: steAngle(data.V.B?.VFUND_ANGLE), //B相基波电压相位
v1AngC: steAngle(data.V.C?.VFUND_ANGLE), //C相基波电压相位
i1AngA: steAngle(data.I.A?.I_ANGLE), //A相基波电流相位
i1AngB: steAngle(data.I.B?.I_ANGLE), //B相基波电流相位
i1AngC: steAngle(data.I.C?.I_ANGLE), //C相基波电流相位
freq: data.V.T?.FREQ, //频率
freqDev: data.V.T?.DELTA_FREQ, //频率偏差
vUnbalance: data.V.T?.V_UNBAN, //电压不平衡度
@@ -950,6 +953,20 @@ const setRealData = () => {
]
pieChart6.value.initChart()
}
const steAngle = (phase: any) => {
// 空值判断
if (phase === null || phase === undefined) {
return null
}
let normalizedPhase = phase % 360
if (normalizedPhase > 180) {
normalizedPhase -= 360
} else if (normalizedPhase < -180) {
normalizedPhase += 360
}
return normalizedPhase
}
defineExpose({ setRealData })
onMounted(() => {
init()

View File

@@ -9,7 +9,7 @@
clearable
maxlength="32"
show-word-limit
placeholder="筛选数据"
placeholder="请输入关键字"
/>
</el-form-item>
</template>

View File

@@ -3,101 +3,47 @@
<TableHeader area ref="TableHeaderRef" showExport>
<template #select>
<el-form-item label="运行状态">
<el-select
filterable
multiple
collapse-tags
v-model="tableStore.table.params.runFlag" clearable placeholder="请选择运行状态">
<el-option
v-for="item in runFlagList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="数据筛选">
<el-input
style="width: 240px"
placeholder="电站名称,终端编号,监测点名称、电压等级、终端厂家、干扰源类型"
v-model="tableStore.table.params.searchValue"
clearable
maxlength="32"
show-word-limit
></el-input>
</el-form-item>
<el-form-item label="通讯状态:">
<el-select
v-model="tableStore.table.params.comFlag"
filterable
multiple
collapse-tags
clearable
placeholder="请选择通讯状态"
>
<el-option
v-for="item in communicationstatus"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
<el-select filterable multiple collapse-tags v-model="tableStore.table.params.runFlag" clearable
placeholder="请选择运行状态">
<el-option v-for="item in runFlagList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="电压等级:">
<el-select
v-model="tableStore.table.params.scale"
filterable
multiple
collapse-tags
clearable
placeholder="请选择电压等级"
value-key="id"
>
<el-option
v-for="item in voltageleveloption"
:key="item.id"
:label="item.name"
:value="item"
></el-option>
<el-form-item label="通讯状态">
<el-select v-model="tableStore.table.params.comFlag" filterable multiple collapse-tags clearable
placeholder="请选择通讯状态">
<el-option v-for="item in communicationstatus" :key="item.value" :label="item.label"
:value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="终端厂家:">
<el-select
v-model="tableStore.table.params.manufacturer"
filterable
multiple
collapse-tags
clearable
placeholder="请选择终端厂家"
value-key="id"
>
<el-option
v-for="item in terminaloption"
:key="item.id"
:label="item.name"
:value="item"
></el-option>
<el-form-item label="电压等级">
<el-select v-model="tableStore.table.params.scale" filterable multiple collapse-tags clearable
placeholder="请选择电压等级" value-key="id">
<el-option v-for="item in voltageleveloption" :key="item.id" :label="item.name"
:value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="干扰源类型:">
<el-select
v-model="tableStore.table.params.loadType"
filterable
multiple
collapse-tags
clearable
placeholder="请选择干扰源类型"
value-key="id"
>
<el-option
v-for="item in interfereoption"
:key="item.id"
:label="item.name"
:value="item"
></el-option>
<el-form-item label="终端厂家">
<el-select v-model="tableStore.table.params.manufacturer" filterable multiple collapse-tags
clearable placeholder="请选择终端厂家" value-key="id">
<el-option v-for="item in terminaloption" :key="item.id" :label="item.name"
:value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="干扰源类型">
<el-select v-model="tableStore.table.params.loadType" filterable multiple collapse-tags clearable
placeholder="请选择干扰源类型" value-key="id">
<el-option v-for="item in interfereoption" :key="item.id" :label="item.name"
:value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="数据筛选">
<el-input style="width: 240px" placeholder="电站名称,终端编号,监测点名称、电压等级、终端厂家、干扰源类型"
v-model="tableStore.table.params.searchValue" clearable maxlength="32"
show-word-limit></el-input>
</el-form-item>
</template>
<template #operation>

View File

@@ -3,7 +3,7 @@
<TableHeader area>
<template #select>
<el-form-item label="监测点性质:">
<el-form-item label="监测点性质">
<el-select v-model="tableStore.table.params.powerFlag" filterable collapse-tags
placeholder="请选择监测点性质">
<el-option v-for="item in terminalstatus" :key="item.value" :label="item.label"
@@ -11,7 +11,7 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item label="电压等级:">
<el-form-item label="电压等级">
<el-select v-model="tableStore.table.params.scale" filterable multiple collapse-tags clearable
placeholder="请选择电压等级" value-key="id">
<el-option v-for="item in voltageleveloption" :key="item.id" :label="item.name" :value="item">
@@ -19,14 +19,14 @@
</el-select>
</el-form-item>
<el-form-item label="终端厂家:">
<el-form-item label="终端厂家">
<el-select v-model="tableStore.table.params.manufacturer" filterable multiple collapse-tags
clearable placeholder="请选择终端厂家" value-key="id">
<el-option v-for="item in terminaloption" :key="item.id" :label="item.name" :value="item">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="干扰源类型:">
<el-form-item label="干扰源类型">
<el-select v-model="tableStore.table.params.loadType" filterable multiple collapse-tags clearable
placeholder="请选择干扰源类型" value-key="id">
<el-option v-for="item in interfereoption" :key="item.id" :label="item.name" :value="item">
@@ -37,7 +37,7 @@
<el-form-item label="上报类型:">
<el-form-item label="上报类型">
<el-select v-model="tableStore.table.params.monitorFlag"
placeholder="请选择上报类型">
<el-option v-for="item in communicationstatus" :key="item.value" :label="item.label"

View File

@@ -10,7 +10,7 @@
</el-form-item> -->
<el-form-item label="终端厂家:">
<el-form-item label="终端厂家">
<el-select
v-model="tableStore.table.params.manufacturer"
filterable
@@ -29,10 +29,14 @@
</el-select>
</el-form-item>
<el-form-item label="数据筛选">
<el-input v-model="tableStore.table.params.searchValue" clearable placeholder="输入市公司、变电站、用户" />
<el-input
v-model="tableStore.table.params.searchValue"
clearable
placeholder="输入市公司、变电站、用户"
/>
</el-form-item>
<el-form-item label="通讯状态:">
<el-form-item label="通讯状态">
<el-select
v-model="tableStore.table.params.comF"
filterable
@@ -49,7 +53,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="终端状态:">
<el-form-item label="终端状态">
<el-select
v-model="tableStore.table.params.runF"
filterable
@@ -66,7 +70,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="干扰源类型:">
<el-form-item label="干扰源类型">
<el-select
v-model="tableStore.table.params.loadType"
filterable
@@ -84,7 +88,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="电压等级:">
<el-form-item label="电压等级">
<el-select
v-model="tableStore.table.params.scale"
filterable
@@ -102,8 +106,6 @@
></el-option>
</el-select>
</el-form-item>
</template>
</TableHeader>
<Table ref="tableRef" />
@@ -115,6 +117,10 @@ import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue'
import { useDictData } from '@/stores/dictData'
defineOptions({
name: 'harmonic-boot/run/terminalmessage'
})
const dictData = useDictData()
const view = ref(true)
@@ -159,7 +165,7 @@ const tableStore = new TableStore({
{ field: 'manufacturer', title: '厂家', minWidth: 100 },
{ field: 'devName', title: '终端名称', minWidth: 100 },
{ field: 'ip', title: '网络参数' ,width:110 },
{ field: 'ip', title: '网络参数', width: 110 },
{ field: 'loginTime', title: '投运时间', minWidth: 90 },
{ field: 'devType', title: '终端型号', minWidth: 100 },
{ field: 'port', title: '端口', minWidth: 60 },
@@ -186,8 +192,7 @@ const tableStore = new TableStore({
正常: 'success',
中断: 'danger'
}
},
}
],
beforeSearchFun: () => {
@@ -199,11 +204,11 @@ const tableStore = new TableStore({
tableStore.table.params.runFlag = []
if (tableStore.table.params.runF != null && tableStore.table.params.runF != '') {
tableStore.table.params.runFlag = [tableStore.table.params.runF]
tableStore.table.params.runFlag = tableStore.table.params.runF
}
tableStore.table.params.comFlag = []
if (tableStore.table.params.comF != null&&tableStore.table.params.comF != '') {
tableStore.table.params.comFlag = [tableStore.table.params.comF]
if (tableStore.table.params.comF != null && tableStore.table.params.comF != '') {
tableStore.table.params.comFlag = tableStore.table.params.comF
}
}
})
@@ -220,7 +225,6 @@ tableStore.table.params.scale = []
tableStore.table.params.manufacturer = []
tableStore.table.params.loadType = []
provide('tableStore', tableStore)
onMounted(() => {
tableStore.index()

View File

@@ -300,7 +300,7 @@ const list: any = ref([
])
const countList: any = ref([
{
title: '冀北',
title: '网公司',
children: [
{
title: '电网侧监测点',

View File

@@ -300,7 +300,7 @@ const list: any = ref([
])
const countList: any = ref([
{
title: '冀北',
title: '网公司',
children: [
{
title: '电网侧监测点',

View File

@@ -302,7 +302,7 @@ const list: any = ref([
])
const countList: any = ref([
{
title: '冀北',
title: '网公司',
children: [
{
title: '电网侧监测点',

View File

@@ -314,7 +314,7 @@ const list: any = ref([
])
const countList: any = ref([
{
title: '冀北',
title: '网公司',
children: [
{
title: '电网侧监测点',

View File

@@ -27,7 +27,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="终端厂家:">
<el-form-item label="终端厂家">
<el-select v-model="tableStore.table.params.manufacturer" clearable placeholder="请选择终端厂家">
<el-option
v-for="item in terminaloption"

View File

@@ -27,7 +27,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="终端厂家:">
<el-form-item label="终端厂家">
<el-select v-model="tableStore.table.params.manufacturer" clearable placeholder="请选择终端厂家">
<el-option
v-for="item in terminaloption"

View File

@@ -273,7 +273,7 @@ const tableStore = new TableStore({
if (tableStore.table.params.statisticalType.name == '终端厂家') {
return k.count != 0
} else {
return k.name != '上送国网' && k.name != '上送国网'
return !k.citName.includes('上送')
}
})
// 合并子集数据 并去重

View File

@@ -13,7 +13,13 @@
<Area v-model="form.deptId" @change="changeArea" />
</el-form-item>
<el-form-item for="-" label="计划名称:" prop="planName">
<el-input v-model="form.planName" placeholder="请输入计划名称" clearable maxlength="32" show-word-limit></el-input>
<el-input
v-model="form.planName"
placeholder="请输入计划名称"
clearable
maxlength="32"
show-word-limit
></el-input>
</el-form-item>
<el-form-item label="监督类型:" prop="supvType">
<el-select v-model="form.supvType" placeholder="请选择监督类型" style="width: 100%" @change="++key">
@@ -26,7 +32,13 @@
</el-select>
</el-form-item>
<el-form-item for="-" label="监督对象名称:" prop="supvObjectName">
<el-input v-model="form.supvObjectName" placeholder="请输入监督对象名称" clearable maxlength="32" show-word-limit></el-input>
<el-input
v-model="form.supvObjectName"
placeholder="请输入监督对象名称"
clearable
maxlength="32"
show-word-limit
></el-input>
</el-form-item>
<el-form-item for="-" label="计划开始时间:" prop="planStartTime">
<el-date-picker
@@ -336,7 +348,12 @@ const changeArea = () => {
treeList.value.forEach((item: any) => {
if (item.id == form.value.deptId) {
list.push(item)
if (item.id != treeListCgy.value[0].id && item.name != '冀北电力有限公司' && item.name != '超高压') {
if (
item.id != treeListCgy.value[0].id &&
!item.name.includes('电力有限公司') &&
item.name != '超高压'
) {
list.push(...treeListCgy.value)
}
} else {

View File

@@ -10,81 +10,39 @@
</el-radio-group>
</el-form-item>
<el-form-item label="筛选数据">
<el-input
v-model="tableStore.table.params.searchValue"
clearable
placeholder="输入关键字筛选"
style="width: 200px"
maxlength="32"
show-word-limit
/>
<el-input v-model="tableStore.table.params.searchValue" clearable placeholder="输入关键字筛选"
style="width: 200px" maxlength="32" show-word-limit />
</el-form-item>
<el-form-item label="触发类型:">
<el-select
v-model="tableStore.table.params.waveType"
placeholder="请选择触发类型"
clearable
multiple
collapse-tags
style="width: 100%"
>
<el-option
v-for="item in triggeroptions"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
<el-form-item label="触发类型">
<el-select v-model="tableStore.table.params.waveType" placeholder="请选择触发类型" clearable multiple
collapse-tags style="width: 100%">
<el-option v-for="item in triggeroptions" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="是否有波形:">
<el-select
v-model="tableStore.table.params.fileFlag"
placeholder="请选择是否存在波形"
clearable
style="width: 100%"
>
<el-option
v-for="item in wareaoptions"
:key="item.id"
:label="item.label"
:value="item.id"
></el-option>
<el-form-item label="是否有波形">
<el-select v-model="tableStore.table.params.fileFlag" placeholder="请选择是否存在波形" clearable
style="width: 100%">
<el-option v-for="item in wareaoptions" :key="item.id" :label="item.label"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="暂态持续时间(s):">
<el-input
v-model="tableStore.table.params.persistMin"
placeholder="请输入X秒"
onkeyup="value=value.replace(/[^\d.]/g,'')"
clearable
style="width: 94px"
></el-input>
<el-form-item label="暂态持续时间(s)">
<el-input v-model="tableStore.table.params.persistMin" placeholder="请输入X秒"
onkeyup="value=value.replace(/[^\d.]/g,'')" clearable style="width: 94px"></el-input>
<el-tag style="margin-left: 5px">&lt; 时间数 &lt;</el-tag>
<el-input
v-model="tableStore.table.params.persistMax"
placeholder="请输入X秒"
onkeyup="value=value.replace(/[^\d.]/g,'')"
clearable
style="margin-left: 5px; width: 94px"
></el-input>
<el-input v-model="tableStore.table.params.persistMax" placeholder="请输入X秒"
onkeyup="value=value.replace(/[^\d.]/g,'')" clearable
style="margin-left: 5px; width: 94px"></el-input>
</el-form-item>
<el-form-item label="事件严重度:">
<el-input
v-model="tableStore.table.params.severityMin"
placeholder="请输入正负数"
onkeyup="value=value.replace(/[^\d\.-]/g,'')"
clearable
style="width: 94px"
></el-input>
<el-form-item label="事件严重度">
<el-input v-model="tableStore.table.params.severityMin" placeholder="请输入正负数"
onkeyup="value=value.replace(/[^\d\.-]/g,'')" clearable style="width: 94px"></el-input>
<el-tag style="margin-left: 5px">&lt; 严重度 &lt;</el-tag>
<el-input
v-model="tableStore.table.params.severityMax"
placeholder="请输入正负数"
onkeyup="value=value.replace(/[^\d\.-]/g,'')"
clearable
style="margin-left: 5px; width: 94px"
></el-input>
<el-input v-model="tableStore.table.params.severityMax" placeholder="请输入正负数"
onkeyup="value=value.replace(/[^\d\.-]/g,'')" clearable
style="margin-left: 5px; width: 94px"></el-input>
</el-form-item>
<!-- <el-form-item label="触发类型:">
@@ -94,53 +52,24 @@
:value="item.id"></el-option>
</el-select>
</el-form-item> -->
<el-form-item label="暂态原因:">
<el-select
v-model="tableStore.table.params.eventReason"
placeholder="请选择暂态原因"
clearable
multiple
collapse-tags
style="width: 100%"
>
<el-option
v-for="item in reasonoptions"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
<el-form-item label="暂态原因">
<el-select v-model="tableStore.table.params.eventReason" placeholder="请选择暂态原因" clearable
multiple collapse-tags style="width: 100%">
<el-option v-for="item in reasonoptions" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="暂态核实原因:">
<el-select
v-model="tableStore.table.params.verifyReason"
placeholder="请选择暂态核实原因"
clearable
multiple
collapse-tags
collapse-tags-tooltip
>
<el-option
v-for="item in verifyReasonList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
<el-form-item label="暂态核实原因">
<el-select v-model="tableStore.table.params.verifyReason" placeholder="请选择暂态核实原因" clearable
multiple collapse-tags collapse-tags-tooltip>
<el-option v-for="item in verifyReasonList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="变电站(监测点):">
<el-cascader
v-model="tableStore.table.params.lineIds"
:options="options"
:props="defaultProps"
collapse-tags-tooltip
style="width: 257px"
filterable
clearable
collapse-tags
placeholder="请选择变电站(监测点)"
:show-all-levels="true"
/>
<el-form-item label="变电站(监测点)">
<el-cascader v-model="tableStore.table.params.lineIds" :options="options" :props="defaultProps"
collapse-tags-tooltip style="width: 257px" filterable clearable collapse-tags
placeholder="请选择变电站(监测点)" :show-all-levels="true" />
</el-form-item>
</template>
<template #operation>
@@ -272,7 +201,7 @@ const tableStore = new TableStore({
},
{
title: '操作',fixed: 'right',
title: '操作', fixed: 'right',
width: '150',
render: 'buttons',
@@ -330,7 +259,7 @@ const tableStore = new TableStore({
}
],
loadCallback: () => {}
loadCallback: () => { }
})
const options = ref([])
const defaultProps = {

View File

@@ -2,7 +2,7 @@
<div class="default-main">
<TableHeader datePicker ref="TableHeaderRef">
<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-form-item>
</template>

View File

@@ -3,7 +3,7 @@
<div v-show="view">
<TableHeader datePicker ref="TableHeaderRef" >
<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-form-item>

View File

@@ -68,7 +68,7 @@
></bm-marker>
</template>
<!-- -->
<BmlMarkerClusterer maxZoom="12">
<BmlMarkerClusterer maxZoom="12" :styles="styles">
<bm-marker
:position="path"
v-for="path in areaLineInfo"
@@ -163,6 +163,44 @@ const areaLineInfo = ref<any>([])
const siteList = ref<any>([])
const polyline = ref<any>([])
const lineId = ref('')
const imageUrl = new URL('@/assets/imgs/m0.png', import.meta.url).href
const imageUrl1 = new URL('@/assets/imgs/m1.png', import.meta.url).href
const imageUrl2 = new URL('@/assets/imgs/m3.png', import.meta.url).href
const imageUrl3 = new URL('@/assets/imgs/m4.png', import.meta.url).href
const styles = [
{
url: imageUrl,
size: {
width: 53,
height: 52
},
opt_textSize: 10
},
{
url: imageUrl1,
size: {
width: 56,
height: 55
},
opt_textSize: 12
},
{
url: imageUrl2,
size: {
width: 78,
height: 77
},
opt_textSize: 14
},
{
url: imageUrl3,
size: {
width: 90,
height: 89
},
opt_textSize: 14
},
]
const handler = async ({ BMap, map }: any) => {
let data = props.mapList
let r = 0.0035

View File

@@ -82,7 +82,7 @@
></bm-marker>
</template>
<!-- -->
<BmlMarkerClusterer maxZoom="12">
<BmlMarkerClusterer maxZoom="12" :styles="styles">
<bm-marker
:position="path"
v-for="path in areaLineInfo"
@@ -196,13 +196,51 @@ const areaLineInfo = ref<any>([])
const siteList = ref<any>([])
const polyline = ref<any>([])
const lineId = ref('')
const imageUrl = new URL('@/assets/imgs/m0.png', import.meta.url).href
const imageUrl1 = new URL('@/assets/imgs/m1.png', import.meta.url).href
const imageUrl2 = new URL('@/assets/imgs/m3.png', import.meta.url).href
const imageUrl3 = new URL('@/assets/imgs/m4.png', import.meta.url).href
const styles = [
{
url: imageUrl,
size: {
width: 53,
height: 52
},
opt_textSize: 10
},
{
url: imageUrl1,
size: {
width: 56,
height: 55
},
opt_textSize: 12
},
{
url: imageUrl2,
size: {
width: 78,
height: 77
},
opt_textSize: 14
},
{
url: imageUrl3,
size: {
width: 90,
height: 89
},
opt_textSize: 14
},
]
const handler = async ({ BMap, map }: any) => {
params.value.deptIndex = adminInfo.$state.deptId
params.value.searchBeginTime = datePickerRef.value.timeValue[0]
params.value.searchEndTime = datePickerRef.value.timeValue[1]
let { data } = await getAreaLineInfo(params.value)
let r = 0.0035
let list = data.filter((item: any) => item.lng != 0)
let list = data//.filter((item: any) => item.lng != 0)
list.forEach((item: any) => {
// 变电站图标
item.icon = {

View File

@@ -27,7 +27,7 @@
<vxe-column field="lineName" title="监测点" width="120"></vxe-column>
<vxe-column field="featureAmplitude" title="暂降(骤升)幅值(%)">
<template #default="{ row }">
{{ (row.featureAmplitude * 100).toFixed(2) }}
{{ row.featureAmplitude.toFixed(2) }}
</template>
</vxe-column>
<vxe-column field="duration" title="持续时间(s)"></vxe-column>

View File

@@ -3,7 +3,7 @@
<div class='default-main'>
<TableHeader>
<template #select>
<el-form-item label='关键词'>
<el-form-item label='筛选数据'>
<el-input
v-model='tableStore.table.params.searchValue'
clearable

View File

@@ -12,12 +12,12 @@
</template>
</el-page-header>
</el-form-item>
<el-form-item label="过滤筛选">
<el-form-item label="筛选数据">
<el-input
style="width: 240px"
v-model="tableStore.table.params.searchValue"
clearable
placeholder="请输入筛选数据"
placeholder="请输入关键字筛选"
maxlength="32"
show-word-limit
/>