修改冀北现场问题
绘制 算法库 案例库页面 联调 辽宁 有功功率页面
This commit is contained in:
1
src/assets/icons/资料库.svg
Normal file
1
src/assets/icons/资料库.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1725438023954" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4376" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><path d="M904 176v112H120V176h784m0-56H120c-30.9 0-56 25.1-56 56v112c0 30.9 25.1 56 56 56h784c30.9 0 56-25.1 56-56V176c0-30.9-25.1-56-56-56z" p-id="4377"></path><path d="M820 232m-28 0a28 28 0 1 0 56 0 28 28 0 1 0-56 0Z" p-id="4378"></path><path d="M708 232m-28 0a28 28 0 1 0 56 0 28 28 0 1 0-56 0Z" p-id="4379"></path><path d="M904 456v112H120V456h784m0-56H120c-30.9 0-56 25.1-56 56v112c0 30.9 25.1 56 56 56h784c30.9 0 56-25.1 56-56V456c0-30.9-25.1-56-56-56z" p-id="4380"></path><path d="M820 512m-28 0a28 28 0 1 0 56 0 28 28 0 1 0-56 0Z" p-id="4381"></path><path d="M596 232m-28 0a28 28 0 1 0 56 0 28 28 0 1 0-56 0Z" p-id="4382"></path><path d="M596 792m-28 0a28 28 0 1 0 56 0 28 28 0 1 0-56 0Z" p-id="4383"></path><path d="M708 512m-28 0a28 28 0 1 0 56 0 28 28 0 1 0-56 0Z" p-id="4384"></path><path d="M904 736v112H120V736h784m0-56H120c-30.9 0-56 25.1-56 56v112c0 30.9 25.1 56 56 56h784c30.9 0 56-25.1 56-56V736c0-30.9-25.1-56-56-56z" p-id="4385"></path><path d="M820 792m-28 0a28 28 0 1 0 56 0 28 28 0 1 0-56 0Z" p-id="4386"></path><path d="M708 792m-28 0a28 28 0 1 0 56 0 28 28 0 1 0-56 0Z" p-id="4387"></path></svg>
|
||||||
|
After Width: | Height: | Size: 1.4 KiB |
7099
src/assets/map/冀北电力有限公司.json
Normal file
7099
src/assets/map/冀北电力有限公司.json
Normal file
File diff suppressed because it is too large
Load Diff
1
src/assets/map/国家电网公司.json
Normal file
1
src/assets/map/国家电网公司.json
Normal file
File diff suppressed because one or more lines are too long
@@ -5,7 +5,7 @@
|
|||||||
<div class="bx" id="rms"></div>
|
<div class="bx" id="rms"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<el-button
|
<!-- <el-button
|
||||||
style="position: absolute; right: 10px; top: 0px; z-index: 20000"
|
style="position: absolute; right: 10px; top: 0px; z-index: 20000"
|
||||||
type="primary"
|
type="primary"
|
||||||
link
|
link
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
@click="download"
|
@click="download"
|
||||||
>
|
>
|
||||||
下载
|
下载
|
||||||
</el-button>
|
</el-button> -->
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="js">
|
<script lang="js">
|
||||||
@@ -916,7 +916,7 @@ export default {
|
|||||||
enabled: true,
|
enabled: true,
|
||||||
itemDistance: 5,
|
itemDistance: 5,
|
||||||
textStyle: {
|
textStyle: {
|
||||||
fontSize: "0.6rem",
|
fontSize: "0.7rem",
|
||||||
color: _this.DColor ? "#fff" : echartsColor.WordColor,
|
color: _this.DColor ? "#fff" : echartsColor.WordColor,
|
||||||
rich: {
|
rich: {
|
||||||
a: {
|
a: {
|
||||||
@@ -1035,7 +1035,7 @@ export default {
|
|||||||
},
|
},
|
||||||
grid: {
|
grid: {
|
||||||
left: "1%",
|
left: "1%",
|
||||||
right: "2.8%",
|
right: "45px",
|
||||||
bottom: "40px",
|
bottom: "40px",
|
||||||
top: "15%",
|
top: "15%",
|
||||||
containLabel: true,
|
containLabel: true,
|
||||||
@@ -1331,7 +1331,7 @@ export default {
|
|||||||
enabled: true,
|
enabled: true,
|
||||||
itemDistance: 5,
|
itemDistance: 5,
|
||||||
textStyle: {
|
textStyle: {
|
||||||
fontSize: "0.6rem",
|
fontSize: "0.7rem",
|
||||||
color: _this.DColor ? "#fff" : echartsColor.WordColor,
|
color: _this.DColor ? "#fff" : echartsColor.WordColor,
|
||||||
rich: {
|
rich: {
|
||||||
a: {
|
a: {
|
||||||
@@ -1453,7 +1453,7 @@ export default {
|
|||||||
},
|
},
|
||||||
grid: {
|
grid: {
|
||||||
left: "1%",
|
left: "1%",
|
||||||
right: "2.8%",
|
right: "45px",
|
||||||
bottom: "40px",
|
bottom: "40px",
|
||||||
top: "15%",
|
top: "15%",
|
||||||
containLabel: true,
|
containLabel: true,
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
<el-select v-model="interval" style="min-width: 90px; width: 90px; margin-right: 10px" @change="timeChange">
|
<el-select v-model="interval" style="min-width: 90px; width: 90px; margin-right: 10px" @change="timeChange">
|
||||||
<el-option v-for="item in timeOptions" :key="item.value" :label="item.label" :value="item.value" />
|
<el-option v-for="item in timeOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
</el-select>
|
</el-select>
|
||||||
|
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="timeValue"
|
v-model="timeValue"
|
||||||
type="daterange"
|
type="daterange"
|
||||||
@@ -306,6 +307,8 @@ const next = () => {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
month = month + 3
|
month = month + 3
|
||||||
|
console.log('🚀 ~ next ~ presentM:', presentM, month)
|
||||||
|
|
||||||
// 季度进位后,超过当前月份是不科学的
|
// 季度进位后,超过当前月份是不科学的
|
||||||
if (year == presentY && !props.nextFlag) {
|
if (year == presentY && !props.nextFlag) {
|
||||||
if (month >= presentM) {
|
if (month >= presentM) {
|
||||||
@@ -319,6 +322,7 @@ const next = () => {
|
|||||||
endTime = year + '-0' + presentM + '-' + presentD
|
endTime = year + '-0' + presentM + '-' + presentD
|
||||||
}
|
}
|
||||||
} else if (presentM > 3 && presentM < 7) {
|
} else if (presentM > 3 && presentM < 7) {
|
||||||
|
console.log(123123)
|
||||||
// 第二季度
|
// 第二季度
|
||||||
startTime = year + '-04-01'
|
startTime = year + '-04-01'
|
||||||
if (presentD < 10) {
|
if (presentD < 10) {
|
||||||
@@ -354,7 +358,7 @@ const next = () => {
|
|||||||
endTime = NowgetEndTime()
|
endTime = NowgetEndTime()
|
||||||
} else {
|
} else {
|
||||||
var day = getDays(year, month)
|
var day = getDays(year, month)
|
||||||
endTime = year + '-' + month + '-' + day
|
endTime = year + '-0' + month + '-' + day
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -371,6 +375,7 @@ const next = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
console.log(startTime, endTime)
|
||||||
} else if (interval.value == 5) {
|
} else if (interval.value == 5) {
|
||||||
} else if (interval.value == 4) {
|
} else if (interval.value == 4) {
|
||||||
//根据开始时间推
|
//根据开始时间推
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
<!-- tag -->
|
<!-- tag -->
|
||||||
<div v-if="field.render == 'tag' && fieldValue !== ''">
|
<div v-if="field.render == 'tag' && fieldValue !== ''">
|
||||||
<el-tag :type="getTagType(fieldValue, field.custom) || 'primary'" size="small">
|
<el-tag :type="getTagType(fieldValue, field.custom) || 'primary'" :effect="field.effect || ''" size="small">
|
||||||
{{ field.replaceValue ? field.replaceValue[fieldValue] : fieldValue }}
|
{{ field.replaceValue ? field.replaceValue[fieldValue] : fieldValue }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ const setDatePicker = (list: any) => {
|
|||||||
}
|
}
|
||||||
const onResetForm = () => {
|
const onResetForm = () => {
|
||||||
//时间重置成默认值
|
//时间重置成默认值
|
||||||
datePickerRef.value?.timeChange(3)
|
datePickerRef.value?.setInterval(3)
|
||||||
tableStore.onTableAction('reset', {})
|
tableStore.onTableAction('reset', {})
|
||||||
}
|
}
|
||||||
const setInterval = (val: any) => {
|
const setInterval = (val: any) => {
|
||||||
|
|||||||
81
src/components/tree/pqs/algorithmTree.vue
Normal file
81
src/components/tree/pqs/algorithmTree.vue
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
<template>
|
||||||
|
<div class="point-tree">
|
||||||
|
<div style="flex: 1; overflow: hidden">
|
||||||
|
<Tree ref="treeRef" :data="tree" style="width: 100%; height: 100%" :canExpand="false" v-bind="$attrs" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { nextTick, onMounted, ref, useAttrs } from 'vue'
|
||||||
|
import Tree from '../index.vue'
|
||||||
|
import { useAdminInfo } from '@/stores/adminInfo'
|
||||||
|
import { useDictData } from '@/stores/dictData'
|
||||||
|
import { getTerminalTreeForFive } from '@/api/device-boot/terminalTree'
|
||||||
|
import { useConfig } from '@/stores/config'
|
||||||
|
|
||||||
|
defineOptions({
|
||||||
|
name: 'pms/pointTree'
|
||||||
|
})
|
||||||
|
const emit = defineEmits(['init'])
|
||||||
|
const attrs = useAttrs()
|
||||||
|
const adminInfo = useAdminInfo()
|
||||||
|
const dictData = useDictData()
|
||||||
|
const config = useConfig()
|
||||||
|
const classificationData = dictData.getBasicData('Statistical_Type', ['Report_Type'])
|
||||||
|
const tree = ref()
|
||||||
|
const treeRef = ref()
|
||||||
|
|
||||||
|
const loadData = () => {
|
||||||
|
let nodeKey = ''
|
||||||
|
let res = {
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
name: '运行管理',
|
||||||
|
id: '1',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
name: '运行指标',
|
||||||
|
id: '2'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '数据质量核查',
|
||||||
|
id: '3'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
// getTerminalTreeForFive(form).then(res => {
|
||||||
|
res.data.forEach((item: any) => {
|
||||||
|
item.icon = 'el-icon-FolderOpened'
|
||||||
|
item.color = config.getColorVal('elementUiPrimary')
|
||||||
|
item.children.forEach((item2: any) => {
|
||||||
|
item2.icon = 'el-icon-Document'
|
||||||
|
item.color = config.getColorVal('elementUiPrimary')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
nodeKey = res.data[0].children[0].id
|
||||||
|
emit('init', res.data[0].children[0])
|
||||||
|
|
||||||
|
tree.value = res.data
|
||||||
|
if (nodeKey) {
|
||||||
|
setTimeout(() => {
|
||||||
|
treeRef.value.treeRef.setCurrentKey(nodeKey)
|
||||||
|
}, 10)
|
||||||
|
}
|
||||||
|
// })
|
||||||
|
}
|
||||||
|
loadData()
|
||||||
|
</script>
|
||||||
|
<style lang="scss">
|
||||||
|
.point-tree {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
background: #fff;
|
||||||
|
border: 1px solid var(--el-border-color);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="default-main">
|
<div class="default-main">
|
||||||
<TableHeader datePicker area ref="header">
|
<TableHeader datePicker theCurrentTime area ref="header">
|
||||||
<!-- <template v-slot:select>
|
<!-- <template v-slot:select>
|
||||||
|
|
||||||
</template> -->
|
</template> -->
|
||||||
@@ -49,15 +49,17 @@
|
|||||||
field="featureAmplitude"
|
field="featureAmplitude"
|
||||||
title="暂降(骤升)幅值(%)"
|
title="暂降(骤升)幅值(%)"
|
||||||
sortable
|
sortable
|
||||||
|
min-width="150px"
|
||||||
></vxe-column>
|
></vxe-column>
|
||||||
<vxe-column
|
<vxe-column
|
||||||
field="advanceReason"
|
field="advanceReason"
|
||||||
title="暂降原因"
|
title="暂降原因"
|
||||||
sortable
|
sortable
|
||||||
:formatter="formFilter"
|
:formatter="formFilter"
|
||||||
|
min-width="100px"
|
||||||
></vxe-column>
|
></vxe-column>
|
||||||
<vxe-column field="severity" title="严重度" sortable></vxe-column>
|
<vxe-column field="severity" title="严重度" min-width="100px" sortable></vxe-column>
|
||||||
<vxe-column title="操作">
|
<vxe-column title="操作" width="80px">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<el-button
|
<el-button
|
||||||
type="primary"
|
type="primary"
|
||||||
@@ -81,6 +83,7 @@
|
|||||||
<div v-if="wp != null">
|
<div v-if="wp != null">
|
||||||
<rmsboxi :value="1" :height="height" :boxoList="boxoList" :wp="wp" />
|
<rmsboxi :value="1" :height="height" :boxoList="boxoList" :wp="wp" />
|
||||||
</div>
|
</div>
|
||||||
|
<el-empty v-else description="暂无数据" class="custom-empty" />
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-col>
|
</el-col>
|
||||||
@@ -100,6 +103,7 @@ import { getMonitorEventAnalyseWave, getTransientDetailById } from '@/api/event-
|
|||||||
import rmsboxi from '@/components/echarts/rmsboxi.vue'
|
import rmsboxi from '@/components/echarts/rmsboxi.vue'
|
||||||
import { ref, onMounted, provide } from 'vue'
|
import { ref, onMounted, provide } from 'vue'
|
||||||
import { mainHeight } from '@/utils/layout'
|
import { mainHeight } from '@/utils/layout'
|
||||||
|
import { FormItem } from 'vxe-table'
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: 'newEnergy/highAndLowPressure'
|
name: 'newEnergy/highAndLowPressure'
|
||||||
})
|
})
|
||||||
@@ -181,15 +185,17 @@ const map = (res: any) => {
|
|||||||
},
|
},
|
||||||
viewControl: {
|
viewControl: {
|
||||||
alpha: 60,
|
alpha: 60,
|
||||||
distance: 120
|
distance: 120,
|
||||||
|
panMouseButton: 'right', //平移操作使用的鼠标按键
|
||||||
|
rotateMouseButton: 'left' //旋转操作使用的鼠标按键
|
||||||
},
|
},
|
||||||
label: {
|
label: {
|
||||||
show: true,
|
show: true,
|
||||||
color: '#000',
|
color: '#000',
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
|
distance: 0,
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#000',
|
color: '#000',
|
||||||
|
|
||||||
backgroundColor: '#000'
|
backgroundColor: '#000'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -210,7 +216,7 @@ const map = (res: any) => {
|
|||||||
show: true,
|
show: true,
|
||||||
position: 'top',
|
position: 'top',
|
||||||
formatter: params => {
|
formatter: params => {
|
||||||
return params.value[2] || ''
|
return params.value[2]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -231,8 +237,7 @@ const map = (res: any) => {
|
|||||||
},
|
},
|
||||||
emphasis: {
|
emphasis: {
|
||||||
label: { show: true }
|
label: { show: true }
|
||||||
},
|
}
|
||||||
zlevel: 1
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '高压',
|
name: '高压',
|
||||||
@@ -241,9 +246,9 @@ const map = (res: any) => {
|
|||||||
shading: 'lambert',
|
shading: 'lambert',
|
||||||
label: {
|
label: {
|
||||||
show: true,
|
show: true,
|
||||||
position: 'top',
|
// position: 'top',
|
||||||
formatter: params => {
|
formatter: params => {
|
||||||
return params.value[2] || ''
|
return params.value[2]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -253,7 +258,7 @@ const map = (res: any) => {
|
|||||||
: res.map((item: any) => {
|
: res.map((item: any) => {
|
||||||
return {
|
return {
|
||||||
...item,
|
...item,
|
||||||
value: [item.lng - 0.07, item.lat, item.highPressure || 0]
|
value: [item.lng - 0.1, item.lat, item.highPressure || 0]
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
// [
|
// [
|
||||||
@@ -296,6 +301,21 @@ const tabulation = (e: any) => {
|
|||||||
})
|
})
|
||||||
.then(res => {
|
.then(res => {
|
||||||
distributionData.value = res.data
|
distributionData.value = res.data
|
||||||
|
|
||||||
|
for (let i = 0; i < res.data.length; i++) {
|
||||||
|
if (res.data[i].wavePath != null) {
|
||||||
|
boxi(res.data[i])
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// res.data.forEach((item: any) => {
|
||||||
|
// if (item.wavePath != null) {
|
||||||
|
// boxi(item)
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
// 。wavePath
|
||||||
loading.value = false
|
loading.value = false
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.catch(() => {
|
||||||
@@ -369,4 +389,19 @@ const layout1 = mainHeight(93) as any
|
|||||||
:deep(.el-card__body) {
|
:deep(.el-card__body) {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
}
|
}
|
||||||
|
/* 自定义 el-empty 的样式 */
|
||||||
|
:deep(.custom-empty) {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
height: 100%; /* 调整高度 */
|
||||||
|
padding: 20px; /* 调整内边距 */
|
||||||
|
.el-empty__image {
|
||||||
|
display: none; /* 隐藏默认图片 */
|
||||||
|
}
|
||||||
|
.el-empty__description {
|
||||||
|
font-size: 14px; /* 调整字体大小 */
|
||||||
|
color: var(--vxe-font-color);
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -3,14 +3,14 @@
|
|||||||
<TableHeader :showSearch="false">
|
<TableHeader :showSearch="false">
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="">
|
<el-form-item label="">
|
||||||
<span class="text-large font-600 mr-3">{{ props.timePopUpBox.num }}</span>
|
<span class="text-large font-600 mr-3">{{ props.timePopUpBox.time }}</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-radio-group v-model="radio2" @change="tableStore.index()">
|
<el-radio-group v-model="radio2" @change="tableStore.index()">
|
||||||
<el-radio-button label="基础数据" value="1" />
|
<el-radio-button label="基础数据" value="1" />
|
||||||
<el-radio-button label="谐波电压" value="2" />
|
<el-radio-button label="谐波电压" value="2" />
|
||||||
<el-radio-button label="谐波电流" value="3" />
|
<el-radio-button label="谐波电流" value="3" />
|
||||||
<el-radio-button label="间谐波电压含有率" value="4" />
|
<el-radio-button label="间谐波电压" value="4" />
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
@@ -47,41 +47,54 @@ const tableStore = new TableStore({
|
|||||||
method: 'POST',
|
method: 'POST',
|
||||||
showPage: false,
|
showPage: false,
|
||||||
column: [
|
column: [
|
||||||
{ title: '指标', field: 'anotherName' },
|
{
|
||||||
|
title: '指标',
|
||||||
|
field: 'anotherName',
|
||||||
|
formatter: row => {
|
||||||
|
row.column.title =
|
||||||
|
radio2.value == '1' ? '指标' : (row.column.title = radio2.value == '4' ? '间谐波次数' : '谐波次数')
|
||||||
|
return row.cellValue
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ title: '单位', field: 'unit' },
|
||||||
{
|
{
|
||||||
title: '最小值',
|
title: '最小值',
|
||||||
field: 'code',
|
field: 'min',
|
||||||
children: [
|
children: [
|
||||||
{ title: 'A', field: 'num' },
|
{
|
||||||
{ title: 'B', field: 'num' },
|
title: 'A',
|
||||||
{ title: 'C', field: 'num' }
|
field: 'minphaseA',
|
||||||
|
formatter: row => formatter(row)
|
||||||
|
},
|
||||||
|
{ title: 'B', field: 'minphaseB', formatter: row => formatter(row) },
|
||||||
|
{ title: 'C', field: 'minphaseC', formatter: row => formatter(row) }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '最大值',
|
title: '最大值',
|
||||||
field: 'sort',
|
field: 'max',
|
||||||
children: [
|
children: [
|
||||||
{ title: 'A', field: 'num' },
|
{ title: 'A', field: 'maxphaseA', formatter: row => formatter(row) },
|
||||||
{ title: 'B', field: 'num' },
|
{ title: 'B', field: 'maxphaseB', formatter: row => formatter(row) },
|
||||||
{ title: 'C', field: 'num' }
|
{ title: 'C', field: 'maxphaseC', formatter: row => formatter(row) }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '平均值',
|
title: '平均值',
|
||||||
field: 'value',
|
field: 'avg',
|
||||||
children: [
|
children: [
|
||||||
{ title: 'A', field: 'num' },
|
{ title: 'A', field: 'avgphaseA', formatter: row => formatter(row) },
|
||||||
{ title: 'B', field: 'num' },
|
{ title: 'B', field: 'avgphaseB', formatter: row => formatter(row) },
|
||||||
{ title: 'C', field: 'num' }
|
{ title: 'C', field: 'avgphaseC', formatter: row => formatter(row) }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'cp95值',
|
title: 'cp95值',
|
||||||
field: 'levelName',
|
field: 'cp95',
|
||||||
children: [
|
children: [
|
||||||
{ title: 'A', field: 'num' },
|
{ title: 'A', field: 'cp95PhaseA', formatter: row => formatter(row) },
|
||||||
{ title: 'B', field: 'num' },
|
{ title: 'B', field: 'cp95PhaseB', formatter: row => formatter(row) },
|
||||||
{ title: 'C', field: 'num' }
|
{ title: 'C', field: 'cp95PhaseC', formatter: row => formatter(row) }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -96,7 +109,9 @@ const tableStore = new TableStore({
|
|||||||
})
|
})
|
||||||
|
|
||||||
provide('tableStore', tableStore)
|
provide('tableStore', tableStore)
|
||||||
|
const formatter = (row: any) => {
|
||||||
|
return row.cellValue || '/'
|
||||||
|
}
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
tableStore.index()
|
tableStore.index()
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -55,7 +55,7 @@
|
|||||||
@click="analyseList(item.label, index + 5)"
|
@click="analyseList(item.label, index + 5)"
|
||||||
>
|
>
|
||||||
<div style="font-size: 24px; font-weight: 700">
|
<div style="font-size: 24px; font-weight: 700">
|
||||||
<span :style="{ color: item.crossTheLine == '1' ? 'red' : 'green' }">
|
<span :style="{ color: item.crossTheLine > 0 ? 'red' : 'green' }">
|
||||||
{{ item.quantity }}
|
{{ item.quantity }}
|
||||||
</span>
|
</span>
|
||||||
<span style="font-size: 14px; font-weight: 500">个</span>
|
<span style="font-size: 14px; font-weight: 500">个</span>
|
||||||
@@ -83,7 +83,7 @@
|
|||||||
:data="tableData"
|
:data="tableData"
|
||||||
v-loading="loading"
|
v-loading="loading"
|
||||||
>
|
>
|
||||||
<vxe-column field="num" title="时间" width="180px">
|
<vxe-column field="time" title="时间" width="180px">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<el-link
|
<el-link
|
||||||
type="primary"
|
type="primary"
|
||||||
@@ -451,49 +451,39 @@ const tableStore = new TableStore({
|
|||||||
loadCallback: () => {
|
loadCallback: () => {
|
||||||
let res = tableStore.table.data
|
let res = tableStore.table.data
|
||||||
|
|
||||||
let mun =
|
|
||||||
res.minsNum1 +
|
|
||||||
res.minsNum2 +
|
|
||||||
res.minsNum3 +
|
|
||||||
res.minsNum4 +
|
|
||||||
res.minsNum5 +
|
|
||||||
res.minsNum6 +
|
|
||||||
res.minsNum7 +
|
|
||||||
res.minsNum8 +
|
|
||||||
res.minsNum9
|
|
||||||
powerList1.value = [
|
powerList1.value = [
|
||||||
{
|
{
|
||||||
label: '0%~10%',
|
label: '0%~10%',
|
||||||
quantity: res.minsNum0,
|
quantity: res.minsNum0,
|
||||||
percentage: ((res.minsNum0 / mun || 0) * 100).toFixed(2) + '%',
|
percentage: res.proportion0 + '%',
|
||||||
crossTheLine: res.isOrNot0,
|
crossTheLine: res.isOrNot0,
|
||||||
value: '0%~10%'
|
value: '0%~10%'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '10%~20%',
|
label: '10%~20%',
|
||||||
quantity: res.minsNum1,
|
quantity: res.minsNum1,
|
||||||
percentage: ((res.minsNum1 / mun || 0) * 100).toFixed(2) + '%',
|
percentage: res.proportion1 + '%',
|
||||||
crossTheLine: res.isOrNot1,
|
crossTheLine: res.isOrNot1,
|
||||||
value: '10%~10%'
|
value: '10%~10%'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '20%~30%',
|
label: '20%~30%',
|
||||||
quantity: res.minsNum2,
|
quantity: res.minsNum2,
|
||||||
percentage: ((res.minsNum2 / mun || 0) * 100).toFixed(2) + '%',
|
percentage: res.proportion2 + '%',
|
||||||
crossTheLine: res.isOrNot2,
|
crossTheLine: res.isOrNot2,
|
||||||
value: '10%~30%'
|
value: '10%~30%'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '30%~40%',
|
label: '30%~40%',
|
||||||
quantity: res.minsNum3,
|
quantity: res.minsNum3,
|
||||||
percentage: ((res.minsNum3 / mun || 0) * 100).toFixed(2) + '%',
|
percentage: res.proportion3 + '%',
|
||||||
crossTheLine: res.isOrNot3,
|
crossTheLine: res.isOrNot3,
|
||||||
value: '30%~40%'
|
value: '30%~40%'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '40%~50%',
|
label: '40%~50%',
|
||||||
quantity: res.minsNum4,
|
quantity: res.minsNum4,
|
||||||
percentage: ((res.minsNum4 / mun || 0) * 100).toFixed(2) + '%',
|
percentage: res.proportion4 + '%',
|
||||||
crossTheLine: res.isOrNot4,
|
crossTheLine: res.isOrNot4,
|
||||||
value: '40%~50%'
|
value: '40%~50%'
|
||||||
}
|
}
|
||||||
@@ -502,35 +492,35 @@ const tableStore = new TableStore({
|
|||||||
{
|
{
|
||||||
label: '50%~60%',
|
label: '50%~60%',
|
||||||
quantity: res.minsNum5,
|
quantity: res.minsNum5,
|
||||||
percentage: ((res.minsNum5 / mun || 0) * 100).toFixed(2) + '%',
|
percentage: res.proportion5 + '%',
|
||||||
crossTheLine: res.isOrNot5,
|
crossTheLine: res.isOrNot5,
|
||||||
value: '50%~60%'
|
value: '50%~60%'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '60%~70%',
|
label: '60%~70%',
|
||||||
quantity: res.minsNum6,
|
quantity: res.minsNum6,
|
||||||
percentage: ((res.minsNum6 / mun || 0) * 100).toFixed(2) + '%',
|
percentage: res.proportion6 + '%',
|
||||||
crossTheLine: res.isOrNot6,
|
crossTheLine: res.isOrNot6,
|
||||||
value: '60%~70%'
|
value: '60%~70%'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '70%~80%',
|
label: '70%~80%',
|
||||||
quantity: res.minsNum7,
|
quantity: res.minsNum7,
|
||||||
percentage: ((res.minsNum7 / mun || 0) * 100).toFixed(2) + '%',
|
percentage: res.proportion7 + '%',
|
||||||
crossTheLine: res.isOrNot7,
|
crossTheLine: res.isOrNot7,
|
||||||
value: '70%~80%'
|
value: '70%~80%'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '80%~90%',
|
label: '80%~90%',
|
||||||
quantity: res.minsNum8,
|
quantity: res.minsNum8,
|
||||||
percentage: ((res.minsNum8 / mun || 0) * 100).toFixed(2) + '%',
|
percentage: res.proportion8 + '%',
|
||||||
crossTheLine: res.isOrNot8,
|
crossTheLine: res.isOrNot8,
|
||||||
value: '80%~90%'
|
value: '80%~90%'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '90%~100%',
|
label: '90%~100%',
|
||||||
quantity: res.minsNum9,
|
quantity: res.minsNum9,
|
||||||
percentage: ((res.minsNum9 / mun || 0) * 100).toFixed(2) + '%',
|
percentage: res.proportion9 + '%',
|
||||||
crossTheLine: res.isOrNot9,
|
crossTheLine: res.isOrNot9,
|
||||||
value: '90%~100%'
|
value: '90%~100%'
|
||||||
}
|
}
|
||||||
@@ -552,7 +542,7 @@ const tableStore = new TableStore({
|
|||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
type: 'pie',
|
type: 'pie',
|
||||||
center: ['50%', '60%'],
|
center: ['50%', '55%'],
|
||||||
selectedOffset: 30,
|
selectedOffset: 30,
|
||||||
label: {
|
label: {
|
||||||
show: true,
|
show: true,
|
||||||
@@ -657,7 +647,7 @@ const exportData = () => {
|
|||||||
ElMessage('正在下载中,请稍等...')
|
ElMessage('正在下载中,请稍等...')
|
||||||
exportExcelRangTemplate({
|
exportExcelRangTemplate({
|
||||||
lineId: dotList.value.id,
|
lineId: dotList.value.id,
|
||||||
|
searchValue: treeList.value?.name + ' 0%-100% 区间数据',
|
||||||
searchBeginTime: tableStore.table.params.searchBeginTime,
|
searchBeginTime: tableStore.table.params.searchBeginTime,
|
||||||
searchEndTime: tableStore.table.params.searchEndTime
|
searchEndTime: tableStore.table.params.searchEndTime
|
||||||
}).then((res: any) => {
|
}).then((res: any) => {
|
||||||
@@ -678,6 +668,7 @@ const exportData = () => {
|
|||||||
const generateReports = () => {
|
const generateReports = () => {
|
||||||
let data: any = {
|
let data: any = {
|
||||||
lineId: dotList.value.id,
|
lineId: dotList.value.id,
|
||||||
|
searchValue: treeList.value?.name + ' 报告',
|
||||||
searchBeginTime: tableStore.table.params.searchBeginTime,
|
searchBeginTime: tableStore.table.params.searchBeginTime,
|
||||||
searchEndTime: tableStore.table.params.searchEndTime
|
searchEndTime: tableStore.table.params.searchEndTime
|
||||||
}
|
}
|
||||||
@@ -693,7 +684,7 @@ const generateReports = () => {
|
|||||||
const url = window.URL.createObjectURL(blob)
|
const url = window.URL.createObjectURL(blob)
|
||||||
const link = document.createElement('a') // 创建a标签
|
const link = document.createElement('a') // 创建a标签
|
||||||
link.href = url
|
link.href = url
|
||||||
link.download = treeList.value?.name +' 报告' // 设置下载的文件名
|
link.download = treeList.value?.name + ' 报告' // 设置下载的文件名
|
||||||
document.body.appendChild(link)
|
document.body.appendChild(link)
|
||||||
link.click() //执行下载
|
link.click() //执行下载
|
||||||
document.body.removeChild(link)
|
document.body.removeChild(link)
|
||||||
@@ -726,7 +717,7 @@ const analyseList = (e: string, i: number) => {
|
|||||||
lineId: dotList.value.id,
|
lineId: dotList.value.id,
|
||||||
searchBeginTime: tableStore.table.params.searchBeginTime,
|
searchBeginTime: tableStore.table.params.searchBeginTime,
|
||||||
searchEndTime: tableStore.table.params.searchEndTime,
|
searchEndTime: tableStore.table.params.searchEndTime,
|
||||||
statisticalId: i
|
field: i
|
||||||
})
|
})
|
||||||
.then(res => {
|
.then(res => {
|
||||||
loading.value = false
|
loading.value = false
|
||||||
@@ -750,6 +741,7 @@ const handleNodeClick = (data: any, node: any) => {
|
|||||||
console.log('🚀 ~ handleNodeClick ~ data:', data)
|
console.log('🚀 ~ handleNodeClick ~ data:', data)
|
||||||
if (data.level == 6) {
|
if (data.level == 6) {
|
||||||
dotList.value = data
|
dotList.value = data
|
||||||
|
// dotList.value.id = '6469e77fda42db12c7ca6620a092f03c1'
|
||||||
tableStore.index()
|
tableStore.index()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,11 +13,11 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="电压等级:" prop="scale">
|
<el-form-item label="电压等级:" prop="scale">
|
||||||
<el-select v-model="addData.scale" clearable collapse-tags placeholder="请选择干扰源类型">
|
<el-select v-model="addData.scale" clearable collapse-tags placeholder="请选择电压等级">
|
||||||
<el-option v-for="item in scaleList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
<el-option v-for="item in scaleList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="额定有功功率:" prop="ratedPower">
|
<el-form-item label="额定有功功率(kV):" prop="ratedPower">
|
||||||
<el-input-number v-model="addData.ratedPower" :min="0" style="width: 100%" />
|
<el-input-number v-model="addData.ratedPower" :min="0" style="width: 100%" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="经度:" prop="longitude">
|
<el-form-item label="经度:" prop="longitude">
|
||||||
@@ -103,7 +103,7 @@ const config = () => {
|
|||||||
formRef.value.validate((valid: any) => {
|
formRef.value.validate((valid: any) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
editNewStation(addData.value).then((res: any) => {
|
editNewStation(addData.value).then((res: any) => {
|
||||||
ElMessage.success('新增成功!')
|
ElMessage.success(title.value + '成功!')
|
||||||
emit('onSubmit')
|
emit('onSubmit')
|
||||||
cancel()
|
cancel()
|
||||||
})
|
})
|
||||||
@@ -137,6 +137,9 @@ const open = (row: any) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
userAdd.value = true
|
userAdd.value = true
|
||||||
|
setTimeout(() => {
|
||||||
|
formRef.value.clearValidate()
|
||||||
|
}, 20)
|
||||||
}
|
}
|
||||||
|
|
||||||
defineExpose({ open })
|
defineExpose({ open })
|
||||||
|
|||||||
@@ -41,10 +41,9 @@ const tableStore = new TableStore({
|
|||||||
method: 'POST',
|
method: 'POST',
|
||||||
column: [
|
column: [
|
||||||
{
|
{
|
||||||
|
field: 'index',
|
||||||
title: '序号',
|
title: '序号',
|
||||||
type: 'seq',
|
width: '80',
|
||||||
align: 'center',
|
|
||||||
width: 60,
|
|
||||||
formatter: (row: any) => {
|
formatter: (row: any) => {
|
||||||
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
|
||||||
}
|
}
|
||||||
@@ -62,9 +61,9 @@ const tableStore = new TableStore({
|
|||||||
|
|
||||||
formatter: (row: any) => scaleList.filter(item => item.id == row.cellValue)[0]?.name
|
formatter: (row: any) => scaleList.filter(item => item.id == row.cellValue)[0]?.name
|
||||||
},
|
},
|
||||||
{ field: 'ratedPower', title: '额定有功功率' },
|
{ field: 'ratedPower', title: '额定有功功率(kV)' },
|
||||||
{ field: 'longitude', title: '经度' },
|
{ field: 'longitude', title: '经度' },
|
||||||
{ field: 'latitude', title: '维度' },
|
{ field: 'latitude', title: '纬度' },
|
||||||
{
|
{
|
||||||
title: '操作',
|
title: '操作',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
|
|||||||
84
src/views/pqs/database/algorithm/components/form.vue
Normal file
84
src/views/pqs/database/algorithm/components/form.vue
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" :title="title" width="700px">
|
||||||
|
<el-scrollbar>
|
||||||
|
<el-form :inline="false" :model="form" label-width="auto" :rules="rules" ref="formRef">
|
||||||
|
<el-form-item label="算法名称">
|
||||||
|
<el-input v-model="form.name" placeholder="请输入算法名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="定义">
|
||||||
|
<el-input v-model="form.code" placeholder="请输入定义" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="计算公式">
|
||||||
|
<el-input v-model="form.remark" :rows="2" type="textarea" placeholder="请输入计算公式" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="计算周期">
|
||||||
|
<el-input v-model="form.code" placeholder="请输入计算周期" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="数据来源">
|
||||||
|
<el-input v-model="form.code" placeholder="请输入数据来源" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-scrollbar>
|
||||||
|
<template #footer>
|
||||||
|
<span class="dialog-footer">
|
||||||
|
<el-button @click="dialogVisible = false">取消</el-button>
|
||||||
|
<el-button type="primary" @click="submit">确认</el-button>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref, inject } from 'vue'
|
||||||
|
import { reactive } from 'vue'
|
||||||
|
import { ElMessage } from 'element-plus'
|
||||||
|
import TableStore from '@/utils/tableStore' // 若不是列表页面弹框可删除
|
||||||
|
|
||||||
|
const dialogVisible = ref(false)
|
||||||
|
const title = ref('')
|
||||||
|
const tableStore = inject('tableStore') as TableStore
|
||||||
|
const formRef = ref()
|
||||||
|
// 注意不要和表单ref的命名冲突
|
||||||
|
const form = reactive<anyObj>({
|
||||||
|
code: '',
|
||||||
|
name: '',
|
||||||
|
remark: '',
|
||||||
|
id: ''
|
||||||
|
})
|
||||||
|
const rules = {
|
||||||
|
name: [{ required: true, message: '角色名称不能为空', trigger: 'blur' }],
|
||||||
|
code: [{ required: true, message: '角色编码不能为空', trigger: 'blur' }]
|
||||||
|
}
|
||||||
|
|
||||||
|
const open = (text: string, data?: anyObj) => {
|
||||||
|
title.value = text
|
||||||
|
dialogVisible.value = true
|
||||||
|
if (data) {
|
||||||
|
// 表单赋值
|
||||||
|
for (let key in form) {
|
||||||
|
form[key] = data[key]
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 在此处恢复默认表单
|
||||||
|
for (let key in form) {
|
||||||
|
form[key] = ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const submit = () => {
|
||||||
|
formRef.value.validate(async (valid: boolean) => {
|
||||||
|
if (valid) {
|
||||||
|
if (form.id) {
|
||||||
|
// await update(form)
|
||||||
|
} else {
|
||||||
|
// await create(form)
|
||||||
|
}
|
||||||
|
ElMessage.success('保存成功')
|
||||||
|
tableStore.index()
|
||||||
|
dialogVisible.value = false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({ open })
|
||||||
|
</script>
|
||||||
188
src/views/pqs/database/algorithm/index.vue
Normal file
188
src/views/pqs/database/algorithm/index.vue
Normal file
@@ -0,0 +1,188 @@
|
|||||||
|
<template>
|
||||||
|
<!-- 算法库 -->
|
||||||
|
<div class="default-main" :style="height">
|
||||||
|
<splitpanes style="height: 100%" class="default-theme" id="navigation-splitpanes">
|
||||||
|
<pane :size="size">
|
||||||
|
<algorithmTree
|
||||||
|
:default-expand-all="false"
|
||||||
|
:default-expanded-keys="monitoringPoint.state.lineId ? [monitoringPoint.state.lineId] : []"
|
||||||
|
:current-node-key="monitoringPoint.state.lineId"
|
||||||
|
@node-click="handleNodeClick"
|
||||||
|
@init="handleNodeClick"
|
||||||
|
></algorithmTree>
|
||||||
|
</pane>
|
||||||
|
<pane style="background: #fff" :style="height">
|
||||||
|
<!-- <div :style="height"></div> -->
|
||||||
|
<TableHeader ref="TableHeaderRef" :show-search="false">
|
||||||
|
<template v-slot:select>
|
||||||
|
<el-radio-group v-model="tableStore.table.params.radio2" @change="tableStore.index()">
|
||||||
|
<el-radio-button label="监测覆盖率" value="1" />
|
||||||
|
<el-radio-button label="装置在线率" value="2" />
|
||||||
|
<el-radio-button label="数据完整性" value="3" />
|
||||||
|
</el-radio-group>
|
||||||
|
</template>
|
||||||
|
<template #operation>
|
||||||
|
<el-button icon="el-icon-Plus" type="primary" @click="addUser">新增</el-button>
|
||||||
|
</template>
|
||||||
|
</TableHeader>
|
||||||
|
<Table ref="tableRef"></Table>
|
||||||
|
</pane>
|
||||||
|
</splitpanes>
|
||||||
|
<!-- 弹框 -->
|
||||||
|
<PopupEdit ref="popupEditRef" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { onMounted, ref, provide } from 'vue'
|
||||||
|
import 'splitpanes/dist/splitpanes.css'
|
||||||
|
import { Splitpanes, Pane } from 'splitpanes'
|
||||||
|
import TableStore from '@/utils/tableStore'
|
||||||
|
import algorithmTree from '@/components/tree/pqs/algorithmTree.vue'
|
||||||
|
import TableHeader from '@/components/table/header/index.vue'
|
||||||
|
import { mainHeight } from '@/utils/layout'
|
||||||
|
import Table from '@/components/table/index.vue'
|
||||||
|
import { getLineExport, getList, selectReleation } from '@/api/event-boot/report'
|
||||||
|
import PopupEdit from './components/form.vue'
|
||||||
|
import { useMonitoringPoint } from '@/stores/monitoringPoint'
|
||||||
|
import { ElMessage } from 'element-plus'
|
||||||
|
defineOptions({
|
||||||
|
name: 'database/algorithm'
|
||||||
|
})
|
||||||
|
const monitoringPoint = useMonitoringPoint()
|
||||||
|
const height = mainHeight(20)
|
||||||
|
const size = ref(0)
|
||||||
|
const popupEditRef = ref()
|
||||||
|
|
||||||
|
const TableHeaderRef = ref()
|
||||||
|
const dotList: any = ref({
|
||||||
|
name: monitoringPoint.state.lineName.split('>')[3],
|
||||||
|
id: monitoringPoint.state.lineId,
|
||||||
|
level: 6
|
||||||
|
})
|
||||||
|
|
||||||
|
const templatePolicy: any = ref([])
|
||||||
|
const tableStore = new TableStore({
|
||||||
|
url: '/user-boot/dept/deptTree',
|
||||||
|
method: 'POST',
|
||||||
|
column: [
|
||||||
|
{ title: '算法名称', field: 'name' },
|
||||||
|
{
|
||||||
|
title: '定义',
|
||||||
|
field: 'name1'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '计算公式',
|
||||||
|
field: 'name2'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '计算周期',
|
||||||
|
field: 'name3'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '数据来源',
|
||||||
|
field: 'name4'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '是否启用',
|
||||||
|
field: 'name5',
|
||||||
|
render: 'tag',
|
||||||
|
effect: 'dark',
|
||||||
|
custom: {
|
||||||
|
0: 'info',
|
||||||
|
1: 'success'
|
||||||
|
},
|
||||||
|
replaceValue: {
|
||||||
|
0: '否',
|
||||||
|
1: '是'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// {
|
||||||
|
// title: '操作',
|
||||||
|
// align: 'center',
|
||||||
|
// width: '180',
|
||||||
|
// render: 'buttons',
|
||||||
|
// buttons: [
|
||||||
|
// {
|
||||||
|
// name: 'edit',
|
||||||
|
// title: '编辑',
|
||||||
|
// type: 'primary',
|
||||||
|
// icon: 'el-icon-EditPen',
|
||||||
|
// render: 'basicButton',
|
||||||
|
// click: async row => {}
|
||||||
|
// }
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
],
|
||||||
|
loadCallback: () => {
|
||||||
|
tableStore.table.data = [
|
||||||
|
{
|
||||||
|
name: '测试名称',
|
||||||
|
name1: 'xxx',
|
||||||
|
name2: 'XXX',
|
||||||
|
name3: '1月',
|
||||||
|
name4: '单体系统',
|
||||||
|
name5: '1'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '测试名称',
|
||||||
|
name1: 'xxx',
|
||||||
|
name2: 'XXX',
|
||||||
|
name3: '1月',
|
||||||
|
name4: '单体系统',
|
||||||
|
name5: '0'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
tableStore.table.params.radio2 = '1'
|
||||||
|
|
||||||
|
// 弹框
|
||||||
|
const addUser = () => {
|
||||||
|
popupEditRef.value.open('新增算法')
|
||||||
|
}
|
||||||
|
|
||||||
|
provide('tableStore', tableStore)
|
||||||
|
onMounted(() => {
|
||||||
|
const dom = document.getElementById('navigation-splitpanes')
|
||||||
|
if (dom) {
|
||||||
|
size.value = Math.round((180 / dom.offsetHeight) * 100)
|
||||||
|
}
|
||||||
|
tableStore.index()
|
||||||
|
})
|
||||||
|
|
||||||
|
const handleNodeClick = (data: any, node: any) => {
|
||||||
|
dotList.value = data
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss">
|
||||||
|
.splitpanes.default-theme .splitpanes__pane {
|
||||||
|
background: #eaeef1;
|
||||||
|
}
|
||||||
|
.grid-content {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.divBox {
|
||||||
|
width: 250px;
|
||||||
|
height: 31px;
|
||||||
|
margin: auto;
|
||||||
|
line-height: 32px;
|
||||||
|
border: 1px solid #c9c9c9;
|
||||||
|
&:hover {
|
||||||
|
border: 1px solid #002255;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.box {
|
||||||
|
padding: 10px;
|
||||||
|
// margin-top: 10px;
|
||||||
|
overflow-y: auto;
|
||||||
|
font-size: 15px;
|
||||||
|
}
|
||||||
|
.el-divider--horizontal {
|
||||||
|
margin: 10px 0;
|
||||||
|
}
|
||||||
|
.mTop {
|
||||||
|
margin-top: 5px;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
84
src/views/pqs/database/case/components/form.vue
Normal file
84
src/views/pqs/database/case/components/form.vue
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" :title="title" width="700px">
|
||||||
|
<el-scrollbar>
|
||||||
|
<el-form :inline="false" :model="form" label-width="auto" :rules="rules" ref="formRef">
|
||||||
|
<el-form-item label="算法名称">
|
||||||
|
<el-input v-model="form.name" placeholder="请输入算法名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="定义">
|
||||||
|
<el-input v-model="form.code" placeholder="请输入定义" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="计算公式">
|
||||||
|
<el-input v-model="form.remark" :rows="2" type="textarea" placeholder="请输入计算公式" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="计算周期">
|
||||||
|
<el-input v-model="form.code" placeholder="请输入计算周期" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="数据来源">
|
||||||
|
<el-input v-model="form.code" placeholder="请输入数据来源" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-scrollbar>
|
||||||
|
<template #footer>
|
||||||
|
<span class="dialog-footer">
|
||||||
|
<el-button @click="dialogVisible = false">取消</el-button>
|
||||||
|
<el-button type="primary" @click="submit">确认</el-button>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref, inject } from 'vue'
|
||||||
|
import { reactive } from 'vue'
|
||||||
|
import { ElMessage } from 'element-plus'
|
||||||
|
import TableStore from '@/utils/tableStore' // 若不是列表页面弹框可删除
|
||||||
|
|
||||||
|
const dialogVisible = ref(false)
|
||||||
|
const title = ref('')
|
||||||
|
const tableStore = inject('tableStore') as TableStore
|
||||||
|
const formRef = ref()
|
||||||
|
// 注意不要和表单ref的命名冲突
|
||||||
|
const form = reactive<anyObj>({
|
||||||
|
code: '',
|
||||||
|
name: '',
|
||||||
|
remark: '',
|
||||||
|
id: ''
|
||||||
|
})
|
||||||
|
const rules = {
|
||||||
|
name: [{ required: true, message: '角色名称不能为空', trigger: 'blur' }],
|
||||||
|
code: [{ required: true, message: '角色编码不能为空', trigger: 'blur' }]
|
||||||
|
}
|
||||||
|
|
||||||
|
const open = (text: string, data?: anyObj) => {
|
||||||
|
title.value = text
|
||||||
|
dialogVisible.value = true
|
||||||
|
if (data) {
|
||||||
|
// 表单赋值
|
||||||
|
for (let key in form) {
|
||||||
|
form[key] = data[key]
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 在此处恢复默认表单
|
||||||
|
for (let key in form) {
|
||||||
|
form[key] = ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const submit = () => {
|
||||||
|
formRef.value.validate(async (valid: boolean) => {
|
||||||
|
if (valid) {
|
||||||
|
if (form.id) {
|
||||||
|
// await update(form)
|
||||||
|
} else {
|
||||||
|
// await create(form)
|
||||||
|
}
|
||||||
|
ElMessage.success('保存成功')
|
||||||
|
tableStore.index()
|
||||||
|
dialogVisible.value = false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({ open })
|
||||||
|
</script>
|
||||||
84
src/views/pqs/database/case/index.vue
Normal file
84
src/views/pqs/database/case/index.vue
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
<template>
|
||||||
|
<!-- 案例库 -->
|
||||||
|
<div class="default-main">
|
||||||
|
<TableHeader ref="TableHeaderRef" datePicker>
|
||||||
|
<template #operation>
|
||||||
|
<el-button icon="el-icon-Plus" type="primary" @click="addUser">新增</el-button>
|
||||||
|
</template>
|
||||||
|
</TableHeader>
|
||||||
|
<Table ref="tableRef"></Table>
|
||||||
|
<!-- 弹框 -->
|
||||||
|
<PopupEdit ref="popupEditRef" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { onMounted, ref, provide } from 'vue'
|
||||||
|
|
||||||
|
import TableStore from '@/utils/tableStore'
|
||||||
|
import TableHeader from '@/components/table/header/index.vue'
|
||||||
|
|
||||||
|
import Table from '@/components/table/index.vue'
|
||||||
|
import PopupEdit from './components/form.vue'
|
||||||
|
defineOptions({
|
||||||
|
name: 'database/case'
|
||||||
|
})
|
||||||
|
|
||||||
|
const popupEditRef = ref()
|
||||||
|
|
||||||
|
const TableHeaderRef = ref()
|
||||||
|
|
||||||
|
const tableStore = new TableStore({
|
||||||
|
url: '/user-boot/dept/deptTree',
|
||||||
|
method: 'POST',
|
||||||
|
column: [
|
||||||
|
{ title: '电能质量事件名称', field: 'name' },
|
||||||
|
{
|
||||||
|
title: '发生事件',
|
||||||
|
field: 'name1'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '发生地点',
|
||||||
|
field: 'name2'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '处理措施',
|
||||||
|
field: 'name3'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '治理效果',
|
||||||
|
field: 'name4'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
loadCallback: () => {
|
||||||
|
tableStore.table.data = [
|
||||||
|
{
|
||||||
|
name: '测试名称',
|
||||||
|
name1: 'xxx',
|
||||||
|
name2: 'XXX',
|
||||||
|
name3: '1月',
|
||||||
|
name4: '单体系统',
|
||||||
|
name5: '1'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '测试名称',
|
||||||
|
name1: 'xxx',
|
||||||
|
name2: 'XXX',
|
||||||
|
name3: '1月',
|
||||||
|
name4: '单体系统',
|
||||||
|
name5: '0'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// 弹框
|
||||||
|
const addUser = () => {
|
||||||
|
popupEditRef.value.open('新增算法')
|
||||||
|
}
|
||||||
|
|
||||||
|
provide('tableStore', tableStore)
|
||||||
|
onMounted(() => {
|
||||||
|
tableStore.index()
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
<style lang="scss"></style>
|
||||||
11
src/views/pqs/database/standard/index.vue
Normal file
11
src/views/pqs/database/standard/index.vue
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<template>
|
||||||
|
|
||||||
|
<div> 标准</div>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
<script setup lang='ts'>
|
||||||
|
import { ref, reactive } from 'vue'
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
|
||||||
|
</style>
|
||||||
11
src/views/pqs/database/stencil/index.vue
Normal file
11
src/views/pqs/database/stencil/index.vue
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<template>
|
||||||
|
|
||||||
|
<div> 模版</div>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
<script setup lang='ts'>
|
||||||
|
import { ref, reactive } from 'vue'
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
|
||||||
|
</style>
|
||||||
1
types/table.d.ts
vendored
1
types/table.d.ts
vendored
@@ -57,6 +57,7 @@ declare global {
|
|||||||
custom?: any
|
custom?: any
|
||||||
// 值替换数据,如{open: '开'}
|
// 值替换数据,如{open: '开'}
|
||||||
replaceValue?: any
|
replaceValue?: any
|
||||||
|
effect?: any
|
||||||
// 时间格式化
|
// 时间格式化
|
||||||
timeFormat?: string
|
timeFormat?: string
|
||||||
// 开关控制
|
// 开关控制
|
||||||
|
|||||||
@@ -24,20 +24,22 @@ export default defineConfig({
|
|||||||
proxy: {
|
proxy: {
|
||||||
'/api': {
|
'/api': {
|
||||||
// target: 'http://10.95.53.49:10215', //海南服务器ip
|
// target: 'http://10.95.53.49:10215', //海南服务器ip
|
||||||
target: 'http://10.118.135.128:10215', ///hsw
|
// target: 'http://10.118.135.128:10215', ///hsw
|
||||||
|
target: 'http://192.168.1.122:10215', ///hsw
|
||||||
|
// target: 'http://108c3dfb.r18.cpolar.top', ///hsw
|
||||||
// target: 'http://10.119.65.152:10215', //数据中心
|
// target: 'http://10.119.65.152:10215', //数据中心
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
rewrite: path => path.replace(/^\/api/, '') //路径重写,把'/api'替换为''
|
rewrite: path => path.replace(/^\/api/, '') //路径重写,把'/api'替换为''
|
||||||
},
|
},
|
||||||
'/api-docx': {
|
'/api-docx': {
|
||||||
// 文件服务器地址
|
// 文件服务器地址
|
||||||
target: 'http://10.118.135.128:9009',
|
target: 'http://192.168.1.22:9009',
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
rewrite: path => path.replace(/^\/api-docx/, '')
|
rewrite: path => path.replace(/^\/api-docx/, '')
|
||||||
},
|
},
|
||||||
'/map': {
|
'/map': {
|
||||||
// target: 'http://10.95.53.49:8088', //海南服务器ip
|
// target: 'http://10.95.53.49:8088', //海南服务器ip
|
||||||
target: 'http://192.168.1.125:8088', //hsw
|
target: 'http://192.168.1.125:9009', //hsw
|
||||||
// target: 'http://192.168.1.125:8088', //数据中心
|
// target: 'http://192.168.1.125:8088', //数据中心
|
||||||
changeOrigin: true
|
changeOrigin: true
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user