diff --git a/src/api/advance-boot/assess.ts b/src/api/advance-boot/assess.ts index 3a555170..1a9ad888 100644 --- a/src/api/advance-boot/assess.ts +++ b/src/api/advance-boot/assess.ts @@ -1,5 +1,5 @@ import createAxios from '@/utils/request' - +import { useAdminInfo } from '@/stores/adminInfo' //获取变电站下面的母线列表 export function getBusBarSelect(params: any) { return createAxios({ @@ -104,7 +104,14 @@ export function transformerDelete(data: any) { data }) } - +//获取冲击负荷字典 +export function loadList(data: any) { + return createAxios({ + url: '/advance-boot/assessDicShockLoad/list', + method: 'Post', + data + }) +} //新增冲击负荷字典 export function loadAdd(data: any) { return createAxios({ @@ -137,6 +144,14 @@ export function userAdd(data: any) { data }) } +//修改评估用户 +export function userEdit(data: any) { + return createAxios({ + url: '/advance-boot/assessUser/edit', + method: 'Post', + data + }) +} //删除评估用户 export function batchDel(data: any) { return createAxios({ @@ -323,4 +338,46 @@ export function shockDelete(data: any) { data }) } +//获取评估树 +export function getTree(data: any) { + const adminInfo = useAdminInfo() + return createAxios({ + url: '/advance-boot/secondaryEvaluation/evaluationTree?deptId=' + adminInfo.deptIndex, + method: 'post', + data + }) +} +//获取评估结果 +export function getResult(data: any, assessId?: string | number) { + return createAxios({ + url: `/advance-boot/secondaryEvaluation/assessResult${assessId ? `?assessId=${assessId}` : ''}`, + method: 'post', + data + }); +} +//导出评估结果 +export function exportResult(data: any, assessId?: string | number) { + return createAxios({ + url: `/advance-boot/secondaryEvaluation/downAssessResult${assessId ? `?assessId=${assessId}` : ''}`, + method: 'get', + responseType: 'blob' + }); +} + + +//评估 +export const evaluation = (assessId: string, file: File) => { + const formData = new FormData() + formData.append('assessId', assessId) + formData.append('file', file) + + return createAxios({ + url: '/advance-boot/secondaryEvaluation/evaluation', + method: 'post', + data: formData, + headers: { + 'Content-Type': 'multipart/form-data' + } + }) + } \ No newline at end of file diff --git a/src/components/tree/pqs/assessTree.vue b/src/components/tree/pqs/assessTree.vue index 01fd09f3..4452407b 100644 --- a/src/components/tree/pqs/assessTree.vue +++ b/src/components/tree/pqs/assessTree.vue @@ -14,6 +14,10 @@ import { useDictData } from '@/stores/dictData' import { getTerminalTreeForFive } from '@/api/device-boot/terminalTree' import { useConfig } from '@/stores/config' import { defineProps } from 'vue' +import { + getTree +} from '@/api/advance-boot/assess' + defineOptions({ name: 'pms/pointTree' }) @@ -41,6 +45,26 @@ const formData = ref({ statisticalType: classificationData[0].id, scale: null }) + + +// 添加数据转换函数 +const transformTreeData = (data: any[]) => { + if (!data || !Array.isArray(data)) return []; + return data.map(item => { + // 创建新对象,确保不修改原始数据 + const newItem: any = { + name: item.treeName , + id: item.treeId , + children: [] + }; + // 递归处理子节点 + if (item.children && Array.isArray(item.children)) { + newItem.children = transformTreeData(item.children); + } + return newItem; + }); +}; + const loadData = () => { let obj = classificationData.find(function (i) { return i.id === formData.value.statisticalType @@ -48,38 +72,24 @@ const loadData = () => { let form = JSON.parse(JSON.stringify(formData.value)) form.statisticalType = classificationData.find((item: any) => item.id == form.statisticalType) let nodeKey = '' - getTerminalTreeForFive(form).then(res => { - console.log(res) + getTree({}).then(res => { + // 转换数据结构为指定格式 + const transformedData = transformTreeData(res.data); + + // 确保有数据再进行处理 + if (transformedData && transformedData.length > 0 && + transformedData[0].children && transformedData[0].children.length > 0) { + + nodeKey = transformedData[0].children[0].id + emit('init', transformedData[0].children[0]) - res.data = [ - { - name: '张家口供电公司', - level: -1, - id: 0, - children: [ - { - name: '特种钢厂', - level: 1, - id: 2 - }, - { - name: '体育中心', - level: 1, - id: 3 - } - ] + tree.value = transformedData + + if (nodeKey) { + nextTick(() => { + treeRef.value.treeRef.setCurrentKey(nodeKey) + }) } - ] - - nodeKey = res.data[0].children[0] - emit('init', res.data[0].children[0]) - - tree.value = res.data - if (nodeKey) { - nextTick(() => { - treeRef.value.treeRef.setCurrentKey(nodeKey) - // treeRef.value.treeRef.setExpandedKeys(nodeKey) - }) } }) } diff --git a/src/views/pqs/runManage/assessment/components/assess/index.vue b/src/views/pqs/runManage/assessment/components/assess/index.vue index 780733a0..96d433a8 100644 --- a/src/views/pqs/runManage/assessment/components/assess/index.vue +++ b/src/views/pqs/runManage/assessment/components/assess/index.vue @@ -6,21 +6,46 @@ :default-expand-all="false" @node-click="handleNodeClick" @init="handleNodeClick" + ref="assessTreeRef" + :current-node-key="currentTreeKey" >
- 导入数据背景 - 评估 - 导出报告 + 导入数据背景 + + 评估 + 导出报告
- +
+
+ + 加载中... +
+ +
- +
+
+ + 加载中... +
+ +
@@ -30,7 +55,8 @@ diff --git a/src/views/pqs/runManage/assessment/components/assess/information.vue b/src/views/pqs/runManage/assessment/components/assess/information.vue index 13cde26a..91d69374 100644 --- a/src/views/pqs/runManage/assessment/components/assess/information.vue +++ b/src/views/pqs/runManage/assessment/components/assess/information.vue @@ -4,34 +4,32 @@ - 张家口 - 名称1 - 100 - - + {{ form.deptName }} + {{ form.assessName }} + {{ form.agreedCapacity }} + {{ form.withCapacitor }} + {{ form.windfarmCapacity }} - 变电站1 - 220V - 母线1 - 220V - 100 - 10 - 名称1 - 20 - 30 - 2 - + {{ form.powerstationName }} + {{ form.powerstationScale }} + {{ form.busName }} + {{ form.busScale }} + {{ form.powersupplyCapacity }} + {{ form.minshortcircuitCapacity }} + {{ form.lineName }} + {{ form.lineGridreactance }} + {{ form.lineLen }} + {{ form.lineNum }} + {{ form.linetypeId }} - +
- - + - import { ref, reactive } from 'vue' import { defaultAttribute } from '@/components/table/defaultAttribute' +import { userGetInfo , + cableList, + assessTransformerParamList, + transformerList, + capacitorList, + windPowerList, + loadParamList, + loadList, + shockList, + characteristicList +} from '@/api/advance-boot/assess' +import { useDictData } from '@/stores/dictData' + +const dictData = useDictData() +// 定义 props +const props = defineProps({ + nodeId: { + type: [String, Number], + default: null + } +}) + const activeNames = ref([1, 2, 3, 4, 5, 6, 7]) const form: any = ref({ - city: '', - windFarms: '', - transformer: [ - { - name: '变压器1', - name1: '变压器型号1', - name2: '100' - }, - { - name: '变压器2', - name1: '变压器型号2', - name2: '100' - } - ], //变压器 - capacitor: [ - { - name: '电容器1', - name1: '20', - name2: '100', - name3: '72.73', - name4: '400V' - }, - { - name: '电容器2', - name1: '20', - name2: '100', - name3: '72.73', - name4: '400V' - } - ], //电容器 - windPower: [ - { - name: '风机1', - name1: '0.1', - name2: '100' - }, - { - name: '风机2', - name1: '0.1', - name2: '100' - } - ], //风电 + deptName: '', // 所在地市 + assessName: '', // 用户名称 + agreedCapacity: '', // 用户协议容量(MVA) + withCapacitor: '', // 是否包含电容器 + windFarms: '', // 风电场装机容量 + powerstationName: '', // 接入变电站 + powerstationScale: '', // 变电站电压等级 + busName: '', // 接入母线 + busScale: '', // 母线电压等级 + powersupplyCapacity: '', // 供电设备容量(MVA) + minshortcircuitCapacity: '', // 最小短路容量(MVA) + lineName: '', // PCC点名称 + lineGridreactance: '', // PCC点电网电阻 + lineLen: '', // 长度 + lineNum: '', // 回路数 + linetypeId: '', // 导线类型 + transformer: [], //变压器 + capacitor: [], //电容器 + windPower: [], //风电 load: [], //用户负荷 impact: [] //冲击性负荷 }) const column: any = ref([ { + loading: false, name: '变压器参数维护', key: 'transformer', child: [ { title: '用户变压器名称', - field: 'name' + field: 'transName' }, { title: '变压器型号', - field: 'name1' + field: 'transtypeId' }, { title: '变压器台数', - field: 'name2' + field: 'transNum' } ] }, - { + { + loading: false, name: '电容器组参数维护', key: 'capacitor', child: [ { title: '用户电容器名称', - field: 'name' + field: 'capacitorName' }, { title: '电容器组数量', - field: 'name1' + field: 'capacitorNum' }, { title: '单组容量(kVar)', - field: 'name2' + field: 'capacitorCapacity' }, { title: '电抗率(%)', - field: 'name3' + field: 'capacitorReactance' }, { title: '电压等级', - field: 'name4' + field: 'capacitorScale' } ] }, { + loading: false, name: '风电参数', key: 'windPower', child: [ { title: '风机名称', - field: 'name' + field: 'windgeneratorName' }, { title: '风机闪变系数', - field: 'name1' + field: 'flickerCoeff' }, { title: '风机额定视在功率', - field: 'name2' + field: 's' } ] }, { + loading: false, name: '用户负荷', key: 'load', child: [ { title: '配电窒名称', - field: 'name' + field: 'loadName' }, { title: '进线电压', - field: 'name1' + field: 'linevoltageScale' }, { title: '配变容量(kVA)', - field: 'name2' + field: 'transhighCapacity' }, { title: '配电变压器阻抗(%)', - field: 'name3' + field: 'transImpedance' }, { title: '谐波源特性', - field: 'name4' + field: 'harmId' }, { title: '配变低压侧电压', - field: 'name5' + field: 'translowScale' }, { title: '非线性负荷功率(kW)', - field: 'name6' + field: 'nonlinearloadPower' }, { title: '功率因素', - field: 'name7' + field: 'powerFactor' } ] }, { + loading: false, name: '冲击性负荷', key: 'impact', child: [ { title: '冲击负荷类型', - field: 'name' - }, - { - title: '冲击负荷功率(MVA)', - field: 'name1' + field: 'inpactloadtypeId' }, { title: '数量', - field: 'name2' - }, - { - title: '启动方式', - field: 'name3' + field: 'inpactloadNum' }, + { title: '启动容量倍数', - field: 'name4' + field: 'inpactloadPower' }, { - title: '冲击负荷高压侧电压', - field: 'name5' + title: '高压侧电压', + field: 'inpactloadhighScale' }, { title: '有无隔离变', - field: 'name6' + field: 'isIsolationtrans' }, { title: '隔离变阻抗(%)', - field: 'name7' + field: 'isolationtransImpedance' }, { title: '低压侧电压', - field: 'name8' + field: 'inpactloadlowScale' }, { title: '负荷频度选择', - field: 'name9' + field: 'inpactloadFreq' }, { title: '闪变叠加系数', - field: 'name10' + field: 'flickerCoeff' } ] } ]) +const voltageleveloption = dictData.getBasicData('Dev_Voltage_Stand') + +// 创建计算属性来动态生成标签文本 +const windfarmCapacityLabel = computed(() => { + if (form.value.isWindfarm === '01') { + return '风电场装机容量' + } else { + return '用户有功功率' + } +}) + +const filteredColumn = computed(() => { + // const windfarmValue = form.value.isWindfarm; + // if (windfarmValue === '01') { + // // 如果是风电场,显示除冲击负荷外的所有项 + // return column.value.filter((item: any) => item.key !== 'impact') + // } else { + // // 如果不是风电场,显示除风电参数外的所有项 + // return column.value.filter((item: any) => item.key !== 'windPower') + // } +}) + +const emit = defineEmits(['data-loaded']) + +// 监听 nodeId 变化并执行相应操作 +watch(() => props.nodeId, async (newId) => { + // 先清空表单数据 + form.value = { + deptName: '', // 所在地市 + assessName: '', // 用户名称 + agreedCapacity: '', // 用户协议容量(MVA) + withCapacitor: '', // 是否包含电容器 + windFarms: '', // 风电场装机容量 + powerstationName: '', // 接入变电站 + powerstationScale: '', // 变电站电压等级 + busName: '', // 接入母线 + busScale: '', // 母线电压等级 + powersupplyCapacity: '', // 供电设备容量(MVA) + minshortcircuitCapacity: '', // 最小短路容量(MVA) + lineName: '', // PCC点名称 + lineGridreactance: '', // PCC点电网电阻 + lineLen: '', // 长度 + lineNum: '', // 回路数 + linetypeId: '', // 导线类型 + transformer: [], // 变压器 + capacitor: [], // 电容器 + windPower: [], // 风电 + load: [], // 用户负荷 + impact: [] // 冲击性负荷 + }; + if (newId) { + userGetInfo({ assessId: newId }).then(async (res: any) => { + form.value = res.data + // 转换 withCapacitor 字段 + if (form.value.withCapacitor === '00') { + form.value.withCapacitor = '否' + } else if (form.value.withCapacitor === '01') { + form.value.withCapacitor = '是' + } + //变电站电压等级 + const voltageLevel = voltageleveloption.find(item => item.id === form.value.powerstationScale); + form.value.powerstationScale= voltageLevel?.name + //母线电压等级 + const busScale = voltageleveloption.find(item => item.id === form.value.busScale); + form.value.busScale = busScale?.name + //导线类型 + await cableList({}).then(res => { + form.value.linetypeId = res.data.find((item: any) => item.linetypeId === form.value.linetypeId)?.linetypeName + }) + + // 变压器参数维护 + await assessTransformerParamList({ assessId: props.nodeId}).then(res => { + form.value.transformer = res.data + // 获取变压器类型字典数据 + transformerList({}).then((res: any) => { + // 使用 map 方法创建新数组 + form.value.transformer = form.value.transformer.map((transformerItem: any) => { + const found = res.data.find((item: any) => item.transtypeId == transformerItem.transtypeId) + if (found) { + return { + ...transformerItem, + transtypeId: found.transtypeName + } + } + return transformerItem + }) + }) + }) + + // 电容器参数维护 + await capacitorList({ assessId: props.nodeId }).then(res => { + form.value.capacitor = res.data + + form.value.capacitor = form.value.capacitor.map((capacitorItem: any) => { + const voltageLevel = voltageleveloption.find(item => item.id === capacitorItem.capacitorScale); + if (voltageLevel) { + return { + ...capacitorItem, + capacitorScale: voltageLevel.name + } + } + return capacitorItem + }) + }) + + // 风电参数 + await windPowerList({ assessId: props.nodeId }).then(res => { + form.value.windPower = res.data + + }) + + // 用户负荷参数 + await loadParamList({ assessId: props.nodeId }).then(res => { + form.value.load = res.data + + // 谐波源特特性 + characteristicList({}).then((res: any) => { + form.value.load = form.value.load.map((transformerItem: any) => { + const found = res.data.find((item: any) => item.harmId == transformerItem.harmId) + if (found) { + return { + ...transformerItem, + harmId: found.harmName + } + } + return transformerItem + }) + }) + + form.value.load = form.value.load.map((loadItem: any) => { + // 处理进线电压 + const lineVoltage = voltageleveloption.find(item => item.id === loadItem.linevoltageScale); + // 处理配变低压侧电压 + const transLowVoltage = voltageleveloption.find(item => item.id === loadItem.translowScale) + return { + ...loadItem, + linevoltageScale: lineVoltage?.name || loadItem.linevoltageScale, + translowScale: transLowVoltage?.name || loadItem.translowScale + } + }) + }) + + // 冲击性负荷 + const startupOptions = ref>([]) + + await shockList({ assessId: props.nodeId }).then(async (res: { data: never[] }) => { + form.value.impact = res.data + // 冲击负荷类型 + const loadRes = await loadList({}) + + // 处理冲击负荷类型名称 + form.value.impact = form.value.impact.map((impactItem: any) => { + const found = loadRes.data.find((item: any) => item.inpactloadtypeId == impactItem.inpactloadtypeId) + if (found) { + return { + ...impactItem, + inpactloadtypeId: found.inpactloadtypeName + } + } + return impactItem + }) + + form.value.impact = form.value.impact.map((loadItem: any) => { + // 处理高压侧电压 + const HeightVoltage = voltageleveloption.find(item => item.id === loadItem.inpactloadhighScale); + // 处理低压侧电压 + const LowVoltage = voltageleveloption.find(item => item.id === loadItem.inpactloadlowScale) + return { + ...loadItem, + inpactloadhighScale: HeightVoltage?.name || loadItem.inpactloadhighScale, + inpactloadlowScale: LowVoltage?.name || loadItem.inpactloadlowScale + } + }) + }) + } + + ) + } + + // 等待 DOM 更新后延迟触发 + await nextTick() + setTimeout(() => { + emit('data-loaded') + }, 1000) // 3秒延迟 + +}, { immediate: true }) + + + + diff --git a/src/views/pqs/runManage/assessment/components/uese/index.vue b/src/views/pqs/runManage/assessment/components/uese/index.vue index c573df28..e4ee3074 100644 --- a/src/views/pqs/runManage/assessment/components/uese/index.vue +++ b/src/views/pqs/runManage/assessment/components/uese/index.vue @@ -99,6 +99,8 @@ import { useDictData } from '@/stores/dictData' import { ElMessage, ElMessageBox, ElDatePicker } from 'element-plus' import { cableList, batchDel } from '@/api/advance-boot/assess' import { useRouter } from 'vue-router' +import Form from './form.vue' + defineOptions({ name: 'runManage/addUser' }) @@ -167,7 +169,7 @@ const tableStore: any = new TableStore({ return row.cellValue == '01' ? '风电场' : row.cellValue == '02' ? '光伏' : '其他' } }, - { field: 'windfarmCapacity', title: '用户有功功率(MW)', minWidth: 180 }, + { field: 'windfarmCapacity', title: '风电场装机容量(MW)', minWidth: 180 }, { field: 'singleLoad', title: '是否单相负荷', @@ -205,17 +207,25 @@ const tableStore: any = new TableStore({ type: 'primary', icon: 'el-icon-EditPen', render: 'basicButton', - - click: async row => {} + click: async row => { + push({ + path: 'addUser', + query: { + id: row.assessId, + mode: 'view' + } + }) + } } ] } ], beforeSearchFun: () => { // tableStore.table.params.deptId = tableStore.table.params.deptIndex + }, - loadCallback: () => {} + loadCallback: () => { } }) tableStore.table.params.assessName = '' tableStore.table.params.deptId = '' @@ -225,6 +235,17 @@ tableStore.table.params.isWindfarm = '' tableStore.table.params.powerstationScaleList = [] provide('tableStore', tableStore) +const route = useRoute() + +// 监听路由变化 +watch( + () => route.query, + (newQuery) => { + tableStore.index() + }, + { immediate: true } +) + // 新增评估用户页面 const addForm = () => { push({ @@ -263,4 +284,7 @@ onMounted(() => { tableStore.index() Info() }) + + + diff --git a/src/views/pqs/runManage/assessment/components/uese/tabFrom.vue b/src/views/pqs/runManage/assessment/components/uese/tabFrom.vue index 19666314..c1cd0983 100644 --- a/src/views/pqs/runManage/assessment/components/uese/tabFrom.vue +++ b/src/views/pqs/runManage/assessment/components/uese/tabFrom.vue @@ -1,11 +1,23 @@