Browse Source

fix(): 修复时间规则页面添加异常问题

tags/PMS_V1.0.0_Alpha5
何欢 1 year ago
parent
commit
8739f3db64
  1. 0
      demin.json
  2. 10
      src/components/TableModule/index.jsx
  3. 7
      src/components/VideoPlay/index.scss
  4. 2
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingFalseAlarms/index.scss
  5. 3
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingFalseAlarms/loadable.jsx
  6. 4
      src/pages/InRoadMgm/RecordInquiry/DisabledCarParkRecordTotal/loadable.jsx
  7. 6
      src/pages/NewEnergy/ChargeDeviceMgm/ElectricModal/index.jsx
  8. 231
      src/pages/NewEnergy/ChargeDeviceMgm/ElectricModal/index.scss
  9. 221
      src/pages/NewEnergy/ChargeDeviceMgm/ElectricModal/loadable.jsx
  10. 0
      src/pages/NewEnergy/ChargeDeviceMgm/EquipmentSupplier/index.jsx
  11. 0
      src/pages/NewEnergy/ChargeDeviceMgm/EquipmentSupplier/index.scss
  12. 0
      src/pages/NewEnergy/ChargeDeviceMgm/EquipmentSupplier/loadable.jsx
  13. 9
      src/pages/NewEnergy/ChargeDeviceMgm/index.jsx
  14. 165
      src/pages/NewEnergy/ChargingMgm/BillingRule/index.scss
  15. 255
      src/pages/NewEnergy/ChargingMgm/BillingRule/loadable.jsx
  16. 162
      src/pages/NewEnergy/ChargingMgm/OrderRuleMgm/index.scss
  17. 531
      src/pages/NewEnergy/ChargingMgm/OrderRuleMgm/loadable.jsx
  18. 1097
      src/pages/NewEnergy/RealtimeMonitor/ChargerMonitor/loadable.jsx
  19. 76
      src/pages/NewEnergy/RecordsInquiry/Appointment/loadable.jsx
  20. 66
      src/pages/NewEnergy/RecordsInquiry/Charge/loadable.jsx
  21. 4
      src/pages/NewEnergy/RecordsInquiry/Unlocking/index.jsx
  22. 97
      src/pages/NewEnergy/RecordsInquiry/Unlocking/loadable.jsx
  23. 83
      src/pages/NewEnergy/RecordsInquiry/Violation/loadable.jsx
  24. 4
      src/pages/OffPeak/OffPeakShareRecords/ShareParkMgm/loadable.jsx
  25. 2
      src/pages/OperationCenter/OtherBusiness/ParkingCard/ParkingCardMgm/index.scss
  26. 39
      src/pages/OutRoadMgm/OutExceptionMgm/SpecialReleaseMgm/index.jsx
  27. 100
      src/pages/OutRoadMgm/OutRoadOverview/loadable.jsx
  28. 2
      src/pages/OutRoadMgm/OutSegmentMgm/OutSegment/ConfigParking/TollCollectorManagement.jsx
  29. 1
      src/pages/SystemMgm/AreaManage/ModalAreaAdd/index.jsx
  30. 16
      src/pages/SystemMgm/AreaManage/index.scss
  31. 5
      src/pages/SystemMgm/AreaManage/loadable.jsx
  32. 10
      src/pages/SystemMgm/OrgnizationMgm/index.scss
  33. 12
      src/pages/SystemMgm/OrgnizationMgm/loadable.jsx
  34. 19
      src/router/router.config.js
  35. 32
      src/services/NewEnergy/ChargeDeviceMgm.js
  36. 41
      src/services/NewEnergy/chargingMgm.js
  37. 7
      src/services/NewEnergy/index.js
  38. 55
      src/services/NewEnergy/recordsInquiry.js
  39. 20
      src/services/OutRoadMgm/OutExceptionMgm/index.js
  40. 36
      src/services/OutRoadMgm/OutRoadOverview.js

0
demin.json

10
src/components/TableModule/index.jsx

@ -198,8 +198,6 @@ const TableModule = forwardRef((props, ref) => {
// temp_obj.carId = sessionTabList.plate2
fetchPlateSearch(sessionTabList.plateValue.match(/:(\S*)/)[1], setPlateData, []);
}
fetch('first')
// if (sessionTabList.start_time) {
// let temp_obj = { ...sessionTabList, start_time: moment(start_time), end_time: moment(end_time) }
// if (sessionTabList.plateValue){
@ -218,8 +216,8 @@ const TableModule = forwardRef((props, ref) => {
// searchForm.setFieldsValue({ ...sessionTabList, carId: sessionTabList.plate2 })
// } // let start_time = sessionTabList.start_time
// let end_time = sessionTabList.end_time
}
fetch('first')
}, [])
useEffect(() => {
if (formData) {
@ -249,10 +247,10 @@ const TableModule = forwardRef((props, ref) => {
form = {...searchForm.getFieldsValue(), ...pageData, ...otherData, ...pnno, ...updateData}
}
if(args1 == 'first' ){ // plateData,
if(sessionTabList.plate2){
if(sessionTabList?.plate2){
form.carId = sessionTabList.plate2
}
if(sessionTabList.region?.length){
if(sessionTabList?.region?.length){
form.region = sessionTabList.region
}
}
@ -818,7 +816,7 @@ const TableModule = forwardRef((props, ref) => {
key={item.name}
initialValue={item.defaultValue}
>
<DatePicker.RangePicker />
<DatePicker.RangePicker allowClear={item.allowClear ? true : false} />
</Form.Item>
)
break;

7
src/components/VideoPlay/index.scss

@ -184,3 +184,10 @@
min-height: 400px;
}
}
.video-play-wrap {
.rm-video {
width: 100%;
height: 100%;
min-height: 400px;
}
}

2
src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingFalseAlarms/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-box {
.parkfalse-box {
display: flex;
padding-top: 10px;
width: 100%;

3
src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingFalseAlarms/loadable.jsx

@ -379,7 +379,8 @@ function ParkingFalseAlarms() {
placeholder="请选择"
options={[
{ value: "0", label: "全部" },
{ value: "1", label: "地磁设备" }
{ value: "1", label: "地磁设备" },
{ value: "2", label: "高位视频" },
]}
value={formData.device_type}
onChange={(v) =>

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

@ -606,6 +606,7 @@ function DisabledCarParkRecordTotal() {
})
}
const [getPartId, setGetPartId] = useState({})
const [getPartData, setGetPartData] = useState({})
function conversion(record) {
setGetPartId(record.park_id)
ajax({
@ -624,6 +625,7 @@ function DisabledCarParkRecordTotal() {
let { status, data, total_records, total } = res
if (status == 20000) {
setLtcVisible(true)
setGetPartData(data)
setLtcData({
plate: record.plate,
change_monet: data.change_monet,
@ -639,7 +641,7 @@ function DisabledCarParkRecordTotal() {
function handleSearch(e){
let data = {
...ltcData,
...getPartData,
park_id: getPartId
}
ajax({

6
src/pages/NewEnergy/ChargeDeviceMgm/ElectricModal/index.jsx

@ -0,0 +1,6 @@
import React from "react"
import loadable from "@loadable/component"
import { LoadingImg } from "@/components"
const ElectricModal = loadable(() => import("./loadable"))
export default (pros) => <ElectricModal {...pros} fallback={<LoadingImg />} />

231
src/pages/NewEnergy/ChargeDeviceMgm/ElectricModal/index.scss

@ -0,0 +1,231 @@
@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);
.ant-tabs {
margin-bottom: 16px;
.ant-tabs-nav {
margin-bottom: 0 !important;
&::before {
border-bottom: 1px solid var(--color-card-line) !important;
}
}
.ant-tabs-nav-wrap {
width: 100%;
box-sizing: content-box;
.ant-tabs-nav-list {
width: 340px;
.ant-tabs-ink-bar {
height: 3px;
background-color: #00ccff;
}
.ant-tabs-tab {
flex: 1;
width: 100%;
display: flex;
justify-content: center;
padding-bottom: 10px;
text-align: center;
cursor: pointer;
font-size: 14px !important;
font-family: MicrosoftYaHei;
text-align: center;
letter-spacing: 0.7px;
}
.ant-tabs-tab-active {
div {
color: #00ccff;
}
}
}
}
}
.ant-input::-webkit-input-placeholder {
color: var(--color-placeholder);
}
.ant-input::-moz-placeholder {
color: var(--color-placeholder);
}
.right-list .ant-btn-primary {
width: 68px;
height: 30px;
background: linear-gradient(180deg, #3aa9ff, #59b7ff);
border-radius: 4px;
}
.ant-input:-ms-input-placeholder {
color: var(--color-placeholder);
}
.right-list .cc-result-flow .table-wrap .yisa-table .ant-table-thead th {
background-color: #616b83 !important;
}
.right-list .cc-result-flow .table-wrap .yisa-table .ant-table-tbody td {
background-color: #3e4557 !important;
}
.right-list .cc-result-flow .table-wrap .yisa-table .ant-table-tbody tr:nth-child(even) td {
background-color: #3e4557 !important;
}
.ant-input::placeholder {
color: var(--color-placeholder);
}
.ant-select-selection-placeholder {
color: var(--color-placeholder);
}
.ant-select-disabled.ant-select-single:not(.ant-select-customize-input) .ant-select-selector {
background: var(--color-input-disabled-bg);
color: var(--color-placeholder);
}
.ant-select-disabled .ant-select-arrow {
color: var(--color-placeholder);
}
.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector {
background-color: var(--color-input-disabled-bg);
color: var(--color-input-disabled-color);
cursor: not-allowed;
}
.ant-select-multiple {
.ant-select-selector {
.ant-select-selection-item {
background-color: var(--color-bg-body);
border-color: var(--color-border);
.ant-select-selection-item-remove {
color: var(--color-text);
}
}
}
}
.ant-select-arrow {
color: var(--color-text);
}
.ant-select-clear {
border-radius: 50%;
}
.ant-select-dropdown-menu {
background-color: var(--color-input-bg);
.ant-select-dropdown-menu-item {
color: var(--color-text);
&.ant-select-dropdown-menu-item-active {
color: #fff;
// background-color: var(--radio-button-bg-checked);
}
&.ant-select-dropdown-menu-item-selected {
color: #fff;
// background-color: var(--radio-button-bg-checked);
}
&:hover {
color: #fff;
// background-color: var(--radio-button-bg-checked);
}
}
}
.ant-select-selector {
background-color: var(--color-search-list-item-bg) !important;
box-shadow: none !important;
border-radius: 4px;
color: var(--color-search-list-item-value);
border-color: var(--color-search-list-item-bd) !important;
}
.ant-select-selection {
background-color: var(--color-input-bg);
box-shadow: none;
color: var(--color-text);
// border-color:var(--checkable-tag-border);
}
.ant-form-horizontal .ant-form-item-label {
label {
display: inline-block;
word-wrap: break-word;
white-space: normal;
}
}
.ant-picker {
width: 100%;
background-color: var(--color-search-list-item-bg);
border-color: var(--color-border);
}
.totalModal{
.ant-modal-footer{
display: none;
}
position: absolute;
top: 40px;
right: 174px;
}
.ltc-item-img {
width: 390px;
height: 300px;
border: 1px solid;
background: #6565656b;
margin-right: 20px !important;
img {
height: 295px;
width: 387px;
// object-fit: contain;
}
}
.hanleHistoyModal{
max-height: 700px;
overflow: auto;
}
.hanleHistoyModal::-webkit-scrollbar {
width: 5px;
}
.hanleHistoyModal::-webkit-scrollbar-thumb {
background-color: #9da2ab;
border-radius: 10px;
}
.modal-img{
img{
width: 200px;
height: 200px;
}
}
.electric-station-modal {
.add-station-body {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
.row {
width: 100%;
margin: 10px 0;
}
.cc-form-tree {
margin-bottom: 0;
}
.cc-form-content,.form-select-single-content {
flex: auto;
}
.cc-form-name,.form-select-single-name {
width: 100px;
}
}
}

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

@ -0,0 +1,221 @@
import React, { useState, useRef, useEffect } from "react";
import {
message,
Pagination,
Table,
Space,
Modal,
Button,
Tabs,
Descriptions,
Input,
Steps,
Select,
Image,
Timeline,
Popover
} from "antd";
import { dictionary } from "@/config/common";
import ajax from "@/services";
import { useSetState } from "ahooks"
import { TableModule, FormInput, FormSelect, FormTreeSelectNew } from "@/components";
import "./index.scss";
const { TextArea } = Input;
function BillingRule() {
//
const [detailVisible, setDetailVisible] = useState(false);
//
const [tableData, setTableData] = useState([]);
//
const [total, setTotal] = useState(0);
//
const [detailData, setDetailData] = useState({});
const initAdd = {
name: "",
code: "",
address: "",
site_type: "",
area: "",
operator: ""
}
const [addFormData, setAddFormData] = useSetState(initAdd);
//
const initFormData = {
operator: "0",
rule_name: "",
};
const columns = [
{
title: "序号",
dataIndex: "index",
key: "index",
align: "center",
render: (text, record, index) => index + 1,
width: 100,
},
{
title: "设备生产商",
dataIndex: "producer_name",
key: "producer_name",
align: "center",
},
{
title: "设备型号",
dataIndex: "model",
key: "model",
align: "center",
},
{
title: "设备类型",
dataIndex: "type",
key: "type",
align: "center",
},
{
title: "总桩功率(KW)",
dataIndex: "power",
key: "power",
width: 100,
align: "center",
},
{
title: "枪口数量",
dataIndex: "muzzle_num",
key: "muzzle_num",
align: "center",
},
{
title: "枪口类型",
dataIndex: "muzzle_type",
key: "muzzle_type",
align: "center",
},
];
const formSearch = [
{
name: "operator",
type: "Select",
label: "商户名称",
defaultValue: "0",
placeholder: "请选择商户名称",
},
{
name: "rule_name",
type: "Input",
label: "规则名称",
placeholder: "请输入出场收费员",
},
{
name: "timePeriod",
type: "RangePicker",
label: "时间段",
},
];
//
const openModal = (index, record) => {
setDetailData(record)
setDetailVisible(true);
}
//
const search = (params) => {
ajax.getElecList(params).then((res) => {
if (res.status === 20000) {
setTableData(res.data.list);
setTotal(res.data.total);
} else {
message.error(res.message)
}
});
}
const handelAdd = () => {
setDetailVisible(true)
setAddFormData(initAdd)
}
const handelOk = () => {
ajax.addStation(addFormData).then((res) => {
if (res.status === 20000) {
message.success("新增成功")
setDetailVisible(false);
setAddFormData(initAdd)
search(formData)
} else {
message.error(res.message)
}
});
}
return (
<>
<TableModule
showSerial={true}
isExport={false}
diyButton={
<Button
type="primary"
onClick={handelAdd}
>
新增
</Button>
}
columns={columns}
tableData={tableData}
formSearch={formSearch}
pagename="电桩型号"
pageName={'billingRule'}
initFormData={initFormData}
total={total}
search={search}
exportUrl="/api/bpm/record/get_record_export"
/>
<Modal
title="添加充电站"
open={detailVisible}
width={500}
className="electric-station-modal"
onCancel={() => {
setDetailVisible(false);
}}
onOk={handelOk}
destroyOnClose
>
<div className="add-station-body">
<div className="row">
<FormInput
yisaLabel="充电站名称"
placeholder="请输入充电站名称"
isShowAfterIcon={false}
value={addFormData.name}
onChange={e => { setAddFormData({ name: e.target.value }) }}
/>
</div>
<div className="row">
<FormInput
yisaLabel="充电站编码"
placeholder="请输入充电站编码"
isShowAfterIcon={false}
value={addFormData.code}
onChange={e => { setAddFormData({ code: e.target.value }) }}
/>
</div>
<div className="row">
<FormInput
yisaLabel="详细地址"
placeholder="请输入详细地址"
isShowAfterIcon={false}
value={addFormData.address}
onChange={e => { setAddFormData({ address: e.target.value }) }}
/>
</div>
</div>
</Modal>
</>
);
}
export default BillingRule;

0
src/pages/NewEnergy/ChargeDeviceMgm/EquipmentSupplier/index.jsx

0
src/pages/NewEnergy/ChargeDeviceMgm/EquipmentSupplier/index.scss

0
src/pages/NewEnergy/ChargeDeviceMgm/EquipmentSupplier/loadable.jsx

9
src/pages/NewEnergy/ChargeDeviceMgm/index.jsx

@ -1,6 +1,13 @@
import PhysicalPileManagement from './PhysicalPileManagement'
import GroundLockManagement from './GroundLockManagement'
import ElectricModal from "./ElectricModal"
import EquipmentSupplier from "./EquipmentSupplier"
export default {
ElectricModal,
EquipmentSupplier,
PhysicalPileManagement,
GroundLockManagement
}
}

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

@ -171,68 +171,113 @@ $color-primary: var(--color-primary);
border-color: var(--color-border);
}
// .yisa-table {
// width: 100%;
// .ant-table-thead {
// th {
// background: var(--color-table-header-bg) !important;
// }
// }
// .ant-table-tbody {
// td {
// background: var(--color-table-body-bg) !important;
// border-bottom-color: var(--color-table-border-bottom-color);
// }
// tr:nth-child(even) {
// td {
// background: var(--color-table-body-bg-nth-child-even) !important;
// }
// }
// tr:nth-child(odd) {
// td {
// background: var(--color-table-body-bg-nth-child-even) !important;
// }
// }
// }
// }
.totalModal{
.ant-modal-footer{
display: none;
.totalModal {
.ruleTitle {
font-size: 16px;
font-weight: 700;
color: #ffffff;
}
position: absolute;
top: 40px;
right: 174px;
}
.ltc-item-img {
width: 390px;
height: 300px;
border: 1px solid;
background: #6565656b;
margin-right: 20px !important;
img {
height: 295px;
width: 387px;
// object-fit: contain;
.ant-modal-content{
width: 796px;
}
.modal-form{
margin: 20px 0 0 0;
.yisa-search{
margin-bottom: 20px;
label{
color: #eeeff1;
}
.ant-input-textarea-show-count:after{
position: absolute;
bottom: 19%;
right: 7%;
}
textarea{
position: relative;
}
}
}
.ant-modal-footer{
display: flex;
justify-content: center;
.ant-btn{
width: 88px;
height: 35px;
color: #fff;
border: none;
border-radius: 4px;
}
.ant-btn:last-child{
background: #409eff;
}
}
}
.hanleHistoyModal{
max-height: 700px;
overflow: auto;
}
.hanleHistoyModal::-webkit-scrollbar {
width: 5px;
}
.hanleHistoyModal::-webkit-scrollbar-thumb {
background-color: #9da2ab;
border-radius: 10px;
}
.modal-img{
img{
width: 200px;
height: 200px;
.detail-Modal{
.ruleTitle {
font-size: 16px;
font-weight: 700;
color: #ffffff;
}
.ltc-content {
display: flex;
flex-wrap: wrap;
margin: auto;
padding: 20px;
color: #ffffff;
.ltc-item {
font-size: 14px;
margin: 6px 12px 6px 0;
display: inline-flex;
flex: 1;
//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;
}
}
.last-row{
width: 100%;
display: flex;
flex-direction: column;
.rule-description{
.new-item{
line-height: 96px;
height: 96px;
}
.new-value{
width: 780px;
line-height: 96px;
height: 96px;
word-wrap:break-word
}
}
}
}
}

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

@ -18,55 +18,67 @@ import {
import { dictionary } from "@/config/common";
import ajax from "@/services";
import { TableModule } from "@/components";
import moment from 'moment'
import "./index.scss";
const { TextArea } = Input;
function BillingRule() {
//
const initFormData = {
operator_id: "0",
rule_name: "",
};
const params ={
operator_id:'',
rule_name:'',
rule_code:'',
rule_description:'',
time:moment().format("YYYY-MM-DD HH:mm:ss"),
username:''
}
// or
const [modalData, setModalData] = useState(params)
//
const [detailVisible, setDetailVisible] = useState(false);
//
const [tableData, setTableData] = useState([]);
//
const [total, setTotal] = useState(0);
//
const [detailData, setDetailData] = useState({});
//
const initFormData = {
operator: "0",
rule_name: "",
};
const [operatorOption, setOperatorOption] = useState([])
const [ruleDetailVisible, setRuleDetailVisible] = useState(false)
const [detailsData, setDetailsData] = useState({})
const tableRef = useRef(null)
const columns = [
{
title: "运营商名称",
dataIndex: "operator",
key: "operator",
dataIndex: "operator_name",
key: "operator_name",
align: "center",
},
{
title: "规则名称",
dataIndex: "plate",
key: "plate",
dataIndex: "rule_name",
key: "rule_name",
align: "center",
},
{
title: "规则编码",
dataIndex: "plate_color",
key: "plate_color",
dataIndex: "rule_code",
key: "rule_code",
align: "center",
},
{
title: "创建人",
dataIndex: "berth_id",
key: "berth_id",
dataIndex: "creator",
key: "creator",
width: 100,
align: "center",
},
{
title: "创建时间",
dataIndex: "in_time",
key: "in_time",
dataIndex: "create_time",
key: "create_time",
align: "center",
},
{
@ -79,9 +91,9 @@ function BillingRule() {
render: (text, record, index) => {
return (
<>
<Button type="primary" onClick={() => openModal(index, record)}>
<a type="primary" onClick={() => openModal(index, record)}>
详情
</Button>
</a>
</>
)
@ -91,11 +103,12 @@ function BillingRule() {
const formSearch = [
{
name: "operator",
name: "operator_id",
type: "Select",
label: "商名称",
label: "运营商名称",
defaultValue: "0",
placeholder: "请选择商户名称",
placeholder: "请选择运营商名称",
options:operatorOption.length ? operatorOption : [{value:"0",label:'全部'}]
},
{
name: "rule_name",
@ -107,21 +120,38 @@ function BillingRule() {
name: "timePeriod",
type: "RangePicker",
label: "时间段",
defaultValue: [moment().subtract(1,"months"), moment()]
},
];
//
const getAllOperator =() => {
ajax.getOperatorList().then((res) => {
if (res.status === 20000) {
setOperatorOption(res.data);
}
});
}
//
const openModal = (index, record) => {
setDetailData(record)
setDetailVisible(true);
setDetailsData(record)
setRuleDetailVisible(true);
}
//
const search = (params) => {
ajax.getParkingList(params).then((res) => {
console.log("params",params);
let data = {
...params,
type:1
}
ajax.getRegularList(data).then((res) => {
if (res.status === 20000) {
setTableData(res.data.list);
setTotal(res.data.total);
setModalData({
...modalData,
username:res.data.username,
})
} else {
message.error(res.message)
}
@ -129,9 +159,43 @@ function BillingRule() {
}
const handelAdd = () => {
setModalData({
...params,
username:modalData?.username
})
setDetailVisible(true)
}
// ok
const handleConfirm = () => {
if(!modalData?.operator_id){
message.warning("运营商名称不能为空")
return
}else if(!modalData?.rule_name){
message.warning("规则名称不能为空")
return
}else if(!modalData?.rule_code){
message.warning("规则编码不能为空")
return
}
//
ajax.addRule({...modalData,type:1}).then(res => {
if (res.status === 20000) {
message.success(res.message)
tableRef.current.fetch()
setModalData({
...params,
username:modalData?.username
})
setDetailVisible(false)
}
}).catch(err => {
console.log(err);
})
}
useEffect(() => {
getAllOperator()
},[])
return (
<>
<TableModule
@ -146,10 +210,10 @@ function BillingRule() {
</Button>
}
columns={columns}
ref={tableRef}
tableData={tableData}
formSearch={formSearch}
pagename="停车记录查询"
pageName={'billingRule'}
initFormData={initFormData}
total={total}
search={search}
@ -157,14 +221,145 @@ function BillingRule() {
/>
<Modal
open={detailVisible}
width={1500}
width={650}
className="totalModal"
onCancel={() => {
setModalData({...params,username:modalData?.username})
setDetailVisible(false);
}}
onOk={() => {
handleConfirm()
setDetailVisible(false);
}}
okText="保存"
destroyOnClose
>
<div className="ruleTitle">
<span className="font">新增规则</span>
</div>
<div className="modal-form">
<div className="yisa-search">
<em style={{marginRight:'5px',marginLeft:'-13px',color:'red'}}>*</em>
<label>运营商名称</label>
<Select
value={modalData.operator_id}
style={{ width: 660, marginLeft: 10 }}
options={operatorOption}
onChange={(v) => {setModalData({...modalData,operator_id:v})}}
/>
</div>
<div className="yisa-search" style={{marginLeft:13}}>
<em style={{marginRight:'5px',marginLeft:'-13px',color:'red'}}>*</em>
<label>规则名称</label>
<Input
placeholder="请输入名称"
value={modalData.rule_name}
style={{ width: 660, marginLeft: 10 }}
maxLength={30}
onChange={(v) => {setModalData({...modalData,rule_name:v.target.value})}}
/>
</div>
<div className="yisa-search" style={{marginLeft:13}}>
<em style={{marginRight:'5px',marginLeft:'-13px',color:'red'}}>*</em>
<label>规则编码</label>
<Input
placeholder="请输入编码"
value={modalData.rule_code}
style={{ width: 660, marginLeft: 10 }}
maxLength={30}
onChange={(v) => {setModalData({...modalData,rule_code:v.target.value})}}
/>
</div>
<div className="yisa-search" style={{marginLeft:26}}>
<em style={{marginRight:'5px',marginLeft:'-13px',color:'red'}}>*</em>
<label>创建人</label>
<Input
placeholder="请输入创建人"
value={modalData.username}
style={{ width: 660, marginLeft: 10 }}
maxLength={30}
disabled
// onChange={(v) => {setModalData({...modalData,creator:v.target.value})}}
/>
</div>
<div className="yisa-search" style={{marginLeft:12}}>
<em style={{marginRight:'5px',marginLeft:'-13px',color:'red'}}>*</em>
<label>创建时间</label>
<Input
placeholder="请输入创建时间"
value={modalData.time}
style={{ width: 660, marginLeft: 10 }}
maxLength={30}
disabled
// onChange={(v) => {setModalData({...modalData,creat_time:v.target.value})}}
/>
</div>
<div className="yisa-search" style={{display:"flex",marginLeft:13}}>
<label>规则描述</label>
<TextArea
showCount
placeholder="请输入规则描述"
value={modalData.rule_description}
style={{ width: 660,height:80, marginLeft: 7 }}
onChange={(v)=> setModalData({...modalData,rule_description:v.target.value})}
maxLength={200}
/>
</div>
</div>
</Modal>
<Modal
open={ruleDetailVisible}
width={1000}
className="detail-Modal"
footer={null}
destroyOnClose
onCancel={() => {
setRuleDetailVisible(false);
}}
>
<div className="ruleTitle">
<span className="font">新增规则</span>
</div>
<div className="ltc-content">
<div className="ltc-item">
<div className="new-item">运营商名称</div>
<div className="new-value">
{detailsData?.operator_name || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">规则名称</div>
<div className="new-value">
{detailsData?.rule_name || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">规则编码</div>
<div className="new-value">
{detailsData?.rule_code || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">创建人</div>
<div className="new-value">
{detailsData?.creator || "--"}
</div>
</div>
<div className="last-row">
<div className="ltc-item">
<div className="new-item">创建时间</div>
<div className="new-value">
{detailsData?.create_time || "--"}
</div>
</div>
<div className="ltc-item rule-description" >
<div className="new-item">规则描述</div>
<div className="new-value">
{detailsData?.rule_description || "--"}
</div>
</div>
</div>
</div>
</Modal>
</>
);

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

@ -171,68 +171,110 @@ $color-primary: var(--color-primary);
border-color: var(--color-border);
}
// .yisa-table {
// width: 100%;
// .ant-table-thead {
// th {
// background: var(--color-table-header-bg) !important;
// }
// }
// .ant-table-tbody {
// td {
// background: var(--color-table-body-bg) !important;
// border-bottom-color: var(--color-table-border-bottom-color);
// }
// tr:nth-child(even) {
// td {
// background: var(--color-table-body-bg-nth-child-even) !important;
// }
// }
// tr:nth-child(odd) {
// td {
// background: var(--color-table-body-bg-nth-child-even) !important;
// }
// }
// }
// }
.totalModal{
.ant-modal-footer{
display: none;
.totalModal {
.ruleTitle {
font-size: 16px;
font-weight: 700;
color: #ffffff;
}
position: absolute;
top: 40px;
right: 174px;
}
.ltc-item-img {
width: 390px;
height: 300px;
border: 1px solid;
background: #6565656b;
margin-right: 20px !important;
img {
height: 295px;
width: 387px;
// object-fit: contain;
.ant-modal-content{
width: 796px;
}
.modal-form{
margin: 20px 0 0 0;
.yisa-search{
margin-bottom: 20px;
label{
color: #eeeff1;
}
.ant-input-textarea-show-count:after{
position: absolute;
bottom: 19%;
right: 7%;
}
textarea{
position: relative;
}
}
}
.ant-modal-footer{
display: flex;
justify-content: center;
.ant-btn{
width: 88px;
height: 35px;
color: #fff;
border: none;
border-radius: 4px;
}
.ant-btn:last-child{
background: #409eff;
}
}
}
.hanleHistoyModal{
max-height: 700px;
overflow: auto;
}
.hanleHistoyModal::-webkit-scrollbar {
width: 5px;
}
.hanleHistoyModal::-webkit-scrollbar-thumb {
background-color: #9da2ab;
border-radius: 10px;
}
.modal-img{
img{
width: 200px;
height: 200px;
.detail-Modal{
.ruleTitle {
font-size: 16px;
font-weight: 700;
color: #ffffff;
}
.ltc-content {
display: flex;
flex-wrap: wrap;
margin: auto;
padding: 20px;
color: #ffffff;
.ltc-item {
font-size: 14px;
margin: 6px 12px 6px 0;
display: inline-flex;
flex: 1;
//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;
}
}
.rule-description{
.new-item{
line-height: 96px;
height: 96px;
}
.new-value{
width: 780px;
line-height: 96px;
height: 96px;
word-wrap:break-word
}
}
}
}

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

@ -13,161 +13,428 @@ import {
Select,
Image,
Timeline,
Popover
Popover,
Popconfirm
} from "antd";
import { dictionary } from "@/config/common";
import ajax from "@/services";
import { TableModule } from "@/components";
import moment from 'moment'
import "./index.scss";
const { TextArea } = Input;
function OrderRuleMgm() {
//
const [detailVisible, setDetailVisible] = useState(false);
//
const [tableData, setTableData] = useState([]);
//
const [total, setTotal] = useState(0);
//
const [detailData, setDetailData] = useState({});
//
const initFormData = {
operator: "0",
const initFormData = {
operator_id: "0",
rule_name: "",
};
const params ={
operator_id:'',
rule_name:'',
rule_code:'',
rule_description:'',
time:moment().format("YYYY-MM-DD HH:mm:ss"),
username:'',
status:1,
}
// or
const [modalData, setModalData] = useState(params)
//
const [detailVisible, setDetailVisible] = useState(false);
//
const [tableData, setTableData] = useState([]);
//
const [total, setTotal] = useState(0);
const [operatorOption, setOperatorOption] = useState([])
const [ruleDetailVisible, setRuleDetailVisible] = useState(false)
const [detailsData, setDetailsData] = useState({})
const tableRef = useRef(null)
const columns = [
{
title: "运营商名称",
dataIndex: "operator_name",
key: "operator_name",
align: "center",
},
{
title: "规则名称",
dataIndex: "rule_name",
key: "rule_name",
align: "center",
},
{
title: "规则编码",
dataIndex: "rule_code",
key: "rule_code",
align: "center",
},
{
title: "创建人",
dataIndex: "creator",
key: "creator",
width: 100,
align: "center",
},
{
title: "规则状态",
dataIndex: "status",
key: "status",
width: 100,
align: "center",
render:(_,record) => {
return(
<span style={
{
color:record ?.status ? "#2ADC41" : "#EC5761"}
}
>
{record?.status ? "正常" : "停用"}</span>
)
}
},
{
title: "创建时间",
dataIndex: "create_time",
key: "create_time",
align: "center",
},
{
title: "操作",
dataIndex: "operation",
key: "operation",
align: "center",
fixed: "right",
width: 100,
render: (text, record, index) => {
return (
<div style={{display:"flex",cursor:"pointer"}}>
<div style={{color:"#3AA9FF"}} onClick={() => openModal(index, record)}>
详情
</div>
<div
style={{marginLeft:10,color:record ?.status ? "#EC5761" : "#2ADC41"}}
>
<Popconfirm
placement="left"
title={record?.status ? "是否停用该规则" : "是否启动该规则"}
onConfirm={() => { handleRuleStatus(record?.id,record?.status ? 0 : 1) }}
okText="是"
cancelText="否">
{record?.status ? "停用" : "启动"}
</Popconfirm>
</div>
</div>
)
const columns = [
{
title: "运营商名称",
dataIndex: "operator",
key: "operator",
align: "center",
},
{
title: "规则名称",
dataIndex: "plate",
key: "plate",
align: "center",
},
{
title: "规则编码",
dataIndex: "plate_color",
key: "plate_color",
align: "center",
},
{
title: "创建人",
dataIndex: "berth_id",
key: "berth_id",
width: 100,
align: "center",
},
{
title: "创建时间",
dataIndex: "in_time",
key: "in_time",
align: "center",
},
{
title: "操作",
dataIndex: "operation",
key: "operation",
align: "center",
fixed: "right",
width: 100,
render: (text, record, index) => {
return (
<>
<Button type="primary" onClick={() => openModal(index, record)}>
详情
</Button>
</>
)
},
},
];
},
];
const formSearch = [
{
name: "operator",
type: "Select",
label: "商户名称",
defaultValue: "0",
placeholder: "请选择商户名称",
},
{
name: "rule_name",
type: "Input",
label: "规则名称",
placeholder: "请输入出场收费员",
},
{
name: "timePeriod",
type: "RangePicker",
label: "时间段",
},
];
//
const openModal = (index, record) => {
setDetailData(record)
setDetailVisible(true);
}
const formSearch = [
{
name: "operator_id",
type: "Select",
label: "运营商名称",
defaultValue: "0",
placeholder: "请选择运营商名称",
options:operatorOption.length ? operatorOption : [{value:"0",label:'全部'}]
},
{
name: "rule_name",
type: "Input",
label: "规则名称",
placeholder: "请输入出场收费员",
},
{
name: "timePeriod",
type: "RangePicker",
label: "时间段",
defaultValue: [moment().subtract(1,"months"), moment()]
},
];
//
const handleRuleStatus = (id,status) => {
ajax.updataRule({id,status}).then((res) => {
if (res.status == 20000) {
message.success(res.message)
tableRef.current.fetch()
}else{
message.success(res.message)
}
}).catch(e => {
console.log(e);
});
}
//
const search = (params) => {
ajax.getParkingList(params).then((res) => {
//
const getAllOperator =() => {
ajax.getOperatorList().then((res) => {
if (res.status === 20000) {
setTableData(res.data.list);
setTotal(res.data.total);
} else {
message.error(res.message)
setOperatorOption(res.data);
}else{
setOperatorOption([])
}
}).catch(e => {
console.log(e);
});
}
//
const openModal = (index, record) => {
setDetailsData(record)
setRuleDetailVisible(true);
}
const handelAdd = () => {
setDetailVisible(true)
//
const search = (params) => {
let data = {
...params,
type:2
}
ajax.getRegularList(data).then((res) => {
if (res.status === 20000) {
setTableData(res.data.list);
setTotal(res.data.total);
setModalData({
...modalData,
username:res.data.username,
})
} else {
message.error(res.message)
}
});
}
return (
<>
<TableModule
showSerial={true}
isExport={false}
diyButton={
<Button
type="primary"
onClick={handelAdd}
>
新增
</Button>
}
columns={columns}
tableData={tableData}
formSearch={formSearch}
pagename="停车记录查询"
pageName={'orderRuleMgm'}
initFormData={initFormData}
total={total}
search={search}
exportUrl="/api/bpm/record/get_record_export"
/>
<Modal
open={detailVisible}
width={1500}
className="totalModal"
onCancel={() => {
setDetailVisible(false);
}}
destroyOnClose
>
const handelAdd = () => {
setModalData({
...params,
username:modalData?.username
})
setDetailVisible(true)
}
</Modal>
</>
);
// ok
const handleConfirm = () => {
if(!modalData?.operator_id){
message.warning("运营商名称不能为空")
return
}else if(!modalData?.rule_name){
message.warning("规则名称不能为空")
return
}else if(!modalData?.rule_code){
message.warning("规则编码不能为空")
return
}
//
ajax.addRule({...modalData,type:2}).then(res => {
if (res.status === 20000) {
message.success(res.message)
tableRef.current.fetch()
setModalData({
...params,
username:modalData?.username
})
setDetailVisible(false)
}
}).catch(err => {
console.log(err);
})
}
useEffect(() => {
getAllOperator()
},[])
return (
<>
<TableModule
showSerial={true}
isExport={false}
diyButton={
<Button
type="primary"
onClick={handelAdd}
>
新增
</Button>
}
columns={columns}
ref={tableRef}
tableData={tableData}
formSearch={formSearch}
pagename="停车记录查询"
initFormData={initFormData}
total={total}
search={search}
exportUrl="/api/bpm/record/get_record_export"
/>
<Modal
open={detailVisible}
width={650}
className="totalModal"
onCancel={() => {
setModalData({...params,username:modalData?.username})
setDetailVisible(false);
}}
onOk={() => {
handleConfirm()
setDetailVisible(false);
}}
okText="保存"
destroyOnClose
>
<div className="ruleTitle">
<span className="font">新增规则</span>
</div>
<div className="modal-form">
<div className="yisa-search">
<em style={{marginRight:'5px',marginLeft:'-13px',color:'red'}}>*</em>
<label>运营商名称</label>
<Select
value={modalData.operator_id}
style={{ width: 660, marginLeft: 10 }}
options={operatorOption}
onChange={(v) => {setModalData({...modalData,operator_id:v})}}
/>
</div>
<div className="yisa-search" style={{marginLeft:13}}>
<em style={{marginRight:'5px',marginLeft:'-13px',color:'red'}}>*</em>
<label>规则名称</label>
<Input
placeholder="请输入名称"
value={modalData.rule_name}
style={{ width: 660, marginLeft: 10 }}
maxLength={30}
onChange={(v) => {setModalData({...modalData,rule_name:v.target.value})}}
/>
</div>
<div className="yisa-search" style={{marginLeft:13}}>
<em style={{marginRight:'5px',marginLeft:'-13px',color:'red'}}>*</em>
<label>规则编码</label>
<Input
placeholder="请输入编码"
value={modalData.rule_code}
style={{ width: 660, marginLeft: 10 }}
maxLength={30}
onChange={(v) => {setModalData({...modalData,rule_code:v.target.value})}}
/>
</div>
<div className="yisa-search" style={{marginLeft:26}}>
<em style={{marginRight:'5px',marginLeft:'-13px',color:'red'}}>*</em>
<label>创建人</label>
<Input
placeholder="请输入创建人"
value={modalData.username}
style={{ width: 660, marginLeft: 10 }}
maxLength={30}
disabled
// onChange={(v) => {setModalData({...modalData,creator:v.target.value})}}
/>
</div>
<div className="yisa-search" style={{marginLeft:12}}>
<em style={{marginRight:'5px',marginLeft:'-13px',color:'red'}}>*</em>
<label>创建时间</label>
<Input
placeholder="请输入创建时间"
value={modalData.time}
style={{ width: 660, marginLeft: 10 }}
maxLength={30}
disabled
// onChange={(v) => {setModalData({...modalData,creat_time:v.target.value})}}
/>
</div>
<div className="yisa-search" style={{marginLeft:12}}>
<em style={{marginRight:'5px',marginLeft:'-13px',color:'red'}}>*</em>
<label>规则状态</label>
<Select
value={modalData.status}
style={{ width: 660, marginLeft: 10 }}
options={[
{
value:1,
label:'正常'
},
{
value:0,
label:'停用'
}
]}
// onChange={(v) => {setModalData({...modalData,creat_time:v.target.value})}}
/>
</div>
<div className="yisa-search" style={{display:"flex",marginLeft:13}}>
<label>规则描述</label>
<TextArea
showCount
placeholder="请输入规则描述"
value={modalData.rule_description}
style={{ width: 660,height:80, marginLeft: 7 }}
onChange={(v)=> setModalData({...modalData,rule_description:v.target.value})}
maxLength={200}
/>
</div>
</div>
</Modal>
<Modal
open={ruleDetailVisible}
width={1000}
className="detail-Modal"
footer={null}
destroyOnClose
onCancel={() => {
setRuleDetailVisible(false);
}}
>
<div className="ruleTitle">
<span className="font">新增规则</span>
</div>
<div className="ltc-content">
<div className="ltc-item">
<div className="new-item">运营商名称</div>
<div className="new-value">
{detailsData?.operator_name || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">规则名称</div>
<div className="new-value">
{detailsData?.rule_name || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">规则编码</div>
<div className="new-value">
{detailsData?.rule_code || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">创建人</div>
<div className="new-value">
{detailsData?.creator || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">创建时间</div>
<div className="new-value">
{detailsData?.create_time || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">规则状态</div>
<div className="new-value">
{detailsData?.status || "--"}
</div>
</div>
<div className="ltc-item rule-description" >
<div className="new-item">规则描述</div>
<div className="new-value">
{detailsData?.rule_description || "--"}
</div>
</div>
</div>
</Modal>
</>
);
}
export default OrderRuleMgm;

1097
src/pages/NewEnergy/RealtimeMonitor/ChargerMonitor/loadable.jsx
File diff suppressed because it is too large
View File

76
src/pages/NewEnergy/RecordsInquiry/Appointment/loadable.jsx

@ -27,8 +27,8 @@ function Appointment() {
const columns = [
{
title: "用户手机号",
dataIndex: "operator",
key: "operator",
dataIndex: "phone",
key: "phone",
align: "center",
},
{
@ -39,62 +39,62 @@ function Appointment() {
},
{
title: "充电站",
dataIndex: "plate_color",
key: "plate_color",
dataIndex: "station",
key: "station",
align: "center",
},
{
title: "商户名称",
dataIndex: "berth_id",
key: "berth_id",
dataIndex: "operator",
key: "operator",
align: "center",
},
{
title: "预约开始时间",
dataIndex: "in_time",
key: "in_time",
title: "预约开始时间",
dataIndex: "pre_start_time",
key: "start_time",
align: "center",
},
{
title: "预约截至时间",
dataIndex: "in_time",
key: "in_time",
dataIndex: "pre_end_time",
key: "end_time",
align: "center",
},
{
title: "缴纳预约费用金额",
dataIndex: "in_time",
key: "in_time",
dataIndex: "pre_money",
key: "pre_money",
align: "center",
},
{
title: "缴费时间",
dataIndex: "in_time",
key: "in_time",
dataIndex: "pay_time",
key: "pay_time",
align: "center",
},
{
title: "订单状态",
dataIndex: "in_time",
key: "in_time",
dataIndex: "order_status",
key: "order_status",
align: "center",
},
{
title: "订单完结时间",
dataIndex: "in_time",
key: "in_time",
dataIndex: "finish_time",
key: "finish_time",
align: "center",
},
{
title: "预约费用退款金额",
dataIndex: "in_time",
key: "in_time",
dataIndex: "refund_money",
key: "refund_money",
align: "center",
},
{
title: "顶动感实收金额",
dataIndex: "in_time",
key: "in_time",
dataIndex: "pay_money",
key: "pay_money",
align: "center",
},
{
@ -131,7 +131,7 @@ function Appointment() {
placeholder: "请输入车牌号",
},
{
name: "charging",
name: "station",
type: "Input",
label: "充电站",
placeholder: "请输入充电站",
@ -144,12 +144,12 @@ function Appointment() {
placeholder: "请选择商户名称",
},
{
name: "timeStart",
name: "pre_time",
type: "DateRangePicker",
label: "预约开始时间",
},
{
name: "timeEnd",
name: "end_time",
type: "DateRangePicker",
label: "订单完结时间",
},
@ -163,10 +163,10 @@ function Appointment() {
//
const search = (params) => {
ajax.getParkingList(params).then((res) => {
ajax.recordsInquiry.getAppointmentList(params).then((res) => {
if (res.status === 20000) {
setTableData(res.data.list);
setTotal(res.data.total);
setTableData(res.data);
setTotal(res.total);
} else {
message.error(res.message)
}
@ -182,19 +182,19 @@ function Appointment() {
<TableModule
showSerial={true}
isExport={false}
diyButton={
<Button
type="primary"
onClick={handelAdd}
>
</Button>
}
// diyButton={
// <Button
// type="primary"
// onClick={handelAdd}
// >
//
// </Button>
// }
columns={columns}
tableData={tableData}
formSearch={formSearch}
pagename="预约订单"
pageName={'Appointment'}
pageName={'appointment'}
initFormData={initFormData}
total={total}
search={search}

66
src/pages/NewEnergy/RecordsInquiry/Charge/loadable.jsx

@ -27,56 +27,56 @@ function Charge() {
const columns = [
{
title: "充电订单号",
dataIndex: "operator",
key: "operator",
dataIndex: "order_id",
key: "order_id",
align: "center",
},
{
title: "充电站",
dataIndex: "plate",
key: "plate",
dataIndex: "name",
key: "name",
align: "center",
},
{
title: "充电电量",
dataIndex: "plate_color",
key: "plate_color",
dataIndex: "capacity",
key: "capacity",
align: "center",
},
{
title: "电费",
dataIndex: "berth_id",
key: "berth_id",
dataIndex: "electric",
key: "electric",
align: "center",
},
{
title: "充电服务费",
dataIndex: "in_time",
key: "in_time",
dataIndex: "service_fee",
key: "service_fee",
align: "center",
},
{
title: "充电收入",
dataIndex: "in_time",
key: "in_time",
dataIndex: "income",
key: "income",
align: "center",
},
{
title: "充电开始时间",
dataIndex: "in_time",
key: "in_time",
dataIndex: "start_time",
key: "start_time",
align: "center",
},
{
title: "充电结束时间",
dataIndex: "in_time",
key: "in_time",
dataIndex: "end_time",
key: "end_time",
align: "center",
},
{
title: "充电时长",
dataIndex: "in_time",
key: "in_time",
dataIndex: "duration",
key: "duration",
align: "center",
},
{
@ -86,34 +86,34 @@ function Charge() {
align: "center",
fixed: "right",
width: 100,
render: (text, record, index) => {
return (
<>
<Button type="primary" onClick={() => openModal(index, record)}>
</Button>
</>
)
// render: (text, record, index) => {
// return (
// <>
// <Button type="primary" onClick={() => openModal(index, record)}>
//
// </Button>
// </>
// )
},
// },
},
];
const formSearch = [
{
name: "phone",
name: "name",
type: "Input",
label: "充电站名称",
placeholder: "请输入充电站名称",
},
{
name: "plate",
name: "order_id",
type: "Input",
label: "订单编号",
placeholder: "请输入订单编号",
},
{
name: "timeStart",
name: "start_time",
type: "DateRangePicker",
label: "充电开始时间",
},
@ -127,10 +127,10 @@ function Charge() {
//
const search = (params) => {
ajax.getParkingList(params).then((res) => {
ajax.recordsInquiry.getChargeList(params).then((res) => {
if (res.status === 20000) {
setTableData(res.data.list);
setTotal(res.data.total);
setTableData(res.data);
setTotal(res.total);
} else {
message.error(res.message)
}

4
src/pages/NewEnergy/RecordsInquiry/Unlocking/index.jsx

@ -2,5 +2,5 @@ import React from "react"
import loadable from "@loadable/component"
import { LoadingImg } from "@/components"
const UnlockingRecord = loadable(() => import("./loadable"))
export default (pros) => <UnlockingRecord {...pros} fallback={<LoadingImg />} />
const Unlocking = loadable(() => import("./loadable"))
export default (pros) => <Unlocking {...pros} fallback={<LoadingImg />} />

97
src/pages/NewEnergy/RecordsInquiry/Unlocking/loadable.jsx

@ -21,10 +21,10 @@ import { TableModule } from "@/components";
import "./index.scss";
const { TextArea } = Input;
function UnlockingRecord() {
//
function Unlocking() {
//
const [detailVisible, setDetailVisible] = useState(false);
// const [detailVisible, setDetailVisible] = useState(false);
//
const [tableData, setTableData] = useState([]);
//
@ -33,91 +33,86 @@ function UnlockingRecord() {
const [detailData, setDetailData] = useState({});
//
const initFormData = {
operator: "0",
tel_number: "",
rule_name: "",
};
const formSearch = [
{
name: "tel_number",
name: "tel",
type: "Input",
label: "手机号",
placeholder: "请输入手机号",
label: "用户手机号",
placeholder: "请输入",
},
{
name: "tel_number",
name: "charging_station",
type: "Input",
label: "充电站",
placeholder: "请输入充电站",
placeholder: "请输入",
},
{
name: "tel_number",
name: "ground_lock_name",
type: "Input",
label: "地锁名称",
placeholder: "请输入地锁名称",
placeholder: "请输入",
},
{
name: "timePeriod",
type: "RangePicker",
label: "锁时间范围",
label: "锁时间范围",
},
]; //
]; //
const columns = [
{
title: "运营商名称",
dataIndex: "operator",
key: "operator",
title: "用户手机号",
dataIndex: "tel",
key: "tel",
align: "center",
},
{
title: "规则名称",
title: "车牌号",
dataIndex: "plate",
key: "plate",
align: "center",
},
{
title: "规则编码",
dataIndex: "plate_color",
key: "plate_color",
title: "地锁名称",
dataIndex: "ground_lock_name",
key: "ground_lock_name",
align: "center",
},
{
title: "创建人",
dataIndex: "berth_id",
key: "berth_id",
width: 100,
title: "所在充电站",
dataIndex: "local_charging_station",
key: "local_charging_station",
// width: 100,
align: "center",
},
{
title: "创建时间",
dataIndex: "in_time",
key: "in_time",
title: "降锁时间",
dataIndex: "lockdown_time",
key: "lockdown_time",
align: "center",
},
{
title: "操作",
dataIndex: "operation",
key: "operation",
title: "升锁时间",
dataIndex: "unlocking_time",
key: "unlocking_time",
align: "center",
fixed: "right",
width: 100,
render: (text, record, index) => {
return (
<>
<Button type="primary" onClick={() => openModal(index, record)}>
详情
</Button>
</>
)
},
// fixed: "right",
// width: 100,
},
{
title: "开锁方式",
dataIndex: "unlocking_method",
key: "unlocking_method",
align: "center",
// fixed: "right",
// width: 100,
},
]; //
//
const openModal = (index, record) => {
setDetailData(record)
@ -126,7 +121,7 @@ function UnlockingRecord() {
//
const search = (params) => {
ajax.getParkingList(params).then((res) => {
ajax.recordsInquiry.getUnlockingList(params).then((res) => {
if (res.status === 20000) {
setTableData(res.data.list);
setTotal(res.data.total);
@ -156,14 +151,14 @@ function UnlockingRecord() {
columns={columns}
tableData={tableData}
formSearch={formSearch}
pagename="停车记录查询"
pageName={'AppointmentRecord'}
pagename="开锁记录"
pageName={'unlockingRecord'}
initFormData={initFormData}
total={total}
search={search}
exportUrl="/api/bpm/record/get_record_export"
/>
<Modal
{/* <Modal
open={detailVisible}
width={1500}
className="totalModal"
@ -173,9 +168,9 @@ function UnlockingRecord() {
destroyOnClose
>
</Modal>
</Modal> */}
</>
);
}
export default UnlockingRecord;
export default Unlocking;

83
src/pages/NewEnergy/RecordsInquiry/Violation/loadable.jsx

@ -14,6 +14,8 @@ function Violation() {
const [detailVisible, setDetailVisible] = useState(false);
//
const [tableData, setTableData] = useState([]);
//
const [typeList, setTypeList] = useState([]);
//
const [total, setTotal] = useState(0);
//
@ -27,8 +29,8 @@ function Violation() {
const columns = [
{
title: "用户手机号",
dataIndex: "operator",
key: "operator",
dataIndex: "phone",
key: "phone",
align: "center",
},
{
@ -39,20 +41,20 @@ function Violation() {
},
{
title: "充电站",
dataIndex: "plate_color",
key: "plate_color",
dataIndex: "name",
key: "name",
align: "center",
},
{
title: "违规类型",
dataIndex: "berth_id",
key: "berth_id",
dataIndex: "type",
key: "type",
align: "center",
},
{
title: "记录创建时间",
dataIndex: "in_time",
key: "in_time",
dataIndex: "create_time",
key: "create_time",
align: "center",
},
{
@ -62,16 +64,16 @@ function Violation() {
align: "center",
fixed: "right",
width: 100,
render: (text, record, index) => {
return (
<>
<Button type="primary" onClick={() => openModal(index, record)}>
</Button>
</>
)
// render: (text, record, index) => {
// return (
// <>
// <Button type="primary" onClick={() => openModal(index, record)}>
//
// </Button>
// </>
// )
},
// },
},
];
@ -89,25 +91,40 @@ function Violation() {
placeholder: "请输入车牌号",
},
{
name: "charging",
name: "name",
type: "Input",
label: "充电站",
placeholder: "请输入充电站",
},
{
name: "operator",
name: "type",
type: "Select",
label: "违规类型",
options: typeList,
defaultValue: "0",
placeholder: "请选择违规类型",
},
{
name: "timeStart",
name: "create_time",
type: "DateRangePicker",
label: "记录创建时间",
},
];
//
const getSelect = () => {
ajax.recordsInquiry.getViolationSelect().then((res) => {
const { status, data } = res
if (status === 20000) {
if (data && data.length) {
setTypeList(data);
}
} else {
message.error(res.message)
}
});
}
//
const openModal = (index, record) => {
setDetailData(record)
@ -116,10 +133,10 @@ function Violation() {
//
const search = (params) => {
ajax.getParkingList(params).then((res) => {
ajax.recordsInquiry.getViolationList(params).then((res) => {
if (res.status === 20000) {
setTableData(res.data.list);
setTotal(res.data.total);
setTableData(res.data);
setTotal(res.total);
} else {
message.error(res.message)
}
@ -130,6 +147,10 @@ function Violation() {
setDetailVisible(true)
}
useEffect(() => {
getSelect()
}, [])
return (
@ -137,14 +158,14 @@ function Violation() {
<TableModule
showSerial={true}
isExport={false}
diyButton={
<Button
type="primary"
onClick={handelAdd}
>
</Button>
}
// diyButton={
// <Button
// type="primary"
// onClick={handelAdd}
// >
//
// </Button>
// }
columns={columns}
tableData={tableData}
formSearch={formSearch}

4
src/pages/OffPeak/OffPeakShareRecords/ShareParkMgm/loadable.jsx

@ -74,7 +74,7 @@ function ShareParkMgm() {
type: "SearchSelect",
label: "车场名称",
placeholder: "请输入车场名称",
name: "parkName",
name: "parkId",
options: [{label: '全部', value: ""}, ...parkList]
},
{
@ -153,7 +153,7 @@ function ShareParkMgm() {
//
const initFormData = {
merchantName: "0",
parkName: "",
parkId: "",
createPerson: ""
};
//

2
src/pages/OperationCenter/OtherBusiness/ParkingCard/ParkingCardMgm/index.scss

@ -78,7 +78,7 @@ $color-primary: var(--color-primary);
.btnBox {
display: flex;
margin-top: 20px;
width: 100%;
.yisa-btn {
margin-left: 20px;
width: 85px;

39
src/pages/OutRoadMgm/OutExceptionMgm/SpecialReleaseMgm/index.jsx

@ -15,7 +15,6 @@ import {
import moment from "moment";
import ajax from '@/services'
import { TableModule } from "@/components";
import { dictionary } from "@/config/common.js";
import "./index.scss";
//specialReleaseMgm
function SpecialReleaseMgm() {
@ -42,56 +41,56 @@ function SpecialReleaseMgm() {
{
title: "车牌号",
dataIndex: "plate",
key: "plate_old",
key: "plate",
align: "center",
fixed: "right",
},
{
title: "入场时间",
dataIndex: "plate",
key: "plate_new",
dataIndex: "in_time",
key: "in_time",
align: "center",
fixed: "right",
},
{
title: "出场时间",
dataIndex: "cr",
key: "cr",
dataIndex: "out_time",
key: "out_time",
align: "center",
fixed: "right",
},
{
title: "应收金额",
dataIndex: "co",
key: "co",
dataIndex: "shouldPay",
key: "shouldPay",
align: "center",
fixed: "right",
},
{
title: "通道名称",
dataIndex: "op",
key: "oe",
dataIndex: "parkName",
key: "parkName",
align: "center",
fixed: "right",
},
{
title: "开闸时间",
dataIndex: "o",
key: "o",
dataIndex: "open_gate_time",
key: "open_gate_time",
align: "center",
fixed: "right",
},
{
title: "开闸原因",
dataIndex: "",
key: "o",
dataIndex: "reason",
key: "reason",
align: "center",
fixed: "right",
},
{
title: "操作人",
dataIndex: "o",
key: "o",
dataIndex: "operatename",
key: "operatename",
align: "center",
fixed: "right",
},
@ -106,7 +105,7 @@ function SpecialReleaseMgm() {
<Button
type="primary"
onClick={() => {
getDetailData(record.id)
//getDetailData(record.id)
}}
>
详情
@ -125,7 +124,7 @@ function SpecialReleaseMgm() {
placeholder: "请输入车场名称",
},
{
name: "c",
name: "operatename",
type: "Input",
label: "操作人",
placeholder: "请输入操作人",
@ -141,7 +140,7 @@ function SpecialReleaseMgm() {
//
function search(e) {
ajax.getPlateChangeList(e).then((res) => {
ajax.getSpecialResList(e).then((res) => {
let { status, data, total } = res
if (status == 20000) {
if (data.list) {
@ -210,7 +209,7 @@ function SpecialReleaseMgm() {
search={search}
total={total}
rowKey={"road_name"}
exportUrl={'/api/bpm/correct/export_lift'}
exportUrl={'/api/bpm/special/export_lift'}
initFormData={{}}
pagename={'plateChangeMgm'}
/>

100
src/pages/OutRoadMgm/OutRoadOverview/loadable.jsx

@ -4,13 +4,20 @@ import shouruzonge from "@/assets/images/shouruzonge.png";
import ReactEcharts from "echarts-for-react";
import { useSelector } from "react-redux";
import "./index.scss";
import { VideoPlay } from "@/components";
import { Select, Tooltip } from "antd";
var timer = null;
const OutRoadOverview = () => {
const skin = useSelector((state) => {
return state.common.skin;
});
const textColor = skin == "dark" ? "#fff" : "#000";
const [refData, setRefData] = useState("https://sample-videos.com/video123/flv/720/big_buck_bunny_720p_1mb.flv")
const [videoType, setVideoType] = useState('flv')
const [videoRoad, setVideoRoad] = useState([])
const [roadId, setRoadId] = useState()
const [videoDevice, setVideoDevice] = useState([])
const [videoPlay, setVideoPlay] = useState('')
const [headerNums, setHeaderNums] = useState({
park_num: 0,
bowei_num: 0,
@ -270,7 +277,64 @@ const OutRoadOverview = () => {
console.error(err);
});
}
//-
function getOutRoadVideoRoad() {
ajax
.getOutRoadVideoRoad()
.then((res) => {
if (res.status === 20000) {
setVideoRoad(res.data);
}
})
.catch((err) => {
console.error(err);
});
}
//-
function getOutRoadVideoDevice() {
ajax
.getOutRoadVideoDevice()
.then((res) => {
if (res.status === 20000) {
setVideoDevice(res.data);
}
})
.catch((err) => {
console.error(err);
});
}
//
function getOutRoadVideoPlay(e) {
ajax
.getOutRoadVideoPlay(e)
.then((res) => {
if (res.status === 20000) {
setVideoPlay(res.data.url);
handleFlvPlay(res.data.url);
getOutRoadVideoPlaying(e) //
}
})
.catch((err) => {
console.error(err);
});
}
//
function getOutRoadVideoPlaying(e) {
timer = setInterval(() => {
ajax
.getOutRoadVideoPlaying(e)
.then((res) => {
if (res.status != 20000) {
clearInterval(timer);
}
})
.catch((err) => {
clearInterval(timer);
console.error(err);
});
}, 5000)
}
// -top5
function getIncomeTop5() {
ajax
@ -339,7 +403,12 @@ const OutRoadOverview = () => {
})
}
const videoRef = useRef()
const handleFlvPlay = (e) => {
videoRef.current.closeVideo()
setVideoType("mp4")
videoRef.current.changeUrl(e)
}
useEffect(() => {
getBaseNumber();
getIncomeTop5();
@ -347,8 +416,16 @@ const OutRoadOverview = () => {
getParkingIncome();
getParkingRecord();
getPageConfig();
getOutRoadVideoRoad();
return () => {
clearInterval(timer)
}
}, []);
useEffect(() => {
if (roadId) {
getOutRoadVideoDevice(roadId)
}
}, [roadId]);
return (
<div className="OutRoadOverview">
<div id="header">
@ -473,13 +550,18 @@ const OutRoadOverview = () => {
<div>
<Select
placeholder="请选择停车场"
options={[
{
label: "青岛停车场",
value: 0,
},
]}
value={roadId}
options={videoRoad}
onChange={(e) => setRoadId(e)}
/>
<Select
placeholder="请选择监控设备"
options={videoDevice}
onChange={(e) => { getOutRoadVideoPlay({ id: e, type: 1 }) }}
/>
<div>
<VideoPlay ref={videoRef} videoType={videoType} />
</div>
</div>
</div>
<div className="right">

2
src/pages/OutRoadMgm/OutSegmentMgm/OutSegment/ConfigParking/TollCollectorManagement.jsx

@ -169,7 +169,7 @@ function TollCollectorManagement({ id: road_id }) {
</Col>
<Col span="4_8" style={{ width: "30%" }}>
<Form.Item label="角色" name="user_account">
<Form.Item label="角色" name="role">
<Select options={sysConfig.orpMBUserRole} />
</Form.Item>
</Col>

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

@ -36,6 +36,7 @@ function ModalAreaAdd(props) {
}
onOk(formData={...formData,id: editForm.id, ...latlngObj}, editStatus, )
form.resetFields()
handleCancel()
}).catch((err) => {
console.log(err)
})

16
src/pages/SystemMgm/AreaManage/index.scss

@ -6,11 +6,21 @@ $color-primary : var(--color-primary);
.area-container {
padding: 13px 20px;
.ant-tree-list {
overflow: hidden;
}
.ant-tree {
width: 250px;
width: 300px;
.ant-tree-list-holder {
overflow: hidden;
}
.ant-tree-title {
.label-text {
// display: inline-block;
margin-right: 20px;
text-wrap: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.label-icon {
margin-right: 5px;
@ -45,7 +55,9 @@ $color-primary : var(--color-primary);
padding: 4px 0 !important;
width: 100%;
.ant-tree-node-content-wrapper {
width: 100%;
width: unset !important;
flex: 1;
min-width: 0;
}
.dropdown-tree {
display: none;

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

@ -160,9 +160,12 @@ function AreaManage() {
setModalAreaVisible(true)
}
}
const treeTitleRender = ({ name, children, level, pid, id, virtually_code, lng, lat, code, type }) => {
return <>
<span className='label-text'>{name}</span>
<span className='label-text' title={name}>
{name}
</span>
<div className="dropdown-tree">
<Dropdown
menu={{

10
src/pages/SystemMgm/OrgnizationMgm/index.scss

@ -11,10 +11,16 @@ $color-primary : var(--color-primary);
.org-tree-container {
width: 250px;
margin-right: 20px;
.ant-tree-list {
overflow: hidden;
}
.ant-tree {
.ant-tree-title {
.label-text {
margin-right: 20px;
text-wrap: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.label-icon {
margin-right: 5px;
@ -103,7 +109,9 @@ $color-primary : var(--color-primary);
padding: 4px 0 !important;
width: 100%;
.ant-tree-node-content-wrapper {
width: 100%;
width: unset !important;
flex: 1;
min-width: 0;
}
.dropdown-tree {
display: none;

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

@ -413,6 +413,14 @@ function OrgnizationMgm() {
setEditStatus(true)
}
const handleTreeText = (text) => {
if (text.length > 16) {
return text?.substring(0, 16) + '...'
} else {
return text
}
}
const tabRender = useMemo(() => {
return [
{
@ -533,7 +541,9 @@ function OrgnizationMgm() {
const treeTitleRender = ({ name, children, level, pid, id, virtually_code, lng_lat, code }) => {
return <>
<span className='label-text'>{name}</span>
<span className='label-text'>
{ name + 'kajsndkjand阿里山扩大你' }
</span>
<div className="dropdown-tree">
<Dropdown
menu={{

19
src/router/router.config.js

@ -1349,6 +1349,12 @@ let routes = [
component: pages.ChargeStationMgm,
},
{
path: "/newEnergy/chargeDeviceMgm",
text: "设备管理",
name: "chargeDeviceMgm",
component: pages.ChargeDeviceMgm,
},
{
path: "/newEnergy/charge",
text: "充电订单",
name: "charge",
@ -1401,7 +1407,18 @@ let routes = [
text: "地锁管理",
name: "groundLockManagement",
component: pages.GroundLockManagement,
}
},{
path: "/newEnergy/ElectricModal",
text: "电桩型号",
name: "ElectricModal",
component: pages.ElectricModal,
},
{
path: "/newEnergy/EquipmentSupplier",
text: "设备供应商",
name: "EquipmentSupplier",
component: pages.EquipmentSupplier,
},
],
},
];

32
src/services/NewEnergy/ChargeDeviceMgm.js

@ -8,7 +8,35 @@ const getList = (params) => {
data: params,
});
};
// 充电站管理
// 获取列表数据
const getElecList = (params) => {
return ajax({
url: "/api/nes/device/elec_list",
type: "post",
data: params,
});
};
// 获取站点状态
const getSiteStatus = (params) => {
return ajax({
url: "/api/fin/charge_station/site_status",
type: "get",
data: params,
});
};
// 新增充电站
const addStation = (params) => {
return ajax({
url: "/api/fin/charge_station/add_station",
type: "post",
data: params,
});
};
export default{
getList,
}
getList,
getSiteStatus,
getElecList,
addStation
}

41
src/services/NewEnergy/chargingMgm.js

@ -9,6 +9,45 @@ const getWechatMenuList = (params) => {
});
};
// 获取运营商下拉
const getOperatorList = (params) => {
return ajax({
url: "/api/nes/rule/operator",
type: "get",
data: params,
});
};
// 获取规则列表
const getRegularList = (params) => {
return ajax({
url: "/api/nes/rule/list",
type: "post",
data: params,
});
};
// 新增规则
const addRule = (params) => {
return ajax({
url: "/api/nes/rule/add",
type: "post",
data: params,
});
};
// 更新规则状态
const updataRule = (params) => {
return ajax({
url: "/api/nes/rule/update",
type: "post",
data: params,
});
};
export default{
getWechatMenuList
getWechatMenuList,
getOperatorList,
getRegularList,
addRule,
updataRule
}

7
src/services/NewEnergy/index.js

@ -1,11 +1,14 @@
import chargingMgm from './chargingMgm'
import chargeStationMgm from './ChargeStationMgm'
import realtimeMonitor from './realtimeMonitor'
import recordsInquiry from './recordsInquiry'
import ChargeDeviceMgm from './ChargeDeviceMgm'
export default {
...chargingMgm,
...chargeStationMgm,
...ChargeDeviceMgm,
...realtimeMonitor,
...ChargeDeviceMgm
...chargeStationMgm,
recordsInquiry,
}

55
src/services/NewEnergy/recordsInquiry.js

@ -0,0 +1,55 @@
import ajax from "@/config/ajax"
// 开锁记录查询
const getUnlockingList = (params) => {
return ajax({
url: "/api/new_power/records/unlocking",
type: "post",
data: params,
});
};
// 预约记录查询
const getAppointmentList = (params) => {
return ajax({
url: "/api/new_power/records/appointment_list",
type: "post",
data: params,
});
};
// 充电记录查询
const getChargeList = (params) => {
return ajax({
url: "/api/new_power/records/charge_list",
type: "post",
data: params,
});
};
// 违规记录查询
const getViolationList = (params) => {
return ajax({
url: "/api/new_power/records/violation_list",
type: "post",
data: params,
});
};
// 违规类型下拉
const getViolationSelect = (params) => {
return ajax({
url: "/api/new_power/records/violation_select",
type: "get",
data: params,
});
};
export default {
getUnlockingList,
getAppointmentList,
getChargeList,
getViolationList,
getViolationSelect
}

20
src/services/OutRoadMgm/OutExceptionMgm/index.js

@ -26,8 +26,28 @@ const getPlateChangeExport = (params) => {
data: params,
});
};
//异常管理-特殊方行记录-列表
const getSpecialResList = (params) => {
return ajax({
url: "/api/bpm/special/get_special_res",
type: "post",
data: params,
});
};
//异常管理-特殊方行记录-导出
const getSpecialResExp = (params) => {
return ajax({
url: "/api/bpm/special/export_lift",
type: "post",
data: params,
});
};
export default {
getPlateChangeList,
getPlateChangeDetail,
getPlateChangeExport,
getSpecialResList,
getSpecialResExp,
}

36
src/services/OutRoadMgm/OutRoadOverview.js

@ -41,10 +41,46 @@ const getOutRoadParkingRecordsInfo = (params) => {
data: params,
});
};
///概览-存在监控设备的停车场下拉框
const getOutRoadVideoRoad = (params) => {
return ajax({
url: "/api/orp/nvr/video_road",
type: "get",
data: params,
});
};
///概览-查指定车场存在的监控设备
const getOutRoadVideoDevice = (params) => {
return ajax({
url: "/api/orp/nvr/road_device",
type: "get",
data: params,
});
};
///查看监控视频
const getOutRoadVideoPlay = (params) => {
return ajax({
url: "/api/orp/nvr/get_video_play",
type: "post",
data: params,
});
};
///轮询请求正在播放的视频
const getOutRoadVideoPlaying = (params) => {
return ajax({
url: "/api/orp/nvr/playing_video",
type: "post",
data: params,
});
};
export default {
getOutRoadBaseInfo,
getOutRoadParkingTopInfo,
getOutRoadPaymentTopInfo,
getOutRoadParkingIncomeInfo,
getOutRoadParkingRecordsInfo,
getOutRoadVideoRoad,
getOutRoadVideoDevice,
getOutRoadVideoPlay,
getOutRoadVideoPlaying,
};
Loading…
Cancel
Save