chenglb 1 year ago
parent
commit
2fc81a960f
  1. 2
      src/components/Export/ExportBtnNew/index.jsx
  2. 4
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/CarTypeAly/loadable.jsx
  3. 4
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/NightParkStat/loadable.jsx
  4. 7
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkBerthAly/loadable.jsx
  5. 4
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkTurnoverAly/loadable.jsx
  6. 4
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkUsageAly/loadable.jsx
  7. 4
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyDuration/loadable.jsx
  8. 4
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyOverview/loadable.jsx
  9. 4
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyPeriod/loadable.jsx
  10. 4
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyReport/loadable.jsx
  11. 4
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingLiveData/loadable.jsx
  12. 4
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/TemporaryParkStat/loadable.jsx
  13. 27
      src/pages/DataAnalysisPrediction/ParkingIncomeAly/ArrearageAly/PlateArrear/index.jsx
  14. 25
      src/pages/DataAnalysisPrediction/ParkingOverview/index.scss
  15. 84
      src/pages/DataAnalysisPrediction/ParkingOverview/loadable.jsx
  16. 1
      src/pages/FinancialMgm/SettleBill/GeneralBusiness/loadable.jsx
  17. 2
      src/pages/InRoadMgm/EquipmentMgm/BarMgm/loadable.jsx
  18. 17
      src/pages/InRoadMgm/EquipmentMgm/EquipmentBrand/loadable.jsx
  19. 6
      src/pages/InRoadMgm/EquipmentMgm/EquipmentStatus/Device/index.jsx
  20. 16
      src/pages/InRoadMgm/EquipmentMgm/MonitorEquipment/loadable.jsx
  21. 7
      src/pages/MerchantMgm/FunctionMgm/index.scss
  22. 1168
      src/pages/MerchantMgm/FunctionMgm/loadable.jsx
  23. 2
      src/pages/MerchantMgm/MerchantInfo/loadable.jsx
  24. 4
      src/pages/OperationCenter/ArrearsRecover/ArrearsCar/loadable.jsx
  25. 2
      src/pages/OperationCenter/CarMgm/CarInfo/loadable.jsx
  26. 3
      src/pages/OperationCenter/UserMgm/UserInfo/index.scss
  27. 4
      src/pages/OutRoadMgm/OutSegmentMgm/ChargeRulesMgm/AddModal.jsx
  28. 13
      src/pages/OutRoadMgm/OutSegmentMgm/ChargeRulesMgm/EffectiveDate.jsx
  29. 121
      src/pages/OutRoadMgm/OutSegmentMgm/ChargeRulesMgm/TimePart.jsx
  30. 5
      src/pages/OutRoadMgm/OutSegmentMgm/ChargeRulesMgm/index.scss
  31. 126
      src/pages/OutRoadMgm/OutSegmentMgm/ChargeRulesMgm/loadable.jsx
  32. 2
      src/pages/SystemMgm/AdminMgm/loadable.jsx
  33. 6
      src/pages/SystemMgm/AreaManage/loadable.jsx
  34. 11
      src/pages/SystemMgm/OrgnizationMgm/loadable.jsx
  35. 16
      src/services/ParkingOverview/index.js

2
src/components/Export/ExportBtnNew/index.jsx

@ -171,7 +171,7 @@ function ExportBtn(props) {
} else { } else {
ajax({ url, type: ajaxType, data: { export_type: checkedType, start, end, isimg:0, ...formData, ...other } }).then((res) => { ajax({ url, type: ajaxType, data: { export_type: checkedType, start, end, isimg:0, ...formData, ...other } }).then((res) => {
if (res.status === 20000) { if (res.status === 20000) {
downloadFile(res.data.url)
downloadFile(res.data.url || res.data.export_url)
handleCancel() handleCancel()
// setInProcess("2"); // setInProcess("2");
// setProcess(res.data?.task_url) // setProcess(res.data?.task_url)

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

@ -23,8 +23,8 @@ function CarTypeAly() {
const [areaList, setAreaList] = useState([]); const [areaList, setAreaList] = useState([]);
// //
const defaultData = { const defaultData = {
start_time: moment().subtract('days').startOf('day').format("YYYY-MM-DD"),
end_time: moment().endOf("day").format("YYYY-MM-DD"),
start_time: moment().subtract(1, 'days').startOf('day').format("YYYY-MM-DD"),
end_time: moment().subtract(1, 'days').endOf("day").format("YYYY-MM-DD"),
date_type: '1', date_type: '1',
type: 'region', type: 'region',
operator_id: '0', operator_id: '0',

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

@ -23,8 +23,8 @@ function NightParkStat() {
const [areaList, setAreaList] = useState([]); const [areaList, setAreaList] = useState([]);
// //
const defaultData = { const defaultData = {
start_time: moment().subtract('days').startOf('day').format("YYYY-MM-DD"),
end_time: moment().endOf("day").format("YYYY-MM-DD"),
start_time: moment().subtract(1, 'days').startOf('day').format("YYYY-MM-DD"),
end_time: moment().subtract(1, 'days').endOf("day").format("YYYY-MM-DD"),
car_parking_type: '3', car_parking_type: '3',
operator_id: '0', operator_id: '0',
area_id: '0', area_id: '0',

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

@ -184,6 +184,10 @@ function ParkBerthAly() {
acr.push(item.date) acr.push(item.date)
acc.push(acr) acc.push(acr)
}) })
console.log(data, acc)
// acc.map((item)=>{
// })
// X // X
const xAxisData = dates.map((date) => { const xAxisData = dates.map((date) => {
return { return {
@ -270,6 +274,7 @@ function ParkBerthAly() {
trigger: 'item', trigger: 'item',
//formatter: '{b0}: {c0} ' //formatter: '{b0}: {c0} '
formatter: (params) => { formatter: (params) => {
//console.log(params)
return `<div class="tooltip-box"> return `<div class="tooltip-box">
${moment(params.data[2]).format('YYYY年MM月DD日')}(${getWeek(params.data[2])})<br/> ${moment(params.data[2]).format('YYYY年MM月DD日')}(${getWeek(params.data[2])})<br/>
全市日均泊位周转次数${totalData.all_turnover + '(次)'}<br/> 全市日均泊位周转次数${totalData.all_turnover + '(次)'}<br/>
@ -536,7 +541,7 @@ function ParkBerthAly() {
<div style={{ height: "300px", width: "100%", zoom: 1 / document.body.style.zoom }}> <div style={{ height: "300px", width: "100%", zoom: 1 / document.body.style.zoom }}>
<ReactEcharts <ReactEcharts
option={revenueData} option={revenueData}
style={{ height: "300px", width: "100%", overflow: "hidden" }}
style={{ height: "300px", width: "100%" }}
/> />
</div> </div>
</> </>

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

@ -23,8 +23,8 @@ function ParkTurnoverAly() {
const [areaList, setAreaList] = useState([]); const [areaList, setAreaList] = useState([]);
// //
const defaultData = { const defaultData = {
start_time: moment().subtract('days').startOf('day').format("YYYY-MM-DD"),
end_time: moment().endOf("day").format("YYYY-MM-DD"),
start_time: moment().subtract(1, 'days').startOf('day').format("YYYY-MM-DD"),
end_time: moment().subtract(1, 'days').endOf("day").format("YYYY-MM-DD"),
date_type: '1', // date_type: '1', //
operator_id: '0', operator_id: '0',
area_id: '0', area_id: '0',

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

@ -24,8 +24,8 @@ function ParkUsageAly() {
const [areaList, setAreaList] = useState([]); const [areaList, setAreaList] = useState([]);
// //
const defaultData = { const defaultData = {
start_time: moment().subtract('days').startOf('day').format("YYYY-MM-DD"),
end_time: moment().endOf("day").format("YYYY-MM-DD"),
start_time: moment().subtract(1, 'days').startOf('day').format("YYYY-MM-DD"),
end_time: moment().subtract(1, 'days').endOf("day").format("YYYY-MM-DD"),
car_parking_type: '3', car_parking_type: '3',
operator_id: '0', operator_id: '0',
area_id: '0', area_id: '0',

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

@ -23,8 +23,8 @@ function ParkingAlyDuration() {
const [areaList, setAreaList] = useState([]); const [areaList, setAreaList] = useState([]);
// //
const defaultData = { const defaultData = {
start_time: moment().subtract('days').startOf('day').format("YYYY-MM-DD"),
end_time: moment().endOf("day").format("YYYY-MM-DD"),
start_time: moment().subtract(1, 'days').startOf('day').format("YYYY-MM-DD"),
end_time: moment().subtract(1, 'days').endOf("day").format("YYYY-MM-DD"),
car_parking_type: '3', car_parking_type: '3',
operator_id: '0', operator_id: '0',
area_id: '0', area_id: '0',

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

@ -24,8 +24,8 @@ function ParkingAlyOverview() {
const [areaList, setAreaList] = useState([]); const [areaList, setAreaList] = useState([]);
// //
const defaultData = { const defaultData = {
start_time: moment().subtract('days').startOf('day').format("YYYY-MM-DD"),
end_time: moment().endOf("day").format("YYYY-MM-DD"),
start_time: moment().subtract(1, 'days').startOf('day').format("YYYY-MM-DD"),
end_time: moment().subtract(1, 'days').endOf("day").format("YYYY-MM-DD"),
operator_id: '0', operator_id: '0',
area_id: '0', area_id: '0',
date_type: '1', date_type: '1',

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

@ -19,8 +19,8 @@ function ParkingAlyPeriod() {
const [areaList, setAreaList] = useState([]); const [areaList, setAreaList] = useState([]);
// //
const defaultData = { const defaultData = {
start_time: moment().subtract('days').startOf('day').format("YYYY-MM-DD"),
end_time: moment().endOf("day").format("YYYY-MM-DD"),
start_time: moment().subtract(1, 'days').startOf('day').format("YYYY-MM-DD"),
end_time: moment().subtract(1, 'days').endOf("day").format("YYYY-MM-DD"),
operator_id: '0', operator_id: '0',
area_id: '0', area_id: '0',
car_parking_type: '3', car_parking_type: '3',

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

@ -23,8 +23,8 @@ function ParkingAlyReport() {
const [areaList, setAreaList] = useState([]); const [areaList, setAreaList] = useState([]);
// //
const defaultData = { const defaultData = {
start_time: moment().subtract('days').startOf('day').format("YYYY-MM-DD"),
end_time: moment().endOf("day").format("YYYY-MM-DD"),
start_time: moment().subtract(1, 'days').startOf('day').format("YYYY-MM-DD"),
end_time: moment().subtract(1, 'days').endOf("day").format("YYYY-MM-DD"),
date_type: '1', date_type: '1',
car_parking_type: '3', car_parking_type: '3',
operator_id: '0', operator_id: '0',

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

@ -24,8 +24,8 @@ function ParkingLiveData() {
const [areaList, setAreaList] = useState([]); const [areaList, setAreaList] = useState([]);
// //
const defaultData = { const defaultData = {
start_time: moment().subtract('days').startOf('day').format("YYYY-MM-DD"),
end_time: moment().endOf("day").format("YYYY-MM-DD"),
start_time: moment().subtract(1, 'days').startOf('day').format("YYYY-MM-DD"),
end_time: moment().subtract(1, 'days').endOf("day").format("YYYY-MM-DD"),
operator_id: '0', operator_id: '0',
area_id: '0', area_id: '0',
}; };

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

@ -23,8 +23,8 @@ function TemporaryParkStat() {
const [areaList, setAreaList] = useState([]); const [areaList, setAreaList] = useState([]);
// //
const defaultData = { const defaultData = {
start_time: moment().subtract('days').startOf('day').format("YYYY-MM-DD"),
end_time: moment().endOf("day").format("YYYY-MM-DD"),
start_time: moment().subtract(1, 'days').startOf('day').format("YYYY-MM-DD"),
end_time: moment().subtract(1, 'days').endOf("day").format("YYYY-MM-DD"),
car_parking_type: '3', car_parking_type: '3',
operator_id: '0', operator_id: '0',
area_id: '0', area_id: '0',

27
src/pages/DataAnalysisPrediction/ParkingIncomeAly/ArrearageAly/PlateArrear/index.jsx

@ -194,7 +194,7 @@ const ModalDetail = (props) => {
}) })
const [pageInfo, setPageInfo] = useState({ const [pageInfo, setPageInfo] = useState({
pn: 1, pn: 1,
length: 10
length: 15
}) })
const tableColumns = [ const tableColumns = [
@ -232,19 +232,28 @@ const ModalDetail = (props) => {
const paginationProps = { const paginationProps = {
className: "pagination-common", className: "pagination-common",
showQuickJumper: true,
// showQuickJumper: true,
showSizeChanger: true, showSizeChanger: true,
current: pageInfo.pn, current: pageInfo.pn,
showTotal: (total) => `${total} 条数据`,
total: resultData?.totalRecords, total: resultData?.totalRecords,
pageSize: pageInfo.length, pageSize: pageInfo.length,
pageSizeOptions: Array.from( pageSizeOptions: Array.from(
new Set([...[15], ...(dictionary?.pageSizeOptions || [])]) new Set([...[15], ...(dictionary?.pageSizeOptions || [])])
), ),
onChange: (current, size) => { onChange: (current, size) => {
setPageInfo({
...pageInfo,
...{ pn: current, length: size }
});
//
if (size != pageInfo.length) {
setPageInfo({
...pageInfo,
...{ pn: 1, length: size }
});
} else { //
setPageInfo({
...pageInfo,
...{ pn: current, length: size }
});
}
} }
} }
@ -255,7 +264,7 @@ const ModalDetail = (props) => {
setTableLoading(false) setTableLoading(false)
setResultData({ setResultData({
list: res.data, list: res.data,
totalRecords: res.totalRecords
totalRecords: Number(res.totalRecords || 0)
}) })
} }
}) })
@ -279,7 +288,7 @@ const ModalDetail = (props) => {
className="yisa-modal detail-modal" className="yisa-modal detail-modal"
title={"弹窗详情"} title={"弹窗详情"}
open={visible} open={visible}
width={700}
width={1100}
onCancel={onCancel} onCancel={onCancel}
onOk={onOk} onOk={onOk}
> >
@ -295,7 +304,7 @@ const ModalDetail = (props) => {
dataSource={resultData?.list || []} dataSource={resultData?.list || []}
columns={tableColumns} columns={tableColumns}
pagination={false} pagination={false}
scroll={{y: 200}}
scroll={{y: 500}}
loading={tableLoading} loading={tableLoading}
/> />
<Pagination {...paginationProps} className="pagination-common" /> <Pagination {...paginationProps} className="pagination-common" />

25
src/pages/DataAnalysisPrediction/ParkingOverview/index.scss

@ -464,6 +464,31 @@ $color-primary : var(--color-primary);
.bsdsj { .bsdsj {
background: rgba(1, 5, 14, 0.64); background: rgba(1, 5, 14, 0.64);
padding-bottom: 4px; padding-bottom: 4px;
position: relative;
.pos_zs {
position: absolute;
top: 5px;
right: 0;
border: 1px solid rgba(117,
221,
255, .5);
;
border-radius: 4px;
display: flex;
overflow: hidden;
span {
padding: 2px 3px;
cursor: pointer;
}
.qse {
background-color: rgba(117,
221,
255, .3);
}
}
} }
.day_select { .day_select {

84
src/pages/DataAnalysisPrediction/ParkingOverview/loadable.jsx

@ -394,6 +394,8 @@ const ParkingOverview = connect(function mapStateToProps(state) {
const [BoOpen, setBoOpen] = useState(false); const [BoOpen, setBoOpen] = useState(false);
// //
const [BoOpenDetail, setBoOpenDetail] = useState(false); const [BoOpenDetail, setBoOpenDetail] = useState(false);
//
const [Roadturn, setRoadturn] = useState(true);
// //
const [Yunying, setYunying] = useState([]); const [Yunying, setYunying] = useState([]);
@ -773,7 +775,7 @@ const ParkingOverview = connect(function mapStateToProps(state) {
show: false, show: false,
boxHeight: boxHeight, // boxHeight: boxHeight, //
left: 0, left: 0,
top: 0, //3d
top: 24, //3d
viewControl: { viewControl: {
//3d //3d
alpha: 30, // alpha: 30, //
@ -1049,11 +1051,13 @@ const ParkingOverview = connect(function mapStateToProps(state) {
{ {
key: "", key: "",
value: 0, value: 0,
value_t: 0,
}, },
] ]
) => { ) => {
// //
let data = datas.sort((a, b) => a.key - b.key);
let data = datas;
// .sort((a, b) => a.key - b.key);
setRightThree({ setRightThree({
title: { title: {
text: "", text: "",
@ -1173,7 +1177,7 @@ const ParkingOverview = connect(function mapStateToProps(state) {
itemStyle: { itemStyle: {
color: "rgba(13,225,250, 1)", // 线 color: "rgba(13,225,250, 1)", // 线
}, },
data: data.map((ele) => ele.value),
data: data.map((ele) => ele.value_t),
}, },
{ {
name: "实收", name: "实收",
@ -1190,7 +1194,7 @@ const ParkingOverview = connect(function mapStateToProps(state) {
itemStyle: { itemStyle: {
color: "rgba(235, 39, 39,1)", // 线 color: "rgba(235, 39, 39,1)", // 线
}, },
data: data.map((ele) => ele.value + 100),
data: data.map((ele) => ele.value),
}, },
], ],
grid: { grid: {
@ -1448,7 +1452,7 @@ const ParkingOverview = connect(function mapStateToProps(state) {
} }
); );
}; };
//top5
//--
const GetrateRank = (val) => { const GetrateRank = (val) => {
ajax.ParkingOverview.GetrateRank({ ajax.ParkingOverview.GetrateRank({
dateType: val, dateType: val,
@ -1470,6 +1474,29 @@ const ParkingOverview = connect(function mapStateToProps(state) {
} }
); );
}; };
//--
const GetParkoverview = (val) => {
ajax.ParkingOverview.GetParkoverview({
dateType: val,
areaType: CarRoad[CarShow]?.type,
value: CarRoad[CarShow]?.value,
}).then(
(res) => {
if (parseInt(res?.status) === 20000) {
setDataTop(res?.data);
// getRevenueOption(res.data || []);
} else {
message.error(res?.message);
}
setLoading(true);
},
(err) => {
console.log(err);
setLoading(true);
}
);
};
//- //-
const GetincomeType = (val, item) => { const GetincomeType = (val, item) => {
ajax.ParkingOverview.GetincomeType({ ajax.ParkingOverview.GetincomeType({
@ -1516,7 +1543,7 @@ const ParkingOverview = connect(function mapStateToProps(state) {
} }
); );
}; };
//-
//-
const GetParkparkIncomeRank = (val, item) => { const GetParkparkIncomeRank = (val, item) => {
ajax.ParkingOverview.GetParkparkIncomeRank({ ajax.ParkingOverview.GetParkparkIncomeRank({
type: val, type: val,
@ -1655,6 +1682,7 @@ const ParkingOverview = connect(function mapStateToProps(state) {
GetUseInfo(RoadSelect); GetUseInfo(RoadSelect);
GetRevenueAnalysis(RoadSelect, "1"); GetRevenueAnalysis(RoadSelect, "1");
if (CarRoad[CarShow]?.type == 2) { if (CarRoad[CarShow]?.type == 2) {
setRoadturn(true);
GetrateRank("1"); GetrateRank("1");
GetincomeType(RoadSelect, "1"); GetincomeType(RoadSelect, "1");
GetOverviewData(RoadSelect); GetOverviewData(RoadSelect);
@ -1935,11 +1963,30 @@ const ParkingOverview = connect(function mapStateToProps(state) {
<div className="bsdsj"> <div className="bsdsj">
<div className="pkh_title"> <div className="pkh_title">
{CarRoad[CarShow]?.type == 2 {CarRoad[CarShow]?.type == 2
? "收费员排行Top5"
? "周转率收费率排行榜"
: "路段周转次数排行榜"} : "路段周转次数排行榜"}
</div> </div>
{CarRoad[CarShow]?.type == 2 ? ( {CarRoad[CarShow]?.type == 2 ? (
""
<div className="pos_zs">
<span
className={Roadturn ? "qse" : ""}
onClick={() => {
setRoadturn(true);
GetrateRank("1");
}}
>
周转率
</span>
<span
className={Roadturn ? "" : "qse"}
onClick={() => {
setRoadturn(false);
GetParkoverview("1");
}}
>
收费率
</span>
</div>
) : ( ) : (
<div className="day_select"> <div className="day_select">
{Dayfour.map((ele) => { {Dayfour.map((ele) => {
@ -1978,7 +2025,7 @@ const ParkingOverview = connect(function mapStateToProps(state) {
<span> <span>
{CarRoad[CarShow]?.type == 2 {CarRoad[CarShow]?.type == 2
? ele.rate || 0 ? ele.rate || 0
: `${ele.paid_amount || 0}`}
: `${ele.total || 0}`}
</span> </span>
</div> </div>
<Progress <Progress
@ -1987,11 +2034,8 @@ const ParkingOverview = connect(function mapStateToProps(state) {
strokeWidth={6} strokeWidth={6}
percent={ percent={
CarRoad[CarShow]?.type == 2 CarRoad[CarShow]?.type == 2
? ele?.rate?.slice(0, ele.rate.length - 1) || 0
: getPercentage(
ele.paid_amount || 0,
DataTop[0].paid_amount
)
? getPercentage(ele.rate || 0, DataTop[0].rate) || 0
: getPercentage(ele.total || 0, DataTop[0].total)
} }
/> />
</div> </div>
@ -2030,25 +2074,19 @@ const ParkingOverview = connect(function mapStateToProps(state) {
<div className="tpph topt"> <div className="tpph topt">
{/* <img src={TOP2} alt="" /> */} {/* <img src={TOP2} alt="" /> */}
<span>TOP2</span> <span>TOP2</span>
<p>
{Cartop[1]?.rate || 0}/{Cartop[1]?.rate || 0}
</p>
<p>收费率{Cartop[1]?.rate || 0}</p>
<div title={Cartop[1]?.name || ""}>{Cartop[1]?.name || ""}</div> <div title={Cartop[1]?.name || ""}>{Cartop[1]?.name || ""}</div>
</div> </div>
<div className="tpph topo"> <div className="tpph topo">
{/* <img src={TOP1} alt="" /> */} {/* <img src={TOP1} alt="" /> */}
<span>TOP1</span> <span>TOP1</span>
<p>
{Cartop[0]?.rate || 0}/{Cartop[0]?.rate || 0}
</p>
<p>收费率{Cartop[0]?.rate || 0}</p>
<div title={Cartop[0]?.name || ""}>{Cartop[0]?.name || ""}</div> <div title={Cartop[0]?.name || ""}>{Cartop[0]?.name || ""}</div>
</div> </div>
<div className="tpph tops"> <div className="tpph tops">
{/* <img src={TOP3} alt="" /> */} {/* <img src={TOP3} alt="" /> */}
<span>TOP3</span> <span>TOP3</span>
<p>
{Cartop[2]?.rate || 0}/{Cartop[2]?.rate || 0}
</p>
<p>收费率{Cartop[2]?.rate || 0}</p>
<div title={Cartop[2]?.name || ""}>{Cartop[2]?.name || ""}</div> <div title={Cartop[2]?.name || ""}>{Cartop[2]?.name || ""}</div>
</div> </div>
</div> </div>

1
src/pages/FinancialMgm/SettleBill/GeneralBusiness/loadable.jsx

@ -90,6 +90,7 @@ function GeneralBusiness() {
{ {
title: "支付商户", title: "支付商户",
dataIndex: "tenantName", dataIndex: "tenantName",
width: 120,
key: "tenantName", key: "tenantName",
align: "center", align: "center",
}, },

2
src/pages/InRoadMgm/EquipmentMgm/BarMgm/loadable.jsx

@ -413,7 +413,7 @@ function Fence(props) {
imgno={false} imgno={false}
/> />
<ImportBtn <ImportBtn
url="/api/bpm/device/import_pole_position"
url="/PMS/api/bpm/device/import_pole_position"
templateName="导入杆位模板.csv" templateName="导入杆位模板.csv"
templateLink={importTemplateLink} templateLink={importTemplateLink}
onOk={() => handleUploaded()} onOk={() => handleUploaded()}

17
src/pages/InRoadMgm/EquipmentMgm/EquipmentBrand/loadable.jsx

@ -430,7 +430,10 @@ function Fence(props) {
<Form.Item <Form.Item
label={"品牌编码"} label={"品牌编码"}
name={"code"} name={"code"}
rules={[{ required: true, message: '品牌编码不能为空' }]}
rules={[
{ required: true, message: '品牌编码不能为空' },
{ pattern: /^[^\u4e00-\u9fa5]+$/, message: '编码为英文或数字组合' }
]}
> >
<Input/> <Input/>
</Form.Item> </Form.Item>
@ -462,7 +465,11 @@ function Fence(props) {
<Form.Item <Form.Item
label={"电话"} label={"电话"}
name={"tel"} name={"tel"}
rules={[{ required: true, message: '电话不能为空' }]}
validateTrigger="onBlur"
rules={[
{ required: true, message: '电话不能为空' },
{ pattern: /^1[3456789]\d{9}$/, message: "电话格式有误" }
]}
> >
<Input/> <Input/>
</Form.Item> </Form.Item>
@ -471,7 +478,11 @@ function Fence(props) {
<Form.Item <Form.Item
label={"邮箱"} label={"邮箱"}
name={"email"} name={"email"}
rules={[{ required: true, message: '邮箱不能为空' }]}
validateTrigger="onBlur"
rules={[
{ required: true, message: '邮箱不能为空' },
{ type: 'email', message: '邮箱地址有误' },
]}
> >
<Input/> <Input/>
</Form.Item> </Form.Item>

6
src/pages/InRoadMgm/EquipmentMgm/EquipmentStatus/Device/index.jsx

@ -27,7 +27,7 @@ function Road(props) {
device_name: '', device_name: '',
device_code: '', device_code: '',
pole_position_code: '', pole_position_code: '',
type_id: "0", //
type_id: -1, //
road_name: '', road_name: '',
operator: "0", // operator: "0", //
operate_status: -1, // operate_status: -1, //
@ -139,6 +139,10 @@ function Road(props) {
}, },
{ {
title: '设备厂商', title: '设备厂商',
dataIndex: 'brand_name',
},
{
title: '商户名称',
dataIndex: 'operqator', dataIndex: 'operqator',
}, },
{ {

16
src/pages/InRoadMgm/EquipmentMgm/MonitorEquipment/loadable.jsx

@ -85,10 +85,13 @@ function Fence(props) {
}) })
} }
const getBerthDataByNvr = (nvr) => { const getBerthDataByNvr = (nvr) => {
ajax.getBerthByNvr(Object.assign({}, {nvr_id: nvr}, editStatus ? {} :{is_bind_monitor_device: 1})).then((e) => {
if (e.status == 20000) {
setBerthData(e.data.map((item) => ({key: item.value, title: item.label})))
}
return new Promise((resolved, rejected) => {
ajax.getBerthByNvr(Object.assign({}, {nvr_id: nvr}, editStatus ? {} :{is_bind_monitor_device: 1})).then((e) => {
if (e.status == 20000) {
setBerthData(e.data.map((item) => ({key: item.value, title: item.label})))
resolved()
}
})
}) })
} }
const handleDelToServer = (id) => { const handleDelToServer = (id) => {
@ -108,8 +111,9 @@ function Fence(props) {
...item ...item
}) })
setEditId(item.id) setEditId(item.id)
getBerthDataByNvr(item.nvr_id)
setBerthSelectData(item.berth_ids ? item.berth_ids.split(',').map((v) => v) : [])
getBerthDataByNvr(item.nvr_id).then(() => {
setBerthSelectData(item.berth_ids ? item.berth_ids.split(',').map((v) => v) : [])
})
setEditModalVisible(true) setEditModalVisible(true)
} }
const editModalCancel = () => { const editModalCancel = () => {

7
src/pages/MerchantMgm/FunctionMgm/index.scss

@ -350,5 +350,12 @@ $color-primary : var(--color-primary);
.rest { .rest {
margin-left: 10px; margin-left: 10px;
} }
.bind-tree {
.ant-tree-list {
max-height: 200px;
overflow-y: auto;
@include scrollBar("", "");
}
}
} }
} }

1168
src/pages/MerchantMgm/FunctionMgm/loadable.jsx
File diff suppressed because it is too large
View File

2
src/pages/MerchantMgm/MerchantInfo/loadable.jsx

@ -897,7 +897,7 @@ const MerchantInfo = (props) => {
> >
<Cascader <Cascader
className="yisa-cascader" className="yisa-cascader"
placeholder="商户名称"
placeholder="请选择"
options={tenantNamePull} options={tenantNamePull}
/></Form.Item> /></Form.Item>
} }

4
src/pages/OperationCenter/ArrearsRecover/ArrearsCar/loadable.jsx

@ -203,8 +203,8 @@ function ArrearsCar() {
]; ];
const formSearch = [ const formSearch = [
{ {
name: "plate",
type: "Input",
name: "carId",
type: "PlateSelect",
label: "车牌号", label: "车牌号",
placeholder: "请输入车牌号", placeholder: "请输入车牌号",
}, },

2
src/pages/OperationCenter/CarMgm/CarInfo/loadable.jsx

@ -247,7 +247,7 @@ function CarInfo() {
name: "timePeriod", name: "timePeriod",
type: "RangePicker", type: "RangePicker",
label: "时间段", label: "时间段",
defaultValue: [moment().subtract(90, "day"), moment()],
defaultValue: [moment().subtract(89, "day"), moment()],
}, },
]; ];
//退 //退

3
src/pages/OperationCenter/UserMgm/UserInfo/index.scss

@ -5,6 +5,7 @@ $color-text: var(--color-text);
$color-primary: var(--color-primary); $color-primary: var(--color-primary);
.userinfo-box { .userinfo-box {
position: relative;
.ant-tabs-tabpane-hidden { .ant-tabs-tabpane-hidden {
display: none; display: none;
} }
@ -419,5 +420,5 @@ $color-primary: var(--color-primary);
background: #ffffff; background: #ffffff;
color: #000; color: #000;
cursor: pointer; cursor: pointer;
z-index: 9999;
z-index: 99;
} }

4
src/pages/OutRoadMgm/OutSegmentMgm/ChargeRulesMgm/AddModal.jsx

@ -98,12 +98,14 @@ function AddModal(props) {
} }
// //
function submit() { function submit() {
console.log(effectiveDateList)
return
form form
.validateFields() .validateFields()
.then((res) => { .then((res) => {
const params = { const params = {
...res, ...res,
property: effectiveDateList,// effectiveDateList[0]
property: effectiveDateList,// property: {rules:effectiveDateList},
}; };
fetch(params); fetch(params);
}) })

13
src/pages/OutRoadMgm/OutSegmentMgm/ChargeRulesMgm/EffectiveDate.jsx

@ -103,6 +103,7 @@ function EffectiveDate(props) {
return false; return false;
} }
function submit() { function submit() {
console.log(106,form.getFieldsValue())
form form
.validateFields() .validateFields()
.then((values) => { .then((values) => {
@ -119,12 +120,12 @@ function EffectiveDate(props) {
} }
return ( return (
<div>
<div className="effectivedate-box">
<Form <Form
form={form} form={form}
initialValues={{ initialValues={{
...record, ...record,
effective_date: moment(record.effective_date),
date: moment(record.date),
}} }}
disabled={disable} disabled={disable}
> >
@ -132,7 +133,7 @@ function EffectiveDate(props) {
<Col span={12}> <Col span={12}>
<Form.Item <Form.Item
label="生效日期" label="生效日期"
name="effective_date"
name="date"
rules={[{ required: true }]} rules={[{ required: true }]}
> >
<DatePicker /> <DatePicker />
@ -202,10 +203,10 @@ function EffectiveDate(props) {
}); });
const obj = { const obj = {
...form.getFieldsValue(), ...form.getFieldsValue(),
time_part_arr: _timePartList,
details: _timePartList,
}; };
if (obj.effective_date !== void 0) {
obj.effective_date = obj.effective_date.format("YYYY-MM-DD");
if (obj.date !== void 0) {
obj.date = obj.date.format("YYYY-MM-DD");
} }
onChange(obj, itemKey); onChange(obj, itemKey);
setTimePartList(_timePartList); setTimePartList(_timePartList);

121
src/pages/OutRoadMgm/OutSegmentMgm/ChargeRulesMgm/TimePart.jsx

@ -23,7 +23,7 @@ function TimePart(props) {
} = props; } = props;
const record1 = { const record1 = {
"start": "00:00:00", "start": "00:00:00",
"end": "00:00:00",
"end": "13:00:00",
"limit": 0, "limit": 0,
"items": [ "items": [
{ {
@ -40,12 +40,97 @@ function TimePart(props) {
console.log(disable); console.log(disable);
const valueChange = (value, all) => { const valueChange = (value, all) => {
all.key = itemKey; all.key = itemKey;
if (all.time_part) {
all.start = moment(all.time_part[0]).format('HH:mm:ss')
all.end = moment(all.time_part[1]).format('HH:mm:ss')
delete all.time_part
}
if (all.type == 0) {
all.items = [
{
"type": all.type,
"threshold": 0,
"period": all.time_before_minute,
"unit": all.time_before_money,
"segment": all.time_before,
},
{
"type": 2,
"threshold": 0,
"period": all.time_after_minute,
"unit": all.time_after_money,
"segment": all.time_before,
},
]
delete all.type
delete all.time_before_minute
delete all.time_before_money
delete all.time_before
delete all.time_after_minute
delete all.time_after_money
} else if (all.type == 1) {
all.items = [
{
"type": all.type,
"threshold": 0,
"unit": all.unit,
},
]
delete all.type
delete all.unit
} else {
all.items = [
{
"type": all.type,
"threshold": 0,
"period": all.period,
"unit": all.unit,
"segment": all.segment
},
]
delete all.type
delete all.period
delete all.unit
delete all.segment
}
console.log(66, all)
onChange(all); onChange(all);
}; };
useEffect(() => {
if (!record.items) return
if (record.items[0]?.type == 0) {
form.setFieldsValue({
...record,
type: record.items[0].type,
"time_before": record.items[0].segment,
"time_before_money": record.items[0].unit,
"time_before_minute": record.items[0].period,
"time_after_money": record.items[1].unit,
"time_after_minute": record.items[1].period,
"limit": record.limit,
time_part: [
moment(record.start, "HH:mm:ss"),
moment(record.end, "HH:mm:ss"),
],
})
} else {
form.setFieldsValue({
...record,
type: record.items[0]?.type,
"unit": record.items[0]?.unit,
"period": record.items[0]?.period,
//segment:record.items[0].segment,
"limit": record.limit,
time_part: [
moment(record.start, "HH:mm:ss"),
moment(record.end, "HH:mm:ss"),
],
})
}
}, [])
console.log(30, record) console.log(30, record)
return ( return (
<div>
<div className="timepart-box">
<Form <Form
form={form} form={form}
onValuesChange={valueChange} onValuesChange={valueChange}
@ -65,7 +150,7 @@ function TimePart(props) {
<Row gutter={[30]}> <Row gutter={[30]}>
<Col span={16}> <Col span={16}>
<Form.Item label={`时段${index}`} name="time_part"> <Form.Item label={`时段${index}`} name="time_part">
<TimePicker.RangePicker style={{ width: "50%" }} order={false} />
<TimePicker.RangePicker style={{ width: "50%" }} order={false} secondStep={60} />
</Form.Item> </Form.Item>
</Col> </Col>
<Col span={8}> <Col span={8}>
@ -77,13 +162,13 @@ function TimePart(props) {
</Col> </Col>
<Col span={24}> <Col span={24}>
<Form.Item label={`区间${index}`} name="interval" initialValue={1}>
<Form.Item label={`区间${index}`} name="type" initialValue={1}>
<Select <Select
style={{ width: "20%" }} style={{ width: "20%" }}
options={[ options={[
{ {
label: "基础时段", label: "基础时段",
value: 1,
value: 0,
}, },
{ {
label: "周期计价", label: "周期计价",
@ -91,7 +176,7 @@ function TimePart(props) {
}, },
{ {
label: "按次计价", label: "按次计价",
value: 3,
value: 1,
}, },
]} ]}
/> />
@ -99,12 +184,12 @@ function TimePart(props) {
</Col> </Col>
<Col span={24}> <Col span={24}>
<Form.Item <Form.Item
shouldUpdate={(prev, next) => prev.interval !== next.interval}
shouldUpdate={(prev, next) => prev.type !== next.type}
> >
{({ getFieldValue }) => { {({ getFieldValue }) => {
const type = getFieldValue("interval");
const type = getFieldValue("type");
switch (type) { switch (type) {
case 1:
case 0:
return ( return (
<> <>
<Input.Group compact> <Input.Group compact>
@ -150,18 +235,18 @@ function TimePart(props) {
case 2: case 2:
return ( return (
<Input.Group compact> <Input.Group compact>
<Form.Item name="time_money" noStyle>
<Form.Item name="unit" noStyle>
<Input addonAfter={"元"} style={{ width: "20%" }} /> <Input addonAfter={"元"} style={{ width: "20%" }} />
</Form.Item> </Form.Item>
<div className="wenzi">/</div> <div className="wenzi">/</div>
<Form.Item name="time_minute" noStyle>
<Form.Item name="period" noStyle>
<Input addonAfter={"分钟"} style={{ width: "20%" }} /> <Input addonAfter={"分钟"} style={{ width: "20%" }} />
</Form.Item> </Form.Item>
</Input.Group> </Input.Group>
); );
case 3:
case 1:
return ( return (
<Form.Item name="money_per_time">
<Form.Item name="unit">
<Input addonAfter={"元/次"} style={{ width: "20%" }} /> <Input addonAfter={"元/次"} style={{ width: "20%" }} />
</Form.Item> </Form.Item>
); );
@ -170,16 +255,16 @@ function TimePart(props) {
</Form.Item> </Form.Item>
</Col> </Col>
<Form.Item <Form.Item
shouldUpdate={(prev, next) => prev.interval !== next.interval}
shouldUpdate={(prev, next) => prev.type !== next.type}
> >
{({ getFieldValue }) => { {({ getFieldValue }) => {
return ( return (
(getFieldValue("interval") === 1 ||
getFieldValue("interval") === 2) && (
(getFieldValue("type") === 0 ||
getFieldValue("type") === 2) && (
<Col span={24}> <Col span={24}>
<Form.Item <Form.Item
label="时段最高收费金额" label="时段最高收费金额"
name="time_max_money"
name="limit"
rules={[{ required: true }]} rules={[{ required: true }]}
> >
<Input /> <Input />

5
src/pages/OutRoadMgm/OutSegmentMgm/ChargeRulesMgm/index.scss

@ -88,4 +88,9 @@ $color-primary: var(--color-primary);
.wenzi { .wenzi {
margin: -5px 13px 0 5px !important; margin: -5px 13px 0 5px !important;
font-size: 25px; font-size: 25px;
}
.effectivedate-box {
border: 1px solid #8d8d8d;
padding: 12px;
margin-bottom: 24px;
} }

126
src/pages/OutRoadMgm/OutSegmentMgm/ChargeRulesMgm/loadable.jsx

@ -71,61 +71,77 @@ function ChargeRulesMgm() {
<a <a
onClick={() => { onClick={() => {
ajax.getChargeRuleInfo({ id: record.id }).then((res) => { ajax.getChargeRuleInfo({ id: record.id }).then((res) => {
// res = {
// "status": 20000,
// "message": "success",
// "data": {
// "feeName": "",
// "creatorName": "",
// "createdTime": "2022-12-13 11:51:23",
// "feeCode": "202212131150",
// "operationId": "1777347430730653926",
// "operationName": "",
// "description": "15420-1010 \n5/8/10/\n",
// "limit24hour": 0,
// "freeTime": 15,
// "freeTimeAbleF": [
// 1
// ],
// "freeTimeAbleFName": "",
// "typeF": 0,
// "typeFName": "",
// "evFreeTime": 0,
// "evFreeTimeAble": 0,
// "evFreeTimeAbleName": "",
// "property": {
// "id": 120,
// "freeTime": 15,
// "freeTimeAble": 1,
// "evFreeTime": 0,
// "evFreeTimeAble": 0,
// "limit24hour": "",
// "rules": [
// {
// "unitDelay": 1,
// "unitUp": 1,
// "date": "2022-12-13",
// "details": [
// {
// "start": "00:00:00",
// "end": "00:00:00",
// "limit": 0,
// "items": [
// {
// "type": 2,
// "threshold": 0,
// "period": 60,
// "unit": 8,
// "segment": 1440
// }
// ]
// }
// ]
// }
// ]
// }
// }
// }
res = {
"status": 20000,
"message": "success",
"data": {
"feeName": "凤凰山公园停车场旺季中型车",
"creatorName": "耿亮",
"createdTime": "2022-12-13 11:51:23",
"feeCode": "202212131150",
"operationId": "1777347430730653926",
"operationName": "公用事业集团",
"description": "免费15分钟4月20日-10月10日, \n小型车5元/小时,中型车8元/小时,大型车10元/小时\n",
"limit24hour": 0,
"freeTime": 15,
"freeTimeAbleF": [
1
],
"freeTimeAbleFName": "是",
"typeF": 0,
"typeFName": "否",
"evFreeTime": 0,
"evFreeTimeAble": 0,
"evFreeTimeAbleName": "否",
"property": {
"id": 120,
"freeTime": 15,
"freeTimeAble": 1,
"evFreeTime": 0,
"evFreeTimeAble": 0,
"limit24hour": "",
"rules": [
{
"unitDelay": 1,
"unitUp": 1,
"date": "2022-12-13",
"details": [
{
"start": "07:00:00",
"end": "13:00:00",
"limit": 0,
// "items": [
// {
// "type": 1,
// "threshold": 0,
// "period": 60,
// "unit": 8,
// "segment": 1440
// },
// {
// "type": 1,
// "threshold": 0,
// "period": 60,
// "unit": 8,
// "segment": 1440
// }
// ]
"items": [
{
"type": 1,
"threshold": 0,
"period": 60,
"unit": 2,
"segment": 120
},
]
}
]
}
]
}
}
}
if (res.status === 20000) { if (res.status === 20000) {
console.log(res.data); console.log(res.data);
setAddModal({ setAddModal({

2
src/pages/SystemMgm/AdminMgm/loadable.jsx

@ -566,6 +566,8 @@ function AdminMgm(props) {
getData(formData) getData(formData)
setGetRoleStatus(true) setGetRoleStatus(true)
setGetAreaStatus(false) setGetAreaStatus(false)
} else {
message.error(res.message)
} }
}) })
} }

6
src/pages/SystemMgm/AreaManage/loadable.jsx

@ -226,9 +226,11 @@ function AreaManage() {
areaTree.length ? ( areaTree.length ? (
<Tree <Tree
treeData={areaTree} treeData={areaTree}
height={770}
titleRender={treeTitleRender} titleRender={treeTitleRender}
autoExpandParent={true}
defaultExpandAll={true}
// autoExpandParent={true}
defaultExpandedKeys={["0-0"]}
// defaultExpandAll={true}
fieldNames={{ fieldNames={{
title: 'name' title: 'name'
}} }}

11
src/pages/SystemMgm/OrgnizationMgm/loadable.jsx

@ -543,13 +543,13 @@ function OrgnizationMgm() {
{ 'label': '添加', 'key': 'add' }, { 'label': '添加', 'key': 'add' },
{ 'label': '编辑', 'key': 'edit' }, { 'label': '编辑', 'key': 'edit' },
], ],
onClick: ({key}, _) => {
onClick: ({key, domEvent}, _) => {
if (key == 'add') { if (key == 'add') {
handleOrgAdd(undefined, { level, pid, isTop: false, id, name })
handleOrgAdd(domEvent, { level, pid, isTop: false, id, name })
} else if (key == 'edit') { } else if (key == 'edit') {
handleOrgEdit(undefined, { level, pid, isTop: true, id, name })
handleOrgEdit(domEvent, { level, pid, isTop: true, id, name })
} else if (key == 'del') { } else if (key == 'del') {
handleOrgDel(undefined, { name, id })
handleOrgDel(domEvent, { name, id })
} }
} }
}} }}
@ -583,7 +583,8 @@ function OrgnizationMgm() {
<Tree <Tree
defaultSelectedKeys={defaultTreeActiveKey} defaultSelectedKeys={defaultTreeActiveKey}
treeData={orgTree} treeData={orgTree}
defaultExpandAll={true}
// defaultExpandAll={true}
defaultExpandedKeys={["0-0"]}
titleRender={treeTitleRender} titleRender={treeTitleRender}
onSelect={handleTreeClick} onSelect={handleTreeClick}
fieldNames={{ fieldNames={{

16
src/services/ParkingOverview/index.js

@ -106,10 +106,10 @@ export default {
data: params, data: params,
}); });
}, },
//概览-收费top5
//泊车公司-概览-周转率
GetrateRank: (params) => { GetrateRank: (params) => {
return ajax({ return ajax({
url: "/api/ana/overview/rateRank",
url: "/api/ana/overview/roadTurnoverRate",
type: "get", type: "get",
data: params, data: params,
}); });
@ -130,10 +130,10 @@ export default {
data: params, data: params,
}); });
}, },
//概览-车场收入排行榜
//区大屏-路段周转次数排行榜
GetParkparkIncomeRank: (params) => { GetParkparkIncomeRank: (params) => {
return ajax({ return ajax({
url: "/api/ana/overview/parkIncomeRank",
url: "/api/ana/overview/parkTurnoverRank",
type: "get", type: "get",
data: params, data: params,
}); });
@ -146,4 +146,12 @@ export default {
data: params, data: params,
}); });
}, },
//泊车公司-概览-路段收费率排行榜
GetParkoverview: (params) => {
return ajax({
url: "/api/ana/overview/roadChargeRateRank",
type: "get",
data: params,
});
},
}; };
Loading…
Cancel
Save