You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1008 lines
27 KiB
1008 lines
27 KiB
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',
|
|
});
|
|
};
|
|
|