diff --git a/hx-ai-intelligent/src/api/deviceManage.ts b/hx-ai-intelligent/src/api/deviceManage.ts index d4b2fd4..b0b008d 100644 --- a/hx-ai-intelligent/src/api/deviceManage.ts +++ b/hx-ai-intelligent/src/api/deviceManage.ts @@ -29,4 +29,9 @@ export enum group { dropGroupFilter = `${BASE_URL}/deviceGroup/dropGroupFilter`, // 分组列表查询 dropGroupInfoFilter = `${BASE_URL}/deviceGroup/dropGroupInfoFilter`, // 计算列表查询 queryDeviceToEnergy = `${BASE_URL}/deviceGroup/queryDeviceToEnergy`, // 能耗监测用查询设备(能耗监测设备树) + + getCarbonGroupList = `${BASE_URL}/deviceGroup/carbonEmissions/getGroupList`, // 分组管理-碳排放-分组查询设备 + deleteCarbonDevice = `${BASE_URL}/deviceGroup/carbonEmissions/deleteDevice`, // 分组管理-碳排放-删除设备 + addCarbonDevice = `${BASE_URL}/deviceGroup/carbonEmissions/addDevice`, // 分组管理-碳排放-添加设备 + updateCarbonFactor = `${BASE_URL}/deviceGroup/carbonEmissions/updateFactor`, // 分组管理-碳排放-设置因子 } diff --git a/hx-ai-intelligent/src/config/app.config.ts b/hx-ai-intelligent/src/config/app.config.ts index 22f2982..2a80768 100644 --- a/hx-ai-intelligent/src/config/app.config.ts +++ b/hx-ai-intelligent/src/config/app.config.ts @@ -98,6 +98,7 @@ export const appConfig = { adminFlag: 'adminFlag', }); sessionStorage.setItem('ORGID', info.orgId); + sessionStorage.setItem('LINKLIST', JSON.stringify(info.linkList)); sessionStorage.setItem('ISADMIN', trD?.adminFlag === '1'); selectDefaultDisabled.value = info?.adminFlag === '1'; selectDefaultValue.value = info.orgId; diff --git a/hx-ai-intelligent/src/view/equipmentManage/group/config.ts b/hx-ai-intelligent/src/view/equipmentManage/group/config.ts index d1c0c36..40615fa 100644 --- a/hx-ai-intelligent/src/view/equipmentManage/group/config.ts +++ b/hx-ai-intelligent/src/view/equipmentManage/group/config.ts @@ -1,6 +1,8 @@ import { http } from '/nerv-lib/util'; -import { group } from '/@/api/deviceManage'; +import { group, device } from '/@/api/deviceManage'; +import { carbonEmissionFactorLibrary, quickCalculation } from '/@/api/carbonEmissionFactorLibrary'; import { dict } from '/@/api'; +import { ref } from 'vue'; const tableCalKeyMap = [ { title: '来源企业', @@ -38,6 +40,54 @@ const tableCalKeyMap = [ }, }, ]; + +const tableCarbonKeyMap = [ + { + title: '能源类型', + dataIndex: 'energyTypeName', + // textEllipsis: true, + textNumber: 5, + }, + { + title: '设备名称', + textNumber: 10, + dataIndex: 'deviceName', + // textEllipsis: true, + }, + { + title: '设备id', + dataIndex: 'deviceInfoCode', + textNumber: 10, + }, + { + textNumber: 5, + title: '碳排因子值', + dataIndex: 'emissionFactor', + }, + { + title: '设备品牌/型号', + textNumber: 10, + dataIndex: 'deviceModel', + }, + { + title: '来源企业', + textNumber: 10, + dataIndex: 'manufacturer', + }, + { + title: '分组名称', + textNumber: 10, + dataIndex: 'deviceNameType', + }, + { + textNumber: 5, + title: '设备状态', + dataIndex: 'status', + customRender: ({ value }) => { + return value === '0' ? '启用' : '停用'; + }, + }, +]; const tableKeyMap = [ { title: '来源企业', @@ -333,11 +383,19 @@ export const tableConfig = (el, elGroup, elFormula, defaultParams) => { }; }; -export const tableConfigCal = (el, elGroup, elFormula, defaultParams) => { +export const tableConfigCal = ( + el, + elGroup, + elFormula, + defaultParams, + isCarbon, + editCarbonEquipmentRef, + setFactorRef, +) => { // 计算节点 return { title: '点位信息', - api: group.queryGroupInfoPage, + api: isCarbon ? group.getCarbonGroupList : group.queryGroupInfoPage, params: defaultParams.value, headerActions: [ { @@ -345,9 +403,32 @@ export const tableConfigCal = (el, elGroup, elFormula, defaultParams) => { name: 'GroupPointEdit', type: 'primary', handle: (a, b) => { - el.value.toggle(); + if (isCarbon) { + editCarbonEquipmentRef.value.toggle(); + } else { + el.value.toggle(); + } }, }, + isCarbon + ? { + label: '关联因子值', + name: 'SetFactor', + type: 'primary', + dynamicDisabled: (data: any) => { + return data.list.length === 0; + }, + handle: ({ list }) => { + // 过滤出 id 大于 0 的项 + const filteredList = list.filter(({ id }) => id > 0); + + // 提取出 id 值 + const ids = filteredList.map(({ id }) => id); + + setFactorRef.value.toggle(ids); + }, + } + : {}, { label: '批量删除', name: 'GroupPointDelete', @@ -355,11 +436,17 @@ export const tableConfigCal = (el, elGroup, elFormula, defaultParams) => { dynamicDisabled: (data: any) => { return data.list.length === 0; }, - dynamicParams: { ids: 'id[]' }, + dynamicParams: isCarbon + ? { + deviceInfoCodeList: 'id[]', + } + : { + ids: 'id[]', + }, confirm: true, isReload: true, isClearCheck: true, - api: group.delComputeList, + api: isCarbon ? group.deleteCarbonDevice : group.delComputeList, }, { label: '批量导出', @@ -425,18 +512,39 @@ export const tableConfigCal = (el, elGroup, elFormula, defaultParams) => { }, ], scroll: { x: 1400 }, - columns: tableCalKeyMap, + columns: isCarbon ? tableCarbonKeyMap : tableCalKeyMap, columnActions: { title: '操作', actions: [ + { + label: '关联因子', + name: 'SetFactor', + dynamicDisabled: (record) => { + // 这里根据record的某个字段值判断是否禁用删除按钮 + return record.id < 0; + }, + handle: (row) => { + setFactorRef.value.toggle([row.id]); + }, + }, { label: '删除', name: 'GroupPointDelete', - dynamicParams: { ids: 'id[]' }, + dynamicDisabled: (record) => { + // 这里根据record的某个字段值判断是否禁用删除按钮 + return record.id < 0; + }, + dynamicParams: isCarbon + ? { + deviceInfoCodeList: 'id[]', + } + : { + ids: 'id[]', + }, confirm: true, isReload: true, isClearCheck: true, - api: group.delComputeList, + api: isCarbon ? group.deleteCarbonDevice : group.delComputeList, }, ], }, @@ -522,7 +630,338 @@ export const tableConfigCal = (el, elGroup, elFormula, defaultParams) => { }, ], }, - // pagination: { pageSizeOptions: false }, + pagination: isCarbon ? false : true, rowKey: 'id', + rowSelection: { checkStrictly: false }, }; }; + +export const editCarbonEquipmentConfig = (orgId) => { + return ref({ + title: '设备信息', + api: device.queryDevicePage, + params: { orgId }, + treeConfig: { + header: { + icon: 'deviceType', + title: '设备类别', + }, + params: { orgId }, + dynamicParams: { deviceCode: 'code' }, + defaultExpandAll: true, + api: device.queryDeviceTree, + fieldNames: { title: 'deviceType', key: 'code' }, + formConfig: { + schemas: [ + { + field: 'energyType', + label: '', + component: 'NsSelectApi', + autoSubmit: true, + componentProps: { + api: () => dict({ params: { dicKey: 'ENERGY_TYPE' } }), + // params: { dicKey: 'ENERGY_TYPE' }, + immediate: true, + // resultField: 'data.ENERGY_TYPE', + labelField: 'cnValue', + valueField: 'dicKey', + placeholder: '请选择能耗种类', + autoSelectFirst: true, + }, + }, + { + field: 'deviceType', + label: '设备名称', + component: 'NsInput', + autoSubmit: true, + componentProps: { + placeholder: '请输入设备类型', + }, + }, + ], + }, + }, + // rowSelection: null, + rowSelection: true, + // scroll: { x: 2000 }, + columns: [ + { + title: '设备名称', + dataIndex: 'deviceName', + }, + { + title: '设备型号', + dataIndex: 'deviceModel', + }, + { + title: 'SN码', + dataIndex: 'snCode', + textNumber: 5, + textEllipsis: true, + }, + { + title: '设备一级区域', + dataIndex: 'device1Area', + textWidth: 88, + // width: 130, + textEllipsis: true, + }, + { + title: '设备二级区域', + dataIndex: 'device2Area', + textWidth: 88, + // width: 130, + textEllipsis: true, + }, + { + title: '设备详细位置', + dataIndex: 'deviceAddress', + textNumber: 5, + textEllipsis: true, + }, + ], + formConfig: { + schemas: [ + { + field: 'areas', + label: '设备区域', + component: 'NsCascader', + format: (record) => { + console.log(record); + + return record?.reduce( + (pre, cur) => { + const len = cur?.length - 1; + pre[len].push(cur[len]); + return pre; + }, + [[], []], + ); + }, + fieldMap: ['area1', 'area2'], + componentProps: { + placeholder: '请选择设备区域', + multiple: true, + loadData: (selectedOptions, options) => { + const targetOption = selectedOptions[selectedOptions.length - 1]; + if (!selectedOptions.length) { + http.post(device.dropArea, { orgId, filterField: 'DEVICE_AREA' }).then((res) => { + options.value = res.data?.map((item) => { + return { label: item, value: item, children: [], isLeaf: false }; + }); + }); + } + const value = targetOption?.value; + if (targetOption) { + targetOption.loading = true; + http + .post(device.dropArea, { device1Area: value, orgId, filterField: 'DEVICE_AREA' }) + .then((res) => { + targetOption.loading = false; + targetOption.children = res.data?.map((item) => { + return { label: item, value: item, children: [], isLeaf: true }; + }); + }); + } + }, + }, + }, + { + field: 'deviceName', + label: '设备名称', + component: 'NsSelectApi', + componentProps: { + placeholder: '请选择设备名称', + api: (params) => { + return http.post(device.dropArea, params).then((res) => { + const result = res.data?.reduce((pre, cur) => { + !pre.includes(cur.deviceName) && pre.push(cur.deviceName); + return pre; + }, []); + return { data: result }; + }); + }, + resultField: 'data', + params: { orgId, filterField: 'DEVICE_NAME_FACTORY' }, + // labelField: 'deviceName', + // valueField: 'deviceName', + filterOption: (input: string, option: any) => { + return option.deviceName?.toLowerCase().indexOf(input.toLowerCase()) >= 0; + }, + showSearch: true, + immediate: true, + dropdownReload: true, + allowClear: true, + }, + }, + ], + params: {}, + }, + // pagination: { pageSizeOptions: false }, + rowKey: 'deviceInfoCode', + }); +}; + +export const setFactorConfig = (orgId) => { + return ref({ + title: '排放因子库', + // api: carbonEmissionFactorLibrary.getTableList, + api: quickCalculation.queryCarbonEmissionPage, + + params: { orgId, pageNum: 1, pageSize: 9999 }, + treeConfig: { + header: { + icon: 'deviceType', + title: '因子分类', + }, + params: { orgId }, + dynamicParams: { energyType: 'id' }, + defaultExpandAll: true, + // api: carbonEmissionFactorLibrary.getCarbonFactorTree, + api: quickCalculation.carbonQuickTree, + fieldNames: { title: 'energyType', key: 'id' }, + formConfig: { + schemas: [ + { + field: 'deviceType', + label: '设备名称', + component: 'NsInput', + autoSubmit: true, + componentProps: { + placeholder: '请输入关键字', + }, + }, + ], + }, + }, + // rowSelection: null, + rowSelection: { type: 'radio' }, + // scroll: { x: 2000 }, + columns: [ + { + title: '序号', + textNumber: 2, + dataIndex: 'address', + customRender: (text: any) => { + return text.index + 1; + }, + }, + { + title: '因子值', + dataIndex: 'emissionFactors', + textNumber: 3, + }, + { + title: '计量单位', + dataIndex: 'carbonEmissionSuffix', + textNumber: 4, + textEllipsis: true, + }, + { + title: '更新时间', + dataIndex: 'updateTime', + textWidth: 88, + // width: 130, + textEllipsis: true, + }, + { + title: '启用时间', + dataIndex: 'startTime', + textWidth: 88, + // width: 130, + textEllipsis: true, + }, + { + title: '结束时间', + dataIndex: 'endTime', + textNumber: 5, + textEllipsis: true, + }, + { + title: '数据来源', + dataIndex: 'dataSources', + textNumber: 5, + textEllipsis: true, + }, + ], + // formConfig: { + // schemas: [ + // { + // field: 'areas', + // label: '设备区域', + // component: 'NsCascader', + // format: (record) => { + // console.log(record); + + // return record?.reduce( + // (pre, cur) => { + // const len = cur?.length - 1; + // pre[len].push(cur[len]); + // return pre; + // }, + // [[], []], + // ); + // }, + // fieldMap: ['area1', 'area2'], + // componentProps: { + // placeholder: '请选择设备区域', + // multiple: true, + // loadData: (selectedOptions, options) => { + // const targetOption = selectedOptions[selectedOptions.length - 1]; + // if (!selectedOptions.length) { + // http.post(device.dropArea, { orgId, filterField: 'DEVICE_AREA' }).then((res) => { + // options.value = res.data?.map((item) => { + // return { label: item, value: item, children: [], isLeaf: false }; + // }); + // }); + // } + // const value = targetOption?.value; + // if (targetOption) { + // targetOption.loading = true; + // http + // .post(device.dropArea, { device1Area: value, orgId, filterField: 'DEVICE_AREA' }) + // .then((res) => { + // targetOption.loading = false; + // targetOption.children = res.data?.map((item) => { + // return { label: item, value: item, children: [], isLeaf: true }; + // }); + // }); + // } + // }, + // }, + // }, + // { + // field: 'deviceName', + // label: '设备名称', + // component: 'NsSelectApi', + // componentProps: { + // placeholder: '请选择设备名称', + // api: (params) => { + // return http.post(device.dropArea, params).then((res) => { + // const result = res.data?.reduce((pre, cur) => { + // !pre.includes(cur.deviceName) && pre.push(cur.deviceName); + // return pre; + // }, []); + // return { data: result }; + // }); + // }, + // resultField: 'data', + // params: { orgId, filterField: 'DEVICE_NAME_FACTORY' }, + // // labelField: 'deviceName', + // // valueField: 'deviceName', + // filterOption: (input: string, option: any) => { + // return option.deviceName?.toLowerCase().indexOf(input.toLowerCase()) >= 0; + // }, + // showSearch: true, + // immediate: true, + // dropdownReload: true, + // allowClear: true, + // }, + // }, + // ], + // params: {}, + // }, + // pagination: { pageSizeOptions: false }, + rowKey: 'id', + }); +}; diff --git a/hx-ai-intelligent/src/view/equipmentManage/group/editCarbonEquipment.vue b/hx-ai-intelligent/src/view/equipmentManage/group/editCarbonEquipment.vue new file mode 100644 index 0000000..6fcedcb --- /dev/null +++ b/hx-ai-intelligent/src/view/equipmentManage/group/editCarbonEquipment.vue @@ -0,0 +1,123 @@ + + + diff --git a/hx-ai-intelligent/src/view/equipmentManage/group/index.vue b/hx-ai-intelligent/src/view/equipmentManage/group/index.vue index 45d7b6a..2a00e91 100644 --- a/hx-ai-intelligent/src/view/equipmentManage/group/index.vue +++ b/hx-ai-intelligent/src/view/equipmentManage/group/index.vue @@ -4,6 +4,8 @@ + +
@@ -41,7 +43,24 @@
- + + + + +