|
|
@ -30,7 +30,7 @@ function ParkingAlyDuration() { |
|
|
|
// 分页数据 |
|
|
|
const [pageInfo, setPageInfo] = useState({ |
|
|
|
pn: 1, |
|
|
|
length: 10 |
|
|
|
page_size: 10 |
|
|
|
}); |
|
|
|
// 表单数据 |
|
|
|
const [formData, setFormData] = useState({ |
|
|
@ -50,11 +50,16 @@ function ParkingAlyDuration() { |
|
|
|
total: 0, |
|
|
|
list: [], |
|
|
|
}); |
|
|
|
// 停车排行榜返回数据 |
|
|
|
// 泊位周转排行榜返回数据 |
|
|
|
const [tableData, setTableData] = useState({ |
|
|
|
area_list: [], |
|
|
|
road_list: [], |
|
|
|
}); |
|
|
|
// 停车排行榜返回数据setTableCarData |
|
|
|
const [tableCarData, setTableCarData] = useState({ |
|
|
|
area_list: [], |
|
|
|
road_list: [], |
|
|
|
}); |
|
|
|
//停车场收入概览数据 |
|
|
|
const [revenueData, setRevenueData] = useState({}); |
|
|
|
const [searchSelectList, setSearchSelectList] = useState([]); //搜索下拉数据 |
|
|
@ -144,7 +149,7 @@ function ParkingAlyDuration() { |
|
|
|
showSizeChanger: true, |
|
|
|
current: pageInfo.pn, |
|
|
|
//total: resultData?.totalRecords, |
|
|
|
pageSize: pageInfo.length, |
|
|
|
pageSize: pageInfo.page_size, |
|
|
|
pageSizeOptions: Array.from( |
|
|
|
new Set([...[15], ...(dictionary?.pageSizeOptions || [])]) |
|
|
|
), |
|
|
@ -684,8 +689,8 @@ function ParkingAlyDuration() { |
|
|
|
}; |
|
|
|
|
|
|
|
// 获取日均泊位列表数据 |
|
|
|
const getData = (v) => { |
|
|
|
ajax.getParkingAlyDurationBerthList({ ...v}).then( |
|
|
|
const getData = (v, pn = {}) => { |
|
|
|
ajax.getParkingAlyDurationBerthList({ ...v, ...pn }).then( |
|
|
|
(res) => { |
|
|
|
if (parseInt(res?.status) === 20000) { |
|
|
|
setTableData(res?.data || {}); |
|
|
@ -703,17 +708,17 @@ function ParkingAlyDuration() { |
|
|
|
); |
|
|
|
}; |
|
|
|
// 获取停车时长列表数据 |
|
|
|
const getListData = (v) => { |
|
|
|
const getListData = (v, pn = {}) => { |
|
|
|
let postData = { ...formData, sort: 1 }; |
|
|
|
if (!loading) { |
|
|
|
postData = { ...holdData }; |
|
|
|
} |
|
|
|
setDefaultParams({ ...postData, ...pageInfo }); |
|
|
|
setTabLoading(true); |
|
|
|
ajax.getParkingAlyDurationParkingList({ ...postData, ...v, ...pageInfo }).then( |
|
|
|
ajax.getParkingAlyDurationParkingList({ ...postData, ...v, ...pageInfo, ...pn }).then( |
|
|
|
(res) => { |
|
|
|
if (parseInt(res?.status) === 20000) { |
|
|
|
//setResultData(res?.data || {}); |
|
|
|
setTableCarData(res?.data || {}); |
|
|
|
} else { |
|
|
|
message.error(res?.message); |
|
|
|
} |
|
|
@ -775,6 +780,26 @@ function ParkingAlyDuration() { |
|
|
|
message.error("暂无数据"); |
|
|
|
} |
|
|
|
}; |
|
|
|
// 停车排行导出 |
|
|
|
const handleExportCar = () => { |
|
|
|
if (tableData.list.area_list?.length > 0) { |
|
|
|
let { pn, page_size, ...params } = defaultParams; |
|
|
|
ajax.getParkingAlyDurationExp(defaultParams).then( |
|
|
|
(res) => { |
|
|
|
if (res) { |
|
|
|
window.open(res.export_url) |
|
|
|
} else { |
|
|
|
message.error(res?.message); |
|
|
|
} |
|
|
|
}, |
|
|
|
(err) => { |
|
|
|
console.log(err); |
|
|
|
} |
|
|
|
); |
|
|
|
} else { |
|
|
|
message.error("暂无数据"); |
|
|
|
} |
|
|
|
}; |
|
|
|
//区域下拉框数据 |
|
|
|
useEffect(() => { |
|
|
|
ajax |
|
|
@ -981,7 +1006,11 @@ function ParkingAlyDuration() { |
|
|
|
<Tabs |
|
|
|
defaultActiveKey="2" |
|
|
|
activeKey={tabKey} |
|
|
|
onChange={changeKey} |
|
|
|
onChange={(key) => { |
|
|
|
setTabKey(key); |
|
|
|
setPageInfo({ ...pageInfo, ...{ pn: 1 } }); |
|
|
|
getData({}, { pn: 1 }) |
|
|
|
}} |
|
|
|
items={[ |
|
|
|
{ |
|
|
|
label: `序号`, |
|
|
@ -992,8 +1021,16 @@ function ParkingAlyDuration() { |
|
|
|
label: <div className="tab-title"> |
|
|
|
<div className="title">区域</div> |
|
|
|
<div className="btn"> |
|
|
|
<div onClick={() => { message.success('升序'); getData({ sort: 1 }) }}>▲</div> |
|
|
|
<div onClick={() => { message.success('降序'); getData({ sort: 2 }) }}>▼</div> |
|
|
|
<div onClick={() => { |
|
|
|
message.success('升序'); |
|
|
|
setPageInfo({ ...pageInfo, ...{ pn: 1 } }); |
|
|
|
getData({ sort: 1 }, { pn: 1 }) |
|
|
|
}}>▲</div> |
|
|
|
<div onClick={() => { |
|
|
|
message.success('降序'); |
|
|
|
setPageInfo({ ...pageInfo, ...{ pn: 1 } }); |
|
|
|
getData({ sort: 2 }, { pn: 1 }) |
|
|
|
}}>▼</div> |
|
|
|
</div> |
|
|
|
</div>, |
|
|
|
key: '1', |
|
|
@ -1013,8 +1050,16 @@ function ParkingAlyDuration() { |
|
|
|
label: <div className="tab-title"> |
|
|
|
<div className="title">停车场</div> |
|
|
|
<div className="btn"> |
|
|
|
<div onClick={() => { message.success('升序'); getData({ sort: 1 }) }}>▲</div> |
|
|
|
<div onClick={() => { message.success('降序'); getData({ sort: 2 }) }}>▼</div> |
|
|
|
<div onClick={() => { |
|
|
|
message.success('升序'); |
|
|
|
setPageInfo({ ...pageInfo, ...{ pn: 1 } }); |
|
|
|
getData({ sort: 1 }, { pn: 1 }) |
|
|
|
}}>▲</div> |
|
|
|
<div onClick={() => { |
|
|
|
message.success('降序'); |
|
|
|
setPageInfo({ ...pageInfo, ...{ pn: 1 } }); |
|
|
|
getData({ sort: 2 }, { pn: 1 }) |
|
|
|
}}>▼</div> |
|
|
|
</div> |
|
|
|
</div>, |
|
|
|
key: '2', |
|
|
@ -1050,17 +1095,96 @@ function ParkingAlyDuration() { |
|
|
|
</div> |
|
|
|
<div className="result-box duration-right"> |
|
|
|
<div className="result-box-title">平均停车时长排行榜</div> |
|
|
|
<div className="export-btn" onClick={() => { window.open('/get_parking_duration_export') }}>导出</div> |
|
|
|
<Table |
|
|
|
<div className="export-btn" onClick={() => { handleExportCar }}>导出</div> |
|
|
|
<Tabs |
|
|
|
defaultActiveKey="2" |
|
|
|
activeKey={tabKey} |
|
|
|
onChange={(key) => { |
|
|
|
setTabKey(key); |
|
|
|
setPageInfo({ ...pageInfo, ...{ pn: 1 } }); |
|
|
|
getListData({}, { pn: 1 }) |
|
|
|
}} |
|
|
|
items={[ |
|
|
|
{ |
|
|
|
label: `序号`, |
|
|
|
key: '0', |
|
|
|
disabled: "true" |
|
|
|
}, |
|
|
|
{ |
|
|
|
label: <div className="tab-title"> |
|
|
|
<div className="title">区域</div> |
|
|
|
<div className="btn"> |
|
|
|
<div onClick={() => { |
|
|
|
message.success('升序'); |
|
|
|
setPageInfo({ ...pageInfo, ...{ pn: 1 } }); |
|
|
|
getListData({ sort: 1 }, { pn: 1 }) |
|
|
|
}}>▲</div> |
|
|
|
<div onClick={() => { |
|
|
|
message.success('降序'); |
|
|
|
setPageInfo({ ...pageInfo, ...{ pn: 1 } }); |
|
|
|
getListData({ sort: 2 }, { pn: 1 }) |
|
|
|
}}>▼</div> |
|
|
|
</div> |
|
|
|
</div>, |
|
|
|
key: '1', |
|
|
|
children: <><Table |
|
|
|
showHeader={false} |
|
|
|
columns={columns} |
|
|
|
dataSource={tableData?.list?.area_list || []} |
|
|
|
rowKey={'area_name'} |
|
|
|
bordered |
|
|
|
pagination={false} |
|
|
|
size="middle" |
|
|
|
/> |
|
|
|
<Pagination {...paginationProps} className="pagination-common" total={tableData?.area_total_records} /> |
|
|
|
</>, |
|
|
|
}, |
|
|
|
{ |
|
|
|
label: <div className="tab-title"> |
|
|
|
<div className="title">停车场</div> |
|
|
|
<div className="btn"> |
|
|
|
<div onClick={() => { |
|
|
|
message.success('升序'); |
|
|
|
setPageInfo({ ...pageInfo, ...{ pn: 1 } }); |
|
|
|
getListData({ sort: 1 }, { pn: 1 }) |
|
|
|
}}>▲</div> |
|
|
|
<div onClick={() => { |
|
|
|
message.success('降序'); |
|
|
|
setPageInfo({ ...pageInfo, ...{ pn: 1 } }); |
|
|
|
getListData({ sort: 2 }, { pn: 1 }) |
|
|
|
}}>▼</div> |
|
|
|
</div> |
|
|
|
</div>, |
|
|
|
key: '2', |
|
|
|
children: <><Table |
|
|
|
showHeader={false} |
|
|
|
columns={parkColumns} |
|
|
|
dataSource={[]} |
|
|
|
dataSource={tableData?.list?.road_list} |
|
|
|
rowKey={'area_name'} |
|
|
|
bordered |
|
|
|
pagination={false} |
|
|
|
size="middle" |
|
|
|
//scroll={{ y: 305 }} |
|
|
|
// scroll={{ |
|
|
|
// x: 'calc(700px + 50%)', |
|
|
|
// y: 240, |
|
|
|
// }} |
|
|
|
/> |
|
|
|
<Pagination {...paginationProps} className="pagination-common" total={tableData?.area_total_records} /> |
|
|
|
</>, |
|
|
|
}, |
|
|
|
{ |
|
|
|
label: `停车次数`, |
|
|
|
key: '3', |
|
|
|
disabled: "true" |
|
|
|
}, |
|
|
|
{ |
|
|
|
label: `平均停车时长`, |
|
|
|
key: '4', |
|
|
|
disabled: "true" |
|
|
|
}, |
|
|
|
]} |
|
|
|
/> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|