完成承载能力评估联调
This commit is contained in:
@@ -147,3 +147,43 @@ export function carryCapacityEvaluate(data) {
|
|||||||
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
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -28,10 +28,9 @@ const treeRef = ref()
|
|||||||
const loadData = () => {
|
const loadData = () => {
|
||||||
let nodeKey = ''
|
let nodeKey = ''
|
||||||
carryCapacityTree().then(res => {
|
carryCapacityTree().then(res => {
|
||||||
console.log(res)
|
|
||||||
nodeKey = res.data[0].children[0].children[0].children[0].children[0].children[0].id
|
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])
|
emit('init', res.data[0].children[0].children[0].children[0].children[0].children[0])
|
||||||
tree.value = res.data[0].children[0].children
|
tree.value = res.data[0].children[0].children
|
||||||
if (nodeKey) {
|
if (nodeKey) {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
treeRef.value.treeRef.setCurrentKey(nodeKey)
|
treeRef.value.treeRef.setCurrentKey(nodeKey)
|
||||||
@@ -41,6 +40,10 @@ const loadData = () => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
loadData()
|
loadData()
|
||||||
|
const setKey = (key: string) => {
|
||||||
|
treeRef.value.treeRef.setCurrentKey(key)
|
||||||
|
}
|
||||||
|
defineExpose({ setKey })
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.point-tree {
|
.point-tree {
|
||||||
@@ -1,30 +1,30 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="point-tree">
|
<div class="point-tree">
|
||||||
<div style="flex: 1; overflow: hidden">
|
<el-input
|
||||||
<vxe-table
|
v-model="input"
|
||||||
ref="tableRef"
|
style="width: 240px"
|
||||||
:data="tree"
|
placeholder="请输入电站数"
|
||||||
height="auto"
|
class="mr10"
|
||||||
v-bind="defaultAttribute"
|
@input="handleEdit"
|
||||||
:tree-config="{ children: 'children', expandAll: true }"
|
></el-input>
|
||||||
>
|
<el-button type="primary" :disabled="!input.length > 0" icon="el-icon-Operation" @click="Tick">
|
||||||
<vxe-column field="name" align="left" title="部门" tree-node></vxe-column>
|
按配置勾选
|
||||||
<vxe-column width="200" title="操作">
|
</el-button>
|
||||||
<template #default="{ row }">
|
<el-tree
|
||||||
<el-button type="primary" size="small" link @click="tactics(row.id, 0)">自动</el-button>
|
style="height: 550px; overflow-y: auto; overflow-x: hidden"
|
||||||
<el-button type="primary" size="small" link @click="tactics(row.id, 1)">手动</el-button>
|
:data="tree"
|
||||||
<el-button type="primary" size="small" link @click="tactics(row.id, 2)">排除</el-button>
|
show-checkbox
|
||||||
</template>
|
default-expand-all
|
||||||
</vxe-column>
|
node-key="id"
|
||||||
</vxe-table>
|
:default-expanded-keys="[2, 3]"
|
||||||
</div>
|
:default-checked-keys="[5]"
|
||||||
|
:props="defaultProps"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { nextTick, onMounted, ref, useAttrs } from 'vue'
|
import { nextTick, onMounted, ref, useAttrs } from 'vue'
|
||||||
import { defaultAttribute } from '@/components/table/defaultAttribute'
|
|
||||||
import { ElTree } from 'element-plus'
|
|
||||||
import { useDictData } from '@/stores/dictData'
|
import { useDictData } from '@/stores/dictData'
|
||||||
import { initDetpStataionTree } from '@/api/process-boot/generalTest'
|
import { initDetpStataionTree } from '@/api/process-boot/generalTest'
|
||||||
|
|
||||||
@@ -40,6 +40,7 @@ const dictData = useDictData()
|
|||||||
const config = useConfig()
|
const config = useConfig()
|
||||||
const tree = ref()
|
const tree = ref()
|
||||||
const treeRef = ref()
|
const treeRef = ref()
|
||||||
|
const input: any = ref('')
|
||||||
|
|
||||||
const loadData = () => {
|
const loadData = () => {
|
||||||
let nodeKey = ''
|
let nodeKey = ''
|
||||||
@@ -48,6 +49,9 @@ const loadData = () => {
|
|||||||
tree.value = res.data
|
tree.value = res.data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
const handleEdit = () => {}
|
||||||
|
// 配置
|
||||||
|
const Tick = () => {}
|
||||||
const tactics = (deptId, grade) => {
|
const tactics = (deptId, grade) => {
|
||||||
emit('tactics', deptId, grade)
|
emit('tactics', deptId, grade)
|
||||||
}
|
}
|
||||||
@@ -55,21 +59,9 @@ loadData()
|
|||||||
</script>
|
</script>
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.point-tree {
|
.point-tree {
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: flex;
|
padding: 10px;
|
||||||
flex-direction: column;
|
|
||||||
background: #fff;
|
background: #fff;
|
||||||
border: 1px solid var(--el-border-color);
|
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>
|
</style>
|
||||||
|
|||||||
@@ -96,6 +96,7 @@ function createAxios<Data = any, T = ApiPromise<Data>>(
|
|||||||
response.data.code === 'A0000' ||
|
response.data.code === 'A0000' ||
|
||||||
response.data.type === 'application/json' ||
|
response.data.type === 'application/json' ||
|
||||||
response.data.type === 'application/octet-stream' ||
|
response.data.type === 'application/octet-stream' ||
|
||||||
|
response.data.type === 'text/xml' ||
|
||||||
response.data.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
response.data.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
||||||
) {
|
) {
|
||||||
return options.reductDataFormat ? response.data : response
|
return options.reductDataFormat ? response.data : response
|
||||||
|
|||||||
@@ -14,9 +14,10 @@
|
|||||||
:model="form"
|
:model="form"
|
||||||
label-width="150px"
|
label-width="150px"
|
||||||
:rules="rules"
|
:rules="rules"
|
||||||
|
:disabled="props.rowList.id != undefined"
|
||||||
style="max-width: 500px; margin: auto"
|
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-select v-model="form.userMode" placeholder="请选择用户模式">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in ModeList"
|
v-for="item in ModeList"
|
||||||
@@ -94,21 +95,34 @@
|
|||||||
<el-card>
|
<el-card>
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>干扰源用户</span>
|
<span>干扰源用户:</span>
|
||||||
<el-button type="primary" size="default" icon="el-icon-Plus" @click="add">新增</el-button>
|
<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>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div :style="`height: calc(${height} / 2 - 128px);overflow-y: auto`">
|
<div :style="`height: calc(${height} / 2 - 128px);overflow-y: auto`">
|
||||||
<vxe-table v-bind="defaultAttribute" height="auto" :data="tableData">
|
<vxe-table
|
||||||
<vxe-column field="userName" title="用户名称"></vxe-column>
|
v-bind="defaultAttribute"
|
||||||
<vxe-column field="userType" title="用户类型" :formatter="formatter"></vxe-column>
|
ref="vxeRef"
|
||||||
<vxe-column field="voltage" title="电压等级(V)" :formatter="formatter"></vxe-column>
|
height="auto"
|
||||||
<vxe-column field="protocolCapacity" title="用户协议容量(MVA)"></vxe-column>
|
v-loading="loading"
|
||||||
<vxe-column field="num6" title="操作" width="120">
|
:data="equipmentList"
|
||||||
<template #default="{ row }">
|
>
|
||||||
<el-button type="danger" link @click="deleteData(row)">删除</el-button>
|
<vxe-column field="devName" title="设备名称"></vxe-column>
|
||||||
</template>
|
<vxe-column field="devScale" title="电压等级" :formatter="formatter"></vxe-column>
|
||||||
</vxe-column>
|
<vxe-column field="protocolCapacity" title="设备容量(MVA)"></vxe-column>
|
||||||
</vxe-table>
|
</vxe-table>
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
@@ -137,11 +151,11 @@
|
|||||||
<vxe-column field="name" title="谐波次数" width="180"></vxe-column>
|
<vxe-column field="name" title="谐波次数" width="180"></vxe-column>
|
||||||
<vxe-column v-for="item in column" :field="item.field" :title="item.title">
|
<vxe-column v-for="item in column" :field="item.field" :title="item.title">
|
||||||
<template #default="row">
|
<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" />
|
<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>
|
||||||
<span @click="log(row)" v-else>{{ row.row[row.column.field] }}</span>
|
<span v-else>{{ row.row[row.column.field] }}</span>
|
||||||
</template>
|
</template>
|
||||||
</vxe-column>
|
</vxe-column>
|
||||||
</vxe-table>
|
</vxe-table>
|
||||||
@@ -152,26 +166,12 @@
|
|||||||
</el-row>
|
</el-row>
|
||||||
</div>
|
</div>
|
||||||
</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>
|
</div>
|
||||||
|
|
||||||
<el-dialog v-model="dialogVisible" title="新增干扰源类型" width="70%">
|
<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-table v-bind="defaultAttribute" height="400px" ref="xTable" :data="userData">
|
||||||
<vxe-column type="checkbox" width="60"></vxe-column>
|
<vxe-column type="checkbox" width="60"></vxe-column>
|
||||||
<vxe-column field="userName" title="用户名称"></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 MyEChart from '@/components/echarts/MyEchart.vue'
|
||||||
import { useDictData } from '@/stores/dictData'
|
import { useDictData } from '@/stores/dictData'
|
||||||
import { mainHeight } from '@/utils/layout'
|
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 { 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 dictData = useDictData()
|
||||||
const height = mainHeight(80).height
|
const height = mainHeight(80).height
|
||||||
const levelList = dictData.getBasicData('Dev_Voltage_Stand')
|
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 uesrList = dictData.getBasicData('CARRY_CAPCITY_USER_TYPE', ['Power_Station_Users'])
|
||||||
const xTable = ref()
|
const xTable = ref()
|
||||||
const formRef = ref()
|
const formRef = ref()
|
||||||
|
const vxeRef = ref()
|
||||||
|
const loading = ref(false)
|
||||||
const outcome: any = ref([])
|
const outcome: any = ref([])
|
||||||
|
|
||||||
const factor = [
|
const factor = [
|
||||||
{
|
{
|
||||||
name: 0.95,
|
name: 0.95,
|
||||||
@@ -234,10 +236,11 @@ const factor = [
|
|||||||
id: 1.0
|
id: 1.0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
const dialogVisible = ref(false)
|
const dialogVisible = ref(false)
|
||||||
const showFlag = ref(false)
|
const showFlag = ref(false)
|
||||||
const tableData = ref([])
|
const tableData = ref([])
|
||||||
|
const equipmentList: any = ref([])
|
||||||
|
const userId = ref('')
|
||||||
const level2Data = ref([
|
const level2Data = ref([
|
||||||
{
|
{
|
||||||
name: '谐波电流幅值(A)'
|
name: '谐波电流幅值(A)'
|
||||||
@@ -251,13 +254,7 @@ const level2Data = ref([
|
|||||||
])
|
])
|
||||||
|
|
||||||
const column: any = ref([])
|
const column: any = ref([])
|
||||||
const userData = ref([])
|
const userData: any = ref([])
|
||||||
const formInline = ref({
|
|
||||||
userType: uesrList[0].id,
|
|
||||||
voltage: levelList[0].id,
|
|
||||||
pageNum: 1,
|
|
||||||
pageSize: 10000
|
|
||||||
})
|
|
||||||
const form: any = ref({
|
const form: any = ref({
|
||||||
ptType: '0',
|
ptType: '0',
|
||||||
connectionMode: '',
|
connectionMode: '',
|
||||||
@@ -278,15 +275,10 @@ const rules = {
|
|||||||
deviceCapacity: [{ required: true, message: '请填入最小短路容量', trigger: 'blur' }]
|
deviceCapacity: [{ required: true, message: '请填入最小短路容量', trigger: 'blur' }]
|
||||||
}
|
}
|
||||||
const pieCharts = ref({})
|
const pieCharts = ref({})
|
||||||
// 新增
|
|
||||||
const add = () => {
|
|
||||||
dialogVisible.value = true
|
|
||||||
xTable.value?.clearCheckboxRow()
|
|
||||||
xTable.value?.setCheckboxRow(tableData.value, true)
|
|
||||||
}
|
|
||||||
// 查询用户
|
// 查询用户
|
||||||
const getUser = () => {
|
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
|
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))
|
// tableData.value = tableData.value.filter((arr: any) => !res.has(arr.userId) && res.set(arr.userId, 1))
|
||||||
dialogVisible.value = false
|
dialogVisible.value = false
|
||||||
}
|
}
|
||||||
// 删除
|
// 查看设备
|
||||||
const deleteData = (row: any) => {
|
const equipment = (row: any) => {}
|
||||||
tableData.value = tableData.value.filter((item: any) => {
|
|
||||||
return !row.userId.includes(item.userId)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
// 承载能力评估
|
// 承载能力评估
|
||||||
const assess = () => {
|
const assess = () => {
|
||||||
if (tableData.value.length == 0) {
|
// vxeRef.value.getRadioRecord()
|
||||||
|
|
||||||
|
if (equipmentList.value.length == null) {
|
||||||
return ElMessage.warning('请选择用户')
|
return ElMessage.warning('请选择用户')
|
||||||
}
|
}
|
||||||
formRef.value.validate((valid: any) => {
|
formRef.value.validate((valid: any) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
column.value = []
|
form.value.devList = equipmentList.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
|
|
||||||
carryCapacityEvaluate(form.value).then(res => {
|
carryCapacityEvaluate(form.value).then(res => {
|
||||||
outcome.value = res.data
|
rendering(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)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
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) => {
|
const formatter = (row: any) => {
|
||||||
if (row.column.field == 'userType') {
|
if (row.column.field == 'userType') {
|
||||||
return uesrList.filter(item => item.id == row.cellValue)[0].name
|
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') {
|
} else if (row.column.field == 'voltage') {
|
||||||
return levelList.filter(item => item.id == row.cellValue)[0].name
|
return levelList.filter(item => item.id == row.cellValue)[0].name
|
||||||
} else {
|
} else {
|
||||||
return row.cellValue
|
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(() => {
|
onMounted(() => {
|
||||||
getUser()
|
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>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@@ -421,8 +437,6 @@ onMounted(() => {
|
|||||||
}
|
}
|
||||||
.card-header {
|
.card-header {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
}
|
||||||
.SelectIcon {
|
.SelectIcon {
|
||||||
height: 30px;
|
height: 30px;
|
||||||
|
|||||||
@@ -2,16 +2,17 @@
|
|||||||
<div>
|
<div>
|
||||||
<splitpanes :style="{ height: height }" class="default-theme" id="navigation-splitpanes">
|
<splitpanes :style="{ height: height }" class="default-theme" id="navigation-splitpanes">
|
||||||
<pane :size="size">
|
<pane :size="size">
|
||||||
<PointTree
|
<bearingTree
|
||||||
|
ref="TreeRef"
|
||||||
:default-expand-all="false"
|
:default-expand-all="false"
|
||||||
:default-expanded-keys="monitoringPoint.state.lineId ? [monitoringPoint.state.lineId] : []"
|
:default-expanded-keys="monitoringPoint.state.lineId ? [monitoringPoint.state.lineId] : []"
|
||||||
:current-node-key="monitoringPoint.state.lineId"
|
:current-node-key="monitoringPoint.state.lineId"
|
||||||
@node-click="handleNodeClick"
|
@node-click="handleNodeClick"
|
||||||
@init="handleNodeClick"
|
@init="handleNodeClick"
|
||||||
></PointTree>
|
></bearingTree>
|
||||||
</pane>
|
</pane>
|
||||||
<pane style="background: #fff">
|
<pane style="background: #fff">
|
||||||
<el-form :inline="true">
|
<el-form :inline="true" v-show="props.rowList.id == undefined">
|
||||||
<el-form-item label="日期">
|
<el-form-item label="日期">
|
||||||
<DatePicker ref="datePickerRef"></DatePicker>
|
<DatePicker ref="datePickerRef"></DatePicker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -33,6 +34,7 @@
|
|||||||
placeholder="请选择待评估用户"
|
placeholder="请选择待评估用户"
|
||||||
size="small"
|
size="small"
|
||||||
filterable
|
filterable
|
||||||
|
:disabled="props.rowList.id != undefined"
|
||||||
style="width: 240px"
|
style="width: 240px"
|
||||||
value-key="id"
|
value-key="id"
|
||||||
@change="userChange"
|
@change="userChange"
|
||||||
@@ -118,7 +120,12 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</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>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
@@ -127,11 +134,12 @@
|
|||||||
</splitpanes>
|
</splitpanes>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { onMounted, ref, provide } from 'vue'
|
import { onMounted, ref, provide } from 'vue'
|
||||||
import 'splitpanes/dist/splitpanes.css'
|
import 'splitpanes/dist/splitpanes.css'
|
||||||
import { Splitpanes, Pane } from 'splitpanes'
|
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 DatePicker from '@/components/form/datePicker/index.vue'
|
||||||
import { mainHeight } from '@/utils/layout'
|
import { mainHeight } from '@/utils/layout'
|
||||||
import MyEChart from '@/components/echarts/MyEchart.vue'
|
import MyEChart from '@/components/echarts/MyEchart.vue'
|
||||||
@@ -151,8 +159,9 @@ import {
|
|||||||
getLineDetailData
|
getLineDetailData
|
||||||
} from '@/api/advance-boot/bearingCapacity'
|
} from '@/api/advance-boot/bearingCapacity'
|
||||||
import { useDictData } from '@/stores/dictData'
|
import { useDictData } from '@/stores/dictData'
|
||||||
const monitoringPoint = useMonitoringPoint()
|
const props = defineProps(['rowList'])
|
||||||
|
|
||||||
|
const monitoringPoint = useMonitoringPoint()
|
||||||
const size = ref(0)
|
const size = ref(0)
|
||||||
const dictData = useDictData()
|
const dictData = useDictData()
|
||||||
const datePickerRef = ref()
|
const datePickerRef = ref()
|
||||||
@@ -189,11 +198,12 @@ const tableData = ref([
|
|||||||
level4: '/'
|
level4: '/'
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
const TreeRef = ref()
|
||||||
const voltageList: any = ref([])
|
const voltageList: any = ref([])
|
||||||
const showAssess = ref(false)
|
const showAssess = ref(false)
|
||||||
const showBtn = ref(false)
|
const showBtn = ref(false)
|
||||||
const flag = ref(true)
|
const flag = ref(true)
|
||||||
const loading = ref(true)
|
const loading = ref(false)
|
||||||
const user = ref('')
|
const user = ref('')
|
||||||
const userList: any = ref([])
|
const userList: any = ref([])
|
||||||
const lineList: any = ref([])
|
const lineList: any = ref([])
|
||||||
@@ -245,9 +255,9 @@ const onSubmit = async () => {
|
|||||||
loading.value = true
|
loading.value = true
|
||||||
|
|
||||||
let form = {
|
let form = {
|
||||||
endTime: datePickerRef.value.timeValue[1],
|
endTime: props.rowList.endTime || datePickerRef.value.timeValue[1],
|
||||||
lineId: dotList.value.id,
|
lineId: props.rowList.lineId || dotList.value.id,
|
||||||
startTime: datePickerRef.value.timeValue[0],
|
startTime: props.rowList.startTime || datePickerRef.value.timeValue[0],
|
||||||
userId: dictData.state.area[0].id
|
userId: dictData.state.area[0].id
|
||||||
}
|
}
|
||||||
options1.value = {}
|
options1.value = {}
|
||||||
@@ -276,13 +286,17 @@ const onSubmit = async () => {
|
|||||||
setEChart(3, res[2].data.data)
|
setEChart(3, res[2].data.data)
|
||||||
showBtn.value = true
|
showBtn.value = true
|
||||||
loading.value = false
|
loading.value = false
|
||||||
|
// props.rowList.id != undefined
|
||||||
|
if (props.rowList.id != undefined) {
|
||||||
|
rendering(props.rowList)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
loading.value = false
|
loading.value = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 用户变化
|
// 用户变化
|
||||||
const userChange = e => {
|
const userChange = (e: any) => {
|
||||||
userData.value = e
|
userData.value = e
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -351,6 +365,24 @@ const assess = () => {
|
|||||||
if (dotList.value.level != 6) {
|
if (dotList.value.level != 6) {
|
||||||
return ElMessage.warning('请选择线路')
|
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 = [
|
let ChartsList = [
|
||||||
{
|
{
|
||||||
name: '安全',
|
name: '安全',
|
||||||
@@ -373,27 +405,12 @@ const assess = () => {
|
|||||||
value: 0
|
value: 0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
carryCapacityCal({
|
tableData.value[0][`level` + data.utlevel] = 1
|
||||||
endTime: datePickerRef.value.timeValue[1],
|
tableData.value[1][`level` + data.pfTLevel] = 1
|
||||||
lineId: dotList.value.id,
|
tableData.value[2][`level` + data.btlevel] = 1
|
||||||
startTime: datePickerRef.value.timeValue[0],
|
tableData.value[3][`level` + data.ilevel] = 1
|
||||||
userId: userData.value.userId, //dictData.state.area[0].id,
|
ChartsList[data.reslutLevel - 1].value = 1
|
||||||
i_βmax: i_βmax.value,
|
showAssess.value = true
|
||||||
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
|
|
||||||
showAssess.value = true
|
|
||||||
})
|
|
||||||
|
|
||||||
pieCharts.value = {
|
pieCharts.value = {
|
||||||
title: {
|
title: {
|
||||||
text: '承载能力评估结果',
|
text: '承载能力评估结果',
|
||||||
@@ -435,7 +452,7 @@ const assess = () => {
|
|||||||
}
|
}
|
||||||
// 下载模版
|
// 下载模版
|
||||||
const exportTemplate = () => {
|
const exportTemplate = () => {
|
||||||
getExcelTemplate().then(res => {
|
getExcelTemplate().then((res: any) => {
|
||||||
let blob = new Blob([res], {
|
let blob = new Blob([res], {
|
||||||
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
||||||
})
|
})
|
||||||
@@ -474,9 +491,14 @@ const handleNodeClick = (data: any, node: any) => {
|
|||||||
lineList.value = res.data
|
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()
|
onSubmit()
|
||||||
flag.value = false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -15,58 +15,30 @@
|
|||||||
</template>
|
</template>
|
||||||
<template #operation>
|
<template #operation>
|
||||||
<el-button icon="el-icon-Setting" type="primary" @click="configuration">承载能力评估策略</el-button>
|
<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>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
</TableHeader>
|
</TableHeader>
|
||||||
<Table ref="tableRef" />
|
<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" />
|
<policy v-if="policyView" @View="policyView = false" />
|
||||||
</div>
|
</div>
|
||||||
<!-- <Added v-if="!addedShow" @quit="addedShow = true" /> -->
|
<!-- <Added v-if="!addedShow" @quit="addedShow = true" /> -->
|
||||||
<div v-if="!addedShow" style="position: relative">
|
<div v-if="!addedShow" style="position: relative">
|
||||||
<el-tabs v-model="activeName" type="border-card" :style="{ height: height }">
|
<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="1" v-if="code == null || code == 1">
|
||||||
<el-tab-pane label="充电站、电加热负荷、电气化铁路承载能力评估" name="2">
|
<photovoltaic :rowList="rowList" />
|
||||||
<charge />
|
</el-tab-pane>
|
||||||
|
<el-tab-pane
|
||||||
|
label="充电站、电加热负荷、电气化铁路承载能力评估"
|
||||||
|
name="2"
|
||||||
|
v-if="code == null || code == 2"
|
||||||
|
>
|
||||||
|
<charge :rowList="rowList" />
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</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>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -80,7 +52,7 @@ import { ElMessage, ElMessageBox } from 'element-plus'
|
|||||||
import policy from './components/policy.vue'
|
import policy from './components/policy.vue'
|
||||||
import photovoltaic from './components/photovoltaic.vue'
|
import photovoltaic from './components/photovoltaic.vue'
|
||||||
import charge from './components/charge.vue'
|
import charge from './components/charge.vue'
|
||||||
|
import { remove } from '@/api/advance-boot/bearingCapacity'
|
||||||
import { mainHeight } from '@/utils/layout'
|
import { mainHeight } from '@/utils/layout'
|
||||||
import { useDictData } from '@/stores/dictData'
|
import { useDictData } from '@/stores/dictData'
|
||||||
defineOptions({
|
defineOptions({
|
||||||
@@ -90,42 +62,18 @@ const height = mainHeight(20).height
|
|||||||
const dictData = useDictData()
|
const dictData = useDictData()
|
||||||
const levelList = dictData.getBasicData('Dev_Voltage_Stand')
|
const levelList = dictData.getBasicData('Dev_Voltage_Stand')
|
||||||
const uesrList = dictData.getBasicData('CARRY_CAPCITY_USER_TYPE')
|
const uesrList = dictData.getBasicData('CARRY_CAPCITY_USER_TYPE')
|
||||||
const view = ref(false)
|
|
||||||
const activeName = ref('1')
|
const activeName = ref('1')
|
||||||
const disabled = ref(false)
|
|
||||||
const policyView = ref(false)
|
const policyView = ref(false)
|
||||||
const addedShow = ref(true)
|
const addedShow = ref(true)
|
||||||
|
const code = ref(null)
|
||||||
|
const rowList = ref({})
|
||||||
const TableHeaderRef = ref()
|
const TableHeaderRef = ref()
|
||||||
const title = ref('')
|
|
||||||
|
|
||||||
const form = ref({
|
const tableStore: any = new TableStore({
|
||||||
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({
|
|
||||||
url: '/advance-boot/result/queryResultList',
|
url: '/advance-boot/result/queryResultList',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
column: [
|
column: [
|
||||||
// { width: '60', type: 'checkbox' },
|
|
||||||
|
|
||||||
{
|
{
|
||||||
field: 'index',
|
field: 'index',
|
||||||
title: '序号',
|
title: '序号',
|
||||||
@@ -134,7 +82,7 @@ const tableStore = new TableStore({
|
|||||||
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ field: 'lineName', title: '配变台区' },
|
{ field: 'lineName', title: '配变台区', width: '500' },
|
||||||
{
|
{
|
||||||
field: 'evaluateType',
|
field: 'evaluateType',
|
||||||
title: '评估类型',
|
title: '评估类型',
|
||||||
@@ -177,12 +125,12 @@ const tableStore = new TableStore({
|
|||||||
icon: 'el-icon-Plus',
|
icon: 'el-icon-Plus',
|
||||||
render: 'basicButton',
|
render: 'basicButton',
|
||||||
click: row => {
|
click: row => {
|
||||||
if (ruleFormRef.value) ruleFormRef.value.resetFields()
|
rowList.value = row
|
||||||
|
let data = uesrList.filter(item => item.id == row.evaluateType)[0].code
|
||||||
disabled.value = true
|
data == 'Power_Station_Users'
|
||||||
title.value = '查看承载能力预评估用户'
|
? ((code.value = 1), (activeName.value = '1'))
|
||||||
form.value = JSON.parse(JSON.stringify(row))
|
: ((code.value = 2), (activeName.value = '2'))
|
||||||
view.value = true
|
addedShow.value = false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -197,7 +145,12 @@ const tableStore = new TableStore({
|
|||||||
confirmButtonType: 'danger',
|
confirmButtonType: 'danger',
|
||||||
title: '确定删除?'
|
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
|
tableStore.table.params.id = dictData.state.area[0].id
|
||||||
|
|
||||||
provide('tableStore', tableStore)
|
provide('tableStore', tableStore)
|
||||||
|
const quit = () => {
|
||||||
|
addedShow.value = true
|
||||||
|
rowList.value = {}
|
||||||
|
}
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
TableHeaderRef.value.setDatePicker([{ label: '周', value: 4 }])
|
tableStore.index()
|
||||||
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 = () => {
|
const configuration = () => {
|
||||||
policyView.value = true
|
policyView.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
// 取消
|
|
||||||
const handleClose = () => {
|
|
||||||
ruleFormRef.value.resetFields()
|
|
||||||
view.value = false
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.quit {
|
.quit {
|
||||||
|
|||||||
150
src/views/pqs/bearingCapacity/userManagement/equipment.vue
Normal file
150
src/views/pqs/bearingCapacity/userManagement/equipment.vue
Normal 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>
|
||||||
@@ -4,11 +4,7 @@
|
|||||||
<TableHeader datePicker ref="TableHeaderRef">
|
<TableHeader datePicker ref="TableHeaderRef">
|
||||||
<template #select>
|
<template #select>
|
||||||
<el-form-item label="用户类型">
|
<el-form-item label="用户类型">
|
||||||
<el-select
|
<el-select v-model="tableStore.table.params.userType" clearable placeholder="请选择用户类型">
|
||||||
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-option v-for="item in uesrList" :key="item.id" :label="item.name" :value="item.id" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -24,12 +20,7 @@
|
|||||||
<el-input v-model="form.userName" clearable placeholder="请输入用户名称" />
|
<el-input v-model="form.userName" clearable placeholder="请输入用户名称" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="用户类型:" prop="userType">
|
<el-form-item label="用户类型:" prop="userType">
|
||||||
<el-select
|
<el-select v-model="form.userType" clearable placeholder="请选择用户类型" @change="useChange">
|
||||||
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-option v-for="item in uesrList" :key="item.id" :label="item.name" :value="item.id" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -73,6 +64,8 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- 设备 -->
|
||||||
|
<equipment ref="equipmentRef" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
@@ -83,6 +76,7 @@ import TableHeader from '@/components/table/header/index.vue'
|
|||||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||||
import { mainHeight } from '@/utils/layout'
|
import { mainHeight } from '@/utils/layout'
|
||||||
import { useDictData } from '@/stores/dictData'
|
import { useDictData } from '@/stores/dictData'
|
||||||
|
import equipment from './equipment.vue'
|
||||||
import { addUse, updateUse, removeUse } from '@/api/advance-boot/bearingCapacity'
|
import { addUse, updateUse, removeUse } from '@/api/advance-boot/bearingCapacity'
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: 'estimate/photovoltaic'
|
name: 'estimate/photovoltaic'
|
||||||
@@ -93,6 +87,7 @@ const uesrList = dictData.getBasicData('CARRY_CAPCITY_USER_TYPE')
|
|||||||
const dialogVisible = ref(false)
|
const dialogVisible = ref(false)
|
||||||
const disabled = ref(false)
|
const disabled = ref(false)
|
||||||
const TableHeaderRef = ref()
|
const TableHeaderRef = ref()
|
||||||
|
const equipmentRef = ref()
|
||||||
const title = ref('')
|
const title = ref('')
|
||||||
const areaList: any = dictData.areaSelect()
|
const areaList: any = dictData.areaSelect()
|
||||||
const userShow: any = ref('Power_Station_Users')
|
const userShow: any = ref('Power_Station_Users')
|
||||||
@@ -129,7 +124,7 @@ const rules = {
|
|||||||
}
|
}
|
||||||
const props = { label: 'name', value: 'id' }
|
const props = { label: 'name', value: 'id' }
|
||||||
const ruleFormRef = ref()
|
const ruleFormRef = ref()
|
||||||
const tableStore = new TableStore({
|
const tableStore: any = new TableStore({
|
||||||
url: '/advance-boot/carrycapacityuser/queyDetailUser',
|
url: '/advance-boot/carrycapacityuser/queyDetailUser',
|
||||||
// url: '/hzj/carrycapacityuser/queyDetailUser',
|
// url: '/hzj/carrycapacityuser/queyDetailUser',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
@@ -187,6 +182,16 @@ const tableStore = new TableStore({
|
|||||||
width: '180',
|
width: '180',
|
||||||
render: 'buttons',
|
render: 'buttons',
|
||||||
buttons: [
|
buttons: [
|
||||||
|
{
|
||||||
|
name: 'edit',
|
||||||
|
title: '设备 ',
|
||||||
|
type: 'primary',
|
||||||
|
icon: 'el-icon-Plus',
|
||||||
|
render: 'basicButton',
|
||||||
|
click: row => {
|
||||||
|
equipmentRef.value.open(row)
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'edit',
|
name: 'edit',
|
||||||
title: '查看',
|
title: '查看',
|
||||||
@@ -206,7 +211,7 @@ const tableStore = new TableStore({
|
|||||||
{
|
{
|
||||||
name: 'edit',
|
name: 'edit',
|
||||||
title: '编辑',
|
title: '编辑',
|
||||||
type: '',
|
type: 'primary',
|
||||||
icon: 'el-icon-Plus',
|
icon: 'el-icon-Plus',
|
||||||
render: 'basicButton',
|
render: 'basicButton',
|
||||||
click: async row => {
|
click: async row => {
|
||||||
@@ -242,8 +247,7 @@ const tableStore = new TableStore({
|
|||||||
],
|
],
|
||||||
|
|
||||||
loadCallback: () => {
|
loadCallback: () => {
|
||||||
console.log(tableStore.table.data);
|
console.log(tableStore.table.data)
|
||||||
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -251,14 +255,7 @@ tableStore.table.params.userType = ''
|
|||||||
|
|
||||||
provide('tableStore', tableStore)
|
provide('tableStore', tableStore)
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
TableHeaderRef.value.setDatePicker([{ label: '周', value: 4 }])
|
tableStore.index()
|
||||||
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) => {
|
const useChange = (e: string) => {
|
||||||
userShow.value = uesrList.filter(item => item.id == e)[0].code
|
userShow.value = uesrList.filter(item => item.id == e)[0].code
|
||||||
|
|||||||
@@ -72,7 +72,7 @@
|
|||||||
:check-strictly="true"
|
:check-strictly="true"
|
||||||
ref="tree"
|
ref="tree"
|
||||||
></el-tree> -->
|
></el-tree> -->
|
||||||
<generalTestTree />
|
<generalTestTree />
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<!-- <el-divider
|
<!-- <el-divider
|
||||||
@@ -89,10 +89,13 @@
|
|||||||
:rows="2"
|
:rows="2"
|
||||||
v-model="textarea"
|
v-model="textarea"
|
||||||
></el-input> -->
|
></el-input> -->
|
||||||
<div slot="footer" style="display: flex; justify-content: center">
|
|
||||||
<el-button type="primary" size="small" class="ml20" @click="submitFn">提交</el-button>
|
<template #footer>
|
||||||
<el-button type="primary" size="small" class="ml20" @click="cancelFn">取消</el-button>
|
<div>
|
||||||
</div>
|
<el-button type="primary" @click="submitFn">提交</el-button>
|
||||||
|
<el-button type="primary" @click="cancelFn">取消</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
</TableHeader>
|
</TableHeader>
|
||||||
<Table ref="tableRef" />
|
<Table ref="tableRef" />
|
||||||
<!-- 新增 -->
|
<!-- 新增 -->
|
||||||
<planAdd ref="planAddRef"/>
|
<planAdd ref="planAddRef"/>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, onMounted, provide, nextTick } from 'vue'
|
import { ref, onMounted, provide, nextTick } from 'vue'
|
||||||
|
|||||||
@@ -207,6 +207,7 @@ const Export = () => {
|
|||||||
link.download = '终端入网检测录入模板' // 设置下载的文件名
|
link.download = '终端入网检测录入模板' // 设置下载的文件名
|
||||||
document.body.appendChild(link)
|
document.body.appendChild(link)
|
||||||
link.click() //执行下载
|
link.click() //执行下载
|
||||||
|
document.body.removeChild(link)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 下载报告
|
// 下载报告
|
||||||
@@ -225,6 +226,7 @@ const download = (row: any, type: number) => {
|
|||||||
link.download = type == 1 ? row.inspectionName : row.originalName // 设置下载的文件名
|
link.download = type == 1 ? row.inspectionName : row.originalName // 设置下载的文件名
|
||||||
document.body.appendChild(link)
|
document.body.appendChild(link)
|
||||||
link.click() //执行下载
|
link.click() //执行下载
|
||||||
|
document.body.removeChild(link)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// excel导入
|
// excel导入
|
||||||
@@ -244,6 +246,7 @@ const choose = (e: any) => {
|
|||||||
link.download = '模板错误信息' // 设置下载的文件名
|
link.download = '模板错误信息' // 设置下载的文件名
|
||||||
document.body.appendChild(link)
|
document.body.appendChild(link)
|
||||||
link.click() //执行下载
|
link.click() //执行下载
|
||||||
|
document.body.removeChild(link)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -262,6 +262,7 @@ const Export = () => {
|
|||||||
link.download = '终端入网检测录入模板' // 设置下载的文件名
|
link.download = '终端入网检测录入模板' // 设置下载的文件名
|
||||||
document.body.appendChild(link)
|
document.body.appendChild(link)
|
||||||
link.click() //执行下载
|
link.click() //执行下载
|
||||||
|
document.body.removeChild(link)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 下载报告
|
// 下载报告
|
||||||
@@ -280,6 +281,7 @@ const download = (row: any, type: number) => {
|
|||||||
link.download = type == 1 ? row.inspectionName : row.originalName // 设置下载的文件名
|
link.download = type == 1 ? row.inspectionName : row.originalName // 设置下载的文件名
|
||||||
document.body.appendChild(link)
|
document.body.appendChild(link)
|
||||||
link.click() //执行下载
|
link.click() //执行下载
|
||||||
|
document.body.removeChild(link)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// excel导入
|
// excel导入
|
||||||
@@ -299,6 +301,7 @@ const choose = (e: any) => {
|
|||||||
link.download = '模板错误信息' // 设置下载的文件名
|
link.download = '模板错误信息' // 设置下载的文件名
|
||||||
document.body.appendChild(link)
|
document.body.appendChild(link)
|
||||||
link.click() //执行下载
|
link.click() //执行下载
|
||||||
|
document.body.removeChild(link)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user