完成承载能力评估联调

This commit is contained in:
GGJ
2024-03-21 20:13:25 +08:00
parent e6deaa3fb1
commit 2532bd0851
13 changed files with 500 additions and 327 deletions

View File

@@ -147,3 +147,43 @@ export function carryCapacityEvaluate(data) {
data
})
}
// 承载能力评估用户批量删除
export function remove(data) {
return createAxios({
url: '/advance-boot/result/remove',
method: 'POST',
params: data
})
}
// 承载能力评估用户设备查询
export function queyDeviceList(data) {
return createAxios({
url: '/advance-boot/carrycapacitydev/queyDeviceList',
method: 'POST',
data
})
}
// 新增设备
export function addDev(data) {
return createAxios({
url: '/advance-boot/carrycapacitydev/add',
method: 'POST',
data
})
}
// 修改设备
export function updateDev(data) {
return createAxios({
url: '/advance-boot/carrycapacitydev/update',
method: 'POST',
data
})
}
// 删除设备
export function removeDev(data) {
return createAxios({
url: '/advance-boot/carrycapacitydev/remove',
method: 'POST',
params: data
})
}

View File

@@ -28,7 +28,6 @@ const treeRef = ref()
const loadData = () => {
let nodeKey = ''
carryCapacityTree().then(res => {
console.log(res)
nodeKey = res.data[0].children[0].children[0].children[0].children[0].children[0].id
emit('init', res.data[0].children[0].children[0].children[0].children[0].children[0])
tree.value = res.data[0].children[0].children
@@ -41,6 +40,10 @@ const loadData = () => {
})
}
loadData()
const setKey = (key: string) => {
treeRef.value.treeRef.setCurrentKey(key)
}
defineExpose({ setKey })
</script>
<style lang="scss">
.point-tree {

View File

@@ -1,30 +1,30 @@
<template>
<div class="point-tree">
<div style="flex: 1; overflow: hidden">
<vxe-table
ref="tableRef"
<el-input
v-model="input"
style="width: 240px"
placeholder="请输入电站数"
class="mr10"
@input="handleEdit"
></el-input>
<el-button type="primary" :disabled="!input.length > 0" icon="el-icon-Operation" @click="Tick">
按配置勾选
</el-button>
<el-tree
style="height: 550px; overflow-y: auto; overflow-x: hidden"
:data="tree"
height="auto"
v-bind="defaultAttribute"
:tree-config="{ children: 'children', expandAll: true }"
>
<vxe-column field="name" align="left" title="部门" tree-node></vxe-column>
<vxe-column width="200" title="操作">
<template #default="{ row }">
<el-button type="primary" size="small" link @click="tactics(row.id, 0)">自动</el-button>
<el-button type="primary" size="small" link @click="tactics(row.id, 1)">手动</el-button>
<el-button type="primary" size="small" link @click="tactics(row.id, 2)">排除</el-button>
</template>
</vxe-column>
</vxe-table>
</div>
show-checkbox
default-expand-all
node-key="id"
:default-expanded-keys="[2, 3]"
:default-checked-keys="[5]"
:props="defaultProps"
/>
</div>
</template>
<script lang="ts" setup>
import { nextTick, onMounted, ref, useAttrs } from 'vue'
import { defaultAttribute } from '@/components/table/defaultAttribute'
import { ElTree } from 'element-plus'
import { useDictData } from '@/stores/dictData'
import { initDetpStataionTree } from '@/api/process-boot/generalTest'
@@ -40,6 +40,7 @@ const dictData = useDictData()
const config = useConfig()
const tree = ref()
const treeRef = ref()
const input: any = ref('')
const loadData = () => {
let nodeKey = ''
@@ -48,6 +49,9 @@ const loadData = () => {
tree.value = res.data
})
}
const handleEdit = () => {}
// 配置
const Tick = () => {}
const tactics = (deptId, grade) => {
emit('tactics', deptId, grade)
}
@@ -55,21 +59,9 @@ loadData()
</script>
<style lang="scss">
.point-tree {
height: 100%;
width: 100%;
display: flex;
flex-direction: column;
padding: 10px;
background: #fff;
border: 1px solid var(--el-border-color);
}
.custom {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
padding-right: 20px;
// font-size: 14px;
// padding-right: 8px;
}
</style>

View File

@@ -96,6 +96,7 @@ function createAxios<Data = any, T = ApiPromise<Data>>(
response.data.code === 'A0000' ||
response.data.type === 'application/json' ||
response.data.type === 'application/octet-stream' ||
response.data.type === 'text/xml' ||
response.data.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
) {
return options.reductDataFormat ? response.data : response

View File

@@ -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,19 +290,26 @@ 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) {
form.value.devList = equipmentList.value
carryCapacityEvaluate(form.value).then(res => {
rendering(res.data)
})
}
})
}
// 设置图
const rendering = (row: any) => {
column.value = []
let ChartsList = [
{
@@ -334,10 +333,8 @@ const assess = () => {
value: 0
}
]
form.value.userList = tableData.value
carryCapacityEvaluate(form.value).then(res => {
outcome.value = res.data
res.data.iresultList.forEach((item: any) => {
outcome.value = row
row.iresultList.forEach((item: any) => {
column.value.push({
title: item.time + '次',
field: 'num' + item.time
@@ -348,9 +345,7 @@ const assess = () => {
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)
})
row.reslutLevel == null ? '' : (ChartsList[row.reslutLevel - 1].value = 1)
pieCharts.value = {
title: {
text: '承载能力评估结果',
@@ -389,25 +384,46 @@ const assess = () => {
}
]
}
}
})
}
// 过滤数据
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;

View File

@@ -2,16 +2,17 @@
<div>
<splitpanes :style="{ height: height }" class="default-theme" id="navigation-splitpanes">
<pane :size="size">
<PointTree
<bearingTree
ref="TreeRef"
:default-expand-all="false"
:default-expanded-keys="monitoringPoint.state.lineId ? [monitoringPoint.state.lineId] : []"
:current-node-key="monitoringPoint.state.lineId"
@node-click="handleNodeClick"
@init="handleNodeClick"
></PointTree>
></bearingTree>
</pane>
<pane style="background: #fff">
<el-form :inline="true">
<el-form :inline="true" v-show="props.rowList.id == undefined">
<el-form-item label="日期">
<DatePicker ref="datePickerRef"></DatePicker>
</el-form-item>
@@ -33,6 +34,7 @@
placeholder="请选择待评估用户"
size="small"
filterable
:disabled="props.rowList.id != undefined"
style="width: 240px"
value-key="id"
@change="userChange"
@@ -118,7 +120,12 @@
</el-col>
</el-row>
<el-button type="primary" icon="el-icon-Document" @click="assess" v-show="showBtn">
<el-button
type="primary"
icon="el-icon-Document"
@click="assess"
v-show="showBtn && props.rowList.id == undefined"
>
承载能力评估
</el-button>
</div>
@@ -127,11 +134,12 @@
</splitpanes>
</div>
</template>
<script setup lang="ts">
import { onMounted, ref, provide } from 'vue'
import 'splitpanes/dist/splitpanes.css'
import { Splitpanes, Pane } from 'splitpanes'
import PointTree from '@/components/tree/pqs/loadBearingTree.vue'
import bearingTree from '@/components/tree/pqs/bearingTree.vue'
import DatePicker from '@/components/form/datePicker/index.vue'
import { mainHeight } from '@/utils/layout'
import MyEChart from '@/components/echarts/MyEchart.vue'
@@ -151,8 +159,9 @@ import {
getLineDetailData
} from '@/api/advance-boot/bearingCapacity'
import { useDictData } from '@/stores/dictData'
const monitoringPoint = useMonitoringPoint()
const props = defineProps(['rowList'])
const monitoringPoint = useMonitoringPoint()
const size = ref(0)
const dictData = useDictData()
const datePickerRef = ref()
@@ -189,11 +198,12 @@ const tableData = ref([
level4: '/'
}
])
const TreeRef = ref()
const voltageList: any = ref([])
const showAssess = ref(false)
const showBtn = ref(false)
const flag = ref(true)
const loading = ref(true)
const loading = ref(false)
const user = ref('')
const userList: any = ref([])
const lineList: any = ref([])
@@ -245,9 +255,9 @@ const onSubmit = async () => {
loading.value = true
let form = {
endTime: datePickerRef.value.timeValue[1],
lineId: dotList.value.id,
startTime: datePickerRef.value.timeValue[0],
endTime: props.rowList.endTime || datePickerRef.value.timeValue[1],
lineId: props.rowList.lineId || dotList.value.id,
startTime: props.rowList.startTime || datePickerRef.value.timeValue[0],
userId: dictData.state.area[0].id
}
options1.value = {}
@@ -276,13 +286,17 @@ const onSubmit = async () => {
setEChart(3, res[2].data.data)
showBtn.value = true
loading.value = false
// props.rowList.id != undefined
if (props.rowList.id != undefined) {
rendering(props.rowList)
}
})
.catch(err => {
loading.value = false
})
}
// 用户变化
const userChange = e => {
const userChange = (e: any) => {
userData.value = e
}
@@ -351,6 +365,24 @@ const assess = () => {
if (dotList.value.level != 6) {
return ElMessage.warning('请选择线路')
}
carryCapacityCal({
endTime: datePickerRef.value.timeValue[1],
lineId: dotList.value.id,
startTime: datePickerRef.value.timeValue[0],
userId: userData.value.userId, //dictData.state.area[0].id,
i_βmax: i_βmax.value,
p_βminMap: p_βminMap.value,
q_βminMap: q_βminMap.value,
s_T: lineList.value.standardCapacity,
s_pv: userData.value.protocolCapacity,
scale: userData.value.voltage,
stringMap: stringMap.value
}).then((res: any) => {
rendering(res.data)
})
}
const rendering = (data: any) => {
let ChartsList = [
{
name: '安全',
@@ -373,27 +405,12 @@ const assess = () => {
value: 0
}
]
carryCapacityCal({
endTime: datePickerRef.value.timeValue[1],
lineId: dotList.value.id,
startTime: datePickerRef.value.timeValue[0],
userId: userData.value.userId, //dictData.state.area[0].id,
i_βmax: i_βmax.value,
p_βminMap: p_βminMap.value,
q_βminMap: q_βminMap.value,
s_T: lineList.value.standardCapacity,
s_pv: userData.value.protocolCapacity,
scale: userData.value.voltage,
stringMap: stringMap.value
}).then(res => {
tableData.value[0][`level` + res.data.utlevel] = 1
tableData.value[1][`level` + res.data.pfTLevel] = 1
tableData.value[2][`level` + res.data.btlevel] = 1
tableData.value[3][`level` + res.data.ilevel] = 1
ChartsList[res.data.reslutLevel - 1].value = 1
tableData.value[0][`level` + data.utlevel] = 1
tableData.value[1][`level` + data.pfTLevel] = 1
tableData.value[2][`level` + data.btlevel] = 1
tableData.value[3][`level` + data.ilevel] = 1
ChartsList[data.reslutLevel - 1].value = 1
showAssess.value = true
})
pieCharts.value = {
title: {
text: '承载能力评估结果',
@@ -435,7 +452,7 @@ const assess = () => {
}
// 下载模版
const exportTemplate = () => {
getExcelTemplate().then(res => {
getExcelTemplate().then((res: any) => {
let blob = new Blob([res], {
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
})
@@ -474,9 +491,14 @@ const handleNodeClick = (data: any, node: any) => {
lineList.value = res.data
})
}
if (flag.value) {
// if (flag.value) {
// onSubmit()
// flag.value = false
// }
if (props.rowList.userId != undefined) {
TreeRef.value.setKey(props.rowList.lineId)
onSubmit()
flag.value = false
}
}
</script>

View File

@@ -15,58 +15,30 @@
</template>
<template #operation>
<el-button icon="el-icon-Setting" type="primary" @click="configuration">承载能力评估策略</el-button>
<el-button icon="el-icon-Plus" type="primary" @click="addedShow = false">
<el-button icon="el-icon-Plus" type="primary" @click=";(addedShow = false), (code = null)">
新增承载能力评估
</el-button>
</template>
</TableHeader>
<Table ref="tableRef" />
<el-dialog v-model="view" :title="title" width="600" :before-close="handleClose">
<el-form ref="ruleFormRef" :model="form" label-width="auto" :disabled="disabled" :rules="rules">
<el-form-item label="用户名称:" prop="name">
<el-input v-model="form.name" clearable placeholder="请输入用户名称" />
</el-form-item>
<el-form-item label="用户类型:" prop="userType">
<el-select v-model="form.userType" clearable collapse-tagsplaceholder="请选择用户类型">
<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="电压等级:" prop="level">
<el-select v-model="form.level" clearable collapse-tags 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 label="用户协议容量(MVA)" prop="mav1">
<el-input v-model="form.mav1" clearable placeholder="请输入用户协议容量" />
</el-form-item>
<el-form-item label="拟接入容量(MVA)" prop="mav2">
<el-input v-model="form.mav2" clearable placeholder="请输入拟接入容量" />
</el-form-item>
<el-form-item label="区域">
<Area v-model="form.deptIndex" style="width: 100%" />
</el-form-item>
<el-form-item label="详细地址:" prop="detailed">
<el-input
clearable
v-model="form.detailed"
:autosize="{ minRows: 2, maxRows: 4 }"
type="textarea"
placeholder="请输入详细地址"
/>
</el-form-item>
</el-form>
</el-dialog>
<policy v-if="policyView" @View="policyView = false" />
</div>
<!-- <Added v-if="!addedShow" @quit="addedShow = true" /> -->
<div v-if="!addedShow" style="position: relative">
<el-tabs v-model="activeName" type="border-card" :style="{ height: height }">
<el-tab-pane label="光伏电站承载能力评估" name="1"><photovoltaic /></el-tab-pane>
<el-tab-pane label="充电站、电加热负荷、电气化铁路承载能力评估" name="2">
<charge />
<el-tab-pane label="光伏电站承载能力评估" name="1" v-if="code == null || code == 1">
<photovoltaic :rowList="rowList" />
</el-tab-pane>
<el-tab-pane
label="充电站、电加热负荷、电气化铁路承载能力评估"
name="2"
v-if="code == null || code == 2"
>
<charge :rowList="rowList" />
</el-tab-pane>
</el-tabs>
<el-button class="quit" icon="el-icon-Close" type="primary" @click="addedShow = true">返回</el-button>
<el-button class="quit" icon="el-icon-Close" type="primary" @click="quit">返回</el-button>
</div>
</div>
</template>
@@ -80,7 +52,7 @@ import { ElMessage, ElMessageBox } from 'element-plus'
import policy from './components/policy.vue'
import photovoltaic from './components/photovoltaic.vue'
import charge from './components/charge.vue'
import { remove } from '@/api/advance-boot/bearingCapacity'
import { mainHeight } from '@/utils/layout'
import { useDictData } from '@/stores/dictData'
defineOptions({
@@ -90,42 +62,18 @@ const height = mainHeight(20).height
const dictData = useDictData()
const levelList = dictData.getBasicData('Dev_Voltage_Stand')
const uesrList = dictData.getBasicData('CARRY_CAPCITY_USER_TYPE')
const view = ref(false)
const activeName = ref('1')
const disabled = ref(false)
const policyView = ref(false)
const addedShow = ref(true)
const code = ref(null)
const rowList = ref({})
const TableHeaderRef = ref()
const title = ref('')
const form = ref({
name: '',
level: '',
deptIndex: dictData.state.area[0].id,
userType: '光伏电站',
type: '光伏电站',
mav1: '100',
mav2: '100',
user: 'Admin',
time: '2024-01-03',
detailed: '详细地址'
})
const rules = {
name: [{ required: true, message: '请输入用户名称', trigger: 'blur' }],
userType: [{ required: true, message: '请选择用户类型', trigger: 'change' }],
level: [{ required: true, message: '请选择电压等级', trigger: 'change' }],
mav1: [{ required: true, message: '请输入用户协议容量', trigger: 'blur' }],
mav2: [{ required: true, message: '请输入拟接入容量', trigger: 'blur' }],
detailed: [{ required: true, message: '请输入详细地址', trigger: 'blur' }]
}
const ruleFormRef = ref()
const tableStore = new TableStore({
const tableStore: any = new TableStore({
url: '/advance-boot/result/queryResultList',
method: 'POST',
column: [
// { width: '60', type: 'checkbox' },
{
field: 'index',
title: '序号',
@@ -134,7 +82,7 @@ const tableStore = new TableStore({
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
}
},
{ field: 'lineName', title: '配变台区' },
{ field: 'lineName', title: '配变台区', width: '500' },
{
field: 'evaluateType',
title: '评估类型',
@@ -177,12 +125,12 @@ const tableStore = new TableStore({
icon: 'el-icon-Plus',
render: 'basicButton',
click: row => {
if (ruleFormRef.value) ruleFormRef.value.resetFields()
disabled.value = true
title.value = '查看承载能力预评估用户'
form.value = JSON.parse(JSON.stringify(row))
view.value = true
rowList.value = row
let data = uesrList.filter(item => item.id == row.evaluateType)[0].code
data == 'Power_Station_Users'
? ((code.value = 1), (activeName.value = '1'))
: ((code.value = 2), (activeName.value = '2'))
addedShow.value = false
}
},
{
@@ -197,7 +145,12 @@ const tableStore = new TableStore({
confirmButtonType: 'danger',
title: '确定删除?'
},
click: row => {}
click: row => {
remove({ ids: row.id }).then(() => {
ElMessage.success('删除成功')
tableStore.index()
})
}
}
]
}
@@ -209,25 +162,17 @@ tableStore.table.params.evaluateType = ''
tableStore.table.params.id = dictData.state.area[0].id
provide('tableStore', tableStore)
const quit = () => {
addedShow.value = true
rowList.value = {}
}
onMounted(() => {
TableHeaderRef.value.setDatePicker([{ label: '周', value: 4 }])
TableHeaderRef.value.setInterval(4)
setTimeout(() => {
tableStore.table.params.startTime = TableHeaderRef.value.datePickerRef.timeValue[0]
tableStore.table.params.endTime = TableHeaderRef.value.datePickerRef.timeValue[1]
tableStore.index()
}, 100)
})
// 配置
const configuration = () => {
policyView.value = true
}
// 取消
const handleClose = () => {
ruleFormRef.value.resetFields()
view.value = false
}
</script>
<style lang="scss" scoped>
.quit {

View File

@@ -0,0 +1,150 @@
<template>
<el-dialog class="cn-operate-dialog" v-model="dialogVisible" title="设备">
<el-button icon="el-icon-Plus" type="primary" @click="add" class="mb10">新增</el-button>
<vxe-table v-bind="defaultAttribute" v-loading="loading" height="auto" ref="xTable" :data="userData">
<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-column title="操作" width="120px">
<template #default="{ row }">
<el-button type="primary" size="small" link @click="revise(row)">修改</el-button>
<el-popconfirm @confirm="deleteD(row)" title="确认删除设备?">
<template #reference>
<el-button type="danger" size="small" link>删除</el-button>
</template>
</el-popconfirm>
</template>
</vxe-column>
</vxe-table>
</el-dialog>
<el-dialog v-model="addShow" width="400px" :title="title" :before-close="handleClose">
<el-form :model="form" ref="formRef" :rules="rules" label-width="auto">
<el-form-item label="设备名称" prop="devName">
<el-input v-model="form.devName" placeholder="请输入设备名称" />
</el-form-item>
<el-form-item label="电压等级" prop="devScale">
<el-select v-model="form.devScale" clearable 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 label="设备容量" prop="protocolCapacity">
<el-input-number
v-model="form.protocolCapacity"
style="width: 100%"
:min="0"
placeholder="请选择设备容量"
/>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="submitForm">确定</el-button>
</div>
</template>
</el-dialog>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { queyDeviceList, addDev, updateDev, removeDev } from '@/api/advance-boot/bearingCapacity'
import { defaultAttribute } from '@/components/table/defaultAttribute'
import { useDictData } from '@/stores/dictData'
import { ElMessage } from 'element-plus'
const dictData = useDictData()
const levelList = dictData.getBasicData('Dev_Voltage_Stand')
const dialogVisible = ref(false)
const addShow = ref(false)
const loading = ref(false)
const userData = ref([])
const rowList = ref([])
const title = ref('')
const formRef = ref()
const form: any = ref({
devName: '',
devScale: '',
protocolCapacity: 0,
userId: ''
})
const rules = {
devName: [{ required: true, message: '请输入设备名称', trigger: 'blur' }],
devScale: [{ required: true, message: '请输入设备名称', trigger: 'change' }],
protocolCapacity: [{ required: true, message: '请输入设备名称', trigger: 'blur' }]
}
const open = (row: any) => {
dialogVisible.value = true
loading.value = true
rowList.value = row
queyDeviceList({
userId: row.userId
}).then(res => {
loading.value = false
userData.value = res.data
})
}
// 新增
const add = () => {
addShow.value = true
title.value = '新增设备'
}
// 过滤数据
const formatter = (row: any) => {
if (row.column.field == 'devScale') {
return levelList.filter(item => item.id == row.cellValue)[0].name
} else {
return row.cellValue
}
}
// 修改
const revise = (row: any) => {
form.value = JSON.parse(JSON.stringify(row))
title.value = '修改设备'
addShow.value = true
}
// 关闭弹框
const handleClose = () => {
addShow.value = false
form.value = {
devName: '',
devScale: '',
protocolCapacity: 0,
userId: ''
}
formRef.value.resetFields()
}
// 新增设备
const submitForm = async () => {
await formRef.value.validate(valid => {
if (valid) {
if (title.value == '新增设备') {
form.value.userId = rowList.value.userId
addDev(form.value).then(res => {
ElMessage.success('新增成功!')
open(rowList.value)
handleClose()
})
} else {
updateDev(form.value).then(res => {
ElMessage.success('修改成功!')
open(rowList.value)
handleClose()
})
}
}
})
}
// 删除设备
const deleteD = row => {
removeDev({ devIds: row.devId }).then(res => {
ElMessage.success('删除设备成功!')
open(rowList.value)
})
}
defineExpose({ open })
</script>
<style lang="scss" scoped></style>

View File

@@ -4,11 +4,7 @@
<TableHeader datePicker ref="TableHeaderRef">
<template #select>
<el-form-item label="用户类型">
<el-select
v-model="tableStore.table.params.userType"
clearable
placeholder="请选择用户类型"
>
<el-select v-model="tableStore.table.params.userType" clearable placeholder="请选择用户类型">
<el-option v-for="item in uesrList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
@@ -24,12 +20,7 @@
<el-input v-model="form.userName" clearable placeholder="请输入用户名称" />
</el-form-item>
<el-form-item label="用户类型:" prop="userType">
<el-select
v-model="form.userType"
clearable
placeholder="请选择用户类型"
@change="useChange"
>
<el-select v-model="form.userType" clearable placeholder="请选择用户类型" @change="useChange">
<el-option v-for="item in uesrList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
@@ -73,6 +64,8 @@
</template>
</el-dialog>
</div>
<!-- 设备 -->
<equipment ref="equipmentRef" />
</div>
</template>
<script setup lang="ts">
@@ -83,6 +76,7 @@ import TableHeader from '@/components/table/header/index.vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { mainHeight } from '@/utils/layout'
import { useDictData } from '@/stores/dictData'
import equipment from './equipment.vue'
import { addUse, updateUse, removeUse } from '@/api/advance-boot/bearingCapacity'
defineOptions({
name: 'estimate/photovoltaic'
@@ -93,6 +87,7 @@ const uesrList = dictData.getBasicData('CARRY_CAPCITY_USER_TYPE')
const dialogVisible = ref(false)
const disabled = ref(false)
const TableHeaderRef = ref()
const equipmentRef = ref()
const title = ref('')
const areaList: any = dictData.areaSelect()
const userShow: any = ref('Power_Station_Users')
@@ -129,7 +124,7 @@ const rules = {
}
const props = { label: 'name', value: 'id' }
const ruleFormRef = ref()
const tableStore = new TableStore({
const tableStore: any = new TableStore({
url: '/advance-boot/carrycapacityuser/queyDetailUser',
// url: '/hzj/carrycapacityuser/queyDetailUser',
method: 'POST',
@@ -187,6 +182,16 @@ const tableStore = new TableStore({
width: '180',
render: 'buttons',
buttons: [
{
name: 'edit',
title: '设备 ',
type: 'primary',
icon: 'el-icon-Plus',
render: 'basicButton',
click: row => {
equipmentRef.value.open(row)
}
},
{
name: 'edit',
title: '查看',
@@ -206,7 +211,7 @@ const tableStore = new TableStore({
{
name: 'edit',
title: '编辑',
type: '',
type: 'primary',
icon: 'el-icon-Plus',
render: 'basicButton',
click: async row => {
@@ -242,8 +247,7 @@ const tableStore = new TableStore({
],
loadCallback: () => {
console.log(tableStore.table.data);
console.log(tableStore.table.data)
}
})
@@ -251,14 +255,7 @@ tableStore.table.params.userType = ''
provide('tableStore', tableStore)
onMounted(() => {
TableHeaderRef.value.setDatePicker([{ label: '周', value: 4 }])
TableHeaderRef.value.setInterval(4)
setTimeout(() => {
tableStore.table.params.startTime = TableHeaderRef.value.datePickerRef.timeValue[0]
tableStore.table.params.endTime = TableHeaderRef.value.datePickerRef.timeValue[1]
tableStore.index()
}, 100)
})
const useChange = (e: string) => {
userShow.value = uesrList.filter(item => item.id == e)[0].code

View File

@@ -89,10 +89,13 @@
:rows="2"
v-model="textarea"
></el-input> -->
<div slot="footer" style="display: flex; justify-content: center">
<el-button type="primary" size="small" class="ml20" @click="submitFn">提交</el-button>
<el-button type="primary" size="small" class="ml20" @click="cancelFn">取消</el-button>
<template #footer>
<div>
<el-button type="primary" @click="submitFn">提交</el-button>
<el-button type="primary" @click="cancelFn">取消</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup lang="ts">

View File

@@ -207,6 +207,7 @@ const Export = () => {
link.download = '终端入网检测录入模板' // 设置下载的文件名
document.body.appendChild(link)
link.click() //执行下载
document.body.removeChild(link)
})
}
// 下载报告
@@ -225,6 +226,7 @@ const download = (row: any, type: number) => {
link.download = type == 1 ? row.inspectionName : row.originalName // 设置下载的文件名
document.body.appendChild(link)
link.click() //执行下载
document.body.removeChild(link)
})
}
// excel导入
@@ -244,6 +246,7 @@ const choose = (e: any) => {
link.download = '模板错误信息' // 设置下载的文件名
document.body.appendChild(link)
link.click() //执行下载
document.body.removeChild(link)
}
})
}

View File

@@ -262,6 +262,7 @@ const Export = () => {
link.download = '终端入网检测录入模板' // 设置下载的文件名
document.body.appendChild(link)
link.click() //执行下载
document.body.removeChild(link)
})
}
// 下载报告
@@ -280,6 +281,7 @@ const download = (row: any, type: number) => {
link.download = type == 1 ? row.inspectionName : row.originalName // 设置下载的文件名
document.body.appendChild(link)
link.click() //执行下载
document.body.removeChild(link)
})
}
// excel导入
@@ -299,6 +301,7 @@ const choose = (e: any) => {
link.download = '模板错误信息' // 设置下载的文件名
document.body.appendChild(link)
link.click() //执行下载
document.body.removeChild(link)
}
})
}