修改测试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
})
}
//获取谐波源特性字典列表
export function characteristicList(data: any) {
return createAxios({
url: '/advance-boot/assessDicHarmonicCharacter/list',
method: 'Post',
data
})
}
//新增谐波源特性字典
export function characteristicAdd(data: any) {
return createAxios({
@@ -250,4 +258,69 @@ export function windPowerDdit(data: any) {
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: {
trigger: 'axis',
axisPointer: {
type: 'shadow',
label: {
color: '#fff',
fontSize: 16
}
},
// axisPointer: {
// type: 'shadow',
// label: {
// color: '#fff',
// fontSize: 16
// }
// },
textStyle: {
color: '#fff',
fontStyle: 'normal',
@@ -67,7 +67,10 @@ const initChart = () => {
formatter: function (params: any) {
let tips = `<strong>${params[0]?.name}</strong></br>` // 标题加粗
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;">
<span>${item.marker}
${item.seriesName}:
@@ -164,7 +167,7 @@ const handlerBar = (options: any) => {
item.itemStyle = Object.assign(
{
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'
} else {
return props.options?.color

View File

@@ -87,8 +87,8 @@ const GetEchar = async (name: string) => {
geo: {
map: name,
zoom: 1.2,
// top: 0,
zoom: 1.1,
// top: 10,
// bottom: 0,
roam: true,
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) => {

View File

@@ -4,9 +4,20 @@
<el-option v-for="item in timeOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-date-picker v-model="timeValue" 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-date-picker
v-model="timeValue"
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 type="primary" :icon="VideoPause" @click="nowTime">当前</el-button>
<el-button :disabled="preDisabled" type="primary" :icon="DArrowRight" @click="next"></el-button>
@@ -70,9 +81,9 @@ const shortcuts = [
}
}
]
const isFutureDate = (time) => {
return time && time > Date.now();
};
const isFutureDate = time => {
return time && time > Date.now()
}
onMounted(() => {
timeChange(3)
})
@@ -385,7 +396,6 @@ const next = () => {
if (year >= presentY && !props.nextFlag) {
startTime = presentY + '-01-01'
if (presentM < 10) {
if (presentD < 10) {
endTime = presentY + '-0' + presentM + '-0' + presentD
} else {
@@ -402,15 +412,16 @@ const next = () => {
startTime = year + '-01-01'
endTime = year + '-12-31'
}
}
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
}
}
timeValue.value = [startTime, endTime]
}
@@ -419,7 +430,7 @@ const setTime = (flag = 0, e = 0) => {
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')
} else {
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 class="table-header ba-scroll-style">
<el-form
style="flex: 1; height: 28px; display: flex; flex-wrap: wrap"
style="flex: 1; height: 32px; display: flex; flex-wrap: wrap"
ref="headerForm"
@submit.prevent=""
@keyup.enter="onComSearch"
@@ -155,6 +155,7 @@ onMounted(() => {
tableStore.table.params.startTime = datePickerRef.value.timeValue[0]
tableStore.table.params.endTime = datePickerRef.value.timeValue[1]
tableStore.table.params.timeFlag = datePickerRef.value.timeFlag
tableStore.table.params.interval = datePickerRef.value.interval
}
if (props.area) {
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.endTime = datePickerRef.value.timeValue[1]
tableStore.table.params.timeFlag = datePickerRef.value.timeFlag
tableStore.table.params.interval = datePickerRef.value.interval
}
await tableStore.onTableAction('search', {})
@@ -242,6 +244,7 @@ defineExpose({
setTheDate,
datePickerRef,
showSelectChange,
showSelect,
computedSearchRow,
onExport
})

View File

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

View File

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

View File

@@ -35,21 +35,21 @@ const setupAll = async () => {
const app = createApp(App)
//开启离线地图
app.use(BaiduMapOffline, {
offline: true,
offlineConfig: {
imgext: '.png',
customstyle: '',
tiles_dir: '',
tiles_hybrid: '',
tiles_self: '',
tiles_v_dir: '',
tiles_satellite_dir: '',
tiles_road_dir: '',
tiles_v_road_dir: '',
home: './plugin/offline/'
}
})
// app.use(BaiduMapOffline, {
// offline: true,
// offlineConfig: {
// imgext: '.png',
// customstyle: '',
// tiles_dir: '',
// tiles_hybrid: '',
// tiles_self: '',
// tiles_v_dir: '',
// tiles_satellite_dir: '',
// tiles_road_dir: '',
// tiles_v_road_dir: '',
// home: './plugin/offline/'
// }
// })
app.use(BaiduMap, {
// ak: 'Yp57V71dkOPiXjiN8VdcFRsVELzlVNKK',
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-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 */
// /* 新增/编辑表单-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 {
margin-top: 0px !important;
padding: 0 !important;
}
.el-dialog {
padding: 0px !important;
@@ -230,3 +229,7 @@
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')
setTimeout(() => {
// 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.onopen = () => this.handleOpen()

View File

@@ -3001,10 +3001,10 @@ const area = () => {
month = '0' + (month + 1)
}
let day: any = data.getDate()
if (day + 1 >= 10) {
day = day + 1
if (day >= 10) {
day = day
} else {
day = '0' + (day + 1)
day = '0' + (day )
}
deviceBODetail.value.thisTimeCheck = 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 { useDictData } from '@/stores/dictData'
import * as echarts from 'echarts/core'
import { Top } from '@element-plus/icons-vue/dist/types'
const dictData = useDictData()
const options = ref({})
@@ -112,19 +113,10 @@ const tableStore = new TableStore({
itemHeight: 15,
itemGap: 25
},
toolbox: {
show: true,
feature: {
saveAsImage: {
// bottom: '10px',
show: true,
title: '保存'
// yAxisIndex: 'none'
}
},
right: 0,
top: 0
},
toolbox: {
top: 0,
right: 10,
},
// tooltip: {
// backgroundColor: '#fff',
// textStyle: {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -132,7 +132,7 @@ const init = (row: any) => {
) / 100
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
iData[`h${i + 1}`] =
Math.floor(
@@ -140,7 +140,7 @@ const init = (row: any) => {
) / 100
}
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[1].data = SvData

View File

@@ -341,7 +341,27 @@ const setEcharts = () => {
fontSize: 14
},
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: []
}

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,7 +1,7 @@
<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="height1" class="mr10 box" style="width: 450px">
<div :style="height1" class="mr10 box" style="width: 500px">
<vxe-table
height="auto"
:data="TableData"
@@ -12,6 +12,7 @@
>
<vxe-column type="seq" title="序号" width="60px"></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="timeSum" title="告警时间(分钟)" width="80px"></vxe-column>
</vxe-table>

View File

@@ -18,25 +18,50 @@
:value="item.transtypeId"
></el-option>
</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
v-else-if="
item.field == 'transNum' ||
item.field == 'capacitorNum' ||
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%"
v-model="form[item.field]"
show-word-limit
:min="0"
placeholder="请输入值"
></el-input-number>
<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]"
filterable
placeholder="请选择接入变电站"
placeholder="请选择电压等级"
>
<el-option
v-for="item in voltageleveloption"
@@ -64,15 +89,23 @@ import { reactive } from 'vue'
import { useDictData } from '@/stores/dictData'
import {
transformerList,
characteristicList,
assessTransformerParamAdd,
assessTransformerParamEdit,
capacitorAdd,
capacitorEdit
capacitorEdit,
windPowerAdd,
windPowerDdit,
loadParamAdd,
loadParamEdit,
shockAdd,
shockEdit
} from '@/api/advance-boot/assess'
import { ElMessage, ElMessageBox, ElDatePicker } from 'element-plus'
const emits = defineEmits(['init'])
const child: any = ref([])
const transformer: any = ref([])
const characteristic: any = ref([])
const form: any = ref({})
const dictData = useDictData()
//字典获取电压等级
@@ -86,6 +119,17 @@ const rules = {
capacitorCapacity: [{ required: true, message: '请输入单组容量', trigger: 'blur' }],
capacitorReactance: [{ required: true, message: '请输入电抗率', trigger: 'blur' }],
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 dialogVisible = ref(false)
@@ -114,35 +158,66 @@ const info = async () => {
transformerList({}).then((res: any) => {
transformer.value = res.data
})
// 谐波源特特性
characteristicList({}).then((res: any) => {
characteristic.value = res.data
})
}
const submit = async () => {
formRef.value.validate((valid: any) => {
formRef.value.validate(async (valid: any) => {
if (valid) {
if (title.value == '新增_变压器参数维护') {
assessTransformerParamAdd(form.value).then((res: any) => {
await assessTransformerParamAdd(form.value).then((res: any) => {
ElMessage.success('新增成功')
emits('init', 0)
dialogVisible.value = false
})
} else if (title.value == '编辑_变压器参数维护') {
assessTransformerParamEdit(form.value).then((res: any) => {
await assessTransformerParamEdit(form.value).then((res: any) => {
ElMessage.success('修改成功')
emits('init', 0)
dialogVisible.value = false
})
} else if (title.value == '新增_电容器组参数维护') {
capacitorAdd(form.value).then((res: any) => {
await capacitorAdd(form.value).then((res: any) => {
ElMessage.success('新增成功')
emits('init', 1)
dialogVisible.value = false
})
} else if (title.value == '编辑_电容器组参数维护') {
capacitorEdit(form.value).then((res: any) => {
await capacitorEdit(form.value).then((res: any) => {
ElMessage.success('修改成功')
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 {
assessTransformerParamList,
transformerList,
characteristicList,
assessTransformerParamDelete,
capacitorList,
capacitorDelete,
windPowerList,
windPowerDelete
windPowerDelete,
loadParamList,
loadParamDelete,
shockList,
shockDelete
} from '@/api/advance-boot/assess'
import { defaultAttribute } from '@/components/table/defaultAttribute'
import { ElMessage, ElMessageBox, ElDatePicker } from 'element-plus'
@@ -58,6 +63,7 @@ const dictData = useDictData()
//字典获取电压等级
const voltageleveloption = dictData.getBasicData('Dev_Voltage_Stand')
const transformer: any = ref([])
const characteristic: any = ref([])
const addformRef = ref()
const xTableRef = ref()
@@ -118,15 +124,15 @@ const column: any = ref([
child: [
{
title: '风机名称',
field: 'name'
field: 'windgeneratorName'
},
{
title: '风机闪变系数',
field: 'name1'
title: '闪变系数',
field: 'flickerCoeff'
},
{
title: '风机额定视在功率',
field: 'name2'
title: '额定视在功率(kVA)',
field: 's'
}
]
},
@@ -137,88 +143,82 @@ const column: any = ref([
key: 'loadList',
child: [
{
title: '配电窒名称',
field: 'name'
title: '负荷名称',
field: 'loadName'
},
{
title: '进线电压',
field: 'name1'
field: 'linevoltageScale'
},
{
title: '配变容量(kVA)',
field: 'name2'
field: 'transhighCapacity'
},
{
title: '配电变压器阻抗(%)',
field: 'name3'
field: 'transImpedance'
},
{
title: '谐波源特性',
field: 'name4'
field: 'harmId'
},
{
title: '配变低压侧电压',
field: 'name5'
field: 'translowScale'
},
{
title: '非线性负荷功率(kW)',
field: 'name6'
field: 'nonlinearloadPower'
},
{
title: '功率因',
field: 'name7'
title: '功率因',
field: 'powerFactor'
}
]
},
{
loading: false,
name: '冲击负荷',
name: '冲击负荷',
key: 'impactList',
child: [
{
title: '冲击负荷类型',
field: 'name'
},
{
title: '冲击负荷功率(MVA)',
field: 'name1'
field: 'inpactloadtypeId'
},
{
title: '数量',
field: 'name2'
field: 'inpactloadNum'
},
{
title: '启动方式',
field: 'name3'
title: '容量',
field: 'inpactloadPower'
},
{
title: '启动容量倍数',
field: 'name4'
},
{
title: '冲击负荷高压侧电压',
field: 'name5'
},
{
title: '有无隔离变',
field: 'name6'
title: '是否隔离变',
field: 'isIsolationtrans'
},
{
title: '隔离变阻抗(%)',
field: 'name7'
field: 'isolationtransImpedance'
},
{
title: '高压侧电压',
field: 'inpactloadhighScale'
},
{
title: '低压侧电压',
field: 'name8'
field: 'inpactloadlowScale'
},
{
title: '负荷频度选择',
field: 'name9'
title: '负荷频度',
field: 'inpactloadFreq'
},
{
title: '闪变叠加系数',
field: 'name10'
field: 'flickerCoeff'
}
]
}
@@ -250,34 +250,48 @@ const deleteFform = (item: any, i: any) => {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
}).then(async () => {
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 => {
ElMessage({
type: 'success',
message: '删除成功!'
})
info(i)
}
)
} 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({
type: 'success',
message: '删除成功!'
})
info(i)
})
} 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({
type: 'success',
message: '删除成功!'
})
info(i)
})
}
info(i)
})
}
// 编辑
@@ -288,18 +302,6 @@ const edit = (item: any, row: any) => {
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) => {
column.value[i].loading = true
@@ -310,30 +312,65 @@ const info = async (i: number) => {
dataList.value.transformerList = res.data
})
} else if (i == 1) {
// 电容器参数维护
await capacitorList({ assessId: props.assessId }).then(res => {
dataList.value.capacitorList = res.data
})
} else if (i == 2) {
// 风电参数
await windPowerList({ assessId: props.assessId }).then(res => {
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
}
// 过滤数据
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 = () => {
// 获取变压器参数字典列表
transformerList({}).then((res: any) => {
transformer.value = res.data
})
// 谐波源特特性
characteristicList({}).then((res: any) => {
characteristic.value = res.data
})
}
onMounted(async () => {
await dictionary()
info(0) // 变压器参数维护
info(1) // 变压器参数维护
info(2) // 变压器参数维护
// info(3) // 变压器参数维护
info(1) // 电容器参数维护
info(2) // 风电参数
info(3) // 用户负荷
info(4) // 冲击性负荷
})
</script>
<style lang="scss" scoped></style>

View File

@@ -1,7 +1,7 @@
<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="height1" class="mr10 box" style="width: 450px">
<div :style="height1" class="mr10 box" style="width: 600px">
<vxe-table
height="auto"
:data="TableData"
@@ -12,8 +12,10 @@
>
<vxe-column type="seq" title="序号" width="60px"></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="timeSum" title="异常时间(分钟)" width="80px"></vxe-column>
<vxe-column field="errCount" title="异常次数" width="80px"></vxe-column>
</vxe-table>
</div>

View File

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

View File

@@ -864,22 +864,22 @@ const 九江 = [
{ lng:116.828758, lat: 29.963141},
{ lng:116.8265, lat: 29.976828},
{ 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.787327, 30.02033},
{ lng:116.783498, 30.030739},
{ lng:116.770293, 30.035644},
{ lng:116.764549, 30.048939},
{ lng:116.753602, 30.048994},
{ lng:116.747368, 30.057221},
{ lng:116.720319, 30.053897},
{ lng:116.685662, 30.070622},
{ lng:116.666861, 30.076723},
{ lng:116.64261, 30.076396},
{ lng:116.611046, 30.070677},
{ lng:116.596564, 30.059727},
{ lng:116.586059, 30.046324},
{ lng:116.571332, 30.014443},
{ lng:116.787327, lat: 30.02033},
{ lng:116.783498, lat: 30.030739},
{ lng:116.770293, lat: 30.035644},
{ lng:116.764549, lat: 30.048939},
{ lng:116.753602, lat: 30.048994},
{ lng:116.747368, lat: 30.057221},
{ lng:116.720319, lat: 30.053897},
{ lng:116.685662, lat: 30.070622},
{ lng:116.666861, lat: 30.076723},
{ lng:116.64261, lat: 30.076396},
{ lng:116.611046, lat: 30.070677},
{ lng:116.596564, lat: 30.059727},
{ lng:116.586059, lat: 30.046324},
{ lng:116.571332, lat: 30.014443},
{ lng:116.571185, lat: 29.989204},
{ lng:116.564558, lat: 29.949343},
{ lng:116.558716, lat: 29.924306},

View File

@@ -1,25 +1,25 @@
<template>
<div style='display: flex;flex-direction: column;height: 100%' v-loading='loading'>
<el-form :inline='true'>
<el-form-item label='日期'>
<DatePicker ref='datePickerRef'></DatePicker>
<div style="display: flex; flex-direction: column; height: 100%" v-loading="loading">
<el-form :inline="true" class="fx-jcsb">
<el-form-item label="日期">
<DatePicker ref="datePickerRef"></DatePicker>
</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>
<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.gs }}</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 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.gs }}</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>
<div style='flex: 1;' class='mt10'>
<my-echart :options='options' />
<div style="flex: 1" class="mt10">
<my-echart :options="options" />
</div>
</div>
</template>
<script setup lang='ts'>
<script setup lang="ts">
import { nextTick, onMounted, reactive, ref } from 'vue'
import DatePicker from '@/components/form/datePicker/index.vue'
import MyEchart from '@/components/echarts/MyEchart.vue'
@@ -47,136 +47,123 @@ const init = () => {
formData.lineIndex = monitoringPoint.state.lineId
formData.startTime = datePickerRef.value.timeValue[0]
formData.endTime = datePickerRef.value.timeValue[1]
getPlot(formData).then(
(res: any) => {
const gongData = gongfunction(res.data.voltageToleranceCurveDataList)
data.gs = res.data.voltageToleranceCurveDataList.length
data.krr = gongData.pointI.length
data.bkrr = gongData.pointIun.length
console.log(gongData)
options.value = {
// backgroundColor: "#f9f9f9", //地图背景色深蓝
title: {
// text: `ITIC曲线(总统计:${gongData.pointI.length + gongData.pointIun.length}个,可容忍:${gongData.pointI.length}个,不可容忍:${gongData.pointIun.length}个)`
text: `ITIC曲线`
},
legend: {
data: ['上限', '下限', '可容忍事件', '不可容忍事件'],
},
tooltip: {
trigger: 'item',
show: true,
axisPointer: {
type: 'shadow',
label: {
color: '#fff',
fontSize: 16
}
},
textStyle: {
getPlot(formData).then((res: any) => {
const gongData = gongfunction(res.data.voltageToleranceCurveDataList)
data.gs = res.data.voltageToleranceCurveDataList.length
data.krr = gongData.pointI.length
data.bkrr = gongData.pointIun.length
console.log(gongData)
options.value = {
// backgroundColor: "#f9f9f9", //地图背景色深蓝
title: {
// text: `ITIC曲线(总统计:${gongData.pointI.length + gongData.pointIun.length}个,可容忍:${gongData.pointI.length}个,不可容忍:${gongData.pointIun.length}个)`
text: `ITIC曲线`
},
legend: {
data: ['上限', '下限', '可容忍事件', '不可容忍事件']
},
tooltip: {
trigger: 'item',
show: true,
axisPointer: {
type: 'shadow',
label: {
color: '#fff',
fontStyle: 'normal',
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
fontSize: 16
}
},
xAxis: [
{
type: 'log',
min: 0.001,
max: 1000,
splitLine: {
show: false
},
name: 's'
}
],
yAxis: [
{
type: 'value',
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
}
]
textStyle: {
color: '#fff',
fontStyle: 'normal',
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: [
{
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) {
@@ -341,6 +328,5 @@ function gongfunction(arr: any) {
onMounted(() => {
init()
})
</script>
<style></style>

View File

@@ -1,25 +1,25 @@
<template>
<div style='display: flex;flex-direction: column;height: 100%'>
<el-form :inline='true'>
<el-form-item label='日期'>
<DatePicker ref='datePickerRef'></DatePicker>
<div style="display: flex; flex-direction: column; height: 100%">
<el-form :inline="true" class="fx-jcsb">
<el-form-item label="日期">
<DatePicker ref="datePickerRef"></DatePicker>
</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>
<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.gs }}</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 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.gs }}</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>
<div style='flex: 1;' class='mt10'>
<my-echart :options='options' />
<div style="flex: 1" class="mt10">
<my-echart :options="options" />
</div>
</div>
</template>
<script setup lang='ts'>
<script setup lang="ts">
import { nextTick, onMounted, reactive, ref } from 'vue'
import DatePicker from '@/components/form/datePicker/index.vue'
import MyEchart from '@/components/echarts/MyEchart.vue'
@@ -47,122 +47,109 @@ const init = () => {
formData.lineIndex = monitoringPoint.state.lineId
formData.startTime = datePickerRef.value.timeValue[0]
formData.endTime = datePickerRef.value.timeValue[1]
getPlot(formData).then(
(res: any) => {
const gongData = gongfunction(res.data.voltageToleranceCurveDataList)
data.gs = res.data.voltageToleranceCurveDataList.length
data.krr = gongData.pointI.length
data.bkrr = gongData.pointIun.length
console.log(gongData)
options.value = {
// backgroundColor: "#f9f9f9", //地图背景色深蓝
title: {
text: `SEMI F47曲线`
},
legend: {
data: ['上限', '下限', '可容忍事件', '不可容忍事件'],
},
tooltip: {
trigger: 'item',
show: true,
axisPointer: {
type: 'shadow',
label: {
color: '#fff',
fontSize: 16
}
},
textStyle: {
getPlot(formData).then((res: any) => {
const gongData = gongfunction(res.data.voltageToleranceCurveDataList)
data.gs = res.data.voltageToleranceCurveDataList.length
data.krr = gongData.pointI.length
data.bkrr = gongData.pointIun.length
console.log(gongData)
options.value = {
// backgroundColor: "#f9f9f9", //地图背景色深蓝
title: {
text: `SEMI F47曲线`
},
legend: {
data: ['上限', '下限', '可容忍事件', '不可容忍事件']
},
tooltip: {
trigger: 'item',
show: true,
axisPointer: {
type: 'shadow',
label: {
color: '#fff',
fontStyle: 'normal',
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
fontSize: 16
}
},
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: '%'
}
],
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
}
]
textStyle: {
color: '#fff',
fontStyle: 'normal',
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: [
{
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) {
@@ -327,6 +314,5 @@ function gongfunction(arr: any) {
onMounted(() => {
init()
})
</script>
<style></style>

View File

@@ -1,19 +1,19 @@
<template>
<div style='display: flex;flex-direction: column;height: 100%'>
<el-form :inline='true'>
<el-form-item label='日期'>
<DatePicker ref='datePickerRef'></DatePicker>
<div style="display: flex; flex-direction: column; height: 100%">
<el-form :inline="true" class="fx-jcsb">
<el-form-item label="日期">
<DatePicker ref="datePickerRef"></DatePicker>
</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>
<div style='flex: 1;' class='mt10'>
<my-echart :options='options' />
<div style="flex: 1" class="mt10">
<my-echart :options="options" />
</div>
</div>
</template>
<script setup lang='ts'>
<script setup lang="ts">
import { nextTick, onMounted, reactive, ref } from 'vue'
import DatePicker from '@/components/form/datePicker/index.vue'
import MyEchart from '@/components/echarts/MyEchart.vue'
@@ -35,138 +35,137 @@ const init = () => {
formData.lineIndex = monitoringPoint.state.lineId
formData.startTime = datePickerRef.value.timeValue[0]
formData.endTime = datePickerRef.value.timeValue[1]
getProbabilityDistribution(formData).then(
(res: any) => {
let data = res.data
let sisttime = data.sisttime
let persisttime = data.persisttime
options.value = {
backgroundColor: '#fff', //背景色,
title: {
text: '持续时间的概率分布函数',
x: 'center'
},
legend: {
show: true,
data: ['概率分布', '占比'],
getProbabilityDistribution(formData).then((res: any) => {
let data = res.data
let sisttime = data.sisttime
let persisttime = data.persisttime
options.value = {
backgroundColor: '#fff', //背景色,
title: {
text: '持续时间的概率分布函数',
x: 'center'
},
legend: {
top: 0,
show: true,
data: ['概率分布', '占比'],
textStyle: {
rich: {
a: {
verticalAlign: 'middle'
}
},
padding: [2, 0, 0, 0] //[上、右、下、左]
}
},
tooltip: {
//提示框组件
trigger: 'axis',
axisPointer: {
type: 'shadow',
label: {
color: '#fff',
fontSize: 16
textStyle: {
rich: {
a: {
verticalAlign: 'middle'
}
},
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
padding: [2, 0, 0, 0] //[上、右、下、左]
}
}
nextTick(() => {
loading.value = false
})
}
)
}
},
toolbox: {
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(() => {
init()
})
</script>
<style></style>

View File

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

View File

@@ -1,11 +1,11 @@
<template>
<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='日期'>
<DatePicker ref='datePickerRef'></DatePicker>
</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>
<div style='flex: 1;' class='mt10 zanjiangfenbutongji'>
@@ -111,7 +111,7 @@ const initFirst = () => {
formatter: function (params: any) {
let tips = ''
tips += '<font>时间:' + params[0].name + '</font><br/>'
tips += '<font>暂降次数:' + params[0].data + '</font>'
tips += '<font>暂降次数' + params[0].data + '</font>'
return tips
}
},
@@ -147,12 +147,12 @@ const initFirst = () => {
return color[0]
}
},
label: {
show: true,
textStyle: {
label: { show: true, position: 'top' }
}
}
// label: {
// show: true,
// textStyle: {
// label: { show: true, position: 'top' }
// }
// }
}
},
data: handle
@@ -194,7 +194,7 @@ const initSecond = () => {
fontSize: 14
},
backgroundColor: 'rgba(0,0,0,0.55)',
formatter: '{a} <br/>{b} : {c} ({d}%)'
formatter: '{a} <br/>{b} {c} ({d}%)'
},
legend: {
orient: 'vertical',
@@ -204,14 +204,14 @@ const initSecond = () => {
{
name: '暂降原因',
type: 'pie',
radius: '70%',
radius: '65%',
center: ['50%', '53%'],
label: {
normal: {
show: false
},
emphasis: {
show: true
show: false
}
},
lableLine: {
@@ -219,7 +219,7 @@ const initSecond = () => {
show: false
},
emphasis: {
show: true
show: false
}
},
data: valueArray,
@@ -269,7 +269,7 @@ const initThird = () => {
fontSize: 14
},
backgroundColor: 'rgba(0,0,0,0.55)',
formatter: '{a} <br/>{b} : {c} ({d}%)'
formatter: '{a} <br/>{b} {c} ({d}%)'
},
legend: {
orient: 'vertical',
@@ -279,14 +279,14 @@ const initThird = () => {
{
name: '暂降类型',
type: 'pie',
radius: '70%',
radius: '65%',
center: ['50%', '60%'],
label: {
normal: {
show: false
},
emphasis: {
show: true
show: false
}
},
lableLine: {
@@ -294,7 +294,7 @@ const initThird = () => {
show: false
},
emphasis: {
show: true
show: false
}
},
data: valueArray,

View File

@@ -1,19 +1,19 @@
<template>
<div style='display: flex;flex-direction: column;height: 100%'>
<el-form :inline='true'>
<el-form-item label='日期'>
<DatePicker ref='datePickerRef'></DatePicker>
<div style="display: flex; flex-direction: column; height: 100%">
<el-form :inline="true" class="fx-jcsb">
<el-form-item label="日期">
<DatePicker ref="datePickerRef"></DatePicker>
</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>
<div style='flex: 1;' class='mt10'>
<my-echart :options='options' />
<div style="flex: 1" class="mt10">
<my-echart :options="options" />
</div>
</div>
</template>
<script setup lang='ts'>
<script setup lang="ts">
import { nextTick, onMounted, reactive, ref } from 'vue'
import DatePicker from '@/components/form/datePicker/index.vue'
import MyEchart from '@/components/echarts/MyEchart.vue'
@@ -35,150 +35,138 @@ const init = () => {
formData.lineIndex = monitoringPoint.state.lineId
formData.startTime = datePickerRef.value.timeValue[0]
formData.endTime = datePickerRef.value.timeValue[1]
getProbabilityDistribution(formData).then(
(res: any) => {
let data = res.data
let eventValue = data.eventvalue
let pereventValue = data.pereventvalue
options.value = {
backgroundColor: '#fff', //背景色,
title: {
text: '暂降幅值的概率分布函数',
x: 'center'
},
legend: {
show: true,
data: ['概率分布', '占比'],
getProbabilityDistribution(formData).then((res: any) => {
let data = res.data
let eventValue = data.eventvalue
let pereventValue = data.pereventvalue
options.value = {
backgroundColor: '#fff', //背景色,
title: {
text: '暂降幅值的概率分布函数',
x: 'center'
},
legend: {
show: true,
top: 0,
data: ['概率分布', '占比'],
textStyle: {
rich: {
a: {
verticalAlign: 'middle'
}
},
padding: [2, 0, 0, 0] //[上、右、下、左]
}
},
tooltip: {
//提示框组件
trigger: 'axis',
axisPointer: {
type: 'shadow',
label: {
color: '#fff',
fontSize: 16
textStyle: {
rich: {
a: {
verticalAlign: 'middle'
}
},
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
padding: [2, 0, 0, 0] //[上、右、下、左]
}
}
nextTick(() => {
loading.value = false
})
}
)
}
},
toolbox: {
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(() => {
init()
})
</script>
<style></style>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -18,7 +18,11 @@
></el-option>
</el-select>
</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-input
@@ -40,13 +44,14 @@ import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue'
import { useDictData } from '@/stores/dictData'
import { getEventReport } from '@/api/event-boot/report.ts'
import { getEventReport } from '@/api/event-boot/report'
defineOptions({
name: 'Operationmanagement/terminalmanagement'
})
const dictData = useDictData()
const triggerType = dictData.getBasicData('Event_Statis')
const sign:any = dictData.getBasicData('power_flag')
const tableRef = ref()
const tableStore = new TableStore({
@@ -109,7 +114,7 @@ const tableStore = new TableStore({
})
tableStore.table.params.comFlag = '1'
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.waveType=''
tableStore.table.params.searchValue=''