修改辽宁反馈问题
This commit is contained in:
6
.env.LN
Normal file
6
.env.LN
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# 辽宁嵌入
|
||||||
|
NODE_ENV = LN
|
||||||
|
VITE_NAME="LN"
|
||||||
|
# 电网一张图 地图图层
|
||||||
|
VITE_NARIMAP=null
|
||||||
|
VITE_NRGISCOMMON=null
|
||||||
@@ -8,12 +8,14 @@
|
|||||||
"dev:jibei": "vite --mode jibei",
|
"dev:jibei": "vite --mode jibei",
|
||||||
"dev:hainan": "vite --mode hainan",
|
"dev:hainan": "vite --mode hainan",
|
||||||
"dev:qujing": "vite --mode qujing",
|
"dev:qujing": "vite --mode qujing",
|
||||||
|
"dev:LN": "vite --mode LN",
|
||||||
"dev:LNqr": "vite --mode LNqr",
|
"dev:LNqr": "vite --mode LNqr",
|
||||||
"dev:removeMode": "vite --mode removeMode",
|
"dev:removeMode": "vite --mode removeMode",
|
||||||
"build": "vite build --mode dev",
|
"build": "vite build --mode dev",
|
||||||
"build:jibei": "vite build --mode jibei",
|
"build:jibei": "vite build --mode jibei",
|
||||||
"build:hainan": "vite build --mode hainan",
|
"build:hainan": "vite build --mode hainan",
|
||||||
"build:qujing": "vite build --mode qujing",
|
"build:qujing": "vite build --mode qujing",
|
||||||
|
"build:LN": "vite build --mode LN",
|
||||||
"build:LNqr": "vite build --mode LNqr",
|
"build:LNqr": "vite build --mode LNqr",
|
||||||
"build:removeMode": "vite build --mode removeMode",
|
"build:removeMode": "vite build --mode removeMode",
|
||||||
"preview": "vite preview"
|
"preview": "vite preview"
|
||||||
|
|||||||
@@ -126,7 +126,8 @@ const prop = defineProps({
|
|||||||
width: { type: [String, Number] },
|
width: { type: [String, Number] },
|
||||||
height: { type: [String, Number] },
|
height: { type: [String, Number] },
|
||||||
timeKey: { type: [String, Number] },
|
timeKey: { type: [String, Number] },
|
||||||
timeValue: { type: Object }
|
timeValue: { type: Object },
|
||||||
|
searchKey: { type: [String, Number] }
|
||||||
})
|
})
|
||||||
|
|
||||||
const headerHeight = ref(57)
|
const headerHeight = ref(57)
|
||||||
@@ -347,22 +348,22 @@ onMounted(() => {
|
|||||||
tableStore.index()
|
tableStore.index()
|
||||||
})
|
})
|
||||||
watch(
|
watch(
|
||||||
() => prop.timeKey,
|
() => prop.searchKey,
|
||||||
val => {
|
val => {
|
||||||
tableStore.index()
|
tableStore.index()
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
watch(
|
// watch(
|
||||||
() => prop.timeValue,
|
// () => prop.timeValue,
|
||||||
|
|
||||||
val => {
|
// val => {
|
||||||
tableStore.index()
|
// tableStore.index()
|
||||||
},
|
// },
|
||||||
|
|
||||||
{
|
// {
|
||||||
deep: true
|
// deep: true
|
||||||
}
|
// }
|
||||||
)
|
// )
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@import '@/assets/font/iconfont.css';
|
@import '@/assets/font/iconfont.css';
|
||||||
|
|||||||
@@ -122,7 +122,8 @@ const prop = defineProps({
|
|||||||
width: { type: [String, Number] },
|
width: { type: [String, Number] },
|
||||||
height: { type: [String, Number] },
|
height: { type: [String, Number] },
|
||||||
timeKey: { type: [String, Number] },
|
timeKey: { type: [String, Number] },
|
||||||
timeValue: { type: Object }
|
timeValue: { type: Object },
|
||||||
|
searchKey: { type: [String, Number] }
|
||||||
})
|
})
|
||||||
|
|
||||||
const headerHeight = ref(57)
|
const headerHeight = ref(57)
|
||||||
@@ -329,22 +330,22 @@ onMounted(() => {
|
|||||||
tableStore.index()
|
tableStore.index()
|
||||||
})
|
})
|
||||||
watch(
|
watch(
|
||||||
() => prop.timeKey,
|
() => prop.searchKey,
|
||||||
val => {
|
val => {
|
||||||
tableStore.index()
|
tableStore.index()
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
watch(
|
// watch(
|
||||||
() => prop.timeValue,
|
// () => prop.timeValue,
|
||||||
|
|
||||||
val => {
|
// val => {
|
||||||
tableStore.index()
|
// tableStore.index()
|
||||||
},
|
// },
|
||||||
|
|
||||||
{
|
// {
|
||||||
deep: true
|
// deep: true
|
||||||
}
|
// }
|
||||||
)
|
// )
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@import '@/assets/font/iconfont.css';
|
@import '@/assets/font/iconfont.css';
|
||||||
|
|||||||
@@ -7,7 +7,8 @@
|
|||||||
@selectChange="selectChange"
|
@selectChange="selectChange"
|
||||||
datePicker
|
datePicker
|
||||||
v-if="fullscreen"
|
v-if="fullscreen"
|
||||||
></TableHeader>
|
>
|
||||||
|
</TableHeader>
|
||||||
<div
|
<div
|
||||||
class="monitoringPoints"
|
class="monitoringPoints"
|
||||||
:style="{
|
:style="{
|
||||||
@@ -120,7 +121,8 @@ const prop = defineProps({
|
|||||||
width: { type: [String, Number] },
|
width: { type: [String, Number] },
|
||||||
height: { type: [String, Number] },
|
height: { type: [String, Number] },
|
||||||
timeKey: { type: [String, Number] },
|
timeKey: { type: [String, Number] },
|
||||||
timeValue: { type: Object }
|
timeValue: { type: Object },
|
||||||
|
searchKey: { type: [String, Number] }
|
||||||
})
|
})
|
||||||
|
|
||||||
const headerHeight = ref(57)
|
const headerHeight = ref(57)
|
||||||
@@ -328,22 +330,22 @@ onMounted(() => {
|
|||||||
tableStore.index()
|
tableStore.index()
|
||||||
})
|
})
|
||||||
watch(
|
watch(
|
||||||
() => prop.timeKey,
|
() => prop.searchKey,
|
||||||
val => {
|
val => {
|
||||||
tableStore.index()
|
tableStore.index()
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
watch(
|
// watch(
|
||||||
() => prop.timeValue,
|
// () => prop.timeValue,
|
||||||
|
|
||||||
val => {
|
// val => {
|
||||||
tableStore.index()
|
// tableStore.index()
|
||||||
},
|
// },
|
||||||
|
|
||||||
{
|
// {
|
||||||
deep: true
|
// deep: true
|
||||||
}
|
// }
|
||||||
)
|
// )
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@import '@/assets/font/iconfont.css';
|
@import '@/assets/font/iconfont.css';
|
||||||
|
|||||||
@@ -150,7 +150,8 @@ const prop = defineProps({
|
|||||||
width: { type: [String, Number] },
|
width: { type: [String, Number] },
|
||||||
height: { type: [String, Number] },
|
height: { type: [String, Number] },
|
||||||
timeKey: { type: [String, Number] },
|
timeKey: { type: [String, Number] },
|
||||||
timeValue: { type: Object }
|
timeValue: { type: Object },
|
||||||
|
searchKey: { type: [String, Number] }
|
||||||
})
|
})
|
||||||
|
|
||||||
const headerHeight = ref(57)
|
const headerHeight = ref(57)
|
||||||
@@ -233,7 +234,7 @@ const tableStore: any = new TableStore({
|
|||||||
if (tableStore.table.params.statisticalType.name == '终端厂家') {
|
if (tableStore.table.params.statisticalType.name == '终端厂家') {
|
||||||
return k.count != 0
|
return k.count != 0
|
||||||
} else {
|
} else {
|
||||||
return !k.citName.includes('上送')
|
return !k.name.includes('上送')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -246,22 +247,28 @@ onMounted(() => {
|
|||||||
tableStore.index()
|
tableStore.index()
|
||||||
})
|
})
|
||||||
watch(
|
watch(
|
||||||
() => prop.timeKey,
|
() => prop.searchKey,
|
||||||
val => {
|
val => {
|
||||||
tableStore.index()
|
tableStore.index()
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
watch(
|
// watch(
|
||||||
() => prop.timeValue,
|
// () => prop.timeKey,
|
||||||
|
// val => {
|
||||||
|
// tableStore.index()
|
||||||
|
// }
|
||||||
|
// )
|
||||||
|
// watch(
|
||||||
|
// () => prop.timeValue,
|
||||||
|
|
||||||
val => {
|
// val => {
|
||||||
tableStore.index()
|
// tableStore.index()
|
||||||
},
|
// },
|
||||||
|
|
||||||
{
|
// {
|
||||||
deep: true
|
// deep: true
|
||||||
}
|
// }
|
||||||
)
|
// )
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@import '@/assets/font/iconfont.css';
|
@import '@/assets/font/iconfont.css';
|
||||||
|
|||||||
@@ -1,22 +1,22 @@
|
|||||||
<template>
|
<template>
|
||||||
<div style="width: 540px">
|
<div :style="{ width: isMinuteData ? '750px' : '610px' }">
|
||||||
<el-select v-model="interval" style="min-width: 90px; width: 90px; margin-right: 10px" @change="timeChange">
|
<el-select v-model="interval" style="min-width: 90px; width: 90px; margin-right: 10px" @change="timeChange">
|
||||||
<el-option v-for="item in timeOptions" :key="item.value" :label="item.label" :value="item.value" />
|
<el-option v-for="item in timeOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
</el-select>
|
</el-select>
|
||||||
|
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="timeValue"
|
v-model="timeValue"
|
||||||
type="daterange"
|
:type="pickerType"
|
||||||
:disabled="disabledPicker"
|
:disabled="disabledPicker"
|
||||||
:disabled-date="isFutureDate"
|
:disabled-date="isFutureDate"
|
||||||
style="width: 220px; margin-right: 10px"
|
:style="{ width: isMinuteData ? '360px' : '220px', marginRight: '10px' }"
|
||||||
unlink-panels
|
unlink-panels
|
||||||
:clearable="false"
|
:clearable="false"
|
||||||
range-separator="至"
|
range-separator="至"
|
||||||
start-placeholder="开始日期"
|
:start-placeholder="isMinuteData ? '开始时间' : '开始日期'"
|
||||||
end-placeholder="结束日期"
|
:end-placeholder="isMinuteData ? '结束时间' : '结束日期'"
|
||||||
value-format="YYYY-MM-DD"
|
:value-format="pickerValueFormat"
|
||||||
:shortcuts="shortcuts"
|
:shortcuts="isMinuteData ? undefined : shortcuts"
|
||||||
/>
|
/>
|
||||||
<el-button :disabled="backDisabled" type="primary" :icon="DArrowLeft" @click="preClick"></el-button>
|
<el-button :disabled="backDisabled" type="primary" :icon="DArrowLeft" @click="preClick"></el-button>
|
||||||
<el-button type="primary" :icon="VideoPause" @click="nowTime">当前</el-button>
|
<el-button type="primary" :icon="VideoPause" @click="nowTime">当前</el-button>
|
||||||
@@ -26,18 +26,41 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { DArrowLeft, VideoPause, DArrowRight } from '@element-plus/icons-vue'
|
import { DArrowLeft, VideoPause, DArrowRight } from '@element-plus/icons-vue'
|
||||||
import { ref, onMounted, nextTick, watch } from 'vue'
|
import { ref, onMounted, computed, watch } from 'vue'
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
nextFlag?: boolean
|
nextFlag?: boolean
|
||||||
theCurrentTime?: boolean
|
theCurrentTime?: boolean
|
||||||
|
isStatisticData?: number | string
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<Props>(), {
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
nextFlag: false,
|
nextFlag: false,
|
||||||
theCurrentTime: false
|
theCurrentTime: false,
|
||||||
|
isStatisticData: 1
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const isMinuteData = computed(() => Number(props.isStatisticData) === 0)
|
||||||
|
const pickerType = computed(() => (isMinuteData.value ? 'datetimerange' : 'daterange'))
|
||||||
|
const pickerValueFormat = computed(() => (isMinuteData.value ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD'))
|
||||||
|
|
||||||
|
const toDatePart = (value: string) => (value?.includes(' ') ? value.split(' ')[0] : value)
|
||||||
|
|
||||||
|
const toMinuteStart = (date: string) => `${toDatePart(date)} 00:00:00`
|
||||||
|
|
||||||
|
const toMinuteEnd = (date: string) => `${toDatePart(date)} 23:59:59`
|
||||||
|
|
||||||
|
const normalizeRange = (start: string, end: string) => {
|
||||||
|
if (!isMinuteData.value) {
|
||||||
|
return [toDatePart(start), toDatePart(end)]
|
||||||
|
}
|
||||||
|
return [toMinuteStart(start), toMinuteEnd(end)]
|
||||||
|
}
|
||||||
|
|
||||||
|
const setRangeValue = (start: string, end: string) => {
|
||||||
|
timeValue.value = normalizeRange(start, end)
|
||||||
|
}
|
||||||
|
|
||||||
const interval = ref(3)
|
const interval = ref(3)
|
||||||
const timeFlag = ref(1)
|
const timeFlag = ref(1)
|
||||||
const count = ref(0)
|
const count = ref(0)
|
||||||
@@ -95,13 +118,13 @@ const timeChange = (e: number) => {
|
|||||||
if (e == 1) {
|
if (e == 1) {
|
||||||
disabledPicker.value = true
|
disabledPicker.value = true
|
||||||
|
|
||||||
timeValue.value = [setTime(1), setTime()]
|
setRangeValue(setTime(1), setTime())
|
||||||
} else if (e == 2) {
|
} else if (e == 2) {
|
||||||
disabledPicker.value = true
|
disabledPicker.value = true
|
||||||
timeValue.value = [setTime(2), setTime()]
|
setRangeValue(setTime(2), setTime())
|
||||||
} else if (e == 3) {
|
} else if (e == 3) {
|
||||||
disabledPicker.value = true
|
disabledPicker.value = true
|
||||||
timeValue.value = [setTime(3), setTime()]
|
setRangeValue(setTime(3), setTime())
|
||||||
} else if (e == 4) {
|
} else if (e == 4) {
|
||||||
let year = parseInt(setTime().substring(0, 4))
|
let year = parseInt(setTime().substring(0, 4))
|
||||||
let month = parseInt(setTime().substring(5, 7))
|
let month = parseInt(setTime().substring(5, 7))
|
||||||
@@ -111,12 +134,12 @@ const timeChange = (e: number) => {
|
|||||||
var dayOfWeek = start.getDay() == 0 ? 7 : start.getDay() - 1 // 如果为周日,则置为7天
|
var dayOfWeek = start.getDay() == 0 ? 7 : start.getDay() - 1 // 如果为周日,则置为7天
|
||||||
|
|
||||||
disabledPicker.value = true
|
disabledPicker.value = true
|
||||||
timeValue.value = [setTime(0, dayOfWeek), setTime(0, -6 + dayOfWeek)]
|
setRangeValue(setTime(0, dayOfWeek), setTime(0, -6 + dayOfWeek))
|
||||||
} else if (e == 5) {
|
} else if (e == 5) {
|
||||||
disabledPicker.value = false
|
disabledPicker.value = false
|
||||||
backDisabled.value = true
|
backDisabled.value = true
|
||||||
preDisabled.value = props.nextFlag ? false : true
|
preDisabled.value = props.nextFlag ? false : true
|
||||||
timeValue.value = [setTime(), setTime()]
|
setRangeValue(setTime(), setTime())
|
||||||
}
|
}
|
||||||
if (e == 1 || e == 2) {
|
if (e == 1 || e == 2) {
|
||||||
timeFlag.value = 0
|
timeFlag.value = 0
|
||||||
@@ -186,7 +209,7 @@ const preClick = () => {
|
|||||||
startTime = year + '-01-01'
|
startTime = year + '-01-01'
|
||||||
endTime = year + '-12-31'
|
endTime = year + '-12-31'
|
||||||
}
|
}
|
||||||
timeValue.value = [startTime, endTime]
|
setRangeValue(startTime, endTime)
|
||||||
|
|
||||||
// 判断向后键的状态
|
// 判断向后键的状态
|
||||||
// var temp = NowgetEndTime()
|
// var temp = NowgetEndTime()
|
||||||
@@ -415,16 +438,27 @@ const next = () => {
|
|||||||
}
|
}
|
||||||
if (!props.nextFlag) {
|
if (!props.nextFlag) {
|
||||||
if (
|
if (
|
||||||
new Date(endTime + ' 00:00:00').getTime() >=
|
new Date(toDatePart(endTime) + ' 00:00:00').getTime() >=
|
||||||
new Date(window.XEUtils.toDateString(new Date(), 'yyyy-MM-dd ') + ' 00:00:00').getTime()
|
new Date(window.XEUtils.toDateString(new Date(), 'yyyy-MM-dd ') + ' 00:00:00').getTime()
|
||||||
) {
|
) {
|
||||||
preDisabled.value = props.nextFlag ? false : true
|
preDisabled.value = props.nextFlag ? false : true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
timeValue.value = [startTime, endTime]
|
setRangeValue(startTime, endTime)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => props.isStatisticData,
|
||||||
|
() => {
|
||||||
|
if (timeValue.value?.length === 2) {
|
||||||
|
setRangeValue(timeValue.value[0], timeValue.value[1])
|
||||||
|
} else {
|
||||||
|
timeChange(interval.value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
const setTime = (flag = 0, e = 0) => {
|
const setTime = (flag = 0, e = 0) => {
|
||||||
let dd = window.XEUtils.toDateString(new Date().getTime() - e * 3600 * 1000 * 24, 'dd')
|
let dd = window.XEUtils.toDateString(new Date().getTime() - e * 3600 * 1000 * 24, 'dd')
|
||||||
|
|
||||||
|
|||||||
@@ -3,13 +3,14 @@
|
|||||||
<div class="table-header ba-scroll-style">
|
<div class="table-header ba-scroll-style">
|
||||||
<el-form style="flex: 1; height: 32px; display: flex; flex-wrap: wrap" ref="headerForm" @submit.prevent=""
|
<el-form style="flex: 1; height: 32px; display: flex; flex-wrap: wrap" ref="headerForm" @submit.prevent=""
|
||||||
@keyup.enter="onComSearch" label-position="left" :inline="true">
|
@keyup.enter="onComSearch" label-position="left" :inline="true">
|
||||||
<el-form-item v-if="datePicker" style="grid-column: span 2; max-width: 630px">
|
<el-form-item v-if="datePicker" style="grid-column: span 2; "
|
||||||
|
:style="{ maxWidth: isStatisticData == 0 ? '750px' : '610px' }">
|
||||||
<template #label>
|
<template #label>
|
||||||
<el-checkbox v-if="showTimeAll" v-model="timeAll" label="统计时间" />
|
<el-checkbox v-if="showTimeAll" v-model="timeAll" label="统计时间" />
|
||||||
<span v-else>{{ dateLabel }}</span>
|
<span v-else>{{ dateLabel }}</span>
|
||||||
</template>
|
</template>
|
||||||
<DatePicker ref="datePickerRef" v-if="timeAll" :nextFlag="nextFlag"
|
<DatePicker ref="datePickerRef" v-if="timeAll" :nextFlag="nextFlag" :theCurrentTime="theCurrentTime"
|
||||||
:theCurrentTime="theCurrentTime"></DatePicker>
|
:isStatisticData="isStatisticData"></DatePicker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="区域" v-if="area">
|
<el-form-item label="区域" v-if="area">
|
||||||
@@ -72,6 +73,7 @@ interface Props {
|
|||||||
showExport?: boolean //导出控制
|
showExport?: boolean //导出控制
|
||||||
showTimeAll?: boolean //控制时间是否显示
|
showTimeAll?: boolean //控制时间是否显示
|
||||||
dateLabel?: string //设置时间名称
|
dateLabel?: string //设置时间名称
|
||||||
|
isStatisticData?: number | string // 0分钟数据 1统计数据
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<Props>(), {
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
@@ -83,7 +85,8 @@ const props = withDefaults(defineProps<Props>(), {
|
|||||||
showReset: true,
|
showReset: true,
|
||||||
showExport: false,
|
showExport: false,
|
||||||
showTimeAll: false,
|
showTimeAll: false,
|
||||||
dateLabel: '统计日期'
|
dateLabel: '统计日期',
|
||||||
|
isStatisticData: 1
|
||||||
})
|
})
|
||||||
// 动态计算table高度
|
// 动态计算table高度
|
||||||
const resizeObserver = new ResizeObserver(entries => {
|
const resizeObserver = new ResizeObserver(entries => {
|
||||||
|
|||||||
30
src/main.ts
30
src/main.ts
@@ -37,21 +37,21 @@ const setupAll = async () => {
|
|||||||
const app = createApp(App)
|
const app = createApp(App)
|
||||||
|
|
||||||
//开启离线地图
|
//开启离线地图
|
||||||
app.use(BaiduMapOffline, {
|
// app.use(BaiduMapOffline, {
|
||||||
offline: true,
|
// offline: true,
|
||||||
offlineConfig: {
|
// offlineConfig: {
|
||||||
imgext: '.png',
|
// imgext: '.png',
|
||||||
customstyle: '',
|
// customstyle: '',
|
||||||
tiles_dir: '',
|
// tiles_dir: '',
|
||||||
tiles_hybrid: '',
|
// tiles_hybrid: '',
|
||||||
tiles_self: '',
|
// tiles_self: '',
|
||||||
tiles_v_dir: '',
|
// tiles_v_dir: '',
|
||||||
tiles_satellite_dir: '',
|
// tiles_satellite_dir: '',
|
||||||
tiles_road_dir: '',
|
// tiles_road_dir: '',
|
||||||
tiles_v_road_dir: '',
|
// tiles_v_road_dir: '',
|
||||||
home: './plugin/offline/'
|
// home: './plugin/offline/'
|
||||||
}
|
// }
|
||||||
})
|
// })
|
||||||
app.use(BaiduMap, {
|
app.use(BaiduMap, {
|
||||||
// ak: 'Yp57V71dkOPiXjiN8VdcFRsVELzlVNKK',
|
// ak: 'Yp57V71dkOPiXjiN8VdcFRsVELzlVNKK',
|
||||||
ak: 'RpQi6WNFZ9tseKzhdwOQsXwFsoVntnsN',
|
ak: 'RpQi6WNFZ9tseKzhdwOQsXwFsoVntnsN',
|
||||||
|
|||||||
@@ -53,82 +53,23 @@ const calculateValue = (o: number, value: number, num: number, isMin: boolean) =
|
|||||||
export const yMethod = (arr: any) => {
|
export const yMethod = (arr: any) => {
|
||||||
let num = 0.2
|
let num = 0.2
|
||||||
let numList = dataProcessing(arr)
|
let numList = dataProcessing(arr)
|
||||||
let maxValue = 0
|
if (numList.length === 0) {
|
||||||
let minValue = 0
|
return [0, 0]
|
||||||
let max = 0
|
}
|
||||||
|
const maxValue = Math.max(...numList)
|
||||||
|
const minValue = Math.min(...numList)
|
||||||
let min = 0
|
let min = 0
|
||||||
maxValue = Math.max(...numList)
|
let max = 0
|
||||||
minValue = Math.min(...numList)
|
|
||||||
const o = maxValue - minValue == 0 ? maxValue : maxValue - minValue
|
|
||||||
min = calculateValue(o, minValue, num, true)
|
|
||||||
|
|
||||||
max = calculateValue(o, maxValue, num, false)
|
// 一正一负时各自按绝对值范围计算,不用 max - min 作为跨度
|
||||||
// if (-100 >= minValue) {
|
if (maxValue > 0 && minValue < 0) {
|
||||||
// min = Math.floor((minValue + num * minValue) / 100) * 100
|
min = calculateValue(Math.abs(minValue), minValue, num, true)
|
||||||
// } else if (-10 >= minValue && minValue > -100) {
|
max = calculateValue(Math.abs(maxValue), maxValue, num, false)
|
||||||
// min = Math.floor((minValue + num * minValue) / 10) * 10
|
} else {
|
||||||
// } else if (-1 >= minValue && minValue > -10) {
|
const o = maxValue - minValue === 0 ? maxValue : maxValue - minValue
|
||||||
// min = Math.floor(minValue + num * minValue)
|
min = calculateValue(o, minValue, num, true)
|
||||||
// } else if (0 > minValue && minValue > -1) {
|
max = calculateValue(o, maxValue, num, false)
|
||||||
// min = parseFloat((minValue + num * minValue).toFixed(1))
|
}
|
||||||
// } else if (minValue == 0) {
|
|
||||||
// min = 0
|
|
||||||
// } else if (0 < minValue && minValue < 1) {
|
|
||||||
// min = parseFloat((minValue - num * minValue).toFixed(1))
|
|
||||||
// } else if (1 <= minValue && minValue < 10) {
|
|
||||||
// min = Math.floor(minValue - num * minValue)
|
|
||||||
// } else if (10 <= minValue && minValue < 100) {
|
|
||||||
// min = Math.floor((minValue - num * minValue) / 10) * 10
|
|
||||||
// } else if (100 <= minValue) {
|
|
||||||
// min = Math.floor((minValue - num * minValue) / 100) * 100
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (-100 >= maxValue) {
|
|
||||||
// max = Math.ceil((maxValue - num * maxValue) / 100) * 100
|
|
||||||
// } else if (-10 >= maxValue && maxValue > -100) {
|
|
||||||
// max = Math.ceil((maxValue - num * maxValue) / 10) * 10
|
|
||||||
// } else if (-1 >= maxValue && maxValue > -10) {
|
|
||||||
// max = Math.ceil(maxValue - num * maxValue)
|
|
||||||
// } else if (0 > maxValue && maxValue > -1) {
|
|
||||||
// max = parseFloat((maxValue - num * maxValue).toFixed(1))
|
|
||||||
// } else if (maxValue == 0) {
|
|
||||||
// max = 0
|
|
||||||
// } else if (0 < maxValue && maxValue < 1) {
|
|
||||||
// max = parseFloat((maxValue + num * maxValue).toFixed(1))
|
|
||||||
// } else if (1 <= maxValue && maxValue < 10) {
|
|
||||||
// max = Math.ceil(maxValue + num * maxValue)
|
|
||||||
// } else if (10 <= maxValue && maxValue < 100) {
|
|
||||||
// max = Math.ceil((maxValue + num * maxValue) / 10) * 10
|
|
||||||
// } else if (100 <= maxValue) {
|
|
||||||
// max = Math.ceil((maxValue + num * maxValue) / 100) * 100
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (maxValue > 1000 || minValue < -1000) {
|
|
||||||
// max = Math.ceil(maxValue / 100) * 100
|
|
||||||
// if (minValue == 0) {
|
|
||||||
// min = 0
|
|
||||||
// } else {
|
|
||||||
// min = Math.floor(minValue / 100) * 100
|
|
||||||
// }
|
|
||||||
// } else if (maxValue < 60 && minValue > 40) {
|
|
||||||
// max = 60
|
|
||||||
// min = 40
|
|
||||||
// } else if (maxValue == minValue && maxValue < 10 && minValue > 0) {
|
|
||||||
// max = Math.ceil(maxValue / 10) * 10
|
|
||||||
// min = Math.floor(minValue / 10) * 10
|
|
||||||
// } else if (maxValue == minValue && maxValue != 0 && minValue != 0) {
|
|
||||||
// max = Math.ceil(maxValue / 10 + 1) * 10
|
|
||||||
// min = Math.floor(minValue / 10 - 1) * 10
|
|
||||||
// } else {
|
|
||||||
// max = Math.ceil(maxValue / 10) * 10
|
|
||||||
// min = Math.floor(minValue / 10) * 10
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (maxValue > 0 && maxValue < 1) {
|
|
||||||
// max = 1
|
|
||||||
// } else if (max == 0 && minValue > -1 && minValue < 0) {
|
|
||||||
// min = -1
|
|
||||||
// }
|
|
||||||
|
|
||||||
return [min, max]
|
return [min, max]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ function createAxios<Data = any, T = ApiPromise<Data>>(
|
|||||||
if (
|
if (
|
||||||
config.url == '/user-boot/user/generateSm2Key' ||
|
config.url == '/user-boot/user/generateSm2Key' ||
|
||||||
config.url == '/pqs-auth/oauth/token' ||
|
config.url == '/pqs-auth/oauth/token' ||
|
||||||
config.url == '/pqs-auth/oauth/lnLogin'||
|
config.url == '/pqs-auth/oauth/lnLogin' ||
|
||||||
config.url == '/pqs-auth/oauth/lnRefreshToken'
|
config.url == '/pqs-auth/oauth/lnRefreshToken'
|
||||||
) {
|
) {
|
||||||
config.headers.Authorization = 'Basic bmpjbjpuamNucHFz'
|
config.headers.Authorization = 'Basic bmpjbjpuamNucHFz'
|
||||||
@@ -148,23 +148,26 @@ function createAxios<Data = any, T = ApiPromise<Data>>(
|
|||||||
if (!window.tokenRefreshing) {
|
if (!window.tokenRefreshing) {
|
||||||
window.tokenRefreshing = true
|
window.tokenRefreshing = true
|
||||||
|
|
||||||
if(IS_LN_VERSION){
|
if (IS_LN_VERSION) {
|
||||||
//辽宁版本
|
//辽宁版本
|
||||||
return lnRefreshTokenTo().then(res => {
|
return lnRefreshTokenTo()
|
||||||
adminInfo.setToken(res.data.access_token, 'auth')
|
.then(res => {
|
||||||
adminInfo.setToken(res.data.refresh_token, 'refresh')
|
adminInfo.setToken(res.data.access_token, 'auth')
|
||||||
window.requests.forEach(cb => cb(res.data.access_token))
|
adminInfo.setToken(res.data.refresh_token, 'refresh')
|
||||||
window.requests = []
|
window.requests.forEach(cb => cb(res.data.access_token))
|
||||||
|
window.requests = []
|
||||||
|
|
||||||
return Axios(response.config)
|
return Axios(response.config)
|
||||||
}).catch(err => {
|
})
|
||||||
// refresh_token + CAS 都过期 → 重新走CAS登录
|
.catch(err => {
|
||||||
window.location.href = '/api/pqs-auth/oauth/lnCheck'
|
// refresh_token + CAS 都过期 → 重新走CAS登录
|
||||||
return Promise.reject(err)
|
window.location.href = '/api/pqs-auth/oauth/lnCheck'
|
||||||
}).finally(() => {
|
return Promise.reject(err)
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
window.tokenRefreshing = false
|
window.tokenRefreshing = false
|
||||||
})
|
})
|
||||||
}else {
|
} else {
|
||||||
//通用版本
|
//通用版本
|
||||||
return refreshToken()
|
return refreshToken()
|
||||||
.then(res => {
|
.then(res => {
|
||||||
@@ -185,7 +188,6 @@ function createAxios<Data = any, T = ApiPromise<Data>>(
|
|||||||
window.tokenRefreshing = false
|
window.tokenRefreshing = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
// 用函数形式将 resolve 存入,等待刷新后再执行
|
// 用函数形式将 resolve 存入,等待刷新后再执行
|
||||||
@@ -211,7 +213,7 @@ function createAxios<Data = any, T = ApiPromise<Data>>(
|
|||||||
loginExpireTimer = null // 执行后清空定时器
|
loginExpireTimer = null // 执行后清空定时器
|
||||||
}, 100) // 可根据实际情况调整延迟时间
|
}, 100) // 可根据实际情况调整延迟时间
|
||||||
return Promise.reject(response.data)
|
return Promise.reject(response.data)
|
||||||
} else if (response.data.code == 'A0121') {
|
} else if (response.data.code == 'A0121') {
|
||||||
//统一认证过期
|
//统一认证过期
|
||||||
const casLogoutUrl =
|
const casLogoutUrl =
|
||||||
'http://privilege-epri.dcloud.ln.dc.sgcc.com.cn/cas/login?service=http://PQMonitoring.dcloud.ln.dc.sgcc.com.cn'
|
'http://privilege-epri.dcloud.ln.dc.sgcc.com.cn/cas/login?service=http://PQMonitoring.dcloud.ln.dc.sgcc.com.cn'
|
||||||
|
|||||||
@@ -110,7 +110,8 @@ export default class SocketService {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.callBackMapping['message']!({ Flag: false })
|
this.callBackMapping['message']!({ Flag: false })
|
||||||
// ElMessage.error(event.data)
|
if(event.data == 'connect')return
|
||||||
|
ElMessage.error(event.data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -491,7 +491,7 @@ const makeUpSubmit = () => {
|
|||||||
}, 500)
|
}, 500)
|
||||||
}
|
}
|
||||||
const socket = async (form: any) => {
|
const socket = async (form: any) => {
|
||||||
const url = (localStorage.getItem('WebSocketUrl2') || 'null')//'ws://192.168.1.68:10405/api/recell/'
|
const url = (localStorage.getItem('WebSocketUrl2') || 'null')//'ws://192.168.1.68:10405/api/recell/')
|
||||||
logList.value = []
|
logList.value = []
|
||||||
await dataSocket.socketServe.connect(`${url}${adminInfo.id}`)
|
await dataSocket.socketServe.connect(`${url}${adminInfo.id}`)
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
<template v-slot:operation>
|
<template v-slot:operation>
|
||||||
|
<el-button type="primary" icon="el-icon-Search" @click="Search">查询</el-button>
|
||||||
<el-button type="primary" icon="el-icon-Download" @click="exportTemplate">导出</el-button>
|
<el-button type="primary" icon="el-icon-Download" @click="exportTemplate">导出</el-button>
|
||||||
</template>
|
</template>
|
||||||
</TableHeader>
|
</TableHeader>
|
||||||
@@ -51,6 +52,7 @@
|
|||||||
:interval="datePickerRef?.interval"
|
:interval="datePickerRef?.interval"
|
||||||
:w="item.w"
|
:w="item.w"
|
||||||
:h="item.h"
|
:h="item.h"
|
||||||
|
:searchKey="searchKey"
|
||||||
/>
|
/>
|
||||||
<div v-else class="pd10">组件加载失败...</div>
|
<div v-else class="pd10">组件加载失败...</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -114,6 +116,7 @@ const layout: any = ref([
|
|||||||
// path: '/src/views/pqs/runManage/assessment/components/uese/index.vue'
|
// path: '/src/views/pqs/runManage/assessment/components/uese/index.vue'
|
||||||
// },
|
// },
|
||||||
])
|
])
|
||||||
|
const searchKey = ref(0)
|
||||||
const layoutCopy: any = ref([])
|
const layoutCopy: any = ref([])
|
||||||
const flag = ref(true)
|
const flag = ref(true)
|
||||||
// 组件映射
|
// 组件映射
|
||||||
@@ -293,6 +296,10 @@ const fetchLayoutData = async () => {
|
|||||||
// 可以添加错误提示逻辑
|
// 可以添加错误提示逻辑
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
const Search = () => {
|
||||||
|
searchKey.value += 1
|
||||||
|
}
|
||||||
|
|
||||||
// 导出
|
// 导出
|
||||||
const exportTemplate = () => {
|
const exportTemplate = () => {
|
||||||
console.log(123)
|
console.log(123)
|
||||||
|
|||||||
@@ -10,53 +10,30 @@
|
|||||||
<DatePicker ref="datePickerRef" :theCurrentTime="true"></DatePicker>
|
<DatePicker ref="datePickerRef" :theCurrentTime="true"></DatePicker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="指标类型:">
|
<el-form-item label="指标类型:">
|
||||||
<el-select
|
<el-select v-model="formData.condition" multiple collapse-tags :multiple-limit="checked ? 1 : 3"
|
||||||
v-model="formData.condition"
|
filterable placeholder="请选择指标" @change="conditionChange">
|
||||||
multiple
|
|
||||||
collapse-tags
|
|
||||||
:multiple-limit="checked ? 1 : 3"
|
|
||||||
filterable
|
|
||||||
placeholder="请选择指标"
|
|
||||||
@change="conditionChange"
|
|
||||||
>
|
|
||||||
<el-option-group v-for="group in indexOptions" :key="group.label" :label="group.label">
|
<el-option-group v-for="group in indexOptions" :key="group.label" :label="group.label">
|
||||||
<el-option
|
<el-option v-for="item in group.options" :key="item.value" :label="item.label"
|
||||||
v-for="item in group.options"
|
:value="item.value"></el-option>
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
></el-option>
|
|
||||||
</el-option-group>
|
</el-option-group>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="数值类型:">
|
<el-form-item label="数值类型:">
|
||||||
<el-select style="width: 100%" v-model="formData.valueType" placeholder="请选择类型">
|
<el-select style="width: 100%" v-model="formData.valueType" placeholder="请选择类型">
|
||||||
<el-option
|
<el-option v-for="item in typeOptions" :key="item.value" :label="item.label"
|
||||||
v-for="item in typeOptions"
|
:value="item.value"></el-option>
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
></el-option>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="谐波次数:" v-show="showXieBoCiShu">
|
<el-form-item label="谐波次数:" v-show="showXieBoCiShu">
|
||||||
<el-select style="width: 100%" v-model="formData.harmonic" placeholder="请选择谐波">
|
<el-select style="width: 100%" v-model="formData.harmonic" placeholder="请选择谐波">
|
||||||
<el-option
|
<el-option v-for="item in harmonicOptions" :key="item.value" :label="item.label"
|
||||||
v-for="item in harmonicOptions"
|
:value="item.value"></el-option>
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
></el-option>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item v-show="showJianXieBoCiShu" label="间谐波次数:">
|
<el-form-item v-show="showJianXieBoCiShu" label="间谐波次数:">
|
||||||
<el-select style="width: 100%" v-model="formData.inHarmonic" placeholder="请选择间谐波">
|
<el-select style="width: 100%" v-model="formData.inHarmonic" placeholder="请选择间谐波">
|
||||||
<el-option
|
<el-option v-for="item in inharmonicOptions" :key="item.value" :label="item.label"
|
||||||
v-for="item in inharmonicOptions"
|
:value="item.value"></el-option>
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
></el-option>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
@@ -67,21 +44,10 @@
|
|||||||
<!-- <el-form :inline="true">
|
<!-- <el-form :inline="true">
|
||||||
|
|
||||||
</el-form> -->
|
</el-form> -->
|
||||||
<div
|
<div id="canvas" class="mt10" :style="height1" style="overflow-y: auto; overflow-x: hidden"
|
||||||
id="canvas"
|
v-loading="loading">
|
||||||
class="mt10"
|
<my-echart :options="item.option" v-for="item in list" style="min-height: 190px" :style="height"
|
||||||
:style="height1"
|
@triggerPoint="triggerPoint" @group="group" />
|
||||||
style="overflow-y: auto; overflow-x: hidden"
|
|
||||||
v-loading="loading"
|
|
||||||
>
|
|
||||||
<my-echart
|
|
||||||
:options="item.option"
|
|
||||||
v-for="item in list"
|
|
||||||
style="min-height: 190px"
|
|
||||||
:style="height"
|
|
||||||
@triggerPoint="triggerPoint"
|
|
||||||
@group="group"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div :style="{ height: pageHeight.height }" style="padding: 10px; overflow: hidden" v-if="!view">
|
<div :style="{ height: pageHeight.height }" style="padding: 10px; overflow: hidden" v-if="!view">
|
||||||
@@ -232,8 +198,8 @@ const shujuchuli = (res: any) => {
|
|||||||
let cvalue = []
|
let cvalue = []
|
||||||
let topLimit = []
|
let topLimit = []
|
||||||
let lowerLimit = []
|
let lowerLimit = []
|
||||||
item.maxValue = item.topLimit
|
item.maxValue = (item.topLimit > item.maxValue ? item.topLimit : item.maxValue)
|
||||||
item.minValue = item.lowerLimit
|
item.minValue = (item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue)
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
for (let j = 0; j < item.value.length; j++) {
|
for (let j = 0; j < item.value.length; j++) {
|
||||||
@@ -270,7 +236,7 @@ const shujuchuli = (res: any) => {
|
|||||||
for (let k = 0; k < item.eventDetail.length; k++) {
|
for (let k = 0; k < item.eventDetail.length; k++) {
|
||||||
chufa.push([
|
chufa.push([
|
||||||
item.eventDetail[k].time,
|
item.eventDetail[k].time,
|
||||||
item.minValue.toFixed(3),
|
(0).toFixed(3),
|
||||||
item.eventDetail[k].id,
|
item.eventDetail[k].id,
|
||||||
99
|
99
|
||||||
])
|
])
|
||||||
@@ -293,6 +259,7 @@ const shujuchuli = (res: any) => {
|
|||||||
lowerLimit: lowerLimit,
|
lowerLimit: lowerLimit,
|
||||||
chufa: chufa
|
chufa: chufa
|
||||||
}
|
}
|
||||||
|
|
||||||
list.value.push(shuju)
|
list.value.push(shuju)
|
||||||
}
|
}
|
||||||
//图列为频率等,暂降,上限,下限
|
//图列为频率等,暂降,上限,下限
|
||||||
@@ -300,8 +267,8 @@ const shujuchuli = (res: any) => {
|
|||||||
let gvalue = []
|
let gvalue = []
|
||||||
let topLimit = []
|
let topLimit = []
|
||||||
let lowerLimit = []
|
let lowerLimit = []
|
||||||
item.maxValue = item.topLimit
|
item.maxValue = (item.topLimit > item.maxValue ? item.topLimit : item.maxValue)
|
||||||
item.minValue = item.lowerLimit
|
item.minValue = (item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue)
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
for (let j = 0; j < item.value.length; j++) {
|
for (let j = 0; j < item.value.length; j++) {
|
||||||
@@ -324,7 +291,7 @@ const shujuchuli = (res: any) => {
|
|||||||
for (let k = 0; k < item.eventDetail.length; k++) {
|
for (let k = 0; k < item.eventDetail.length; k++) {
|
||||||
chufa.push([
|
chufa.push([
|
||||||
item.eventDetail[k].time,
|
item.eventDetail[k].time,
|
||||||
item.minValue.toFixed(3),
|
(0).toFixed(3),
|
||||||
item.eventDetail[k].id,
|
item.eventDetail[k].id,
|
||||||
99
|
99
|
||||||
])
|
])
|
||||||
@@ -378,7 +345,7 @@ const shujuchuli = (res: any) => {
|
|||||||
let bvalue = []
|
let bvalue = []
|
||||||
let cvalue = []
|
let cvalue = []
|
||||||
let topLimit = []
|
let topLimit = []
|
||||||
item.maxValue = item.topLimit
|
item.maxValue = (item.topLimit > item.maxValue ? item.topLimit : item.maxValue)
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
for (let j = 0; j < item.value.length; j++) {
|
for (let j = 0; j < item.value.length; j++) {
|
||||||
@@ -414,7 +381,7 @@ const shujuchuli = (res: any) => {
|
|||||||
for (let k = 0; k < item.eventDetail.length; k++) {
|
for (let k = 0; k < item.eventDetail.length; k++) {
|
||||||
chufa.push([
|
chufa.push([
|
||||||
item.eventDetail[k].time,
|
item.eventDetail[k].time,
|
||||||
item.minValue.toFixed(3),
|
(0).toFixed(3),
|
||||||
item.eventDetail[k].id,
|
item.eventDetail[k].id,
|
||||||
99
|
99
|
||||||
])
|
])
|
||||||
@@ -442,7 +409,7 @@ const shujuchuli = (res: any) => {
|
|||||||
if (item.phaiscType.length == 3) {
|
if (item.phaiscType.length == 3) {
|
||||||
let gvalue = []
|
let gvalue = []
|
||||||
let topLimit = []
|
let topLimit = []
|
||||||
item.maxValue = item.topLimit
|
item.maxValue = (item.topLimit > item.maxValue ? item.topLimit : item.maxValue)
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
for (let j = 0; j < item.value.length; j++) {
|
for (let j = 0; j < item.value.length; j++) {
|
||||||
@@ -462,7 +429,7 @@ const shujuchuli = (res: any) => {
|
|||||||
//不存在一个暂降点或1个 //处理暂降点
|
//不存在一个暂降点或1个 //处理暂降点
|
||||||
if (item.eventDetail.length > 0) {
|
if (item.eventDetail.length > 0) {
|
||||||
for (let k = 0; k < item.eventDetail.length; k++) {
|
for (let k = 0; k < item.eventDetail.length; k++) {
|
||||||
chufa.push([item.eventDetail[k].time, item.minValue.toFixed(3)])
|
chufa.push([item.eventDetail[k].time, (0).toFixed(3)])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let shuju = {
|
let shuju = {
|
||||||
@@ -512,7 +479,7 @@ const shujuchuli = (res: any) => {
|
|||||||
let bvalue = []
|
let bvalue = []
|
||||||
let cvalue = []
|
let cvalue = []
|
||||||
let lowerLimit = []
|
let lowerLimit = []
|
||||||
item.minValue = item.lowerLimit
|
item.minValue = (item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue)
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
for (let j = 0; j < item.value.length; j++) {
|
for (let j = 0; j < item.value.length; j++) {
|
||||||
@@ -546,7 +513,7 @@ const shujuchuli = (res: any) => {
|
|||||||
//不存在一个暂降点或1个 //处理暂降点
|
//不存在一个暂降点或1个 //处理暂降点
|
||||||
if (item.eventDetail.length > 0) {
|
if (item.eventDetail.length > 0) {
|
||||||
for (let k = 0; k < item.eventDetail.length; k++) {
|
for (let k = 0; k < item.eventDetail.length; k++) {
|
||||||
chufa.push([item.eventDetail[k].time, item.minValue.toFixed(3)])
|
chufa.push([item.eventDetail[k].time, (0).toFixed(3)])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let shuju = {
|
let shuju = {
|
||||||
@@ -571,7 +538,7 @@ const shujuchuli = (res: any) => {
|
|||||||
if (item.phaiscType.length == 3) {
|
if (item.phaiscType.length == 3) {
|
||||||
let gvalue = []
|
let gvalue = []
|
||||||
let lowerLimit = []
|
let lowerLimit = []
|
||||||
item.minValue = item.lowerLimit
|
item.minValue = (item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue)
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
for (let j = 0; j < item.value.length; j++) {
|
for (let j = 0; j < item.value.length; j++) {
|
||||||
@@ -591,7 +558,7 @@ const shujuchuli = (res: any) => {
|
|||||||
//不存在一个暂降点或1个 //处理暂降点
|
//不存在一个暂降点或1个 //处理暂降点
|
||||||
if (item.eventDetail.length > 0) {
|
if (item.eventDetail.length > 0) {
|
||||||
for (let k = 0; k < item.eventDetail.length; k++) {
|
for (let k = 0; k < item.eventDetail.length; k++) {
|
||||||
chufa.push([item.eventDetail[k].time, item.minValue.toFixed(3)])
|
chufa.push([item.eventDetail[k].time, (0).toFixed(3)])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let shuju = {
|
let shuju = {
|
||||||
@@ -632,6 +599,7 @@ const shujuchuli = (res: any) => {
|
|||||||
}
|
}
|
||||||
//无限值
|
//无限值
|
||||||
if (item.topLimit == 0 && item.lowerLimit == 0) {
|
if (item.topLimit == 0 && item.lowerLimit == 0) {
|
||||||
|
|
||||||
if (item.minValue !== null && item.maxValue !== null) {
|
if (item.minValue !== null && item.maxValue !== null) {
|
||||||
//最小值等于下限值
|
//最小值等于下限值
|
||||||
//图列为A,B,C,暂降
|
//图列为A,B,C,暂降
|
||||||
@@ -672,7 +640,7 @@ const shujuchuli = (res: any) => {
|
|||||||
for (let k = 0; k < item.eventDetail.length; k++) {
|
for (let k = 0; k < item.eventDetail.length; k++) {
|
||||||
chufa.push([
|
chufa.push([
|
||||||
item.eventDetail[k].time,
|
item.eventDetail[k].time,
|
||||||
item.minValue.toFixed(3),
|
(0).toFixed(3),
|
||||||
item.eventDetail[k].id,
|
item.eventDetail[k].id,
|
||||||
99
|
99
|
||||||
])
|
])
|
||||||
@@ -717,7 +685,7 @@ const shujuchuli = (res: any) => {
|
|||||||
for (let k = 0; k < item.eventDetail.length; k++) {
|
for (let k = 0; k < item.eventDetail.length; k++) {
|
||||||
chufa.push([
|
chufa.push([
|
||||||
item.eventDetail[k].time,
|
item.eventDetail[k].time,
|
||||||
item.minValue.toFixed(3),
|
(0).toFixed(3),
|
||||||
item.eventDetail[k].id,
|
item.eventDetail[k].id,
|
||||||
99
|
99
|
||||||
])
|
])
|
||||||
@@ -772,8 +740,8 @@ const shujuchuli = (res: any) => {
|
|||||||
let cvalue = []
|
let cvalue = []
|
||||||
let topLimit = []
|
let topLimit = []
|
||||||
let lowerLimit = []
|
let lowerLimit = []
|
||||||
item.maxValue = item.topLimit
|
item.maxValue = (item.topLimit > item.maxValue ? item.topLimit : item.maxValue)
|
||||||
item.minValue = item.lowerLimit
|
item.minValue = (item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue)
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
for (let j = 0; j < item.value.length; j++) {
|
for (let j = 0; j < item.value.length; j++) {
|
||||||
@@ -828,8 +796,8 @@ const shujuchuli = (res: any) => {
|
|||||||
let gvalue = []
|
let gvalue = []
|
||||||
let topLimit = []
|
let topLimit = []
|
||||||
let lowerLimit = []
|
let lowerLimit = []
|
||||||
item.maxValue = item.topLimit
|
item.maxValue = (item.topLimit > item.maxValue ? item.topLimit : item.maxValue)
|
||||||
item.minValue = item.lowerLimit
|
item.minValue = (item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue)
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
for (let j = 0; j < item.value.length; j++) {
|
for (let j = 0; j < item.value.length; j++) {
|
||||||
@@ -895,7 +863,7 @@ const shujuchuli = (res: any) => {
|
|||||||
let bvalue = []
|
let bvalue = []
|
||||||
let cvalue = []
|
let cvalue = []
|
||||||
let topLimit = []
|
let topLimit = []
|
||||||
item.maxValue = item.topLimit
|
item.maxValue = (item.topLimit > item.maxValue ? item.topLimit : item.maxValue)
|
||||||
// item.minValue=item.lowerLimit
|
// item.minValue=item.lowerLimit
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
@@ -948,7 +916,7 @@ const shujuchuli = (res: any) => {
|
|||||||
if (item.phaiscType.length == 2) {
|
if (item.phaiscType.length == 2) {
|
||||||
let gvalue = []
|
let gvalue = []
|
||||||
let topLimit = []
|
let topLimit = []
|
||||||
item.maxValue = item.topLimit
|
item.maxValue = (item.topLimit > item.maxValue ? item.topLimit : item.maxValue)
|
||||||
// item.minValue=item.lowerLimit
|
// item.minValue=item.lowerLimit
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
@@ -1013,7 +981,7 @@ const shujuchuli = (res: any) => {
|
|||||||
let cvalue = []
|
let cvalue = []
|
||||||
let lowerLimit = []
|
let lowerLimit = []
|
||||||
// item.maxValue=item.topLimit
|
// item.maxValue=item.topLimit
|
||||||
item.minValue = item.lowerLimit
|
item.minValue = (item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue)
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
for (let j = 0; j < item.value.length; j++) {
|
for (let j = 0; j < item.value.length; j++) {
|
||||||
@@ -1066,7 +1034,7 @@ const shujuchuli = (res: any) => {
|
|||||||
let gvalue = []
|
let gvalue = []
|
||||||
let lowerLimit = []
|
let lowerLimit = []
|
||||||
// item.maxValue=item.topLimit
|
// item.maxValue=item.topLimit
|
||||||
item.minValue = item.lowerLimit
|
item.minValue = (item.lowerLimit < item.minValue ? item.lowerLimit : item.minValue)
|
||||||
//判断数据是否存在
|
//判断数据是否存在
|
||||||
if (item.value !== null) {
|
if (item.value !== null) {
|
||||||
for (let j = 0; j < item.value.length; j++) {
|
for (let j = 0; j < item.value.length; j++) {
|
||||||
@@ -1227,19 +1195,85 @@ const shujuchuli = (res: any) => {
|
|||||||
})
|
})
|
||||||
rendering()
|
rendering()
|
||||||
}
|
}
|
||||||
|
const getSeriesDataValues = (data: any[]) => {
|
||||||
|
if (!data?.length) return []
|
||||||
|
return data
|
||||||
|
.map(d => (Array.isArray(d) && d[1] != null && d[1] !== '' ? Number(d[1]) : null))
|
||||||
|
.filter((v): v is number => v != null && !Number.isNaN(v))
|
||||||
|
}
|
||||||
|
const buildItemYAxis = (item: any) => {
|
||||||
|
if (item.useDualAxis && item.serise?.length) {
|
||||||
|
const uniqueUnits = [...new Set(item.units.filter((u: string) => u != null && u !== ''))] as string[]
|
||||||
|
const valuesByUnit: Record<string, number[]> = {}
|
||||||
|
uniqueUnits.forEach(u => {
|
||||||
|
valuesByUnit[u] = []
|
||||||
|
})
|
||||||
|
item.serise.forEach((s: any) => {
|
||||||
|
const axisIdx = s.yAxisIndex ?? 0
|
||||||
|
const unit = uniqueUnits[axisIdx]
|
||||||
|
if (unit) valuesByUnit[unit].push(...getSeriesDataValues(s.data))
|
||||||
|
})
|
||||||
|
return uniqueUnits.map((unit, index) => {
|
||||||
|
|
||||||
|
const [min, max] = yMethod(valuesByUnit[unit].length ? valuesByUnit[unit] : [0])
|
||||||
|
return {
|
||||||
|
type: 'value',
|
||||||
|
min,
|
||||||
|
max,
|
||||||
|
name: unit,
|
||||||
|
position: index === 0 ? 'left' : 'right',
|
||||||
|
minInterval: index === 0 ? 1 : undefined,
|
||||||
|
axisLine: {
|
||||||
|
show: true,
|
||||||
|
onZero: false
|
||||||
|
},
|
||||||
|
splitLine: index === 0 ? undefined : { show: false }
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const values = item.value?.length ? item.value.map((k: any) => k[1]) : [0]
|
||||||
|
const [min, max] = yMethod([item.maxValue, item.minValue, ...values])
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
type: 'value',
|
||||||
|
min,
|
||||||
|
max,
|
||||||
|
name: item.valueName,
|
||||||
|
minInterval: 1,
|
||||||
|
axisLine: {
|
||||||
|
show: true,
|
||||||
|
onZero: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
const rendering = () => {
|
const rendering = () => {
|
||||||
height.value = mainHeight(160, list.value.length > 3 ? 3 : list.value.length)
|
height.value = mainHeight(160, list.value.length > 3 ? 3 : list.value.length)
|
||||||
|
|
||||||
list.value.forEach((item: any) => {
|
list.value.forEach((item: any) => {
|
||||||
|
const idx = parseInt(String(item.id).replace('qushifenx', ''))
|
||||||
|
item.units = (tableData.value[idx] as any)?.unit || (item.valueName ? [item.valueName] : [''])
|
||||||
|
const uniqueUnits = [...new Set(item.units.filter((u: string) => u != null && u !== ''))] as string[]
|
||||||
|
item.useDualAxis = uniqueUnits.length > 1
|
||||||
|
const getAxisIndex = (unitIndex: number) => {
|
||||||
|
if (!item.useDualAxis) return 0
|
||||||
|
const unit = item.units[unitIndex] ?? item.units[0]
|
||||||
|
return uniqueUnits.indexOf(unit)
|
||||||
|
}
|
||||||
|
const withAxis = (data: any, unitIndex: number) => {
|
||||||
|
if (item.useDualAxis) data.yAxisIndex = getAxisIndex(unitIndex)
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
const isShanBian = item.targetName.includes('闪变')
|
||||||
|
const lineSeriesOpts = isShanBian ? { smooth: false, step: 'end' as const } : { smooth: true }
|
||||||
|
|
||||||
if (item.targetName == '电压不平衡') {
|
if (item.targetName == '电压不平衡') {
|
||||||
item.valueName = ''
|
item.valueName = ''
|
||||||
|
const phaseNames = ['零序电压', '正序电压', '负序电压']
|
||||||
item.legend = item.legend.map((item2: any) => {
|
item.legend = item.legend.map((item2: any) => {
|
||||||
if (item2 == '零序电压') {
|
const phaseIdx = phaseNames.indexOf(item2)
|
||||||
item2 = item2 + '(V)'
|
if (phaseIdx >= 0 && item.units[phaseIdx]) {
|
||||||
} else if (item2 == '正序电压') {
|
return item2 + '(' + item.units[phaseIdx] + ')'
|
||||||
item2 = item2 + '(kV)'
|
|
||||||
} else if (item2 == '负序电压') {
|
|
||||||
item2 = item2 + '(V)'
|
|
||||||
}
|
}
|
||||||
return item2
|
return item2
|
||||||
})
|
})
|
||||||
@@ -1247,13 +1281,16 @@ const rendering = () => {
|
|||||||
|
|
||||||
let opitonserise: any[] = []
|
let opitonserise: any[] = []
|
||||||
item.legend.forEach((item2: any) => {
|
item.legend.forEach((item2: any) => {
|
||||||
if (item.avalue !== undefined && (item2 == 'A相' || item2 == 'AB相' || item2 == '零序电压(V)')) {
|
if (
|
||||||
|
item.avalue !== undefined &&
|
||||||
|
(item2 == 'A相' || item2 == 'AB相' || item2.startsWith('零序电压'))
|
||||||
|
) {
|
||||||
let data = {
|
let data = {
|
||||||
name: item2,
|
name: item2,
|
||||||
symbol: 'none',
|
symbol: 'none',
|
||||||
symbolSize: 5,
|
symbolSize: 5,
|
||||||
type: 'line',
|
type: 'line',
|
||||||
smooth: true,
|
...lineSeriesOpts,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: '#DAA520'
|
color: '#DAA520'
|
||||||
@@ -1262,14 +1299,17 @@ const rendering = () => {
|
|||||||
|
|
||||||
data: item.avalue
|
data: item.avalue
|
||||||
}
|
}
|
||||||
opitonserise.push(data)
|
opitonserise.push(withAxis(data, 0))
|
||||||
} else if (item.bvalue !== undefined && (item2 == 'B相' || item2 == 'BC相' || item2 == '正序电压(kV)')) {
|
} else if (
|
||||||
|
item.bvalue !== undefined &&
|
||||||
|
(item2 == 'B相' || item2 == 'BC相' || item2.startsWith('正序电压'))
|
||||||
|
) {
|
||||||
let data = {
|
let data = {
|
||||||
name: item2,
|
name: item2,
|
||||||
symbol: 'none',
|
symbol: 'none',
|
||||||
symbolSize: 5,
|
symbolSize: 5,
|
||||||
type: 'line',
|
type: 'line',
|
||||||
smooth: true,
|
...lineSeriesOpts,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: '#2E8B57'
|
color: '#2E8B57'
|
||||||
@@ -1278,14 +1318,17 @@ const rendering = () => {
|
|||||||
|
|
||||||
data: item.bvalue
|
data: item.bvalue
|
||||||
}
|
}
|
||||||
opitonserise.push(data)
|
opitonserise.push(withAxis(data, 1))
|
||||||
} else if (item.cvalue !== undefined && (item2 == 'C相' || item2 == 'CA相' || item2 == '负序电压(V)')) {
|
} else if (
|
||||||
|
item.cvalue !== undefined &&
|
||||||
|
(item2 == 'C相' || item2 == 'CA相' || item2.startsWith('负序电压'))
|
||||||
|
) {
|
||||||
let data = {
|
let data = {
|
||||||
name: item2,
|
name: item2,
|
||||||
symbol: 'none',
|
symbol: 'none',
|
||||||
symbolSize: 5,
|
symbolSize: 5,
|
||||||
type: 'line',
|
type: 'line',
|
||||||
smooth: true,
|
...lineSeriesOpts,
|
||||||
barWidth: 22,
|
barWidth: 22,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
@@ -1294,14 +1337,14 @@ const rendering = () => {
|
|||||||
},
|
},
|
||||||
data: item.cvalue
|
data: item.cvalue
|
||||||
}
|
}
|
||||||
opitonserise.push(data)
|
opitonserise.push(withAxis(data, 2))
|
||||||
} else if (item.topLimit !== undefined && item2 == '上限') {
|
} else if (item.topLimit !== undefined && item2 == '上限') {
|
||||||
let data = {
|
let data = {
|
||||||
name: item2,
|
name: item2,
|
||||||
symbol: 'none',
|
symbol: 'none',
|
||||||
symbolSize: 5,
|
symbolSize: 5,
|
||||||
type: 'line',
|
type: 'line',
|
||||||
smooth: true,
|
...lineSeriesOpts,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: '#FF33FF',
|
color: '#FF33FF',
|
||||||
@@ -1314,14 +1357,14 @@ const rendering = () => {
|
|||||||
},
|
},
|
||||||
data: item.topLimit
|
data: item.topLimit
|
||||||
}
|
}
|
||||||
opitonserise.push(data)
|
opitonserise.push(withAxis(data, 0))
|
||||||
} else if (item.lowerLimit !== undefined && item2 == '下限') {
|
} else if (item.lowerLimit !== undefined && item2 == '下限') {
|
||||||
let data = {
|
let data = {
|
||||||
name: item2,
|
name: item2,
|
||||||
symbol: 'none',
|
symbol: 'none',
|
||||||
symbolSize: 5,
|
symbolSize: 5,
|
||||||
type: 'line',
|
type: 'line',
|
||||||
smooth: true,
|
...lineSeriesOpts,
|
||||||
barWidth: 22,
|
barWidth: 22,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
@@ -1335,7 +1378,7 @@ const rendering = () => {
|
|||||||
},
|
},
|
||||||
data: item.lowerLimit
|
data: item.lowerLimit
|
||||||
}
|
}
|
||||||
opitonserise.push(data)
|
opitonserise.push(withAxis(data, 0))
|
||||||
} else if (item.chufa !== undefined && item2 == '暂态触发点') {
|
} else if (item.chufa !== undefined && item2 == '暂态触发点') {
|
||||||
let data = {
|
let data = {
|
||||||
name: item2,
|
name: item2,
|
||||||
@@ -1348,14 +1391,14 @@ const rendering = () => {
|
|||||||
},
|
},
|
||||||
data: item.chufa
|
data: item.chufa
|
||||||
}
|
}
|
||||||
opitonserise.push(data)
|
opitonserise.push(withAxis(data, 0))
|
||||||
} else if (item.gvalue !== undefined && item2 == '频率') {
|
} else if (item.gvalue !== undefined && item2 == '频率') {
|
||||||
let data = {
|
let data = {
|
||||||
name: item2,
|
name: item2,
|
||||||
symbol: 'none',
|
symbol: 'none',
|
||||||
symbolSize: 5,
|
symbolSize: 5,
|
||||||
type: 'line',
|
type: 'line',
|
||||||
smooth: true,
|
...lineSeriesOpts,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: '#990099',
|
color: '#990099',
|
||||||
@@ -1368,7 +1411,7 @@ const rendering = () => {
|
|||||||
},
|
},
|
||||||
data: item.gvalue
|
data: item.gvalue
|
||||||
}
|
}
|
||||||
opitonserise.push(data)
|
opitonserise.push(withAxis(data, 0))
|
||||||
} else if (item.gvalue !== undefined && item2 == '负序电流') {
|
} else if (item.gvalue !== undefined && item2 == '负序电流') {
|
||||||
let data = {
|
let data = {
|
||||||
name: item2,
|
name: item2,
|
||||||
@@ -1383,7 +1426,7 @@ const rendering = () => {
|
|||||||
},
|
},
|
||||||
data: item.gvalue
|
data: item.gvalue
|
||||||
}
|
}
|
||||||
opitonserise.push(data)
|
opitonserise.push(withAxis(data, 0))
|
||||||
} else if (item.gvalue !== undefined && item2 == '三相电压不平衡度') {
|
} else if (item.gvalue !== undefined && item2 == '三相电压不平衡度') {
|
||||||
let data = {
|
let data = {
|
||||||
name: item2,
|
name: item2,
|
||||||
@@ -1398,7 +1441,7 @@ const rendering = () => {
|
|||||||
},
|
},
|
||||||
data: item.gvalue
|
data: item.gvalue
|
||||||
}
|
}
|
||||||
opitonserise.push(data)
|
opitonserise.push(withAxis(data, 0))
|
||||||
} else if (
|
} else if (
|
||||||
item.gvalue !== undefined &&
|
item.gvalue !== undefined &&
|
||||||
(item2 == '三相总有功功率' || item2 == '三相总无功功率' || item2 == '三相总视在功率')
|
(item2 == '三相总有功功率' || item2 == '三相总无功功率' || item2 == '三相总视在功率')
|
||||||
@@ -1411,12 +1454,12 @@ const rendering = () => {
|
|||||||
barWidth: 22,
|
barWidth: 22,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: '#0033ff'
|
color: '#526ADE'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data: item.gvalue
|
data: item.gvalue
|
||||||
}
|
}
|
||||||
opitonserise.push(data)
|
opitonserise.push(withAxis(data, 0))
|
||||||
} else if (item.gvalue !== undefined && (item2 == '总视在功率因数' || item2 == '总位移功率因数')) {
|
} else if (item.gvalue !== undefined && (item2 == '总视在功率因数' || item2 == '总位移功率因数')) {
|
||||||
let data = {
|
let data = {
|
||||||
name: item2,
|
name: item2,
|
||||||
@@ -1426,32 +1469,91 @@ const rendering = () => {
|
|||||||
barWidth: 22,
|
barWidth: 22,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: '#00FF00'
|
color: '#526ADE'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
data: item.gvalue
|
data: item.gvalue
|
||||||
}
|
}
|
||||||
opitonserise.push(data)
|
opitonserise.push(withAxis(data, 0))
|
||||||
}
|
}
|
||||||
// else {
|
// else {
|
||||||
// opitonserise.push([])
|
// opitonserise.push([])
|
||||||
// }
|
// }
|
||||||
})
|
})
|
||||||
if (item.valueName == undefined) {
|
if (item.valueName == undefined) {
|
||||||
item.valueName = '无'
|
item.valueName = ''
|
||||||
}
|
}
|
||||||
//console.log('渲染数据体',opitonserise)
|
//console.log('渲染数据体',opitonserise)
|
||||||
item.serise = opitonserise
|
item.serise = opitonserise
|
||||||
})
|
})
|
||||||
getEcharts()
|
getEcharts()
|
||||||
}
|
}
|
||||||
|
const measureTextWidth = (text: string, fontSize = 14) => {
|
||||||
|
const canvas = document.createElement('canvas')
|
||||||
|
const ctx = canvas.getContext('2d')
|
||||||
|
if (!ctx) return text.length * fontSize * 0.6
|
||||||
|
ctx.font = `${fontSize}px dinproRegular, sans-serif`
|
||||||
|
return ctx.measureText(text).width
|
||||||
|
}
|
||||||
|
const getYAxisLeftPadding = (yAxis: any) => {
|
||||||
|
const splitNumber = yAxis.splitNumber ?? 5
|
||||||
|
const min = yAxis.min ?? 0
|
||||||
|
const max = yAxis.max ?? 0
|
||||||
|
let maxLabelWidth = 0
|
||||||
|
const formatter = yAxis.axisLabel?.formatter
|
||||||
|
const formatLabel = (value: number) => {
|
||||||
|
if (formatter) {
|
||||||
|
const result = formatter(value)
|
||||||
|
return result != null && result !== '' ? String(result) : ''
|
||||||
|
}
|
||||||
|
return String(parseFloat(value.toFixed(1)))
|
||||||
|
}
|
||||||
|
if (yAxis.interval) {
|
||||||
|
for (let v = min; v <= max + yAxis.interval * 0.01; v += yAxis.interval) {
|
||||||
|
const label = formatLabel(v)
|
||||||
|
if (label) maxLabelWidth = Math.max(maxLabelWidth, measureTextWidth(label))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const step = splitNumber > 0 ? (max - min) / splitNumber : 0
|
||||||
|
for (let i = 0; i <= splitNumber; i++) {
|
||||||
|
const label = formatLabel(min + step * i)
|
||||||
|
if (label) maxLabelWidth = Math.max(maxLabelWidth, measureTextWidth(label))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const nameWidth = yAxis.name ? measureTextWidth(yAxis.name) : 0
|
||||||
|
return Math.ceil(Math.max(maxLabelWidth, nameWidth)) + 15
|
||||||
|
}
|
||||||
|
const alignChartsYAxis = () => {
|
||||||
|
let maxLeft = 50
|
||||||
|
let maxRight = 70
|
||||||
|
let hasDualAxis = false
|
||||||
|
list.value.forEach((item: any) => {
|
||||||
|
const yAxes = item.option?.yAxis || []
|
||||||
|
if (yAxes.length > 1) hasDualAxis = true
|
||||||
|
yAxes.forEach((yAxis: any, index: number) => {
|
||||||
|
const padding = getYAxisLeftPadding(yAxis)
|
||||||
|
if (yAxis.position === 'right' || (yAxes.length > 1 && index > 0)) {
|
||||||
|
maxRight = Math.max(maxRight, padding)
|
||||||
|
} else {
|
||||||
|
maxLeft = Math.max(maxLeft, padding)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
if (list.value.length <= 1 && !hasDualAxis) return
|
||||||
|
list.value.forEach((item: any) => {
|
||||||
|
const gridUpdate: any = { containLabel: false }
|
||||||
|
if (list.value.length > 1 || hasDualAxis) gridUpdate.left = maxLeft
|
||||||
|
if (hasDualAxis) gridUpdate.right = maxRight
|
||||||
|
item.option.grid = {
|
||||||
|
...item.option.grid,
|
||||||
|
...gridUpdate
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
const getEcharts = () => {
|
const getEcharts = () => {
|
||||||
list.value.forEach((item: any, i: number) => {
|
list.value.forEach((item: any, i: number) => {
|
||||||
|
const yAxisConfig = buildItemYAxis(item)
|
||||||
|
|
||||||
const values = item.value && item.value.length > 0 ? item.value.map(k => k[1]) : [0]
|
|
||||||
let [min, max] = yMethod([item.maxValue, item.minValue, ...values])
|
|
||||||
item.option = {
|
item.option = {
|
||||||
backgroundColor: '#fff',
|
backgroundColor: '#fff',
|
||||||
title: {
|
title: {
|
||||||
@@ -1470,14 +1572,14 @@ const getEcharts = () => {
|
|||||||
},
|
},
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
axisPointer: {
|
// axisPointer: {
|
||||||
//type: "shadow",
|
// //type: "shadow",
|
||||||
type: 'cross', // 默认为直线,可选为:'line' | 'shadow'
|
// type: 'cross', // 默认为直线,可选为:'line' | 'shadow'
|
||||||
label: {
|
// label: {
|
||||||
color: '#fff',
|
// color: '#fff',
|
||||||
fontSize: 16
|
// fontSize: 16
|
||||||
}
|
// }
|
||||||
},
|
// },
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#fff',
|
color: '#fff',
|
||||||
fontStyle: 'normal',
|
fontStyle: 'normal',
|
||||||
@@ -1503,54 +1605,63 @@ const getEcharts = () => {
|
|||||||
params[i].marker + params[i].value[1] > 0
|
params[i].marker + params[i].value[1] > 0
|
||||||
? 'A相谐波电流方向:流入<br/>'
|
? 'A相谐波电流方向:流入<br/>'
|
||||||
: params[i].value[1] == 0
|
: params[i].value[1] == 0
|
||||||
? 'A相谐波电流方向:无<br/>'
|
? 'A相谐波电流方向:无<br/>'
|
||||||
: 'A相谐波电流方向:流出<br/>'
|
: 'A相谐波电流方向:流出<br/>'
|
||||||
} else if (params[i].seriesName == 'B相谐波电流方向') {
|
} else if (params[i].seriesName == 'B相谐波电流方向') {
|
||||||
tips +=
|
tips +=
|
||||||
params[i].marker + params[i].value[1] > 0
|
params[i].marker + params[i].value[1] > 0
|
||||||
? 'B相谐波电流方向:流入<br/>'
|
? 'B相谐波电流方向:流入<br/>'
|
||||||
: params[i].value[1] == 0
|
: params[i].value[1] == 0
|
||||||
? 'B相谐波电流方向:无<br/>'
|
? 'B相谐波电流方向:无<br/>'
|
||||||
: 'B相谐波电流方向:流出<br/>'
|
: 'B相谐波电流方向:流出<br/>'
|
||||||
} else if (params[i].seriesName == 'C相谐波电流方向') {
|
} else if (params[i].seriesName == 'C相谐波电流方向') {
|
||||||
tips +=
|
tips +=
|
||||||
params[i].marker + params[i].value[1] > 0
|
params[i].marker + params[i].value[1] > 0
|
||||||
? 'C相谐波电流方向:流入<br/>'
|
? 'C相谐波电流方向:流入<br/>'
|
||||||
: params[i].value[1] == 0
|
: params[i].value[1] == 0
|
||||||
? 'C相谐波电流方向:无<br/>'
|
? 'C相谐波电流方向:无<br/>'
|
||||||
: 'C相谐波电流方向:流出<br/>'
|
: 'C相谐波电流方向:流出<br/>'
|
||||||
} else if (params[i].seriesName == '总谐波电流方向') {
|
} else if (params[i].seriesName == '总谐波电流方向') {
|
||||||
tips +=
|
tips +=
|
||||||
params[i].marker + params[i].value[1] > 0
|
params[i].marker + params[i].value[1] > 0
|
||||||
? '总谐波电流方向:流入<br/>'
|
? '总谐波电流方向:流入<br/>'
|
||||||
: params[i].value[1] == 0
|
: params[i].value[1] == 0
|
||||||
? '总谐波电流方向:无<br/>'
|
? '总谐波电流方向:无<br/>'
|
||||||
: '总谐波电流方向:流出<br/>'
|
: '总谐波电流方向:流出<br/>'
|
||||||
} else if (params[i].seriesName == '正序电压(kV)') {
|
} else if (params[i].seriesName.includes('正序电压')) {
|
||||||
let str = (params[i].value[1] * 1).toString()
|
let str = (params[i].value[1] * 1).toString()
|
||||||
let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g
|
let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g
|
||||||
let str1 = str.replace(reg, '$1,')
|
let str1 = str.replace(reg, '$1,')
|
||||||
let cleanStr = str1.replace(/,/g, '')
|
let cleanStr = str1.replace(/,/g, '')
|
||||||
let num = Number(cleanStr)
|
let num = Number(cleanStr)
|
||||||
|
const unitMatch = params[i].seriesName.match(/\(([^)]+)\)$/)
|
||||||
|
const unit = unitMatch ? unitMatch[1] : 'kV'
|
||||||
tips +=
|
tips +=
|
||||||
params[i].marker +
|
params[i].marker +
|
||||||
params[i].seriesName.replace('(kV)', '') +
|
params[i].seriesName.replace(/\([^)]+\)$/, '') +
|
||||||
':' +
|
':' +
|
||||||
(Number.isNaN(Number(num)) ? '/' : num) +
|
(Number.isNaN(Number(num)) ? '/' : num) +
|
||||||
'kV<br/>'
|
unit +
|
||||||
} else if (params[i].seriesName == '零序电压(V)' || params[i].seriesName == '负序电压(V)') {
|
'<br/>'
|
||||||
|
} else if (
|
||||||
|
params[i].seriesName.includes('零序电压') ||
|
||||||
|
params[i].seriesName.includes('负序电压')
|
||||||
|
) {
|
||||||
let str = (params[i].value[1] * 1).toString()
|
let str = (params[i].value[1] * 1).toString()
|
||||||
let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g
|
let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g
|
||||||
let str1 = str.replace(reg, '$1,')
|
let str1 = str.replace(reg, '$1,')
|
||||||
let cleanStr = str1.replace(/,/g, '')
|
let cleanStr = str1.replace(/,/g, '')
|
||||||
let num = Number(cleanStr)
|
let num = Number(cleanStr)
|
||||||
|
const unitMatch = params[i].seriesName.match(/\(([^)]+)\)$/)
|
||||||
|
const unit = unitMatch ? unitMatch[1] : 'V'
|
||||||
tips +=
|
tips +=
|
||||||
params[i].marker +
|
params[i].marker +
|
||||||
params[i].seriesName.replace('(V)', '') +
|
params[i].seriesName.replace(/\([^)]+\)$/, '') +
|
||||||
':' +
|
':' +
|
||||||
(Number.isNaN(Number(num)) ? '/' : num) +
|
(Number.isNaN(Number(num)) ? '/' : num) +
|
||||||
'V<br/>'
|
unit +
|
||||||
} else if (params[i].seriesName !== '正序电压(kV)') {
|
'<br/>'
|
||||||
|
} else if (!params[i].seriesName.includes('正序电压')) {
|
||||||
let str = (params[i].value[1] * 1).toString()
|
let str = (params[i].value[1] * 1).toString()
|
||||||
let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g
|
let reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g
|
||||||
let str1 = str.replace(reg, '$1,')
|
let str1 = str.replace(reg, '$1,')
|
||||||
@@ -1639,8 +1750,24 @@ const getEcharts = () => {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
grid: {
|
grid: {
|
||||||
top: '70px'
|
top: '50px',
|
||||||
|
bottom: '45px'
|
||||||
},
|
},
|
||||||
|
dataZoom: [
|
||||||
|
{
|
||||||
|
type: 'inside',
|
||||||
|
height: 13,
|
||||||
|
start: 0,
|
||||||
|
bottom: '10px',
|
||||||
|
end: 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
start: 0,
|
||||||
|
height: 13,
|
||||||
|
bottom: '10px',
|
||||||
|
end: 100
|
||||||
|
}
|
||||||
|
],
|
||||||
xAxis: [
|
xAxis: [
|
||||||
{
|
{
|
||||||
name: '时间',
|
name: '时间',
|
||||||
@@ -1665,38 +1792,7 @@ const getEcharts = () => {
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// },
|
// },
|
||||||
yAxis: [
|
yAxis: yAxisConfig,
|
||||||
{
|
|
||||||
type: 'value',
|
|
||||||
|
|
||||||
min: min,
|
|
||||||
max: max,
|
|
||||||
name: item.valueName,
|
|
||||||
minInterval: 1,
|
|
||||||
// max:10,
|
|
||||||
// min:0,
|
|
||||||
// axisLabel: {
|
|
||||||
// interval: 0,
|
|
||||||
// // formatter: function (value: any) {
|
|
||||||
// // return value.toFixed(0)
|
|
||||||
// // },
|
|
||||||
// left: '20px'
|
|
||||||
// },
|
|
||||||
|
|
||||||
axisLine: {
|
|
||||||
show: true,
|
|
||||||
onZero: false, //-----------重点
|
|
||||||
lineStyle: {}
|
|
||||||
}
|
|
||||||
// splitLine: {
|
|
||||||
// lineStyle: {
|
|
||||||
// // 使用深浅的间隔色
|
|
||||||
// type: 'dashed',
|
|
||||||
// opacity: 0.5
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
],
|
|
||||||
series: item.serise
|
series: item.serise
|
||||||
}
|
}
|
||||||
let aValues = []
|
let aValues = []
|
||||||
@@ -1801,13 +1897,14 @@ const getEcharts = () => {
|
|||||||
symbolSize: 0,
|
symbolSize: 0,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
color: '#0033ff'
|
color: '#526ADE'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
alignChartsYAxis()
|
||||||
echarts.connect('group')
|
echarts.connect('group')
|
||||||
}
|
}
|
||||||
const conditionChange = () => {
|
const conditionChange = () => {
|
||||||
@@ -1947,7 +2044,7 @@ const conditionChange = () => {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
//console.log('🚀 ~ setTimeout ~ tableHeaderRef.value:', tableHeaderRef.value)
|
//console.log('🚀 ~ setTimeout ~ tableHeaderRef.value:', tableHeaderRef.value)
|
||||||
|
|
||||||
//tableHeaderRef.value && tableHeaderRef.value?.computedSearchRow()
|
//tableHeaderRef.value && tableHeaderRef.value?.computedSearchRow()
|
||||||
}, 100)
|
}, 100)
|
||||||
|
|||||||
@@ -10,8 +10,14 @@
|
|||||||
></PointTree>
|
></PointTree>
|
||||||
</pane>
|
</pane>
|
||||||
<pane style="background: #fff" :style="height">
|
<pane style="background: #fff" :style="height">
|
||||||
<TableHeader ref="TableHeaderRef" datePicker @selectChange="selectChange">
|
<TableHeader ref="TableHeaderRef" datePicker :isStatisticData="isStatisticData" @selectChange="selectChange">
|
||||||
<template v-slot:select>
|
<template v-slot:select>
|
||||||
|
<el-form-item >
|
||||||
|
<el-radio-group v-model="isStatisticData" @change="onStatisticDataChange">
|
||||||
|
<el-radio-button value="1">统计数据</el-radio-button>
|
||||||
|
<el-radio-button value="0">分钟数据</el-radio-button>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item label="模板策略">
|
<el-form-item label="模板策略">
|
||||||
<el-select v-model="Template" @change="changetype" placeholder="请选择模版" value-key="id">
|
<el-select v-model="Template" @change="changetype" placeholder="请选择模版" value-key="id">
|
||||||
<el-option
|
<el-option
|
||||||
@@ -22,22 +28,10 @@
|
|||||||
></el-option>
|
></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="报表类型">
|
<!-- <el-form-item label="报表类型">
|
||||||
<el-input readonly type="text" value="分析报表"></el-input>
|
<el-input readonly type="text" value="分析报表"></el-input>
|
||||||
<!-- <el-select-->
|
|
||||||
<!-- :disabled="true"-->
|
</el-form-item> -->
|
||||||
<!-- v-model="reportForm"-->
|
|
||||||
<!-- :popper-append-to-body="false"-->
|
|
||||||
<!-- placeholder="请选择报表类型"-->
|
|
||||||
<!-- >-->
|
|
||||||
<!-- <el-option-->
|
|
||||||
<!-- v-for="item in reportFormList"-->
|
|
||||||
<!-- :key="item.value"-->
|
|
||||||
<!-- :label="item.label"-->
|
|
||||||
<!-- :value="item.value"-->
|
|
||||||
<!-- ></el-option>-->
|
|
||||||
<!-- </el-select>-->
|
|
||||||
</el-form-item>
|
|
||||||
</template>
|
</template>
|
||||||
<template #operation>
|
<template #operation>
|
||||||
<el-button icon="el-icon-Download" type="primary" @click="exportEvent">导出excel</el-button>
|
<el-button icon="el-icon-Download" type="primary" @click="exportEvent">导出excel</el-button>
|
||||||
@@ -85,6 +79,7 @@ const dotList: any = ref({})
|
|||||||
const Template: any = ref({})
|
const Template: any = ref({})
|
||||||
const reportForm: any = ref('')
|
const reportForm: any = ref('')
|
||||||
const name = ref('')
|
const name = ref('')
|
||||||
|
const isStatisticData = ref('1')
|
||||||
const templatePolicy: any = ref([])
|
const templatePolicy: any = ref([])
|
||||||
const reportFormList: any = ref([
|
const reportFormList: any = ref([
|
||||||
{
|
{
|
||||||
@@ -108,6 +103,11 @@ const tableStore = new TableStore({
|
|||||||
tableStore.table.params.tempId = Template.value.id
|
tableStore.table.params.tempId = Template.value.id
|
||||||
tableStore.table.params.lineId = dotList.value.id
|
tableStore.table.params.lineId = dotList.value.id
|
||||||
name.value = dotList.value.name
|
name.value = dotList.value.name
|
||||||
|
if (Number(isStatisticData.value) === 0) {
|
||||||
|
tableStore.table.params.isStatisticData = 0
|
||||||
|
} else {
|
||||||
|
delete tableStore.table.params.isStatisticData
|
||||||
|
}
|
||||||
},
|
},
|
||||||
loadCallback: () => {
|
loadCallback: () => {
|
||||||
tableStore.table.data.forEach((item: any) => {
|
tableStore.table.data.forEach((item: any) => {
|
||||||
@@ -160,6 +160,12 @@ getTemplateByDept({ id: dictData.state.area[0].id })
|
|||||||
const changetype = (val: any) => {
|
const changetype = (val: any) => {
|
||||||
reportForm.value = val.reportForm
|
reportForm.value = val.reportForm
|
||||||
}
|
}
|
||||||
|
const onStatisticDataChange = () => {
|
||||||
|
TableHeaderRef.value?.setTheDate(3)
|
||||||
|
if (dotList.value?.id) {
|
||||||
|
// tableStore.index()
|
||||||
|
}
|
||||||
|
}
|
||||||
const selectChange = () => {
|
const selectChange = () => {
|
||||||
//console.log('🚀 ~ selectChange ~ tableStore.table.data.lnegth :', tableStore.table.data.length)
|
//console.log('🚀 ~ selectChange ~ tableStore.table.data.lnegth :', tableStore.table.data.length)
|
||||||
if (tableStore.table.data.length != 0) {
|
if (tableStore.table.data.length != 0) {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<DatePicker ref="datePickerRef" style="display: none" theCurrentTime />
|
<DatePicker ref="datePickerRef" style="display: none" theCurrentTime />
|
||||||
<el-page-header :icon="ArrowLeft" @back="emit('back')">
|
<el-page-header :icon="ArrowLeft" @back="emit('back')">
|
||||||
<template #content>
|
<template #content>
|
||||||
<span style="font-size: 16px">{{ dropList.lineName }}详情 </span>
|
<span style="font-size: 16px">{{ dropList.objName ? dropList.objName + '_' : '' }}{{ dropList.lineName }}详情 </span>
|
||||||
<span style="font-weight: 500">最新数据时间:</span>
|
<span style="font-weight: 500">最新数据时间:</span>
|
||||||
<span style="color: var(--color-primary-default)">{{ dropList.updateTime }}</span>
|
<span style="color: var(--color-primary-default)">{{ dropList.updateTime }}</span>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
v-model.trim="inputQuery"
|
v-model.trim="inputQuery"
|
||||||
style="height: 46px; width: 334px"
|
style="height: 46px; width: 334px"
|
||||||
@keyup.enter="DeviceQ"
|
@keyup.enter="DeviceQ"
|
||||||
placeholder="请输入终端名称"
|
placeholder="请输入监测点相关信息"
|
||||||
>
|
>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<div class="Icon"></div>
|
<div class="Icon"></div>
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
@click="flyTo(k)"
|
@click="flyTo(k)"
|
||||||
>
|
>
|
||||||
<p>{{ k.psrName }}</p>
|
<p>{{ k.psrName }}</p>
|
||||||
<p>{{ k.vlevelName }}|{{ k.maintOrgName }}</p>
|
<p>{{ k.vlevelName }} | {{ k.maintOrgName }} {{ k.objName ? `| ${k.objName}` : '' }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-collapse-item>
|
</el-collapse-item>
|
||||||
@@ -484,6 +484,9 @@ const lookPoint = (e: any) => {
|
|||||||
emit('show', true)
|
emit('show', true)
|
||||||
}
|
}
|
||||||
// 搜索
|
// 搜索
|
||||||
|
const matchLineItem = (item: any, regex: RegExp) =>
|
||||||
|
regex.test(item.lineName) || (item.objName && regex.test(item.objName))
|
||||||
|
|
||||||
const DeviceQ = () => {
|
const DeviceQ = () => {
|
||||||
showCollapse.value = true
|
showCollapse.value = true
|
||||||
if (inputQuery.value.length == 0) return
|
if (inputQuery.value.length == 0) return
|
||||||
@@ -491,13 +494,14 @@ const DeviceQ = () => {
|
|||||||
let list = []
|
let list = []
|
||||||
let regex = new RegExp(inputQuery.value, 'i')
|
let regex = new RegExp(inputQuery.value, 'i')
|
||||||
let data = areaLineInfo.value
|
let data = areaLineInfo.value
|
||||||
.filter((item: any) => regex.test(item.lineName))
|
.filter((item: any) => matchLineItem(item, regex))
|
||||||
.map((item: any) => {
|
.map((item: any) => {
|
||||||
return {
|
return {
|
||||||
psrName: item.lineName,
|
psrName: item.lineName,
|
||||||
vlevelName: item.voltageScale,
|
vlevelName: item.voltageScale,
|
||||||
maintOrgName: item.gdName,
|
maintOrgName: item.gdName,
|
||||||
coordinate: [item.lng, item.lat]
|
coordinate: [item.lng, item.lat],
|
||||||
|
objName: item.objName
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
// data.replace(//s/g,',')
|
// data.replace(//s/g,',')
|
||||||
@@ -522,7 +526,7 @@ const flyTo = (e: any, zoom?: number) => {
|
|||||||
zoomMap.value = zoom
|
zoomMap.value = zoom
|
||||||
} else {
|
} else {
|
||||||
zoomMap.value = 15
|
zoomMap.value = 15
|
||||||
let data = areaLineInfo.value.filter((item: any) => regex.test(item.lineName))[0]
|
let data = areaLineInfo.value.filter((item: any) => matchLineItem(item, regex))[0]
|
||||||
if (data) {
|
if (data) {
|
||||||
markerClick(data)
|
markerClick(data)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,8 +31,8 @@
|
|||||||
<div>
|
<div>
|
||||||
<div class="vcl mt2">
|
<div class="vcl mt2">
|
||||||
<p
|
<p
|
||||||
v-for="(item, i) in vList"
|
v-for="(item, i) in displayVList"
|
||||||
:style="i == 0 ? 'width: 60px' : i == vList?.length - 1 ? 'width: 32px' : 'flex:1'"
|
:style="i == 0 ? 'width: 60px' : i == displayVList?.length - 1 ? IS_LN ? 'flex:1' : 'width: 32px' : 'flex:1'"
|
||||||
>
|
>
|
||||||
{{ item }}
|
{{ item }}
|
||||||
</p>
|
</p>
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
{{ item.title }}
|
{{ item.title }}
|
||||||
</p>
|
</p>
|
||||||
<p
|
<p
|
||||||
v-for="(k, i) in vList?.slice(0, vList.length - 2)"
|
v-for="(k, i) in dataVList"
|
||||||
class="numOne"
|
class="numOne"
|
||||||
@click="LookMap(item.list[i].numOneList, item.list[i].numTwoList, 0)"
|
@click="LookMap(item.list[i].numOneList, item.list[i].numTwoList, 0)"
|
||||||
>
|
>
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
<p class="numOne" @click="LookMap(item.list[3].numOneList, item.list[3].numTwoList, 0)">
|
<p class="numOne" @click="LookMap(item.list[3].numOneList, item.list[3].numTwoList, 0)">
|
||||||
{{ item.list[3].numOne }}
|
{{ item.list[3].numOne }}
|
||||||
</p> -->
|
</p> -->
|
||||||
<p
|
<p v-if="!IS_LN"
|
||||||
style="font-size: 12px; width: 32px; cursor: pointer; color: var(--el-color-primary)"
|
style="font-size: 12px; width: 32px; cursor: pointer; color: var(--el-color-primary)"
|
||||||
@click.stop="open(i)"
|
@click.stop="open(i)"
|
||||||
>
|
>
|
||||||
@@ -165,7 +165,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { onMounted, reactive, ref, provide } from 'vue'
|
import { onMounted, reactive, ref, provide, computed } from 'vue'
|
||||||
import { useDictData } from '@/stores/dictData'
|
import { useDictData } from '@/stores/dictData'
|
||||||
import { mainHeight } from '@/utils/layout'
|
import { mainHeight } from '@/utils/layout'
|
||||||
import { ArrowRight, View } from '@element-plus/icons-vue'
|
import { ArrowRight, View } from '@element-plus/icons-vue'
|
||||||
@@ -180,6 +180,7 @@ import {
|
|||||||
getGridDiagramRunData, getAreaObjAlarm
|
getGridDiagramRunData, getAreaObjAlarm
|
||||||
} from '@/api/device-boot/panorama'
|
} from '@/api/device-boot/panorama'
|
||||||
const emit = defineEmits(['LookMap', 'GridDiagram'])
|
const emit = defineEmits(['LookMap', 'GridDiagram'])
|
||||||
|
const IS_LN = import.meta.env.VITE_NAME == 'LN' || import.meta.env.VITE_NAME == 'LNqr'
|
||||||
const dictData = useDictData()
|
const dictData = useDictData()
|
||||||
const show = ref(false)
|
const show = ref(false)
|
||||||
const standRef = ref()
|
const standRef = ref()
|
||||||
@@ -391,6 +392,10 @@ const legengList = [
|
|||||||
]
|
]
|
||||||
const panoramicVoltage: any = dictData.getBasicData('Dev_Voltage_Stand')
|
const panoramicVoltage: any = dictData.getBasicData('Dev_Voltage_Stand')
|
||||||
const vList = ref(['', '500kV', '220kV', '110kV', '35kV', ''])
|
const vList = ref(['', '500kV', '220kV', '110kV', '35kV', ''])
|
||||||
|
const displayVList = computed(() => (IS_LN && vList.value.length ? vList.value.slice(0, -1) : vList.value))
|
||||||
|
const dataVList = computed(() =>
|
||||||
|
IS_LN ? vList.value.slice(1, -1) : vList.value.slice(0, vList.value.length - 2)
|
||||||
|
)
|
||||||
const formRow: any = ref({})
|
const formRow: any = ref({})
|
||||||
const height = mainHeight(30)
|
const height = mainHeight(30)
|
||||||
const boxHeight = mainHeight(290, 2)
|
const boxHeight = mainHeight(290, 2)
|
||||||
|
|||||||
@@ -4,12 +4,8 @@
|
|||||||
<template v-slot:select>
|
<template v-slot:select>
|
||||||
<el-form-item label="运行状态">
|
<el-form-item label="运行状态">
|
||||||
<el-select v-model="tableStore.table.params.lineRunFlag" clearable placeholder="请选择运行状态">
|
<el-select v-model="tableStore.table.params.lineRunFlag" clearable placeholder="请选择运行状态">
|
||||||
<el-option
|
<el-option v-for="item in runFlagList" :key="item.id" :label="item.name"
|
||||||
v-for="item in runFlagList"
|
:value="item.id"></el-option>
|
||||||
:key="item.id"
|
|
||||||
:label="item.name"
|
|
||||||
:value="item.id"
|
|
||||||
></el-option>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="筛选数据">
|
<el-form-item label="筛选数据">
|
||||||
@@ -40,14 +36,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div class="mb5" style="height: 40px">
|
<div class="mb5" style="height: 40px">
|
||||||
<el-segmented
|
<el-segmented style="height: 100%" v-model="segmented" :props="props" :options="segmentedList"
|
||||||
style="height: 100%"
|
block @change="tableStore.index()">
|
||||||
v-model="segmented"
|
|
||||||
:props="props"
|
|
||||||
:options="segmentedList"
|
|
||||||
block
|
|
||||||
@change="tableStore.index()"
|
|
||||||
>
|
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<div>
|
<div>
|
||||||
<div>{{ scope.item.name }}</div>
|
<div>{{ scope.item.name }}</div>
|
||||||
@@ -61,8 +51,8 @@
|
|||||||
segmented == 'Power_Network'
|
segmented == 'Power_Network'
|
||||||
? '区域'
|
? '区域'
|
||||||
: segmented == 'Manufacturer'
|
: segmented == 'Manufacturer'
|
||||||
? '终端厂家'
|
? '终端厂家'
|
||||||
: '电网标志'
|
: '电网标志'
|
||||||
}}
|
}}
|
||||||
</span>
|
</span>
|
||||||
<span style="width: 90px">终端总数</span>
|
<span style="width: 90px">终端总数</span>
|
||||||
@@ -77,33 +67,21 @@
|
|||||||
{{ o.name }}
|
{{ o.name }}
|
||||||
</span>
|
</span>
|
||||||
<!-- 终端总数 -->
|
<!-- 终端总数 -->
|
||||||
<span
|
<span style="width: 90px; color: #388e3c" class="text text-style"
|
||||||
style="width: 90px; color: #388e3c"
|
@click="renderTable(o.list, o.name + '_')">
|
||||||
class="text text-style"
|
|
||||||
@click="renderTable(o.list, o.name + '_')"
|
|
||||||
>
|
|
||||||
{{ o.count }}
|
{{ o.count }}
|
||||||
</span>
|
</span>
|
||||||
<!-- -->
|
<!-- -->
|
||||||
<span
|
<span style="flex: 1; color: #388e3c" class="text"
|
||||||
style="flex: 1; color: #388e3c"
|
:class="` ${o.integrity < 90 ? 'text-red' : ''}`">
|
||||||
class="text"
|
|
||||||
:class="` ${o.integrity < 90 ? 'text-red' : ''}`"
|
|
||||||
>
|
|
||||||
{{ o.integrity }}
|
{{ o.integrity }}
|
||||||
</span>
|
</span>
|
||||||
<span
|
<span style="width: 80px; color: #388e3c" :class="` ${o.online < 90 ? 'text-red' : ''}`"
|
||||||
style="width: 80px; color: #388e3c"
|
class="text">
|
||||||
:class="` ${o.online < 90 ? 'text-red' : ''}`"
|
|
||||||
class="text"
|
|
||||||
>
|
|
||||||
{{ o.online }}
|
{{ o.online }}
|
||||||
</span>
|
</span>
|
||||||
<span
|
<span style="width: 80px; color: #388e3c" :class="` ${o.qualified > 10 ? 'text-red' : ''}`"
|
||||||
style="width: 80px; color: #388e3c"
|
class="text">
|
||||||
:class="` ${o.qualified > 10 ? 'text-red' : ''}`"
|
|
||||||
class="text"
|
|
||||||
>
|
|
||||||
{{ o.qualified }}
|
{{ o.qualified }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
@@ -120,13 +98,8 @@
|
|||||||
<!--表格-->
|
<!--表格-->
|
||||||
|
|
||||||
<div :style="{ height: tableStore.table.height }" v-loading="loading">
|
<div :style="{ height: tableStore.table.height }" v-loading="loading">
|
||||||
<vxe-table
|
<vxe-table height="auto" :data="dataList.slice((pageNum - 1) * pageSize, pageNum * pageSize)"
|
||||||
height="auto"
|
v-bind="defaultAttribute" ref="tableRef" :scroll-y="{ enabled: true }">
|
||||||
:data="dataList.slice((pageNum - 1) * pageSize, pageNum * pageSize)"
|
|
||||||
v-bind="defaultAttribute"
|
|
||||||
ref="tableRef"
|
|
||||||
:scroll-y="{ enabled: true }"
|
|
||||||
>
|
|
||||||
<vxe-column type="seq" title="序号" width="80px">
|
<vxe-column type="seq" title="序号" width="80px">
|
||||||
<template #default="{ rowIndex }">
|
<template #default="{ rowIndex }">
|
||||||
<span>
|
<span>
|
||||||
@@ -146,19 +119,16 @@
|
|||||||
<vxe-column field="ip" title="终端IP" :formatter="formatter" width="120px"></vxe-column>
|
<vxe-column field="ip" title="终端IP" :formatter="formatter" width="120px"></vxe-column>
|
||||||
<vxe-column field="runFlag" title="运行状态" width="100px">
|
<vxe-column field="runFlag" title="运行状态" width="100px">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<el-tag
|
<el-tag :type="row.runFlag == '运行'
|
||||||
:type="
|
? 'success'
|
||||||
row.runFlag == '运行'
|
: row.runFlag == '停运'
|
||||||
? 'success'
|
|
||||||
: row.runFlag == '停运'
|
|
||||||
? 'danger'
|
? 'danger'
|
||||||
: row.runFlag == '检修'
|
: row.runFlag == '检修'
|
||||||
? 'warning'
|
? 'warning'
|
||||||
: row.runFlag == '调试'
|
: row.runFlag == '调试'
|
||||||
? 'warning'
|
? 'warning'
|
||||||
: 'danger'
|
: 'danger'
|
||||||
"
|
">
|
||||||
>
|
|
||||||
{{ row.runFlag }}
|
{{ row.runFlag }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
@@ -169,14 +139,9 @@
|
|||||||
</vxe-table>
|
</vxe-table>
|
||||||
</div>
|
</div>
|
||||||
<div class="table-pagination">
|
<div class="table-pagination">
|
||||||
<el-pagination
|
<el-pagination v-model:currentPage="pageNum" v-model:page-size="pageSize"
|
||||||
v-model:currentPage="pageNum"
|
:page-sizes="[10, 20, 50, 100, 200]" background
|
||||||
v-model:page-size="pageSize"
|
layout="sizes,total, ->, prev, pager, next, jumper" :total="dataList.length"></el-pagination>
|
||||||
:page-sizes="[10, 20, 50, 100, 200]"
|
|
||||||
background
|
|
||||||
layout="sizes,total, ->, prev, pager, next, jumper"
|
|
||||||
:total="dataList.length"
|
|
||||||
></el-pagination>
|
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
@@ -187,7 +152,7 @@
|
|||||||
import TableStore from '@/utils/tableStore'
|
import TableStore from '@/utils/tableStore'
|
||||||
import Table from '@/components/table/index.vue'
|
import Table from '@/components/table/index.vue'
|
||||||
import TableHeader from '@/components/table/header/index.vue'
|
import TableHeader from '@/components/table/header/index.vue'
|
||||||
import { onMounted, provide, ref } from 'vue'
|
import { onMounted, provide, ref, nextTick } from 'vue'
|
||||||
import { defaultAttribute } from '@/components/table/defaultAttribute'
|
import { defaultAttribute } from '@/components/table/defaultAttribute'
|
||||||
import { useDictData } from '@/stores/dictData'
|
import { useDictData } from '@/stores/dictData'
|
||||||
import { mainHeight } from '@/utils/layout'
|
import { mainHeight } from '@/utils/layout'
|
||||||
@@ -273,7 +238,7 @@ const tableStore = new TableStore({
|
|||||||
if (tableStore.table.params.statisticalType.name == '终端厂家') {
|
if (tableStore.table.params.statisticalType.name == '终端厂家') {
|
||||||
return k.count != 0
|
return k.count != 0
|
||||||
} else {
|
} else {
|
||||||
return !k.citName.includes('上送')
|
return !k.name.includes('上送')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
// 合并子集数据 并去重
|
// 合并子集数据 并去重
|
||||||
@@ -465,15 +430,9 @@ const onExport = () => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
// TableHeaderRef.value.setDatePicker([
|
nextTick(() => {
|
||||||
// { label: '年份', value: 1 },
|
TableHeaderRef.value?.onComSearch()
|
||||||
// { label: '季度', value: 2 },
|
})
|
||||||
// { label: '月份', value: 3 }
|
|
||||||
// ])
|
|
||||||
|
|
||||||
// 加载数据
|
|
||||||
|
|
||||||
tableStore.index()
|
|
||||||
})
|
})
|
||||||
|
|
||||||
tableStore.table.params.name = ''
|
tableStore.table.params.name = ''
|
||||||
@@ -482,14 +441,17 @@ provide('tableStore', tableStore)
|
|||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.card-list {
|
.card-list {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
||||||
.monitoringPoints {
|
.monitoringPoints {
|
||||||
width: 460px;
|
width: 460px;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
.statistics {
|
.statistics {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
|
|
||||||
.divBox {
|
.divBox {
|
||||||
width: 215x;
|
width: 215x;
|
||||||
height: 70px;
|
height: 70px;
|
||||||
@@ -500,33 +462,41 @@ provide('tableStore', tableStore)
|
|||||||
font-size: 40px;
|
font-size: 40px;
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.divBox_title {
|
.divBox_title {
|
||||||
font-weight: 550;
|
font-weight: 550;
|
||||||
}
|
}
|
||||||
|
|
||||||
.divBox_num {
|
.divBox_num {
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
font-weight: 550;
|
font-weight: 550;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
font-family: AlimamaDongFangDaKai;
|
font-family: AlimamaDongFangDaKai;
|
||||||
}
|
}
|
||||||
|
|
||||||
align-items: center;
|
align-items: center;
|
||||||
// text-align: center;
|
// text-align: center;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
|
|
||||||
&:nth-child(1) {
|
&:nth-child(1) {
|
||||||
background-color: #eef8f0;
|
background-color: #eef8f0;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:nth-child(2) {
|
&:nth-child(2) {
|
||||||
background-color: #fff6ed;
|
background-color: #fff6ed;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:nth-child(3) {
|
&:nth-child(3) {
|
||||||
background-color: #e5f8f6;
|
background-color: #e5f8f6;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.detail {
|
.detail {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.abnormal {
|
.abnormal {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background-color: #f3f6f9;
|
background-color: #f3f6f9;
|
||||||
@@ -535,9 +505,11 @@ provide('tableStore', tableStore)
|
|||||||
// justify-content: space-between;
|
// justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
padding: 5px 0px 5px 10px;
|
padding: 5px 0px 5px 10px;
|
||||||
|
|
||||||
.iconDiv {
|
.iconDiv {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
div {
|
div {
|
||||||
width: 4px;
|
width: 4px;
|
||||||
height: 18px;
|
height: 18px;
|
||||||
@@ -545,6 +517,7 @@ provide('tableStore', tableStore)
|
|||||||
background-color: var(--el-color-primary);
|
background-color: var(--el-color-primary);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.text {
|
.text {
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
@@ -555,6 +528,7 @@ provide('tableStore', tableStore)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.header {
|
.header {
|
||||||
display: flex;
|
display: flex;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
@@ -562,40 +536,50 @@ provide('tableStore', tableStore)
|
|||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-card__header) {
|
:deep(.el-card__header) {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
|
|
||||||
span {
|
span {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-card__body) {
|
:deep(.el-card__body) {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.iconFont {
|
.iconFont {
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
.form {
|
.form {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
.form_but {
|
.form_but {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: -22px;
|
right: -22px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-header {
|
.card-header {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.table_name) {
|
:deep(.table_name) {
|
||||||
color: var(--el-color-primary);
|
color: var(--el-color-primary);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
text-underline-offset: 4px;
|
text-underline-offset: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.echartTitle {
|
.echartTitle {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
|
|
||||||
div:nth-child(2) {
|
div:nth-child(2) {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
color: #ff6600;
|
color: #ff6600;
|
||||||
@@ -605,20 +589,25 @@ provide('tableStore', tableStore)
|
|||||||
:deep(.el-segmented__item-selected, ) {
|
:deep(.el-segmented__item-selected, ) {
|
||||||
clip-path: polygon(10% 0, 100% 0, 90% 100%, 0 100%);
|
clip-path: polygon(10% 0, 100% 0, 90% 100%, 0 100%);
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-segmented__item, ) {
|
:deep(.el-segmented__item, ) {
|
||||||
clip-path: polygon(10% 0, 100% 0, 90% 100%, 0 100%);
|
clip-path: polygon(10% 0, 100% 0, 90% 100%, 0 100%);
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-segmented) {
|
:deep(.el-segmented) {
|
||||||
clip-path: polygon(4% 0, 100% 0, 96% 100%, 0 100%);
|
clip-path: polygon(4% 0, 100% 0, 96% 100%, 0 100%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-red {
|
.text-red {
|
||||||
color: #ff9100 !important;
|
color: #ff9100 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-style {
|
.text-style {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
.segmentedIcon {
|
.segmentedIcon {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 1px;
|
top: 1px;
|
||||||
@@ -631,6 +620,7 @@ provide('tableStore', tableStore)
|
|||||||
color: #fff;
|
color: #fff;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.table-pagination {
|
.table-pagination {
|
||||||
height: 58px;
|
height: 58px;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
|||||||
Reference in New Issue
Block a user