运维服务中台
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.
 
 
 
 
 

271 lines
9.9 KiB

import React, { useEffect, useRef, useState } from 'react';
import { connect } from 'react-redux';
import { Skeleton, Button, Pagination, Form, Popconfirm, Table, Tooltip, Input } from '@douyinfe/semi-ui';
import { IconSearch } from '@douyinfe/semi-icons';
import { SkeletonScreen, } from "$components";
import moment from "moment";
import AutomaticModal from '../components/automatic-Modal'
import SimpleBar from 'simplebar-react';
const AutomaticReport = ({ dispatch, actions, user, clientHeight, loading, generateloading, socket, projectPoms, pepProjectId }) => {
const { service, } = actions;
const [query, setQuery] = useState({ limit: 10, page: 0 }); //页码信息
const [limits, setLimits] = useState()//总数
const mylimits = useRef(); //每页实际条数
const [automaticModal, setAutomaticModall] = useState(false) //弹框
const [eidtData, setEidtData] = useState({}) //是否改变
const [tableData, setTableData] = useState([]) //表格数据
const [projectList, setProjectList] = useState([]) //项目数据
const [projectId, setProjectId] = useState() //项目id
const [projectSearch, setProjectSearch] = useState() //项目搜索
const [keyword, setKeyword] = useState() //报表关键字
const [id, setId] = useState()
const page = useRef(query.page);//哪一页
useEffect(() => {
if (projectPoms?.length) {
let dataList = projectPoms?.filter(v => v.pepProjectIsDelete != 1 && (!pepProjectId || (pepProjectId?.length > 0 ? pepProjectId?.split(',')?.map(s => Number(s.id))?.includes(v.id) : pepProjectId)))
setProjectList(dataList)
getData({ limit: 10, page: 0 })
setQuery({ limit: 10, page: 0 })
}
}, [projectPoms, pepProjectId, projectSearch])
const getData = (data = {}) => {
dispatch(service.getAutomaticReport({ projectId: pepProjectId, ...query, keyword, ...data })).then((res) => {
if (res.success) {
setTableData(res.payload.data?.rows)
setLimits(res.payload.data?.count)
setId("")
}
})
}
const columns = [{
title: "序号",
dataIndex: "index",
key: 'index',
render: (txet, row, index) => index + 1
}, {
title: "报表名称",
dataIndex: "reportName",
key: 'reportName',
}, {
title: "所属项目",
dataIndex: "projectId",
key: 'projectId',
render: (_, row) => {
let project = projectPoms?.find(s => s.id == row?.projectId)
return project?.name || project?.pepProjectName || '--'
}
}, {
title: "报表类型",
dataIndex: "reportType",
key: 'reportType',
}, {
title: "最近生成时间",
dataIndex: "time",
key: 'time',
render: (txet, row) => txet && moment(txet).format('YYYY-MM-DD HH:mm:ss') || '--'
}, {
title: "操作",
dataIndex: "text",
key: 'text',
render: (_, row) => {
return (
<div style={{ display: "flex" }}>
<Button theme="borderless" onClick={() => {
setEidtData(row)
setAutomaticModall(true)
}}>
编辑
</Button>
<Popconfirm
title="确定删除该报表生成规则吗?"
arrowPointAtCenter={false}
showArrow={true}
position="topRight"
onConfirm={() => {
dispatch(service.delAutomaticReport(row.id)).then((res) => {
if (res.success) {
setQuery({ limit: 10, page: 0 })
getData({ limit: 10, page: 0, keyword: keyword })
}
})
}}
>
<Button theme="borderless" type='danger'>删除</Button>
</Popconfirm>
<Button theme="borderless" loading={id == row?.id && generateloading ? true : false} onClick={() => {
setId(row?.id)
// WSDJC(温湿度监测) 1002
// FSFXJC(风速风向监测) 1001
// SSFJC(伸缩缝监测) 4009
// SLJC(索力监测) 2001
// YBJC(应力应变监测) 3001
// NDJC(挠度监测) 4004
// ZDJC(振动监测) 5002
// CLZHJC(车辆载荷监测)
// ZZWYJC(支座位移监测) 4001
// QTPWJC(桥塔偏位监测) 4002
// LFJC(裂缝监测) 4008
// QDQXJC(桥墩倾斜监测) 4007
// JGWDJC(结构温度监测) 1004
let dataList = {
1002: 'WSDJC',
1001: 'FSFXJC',
4009: 'SSFJC',
2001: 'SLJC',
3001: 'YBJC',
4004: 'NDJC',
5002: 'ZDJC',
4001: 'ZZWYJC',
4002: 'QTPWJC',
4008: 'LFJC',
4007: 'QDQXJC',
1004: 'JGWDJC'
}
// row?.factors?.forEach(d => {
// d.codeName = dataList[d.codeName]
// })
// console.log(1212, row);
dispatch(service.postGenerateReport({ ...row, structId: "" })).then((res) => {
if (res.success) {
setQuery({ limit: 10, page: 0 })
getData({ limit: 10, page: 0, keyword: keyword })
}
})
}}>
立即生成
</Button>
</div>
);
},
},
]
function handleRow (record, index) {//斑马条纹
// 给偶数行设置斑马纹
if (index % 2 === 0) {
return {
style: {
background: '#FAFCFF',
}
};
} else {
return {};
}
}
return (
<>
<div style={{ background: '#FFFFFF', margin: '8px 12px', padding: '20px 20px 0px 20px', }}>
<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 }}>自动化报表</div>
<div style={{ marginLeft: 6, fontSize: 12, color: '#969799', fontFamily: "DINExp", }}>AUTOMATIC REPORT</div>
</div>
<div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', margin: '16px 0' }}>
<Button theme='solid' type='secondary' onClick={() => {
setAutomaticModall(true)
}}>新增报表生成规则</Button>
<div>
<Input style={{ width: 220, marginRight: 20 }} value={keyword} placeholder='请输入报表关键字' onChange={(e) => {
setKeyword(e)
}} />
<Button theme='solid' type='secondary' onClick={() => {
setQuery({ limit: 10, page: 0 })
getData({ limit: 10, page: 0, keyword: keyword })
}}>查询</Button>
</div>
</div>
<Skeleton
loading={loading}
// loading={false}
active={true}
placeholder={SkeletonScreen()}
>
<Table
rowKey="name"
columns={columns}
dataSource={tableData}
bordered={false}
hideExpandedColumn={false}
empty="暂无数据"
pagination={false}
onRow={handleRow}
/>
</Skeleton>
{limits > 0 && <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 });
getData({ limit: pageSize, page: currentPage - 1 })
}}
/>
</div>
</div>}
</div>
{//推送配置弹框
automaticModal ?
<AutomaticModal
visible={true}
projectList={projectList}
eidtData={eidtData}
close={() => {
setAutomaticModall(false);
setEidtData({})
}}
success={() => {
setQuery({ limit: 10, page: 0 })
getData({ limit: 10, page: 0, keyword: keyword })
}}
/> : ''
}
</>
)
}
function mapStateToProps (state) {
const { auth, global, automaticReport, generateReport, ProjectPoms } = state;
return {
loading: automaticReport.isRequesting,
user: auth.user,
actions: global.actions,
pepProjectId: global.pepProjectId,
clientHeight: global?.clientHeight,
projectPoms: ProjectPoms?.data?.rows,
generateloading: generateReport.isRequesting,
};
}
export default connect(mapStateToProps)(AutomaticReport);