529 lines
13 KiB
TypeScript
529 lines
13 KiB
TypeScript
import { http } from '/nerv-lib/util';
|
||
import { group } from '/@/api/deviceManage';
|
||
import { dict } from '/@/api';
|
||
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 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: 32,
|
||
},
|
||
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) => {
|
||
return {
|
||
defaultExpandAll: true,
|
||
header: {
|
||
icon: 'orgLink',
|
||
title: '能耗分组',
|
||
},
|
||
params: { orgId },
|
||
|
||
api: group.queryDeviceGroupTree,
|
||
transform: (data) => {
|
||
return [{ pointName: '全部', id: 'all', selectable: false, children: data }];
|
||
},
|
||
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: '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) => {
|
||
// 计算节点
|
||
return {
|
||
title: '点位信息',
|
||
api: group.queryGroupInfoPage,
|
||
params: defaultParams.value,
|
||
headerActions: [
|
||
{
|
||
label: '编辑',
|
||
name: 'GroupPointEdit',
|
||
type: 'primary',
|
||
handle: (a, b) => {
|
||
el.value.toggle();
|
||
},
|
||
},
|
||
{
|
||
label: '批量删除',
|
||
name: 'GroupPointDelete',
|
||
type: 'primary',
|
||
dynamicDisabled: (data: any) => {
|
||
return data.list.length === 0;
|
||
},
|
||
dynamicParams: { ids: 'id[]' },
|
||
confirm: true,
|
||
isReload: true,
|
||
isClearCheck: true,
|
||
api: group.delComputeList,
|
||
},
|
||
{
|
||
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');
|
||
},
|
||
},
|
||
|
||
{
|
||
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: tableCalKeyMap,
|
||
columnActions: {
|
||
title: '操作',
|
||
actions: [
|
||
{
|
||
label: '删除',
|
||
name: 'GroupPointDelete',
|
||
dynamicParams: { ids: 'id[]' },
|
||
confirm: true,
|
||
isReload: true,
|
||
isClearCheck: true,
|
||
api: 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: 'provider',
|
||
component: 'NsInput',
|
||
componentProps: {
|
||
placeholder: '请输入分组名称',
|
||
},
|
||
},
|
||
],
|
||
},
|
||
// pagination: { pageSizeOptions: false },
|
||
rowKey: 'id',
|
||
};
|
||
};
|