完成承载能力评估联调

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 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,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 {

View File

@@ -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>

View File

@@ -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

View File

@@ -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;

View File

@@ -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>

View File

@@ -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 {

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"> <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

View File

@@ -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">

View File

@@ -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'

View File

@@ -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)
} }
}) })
} }

View File

@@ -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)
} }
}) })
} }