Browse Source

fix(): 时间快捷键修改及数据预测分析页面添加

tags/PMS_Frontend_v1.0.6-develop
xingjx 1 year ago
parent
commit
f51dca516f
  1. 144
      src/components/DataSelect/index.jsx
  2. 17
      src/components/DataSelect/index.scss
  3. 16
      src/components/TableModule/index.jsx
  4. 2
      src/components/index.jsx
  5. 250
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/CarTypeAly/index.scss
  6. 817
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/CarTypeAly/loadable.jsx
  7. 581
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkBerthAly/loadable.jsx
  8. 656
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkTurnoverAly/loadable.jsx
  9. 199
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyOverview/index.scss
  10. 563
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyOverview/loadable.jsx
  11. 4
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingLiveData/loadable.jsx
  12. 14
      src/pages/FinancialMgm/OrderInquiry/ReturnOrderInquiry/index.jsx
  13. 2
      src/pages/InRoadMgm/RecordInquiry/ArrearsInquiries/loadable.jsx
  14. 2
      src/pages/InRoadMgm/RecordInquiry/ArrearsRecordTotal/loadable.jsx
  15. 2
      src/pages/InRoadMgm/RecordInquiry/DisabledCarParkRecordTotal/loadable.jsx
  16. 2
      src/pages/InRoadMgm/RecordInquiry/EntryExitOptPDA/loadable.jsx
  17. 2
      src/pages/InRoadMgm/RecordInquiry/GeomagneticSignalMgm/loadable.jsx
  18. 2
      src/pages/InRoadMgm/RecordInquiry/ParkRecordTotal/loadable.jsx
  19. 2
      src/pages/InRoadMgm/RecordInquiry/UnRecordOrder/loadable.jsx

144
src/components/DataSelect/index.jsx

@ -0,0 +1,144 @@
import React, { useState, useEffect } from 'react'
import moment from 'moment'
import { Select, DatePicker, } from "antd";
// import { Dropdown, Menu } from 'antd'
// import Icon from '../Icon'
import './index.scss'
function DataSelect(props) {
console.log(props)
const {
formData = {
date_type:'4'
},
SetTimeNow,
} = props
//
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 };
};
return (
<>
<div className="yisa-search">
<label>日期
<div className="daf">
<Select
value={formData?.date_type||''}
placeholder="请选择"
options={[
{
value: "1",
label: "日",
},
{
value: "2",
label: "周",
},
{
value: "3",
label: "月",
},
{
value: "4",
label: "年",
},
]}
onChange={(e) => SetTimeNow(e)}
/>
</div>
</label>
<DatePicker
style={{ width: "100%" }}
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 {
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 {
setFormData({ ...formData, end_time: dateString });
}
}}
disabledDate={(current) =>
current < moment(formData.start_time)
}
/>
</div>
</>
)
}
export default DataSelect

17
src/components/DataSelect/index.scss

@ -0,0 +1,17 @@
.quick-menu {
flex: 1;
width: 100%;
padding: 5px 0;
color: #3d97eb;
ul {
display: flex;
justify-content: space-between;
margin-bottom: 0;
li {
display: inline-block;
flex: auto;
text-align: center;
cursor: pointer;
}
}
}

16
src/components/TableModule/index.jsx

@ -52,6 +52,8 @@ const TableModule = forwardRef((props, ref) => {
rowKey, //tablekey
userInfo = {},//
valueChange,
mandatory,
mandatory_name,
pageName = '',//
} = props;
const [sessionTabList, setSessionTabList] = useSessionStorageState(pageName, {
@ -172,12 +174,20 @@ const TableModule = forwardRef((props, ref) => {
form.end_time = moment(form.end_time).format("YYYY-MM-DD HH:mm:ss");
}
if (moment(form.end_time) - moment(form.start_time) > 180 * 3600 * 24000) {
//console.log(2222,form.plate,form.berth_id,form.plate==undefined||form.berth_id==undefined||form.plate==''||form.berth_id=='')
if (!(form.plate || form.berth_id)) {
message.error('查询时间范围大于半年,需填写车牌号或泊位号!')
//console.log(2222,form.end_time,form.start_time,moment(form.end_time) - moment(form.start_time))
if(mandatory){
let cna = Object.values(searchForm.getFieldsValue([mandatory]))
//console.log(mandatory,cna[0],searchForm.getFieldsValue([mandatory]))
if(!cna[0]) {
message.error(`查询时间范围大于半年,需填写${mandatory_name}`)
return
}
}
// if (!(form.plate||form.berth_id)) {
// message.error('')
// return
// }
}
search(form);
}
//

2
src/components/index.jsx

@ -33,6 +33,7 @@ import TreeSelectGroup from "./TreeSelectGroup";
import SelectLntLat from "./SelectLngLat";
import ImportBtn from './ImportBtn';
import QuickMenu from './QuickMenu';
import DataSelect from './DataSelect';
import ParkingRecordModal from './ParkingRecordModal';
export * from "./layout";
@ -76,5 +77,6 @@ export {
SelectLntLat,
ImportBtn,
QuickMenu,
DataSelect,
ParkingRecordModal
};

250
src/pages/DataAnalysisPrediction/ParkingBusinessAly/CarTypeAly/index.scss

@ -1,5 +1,255 @@
@import "@/assets/css/mixin.scss";
$color-container-bg : var(--color-container-bg);
$color-user-list-bg : var(--color-user-list-bg);
$color-text : var(--color-text);
$color-primary : var(--color-primary);
.edit-order-inquiry {
display: flex;
padding-top: 10px;
width: 100%;
height: 100%;
overflow-y: auto;
@include scrollBar(var(--color-user-list-bg), #3B97FF);
.paid-search {
display: block;
width: 375px;
padding: 10px 10px 20px 20px;
.title {
width: 100%;
font-size: 16px;
font-family: Microsoft YaHei, Microsoft YaHei-Bold;
font-weight: 700;
text-align: left;
color: var(--color-text);
margin-bottom: 20px;
}
.form-Wrap {
height: calc(100% - 45px);
overflow-y: auto;
scrollbar-width: none;
-ms-overflow-style: none;
&::-webkit-scrollbar {
display: none;
}
}
.ant-select-selector,
.ant-picker,
.ant-input {
background-color: var(--color-search-list-item-bg) !important;
box-shadow: none !important;
color: var(--color-search-list-item-value);
border-color: var(--color-search-list-item-bd) !important;
}
.yisa-search {
width: 100%;
display: flex;
align-items: center;
margin-bottom: 24px;
label {
color: var(--color-search-list-item-text);
flex: 0 0 27%;
max-width: 27%;
text-align: right;
padding-right: 8px;
.daf {
display: inline-block;
}
}
.form-con {
flex: 1;
width: 220px;
}
}
.form-btn {
display: flex;
flex-flow: row nowrap;
justify-content: space-between;
margin: 40px 0px 0px;
padding: 0 3px;
.ant-btn+.ant-btn {
margin-left: 10px;
}
.ant-btn span {
font-size: 16px;
font-family: Microsoft YaHei, Microsoft YaHei-Regular;
font-weight: 400;
text-align: center;
color: #ffffff;
}
.reset {
width: 90px;
height: 36px;
background: var(--button-default-bg);
}
.submit {
width: calc(100% - 100px);
height: 36px;
}
}
}
.ant-btn+.ant-btn {
margin-left: 10px;
}
.green {
background-color: #67c23a;
border-color: #67c23a;
}
.soll-result {
overflow: auto;
.result {
display: block !important;
}
}
.paid-result {
width: calc(100% - 375px);
padding-bottom: 15px;
padding: 20px;
background: var(--color-user-list-bg);
border-top-left-radius: 20px;
box-shadow: 0px 3px 8px 0px rgba(0, 0, 0, 0.08);
.result {
@include flex-columns;
.result-box {
color: #ffffff;
background: #3e4557;
border-radius: 4px;
margin-bottom: 20px;
.result-box-title {
height: 21px;
font-size: 16px;
font-family: Microsoft YaHei, Microsoft YaHei-Bold;
font-weight: 700;
text-align: left;
margin: 18px 0 18px 18px;
display: inline-block;
}
i {
border: 1px solid;
border-radius: 22px;
display: inline-block;
text-align: center;
font-size: 12px;
width: 22px;
cursor: pointer;
}
.ant-table .ant-table-thead tr th {
background: #3e4557;
}
}
.overview-left {
display: inline-block;
width: 46%;
margin-right: 20px;
}
.overview-right {
display: inline-block;
width: 50%;
}
.row-head {
height: 32px;
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 13px;
.number-wrapper {
display: inline-flex;
align-items: center;
font-size: 14px;
.letter {
color: var(--color-text);
font-size: 14px;
}
.total-number {
color: var(--color-primary);
font-weight: bold;
margin: 0 4px;
font-size: 14px;
}
}
}
.cc-result-flow {
width: 100%;
height: calc(100% - 34px - 13px);
.yisa-table {
width: 100%;
height: calc(100% - 32px - 15px);
overflow-y: auto !important;
@include scrollBar(var(--color-user-list-bg), #3B97FF);
.ant-table-thead {
th {
background: #616b83 !important;
}
}
.ant-table-tbody {
td {
background: #3E4557 !important;
border-bottom-color: var(--color-table-border-bottom-color);
}
tr:nth-child(even) {
td {
background: #3E4557 !important;
}
}
}
}
}
}
}
}
.modal-pay-configuration {
.submitBtn {
text-align: center;
margin: 20px 0 0;
.ant-btn {
width: 80px;
height: 35px;
border: none;
border-radius: 4px;
span {
color: #ffffff;
}
}
.submit {
background: #409eff;
}
.cancel {
background: var(--button-default-bg);
margin-left: 20px;
}
}
}

817
src/pages/DataAnalysisPrediction/ParkingBusinessAly/CarTypeAly/loadable.jsx

@ -1,15 +1,810 @@
import React, { useState, useRef, useEffect } from "react";
// import { message, Pagination, Table, Space, Modal, } from "antd";
// import { dictionary, utils } from "@/config/common";
// import moment from 'moment'
// import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks';
// import ajax from "@/services"
// import { FormInput, FormSelect, OptionPanel, ResultPanel, FormSliderPicker, AreaCascader, ImgResize, ImgZoom, } from "@/components"
// import "./index.scss";
// import errorImg from "@/assets/images/layout/error.png"
// import { useLocation } from "react-router-dom";
import React, { useState, useEffect } from "react";
import { ResultFlowResult, DataSelect } from "@/components";
import { Select, Input, Button, Table, message, Pagination, DatePicker, Modal, Cascader, Tooltip } 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 "./index.scss";
import ajax from "@/services";
//
function CarTypeAly() {
return <div>CarTypeAly</div>
// session
const [defaultParams, setDefaultParams] = useSessionStorageState(
"formData_carTypeAly",
{ defaultValue: null }
);
//
const [areaList, setAreaList] = useState([]);
//
const defaultData = {
confirm_start_time: moment().subtract('days').startOf('day').format("YYYY-MM-DD HH:mm:ss"),
confirm_end_time: moment().endOf("day").format("YYYY-MM-DD HH:mm:ss"),
create_start_time: moment().subtract('days').startOf('day').format("YYYY-MM-DD HH:mm:ss"),
create_end_time: moment().endOf("day").format("YYYY-MM-DD HH:mm:ss"),
app_name: "", //
app_type: 0, //
pay_merchant_id: 0, //
};
//
const [pageInfo, setPageInfo] = useState({
pn: defaultParams ? defaultParams?.pn : 1,
page_size: defaultParams ? defaultParams?.page_size : 15,
});
//
const [formData, setFormData] = useState({
data_type:'1',
...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 [revenueData, setRevenueData] = useState({});
const [parkingData, setParkingData] = useState({});
//
const [ringData, setRingData] = useState({});
const [searchSelectList, setSearchSelectList] = useState([]); //
const [sessionTabList, setSessionTabList] = useSessionStorageState('carTypeAly', {
value: {
}
})
useEffect(() => {
if (sessionTabList && Object.values(sessionTabList).length > 0) {
setFormData({
...formData, ...sessionTabList
})
getData({
...sessionTabList
})
} else {
getData()
}
}, [isAjax])
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().format("YYYY-MM");
end = moment().format("YYYY-MM");
} 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) => {
//
data.sort((a, b) => {
return new Date(a.pay_date) - new Date(b.pay_date);
});
console.log(data);
const areaNames = [...new Set(data.map((item) => item.area_name))];
//
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: "line",
itemStyle: {
normal: {
label: {
show: true, //
position: 'top', //
textStyle: { //
color: 'white',//
fontSize: 10//
}
},
},
},
data: dates.map((item) => {
for (const { pay_date, income } of areaData) {
console.log(pay_date, income);
if (pay_date === item) return income;
}
return 0;
}),
yAxisIndex: index == 1 ? 1 : null,
};
});
console.log(21, areaNames, seriesData)
// X
const xAxisData = dates.map((date) => {
return {
value: date,
textStyle: {
align: "center",
lineStyle: {
color: "skyblue", // 线
shadowBlur: 6,
},
},
};
});
setRevenueData({
title: {
text: "",
textStyle: {
color: "#fff",
},
},
tooltip: {
trigger: "axis",
},
legend: {
type: "scroll",
right: "5%",
//data: areaNames,
data: ["临时停车次数", "常时停车次数"],
itemWidth: 18,
itemHeight: 12,
textStyle: {
fontSize: 14,
color: 'white',
},
},
xAxis: {
//data: xAxisData,
data: ["00:00", "01:00", "02:00", "03:00", "04:00", "05:00", "06:00", "07:00", "08:00", "09:00", "10:00", "11:00", "12:00"],
type: 'category',
boundaryGap: false, //
axisLine: {
lineStyle: {
color: "#bbb",
},
},
axisLabel: {
textStyle: {
color: "#bbb",
},
},
},
yAxis: {
type: "value",
name: '数量(次)',
min: 0,
//max: 50,
//interval: 10,
//splitNumber: 6, //
},
color: ["#4DC3FF", "#FFD767"],
//series: seriesData,
series: [
{
"name": "临时停车次数",
"type": "line",
"data": [
12,
12,
24
]
},
{
"name": "常时停车次数",
"type": "line",
"data": [
9,
4,
4
]
}
],
grid: {
x: 50,
y: 55,
x2: 70,
y2: 20,
},
});
};
//
const getParkingOption = (data) => {
//
data.sort((a, b) => {
return new Date(a.pay_date) - new Date(b.pay_date);
});
console.log(data);
const areaNames = [...new Set(data.map((item) => item.area_name))];
//
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: "line",
itemStyle: {
normal: {
label: {
show: true, //
position: 'top', //
textStyle: { //
color: 'white',//
fontSize: 10//
}
},
},
},
data: dates.map((item) => {
for (const { pay_date, income } of areaData) {
console.log(pay_date, income);
if (pay_date === item) return income;
}
return 0;
}),
yAxisIndex: index == 1 ? 1 : null,
};
});
console.log(21, areaNames, seriesData)
// X
const xAxisData = dates.map((date) => {
return {
value: date,
textStyle: {
align: "center",
lineStyle: {
color: "skyblue", // 线
shadowBlur: 6,
},
},
};
});
setParkingData({
title: {
text: "",
textStyle: {
color: "#fff",
},
},
tooltip: {
trigger: "axis",
},
// legend: {
// type: "scroll",
// right: "5%",
// //data: areaNames,
// //data: ["", ""],
// itemWidth: 18,
// itemHeight: 12,
// textStyle: {
// fontSize: 14,
// color: 'white',
// },
// },
xAxis: {
//data: xAxisData,
data: ["00:00", "01:00", "02:00", "03:00", "04:00", "05:00", "06:00", "07:00", "08:00", "09:00", "10:00", "11:00", "12:00"],
type: 'category',
boundaryGap: false, //
axisLine: {
lineStyle: {
color: "#bbb",
},
},
axisLabel: {
textStyle: {
color: "#bbb",
},
},
},
yAxis: {
type: "value",
name: '泊位占用率',
min: 0,
max: 100,
interval: 10,
//splitNumber: 6, //
axisLabel: {
formatter: "{value}%",
textStyle: {
color: "#bbb",
},
},
},
color: ["#4DC3FF", "#FFD767"],
//series: seriesData,
series:
{
"name": "临时停车次数",
"type": "line",
"data": [40, 0, 90, 34, 98, 100, 70, 80],
areaStyle: {
normal: {//线
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: 20,
},
});
};
//
const getRingOption = (data) => {
//
data.sort((a, b) => {
return new Date(a.pay_date) - new Date(b.pay_date);
});
console.log(data);
const areaNames = [...new Set(data.map((item) => item.area_name))];
setRingData({
title: {
text: "",
textStyle: {
color: "#fff",
},
},
tooltip: {
trigger: "axis",
},
legend: {
type: "scroll",
//right: "5%",
top: 'bottom',
bottom: 'center',
//data: areaNames,
data: ["常时停车", "临时停车"],
itemWidth: 18,
itemHeight: 12,
textStyle: {
fontSize: 14,
color: 'white',
},
},
color: ["#4DC3FF", "#FFD767"],
//series: seriesData,
series: [
{
// name: 'Access From',
type: 'pie',
radius: ['60%', '70%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'center'
},
emphasis: {
label: {
show: true,
fontSize: 40,
fontWeight: 'bold'
}
},
labelLine: {
show: false
},
data: [
{ value: 1048, name: '常时停车' },
{ value: 735, name: '临时停车' },
]
}
],
grid: {
x: 50,
y: 55,
x2: 70,
y2: 20,
},
});
};
function getParkingIncome() {
ajax
.getParkingIncome()
.then((res) => {
if (res.status === 20000) {
console.log(res)
getRevenueOption(res.data);
getParkingOption(res.data);
getRingOption(res.data)
}
})
.catch((err) => console.error(err));
}
//
const getSelectList = () => {
ajax.getPayRecordTotalSelect().then(
(res) => {
if (parseInt(res?.status) === 20000) {
setSearchSelectList(res.data || {});
}
},
(err) => {
console.log(err);
}
);
};
//
const getData = (v) => {
let postData = { ...formData };
if (!loading) {
postData = { ...holdData };
}
setDefaultParams({ ...postData, ...pageInfo });
setTabLoading(true);
ajax.getAppList({ ...postData, ...pageInfo, ...v }).then(
(res) => {
if (parseInt(res?.status) === 20000) {
setResultData(res?.data || {});
} else {
message.error(res?.message);
}
setLoading(false);
setTabLoading(false);
},
(err) => {
console.log(err);
setLoading(false);
setTabLoading(false);
}
);
};
//
const handleSearch = () => {
setLoading(true);
setPageInfo({ ...pageInfo, ...{ pn: 1 } });
setHoldData(formData);
setIsAjax(!isAjax);
};
useEffect(() => {
getParkingIncome();
}, []);
//
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?.flow_type_list || []}
value={formData.pay_merchant_id}
onChange={(v) =>
setFormData({ ...formData, pay_merchant_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.pay_merchant_id}
onChange={(v) =>
setFormData({ ...formData, pay_merchant_id: v })
}
/>
</div>
<div className="yisa-search">
<label>停车场</label>
<Input
className="form-con"
placeholder="请输入"
value={formData?.park}
onChange={(e) =>
setFormData({ ...formData, park: 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: "月",
},
{
value: "4",
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 {
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 {
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="parkinglive-box">
<div className="result-box parkinglive-left">
<div className="result-box-title">新能源车辆占比</div>
<Tooltip
placement="topLeft"
title={<span>展示统计期间出现过的能源车辆数与非新能源车辆数之间的对比情况</span>}
>
<i>?</i>
</Tooltip>
<ReactEcharts
option={ringData}
style={{ height: "300px", width: "100%", overflow: "hidden" }}
/>
</div>
<div className="result-box parkinglive-right">
<div className="result-box-title">车型分类</div>
<Tooltip
placement="topLeft"
title={<span>展示统计时间段内不同车型车之间数量的对比情况</span>}
>
<i>?</i>
</Tooltip>
<ReactEcharts
option={ringData}
style={{ height: "300px", width: "100%", overflow: "hidden" }}
/>
</div>
</div>
<div className="parkinglive-box">
<div className="result-box parkinglive-left">
<div className="result-box-title">新能源趋势分析</div>
<Tooltip
placement="topLeft"
title={<span>展示统计时间段内的新能源停车和非新能源停车数量的变化趋势</span>}
>
<i>?</i>
</Tooltip>
<ReactEcharts
option={revenueData}
style={{ height: "300px", width: "100%", overflow: "hidden" }}
/>
</div>
<div className="result-box parkinglive-right">
<div className="result-box-title">新能源车排行</div>
</div>
</div>
</div>
</div>
</div>
</>
);
}
export default CarTypeAly;

581
src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkBerthAly/loadable.jsx

@ -1,15 +1,574 @@
import React, { useState, useRef, useEffect } from "react";
// import { message, Pagination, Table, Space, Modal, } from "antd";
// import { dictionary, utils } from "@/config/common";
// import moment from 'moment'
// import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks';
// import ajax from "@/services"
// import { FormInput, FormSelect, OptionPanel, ResultPanel, FormSliderPicker, AreaCascader, ImgResize, ImgZoom, } from "@/components"
// import "./index.scss";
// import errorImg from "@/assets/images/layout/error.png"
// import { useLocation } from "react-router-dom";
import React, { useState, useEffect } from "react";
import { ResultFlowResult, DataSelect } from "@/components";
import { Select, Input, Button, Table, message, Pagination, DatePicker, Modal, Cascader, Tooltip } 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 "./index.scss";
import ajax from "@/services";
function ParkBerthAly() {
return <div>ParkBerthAly</div>
// session
const [defaultParams, setDefaultParams] = useSessionStorageState(
"formData_carTypeAly",
{ defaultValue: null }
);
//
const [areaList, setAreaList] = useState([]);
//
const defaultData = {
confirm_start_time: moment().subtract('days').startOf('day').format("YYYY-MM-DD HH:mm:ss"),
confirm_end_time: moment().endOf("day").format("YYYY-MM-DD HH:mm:ss"),
create_start_time: moment().subtract('days').startOf('day').format("YYYY-MM-DD HH:mm:ss"),
create_end_time: moment().endOf("day").format("YYYY-MM-DD HH:mm:ss"),
app_name: "", //
app_type: 0, //
pay_merchant_id: 0, //
};
//
const [pageInfo, setPageInfo] = useState({
pn: defaultParams ? defaultParams?.pn : 1,
page_size: defaultParams ? defaultParams?.page_size : 15,
});
//
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 [revenueData, setRevenueData] = useState({});
const [parkingData, setParkingData] = useState({});
//
const [ringData, setRingData] = useState({});
const [searchSelectList, setSearchSelectList] = useState([]); //
const [sessionTabList, setSessionTabList] = useSessionStorageState('carTypeAly', {
value: {
}
})
useEffect(() => {
if (sessionTabList && Object.values(sessionTabList).length > 0) {
setFormData({
...formData, ...sessionTabList
})
getData({
...sessionTabList
})
} else {
getData()
}
}, [isAjax])
useEffect(() => {
setSessionTabList({
...formData
})
}, [formData])
useEffect(() => {
getSelectList();
}, []);
// 访
// useEffect(() => {
// getData();
// }, [isAjax]);
//
const getRevenueOption = (data) => {
//
data.sort((a, b) => {
return new Date(a.pay_date) - new Date(b.pay_date);
});
console.log(data);
const areaNames = [...new Set(data.map((item) => item.area_name))];
//
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: "line",
itemStyle: {
normal: {
label: {
show: true, //
position: 'top', //
textStyle: { //
color: 'white',//
fontSize: 10//
}
},
},
},
data: dates.map((item) => {
for (const { pay_date, income } of areaData) {
console.log(pay_date, income);
if (pay_date === item) return income;
}
return 0;
}),
yAxisIndex: index == 1 ? 1 : null,
};
});
console.log(21, areaNames, seriesData)
// X
const xAxisData = dates.map((date) => {
return {
value: date,
textStyle: {
align: "center",
lineStyle: {
color: "skyblue", // 线
shadowBlur: 6,
},
},
};
});
setRevenueData({
title: {
text: "",
textStyle: {
color: "#fff",
},
},
tooltip: {
trigger: "axis",
},
legend: {
type: "scroll",
right: "5%",
//data: areaNames,
data: ["临时停车次数", "常时停车次数"],
itemWidth: 18,
itemHeight: 12,
textStyle: {
fontSize: 14,
color: 'white',
},
},
xAxis: {
//data: xAxisData,
data: ["00:00", "01:00", "02:00", "03:00", "04:00", "05:00", "06:00", "07:00", "08:00", "09:00", "10:00", "11:00", "12:00"],
type: 'category',
boundaryGap: false, //
axisLine: {
lineStyle: {
color: "#bbb",
},
},
axisLabel: {
textStyle: {
color: "#bbb",
},
},
},
yAxis: {
type: "value",
name: '数量(次)',
min: 0,
//max: 50,
//interval: 10,
//splitNumber: 6, //
},
color: ["#4DC3FF", "#FFD767"],
//series: seriesData,
series: [
{
"name": "临时停车次数",
"type": "line",
"data": [
12,
12,
24
]
},
{
"name": "常时停车次数",
"type": "line",
"data": [
9,
4,
4
]
}
],
grid: {
x: 50,
y: 55,
x2: 70,
y2: 20,
},
});
};
//
const getParkingOption = (data) => {
//
data.sort((a, b) => {
return new Date(a.pay_date) - new Date(b.pay_date);
});
console.log(data);
const areaNames = [...new Set(data.map((item) => item.area_name))];
//
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: "line",
itemStyle: {
normal: {
label: {
show: true, //
position: 'top', //
textStyle: { //
color: 'white',//
fontSize: 10//
}
},
},
},
data: dates.map((item) => {
for (const { pay_date, income } of areaData) {
console.log(pay_date, income);
if (pay_date === item) return income;
}
return 0;
}),
yAxisIndex: index == 1 ? 1 : null,
};
});
console.log(21, areaNames, seriesData)
// X
const xAxisData = dates.map((date) => {
return {
value: date,
textStyle: {
align: "center",
lineStyle: {
color: "skyblue", // 线
shadowBlur: 6,
},
},
};
});
setParkingData({
title: {
text: "",
textStyle: {
color: "#fff",
},
},
tooltip: {
trigger: "axis",
},
// legend: {
// type: "scroll",
// right: "5%",
// //data: areaNames,
// //data: ["", ""],
// itemWidth: 18,
// itemHeight: 12,
// textStyle: {
// fontSize: 14,
// color: 'white',
// },
// },
xAxis: {
//data: xAxisData,
data: ["00:00", "01:00", "02:00", "03:00", "04:00", "05:00", "06:00", "07:00", "08:00", "09:00", "10:00", "11:00", "12:00"],
type: 'category',
boundaryGap: false, //
axisLine: {
lineStyle: {
color: "#bbb",
},
},
axisLabel: {
textStyle: {
color: "#bbb",
},
},
},
yAxis: {
type: "value",
name: '泊位占用率',
min: 0,
max: 100,
interval: 10,
//splitNumber: 6, //
axisLabel: {
formatter: "{value}%",
textStyle: {
color: "#bbb",
},
},
},
color: ["#4DC3FF", "#FFD767"],
//series: seriesData,
series:
{
"name": "临时停车次数",
"type": "line",
"data": [40, 0, 90, 34, 98, 100, 70, 80],
areaStyle: {
normal: {//线
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: 20,
},
});
};
//
const getRingOption = (data) => {
//
data.sort((a, b) => {
return new Date(a.pay_date) - new Date(b.pay_date);
});
console.log(data);
const areaNames = [...new Set(data.map((item) => item.area_name))];
setRingData({
title: {
text: "",
textStyle: {
color: "#fff",
},
},
tooltip: {
trigger: "axis",
},
legend: {
type: "scroll",
//right: "5%",
top: 'bottom',
bottom: 'center',
//data: areaNames,
data: ["常时停车", "临时停车"],
itemWidth: 18,
itemHeight: 12,
textStyle: {
fontSize: 14,
color: 'white',
},
},
color: ["#4DC3FF", "#FFD767"],
//series: seriesData,
series: [
{
// name: 'Access From',
type: 'pie',
radius: ['60%', '70%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'center'
},
emphasis: {
label: {
show: true,
fontSize: 40,
fontWeight: 'bold'
}
},
labelLine: {
show: false
},
data: [
{ value: 1048, name: '常时停车' },
{ value: 735, name: '临时停车' },
]
}
],
grid: {
x: 50,
y: 55,
x2: 70,
y2: 20,
},
});
};
function getParkingIncome() {
ajax
.getParkingIncome()
.then((res) => {
if (res.status === 20000) {
console.log(res)
getRevenueOption(res.data);
getParkingOption(res.data);
getRingOption(res.data)
}
})
.catch((err) => console.error(err));
}
//
const getSelectList = () => {
ajax.getPayRecordTotalSelect().then(
(res) => {
if (parseInt(res?.status) === 20000) {
setSearchSelectList(res.data || {});
}
},
(err) => {
console.log(err);
}
);
};
//
const getData = (v) => {
let postData = { ...formData };
if (!loading) {
postData = { ...holdData };
}
setDefaultParams({ ...postData, ...pageInfo });
setTabLoading(true);
ajax.getAppList({ ...postData, ...pageInfo, ...v }).then(
(res) => {
if (parseInt(res?.status) === 20000) {
setResultData(res?.data || {});
} else {
message.error(res?.message);
}
setLoading(false);
setTabLoading(false);
},
(err) => {
console.log(err);
setLoading(false);
setTabLoading(false);
}
);
};
//
const handleSearch = () => {
setLoading(true);
setPageInfo({ ...pageInfo, ...{ pn: 1 } });
setHoldData(formData);
setIsAjax(!isAjax);
};
useEffect(() => {
getParkingIncome();
}, []);
//
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-result soll-result">
<div className="result">
<div className="parkinglive-box">
<div className="result-box parkinglive-left">
<div className="result-box-title">新能源车辆占比</div>
<Tooltip
placement="topLeft"
title={<span>展示统计期间出现过的能源车辆数与非新能源车辆数之间的对比情况</span>}
>
<i>?</i>
</Tooltip>
<ReactEcharts
option={ringData}
style={{ height: "300px", width: "100%", overflow: "hidden" }}
/>
</div>
<div className="result-box parkinglive-right">
<div className="result-box-title">车型分类</div>
<Tooltip
placement="topLeft"
title={<span>展示统计时间段内不同车型车之间数量的对比情况</span>}
>
<i>?</i>
</Tooltip>
<ReactEcharts
option={ringData}
style={{ height: "300px", width: "100%", overflow: "hidden" }}
/>
</div>
</div>
<div className="parkinglive-box">
<div className="result-box parkinglive-left">
<div className="result-box-title">新能源趋势分析</div>
<Tooltip
placement="topLeft"
title={<span>展示统计时间段内的新能源停车和非新能源停车数量的变化趋势</span>}
>
<i>?</i>
</Tooltip>
<ReactEcharts
option={revenueData}
style={{ height: "300px", width: "100%", overflow: "hidden" }}
/>
</div>
<div className="result-box parkinglive-right">
<div className="result-box-title">新能源车排行</div>
</div>
</div>
</div>
</div>
</div>
</>
);
}
export default ParkBerthAly;

656
src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkTurnoverAly/loadable.jsx

@ -1,15 +1,649 @@
import React, { useState, useRef, useEffect } from "react";
// import { message, Pagination, Table, Space, Modal, } from "antd";
// import { dictionary, utils } from "@/config/common";
// import moment from 'moment'
// import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks';
// import ajax from "@/services"
// import { FormInput, FormSelect, OptionPanel, ResultPanel, FormSliderPicker, AreaCascader, ImgResize, ImgZoom, } from "@/components"
// import "./index.scss";
// import errorImg from "@/assets/images/layout/error.png"
// import { useLocation } from "react-router-dom";
import React, { useState, useEffect } from "react";
import { ResultFlowResult } from "@/components";
import { Select, Input, Button, Table, message, Pagination, DatePicker, Modal, Cascader, Tooltip } 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 "./index.scss";
import ajax from "@/services";
function ParkTurnoverAly() {
return <div>ParkTurnoverAly</div>
// session
const [defaultParams, setDefaultParams] = useSessionStorageState(
"formData_parkingAlyPeriod",
{ defaultValue: null }
);
//
const [areaList, setAreaList] = useState([]);
//
const defaultData = {
confirm_start_time: moment().subtract('days').startOf('day').format("YYYY-MM-DD HH:mm:ss"),
confirm_end_time: moment().endOf("day").format("YYYY-MM-DD HH:mm:ss"),
create_start_time: moment().subtract('days').startOf('day').format("YYYY-MM-DD HH:mm:ss"),
create_end_time: moment().endOf("day").format("YYYY-MM-DD HH:mm:ss"),
app_name: "", //
app_type: 0, //
pay_merchant_id: 0, //
};
//
const [pageInfo, setPageInfo] = useState({
pn: defaultParams ? defaultParams?.pn : 1,
page_size: defaultParams ? defaultParams?.page_size : 15,
});
//
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 [revenueData, setRevenueData] = useState({});
const [searchSelectList, setSearchSelectList] = useState([]); //
const [sessionTabList, setSessionTabList] = useSessionStorageState('parkingAlyPeriod', {
value: {
}
})
const columns = [
{
title: '时间',
dataIndex: 'index',
key: 'index',
// width: 100,
// fixed: 'left',
},
{
title: '入场次数(次)',
dataIndex: 'age',
key: 'age',
},
{
title: '总泊位数(个)',
dataIndex: 'age',
key: 'age',
},
{
title: '日均泊位周转次数(次)',
dataIndex: 'age',
key: 'age',
},
]
useEffect(() => {
if (sessionTabList && Object.values(sessionTabList).length > 0) {
setFormData({
...formData, ...sessionTabList
})
getData({
...sessionTabList
})
} else {
getData()
}
}, [isAjax])
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().format("YYYY-MM");
end = moment().format("YYYY-MM");
} 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) => {
//
data.sort((a, b) => {
return new Date(a.pay_date) - new Date(b.pay_date);
});
console.log(data);
const areaNames = [...new Set(data.map((item) => item.area_name))];
//
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: "line",
itemStyle: {
normal: {
label: {
show: true, //
position: 'top', //
textStyle: { //
color: 'white',//
fontSize: 10//
}
},
},
},
data: dates.map((item) => {
for (const { pay_date, income } of areaData) {
console.log(pay_date, income);
if (pay_date === item) return income;
}
return 0;
}),
yAxisIndex: index == 1 ? 1 : null,
};
});
console.log(21, areaNames, seriesData)
// X
const xAxisData = dates.map((date) => {
return {
value: date,
textStyle: {
align: "center",
lineStyle: {
color: "skyblue", // 线
shadowBlur: 6,
},
},
};
});
setRevenueData({
title: {
text: "",
textStyle: {
color: "#fff",
},
},
tooltip: {
trigger: "axis",
},
xAxis: {
data: xAxisData,
type: 'category',
axisLine: {
lineStyle: {
color: "#bbb",
},
},
axisLabel: {
textStyle: {
color: "#bbb",
},
},
},
yAxis: {
type: "value",
name: '泊位利用率',
min: 0,
// /max: 50,
interval: 10,
splitNumber: 6, //
axisLabel: {
formatter: "{value}%",
textStyle: {
color: "#bbb",
},
},
},
color: ["#4DC3FF", "#FFD767"],
//series: seriesData,
series:
{
"name": "西区",
"type": "line",
"data": [
12,
12,
24
]
},
grid: {
x: 50,
y: 55,
x2: 70,
y2: 20,
},
});
};
function getParkingIncome() {
ajax
.getParkingIncome()
.then((res) => {
if (res.status === 20000) {
console.log(res)
getRevenueOption(res.data);
}
})
.catch((err) => console.error(err));
}
//
const getSelectList = () => {
ajax.getPayRecordTotalSelect().then(
(res) => {
if (parseInt(res?.status) === 20000) {
setSearchSelectList(res.data || {});
}
},
(err) => {
console.log(err);
}
);
};
//
const getData = (v) => {
let postData = { ...formData };
if (!loading) {
postData = { ...holdData };
}
setDefaultParams({ ...postData, ...pageInfo });
setTabLoading(true);
ajax.getAppList({ ...postData, ...pageInfo, ...v }).then(
(res) => {
if (parseInt(res?.status) === 20000) {
setResultData(res?.data || {});
} else {
message.error(res?.message);
}
setLoading(false);
setTabLoading(false);
},
(err) => {
console.log(err);
setLoading(false);
setTabLoading(false);
}
);
};
//
const handleSearch = () => {
setLoading(true);
setPageInfo({ ...pageInfo, ...{ pn: 1 } });
setHoldData(formData);
setIsAjax(!isAjax);
};
//
const handleExport = () => {
if (resultData.list?.length > 0) {
let { pn, page_size, ...params } = defaultParams;
ajax.getAppList(params).then(
(res) => {
if (parseInt(res?.status) === 20000) {
message.success(res?.message);
} else {
message.error(res?.message);
}
},
(err) => {
console.log(err);
}
);
} else {
message.error("暂无数据");
}
};
useEffect(() => {
getParkingIncome();
}, []);
//
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?.flow_type_list || []}
value={formData.pay_merchant_id}
onChange={(v) =>
setFormData({ ...formData, pay_merchant_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.pay_merchant_id}
onChange={(v) =>
setFormData({ ...formData, pay_merchant_id: v })
}
/>
</div>
<div className="yisa-search">
<label>停车场</label>
<Input
className="form-con"
placeholder="请输入"
value={formData?.park}
onChange={(e) =>
setFormData({ ...formData, park: e.target.value })
}
/>
</div>
<div className="yisa-search">
<label>计费类型</label>
<Select
className="form-con"
placeholder="请选择计费类型"
options={[
{
label: '全部',
value: '0',
},
{
label: '一类区',
value: '1',
},
{
label: '二类区',
value: '2',
},
{
label: '三类区',
value: '3',
},
]}
value={formData.pay_merchant_id}
onChange={(v) =>
setFormData({ ...formData, pay_merchant_id: v })
}
/>
</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: "月",
},
{
value: "4",
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 {
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 {
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 usage-result">
<div className="result">
<div className="result-box">
<div className="result-box-title">泊位利用率变化趋势</div>
<Tooltip
placement="topLeft"
title={<span>展示统计时间段内的泊位利用率的趋势变化情况</span>}
>
<i>?</i>
</Tooltip>
<ReactEcharts
option={revenueData}
style={{ height: "300px", width: "100%", overflow: "hidden" }}
/>
</div>
<div className="result-box">
<Table
columns={columns}
dataSource={[
{
index: 1,
},
{
index: 1,
},
{
index: 1,
},
{
index: 1,
},
{
index: 1,
},
{
index: 1,
},
{
index: 1,
},
]}
bordered
size="middle"
// scroll={{
// x: 'calc(700px + 50%)',
// y: 240,
// }}
/>
</div>
</div>
</div>
</div>
</>
);
}
export default ParkTurnoverAly;

199
src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyOverview/index.scss

@ -111,7 +111,12 @@ $color-primary : var(--color-primary);
background-color: #67c23a;
border-color: #67c23a;
}
.soll-result {
overflow: auto;
.result {
display: block !important;
}
}
.paid-result {
width: calc(100% - 375px);
padding-bottom: 15px;
@ -122,7 +127,80 @@ $color-primary : var(--color-primary);
.result {
@include flex-columns;
.result-box {
color: #ffffff;
background: #3e4557;
border-radius: 4px;
margin-bottom: 20px;
.result-box-title {
height: 21px;
font-size: 16px;
font-family: Microsoft YaHei, Microsoft YaHei-Bold;
font-weight: 700;
text-align: left;
margin: 18px 0 18px 18px;
display: inline-block;
}
i {
border: 1px solid;
border-radius: 22px;
display: inline-block;
text-align: center;
font-size: 12px;
width: 22px;
cursor: pointer;
}
.ant-table .ant-table-thead tr th {
background: #3e4557;
}
}
.parkinglive-box {
display: flex;
.result-box {
color: #ffffff;
background: #3e4557;
border-radius: 4px;
margin-bottom: 20px;
.result-box-title {
height: 21px;
font-size: 16px;
font-family: Microsoft YaHei, Microsoft YaHei-Bold;
font-weight: 700;
text-align: left;
margin: 18px 0 18px 18px;
display: inline-block;
}
i {
border: 1px solid;
border-radius: 22px;
display: inline-block;
text-align: center;
font-size: 12px;
width: 22px;
cursor: pointer;
}
.ant-table .ant-table-thead tr th {
background: #3e4557;
}
}
.parkinglive-left {
width: 50%;
margin-right: 20px;
}
.parkinglive-right {
width: 50%;
}
}
.overview-left {
display: inline-block;
width: 46%;
margin-right: 20px;
}
.overview-right {
display: inline-block;
width: 50%;
}
.row-head {
height: 32px;
display: flex;
@ -212,122 +290,3 @@ $color-primary : var(--color-primary);
}
}
}
.ltc-box {
width: 100%;
.ltc-box-title {
font-size: 18px;
font-weight: bolder;
width: 100%;
white-space: nowrap;
overflow: hidden;
.text {
display: inline-block;
}
.line {
display: inline-block;
border: 1px dotted #607092;
width: inherit;
margin-bottom: 6px;
}
.ltc-icon {
width: 5px;
background: #0080db;
height: 19px;
display: inline-block;
margin-right: 10px;
}
.ltc-btn {
display: inline-block;
border: 1px solid;
border-radius: 5px;
margin: 0 10px;
width: 60px;
height: 35px;
line-height: 35px;
text-align: center;
background: #409eff;
color: #fff;
font-weight: 100;
cursor: pointer;
}
.ltc-cancel {
background: #fff;
color: #000;
}
}
.ltc-box-line {
border: 1px solid #e7e7e7;
margin: 8px 0;
}
.ltc-box-in {
margin-left: 20px;
.ant-descriptions {
margin-left: 20px;
}
}
.ltc-title {
margin: auto;
width: 50%;
text-align: center;
font-size: 18px;
font-weight: 600;
}
.ltc-content {
margin: auto;
padding: 20px;
.ltc-item {
font-size: 14px;
margin: 6px 12px 6px 0;
display: inline-flex;
//width: 470px;
.new-item {
display: inline-block;
width: 120px;
height: 32px;
line-height: 32px;
background: rgba(150,161,192,0.24);
text-align: center;
}
.new-value {
display: inline-block;
width: 320px;
height: 32px;
line-height: 32px;
text-align: center;
background: #3E4557;
box-shadow: 0px 3px 8px 0px rgba(0,0,0,0.12);
}
.ltc-item-input {
display: inline-block;
width: 200px;
}
div {
width: 150px;
}
}
}
.ltc-liuc {
display: flex;
margin-left: 200px;
.ltc-item {
display: flex;
.ltc-item-name {
margin: 6px 10px 0 10px;
color: #3f94df;
}
}
.ltc-work{
text-align: center;
.ltc-tips {
border: 3px solid #000;
text-align: center;
line-height: 27px;
height: 35px;
width: 35px;
border-radius: 28px;
margin: auto;
}
}
}
}

563
src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyOverview/loadable.jsx

@ -1,5 +1,5 @@
import React, { useState, useEffect } from "react";
import { ResultFlowResult } from "@/components";
import { ResultFlowResult, DataSelect } from "@/components";
import { Select, Input, Button, Table, message, Pagination, DatePicker, Modal, Cascader, Tooltip } from "antd";
import { useSessionStorageState } from "ahooks";
import { dictionary } from "@/config/common";
@ -8,24 +8,18 @@ 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 "./index.scss";
import ajax from "@/services";
//
function ParkingAlyOverview() {
const navigate = useNavigate();
const dispatch = useDispatch();
const tabList = useSelector((state) => state.common.tabList);
// session
const [defaultParams, setDefaultParams] = useSessionStorageState(
"formData_editOrderInquiry",
"formData_parkingAlyOverview",
{ defaultValue: null }
);
//
const [areaList, setAreaList] = useState([]);
const [detailVisible, setDetailVisible] = useState(false);
const [bigpicVisible, setBigpicVisible] = useState(false);//
const [bigPic, setBigPic] = useState();
const [ycddData, setYcddData] = useState([])//
//
const defaultData = {
confirm_start_time: moment().subtract('days').startOf('day').format("YYYY-MM-DD HH:mm:ss"),
@ -43,6 +37,7 @@ function ParkingAlyOverview() {
});
//
const [formData, setFormData] = useState({
date_type: '4',
...defaultData,
...defaultParams,
});
@ -59,12 +54,39 @@ function ParkingAlyOverview() {
total: 0,
list: [],
});
const [detailTableData, setDetailTableData] = useState([]);
//
const [revenueData, setRevenueData] = useState({});
const [searchSelectList, setSearchSelectList] = useState([]); //
const [sessionTabList, setSessionTabList] = useSessionStorageState('editOrderInquiry', {
const [sessionTabList, setSessionTabList] = useSessionStorageState('parkingAlyOverview', {
value: {
}
})
const columns = [
{
title: '时间',
dataIndex: 'index',
key: 'index',
// width: 100,
// fixed: 'left',
},
{
title: '停车总时长',
dataIndex: 'age',
key: 'age',
},
{
title: '日均泊位停车时长',
dataIndex: 'age',
key: 'age',
},
{
title: '日均泊位利用率',
dataIndex: 'age',
key: 'age',
},
]
useEffect(() => {
if (sessionTabList && Object.values(sessionTabList).length > 0) {
setFormData({
@ -90,20 +112,6 @@ function ParkingAlyOverview() {
// useEffect(() => {
// getData();
// }, [isAjax]);
//
const getSelectList = () => {
ajax.getPayRecordTotalSelect().then(
(res) => {
if (parseInt(res?.status) === 20000) {
setSearchSelectList(res.data || {});
}
},
(err) => {
console.log(err);
}
);
};
//
const TimeChange = () => {
let e = formData.date_type;
@ -145,6 +153,148 @@ function ParkingAlyOverview() {
end_time: end,
});
};
//
const getRevenueOption = (data) => {
//
data.sort((a, b) => {
return new Date(a.pay_date) - new Date(b.pay_date);
});
console.log(data);
const areaNames = [...new Set(data.map((item) => item.area_name))];
//
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: "line",
itemStyle: {
normal: {
label: {
show: true, //
position: 'top', //
textStyle: { //
color: 'white',//
fontSize: 10//
}
},
},
},
data: dates.map((item) => {
for (const { pay_date, income } of areaData) {
console.log(pay_date, income);
if (pay_date === item) return income;
}
return 0;
}),
yAxisIndex: index == 1 ? 1 : null,
};
});
console.log(21, areaNames, seriesData)
// X
const xAxisData = dates.map((date) => {
return {
value: date,
textStyle: {
align: "center",
lineStyle: {
color: "skyblue", // 线
shadowBlur: 6,
},
},
};
});
setRevenueData({
title: {
text: "",
textStyle: {
color: "#fff",
},
},
tooltip: {
trigger: "axis",
},
xAxis: {
data: xAxisData,
type: 'category',
axisLine: {
lineStyle: {
color: "#bbb",
},
},
axisLabel: {
textStyle: {
color: "#bbb",
},
},
},
yAxis: {
type: "value",
name: '泊位利用率',
min: 0,
// /max: 50,
interval: 10,
splitNumber: 6, //
axisLabel: {
formatter: "{value}%",
textStyle: {
color: "#bbb",
},
},
},
color: ["#4DC3FF", "#FFD767"],
//series: seriesData,
series:
{
"name": "西区",
"type": "line",
"data": [
12,
12,
24
]
},
grid: {
x: 50,
y: 55,
x2: 70,
y2: 20,
},
});
};
function getParkingIncome() {
ajax
.getParkingIncome()
.then((res) => {
if (res.status === 20000) {
console.log(res)
getRevenueOption(res.data);
}
})
.catch((err) => console.error(err));
}
//
const getSelectList = () => {
ajax.getPayRecordTotalSelect().then(
(res) => {
if (parseInt(res?.status) === 20000) {
setSearchSelectList(res.data || {});
}
},
(err) => {
console.log(err);
}
);
};
//
const getData = (v) => {
let postData = { ...formData };
@ -179,257 +329,6 @@ function ParkingAlyOverview() {
setIsAjax(!isAjax);
};
//
const paginationProps = {
className: "pagination-common",
showQuickJumper: true,
showSizeChanger: true,
current: pageInfo.pn,
total: resultData?.total,
pageSize: pageInfo.page_size,
pageSizeOptions: Array.from(
new Set([...[15], ...(dictionary?.pageSizeOptions || [])])
),
onChange: (current, size) => {
setPageInfo({
...pageInfo,
...{ pn: pageInfo.page_size == size ? current : 1, page_size: size },
});
setIsAjax(!isAjax);
},
};
//
const tableColumns = [
{
title: "序号",
width: 60,
align: "center",
render: (text, record, index) => index + 1,
},
{
title: "修改原因",
dataIndex: "app_name",
align: "center",
},
{
title: "处理记录ID",
dataIndex: "app_name",
align: "center",
},
{
title: "业务订单类型",
dataIndex: "app_name",
align: "center",
},
{
title: "业务订单ID",
dataIndex: "app_name",
align: "center",
},
{
title: "订单金额(元)",
dataIndex: "app_name",
align: "center",
},
{
title: "优惠总计(元)",
dataIndex: "app_name",
align: "center",
},
{
title: "实付总计(元)",
dataIndex: "app_name",
align: "center",
},
{
title: "欠费总计(元)",
dataIndex: "app_name",
align: "center",
},
{
title: "确认时间",
dataIndex: "app_name",
align: "center",
},
{
title: "发起时间",
dataIndex: "app_name",
align: "center",
},
{
title: "状态",
dataIndex: "app_name",
align: "center",
},
{
title: "操作",
align: "center",
width: 140,
render: (val, row, index) => {
return (
<span style={{
color: "#177ddc",
cursor: "pointer"
}} onClick={() => { handleView(); setYcddData(row) }}>
查看
</span>
);
},
},
];
//
const detailColumns = [
{
title: "修改状态",
dataIndex: "statusName",
align: "center",
},
{
title: "订单生成时间",
dataIndex: "a",
align: "center",
},
{
title: "支付订单类型",
dataIndex: "a",
align: "center",
},
{
title: "支付渠道",
dataIndex: "app_name",
align: "center",
},
{
title: "支付订单ID",
dataIndex: "app_name",
align: "center",
},
{
title: "抵扣修改金额",
dataIndex: "app_name",
align: "center",
},
{
title: "优惠金额",
dataIndex: "app_name",
align: "center",
},
{
title: "实付金额",
dataIndex: "app_name",
align: "center",
},
{
title: "欠费金额",
dataIndex: "app_name",
align: "center",
},
{
title: "需要退款金额",
dataIndex: "app_name",
align: "center",
},
];
//
const handleView = () => {
setDetailVisible(true)
};
//
const tkddModal = <div className="ltc-box">
<div className="ltc-box-title"><div className="text">停车订单:{ycddData.park_record_id}</div><div className="line"></div></div>
<div className="ltc-box-title"><div className="text">车厂详情</div></div>
<div className="ltc-content">
<div className="ltc-item">
<div className="new-item">停车场名称</div><div className="new-value">{ycddData?.road_name}</div>
</div>
<div className="ltc-item">
<div className="new-item">区域</div><div className="new-value">{ycddData.area_name}</div>
</div>
<div className="ltc-item">
<div className="new-item">商户名称</div><div className="new-value">{ycddData.park_operator_name}</div>
</div>
<div className="ltc-item">
<div className="new-item">泊位号</div><div className="new-value">{ycddData.berth_code}</div>
</div>
<div className="ltc-item">
<div className="new-item">车场类型</div><div className="new-value">{ycddData.road_type}</div>
</div>
</div>
<div className="ltc-box-title"><div className="text">车辆详情</div></div>
<div className="ltc-content">
<div className="ltc-item">
<div className="new-item">车牌号</div><div className="new-value">{ycddData.plate_number}</div>
</div>
<div className="ltc-item">
<div className="new-item">停车时长</div><div className="new-value">{ycddData.parking_duration}</div>
</div>
<div className="ltc-item">
<div className="new-item">入场时间</div><div className="new-value">{ycddData.in_time}</div>
</div>
<div className="ltc-item">
<div className="new-item">出场时间</div><div className="new-value">{ycddData.out_time}</div>
</div>
<div className="ltc-item">
<div className="new-item">入场记录来源</div><div className="new-value">{ycddData.inSource}</div>
</div>
<div className="ltc-item">
<div className="new-item">出场记录来源</div><div className="new-value">{ycddData.outSource}</div>
</div>
<div className="ltc-item">
<div className="new-item">证据图像</div><div className="new-value"><a onClick={() => { setBigPic(ycddData.in_veh_pic); setBigpicVisible(true) }}>查看</a></div>
</div>
</div>
<div className="ltc-box-title"><div className="text">订单详情:{ycddData?.refund_id}</div></div>
<div className="ltc-content">
<div className="ltc-item">
<div className="new-item">应收金额</div><div className="new-value">{ycddData?.r || "--"}</div>
</div>
<div className="ltc-item">
<div className="new-item">优惠总计</div><div className="new-value">{ycddData.r || "--"}</div>
</div>
<div className="ltc-item">
<div className="new-item">实付总计</div><div className="new-value">{ycddData.p || "--"}</div>
</div>
<div className="ltc-item">
<div className="new-item">欠费总计</div><div className="new-value">{ycddData.r || "--"}</div>
</div>
</div>
<div className="ltc-box-title"><div className="text">修改信息:{ycddData?.refund_id}</div><div className="line"></div></div>
<div className="ltc-content">
<div className="ltc-item">
<div className="new-item">修改原因</div><div className="new-value">{ycddData.s || "--"}</div>
</div>
<div className="ltc-item">
<div className="new-item">欠费金额修改</div><div className="new-value">{ycddData.s || "--"}</div>
</div>
<div className="ltc-item">
<div className="new-item">修改金额</div><div className="new-value">{ycddData.s || "--"}</div>
</div>
<div className="ltc-item">
<div className="new-item">优惠金额修改</div><div className="new-value">{ycddData.s || "--"}</div>
</div>
<div className="ltc-item">
<div className="new-item">退款方式</div><div className="new-value">{ycddData.refund_type || "--"}</div>
</div>
<div className="ltc-item">
<div className="new-item">退款金额共计</div><div className="new-value">{ycddData.r || "--"}</div>
</div>
</div>
<div className="ltc-box-title"><div className="text">订单修改明细</div><div className="line"></div></div>
<Table
//rowSelection={rowSelection}
rowKey={'index'}
columns={detailColumns}
dataSource={[{
statusName: '已完成'
}]}
pagination={false}
/>
</div>
//
const handleExport = () => {
if (resultData.list?.length > 0) {
@ -451,6 +350,10 @@ function ParkingAlyOverview() {
}
};
useEffect(() => {
getParkingIncome();
}, []);
//
useEffect(() => {
ajax
.getAreaTree()
.then((res) => {
@ -500,6 +403,31 @@ function ParkingAlyOverview() {
/>
</div>
<div className="yisa-search">
<label>车场类型</label>
<Select
className="form-con"
placeholder="请选择车场类型"
options={[
{
label: '全部',
value: '0',
},
{
label: '路内车场',
value: '1',
},
{
label: '路外车场',
value: '2',
},
]}
value={formData.pay_merchant_id}
onChange={(v) =>
setFormData({ ...formData, pay_merchant_id: v })
}
/>
</div>
<div className="yisa-search">
<label>停车场</label>
<Input
className="form-con"
@ -510,7 +438,6 @@ function ParkingAlyOverview() {
}
/>
</div>
<div className="yisa-search">
<label>日期
<div className="daf">
@ -635,41 +562,59 @@ function ParkingAlyOverview() {
</div>
</div>
</div>
<div className="paid-result">
<div className="paid-result soll-result">
<div className="result">
<div></div>
<Modal
open={detailVisible}
width={1500}
title={'修改详情'}
onCancel={() => {
setDetailVisible(false);
}}
footer={[
<Button key="back" onClick={() => {
setDetailVisible(false);
}}>
关闭窗口
</Button>]}
>
{tkddModal}
</Modal>
<Modal
open={bigpicVisible}
width={1600}
title={'图片展示'}
className="eae-modal"
onCancel={() => {
setBigpicVisible(false);
}}
footer={false}
>
<div>
<div className="eae-modal-item">
<img src={bigPic} width={1550} />
<div className="result-box">
<div className="result-box-title">停车指标总览</div>
</div>
<div className="result-box">
<div className="result-box-title">停车趋势分析</div>
<ReactEcharts
option={revenueData}
style={{ height: "300px", width: "100%", overflow: "hidden" }}
/>
</div>
<div className="parkinglive-box">
<div className="result-box overview-left">
<div className="result-box-title">停车资源利用情况分析</div>
</div>
<div className="result-box overview-right">
<div className="result-box-title">停车资源利用率排行榜</div>
<Table
columns={columns}
dataSource={[
{
index: 1,
},
{
index: 1,
},
{
index: 1,
},
{
index: 1,
},
{
index: 1,
},
{
index: 1,
},
{
index: 1,
},
]}
bordered
size="middle"
// scroll={{
// x: 'calc(700px + 50%)',
// y: 240,
// }}
/>
</div>
</div>
</Modal>
</div>
</div>
</div>

4
src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingLiveData/loadable.jsx

@ -15,7 +15,7 @@ import ajax from "@/services";
function ParkingLiveData() {
// session
const [defaultParams, setDefaultParams] = useSessionStorageState(
"formData_temporaryParkStat",
"formData_parkingLiveData",
{ defaultValue: null }
);
//
@ -59,7 +59,7 @@ function ParkingLiveData() {
//
const [ringData, setRingData] = useState({});
const [searchSelectList, setSearchSelectList] = useState([]); //
const [sessionTabList, setSessionTabList] = useSessionStorageState('temporaryParkStat', {
const [sessionTabList, setSessionTabList] = useSessionStorageState('parkingLiveData', {
value: {
}
})

14
src/pages/FinancialMgm/OrderInquiry/ReturnOrderInquiry/index.jsx

@ -146,12 +146,20 @@ function ReturnOrderInquiry() {
value: 0,
},
{
label: "重复支付退款",
value: 2,
},
{
label: "异常支付退款",
value: 7,
},
{
label: "异常订单处理",
value: 1,
value: 11,
},
{
label: "自动平单退款",
value: 2,
value: 12,
},
],
},
@ -377,7 +385,7 @@ function ReturnOrderInquiry() {
<>
{renderTable(
createCol(['序号', '最近尝试时间', '支付渠道', '应退实付(元)', '应退优惠(元)', '退款原因', '退款申请时间', '退款订单ID', '业务订单类型', '业务订单ID', '支付订单类型', '支付订单ID', '渠道流水号', '状态'],
['index', 'latest_try_time', 'payment_channels_name', 'refund_actual_amount', 'refund_discount_amount', 'reason', 'refund_time', 'payment_order_id', 'parking_type_name', 'park_record_id', 'payment_type_name', 'payment_order_id', 'flow_id', 'state_name'], 8),
['index', 'latest_try_time', 'payment_channels_name', 'refund_actual_amount', 'refund_discount_amount', 'reason_name', 'refund_time', 'payment_order_id', 'parking_type_name', 'park_record_id', 'payment_type_name', 'payment_order_id', 'flow_id', 'state_name'], 8),
formRefundSearch,
resultData
)}

2
src/pages/InRoadMgm/RecordInquiry/ArrearsInquiries/loadable.jsx

@ -144,6 +144,8 @@ function ArrearsInquiries() {
total={total}
search={fetch}
initFormData={initFormData}
mandatory={'plate'}
mandatory_name={'车牌号'}
pagename="欠费追缴查询"
pageName={'arrearsInquiries'}
otherData={{

2
src/pages/InRoadMgm/RecordInquiry/ArrearsRecordTotal/loadable.jsx

@ -149,6 +149,8 @@ function ArrearsRecordTotal() {
tableData={tableData}
formSearch={formSearch}
total={total}
mandatory={'plate'}
mandatory_name={'车牌号'}
pagename="停车欠费订单"
pageName={'arrearsRecordTotal'}
search={fetch}

2
src/pages/InRoadMgm/RecordInquiry/DisabledCarParkRecordTotal/loadable.jsx

@ -699,6 +699,8 @@ function DisabledCarParkRecordTotal() {
tableData={resultData}
formSearch={formSearch}
total={total}
mandatory={'plate'}
mandatory_name={'车牌号'}
pageName={'disabledCarParkRecordTotal'}
search={search}
exportUrl={'http://192.168.5.149:90/PMS/api/bpm/record/get_record_export'}

2
src/pages/InRoadMgm/RecordInquiry/EntryExitOptPDA/loadable.jsx

@ -134,6 +134,8 @@ function EntryExitOptPDA() {
formSearch={formSearch}
search={search}
total={total}
mandatory={'parking_num'}
mandatory_name={'泊位号'}
pagename="PDA操作记录"
pageName={'entryExitOptPDA'}
initFormData={initFormData}

2
src/pages/InRoadMgm/RecordInquiry/GeomagneticSignalMgm/loadable.jsx

@ -150,6 +150,8 @@ function GeomagneticSignalMgm() {
formSearch={formSearch}
search={search}
total={total}
mandatory={'parkingSpotNumber'}
mandatory_name={'泊位号'}
initFormData={initFormData}
pagename="地磁信号记录"
pageName={'geomagneticSignalMgm'}

2
src/pages/InRoadMgm/RecordInquiry/ParkRecordTotal/loadable.jsx

@ -656,6 +656,8 @@ function ParkRecordTotal() {
tableData={tableData}
formSearch={formSearch}
pagename="停车记录查询"
mandatory={'plate'}
mandatory_name={'车牌号'}
pageName={'parkRecordTotal'}
initFormData={initFormData}
total={total}

2
src/pages/InRoadMgm/RecordInquiry/UnRecordOrder/loadable.jsx

@ -183,6 +183,8 @@ function PreOrderRecord() {
<>
<TableModule
columns={columns}
mandatory={'berth_id'}
mandatory_name={'泊位号'}
pagename="未登记订单查询"
pageName={'preOrderRecord'}
tableData={tableData}

Loading…
Cancel
Save