Merge branch 'temp' of http://123.60.103.97:3000/xuziqiang/SaaS-lib into temp
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
export enum notificationManagementApi {
|
||||
getTableList = '/carbon-smart/api/AlarmContactInformation/selectAlarmContactInformation', //通知管理分页
|
||||
upData = '/carbon-smart/api/AlarmContactInformation/update', //通知管理 修改
|
||||
findById = '/carbon-smart/api/AlarmContactInformation/findById', //通知管理 查询详情
|
||||
}
|
||||
@@ -9,11 +9,11 @@ export enum carbonEmissionFactorLibrary {
|
||||
creat = '/carbon-smart/api/carbon/emission/type/creatOrUpdate',
|
||||
delTreeNode = '/carbon-smart/api/carbon/emission/type/del',
|
||||
// 单位管理
|
||||
dictionaryUnitManagement = '/carbon-smart/api/carbon/emission/factor/dictionaryUnitManagement',
|
||||
findOutermost = '/carbon-smart/api/carbon/emission/factor/findOutermost',
|
||||
createDictionary = '/carbon-smart/api/carbon/emission/factor/createDictionary',
|
||||
updateDictionary = '/carbon-smart/api/carbon/emission/factor/updateDictionary',
|
||||
delDictionary = '/carbon-smart/api/carbon/emission/factor/delDictionary',
|
||||
dictionaryUnitManagement = '/carbon-smart/client/dict/dictionaryUnitManagement',
|
||||
findOutermost = '/carbon-smart/client/dict/findOutermost',
|
||||
createDictionary = '/carbon-smart/client/dict/createDictionary',
|
||||
updateDictionary = '/carbon-smart/client/dict/updateDictionary',
|
||||
delDictionary = '/carbon-smart/client/dict/delDictionary',
|
||||
}
|
||||
// 碳排管理-碳排统计接口
|
||||
export enum energyConsumption {
|
||||
|
||||
@@ -45,6 +45,26 @@ const equipment = {
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: 'carbonInventoryCheck',
|
||||
name: 'CarbonInventoryCheck',
|
||||
meta: { title: '碳盘查', hideChildren: true, icon: 'tanpaiguanli' },
|
||||
component: Base,
|
||||
redirect: { name: 'CarbonInventoryCheckIndex' },
|
||||
children: [
|
||||
{
|
||||
path: 'index',
|
||||
name: 'CarbonInventoryCheckIndex',
|
||||
// component: () => import('/nerv-lib/saas/view/menuManage/index.vue'),
|
||||
component: () => import('/@/view/carbonEmissionManage/carbonInventoryCheck/index.vue'),
|
||||
meta: {
|
||||
title: '碳盘查',
|
||||
keepAlive: true,
|
||||
// backApi: [],
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
};
|
||||
export default equipment;
|
||||
|
||||
@@ -177,6 +177,25 @@
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '是否创建工单',
|
||||
field: 'createWorkOrder',
|
||||
component: 'NsRadioGroup',
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: '是否创建工单不能为空',
|
||||
trigger: 'change',
|
||||
},
|
||||
],
|
||||
componentProps: {
|
||||
radioType: 'radio',
|
||||
options: [
|
||||
{ label: '是', value: 1 },
|
||||
{ label: '否', value: 0 },
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
|
||||
@@ -195,6 +195,25 @@
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '是否创建工单',
|
||||
field: 'createWorkOrder',
|
||||
component: 'NsRadioGroup',
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: '是否创建工单不能为空',
|
||||
trigger: 'change',
|
||||
},
|
||||
],
|
||||
componentProps: {
|
||||
radioType: 'radio',
|
||||
options: [
|
||||
{ label: '是', value: 1 },
|
||||
{ label: '否', value: 0 },
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
|
||||
@@ -4,21 +4,27 @@
|
||||
<a-tab-pane key="1" tab="通知管理">
|
||||
<ns-view-list-table v-bind="notificationConfig" ref="mainRef">
|
||||
<template #bodyCell="{ record, column }">
|
||||
<template v-if="column.dataIndex === 'enableRules'">
|
||||
<template v-if="column.dataIndex === 'enableNotifications'">
|
||||
<a-switch
|
||||
:checked="record.enableRules === 1 ? true : false"
|
||||
:checked="record.enableNotifications === 1 ? true : false"
|
||||
:class="{
|
||||
'blue-background': record.enableRules === 1 ? true : false,
|
||||
'grey-background': record.enableRules === 1 ? false : true,
|
||||
'blue-background': record.enableNotifications === 1 ? true : false,
|
||||
'grey-background': record.enableNotifications === 1 ? false : true,
|
||||
}"
|
||||
@change="
|
||||
clickSwitch({ type: 1, enableRules: record.enableRules, record: record })
|
||||
" />
|
||||
</template>
|
||||
<template v-if="column.dataIndex === 'prioritys'">
|
||||
{{ record.priority ? record.priority.label : '' }}
|
||||
</template>
|
||||
<template v-if="column.dataIndex === 'notificationMethod'">
|
||||
{{ getNotificationMethod(record.notificationMethod) }}
|
||||
</template>
|
||||
</template>
|
||||
</ns-view-list-table>
|
||||
<!-- 联系方式 -->
|
||||
<notificationManagement ref="notificationManagements" @editObject="editObject" />
|
||||
<notificationManagement ref="notificationManagements" @updNotification="updNotification" />
|
||||
</a-tab-pane>
|
||||
<a-tab-pane key="2" tab="设备告警" force-render>
|
||||
<ns-view-list-table
|
||||
@@ -49,7 +55,7 @@
|
||||
{{ record.repetitions.label }}
|
||||
</template>
|
||||
<template v-if="column.dataIndex === 'prioritys'">
|
||||
{{ record.priority.label }}
|
||||
{{ record.priority ? record.priority.label : '-' }}
|
||||
</template>
|
||||
</template>
|
||||
</ns-view-list-table>
|
||||
@@ -90,7 +96,7 @@
|
||||
{{ record.repetitions.label }}
|
||||
</template>
|
||||
<template v-if="column.dataIndex === 'prioritys'">
|
||||
{{ record.priority.label }}
|
||||
{{ record.priority ? record.priority.label : '-' }}
|
||||
</template>
|
||||
</template>
|
||||
</ns-view-list-table>
|
||||
@@ -124,6 +130,7 @@
|
||||
import { deviceAlarms } from '/@/api/alarmSettings/deviceAlarms';
|
||||
import { energyAlarms } from '/@/api/alarmSettings/energyAlarm';
|
||||
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
|
||||
import { notificationManagementApi } from '/@/api/alarmSettings/notificationManagements';
|
||||
|
||||
export default {
|
||||
name: 'AlarmSettingsIndex',
|
||||
@@ -146,6 +153,22 @@
|
||||
const equipmentAlarm = ref(true);
|
||||
const energyAlarm = ref(true);
|
||||
const notificationConfig = notificationtableConfig(notificationManagements);
|
||||
//获取 通知方式
|
||||
const getNotificationMethod = (data: any) => {
|
||||
if (!data) return '';
|
||||
const methods = [];
|
||||
const notifications = data.split(',');
|
||||
|
||||
notifications.forEach((notification) => {
|
||||
if (notification === '1') {
|
||||
methods.push('站内信息');
|
||||
} else if (notification === '2') {
|
||||
methods.push('邮件');
|
||||
}
|
||||
});
|
||||
|
||||
return methods.join('/');
|
||||
};
|
||||
//能源告警配置
|
||||
const energyAlarmConfig = energyAlarmConfigs(
|
||||
editeEnergyAlarm,
|
||||
@@ -169,6 +192,10 @@
|
||||
energyAlarm.value = !energyAlarm.value;
|
||||
configureEnergyAlarms.value.show = false;
|
||||
};
|
||||
//通知 修改成功
|
||||
const updNotification = () => {
|
||||
mainRef.value?.nsTableRef.reload();
|
||||
};
|
||||
const clickSwitch = (data: any) => {
|
||||
NsModal.confirm({
|
||||
title: '启用状态',
|
||||
@@ -182,12 +209,14 @@
|
||||
if (data.type === 1) {
|
||||
//通知方式
|
||||
http
|
||||
.post(deviceAlarms.addOrUpNewData, {
|
||||
.post(notificationManagementApi.upData, {
|
||||
id: data.record.id,
|
||||
enableRules: data.record.enableRules === 1 ? 0 : 1,
|
||||
enableNotifications: data.record.enableNotifications === 1 ? 0 : 1,
|
||||
})
|
||||
.then(() => {
|
||||
NsMessage.success(data.record.enableRules === 1 ? '通知已关闭' : '通知已启用');
|
||||
NsMessage.success(
|
||||
data.record.enableNotifications === 1 ? '通知已关闭' : '通知已启用',
|
||||
);
|
||||
mainRef.value?.nsTableRef.reload();
|
||||
});
|
||||
}
|
||||
@@ -232,6 +261,8 @@
|
||||
equipmentAlarmConfig,
|
||||
editObject,
|
||||
editeEnergyAlarm,
|
||||
updNotification,
|
||||
getNotificationMethod,
|
||||
clickSwitch,
|
||||
editEquipmentAlarm,
|
||||
notificationManagements,
|
||||
|
||||
@@ -10,10 +10,10 @@
|
||||
@close="handleClose">
|
||||
<div style="width: 100%; overflow: hidden; overflow-y: hidden; height: 100%">
|
||||
<a-form ref="formRef" :model="infoObject" :rules="rules" style="width: 80%">
|
||||
<a-form-item ref="notification" label="通知方式" name="notification">
|
||||
<a-form-item ref="notificationMethod" label="通知方式" name="notificationMethod">
|
||||
<a-select
|
||||
ref="select"
|
||||
v-model:value="infoObject.notification"
|
||||
v-model:value="infoObject.notificationMethod"
|
||||
style="width: 100%"
|
||||
mode="multiple"
|
||||
:options="devicePointData"
|
||||
@@ -24,34 +24,18 @@
|
||||
</a-form-item>
|
||||
<a-form-item label="启用规则">
|
||||
<a-switch
|
||||
:checked="infoObject.enableRules === 1 ? true : false"
|
||||
:checked="infoObject.enableNotifications === 1 ? true : false"
|
||||
:class="{
|
||||
'blue-background': infoObject.enableRules === 1 ? true : false,
|
||||
'grey-background': infoObject.enableRules === 1 ? false : true,
|
||||
'blue-background': infoObject.enableNotifications === 1 ? true : false,
|
||||
'grey-background': infoObject.enableNotifications === 1 ? false : true,
|
||||
}"
|
||||
@click="clickSwitch" />
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
<div style="width: 100%; height: 765px; overflow-y: auto">
|
||||
<div style="margin-bottom: 8px">
|
||||
<div style="width: 100%; display: flex; position: relative">
|
||||
<div
|
||||
style="
|
||||
border-width: 0px;
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
top: 5px;
|
||||
width: 5px;
|
||||
height: 15px;
|
||||
background: inherit;
|
||||
background-color: #2778ff;
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
-moz-box-shadow: none;
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
"></div>
|
||||
<span style="margin-left: 24px; color: #333333">联系人名单</span>
|
||||
<div style="width: 100%; display: flex; position: relative" class="ns-title-extra-box">
|
||||
<span style="margin-left: 12px; color: #333333">联系人名单</span>
|
||||
</div>
|
||||
<img
|
||||
style="width: 100%; margin-top: -10px"
|
||||
@@ -67,10 +51,10 @@
|
||||
:pagination="pagination">
|
||||
<template #bodyCell="{ record, column }">
|
||||
<template v-if="column.dataIndex === 'address'">
|
||||
{{ record.userRoleInfos?.[0].deptRoleInfoList }}
|
||||
{{ record?.deptRoleInfoList || record.userRoleInfos?.[0].deptRoleInfoList }}
|
||||
</template>
|
||||
<template v-if="column.dataIndex === 'operation'">
|
||||
<a style="color: rgb(210, 0, 5)" @click="remove(record)">移除</a>
|
||||
<a style="color: #2778ff" @click="remove(record)">移除</a>
|
||||
</template>
|
||||
</template>
|
||||
</a-table>
|
||||
@@ -85,12 +69,11 @@
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { ref } from 'vue';
|
||||
// import { NsMessage } from '/nerv-lib/component';
|
||||
// import { http } from '/nerv-lib/util';
|
||||
// import { number } from 'vue-types';
|
||||
import { NsMessage } from '/nerv-lib/component';
|
||||
import { http } from '/nerv-lib/util';
|
||||
import linkPeople from './linkPeople/index.vue';
|
||||
|
||||
// import { deviceAlarms } from '/@/api/alarmSettings/deviceAlarms';
|
||||
import { notificationManagementApi } from '/@/api/alarmSettings/notificationManagements';
|
||||
import { async } from '@antv/x6/lib/registry/marker/async';
|
||||
|
||||
//table 数据
|
||||
const columns = [
|
||||
@@ -125,6 +108,8 @@
|
||||
title: '部门',
|
||||
dataIndex: 'address',
|
||||
key: 'address',
|
||||
width: 200,
|
||||
textEllipsis: true,
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
@@ -160,7 +145,7 @@
|
||||
dataSource.value.forEach((item) => {
|
||||
ids.push(item.userId);
|
||||
});
|
||||
linkPeoples.value.getData({ id: ids, data: dataSource });
|
||||
linkPeoples.value.getData({ id: ids, data: dataSource.value });
|
||||
};
|
||||
//取消弹窗
|
||||
const handleCancel = () => {
|
||||
@@ -173,7 +158,7 @@
|
||||
};
|
||||
//表单数据
|
||||
const infoObject = ref({
|
||||
enableRules: 0,
|
||||
enableNotifications: 0,
|
||||
});
|
||||
//设备点位搜索
|
||||
const filterDevicePoint = (input: string, option: any) => {
|
||||
@@ -181,45 +166,47 @@
|
||||
};
|
||||
//开关
|
||||
const clickSwitch = () => {
|
||||
if (infoObject.value.enableRules === 1) {
|
||||
infoObject.value.enableRules = 0;
|
||||
if (infoObject.value.enableNotifications === 1) {
|
||||
infoObject.value.enableNotifications = 0;
|
||||
} else {
|
||||
infoObject.value.enableRules = 1;
|
||||
infoObject.value.enableNotifications = 1;
|
||||
}
|
||||
};
|
||||
// 通知信息
|
||||
const devicePointData = ref([
|
||||
{ label: '站内信息', value: 1 },
|
||||
{ label: '邮件', value: 2 },
|
||||
{ label: '站内信息', value: '1' },
|
||||
{ label: '邮件', value: '2' },
|
||||
]);
|
||||
|
||||
const rules = {
|
||||
notification: [{ required: true, message: '请选择通知方式', trigger: 'change' }],
|
||||
notificationMethod: [{ required: true, message: '请选择通知方式', trigger: 'change' }],
|
||||
user: [{ required: true, message: '请选择通知人', trigger: 'change' }],
|
||||
};
|
||||
const formRef = ref();
|
||||
const emit = defineEmits(['editObject']);
|
||||
const toggle = (value: any) => {
|
||||
const emit = defineEmits(['updNotification']);
|
||||
const toggle = async (value: any) => {
|
||||
//判断 是新增 还是修改
|
||||
if (value) {
|
||||
// 获取接口
|
||||
infoObject.value = {
|
||||
enableRules: 0,
|
||||
};
|
||||
// await http
|
||||
// .post(group.queryDeviceGroupTree, {
|
||||
// pageNum: 1,
|
||||
// pageSize: 999,
|
||||
// energyType: selectedOptions[0].dicKey,
|
||||
// orgId: orgId.value,
|
||||
// })
|
||||
// .then((res) => {
|
||||
// jdTreeData.value = res.data;
|
||||
// });
|
||||
// // 获取接口
|
||||
await http
|
||||
.post(notificationManagementApi.findById, {
|
||||
id: value.id,
|
||||
})
|
||||
.then((res) => {
|
||||
infoObject.value = res.data;
|
||||
if (infoObject.value.notificationMethod) {
|
||||
infoObject.value.notificationMethod = infoObject.value.notificationMethod.split(',');
|
||||
} else {
|
||||
infoObject.value.notificationMethod = [];
|
||||
}
|
||||
dataSource.value = res.data.hxAlarmNotifyUserList;
|
||||
});
|
||||
} else {
|
||||
infoObject.value = {
|
||||
enableRules: 0,
|
||||
enableNotifications: 0,
|
||||
notificationMethod: [],
|
||||
};
|
||||
dataSource.value = [];
|
||||
}
|
||||
visible.value = !visible.value;
|
||||
};
|
||||
@@ -233,24 +220,36 @@
|
||||
dataSource.value = [...dataSource.value];
|
||||
};
|
||||
const btnClick = () => {
|
||||
console.log(infoObject.value);
|
||||
//发送请求数据
|
||||
let obj = {};
|
||||
obj.selectList = [];
|
||||
dataSource.value.forEach((item) => {
|
||||
obj.selectList.push({
|
||||
userId: item.userId,
|
||||
});
|
||||
});
|
||||
console.log(obj, '数据');
|
||||
if (dataSource.value.length === 0) {
|
||||
NsMessage.warn('请选择联系人');
|
||||
return;
|
||||
}
|
||||
//表单校验
|
||||
formRef.value.validate().then(() => {
|
||||
//发送请求数据
|
||||
let obj = {
|
||||
id: null,
|
||||
notificationMethod: null,
|
||||
hxAlarmNotifyUserList: [],
|
||||
enableNotifications: 0,
|
||||
};
|
||||
obj.notificationMethod = infoObject.value.notificationMethod.toString();
|
||||
obj.id = infoObject.value.id;
|
||||
obj.enableNotifications = infoObject.value.enableNotifications;
|
||||
dataSource.value.forEach((item) => {
|
||||
obj.hxAlarmNotifyUserList.push({
|
||||
userId: item.userId,
|
||||
contactInformationId: infoObject.value.id,
|
||||
});
|
||||
});
|
||||
//调用接口
|
||||
// http.post(deviceAlarms.addOrUpNewData, infoObject.value).then(() => {
|
||||
// NsMessage.success('操作成功');
|
||||
// visible.value = false;
|
||||
// emit('editObject', null);
|
||||
// });
|
||||
http.post(notificationManagementApi.upData, obj).then((res) => {
|
||||
if (res.msg === 'success') {
|
||||
NsMessage.success('操作成功');
|
||||
visible.value = false;
|
||||
emit('updNotification', null);
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
const handleClose = () => {
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
import { department } from '/@/api/origanizemanage';
|
||||
|
||||
export const editTreeConfig = (orgId) => ({
|
||||
selectedKeys: ['0-0'],
|
||||
defaultExpandAll: true,
|
||||
api: department.queryDeptTree,
|
||||
params: { orgId },
|
||||
resultField: 'data.orgInfos',
|
||||
fieldNames: { title: 'orgName', key: 'orgId' },
|
||||
formConfig: {
|
||||
schemas: [
|
||||
{
|
||||
field: 'orgName',
|
||||
component: 'NsInput',
|
||||
autoSubmit: true,
|
||||
componentProps: {
|
||||
placeholder: '请输入企业名称',
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
@@ -8,9 +8,8 @@
|
||||
@cancel="handleCancel">
|
||||
<div class="box">
|
||||
<div class="box-left">
|
||||
<div style="width: 100%; display: flex; position: relative">
|
||||
<div class="border-card"></div>
|
||||
<span style="margin-left: 24px; color: #333333">联系人名单</span>
|
||||
<div style="width: 100%; display: flex; position: relative" class="ns-title-extra-box">
|
||||
<span style="margin-left: 12px; color: #333333">联系人名单</span>
|
||||
</div>
|
||||
<img
|
||||
style="width: 100%; height: 2px"
|
||||
@@ -31,9 +30,8 @@
|
||||
/></div>
|
||||
</div>
|
||||
<div class="box-right">
|
||||
<div style="width: 100%; display: flex; position: relative">
|
||||
<div class="border-card"></div>
|
||||
<span style="margin-left: 24px; color: #333333">人员列表 </span>
|
||||
<div style="width: 100%; display: flex; position: relative" class="ns-title-extra-box">
|
||||
<span style="margin-left: 12px; color: #333333">人员列表 </span>
|
||||
<a-input-search
|
||||
v-model:value="realName"
|
||||
style="margin-bottom: 8px; width: 280px; position: absolute; right: 20px"
|
||||
@@ -191,6 +189,7 @@
|
||||
orgId: selectOrgId.value,
|
||||
deptId: selectDeptId.value,
|
||||
realName: realName.value,
|
||||
userStatus: 0,
|
||||
})
|
||||
.then((res) => {
|
||||
dataSource.value = res.data.records;
|
||||
@@ -206,7 +205,25 @@
|
||||
|
||||
const onSelectChange = (selectedRowKeys: any, selectedRows: any) => {
|
||||
selectedRowKey.value = selectedRowKeys;
|
||||
selectedRow.value = selectedRows;
|
||||
// 使用 forEach 循环遍历 selectedRows 数组
|
||||
let newSelectRows = [];
|
||||
selectedRows.forEach((item, index) => {
|
||||
if (item) {
|
||||
newSelectRows.push(item);
|
||||
}
|
||||
});
|
||||
// 添加新选中的行的 userId 到 selectedRow.value
|
||||
selectedRow.value = [
|
||||
...selectedRow.value,
|
||||
...newSelectRows.filter(
|
||||
(newRow: any) =>
|
||||
!selectedRow.value.some((existingRow) => existingRow.userId === newRow.userId),
|
||||
),
|
||||
];
|
||||
// 移除取消选中的行的 userId
|
||||
selectedRow.value = selectedRow.value.filter((existingRow: any) =>
|
||||
selectedRowKeys.includes(existingRow.userId),
|
||||
);
|
||||
};
|
||||
const pagination = ref({
|
||||
total: 0,
|
||||
@@ -252,6 +269,8 @@
|
||||
pagination.value.current = 1;
|
||||
realName.value = null;
|
||||
searchValue.value = '';
|
||||
selectDeptId.value = '';
|
||||
selectOrgId.value = orgId.value;
|
||||
};
|
||||
const getData = (data: any) => {
|
||||
selectedRow.value = data.data;
|
||||
@@ -265,10 +284,13 @@
|
||||
const show = ref(false);
|
||||
const handleCancel = () => {
|
||||
// 处理取消按钮的逻辑
|
||||
pagination.value.current = 1;
|
||||
realName.value = null;
|
||||
emit('handleCancel', null);
|
||||
show.value = false;
|
||||
pagination.value.current = 1;
|
||||
realName.value = null;
|
||||
searchValue.value = '';
|
||||
selectDeptId.value = '';
|
||||
selectOrgId.value = orgId.value;
|
||||
};
|
||||
watch(searchValue, (value) => {
|
||||
const expanded = dataList
|
||||
@@ -317,21 +339,6 @@
|
||||
});
|
||||
</script>
|
||||
<style scoped lang="less">
|
||||
.border-card {
|
||||
border-width: 0px;
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
top: 5px;
|
||||
width: 5px;
|
||||
height: 15px;
|
||||
background: inherit;
|
||||
background-color: @primary-color;
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
-moz-box-shadow: none;
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
.box {
|
||||
width: 100%;
|
||||
height: 500px;
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
import data from '../notificationManagementMock.json';
|
||||
import { http } from '/nerv-lib/util';
|
||||
import { NsMessage } from '/nerv-lib/component';
|
||||
import { deviceAlarms } from '/@/api/alarmSettings/deviceAlarms';
|
||||
|
||||
import { ref } from 'vue';
|
||||
const tableKeyMap = [
|
||||
{
|
||||
title: '序号',
|
||||
@@ -37,7 +35,6 @@ const tableKeyMap = [
|
||||
dataIndex: 'enableRules',
|
||||
},
|
||||
];
|
||||
const mockData = ref(data.listData);
|
||||
const doWnload = (url: any) => {
|
||||
const a = document.createElement('a');
|
||||
document.body.appendChild(a);
|
||||
@@ -57,7 +54,6 @@ export const equipmentAlarmTableConfig = (
|
||||
return {
|
||||
title: '告警规则',
|
||||
api: deviceAlarms.getTableList,
|
||||
value: mockData.value,
|
||||
headerActions: [
|
||||
{
|
||||
label: '新增',
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import { dateUtil } from '/nerv-lib/util/date-util';
|
||||
import data from '../notificationManagementMock.json';
|
||||
import { http } from '/nerv-lib/util';
|
||||
import { notificationManagementApi } from '/@/api/alarmSettings/notificationManagements';
|
||||
import { ref } from 'vue';
|
||||
|
||||
const tableKeyMap = [
|
||||
{
|
||||
title: '序号',
|
||||
@@ -12,43 +13,41 @@ const tableKeyMap = [
|
||||
},
|
||||
{
|
||||
title: '优先级',
|
||||
dataIndex: 'id',
|
||||
dataIndex: 'prioritys',
|
||||
},
|
||||
{
|
||||
title: '告警类型',
|
||||
dataIndex: 'deviceCode',
|
||||
dataIndex: 'alarmTypeName',
|
||||
},
|
||||
{
|
||||
title: '告警标题',
|
||||
dataIndex: 'deviceName',
|
||||
dataIndex: 'alarmTitle',
|
||||
},
|
||||
{
|
||||
title: '错误码',
|
||||
dataIndex: 'position',
|
||||
dataIndex: 'errorCode',
|
||||
},
|
||||
{
|
||||
title: '通知名单',
|
||||
dataIndex: 'position',
|
||||
dataIndex: 'notificationList',
|
||||
width: 150,
|
||||
textEllipsis: true,
|
||||
},
|
||||
{
|
||||
title: '通知方式',
|
||||
dataIndex: 'position',
|
||||
dataIndex: 'notificationMethod',
|
||||
},
|
||||
{
|
||||
title: '启用通知',
|
||||
dataIndex: 'enableRules',
|
||||
dataIndex: 'enableNotifications',
|
||||
},
|
||||
];
|
||||
const mockData = ref(data.listData);
|
||||
export const notificationtableConfig = (notificationManagements: any) => {
|
||||
return {
|
||||
title: '告警规则',
|
||||
// api: '/carbon_emission/device/getDeviceList',
|
||||
value: mockData.value,
|
||||
headerActions: [{}],
|
||||
api: notificationManagementApi.getTableList,
|
||||
headerActions: [],
|
||||
columns: tableKeyMap,
|
||||
// rowSelection: null, 选择按钮
|
||||
columnActions: {
|
||||
title: '操作',
|
||||
actions: [
|
||||
@@ -66,70 +65,75 @@ export const notificationtableConfig = (notificationManagements: any) => {
|
||||
formConfig: {
|
||||
schemas: [
|
||||
{
|
||||
field: 'name',
|
||||
field: 'alarmType',
|
||||
label: '告警类型',
|
||||
component: 'NsSelect',
|
||||
componentProps: {
|
||||
placeholder: '请选告警类型',
|
||||
allowClear: true,
|
||||
options: [
|
||||
{
|
||||
label: '设备告警',
|
||||
value: '1',
|
||||
value: 1,
|
||||
},
|
||||
{
|
||||
label: '网关告警',
|
||||
value: '2',
|
||||
value: 2,
|
||||
},
|
||||
{
|
||||
label: '能耗告警',
|
||||
value: '3',
|
||||
value: 3,
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'provider',
|
||||
field: 'priority',
|
||||
label: '告警优先级',
|
||||
component: 'NsSelect',
|
||||
componentProps: {
|
||||
placeholder: '请选择告警优先级',
|
||||
allowClear: true,
|
||||
options: [
|
||||
{
|
||||
label: '紧急',
|
||||
value: '1',
|
||||
value: 1,
|
||||
},
|
||||
{
|
||||
label: '重要',
|
||||
value: '1',
|
||||
value: 2,
|
||||
},
|
||||
{
|
||||
label: '一般',
|
||||
value: '2',
|
||||
value: 3,
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'provider',
|
||||
field: 'alarmTitle',
|
||||
label: '告警标题',
|
||||
component: 'NsInput',
|
||||
componentProps: {
|
||||
allowClear: true,
|
||||
placeholder: '请输入告警标题关键字',
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'provider',
|
||||
field: 'errorCode',
|
||||
label: '错误码',
|
||||
component: 'NsInput',
|
||||
componentProps: {
|
||||
allowClear: true,
|
||||
placeholder: '请输入告警错误码',
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'payWay',
|
||||
field: 'enableNotifications',
|
||||
label: '启用状态',
|
||||
component: 'NsSelect',
|
||||
componentProps: {
|
||||
allowClear: true,
|
||||
placeholder: '请选择启用状态',
|
||||
options: [
|
||||
{
|
||||
|
||||
@@ -707,16 +707,17 @@
|
||||
{
|
||||
field: 'emissionProcess',
|
||||
label: '排放环节',
|
||||
component: 'NsSelect',
|
||||
component: 'NsInput',
|
||||
componentProps: {
|
||||
allowClear: true,
|
||||
// allowClear: true,
|
||||
placeholder: '请选择排放环节',
|
||||
options: [
|
||||
{
|
||||
label: '消费环节',
|
||||
value: 0,
|
||||
}
|
||||
],
|
||||
maxLength: 30,
|
||||
// options: [
|
||||
// {
|
||||
// label: '消费环节',
|
||||
// value: 0,
|
||||
// }
|
||||
// ],
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -0,0 +1,306 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- <a-table
|
||||
:columns="column"
|
||||
:data-source="data"
|
||||
bordered
|
||||
:pagination="false"
|
||||
:scroll="{ x: 2000 }">
|
||||
<template #title>
|
||||
<a-date-picker v-model:value="selectYear" picker="year" @change="changeYearData" valueFormat="YYYY" />
|
||||
</template>
|
||||
</a-table> -->
|
||||
<ns-view-list-table v-bind="tableConfig" :model="data" ref="mainRef" />
|
||||
<!-- <a-pagination
|
||||
:current="queryParams.pageNum"
|
||||
:total="total"
|
||||
:page-size="queryParams.pageSize"
|
||||
style="display: flex;justify-content: center;margin-top: 16px;"
|
||||
:show-size-changer="true"
|
||||
:show-quick-jumper="true"
|
||||
@change="onChange" /> -->
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { ref } from 'vue';
|
||||
import { http } from '/nerv-lib/util/http';
|
||||
import { Pagination } from 'ant-design-vue';
|
||||
import dayjs, { Dayjs } from 'dayjs';
|
||||
import { carbonEmission } from '/@/api/carbonEmissionFactorLibrary';
|
||||
defineOptions({
|
||||
energyType: 'CarbonEmissions', // 与页面路由name一致缓存才可生效
|
||||
components: {
|
||||
'a-pagination': Pagination,
|
||||
},
|
||||
});
|
||||
const orgId = ref('');
|
||||
const result = JSON.parse(sessionStorage.getItem('ORGID')!);
|
||||
orgId.value = result;
|
||||
const fetch = (api, params = { orgId } ) => {
|
||||
return http.post(api, params);
|
||||
};
|
||||
const data = ref([]);
|
||||
const selectYear = ref<Dayjs>(dayjs( new Date().getFullYear().toString()));
|
||||
const total = ref<number>()
|
||||
const queryParams = ref({
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
year: selectYear.value.format('YYYY'),
|
||||
orgId: orgId.value
|
||||
})
|
||||
|
||||
// 年份选择改变触发
|
||||
// const changeYearData = () => {
|
||||
// queryParams.value.year = selectYear.value
|
||||
// getTableList()
|
||||
// }
|
||||
// 表头
|
||||
const mainRef = ref();
|
||||
const column: TableColumnsType [] = [
|
||||
{
|
||||
title: '排放类型',
|
||||
dataIndex: 'cnValue',
|
||||
customCell: (record, rowIndex) => {
|
||||
if (rowIndex == undefined) {
|
||||
return {
|
||||
rowSpan: 0,
|
||||
colSpan: 0,
|
||||
};
|
||||
}
|
||||
const rowSpan = getRowSpan('cnValue', record, data.value);
|
||||
if (rowIndex != 0 && data.value[rowIndex - 1].name == record.name) {
|
||||
return {
|
||||
rowSpan: 0,
|
||||
colSpan: 0,
|
||||
};
|
||||
}
|
||||
return {
|
||||
rowSpan: rowSpan,
|
||||
};
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '能源种类',
|
||||
dataIndex: 'energyType',
|
||||
},
|
||||
{
|
||||
title: '计量单位',
|
||||
dataIndex: 'unit',
|
||||
},
|
||||
{
|
||||
title: '加权平均',
|
||||
dataIndex: 'averageFactorValue',
|
||||
},
|
||||
{
|
||||
title: '全年',
|
||||
dataIndex: 'carbonYearly',
|
||||
},
|
||||
{
|
||||
title: '1月',
|
||||
dataIndex: 'jan',
|
||||
},
|
||||
{
|
||||
title: '2月',
|
||||
dataIndex: 'feb',
|
||||
},
|
||||
{
|
||||
title: '3月',
|
||||
dataIndex: 'mar',
|
||||
},
|
||||
{
|
||||
title: '4月',
|
||||
dataIndex: 'apr',
|
||||
},
|
||||
{
|
||||
title: '5月',
|
||||
dataIndex: 'may',
|
||||
},
|
||||
{
|
||||
title: '6月',
|
||||
dataIndex: 'jun',
|
||||
},
|
||||
{
|
||||
title: '7月',
|
||||
dataIndex: 'jul',
|
||||
},
|
||||
{
|
||||
title: '8月',
|
||||
dataIndex: 'aug',
|
||||
},
|
||||
{
|
||||
title: '9月',
|
||||
dataIndex: 'sep',
|
||||
},
|
||||
{
|
||||
title: '10月',
|
||||
dataIndex: 'oct',
|
||||
},
|
||||
{
|
||||
title: '11月',
|
||||
dataIndex: 'nov',
|
||||
},
|
||||
{
|
||||
title: '12月',
|
||||
dataIndex: 'dec',
|
||||
},
|
||||
];
|
||||
const year = ref(selectYear.value.format('YYYY'))
|
||||
const tableConfig = ref({
|
||||
title: '碳排统计',
|
||||
api: carbonEmission.carbonEmissionStatistics,
|
||||
params: {
|
||||
orgId,
|
||||
year
|
||||
},
|
||||
columns: [
|
||||
{
|
||||
title: '排放类型',
|
||||
dataIndex: 'cnValue',
|
||||
customCell: (record, rowIndex) => {
|
||||
if (rowIndex == undefined) {
|
||||
return {
|
||||
rowSpan: 0,
|
||||
colSpan: 0,
|
||||
};
|
||||
}
|
||||
const rowSpan = getRowSpan('cnValue', record, data.value);
|
||||
if (rowIndex != 0 && data.value[rowIndex - 1].name == record.name) {
|
||||
return {
|
||||
rowSpan: 0,
|
||||
colSpan: 0,
|
||||
};
|
||||
}
|
||||
return {
|
||||
rowSpan: rowSpan,
|
||||
};
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '能源种类',
|
||||
dataIndex: 'energyType',
|
||||
},
|
||||
{
|
||||
title: '计量单位',
|
||||
dataIndex: 'unit',
|
||||
},
|
||||
{
|
||||
title: '加权平均',
|
||||
dataIndex: 'averageFactorValue',
|
||||
},
|
||||
{
|
||||
title: '全年',
|
||||
dataIndex: 'carbonYearly',
|
||||
},
|
||||
{
|
||||
title: '1月',
|
||||
dataIndex: 'jan',
|
||||
},
|
||||
{
|
||||
title: '2月',
|
||||
dataIndex: 'feb',
|
||||
},
|
||||
{
|
||||
title: '3月',
|
||||
dataIndex: 'mar',
|
||||
},
|
||||
{
|
||||
title: '4月',
|
||||
dataIndex: 'apr',
|
||||
},
|
||||
{
|
||||
title: '5月',
|
||||
dataIndex: 'may',
|
||||
},
|
||||
{
|
||||
title: '6月',
|
||||
dataIndex: 'jun',
|
||||
},
|
||||
{
|
||||
title: '7月',
|
||||
dataIndex: 'jul',
|
||||
},
|
||||
{
|
||||
title: '8月',
|
||||
dataIndex: 'aug',
|
||||
},
|
||||
{
|
||||
title: '9月',
|
||||
dataIndex: 'sep',
|
||||
},
|
||||
{
|
||||
title: '10月',
|
||||
dataIndex: 'oct',
|
||||
},
|
||||
{
|
||||
title: '11月',
|
||||
dataIndex: 'nov',
|
||||
},
|
||||
{
|
||||
title: '12月',
|
||||
dataIndex: 'dec',
|
||||
},
|
||||
],
|
||||
formConfig: {
|
||||
schemas: [
|
||||
{
|
||||
field: 'year',
|
||||
label: '年份',
|
||||
component: 'NsDatePicker',
|
||||
componentProps: {
|
||||
picker: 'year',
|
||||
valueFormat: 'YYYY',
|
||||
defaultValue: selectYear.value.format('YYYY'),
|
||||
},
|
||||
},
|
||||
],
|
||||
params: {},
|
||||
},
|
||||
rowKey: 'id',
|
||||
});
|
||||
// 合并单元格
|
||||
const getRowSpan = (dataIndex: string, record: any, data: any, dependents: string[] = []) => {
|
||||
let rowSpan = 1;
|
||||
for (let i = data.indexOf(record) + 1; i < data.length; i++) {
|
||||
let shouldMerge = true;
|
||||
for (const dependent of dependents) {
|
||||
if (data[i][dependent] !== record[dependent]) {
|
||||
shouldMerge = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (shouldMerge && data[i][dataIndex] === record[dataIndex]) {
|
||||
rowSpan++;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return rowSpan;
|
||||
};
|
||||
// 获取表格数据
|
||||
// const getTableList = () => {
|
||||
// fetch(carbonEmission.carbonEmissionStatistics , queryParams.value).then((res) => {
|
||||
// data.value = res.data.records
|
||||
// total.value = res.data.total
|
||||
// });
|
||||
// };
|
||||
// 分页器
|
||||
// const onChange = (pageNumber: number,size: number) => {
|
||||
// queryParams.value.pageNum = pageNumber;
|
||||
// queryParams.value.pageSize = size;
|
||||
// getTableList()
|
||||
// };
|
||||
</script>
|
||||
<style scoped lang="less">
|
||||
::v-deep .ant-table-title{
|
||||
display: flex;
|
||||
}
|
||||
::v-deep .ant-table-container{
|
||||
padding: 0px 16px;
|
||||
}
|
||||
</style>
|
||||
<style scoped>
|
||||
th.column-money,
|
||||
td.column-money {
|
||||
text-align: right !important;
|
||||
}
|
||||
</style>
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div>
|
||||
<a-table
|
||||
<!-- <a-table
|
||||
:columns="tableColumns"
|
||||
:data-source="data"
|
||||
bordered
|
||||
@@ -26,15 +26,16 @@
|
||||
<a-button type="primary">凭证下载</a-button>
|
||||
</div>
|
||||
</template>
|
||||
</a-table>
|
||||
<a-pagination
|
||||
</a-table> -->
|
||||
<ns-view-list-table v-bind="tableConfig" :model="data" ref="mainRef" :scroll="{ x: 1500}" />
|
||||
<!-- <a-pagination
|
||||
:current="queryParams.pageNum"
|
||||
:total="total"
|
||||
:page-size="queryParams.pageSize"
|
||||
style="display: flex;justify-content: center;margin-top: 16px;"
|
||||
:show-size-changer="true"
|
||||
:show-quick-jumper="true"
|
||||
@change="onChange" />
|
||||
@change="onChange" /> -->
|
||||
<!-- 新增数据库数据 -->
|
||||
<a-drawer
|
||||
:width="500"
|
||||
@@ -158,6 +159,7 @@
|
||||
import { Pagination,message,Modal } from 'ant-design-vue';
|
||||
import { InboxOutlined } from '@ant-design/icons-vue';
|
||||
import type { CascaderProps,TreeSelectProps,UploadChangeParam } from 'ant-design-vue';
|
||||
import { NsMessage } from '/nerv-lib/component';
|
||||
import dayjs, { Dayjs } from 'dayjs';
|
||||
import { http } from '/nerv-lib/util/http';
|
||||
import { tableColumns } from '../config';
|
||||
@@ -229,19 +231,182 @@
|
||||
queryParams.value.year = selectYear.value
|
||||
getTableList()
|
||||
}
|
||||
const mainRef = ref();
|
||||
const year = selectYear.value.format('YYYY')
|
||||
const tableConfig = ref({
|
||||
title: '能耗统计',
|
||||
api: energyConsumption.pageList,
|
||||
params: queryParams.value,
|
||||
headerActions: [
|
||||
{
|
||||
label: '新增',
|
||||
name: 'userAdd',
|
||||
type: 'primary',
|
||||
handle: () => {
|
||||
getDictList()
|
||||
visible.value = true
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '导入',
|
||||
type: 'primary',
|
||||
name: 'userImport',
|
||||
handle: () => {},
|
||||
},
|
||||
{
|
||||
label: '导出',
|
||||
type: 'primary',
|
||||
name: 'userExports',
|
||||
},
|
||||
{
|
||||
label: '模板下载',
|
||||
type: 'primary',
|
||||
name: 'userExports',
|
||||
},
|
||||
{
|
||||
label: '上传凭证',
|
||||
type: 'primary',
|
||||
handle: () => {
|
||||
openUpload.value = true;
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '凭证下载',
|
||||
type: 'primary',
|
||||
name: 'userExports',
|
||||
},
|
||||
],
|
||||
columns: [
|
||||
{
|
||||
title: '序号',
|
||||
customRender: (text: any) => {
|
||||
return text.index + 1;
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '能源种类',
|
||||
dataIndex: 'energyType',
|
||||
},
|
||||
{
|
||||
title: '计量单位',
|
||||
className: 'unit',
|
||||
dataIndex: 'unit',
|
||||
},
|
||||
{
|
||||
title: '全年',
|
||||
dataIndex: 'yearly',
|
||||
},
|
||||
{
|
||||
title: '1月',
|
||||
dataIndex: 'jan',
|
||||
// customRender: ({ text, record }) => ({
|
||||
// children: text,
|
||||
// attrs: {
|
||||
// style: record.janFlag === 1 ? 'color: red' : 'color: blue'
|
||||
// }
|
||||
// })
|
||||
},
|
||||
{
|
||||
title: '2月',
|
||||
dataIndex: 'feb',
|
||||
},
|
||||
{
|
||||
title: '3月',
|
||||
dataIndex: 'mar',
|
||||
},
|
||||
{
|
||||
title: '4月',
|
||||
dataIndex: 'apr',
|
||||
},
|
||||
{
|
||||
title: '5月',
|
||||
dataIndex: 'may',
|
||||
},
|
||||
{
|
||||
title: '6月',
|
||||
dataIndex: 'jun',
|
||||
},
|
||||
{
|
||||
title: '7月',
|
||||
dataIndex: 'jul',
|
||||
},
|
||||
{
|
||||
title: '8月',
|
||||
dataIndex: 'aug',
|
||||
},
|
||||
{
|
||||
title: '9月',
|
||||
dataIndex: 'sep',
|
||||
},
|
||||
{
|
||||
title: '10月',
|
||||
dataIndex: 'oct',
|
||||
},
|
||||
{
|
||||
title: '11月',
|
||||
dataIndex: 'nov',
|
||||
},
|
||||
{
|
||||
title: '12月',
|
||||
dataIndex: 'dec',
|
||||
},
|
||||
],
|
||||
columnActions: {
|
||||
title: '操作',
|
||||
actions: [
|
||||
{
|
||||
label: '编辑',
|
||||
name: 'userEdit',
|
||||
handle: (record: any) => {
|
||||
getDictList()
|
||||
visible.value = true
|
||||
fetch(energyConsumption.findById , {id : record.id }).then((res) => {
|
||||
if(res.data.unit){
|
||||
res.data.unit = res.data.unit.split(',')
|
||||
}
|
||||
formState.value = res.data
|
||||
});
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '删除',
|
||||
name: 'userDelete',
|
||||
dynamicParams: { id: 'id' },
|
||||
confirm: true,
|
||||
isReload: true,
|
||||
api: energyConsumption.del,
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
formConfig: {
|
||||
schemas: [
|
||||
{
|
||||
field: 'year',
|
||||
label: '年份',
|
||||
component: 'NsDatePicker',
|
||||
componentProps: {
|
||||
picker: 'year',
|
||||
valueFormat: 'YYYY',
|
||||
defaultValue: selectYear.value.format('YYYY'),
|
||||
},
|
||||
},
|
||||
],
|
||||
params: {},
|
||||
},
|
||||
rowKey: 'id',
|
||||
});
|
||||
// 获取表格数据
|
||||
const getTableList = () => {
|
||||
fetch(energyConsumption.pageList , queryParams.value).then((res) => {
|
||||
data.value = res.data.records
|
||||
total.value = res.data.total
|
||||
});
|
||||
};
|
||||
getTableList()
|
||||
// 分页器
|
||||
const onChange = (pageNumber: number,size: number) => {
|
||||
queryParams.value.pageNum = pageNumber;
|
||||
queryParams.value.pageSize = size;
|
||||
getTableList()
|
||||
mainRef.value?.nsTableRef.reload();
|
||||
};
|
||||
// 计算碳排切换
|
||||
const changeRadio = (e) => {
|
||||
@@ -263,23 +428,20 @@
|
||||
if(formState.value.id){
|
||||
fetch(energyConsumption.update , formState.value).then((res) => {
|
||||
visible.value = false
|
||||
formState.value = {}
|
||||
message.success('操作成功!');
|
||||
getTableList()
|
||||
mainRef.value?.nsTableRef.reload();
|
||||
});
|
||||
}else{
|
||||
fetch(energyConsumption.creat , formState.value).then((res) => {
|
||||
if(res.data === '新增数据已存在'){
|
||||
visible.value = false
|
||||
queryParams.value = formState.value
|
||||
queryParams.value.pageNum = 1,
|
||||
queryParams.value.pageSize = 10,
|
||||
queryParams.value.orgId = orgId.value,
|
||||
queryParams.value.year = selectYear.value.format('YYYY')
|
||||
getTableList()
|
||||
NsMessage.warning(res.data);
|
||||
}else{
|
||||
visible.value = false
|
||||
formState.value = {}
|
||||
message.success('操作成功!');
|
||||
getTableList()
|
||||
mainRef.value?.nsTableRef.reload();
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -298,10 +460,10 @@
|
||||
fetch(carbonEmissionFactorLibrary.dictionaryUnitManagement, { grp: 'MEASUREMENT_UNIT'}).then((res) => {
|
||||
measurementUnit.value = res.data
|
||||
measurementUnit.value = measurementUnit.value.map(item => ({
|
||||
value: item.cnValue,
|
||||
value: item.id,
|
||||
label: item.cnValue,
|
||||
children: item.children ? item.children.map(child => ({
|
||||
value: child.cnValue,
|
||||
value: child.id,
|
||||
label: child.cnValue
|
||||
})) : []
|
||||
}));
|
||||
@@ -310,10 +472,10 @@
|
||||
fetch(group.queryDeviceGroupTree, { energyType: 'ELECTRICITY_USAGE',orgId: orgId.value }).then((res) => {
|
||||
treeData.value = res.data
|
||||
treeData.value = treeData.value.map(item => ({
|
||||
value: item.pointName,
|
||||
value: item.id,
|
||||
label: item.pointName,
|
||||
children: item.children ? item.children.map(child => ({
|
||||
value: child.pointName,
|
||||
value: child.id,
|
||||
label: child.pointName
|
||||
})) : []
|
||||
}));
|
||||
@@ -346,7 +508,7 @@
|
||||
onOk() {
|
||||
fetch(energyConsumption.del , {id : record.id }).then((res) => {
|
||||
message.success('操作成功!');
|
||||
getTableList()
|
||||
mainRef.value?.nsTableRef.reload();
|
||||
});
|
||||
},
|
||||
onCancel() {
|
||||
@@ -357,6 +519,7 @@
|
||||
// 关闭新增抽屉
|
||||
const onClose = () => {
|
||||
visible.value = false;
|
||||
formState.value = {}
|
||||
formRef.value.resetFields();
|
||||
};
|
||||
// 点击上传凭证按钮
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="right">
|
||||
<a-table
|
||||
<!-- <a-table
|
||||
:columns="columns"
|
||||
:data-source="tableData"
|
||||
bordered
|
||||
@@ -59,7 +59,8 @@
|
||||
<a-button type="primary" @click="addNewData">新增</a-button>
|
||||
</div>
|
||||
</template>
|
||||
</a-table>
|
||||
</a-table> -->
|
||||
<ns-view-list-table v-bind="tableConfig" :model="tableData" ref="mainRef" />
|
||||
<a-pagination
|
||||
:current="queryParams.pageNum"
|
||||
:total="total"
|
||||
@@ -139,6 +140,7 @@
|
||||
const fetch = (api, params = { orgId } ) => {
|
||||
return http.post(api, params);
|
||||
};
|
||||
const mainRef = ref();
|
||||
// 数结构
|
||||
const x = 3;
|
||||
const y = 2;
|
||||
@@ -209,12 +211,13 @@
|
||||
autoExpandParent.value = false;
|
||||
};
|
||||
// 被选中的树节点
|
||||
const energyType = ref()
|
||||
const onSelect = (selectedKey: string[], info: any) => {
|
||||
selectedKeys.value = selectedKey;
|
||||
if(info.selected){
|
||||
queryParams.value.energyType = info.node.id
|
||||
energyType.value = info.node.id
|
||||
statsId.value = info.node.id
|
||||
getTableList()
|
||||
mainRef.value?.nsTableRef.reload();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -239,10 +242,9 @@
|
||||
const getTreeData = () => {
|
||||
fetch(quickCalculation.carbonQuickTree).then((res) => {
|
||||
gData.value = res.data
|
||||
debugger
|
||||
queryParams.value.energyType = gData.value[0].children[0].id
|
||||
energyType.value = gData.value[0].children[0].id
|
||||
statsId.value = gData.value[0].children[0].id
|
||||
getTableList()
|
||||
mainRef.value?.nsTableRef.reload();
|
||||
});
|
||||
};
|
||||
getTreeData()
|
||||
@@ -254,6 +256,90 @@
|
||||
orgId: orgId.value
|
||||
})
|
||||
const tableData = ref([]);
|
||||
|
||||
const tableConfig = ref({
|
||||
title: '排放因子库',
|
||||
api: quickCalculation.queryCarbonEmissionPage,
|
||||
params: {
|
||||
orgId,
|
||||
energyType
|
||||
},
|
||||
headerActions: [
|
||||
{
|
||||
label: '新增',
|
||||
name: 'userAdd',
|
||||
type: 'primary',
|
||||
handle: () => {
|
||||
visible.value = true
|
||||
getNewTable()
|
||||
},
|
||||
},
|
||||
],
|
||||
columns: [
|
||||
{
|
||||
title: '序号',
|
||||
customRender: (text: any) => {
|
||||
return text.index + 1;
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '因子值',
|
||||
dataIndex: 'emissionFactors',
|
||||
},
|
||||
{
|
||||
title: '计量单位',
|
||||
className: 'carbonEmissionSuffix',
|
||||
dataIndex: 'carbonEmissionSuffix',
|
||||
},
|
||||
{
|
||||
title: '更新时间',
|
||||
className: 'updateTime',
|
||||
dataIndex: 'updateTime',
|
||||
},
|
||||
{
|
||||
title: '启用时间',
|
||||
className: 'startTime',
|
||||
dataIndex: 'startTime',
|
||||
},
|
||||
{
|
||||
title: '结束时间',
|
||||
className: 'endTime',
|
||||
dataIndex: 'endTime',
|
||||
},
|
||||
{
|
||||
title: '数据来源',
|
||||
className: 'dataSources',
|
||||
dataIndex: 'dataSources',
|
||||
},
|
||||
],
|
||||
columnActions: {
|
||||
title: '操作',
|
||||
actions: [
|
||||
{
|
||||
label: '编辑',
|
||||
name: 'userEdit',
|
||||
handle: (record: any) => {
|
||||
selectedRowKeys.value = [record.carbonId];
|
||||
formState.value.id = record.id
|
||||
formState.value.emissionFactors = record.emissionFactors
|
||||
formState.value.dateRange = [record.startTime, record.endTime];
|
||||
formState.value.carbonId = record.carbonId
|
||||
visible.value = true
|
||||
getNewTable()
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '删除',
|
||||
name: 'userDelete',
|
||||
dynamicParams: { id: 'id' },
|
||||
confirm: true,
|
||||
isReload: true,
|
||||
api: quickCalculation.del,
|
||||
},
|
||||
],
|
||||
},
|
||||
rowKey: 'id',
|
||||
});
|
||||
// 获取列表数据
|
||||
const getTableList = () => {
|
||||
fetch(quickCalculation.queryCarbonEmissionPage,queryParams.value).then((res) => {
|
||||
@@ -265,7 +351,7 @@
|
||||
const onChange = (pageNumber: number,size: number) => {
|
||||
queryParams.value.pageNum = pageNumber;
|
||||
queryParams.value.pageSize = size;
|
||||
getTableList()
|
||||
mainRef.value?.nsTableRef.reload();
|
||||
};
|
||||
// 新增/编辑
|
||||
const formRef = ref();
|
||||
@@ -321,14 +407,13 @@
|
||||
formState.value.startTime = formState.value.dateRange[0]
|
||||
formState.value.endTime = formState.value.dateRange[1]
|
||||
console.log('values', formState, toRaw(formState));
|
||||
debugger
|
||||
if(formState.value.id){
|
||||
fetch(quickCalculation.update,formState.value).then((res) => {
|
||||
visible.value = false
|
||||
selectedRowKeys.value = [];
|
||||
formState.value = {}
|
||||
formRef.value.resetFields();
|
||||
getTableList()
|
||||
mainRef.value?.nsTableRef.reload();
|
||||
});
|
||||
}else{
|
||||
fetch(quickCalculation.creat,formState.value).then((res) => {
|
||||
@@ -336,7 +421,7 @@
|
||||
selectedRowKeys.value = [];
|
||||
formState.value = {}
|
||||
formRef.value.resetFields();
|
||||
getTableList()
|
||||
mainRef.value?.nsTableRef.reload();
|
||||
});
|
||||
}
|
||||
})
|
||||
@@ -408,6 +493,9 @@
|
||||
::v-deep .ant-table-container{
|
||||
padding: 0px 16px;
|
||||
}
|
||||
:deep(.ns-table-main) {
|
||||
margin-top: unset !important;
|
||||
}
|
||||
.top {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,283 @@
|
||||
import { ref } from 'vue';
|
||||
import { http } from '/nerv-lib/util';
|
||||
import { origanizemanage } from '/@/api/origanizemanage';
|
||||
import { carbonEmissionFactorLibrary } from '/@/api/carbonEmissionFactorLibrary';
|
||||
export const formConfig = (disabled) => {
|
||||
return ref([
|
||||
{
|
||||
field: 'fields',
|
||||
component: 'NsChildForm',
|
||||
componentProps: {
|
||||
schemas: [
|
||||
{
|
||||
label: '排放源',
|
||||
field: 'emissionSources',
|
||||
component: 'NsInput',
|
||||
componentProps: {
|
||||
placeholder: '请输入排放源',
|
||||
maxLength: 20,
|
||||
},
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入排放源',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'emissionType',
|
||||
label: '排放分类',
|
||||
component: 'NsCascader',
|
||||
fieldMap: ['emissionType'],
|
||||
componentProps: {
|
||||
placeholder: '请选择排放分类',
|
||||
api: carbonEmissionFactorLibrary.getCarbonFactorTree,
|
||||
fieldNames: { label: 'emissionName', value: 'id' },
|
||||
showSearch: true,
|
||||
},
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: '请选择排放分类',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'emissionGas',
|
||||
label: '排放气体',
|
||||
component: 'NsSelect',
|
||||
componentProps: {
|
||||
allowClear: true,
|
||||
placeholder: '请选择排放气体',
|
||||
options: [
|
||||
{
|
||||
label: 'CO2',
|
||||
value: 'CO2',
|
||||
},
|
||||
{
|
||||
label: 'CO2e',
|
||||
value: 'CO2e',
|
||||
},
|
||||
{
|
||||
label: 'SF6',
|
||||
value:'SF6',
|
||||
},
|
||||
{
|
||||
label: 'CH4',
|
||||
value: 'CH4',
|
||||
},
|
||||
{
|
||||
label: 'PFCs',
|
||||
value: 'PFCs',
|
||||
},
|
||||
{
|
||||
label: 'HFCs',
|
||||
value: 'HFCs',
|
||||
},
|
||||
],
|
||||
},
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: '请选择排放气体',
|
||||
},
|
||||
],
|
||||
},
|
||||
// {
|
||||
// field: 'emissionProcess',
|
||||
// label: '排放环节',
|
||||
// component: 'NsSelectApi',
|
||||
// componentProps: {
|
||||
// api: carbonEmissionFactorLibrary.getEmissionProcess,
|
||||
// params: {
|
||||
// emissionType: sessionStorage.getItem('checkedTreeNode'),
|
||||
// },
|
||||
// resultField: 'data',
|
||||
// labelField: 'emissionProcess',
|
||||
// valueField: 'emissionProcess',
|
||||
// immediate: true,
|
||||
// autoSelectFirst: false,
|
||||
// filterOption:false,
|
||||
// showSearch:true,
|
||||
// autoClearSearchValue:false
|
||||
// },
|
||||
// },
|
||||
{
|
||||
label: '排放环节',
|
||||
field: 'emissionProcess',
|
||||
component: 'NsInput',
|
||||
componentProps: {
|
||||
placeholder: '请输入排放环节',
|
||||
maxLength: 20,
|
||||
},
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入排放环节',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: '排放因子',
|
||||
field: 'emissionFactors',
|
||||
component: 'NsInputNumber',
|
||||
componentProps: {
|
||||
placeholder: '请输入排放因子值',
|
||||
maxLength: 20,
|
||||
},
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入排放因子值',
|
||||
trigger: 'change',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'carbonEmissionPrefix',
|
||||
label: '碳排前缀',
|
||||
component: 'NsSelect',
|
||||
componentProps: {
|
||||
disabled: true,
|
||||
allowClear: true,
|
||||
defaultValue: 't',
|
||||
placeholder: '请选择碳排前缀',
|
||||
options: [
|
||||
{
|
||||
label: 'g',
|
||||
value: 'g',
|
||||
},
|
||||
{
|
||||
label: 'kg',
|
||||
value: 'kg',
|
||||
},
|
||||
{
|
||||
label: 't',
|
||||
value: 't',
|
||||
},
|
||||
],
|
||||
},
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: '请选择碳排前缀',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: '碳排后缀',
|
||||
field: 'carbonEmissionSuffix',
|
||||
component: 'NsInput',
|
||||
componentProps: {
|
||||
placeholder: '请输入碳排后缀',
|
||||
maxLength: 20,
|
||||
},
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入碳排后缀',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: '已引用数',
|
||||
field: 'numberOfReferences',
|
||||
component: 'NsInput',
|
||||
componentProps: {
|
||||
defaultValue: 10,
|
||||
disabled: true,
|
||||
maxLength: 20,
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '参考文献',
|
||||
field: 'reference',
|
||||
component: 'NsTextarea',
|
||||
componentProps: {
|
||||
placeholder: '请输入参考文献',
|
||||
maxLength: 20,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
]);
|
||||
};
|
||||
const options = ref([]);
|
||||
|
||||
const getUserPerList = (transform, params = {}) => {
|
||||
return http.post(origanizemanage.queryUserPerList, { ...params }).then((res) => {
|
||||
return res.data?.map((item) => {
|
||||
item = { ...item, ...transform(item) };
|
||||
return item;
|
||||
});
|
||||
});
|
||||
};
|
||||
export const formConfig2 = (casData: any) => {
|
||||
return ref([
|
||||
{
|
||||
field: 'information',
|
||||
component: 'NsCascader',
|
||||
componentProps: {
|
||||
placeholder: '请选择',
|
||||
displayRender: ({ labels, selectedOptions }: any) => {
|
||||
console.log(labels, selectedOptions);
|
||||
|
||||
casData.value = selectedOptions.map(({ label, value }) => {
|
||||
return { label, value };
|
||||
});
|
||||
return labels.join('/');
|
||||
},
|
||||
loadData: (selectedOptions, options) => {
|
||||
console.log(selectedOptions, options, 'selectedOptions, options');
|
||||
|
||||
const targetOption = selectedOptions[selectedOptions.length - 1];
|
||||
let transForm, params;
|
||||
// load options lazily
|
||||
if (!selectedOptions.length) {
|
||||
transForm = (data) => {
|
||||
data['label'] = data.orgName;
|
||||
data['value'] = data.orgId;
|
||||
data['isLeaf'] = false;
|
||||
data['level'] = 1;
|
||||
return data;
|
||||
};
|
||||
getUserPerList(transForm).then((res) => {
|
||||
options.value = [...res];
|
||||
});
|
||||
}
|
||||
const id = targetOption?.value;
|
||||
const level = targetOption?.level;
|
||||
if (targetOption) {
|
||||
targetOption.loading = true;
|
||||
}
|
||||
|
||||
if (level === 1) {
|
||||
transForm = (data) => {
|
||||
data['label'] = data.deptName;
|
||||
data['value'] = data.deptId;
|
||||
data['isLeaf'] = false;
|
||||
data['level'] = 2;
|
||||
return data;
|
||||
};
|
||||
params = { orgId: id };
|
||||
} else if (level === 2) {
|
||||
transForm = (data) => {
|
||||
data['label'] = data.roleName;
|
||||
data['value'] = data.roleId;
|
||||
data['level'] = 3;
|
||||
return data;
|
||||
};
|
||||
params = { deptId: id };
|
||||
}
|
||||
if (targetOption) {
|
||||
getUserPerList(transForm, { ...params }).then((res) => {
|
||||
targetOption.loading = false;
|
||||
targetOption.children = [...res];
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
]);
|
||||
};
|
||||
@@ -0,0 +1,115 @@
|
||||
<template>
|
||||
<ns-view-list-table v-bind="tableConfig" :model="data" ref="mainRef" />
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref } from 'vue';
|
||||
import { http } from '/nerv-lib/util/http';
|
||||
import { carbonEmissionFactorLibrary } from '/@/api/carbonEmissionFactorLibrary';
|
||||
defineOptions({ name: 'CarbonInventoryCheck' });
|
||||
const orgId = ref('');
|
||||
const result = JSON.parse(sessionStorage.getItem('ORGID')!);
|
||||
orgId.value = result;
|
||||
const fetch = (api, params = { orgId }) => {
|
||||
return http.post(api, params);
|
||||
};
|
||||
const tableConfig = ref({
|
||||
title: '数据库',
|
||||
api: carbonEmissionFactorLibrary.getTableList,
|
||||
params: {
|
||||
orgId
|
||||
},
|
||||
headerActions: [
|
||||
{
|
||||
label: '新增',
|
||||
name: 'userAdd',
|
||||
type: 'primary',
|
||||
handle: () => {
|
||||
},
|
||||
},
|
||||
],
|
||||
columns: [
|
||||
{
|
||||
title: '序号',
|
||||
customRender: (text: any) => {
|
||||
return text.index + 1;
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '企业名称',
|
||||
dataIndex: 'emissionSources',
|
||||
},
|
||||
{
|
||||
title: '报告名称',
|
||||
dataIndex: 'emissionTypeColumn',
|
||||
},
|
||||
{
|
||||
title: '报告年度',
|
||||
dataIndex: 'emissionGas',
|
||||
},
|
||||
{
|
||||
title: '适用标准',
|
||||
dataIndex: 'emissionProcess',
|
||||
},
|
||||
{
|
||||
title: '更新人',
|
||||
dataIndex: 'emissionFactors',
|
||||
},
|
||||
{
|
||||
title: '更新时间',
|
||||
dataIndex: 'emissionFactorUnits',
|
||||
},
|
||||
],
|
||||
columnActions: {
|
||||
title: '操作',
|
||||
actions: [
|
||||
{
|
||||
label: '编辑',
|
||||
name: 'userEdit',
|
||||
handle: (record: any) => {
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '填报',
|
||||
name: 'fillIn',
|
||||
handle: (record: any) => {
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '下载',
|
||||
name: 'download',
|
||||
handle: (record: any) => {
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '删除',
|
||||
name: 'userDelete',
|
||||
dynamicParams: { ids: 'id[]' },
|
||||
confirm: true,
|
||||
isReload: true,
|
||||
api: carbonEmissionFactorLibrary.del,
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
formConfig: {
|
||||
schemas: [
|
||||
{
|
||||
field: 'emissionSources',
|
||||
label: '报告名称',
|
||||
component: 'NsInput',
|
||||
componentProps: {
|
||||
placeholder: '请输入报告名称',
|
||||
maxLength: 30,
|
||||
},
|
||||
},
|
||||
],
|
||||
params: {},
|
||||
},
|
||||
rowKey: 'id',
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
|
||||
</style>
|
||||
@@ -0,0 +1,45 @@
|
||||
import { ref } from 'vue';
|
||||
import { origanizemanage } from '/@/api/origanizemanage';
|
||||
import { http } from '/nerv-lib/saas';
|
||||
|
||||
export const mockData = ref([
|
||||
{
|
||||
id: 3,
|
||||
zhanghao: 'axb',
|
||||
name: '张三',
|
||||
sex: '男',
|
||||
phone: '123456789',
|
||||
email: '1234567889',
|
||||
relation: '1',
|
||||
role: '1',
|
||||
status: '1',
|
||||
},
|
||||
]);
|
||||
|
||||
export const mockData2 = ref([
|
||||
{
|
||||
information: '铁路局1/产品部1/产品总监1',
|
||||
},
|
||||
]);
|
||||
|
||||
export const treeData = ref([
|
||||
{
|
||||
title: '铁路总局',
|
||||
key: '0-0',
|
||||
children: [
|
||||
{ title: '济阳站', key: '0-0-0' },
|
||||
{ title: '临沂站', key: '0-0-1' },
|
||||
],
|
||||
},
|
||||
]);
|
||||
|
||||
export const treeData2 = [
|
||||
{
|
||||
title: '全部',
|
||||
key: '0-0',
|
||||
children: [
|
||||
{ title: '产品部', key: '0-0-0' },
|
||||
{ title: '运维部', key: '0-0-1' },
|
||||
],
|
||||
},
|
||||
];
|
||||
Reference in New Issue
Block a user