Files
SaaS-lib/hx-ai-intelligent/src/view/equipmentManage/group/config.ts
fks-yangshouda 84ed95512f 修改监控中心样式
修改分组管理样式
2024-08-30 17:22:49 +08:00

1009 lines
27 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { http } from '/nerv-lib/util';
import { group, device } from '/@/api/deviceManage';
import { carbonEmissionFactorLibrary, quickCalculation } from '/@/api/carbonEmissionFactorLibrary';
import { dict } from '/@/api';
import { ref } from 'vue';
const tableCalKeyMap = [
{
title: '来源企业',
dataIndex: 'linkOrgName',
textEllipsis: true,
textNumber: 10,
},
{
title: '设备id',
textNumber: 10,
dataIndex: 'deviceCode',
textEllipsis: true,
},
{
title: '设备编号',
dataIndex: 'deviceNum',
textNumber: 10,
},
{
textNumber: 10,
title: '分组名称',
dataIndex: 'groupName',
},
{
title: '设备品牌/型号',
textNumber: 10,
dataIndex: 'deviceNameType',
},
{
textNumber: 10,
title: '设备状态',
dataIndex: 'deviceStatus',
customRender: ({ value }) => {
return value === '0' ? '启用' : '停用';
},
},
];
const tableCarbonKeyMap = [
{
title: '能源类型',
dataIndex: 'energyTypeName',
// textEllipsis: true,
textNumber: 5,
},
{
title: '设备id',
dataIndex: 'deviceInfoCode',
textNumber: 10,
},
{
title: '设备编号',
textNumber: 10,
dataIndex: 'deviceName',
// textEllipsis: true,
},
{
textNumber: 5,
title: '碳排因子值',
dataIndex: 'emissionFactor',
},
{
title: '设备品牌/型号',
textNumber: 10,
dataIndex: 'deviceModel',
},
{
title: '来源企业',
textNumber: 10,
dataIndex: 'manufacturer',
},
{
title: '分组名称',
textNumber: 10,
dataIndex: 'groupName',
},
{
textNumber: 5,
title: '设备状态',
dataIndex: 'status',
customRender: ({ value }) => {
if (value) {
if (value === '0') {
return '启用';
} else if (value === '1') {
return '停用';
}
} else {
return '';
}
},
},
];
const tableKeyMap = [
{
title: '来源企业',
dataIndex: 'orgName',
},
{
title: '节点编号',
dataIndex: 'pointNum',
},
{
title: '节点路径',
dataIndex: 'routeName',
},
];
const doWnload = (url) => {
const a = document.createElement('a');
document.body.appendChild(a);
a.href = encodeURI(url);
//设置下载的文件名
// a.download = fileName.value;
//触发a标签的点击事件进行下载
a.click();
};
export const formSchema = [
{
field: 'isCreate',
component: 'NsCheck',
show: false,
},
{
field: 'isCreatSon',
component: 'NsCheck',
show: false,
},
{
field: 'orgId',
component: 'NsInput',
show: false,
},
{
field: 'energyType',
component: 'NsInput',
show: false,
},
{
field: 'id',
component: 'NsInput',
show: false,
},
{
field: 'pid',
component: 'NsInput',
show: false,
},
{
label: '节点名称',
field: 'pointName',
component: 'NsInput',
componentProps: {
placeholder: '请输入',
maxLength: 20,
},
rules: [
{
required: true,
message: '请输入节点名称',
},
],
},
{
label: '节点类型',
field: 'pointType',
component: 'NsSelectApi',
componentProps: {
placeholder: '请选择',
api: () => dict({ params: { dicKey: 'COUNT_POINT' } }),
// params: { dicKey: 'COUNT_POINT' },
immediate: true,
// resultField: 'data.COUNT_POINT',
labelField: 'cnValue',
valueField: 'dicKey',
},
rules: [
{
required: true,
message: '请输入节点类型',
},
],
},
];
export const editTreeConfig = (orgId) => ({
selectedKeys: ['0-0'],
defaultExpandAll: true,
api: group.queryEditGroup,
params: { orgId },
resultField: 'data.orgInfos',
fieldNames: { title: 'orgName', key: 'orgId' },
formConfig: {
schemas: [
{
field: 'orgName',
component: 'NsInput',
autoSubmit: true,
componentProps: {
placeholder: '请输入企业名称',
},
},
],
},
});
export const editCalTreeConfig = (orgId) => ({
selectedKeys: ['0-0'],
defaultExpandAll: true,
api: group.queryEditCompute,
params: { orgId },
resultField: 'data.orgInfos',
fieldNames: { title: 'orgName', key: 'orgId' },
formConfig: {
schemas: [
{
field: 'orgName',
component: 'NsInput',
autoSubmit: true,
componentProps: {
placeholder: '请输入企业名称',
},
},
],
},
});
export const treeConfig = (orgId, editCarbonEquipmentRef, tableRef) => {
return {
defaultExpandAll: true,
header: {
icon: 'orgLink',
title: '能耗分组',
},
params: { orgId },
api: group.queryDeviceGroupTree,
transform: (data) => {
return [{ pointName: '全部', id: 'all', selectable: false, children: data }];
},
formConfig: {
callList: true, // 刷新列表
// defaultSelection: true, //树默认选择第一个
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,
onSelect: async (cur, record) => {
editCarbonEquipmentRef.value.changeEnergyType(cur);
tableRef.value?.nsTableRef.clearCheck();
tableRef.value?.nsTableRef.reload();
// value.value = cur;
},
},
},
{
field: 'pointName',
label: '',
component: 'NsInput',
autoSubmit: true,
componentProps: {
placeholder: '请输入节点名称',
},
},
],
},
};
};
export const tableConfig = (el, elGroup, elFormula, defaultParams) => {
return {
title: '点位信息',
api: group.queryGroupPage,
params: defaultParams.value,
headerActions: [
{
label: '编辑',
name: 'GroupEdit',
type: 'primary',
dynamicDisabled: () => !defaultParams.value?.id,
handle: (a, b) => {
el.value.toggle();
},
},
{
label: '批量删除',
name: 'GroupDelete',
type: 'primary',
dynamicDisabled: (data: any) => {
return data.list.length === 0;
},
dynamicParams: { linkIds: 'linkId[]' },
confirm: true,
isClearCheck: true,
isReload: true,
api: group.delGroupList,
},
{
label: '批量导出',
name: 'GroupPointExports',
type: 'primary',
dynamicDisabled: (data: any) => {
return data.list.length === 0;
},
extra: {
xlsxMap: tableKeyMap,
xlsxName: '分组信息YYYY-MM-DD',
},
},
{
label: '批量导入',
name: 'GroupPointImport',
type: 'primary',
extra: {
// api: props.postImportApi, // 导入接口名
title: '设备信息', // 弹窗title
templateName: 'whiteListUser', // 所使用的文件名称
indexName: '设备id', // 匹配类型字段
message: [
{ label: '1、若必填项未填写则不能进行导入操作' },
{ label: `2、当重复时则更新数据。` },
{ label: '3、数据将从模版的第五行进行导入。' },
{ label: '4、文件导入勿超过5MB。' },
],
},
},
{
label: '模板下载',
name: 'GroupTempDownload',
type: 'primary',
handle: () => {
// http.get('/asset/file/whiteListUser.xlsx');
doWnload('/hx-ai-intelligent/asset/file/whiteListUser.xlsx');
},
},
],
columns: tableKeyMap,
columnActions: {
title: '操作',
actions: [
{
label: '删除',
name: 'GroupDelete',
dynamicParams: { linkIds: 'linkId[]' },
confirm: true,
isClearCheck: true,
isReload: true,
api: group.delGroupList,
},
],
},
formConfig: {
schemas: [
{
field: 'orgName',
component: 'NsSelectApi',
defaultParams: defaultParams.value,
componentProps: {
placeholder: '请选择公司',
mode: 'multiple',
api: group.dropGroupFilter,
resultField: 'data',
params: { filterField: 'ORG' },
labelField: 'orgName',
valueField: 'orgId',
filterOption: (input: string, option: any) => {
return option.deviceName.toLowerCase().indexOf(input.toLowerCase()) >= 0;
},
showSearch: true,
dropdownReload: true,
allowClear: true,
},
},
{
field: 'pointNum',
component: 'NsInput',
componentProps: {
placeholder: '请输入节点编号',
},
},
],
},
// pagination: { pageSizeOptions: false },
rowKey: 'id',
};
};
export const tableConfigCal = (
el,
elGroup,
elFormula,
defaultParams,
isCarbon,
editCarbonEquipmentRef,
setFactorRef,
) => {
// 计算节点
return {
title: '点位信息',
api: isCarbon ? group.getCarbonGroupList : group.queryGroupInfoPage,
params: defaultParams.value,
headerActions: [
{
label: '编辑',
name: 'GroupPointEdit',
type: 'primary',
handle: async (a, b) => {
// if (isCarbon) {
editCarbonEquipmentRef.value.toggle();
// } else {
// el.value.toggle();
// }
},
},
{
label: '关联因子值',
name: 'SetFactor',
type: 'primary',
dynamicDisabled: (data: any) => {
return data.list.length === 0;
},
ifShow: (data: any) => {
return isCarbon;
},
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',
type: 'primary',
dynamicDisabled: (data: any) => {
return data.list.length === 0;
},
dynamicParams: isCarbon
? {
deviceInfoCodeList: 'id[]',
}
: {
ids: 'id[]',
},
confirm: true,
isReload: true,
isClearCheck: true,
api: isCarbon ? group.deleteCarbonDevice : group.delComputeList,
},
{
label: '批量导出',
name: 'GroupPointExports',
type: 'primary',
dynamicDisabled: (data: any) => {
return data.list.length === 0;
},
extra: {
xlsxMap: isCarbon ? tableCarbonKeyMap : tableCalKeyMap,
xlsxName: '分组信息YYYY-MM-DD',
},
},
{
label: '批量导入',
name: 'GroupPointImport',
type: 'primary',
extra: {
// api: props.postImportApi, // 导入接口名
title: '设备信息', // 弹窗title
templateName: 'whiteListUser', // 所使用的文件名称
indexName: '设备id', // 匹配类型字段
message: [
{ label: '1、若必填项未填写则不能进行导入操作' },
{ label: `2、当重复时则更新数据。` },
{ label: '3、数据将从模版的第五行进行导入。' },
{ label: '4、文件导入勿超过5MB。' },
],
},
},
{
label: '模板下载',
name: 'GroupTempDownload',
type: 'primary',
handle: () => {
// http.get('/asset/file/whiteListUser.xlsx');
doWnload('/hx-ai-intelligent/asset/file/whiteListUser.xlsx');
},
},
{
label: '批量分组',
name: 'GroupBatchGroup',
type: 'primary',
dynamicDisabled: (data: any) => {
return data.list.length === 0;
},
handle: ({ list }) => {
const ids = list.map(({ id }) => id);
defaultParams.value['saveDeviceInfoIds'] = ids;
elGroup.value.toggle();
},
},
{
label: '公式编辑',
name: 'GroupFormulaEdit',
type: 'primary',
handle: () => {
elFormula.value.toggle();
},
},
],
scroll: { x: 1400 },
columns: isCarbon ? tableCarbonKeyMap : tableCalKeyMap,
columnActions: {
title: '操作',
actions: [
{
label: '关联因子',
// label: (record) => {
// // 根据record的某个字段值判断显示'关联因子'或'修改因子'
// return record.emissionFactor ? '修改因子' : '关联因子';
// },
name: 'SetFactor',
ifShow: (record) => {
// 这里根据record的某个字段值判断是否禁用删除按钮
return isCarbon && record.id >= 0 && !record.emissionFactor;
},
handle: (row) => {
setFactorRef.value.toggle([row.id]);
},
},
{
label: '修改关联',
// label: (record) => {
// // 根据record的某个字段值判断显示'关联因子'或'修改因子'
// return record.emissionFactor ? '修改因子' : '关联因子';
// },
name: 'SetFactor',
ifShow: (record) => {
// 这里根据record的某个字段值判断是否禁用删除按钮
return isCarbon && record.id >= 0 && record.emissionFactor;
},
handle: (row) => {
setFactorRef.value.toggle([row.id]);
},
},
{
label: '删除',
name: 'GroupPointDelete',
ifShow: (record) => {
// 这里根据record的某个字段值判断是否禁用删除按钮
return record.id >= 0;
},
dynamicParams: isCarbon
? {
deviceInfoCodeList: 'id[]',
}
: {
ids: 'id[]',
},
confirm: true,
isReload: true,
isClearCheck: true,
api: isCarbon ? group.deleteCarbonDevice : group.delComputeList,
},
],
},
formConfig: {
schemas: [
{
field: 'orgIds',
component: 'NsSelectApi',
defaultParams: defaultParams.value,
componentProps: {
placeholder: '请选择公司',
mode: 'multiple',
api: group.dropGroupInfoFilter,
resultField: 'data',
params: { filterField: 'ORG' },
labelField: 'orgName',
valueField: 'orgId',
filterOption: (input: string, option: any) => {
return option.deviceName.toLowerCase().indexOf(input.toLowerCase()) >= 0;
},
showSearch: true,
dropdownReload: true,
allowClear: true,
},
},
{
field: 'deviceCode',
component: 'NsInput',
componentProps: {
placeholder: '请输入设备id',
},
},
{
field: 'deviceNum',
component: 'NsInput',
componentProps: {
placeholder: '请输入设备编号',
},
},
{
field: 'deviceStatus',
component: 'NsSelectApi',
componentProps: {
placeholder: '请选择设备状态',
api: () => dict({ params: { dicKey: 'DEVICE_STATUS' } }),
immediate: true,
labelField: 'cnValue',
valueField: 'dicKey',
},
},
{
field: 'deviceNameType',
component: 'NsSelectApi',
defaultParams: defaultParams.value,
componentProps: {
placeholder: '请选择设备型号',
api: (params: any) => {
return http.post(group.dropGroupInfoFilter, params).then((res: any) => {
const result = [...new Set(res.data)];
return { data: result };
});
},
resultField: 'data',
params: { filterField: 'DEVICE_TYPE' },
// labelField: 'orgName',
// valueField: 'orgId',
filterOption: (input: string, option: any) => {
return option.deviceName.toLowerCase().indexOf(input.toLowerCase()) >= 0;
},
showSearch: true,
dropdownReload: true,
allowClear: true,
},
},
{
field: 'groupName',
component: 'NsInput',
componentProps: {
placeholder: '请输入分组名称',
},
},
],
},
pagination: isCarbon ? false : true,
rowKey: 'id',
rowSelection: { checkStrictly: false },
};
};
export const editCarbonEquipmentConfig = (orgId, props) => {
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: '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: 'energyType',
label: '',
component: 'NsSelectApi',
// autoSubmit: true,
defaultValue: props.params.energyType,
componentProps: {
api: () => dict({ params: { dicKey: 'ENERGY_TYPE' } }),
// params: { dicKey: 'ENERGY_TYPE' },
immediate: true,
// resultField: 'data.ENERGY_TYPE',
labelField: 'cnValue',
valueField: 'dicKey',
placeholder: '请选择能耗种类',
// autoSelectFirst: true,
},
dynamicDisabled: (data: any) => {
return props.params.energyType !== 'CARBON_EMISSIONS';
},
},
{
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: true,
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',
});
};