Browse Source

feat(): 实时监控模块,新增电桩监控,充电监控

tags/PMS_V1.0.0_Alpha5
chenli 1 year ago
parent
commit
9f3707a9a9
  1. BIN
      src/assets/images/NewEnergy/RealtimeMonitor/PileMonitor/image-gz.png
  2. BIN
      src/assets/images/NewEnergy/RealtimeMonitor/PileMonitor/image-kx.png
  3. BIN
      src/assets/images/NewEnergy/RealtimeMonitor/PileMonitor/image-lx.png
  4. BIN
      src/assets/images/NewEnergy/RealtimeMonitor/PileMonitor/image-zdzs.png
  5. BIN
      src/assets/images/NewEnergy/RealtimeMonitor/PileMonitor/image-zy.png
  6. 3
      src/components/TableModule/index.jsx
  7. 183
      src/pages/NewEnergy/RealtimeMonitor/ChargerMonitor/dataSource.js
  8. 257
      src/pages/NewEnergy/RealtimeMonitor/ChargerMonitor/index.scss
  9. 193
      src/pages/NewEnergy/RealtimeMonitor/ChargerMonitor/loadable.jsx
  10. 183
      src/pages/NewEnergy/RealtimeMonitor/PileMonitor/dataSource.js
  11. 309
      src/pages/NewEnergy/RealtimeMonitor/PileMonitor/index.scss
  12. 323
      src/pages/NewEnergy/RealtimeMonitor/PileMonitor/loadable.jsx
  13. 46
      src/pages/NewEnergy/RecordsInquiry/Unlocking/loadable.jsx
  14. 40
      src/services/NewEnergy/realtimeMonitor.js

BIN
src/assets/images/NewEnergy/RealtimeMonitor/PileMonitor/image-gz.png

After

Width: 80  |  Height: 80  |  Size: 3.9 KiB

BIN
src/assets/images/NewEnergy/RealtimeMonitor/PileMonitor/image-kx.png

After

Width: 80  |  Height: 80  |  Size: 4.3 KiB

BIN
src/assets/images/NewEnergy/RealtimeMonitor/PileMonitor/image-lx.png

After

Width: 80  |  Height: 80  |  Size: 4.3 KiB

BIN
src/assets/images/NewEnergy/RealtimeMonitor/PileMonitor/image-zdzs.png

After

Width: 80  |  Height: 80  |  Size: 4.2 KiB

BIN
src/assets/images/NewEnergy/RealtimeMonitor/PileMonitor/image-zy.png

After

Width: 80  |  Height: 80  |  Size: 4.4 KiB

3
src/components/TableModule/index.jsx

@ -66,6 +66,7 @@ const TableModule = forwardRef((props, ref) => {
showSerial = false,//
limitType = 0, // 0 < 0 > 0
limit = 0, //
rightHeaderCompSlot= null, //
} = props;
const [sessionTabList, setSessionTabList] = useSessionStorageState(pageName, {
value: {}
@ -1051,7 +1052,7 @@ const TableModule = forwardRef((props, ref) => {
</div>
</div>
: null}
{rightHeaderCompSlot}
<div className="total-row-wrapper">
<span className="number-wrapper">
<span className="letter">共查询到</span>

183
src/pages/NewEnergy/RealtimeMonitor/ChargerMonitor/dataSource.js

@ -1,183 +0,0 @@
//用来存储表头的js文件
import React from "react";
import { Button } from "antd";
//支付记录的表头
export const payRecordColumns = [
{
title: "序号",
dataIndex: "id",
key: "id",
align: "center",
render: (text, record, index) => index + 1,
},
{
title: "订单ID",
dataIndex: "order_id",
key: "order_id",
align: "center",
},
{
title: "入场时间",
dataIndex: "admission_time",
key: "admission_time",
align: "center",
},
{
title: "计费时间",
dataIndex: "charging_time",
key: "charging_time",
align: "center",
},
{
title: "支付时间",
dataIndex: "pay_time",
key: "pay_time",
align: "center",
},
{
title: "应收金额",
dataIndex: "receivable_amount",
key: "receivable_amount",
align: "center",
},
{
title: "优惠金额",
dataIndex: "discount_amount",
key: "discount_amount",
align: "center",
},
{
title: "实付金额",
dataIndex: "paid_in_money",
key: "paid_in_money",
align: "center",
},
{
title: "支付类型",
dataIndex: "pay_type_name",
key: "pay_type_name",
align: "center",
},
{
title: "支付渠道",
dataIndex: "payment_channels",
key: "payment_channels",
align: "center",
},
{
title: "支付设备",
dataIndex: "payment_equipment",
key: "payment_equipment",
align: "center",
},
{
title: "支付人",
dataIndex: "pay_person",
key: "pay_person",
align: "center",
},
{
title: "付款路段",
dataIndex: "pay_road",
key: "pay_road",
align: "center",
},
{
title: "第三方流水ID",
dataIndex: "third_party_flow_id",
key: "third_party_flow_id",
align: "center",
},
];
//退款订单的表头
export const refundRecordColumns = [
{
title: "序号",
dataIndex: "id",
key: "id",
align: "center",
render: (text, record, index) => index + 1,
},
{
title: "退款方式",
dataIndex: "refund_type",
key: "refund_type",
align: "center",
},
{
title: "支付渠道",
dataIndex: "pay_road",
key: "pay_road",
align: "center",
},
{
title: "支付设备",
dataIndex: "paymentDevice",
key: "paymentDevice",
align: "center",
},
{
title: "退款原因",
dataIndex: "reason",
key: "reason",
align: "center",
},
{
title: "退款金额",
dataIndex: "refund_amount",
key: "refund_amount",
align: "center",
},
{
title: "申请人",
dataIndex: "application_person",
key: "application_person",
align: "center",
},
{
title: "申请时间",
dataIndex: "application_time",
key: "application_time",
align: "center",
},
{
title: "退款时间",
dataIndex: "refund_time",
key: "refund_time",
align: "center",
},
];
//操作记录
export const operatorRecordColumns = [
{
title: "序号",
dataIndex: "id",
key: "id",
align: "center",
render: (text, record, index) => index + 1,
},
{
title: "操作类型",
dataIndex: "type",
key: "type",
align: "center",
},
{
title: "操作来源",
dataIndex: "source",
key: "source",
align: "center",
},
{
title: "操作人/设备",
dataIndex: "object",
key: "object",
align: "center",
},
{
title: "操作时间",
dataIndex: "time",
key: "time",
align: "center",
},
];

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

@ -1,238 +1,29 @@
@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;
.TableModule {
&.real-time-monitor_charger-monitor {
// .left-search{
// }
.right-list {
.cc-result-flow {
.ant-table-wrapper {
.custom-table-cell-span {
&.charge-status {
&__1 {
color: #2adc41;
}
&__2 {
color: #f99b2f;
}
&__3 {
color: #ec5761;
}
&__4 {
color: #a0b0bd;
}
}
}
}
}
}
}
}
.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);
}
// .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;
}
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;
}
}

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

@ -30,69 +30,68 @@ import {
} from "./dataSource";
// import errorImg from "@/assets/images/layout/error.png"
const { TextArea } = Input;
function ChargerMonitor() {
const [tableData, setTableData] = useState([]);
const [total, setTotal] = useState(0);
const [tableData, setTableData] = useState([]); //
const [total, setTotal] = useState(0); //
const initFormData = {
charge_station: "", //
tel: "", //
status: "", //
plate: "", //
charge_status: "", //
time:{
}
phone: "", //
station_name: "", //
start_time: "", //
end_time: "", //
}; //
const formSearch = [
{
label: "充电桩",
name: "charge_station",
name: "charging_pile",
type: "Input",
placeholder: "请输入",
},
{
label: "会员手机",
name: "tel",
name: "phone",
type: "Input",
placeholder: "请输入会员手机",
},
{
label: "车牌号",
name: "plate_num",
name: "plate",
type: "Input",
placeholder: "请输入车牌号",
},
{
label: "充电状态",
name: "charge_status",
name: "charging_status",
type: "Select",
placeholder: "请输入",
options:[]
placeholder: "请选择充电状态",
defaultValue: 0,
options: sysConfig.energyChargingStatus,
},
{
name: "time",
type: "RangePicker",
label: "充电开始时间",
defaultTitle: ["充电开始时间", " "],
},
]; //
const columns = [
{
title: "序号",
dataIndex: "index",
key: "index",
align: "center",
fixed: "left",
render: (text, record, index) => index + 1,
width: 100,
},
// {
// title: "",
// dataIndex: "index",
// key: "index",
// align: "center",
// fixed: "left",
// render: (text, record, index) => index + 1,
// width: 100,
// },
{
title: "用户手机号",
dataIndex: "user_tel",
key: "user_tel",
dataIndex: "phone",
key: "phone",
align: "center",
},
{
@ -103,38 +102,70 @@ function ChargerMonitor() {
},
{
title: "枪名称",
dataIndex: "plate_color",
key: "plate_color",
dataIndex: "muzzle_type_text",
key: "muzzle_type_text",
align: "center",
render: (val, record) => {
return (
<span
className={`custom-table-cell-span muzzle-type muzzle-type__${record?.muzzle_type}`}
>
{val || "-"}
</span>
);
},
},
{
title: "充电站",
dataIndex: "berth_id",
key: "berth_id",
width: 100,
dataIndex: "station_name",
key: "station_name",
// width: 100,
align: "center",
},
{
title: "充电开始时间",
dataIndex: "in_time",
key: "in_time",
dataIndex: "charge_start_time",
key: "charge_start_time",
align: "center",
},
{
title: "充电状态",
dataIndex: "operation",
key: "operation",
dataIndex: "charge_status_text",
key: "charge_status_text",
align: "center",
fixed: "right",
width: 100,
// fixed: "right",
// width: 100,
render: (val, record) => {
return (
<span
className={`custom-table-cell-span charge-status charge-status__${record?.charge_status}`}
>
{val || "-"}
</span>
);
},
},
{
title: "图像记录",
dataIndex: "operation",
key: "operation",
dataIndex: "pic_url",
key: "pic_url",
align: "center",
fixed: "right",
width: 100,
// fixed: "right",
// width: 100,
render: (val, record) => {
return (
<>
<a
href="javascript:void(0)"
onClick={() => {
openImgRecordModal(val);
}}
>
查看
</a>
</>
);
},
},
{
title: "操作",
@ -143,39 +174,83 @@ function ChargerMonitor() {
align: "center",
fixed: "right",
width: 100,
render: (val, record) => {
return (
<>
<span>-</span>
</>
);
},
},
]; //
//
function search(params) {
// utils.tableScrollTop("parent-table-scroll")
ajax.getParkingList(params).then((res) => {
if (res.status === 20000) {
setTableData(res.data.list);
setTotal(res.data.total);
} else {
message.error(res.message);
}
});
ajax
.getChargingMonitorList(params)
.then((res) => {
if (res.status === 20000) {
setTableData(res.data.list);
setTotal(res.data.total);
} else {
message.error(res.message);
}
})
.catch((err) => {
console.error(err);
});
}
useEffect(() => {}, []);
//
const [ImgRecordShow, setImgRecordShow] = useState(false);
const [ImgRecordData, setImgRecordData] = useState({
pic_url: "",
});
const openImgRecordModal = (pic_url = "") => {
setImgRecordShow(true);
setImgRecordData({ pic_url });
};
const closeImgRecordModal = () => {
setImgRecordShow(false);
};
return (
<>
<TableModule
className={"real-time-monitor_charger-monitor"}
showSerial={true}
pagename="充电监控"
pageName={"chargerMonitor"}
mandatory={["plate", "berth_id"]}
mandatory_name={["车牌号或泊位号"]}
total={total}
search={search}
initFormData={initFormData}
formSearch={formSearch}
columns={columns}
search={search}
tableData={tableData}
formSearch={formSearch}
initFormData={initFormData}
exportUrl="/api/new_power/records/unlocking"
total={total}
isExport={false}
// exportUrl="/api/new_power/records/unlocking"
/>
<Modal
title={"查看详情"}
className={"custom-modal "}
width={1200}
open={ImgRecordShow}
footer={null}
onCancel={() => {
closeImgRecordModal();
}}
>
<div className="content">
<Image
width={1000}
height={600}
url={ImgRecordData?.pic_url}
preview={false}
fallback="data:image/png;base64,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"
></Image>
</div>
</Modal>
</>
);
}

183
src/pages/NewEnergy/RealtimeMonitor/PileMonitor/dataSource.js

@ -1,183 +0,0 @@
//用来存储表头的js文件
import React from "react";
import { Button } from "antd";
//支付记录的表头
export const payRecordColumns = [
{
title: "序号",
dataIndex: "id",
key: "id",
align: "center",
render: (text, record, index) => index + 1,
},
{
title: "订单ID",
dataIndex: "order_id",
key: "order_id",
align: "center",
},
{
title: "入场时间",
dataIndex: "admission_time",
key: "admission_time",
align: "center",
},
{
title: "计费时间",
dataIndex: "charging_time",
key: "charging_time",
align: "center",
},
{
title: "支付时间",
dataIndex: "pay_time",
key: "pay_time",
align: "center",
},
{
title: "应收金额",
dataIndex: "receivable_amount",
key: "receivable_amount",
align: "center",
},
{
title: "优惠金额",
dataIndex: "discount_amount",
key: "discount_amount",
align: "center",
},
{
title: "实付金额",
dataIndex: "paid_in_money",
key: "paid_in_money",
align: "center",
},
{
title: "支付类型",
dataIndex: "pay_type_name",
key: "pay_type_name",
align: "center",
},
{
title: "支付渠道",
dataIndex: "payment_channels",
key: "payment_channels",
align: "center",
},
{
title: "支付设备",
dataIndex: "payment_equipment",
key: "payment_equipment",
align: "center",
},
{
title: "支付人",
dataIndex: "pay_person",
key: "pay_person",
align: "center",
},
{
title: "付款路段",
dataIndex: "pay_road",
key: "pay_road",
align: "center",
},
{
title: "第三方流水ID",
dataIndex: "third_party_flow_id",
key: "third_party_flow_id",
align: "center",
},
];
//退款订单的表头
export const refundRecordColumns = [
{
title: "序号",
dataIndex: "id",
key: "id",
align: "center",
render: (text, record, index) => index + 1,
},
{
title: "退款方式",
dataIndex: "refund_type",
key: "refund_type",
align: "center",
},
{
title: "支付渠道",
dataIndex: "pay_road",
key: "pay_road",
align: "center",
},
{
title: "支付设备",
dataIndex: "paymentDevice",
key: "paymentDevice",
align: "center",
},
{
title: "退款原因",
dataIndex: "reason",
key: "reason",
align: "center",
},
{
title: "退款金额",
dataIndex: "refund_amount",
key: "refund_amount",
align: "center",
},
{
title: "申请人",
dataIndex: "application_person",
key: "application_person",
align: "center",
},
{
title: "申请时间",
dataIndex: "application_time",
key: "application_time",
align: "center",
},
{
title: "退款时间",
dataIndex: "refund_time",
key: "refund_time",
align: "center",
},
];
//操作记录
export const operatorRecordColumns = [
{
title: "序号",
dataIndex: "id",
key: "id",
align: "center",
render: (text, record, index) => index + 1,
},
{
title: "操作类型",
dataIndex: "type",
key: "type",
align: "center",
},
{
title: "操作来源",
dataIndex: "source",
key: "source",
align: "center",
},
{
title: "操作人/设备",
dataIndex: "object",
key: "object",
align: "center",
},
{
title: "操作时间",
dataIndex: "time",
key: "time",
align: "center",
},
];

309
src/pages/NewEnergy/RealtimeMonitor/PileMonitor/index.scss

@ -1,238 +1,85 @@
@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%;
// 组件样式修改
.TableModule {
&.real-time-monitor_pile-monitor {
// .left-search {
// }
.right-list {
.custom-right-list-header {
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;
// align-items: center;
height: 100px;
padding-bottom: 20px;
.item {
width: 20%;
height: 80px;
display: flex;
.item-left {
width: 80px;
height: 100%;
.img {
width: 80px;
height: 100%;
border: none;
background-size: 100% 100%;
&-zdzs{
background: url("@/assets/images/NewEnergy/RealtimeMonitor/PileMonitor/image-zdzs.png");
}
&-kx{
background: url("@/assets/images/NewEnergy/RealtimeMonitor/PileMonitor/image-kx.png");
}
&-zy{
background: url("@/assets/images/NewEnergy/RealtimeMonitor/PileMonitor/image-zy.png");
}
&-gz{
background: url("@/assets/images/NewEnergy/RealtimeMonitor/PileMonitor/image-gz.png");
}
&-lx{
background: url("@/assets/images/NewEnergy/RealtimeMonitor/PileMonitor/image-lx.png");
}
}
}
.item-right {
width: calc(100% - 80px);
padding-left: 15px;
display: flex;
flex-direction: column;
justify-content: center;
span {
&.num {
color: #fff;
font-size: 20px;
font-family: Microsoft YaHei, Microsoft YaHei-Bold;
font-weight: 700;
text-align: left;
color: #ffffff;
}
&.label {
opacity: 0.8;
font-size: 14px;
font-family: Microsoft YaHei, Microsoft YaHei-Regular;
font-weight: 400;
text-align: left;
color: #ffffff;
}
}
}
}
}
}
}
}
.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);
.cc-result-flow {
height: calc(100% - 34px - 13px - 100px);
.ant-table-wrapper {
.custom-table-cell-span {
&.online-status {
&__2 {
color: #2adc41;
}
&__1 {
color: #ec5761;
}
}
}
}
}
}
}
}
.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);
}
// .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;
}
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;
}
}

323
src/pages/NewEnergy/RealtimeMonitor/PileMonitor/loadable.jsx

@ -1,4 +1,4 @@
import React, { useState, useRef, useEffect } from "react";
import React, { useState, useRef, useEffect, useMemo } from "react";
import {
message,
Pagination,
@ -13,109 +13,124 @@ import {
Select,
Image,
Timeline,
Popover
Popover,
} from "antd";
import { dictionary, utils } from "@/config/common";
// import moment from 'moment'
// import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks';
import { ResultFlow, ExportBtnNew, QuickMenu } from "@/components";
import ajax from "@/services";
import errorImg from '@/assets/images/error-img-new.png'
import { QuestionCircleOutlined } from '@ant-design/icons';
import errorImg from "@/assets/images/error-img-new.png";
import { QuestionCircleOutlined } from "@ant-design/icons";
import { TableModule } from "@/components";
import "./index.scss";
import { functions } from "lodash";
// import errorImg from "@/assets/images/layout/error.png"
// import { useLocation } from "react-router-dom";
const { TextArea } = Input;
let array = [];
function PileMonitor() {
// const [pageData,setPageData] = useState({
// pn:1,
// page_size:15
// })
// const [loading,setLoading] = useState(false);
const [tableData, setTableData] = useState([]); //
const [total, setTotal] = useState(0); //
const [statsData, setStatsData] = useState({}); //
const initFormData = {
station_name: "", //
muzzle_text: "", //
pile_type: "", //
charge_status: "", //
}; //
const formSearch = [
{
name: "device_name",
label: "充电桩",
name: "station_name",
type: "Input",
label: "设备名称",
placeholder:"请输入"
placeholder: "请输入",
},
{
name: "device_num",
label: "枪名称",
name: "muzzle_text",
type: "Input",
label: "设备编码",
placeholder:"请输入"
placeholder: "请输入",
},
{
name: "device_state",
label: "充电类型",
name: "pile_type",
type: "Select",
label: "设备状态",
defaultValue: 0,
options: sysConfig.energyDeviceType,
options: sysConfig.energyChargingType,
},
{
name: "lock_state",
label: "枪状态",
name: "charge_status",
type: "Select",
label: "车位锁状态",
defaultValue: 0,
options: sysConfig.energyLockState,
options: sysConfig.energyChargingGunStatus,
},
];
const initFormData = {
device_name:"",
device_num:""
};
//
]; //
const columns = [
{
title: "序号",
dataIndex: "id",
key: "id",
title: "桩名称",
dataIndex: "name",
key: "name",
align: "center",
render: (text, record, index) => index + 1,
},
{
title: "设备名称",
dataIndex: "device_name",
key: "device_name",
title: "名称",
dataIndex: "muzzle_text",
key: "muzzle_text",
align: "center",
},
{
title: "设备编码",
dataIndex: "device_num",
key: "device_num",
align: "center",
},
{
title: "设备类型",
dataIndex: "device_type",
key: "device_type",
title: "在线状态",
dataIndex: "pile_status_text",
key: "pile_status_text",
align: "center",
render: (val, record) => {
return (
<span
className={`custom-table-cell-span online-status__${record?.pile_status}`}
>
{val}
</span>
);
},
},
{
title: "设备供应商",
dataIndex: "device_vendor",
key: "device_vendor",
title: "枪状态",
dataIndex: "charge_status_text",
key: "charge_status_text",
align: "center",
// render: (val, record) => {
// return (
// <span
// className={`custom-table-cell-span gun-status__${record?.muzzle_type}`}
// >
// {val}
// </span>
// );
// },
},
{
title: "对接平台",
dataIndex: "platform",
key: "platform",
title: "地锁状态",
dataIndex: "lock_status_text",
key: "lock_status_text",
align: "center",
},
{
title: "车位锁状态",
dataIndex: "lock_state_name",
key: "lock_state_name",
title: "充电类型",
dataIndex: "type_text",
key: "type_text",
align: "center",
},
{
title: "设备状态",
dataIndex: "device_state_name",
key: "device_state_name",
title: "充电站",
dataIndex: "station_name",
key: "station_name",
align: "center",
},
{
@ -123,53 +138,187 @@ function PileMonitor() {
dataIndex: "operation",
key: "operation",
align: "center",
fixed: "right",
render: (_, record) => {
return (
<Button
type="primary"
>
操作
</Button>
);
return <></>;
// return <Button type="primary"></Button>;
},
},
];
]; //
const [tableData, setTableData] = useState([]);
const [total, setTotal] = useState(0);
//
function search(params) {
utils.tableScrollTop("parent-table-scroll")
ajax.getPileMonitor(params).then((res) => {
if (res.status === 20000) {
setTableData(res.data.list);
setTotal(res.data.total);
}else{
message.error(res.message)
}
});
utils.tableScrollTop("parent-table-scroll");
// setLoading(true);
ajax
.getPileMonitorList(params)
.then((res) => {
if (res.status === 20000) {
setTableData(res?.data?.list ?? []);
setTotal(res?.data?.total ?? 0);
} else {
message.error(res.message);
}
})
.catch((err) => {
console.error(err);
})
.finally(() => {
// setLoading(false);
});
}
//
function getStatsData(params) {
ajax
.getPileMonitorStatsData()
.then((res) => {
if (res.status === 20000) {
setStatsData(res.data ?? {});
} else {
message.error(res.message);
}
})
.catch((err) => {
console.error(err);
})
.finally(() => {
// setLoading(false);
});
}
useEffect(() => {
getStatsData();
}, []);
//
const renderRightListHeader = useMemo(() => {
const renderItem = (type, num, label) => {
return (
<div className="item">
<div className="item-left">
{/* <img src="" alt="" /> */}
<div className={`img img-${type}`}></div>
</div>
<div className="item-right">
<span className="num">{num ?? 0}</span>
<span className="label">{label }</span>
</div>
</div>
);
};
return (
<div className="custom-right-list-header">
{renderItem("zdzs", statsData?.all_count, "终端总数(个)")}
{renderItem("kx", statsData?.kx_count, "空闲(个)")}
{renderItem("zy", statsData?.zy_count, "占用(个)")}
{renderItem("gz", statsData?.gz_count, "故障(个)")}
{renderItem("lx", statsData?.lx_count, "离线(个)")}
</div>
);
}, [statsData]);
return (
<>
<TableModule
showSerial={true}
columns={columns}
tableData={tableData}
formSearch={formSearch}
className={"real-time-monitor_pile-monitor"}
pagename="电桩监控"
// mandatory={['plate','berth_id']}
// mandatory_name={['']}
pageName={'pileMonitor'}
pageName={"pileMonitor"}
initFormData={initFormData}
total={total}
search={search}
// exportUrl="/api/bpm/record/get_record_export"
rightHeaderCompSlot={renderRightListHeader}
isExport={false}
/>
{/* <div className="pile-monitor" >
<div className="left-search">
<div className="title">{"查询条件"}</div>
<div className="searchWrap">
{renderSearch()}
<div className="bottomBox">
<Button className="reset" onClick={reset}>
重置
</Button>
<Button type="primary" className="submit"
onClick={() => {
if(pageData.pn == 1){
fetch(1)
}else{
setPageData({ ...pageData, pn: 1 })
fetch({ ...pageData, pn: 1 })
}
}}>
查询
</Button>
{renderAdd()}
</div>
</div>
</div>
<div className="right-list">
<div className="total-row-wrapper">
<span className="number-wrapper">
<span className="letter">共查询到</span>
<span className="total-number"> {total}</span>
<span className="letter">条结果</span>
</span>
<div className="right-button-group">
{true && (
total ? (
<ExportBtnNew
children={<Button className="export-btn" size='medium' type="primary">导出</Button>}
modalType="noImg"
ref={exportRef}
totalRecords={total}
exportUrl={exportUrl}
imgno={false}
postdata={{
formData: pageData
}}
isTableModule={true}
onOk={handleExport}
/>
) : <></>
)}
</div>
</div>
<ResultFlow
hasLoad={true}
loading={loading}
resultData={tableData}
message={"暂无数据"}
>
<div className="table-wrap parent-table-scroll">
<Table
rowSelection={rowSelection}
rowKey={rowKey}
columns={getNewColumns()}
dataSource={tableData}
pagination={false}
locale={locale}
/>
</div>
<div>
<Pagination
className="pagination-common"
showSizeChanger={true}
showQuickJumper={true}
// showTotal={() => ` ${total_records} `}
total={total}
current={pageData.pn}
pageSize={pageData.page_size}
pageSizeOptions={dictionary?.pageSizeOptions}
onChange={onChange}
// onShowSizeChange={onShowSizeChange}
/>
</div>
</ResultFlow>
</div>
</div> */}
</>
);
}

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

@ -19,22 +19,21 @@ import { dictionary } from "@/config/common";
import ajax from "@/services";
import { TableModule } from "@/components";
import "./index.scss";
import moment from "moment";
const { TextArea } = Input;
//
function Unlocking() {
//
// const [detailVisible, setDetailVisible] = useState(false);
//
const [tableData, setTableData] = useState([]);
//
const [total, setTotal] = useState(0);
//
const [detailData, setDetailData] = useState({});
const [tableData, setTableData] = useState([]); //
const [total, setTotal] = useState(0); //
//
const initFormData = {
tel_number: "",
rule_name: "",
tel: "",
charging_station: "",
ground_lock_name: "",
unlocking_timerange:[moment().subtract(1,"weeks"),moment()]
};
const formSearch = [
@ -57,9 +56,9 @@ function Unlocking() {
placeholder: "请输入",
},
{
name: "timePeriod",
type: "RangePicker",
label: "降锁时间范围",
name: "unlocking_timerange",
type: "DateRangePicker",
label: "降锁时间",
},
]; //
@ -113,14 +112,14 @@ function Unlocking() {
},
]; //
//
const openModal = (index, record) => {
setDetailData(record)
setDetailVisible(true);
}
//
const search = (params) => {
let temp_obj = {...params}
if(temp_obj.unlocking_timerange?.length){
temp_obj.unlocking_timerange = temp_obj.unlocking_timerange[0].format('YYYY-MM-DD') + ',' + temp_obj.unlocking_timerange[1].format('YYYY-MM-DD')
}else{
temp_obj.unlocking_timerange = ''
}
ajax.recordsInquiry.getUnlockingList(params).then((res) => {
if (res.status === 20000) {
setTableData(res.data.list);
@ -131,9 +130,6 @@ function Unlocking() {
});
}
const handelAdd = () => {
setDetailVisible(true)
}
return (
<>
@ -143,7 +139,7 @@ function Unlocking() {
diyButton={
<Button
type="primary"
onClick={handelAdd}
onClick={()=>{}}
>
新增
</Button>
@ -156,7 +152,7 @@ function Unlocking() {
initFormData={initFormData}
total={total}
search={search}
exportUrl="/api/bpm/record/get_record_export"
exportUrl="/api/new_power/records/unlocking"
/>
{/* <Modal
open={detailVisible}

40
src/services/NewEnergy/realtimeMonitor.js

@ -1,6 +1,6 @@
import ajax from "@/config/ajax"
import ajax from "@/config/ajax";
//获取电桩监控接口
//获取电桩监控接口
const getPileMonitor = (params) => {
return ajax({
url: "/api/new_power/realtime_monitor/pile_monitor/get_record_list",
@ -9,6 +9,36 @@ const getPileMonitor = (params) => {
});
};
export default{
getPileMonitor,
}
//获取充电监控接口
const getChargingMonitorList = (params) => {
return ajax({
url: "/api/nes/charge/list",
type: "post",
data: params,
});
};
//获取电桩监控接口
const getPileMonitorList = (params) => {
return ajax({
url: "/api/nes/piles/list",
type: "post",
data: params,
});
};
//获取电桩监控- 统计接口
const getPileMonitorStatsData = (params) => {
return ajax({
url: "/api/nes/piles/count",
type: "post",
data: params,
});
};
export default {
getPileMonitor,
getChargingMonitorList,
getPileMonitorList,
getPileMonitorStatsData,
};
Loading…
Cancel
Save