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.
		
		
		
		
		
			
		
			
				
					
					
						
							722 lines
						
					
					
						
							36 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							722 lines
						
					
					
						
							36 KiB
						
					
					
				
								import React, { useEffect, useRef, useState } from 'react';
							 | 
						|
								import { connect } from 'react-redux';
							 | 
						|
								import { Skeleton, Button, Pagination, Form, Popconfirm, Table, Tooltip } from '@douyinfe/semi-ui';
							 | 
						|
								import { IconSearch } from '@douyinfe/semi-icons';
							 | 
						|
								import { SkeletonScreen, } from "$components";
							 | 
						|
								import moment from "moment";
							 | 
						|
								import PushModal from '../components/pushModal'
							 | 
						|
								import '../style.less'
							 | 
						|
								import { Setup } from "$components";
							 | 
						|
								
							 | 
						|
								const EmPush = (props) => {
							 | 
						|
								    const form = useRef();//表单
							 | 
						|
								    const { dispatch, actions, user, loading, socket } = props
							 | 
						|
								    const { service } = actions;
							 | 
						|
								    const [setup, setSetup] = useState(false);  //表格设置是否显现
							 | 
						|
								    const [setupp, setSetupp] = useState([]);//实际显示的表格列表
							 | 
						|
								    const [query, setQuery] = useState({ limit: 10, page: 0 }); //页码信息
							 | 
						|
								    const [limits, setLimits] = useState()//每页实际条数
							 | 
						|
								    const mylimits = useRef(); //每页实际条数
							 | 
						|
								    const [pushModal, setPushModal] = useState(false)  //信鸽弹框
							 | 
						|
								    const [pushEdit, setPushEdit] = useState(false)  //是否是修改
							 | 
						|
								    const [change, setChange] = useState(false)  //是否改变
							 | 
						|
								    const [allTableData, setAllTableData] = useState([])  //获取到的所有表格信息
							 | 
						|
								    const [editObj, setEditObj] = useState({});//管理员弹框修改内容
							 | 
						|
								    const [projectStatus, setProjectStatus] = useState([]); //获取项目状态列表
							 | 
						|
								    const page = useRef(query.page);//哪一页
							 | 
						|
								    const EMPUSH = "empush";
							 | 
						|
								    const tableList = [//表格属性
							 | 
						|
								        {
							 | 
						|
								            title: '推送信息',
							 | 
						|
								            list: [
							 | 
						|
								                { name: "关联项目", value: "projectName" },
							 | 
						|
								                { name: "策略名称", value: "name" },
							 | 
						|
								                { name: "创建时间", value: "createTime" },
							 | 
						|
								                { name: "接收人", value: "receiverPepUser" },
							 | 
						|
								                { name: "推送方式", value: "pushType" },
							 | 
						|
								                { name: "监听问题模块", value: "alarmType" },
							 | 
						|
								                { name: "生效项目节点", value: "timeType" },
							 | 
						|
								                { name: "推送机制", value: "tactics" },
							 | 
						|
								                { name: "启用状态", value: "disable" },
							 | 
						|
								                { name: "推送次数", value: "pushCount" },
							 | 
						|
								            ]
							 | 
						|
								        },
							 | 
						|
								    ];
							 | 
						|
								    const alarmTypeObj = {
							 | 
						|
								        data_outages: '数据中断',
							 | 
						|
								        data_exception: '数据异常',
							 | 
						|
								        strategy_hit: '策略命中',
							 | 
						|
								        video_exception: '视频异常',
							 | 
						|
								        app_exception: '应用异常',
							 | 
						|
								        device_exception: '设备异常',
							 | 
						|
								    }
							 | 
						|
								    const tacticsObj = {
							 | 
						|
								        immediately: '即时推送机制',
							 | 
						|
								        continue: '持续时长推送机制',
							 | 
						|
								        abnormal_rate: '异常率推送机制',
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								    function handleRow (record, index) {//斑马条纹
							 | 
						|
								        // 给偶数行设置斑马纹
							 | 
						|
								        if (index % 2 === 0) {
							 | 
						|
								            return {
							 | 
						|
								                style: {
							 | 
						|
								                    background: '#FAFCFF',
							 | 
						|
								                }
							 | 
						|
								            };
							 | 
						|
								        } else {
							 | 
						|
								            return {};
							 | 
						|
								        }
							 | 
						|
								    }
							 | 
						|
								    const [tableData, setTableData] = useState([])  //表格数据
							 | 
						|
								
							 | 
						|
								    useEffect(() => {
							 | 
						|
								        localStorage.getItem(EMPUSH) == null
							 | 
						|
								            ? localStorage.setItem(
							 | 
						|
								                EMPUSH,
							 | 
						|
								                JSON.stringify(['projectName', 'name', 'createTime', 'receiverPepUser', 'alarmType', 'timeType', 'tactics', 'disable'])
							 | 
						|
								            )
							 | 
						|
								            : "";
							 | 
						|
								        getProjectStatusList()
							 | 
						|
								        getPushList(query);
							 | 
						|
								    }, [])
							 | 
						|
								    useEffect(() => {
							 | 
						|
								        let showTableData = JSON.parse(JSON.stringify(allTableData)).slice(query.page * query.limit, (query.page + 1) * query.limit)
							 | 
						|
								        setTableData(showTableData)
							 | 
						|
								        mylimits.current = showTableData.length
							 | 
						|
								    }, [change]);
							 | 
						|
								
							 | 
						|
								    function getPushList (query) {
							 | 
						|
								        let val = form.current.getValues()
							 | 
						|
								        dispatch(service.getPush({ ...val })).then((res) => {//获取已绑定项目
							 | 
						|
								            if (res.success) {
							 | 
						|
								                let mytableData = JSON.parse(JSON.stringify(res.payload.data));
							 | 
						|
								                for (let index = 0; index < mytableData.length; index++) {
							 | 
						|
								                    mytableData[index].key = String(mytableData[index].id)
							 | 
						|
								                }
							 | 
						|
								                setAllTableData(mytableData)
							 | 
						|
								                let showTableData = mytableData.slice(query.page * query.limit, (query.page + 1) * query.limit)
							 | 
						|
								                setTableData(showTableData)
							 | 
						|
								                setQuery(query)
							 | 
						|
								                setLimits(res.payload.data.length)
							 | 
						|
								                mylimits.current = showTableData.length
							 | 
						|
								            }
							 | 
						|
								        })
							 | 
						|
								    }
							 | 
						|
								    function getProjectStatusList () {//获取项目状态列表
							 | 
						|
								        dispatch(service.getProjectStatus()).then((res) => {
							 | 
						|
								            if (res.success) {
							 | 
						|
								                setProjectStatus(res.payload?.data)
							 | 
						|
								                attribute(res.payload?.data);
							 | 
						|
								            }
							 | 
						|
								        })
							 | 
						|
								    }
							 | 
						|
								    const columns = [//表格属性
							 | 
						|
								        {
							 | 
						|
								            title: "操作",
							 | 
						|
								            width: "12%",
							 | 
						|
								            dataIndex: "text",
							 | 
						|
								            key: 'text',
							 | 
						|
								            render: (_, row) => {
							 | 
						|
								                return (
							 | 
						|
								                    <div style={{ display: "flex" }}>
							 | 
						|
								                        <Button
							 | 
						|
								                            theme="borderless"
							 | 
						|
								                            onClick={() => {
							 | 
						|
								                                setEditObj(row)
							 | 
						|
								                                setPushModal(true);
							 | 
						|
								                                setPushEdit(true)
							 | 
						|
								                            }}
							 | 
						|
								                        >
							 | 
						|
								                            修改
							 | 
						|
								                        </Button>
							 | 
						|
								                        {row?.disable ? (
							 | 
						|
								                            <Button
							 | 
						|
								                                theme="borderless"
							 | 
						|
								                                style={{ color: '#F31C1C' }}
							 | 
						|
								                                onClick={() => {
							 | 
						|
								                                    dispatch(service.putPushPushId({ pushId: row?.id, del: false, disable: false, msg: '更改推送配置状态' })).then(() => {
							 | 
						|
								                                        getPushList({ limit: query.limit, page: page.current });
							 | 
						|
								                                    })
							 | 
						|
								                                }}
							 | 
						|
								                            >
							 | 
						|
								                                已禁用
							 | 
						|
								                            </Button>
							 | 
						|
								                        ) : (
							 | 
						|
								                            <Popconfirm
							 | 
						|
								                                title="禁用后,通知策略将会失效。"
							 | 
						|
								                                arrowPointAtCenter={false}
							 | 
						|
								                                showArrow={true}
							 | 
						|
								                                position="topRight"
							 | 
						|
								                                onConfirm={() => {
							 | 
						|
								                                    dispatch(service.putPushPushId({ pushId: row?.id, del: false, disable: true, msg: '更改推送配置状态' })).then(() => {
							 | 
						|
								                                        getPushList({ limit: query.limit, page: page.current });
							 | 
						|
								                                    })
							 | 
						|
								                                }}
							 | 
						|
								                            >
							 | 
						|
								                                <Button theme="borderless">已启用</Button>
							 | 
						|
								                            </Popconfirm>
							 | 
						|
								                        )}
							 | 
						|
								                        <Popconfirm
							 | 
						|
								                            title="删除后通知策略将会失效。"
							 | 
						|
								                            arrowPointAtCenter={false}
							 | 
						|
								                            showArrow={true}
							 | 
						|
								                            position="topRight"
							 | 
						|
								                            onConfirm={() => {
							 | 
						|
								                                dispatch(service.putPushPushId({ pushId: row?.id, del: true, disable: false, msg: '删除推送配置' })).then(() => {
							 | 
						|
								                                    if (page.current > 0 && mylimits.current < 2) {
							 | 
						|
								                                        getPushList({ limit: query.limit, page: page.current - 1 });
							 | 
						|
								                                    } else {
							 | 
						|
								                                        getPushList({ limit: query.limit, page: page.current });
							 | 
						|
								                                    }
							 | 
						|
								                                })
							 | 
						|
								                            }}
							 | 
						|
								                        >
							 | 
						|
								                            <Button theme="borderless">删除</Button>
							 | 
						|
								                        </Popconfirm>
							 | 
						|
								                    </div>
							 | 
						|
								                );
							 | 
						|
								            },
							 | 
						|
								        },
							 | 
						|
								    ]
							 | 
						|
								    function expandRowRender (record, index) {
							 | 
						|
								        return (
							 | 
						|
								            <div style={{ display: 'flex' }}>
							 | 
						|
								                结构物:
							 | 
						|
								                {
							 | 
						|
								                    record.structure?.map((item, index) => {
							 | 
						|
								                        return (
							 | 
						|
								                            <div key={index} style={{ marginRight: 5, padding: '1px 17px', color: '#0F7EFB', background: 'rgba(221,237,255,0.38)' }}>
							 | 
						|
								                                {item.name}
							 | 
						|
								                            </div>
							 | 
						|
								                        )
							 | 
						|
								                    })
							 | 
						|
								                }
							 | 
						|
								            </div>
							 | 
						|
								        )
							 | 
						|
								    }
							 | 
						|
								    //获取表格属性设置
							 | 
						|
								    function attribute (val) {
							 | 
						|
								        const arr = localStorage.getItem(EMPUSH)
							 | 
						|
								            ? JSON.parse(localStorage.getItem(EMPUSH))
							 | 
						|
								            : [];
							 | 
						|
								        const column = [
							 | 
						|
								            {
							 | 
						|
								                title: '关联项目',
							 | 
						|
								                dataIndex: "projectName",
							 | 
						|
								                key: "projectName",
							 | 
						|
								                render: (_, row) => {
							 | 
						|
								                    let anxinerror = false
							 | 
						|
								                    let anxinerrorArr = ''
							 | 
						|
								                    if (row.pomsProject.del == true) {
							 | 
						|
								                        anxinerror = true
							 | 
						|
								                        anxinerrorArr = row.pomsProject.pepProject?.projectName || row.pomsProject.name
							 | 
						|
								                    }
							 | 
						|
								                    return (
							 | 
						|
								                        <div style={{ display: 'flex', alignItems: 'center' }}>
							 | 
						|
								                            {
							 | 
						|
								                                anxinerror ? (
							 | 
						|
								                                    <Tooltip content={anxinerrorArr + ',项目已在【项企PEP】或【映射关系】中被删除,请重选项目!'}>
							 | 
						|
								                                        <div style={{ marginRight: 5 }}>
							 | 
						|
								                                            <img src="/assets/images/install/risk.png" alt="" style={{ height: 24, width: 24, }} />
							 | 
						|
								                                        </div>
							 | 
						|
								                                    </Tooltip>) : ('')
							 | 
						|
								                            }
							 | 
						|
								                            {
							 | 
						|
								                                <div className='myseparator' style={{ display: 'flex', alignItems: 'center' }}>
							 | 
						|
								                                    <Tooltip content={row.pomsProject.pepProject?.projectName || row.pomsProject.name}>
							 | 
						|
								                                        <div style={{ width: row.pomsProject?.pepProject?.projectName?.length > 7 || row.pomsProject?.name?.length > 7 ? '112px' : '', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis', color: row.pomsProject.del ? '#F93920' : '' }}>
							 | 
						|
								                                            {row.pomsProject.pepProject?.projectName || row.pomsProject.name}
							 | 
						|
								                                        </div>
							 | 
						|
								                                    </Tooltip>
							 | 
						|
								                                </div>
							 | 
						|
								                            }
							 | 
						|
								                            {
							 | 
						|
								                                row.pomsProject?.pepProject?.projectName ? (
							 | 
						|
								                                    <div style={{
							 | 
						|
								                                        height: 18, marginLeft: 4,
							 | 
						|
								                                        background: 'linear-gradient(180deg, #EBF5FF 0%, #EBF5FF 0%, #D3E8FF 100%)',
							 | 
						|
								                                        borderRadius: 2, display: 'flex', alignItems: 'center'
							 | 
						|
								                                    }}>
							 | 
						|
								                                        <div>
							 | 
						|
								                                            <img src="/assets/images/install/icon_zhengque.png" alt="" style={{ height: 10, width: 10, marginLeft: 4, marginRight: 9 }} />
							 | 
						|
								                                        </div>
							 | 
						|
								                                        <div style={{ color: '#0F7EFB', fontSize: 11, marginRight: 12 }}>
							 | 
						|
								                                            {
							 | 
						|
								                                                val.map((ite, idx) => {
							 | 
						|
								                                                    return (
							 | 
						|
								                                                        <div key={idx}>
							 | 
						|
								                                                            {ite.id == row.pomsProject?.pepProject.constructionStatusId ? ite.construction_status : ''}
							 | 
						|
								                                                        </div>
							 | 
						|
								                                                    )
							 | 
						|
								                                                })
							 | 
						|
								                                            }
							 | 
						|
								                                        </div>
							 | 
						|
								                                    </div>
							 | 
						|
								                                ) : (
							 | 
						|
								                                    <div style={{
							 | 
						|
								                                        height: 18, marginLeft: 4,
							 | 
						|
								                                        background: 'linear-gradient(180deg, #99C7DD 0%, #3048FC 100%)',
							 | 
						|
								                                        borderRadius: 2, display: 'flex', alignItems: 'center'
							 | 
						|
								                                    }}>
							 | 
						|
								                                        <div>
							 | 
						|
								                                            <img src="/assets/images/install/icon_POMS.png" alt="" style={{ height: 10, width: 10, marginLeft: 4, marginRight: 9 }} />
							 | 
						|
								                                        </div>
							 | 
						|
								                                        <div style={{ color: '#FFFFFF', fontSize: 11, marginRight: 12 }}>
							 | 
						|
								                                            POMS
							 | 
						|
								                                        </div>
							 | 
						|
								                                    </div>
							 | 
						|
								                                )
							 | 
						|
								                            }
							 | 
						|
								                        </div>
							 | 
						|
								                    )
							 | 
						|
								                }
							 | 
						|
								            },
							 | 
						|
								            {
							 | 
						|
								                title: '策略名称',
							 | 
						|
								                dataIndex: "name",
							 | 
						|
								                key: 'name',
							 | 
						|
								                render: (_, row) => {
							 | 
						|
								                    return row.name
							 | 
						|
								                }
							 | 
						|
								            },
							 | 
						|
								            {
							 | 
						|
								                title: "创建时间",
							 | 
						|
								                dataIndex: "createTime",
							 | 
						|
								                key: "createTime",
							 | 
						|
								                render: (_, r, index) => {
							 | 
						|
								                    return moment(r.createTime).format('YYYY-MM-DD HH:mm:ss');
							 | 
						|
								                },
							 | 
						|
								            },
							 | 
						|
								            {
							 | 
						|
								                title: '接收人',
							 | 
						|
								                dataIndex: "receiverPepUser",
							 | 
						|
								                key: 'receiverPepUser',
							 | 
						|
								                render: (_, row) => {
							 | 
						|
								                    return (
							 | 
						|
								                        <div style={{ display: 'flex', alignItems: 'center' }}>
							 | 
						|
								                            {
							 | 
						|
								                                row.receiverPepUser.map((item, index) => {
							 | 
						|
								                                    return (
							 | 
						|
								                                        <div className='myseparator' key={index} style={{ display: 'flex', alignItems: 'center' }}>
							 | 
						|
								                                            <div style={{ display: index > 1 ? 'none' : '', color: '#005ABD' }}>
							 | 
						|
								                                                {item.name}
							 | 
						|
								                                            </div>
							 | 
						|
								                                            <div className='separator' style={{ width: 1, height: 12, border: '1px solid #DCDEE0', margin: '0px 10px', display: index > 0 ? 'none' : '' }}></div>
							 | 
						|
								                                        </div>
							 | 
						|
								                                    )
							 | 
						|
								                                })
							 | 
						|
								                            }
							 | 
						|
								                            {
							 | 
						|
								                                row.receiverPepUser.length > 2 ? (
							 | 
						|
								                                    <Tooltip content={
							 | 
						|
								                                        <div style={{ display: 'flex', flexWrap: 'wrap' }}>
							 | 
						|
								                                            {
							 | 
						|
								                                                row.receiverPepUser.map((item, index) => {
							 | 
						|
								                                                    return (
							 | 
						|
								                                                        <div key={index}>
							 | 
						|
								                                                            {item.name},
							 | 
						|
								                                                        </div>
							 | 
						|
								                                                    )
							 | 
						|
								                                                })
							 | 
						|
								                                            }
							 | 
						|
								                                        </div>
							 | 
						|
								                                    } trigger="click" style={{ lineHeight: 2 }}>
							 | 
						|
								                                        <div style={{ fontSize: 14, color: '#005ABD', marginLeft: 8, cursor: "pointer", }}>
							 | 
						|
								                                            +{row.receiverPepUser.length - 2}
							 | 
						|
								                                        </div>
							 | 
						|
								                                    </Tooltip>
							 | 
						|
								                                ) : ('')
							 | 
						|
								                            }
							 | 
						|
								                        </div>
							 | 
						|
								                    )
							 | 
						|
								                }
							 | 
						|
								            },
							 | 
						|
								            {
							 | 
						|
								                title: "推送方式",
							 | 
						|
								                dataIndex: "pushType",
							 | 
						|
								                key: "pushType",
							 | 
						|
								                render: (_, r, index) => {
							 | 
						|
								                    return '邮件通知';
							 | 
						|
								                },
							 | 
						|
								            },
							 | 
						|
								            {
							 | 
						|
								                title: "监听问题模块",
							 | 
						|
								                dataIndex: "alarmType",
							 | 
						|
								                key: "alarmType",
							 | 
						|
								                render: (_, row) => {
							 | 
						|
								                    return (
							 | 
						|
								                        <div style={{ display: 'flex', alignItems: 'center' }}>
							 | 
						|
								                            {
							 | 
						|
								                                row.alarmType.map((item, index) => {
							 | 
						|
								                                    return (
							 | 
						|
								                                        <div className='myseparator' key={index} style={{ display: 'flex', alignItems: 'center' }}>
							 | 
						|
								                                            <div style={{ display: index > 1 ? 'none' : '' }}>
							 | 
						|
								                                                {alarmTypeObj[item]}
							 | 
						|
								                                            </div>
							 | 
						|
								                                            <div className='separator' style={{ width: 1, height: 12, border: '1px solid #DCDEE0', margin: '0px 10px', display: index > 0 ? 'none' : '' }}></div>
							 | 
						|
								                                        </div>
							 | 
						|
								                                    )
							 | 
						|
								                                })
							 | 
						|
								                            }
							 | 
						|
								                            {
							 | 
						|
								                                row.alarmType.length > 2 ? (
							 | 
						|
								                                    <Tooltip content={
							 | 
						|
								                                        <div style={{ display: 'flex', flexWrap: 'wrap' }}>
							 | 
						|
								                                            {
							 | 
						|
								                                                row.alarmType.map((item, index) => {
							 | 
						|
								                                                    return (
							 | 
						|
								                                                        <div key={index} >
							 | 
						|
								                                                            {alarmTypeObj[item]},
							 | 
						|
								                                                        </div>
							 | 
						|
								                                                    )
							 | 
						|
								                                                })
							 | 
						|
								                                            }
							 | 
						|
								                                        </div>
							 | 
						|
								                                    } trigger="click" style={{ lineHeight: 2 }}>
							 | 
						|
								                                        <div style={{ fontSize: 14, color: '#005ABD', marginLeft: 8, cursor: "pointer", }}>
							 | 
						|
								                                            +{row.alarmType.length - 2}
							 | 
						|
								                                        </div>
							 | 
						|
								                                    </Tooltip>
							 | 
						|
								                                ) : ('')
							 | 
						|
								                            }
							 | 
						|
								                        </div>
							 | 
						|
								                    )
							 | 
						|
								                }
							 | 
						|
								            },
							 | 
						|
								            {
							 | 
						|
								                title: "生效项目节点",
							 | 
						|
								                dataIndex: "timeType",
							 | 
						|
								                key: "timeType",
							 | 
						|
								                render: (_, row, index) => {
							 | 
						|
								                    return (
							 | 
						|
								                        <div style={{ display: 'flex', alignItems: 'center' }}>
							 | 
						|
								                            {
							 | 
						|
								                                row.timeType.length > 0 ? (
							 | 
						|
								                                    row.timeType.map((item, index) => {
							 | 
						|
								                                        return (
							 | 
						|
								                                            <div key={index} style={{
							 | 
						|
								                                                height: 18, marginLeft: 4,
							 | 
						|
								                                                background: 'linear-gradient(180deg, #EBF5FF 0%, #EBF5FF 0%, #D3E8FF 100%)',
							 | 
						|
								                                                borderRadius: 2, display: index > 1 ? 'none' : 'flex', alignItems: 'center'
							 | 
						|
								                                            }}>
							 | 
						|
								                                                <div>
							 | 
						|
								                                                    <img src="/assets/images/install/icon_zhengque.png" alt="" style={{ height: 10, width: 10, marginLeft: 4, marginRight: 9 }} />
							 | 
						|
								                                                </div>
							 | 
						|
								                                                <div style={{ color: '#0F7EFB', fontSize: 11, marginRight: 12 }}>
							 | 
						|
								                                                    {
							 | 
						|
								                                                        val.map((ite, idx) => {
							 | 
						|
								                                                            return (
							 | 
						|
								                                                                <div key={idx}>
							 | 
						|
								                                                                    {ite.id == item ? ite.construction_status : ''}
							 | 
						|
								                                                                </div>
							 | 
						|
								                                                            )
							 | 
						|
								                                                        })
							 | 
						|
								                                                    }
							 | 
						|
								                                                </div>
							 | 
						|
								                                            </div>
							 | 
						|
								                                        )
							 | 
						|
								                                    })
							 | 
						|
								                                ) : (
							 | 
						|
								                                    <div style={{
							 | 
						|
								                                        height: 18, marginLeft: 4,
							 | 
						|
								                                        background: 'linear-gradient(180deg, #99C7DD 0%, #3048FC 100%)',
							 | 
						|
								                                        borderRadius: 2, display: 'flex', alignItems: 'center'
							 | 
						|
								                                    }}>
							 | 
						|
								                                        <div>
							 | 
						|
								                                            <img src="/assets/images/install/icon_POMS.png" alt="" style={{ height: 10, width: 10, marginLeft: 4, marginRight: 9 }} />
							 | 
						|
								                                        </div>
							 | 
						|
								                                        <div style={{ color: '#FFFFFF', fontSize: 11, marginRight: 12 }}>
							 | 
						|
								                                            POMS
							 | 
						|
								                                        </div>
							 | 
						|
								                                    </div>
							 | 
						|
								                                )
							 | 
						|
								                            }
							 | 
						|
								                            {
							 | 
						|
								                                row.timeType.length > 2 ? (
							 | 
						|
								                                    <Tooltip content={
							 | 
						|
								                                        <div style={{ display: 'flex', flexWrap: 'wrap' }}>
							 | 
						|
								                                            {
							 | 
						|
								                                                row.timeType.map((item, index) => {
							 | 
						|
								                                                    return (
							 | 
						|
								                                                        <div key={index}>
							 | 
						|
								                                                            {
							 | 
						|
								                                                                val.map((ite, idx) => {
							 | 
						|
								                                                                    return (
							 | 
						|
								                                                                        <span key={idx}>
							 | 
						|
								                                                                            {ite.id == item ? ite.construction_status : ''}
							 | 
						|
								                                                                        </span>
							 | 
						|
								                                                                    )
							 | 
						|
								                                                                })
							 | 
						|
								                                                            },
							 | 
						|
								                                                        </div>
							 | 
						|
								                                                    )
							 | 
						|
								                                                })
							 | 
						|
								                                            }
							 | 
						|
								                                        </div>
							 | 
						|
								                                    } trigger="click" style={{ lineHeight: 2 }}>
							 | 
						|
								                                        <div style={{ fontSize: 14, color: '#005ABD', marginLeft: 8, cursor: "pointer", }}>
							 | 
						|
								                                            +{row.timeType.length - 2}
							 | 
						|
								                                        </div>
							 | 
						|
								                                    </Tooltip>
							 | 
						|
								                                ) : ('')
							 | 
						|
								                            }
							 | 
						|
								                        </div>
							 | 
						|
								                    )
							 | 
						|
								                },
							 | 
						|
								            },
							 | 
						|
								            {
							 | 
						|
								                title: "推送机制",
							 | 
						|
								                dataIndex: "tactics",
							 | 
						|
								                key: "tactics",
							 | 
						|
								                render: (_, r, index) => {
							 | 
						|
								                    return tacticsObj[r.tactics]
							 | 
						|
								                },
							 | 
						|
								            },
							 | 
						|
								            {
							 | 
						|
								                title: "启用状态",
							 | 
						|
								                dataIndex: "disable",
							 | 
						|
								                key: "disable",
							 | 
						|
								                render: (_, row, index) => {
							 | 
						|
								                    let enableType = ''
							 | 
						|
								                    if (row.disable) {
							 | 
						|
								                        enableType = '禁用'
							 | 
						|
								                    }
							 | 
						|
								                    else {
							 | 
						|
								                        if (row.timeType.length > 0) {
							 | 
						|
								                            for (let i = 0; i < row.timeType.length; i++) {
							 | 
						|
								                                if (row.timeType[i] == row.pomsProject?.pepProject?.constructionStatusId) {
							 | 
						|
								                                    enableType = '已生效'
							 | 
						|
								                                    break;
							 | 
						|
								                                } else {
							 | 
						|
								                                    enableType = '未生效'
							 | 
						|
								                                }
							 | 
						|
								                            }
							 | 
						|
								                        }
							 | 
						|
								                        else {
							 | 
						|
								                            enableType = '已生效'
							 | 
						|
								                        }
							 | 
						|
								                    }
							 | 
						|
								                    return (
							 | 
						|
								                        <div style={{ textAlign: 'center', padding: '1px 17px', color: enableType == '禁用' ? '#FB0F0F' : enableType == '已生效' ? '#0F7EFB' : '#646566', background: enableType == '禁用' ? 'rgba(255,221,221,0.38)' : enableType == '已生效' ? 'rgba(221,237,255,0.38)' : 'rgba(192,192,192,0.38)', }}>
							 | 
						|
								                            {enableType}
							 | 
						|
								                        </div>
							 | 
						|
								                    )
							 | 
						|
								                },
							 | 
						|
								            },
							 | 
						|
								            {
							 | 
						|
								                title: "推送次数",
							 | 
						|
								                dataIndex: "pushCount",
							 | 
						|
								                key: "pushCount",
							 | 
						|
								                render: (_, r, index) => {
							 | 
						|
								                    return r.pushCount + '次'
							 | 
						|
								                },
							 | 
						|
								            },
							 | 
						|
								        ];
							 | 
						|
								        for (let i = 0; i < arr.length; i++) {
							 | 
						|
								            let colum = column.filter((item) => {
							 | 
						|
								                return item.key === arr[i];
							 | 
						|
								            });
							 | 
						|
								            columns.splice(columns.length - 1, 0, colum[0]);
							 | 
						|
								        }
							 | 
						|
								        setSetupp(columns);
							 | 
						|
								    }
							 | 
						|
								    return (
							 | 
						|
								        <>
							 | 
						|
								            <div style={{ background: '#FFFFFF', margin: '8px 12px', padding: '20px 20px 0px 20px' }}>
							 | 
						|
								                <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
							 | 
						|
								                    <div style={{ display: 'flex', alignItems: 'center' }}>
							 | 
						|
								                        <div style={{ width: 0, height: 20, borderLeft: '3px solid #005ABD', borderTop: '3px solid transparent', borderBottom: '3px solid transparent' }}></div>
							 | 
						|
								                        <div style={{ fontFamily: "YouSheBiaoTiHei", fontSize: 24, color: '#101531', marginLeft: 8 }}>EM推送</div>
							 | 
						|
								                        <div style={{ marginLeft: 6, fontSize: 12, color: '#969799', fontFamily: "DINExp", }}>Em push</div>
							 | 
						|
								                    </div>
							 | 
						|
								                    <div style={{ marginRight: 20, display: 'flex', alignItems: 'center' }} className='myempush'>
							 | 
						|
								                        <Form
							 | 
						|
								                            onSubmit={(values) => console.log(values)}
							 | 
						|
								                            getFormApi={(formApi) => (form.current = formApi)}
							 | 
						|
								                            layout="horizontal"
							 | 
						|
								                            style={{ position: "relative", width: "100%", flex: 1 }}
							 | 
						|
								                        >
							 | 
						|
								                            <Form.Select
							 | 
						|
								                                pure
							 | 
						|
								                                field="keywordTarget"
							 | 
						|
								                                placeholder="请选择搜索类型"
							 | 
						|
								                                style={{ width: 200 }}
							 | 
						|
								                                initValue={"pepProject"}
							 | 
						|
								                            >
							 | 
						|
								                                <Form.Select.Option value='pepProject'>项目</Form.Select.Option>
							 | 
						|
								                                <Form.Select.Option value='struc'>结构物</Form.Select.Option>
							 | 
						|
								                                <Form.Select.Option value='tactics'>策略名</Form.Select.Option>
							 | 
						|
								                            </Form.Select>
							 | 
						|
								                            <Form.Input
							 | 
						|
								                                suffix={<IconSearch />}
							 | 
						|
								                                field="keyword"
							 | 
						|
								                                pure
							 | 
						|
								                                showClear
							 | 
						|
								                                style={{ width: 260, marginLeft: 12, marginRight: 12 }}
							 | 
						|
								                                placeholder="请输入或选择关键词"
							 | 
						|
								                            />
							 | 
						|
								                            <Form.Select
							 | 
						|
								                                label='推送类型:'
							 | 
						|
								                                labelPosition="left"
							 | 
						|
								                                field='alarmType'
							 | 
						|
								                                style={{ width: 116, marginRight: 10, color: "#F9F9F9", }}
							 | 
						|
								                                placeholder="全部"
							 | 
						|
								                                filter
							 | 
						|
								                                showClear
							 | 
						|
								                            >
							 | 
						|
								                                <Form.Select.Option value="data_outages">数据中断</Form.Select.Option>
							 | 
						|
								                                <Form.Select.Option value="data_exception">数据异常</Form.Select.Option>
							 | 
						|
								                                <Form.Select.Option value="strategy_hit">策略命中</Form.Select.Option>
							 | 
						|
								                                <Form.Select.Option value="video_exception">视频异常</Form.Select.Option>
							 | 
						|
								                                <Form.Select.Option value="app_exception">应用异常</Form.Select.Option>
							 | 
						|
								                                <Form.Select.Option value="device_exception">设备异常</Form.Select.Option>
							 | 
						|
								                            </Form.Select>
							 | 
						|
								                            <Form.Select
							 | 
						|
								                                label='启用状态:'
							 | 
						|
								                                labelPosition="left"
							 | 
						|
								                                field='state'
							 | 
						|
								                                style={{ width: 116, marginRight: 10, color: "#F9F9F9", }}
							 | 
						|
								                                placeholder="全部"
							 | 
						|
								                                filter
							 | 
						|
								                                showClear
							 | 
						|
								                            >
							 | 
						|
								                                <Form.Select.Option value='takeEffect'>已生效</Form.Select.Option>
							 | 
						|
								                                <Form.Select.Option value='notYet'>未生效</Form.Select.Option>
							 | 
						|
								                                <Form.Select.Option value='disable'>禁用</Form.Select.Option>
							 | 
						|
								                            </Form.Select>
							 | 
						|
								                        </Form>
							 | 
						|
								                        <Button
							 | 
						|
								                            theme="solid"
							 | 
						|
								                            type="primary"
							 | 
						|
								                            style={{
							 | 
						|
								                                width: 80,
							 | 
						|
								                                height: 32,
							 | 
						|
								                                borderRadius: 2,
							 | 
						|
								                                marginRight: 32,
							 | 
						|
								                                background: '#FFFFFF',
							 | 
						|
								                                color: '#005ABD',
							 | 
						|
								                                border: '1px solid #005ABD'
							 | 
						|
								                            }}
							 | 
						|
								                            onClick={() => {
							 | 
						|
								                                getPushList({ limit: query.limit, page: 0 })
							 | 
						|
								                            }}
							 | 
						|
								                        >
							 | 
						|
								                            查询
							 | 
						|
								                        </Button>
							 | 
						|
								                        <div style={{ display: 'flex', alignItems: 'center' }}>
							 | 
						|
								                            <img title='设置' src="/assets/images/problem/setup.png" style={{ width: 18, height: 18, cursor: "pointer" }} onClick={() => setSetup(true)} />
							 | 
						|
								                        </div>
							 | 
						|
								                        <Button
							 | 
						|
								                            theme="solid"
							 | 
						|
								                            type="primary"
							 | 
						|
								                            style={{
							 | 
						|
								                                width: 136,
							 | 
						|
								                                height: 32,
							 | 
						|
								                                borderRadius: 2,
							 | 
						|
								                                marginLeft: 32
							 | 
						|
								                            }}
							 | 
						|
								                            onClick={() => {
							 | 
						|
								                                setEditObj({})
							 | 
						|
								                                setPushModal(true);
							 | 
						|
								                                setPushEdit(false);
							 | 
						|
								                            }}
							 | 
						|
								                        >
							 | 
						|
								                            添加推送策略
							 | 
						|
								                        </Button>
							 | 
						|
								                    </div>
							 | 
						|
								                </div>
							 | 
						|
								                <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 20, marginTop: 5 }}>
							 | 
						|
								                    <div style={{ fontSize: 12, color: '#8B8B8B' }}>EM推送提供对映射关系组的项目、结构物问题的监听和通知服务,支持对设备异常率、问题持续时间、即时响应等策略定义的动态推送。</div>
							 | 
						|
								                </div>
							 | 
						|
								                <div style={{ marginTop: 20 }}>
							 | 
						|
								                    <Skeleton
							 | 
						|
								                        loading={loading}
							 | 
						|
								                        // loading={false}
							 | 
						|
								                        active={true}
							 | 
						|
								                        placeholder={SkeletonScreen()}
							 | 
						|
								                    >
							 | 
						|
								                        <Table
							 | 
						|
								                            rowKey="name"
							 | 
						|
								                            columns={setupp.filter((s) => s)}
							 | 
						|
								                            dataSource={tableData}
							 | 
						|
								                            bordered={false}
							 | 
						|
								                            hideExpandedColumn={false}
							 | 
						|
								                            empty="暂无数据"
							 | 
						|
								                            expandedRowRender={expandRowRender}
							 | 
						|
								                            pagination={false}
							 | 
						|
								                            onRow={handleRow}
							 | 
						|
								                        />
							 | 
						|
								                    </Skeleton>
							 | 
						|
								                    <div
							 | 
						|
								                        style={{
							 | 
						|
								                            display: "flex",
							 | 
						|
								                            justifyContent: "space-between",
							 | 
						|
								                            padding: "20px 20px",
							 | 
						|
								                        }}
							 | 
						|
								                    >
							 | 
						|
								                        <div>
							 | 
						|
								                        </div>
							 | 
						|
								                        <div style={{ display: 'flex', }}>
							 | 
						|
								                            <span style={{ lineHeight: "30px", fontSize: 13, color: 'rgba(0,90,189,0.8)' }}>
							 | 
						|
								                                共{limits}条信息
							 | 
						|
								                            </span>
							 | 
						|
								                            <Pagination
							 | 
						|
								                                className="22"
							 | 
						|
								                                total={limits}
							 | 
						|
								                                showSizeChanger
							 | 
						|
								                                currentPage={query.page + 1}
							 | 
						|
								                                pageSizeOpts={[10, 20, 30, 40]}
							 | 
						|
								                                onChange={(currentPage, pageSize) => {
							 | 
						|
								                                    setQuery({ limit: pageSize, page: currentPage - 1 });
							 | 
						|
								                                    page.current = currentPage - 1
							 | 
						|
								                                    setChange(!change)
							 | 
						|
								                                }}
							 | 
						|
								                            />
							 | 
						|
								                        </div>
							 | 
						|
								                    </div>
							 | 
						|
								                </div>
							 | 
						|
								            </div>
							 | 
						|
								            {//推送配置弹框
							 | 
						|
								                pushModal ?
							 | 
						|
								                    <PushModal
							 | 
						|
								                        visible={true}
							 | 
						|
								                        pushEdit={pushEdit}
							 | 
						|
								                        editObj={editObj}
							 | 
						|
								                        cancel={() => {
							 | 
						|
								                            setPushModal(false);
							 | 
						|
								                        }}
							 | 
						|
								                        close={() => {
							 | 
						|
								                            setPushModal(false);
							 | 
						|
								                            getPushList(query)
							 | 
						|
								                        }} >
							 | 
						|
								                    </PushModal> : ''
							 | 
						|
								            }
							 | 
						|
								            {setup ? (
							 | 
						|
								                <Setup
							 | 
						|
								                    tableType={EMPUSH}
							 | 
						|
								                    tableList={tableList}
							 | 
						|
								                    close={() => {
							 | 
						|
								                        setSetup(false);
							 | 
						|
								                        attribute(projectStatus);
							 | 
						|
								                    }}
							 | 
						|
								                />
							 | 
						|
								            ) : (
							 | 
						|
								                ""
							 | 
						|
								            )}
							 | 
						|
								        </>
							 | 
						|
								    )
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function mapStateToProps (state) {
							 | 
						|
								    const { auth, global, getPush } = state;
							 | 
						|
								    return {
							 | 
						|
								        loading: getPush.isRequesting,
							 | 
						|
								        user: auth.user,
							 | 
						|
								        actions: global.actions,
							 | 
						|
								        //   members: members.data,
							 | 
						|
								    };
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								export default connect(mapStateToProps)(EmPush);
							 | 
						|
								
							 |