完成承载能力评估联调
This commit is contained in:
@@ -14,9 +14,10 @@
|
||||
:model="form"
|
||||
label-width="150px"
|
||||
:rules="rules"
|
||||
:disabled="props.rowList.id != undefined"
|
||||
style="max-width: 500px; margin: auto"
|
||||
>
|
||||
<el-form-item label="用户模式" prop="ptType">
|
||||
<el-form-item label="用户模式" prop="userMode">
|
||||
<el-select v-model="form.userMode" placeholder="请选择用户模式">
|
||||
<el-option
|
||||
v-for="item in ModeList"
|
||||
@@ -94,21 +95,34 @@
|
||||
<el-card>
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<span>干扰源用户</span>
|
||||
<el-button type="primary" size="default" icon="el-icon-Plus" @click="add">新增</el-button>
|
||||
<span>干扰源用户:</span>
|
||||
<el-select
|
||||
v-model="userId"
|
||||
placeholder="请选择用户"
|
||||
style="width: 240px; font-weight: normal"
|
||||
:disabled="props.rowList.id != undefined"
|
||||
@change="selChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in userData"
|
||||
:key="item.userId"
|
||||
:label="item.userName"
|
||||
:value="item.userId"
|
||||
/>
|
||||
</el-select>
|
||||
</div>
|
||||
</template>
|
||||
<div :style="`height: calc(${height} / 2 - 128px);overflow-y: auto`">
|
||||
<vxe-table v-bind="defaultAttribute" height="auto" :data="tableData">
|
||||
<vxe-column field="userName" title="用户名称"></vxe-column>
|
||||
<vxe-column field="userType" title="用户类型" :formatter="formatter"></vxe-column>
|
||||
<vxe-column field="voltage" title="电压等级(V)" :formatter="formatter"></vxe-column>
|
||||
<vxe-column field="protocolCapacity" title="用户协议容量(MVA)"></vxe-column>
|
||||
<vxe-column field="num6" title="操作" width="120">
|
||||
<template #default="{ row }">
|
||||
<el-button type="danger" link @click="deleteData(row)">删除</el-button>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-table
|
||||
v-bind="defaultAttribute"
|
||||
ref="vxeRef"
|
||||
height="auto"
|
||||
v-loading="loading"
|
||||
:data="equipmentList"
|
||||
>
|
||||
<vxe-column field="devName" title="设备名称"></vxe-column>
|
||||
<vxe-column field="devScale" title="电压等级" :formatter="formatter"></vxe-column>
|
||||
<vxe-column field="protocolCapacity" title="设备容量(MVA)"></vxe-column>
|
||||
</vxe-table>
|
||||
</div>
|
||||
</el-card>
|
||||
@@ -137,11 +151,11 @@
|
||||
<vxe-column field="name" title="谐波次数" width="180"></vxe-column>
|
||||
<vxe-column v-for="item in column" :field="item.field" :title="item.title">
|
||||
<template #default="row">
|
||||
<span @click="log(row)" v-if="row.row.name == '是否允许值'">
|
||||
<span v-if="row.row.name == '是否允许值'">
|
||||
<Select v-if="row.row[row.column.field]" class="SelectIcon" />
|
||||
<InfoFilled v-else class="SelectIcon" style="color: #f38d07;"/>
|
||||
<InfoFilled v-else class="SelectIcon" style="color: #f38d07" />
|
||||
</span>
|
||||
<span @click="log(row)" v-else>{{ row.row[row.column.field] }}</span>
|
||||
<span v-else>{{ row.row[row.column.field] }}</span>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
@@ -152,26 +166,12 @@
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
<el-button type="primary" icon="el-icon-Document" @click="assess">承载能力评估</el-button>
|
||||
<el-button type="primary" icon="el-icon-Document" @click="assess" v-if="props.rowList.id == undefined">
|
||||
承载能力评估
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
<el-dialog v-model="dialogVisible" title="新增干扰源类型" width="70%">
|
||||
<el-form :inline="true" :model="formInline" class="demo-form-inline">
|
||||
<el-form-item label="用户类型">
|
||||
<el-select v-model="formInline.userType" placeholder="请选择用户类型">
|
||||
<el-option v-for="item in uesrList" :key="item.id" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="电压等级">
|
||||
<el-select v-model="formInline.voltage" placeholder="请选择电压等级">
|
||||
<el-option v-for="item in levelList" :key="item.id" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-Search" @click="getUser">查询</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<vxe-table v-bind="defaultAttribute" height="400px" ref="xTable" :data="userData">
|
||||
<vxe-column type="checkbox" width="60"></vxe-column>
|
||||
<vxe-column field="userName" title="用户名称"></vxe-column>
|
||||
@@ -194,9 +194,10 @@ import { defaultAttribute } from '@/components/table/defaultAttribute'
|
||||
import MyEChart from '@/components/echarts/MyEchart.vue'
|
||||
import { useDictData } from '@/stores/dictData'
|
||||
import { mainHeight } from '@/utils/layout'
|
||||
import { Select ,InfoFilled} from '@element-plus/icons-vue'
|
||||
import { Select, InfoFilled } from '@element-plus/icons-vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { queyDetailUser, carryCapacityEvaluate } from '@/api/advance-boot/bearingCapacity'
|
||||
import { queyDetailUser, carryCapacityEvaluate, queyDeviceList } from '@/api/advance-boot/bearingCapacity'
|
||||
const props = defineProps(['rowList'])
|
||||
const dictData = useDictData()
|
||||
const height = mainHeight(80).height
|
||||
const levelList = dictData.getBasicData('Dev_Voltage_Stand')
|
||||
@@ -206,8 +207,9 @@ const ModeList = dictData.getBasicData('carry_capcity_user_mode')
|
||||
const uesrList = dictData.getBasicData('CARRY_CAPCITY_USER_TYPE', ['Power_Station_Users'])
|
||||
const xTable = ref()
|
||||
const formRef = ref()
|
||||
const vxeRef = ref()
|
||||
const loading = ref(false)
|
||||
const outcome: any = ref([])
|
||||
|
||||
const factor = [
|
||||
{
|
||||
name: 0.95,
|
||||
@@ -234,10 +236,11 @@ const factor = [
|
||||
id: 1.0
|
||||
}
|
||||
]
|
||||
|
||||
const dialogVisible = ref(false)
|
||||
const showFlag = ref(false)
|
||||
const tableData = ref([])
|
||||
const equipmentList: any = ref([])
|
||||
const userId = ref('')
|
||||
const level2Data = ref([
|
||||
{
|
||||
name: '谐波电流幅值(A)'
|
||||
@@ -251,13 +254,7 @@ const level2Data = ref([
|
||||
])
|
||||
|
||||
const column: any = ref([])
|
||||
const userData = ref([])
|
||||
const formInline = ref({
|
||||
userType: uesrList[0].id,
|
||||
voltage: levelList[0].id,
|
||||
pageNum: 1,
|
||||
pageSize: 10000
|
||||
})
|
||||
const userData: any = ref([])
|
||||
const form: any = ref({
|
||||
ptType: '0',
|
||||
connectionMode: '',
|
||||
@@ -278,15 +275,10 @@ const rules = {
|
||||
deviceCapacity: [{ required: true, message: '请填入最小短路容量', trigger: 'blur' }]
|
||||
}
|
||||
const pieCharts = ref({})
|
||||
// 新增
|
||||
const add = () => {
|
||||
dialogVisible.value = true
|
||||
xTable.value?.clearCheckboxRow()
|
||||
xTable.value?.setCheckboxRow(tableData.value, true)
|
||||
}
|
||||
|
||||
// 查询用户
|
||||
const getUser = () => {
|
||||
queyDetailUser(formInline.value).then(res => {
|
||||
queyDetailUser({ pageNum: 1, pageSize: 10000, userTypeList: uesrList.map(item => item.id) }).then(res => {
|
||||
userData.value = res.data.records
|
||||
})
|
||||
}
|
||||
@@ -298,116 +290,140 @@ const addUse = () => {
|
||||
// tableData.value = tableData.value.filter((arr: any) => !res.has(arr.userId) && res.set(arr.userId, 1))
|
||||
dialogVisible.value = false
|
||||
}
|
||||
// 删除
|
||||
const deleteData = (row: any) => {
|
||||
tableData.value = tableData.value.filter((item: any) => {
|
||||
return !row.userId.includes(item.userId)
|
||||
})
|
||||
}
|
||||
// 查看设备
|
||||
const equipment = (row: any) => {}
|
||||
// 承载能力评估
|
||||
const assess = () => {
|
||||
if (tableData.value.length == 0) {
|
||||
// vxeRef.value.getRadioRecord()
|
||||
|
||||
if (equipmentList.value.length == null) {
|
||||
return ElMessage.warning('请选择用户')
|
||||
}
|
||||
formRef.value.validate((valid: any) => {
|
||||
if (valid) {
|
||||
column.value = []
|
||||
let ChartsList = [
|
||||
{
|
||||
name: '安全',
|
||||
value: 0
|
||||
},
|
||||
{
|
||||
name: 'III级',
|
||||
value: 0
|
||||
},
|
||||
{
|
||||
name: 'II级',
|
||||
value: 0
|
||||
},
|
||||
{
|
||||
name: 'I级',
|
||||
value: 0
|
||||
},
|
||||
{
|
||||
name: '禁止接入',
|
||||
value: 0
|
||||
}
|
||||
]
|
||||
form.value.userList = tableData.value
|
||||
form.value.devList = equipmentList.value
|
||||
carryCapacityEvaluate(form.value).then(res => {
|
||||
outcome.value = res.data
|
||||
res.data.iresultList.forEach((item: any) => {
|
||||
column.value.push({
|
||||
title: item.time + '次',
|
||||
field: 'num' + item.time
|
||||
})
|
||||
|
||||
level2Data.value[0]['num' + item.time] = item.i.toFixed(3)
|
||||
level2Data.value[1]['num' + item.time] = item.i_limit.toFixed(3)
|
||||
level2Data.value[2]['num' + item.time] = item.i < item.i_limit ? true : false
|
||||
})
|
||||
showFlag.value = true
|
||||
res.data.reslutLevel == null ? '' : (ChartsList[res.data.reslutLevel - 1].value = 1)
|
||||
rendering(res.data)
|
||||
})
|
||||
|
||||
pieCharts.value = {
|
||||
title: {
|
||||
text: '承载能力评估结果',
|
||||
x: 'center',
|
||||
top: `30px`,
|
||||
textStyle: {
|
||||
fontWeight: 'normal'
|
||||
}
|
||||
},
|
||||
legend: {
|
||||
type: 'scroll',
|
||||
orient: 'vertical',
|
||||
left: 10,
|
||||
top: '10%'
|
||||
},
|
||||
|
||||
xAxis: {
|
||||
show: false
|
||||
},
|
||||
yAxis: {
|
||||
show: false
|
||||
},
|
||||
color: ['#77DA63', '#00BFF5', '#FFBF00', '#Ff6600', '#ff0000'],
|
||||
dataZoom: { show: false },
|
||||
series: [
|
||||
{
|
||||
type: 'pie',
|
||||
center: ['50%', '50%'],
|
||||
radius: ['35%', '48%'],
|
||||
label: {
|
||||
normal: {
|
||||
show: false
|
||||
}
|
||||
},
|
||||
data: ChartsList
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
// 设置图
|
||||
const rendering = (row: any) => {
|
||||
column.value = []
|
||||
let ChartsList = [
|
||||
{
|
||||
name: '安全',
|
||||
value: 0
|
||||
},
|
||||
{
|
||||
name: 'III级',
|
||||
value: 0
|
||||
},
|
||||
{
|
||||
name: 'II级',
|
||||
value: 0
|
||||
},
|
||||
{
|
||||
name: 'I级',
|
||||
value: 0
|
||||
},
|
||||
{
|
||||
name: '禁止接入',
|
||||
value: 0
|
||||
}
|
||||
]
|
||||
outcome.value = row
|
||||
row.iresultList.forEach((item: any) => {
|
||||
column.value.push({
|
||||
title: item.time + '次',
|
||||
field: 'num' + item.time
|
||||
})
|
||||
|
||||
level2Data.value[0]['num' + item.time] = item.i.toFixed(3)
|
||||
level2Data.value[1]['num' + item.time] = item.i_limit.toFixed(3)
|
||||
level2Data.value[2]['num' + item.time] = item.i < item.i_limit ? true : false
|
||||
})
|
||||
showFlag.value = true
|
||||
row.reslutLevel == null ? '' : (ChartsList[row.reslutLevel - 1].value = 1)
|
||||
pieCharts.value = {
|
||||
title: {
|
||||
text: '承载能力评估结果',
|
||||
x: 'center',
|
||||
top: `30px`,
|
||||
textStyle: {
|
||||
fontWeight: 'normal'
|
||||
}
|
||||
},
|
||||
legend: {
|
||||
type: 'scroll',
|
||||
orient: 'vertical',
|
||||
left: 10,
|
||||
top: '10%'
|
||||
},
|
||||
|
||||
xAxis: {
|
||||
show: false
|
||||
},
|
||||
yAxis: {
|
||||
show: false
|
||||
},
|
||||
color: ['#77DA63', '#00BFF5', '#FFBF00', '#Ff6600', '#ff0000'],
|
||||
dataZoom: { show: false },
|
||||
series: [
|
||||
{
|
||||
type: 'pie',
|
||||
center: ['50%', '50%'],
|
||||
radius: ['35%', '48%'],
|
||||
label: {
|
||||
normal: {
|
||||
show: false
|
||||
}
|
||||
},
|
||||
data: ChartsList
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
// 过滤数据
|
||||
const formatter = (row: any) => {
|
||||
if (row.column.field == 'userType') {
|
||||
return uesrList.filter(item => item.id == row.cellValue)[0].name
|
||||
} else if (row.column.field == 'devScale') {
|
||||
return levelList.filter(item => item.id == row.cellValue)[0].name
|
||||
} else if (row.column.field == 'voltage') {
|
||||
return levelList.filter(item => item.id == row.cellValue)[0].name
|
||||
} else {
|
||||
return row.cellValue
|
||||
}
|
||||
}
|
||||
const log = row => {
|
||||
console.log('🚀 ~ log ~ row:', row)
|
||||
// 查询设备
|
||||
const selChange = (e: any) => {
|
||||
loading.value = true
|
||||
queyDeviceList({
|
||||
userId: e
|
||||
}).then(res => {
|
||||
loading.value = false
|
||||
equipmentList.value = res.data
|
||||
})
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getUser()
|
||||
formRef.value?.resetFields()
|
||||
// 查看
|
||||
console.log('🚀 ~ onMounted ~ props.rowList:', props.rowList)
|
||||
|
||||
if (props.rowList.userId != undefined) {
|
||||
form.value = props.rowList
|
||||
userId.value = props.rowList.userId
|
||||
selChange(props.rowList.userId)
|
||||
rendering({
|
||||
firstResult: props.rowList.firstResult,
|
||||
iresultList: props.rowList.iresultList
|
||||
})
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
@@ -421,8 +437,6 @@ onMounted(() => {
|
||||
}
|
||||
.card-header {
|
||||
font-weight: 600;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.SelectIcon {
|
||||
height: 30px;
|
||||
|
||||
Reference in New Issue
Block a user