修改测试bug

This commit is contained in:
guanj
2025-07-10 16:32:49 +08:00
parent 226031a451
commit 2f5ab61e9c
57 changed files with 1962 additions and 1143 deletions

View File

@@ -16,6 +16,14 @@ export function getMonitorSelect(params: any) {
params params
}) })
} }
//获取谐波源特性字典列表
export function characteristicList(data: any) {
return createAxios({
url: '/advance-boot/assessDicHarmonicCharacter/list',
method: 'Post',
data
})
}
//新增谐波源特性字典 //新增谐波源特性字典
export function characteristicAdd(data: any) { export function characteristicAdd(data: any) {
return createAxios({ return createAxios({
@@ -250,4 +258,69 @@ export function windPowerDdit(data: any) {
data data
}) })
} }
//获取评估用户负荷参数列表
export function loadParamList(data: any) {
return createAxios({
url: '/advance-boot/assessLoadParam/list',
method: 'post',
data
})
}
//新增评估用户负荷参数
export function loadParamAdd(data: any) {
return createAxios({
url: '/advance-boot/assessLoadParam/add',
method: 'post',
data
})
}
//删除评估用户负荷参数
export function loadParamDelete(data: any) {
return createAxios({
url: '/advance-boot/assessLoadParam/delete',
method: 'post',
data
})
}
//修改评估用户负荷参数
export function loadParamEdit(data: any) {
return createAxios({
url: '/advance-boot/assessLoadParam/edit',
method: 'post',
data
})
}
//获取评估用户冲击负荷参数列表
export function shockList(data: any) {
return createAxios({
url: '/advance-boot/assessShockLoadParam/list',
method: 'post',
data
})
}
//新增评估用户冲击负荷参数
export function shockAdd(data: any) {
return createAxios({
url: '/advance-boot/assessShockLoadParam/add',
method: 'post',
data
})
}
//修改评估用户冲击负荷参数
export function shockEdit(data: any) {
return createAxios({
url: '/advance-boot/assessShockLoadParam/edit',
method: 'post',
data
})
}
//删除评估用户冲击负荷参数
export function shockDelete(data: any) {
return createAxios({
url: '/advance-boot/assessShockLoadParam/delete',
method: 'post',
data
})
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -48,13 +48,13 @@ const initChart = () => {
}, },
tooltip: { tooltip: {
trigger: 'axis', trigger: 'axis',
axisPointer: { // axisPointer: {
type: 'shadow', // type: 'shadow',
label: { // label: {
color: '#fff', // color: '#fff',
fontSize: 16 // fontSize: 16
} // }
}, // },
textStyle: { textStyle: {
color: '#fff', color: '#fff',
fontStyle: 'normal', fontStyle: 'normal',
@@ -67,7 +67,10 @@ const initChart = () => {
formatter: function (params: any) { formatter: function (params: any) {
let tips = `<strong>${params[0]?.name}</strong></br>` // 标题加粗 let tips = `<strong>${params[0]?.name}</strong></br>` // 标题加粗
params?.forEach((item: any) => { params?.forEach((item: any) => {
const value = item.value === 3.14159 ? '暂无数据' : Math.round(item.value * 100) / 100 // 处理特殊值 const value =
item.value === 3.14159 || item.value === 0.14159
? '暂无数据'
: Math.round(item.value * 100) / 100 // 处理特殊值
tips += `<div style=" display: flex;justify-content: space-between;"> tips += `<div style=" display: flex;justify-content: space-between;">
<span>${item.marker} <span>${item.marker}
${item.seriesName}: ${item.seriesName}:
@@ -164,7 +167,7 @@ const handlerBar = (options: any) => {
item.itemStyle = Object.assign( item.itemStyle = Object.assign(
{ {
color: (params: any) => { color: (params: any) => {
if (params.value == 0 || params.value == 3.14159) { if (params.value == 0 || params.value == 3.14159 || params.value == 0.14159) {
return '#ccc' return '#ccc'
} else { } else {
return props.options?.color return props.options?.color

View File

@@ -87,8 +87,8 @@ const GetEchar = async (name: string) => {
geo: { geo: {
map: name, map: name,
zoom: 1.2, zoom: 1.1,
// top: 0, // top: 10,
// bottom: 0, // bottom: 0,
roam: true, roam: true,
label: { label: {
@@ -187,6 +187,12 @@ const GetEchar = async (name: string) => {
} }
} }
}) })
myCharts.value.on('datarangeselected', function (params: any) {
// 手动调用restore方法恢复地图的默认颜色映射
myCharts.value.dispatchAction({
type: 'restore'
})
})
} }
const MapReturn = (name: string) => { const MapReturn = (name: string) => {

View File

@@ -4,9 +4,20 @@
<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 v-model="timeValue" type="daterange" :disabled="disabledPicker" :disabled-date="isFutureDate" <el-date-picker
style="width: 220px; margin-right: 10px" unlink-panels :clearable="false" range-separator="" v-model="timeValue"
start-placeholder="开始日期" end-placeholder="结束日期" value-format="YYYY-MM-DD" :shortcuts="shortcuts" /> type="daterange"
:disabled="disabledPicker"
:disabled-date="isFutureDate"
style="width: 220px; margin-right: 10px"
unlink-panels
:clearable="false"
range-separator=""
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
:shortcuts="shortcuts"
/>
<el-button :disabled="backDisabled" type="primary" :icon="DArrowLeft" @click="preClick"></el-button> <el-button :disabled="backDisabled" type="primary" :icon="DArrowLeft" @click="preClick"></el-button>
<el-button type="primary" :icon="VideoPause" @click="nowTime">当前</el-button> <el-button type="primary" :icon="VideoPause" @click="nowTime">当前</el-button>
<el-button :disabled="preDisabled" type="primary" :icon="DArrowRight" @click="next"></el-button> <el-button :disabled="preDisabled" type="primary" :icon="DArrowRight" @click="next"></el-button>
@@ -70,9 +81,9 @@ const shortcuts = [
} }
} }
] ]
const isFutureDate = (time) => { const isFutureDate = time => {
return time && time > Date.now(); return time && time > Date.now()
}; }
onMounted(() => { onMounted(() => {
timeChange(3) timeChange(3)
}) })
@@ -385,7 +396,6 @@ const next = () => {
if (year >= presentY && !props.nextFlag) { if (year >= presentY && !props.nextFlag) {
startTime = presentY + '-01-01' startTime = presentY + '-01-01'
if (presentM < 10) { if (presentM < 10) {
if (presentD < 10) { if (presentD < 10) {
endTime = presentY + '-0' + presentM + '-0' + presentD endTime = presentY + '-0' + presentM + '-0' + presentD
} else { } else {
@@ -402,15 +412,16 @@ const next = () => {
startTime = year + '-01-01' startTime = year + '-01-01'
endTime = year + '-12-31' endTime = year + '-12-31'
} }
} }
if (!props.nextFlag) { if (!props.nextFlag) {
if (new Date(endTime + ' 00:00:00').getTime() >= new Date(window.XEUtils.toDateString(new Date(), 'yyyy-MM-dd ') + ' 00:00:00').getTime()) { if (
new Date(endTime + ' 00:00:00').getTime() >=
new Date(window.XEUtils.toDateString(new Date(), 'yyyy-MM-dd ') + ' 00:00:00').getTime()
) {
preDisabled.value = props.nextFlag ? false : true preDisabled.value = props.nextFlag ? false : true
} }
} }
timeValue.value = [startTime, endTime] timeValue.value = [startTime, endTime]
} }
@@ -419,7 +430,7 @@ const setTime = (flag = 0, e = 0) => {
let data = '' let data = ''
if ((dd < 4 || dd == 0) && interval.value != 4 && !props.theCurrentTime) { if ((dd < 2 || dd == 0) && interval.value != 4 && !props.theCurrentTime) {
data = window.XEUtils.toDateString(new Date().getTime() - (e + dd) * 3600 * 1000 * 24, 'yyyy-MM-dd') data = window.XEUtils.toDateString(new Date().getTime() - (e + dd) * 3600 * 1000 * 24, 'yyyy-MM-dd')
} else { } else {
data = window.XEUtils.toDateString(new Date().getTime() - e * 3600 * 1000 * 24, 'yyyy-MM-dd') data = window.XEUtils.toDateString(new Date().getTime() - e * 3600 * 1000 * 24, 'yyyy-MM-dd')

View File

@@ -2,7 +2,7 @@
<div ref="tableHeader" class="cn-table-header"> <div ref="tableHeader" class="cn-table-header">
<div class="table-header ba-scroll-style"> <div class="table-header ba-scroll-style">
<el-form <el-form
style="flex: 1; height: 28px; display: flex; flex-wrap: wrap" style="flex: 1; height: 32px; display: flex; flex-wrap: wrap"
ref="headerForm" ref="headerForm"
@submit.prevent="" @submit.prevent=""
@keyup.enter="onComSearch" @keyup.enter="onComSearch"
@@ -155,6 +155,7 @@ onMounted(() => {
tableStore.table.params.startTime = datePickerRef.value.timeValue[0] tableStore.table.params.startTime = datePickerRef.value.timeValue[0]
tableStore.table.params.endTime = datePickerRef.value.timeValue[1] tableStore.table.params.endTime = datePickerRef.value.timeValue[1]
tableStore.table.params.timeFlag = datePickerRef.value.timeFlag tableStore.table.params.timeFlag = datePickerRef.value.timeFlag
tableStore.table.params.interval = datePickerRef.value.interval
} }
if (props.area) { if (props.area) {
tableStore.table.params.deptIndex = dictData.state.area[0].id tableStore.table.params.deptIndex = dictData.state.area[0].id
@@ -215,6 +216,7 @@ const onComSearch = async () => {
tableStore.table.params.startTime = datePickerRef.value.timeValue[0] tableStore.table.params.startTime = datePickerRef.value.timeValue[0]
tableStore.table.params.endTime = datePickerRef.value.timeValue[1] tableStore.table.params.endTime = datePickerRef.value.timeValue[1]
tableStore.table.params.timeFlag = datePickerRef.value.timeFlag tableStore.table.params.timeFlag = datePickerRef.value.timeFlag
tableStore.table.params.interval = datePickerRef.value.interval
} }
await tableStore.onTableAction('search', {}) await tableStore.onTableAction('search', {})
@@ -242,6 +244,7 @@ defineExpose({
setTheDate, setTheDate,
datePickerRef, datePickerRef,
showSelectChange, showSelectChange,
showSelect,
computedSearchRow, computedSearchRow,
onExport onExport
}) })

View File

@@ -72,7 +72,7 @@ const loadData = () => {
item.color = config.getColorVal('elementUiPrimary') item.color = config.getColorVal('elementUiPrimary')
item.children.forEach((item2: any) => { item.children.forEach((item2: any) => {
item2.icon = 'el-icon-CollectionTag' item2.icon = 'el-icon-CollectionTag'
item.color = config.getColorVal('elementUiPrimary') item2.color = config.getColorVal('elementUiPrimary')
item2.children.forEach((item3: any) => { item2.children.forEach((item3: any) => {
item3.icon = 'el-icon-Flag' item3.icon = 'el-icon-Flag'
item3.color = config.getColorVal('elementUiPrimary') item3.color = config.getColorVal('elementUiPrimary')

View File

@@ -79,7 +79,7 @@ const loadData = () => {
item.color = config.getColorVal('elementUiPrimary') item.color = config.getColorVal('elementUiPrimary')
item.children.forEach((item2: any) => { item.children.forEach((item2: any) => {
item2.icon = 'el-icon-CollectionTag' item2.icon = 'el-icon-CollectionTag'
item.color = config.getColorVal('elementUiPrimary') item2.color = config.getColorVal('elementUiPrimary')
item2.children.forEach((item3: any) => { item2.children.forEach((item3: any) => {
item3.icon = 'el-icon-Flag' item3.icon = 'el-icon-Flag'
item3.color = config.getColorVal('elementUiPrimary') item3.color = config.getColorVal('elementUiPrimary')

View File

@@ -35,21 +35,21 @@ const setupAll = async () => {
const app = createApp(App) const app = createApp(App)
//开启离线地图 //开启离线地图
app.use(BaiduMapOffline, { // app.use(BaiduMapOffline, {
offline: true, // offline: true,
offlineConfig: { // offlineConfig: {
imgext: '.png', // imgext: '.png',
customstyle: '', // customstyle: '',
tiles_dir: '', // tiles_dir: '',
tiles_hybrid: '', // tiles_hybrid: '',
tiles_self: '', // tiles_self: '',
tiles_v_dir: '', // tiles_v_dir: '',
tiles_satellite_dir: '', // tiles_satellite_dir: '',
tiles_road_dir: '', // tiles_road_dir: '',
tiles_v_road_dir: '', // tiles_v_road_dir: '',
home: './plugin/offline/' // home: './plugin/offline/'
} // }
}) // })
app.use(BaiduMap, { app.use(BaiduMap, {
// ak: 'Yp57V71dkOPiXjiN8VdcFRsVELzlVNKK', // ak: 'Yp57V71dkOPiXjiN8VdcFRsVELzlVNKK',
ak: 'RpQi6WNFZ9tseKzhdwOQsXwFsoVntnsN', ak: 'RpQi6WNFZ9tseKzhdwOQsXwFsoVntnsN',

373
src/styles/app.css Normal file
View File

@@ -0,0 +1,373 @@
@charset "UTF-8";
/* 基本样式 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
outline: none !important;
}
html,
body,
#app {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, SimSun, sans-serif;
font-weight: 400;
-webkit-font-smoothing: antialiased;
-webkit-tap-highlight-color: transparent;
background-color: var(--ba-bg-color);
font-size: 14px;
overflow: hidden;
position: relative;
}
/* 修改纵向滚动条轨道 */
::-webkit-scrollbar {
width: 8px;
}
/* 修改纵向滚动条拇指thumb */
::-webkit-scrollbar-thumb {
background-color: var(--el-color-primary);
border-radius: 5px;
}
/* 修改横向滚动条轨道 */
::-webkit-scrollbar:horizontal {
height: 8px;
}
/* 修改横向滚动条拇指thumb */
::-webkit-scrollbar-thumb:horizontal {
background-color: var(--el-color-primary);
border-radius: 5px;
}
.iconfont-icon {
width: 1em;
height: 1em;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
}
.w100 {
width: 100% !important;
}
.h100 {
height: 100% !important;
}
.ba-center {
display: flex;
align-items: center;
justify-content: center;
}
.default-main {
position: relative;
background: #fff;
margin: var(--ba-main-space) var(--ba-main-space) 0px var(--ba-main-space);
}
.form-one {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.form-one .el-form-item {
display: flex;
width: 98%;
margin-bottom: 15px !important;
}
.form-one .el-form-item .el-form-item__content {
flex: 1;
}
.form-one .el-form-item .el-form-item__content .el-select,
.form-one .el-form-item .el-form-item__content .el-cascader,
.form-one .el-form-item .el-form-item__content .el-input__inner,
.form-one .el-form-item .el-form-item__content .el-date-editor {
width: 100%;
}
.form-two {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.form-two .el-form-item {
display: flex;
width: 48%;
}
.form-two .el-form-item .el-form-item__content {
flex: 1;
}
.form-two .el-form-item .el-form-item__content .el-select,
.form-two .el-form-item .el-form-item__content .el-cascader,
.form-two .el-form-item .el-form-item__content .el-input__inner,
.form-two .el-form-item .el-form-item__content .el-date-editor {
width: 100%;
}
.uploadFile .el-form-item__content {
line-height: 20px !important;
}
.uploadFile .el-form-item__content div {
display: flex !important;
align-items: center !important;
}
.uploadFile .el-form-item__content .el-upload-list__item-name {
width: 150px !important;
}
.uploadFile .el-form-item__content .el-upload-list--text {
margin: 0px 20px 0 !important;
}
.zoom-handle {
position: absolute;
width: 20px;
height: 20px;
bottom: -10px;
right: -10px;
cursor: se-resize;
}
.block-help {
display: block;
width: 100%;
color: #909399;
font-size: 13px;
line-height: 16px;
padding-top: 5px;
}
/* 表格顶部菜单-s */
.table-header .table-header-operate .icon {
font-size: 14px !important;
color: var(--el-color-white) !important;
}
.table-header .el-button.is-disabled .icon {
color: var(--el-button-disabled-text-color) !important;
}
/* 表格顶部菜单-e */
/* 鼠标置入浮动效果-s */
.suspension {
transition: all 0.3s ease;
}
.suspension:hover {
-webkit-transform: translateY(-4px) scale(1.02);
-moz-transform: translateY(-4px) scale(1.02);
-ms-transform: translateY(-4px) scale(1.02);
-o-transform: translateY(-4px) scale(1.02);
transform: translateY(-4px) scale(1.02);
-webkit-box-shadow: 0 14px 24px rgba(0, 0, 0, 0.2);
box-shadow: 0 14px 24px rgba(0, 0, 0, 0.2);
z-index: 999;
border-radius: 6px;
}
/* 鼠标置入浮动效果-e */
/* 表格-s */
.ba-table-box {
border-radius: var(--el-border-radius-round);
}
.ba-table-alert {
background-color: var(--el-fill-color-darker) !important;
border: 1px solid var(--ba-boder-color);
border-bottom: 0;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
.fx-jcsb {
display: flex;
justify-content: space-between;
}
/* 表格-e */
/* 表格顶部菜单-s */
.ba-table-menu {
background-color: var(--el-fill-color-darker) !important;
border: 1px solid var(--ba-boder-color);
border-bottom: 0;
border-top-left-radius: 0;
border-top-right-radius: 0;
}
/* 表格-e */
.ba-operate-form {
padding-top: 20px;
}
/* 新增/编辑表单-e */
/* 全局遮罩-s */
.ba-layout-shade {
position: fixed;
top: 0;
left: 0;
height: 100vh;
width: 100vw;
background-color: rgba(0, 0, 0, 0.5);
z-index: 9999990;
}
/* 全局遮罩-e */
/* 图片上传预览-s */
.img-preview-dialog .el-dialog__body {
display: flex;
align-items: center;
justify-content: center;
}
.img-preview-dialog .el-dialog__body img {
max-width: 100%;
}
/* 图片上传预览-e */
/* 页面切换动画-s */
.slide-right-enter-active,
.slide-right-leave-active,
.slide-left-enter-active,
.slide-left-leave-active {
will-change: transform;
transition: all 0.3s ease;
}
.slide-right-enter-from, .slide-left-leave-to {
opacity: 0;
transform: translateX(-20px);
}
.slide-right-leave-to, .slide-left-enter-from {
opacity: 0;
transform: translateX(20px);
}
/* 页面切换动画-e */
/* 布局相关-s */
.frontend-footer-brother {
min-height: calc(100vh - 120px);
}
.user-views {
padding-left: 15px;
}
.user-views .user-views-card {
margin-bottom: 15px;
}
.ba-aside-drawer .el-drawer__body {
padding: 0;
}
/* 布局相关-e */
/* 暗黑模式公共样式-s */
.ba-icon-dark {
color: var(--el-text-color-primary) !important;
}
/* 暗黑模式公共样式-e */
/* NProgress-s */
#nprogress .bar,
#nprogress .spinner {
z-index: 999999;
}
/* NProgress-e */
/* 自适应-s */
@media screen and (max-width: 768px) {
.xs-hidden {
display: none;
}
}
@media screen and (max-width: 1024px) {
.cn-operate-dialog {
width: 96%;
}
}
@media screen and (max-width: 991px) {
.user-views {
padding: 0;
}
}
/* 自适应-e */
.custom-table-header {
box-sizing: border-box;
display: flex;
padding: 13px 15px;
align-items: center;
border: 1px solid var(--el-border-color);
}
.custom-table-header .title {
flex: 1;
font-weight: 700;
}
.custom-table-header .el-form-item {
margin-bottom: 0 !important;
}
.child-router {
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background: #fff;
z-index: 10;
}
.bjs-powered-by {
display: none;
}
.el-select__wrapper {
height: 32px !important;
}
@font-face {
font-family: 'AlimamaFangYuanTiVF';
src: url("../assets/font/ali/AlimamaFangYuanTiVF-Thin.woff") format("woff"), url("../assets/font/ali/AlimamaFangYuanTiVF-Thin.woff2") format("woff2");
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'nablaRegular';
src: url("../assets/font/ali/Nabla_Regular.woff") format("woff"), url("../assets/font/ali/Nabla_Regular.woff2") format("woff2");
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'AlimamaDongFangDaKai';
src: url("../assets/font/ali/AlimamaDongFangDaKai-Regular.woff") format("woff"), url("../assets/font/ali/AlimamaDongFangDaKai-Regular.woff2") format("woff2");
font-weight: normal;
font-style: normal;
}
.w-e-scroll {
min-height: 200px !important;
}

1
src/styles/app.min.css vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -186,7 +186,20 @@ body,
border-bottom-left-radius: 0; border-bottom-left-radius: 0;
border-bottom-right-radius: 0; border-bottom-right-radius: 0;
} }
.fx-jcsb {
display: flex;
justify-content: space-between;
}
/* 表格-e */
/* 表格顶部菜单-s */
.ba-table-menu {
background-color: var(--el-fill-color-darker) !important;
border: 1px solid var(--ba-boder-color);
border-bottom: 0;
border-top-left-radius: 0;
border-top-right-radius: 0;
}
/* 表格-e */ /* 表格-e */
// /* 新增/编辑表单-s */ // /* 新增/编辑表单-s */

246
src/styles/element.css Normal file
View File

@@ -0,0 +1,246 @@
@charset "UTF-8";
/* 修复 Chrome 浏览器输入框内选中字符行高异常的bug-s */
.el-input .el-input__inner {
height: 30px;
line-height: calc(var(--el-input-height, 40px) - 4px);
}
/* 修复 Chrome 浏览器输入框内选中字符行高异常的bug-e */
.datetime-picker {
height: 32px;
padding-top: 0;
padding-bottom: 0;
}
.el-divider__text.is-center {
transform: translateX(-50%) translateY(-62%);
}
.el-menu {
user-select: none;
}
.el-menu .el-menu-item:hover,
.el-menu .el-sub-menu__title:hover {
background-color: var(--el-menu-hover-color) !important;
color: var(--el-menu-active-color) !important;
}
.el-menu .el-menu-item:hover .icon,
.el-menu .el-sub-menu__title:hover .icon {
color: var(--el-menu-active-color) !important;
}
.atooltip {
margin-top: 0px !important;
padding: 0 !important;
}
.el-dialog {
padding: 0px !important;
}
.el-dialog .el-dialog__footer {
padding: 15px;
box-shadow: var(--el-box-shadow);
width: 100%;
bottom: 0;
}
.el-dialog__body {
max-height: 60vh;
overflow-y: auto;
padding: 10px;
}
.el-dialog__header {
background: var(--el-color-primary);
padding: 15px;
margin-right: 0px;
}
.el-dialog__header .el-dialog__headerbtn {
top: 5px;
}
.el-dialog__header .el-dialog__headerbtn .el-icon {
color: var(--el-color-white);
}
.el-dialog__header .el-dialog__headerbtn:hover .el-icon {
color: #409eff;
}
.el-dialog__header .el-dialog__title {
color: var(--el-color-white);
}
.el-table {
--el-table-border-color: var(--ba-border-color);
}
.el-card {
border: none;
}
.el-card__header {
border-bottom: 1px solid var(--el-border-color-extra-light);
}
.el-textarea__inner {
padding: 5px 11px;
}
/* dialog滚动条-s */
.el-overlay-dialog,
.el-tabs__content,
.ba-scroll-style {
scrollbar-width: none;
}
.el-overlay-dialog::-webkit-scrollbar,
.el-tabs__content::-webkit-scrollbar,
.ba-scroll-style::-webkit-scrollbar {
width: 5px;
height: 5px;
}
.el-overlay-dialog::-webkit-scrollbar-thumb,
.el-tabs__content::-webkit-scrollbar-thumb,
.ba-scroll-style::-webkit-scrollbar-thumb {
background: #eaeaea;
border-radius: var(--el-border-radius-base);
box-shadow: none;
-webkit-box-shadow: none;
}
.el-overlay-dialog:hover::-webkit-scrollbar-thumb:hover,
.el-tabs__content:hover::-webkit-scrollbar-thumb:hover,
.ba-scroll-style:hover::-webkit-scrollbar-thumb:hover {
background: #c8c9cc;
}
/* dialog滚动条-e */
/* 小屏终端 el-radio-group 样式优化-s */
.ba-input-item-radio {
margin-bottom: 10px;
}
.ba-input-item-radio .el-radio-group .el-radio {
margin-bottom: 8px;
}
/* 小屏终端 el-radio-group 样式调整-e */
.el-tabs--card > .el-tabs__header .el-tabs__item.is-active {
background: var(--el-color-primary);
color: var(--el-color-white);
}
.el-tabs__header {
margin-bottom: 0;
}
.el-form--inline .el-form-item {
margin-bottom: 10px;
}
.el-tabs--border-card > .el-tabs__content {
padding: 10px;
}
.el-page-header__header {
line-height: 32px;
}
.el-page-header__header .el-page-header__content {
font-size: 14px;
font-weight: 700;
}
.el-select {
min-width: 200px;
}
.el-tabs__content {
height: calc(100% - 40px);
}
.el-tabs__content .el-tab-pane {
height: 100%;
}
.el-button--primary:focus {
color: var(--el-color-white);
outline: 0;
}
.el-button--primary:hover {
color: var(--el-color-white);
border-color: var(--el-color-primary-light-3);
background-color: var(--el-color-primary-light-3);
outline: 0;
}
.el-button.is-plain:focus {
color: var(--el-button-text-color);
border-color: var(--el-button-border-color);
}
.el-button.is-plain:hover {
color: var(--el-color-primary);
border-color: var(--el-color-primary);
}
.el-button.is-link:focus {
color: var(--el-button-text-color);
}
.el-button.is-link:hover {
color: var(--el-button-hover-link-text-color);
}
.el-button--primary.is-link:hover,
.el-button--primary.is-plain:hover,
.el-button--primary.is-text:hover {
color: var(--el-color-primary-light-5);
background-color: var(--el-color-primary-light-9) !important;
}
.el-divider--horizontal {
margin: 15px 0;
}
.el-step__title {
cursor: pointer;
}
.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner,
.el-radio__input.is-disabled.is-checked .el-radio__inner {
background-color: var(--el-color-primary);
opacity: 0.6;
}
.sgmap-ctrl-bottom-left {
display: none !important;
}
.el-drawer__header {
margin-bottom: 0 !important;
}
.el-pagination__sizes .el-select {
min-width: 128px;
}
.el-card__header {
padding: 10px;
}
.el-card__header span {
font-size: 16px;
font-weight: 600;
}
.el-select__input-wrapper {
width: 11px;
}

1
src/styles/element.min.css vendored Normal file
View File

@@ -0,0 +1 @@
.el-input .el-input__inner{height:30px;line-height:calc(var(--el-input-height, 40px) - 4px)}.datetime-picker{height:32px;padding-top:0;padding-bottom:0}.el-divider__text.is-center{transform:translateX(-50%) translateY(-62%)}.el-menu{user-select:none}.el-menu .el-menu-item:hover,.el-menu .el-sub-menu__title:hover{background-color:var(--el-menu-hover-color) !important;color:var(--el-menu-active-color) !important}.el-menu .el-menu-item:hover .icon,.el-menu .el-sub-menu__title:hover .icon{color:var(--el-menu-active-color) !important}.atooltip{margin-top:0px !important;padding:0 !important}.el-dialog{padding:0px !important}.el-dialog .el-dialog__footer{padding:15px;box-shadow:var(--el-box-shadow);width:100%;bottom:0}.el-dialog__body{max-height:60vh;overflow-y:auto;padding:10px}.el-dialog__header{background:var(--el-color-primary);padding:15px;margin-right:0px}.el-dialog__header .el-dialog__headerbtn{top:5px}.el-dialog__header .el-dialog__headerbtn .el-icon{color:var(--el-color-white)}.el-dialog__header .el-dialog__headerbtn:hover .el-icon{color:#409eff}.el-dialog__header .el-dialog__title{color:var(--el-color-white)}.el-table{--el-table-border-color:var(--ba-border-color)}.el-card{border:none}.el-card__header{border-bottom:1px solid var(--el-border-color-extra-light)}.el-textarea__inner{padding:5px 11px}.el-overlay-dialog,.el-tabs__content,.ba-scroll-style{scrollbar-width:none}.el-overlay-dialog::-webkit-scrollbar,.el-tabs__content::-webkit-scrollbar,.ba-scroll-style::-webkit-scrollbar{width:5px;height:5px}.el-overlay-dialog::-webkit-scrollbar-thumb,.el-tabs__content::-webkit-scrollbar-thumb,.ba-scroll-style::-webkit-scrollbar-thumb{background:#eaeaea;border-radius:var(--el-border-radius-base);box-shadow:none;-webkit-box-shadow:none}.el-overlay-dialog:hover::-webkit-scrollbar-thumb:hover,.el-tabs__content:hover::-webkit-scrollbar-thumb:hover,.ba-scroll-style:hover::-webkit-scrollbar-thumb:hover{background:#c8c9cc}.ba-input-item-radio{margin-bottom:10px}.ba-input-item-radio .el-radio-group .el-radio{margin-bottom:8px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{background:var(--el-color-primary);color:var(--el-color-white)}.el-tabs__header{margin-bottom:0}.el-form--inline .el-form-item{margin-bottom:10px}.el-tabs--border-card>.el-tabs__content{padding:10px}.el-page-header__header{line-height:32px}.el-page-header__header .el-page-header__content{font-size:14px;font-weight:700}.el-select{min-width:200px}.el-tabs__content{height:calc(100% - 40px)}.el-tabs__content .el-tab-pane{height:100%}.el-button--primary:focus{color:var(--el-color-white);outline:0}.el-button--primary:hover{color:var(--el-color-white);border-color:var(--el-color-primary-light-3);background-color:var(--el-color-primary-light-3);outline:0}.el-button.is-plain:focus{color:var(--el-button-text-color);border-color:var(--el-button-border-color)}.el-button.is-plain:hover{color:var(--el-color-primary);border-color:var(--el-color-primary)}.el-button.is-link:focus{color:var(--el-button-text-color)}.el-button.is-link:hover{color:var(--el-button-hover-link-text-color)}.el-button--primary.is-link:hover,.el-button--primary.is-plain:hover,.el-button--primary.is-text:hover{color:var(--el-color-primary-light-5);background-color:var(--el-color-primary-light-9) !important}.el-divider--horizontal{margin:15px 0}.el-step__title{cursor:pointer}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner,.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:var(--el-color-primary);opacity:0.6}.sgmap-ctrl-bottom-left{display:none !important}.el-drawer__header{margin-bottom:0 !important}.el-pagination__sizes .el-select{min-width:128px}.el-card__header{padding:10px}.el-card__header span{font-size:16px;font-weight:600}.el-select__input-wrapper{width:11px}

View File

@@ -33,7 +33,6 @@
.atooltip { .atooltip {
margin-top: 0px !important; margin-top: 0px !important;
padding: 0 !important; padding: 0 !important;
} }
.el-dialog { .el-dialog {
padding: 0px !important; padding: 0px !important;
@@ -229,4 +228,8 @@
font-size: 16px; font-size: 16px;
font-weight: 600; font-weight: 600;
} }
} }
.el-select__input-wrapper {
width: 11px;
}

View File

@@ -48,7 +48,7 @@ export default class SocketService {
const mqttUrl = response.headers.get('X-Mqtt-Url') const mqttUrl = response.headers.get('X-Mqtt-Url')
setTimeout(() => { setTimeout(() => {
// ws://192.168.1.69:10407/mgtt/api/pushMessage/ // ws://192.168.1.69:10407/mgtt/api/pushMessage/
const url = (mqttUrl || 'ws://192.168.1.31:10407/api/pushMessage/') + id const url = (mqttUrl || 'ws://192.168.1.68:10407/api/pushMessage/') + id
this.ws = new WebSocket(url) this.ws = new WebSocket(url)
this.ws.onopen = () => this.handleOpen() this.ws.onopen = () => this.handleOpen()

View File

@@ -3001,10 +3001,10 @@ const area = () => {
month = '0' + (month + 1) month = '0' + (month + 1)
} }
let day: any = data.getDate() let day: any = data.getDate()
if (day + 1 >= 10) { if (day >= 10) {
day = day + 1 day = day
} else { } else {
day = '0' + (day + 1) day = '0' + (day )
} }
deviceBODetail.value.thisTimeCheck = year + '-' + month + '-' + day deviceBODetail.value.thisTimeCheck = year + '-' + month + '-' + day
deviceBODetail.value.loginTime = year + '-' + month + '-' + day deviceBODetail.value.loginTime = year + '-' + month + '-' + day

View File

@@ -42,6 +42,7 @@ import MyEchart from '@/components/echarts/MyEchart.vue'
import TableHeader from '@/components/table/header/index.vue' import TableHeader from '@/components/table/header/index.vue'
import { useDictData } from '@/stores/dictData' import { useDictData } from '@/stores/dictData'
import * as echarts from 'echarts/core' import * as echarts from 'echarts/core'
import { Top } from '@element-plus/icons-vue/dist/types'
const dictData = useDictData() const dictData = useDictData()
const options = ref({}) const options = ref({})
@@ -112,19 +113,10 @@ const tableStore = new TableStore({
itemHeight: 15, itemHeight: 15,
itemGap: 25 itemGap: 25
}, },
toolbox: { toolbox: {
show: true, top: 0,
feature: { right: 10,
saveAsImage: { },
// bottom: '10px',
show: true,
title: '保存'
// yAxisIndex: 'none'
}
},
right: 0,
top: 0
},
// tooltip: { // tooltip: {
// backgroundColor: '#fff', // backgroundColor: '#fff',
// textStyle: { // textStyle: {

View File

@@ -1,11 +1,11 @@
<template> <template>
<div class="default-main online"> <div class="default-main online">
<div class="online_header"> <div class="online_header">
<TableHeader date-picker ref="tableHeaderRef"> <TableHeader date-picker area ref="tableHeaderRef">
<template #select> <template #select>
<el-form-item label="统计类型:"> <el-form-item label="统计类型:">
<el-select <el-select
v-model="formData.statisticalType" v-model="tableStore.table.params.statisticalType"
placeholder="请选择统计类型" placeholder="请选择统计类型"
value-key="id" value-key="id"
style="width: 100%" style="width: 100%"
@@ -18,58 +18,10 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<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 }} -->
<el-cascader
v-model="formData.deptIndex"
:props="defaultProps"
:options="treeData"
clearable
filterable
collapse-tags
placeholder="请选择区域"
/>
<!-- <el-tree
ref="tree"
v-model="formData.deptName"
:data="treeData"
node-key="id"
accordion
:default-expanded-keys="idArr"
:props="defaultProps"
@node-click="handleNodeClick"
>
<template #default="{ node, data }">
<span :title="data.name">{{ data?.name }}</span>
</template>
</el-tree> -->
<!-- </el-option>
</el-select> -->
</el-form-item>
<!-- <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 <el-select
v-model="formData.manufacturer" v-model="tableStore.table.params.manufacturer"
multiple multiple
collapse-tags collapse-tags
clearable clearable
@@ -85,24 +37,6 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- <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> -->
</template> </template>
</TableHeader> </TableHeader>
</div> </div>
@@ -151,7 +85,7 @@
></path> ></path>
</svg> </svg>
</p> </p>
<span style="color: #ffcc33">热备用状态</span> <span style="color: #ffcc33">检修状态</span>
</li> </li>
<li> <li>
<p style="background: #cc0000"> <p style="background: #cc0000">
@@ -178,7 +112,7 @@
</div> </div>
<Table <Table
ref="tableRef" ref="tableRef"
:tree-config="{ transform: true,parentField: 'uPid', rowField: 'uId' }" :tree-config="{ transform: true, parentField: 'uPid', rowField: 'uId' }"
:scroll-y="{ enabled: true }" :scroll-y="{ enabled: true }"
v-if="activeName == 0" v-if="activeName == 0"
/> />
@@ -291,7 +225,7 @@ const tableStore = new TableStore({
} }
}, },
{ {
title: '热备用(台)', title: '检修(台)',
field: 'reaFlag', field: 'reaFlag',
type: 'html', type: 'html',
align: 'center', align: 'center',
@@ -329,40 +263,39 @@ const tableStore = new TableStore({
} }
} }
], ],
beforeSearchFun: () => { // beforeSearchFun: () => {
tableStore.table.params.deptIndex = formData.value.deptIndex // tableStore.table.params.deptIndex = formData.value.deptIndex
tableStore.table.params.statisticalType = formData.value.statisticalType // tableStore.table.params.statisticalType = formData.value.statisticalType
tableStore.table.params.scale = formData.value.scale // tableStore.table.params.scale = formData.value.scale
tableStore.table.params.manufacturer = formData.value.manufacturer // tableStore.table.params.manufacturer = formData.value.manufacturer
tableStore.table.params.loadType = formData.value.loadType // tableStore.table.params.loadType = formData.value.loadType
tableStore.table.params.serverName = 'harmonicBoot' // tableStore.table.params.serverName = 'harmonicBoot'
delete tableStore.table.params.timeFlag // // delete tableStore.table.params.timeFlag
delete tableStore.table.params.startTime // // delete tableStore.table.params.startTime
delete tableStore.table.params.endTime // // delete tableStore.table.params.endTime
delete tableStore.table.params.pageNum // // delete tableStore.table.params.pageNum
delete tableStore.table.params.pageSize // // delete tableStore.table.params.pageSize
// tableStore.table.params.searchBeginTime = tableHeaderRef.value.datePickerRef.timeValue[0] // // tableStore.table.params.searchBeginTime = tableHeaderRef.value.datePickerRef.timeValue[0]
// tableStore.table.params.searchEndTime = tableHeaderRef.value.datePickerRef.timeValue[1] // // tableStore.table.params.searchEndTime = tableHeaderRef.value.datePickerRef.timeValue[1]
}, // },
loadCallback: () => { loadCallback: () => {
tableStore.table.data = tree2List(tableStore.table.data, Math.random() * 1000) tableStore.table.data = tree2List(tableStore.table.data, Math.random() * 1000)
tableStore.table.column[0].title = formData.value.statisticalType.name tableStore.table.column[0].title = formData.value.statisticalType.name
chartsRef.value&&chartsRef.value.getTableStoreParams(tableStore.table.params) chartsRef.value && chartsRef.value.getTableStoreParams(tableStore.table.params)
setTimeout(() => { setTimeout(() => {
activeName.value == 0 && tableRef.value && tableRef.value.getRef().setAllTreeExpand(true) activeName.value == 0 && tableRef.value && tableRef.value.getRef().setAllTreeExpand(true)
}, 0) }, 0)
} }
}) })
const handleSearch = () => { tableStore.table.params.deptIndex = treeData.value[0]?.id
formData.value.searchBeginTime = datePickerRef.value.timeValue[0] tableStore.table.params.statisticalType = classificationData[0]
formData.value.searchEndTime = datePickerRef.value.timeValue[1] tableStore.table.params.scale = voltageleveloption
} tableStore.table.params.manufacturer = terminaloption
tableStore.table.params.deptIndex = '' tableStore.table.params.loadType = interfereoption
tableStore.table.params.statisticalType = [] tableStore.table.params.serverName = 'harmonicBoot'
tableStore.table.params.scale = []
tableStore.table.params.manufacturer = []
tableStore.table.params.loadType = []
provide('tableStore', tableStore) provide('tableStore', tableStore)
const tree2List = (list: any, id?: string) => { const tree2List = (list: any, id?: string) => {
//存储结果的数组 //存储结果的数组
@@ -403,7 +336,6 @@ watch(
) )
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.table_legend { .table_legend {
width: 100%; width: 100%;
height: 40px; height: 40px;

View File

@@ -1,103 +1,114 @@
<template> <template>
<el-dialog draggable v-model="dialogVisible" :title="title" width="70%"> <el-dialog draggable v-model="dialogVisible" :title="title" width="70%">
<div style="height: 55vh"> <div style="height: 55vh">
<vxe-table height="auto" auto-resize :data="tableData" v-loading="loading" v-bind="defaultAttribute" <vxe-table
:key="key"> height="auto"
auto-resize
:data="tableData"
v-loading="loading"
v-bind="defaultAttribute"
:key="key"
>
<vxe-column field="name" title="名称"></vxe-column>
<vxe-column field="powerCompany" title="供电公司" v-if="voltageLevelFlag"></vxe-column>
<vxe-column field="substation" title="变电站" v-if="voltageLevelFlag"></vxe-column>
<vxe-column field="busBar" title="母线" v-if="voltageLevelFlag"></vxe-column>
<vxe-column field="name" title="名称"></vxe-column> <vxe-column
<vxe-column field="powerCompany" title="供电公司" v-if="voltageLevelFlag"></vxe-column> field="voltageLevel"
<vxe-column field="substation" title="变电站" v-if="voltageLevelFlag"></vxe-column> title="电压等级"
<vxe-column field="busBar" title="母线" v-if="voltageLevelFlag"></vxe-column> v-if="statisticalName == '谐波电压' && !voltageLevelFlag"
>
<vxe-column field="voltageLevel" title="电压等级" <template #default="scope">
v-if="statisticalName == '谐波电压' && !voltageLevelFlag"></vxe-column> {{ scaleList.filter(item => item.id == scope.row.voltageLevel)[0].name }}
<vxe-column field="data" :title="statisticalName"> </template>
<template #default="scope"> </vxe-column>
<span v-if="scope.row.data == 3.14159" type="primary" size="small">暂无数据</span> <vxe-column field="data" :title="statisticalName">
<span v-else type="primary" size="small"> <template #default="scope">
{{ parseFloat(scope.row.data.toFixed(2)) }} <span v-if="scope.row.data == 3.14159" type="primary" size="small">暂无数据</span>
</span> <span v-else type="primary" size="small">
</template> {{ parseFloat(scope.row.data.toFixed(2)) }}
</vxe-column> </span>
<vxe-column field="zd" title="评估"> </template>
<template #default="scope"> </vxe-column>
<span v-if=" <vxe-column field="zd" title="评估">
0 <= scope.row.data && <template #default="scope">
scope.row.data < 1 && <span
scope.row.data !== 3.14159 v-if="0 <= scope.row.data && scope.row.data < 1 && scope.row.data !== 3.14159"
" style=" font-weight: bold;color: #339966;"> style="font-weight: bold; color: #339966"
无污染 >
</span> 无污染
<span v-if=" </span>
1 <= scope.row.data && <span
scope.row.data < 1.2 && v-if="1 <= scope.row.data && scope.row.data < 1.2 && scope.row.data !== 3.14159"
scope.row.data !== 3.14159 style="font-weight: bold; color: #3399ff"
" style=" font-weight: bold;color: #3399ff;"> >
轻微污染 轻微污染
</span> </span>
<span v-if=" <span
1.2 <= scope.row.data && v-if="1.2 <= scope.row.data && scope.row.data < 1.6 && scope.row.data !== 3.14159"
scope.row.data < 1.6 && style="font-weight: bold; color: #ffcc33"
scope.row.data !== 3.14159 >
" style=" font-weight: bold;color: #ffcc33;"> 轻度污染
轻度污染 </span>
</span> <span
<span v-if=" v-if="1.6 <= scope.row.data && scope.row.data < 2 && scope.row.data !== 3.14159"
1.6 <= scope.row.data && style="font-weight: bold; color: #ff9900"
scope.row.data < 2 && >
scope.row.data !== 3.14159 中度污染
" style=" font-weight: bold;color: #ff9900;"> </span>
中度污染 <span
</span> v-if="2 <= scope.row.data && scope.row.data && scope.row.data !== 3.14159"
<span v-if=" style="font-weight: bold; color: #cc0000"
2 <= scope.row.data && scope.row.data && scope.row.data !== 3.14159 >
" style=" font-weight: bold;color: #cc0000;"> 重度污染
重度污染 </span>
</span> <span v-if="scope.row.data == 3.14159" style="color: #000">暂无评估</span>
<span v-if="scope.row.data == 3.14159" style="color: #000;"> </template>
暂无评估 </vxe-column>
</span> </vxe-table>
</template> </div>
</vxe-column>
</vxe-table>
</div>
</el-dialog> </el-dialog>
</template> </template>
<script setup lang='ts'> <script setup lang="ts">
import { ref, reactive } from 'vue' import { ref, reactive } from 'vue'
import { useDictData } from '@/stores/dictData'
import { defaultAttribute } from '@/components/table/defaultAttribute' import { defaultAttribute } from '@/components/table/defaultAttribute'
import { getSubstationInfoById, getLineInfoById } from '@/api/harmonic-boot/area' import { getSubstationInfoById, getLineInfoById } from '@/api/harmonic-boot/area'
const dialogVisible = ref(false) const dialogVisible = ref(false)
const dictData = useDictData()
const loading = ref(false) const loading = ref(false)
const voltageLevelFlag = ref(false) const voltageLevelFlag = ref(false)
const tableData = ref([]) const tableData = ref([])
const scaleList = dictData.getBasicData('Dev_Voltage_Stand')
const title = ref('') const title = ref('')
const key = ref(0) const key = ref(0)
const statisticalName = ref('') const statisticalName = ref('')
const open = (row: any, flag: boolean, params: any) => { const open = (row: any, flag: boolean, params: any) => {
console.log("🚀 ~ open ~ row:", row) console.log('🚀 ~ open ~ row:', row)
voltageLevelFlag.value = flag voltageLevelFlag.value = flag
loading.value = true loading.value = true
title.value = row.name + '详情' title.value = row.name + '详情'
statisticalName.value = params.statisticalType.name statisticalName.value = params.statisticalType.name
tableData.value = [] tableData.value = []
if (flag) { if (flag) {
getLineInfoById({ ...params, deptIndex: row.pid, id: row.id ,powerFlag: row.powerFlag }).then((res: any) => { getLineInfoById({ ...params, deptIndex: row.pid, id: row.id, powerFlag: row.powerFlag })
tableData.value = res.data .then((res: any) => {
loading.value = false tableData.value = res.data
}).catch(() => { loading.value = false
loading.value = false })
}) .catch(() => {
loading.value = false
})
} else { } else {
getSubstationInfoById({ ...params, deptIndex: row.id }).then((res: any) => { getSubstationInfoById({ ...params, deptIndex: row.id })
tableData.value = res.data .then((res: any) => {
loading.value = false tableData.value = res.data
}).catch(() => { loading.value = false
loading.value = false })
}) .catch(() => {
loading.value = false
})
} }
key.value += 1 key.value += 1

View File

@@ -98,7 +98,7 @@
@click="queryline(item1, true)" @click="queryline(item1, true)"
> >
<el-tag <el-tag
v-if="item1.data == 3.14159 " v-if="item1.data == 3.14159"
style="background: #ccc; color: #fff" style="background: #ccc; color: #fff"
size="small" size="small"
> >
@@ -271,6 +271,9 @@ const tableStore = new TableStore({
url: '/harmonic-boot/PollutionSubstation/deptSubstationRelations', url: '/harmonic-boot/PollutionSubstation/deptSubstationRelations',
method: 'POST', method: 'POST',
column: [], column: [],
beforeSearchFun: () => {
tableStore.table.params.reportFlag = tableStore.table.params.interval
},
loadCallback: () => { loadCallback: () => {
histogram(tableStore.table.data) histogram(tableStore.table.data)
} }
@@ -281,7 +284,7 @@ tableStore.table.params.deptIndex = dictData.state.area[0].id
tableStore.table.params.statisticalType = options[0] tableStore.table.params.statisticalType = options[0]
tableStore.table.params.monitorFlag = 2 tableStore.table.params.monitorFlag = 2
tableStore.table.params.powerFlag = sign[0]?.algoDescribe || 0 tableStore.table.params.powerFlag = sign[0]?.algoDescribe || 0
tableStore.table.params.reportFlag = 3
tableStore.table.params.serverName = 'event-boot' tableStore.table.params.serverName = 'event-boot'
const handleTabChange = (val: any) => { const handleTabChange = (val: any) => {
if (val == 0) return if (val == 0) return
@@ -318,7 +321,7 @@ const histogram = (res: any) => {
'&nbsp' + '&nbsp' +
'&nbsp' + '&nbsp' +
(params[i].value == 0.14159 (params[i].value == 0.14159
? '无污染' ? '暂无数据'
: params[i].value < 1 : params[i].value < 1
? '无污染' ? '无污染'
: params[i].value < 1.2 : params[i].value < 1.2
@@ -385,8 +388,7 @@ const histogram = (res: any) => {
// 定制显示(按顺序) // 定制显示(按顺序)
color: function (params) { color: function (params) {
if (params.value == 0.14159) { if (params.value == 0) {
} else if (params.value == 0) {
return '#339966' return '#339966'
} else if (params.value > 2) { } else if (params.value > 2) {
return new echarts.graphic.LinearGradient( return new echarts.graphic.LinearGradient(
@@ -448,7 +450,7 @@ const histogram = (res: any) => {
0 < params.value && 0 < params.value &&
params.value <= 1 && params.value <= 1 &&
params.value >= 0 && params.value >= 0 &&
params.value !== 0.05 params.value !== 0.14159
) { ) {
return new echarts.graphic.LinearGradient( return new echarts.graphic.LinearGradient(
0, 0,
@@ -463,7 +465,7 @@ const histogram = (res: any) => {
], ],
false false
) )
} else if (params.value == 0.05) { } else if (params.value == 0.14159) {
return new echarts.graphic.LinearGradient( return new echarts.graphic.LinearGradient(
0, 0,
1, 1,
@@ -594,7 +596,7 @@ const map = (res: any) => {
let d = element.name.split('\n') let d = element.name.split('\n')
let p1 = { let p1 = {
name: d[0], name: d[0],
value: element.data value: element.data == 3.14159 ? -1 : element.data
} }
arr1.push(p1) arr1.push(p1)
@@ -673,7 +675,7 @@ const map = (res: any) => {
}, },
{ {
gte: -1, gte: -1,
lte: 0.05, lte: 0.14159,
label: '无数据', label: '无数据',
color: '#ccc' color: '#ccc'
} }
@@ -786,7 +788,7 @@ const layout1 = mainHeight(93) as any
.legend { .legend {
position: absolute; position: absolute;
right: 15px; right: 15px;
top: 17px; top: 20px;
z-index: 99; z-index: 99;
} }
</style> </style>

View File

@@ -22,8 +22,8 @@
<vxe-column field="name" title="名称"></vxe-column> <vxe-column field="name" title="名称"></vxe-column>
<vxe-column field="data" :title="changeName"> <vxe-column field="data" :title="changeName">
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.data == -1" type="primary" size="small">暂无数据</span> <span v-if="scope.row.data == 3.14159" type="primary" size="small">暂无数据</span>
<span v-if="scope.row.data !== -1 && scope.row.data !== 0.1" type="primary" <span v-if="scope.row.data !== 3.14159 && scope.row.data !== 0.1" type="primary"
size="small"> size="small">
{{ scope.row.data }} {{ scope.row.data }}
</span> </span>
@@ -155,7 +155,7 @@ const map = (res: any) => {
let d = element.name.split('\n') let d = element.name.split('\n')
let p1 = { let p1 = {
name: d[0], name: d[0],
value: element.data value: element.data == 3.14159 ? -1 : element.data
} }
arr1.push(p1) arr1.push(p1)

View File

@@ -1,11 +1,11 @@
<template> <template>
<div style="display: flex; flex-direction: column; height: 100%; position: relative" > <div style="display: flex; flex-direction: column; height: 100%; position: relative">
<el-form :inline="true"> <el-form :inline="true">
<el-form-item label="多监测点"> <el-form-item label="多监测点">
<el-checkbox v-model="checked" @change="checkChange" /> <el-checkbox v-model="checked" @change="checkChange" />
</el-form-item> </el-form-item>
<el-form-item label="日期"> <el-form-item label="日期">
<DatePicker ref="datePickerRef"></DatePicker> <DatePicker ref="datePickerRef" ></DatePicker>
</el-form-item> </el-form-item>
<el-form-item label="指标类型:"> <el-form-item label="指标类型:">
<el-select <el-select
@@ -116,7 +116,7 @@
<SecondSheet v-if="options" style="background: #fff; z-index: 10"> <SecondSheet v-if="options" style="background: #fff; z-index: 10">
<el-button <el-button
style="position: absolute; right: 0; top: 0; cursor: pointer; z-index: 3" style="position: absolute; right: 0; top: 0; cursor: pointer; z-index: 3"
icon="el-icon-Back" icon="el-icon-Back"
size="small" size="small"
@click="close" @click="close"
> >
@@ -259,7 +259,7 @@ const conditionChange = () => {
} }
if ( if (
formData.condition.includes('46') || formData.condition.includes('46') ||
// formData.condition.includes('47') || // formData.condition.includes('47') ||
// formData.condition.includes('48') || // formData.condition.includes('48') ||
formData.condition.includes('49') formData.condition.includes('49')
) { ) {
@@ -275,7 +275,7 @@ const conditionChange = () => {
formData.condition.includes('43') || formData.condition.includes('43') ||
formData.condition.includes('44') || formData.condition.includes('44') ||
(formData.condition.includes('45') && formData.condition.includes('46')) || (formData.condition.includes('45') && formData.condition.includes('46')) ||
// formData.condition.includes('47') || // formData.condition.includes('47') ||
// formData.condition.includes('48') || // formData.condition.includes('48') ||
formData.condition.includes('49') formData.condition.includes('49')
) { ) {
@@ -294,7 +294,7 @@ const conditionChange = () => {
} }
if ( if (
formData.condition.includes('46') || formData.condition.includes('46') ||
// formData.condition.includes('47') || // formData.condition.includes('47') ||
// formData.condition.includes('48') || // formData.condition.includes('48') ||
formData.condition.includes('49') formData.condition.includes('49')
) { ) {
@@ -311,7 +311,7 @@ const conditionChange = () => {
formData.condition.includes('44') || formData.condition.includes('44') ||
formData.condition.includes('45')) && formData.condition.includes('45')) &&
(formData.condition.includes('46') || (formData.condition.includes('46') ||
// formData.condition.includes('47') || // formData.condition.includes('47') ||
// formData.condition.includes('48') || // formData.condition.includes('48') ||
formData.condition.includes('49')) formData.condition.includes('49'))
) { ) {
@@ -323,7 +323,7 @@ const conditionChange = () => {
} }
if ( if (
formData.condition.includes('46') || formData.condition.includes('46') ||
// formData.condition.includes('47') || // formData.condition.includes('47') ||
// formData.condition.includes('48') || // formData.condition.includes('48') ||
formData.condition.includes('49') formData.condition.includes('49')
) { ) {
@@ -350,7 +350,7 @@ const conditionChange = () => {
formData.condition.includes('44') || formData.condition.includes('44') ||
formData.condition.includes('45')) && formData.condition.includes('45')) &&
(formData.condition.includes('46') || (formData.condition.includes('46') ||
// formData.condition.includes('47') || // formData.condition.includes('47') ||
// formData.condition.includes('48') || // formData.condition.includes('48') ||
formData.condition.includes('49')) formData.condition.includes('49'))
) { ) {
@@ -362,7 +362,7 @@ const conditionChange = () => {
} }
if ( if (
formData.condition.includes('46') || formData.condition.includes('46') ||
// formData.condition.includes('47') || // formData.condition.includes('47') ||
// formData.condition.includes('48') || // formData.condition.includes('48') ||
formData.condition.includes('49') formData.condition.includes('49')
) { ) {
@@ -389,7 +389,7 @@ const conditionChange = () => {
formData.condition.includes('44') || formData.condition.includes('44') ||
formData.condition.includes('45')) && formData.condition.includes('45')) &&
(formData.condition.includes('46') || (formData.condition.includes('46') ||
// formData.condition.includes('47') || // formData.condition.includes('47') ||
// formData.condition.includes('48') || // formData.condition.includes('48') ||
formData.condition.includes('49')) formData.condition.includes('49'))
) { ) {
@@ -401,7 +401,7 @@ const conditionChange = () => {
} }
if ( if (
formData.condition.includes('46') || formData.condition.includes('46') ||
// formData.condition.includes('47') || // formData.condition.includes('47') ||
// formData.condition.includes('48') || // formData.condition.includes('48') ||
formData.condition.includes('49') formData.condition.includes('49')
) { ) {

View File

@@ -132,7 +132,7 @@ const init = (row: any) => {
) / 100 ) / 100
SvData[`h${i - 0.5}`] = SvData[`h${i - 0.5}`] =
Math.floor(Math.max(...[row.V.A[`SV_` + i], row.V.B[`SV_` + i], row.V.C[`SV_` + i]].map(Number)) * 100) / Math.floor(Math.max(...[row.V.A[`SV_` + (i-1)], row.V.B[`SV_` + (i-1)], row.V.C[`SV_` + (i-1)]].map(Number)) * 100) /
100 100
iData[`h${i + 1}`] = iData[`h${i + 1}`] =
Math.floor( Math.floor(
@@ -140,7 +140,7 @@ const init = (row: any) => {
) / 100 ) / 100
} }
SvData[`h49.5`] = SvData[`h49.5`] =
Math.floor(Math.max(...[row.V.A[`SV_50`], row.V.B[`SV_50`], row.V.C[`SV_50`]].map(Number)) * 100) / 100 Math.floor(Math.max(...[row.V.A[`SV_49`], row.V.B[`SV_49`], row.V.C[`SV_49`]].map(Number)) * 100) / 100
tabsList.value[0].data = vData tabsList.value[0].data = vData
tabsList.value[1].data = SvData tabsList.value[1].data = SvData

View File

@@ -341,7 +341,27 @@ const setEcharts = () => {
fontSize: 14 fontSize: 14
}, },
backgroundColor: 'rgba(0,0,0,0.55)', backgroundColor: 'rgba(0,0,0,0.55)',
borderWidth: 0 borderWidth: 0,
formatter(params: any) {
const xname = params[0].value[0]
let str = `${xname}<br>`
params.forEach((el: any, index: any) => {
let marker = ''
// if (el.value[3] == 'dashed') {
// for (let i = 0; i < 3; i++) {
// marker += `<span style="display:inline-block;border: 2px ${el.color} solid;margin-right:5px;width:10px;height:0px;background-color:#ffffff00;"></span>`
// }
// } else {
// marker = `<span style="display:inline-block;border: 2px ${el.color} ${el.value[3]};margin-right:5px;width:40px;height:0px;background-color:#ffffff00;"></span>`
// }
str += `${el.marker} ${el.seriesName.split('(')[0]}${
el.value[1] ? el.value[1] + ' ' + (el.value[2] || '') : '-'
}<br>`
})
return str
}
}, },
series: [] series: []
} }

View File

@@ -7,7 +7,7 @@
<el-checkbox v-model="checked" @change="checkChange" /> <el-checkbox v-model="checked" @change="checkChange" />
</el-form-item> </el-form-item>
<el-form-item label="日期"> <el-form-item label="日期">
<DatePicker ref="datePickerRef"></DatePicker> <DatePicker ref="datePickerRef" :theCurrentTime="true"></DatePicker>
</el-form-item> </el-form-item>
<el-form-item label="指标类型:"> <el-form-item label="指标类型:">
<el-select <el-select
@@ -67,7 +67,7 @@
<!-- <el-form :inline="true"> <!-- <el-form :inline="true">
</el-form> --> </el-form> -->
<div id="canvas" class="mt10" :style="height1" v-loading="loading"> <div id="canvas" class="mt10" :style="height1" style="overflow-y: auto" v-loading="loading">
<my-echart :options="item.option" v-for="item in list" :style="height" @triggerPoint="triggerPoint" /> <my-echart :options="item.option" v-for="item in list" :style="height" @triggerPoint="triggerPoint" />
</div> </div>
</div> </div>
@@ -90,6 +90,7 @@ import { queryEventDetailByEventId } from '@/api/event-boot/highAndLowPressure'
import TableStore from '@/utils/tableStore' import TableStore from '@/utils/tableStore'
import waveForm from '@/components/echarts/waveForm.vue' import waveForm from '@/components/echarts/waveForm.vue'
import html2canvas from 'html2canvas' import html2canvas from 'html2canvas'
import { ElMessage } from 'element-plus'
import * as echarts from 'echarts' // 全引入 import * as echarts from 'echarts' // 全引入
const datePickerRef = ref() const datePickerRef = ref()
const monitoringPoint = useMonitoringPoint() const monitoringPoint = useMonitoringPoint()
@@ -139,7 +140,7 @@ onMounted(() => {
init() init()
}) })
const height: any = ref(mainHeight(200, 1)) const height: any = ref(mainHeight(200, 1))
const height1: any = ref(mainHeight(200)) const height1: any = ref(mainHeight(160))
const checkChange = () => { const checkChange = () => {
if (checked.value) { if (checked.value) {
monitoringPoint.setShowCheckBox(true) monitoringPoint.setShowCheckBox(true)
@@ -149,6 +150,9 @@ const checkChange = () => {
} }
} }
const init = () => { const init = () => {
if (formData.condition.length == 0) {
return ElMessage.warning('请选择指标类型')
}
loading.value = true loading.value = true
formData.lineId = checked.value ? monitoringPoint.state.lineIds : [monitoringPoint.state.lineId] formData.lineId = checked.value ? monitoringPoint.state.lineIds : [monitoringPoint.state.lineId]
formData.searchBeginTime = datePickerRef.value.timeValue[0] formData.searchBeginTime = datePickerRef.value.timeValue[0]
@@ -162,13 +166,14 @@ const init = () => {
} }
}) })
getHistoryResult(formData) getHistoryResult(formData)
.then((res: any) => { .then(async (res: any) => {
if (directionValue >= 0) { if (directionValue >= 0) {
res.data[directionValue].targetName = '谐波电流方向' res.data[directionValue].targetName = '谐波电流方向'
traceability.value = [(res.data as [])[directionValue]] traceability.value = [(res.data as [])[directionValue]]
} }
list.value = [] list.value = []
shujuchuli(res) await shujuchuli(res)
await selectChange(tableHeaderRef.value.showSelect)
loading.value = false loading.value = false
}) })
.catch(() => { .catch(() => {
@@ -1146,7 +1151,7 @@ const shujuchuli = (res: any) => {
rendering() rendering()
} }
const rendering = () => { const rendering = () => {
height.value = mainHeight(160, list.value.length) height.value = mainHeight(160, list.value.length > 3 ? 3 : list.value.length)
list.value.forEach((item: any) => { list.value.forEach((item: any) => {
if (item.targetName == '电压不平衡') { if (item.targetName == '电压不平衡') {
@@ -1406,22 +1411,22 @@ const getEcharts = () => {
? 'A相谐波电流方向:无<br/>' ? 'A相谐波电流方向:无<br/>'
: 'A相谐波电流方向:流出<br/>' : 'A相谐波电流方向:流出<br/>'
} else if (params[i].seriesName == 'B相谐波电流方向') { } else if (params[i].seriesName == 'B相谐波电流方向') {
tips += params[i].marker + tips +=
params[i].value[1] > 0 params[i].marker + params[i].value[1] > 0
? 'B相谐波电流方向:流入<br/>' ? 'B相谐波电流方向:流入<br/>'
: params[i].value[1] == 0 : params[i].value[1] == 0
? 'B相谐波电流方向:无<br/>' ? 'B相谐波电流方向:无<br/>'
: 'B相谐波电流方向:流出<br/>' : 'B相谐波电流方向:流出<br/>'
} else if (params[i].seriesName == 'C相谐波电流方向') { } else if (params[i].seriesName == 'C相谐波电流方向') {
tips += params[i].marker + tips +=
params[i].value[1] > 0 params[i].marker + params[i].value[1] > 0
? 'C相谐波电流方向:流入<br/>' ? 'C相谐波电流方向:流入<br/>'
: params[i].value[1] == 0 : params[i].value[1] == 0
? 'C相谐波电流方向:无<br/>' ? 'C相谐波电流方向:无<br/>'
: 'C相谐波电流方向:流出<br/>' : 'C相谐波电流方向:流出<br/>'
} else if (params[i].seriesName == '总谐波电流方向') { } else if (params[i].seriesName == '总谐波电流方向') {
tips += params[i].marker + tips +=
params[i].value[1] > 0 params[i].marker + params[i].value[1] > 0
? '总谐波电流方向:流入<br/>' ? '总谐波电流方向:流入<br/>'
: params[i].value[1] == 0 : params[i].value[1] == 0
? '总谐波电流方向:无<br/>' ? '总谐波电流方向:无<br/>'
@@ -1430,22 +1435,22 @@ const getEcharts = () => {
let str = (params[i].value[1] * 1).toString() let str = (params[i].value[1] * 1).toString()
let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g
let str1 = str.replace(reg, '$1,') let str1 = str.replace(reg, '$1,')
tips += params[i].marker + params[i].seriesName.replace('(kV)', '') + ':' + str1 + 'kV<br/>' tips += params[i].marker + params[i].seriesName.replace('(kV)', '') + ':' + str1 + 'kV<br/>'
} else if (params[i].seriesName == '零序电压(V)' || params[i].seriesName == '负序电压(V)') { } else if (params[i].seriesName == '零序电压(V)' || params[i].seriesName == '负序电压(V)') {
let str = (params[i].value[1] * 1).toString() let str = (params[i].value[1] * 1).toString()
let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g
let str1 = str.replace(reg, '$1,') let str1 = str.replace(reg, '$1,')
tips += params[i].marker + params[i].seriesName.replace('(V)', '') + ':' + str1 + 'V<br/>' tips += params[i].marker + params[i].seriesName.replace('(V)', '') + ':' + str1 + 'V<br/>'
} else if (params[i].seriesName !== '正序电压(kV)') { } else if (params[i].seriesName !== '正序电压(kV)') {
let str = (params[i].value[1] * 1).toString() let str = (params[i].value[1] * 1).toString()
let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g
let str1 = str.replace(reg, '$1,') let str1 = str.replace(reg, '$1,')
tips += params[i].marker + params[i].seriesName + ':' + str1 + '<br/>' tips += params[i].marker + params[i].seriesName + ':' + str1 + '<br/>'
} else { } else {
let str = (params[i].value[2] * 1).toString() let str = (params[i].value[2] * 1).toString()
let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g
let str1 = str.replace(reg, '$1,') let str1 = str.replace(reg, '$1,')
tips += params[i].marker + params[i].seriesName + ':' + str1 + '<br/>' tips += params[i].marker + params[i].seriesName + ':' + str1 + '<br/>'
let str2 = (params[i].value[3] * 1).toString() let str2 = (params[i].value[3] * 1).toString()
let reg2 = str2.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g let reg2 = str2.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g
@@ -1453,7 +1458,7 @@ const getEcharts = () => {
// if(params[i].seriesName){ // if(params[i].seriesName){
// } // }
tips += params[i].marker + params[i].seriesName + ':' + str12 + '<br/>' tips += params[i].marker + params[i].seriesName + ':' + str12 + '<br/>'
} }
} }
@@ -1806,7 +1811,7 @@ const conditionChange = () => {
] ]
} }
setTimeout(() => { setTimeout(() => {
console.log('🚀 ~ setTimeout ~ tableHeaderRef.value:', tableHeaderRef.value) // console.log('🚀 ~ setTimeout ~ tableHeaderRef.value:', tableHeaderRef.value)
tableHeaderRef.value && tableHeaderRef.value?.computedSearchRow() tableHeaderRef.value && tableHeaderRef.value?.computedSearchRow()
}, 100) }, 100)
@@ -1830,7 +1835,7 @@ const triggerPoint = (data: any) => {
} }
// 计算高度 // 计算高度
const selectChange = (flag: boolean) => { const selectChange = (flag: boolean) => {
height.value = mainHeight(flag ? 220 : 160, list.value.length) height.value = mainHeight(flag ? 220 : 160, list.value.length > 3 ? 3 : list.value.length)
} }
const backbxlb = () => { const backbxlb = () => {
view.value = true view.value = true

View File

@@ -98,15 +98,16 @@ const init = () => {
// } // }
} }
for (let i = 0; i < steadyInfoData.length; i++) { for (let i = 0; i < steadyInfoData.length; i++) {
if (steadyInfoData[i] == 3.1415) { yData2.push(steadyInfoData[i])
steadyInfoData[i] = 1 // if (steadyInfoData[i] == 3.14159) {
yData2.push(steadyInfoData[i]) // steadyInfoData[i] = 0
} else if (steadyInfoData[i] == 3.14159) { // yData2.push(steadyInfoData[i])
steadyInfoData[i] = 1 // } else if (steadyInfoData[i] == 3.14159) {
yData2.push(steadyInfoData[i]) // steadyInfoData[i] = 0
} else if (steadyInfoData[i] !== 3.14159) { // yData2.push(steadyInfoData[i])
yData2.push(steadyInfoData[i]) // } else if (steadyInfoData[i] !== 3.14159) {
} // yData2.push(steadyInfoData[i])
// }
} }
let series: any[] = [ let series: any[] = [
{ {
@@ -183,13 +184,13 @@ const init = () => {
name: formData.periodBeginTime + '至' + formData.periodEndTime, name: formData.periodBeginTime + '至' + formData.periodEndTime,
type: 'bar', type: 'bar',
barMaxWidth: 30, barMaxWidth: 30,
label: { // label: {
show: true, // show: true,
position: 'top', // position: 'top',
distance: 2, // distance: 2,
color: '#fff', // color: '#fff',
fontWeight: 'bolder' // fontWeight: 'bolder'
}, // },
data: yData2, data: yData2,
itemStyle: { itemStyle: {
color: (params: any) => { color: (params: any) => {
@@ -197,6 +198,8 @@ const init = () => {
return gradeColor3[0] return gradeColor3[0]
} else if (params.value > 60) { } else if (params.value > 60) {
return gradeColor3[1] return gradeColor3[1]
} else if (params.value == 3.14159) {
return '#ccc'
} else { } else {
return gradeColor3[2] return gradeColor3[2]
} }

View File

@@ -1,23 +1,22 @@
<template> <template>
<div style="display: flex; flex-direction: column; height: 100%"> <div style="display: flex; flex-direction: column; height: 100%">
<TableHeader ref="TableHeaderRef" :showSearch="false" > <TableHeader ref="TableHeaderRef" :showSearch="false">
<template v-slot:select> <template v-slot:select>
<el-form-item label="日期"> <el-form-item label="日期">
<DatePicker ref="datePickerRef"></DatePicker> <DatePicker ref="datePickerRef"></DatePicker>
</el-form-item> </el-form-item>
<el-form-item label="指标"> <el-form-item label="指标">
<el-radio-group v-model="formData.harmState"> <el-radio-group v-model="formData.harmState">
<el-radio-button :label="0">谐波电压含有率</el-radio-button> <el-radio-button :label="0">谐波电压含有率</el-radio-button>
<el-radio-button :label="1">谐波电流幅值</el-radio-button> <el-radio-button :label="1">谐波电流幅值</el-radio-button>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</template> </template>
<template v-slot:operation> <template v-slot:operation>
<el-button type="primary" @click="init" icon="el-icon-Search">查询</el-button> <el-button type="primary" @click="init" icon="el-icon-Search">查询</el-button>
</template> </template>
</TableHeader> </TableHeader>
<vxe-table :data="analysisData" v-bind="defaultAttribute"> <vxe-table :data="analysisData" v-bind="defaultAttribute">
<vxe-column field="name" title="指标" width="140px"></vxe-column> <vxe-column field="name" title="指标" width="140px"></vxe-column>
<vxe-column <vxe-column
@@ -27,7 +26,7 @@
width="80px" width="80px"
></vxe-column> ></vxe-column>
</vxe-table> </vxe-table>
<div style="flex: 1" class="mt10" v-loading="loading"> <div style="flex: 1" class="mt10" v-loading="loading">
<my-echart :options="options" /> <my-echart :options="options" />
</div> </div>
</div> </div>
@@ -69,8 +68,12 @@ const init = () => {
analysisData.value.push( analysisData.value.push(
{ {
name: '谐波电流幅值(A)', name: '谐波电流幅值(A)',
originData: res.data.harmInHarmValue.map((item: number) => item.toFixed(3)), originData: res.data.harmInHarmValue.map((item: number) =>
...res.data.harmInHarmValue.map((item: number) => item.toFixed(3)) item == null || item == 3.14159 ? 0.14159 : Math.floor(item * 1000) / 1000
),
...res.data.harmInHarmValue.map((item: number) =>
item == null || item == 3.14159 ? '/' : Math.floor(item * 1000) / 1000
)
}, },
{ {
name: '国标限值(A)', name: '国标限值(A)',
@@ -82,8 +85,12 @@ const init = () => {
analysisData.value.push( analysisData.value.push(
{ {
name: '谐波电压含有率(%)', name: '谐波电压含有率(%)',
originData: res.data.harmInHarmValue.map((item: number) => item.toFixed(3)), originData: res.data.harmInHarmValue.map((item: number) =>
...res.data.harmInHarmValue.map((item: number) => item.toFixed(3)) item == null || item == 3.14159 ? 0.14159 : Math.floor(item * 1000) / 1000
),
...res.data.harmInHarmValue.map((item: number) =>
item == null || item == 3.14159 ? '/' : Math.floor(item * 1000) / 1000
)
}, },
{ {
name: '国标限值(%)', name: '国标限值(%)',

View File

@@ -1,26 +1,26 @@
<template> <template>
<div style="display: flex; flex-direction: column; height: 100%"> <div style="display: flex; flex-direction: column; height: 100%">
<TableHeader ref="TableHeaderRef" :showSearch="false" > <TableHeader ref="TableHeaderRef" :showSearch="false">
<template v-slot:select> <template v-slot:select>
<el-form-item label="日期"> <el-form-item label="日期">
<DatePicker ref="datePickerRef"></DatePicker> <DatePicker ref="datePickerRef"></DatePicker>
</el-form-item> </el-form-item>
<el-form-item label="对比"> <el-form-item label="对比">
<el-select v-model="searchType" clearable placeholder="可选择同比、环比"> <el-select v-model="searchType" clearable placeholder="可选择同比、环比">
<el-option <el-option
v-for="item in searchTypeOptions" v-for="item in searchTypeOptions"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</template> </template>
<template v-slot:operation> <template v-slot:operation>
<el-button type="primary" @click="init" icon="el-icon-Search">查询</el-button> <el-button type="primary" @click="init" icon="el-icon-Search">查询</el-button>
</template> </template>
</TableHeader> </TableHeader>
<div style="flex: 1; display: flex; overflow: hidden" class="mt10" v-loading="loading"> <div style="flex: 1; display: flex; overflow: hidden" class="mt10" v-loading="loading">
<div style="flex: 1"> <div style="flex: 1">
<my-echart :options="options1" /> <my-echart :options="options1" />
@@ -90,11 +90,15 @@ const init = () => {
formData.periodBeginTime = '' formData.periodBeginTime = ''
formData.periodEndTime = '' formData.periodEndTime = ''
} }
Promise.all([getComFlagInfoData(formData), getRunInfoData(formData)]).then((res: any) => { Promise.all([getComFlagInfoData(formData), getRunInfoData(formData)])
handlerOptions1(res[0].data) .then((res: any) => {
handlerOptions2(res[1].data) handlerOptions1(res[0].data)
loading.value = false handlerOptions2(res[1].data)
}).catch(() => { loading.value = false }) loading.value = false
})
.catch(() => {
loading.value = false
})
} }
const handlerOptions1 = (data: any) => { const handlerOptions1 = (data: any) => {
options1.value = { options1.value = {
@@ -106,13 +110,13 @@ const handlerOptions1 = (data: any) => {
}, },
tooltip: { tooltip: {
formatter: function (params: any) { formatter: function (params: any) {
var res = params[0].name + '<br/>终端运行状态为:' var res = params[0].data[0] + '<br/>终端运行状态为:'
var texts = '' var texts = ''
if (params[0].value === 2 || params[0].value === '2') { if (params[0].data[1] === 2 || params[0].data[1] === '2') {
texts = '退出' texts = '退出'
} else if (params[0].value === 0 || params[0].value === '0') { } else if (params[0].data[1] === 0 || params[0].data[1] === '0') {
texts = '中断' texts = '中断'
} else if (params[0].value === 1 || params[0].value === '1') { } else if (params[0].data[1] === 1 || params[0].data[1] === '1') {
texts = '正常' texts = '正常'
} }
res = res + texts res = res + texts
@@ -120,11 +124,21 @@ const handlerOptions1 = (data: any) => {
} }
}, },
xAxis: { xAxis: {
type: 'category', // type: 'category',
data: data.updateTime // data: data.updateTime
type: 'time',
name: '时间',
//
axisLabel: {
formatter: {
day: '{MM}-{dd}',
month: '{MM}',
year: '{yyyy}'
}
}
}, },
yAxis: { yAxis: {
name:'状态', name: '状态',
type: 'value', type: 'value',
axisLabel: { axisLabel: {
// 这里重新定义就可以 // 这里重新定义就可以
@@ -144,8 +158,9 @@ const handlerOptions1 = (data: any) => {
series: [ series: [
{ {
name: '中断运行状态', name: '中断运行状态',
data: data.type, data: data.type.map((item: any, index: number) => [data.updateTime[index], item]),
type: 'line' type: 'line',
step: 'end'
} }
] ]
} }
@@ -165,7 +180,7 @@ const handlerOptions2 = (data: any) => {
: [`${formData.searchBeginTime}${formData.searchEndTime}`] : [`${formData.searchBeginTime}${formData.searchEndTime}`]
}, },
yAxis: { yAxis: {
name:'%', name: '%',
type: 'value' type: 'value'
}, },
series: [ series: [

View File

@@ -1,7 +1,7 @@
<template> <template>
<el-dialog draggable width="1300px" class="cn-operate-dialog" v-model="dialogVisible" :title="title"> <el-dialog draggable width="135 0px" class="cn-operate-dialog" v-model="dialogVisible" :title="title">
<div style="display: flex"> <div style="display: flex">
<div :style="height1" class="mr10 box" style="width: 450px"> <div :style="height1" class="mr10 box" style="width: 500px">
<vxe-table <vxe-table
height="auto" height="auto"
:data="TableData" :data="TableData"
@@ -12,6 +12,7 @@
> >
<vxe-column type="seq" title="序号" width="60px"></vxe-column> <vxe-column type="seq" title="序号" width="60px"></vxe-column>
<vxe-column field="date" title="日期"></vxe-column> <vxe-column field="date" title="日期"></vxe-column>
<vxe-column field="bdName" title="所属电站(场站)" width="120px"></vxe-column>
<vxe-column field="monitorName" title="监测点名称" width="120px"></vxe-column> <vxe-column field="monitorName" title="监测点名称" width="120px"></vxe-column>
<vxe-column field="timeSum" title="告警时间(分钟)" width="80px"></vxe-column> <vxe-column field="timeSum" title="告警时间(分钟)" width="80px"></vxe-column>
</vxe-table> </vxe-table>

View File

@@ -18,25 +18,50 @@
:value="item.transtypeId" :value="item.transtypeId"
></el-option> ></el-option>
</el-select> </el-select>
<el-select
v-if="item.field == 'harmId'"
v-model="form[item.field]"
filterable
clearable
placeholder="请选择谐波源"
>
<el-option
v-for="item in characteristic"
:key="item.harmId"
:label="item.harmName"
:value="item.harmId"
></el-option>
</el-select>
<el-input-number <el-input-number
v-else-if=" v-else-if="
item.field == 'transNum' || item.field == 'transNum' ||
item.field == 'capacitorNum' || item.field == 'capacitorNum' ||
item.field == 'capacitorCapacity' || item.field == 'capacitorCapacity' ||
item.field == 'capacitorReactance' item.field == 'capacitorReactance' ||
item.field == 'flickerCoeff' ||
item.field == 's'||
item.field == 'transhighCapacity'||
item.field == 'transImpedance'||
item.field == 'nonlinearloadPower'||
item.field == 'powerFactor'
" "
style="width: 100%" style="width: 100%"
v-model="form[item.field]" v-model="form[item.field]"
show-word-limit show-word-limit
:min="0"
placeholder="请输入值" placeholder="请输入值"
></el-input-number> ></el-input-number>
<el-select <el-select
v-else-if="item.field == 'capacitorScale'" v-else-if="
item.field == 'capacitorScale' ||
item.field == 'linevoltageScale' ||
item.field == 'translowScale'
"
v-model="form[item.field]" v-model="form[item.field]"
filterable filterable
placeholder="请选择接入变电站" placeholder="请选择电压等级"
> >
<el-option <el-option
v-for="item in voltageleveloption" v-for="item in voltageleveloption"
@@ -64,15 +89,23 @@ import { reactive } from 'vue'
import { useDictData } from '@/stores/dictData' import { useDictData } from '@/stores/dictData'
import { import {
transformerList, transformerList,
characteristicList,
assessTransformerParamAdd, assessTransformerParamAdd,
assessTransformerParamEdit, assessTransformerParamEdit,
capacitorAdd, capacitorAdd,
capacitorEdit capacitorEdit,
windPowerAdd,
windPowerDdit,
loadParamAdd,
loadParamEdit,
shockAdd,
shockEdit
} from '@/api/advance-boot/assess' } from '@/api/advance-boot/assess'
import { ElMessage, ElMessageBox, ElDatePicker } from 'element-plus' import { ElMessage, ElMessageBox, ElDatePicker } from 'element-plus'
const emits = defineEmits(['init']) const emits = defineEmits(['init'])
const child: any = ref([]) const child: any = ref([])
const transformer: any = ref([]) const transformer: any = ref([])
const characteristic: any = ref([])
const form: any = ref({}) const form: any = ref({})
const dictData = useDictData() const dictData = useDictData()
//字典获取电压等级 //字典获取电压等级
@@ -86,6 +119,17 @@ const rules = {
capacitorCapacity: [{ required: true, message: '请输入单组容量', trigger: 'blur' }], capacitorCapacity: [{ required: true, message: '请输入单组容量', trigger: 'blur' }],
capacitorReactance: [{ required: true, message: '请输入电抗率', trigger: 'blur' }], capacitorReactance: [{ required: true, message: '请输入电抗率', trigger: 'blur' }],
capacitorScale: [{ required: true, message: '请选择电压等级', trigger: 'change' }], capacitorScale: [{ required: true, message: '请选择电压等级', trigger: 'change' }],
windgeneratorName: [{ required: true, message: '请输入风机名称', trigger: 'blur' }],
flickerCoeff: [{ required: true, message: '请输入风机闪变系数', trigger: 'blur' }],
s: [{ required: true, message: '请输入风机额定视在功率', trigger: 'blur' }],
loadName: [{ required: true, message: '请输入负荷名称', trigger: 'blur' }],
transhighCapacity: [{ required: true, message: '请输入配变容量', trigger: 'blur' }],
transImpedance: [{ required: true, message: '请输入配电变压器阻抗', trigger: 'blur' }],
nonlinearloadPower: [{ required: true, message: '请输入非线性负荷功率', trigger: 'blur' }],
powerFactor: [{ required: true, message: '请输入功率因数', trigger: 'blur' }],
linevoltageScale: [{ required: true, message: '请选择进线电压', trigger: 'change' }],
harmId: [{ required: true, message: '请选择谐波源特性', trigger: 'change' }],
translowScale: [{ required: true, message: '请选择配变低压侧电压', trigger: 'change' }],
} }
const formRef = ref() const formRef = ref()
const dialogVisible = ref(false) const dialogVisible = ref(false)
@@ -114,35 +158,66 @@ const info = async () => {
transformerList({}).then((res: any) => { transformerList({}).then((res: any) => {
transformer.value = res.data transformer.value = res.data
}) })
// 谐波源特特性
characteristicList({}).then((res: any) => {
characteristic.value = res.data
})
} }
const submit = async () => { const submit = async () => {
formRef.value.validate((valid: any) => { formRef.value.validate(async (valid: any) => {
if (valid) { if (valid) {
if (title.value == '新增_变压器参数维护') { if (title.value == '新增_变压器参数维护') {
assessTransformerParamAdd(form.value).then((res: any) => { await assessTransformerParamAdd(form.value).then((res: any) => {
ElMessage.success('新增成功') ElMessage.success('新增成功')
emits('init', 0) emits('init', 0)
dialogVisible.value = false
}) })
} else if (title.value == '编辑_变压器参数维护') { } else if (title.value == '编辑_变压器参数维护') {
assessTransformerParamEdit(form.value).then((res: any) => { await assessTransformerParamEdit(form.value).then((res: any) => {
ElMessage.success('修改成功') ElMessage.success('修改成功')
emits('init', 0) emits('init', 0)
dialogVisible.value = false
}) })
} else if (title.value == '新增_电容器组参数维护') { } else if (title.value == '新增_电容器组参数维护') {
capacitorAdd(form.value).then((res: any) => { await capacitorAdd(form.value).then((res: any) => {
ElMessage.success('新增成功') ElMessage.success('新增成功')
emits('init', 1) emits('init', 1)
dialogVisible.value = false
}) })
} else if (title.value == '编辑_电容器组参数维护') { } else if (title.value == '编辑_电容器组参数维护') {
capacitorEdit(form.value).then((res: any) => { await capacitorEdit(form.value).then((res: any) => {
ElMessage.success('修改成功') ElMessage.success('修改成功')
emits('init', 1) emits('init', 1)
dialogVisible.value = false })
} else if (title.value == '新增_风电参数') {
await windPowerAdd(form.value).then((res: any) => {
ElMessage.success('新增成功')
emits('init', 2)
})
} else if (title.value == '编辑_风电参数') {
await windPowerDdit(form.value).then((res: any) => {
ElMessage.success('修改成功')
emits('init', 2)
})
} else if (title.value == '新增_用户负荷') {
await loadParamAdd(form.value).then((res: any) => {
ElMessage.success('新增成功')
emits('init', 3)
})
} else if (title.value == '编辑_用户负荷') {
await loadParamEdit(form.value).then((res: any) => {
ElMessage.success('修改成功')
emits('init', 3)
})
}else if (title.value == '新增_冲击负荷') {
await loadParamAdd(form.value).then((res: any) => {
ElMessage.success('新增成功')
emits('init', 4)
})
} else if (title.value == '编辑_冲击负荷') {
await loadParamEdit(form.value).then((res: any) => {
ElMessage.success('修改成功')
emits('init', 4)
}) })
} }
dialogVisible.value = false
} }
}) })
} }

View File

@@ -43,11 +43,16 @@ import { useDictData } from '@/stores/dictData'
import { import {
assessTransformerParamList, assessTransformerParamList,
transformerList, transformerList,
characteristicList,
assessTransformerParamDelete, assessTransformerParamDelete,
capacitorList, capacitorList,
capacitorDelete, capacitorDelete,
windPowerList, windPowerList,
windPowerDelete windPowerDelete,
loadParamList,
loadParamDelete,
shockList,
shockDelete
} from '@/api/advance-boot/assess' } from '@/api/advance-boot/assess'
import { defaultAttribute } from '@/components/table/defaultAttribute' import { defaultAttribute } from '@/components/table/defaultAttribute'
import { ElMessage, ElMessageBox, ElDatePicker } from 'element-plus' import { ElMessage, ElMessageBox, ElDatePicker } from 'element-plus'
@@ -58,6 +63,7 @@ const dictData = useDictData()
//字典获取电压等级 //字典获取电压等级
const voltageleveloption = dictData.getBasicData('Dev_Voltage_Stand') const voltageleveloption = dictData.getBasicData('Dev_Voltage_Stand')
const transformer: any = ref([]) const transformer: any = ref([])
const characteristic: any = ref([])
const addformRef = ref() const addformRef = ref()
const xTableRef = ref() const xTableRef = ref()
@@ -118,15 +124,15 @@ const column: any = ref([
child: [ child: [
{ {
title: '风机名称', title: '风机名称',
field: 'name' field: 'windgeneratorName'
}, },
{ {
title: '风机闪变系数', title: '闪变系数',
field: 'name1' field: 'flickerCoeff'
}, },
{ {
title: '风机额定视在功率', title: '额定视在功率(kVA)',
field: 'name2' field: 's'
} }
] ]
}, },
@@ -137,88 +143,82 @@ const column: any = ref([
key: 'loadList', key: 'loadList',
child: [ child: [
{ {
title: '配电窒名称', title: '负荷名称',
field: 'name' field: 'loadName'
}, },
{ {
title: '进线电压', title: '进线电压',
field: 'name1' field: 'linevoltageScale'
}, },
{ {
title: '配变容量(kVA)', title: '配变容量(kVA)',
field: 'name2' field: 'transhighCapacity'
}, },
{ {
title: '配电变压器阻抗(%)', title: '配电变压器阻抗(%)',
field: 'name3' field: 'transImpedance'
}, },
{ {
title: '谐波源特性', title: '谐波源特性',
field: 'name4' field: 'harmId'
}, },
{ {
title: '配变低压侧电压', title: '配变低压侧电压',
field: 'name5' field: 'translowScale'
}, },
{ {
title: '非线性负荷功率(kW)', title: '非线性负荷功率(kW)',
field: 'name6' field: 'nonlinearloadPower'
}, },
{ {
title: '功率因', title: '功率因',
field: 'name7' field: 'powerFactor'
} }
] ]
}, },
{ {
loading: false, loading: false,
name: '冲击负荷', name: '冲击负荷',
key: 'impactList', key: 'impactList',
child: [ child: [
{ {
title: '冲击负荷类型', title: '冲击负荷类型',
field: 'name' field: 'inpactloadtypeId'
},
{
title: '冲击负荷功率(MVA)',
field: 'name1'
}, },
{ {
title: '数量', title: '数量',
field: 'name2' field: 'inpactloadNum'
}, },
{ {
title: '启动方式', title: '容量',
field: 'name3' field: 'inpactloadPower'
}, },
{ {
title: '启动容量倍数', title: '是否隔离变',
field: 'name4' field: 'isIsolationtrans'
},
{
title: '冲击负荷高压侧电压',
field: 'name5'
},
{
title: '有无隔离变',
field: 'name6'
}, },
{ {
title: '隔离变阻抗(%)', title: '隔离变阻抗(%)',
field: 'name7' field: 'isolationtransImpedance'
},
{
title: '高压侧电压',
field: 'inpactloadhighScale'
}, },
{ {
title: '低压侧电压', title: '低压侧电压',
field: 'name8' field: 'inpactloadlowScale'
}, },
{ {
title: '负荷频度选择', title: '负荷频度',
field: 'name9' field: 'inpactloadFreq'
}, },
{ {
title: '闪变叠加系数', title: '闪变叠加系数',
field: 'name10' field: 'flickerCoeff'
} }
] ]
} }
@@ -250,34 +250,48 @@ const deleteFform = (item: any, i: any) => {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(async () => {
if (i == 0) { if (i == 0) {
assessTransformerParamDelete(xTableRef.value[i].getCheckboxRecords().map(item => item.transId)).then( await assessTransformerParamDelete(xTableRef.value[i].getCheckboxRecords().map(item => item.transId)).then(
res => { res => {
ElMessage({ ElMessage({
type: 'success', type: 'success',
message: '删除成功!' message: '删除成功!'
}) })
info(i)
} }
) )
} else if (i == 1) { } else if (i == 1) {
capacitorDelete(xTableRef.value[i].getCheckboxRecords().map(item => item.capacitorId)).then(res => { await capacitorDelete(xTableRef.value[i].getCheckboxRecords().map(item => item.capacitorId)).then(res => {
ElMessage({ ElMessage({
type: 'success', type: 'success',
message: '删除成功!' message: '删除成功!'
}) })
info(i)
}) })
} else if (i == 2) { } else if (i == 2) {
windPowerDelete(xTableRef.value[i].getCheckboxRecords().map(item => item.windgeneratorId)).then(res => { await windPowerDelete(xTableRef.value[i].getCheckboxRecords().map(item => item.windgeneratorId)).then(
res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
}
)
} else if (i == 3) {
await loadParamDelete(xTableRef.value[i].getCheckboxRecords().map(item => item.loadId)).then(res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
})
} else if (i == 4) {
await shockDelete(xTableRef.value[i].getCheckboxRecords().map(item => item.inpactloadId)).then(res => {
ElMessage({ ElMessage({
type: 'success', type: 'success',
message: '删除成功!' message: '删除成功!'
}) })
info(i)
}) })
} }
info(i)
}) })
} }
// 编辑 // 编辑
@@ -288,18 +302,6 @@ const edit = (item: any, row: any) => {
row: row row: row
}) })
} }
// 过滤数据
const formatter = (row: any) => {
if (row.column.field == 'transtypeId') {
const found = transformer.value.find((item: any) => item.transtypeId == row.cellValue)
return found.transtypeName || '' // 使用可选链并提供默认值
} else if (row.column.field == 'capacitorScale') {
const found = voltageleveloption.find((item: any) => item.id == row.cellValue)
return found.name || ''
} else {
return row.cellValue
}
}
const info = async (i: number) => { const info = async (i: number) => {
column.value[i].loading = true column.value[i].loading = true
@@ -310,30 +312,65 @@ const info = async (i: number) => {
dataList.value.transformerList = res.data dataList.value.transformerList = res.data
}) })
} else if (i == 1) { } else if (i == 1) {
// 电容器参数维护
await capacitorList({ assessId: props.assessId }).then(res => { await capacitorList({ assessId: props.assessId }).then(res => {
dataList.value.capacitorList = res.data dataList.value.capacitorList = res.data
}) })
} else if (i == 2) { } else if (i == 2) {
// 风电参数
await windPowerList({ assessId: props.assessId }).then(res => { await windPowerList({ assessId: props.assessId }).then(res => {
dataList.value.windPowerList = res.data dataList.value.windPowerList = res.data
}) })
} else if (i == 3) {
// 用户负荷参数
await loadParamList({ assessId: props.assessId }).then(res => {
dataList.value.loadList = res.data
})
} else if (i == 4) {
// 冲击性负荷
await shockList({ assessId: props.assessId }).then(res => {
dataList.value.impactList = res.data
})
} }
column.value[i].loading = false column.value[i].loading = false
} }
// 过滤数据
const formatter = (row: any) => {
if (row.column.field == 'transtypeId') {
const found = transformer.value.find((item: any) => item.transtypeId == row.cellValue)
return found.transtypeName || '' // 使用可选链并提供默认值
} else if (row.column.field == 'harmId') {
const found = characteristic.value.find((item: any) => item.harmId == row.cellValue)
return found.harmName || '' // 使用可选链并提供默认值
} else if (
row.column.field == 'capacitorScale' ||
row.column.field == 'linevoltageScale' ||
row.column.field == 'translowScale'
) {
const found = voltageleveloption.find((item: any) => item.id == row.cellValue)
return found.name || ''
} else {
return row.cellValue
}
}
// 字典 // 字典
const dictionary = () => { const dictionary = () => {
// 获取变压器参数字典列表 // 获取变压器参数字典列表
transformerList({}).then((res: any) => { transformerList({}).then((res: any) => {
transformer.value = res.data transformer.value = res.data
}) })
// 谐波源特特性
characteristicList({}).then((res: any) => {
characteristic.value = res.data
})
} }
onMounted(async () => { onMounted(async () => {
await dictionary() await dictionary()
info(0) // 变压器参数维护 info(0) // 变压器参数维护
info(1) // 变压器参数维护 info(1) // 电容器参数维护
info(2) // 变压器参数维护 info(2) // 风电参数
// info(3) // 变压器参数维护 info(3) // 用户负荷
info(4) // 冲击性负荷
}) })
</script> </script>
<style lang="scss" scoped></style> <style lang="scss" scoped></style>

View File

@@ -1,7 +1,7 @@
<template> <template>
<el-dialog draggable width="1400px" class="cn-operate-dialog" v-model="dialogVisible" :title="title"> <el-dialog draggable width="1550px" class="cn-operate-dialog" v-model="dialogVisible" :title="title">
<div style="display: flex"> <div style="display: flex">
<div :style="height1" class="mr10 box" style="width: 450px"> <div :style="height1" class="mr10 box" style="width: 600px">
<vxe-table <vxe-table
height="auto" height="auto"
:data="TableData" :data="TableData"
@@ -12,8 +12,10 @@
> >
<vxe-column type="seq" title="序号" width="60px"></vxe-column> <vxe-column type="seq" title="序号" width="60px"></vxe-column>
<vxe-column field="date" title="日期"></vxe-column> <vxe-column field="date" title="日期"></vxe-column>
<vxe-column field="bdName" title="所属电站(场站)" width="120px"></vxe-column>
<vxe-column field="monitorName" title="监测点名称" width="120px"></vxe-column> <vxe-column field="monitorName" title="监测点名称" width="120px"></vxe-column>
<vxe-column field="timeSum" title="异常时间(分钟)" width="80px"></vxe-column> <vxe-column field="timeSum" title="异常时间(分钟)" width="80px"></vxe-column>
<vxe-column field="errCount" title="异常次数" width="80px"></vxe-column>
</vxe-table> </vxe-table>
</div> </div>

View File

@@ -10,7 +10,7 @@
<script setup lang="ts"> <script setup lang="ts">
defineOptions({ defineOptions({
name: 'runManage/alarmCleaning' name: 'runManage/cleaning'
}) })
import abnormal from './components/abnormal.vue' import abnormal from './components/abnormal.vue'
// import alarm from './components/alarm.vue' // import alarm from './components/alarm.vue'

View File

@@ -864,22 +864,22 @@ const 九江 = [
{ lng:116.828758, lat: 29.963141}, { lng:116.828758, lat: 29.963141},
{ lng:116.8265, lat: 29.976828}, { lng:116.8265, lat: 29.976828},
{ lng:116.82974, lat: 29.989041}, { lng:116.82974, lat: 29.989041},
{ lng:116.829544, 30.00654}, { lng:116.829544, lat: 30.00654},
{ lng:116.80279, lat: 29.99651}, { lng:116.80279, lat: 29.99651},
{ lng:116.787327, 30.02033}, { lng:116.787327, lat: 30.02033},
{ lng:116.783498, 30.030739}, { lng:116.783498, lat: 30.030739},
{ lng:116.770293, 30.035644}, { lng:116.770293, lat: 30.035644},
{ lng:116.764549, 30.048939}, { lng:116.764549, lat: 30.048939},
{ lng:116.753602, 30.048994}, { lng:116.753602, lat: 30.048994},
{ lng:116.747368, 30.057221}, { lng:116.747368, lat: 30.057221},
{ lng:116.720319, 30.053897}, { lng:116.720319, lat: 30.053897},
{ lng:116.685662, 30.070622}, { lng:116.685662, lat: 30.070622},
{ lng:116.666861, 30.076723}, { lng:116.666861, lat: 30.076723},
{ lng:116.64261, 30.076396}, { lng:116.64261, lat: 30.076396},
{ lng:116.611046, 30.070677}, { lng:116.611046, lat: 30.070677},
{ lng:116.596564, 30.059727}, { lng:116.596564, lat: 30.059727},
{ lng:116.586059, 30.046324}, { lng:116.586059, lat: 30.046324},
{ lng:116.571332, 30.014443}, { lng:116.571332, lat: 30.014443},
{ lng:116.571185, lat: 29.989204}, { lng:116.571185, lat: 29.989204},
{ lng:116.564558, lat: 29.949343}, { lng:116.564558, lat: 29.949343},
{ lng:116.558716, lat: 29.924306}, { lng:116.558716, lat: 29.924306},

View File

@@ -1,25 +1,25 @@
<template> <template>
<div style='display: flex;flex-direction: column;height: 100%' v-loading='loading'> <div style="display: flex; flex-direction: column; height: 100%" v-loading="loading">
<el-form :inline='true'> <el-form :inline="true" class="fx-jcsb">
<el-form-item label='日期'> <el-form-item label="日期">
<DatePicker ref='datePickerRef'></DatePicker> <DatePicker ref="datePickerRef"></DatePicker>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type='primary' @click='init'>查询</el-button> <el-button type="primary" @click="init" icon="el-icon-Search">查询</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-descriptions class='mt2' direction='vertical' :column='4' border> <el-descriptions class="mt2" direction="vertical" :column="4" border>
<el-descriptions-item align='center' label='名称'>{{ data.name }}</el-descriptions-item> <el-descriptions-item align="center" label="名称">{{ data.name }}</el-descriptions-item>
<el-descriptions-item align='center' label='事件总数'>{{ data.gs }}</el-descriptions-item> <el-descriptions-item align="center" label="事件总数">{{ data.gs }}</el-descriptions-item>
<el-descriptions-item align='center' label='可容忍'>{{ data.krr }}</el-descriptions-item> <el-descriptions-item align="center" label="可容忍">{{ data.krr }}</el-descriptions-item>
<el-descriptions-item align='center' label='不可容忍'> {{ data.bkrr }}</el-descriptions-item> <el-descriptions-item align="center" label="不可容忍">{{ data.bkrr }}</el-descriptions-item>
</el-descriptions> </el-descriptions>
<div style='flex: 1;' class='mt10'> <div style="flex: 1" class="mt10">
<my-echart :options='options' /> <my-echart :options="options" />
</div> </div>
</div> </div>
</template> </template>
<script setup lang='ts'> <script setup lang="ts">
import { nextTick, onMounted, reactive, ref } from 'vue' import { nextTick, onMounted, reactive, ref } from 'vue'
import DatePicker from '@/components/form/datePicker/index.vue' import DatePicker from '@/components/form/datePicker/index.vue'
import MyEchart from '@/components/echarts/MyEchart.vue' import MyEchart from '@/components/echarts/MyEchart.vue'
@@ -47,136 +47,123 @@ const init = () => {
formData.lineIndex = monitoringPoint.state.lineId formData.lineIndex = monitoringPoint.state.lineId
formData.startTime = datePickerRef.value.timeValue[0] formData.startTime = datePickerRef.value.timeValue[0]
formData.endTime = datePickerRef.value.timeValue[1] formData.endTime = datePickerRef.value.timeValue[1]
getPlot(formData).then( getPlot(formData).then((res: any) => {
(res: any) => { const gongData = gongfunction(res.data.voltageToleranceCurveDataList)
const gongData = gongfunction(res.data.voltageToleranceCurveDataList) data.gs = res.data.voltageToleranceCurveDataList.length
data.gs = res.data.voltageToleranceCurveDataList.length data.krr = gongData.pointI.length
data.krr = gongData.pointI.length data.bkrr = gongData.pointIun.length
data.bkrr = gongData.pointIun.length console.log(gongData)
console.log(gongData) options.value = {
options.value = { // backgroundColor: "#f9f9f9", //地图背景色深蓝
// backgroundColor: "#f9f9f9", //地图背景色深蓝 title: {
title: { // text: `ITIC曲线(总统计:${gongData.pointI.length + gongData.pointIun.length}个,可容忍:${gongData.pointI.length}个,不可容忍:${gongData.pointIun.length}个)`
// text: `ITIC曲线(总统计:${gongData.pointI.length + gongData.pointIun.length}个,可容忍:${gongData.pointI.length}个,不可容忍:${gongData.pointIun.length}个)` text: `ITIC曲线`
text: `ITIC曲线` },
}, legend: {
legend: { data: ['上限', '下限', '可容忍事件', '不可容忍事件']
data: ['上限', '下限', '可容忍事件', '不可容忍事件'], },
}, tooltip: {
tooltip: { trigger: 'item',
trigger: 'item', show: true,
show: true, axisPointer: {
axisPointer: { type: 'shadow',
type: 'shadow', label: {
label: {
color: '#fff',
fontSize: 16
}
},
textStyle: {
color: '#fff', color: '#fff',
fontStyle: 'normal', fontSize: 16
opacity: 0.35,
fontSize: 14
},
backgroundColor: 'rgba(0,0,0,0.55)',
borderWidth: 0,
formatter: function (a: any) {
var relVal = ''
relVal =
'<font style=\'color:' +
'\'>发生时间:' +
a.value[2] +
'</font><br/>'
relVal +=
'<font style=\'color:' +
'\'>持续时间:' +
a.value[0] +
's</font><br/>'
relVal +=
'<font style=\'color:' +
'\'>特征幅值:' +
a.value[1].toFixed(2) +
'%</font>'
return relVal
} }
}, },
xAxis: [ textStyle: {
{ color: '#fff',
type: 'log', fontStyle: 'normal',
min: 0.001, opacity: 0.35,
max: 1000, fontSize: 14
splitLine: { },
show: false backgroundColor: 'rgba(0,0,0,0.55)',
}, borderWidth: 0,
name: 's' formatter: function (a: any) {
} var relVal = ''
], relVal = "<font style='color:" + "'>发生时间:" + a.value[2] + '</font><br/>'
yAxis: [ relVal += "<font style='color:" + "'>持续时间:" + a.value[0] + 's</font><br/>'
{ relVal += "<font style='color:" + "'>特征幅值:" + a.value[1].toFixed(2) + '%</font>'
type: 'value', return relVal
splitNumber: 10,
minInterval: 3,
name: '%'
}
],
options: {
dataZoom: null,
series: [
{
name: '上限',
type: 'line',
data: [
[0.001, 200],
[0.003, 140],
[0.003, 120],
[0.5, 120],
[0.5, 110],
[10, 110],
[1000, 110]
],
showSymbol: false,
tooltips: {
show: false
}
},
{
name: '下限',
type: 'line',
data: [
[0.02, 0],
[0.02, 70],
[0.5, 70],
[0.5, 80],
[10, 80],
[10, 90],
[1000, 90]
],
showSymbol: false,
tooltips: {
show: false
}
},
{
name: '可容忍事件',
type: 'scatter',
symbol: 'circle',
data: gongData.pointI
},
{
name: '不可容忍事件',
type: 'scatter',
symbol: 'circle',
data: gongData.pointIun
}
]
} }
},
xAxis: [
{
type: 'log',
min: 0.001,
max: 1000,
splitLine: {
show: false
},
name: 's'
}
],
yAxis: [
{
type: 'value',
splitNumber: 10,
minInterval: 3,
name: '%'
}
],
color: ['#007D7B','#07CCCA', 'green','red'],
options: {
dataZoom: null,
series: [
{
name: '上限',
type: 'line',
data: [
[0.001, 200],
[0.003, 140],
[0.003, 120],
[0.5, 120],
[0.5, 110],
[10, 110],
[1000, 110]
],
showSymbol: false,
tooltips: {
show: false
}
},
{
name: '下限',
type: 'line',
data: [
[0.02, 0],
[0.02, 70],
[0.5, 70],
[0.5, 80],
[10, 80],
[10, 90],
[1000, 90]
],
showSymbol: false,
tooltips: {
show: false
}
},
{
name: '可容忍事件',
type: 'scatter',
symbol: 'circle',
data: gongData.pointI
},
{
name: '不可容忍事件',
type: 'scatter',
symbol: 'circle',
data: gongData.pointIun
}
]
} }
nextTick(() => {
loading.value = false
})
} }
) nextTick(() => {
loading.value = false
})
})
} }
function gongfunction(arr: any) { function gongfunction(arr: any) {
@@ -341,6 +328,5 @@ function gongfunction(arr: any) {
onMounted(() => { onMounted(() => {
init() init()
}) })
</script> </script>
<style></style> <style></style>

View File

@@ -1,25 +1,25 @@
<template> <template>
<div style='display: flex;flex-direction: column;height: 100%'> <div style="display: flex; flex-direction: column; height: 100%">
<el-form :inline='true'> <el-form :inline="true" class="fx-jcsb">
<el-form-item label='日期'> <el-form-item label="日期">
<DatePicker ref='datePickerRef'></DatePicker> <DatePicker ref="datePickerRef"></DatePicker>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type='primary' @click='init'>查询</el-button> <el-button type="primary" @click="init" icon="el-icon-Search">查询</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-descriptions class='mt2' direction='vertical' :column='4' border> <el-descriptions class="mt2" direction="vertical" :column="4" border>
<el-descriptions-item align='center' label='名称'>{{ data.name }}</el-descriptions-item> <el-descriptions-item align="center" label="名称">{{ data.name }}</el-descriptions-item>
<el-descriptions-item align='center' label='事件总数'>{{ data.gs }}</el-descriptions-item> <el-descriptions-item align="center" label="事件总数">{{ data.gs }}</el-descriptions-item>
<el-descriptions-item align='center' label='可容忍'>{{ data.krr }}</el-descriptions-item> <el-descriptions-item align="center" label="可容忍">{{ data.krr }}</el-descriptions-item>
<el-descriptions-item align='center' label='不可容忍'> {{ data.bkrr }}</el-descriptions-item> <el-descriptions-item align="center" label="不可容忍">{{ data.bkrr }}</el-descriptions-item>
</el-descriptions> </el-descriptions>
<div style='flex: 1;' class='mt10'> <div style="flex: 1" class="mt10">
<my-echart :options='options' /> <my-echart :options="options" />
</div> </div>
</div> </div>
</template> </template>
<script setup lang='ts'> <script setup lang="ts">
import { nextTick, onMounted, reactive, ref } from 'vue' import { nextTick, onMounted, reactive, ref } from 'vue'
import DatePicker from '@/components/form/datePicker/index.vue' import DatePicker from '@/components/form/datePicker/index.vue'
import MyEchart from '@/components/echarts/MyEchart.vue' import MyEchart from '@/components/echarts/MyEchart.vue'
@@ -47,122 +47,109 @@ const init = () => {
formData.lineIndex = monitoringPoint.state.lineId formData.lineIndex = monitoringPoint.state.lineId
formData.startTime = datePickerRef.value.timeValue[0] formData.startTime = datePickerRef.value.timeValue[0]
formData.endTime = datePickerRef.value.timeValue[1] formData.endTime = datePickerRef.value.timeValue[1]
getPlot(formData).then( getPlot(formData).then((res: any) => {
(res: any) => { const gongData = gongfunction(res.data.voltageToleranceCurveDataList)
const gongData = gongfunction(res.data.voltageToleranceCurveDataList) data.gs = res.data.voltageToleranceCurveDataList.length
data.gs = res.data.voltageToleranceCurveDataList.length data.krr = gongData.pointI.length
data.krr = gongData.pointI.length data.bkrr = gongData.pointIun.length
data.bkrr = gongData.pointIun.length console.log(gongData)
console.log(gongData) options.value = {
options.value = { // backgroundColor: "#f9f9f9", //地图背景色深蓝
// backgroundColor: "#f9f9f9", //地图背景色深蓝 title: {
title: { text: `SEMI F47曲线`
text: `SEMI F47曲线` },
}, legend: {
legend: { data: ['上限', '下限', '可容忍事件', '不可容忍事件']
data: ['上限', '下限', '可容忍事件', '不可容忍事件'], },
}, tooltip: {
tooltip: { trigger: 'item',
trigger: 'item', show: true,
show: true, axisPointer: {
axisPointer: { type: 'shadow',
type: 'shadow', label: {
label: {
color: '#fff',
fontSize: 16
}
},
textStyle: {
color: '#fff', color: '#fff',
fontStyle: 'normal', fontSize: 16
opacity: 0.35,
fontSize: 14
},
backgroundColor: 'rgba(0,0,0,0.55)',
borderWidth: 0,
formatter: function (a: any) {
var relVal = ''
relVal =
'<font style=\'color:' +
'\'>发生时间:' +
a.value[2] +
'</font><br/>'
relVal +=
'<font style=\'color:' +
'\'>持续时间:' +
a.value[0] +
's</font><br/>'
relVal +=
'<font style=\'color:' +
'\'>特征幅值:' +
a.value[1].toFixed(2) +
'%</font>'
return relVal
} }
}, },
xAxis: [ textStyle: {
{ color: '#fff',
type: 'log', fontStyle: 'normal',
min: 0.001, opacity: 0.35,
max: 1000, fontSize: 14
splitLine: { },
show: false backgroundColor: 'rgba(0,0,0,0.55)',
}, borderWidth: 0,
name: 's' formatter: function (a: any) {
} var relVal = ''
], relVal = "<font style='color:" + "'>发生时间:" + a.value[2] + '</font><br/>'
yAxis: [ relVal += "<font style='color:" + "'>持续时间:" + a.value[0] + 's</font><br/>'
{ relVal += "<font style='color:" + "'>特征幅值:" + a.value[1].toFixed(2) + '%</font>'
type: 'value', return relVal
max: function (value: any) {
return value.max + 20
},
splitNumber: 10,
minInterval: 0.1,
name: '%'
}
],
options: {
dataZoom: null,
series: [
{
name: '边界线',
type: 'line',
data: [
[0.05, 0],
[0.05, 50],
[0.2, 50],
[0.2, 70],
[0.5, 70],
[0.5, 80],
[10, 80],
[1000, 80]
],
showSymbol: false,
tooltips: {
show: false
}
},
{
name: '可容忍事件',
type: 'scatter',
symbol: 'circle',
data: gongData.pointI
},
{
name: '不可容忍事件',
type: 'scatter',
symbol: 'circle',
data: gongData.pointIun
}
]
} }
},
xAxis: [
{
type: 'log',
min: 0.001,
max: 1000,
splitLine: {
show: false
},
name: 's'
}
],
yAxis: [
{
type: 'value',
max: function (value: any) {
return value.max + 20
},
splitNumber: 10,
minInterval: 0.1,
name: '%'
}
],
color: ['#007D7B', 'green', 'red'],
options: {
dataZoom: null,
series: [
{
name: '边界线',
type: 'line',
data: [
[0.05, 0],
[0.05, 50],
[0.2, 50],
[0.2, 70],
[0.5, 70],
[0.5, 80],
[10, 80],
[1000, 80]
],
showSymbol: false,
tooltips: {
show: false
}
},
{
name: '可容忍事件',
type: 'scatter',
symbol: 'circle',
data: gongData.pointI
},
{
name: '不可容忍事件',
type: 'scatter',
symbol: 'circle',
data: gongData.pointIun
}
]
} }
nextTick(() => {
loading.value = false
})
} }
) nextTick(() => {
loading.value = false
})
})
} }
function gongfunction(arr: any) { function gongfunction(arr: any) {
@@ -327,6 +314,5 @@ function gongfunction(arr: any) {
onMounted(() => { onMounted(() => {
init() init()
}) })
</script> </script>
<style></style> <style></style>

View File

@@ -1,19 +1,19 @@
<template> <template>
<div style='display: flex;flex-direction: column;height: 100%'> <div style="display: flex; flex-direction: column; height: 100%">
<el-form :inline='true'> <el-form :inline="true" class="fx-jcsb">
<el-form-item label='日期'> <el-form-item label="日期">
<DatePicker ref='datePickerRef'></DatePicker> <DatePicker ref="datePickerRef"></DatePicker>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type='primary' @click='init'>查询</el-button> <el-button type="primary" @click="init" icon="el-icon-Search">查询</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div style='flex: 1;' class='mt10'> <div style="flex: 1" class="mt10">
<my-echart :options='options' /> <my-echart :options="options" />
</div> </div>
</div> </div>
</template> </template>
<script setup lang='ts'> <script setup lang="ts">
import { nextTick, onMounted, reactive, ref } from 'vue' import { nextTick, onMounted, reactive, ref } from 'vue'
import DatePicker from '@/components/form/datePicker/index.vue' import DatePicker from '@/components/form/datePicker/index.vue'
import MyEchart from '@/components/echarts/MyEchart.vue' import MyEchart from '@/components/echarts/MyEchart.vue'
@@ -35,138 +35,137 @@ const init = () => {
formData.lineIndex = monitoringPoint.state.lineId formData.lineIndex = monitoringPoint.state.lineId
formData.startTime = datePickerRef.value.timeValue[0] formData.startTime = datePickerRef.value.timeValue[0]
formData.endTime = datePickerRef.value.timeValue[1] formData.endTime = datePickerRef.value.timeValue[1]
getProbabilityDistribution(formData).then( getProbabilityDistribution(formData).then((res: any) => {
(res: any) => { let data = res.data
let data = res.data let sisttime = data.sisttime
let sisttime = data.sisttime let persisttime = data.persisttime
let persisttime = data.persisttime options.value = {
options.value = { backgroundColor: '#fff', //背景色,
backgroundColor: '#fff', //背景色, title: {
title: { text: '持续时间的概率分布函数',
text: '持续时间的概率分布函数', x: 'center'
x: 'center' },
}, legend: {
legend: { top: 0,
show: true, show: true,
data: ['概率分布', '占比'], data: ['概率分布', '占比'],
textStyle: { textStyle: {
rich: { rich: {
a: { a: {
verticalAlign: 'middle' verticalAlign: 'middle'
}
},
padding: [2, 0, 0, 0] //[上、右、下、左]
}
},
tooltip: {
//提示框组件
trigger: 'axis',
axisPointer: {
type: 'shadow',
label: {
color: '#fff',
fontSize: 16
} }
}, },
textStyle: {
color: '#fff',
fontStyle: 'normal',
opacity: 0.35,
fontSize: 14
},
backgroundColor: 'rgba(0,0,0,0.55)',
borderWidth: 0
},
calculable: true,
xAxis: [
{
type: 'category',
name: '暂降幅值',
nameGap: 10,
nameTextStyle: {
fontSize: 12
},
data: ['0.01', '0.1', '0.25', '0.5', '1', '3', '20', '60', '180']
}
],
yAxis: [
{
type: 'value',
name: '概率分布',
nameTextStyle: {
fontSize: 15
},
axisLabel: {
formatter: '{value}%'
},
axisLine: {
show: true
},
splitLine: {
lineStyle: {
// 使用深浅的间隔色
type: 'dashed',
opacity: 0.5
}
}
},
{
type: 'value',
name: '占比',
nameTextStyle: { padding: [2, 0, 0, 0] //[上、右、下、左]
fontSize: 15
},
axisLine: {
show: true
},
splitLine: {
lineStyle: {
type: 'dashed',
opacity: 0.5
}
}
}
],
series: [
{
name: '概率分布',
type: 'line',
data: sisttime,
itemStyle: {
normal: { show: true }
}
},
{
name: '占比',
type: 'bar',
data: persisttime,
barWidth: 30,
itemStyle: {
normal: { show: true }
}
}
],
options: {
dataZoom: null
} }
} },
nextTick(() => { toolbox: {
loading.value = false top: -10
}) },
} tooltip: {
) //提示框组件
} trigger: 'axis',
axisPointer: {
type: 'shadow',
label: {
color: '#fff',
fontSize: 16
}
},
textStyle: {
color: '#fff',
fontStyle: 'normal',
opacity: 0.35,
fontSize: 14
},
backgroundColor: 'rgba(0,0,0,0.55)',
borderWidth: 0
},
calculable: true,
xAxis: [
{
type: 'category',
name: '持续时间',
nameGap: 10,
nameTextStyle: {
fontSize: 12
},
data: ['0.01', '0.1', '0.25', '0.5', '1', '3', '20', '60', '180']
}
],
yAxis: [
{
type: 'value',
name: '概率分布',
nameTextStyle: {
fontSize: 15
},
axisLabel: {
formatter: '{value}%'
},
axisLine: {
show: true
},
splitLine: {
lineStyle: {
// 使用深浅的间隔色
type: 'dashed',
opacity: 0.5
}
}
},
{
type: 'value',
name: '占比',
nameTextStyle: {
fontSize: 15
},
axisLine: {
show: true
},
splitLine: {
lineStyle: {
type: 'dashed',
opacity: 0.5
}
}
}
],
series: [
{
name: '概率分布',
type: 'line',
data: sisttime,
itemStyle: {
normal: { show: true }
}
},
{
name: '占比',
type: 'bar',
data: persisttime,
barWidth: 30,
itemStyle: {
normal: { show: true }
}
}
],
options: {
dataZoom: null
}
}
nextTick(() => {
loading.value = false
})
})
}
onMounted(() => { onMounted(() => {
init() init()
}) })
</script> </script>
<style></style> <style></style>

View File

@@ -1,73 +1,73 @@
<template> <template>
<div v-loading='loading' class='dianyazanjiangbaojimidu'> <div v-loading="loading" class="dianyazanjiangbaojimidu">
<el-form :inline='true'> <el-form :inline="true" class="fx-jcsb">
<el-form-item label='日期'> <el-form-item label="日期">
<DatePicker ref='datePickerRef'></DatePicker> <DatePicker ref="datePickerRef"></DatePicker>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type='primary' @click='init'>查询</el-button> <el-button type="primary" @click="init" icon="el-icon-Search">查询</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div class='mt10 dianyazanjiang'> <div class="mt10 dianyazanjiang">
<div class='first'> <div class="first">
<div class='mb10'>DISDIP表格(国际发配电联盟UNIPEDE)</div> <div class="mb10">DISDIP表格(国际发配电联盟UNIPEDE)</div>
<div style='flex: 1;overflow: hidden'> <div style="flex: 1; overflow: hidden">
<vxe-table v-bind='defaultAttribute' height='100%' size='mini' :data='firstData'> <vxe-table v-bind="defaultAttribute" height="100%" size="mini" :data="firstData">
<vxe-colgroup title='剩余电压' field='name' width='80px'></vxe-colgroup> <vxe-colgroup title="剩余电压" field="name" width="80px"></vxe-colgroup>
<vxe-colgroup title='持续事件'> <vxe-colgroup title="持续时间">
<vxe-column field='twentyMs' title='20ms'></vxe-column> <vxe-column field="twentyMs" title="20ms" :formatter="formatter" />
<vxe-column field='oneHundredMs' title='100ms'></vxe-column> <vxe-column field="oneHundredMs" title="100ms" :formatter="formatter" />
<vxe-column field='fiveHundredMs' title='500ms'></vxe-column> <vxe-column field="fiveHundredMs" title="500ms" :formatter="formatter" />
<vxe-column field='oneS' title='1s'></vxe-column> <vxe-column field="oneS" title="1s" :formatter="formatter" />
<vxe-column field='threeS' title='2s'></vxe-column> <vxe-column field="threeS" title="2s" :formatter="formatter" />
<vxe-column field='twentyS' title='20s'></vxe-column> <vxe-column field="twentyS" title="20s" :formatter="formatter" />
<vxe-column field='sixtyS' title='60s'></vxe-column> <vxe-column field="sixtyS" title="60s" :formatter="formatter" />
<vxe-column field='oneEightyS' title='180s'></vxe-column> <vxe-column field="oneEightyS" title="180s" :formatter="formatter" />
</vxe-colgroup> </vxe-colgroup>
</vxe-table> </vxe-table>
</div> </div>
</div> </div>
<div class='second'> <div class="second">
<div class='mb10'>EC61000-4-11(用电终端的电压暂降抗度)</div> <div class="mb10">EC61000-4-11(用电终端的电压暂降抗度)</div>
<div style='flex: 1;overflow: hidden'> <div style="flex: 1; overflow: hidden">
<vxe-table v-bind='defaultAttribute' height='100%' size='mini' :data='secondData'> <vxe-table v-bind="defaultAttribute" height="100%" size="mini" :data="secondData">
<vxe-colgroup title='剩余电压' field='name' width='80px'></vxe-colgroup> <vxe-colgroup title="剩余电压" field="name" width="80px"></vxe-colgroup>
<vxe-colgroup title='持续事件'> <vxe-colgroup title="持续时间">
<vxe-column field='tenTwentyMs' title='10-20ms'></vxe-column> <vxe-column field="tenTwentyMs" title="10-20ms" :formatter="formatter" />
<vxe-column field='twentyOneHundredMs' title='20-100ms'></vxe-column> <vxe-column field="twentyOneHundredMs" title="20-100ms" :formatter="formatter" />
<vxe-column field='zeroPiontOneTwoS' title='0.1-0.2s'></vxe-column> <vxe-column field="zeroPiontOneTwoS" title="0.1-0.2s" :formatter="formatter" />
<vxe-column field='zeroPiontFive1S' title='0.2-0.5s'></vxe-column> <vxe-column field="zeroPiontFive1S" title="0.2-0.5s" :formatter="formatter" />
<vxe-column field='zeroPiontTwoFiveS' title='0.5-1s'></vxe-column> <vxe-column field="zeroPiontTwoFiveS" title="0.5-1s" :formatter="formatter" />
<vxe-column field='role' title='>1s'></vxe-column> <vxe-column field="greater1S" title=">1s" :formatter="formatter" />
</vxe-colgroup> </vxe-colgroup>
</vxe-table> </vxe-table>
</div> </div>
</div> </div>
<div class='third'> <div class="third">
<div class='mb10'>IEC61000-2-8(公共用电暂降测量统计)</div> <div class="mb10">IEC61000-2-8(公共用电暂降测量统计)</div>
<div style='flex: 1;overflow: hidden'> <div style="flex: 1; overflow: hidden">
<vxe-table v-bind='defaultAttribute' height='100%' size='mini' :data='thirdData'> <vxe-table v-bind="defaultAttribute" height="100%" size="mini" :data="thirdData">
<vxe-colgroup title='剩余电压' field='name' width='120px'></vxe-colgroup> <vxe-colgroup title="剩余电压" field="name" width="120px"></vxe-colgroup>
<vxe-colgroup title='持续事件'> <vxe-colgroup title="持续时间">
<vxe-column field='q' title='0.01-0.1s' align='center'></vxe-column> <vxe-column field="q" title="0.01-0.1s" align="center" :formatter="formatter" />
<vxe-column field='w' title='0.1-0.25s' align='center'></vxe-column> <vxe-column field="w" title="0.1-0.25s" align="center" :formatter="formatter" />
<vxe-column field='e' title='0.25-0.5s' align='center'></vxe-column> <vxe-column field="e" title="0.25-0.5s" align="center" :formatter="formatter" />
<vxe-column field='r' title='0.5-1s' align='center'></vxe-column> <vxe-column field="r" title="0.5-1s" align="center" :formatter="formatter" />
<vxe-column field='t' title='1-3s' align='center'></vxe-column> <vxe-column field="t" title="1-3s" align="center" :formatter="formatter" />
<vxe-column field='y' title='3-20s' align='center'></vxe-column> <vxe-column field="y" title="3-20s" align="center" :formatter="formatter" />
<vxe-column field='u' title='20-60s' align='center'></vxe-column> <vxe-column field="u" title="20-60s" align="center" :formatter="formatter" />
<vxe-column field='i' title='60-180s' align='center'></vxe-column> <vxe-column field="i" title="60-180s" align="center" :formatter="formatter" />
</vxe-colgroup> </vxe-colgroup>
</vxe-table> </vxe-table>
</div> </div>
</div> </div>
<div class='charts' id='charts'> <div class="charts" id="charts">
<MyEchart :options='options' /> <MyEchart :options="options" />
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script setup lang='ts'> <script setup lang="ts">
import { nextTick, onMounted, reactive, ref } from 'vue' import { nextTick, onMounted, reactive, ref } from 'vue'
import DatePicker from '@/components/form/datePicker/index.vue' import DatePicker from '@/components/form/datePicker/index.vue'
import MyEchart from '@/components/echarts/MyEchart.vue' import MyEchart from '@/components/echarts/MyEchart.vue'
@@ -88,7 +88,9 @@ const firstData = ref([])
const secondData = ref([]) const secondData = ref([])
const thirdData = ref([]) const thirdData = ref([])
const chartsData = ref([]) const chartsData = ref([])
const formatter = (row: any) => {
return row.cellValue == 0 ? '/' : row.cellValue
}
const init = () => { const init = () => {
formData.lineIndex = monitoringPoint.state.lineId formData.lineIndex = monitoringPoint.state.lineId
formData.startTime = datePickerRef.value.timeValue[0] formData.startTime = datePickerRef.value.timeValue[0]
@@ -209,7 +211,7 @@ const init = () => {
series: [ series: [
{ {
type: 'bar3D', type: 'bar3D',
data: chartsData.value.map(function(item: any) { data: chartsData.value.map(function (item: any) {
return { return {
value: [item['x'], item['y'], item['z']] value: [item['x'], item['y'], item['z']]
} }
@@ -248,7 +250,7 @@ onMounted(() => {
init() init()
}) })
</script> </script>
<style lang='scss'> <style lang="scss">
.dianyazanjiangbaojimidu { .dianyazanjiangbaojimidu {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@@ -261,10 +263,10 @@ onMounted(() => {
min-height: 800px; min-height: 800px;
display: grid; display: grid;
grid-template-areas: grid-template-areas:
'first charts' 'first charts'
'second charts' 'second charts'
'third third ' 'third third '
'third third '; 'third third ';
grid-template-rows: 1fr 1fr 1fr 1fr; grid-template-rows: 1fr 1fr 1fr 1fr;
grid-template-columns: 1fr 1fr; grid-template-columns: 1fr 1fr;
grid-gap: 10px; grid-gap: 10px;
@@ -274,6 +276,7 @@ onMounted(() => {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
overflow: hidden; overflow: hidden;
height: 280px;
} }
.second { .second {
@@ -281,6 +284,7 @@ onMounted(() => {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
overflow: hidden; overflow: hidden;
height: 210px;
} }
.third { .third {
@@ -288,6 +292,7 @@ onMounted(() => {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
overflow: hidden; overflow: hidden;
height: 720px;
} }
.charts { .charts {

View File

@@ -1,11 +1,11 @@
<template> <template>
<div style='display: flex;flex-direction: column;height: 100%' v-loading='loading'> <div style='display: flex;flex-direction: column;height: 100%' v-loading='loading'>
<el-form :inline='true'> <el-form :inline='true' class="fx-jcsb">
<el-form-item label='日期'> <el-form-item label='日期'>
<DatePicker ref='datePickerRef'></DatePicker> <DatePicker ref='datePickerRef'></DatePicker>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type='primary' @click='init'>查询</el-button> <el-button type='primary' @click='init' icon="el-icon-Search">查询</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div style='flex: 1;' class='mt10 zanjiangfenbutongji'> <div style='flex: 1;' class='mt10 zanjiangfenbutongji'>
@@ -111,7 +111,7 @@ const initFirst = () => {
formatter: function (params: any) { formatter: function (params: any) {
let tips = '' let tips = ''
tips += '<font>时间:' + params[0].name + '</font><br/>' tips += '<font>时间:' + params[0].name + '</font><br/>'
tips += '<font>暂降次数:' + params[0].data + '</font>' tips += '<font>暂降次数' + params[0].data + '</font>'
return tips return tips
} }
}, },
@@ -147,12 +147,12 @@ const initFirst = () => {
return color[0] return color[0]
} }
}, },
label: { // label: {
show: true, // show: true,
textStyle: { // textStyle: {
label: { show: true, position: 'top' } // label: { show: true, position: 'top' }
} // }
} // }
} }
}, },
data: handle data: handle
@@ -194,7 +194,7 @@ const initSecond = () => {
fontSize: 14 fontSize: 14
}, },
backgroundColor: 'rgba(0,0,0,0.55)', backgroundColor: 'rgba(0,0,0,0.55)',
formatter: '{a} <br/>{b} : {c} ({d}%)' formatter: '{a} <br/>{b} {c} ({d}%)'
}, },
legend: { legend: {
orient: 'vertical', orient: 'vertical',
@@ -204,14 +204,14 @@ const initSecond = () => {
{ {
name: '暂降原因', name: '暂降原因',
type: 'pie', type: 'pie',
radius: '70%', radius: '65%',
center: ['50%', '53%'], center: ['50%', '53%'],
label: { label: {
normal: { normal: {
show: false show: false
}, },
emphasis: { emphasis: {
show: true show: false
} }
}, },
lableLine: { lableLine: {
@@ -219,7 +219,7 @@ const initSecond = () => {
show: false show: false
}, },
emphasis: { emphasis: {
show: true show: false
} }
}, },
data: valueArray, data: valueArray,
@@ -269,7 +269,7 @@ const initThird = () => {
fontSize: 14 fontSize: 14
}, },
backgroundColor: 'rgba(0,0,0,0.55)', backgroundColor: 'rgba(0,0,0,0.55)',
formatter: '{a} <br/>{b} : {c} ({d}%)' formatter: '{a} <br/>{b} {c} ({d}%)'
}, },
legend: { legend: {
orient: 'vertical', orient: 'vertical',
@@ -279,14 +279,14 @@ const initThird = () => {
{ {
name: '暂降类型', name: '暂降类型',
type: 'pie', type: 'pie',
radius: '70%', radius: '65%',
center: ['50%', '60%'], center: ['50%', '60%'],
label: { label: {
normal: { normal: {
show: false show: false
}, },
emphasis: { emphasis: {
show: true show: false
} }
}, },
lableLine: { lableLine: {
@@ -294,7 +294,7 @@ const initThird = () => {
show: false show: false
}, },
emphasis: { emphasis: {
show: true show: false
} }
}, },
data: valueArray, data: valueArray,

View File

@@ -1,19 +1,19 @@
<template> <template>
<div style='display: flex;flex-direction: column;height: 100%'> <div style="display: flex; flex-direction: column; height: 100%">
<el-form :inline='true'> <el-form :inline="true" class="fx-jcsb">
<el-form-item label='日期'> <el-form-item label="日期">
<DatePicker ref='datePickerRef'></DatePicker> <DatePicker ref="datePickerRef"></DatePicker>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type='primary' @click='init'>查询</el-button> <el-button type="primary" @click="init" icon="el-icon-Search">查询</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div style='flex: 1;' class='mt10'> <div style="flex: 1" class="mt10">
<my-echart :options='options' /> <my-echart :options="options" />
</div> </div>
</div> </div>
</template> </template>
<script setup lang='ts'> <script setup lang="ts">
import { nextTick, onMounted, reactive, ref } from 'vue' import { nextTick, onMounted, reactive, ref } from 'vue'
import DatePicker from '@/components/form/datePicker/index.vue' import DatePicker from '@/components/form/datePicker/index.vue'
import MyEchart from '@/components/echarts/MyEchart.vue' import MyEchart from '@/components/echarts/MyEchart.vue'
@@ -35,150 +35,138 @@ const init = () => {
formData.lineIndex = monitoringPoint.state.lineId formData.lineIndex = monitoringPoint.state.lineId
formData.startTime = datePickerRef.value.timeValue[0] formData.startTime = datePickerRef.value.timeValue[0]
formData.endTime = datePickerRef.value.timeValue[1] formData.endTime = datePickerRef.value.timeValue[1]
getProbabilityDistribution(formData).then( getProbabilityDistribution(formData).then((res: any) => {
(res: any) => { let data = res.data
let data = res.data let eventValue = data.eventvalue
let eventValue = data.eventvalue let pereventValue = data.pereventvalue
let pereventValue = data.pereventvalue options.value = {
options.value = { backgroundColor: '#fff', //背景色,
backgroundColor: '#fff', //背景色, title: {
title: { text: '暂降幅值的概率分布函数',
text: '暂降幅值的概率分布函数', x: 'center'
x: 'center' },
}, legend: {
legend: { show: true,
show: true, top: 0,
data: ['概率分布', '占比'], data: ['概率分布', '占比'],
textStyle: { textStyle: {
rich: { rich: {
a: { a: {
verticalAlign: 'middle' verticalAlign: 'middle'
}
},
padding: [2, 0, 0, 0] //[上、右、下、左]
}
},
tooltip: {
//提示框组件
trigger: 'axis',
axisPointer: {
type: 'shadow',
label: {
color: '#fff',
fontSize: 16
} }
}, },
textStyle: {
color: '#fff',
fontStyle: 'normal',
opacity: 0.35,
fontSize: 14
},
backgroundColor: 'rgba(0,0,0,0.55)',
borderWidth: 0
},
calculable: true,
xAxis: [
{
type: 'category',
name: '暂降幅值',
nameGap: 10,
nameTextStyle: {
fontSize: 12
},
data: [
'0',
'10%',
'20%',
'30%',
'40%',
'50%',
'60%',
'70%',
'80%',
'90%',
'100%'
]
}
],
yAxis: [
{
type: 'value',
name: '概率分布',
nameTextStyle: {
fontSize: 15
},
axisLabel: {
formatter: '{value}%'
},
axisLine: {
show: true
},
splitLine: {
lineStyle: {
// 使用深浅的间隔色
type: 'dashed',
opacity: 0.5
}
}
},
{
type: 'value',
name: '占比',
nameTextStyle: { padding: [2, 0, 0, 0] //[上、右、下、左]
fontSize: 15
},
axisLine: {
show: true
},
splitLine: {
lineStyle: {
type: 'dashed',
opacity: 0.5
}
}
}
],
series: [
{
name: '占比',
type: 'bar',
data: pereventValue,
barWidth: 30,
itemStyle: {
normal: { show: true }
}
},
{
name: '概率分布',
type: 'line',
data: eventValue,
itemStyle: {
normal: { show: true }
}
}
],
options: {
dataZoom: null
} }
} },
nextTick(() => { toolbox: {
loading.value = false top: -10
}) },
}
)
}
tooltip: {
//提示框组件
trigger: 'axis',
axisPointer: {
type: 'shadow',
label: {
color: '#fff',
fontSize: 16
}
},
textStyle: {
color: '#fff',
fontStyle: 'normal',
opacity: 0.35,
fontSize: 14
},
backgroundColor: 'rgba(0,0,0,0.55)',
borderWidth: 0
},
calculable: true,
xAxis: [
{
type: 'category',
name: '暂降幅值',
nameGap: 10,
nameTextStyle: {
fontSize: 12
},
data: ['0', '10%', '20%', '30%', '40%', '50%', '60%', '70%', '80%', '90%', '100%']
}
],
yAxis: [
{
type: 'value',
name: '概率分布',
nameTextStyle: {
fontSize: 15
},
axisLabel: {
formatter: '{value}%'
},
axisLine: {
show: true
},
splitLine: {
lineStyle: {
// 使用深浅的间隔色
type: 'dashed',
opacity: 0.5
}
}
},
{
type: 'value',
name: '占比',
nameTextStyle: {
fontSize: 15
},
axisLine: {
show: true
},
splitLine: {
lineStyle: {
type: 'dashed',
opacity: 0.5
}
}
}
],
series: [
{
name: '占比',
type: 'bar',
data: pereventValue,
barWidth: 30,
itemStyle: {
normal: { show: true }
}
},
{
name: '概率分布',
type: 'line',
data: eventValue,
itemStyle: {
normal: { show: true }
}
}
],
options: {
dataZoom: null
}
}
nextTick(() => {
loading.value = false
})
})
}
onMounted(() => { onMounted(() => {
init() init()
}) })
</script> </script>
<style></style> <style></style>

View File

@@ -76,17 +76,22 @@
@click="markerClick(path)" @click="markerClick(path)"
></bm-marker> ></bm-marker>
</BmlMarkerClusterer> </BmlMarkerClusterer>
<bm-marker :position="infoWindowPoint" :icon="{ url: '1', size: { width: 0, height: 0 } }" > <bm-marker :position="infoWindowPoint" :icon="{ url: '1', size: { width: 0, height: 0 } }">
<bm-info-window :show="infoWindowPoint.show" @close="infoWindowPoint.show = false"> <bm-info-window :show="infoWindowPoint.show" @close="infoWindowPoint.show = false">
<el-descriptions :title="infoWindowPoint.lineName" style="min-width: 240px;" :column="1" v-if="infoWindowPoint.lineId"> <el-descriptions
:title="infoWindowPoint.lineName"
style="min-width: 240px"
:column="1"
v-if="infoWindowPoint.lineId"
>
<el-descriptions-item label="供电公司">{{ infoWindowPoint.gdName }}</el-descriptions-item> <el-descriptions-item label="供电公司">{{ infoWindowPoint.gdName }}</el-descriptions-item>
<el-descriptions-item label="变电站(场站)">{{ infoWindowPoint.subName }}</el-descriptions-item> <el-descriptions-item label="变电站(场站)">{{ infoWindowPoint.subName }}</el-descriptions-item>
<el-descriptions-item label="母线">{{ infoWindowPoint.voltageName }}</el-descriptions-item> <el-descriptions-item label="母线">{{ infoWindowPoint.voltageName }}</el-descriptions-item>
<el-descriptions-item label="网络参数"> <el-descriptions-item label="网络参数">
{{ infoWindowPoint.ip }} {{ infoWindowPoint.ip }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="PT变">{{ infoWindowPoint.pt2 }}</el-descriptions-item> <el-descriptions-item label="PT变">{{ infoWindowPoint.pt2 }}</el-descriptions-item>
<el-descriptions-item label="CT变">{{ infoWindowPoint.ct2 }}</el-descriptions-item> <el-descriptions-item label="CT变">{{ infoWindowPoint.ct2 }}</el-descriptions-item>
<el-descriptions-item label="生产厂家"> <el-descriptions-item label="生产厂家">
{{ infoWindowPoint.manufacturer }} {{ infoWindowPoint.manufacturer }}
</el-descriptions-item> </el-descriptions-item>
@@ -232,7 +237,7 @@ const handler = async ({ BMap, map }: any) => {
siteList.value = list siteList.value = list
center.value.lng = list[0]?.lng || 0 center.value.lng = list[0]?.lng || 0
center.value.lat = list[0]?.lat || 0 center.value.lat = list[0]?.lat + 0.01 || 0
watch( watch(
() => monitoringPoint.state.lineId, () => monitoringPoint.state.lineId,
(newLineId, oldLineId) => { (newLineId, oldLineId) => {
@@ -240,7 +245,7 @@ const handler = async ({ BMap, map }: any) => {
if (value == undefined) return if (value == undefined) return
center.value.lng = value.lng center.value.lng = value.lng
center.value.lat = value.lat center.value.lat = value.lat + 0.01
infoWindowPoint.value = value infoWindowPoint.value = value
infoWindowPoint.value.show = true infoWindowPoint.value.show = true
monitoringPoint.setValue( monitoringPoint.setValue(
@@ -270,10 +275,10 @@ onMounted(() => {
if (siteList.value.length == 0) { if (siteList.value.length == 0) {
setTimeout(() => { setTimeout(() => {
hackReset.value = false hackReset.value = false
}, 1000) }, 500)
setTimeout(() => { setTimeout(() => {
hackReset.value = true hackReset.value = true
}, 2000) }, 1000)
} }
}) })
</script> </script>

View File

@@ -1,31 +1,38 @@
<template> <template>
<div v-loading='loading' class='running-condition'> <div v-loading="loading" class="running-condition">
<el-form :inline='true'> <el-form :inline="true" class="fx-jcsb">
<el-form-item label='日期'> <el-form-item label="日期">
<DatePicker ref='datePickerRef'></DatePicker> <DatePicker ref="datePickerRef"></DatePicker>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type='primary' @click='init'>查询</el-button> <el-button type="primary" @click="init" icon="el-icon-Search">查询</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div style='flex: 1;' class='mt10 zanjiangfenbutongji'> <div style="flex: 1" class="mt10 zanjiangfenbutongji">
<div <div
style='position: absolute; right: 10px; top: 10px; z-index: 2;display: flex;align-items: center;font-size: 12px'> style="
<el-tag style='width: 20px;height: 12px' :style='{ background: gradeColor3[2] }'></el-tag> position: absolute;
<span class='ml2' :style='{ color: gradeColor3[2] }'> {{ 'X<60%' }} </span> right: 55px;
<el-tag class='ml10' style='width: 20px;height: 12px' top: 25px;
:style='{ background: gradeColor3[1] }'></el-tag> z-index: 2;
<span class='ml2' :style='{ color: gradeColor3[1] }'>{{ '60%≤X<90%' }} </span> display: flex;
<el-tag class='ml10' style='width: 20px;height: 12px' align-items: center;
:style='{ background: gradeColor3[0] }'></el-tag> font-size: 12px;
<span class='ml2' :style='{ color: gradeColor3[0] }'> {{ 'X≥90 %' }}</span> "
>
<el-tag style="width: 20px; height: 12px" :style="{ background: gradeColor3[2] }"></el-tag>
<span class="ml2" :style="{ color: gradeColor3[2] }">{{ 'X<60%' }}</span>
<el-tag class="ml10" style="width: 20px; height: 12px" :style="{ background: gradeColor3[1] }"></el-tag>
<span class="ml2" :style="{ color: gradeColor3[1] }">{{ '60%≤X<90%' }}</span>
<el-tag class="ml10" style="width: 20px; height: 12px" :style="{ background: gradeColor3[0] }"></el-tag>
<span class="ml2" :style="{ color: gradeColor3[0] }">{{ 'X≥90 %' }}</span>
</div> </div>
<my-echart :options='secondOptions' style='flex: 1;height: 100%' /> <my-echart :options="secondOptions" style="flex: 1; height: 100%" />
<my-echart :options='firstOptions' style='flex: 1;height: 100%' /> <my-echart :options="firstOptions" style="flex: 1; height: 100%" />
</div> </div>
</div> </div>
</template> </template>
<script setup lang='ts'> <script setup lang="ts">
import { nextTick, onMounted, reactive, ref, watch } from 'vue' import { nextTick, onMounted, reactive, ref, watch } from 'vue'
import DatePicker from '@/components/form/datePicker/index.vue' import DatePicker from '@/components/form/datePicker/index.vue'
import MyEchart from '@/components/echarts/MyEchart.vue' import MyEchart from '@/components/echarts/MyEchart.vue'
@@ -210,19 +217,8 @@ const initFirst = () => {
} }
} }
const initSecond = () => { const initSecond = () => {
let list = secondData.value.type let list = secondData.value.type.map((item, i) => [secondData.value.updateTime[i], item])
let items = secondData.value.updateTime
for (let i = 0; i < items.length; i++) {
if (i != 0) {
i
items[i] = items[i].slice(11)
} else if (i == 0) {
let date = items[i].slice(11)
let t = items[i].slice(0, 10)
items[i] = '(' + date + ')' + '\n' + t
}
}
secondOptions.value = { secondOptions.value = {
tooltip: { tooltip: {
trigger: 'axis', trigger: 'axis',
@@ -241,37 +237,30 @@ const initSecond = () => {
}, },
backgroundColor: 'rgba(0,0,0,0.55)', backgroundColor: 'rgba(0,0,0,0.55)',
formatter: function (params: any) { formatter: function (params: any) {
let res = '时间: ' + params[0].name + '<br/>运行状态:' console.log('🚀 ~ initSecond ~ params:', params)
let texts = '' let res = ''
if (params[0].value === 2 || params[0].value === '2') { res += `${params[0].value[0]}${params[0].value[1] == '0' ? '中断' : '正常'}` //params[0].value[0] + '' //+ params[0].value[1] == '0' ? '中断' : '正常'
texts = '退出' console.log('🚀 ~ initSecond ~ res:', res)
} else if (params[0].value === 0 || params[0].value === '0') {
texts = '中断'
} else if (params[0].value === 1 || params[0].value === '1') {
texts = '正常'
}
res = res + texts
return res return res
} }
}, },
dataZoom: [
{
type: 'inside',
height: 13,
start: 0,
end: 100,
bottom: '25px'
},
{ height: 13, start: 0, bottom: '25px', end: 100 }
],
xAxis: { xAxis: {
// name: '时间',
// type: 'category',
// data: items,
// boundaryGap: false
type: 'time',
name: '时间', name: '时间',
type: 'category', //
data: items, axisLabel: {
boundaryGap: false formatter: {
day: '{MM}-{dd}',
month: '{MM}',
year: '{yyyy}'
}
}
}, },
yAxis: { yAxis: {
name: '状态', name: '状态',
@@ -311,9 +300,8 @@ const initSecond = () => {
onMounted(() => { onMounted(() => {
init() init()
}) })
</script> </script>
<style lang='scss'> <style lang="scss">
.running-condition { .running-condition {
display: flex; display: flex;
flex-direction: column; flex-direction: column;

View File

@@ -44,7 +44,7 @@
<div class="selectBox"> <div class="selectBox">
<el-select <el-select
@change="pointChange" @change="pointChange"
:popper-append-to-body="false"
filterable filterable
clearable clearable
v-model="lineId" v-model="lineId"
@@ -101,13 +101,15 @@
<bm-info-window :show="infoWindowPoint.show" @close="infoWindowPoint.show = false"> <bm-info-window :show="infoWindowPoint.show" @close="infoWindowPoint.show = false">
<el-descriptions :title="infoWindowPoint.lineName" :column="1" v-if="infoWindowPoint.lineId"> <el-descriptions :title="infoWindowPoint.lineName" :column="1" v-if="infoWindowPoint.lineId">
<el-descriptions-item label="供电公司">{{ infoWindowPoint.gdName }}</el-descriptions-item> <el-descriptions-item label="供电公司">{{ infoWindowPoint.gdName }}</el-descriptions-item>
<el-descriptions-item label="变电站(场站)">{{ infoWindowPoint.subName }}</el-descriptions-item> <el-descriptions-item label="变电站(场站)">
{{ infoWindowPoint.subName }}
</el-descriptions-item>
<el-descriptions-item label="母线">{{ infoWindowPoint.voltageName }}</el-descriptions-item> <el-descriptions-item label="母线">{{ infoWindowPoint.voltageName }}</el-descriptions-item>
<el-descriptions-item label="网络参数"> <el-descriptions-item label="网络参数">
{{ infoWindowPoint.ip }} {{ infoWindowPoint.ip }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="PT变">{{ infoWindowPoint.pt2 }}</el-descriptions-item> <el-descriptions-item label="PT变">{{ infoWindowPoint.pt2 }}</el-descriptions-item>
<el-descriptions-item label="CT变">{{ infoWindowPoint.ct2 }}</el-descriptions-item> <el-descriptions-item label="CT变">{{ infoWindowPoint.ct2 }}</el-descriptions-item>
<el-descriptions-item label="生产厂家"> <el-descriptions-item label="生产厂家">
{{ infoWindowPoint.manufacturer }} {{ infoWindowPoint.manufacturer }}
</el-descriptions-item> </el-descriptions-item>
@@ -273,7 +275,7 @@ const handler = async ({ BMap, map }: any) => {
}, 0) }, 0)
siteList.value = list siteList.value = list
center.value.lng = areaLineInfo.value[0]?.lng || 0 center.value.lng = areaLineInfo.value[0]?.lng || 0
center.value.lat = areaLineInfo.value[0]?.lat || 0 center.value.lat = areaLineInfo.value[0]?.lat + 0.04 || 0
infoWindowPoint.value = areaLineInfo.value[0] || {} infoWindowPoint.value = areaLineInfo.value[0] || {}
infoWindowPoint.value.show = true infoWindowPoint.value.show = true
@@ -291,7 +293,7 @@ const pointChange = (val: string) => {
let data = areaLineInfo.value.find((item: any) => item.lineId == val) let data = areaLineInfo.value.find((item: any) => item.lineId == val)
center.value.lng = data.lng center.value.lng = data.lng
center.value.lat = data.lat center.value.lat = data.lat + 0.04
infoWindowPoint.value = data infoWindowPoint.value = data
infoWindowPoint.value.show = true infoWindowPoint.value.show = true
zoom.value = 13 zoom.value = 13
@@ -330,10 +332,10 @@ onMounted(() => {
if (window.localStorage.getItem('BMAP_SECKEY') == null) { if (window.localStorage.getItem('BMAP_SECKEY') == null) {
hackReset.value = false hackReset.value = false
} }
}, 1000) }, 500)
setTimeout(() => { setTimeout(() => {
hackReset.value = true hackReset.value = true
}, 2000) }, 1000)
} }
}) })
</script> </script>

View File

@@ -1,18 +1,25 @@
<template> <template>
<el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" title="暂降事件列表"> <el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" title="暂降事件列表">
<vxe-table v-loading="loading" height="auto" auto-resize :data="tableData" v-bind="defaultAttribute"> <div style="height: 40vh">
<vxe-column type="seq" title="序号" width="80px"></vxe-column> <vxe-table v-loading="loading" height="auto" auto-resize :data="tableData" v-bind="defaultAttribute">
<vxe-column field="startTime" title="发生时间" width="200"></vxe-column> <vxe-column type="seq" title="序号" width="80px"></vxe-column>
<vxe-column field="duration" title="持续时间(s)" width="120"></vxe-column> <vxe-column field="startTime" title="发生时间" width="180"></vxe-column>
<vxe-column field="featureAmplitude" title="暂降(骤升)幅值(%)" width="150"> <vxe-column field="duration" title="持续时间(s)" width="100"></vxe-column>
<template #default="{ row }"> <vxe-column field="gdName" title="供电公司" min-width="150"></vxe-column>
{{ (row.featureAmplitude * 100).toFixed(2) }} <vxe-column field="subName" title="变电站" min-width="150"></vxe-column>
</template> <vxe-column field="lineName" title="监测点" min-width="150"></vxe-column>
</vxe-column> <vxe-column field="advanceType" title="暂降类型" width="100">
<vxe-column field="gdName" title="供电公司" width="200"></vxe-column> <template #default="{ row }">
<vxe-column field="subName" title="变电站" min-width="200"></vxe-column> {{ type.find(item => item.id === row.advanceType)?.name }}
<vxe-column field="lineName" title="监测点" width="200"></vxe-column> </template>
</vxe-table> </vxe-column>
<vxe-column field="featureAmplitude" title="暂降(骤升)幅值(%)" width="150">
<template #default="{ row }">
{{ (row.featureAmplitude * 100).toFixed(2) }}
</template>
</vxe-column>
</vxe-table>
</div>
</el-dialog> </el-dialog>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
@@ -20,7 +27,9 @@ import { ref, inject } from 'vue'
import { defaultAttribute } from '@/components/table/defaultAttribute' import { defaultAttribute } from '@/components/table/defaultAttribute'
import { getNoDealEventsByLineId } from '@/api/event-boot/areaInfo' import { getNoDealEventsByLineId } from '@/api/event-boot/areaInfo'
import { useDictData } from '@/stores/dictData'
const dictData = useDictData()
const type = dictData.getBasicData('Event_Type')
const dialogVisible = ref(false) const dialogVisible = ref(false)
const tableData = ref([]) const tableData = ref([])
const loading = ref(true) const loading = ref(true)

View File

@@ -23,10 +23,10 @@
<div style="flex: 1; overflow: hidden"> <div style="flex: 1; overflow: hidden">
<vxe-table height="auto" auto-resize :data="tableData" v-bind="defaultAttribute"> <vxe-table height="auto" auto-resize :data="tableData" v-bind="defaultAttribute">
<vxe-column type="seq" title="序号" width="70px"></vxe-column> <vxe-column type="seq" title="序号" width="70px"></vxe-column>
<vxe-column field="startTime" title="发生时刻"></vxe-column> <vxe-column field="startTime" title="发生时刻" width="200"></vxe-column>
<vxe-column field="lineName" title="监测点"></vxe-column> <vxe-column field="lineName" title="监测点" width="120"></vxe-column>
<vxe-column field="featureAmplitude" title="暂降(骤升)幅值(%)" width="150"></vxe-column> <vxe-column field="featureAmplitude" title="暂降(骤升)幅值(%)"></vxe-column>
<vxe-column field="duration" title="持续时间(s)" width="120"></vxe-column> <vxe-column field="duration" title="持续时间(s)"></vxe-column>
</vxe-table> </vxe-table>
</div> </div>
</div> </div>

View File

@@ -18,7 +18,11 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="电网标志">
<el-select v-model="tableStore.table.params.powerFlag" placeholder="请选择电网标志">
<el-option v-for="item in sign" :key="item.id" :label="item.name" :value="item.algoDescribe" />
</el-select>
</el-form-item>
<el-form-item label="筛选数据"> <el-form-item label="筛选数据">
<el-input <el-input
@@ -40,13 +44,14 @@ import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue' import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue' import TableHeader from '@/components/table/header/index.vue'
import { useDictData } from '@/stores/dictData' import { useDictData } from '@/stores/dictData'
import { getEventReport } from '@/api/event-boot/report.ts' import { getEventReport } from '@/api/event-boot/report'
defineOptions({ defineOptions({
name: 'Operationmanagement/terminalmanagement' name: 'Operationmanagement/terminalmanagement'
}) })
const dictData = useDictData() const dictData = useDictData()
const triggerType = dictData.getBasicData('Event_Statis') const triggerType = dictData.getBasicData('Event_Statis')
const sign:any = dictData.getBasicData('power_flag')
const tableRef = ref() const tableRef = ref()
const tableStore = new TableStore({ const tableStore = new TableStore({
@@ -109,7 +114,7 @@ const tableStore = new TableStore({
}) })
tableStore.table.params.comFlag = '1' tableStore.table.params.comFlag = '1'
tableStore.table.params.monitorFlag = 0 tableStore.table.params.monitorFlag = 0
tableStore.table.params.powerFlag = 1 tableStore.table.params.powerFlag = sign[0]?.algoDescribe || 0
tableStore.table.params.serverName = 'event-boot' tableStore.table.params.serverName = 'event-boot'
tableStore.table.params.waveType='' tableStore.table.params.waveType=''
tableStore.table.params.searchValue='' tableStore.table.params.searchValue=''