停车场项目web, 互联网仓库, 开发完成后, 需要将代码回传云桌面.
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.
 
 
 
 

1275 lines
50 KiB

import React, { useState, useEffect } from "react";
import { ResultFlowResult } from "@/components";
import { Select, Input, Button, Table, message, Pagination, DatePicker, Modal, Cascader, Tooltip, Tabs } from "antd";
import { useSessionStorageState } from "ahooks";
import { dictionary } from "@/config/common";
import { useNavigate } from "react-router-dom";
import { setTabList } from "@/store/common.js";
import { useSelector, useDispatch } from "react-redux";
import { QuestionCircleFilled } from "@ant-design/icons"
import moment from "moment";
import ReactEcharts from "echarts-for-react";
import echarts from "echarts";
import "./index.scss";
import ajax from "@/services";
//停车时长分析
function ParkingAlyDuration() {
// session缓存
const [defaultParams, setDefaultParams] = useSessionStorageState(
"formData_parkingAlyDuration",
{ defaultValue: null }
);
//区域的下拉数据
const [areaList, setAreaList] = useState([]);
// 默认数据
const defaultData = {
start_time: moment().subtract('days').startOf('day').format("YYYY-MM-DD"),
end_time: moment().endOf("day").format("YYYY-MM-DD"),
date_type: '1',
//date_type: 1,
};
// 分页数据
const [pageInfo, setPageInfo] = useState({
pn: 1,
page_size: 10
});
// 表单数据
const [formData, setFormData] = useState({
...defaultData,
...defaultParams,
});
// 搜索提交数据-存储
const [holdData, setHoldData] = useState(formData);
// 访问接口,isAjax改变时执行
const [isAjax, setIsAjax] = useState(false);
// 检索按钮加载状态
const [loading, setLoading] = useState(false);
// 表格加载状态
const [tabLoading, setTabLoading] = useState(false);
// 表格返回数据
const [resultData, setResultData] = useState({
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([]); //搜索下拉数据
const [sessionTabList, setSessionTabList] = useSessionStorageState('parkingAlyDuration', {
value: {
}
})
useEffect(() => {
if (sessionTabList && Object.values(sessionTabList).length > 0) {
setFormData({
...formData, ...sessionTabList
})
// getData({
// ...sessionTabList
// })
getCheck({
...sessionTabList
})
} else {
//getData()
getCheck()
}
}, [isAjax])
const [tabKey, setTabKey] = useState("1");
const [tabCarKey, setTabCarKey] = useState("1");
const columns = [
{
title: '序号',
dataIndex: 'index',
key: 'index',
width: 100,
render: (text, record, index) => index + 1
},
{
title: '区域',
dataIndex: 'area_name',
key: 'area_name',
width: 280,
},
{
title: '泊位数(个)',
dataIndex: 'area_total_berths',
key: 'area_total_berths',
//width: 200,
},
{
title: '利用率',
dataIndex: 'area_rate',
key: 'area_rate',
width: 120,
},
]
const parkColumns = [
{
title: '序号',
dataIndex: 'index',
key: 'index',
width: 100,
render: (text, record, index) => index + 1
},
{
title: '停车场',
dataIndex: 'road_name',
key: 'road_name',
width: 280,
},
{
title: '泊位数(个)',
dataIndex: 'road_total_berths',
key: 'road_total_berths',
//width: 200,
},
{
title: '利用率',
dataIndex: 'road_rate',
key: 'road_rate',
width: 120,
},
]
const columns1 = [
{
title: '序号',
dataIndex: 'index',
key: 'index',
width: 100,
render: (text, record, index) => index + 1
},
{
title: '区域',
dataIndex: 'area_name',
key: 'area_name',
width: 280,
},
{
title: '泊位数(个)',
dataIndex: 'area_total_parkings',
key: 'area_total_parkings',
//width: 200,
},
{
title: '利用率',
dataIndex: 'area_rate',
key: 'area_rate',
width: 120,
},
]
const parkColumns1 = [
{
title: '序号',
dataIndex: 'index',
key: 'index',
width: 100,
render: (text, record, index) => index + 1
},
{
title: '停车场',
dataIndex: 'road_name',
key: 'road_name',
width: 280,
},
{
title: '泊位数(个)',
dataIndex: 'road_total_parkings',
key: 'road_total_parkings',
//width: 200,
},
{
title: '利用率',
dataIndex: 'road_rate',
key: 'road_rate',
width: 120,
},
]
const paginationProps = {
className: "pagination-common",
showQuickJumper: true,
showSizeChanger: true,
current: pageInfo.pn,
//total: resultData?.totalRecords,
pageSize: pageInfo.page_size,
pageSizeOptions: Array.from(
new Set([...[15], ...(dictionary?.pageSizeOptions || [])])
),
onChange: (current, size) => {
setPageInfo({
...pageInfo,
...{ pn: current, length: size }
});
setIsAjax(!isAjax)
//getListData({})
},
}
// useEffect(() => {
// getData()
// }, [pageInfo])
useEffect(() => {
setSessionTabList({
...formData
})
}, [formData])
useEffect(() => {
getSelectList();
}, []);
// 访问接口,获取表格
// useEffect(() => {
// getData();
// }, [isAjax]);
//时间状态切换
const TimeChange = () => {
let e = formData.date_type;
let str = "day";
let mat = "YYYY-MM-DD";
if (e == 4) {
str = "year";
mat = "YYYY";
} else if (e == 3) {
str = "month";
mat = "YYYY-MM";
} else if (e == 2) {
str = "week";
mat = "YYYY-MM-DD";
}
return { str, mat };
};
//切换时间变化
const SetTimeNow = (e) => {
let start = "";
let end = "";
if (e == 4) {
start = moment().format("YYYY");
end = moment().format("YYYY");
} else if (e == 3) {
start = moment().startOf('month').format("YYYY-MM-DD");
end = moment().endOf("month").format("YYYY-MM-DD");
} else if (e == 2) {
start = moment().day(1).format("YYYY-MM-DD");
end = moment().day(7).format("YYYY-MM-DD");
} else {
start = moment().startOf("day").format("YYYY-MM-DD");
end = moment().endOf("day").format("YYYY-MM-DD");
}
setFormData({
...formData,
date_type: e,
start_time: start,
end_time: end,
});
};
//停车场收入概览 柱状图
const getRevenueOption = (data) => {
console.log(data)
// data = [
// {
// "hour": "0",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "1",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "2",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "3",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "4",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "5",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "6",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "7",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "8",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "9",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "10",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "11",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "12",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "13",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "14",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "15",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "16",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "17",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "18",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "19",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "20",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "21",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "22",
// "record_count": "0",
// "total_duration": "0"
// },
// {
// "hour": "23",
// "record_count": "0",
// "total_duration": "0"
// }
// ]
let ac = [
{
"hour": "0",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "1",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "2",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "3",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "4",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "5",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "6",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "7",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "8",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "9",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "10",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "11",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "12",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "13",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "14",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "15",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "16",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "17",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "18",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "19",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "20",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "21",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "22",
"record_count": "0",
"total_duration": "0"
},
{
"hour": "23",
"record_count": "0",
"total_duration": "0"
}
]
let leftData = []
let rightData = []
let yData = []
data.map(item => {
yData.push(item.houer)
leftData.push(item.record_count)
leftData.push(item.total_duration)
})
data.sort((a, b) => {
return new Date(a.hour) - new Date(b.hour);
});
const areaNames = ['停车次数', '停车时长'];
// 获取所有日期
// const dates = [...new Set(data.map((item) => item.pay_date))].sort(
// (a, b) => a.pay_date - b.pay_date
// );
// 构建数据对象
// const seriesData = areaNames.map((areaName, index) => {
// // 获取该地区的数据
// const areaData = data.filter((item) => item.area_name === areaName);
// // 构建该地区的数据对象
// return {
// name: areaName,
// type: "bar",
// // itemStyle: {
// // normal: {
// // label: {
// // show: true, //开启显示
// // position: 'top', //在上方显示
// // textStyle: { //数值样式
// // color: 'white',//字体颜色
// // fontSize: 10//字体大小
// // }
// // },
// // },
// // },
// data: dates.map((item) => {
// for (const { pay_date, income } of areaData) {
// if (pay_date === item) return income;
// }
// return 0;
// }),
// yAxisIndex: index == 1 ? 1 : null,
// };
// });
setRevenueData({
title: {
text: "",
textStyle: {
color: "#fff",
},
},
tooltip: {
trigger: "axis",
},
legend: {
type: "scroll",
x: "center",
data: areaNames,
itemWidth: 18,
itemHeight: 12,
textStyle: {
fontSize: 14,
color: "#fff",
},
},
xAxis: {
//data: xAxisData,
data: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
type: 'category',
axisLine: {
lineStyle: {
color: "#bbb",
},
},
axisLabel: {
textStyle: {
color: "#bbb",
},
},
axisTick: {
show: false,
}
},
yAxis: [{
type: "value",
name: '停车次数(次)',
min: 0,
interval: 10,
splitNumber: 6, //设置坐标轴的分割段数
axisLabel: {
textStyle: {
color: "#ffffffa6",
},
},
axisLine: {
lineStyle: {
color: "#ffffffa6",
},
},
splitLine: {
show: true, // 是否显示分隔线。默认数值轴显示,类目轴不显示
interval: '0', // 坐标轴刻度标签的显示间隔,在类目轴中有效.0显示所有
lineStyle: {
color: ['#cccccc42'], // 分隔线颜色,可以设置成单个颜色,也可以设置成颜色数组,分隔线会按数组中颜色的顺序依次循环设置颜色
width: 2, // 分隔线线宽
type: 'dashed', // 坐标轴线线的类型('solid',实线类型;'dashed',虚线类型;'dotted',点状类型)
},
},
},
{
type: "value",
name: '停车时长(时)',
splitLine: {
show: false
},
axisLine: {
lineStyle: {
color: "#ffffffa6",
},
},
splitLine: {
show: true, // 是否显示分隔线。默认数值轴显示,类目轴不显示
interval: '0', // 坐标轴刻度标签的显示间隔,在类目轴中有效.0显示所有
lineStyle: {
color: ['#cccccc42'], // 分隔线颜色,可以设置成单个颜色,也可以设置成颜色数组,分隔线会按数组中颜色的顺序依次循环设置颜色
width: 1.3, // 分隔线线宽
type: 'dashed', // 坐标轴线线的类型('solid',实线类型;'dashed',虚线类型;'dotted',点状类型)
},
},
},
],
color: ["#4DC3FF", "#FFD767"],
series: [
{
name: "停车次数",
type: "bar",
data: leftData,
//data:[1,24,6,8,4,32,5,2,5,25,6,34],
barWidth: 12,
itemStyle: {
barBorderRadius: [2, 2, 0, 0], // (顺时针左上,右上,右下,左下)
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: '#99EBFF' // 0% 处的颜色
}, {
offset: 1, color: '#3AA9FF' // 100% 处的颜色
}],
globalCoord: false // 缺省为 false
},
},
},
{
name: "停车时长",
type: "bar",
yAxisIndex: 1,
data: rightData,
//data:[1,24,6,8,4,32,5,2,5,25,6,34],
barWidth: 12,
itemStyle: {
barBorderRadius: [2, 2, 0, 0], // (顺时针左上,右上,右下,左下)
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: '#FFB8B8' // 0% 处的颜色
}, {
offset: 1, color: '#F481F8' // 100% 处的颜色
}],
globalCoord: false // 缺省为 false
}
},
}
],
grid: {
x: 50,
y: 55,
x2: 70,
y2: 30,
},
});
};
//获取柱状图数据
function getParkingIncome(data) {
ajax
.getParkingAlyDurationBar(data)
.then((res) => {
if (res.status === 20000) {
console.log(res)
getRevenueOption(res.data.list);
}
})
.catch((err) => console.error(err));
}
// 获取下拉数据
const getSelectList = () => {
ajax.getOperator().then((e) => {
setSearchSelectList([
...searchSelectList,
...e.data
])
})
};
// 获取日均泊位列表数据
const getData = (v, pn = {}) => {
ajax.getParkingAlyDurationBerthList({ ...v, ...pn }).then(
(res) => {
if (parseInt(res?.status) === 20000) {
setTableData(res?.data || {});
} else {
message.error(res?.message);
}
setLoading(false);
setTabLoading(false);
},
(err) => {
console.log(err);
setLoading(false);
setTabLoading(false);
}
);
};
// 获取停车时长列表数据
const getListData = (v, pn = {}) => {
let postData = { ...formData, sort: 2 };
if (!loading) {
postData = { ...holdData };
}
setDefaultParams({ ...postData, ...pageInfo });
setTabLoading(true);
ajax.getParkingAlyDurationParkingList({ ...postData, ...v, ...pageInfo, ...pn }).then(
(res) => {
if (parseInt(res?.status) === 20000) {
setTableCarData(res?.data || {});
} else {
message.error(res?.message);
}
setLoading(false);
setTabLoading(false);
},
(err) => {
console.log(err);
setLoading(false);
setTabLoading(false);
}
);
};
// 携带参数处理
const getCheck = (v) => {
let postData = { ...formData };
if (!loading) {
postData = { ...holdData };
}
setDefaultParams({ ...postData, ...pageInfo });
if (moment(formData.end_time) - moment(formData.start_time) > 1000 * 31 * 24 * 3600) {
message.error("时间范围限制为31天!")
setLoading(false);
setTabLoading(false);
return
}
setTabLoading(true);
let params = { ...postData, ...v, ...pageInfo }
//请求接口
getParkingIncome(params)
getData(params)
getListData(params)
};
// 检索数据
const handleSearch = () => {
setLoading(true);
setPageInfo({ ...pageInfo, ...{ pn: 1 } });
setHoldData(formData);
setIsAjax(!isAjax);
};
// 日均周转次数导出
const handleExport = () => {
if (tableData.list.area_list?.length > 0) {
let { pn, page_size, ...params } = defaultParams;
ajax.getParkingAlyDurationParkingExp(defaultParams).then(
(res) => {
if (res) {
window.open(res.data.export_url)
} else {
message.error(res?.message);
}
},
(err) => {
console.log(err);
}
);
} else {
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.data.export_url)
} else {
message.error(res?.message);
}
},
(err) => {
console.log(err);
}
);
} else {
message.error("暂无数据");
}
};
//区域下拉框数据
useEffect(() => {
ajax
.getAreaTree()
.then((res) => {
if (res.status === 20000) {
setAreaList(res.data);
}
})
.catch((err) => {
console.error(err);
});
}, []);
return (
<>
<div className="edit-order-inquiry">
<div className="paid-search">
<div className="title">查询条件</div>
<div className="form-Wrap">
<div className="yisa-search">
<label>区域</label>
<Cascader
className="form-con"
popupClassName="start-exception-deal-cascader"
options={areaList}
placeholder="请选择区域"
expandTrigger="hover"
fieldNames={{
label: "name",
value: "id",
children: "children",
}}
value={formData.region}
onChange={(v, option) => {
setFormData({ ...formData, region: v ? v : null });
}}
/>
</div>
<div className="yisa-search">
<label>运营商</label>
<Select
className="form-con"
placeholder="请选择"
options={searchSelectList || []}
value={formData.operator_id}
onChange={(v) =>
setFormData({ ...formData, operator_id: v })
}
/>
</div>
<div className="yisa-search">
<label>车场类型</label>
<Select
className="form-con"
placeholder="请选择车场类型"
options={[
{
label: '全部',
value: '0',
},
{
label: '路内车场',
value: '1',
},
{
label: '路外车场',
value: '2',
},
]}
value={formData.car_parking_type}
onChange={(v) =>
setFormData({ ...formData, car_parking_type: v })
}
/>
</div>
<div className="yisa-search">
<label>停车场</label>
<Input
className="form-con"
placeholder="请输入"
value={formData?.road_name}
onChange={(e) =>
setFormData({ ...formData, road_name: e.target.value })
}
/>
</div>
<div className="yisa-search">
<label>日期
<div className="daf">
<Select
value={formData.date_type}
// style={{
// width: "100%",
// }}
placeholder="请选择"
options={[
{
value: "1",
label: "日",
},
{
value: "2",
label: "周",
},
{
value: "3",
label: "月",
},
]}
onChange={(e) => SetTimeNow(e)}
/>
</div>
</label>
<DatePicker
style={{ width: "100%" }}
// showTime
format={TimeChange().mat}
picker={TimeChange().str}
allowClear={false}
value={formData.start_time ? moment(formData.start_time) : null}
onChange={(date, dateString) => {
if (TimeChange().str == "week") {
setFormData({
...formData,
start_time: date
? moment(date).day(1).format("YYYY-MM-DD")
: null,
});
} else if (TimeChange().str == "day") {
if (date > moment(formData.end_time)) {
setFormData({
...formData,
end_time: dateString,
start_time: formData.end_time,
});
} else {
setFormData({
...formData,
start_time: dateString,
});
}
} else if (TimeChange().str == "month") {
setFormData({ ...formData, start_time: moment(date).format("YYYY-MM-DD"), end_time: moment(date).endOf("month").format("YYYY-MM-DD") });
} else {
setFormData({ ...formData, start_time: dateString });
}
}}
disabledDate={(current) => current > moment(formData.end_time)}
/>
</div>
<div className="yisa-search">
<label></label>
<DatePicker
style={{ width: "100%" }}
// showTime
format={TimeChange().mat}
picker={TimeChange().str}
allowClear={false}
value={formData.end_time ? moment(formData.end_time) : null}
onChange={(date, dateString) => {
if (TimeChange().str == "week") {
setFormData({
...formData,
end_time: date
? moment(date).day(7).format("YYYY-MM-DD")
: null,
});
} else if (TimeChange().str == "day") {
if (date < moment(formData.start_time)) {
setFormData({
...formData,
start_time: dateString,
end_time: formData.start_time,
});
} else {
setFormData({
...formData,
end_time: dateString,
});
}
} else if (TimeChange().str == "month") {
setFormData({ ...formData, start_time: moment(date).startOf('month').format("YYYY-MM-DD"), end_time: moment(date).format("YYYY-MM-DD") });
} else {
setFormData({ ...formData, end_time: dateString });
}
}}
disabledDate={(current) =>
current < moment(formData.start_time)
}
/>
</div>
<div className="form-btn">
<Button
className="reset"
onClick={() => setFormData(defaultData)}
>
重置
</Button>
<Button
className="submit"
type="primary"
onClick={handleSearch}
loading={loading}
>
查询
</Button>
</div>
</div>
</div>
<div className="paid-result soll-result">
<div className="result">
<div className="result-box">
<div className="result-box-title">停车时长分析</div>
<Tooltip
placement="topLeft"
title={<span>停车次数: 展示统计期间内各个停车时长区间内的停车记录数<br />
停车时长: 展示统计时间段内在各个停车时长区间内的停车记录的总时木</span>}
>
<i>?</i>
</Tooltip>
<ReactEcharts
option={revenueData}
style={{ height: "300px", width: "100%", overflow: "hidden" }}
/>
</div>
<div className="duration-box">
<div className="result-box duration-left">
<div className="result-box-title">日均泊位周转次数排行榜</div>
<div className="export-btn" onClick={handleExport}>导出</div>
<Tabs
defaultActiveKey="2"
activeKey={tabKey}
onChange={(key) => {
setTabKey(key);
setPageInfo({ ...pageInfo, ...{ pn: 1 } });
getData({}, { 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 } });
getData({ sort: 1 }, { pn: 1 })
}}></div>
<div onClick={() => {
message.success('降序');
setPageInfo({ ...pageInfo, ...{ pn: 1 } });
getData({ 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 } });
getData({ sort: 1 }, { pn: 1 })
}}></div>
<div onClick={() => {
message.success('降序');
setPageInfo({ ...pageInfo, ...{ pn: 1 } });
getData({ sort: 2 }, { pn: 1 })
}}></div>
</div>
</div>,
key: '2',
children: <><Table
showHeader={false}
columns={parkColumns}
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 className="result-box duration-right">
<div className="result-box-title">平均停车时长排行榜</div>
<div className="export-btn" onClick={() => { handleExportCar() }}>导出</div>
<Tabs
defaultActiveKey="2"
activeKey={tabCarKey}
onChange={(key) => {
setTabCarKey(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={columns1}
dataSource={tableCarData?.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={parkColumns1}
dataSource={tableCarData?.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>
</div>
</div>
</>
);
}
export default ParkingAlyDuration;