巴林闲侠
3 years ago
10 changed files with 565 additions and 2 deletions
@ -0,0 +1,224 @@ |
|||||
|
import { connect } from 'react-redux'; |
||||
|
import './protable.less' |
||||
|
import { Card, Button, Popconfirm, Badge, Col, Row, DatePicker, Input } from 'antd'; |
||||
|
import ProTable from '@ant-design/pro-table'; |
||||
|
// import { Badge, Button } from 'antd';
|
||||
|
import React, { useEffect, useState } from 'react'; |
||||
|
// @ts-ignore
|
||||
|
import styles from './protable.less'; |
||||
|
const DetailList = (props) => { |
||||
|
const { patrolName } = props; |
||||
|
const [tableListDataSource, setTableListDataSource] = useState([]); |
||||
|
|
||||
|
const columns = [ |
||||
|
{ |
||||
|
title: '问题编号', |
||||
|
key: 'num', |
||||
|
dataIndex: 'num', |
||||
|
align:'center' |
||||
|
}, { |
||||
|
title: '所属道路', |
||||
|
key: 'road', |
||||
|
dataIndex: 'road', |
||||
|
align:'center' |
||||
|
}, { |
||||
|
title: '所在路段', |
||||
|
key: 'address', |
||||
|
dataIndex: 'address', |
||||
|
align:'center' |
||||
|
}, { |
||||
|
title: '缺陷名称', |
||||
|
key: 'name', |
||||
|
dataIndex: 'name', |
||||
|
align:'center' |
||||
|
}, { |
||||
|
title: '巡查人', |
||||
|
width:100, |
||||
|
key: 'patrolName', |
||||
|
dataIndex: 'patrolName', |
||||
|
align:'center' |
||||
|
}, { |
||||
|
title: '上报时间', |
||||
|
key: 'createdAt', |
||||
|
dataIndex: 'createdAt', |
||||
|
valueType: 'dateTime', |
||||
|
align:'center' |
||||
|
}, { |
||||
|
title: '操作', |
||||
|
width:200, |
||||
|
key: 'option', |
||||
|
valueType: 'option', |
||||
|
align:'center', |
||||
|
render: () => [<Button style={{marginRight:10}}>查看</Button>,<Button >删除</Button>] |
||||
|
}, |
||||
|
]; |
||||
|
useEffect(() => { |
||||
|
const source = []; |
||||
|
for (let i = 0; i < 25; i += 1) { |
||||
|
source.push({ |
||||
|
num: `${i + 1}`, |
||||
|
road: `成华大道${i + 2}`, |
||||
|
address: `二仙桥${i + 3}`, |
||||
|
name: `缺失内容${i + 4}`, |
||||
|
patrolName: patrolName, |
||||
|
createdAt: Date.now() - Math.floor(Math.random() * 10000), |
||||
|
key: i, |
||||
|
}); |
||||
|
} |
||||
|
setTableListDataSource(source); |
||||
|
}, [patrolName]); |
||||
|
return ( |
||||
|
<ProTable |
||||
|
columns={columns} |
||||
|
dataSource={tableListDataSource} |
||||
|
pagination={{ |
||||
|
pageSize: 10, |
||||
|
defaultPageSize:10, |
||||
|
showSizeChanger: false, |
||||
|
}} |
||||
|
rowKey="key" |
||||
|
toolBarRender={false} |
||||
|
search={false} |
||||
|
/> |
||||
|
); |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
const patrolNameListDataSource = []; |
||||
|
|
||||
|
for (let i = 0; i < 10; i += 1) { |
||||
|
patrolNameListDataSource.push({ |
||||
|
patrolName: `老大爷${i}`, |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
const IPList = (props) => { |
||||
|
const { onChange, patrolName } = props; |
||||
|
|
||||
|
const columns = [ |
||||
|
{ |
||||
|
title: '巡更人员', |
||||
|
key: 'patrolName', |
||||
|
dataIndex: 'patrolName', |
||||
|
align:'center' |
||||
|
}, |
||||
|
|
||||
|
]; |
||||
|
return ( |
||||
|
<div className='spilce'> |
||||
|
<ProTable |
||||
|
columns={columns} |
||||
|
request={(params, sorter, filter) => { |
||||
|
// 表单搜索项会从 params 传入,传递给后端接口。
|
||||
|
console.log(params, sorter, filter); |
||||
|
return Promise.resolve({ |
||||
|
data: patrolNameListDataSource, |
||||
|
success: true, |
||||
|
}); |
||||
|
}} |
||||
|
rowKey="patrolName" |
||||
|
rowClassName={(record) => { |
||||
|
return record.patrolName === patrolName ? styles['split-row-select-active'] : ''; |
||||
|
}} |
||||
|
// toolbar={{
|
||||
|
// search: {
|
||||
|
// onSearch: (value) => {
|
||||
|
// alert(value);
|
||||
|
// },
|
||||
|
// },
|
||||
|
// }}
|
||||
|
toolBarRender={()=>[ |
||||
|
<Input placeholder='输入巡更人员名称'></Input> |
||||
|
]} |
||||
|
options={false} |
||||
|
pagination={false} |
||||
|
search={false} |
||||
|
onRow={(record) => { |
||||
|
return { |
||||
|
onClick: () => { |
||||
|
if (record.patrolName) { |
||||
|
onChange(record.patrolName); |
||||
|
} |
||||
|
}, |
||||
|
}; |
||||
|
}} |
||||
|
/></div> |
||||
|
|
||||
|
); |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
|
||||
|
const MaintenanceTable = () => { |
||||
|
const [patrolName, setPatrolName] = useState('老大爷0'); |
||||
|
const { RangePicker } = DatePicker; |
||||
|
const tabList = [ |
||||
|
{ |
||||
|
key: 'tab1', |
||||
|
tab: '养护', |
||||
|
}, |
||||
|
]; |
||||
|
const contentList = { |
||||
|
tab1: [<div> |
||||
|
<Card style={{ flex: 1 }}> |
||||
|
<DetailList patrolName={patrolName} /> |
||||
|
</Card> |
||||
|
</div>] |
||||
|
}; |
||||
|
const [activeTabKey1, setActiveTabKey1] = useState('tab1'); |
||||
|
const onTab1Change = (key) => { |
||||
|
setActiveTabKey1(key); |
||||
|
}; |
||||
|
return ( |
||||
|
<div className='card-protable'> |
||||
|
<Card > |
||||
|
<IPList onChange={(searchPatrolName) => setPatrolName(searchPatrolName)} patrolName={patrolName} /> |
||||
|
</Card> |
||||
|
<Card |
||||
|
style={{ flex: 1 }} |
||||
|
tabList={tabList} |
||||
|
activeTabKey={activeTabKey1} |
||||
|
onTabChange={(key) => { |
||||
|
onTab1Change(key); |
||||
|
}} |
||||
|
> |
||||
|
<div style={{ marginBottom: 20}}> |
||||
|
<RangePicker /> |
||||
|
<Button style={{marginLeft:20}}>查询</Button> |
||||
|
<Button style={{marginLeft:20}}>导出</Button> |
||||
|
</div> |
||||
|
{contentList[activeTabKey1]} |
||||
|
</Card> |
||||
|
</div> |
||||
|
|
||||
|
); |
||||
|
}; |
||||
|
|
||||
|
function mapStateToProps(state) { |
||||
|
const { auth, depMessage } = state; |
||||
|
const pakData = (dep) => { |
||||
|
return dep.map((d) => { |
||||
|
return { |
||||
|
title: d.name, |
||||
|
value: d.id, |
||||
|
// children: d.type >= 2 ? [] : pakData(d.subordinate)
|
||||
|
children: pakData(d.subordinate) |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
let depData = pakData(depMessage.data || []) |
||||
|
return { |
||||
|
user: auth.user, |
||||
|
depMessage: depMessage.data || [], |
||||
|
depLoading: depMessage.isRequesting, |
||||
|
depData, |
||||
|
}; |
||||
|
} |
||||
|
export default connect(mapStateToProps)(MaintenanceTable); |
@ -0,0 +1,229 @@ |
|||||
|
import { connect } from 'react-redux'; |
||||
|
import './protable.less' |
||||
|
import { Card, Button, Popconfirm, Badge, Col, Row, DatePicker, Input } from 'antd'; |
||||
|
import ProTable from '@ant-design/pro-table'; |
||||
|
// import { Badge, Button } from 'antd';
|
||||
|
import React, { useEffect, useState } from 'react'; |
||||
|
// @ts-ignore
|
||||
|
import styles from './protable.less'; |
||||
|
const DetailList = (props) => { |
||||
|
const { patrolName } = props; |
||||
|
const [tableListDataSource, setTableListDataSource] = useState([]); |
||||
|
|
||||
|
const columns = [ |
||||
|
{ |
||||
|
title: '问题编号', |
||||
|
key: 'num', |
||||
|
dataIndex: 'num', |
||||
|
align: 'center' |
||||
|
}, { |
||||
|
title: '所属道路', |
||||
|
key: 'road', |
||||
|
dataIndex: 'road', |
||||
|
align: 'center' |
||||
|
}, { |
||||
|
title: '所在路段', |
||||
|
key: 'address', |
||||
|
dataIndex: 'address', |
||||
|
align: 'center' |
||||
|
}, { |
||||
|
title: '缺陷名称', |
||||
|
key: 'name', |
||||
|
dataIndex: 'name', |
||||
|
align: 'center' |
||||
|
}, { |
||||
|
title: '巡查人', |
||||
|
width: 100, |
||||
|
key: 'patrolName', |
||||
|
dataIndex: 'patrolName', |
||||
|
align: 'center' |
||||
|
}, { |
||||
|
title: '上报时间', |
||||
|
key: 'createdAt', |
||||
|
dataIndex: 'createdAt', |
||||
|
valueType: 'dateTime', |
||||
|
align: 'center' |
||||
|
}, { |
||||
|
title: '操作', |
||||
|
width: 200, |
||||
|
key: 'option', |
||||
|
valueType: 'option', |
||||
|
align: 'center', |
||||
|
render: () => [<Button style={{ marginRight: 10 }}>查看</Button>, <Button >删除</Button>] |
||||
|
}, |
||||
|
]; |
||||
|
useEffect(() => { |
||||
|
const source = []; |
||||
|
for (let i = 0; i < 25; i += 1) { |
||||
|
source.push({ |
||||
|
num: `${i + 1}`, |
||||
|
road: `成华大道${i + 2}`, |
||||
|
address: `二仙桥${i + 3}`, |
||||
|
name: `缺失内容${i + 4}`, |
||||
|
patrolName: patrolName, |
||||
|
createdAt: Date.now() - Math.floor(Math.random() * 10000), |
||||
|
key: i, |
||||
|
}); |
||||
|
} |
||||
|
setTableListDataSource(source); |
||||
|
}, [patrolName]); |
||||
|
return ( |
||||
|
<ProTable |
||||
|
columns={columns} |
||||
|
dataSource={tableListDataSource} |
||||
|
pagination={{ |
||||
|
pageSize: 10, |
||||
|
defaultPageSize: 10, |
||||
|
showSizeChanger: false, |
||||
|
}} |
||||
|
rowKey="key" |
||||
|
toolBarRender={false} |
||||
|
search={false} |
||||
|
/> |
||||
|
); |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
const patrolNameListDataSource = []; |
||||
|
|
||||
|
for (let i = 0; i < 10; i += 1) { |
||||
|
patrolNameListDataSource.push({ |
||||
|
patrolName: `老大爷${i}`, |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
const IPList = (props) => { |
||||
|
const { onChange, patrolName } = props; |
||||
|
|
||||
|
const columns = [ |
||||
|
{ |
||||
|
title: '巡更人员', |
||||
|
key: 'patrolName', |
||||
|
dataIndex: 'patrolName', |
||||
|
align: 'center' |
||||
|
}, |
||||
|
|
||||
|
]; |
||||
|
return ( |
||||
|
<div className='spilce'> |
||||
|
<ProTable |
||||
|
columns={columns} |
||||
|
request={(params, sorter, filter) => { |
||||
|
// 表单搜索项会从 params 传入,传递给后端接口。
|
||||
|
console.log(params, sorter, filter); |
||||
|
return Promise.resolve({ |
||||
|
data: patrolNameListDataSource, |
||||
|
success: true, |
||||
|
}); |
||||
|
}} |
||||
|
rowKey="patrolName" |
||||
|
rowClassName={(record) => { |
||||
|
return record.patrolName === patrolName ? styles['split-row-select-active'] : ''; |
||||
|
}} |
||||
|
// toolbar={{
|
||||
|
// search: {
|
||||
|
// onSearch: (value) => {
|
||||
|
// alert(value);
|
||||
|
// },
|
||||
|
// },
|
||||
|
// }}
|
||||
|
toolBarRender={() => [ |
||||
|
<Input placeholder='输入巡更人员名称'></Input> |
||||
|
]} |
||||
|
options={false} |
||||
|
pagination={false} |
||||
|
search={false} |
||||
|
onRow={(record) => { |
||||
|
return { |
||||
|
onClick: () => { |
||||
|
if (record.patrolName) { |
||||
|
onChange(record.patrolName); |
||||
|
} |
||||
|
}, |
||||
|
}; |
||||
|
}} |
||||
|
/></div> |
||||
|
|
||||
|
); |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
|
||||
|
const PatrolTable = () => { |
||||
|
const [patrolName, setPatrolName] = useState('老大爷0'); |
||||
|
const { RangePicker } = DatePicker; |
||||
|
const tabList = [ |
||||
|
{ |
||||
|
key: 'tab1', |
||||
|
tab: '巡更', |
||||
|
}, { |
||||
|
key: 'tab2', |
||||
|
tab: '巡更轨迹查询', |
||||
|
}, |
||||
|
]; |
||||
|
const contentList = { |
||||
|
tab1: [<div> |
||||
|
<Card style={{ flex: 1 }}> |
||||
|
<DetailList patrolName={patrolName} /> |
||||
|
</Card> |
||||
|
</div>] |
||||
|
}; |
||||
|
const [activeTabKey1, setActiveTabKey1] = useState('tab1'); |
||||
|
const onTab1Change = (key) => { |
||||
|
setActiveTabKey1(key); |
||||
|
}; |
||||
|
return ( |
||||
|
<div className='card-protable'> |
||||
|
<Card > |
||||
|
<IPList onChange={(searchPatrolName) => setPatrolName(searchPatrolName)} patrolName={patrolName} /> |
||||
|
</Card> |
||||
|
<Card |
||||
|
style={{ flex: 1 }} |
||||
|
tabList={tabList} |
||||
|
activeTabKey={activeTabKey1} |
||||
|
onTabChange={(key) => { |
||||
|
onTab1Change(key); |
||||
|
}} |
||||
|
> |
||||
|
{ |
||||
|
activeTabKey1 == 'tab1' ? <div style={{ marginBottom: 20 }}> |
||||
|
<RangePicker /> |
||||
|
<Button style={{ marginLeft: 20 }}>查询</Button> |
||||
|
<Button style={{ marginLeft: 20 }}>导出</Button> |
||||
|
</div> : '' |
||||
|
} |
||||
|
{contentList[activeTabKey1]} |
||||
|
</Card> |
||||
|
</div> |
||||
|
|
||||
|
); |
||||
|
}; |
||||
|
|
||||
|
function mapStateToProps(state) { |
||||
|
const { auth, depMessage } = state; |
||||
|
const pakData = (dep) => { |
||||
|
return dep.map((d) => { |
||||
|
return { |
||||
|
title: d.name, |
||||
|
value: d.id, |
||||
|
// children: d.type >= 2 ? [] : pakData(d.subordinate)
|
||||
|
children: pakData(d.subordinate) |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
let depData = pakData(depMessage.data || []) |
||||
|
return { |
||||
|
user: auth.user, |
||||
|
depMessage: depMessage.data || [], |
||||
|
depLoading: depMessage.isRequesting, |
||||
|
depData, |
||||
|
}; |
||||
|
} |
||||
|
export default connect(mapStateToProps)(PatrolTable); |
@ -0,0 +1,42 @@ |
|||||
|
import React, { useEffect, useState } from 'react'; |
||||
|
import { connect } from 'react-redux'; |
||||
|
import '../style.less'; |
||||
|
import { getDepMessage, getReportStatistic } from "../actions/infor" |
||||
|
import MaintenanceTable from '../components/maintenanceTable'; |
||||
|
const superagent = require('superagent'); |
||||
|
const Maintenance = (props) => { |
||||
|
const { dispatch, user } = props |
||||
|
const [data, setData] = useState() |
||||
|
useEffect(() => { |
||||
|
// dispatch(getDepMessage())
|
||||
|
dispatch(getReportStatistic()) |
||||
|
setData(props) |
||||
|
}, []); |
||||
|
//批量导出
|
||||
|
const exports = (ids, counts) => { |
||||
|
// console.log(user);
|
||||
|
let reportIds = []; |
||||
|
if (ids.length) |
||||
|
reportIds = ids |
||||
|
else |
||||
|
reportIds = (counts || {}).ids || []; |
||||
|
superagent.post('/_report/http') |
||||
|
.send({ id: reportIds.map(i => Number(i)) }).end((err, res) => { |
||||
|
const resTextIs = res.text.split('/').pop() |
||||
|
window.open( |
||||
|
'/_api/' + |
||||
|
`attachments?src=files/${resTextIs}&filename=${encodeURIComponent(resTextIs)}&token=${user.token}`) |
||||
|
}) |
||||
|
} |
||||
|
return ( |
||||
|
<> <MaintenanceTable data={data} exports={exports} /> |
||||
|
</> |
||||
|
) |
||||
|
} |
||||
|
function mapStateToProps(state) { |
||||
|
const { auth } = state |
||||
|
return { |
||||
|
user: auth.user, |
||||
|
} |
||||
|
} |
||||
|
export default connect(mapStateToProps)(Maintenance); |
@ -0,0 +1,42 @@ |
|||||
|
import React, { useEffect, useState } from 'react'; |
||||
|
import { connect } from 'react-redux'; |
||||
|
import '../style.less'; |
||||
|
import { getDepMessage, getReportStatistic } from "../actions/infor" |
||||
|
import PatrolTable from '../components/patrolTable'; |
||||
|
const superagent = require('superagent'); |
||||
|
const patrol = (props) => { |
||||
|
const { dispatch, user } = props |
||||
|
const [data, setData] = useState() |
||||
|
useEffect(() => { |
||||
|
// dispatch(getDepMessage())
|
||||
|
dispatch(getReportStatistic()) |
||||
|
setData(props) |
||||
|
}, []); |
||||
|
//批量导出
|
||||
|
const exports = (ids, counts) => { |
||||
|
// console.log(user);
|
||||
|
let reportIds = []; |
||||
|
if (ids.length) |
||||
|
reportIds = ids |
||||
|
else |
||||
|
reportIds = (counts || {}).ids || []; |
||||
|
superagent.post('/_report/http') |
||||
|
.send({ id: reportIds.map(i => Number(i)) }).end((err, res) => { |
||||
|
const resTextIs = res.text.split('/').pop() |
||||
|
window.open( |
||||
|
'/_api/' + |
||||
|
`attachments?src=files/${resTextIs}&filename=${encodeURIComponent(resTextIs)}&token=${user.token}`) |
||||
|
}) |
||||
|
} |
||||
|
return ( |
||||
|
<> <PatrolTable data={data} exports={exports} /> |
||||
|
</> |
||||
|
) |
||||
|
} |
||||
|
function mapStateToProps(state) { |
||||
|
const { auth } = state |
||||
|
return { |
||||
|
user: auth.user, |
||||
|
} |
||||
|
} |
||||
|
export default connect(mapStateToProps)(patrol); |
Loading…
Reference in new issue