Browse Source

Merge branch 'develop' of http://120.27.195.166:3000/chenglb/PMS_Frontend_v1.0.0.git into develop

# Conflicts:
#	src/assets/css/mixin.scss
tags/PMS_V1.0.0_Alpha6
chenglb 1 year ago
parent
commit
709052eafe
  1. 3
      src/assets/css/mixin.scss
  2. 144
      src/assets/fonts/font_pda/demo_index.html
  3. 30
      src/assets/fonts/font_pda/iconfont.css
  4. 2
      src/assets/fonts/font_pda/iconfont.js
  5. 42
      src/assets/fonts/font_pda/iconfont.json
  6. BIN
      src/assets/fonts/font_pda/iconfont.ttf
  7. BIN
      src/assets/fonts/font_pda/iconfont.woff
  8. BIN
      src/assets/fonts/font_pda/iconfont.woff2
  9. BIN
      src/assets/images/search-map.png
  10. 4
      src/components/Export/ExportBtnNew/index.jsx
  11. 13
      src/components/SelectGaodeLngLat/index.jsx
  12. 3
      src/components/SelectGaodeLngLat/index.scss
  13. BIN
      src/components/SelectGaodeLngLat2/blue-point.png
  14. 231
      src/components/SelectGaodeLngLat2/index.jsx
  15. 29
      src/components/SelectGaodeLngLat2/index.scss
  16. 2
      src/components/index.jsx
  17. 2
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/CarTypeAly/loadable.jsx
  18. 30
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyDuration/loadable.jsx
  19. 4
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyOverview/index.scss
  20. 2
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyOverview/loadable.jsx
  21. 4
      src/pages/DataAnalysisPrediction/ParkingIncomeAly/ArrearageAly/PlateArrear/index.jsx
  22. 4
      src/pages/FinancialMgm/ExceptionDeal/DealRecordAudit/index.jsx
  23. 4
      src/pages/FinancialMgm/ExceptionDeal/DealRecordList/index.jsx
  24. 2
      src/pages/FinancialMgm/ExceptionDeal/StartExceptionDeal/index.jsx
  25. 2
      src/pages/FinancialMgm/OrderInquiry/OrderChangeInquiry/index.jsx
  26. 11
      src/pages/FinancialMgm/OrderInquiry/ParkingOrderInquiry/index.jsx
  27. 2
      src/pages/FinancialMgm/OrderInquiry/ProductOrderInquiry/index.jsx
  28. 12
      src/pages/InRoadMgm/EquipmentMgm/NvrMgm/loadable.jsx
  29. 4
      src/pages/InRoadMgm/InRoadOverview/loadable.jsx
  30. 2
      src/pages/InRoadMgm/PersonMgm/Performance/SalesStat/loadable.jsx
  31. 71
      src/pages/InRoadMgm/RecordInquiry/ParkRecordTotal/loadable.jsx
  32. 2
      src/pages/InRoadMgm/RoadMgm/ConfigRoad/loadable.jsx
  33. 3
      src/pages/MerchantMgm/FunctionMgm/loadable.jsx
  34. 3
      src/pages/NewEnergy/ChargeDeviceMgm/ElectricModal/loadable.jsx
  35. 4
      src/pages/NewEnergy/ChargeStationMgm/index.scss
  36. 45
      src/pages/NewEnergy/ChargeStationMgm/loadable.jsx
  37. 7
      src/pages/NewEnergy/ChargingMgm/BillingRule/index.scss
  38. 28
      src/pages/NewEnergy/ChargingMgm/BillingRule/loadable.jsx
  39. 3
      src/pages/NewEnergy/ChargingMgm/IllegalRuleConfigMgm/index.scss
  40. 18
      src/pages/NewEnergy/ChargingMgm/IllegalRuleConfigMgm/loadable.jsx
  41. 7
      src/pages/NewEnergy/ChargingMgm/OrderRuleMgm/index.scss
  42. 16
      src/pages/NewEnergy/ChargingMgm/OrderRuleMgm/loadable.jsx
  43. 26
      src/pages/NewEnergy/NewEnergyOverview/Map.jsx
  44. 18
      src/pages/NewEnergy/NewEnergyOverview/index.scss
  45. 10
      src/pages/NewEnergy/NewEnergyOverview/loadable.jsx
  46. 26
      src/pages/NewEnergy/RealtimeMonitor/ChargerMonitor/index.scss
  47. 8
      src/pages/NewEnergy/RealtimeMonitor/ChargerMonitor/loadable.jsx
  48. 8
      src/pages/OffPeak/OffPeakShareRecords/ShareParkMgm/infoModal/index.jsx
  49. 2
      src/pages/OutRoadMgm/OutPersonMgm/TollCollector/index.jsx
  50. 2
      src/pages/OutRoadMgm/OutPersonMgm/TransitionReport/index.jsx
  51. 2
      src/pages/OutRoadMgm/OutRemoteDevice/index.jsx
  52. 12
      src/pages/OutRoadMgm/OutSegmentMgm/OutSegment/loadable.jsx
  53. 5
      src/pages/SystemMgm/AreaManage/ModalAreaAdd/index.jsx
  54. 3
      src/pages/SystemMgm/BusinessConfig/BusinessConf/index.scss
  55. 2
      src/pages/SystemMgm/OrgnizationMgm/loadable.jsx
  56. 5
      src/pages/SystemMgm/RoleMgm/index.scss
  57. 4
      src/pages/SystemMgm/RoleMgm/loadable.jsx
  58. 2
      src/pages/SystemMgm/SystemLog/loadable.jsx
  59. 4
      src/services/InroadMgm/RoadMgm/RoadMgm.js

3
src/assets/css/mixin.scss

@ -18,8 +18,7 @@
height: 12px;
}
&::-webkit-scrollbar-thumb {
// background: #9da2ab;
background: #70798D;
background: #70798D;
border-radius: 6px;
}
}

144
src/assets/fonts/font_pda/demo_index.html
File diff suppressed because it is too large
View File

30
src/assets/fonts/font_pda/iconfont.css
File diff suppressed because it is too large
View File

2
src/assets/fonts/font_pda/iconfont.js
File diff suppressed because it is too large
View File

42
src/assets/fonts/font_pda/iconfont.json

@ -6,6 +6,48 @@
"description": "",
"glyphs": [
{
"icon_id": "705663",
"name": "定位",
"font_class": "dingwei",
"unicode": "e60d",
"unicode_decimal": 58893
},
{
"icon_id": "39156615",
"name": "定位-copy",
"font_class": "dingwei-copy",
"unicode": "e8c9",
"unicode_decimal": 59593
},
{
"icon_id": "39089076",
"name": "点位-有时间",
"font_class": "dianwei-youshijian",
"unicode": "e7a7",
"unicode_decimal": 59303
},
{
"icon_id": "39089078",
"name": "下班",
"font_class": "xiaban",
"unicode": "e7a8",
"unicode_decimal": 59304
},
{
"icon_id": "39089077",
"name": "上班",
"font_class": "shangban",
"unicode": "e7a9",
"unicode_decimal": 59305
},
{
"icon_id": "29284076",
"name": "点位",
"font_class": "dianwei",
"unicode": "e600",
"unicode_decimal": 58880
},
{
"icon_id": "14144510",
"name": "展开",
"font_class": "zhankai1",

BIN
src/assets/fonts/font_pda/iconfont.ttf

BIN
src/assets/fonts/font_pda/iconfont.woff

BIN
src/assets/fonts/font_pda/iconfont.woff2

BIN
src/assets/images/search-map.png

After

Width: 20  |  Height: 20  |  Size: 600 B

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

@ -170,9 +170,9 @@ const ExportBtn = forwardRef((props, ref) => {
else if (checkedType == 1) {
const { pn, length, page_size, size } = postdata.formData
if (isTableModule) {
onOk((pn - 1) * (length || page_size || size) + 1, pn * (length || page_size || size))
onOk((pn - 1) * (length || page_size || size) + 1, (pn * (length || page_size || size) < totalRecords) ? pn * (length || page_size || size) : totalRecords)
} else {
startExport((pn - 1) * (length || page_size || size) + 1, pn * (length || page_size || size) , exportType == "hasImg" ? 1 : 0)
startExport((pn - 1) * (length || page_size || size) + 1, (pn * (length || page_size || size) < totalRecords) ? pn * (length || page_size || size) : totalRecords , exportType == "hasImg" ? 1 : 0)
}
}
//

13
src/components/SelectGaodeLngLat/index.jsx

@ -13,7 +13,6 @@ function SelectGaodeLngLat(props) {
const {
getLntLat = () => { },
close,
hide,
lngLatVisible = false,
open,
onChange = () => { },
@ -136,7 +135,7 @@ function SelectGaodeLngLat(props) {
<Button
type="primary"
onClick={() => {
hide();
close();
getLocationMessage();
}}
>
@ -169,7 +168,7 @@ function ModalMap(props) {
const [map, setMap] = useState(null);
const [Marker, setMarker] = useState(null);
const mapRef = useRef(null);
const [latLng, setLatLng] = useState([])
const [point, setPoint] = useState([])
const initMap = () => {
// console.log(mapConfig);
// const _map = L.map("mapid", {
@ -208,19 +207,19 @@ function ModalMap(props) {
setLnglat([e.lnglat.lng.toFixed(4), e.lnglat.lat.toFixed(4)]);
getLntLat([e.lnglat.lng.toFixed(4), e.lnglat.lat.toFixed(4)]);
if (isClickMarker) {
setLatLng([e.lnglat.lng.toFixed(4), e.lnglat.lat.toFixed(4)])
setPoint([e.lnglat.lng.toFixed(4), e.lnglat.lat.toFixed(4)])
}
})
mapRef.current = map
};
useEffect(() => {
setLatLng(markerPoint)
setPoint(markerPoint)
}, [markerPoint]);
useEffect(() => {
if (map) {
addMarker(latLng); //
addMarker(point); //
}
}, [latLng]);
}, [point]);
const markerContent = `<div class="custom-content-marker">
<img src='${Rerm}' />
</div>`;

3
src/components/SelectGaodeLngLat/index.scss

@ -2,6 +2,9 @@
}
.map-modal {
.ant-modal-body {
border-radius: 4px;
}
.ant-modal-close-x {
width: 30px;
height: 30px;

BIN
src/components/SelectGaodeLngLat2/blue-point.png

After

Width: 48  |  Height: 54  |  Size: 2.3 KiB

231
src/components/SelectGaodeLngLat2/index.jsx

@ -0,0 +1,231 @@
import React, { useState, useEffect, useRef } from "react";
import { Button, Input, Modal, message, AutoComplete } from "antd";
import L from "leaflet";
import "leaflet/dist/leaflet.css";
import "leaflet.chinatmsproviders";
import ajax from "@/services";
import "./index.scss";
import Rerm from "./blue-point.png";
let timer = null;
function SelectGaodeLngLat(props) {
const {
getLntLat = () => { },
onChange = () => { },
_lngLat = [], //
_address = "", //
} = props;
const mapConfig = {
center: sysConfig.map.center,
zoom: sysConfig.map.zoom,
zooms: sysConfig.map.zooms,
maxZoom: sysConfig.map.zooms[1],
minZoom: sysConfig.map.zooms[0],
mapTileHost: sysConfig.map.mapTileHost,
zoomOffset: sysConfig.map.zoomOffset,
mapTileType: sysConfig.map.mapTileType,
};
const [visible, setVisible] = useState(false);
const [lnglat, setLnglat] = useState([]);
const [address, setAddress] = useState("");
const [searchLnglatValue, setSearchLnglatValue] = useState([]);
const [getLngLabel, setGetLngLabel] = useState([])
const [map, setMap] = useState(null);
const [markers, setMarkers] = useState(null);
const mapRef = useRef(null);
const searchLnglat = (values) => {
clearTimeout(timer);
timer = setTimeout(() => {
ajax.handleLng({
keywords: values,
}).then(
(res) => {
if (parseInt(res?.status) === 20000) {
setGetLngLabel(
res?.data.map((ele) => {
return {
...ele,
label: (
<div className="labds">
<span>{ele.label}</span>
</div>
),
value: ele.label,
values: ele.value
};
})
);
} else {
message.error(res?.message);
}
},
(err) => {
console.log(err);
}
);
}, 1000);
};
//
const onSelect = (data) => {
let add = getLngLabel.filter((ele) => ele.value == data)[0] || [];
setLnglat([add.lng, add.lat]);
};
function getLocationMessage(v) {
// const lat_lng = lnglat.reverse().join(",");
const lat_lng = v ? v.join(",") : lnglat.join(",");
ajax.getLocationNameByLngLat({ lat_lng }).then((res) => {
if (res.status === 20000) {
setAddress(res.data.address);
} else {
message.error(res.message);
}
});
}
//
const open = () => {
setVisible(true)
}
//
const save = () => {
setVisible(false)
onChange(address);
getLntLat(lnglat);
getLocationMessage();
}
//
const initMap = () => {
let _map = new AMap.Map("mapid", {
resizeEnable: true,
layers: [
new AMap.TileLayer.Satellite(),
new AMap.TileLayer.RoadNet()
]
});
_map.setCenter([mapConfig.center[1], mapConfig.center[0]], mapConfig.zoom);
setMap(_map)
if (_lngLat && _lngLat.length) {
let marker = new AMap.Marker({
position: new AMap.LngLat(parseFloat(_lngLat[0]), parseFloat(_lngLat[1])),
content: markerContent,
offset: new AMap.Pixel(-24, -45),
});
_map.add(marker);
setMarkers(marker);
setTimeout(() => {
_map.setCenter(new AMap.LngLat(parseFloat(_lngLat[0]), parseFloat(_lngLat[1])));
}, 800);
}
_map.on('click', function (e) {
setLnglat([e.lnglat.lng.toFixed(4), e.lnglat.lat.toFixed(4)]);
})
mapRef.current = map
};
const markerContent = `<div class="custom-content-marker">
<img src='${Rerm}' />
</div>`;
//
const addMarker = (data) => {
// console.log('marker',data);
if (markers) {
map.remove(markers);
}
if (data.length == 0) return
let marker = new AMap.Marker({
position: new AMap.LngLat(parseFloat(data[0]), parseFloat(data[1])),
content: markerContent,
offset: new AMap.Pixel(-24, -45),
});
map.add(marker);
setMarkers(marker);
setTimeout(() => {
map.setCenter(new AMap.LngLat(parseFloat(data[0]), parseFloat(data[1])));
}, 800);
};
useEffect(() => {
if (visible) {
setAddress(_address);
setLnglat(_lngLat);
setTimeout(() => {
initMap()
}, 500)
}
}, [visible]);
useEffect(() => {
lnglat?.length > 0 && getLocationMessage(lnglat)
if (map) {
addMarker(lnglat); //
}
}, [lnglat]);
useEffect(() => {
setTimeout(() => {
if (searchLnglatValue.length === 0) return;
mapRef.current.setView(searchLnglatValue, 13);
}, 800)
}, [searchLnglatValue]);
return (
<div className="SelectLnglat">
<Button
onClick={open}
type="primary"
>
打开
</Button>
<Modal
className="map-modal"
open={visible}
destroyOnClose
width={1000}
footer={false}
onCancel={() => { setVisible(false) }}
>
<div
style={{
width: "100%",
height: "500px",
}}
>
<div
id="mapid"
className="map"
style={{
height: "100%",
width: "100%",
}}
></div>
</div>
<div className="bottom-input">
<div className="input-search">
<AutoComplete
options={getLngLabel}
placeholder={address ? address : "请选择地址"}
onSearch={searchLnglat}
onSelect={onSelect}
// enterButton={""}
style={{ width: 300 }}
></AutoComplete>
</div>
<div className="result-search">
<label>已选择的经纬度:</label>
<Input value={lnglat} />
</div>
<div style={{ marginLeft: "40px" }}>
<Button
type="primary"
onClick={save}
>
保存
</Button>
</div>
</div>
</Modal>
</div>
);
}
export default SelectGaodeLngLat;

29
src/components/SelectGaodeLngLat2/index.scss

@ -0,0 +1,29 @@
.SelectLnglat {
}
.map-modal {
.ant-modal-body {
border-radius: 4px;
}
.ant-modal-close-x {
width: 30px;
height: 30px;
line-height: 30px;
}
}
.bottom-input {
display: flex;
margin: 10px 0 0 0;
.input-search {
margin: 0 10px 0 0;
width: 300px;
}
.result-search{
label{
width: 160px;
line-height: 32px;
height:32px;
}
display: flex;
}
}

2
src/components/index.jsx

@ -33,6 +33,7 @@ import TableModule from "./TableModule";
import TreeSelectGroup from "./TreeSelectGroup";
import SelectLntLat from "./SelectLngLat";
import SelectGaodeLngLat from "./SelectGaodeLngLat";
import SelectGaodeLngLat2 from "./SelectGaodeLngLat2";
import ImportBtn from './ImportBtn';
import QuickMenu from './QuickMenu';
import DataSelect from './DataSelect';
@ -82,6 +83,7 @@ export {
TreeSelectGroup,
SelectLntLat,
SelectGaodeLngLat,
SelectGaodeLngLat2,
ImportBtn,
QuickMenu,
DataSelect,

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

@ -104,7 +104,7 @@ function CarTypeAly() {
dataIndex: 'index',
key: 'index',
width: 150,
render: (text, record, index) => index + 1
render: (text, record, index) => pageInfo.pn ? index + 1 + (pageInfo.pn - 1) * pageInfo.page_size : index + 1
},
{
title: '区域',

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

@ -125,7 +125,7 @@ function ParkingAlyDuration() {
dataIndex: 'index',
key: 'index',
width: 100,
render: (text, record, index) => pageInfo.pn ? index + 1 + (pageInfo.pn - 1) * pageInfo.page_size : index + 1
render: (text, record, index) => pageCarInfo.pn ? index + 1 + (pageCarInfo.pn - 1) * pageCarInfo.page_size : index + 1
},
{
title: '停车场',
@ -1059,7 +1059,7 @@ function ParkingAlyDuration() {
exportUrl="/api/ana/dataanalysis/get_parking_duration_export"
pageName="parkingOverview"
postdata={{
formData: { ...defaultParams, ...pageInfo, export_type: 'all', area_id: sessionTabList?.show }
formData: { ...defaultParams, ...pageCarInfo, export_type: 'all', area_id: sessionTabList?.show }
}}
imgno={false}
/>
@ -1069,7 +1069,7 @@ function ParkingAlyDuration() {
activeKey={tabCarKey}
onChange={(key) => {
setTabCarKey(key);
setPageInfo({ ...pageInfo, ...{ pn: 1 } });
setPageCarInfo({ ...pageCarInfo, ...{ pn: 1 } });
getListData({ sort: 2 }, { pn: 1 })
}}
items={[
@ -1084,12 +1084,12 @@ function ParkingAlyDuration() {
<div className="btn">
<div onClick={() => {
message.success('升序');
setPageInfo({ ...pageInfo, ...{ pn: 1 } });
setPageCarInfo({ ...pageCarInfo, ...{ pn: 1 } });
getListData({ sort: 1 }, { pn: 1 })
}}></div>
<div onClick={() => {
message.success('降序');
setPageInfo({ ...pageInfo, ...{ pn: 1 } });
setPageCarInfo({ ...pageCarInfo, ...{ pn: 1 } });
getListData({ sort: 2 }, { pn: 1 })
}}></div>
</div>
@ -1104,13 +1104,13 @@ function ParkingAlyDuration() {
pagination={{
position: ["bottomCenter"],
total: tableCarData?.list?.area_count,
current: pageInfo.pn,
pageSize: pageInfo.page_size,
current: pageCarInfo.pn,
pageSize: pageCarInfo.page_size,
onChange: (page, pageSize) => {
setPageInfo({ pn: page, page_size: pageSize });
setPageCarInfo({ pn: page, page_size: pageSize });
},
onShowSizeChange: (current, size) => {
setPageInfo({ pn: current, page_size: size });
setPageCarInfo({ pn: current, page_size: size });
},
}}
size="middle"
@ -1124,12 +1124,12 @@ function ParkingAlyDuration() {
<div className="btn">
<div onClick={() => {
message.success('升序');
setPageInfo({ ...pageInfo, ...{ pn: 1 } });
setPageCarInfo({ ...pageCarInfo, ...{ pn: 1 } });
getListData({ sort: 1 }, { pn: 1 })
}}></div>
<div onClick={() => {
message.success('降序');
setPageInfo({ ...pageInfo, ...{ pn: 1 } });
setPageCarInfo({ ...pageCarInfo, ...{ pn: 1 } });
getListData({ sort: 2 }, { pn: 1 })
}}></div>
</div>
@ -1144,13 +1144,13 @@ function ParkingAlyDuration() {
pagination={{
position: ["bottomCenter"],
total: tableCarData?.list?.road_count,
current: pageInfo.pn,
pageSize: pageInfo.page_size,
current: pageCarInfo.pn,
pageSize: pageCarInfo.page_size,
onChange: (page, pageSize) => {
setPageInfo({ pn: page, page_size: pageSize });
setPageCarInfo({ pn: page, page_size: pageSize });
},
onShowSizeChange: (current, size) => {
setPageInfo({ pn: current, page_size: size });
setPageCarInfo({ pn: current, page_size: size });
},
}}
size="middle"

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

@ -5,7 +5,7 @@ $color-user-list-bg : var(--color-user-list-bg);
$color-text : var(--color-text);
$color-primary : var(--color-primary);
.parkaly-inquiry {
.parkaly-overview {
display: flex;
padding-top: 10px;
width: 100%;
@ -412,7 +412,7 @@ $color-primary : var(--color-primary);
}
}
.parkaly-box {
.parkaly-overview {
/*定义滚动条高宽及背景
高宽分别对应横竖滚动条的尺寸*/
::-webkit-scrollbar {

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

@ -492,7 +492,7 @@ function ParkingAlyOverview() {
}, []);
return (
<>
<div className="parkaly-inquiry">
<div className="parkaly-overview">
<div className="paid-search">
<div className="title">查询条件</div>
<div className="form-Wrap">

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

@ -186,7 +186,7 @@ const ModalDetail = (props) => {
})
const [formData, setFormData] = useState({
pn: 1,
length: 10,
length: 15,
plate_number: plate_number,
car_id: car_id
})
@ -278,7 +278,7 @@ const ModalDetail = (props) => {
if (visible) {
setFormData({
pn: 1,
length: 10,
length: 15,
car_id: car_id,
plate_number: plate_number
})

4
src/pages/FinancialMgm/ExceptionDeal/DealRecordAudit/index.jsx

@ -40,7 +40,7 @@ function DealRecordAudit() {
width: 60,
align: "center",
fixed: 'left',
render: (text, record, index) => index + 1,
render: (text, record, index) => index + 1 + formData.page_size * (formData.pn - 1),
},
{
title: "处理记录ID",
@ -235,7 +235,7 @@ function DealRecordAudit() {
};
ajax.getStartExceptionExamineAbnormal(_data).then((res) => {
setButtonLoad(false);
if (res.status == 20000 || res.status == 0) {
if (res.status == 20000) {
message.success(res?.message || "提交审核成功");
setRecordReviewModal({open: false, data: []});
$getTableList();

4
src/pages/FinancialMgm/ExceptionDeal/DealRecordList/index.jsx

@ -40,7 +40,7 @@ function DealRecordList() {
width: 60,
align: "center",
fixed: 'left',
render: (text, record, index) => index + 1,
render: (text, record, index) => index + 1 + formData.page_size * (formData.pn - 1),
},
{
title: "处理记录ID",
@ -198,7 +198,7 @@ function DealRecordList() {
const $dispose = (id, value) => {
if(!id) return message.error("获取业务订单ID失败,请重新选择!");
ajax.getDealRecordListActionView({...id}).then((res) => {
if (res.status == 20000 || res.status == 0) {
if (res.status == 20000) {
setRecordReviewModal({open: true, data: res?.data || []});
$processView(value);
} else {

2
src/pages/FinancialMgm/ExceptionDeal/StartExceptionDeal/index.jsx

@ -46,7 +46,7 @@ function StartExceptionDeal() {
width: 60,
align: "center",
fixed: 'left',
render: (text, record, index) => index + 1,
render: (text, record, index) => index + 1 + formData.page_size * (formData.pn - 1),
},
{
title: "停车订单ID",

2
src/pages/FinancialMgm/OrderInquiry/OrderChangeInquiry/index.jsx

@ -199,7 +199,7 @@ function EditOrderInquiry(props) {
title: "序号",
width: 60,
align: "center",
render: (text, record, index) => index + 1,
render: (text, record, index) => pageInfo.pn ? index + 1 + (pageInfo.pn - 1) * pageInfo.page_size : index + 1,
},
{
title: "修改原因",

11
src/pages/FinancialMgm/OrderInquiry/ParkingOrderInquiry/index.jsx

@ -214,6 +214,17 @@ function ParkingOrderInquiry(props) {
dataIndex: 'arrearsAmount',
key: 'arrearsAmount',
align: "center",
render: (text, data) => {
if (data.arrearsAmount_new) {
return <div>
<span style={{ "text-decoration": "line-through" }}>{data.arrearsAmount}</span>
<span style={{ "color": "#177ddc", "margin-left": "5px" }}>{data.arrearsAmount_new}</span>
</div>
}
else {
return <div>{text}</div>
}
}
},
{
title: '订单修改时间',

2
src/pages/FinancialMgm/OrderInquiry/ProductOrderInquiry/index.jsx

@ -651,7 +651,7 @@ function ProductOrderInquiry() {
createCol(['序号', '停车场名称', '手机号', '订单金额', '支付方式', '渠道流水号', '同步MS状态', '订购时间'],
['id', 'parking_name', 'phone', 'pay_amount', 'pay_method', 'channel_serial_number', 'status', 'pay_time'], 2),
cfkash,
resultData, '错峰卡', "/api/fin/order_search/staggered_parking_order_list"//
resultData, '错峰卡', "/api/fin/order_search/staggered_parking_order_list_export"//
) : null}
</Tabs.TabPane>
{/* <Tabs.TabPane tab="" key="3">

12
src/pages/InRoadMgm/EquipmentMgm/NvrMgm/loadable.jsx

@ -785,8 +785,10 @@ function Fence(props) {
label={"视频端口号"}
name={"video_port"}
rules={[
{ required: true, message: "视频端口号不能为空" },
{ type: 'number', message: '视频端口号格式错误' }
{ type: 'number', message: '视频端口号格式错误', transform(value) {
return Number(value)
}},
{ required: true, message: "视频端口号不能为空" }
]}
>
<Input />
@ -811,8 +813,10 @@ function Fence(props) {
label={"端口号"}
name={"port"}
rules={[
{ required: true, message: "端口号不能为空" },
{ type: 'number', message: '端口号格式错误' }
{ type: 'number', message: '端口号格式错误', transform(value) {
return Number(value)
}},
{ required: true, message: "端口号不能为空" }
]}
>
<Input />

4
src/pages/InRoadMgm/InRoadOverview/loadable.jsx

@ -438,7 +438,7 @@ const InRoadOverview = () => {
</div>
<div id="body">
<div className="left">
<div className="revenue-left card labelTop" style={{ visibility: displayMapping['5'] ? '' : 'hidden' }}>
<div className="revenue-left card labelTop" style={{ visibility: displayMapping['5'] ? '' : 'hidden',zoom: 1 / document.body.style.zoom }}>
<Popover content={partSend} placement="rightTop" className="iconSize">
<QuestionCircleOutlined style={{ marginLeft: 5 }} />
</Popover>
@ -447,7 +447,7 @@ const InRoadOverview = () => {
style={{ height: "100%", width: "100%", overflow: "hidden" }}
/>
</div>
<div className="record-left card labelTop" style={{ visibility: displayMapping['6'] ? '' : 'hidden' }}>
<div className="record-left card labelTop" style={{ visibility: displayMapping['6'] ? '' : 'hidden' ,zoom: 1 / document.body.style.zoom }}>
<Popover content={partMessage} placement="rightTop" className="iconSize">
<QuestionCircleOutlined style={{ marginLeft: 5 }} />
</Popover>

2
src/pages/InRoadMgm/PersonMgm/Performance/SalesStat/loadable.jsx

@ -23,7 +23,7 @@ function SalesStat(props) {
})
const parameter = {
name: '',//
start_time: moment().format('YYYY-MM-DD 00:00:00'),
start_time: moment().subtract(1, 'days').startOf('day').format('YYYY-MM-DD 00:00:00'),
end_time: moment().format("YYYY-MM-DD 23:59:59"),
pn: 1,
length: Number(pageSizeOptions[0]), //

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

@ -22,6 +22,7 @@ import ajax from "@/services";
import errorImg from '@/assets/images/error-img-new.png'
import { QuestionCircleOutlined } from '@ant-design/icons';
import { TableModule } from "@/components";
import { useSessionStorageState } from 'ahooks';
import "./index.scss";
import {
payRecordColumns,
@ -35,6 +36,23 @@ const { TextArea } = Input;
let array = [];
function ParkRecordTotal() {
const [sessionTabList, setSessionTabList] = useSessionStorageState("parkRecordTotal", {
value: {}
})
const sType = sessionTabList.type //
//
const [source, setSource] = useState(() => {
if (!sType || sType == 1) {
return sysConfig?.inSource
} else if (sType == 2) {
return sysConfig?.outSource
}
})
const valueChange = (v) => {
// console.log(v.type);
let _source = v.type == 1 ? sysConfig?.inSource : sysConfig?.outSource
setSource(_source)
}
const roadContent = (
<div>
<p>出场时间-入场时间的计算金额</p>
@ -70,7 +88,7 @@ function ParkRecordTotal() {
render: (text, record, index) => index + 1,
width: 100,
},
{
title: "路段名称",
dataIndex: "road",
@ -178,8 +196,8 @@ function ParkRecordTotal() {
{
title: <Popover content={receivableContent} >
应收金额
<QuestionCircleOutlined />
</Popover>,
<QuestionCircleOutlined />
</Popover>,
dataIndex: "receivable_amount",
key: "receivable_amount",
width: 100,
@ -198,10 +216,10 @@ function ParkRecordTotal() {
align: "center",
},
{
title: <Popover content={preferentialContent} >
title: <Popover content={preferentialContent} >
优惠金额
<QuestionCircleOutlined />
</Popover>,
<QuestionCircleOutlined />
</Popover>,
dataIndex: "preferential_amount",
key: "preferential_amount",
width: 100,
@ -213,10 +231,10 @@ function ParkRecordTotal() {
// </Popover>
},
{
title: <Popover content={discountContent} >
title: <Popover content={discountContent} >
折扣金额
<QuestionCircleOutlined />
</Popover>,
<QuestionCircleOutlined />
</Popover>,
dataIndex: "discount_amount",
key: "discount_amount",
width: 100,
@ -230,8 +248,8 @@ function ParkRecordTotal() {
{
title: <Popover content={refundContent} >
退款总计
<QuestionCircleOutlined />
</Popover>,
<QuestionCircleOutlined />
</Popover>,
dataIndex: "refund_total",
key: "refund_total",
width: 100,
@ -303,7 +321,7 @@ function ParkRecordTotal() {
name: "region",
type: "TreeSelect",
label: "区域",
areaName:1
areaName: 1
},
{
name: "operator",
@ -311,14 +329,14 @@ function ParkRecordTotal() {
label: "商户名称",
defaultValue: "0",
placeholder: "请选择商户名称",
operatorName:1
operatorName: 1
},
{
name: "road",
type: "SearchSelect",
label: "路段名称",
placeholder: "请输入路段名称",
roadName:1
roadName: 1
},
{
name: "road_type",
@ -432,12 +450,12 @@ function ParkRecordTotal() {
// ],
},
{
name: "in_source",
name: "source",
type: "Select",
label: "操作来源",
placeholder: "请选择操作来源",
defaultValue: 0,
options: sysConfig?.inSource || [],
options: source,
},
{
name: "in_person",
@ -699,7 +717,7 @@ function ParkRecordTotal() {
<Descriptions.Item label="应收金额">
{item.receivable_amount}
</Descriptions.Item>
<Descriptions.Item label="优惠券">{item.coupon }</Descriptions.Item>
<Descriptions.Item label="优惠券">{item.coupon}</Descriptions.Item>
<Descriptions.Item label="优惠总额">
{item.preferential_amount}
</Descriptions.Item>
@ -725,17 +743,17 @@ function ParkRecordTotal() {
<Descriptions title="入场照片">
<Descriptions.Item label="车辆照片">
<div className="ltc-item ltc-item-img ">
<Image src={item.in_veh_pic || require("../../../../../src/assets/images/error-img-new.png")} onError={handleImgError}/>
<Image src={item.in_veh_pic || require("../../../../../src/assets/images/error-img-new.png")} onError={handleImgError} />
</div>
</Descriptions.Item>
<Descriptions.Item label="车牌照片">
<div className="ltc-item ltc-item-img ">
<Image src={item.in_plate_pic || require("../../../../../src/assets/images/error-img-new.png")} onError={handleImgError}/>
<Image src={item.in_plate_pic || require("../../../../../src/assets/images/error-img-new.png")} onError={handleImgError} />
</div>
</Descriptions.Item>
<Descriptions.Item label=" 残疾人证件">
<div className="ltc-item ltc-item-img ">
<Image src={item.cj_pic || require("../../../../../src/assets/images/error-img-new.png")} onError={handleImgError}/>
<Image src={item.cj_pic || require("../../../../../src/assets/images/error-img-new.png")} onError={handleImgError} />
</div>
</Descriptions.Item>
</Descriptions>
@ -744,7 +762,7 @@ function ParkRecordTotal() {
);
}
//
const [getHistoryData,setGetHistoryData]=useState({})
const [getHistoryData, setGetHistoryData] = useState({})
function checkHistoryDetail(record) {
setGetHistoryData(record);
setHistoryVisible(true);
@ -794,7 +812,7 @@ function ParkRecordTotal() {
ajax.getHistoryRecord({ park_record_id: park_id }).then((res) => {
if (res.status === 20000) {
// res.data.list.map(res=>{
setHistoryProgressRecord(res.data.list);
setHistoryProgressRecord(res.data.list);
// })
} else {
message.error(res.message)
@ -809,7 +827,7 @@ function ParkRecordTotal() {
if (res.status === 20000) {
setTableData(res.data.list);
setTotal(res.data.total);
}else{
} else {
message.error(res.message)
}
});
@ -826,7 +844,8 @@ function ParkRecordTotal() {
tableData={tableData}
formSearch={formSearch}
pagename="停车记录查询"
mandatory={['plate','berth_id']}
valueChange={valueChange}
mandatory={['plate', 'berth_id']}
mandatory_name={['车牌号或泊位号']}
pageName={'parkRecordTotal'}
initFormData={initFormData}
@ -1184,11 +1203,11 @@ function ParkRecordTotal() {
</div>
<div className="eae-modal-item">
<div>车辆照片</div>
<Image src={historyDataDetail.in_veh_pic} onError={handleImgError}/>
<Image src={historyDataDetail.in_veh_pic} onError={handleImgError} />
</div>
<div className="eae-modal-item">
<div>车牌照片</div>
<Image src={historyDataDetail.in_plate_pic} onError={handleImgError}/>
<Image src={historyDataDetail.in_plate_pic} onError={handleImgError} />
</div>
</div>
</Modal>

2
src/pages/InRoadMgm/RoadMgm/ConfigRoad/loadable.jsx

@ -660,7 +660,7 @@ const ConfigRoad = (props) => {
},
search: function (params) {
ajax
.getPoleListData(params)
.getPoleListDatas(params)
.then((res) => {
if (res.status === 20000) {
setResultData({

3
src/pages/MerchantMgm/FunctionMgm/loadable.jsx

@ -36,6 +36,9 @@ function FunctionMgm() {
dataIndex: 'id',
key: 'id',
align: "center",
render: (text, record, index) => {
return <>{index + 1 + formData.page_size * (formData.pn - 1)}</>
},
},
{
title: '商户名称',

3
src/pages/NewEnergy/ChargeDeviceMgm/ElectricModal/loadable.jsx

@ -145,10 +145,13 @@ function BillingRule() {
}
const handelOk = () => {
var numberRegex = /^\d+$/;
var letterNumber = /^[0-9a-zA-Z]+$/;
if (addFormData.producer_id === '') {
message.error('请选择设备生产商')
} else if (addFormData.model === '') {
message.error('请输入设备型号')
} else if (!letterNumber.test(addFormData.model)) {
message.error('设备型号只能输入英文和数字')
} else if (addFormData.type === '') {
message.error('请选择设备类型')
} else if (addFormData.power === '') {

4
src/pages/NewEnergy/ChargeStationMgm/index.scss

@ -1,4 +1,7 @@
.add-station-modal {
.ant-modal-header {
border-radius: 4px 4px 0 0;
}
.add-station-body {
display: flex;
justify-content: space-between;
@ -62,6 +65,7 @@
.ant-modal-footer{
display: flex;
justify-content: center;
border-radius: 0 0 4px 4px;
.ant-btn{
width: 88px;
height: 35px;

45
src/pages/NewEnergy/ChargeStationMgm/loadable.jsx

@ -6,14 +6,14 @@ import {
Upload,
} from "antd";
import ajax from "@/services";
import { useSessionStorageState, useSetState } from "ahooks"
import { useSetState } from "ahooks"
import { LoadingOutlined, PlusOutlined } from '@ant-design/icons';
import { TableModule, FormInput, FormSelect, FormTreeSelectNew, ImgError, SelectGaodeLngLat } from "@/components";
import { TableModule, FormInput, FormSelect, FormTreeSelectNew, ImgError, SelectGaodeLngLat2 } from "@/components";
import "./index.scss";
function Appointment() {
const pattern = /^\d+$/; //
const pattern = /^[1-9][0-9]*$/; //
//
const [detailVisible, setDetailVisible] = useState(false);
//
@ -26,8 +26,7 @@ function Appointment() {
const [areaList, setAreaList] = useState([]);
//
const [operatorList, setOperatorList] = useState([]);
//
const [lngLatVisible, setLngLatVisible] = useState(false);
//
const initAdd = {
name: "",
@ -41,6 +40,10 @@ function Appointment() {
lng_lat: ""
}
const [addFormData, setAddFormData] = useSetState(initAdd);
const [lngLat, setLngLat] = useSetState({
lng_lat: "",
address: ""
});
//
const [formData, setFormData] = useSetState({});
// load
@ -103,7 +106,7 @@ function Appointment() {
key: "count",
align: "center",
render: (val, record) => {
return <>{val || "-"}</>;
return <>{val || 0}</>;
},
},
{
@ -200,6 +203,7 @@ function Appointment() {
//
const getAllOperator = () => {
ajax.getAllOperator().then((res) => {
console.log(res);
const { status, data } = res
if (status === 20000) {
if (data && data.length) {
@ -236,12 +240,8 @@ function Appointment() {
setLoading(false)
setDetailVisible(true)
}
const handelClose = () => {
setLngLatVisible(false)
setAddFormData({ lng_lat: "", address: "" })
}
const handelOk = () => {
// console.log(addFormData);
console.log(addFormData);
if (!addFormData.name) {
message.warn("请输入充电站名称")
return
@ -254,18 +254,10 @@ function Appointment() {
message.warn("请输入车位数量")
return
}
if (addFormData.count < 1) {
message.warn("请输入正确的车位数量")
return
}
if (!pattern.test(addFormData.count)) {
message.warn("请输入正整数的车位数量")
return
}
if (!addFormData.address) {
message.warn("请输入详细地址")
return
}
if (!addFormData.site_type) {
message.warn("请选择站点类型")
return
@ -282,6 +274,10 @@ function Appointment() {
message.warn("请选择经纬度")
return
}
if (!addFormData.address) {
message.warn("请输入详细地址")
return
}
if (!addFormData.img) {
message.warn("请上传充电站图片")
return
@ -468,20 +464,15 @@ function Appointment() {
disabled={true}
/>
<div className="latlng-box">
<SelectGaodeLngLat
isClickMarker
open={() => setLngLatVisible(true)}
lngLatVisible={lngLatVisible}
<SelectGaodeLngLat2
_lngLat={addFormData.lng_lat}
_address={addFormData.address}
getLntLat={(value) => {
setAddFormData({ lng_lat: value })
}}
onChange={(adress) => {
// console.log(adress);
setAddFormData({ address: adress })
}}
// close={handelClose}
close={() => setLngLatVisible(false)}
hide={() => setLngLatVisible(false)}
/>
</div>
</div>

7
src/pages/NewEnergy/ChargingMgm/BillingRule/index.scss

@ -179,6 +179,8 @@ $color-primary: var(--color-primary);
}
.ant-modal-content{
width: 796px;
overflow: hidden;
border-radius: 4px;
}
.modal-form{
margin: 20px 0 0 10px;
@ -208,6 +210,7 @@ $color-primary: var(--color-primary);
color: #fff;
border: none;
border-radius: 4px;
background-color: #636d80;
}
.ant-btn:last-child{
background: #409eff;
@ -220,6 +223,10 @@ $color-primary: var(--color-primary);
font-weight: 700;
color: #ffffff;
}
.ant-modal-content{
overflow: hidden;
border-radius: 4px;
}
.ltc-content {
display: flex;
flex-wrap: wrap;

28
src/pages/NewEnergy/ChargingMgm/BillingRule/loadable.jsx

@ -189,6 +189,8 @@ function BillingRule() {
// ok
const handleConfirm = () => {
let chineseReg = /^(?:[\u4e00-\u9fa5·]{1,16})$/
let reg = /^[0-9a-zA-Z]*$/g;
let data = {
...modalData,
rule_name:modalData?.rule_name.replace(/\s/g,""),
@ -197,13 +199,19 @@ function BillingRule() {
}
setDetailVisible(true)
if(!data?.operator_id){
message.warning("运营商名称不能为空")
message.error("运营商名称不能为空")
return
}else if(!data?.rule_name){
message.warning("规则名称不能为空")
message.error("规则名称不能为空")
return
}else if(!chineseReg.test(data?.rule_name)){
message.error("规则名称不能为数字或英文")
return
}else if(!data?.rule_code){
message.warning("规则编码不能为空")
message.error("规则编码不能为空")
return
}else if(!reg.test(data?.rule_code)){
message.error("规则编码不能包含汉字")
return
}
//
@ -283,7 +291,12 @@ function BillingRule() {
value={modalData.rule_name}
style={{ width: 660, marginLeft: 10 }}
maxLength={20}
onChange={(v) => {setModalData({...modalData,rule_name:v.target.value})}}
onChange={(v) => {
setModalData({
...modalData,
rule_name:v.target.value
})}
}
/>
</div>
<div className="yisa-search" style={{marginLeft:13}}>
@ -294,7 +307,12 @@ function BillingRule() {
value={modalData.rule_code}
style={{ width: 660, marginLeft: 10 }}
maxLength={20}
onChange={(v) => {setModalData({...modalData,rule_code:v.target.value})}}
onChange={(v) => {
setModalData({
...modalData,
rule_code:v.target.value
})
}}
/>
</div>
<div className="yisa-search" style={{marginLeft:26}}>

3
src/pages/NewEnergy/ChargingMgm/IllegalRuleConfigMgm/index.scss

@ -180,6 +180,8 @@ $color-primary: var(--color-primary);
}
.ant-modal-content{
width: 796px;
overflow: hidden;
border-radius: 4px;
}
.modal-form{
margin: 20px 0 0 10px;
@ -209,6 +211,7 @@ $color-primary: var(--color-primary);
color: #fff;
border: none;
border-radius: 4px;
background-color: #636d80;
}
.ant-btn:last-child{
background: #409eff;

18
src/pages/NewEnergy/ChargingMgm/IllegalRuleConfigMgm/loadable.jsx

@ -253,6 +253,8 @@ const handelAdd = () => {
// ok
const handleConfirm = () => {
let chineseReg = /^(?:[\u4e00-\u9fa5·]{1,16})$/
let reg = /^[0-9a-zA-Z]*$/g;
let data = {
...modalData,
rule_name:modalData?.rule_name.replace(/\s/g,""),
@ -261,19 +263,25 @@ const handleConfirm = () => {
}
setDetailVisible(true)
if(!modalData?.operator_id){
message.warning("运营商名称不能为空")
message.error("运营商名称不能为空")
return
}else if(!data?.rule_name){
message.warning("规则名称不能为空")
message.error("规则名称不能为空")
return
}else if(!chineseReg.test(data?.rule_name)){
message.error("规则名称不能为数字或英文")
return
}else if(!data?.rule_code){
message.warning("规则编码不能为空")
message.error("规则编码不能为空")
return
}else if(!reg.test(data?.rule_code)){
message.error("规则编码不能包含汉字")
return
}else if(!modalData?.effective_place){
message.warning("生效场站不能为空")
message.error("生效场站不能为空")
return
}else if(modalData?.status === ""){
message.warning("规则状态不能为空")
message.error("规则状态不能为空")
return
}
//

7
src/pages/NewEnergy/ChargingMgm/OrderRuleMgm/index.scss

@ -180,6 +180,8 @@ $color-primary: var(--color-primary);
}
.ant-modal-content{
width: 796px;
overflow: hidden;
border-radius: 4px;
}
.modal-form{
margin: 20px 0 0 10px;
@ -209,6 +211,7 @@ $color-primary: var(--color-primary);
color: #fff;
border: none;
border-radius: 4px;
background-color: #636d80;
}
.ant-btn:last-child{
background: #409eff;
@ -221,6 +224,10 @@ $color-primary: var(--color-primary);
font-weight: 700;
color: #ffffff;
}
.ant-modal-content{
overflow: hidden;
border-radius: 4px;
}
.ltc-content {
display: flex;
flex-wrap: wrap;

16
src/pages/NewEnergy/ChargingMgm/OrderRuleMgm/loadable.jsx

@ -238,6 +238,8 @@ const handelAdd = () => {
// ok
const handleConfirm = () => {
let chineseReg = /^(?:[\u4e00-\u9fa5·]{1,16})$/
let reg = /^[0-9a-zA-Z]*$/g;
let data = {
...modalData,
rule_name:modalData?.rule_name.replace(/\s/g,""),
@ -246,16 +248,22 @@ const handleConfirm = () => {
}
setDetailVisible(true)
if(!modalData?.operator_id){
message.warning("运营商名称不能为空")
message.error("运营商名称不能为空")
return
}else if(!data?.rule_name){
message.warning("规则名称不能为空")
message.error("规则名称不能为空")
return
}else if(!chineseReg.test(data?.rule_name)){
message.error("规则名称不能为数字或英文")
return
}else if(!data?.rule_code){
message.warning("规则编码不能为空")
message.error("规则编码不能为空")
return
}else if(!reg.test(data?.rule_code)){
message.error("规则编码不能包含汉字")
return
}else if(modalData?.status === ""){
message.warning("规则状态不能为空")
message.error("规则状态不能为空")
return
}
//

26
src/pages/NewEnergy/NewEnergyOverview/Map.jsx

@ -5,7 +5,8 @@ import Charge50 from "@/assets/images/map/charge50.png"
import Charge20 from "@/assets/images/map/charge20.png"
import Chargelow from "@/assets/images/map/chargelow.png"
import mapLocation from '@/assets/images/map/map-location.png'
import errorImg from '@/assets/images/error-img-new.png'
import { Icon } from "@/components"
import citys from './data'
import ajax from "@/services";
function BaseMap(props) {
@ -46,18 +47,23 @@ function BaseMap(props) {
let style = [{
url: Charge50,
anchor: new AMap.Pixel(22, 22),
size: new AMap.Size(44, 44)
anchor: new AMap.Pixel(16, 24),
size: new AMap.Size(32, 48)
}, {
url: Charge20,
anchor: new AMap.Pixel(22, 22),
size: new AMap.Size(44, 44)
anchor: new AMap.Pixel(16, 24),
size: new AMap.Size(32, 48)
}, {
url: Chargelow,
anchor: new AMap.Pixel(22, 22),
size: new AMap.Size(44, 44)
anchor: new AMap.Pixel(16, 24),
size: new AMap.Size(32, 48)
}
];
const handleImgError = (e) => {
let evn = e || event
let img = evn.srcElement ? evn.srcElement : evn.target
img.src = errorImg
}
const initMap = () => {
@ -120,8 +126,6 @@ function BaseMap(props) {
infoRef.current=true
}
},[childInfo])
console.log(info);
useEffect(() => {
if (map&&data.length!=0) {
var mass = new AMap.MassMarks(data, {
@ -194,8 +198,8 @@ function BaseMap(props) {
{hasInit ? renderChildren(map) : null}
{ showInfo&&<div className="map-item">
<div className="name">{info.name}</div>
<div className="location"><img src={mapLocation} title={info.location} />{info.location}</div>
<div className="pic"><img src={info.pic} /></div>
<div className="location" title={info.location}><Icon type="dingwei-copy"></Icon>{info.location}</div>
<div className="pic"><img src={info.pic} onError={handleImgError} /></div>
<div className="item"><div>慢充占用</div><div>{info.slow_charge}</div></div>
<div className="item"><div>快充占用</div><div>{info.fast_charge}</div></div>
<div className="item"><div>所属厂家</div><div>{info.factory}</div></div>

18
src/pages/NewEnergy/NewEnergyOverview/index.scss

@ -1,4 +1,5 @@
.overview-map{
opacity: 0.8;
.search{
.select-map{
position: absolute;
@ -6,7 +7,8 @@
background-color:#303950 ;
top: 20px;
left: 20px;
border-radius: 20px;
// border-radius: 20px;
overflow: hidden;
.ant-select-selector{
height: 40px;
border:0px;
@ -20,15 +22,15 @@
}
.search-pic{
background-image: url("../../../assets/images/search.png");
width: 30px;
height: 30px;
background-image: url("../../../assets/images/search-map.png");
width: 25px;
height: 25px;
background-repeat: no-repeat;
background-size: 100% 100%;
z-index: 1002;
position: absolute;
left: 310px;
top: 25px;
top: 27px;
}
}
.right-bottom{
@ -76,7 +78,7 @@
padding: 20px;
width: 340px;
height: 392px;
background: linear-gradient(180deg,#1e283c, #293144);
background: #303950;
border: #1e283c;
top: 62px !important;
left: 20px !important;
@ -104,8 +106,8 @@
}
.item{
padding:10px 0px;
border-bottom: 1px solid#EEEFF1;
opacity: 0.7;
border-bottom: 1px solid#3C4558;
opacity: 0.88;
display: flex;
justify-content: space-between;
}

10
src/pages/NewEnergy/NewEnergyOverview/loadable.jsx

@ -36,6 +36,13 @@ function NewEnergyOverview() {
(option?.label ?? '').toLowerCase().includes(input.toLowerCase());
useEffect(()=>{
getPointData()
//
document.getElementsByClassName("cc-container")[0].style.paddingLeft="10px"
document.getElementsByClassName("cc-container")[0].style.paddingTop="10px"
return ()=>{
document.getElementsByClassName("cc-container")[0].style.paddingTop="0px"
document.getElementsByClassName("cc-container")[0].style.paddingLeft="0px"
}
},[])
useEffect(()=>{
if(data.length!=0){
@ -59,7 +66,8 @@ function NewEnergyOverview() {
className="select-map"
style={{
width: 340,
height:40
height:40,
borderRadius:"20px"
}}
options={option}
filterOption={filterOption}

26
src/pages/NewEnergy/RealtimeMonitor/ChargerMonitor/index.scss

@ -23,12 +23,12 @@
}
}
.custom-view-detail{
&.default{
.custom-view-detail {
&.default {
cursor: pointer;
}
&.disabled{
color: hsla(0,0%,100%,.3);
&.disabled {
color: hsla(0, 0%, 100%, 0.3);
cursor: not-allowed;
}
}
@ -39,9 +39,19 @@
}
.custom-modal__charger-monitor {
.content {
display: flex;
align-items: center;
justify-content: center;
.ant-modal-content {
border-radius: 4px;
overflow: hidden;
.content {
display: flex;
align-items: center;
justify-content: center;
.ant-image {
border: 1px solid #626b7e;
border-radius: 4px;
background-color: #3e4557;
overflow: hidden;
}
}
}
}

8
src/pages/NewEnergy/RealtimeMonitor/ChargerMonitor/loadable.jsx

@ -3,7 +3,7 @@ import { message as Message, Modal, Image, Button } from "antd";
import { dictionary, utils } from "@/config/common";
import ajax from "@/services";
import { TableModule } from "@/components";
import errorImg from "@/assets/images/error-img.png";
import errorImgNew from "@/assets/images/error-img-new.png";
import "./index.scss";
import moment from "moment";
@ -227,17 +227,19 @@ function ChargerMonitor() {
width={1000}
open={ImgRecordShow}
footer={null}
destroyOnClose
onCancel={() => {
closeImgRecordModal();
}}
>
<div className="content" style={{ height: 600 }}>
<div className="content" style={{ height: 562 }}>
<Image
width={"100%"}
height={"100%"}
src={ImgRecordData?.pic_url}
// prefixCls="custom-ant-image-preview-wrap ant-image"
// preview={false}
fallback={errorImg}
fallback={errorImgNew}
></Image>
</div>
</Modal>

8
src/pages/OffPeak/OffPeakShareRecords/ShareParkMgm/infoModal/index.jsx

@ -39,6 +39,12 @@ function InfoModal (props) {
const validateCws = (_, value) => {
const total = baseForm.getFieldValue('total');
if (Number.isInteger(value)) {
return Promise.reject(new Error('可预约车位数必须为整数'));
}
if (value < 0) {
return Promise.reject(new Error('可预约车位数错误'));
}
if (value > total) {
return Promise.reject(new Error('可预约车位数大于总数'));
}
@ -90,7 +96,7 @@ function InfoModal (props) {
</Row>
<Row>
<Col span={11}>
<Form.Item label="可预约车位数" name="kyycws" rules={[{required: true, message: '此为必填字段'}, {validator: validateCws}]}>
<Form.Item label="可预约车位数" name="kyycws" rules={[{validator: validateCws}, {required: true, message: '此为必填字段'}]}>
<Input type='number' min={0}></Input>
</Form.Item>
</Col>

2
src/pages/OutRoadMgm/OutPersonMgm/TollCollector/index.jsx

@ -62,7 +62,7 @@ function TollCollector() {
width: 60,
align: "center",
fixed: 'left',
render: (text, record, index) => index + 1,
render: (text, record, index) => index + 1 + formData.page_size * (formData.pn - 1),
},
{
title: "商户名称",

2
src/pages/OutRoadMgm/OutPersonMgm/TransitionReport/index.jsx

@ -57,7 +57,7 @@ function TransitionReport() {
width: 60,
align: "center",
fixed: 'left',
render: (text, record, index) => index + 1,
render: (text, record, index) => index + 1 + formData.page_size * (formData.pn - 1),
},
{
title: "商户名称",

2
src/pages/OutRoadMgm/OutRemoteDevice/index.jsx

@ -43,7 +43,7 @@ function OutRemoteDevice(props) {
width: 60,
align: "center",
fixed: 'left',
render: (text, record, index) => index + 1,
render: (text, record, index) => index + 1 + formData.page_size * (formData.pn - 1),
},
{
title: "版本",

12
src/pages/OutRoadMgm/OutSegmentMgm/OutSegment/loadable.jsx

@ -56,13 +56,18 @@ function OutSegment() {
maxLength: 50,
showCount: true,
};
const [pageData, setPageData] = useSetState({
//
pn: 1,
page_size: 15,
});
const columns = [
{
title: "序号",
dataIndex: "index",
key: "index",
render: (_, record, index) => {
return index + 1;
return pageData.pn ? index + 1 + (pageData.pn - 1) * pageData.page_size : index + 1
},
},
{
@ -211,11 +216,6 @@ function OutSegment() {
},
];
const [pageData, setPageData] = useSetState({
//
pn: 1,
page_size: 15,
});
const exportRef = useRef(null);
const tableRef = useRef(null);
const [appraise, setAppraise] = useState({})

5
src/pages/SystemMgm/AreaManage/ModalAreaAdd/index.jsx

@ -31,8 +31,8 @@ function ModalAreaAdd(props) {
lng: ''
}
if (formData.latlng && formData.latlng.split(',').length) {
latlngObj['lat'] = formData.latlng.split(',')[0]
latlngObj['lng'] = formData.latlng.split(',')[1]
latlngObj['lat'] = formData.latlng.split(',')[1]
latlngObj['lng'] = formData.latlng.split(',')[0]
}
onOk(formData={...formData,id: editForm.id, ...latlngObj}, editStatus, )
form.resetFields()
@ -60,6 +60,7 @@ function ModalAreaAdd(props) {
...editForm,
latlng: latlng
})
setAreaType(editForm.type)
} else {
form.setFieldsValue({
pid: pid,

3
src/pages/SystemMgm/BusinessConfig/BusinessConf/index.scss

@ -132,6 +132,9 @@ $color-primary: var(--color-primary);
border-top: none !important;
border-left: none !important;
}
.yisa-table-scroll .ant-spin-nested-loading .ant-spin-container .ant-table .ant-table-container .ant-table-content > table {
height: unset !important;
}
.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content {
max-height: 687px;
overflow: auto;

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

@ -343,7 +343,7 @@ function OrgnizationMgm() {
ajaxOrgDetailSave(Object.assign({}, baseForm.getFieldsValue(), {
id: activeOrg.id,
role: roleCheckedKeys.join(','),
control_area: baseForm.getFieldValue('control_area')
control_area: (baseForm.getFieldValue('control_area') instanceof Array) ? baseForm.getFieldValue('control_area').join(',') : baseForm.getFieldValue('control_area')
})).then((msg) => {
message.success(msg)
setEditStatus(false)

5
src/pages/SystemMgm/RoleMgm/index.scss

@ -8,6 +8,11 @@ $color-primary: var(--color-primary);
display: flex;
padding: 15px;
width: 100%;
.role-tree {
.ant-tree .ant-tree-node-selected {
background: unset !important;
}
}
.paid-search {
.search {
font-size: 16px;

4
src/pages/SystemMgm/RoleMgm/loadable.jsx

@ -690,9 +690,11 @@ function RoleMgm(props) {
<label>权限分配</label><span style={{ marginLeft: 20 }}><Checkbox checked={getCheckValue} onChange={onCheckbox}>全选</Checkbox></span>
<Tree
checkable
className="role-tree"
style={{ width: 260, marginLeft: 14 }}
onCheck={onCheckAdd}
checkedKeys={checkedKeys}
height={400}
treeData={getGovernmentArea}
fieldNames={{
title: 'name',
@ -781,12 +783,14 @@ function RoleMgm(props) {
checkable
style={{ width: 260, marginLeft: 14 }}
defaultSelectedKeys={checkedKeys}
className="role-tree"
onCheck={(checkedKeysValue, info) => {
setGetAdminId(
Object.assign({}, getAdminId, { auth: checkedKeysValue })
);
setCheckedKeys(checkedKeysValue)
}}
height={400}
checkedKeys={checkedKeys}
treeData={getGovernmentArea}
fieldNames={{

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

@ -31,7 +31,7 @@ const SystemLog = () => {
align: "center",
width: 80,
render: (text, record, index) => {
return <>{index + 1}</>
return <>{index + 1 + formData.page_size * (formData.pn - 1)}</>
},
},
{

4
src/services/InroadMgm/RoadMgm/RoadMgm.js

@ -114,7 +114,7 @@ const addToll = (params) => {
///api/bpm/device/road_set_pole_position_list 杆位管理-获取列表
const getPoleListData = (params) => {
const getPoleListDatas = (params) => {
return ajax({
url: "/api/bpm/device/road_set_pole_position_list",
type: "post",
@ -385,7 +385,7 @@ export default {
getRoadInfo,
addToll,
getEtcData,
getPoleListData,
getPoleListDatas,
getRoadRuleList,
delToll,
getEditInRoadData,

Loading…
Cancel
Save