246 lines
7.3 KiB
Vue
246 lines
7.3 KiB
Vue
<template>
|
||
<page-container>
|
||
<FullPage>
|
||
<div class="content">
|
||
<div style="margin-bottom: 15px;">
|
||
<div class="alert">
|
||
<AIcon type="InfoCircleOutlined" />
|
||
启用通知类型后,你可以为每种通知类型配置不同的通知方式、通知模板、接收人。
|
||
</div>
|
||
</div>
|
||
<div class="content-collapse">
|
||
<j-collapse :bordered="false" v-model:activeKey="activeKey" expand-icon-position="right">
|
||
<template #expandIcon="{ isActive }">
|
||
<AIcon
|
||
type="CaretRightOutlined"
|
||
:style="{
|
||
transform: `rotate(${
|
||
isActive ? 90 : 0
|
||
}deg)`,
|
||
}"
|
||
/>
|
||
</template>
|
||
<j-collapse-panel
|
||
v-for="item in tabs"
|
||
:key="item.provider"
|
||
>
|
||
<template #header>
|
||
<div>
|
||
{{ item.name }}
|
||
<span style="margin-left: 10px;" class="alert" v-if="item.provider === 'alarm'">注意:接收人需要有告警配置页面查询权限,才能收到告警类通知</span>
|
||
</div>
|
||
</template>
|
||
<div>
|
||
<template
|
||
v-for="(child, index) in item.children"
|
||
:key="child.provider"
|
||
>
|
||
<Item
|
||
:data="child"
|
||
@refresh="onRefresh"
|
||
:isLast="index === item.children?.length"
|
||
:provider="item.provider"
|
||
/>
|
||
</template>
|
||
</div>
|
||
</j-collapse-panel>
|
||
</j-collapse>
|
||
</div>
|
||
</div>
|
||
</FullPage>
|
||
</page-container>
|
||
</template>
|
||
|
||
<script lang="ts" setup>
|
||
import { queryChannelConfig } from '@/api/system/noticeRule';
|
||
import Item from './components/Item/index.vue';
|
||
import { useMenuStore } from '@/store/menu';
|
||
const menuStore = useMenuStore();
|
||
let dataSource:any[] =[]
|
||
const systemNotice = [
|
||
{
|
||
provider: 'alarm',
|
||
name: '告警',
|
||
children: [
|
||
{
|
||
provider: 'alarm-product',
|
||
name: '产品告警',
|
||
},
|
||
{
|
||
provider: 'alarm-device',
|
||
name: '设备告警',
|
||
},
|
||
{
|
||
provider: 'alarm-org',
|
||
name: '部门告警',
|
||
},
|
||
{
|
||
provider: 'alarm-other',
|
||
name: '其他告警',
|
||
},
|
||
],
|
||
},
|
||
{
|
||
provider: 'system-monitor',
|
||
name: '系统监控',
|
||
children: [
|
||
{
|
||
provider: 'system-event',
|
||
name: '系统运行异常',
|
||
},
|
||
],
|
||
},
|
||
{
|
||
provider: 'system-business',
|
||
name: '业务监控',
|
||
children: [
|
||
{
|
||
provider: 'device-transparent-codec',
|
||
name: '透传消息解析异常',
|
||
},
|
||
],
|
||
},
|
||
];
|
||
const lowCodeNotice = [
|
||
{
|
||
provider: 'workflow-notification',
|
||
name: '工作流通知',
|
||
children: [
|
||
{
|
||
provider: 'workflow-task-todo',
|
||
name: '待办通知',
|
||
},
|
||
{
|
||
provider: 'workflow-task-reject',
|
||
name: '驳回通知',
|
||
},
|
||
{
|
||
provider: 'workflow-task-cc',
|
||
name: '抄送通知',
|
||
},
|
||
{
|
||
provider: 'workflow-process-finish',
|
||
name: '办结通知',
|
||
},
|
||
{
|
||
provider: 'workflow-process-repealed',
|
||
name: '关闭通知',
|
||
},
|
||
],
|
||
},
|
||
]
|
||
|
||
const activeKey = ref<string[]>();
|
||
|
||
const dataMap = new Map();
|
||
|
||
const data = ref<any[]>([]);
|
||
|
||
const tabs = ref<any[]>([])
|
||
const handleSearch = () => {
|
||
queryChannelConfig().then((resp) => {
|
||
if (resp.status === 200) {
|
||
// (resp?.result || []).map((item: any) => {
|
||
// dataMap.set(item.provider, item);
|
||
// });
|
||
// data.value = Array.from(dataMap).map((item) => {
|
||
// return item?.[1];
|
||
// });
|
||
const arr = dataSource
|
||
.map((item: any) => {
|
||
const _child = item.children.map((i: any) => {
|
||
const _item = (resp.result || []).find(
|
||
(t: any) => t?.provider === i?.provider,
|
||
);
|
||
return {
|
||
...i,
|
||
..._item,
|
||
};
|
||
});
|
||
return {
|
||
...item,
|
||
children: _child,
|
||
};
|
||
})
|
||
.filter((it: any) => {
|
||
return it.children.filter((lt: any) => lt?.id)?.length;
|
||
})
|
||
.map((item) => {
|
||
return {
|
||
...item,
|
||
children: item.children.filter((lt: any) => lt?.id),
|
||
};
|
||
});
|
||
tabs.value = arr
|
||
}
|
||
});
|
||
};
|
||
|
||
const onRefresh = () => {
|
||
handleSearch()
|
||
}
|
||
|
||
onMounted(() => {
|
||
// dataMap.clear();
|
||
// dataSource.forEach((item) => {
|
||
// item.children.map((i) => {
|
||
// dataMap.set(i.provider, i);
|
||
// });
|
||
// });
|
||
// data.value = Array.from(dataMap).map((item) => {
|
||
// return item?.[1];
|
||
// });
|
||
if(menuStore.hasMenu('process')){
|
||
dataSource = [...systemNotice,...lowCodeNotice]
|
||
activeKey.value = ['alarm', 'system-monitor', 'system-business','workflow-notification']
|
||
}else{
|
||
dataSource = [...systemNotice]
|
||
activeKey.value = ['alarm', 'system-monitor', 'system-business']
|
||
}
|
||
handleSearch();
|
||
});
|
||
</script>
|
||
|
||
<style lang="less" scoped>
|
||
.content {
|
||
padding: 24px;
|
||
display: flex;
|
||
flex-direction: column;
|
||
box-sizing: border-box;
|
||
justify-content: space-between;
|
||
|
||
.btn {
|
||
padding: 24px 0;
|
||
width: 100%;
|
||
background-color: #fff;
|
||
}
|
||
}
|
||
.alert {
|
||
padding-left: 10px;
|
||
color: rgba(0, 0, 0, 0.55);
|
||
}
|
||
|
||
.content-collapse {
|
||
:deep(.ant-collapse) {
|
||
border-color: #EBEEF3;
|
||
background-color: #fff;
|
||
|
||
.ant-collapse-item {
|
||
border: 1px solid #EBEEF3;
|
||
margin-bottom: 24px;
|
||
}
|
||
|
||
.ant-collapse-header {
|
||
background-color: #F7F8FA;
|
||
height: 42px;
|
||
}
|
||
.ant-collapse-content {
|
||
padding: 17px 21px 7px 21px;
|
||
}
|
||
|
||
.ant-collapse-content-box {
|
||
padding: 0;
|
||
}
|
||
}
|
||
}
|
||
</style> |