Browse Source

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

# Conflicts:
#	src/router/router.config.js
tags/PMS_V1.0.0_Alpha5
chenglb 1 year ago
parent
commit
f4ff98d316
  1. 4
      src/pages/FinancialMgm/FinancialReport/BookReport/loadable.jsx
  2. 26
      src/pages/FinancialMgm/FinancialReport/OperationReport/loadable.jsx
  3. 27
      src/pages/FinancialMgm/FinancialReport/ParkingIncomeReport/loadable.jsx
  4. 25
      src/pages/FinancialMgm/FinancialReport/PaySummaryReport/loadable.jsx
  5. 1
      src/pages/FinancialMgm/OrderInquiry/ParkingOrderInquiry/index.jsx
  6. 25
      src/pages/FinancialMgm/PayRecordTotal/loadable.jsx
  7. 35
      src/pages/FinancialMgm/SettleBill/PayRepeat/loadable.jsx
  8. 183
      src/pages/NewEnergy/ChargingMgm/BillingRule/dataSource.js
  9. 6
      src/pages/NewEnergy/ChargingMgm/BillingRule/index.jsx
  10. 238
      src/pages/NewEnergy/ChargingMgm/BillingRule/index.scss
  11. 1126
      src/pages/NewEnergy/ChargingMgm/BillingRule/loadable.jsx
  12. 183
      src/pages/NewEnergy/ChargingMgm/OrderRuleMgm/dataSource.js
  13. 6
      src/pages/NewEnergy/ChargingMgm/OrderRuleMgm/index.jsx
  14. 238
      src/pages/NewEnergy/ChargingMgm/OrderRuleMgm/index.scss
  15. 1126
      src/pages/NewEnergy/ChargingMgm/OrderRuleMgm/loadable.jsx
  16. 8
      src/pages/NewEnergy/ChargingMgm/index.jsx
  17. 5
      src/pages/NewEnergy/index.jsx
  18. 28
      src/pages/OperationCenter/CustomerServieMgm/CallbackSuggestion/loadable.jsx
  19. 5
      src/pages/OperationCenter/CustomerServieMgm/ComplainManage/index.scss
  20. 26
      src/pages/OperationCenter/CustomerServieMgm/ComplainManage/loadable.jsx
  21. 30
      src/pages/OperationCenter/OperationSales/CouponMgm/WriteOffDetail/loadable.jsx
  22. 33
      src/pages/OperationCenter/OperationSales/CouponMgm/WriteOffStat/loadable.jsx
  23. 25
      src/pages/OperationCenter/OtherBusiness/ParkingCard/ParkingCardOrder/loadable.jsx
  24. 28
      src/pages/OperationCenter/OtherBusiness/Staggered/StaggeredOrder/loadable.jsx
  25. 28
      src/pages/OperationCenter/OtherBusiness/Staggered/StaggeredStat/loadable.jsx
  26. 1
      src/pages/OutRoadMgm/OutBusinessRecord/OutParkingArrearsOrders/loadable.jsx
  27. 1
      src/pages/OutRoadMgm/OutBusinessRecord/OutPayOrders/loadable.jsx
  28. 1
      src/pages/OutRoadMgm/OutSegmentMgm/OutSegment/index.scss
  29. 24
      src/pages/OutRoadMgm/OutSegmentMgm/OutSegment/loadable.jsx
  30. 4
      src/pages/index.jsx
  31. 14
      src/router/router.config.js
  32. 14
      src/services/NewEnergy/chargingMgm.js
  33. 5
      src/services/NewEnergy/index.js

4
src/pages/FinancialMgm/FinancialReport/BookReport/loadable.jsx

@ -740,14 +740,14 @@ function BookReport() {
<p> <p>
共查询到<span> {Data?.total || 0}</span>条数据 共查询到<span> {Data?.total || 0}</span>条数据
</p> </p>
<span
{/* <span
className={"sear_ser"} className={"sear_ser"}
onClick={() => { onClick={() => {
// Data?.total && setFormDatas({ ...FormData }); // Data?.total && setFormDatas({ ...FormData });
}} }}
> >
导出 导出
</span>
</span> */}
</div> </div>
<ResultFlow <ResultFlow
hasLoad={true} hasLoad={true}

26
src/pages/FinancialMgm/FinancialReport/OperationReport/loadable.jsx

@ -12,6 +12,7 @@ import {
Checkbox, Checkbox,
Form, Form,
DatePicker, DatePicker,
Button
} from "antd"; } from "antd";
import { dictionary, utils } from "@/config/common"; import { dictionary, utils } from "@/config/common";
import moment from "moment"; import moment from "moment";
@ -24,7 +25,7 @@ import {
} from "@ant-design/icons"; } from "@ant-design/icons";
import ajax from "@/services"; import ajax from "@/services";
// import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks'; // import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks';
import { ResultFlow } from "@/components";
import { ResultFlow, ExportBtnNew } from "@/components";
import "./index.scss"; import "./index.scss";
import Finddje from "@/assets/images/fin_ddjehz.png"; import Finddje from "@/assets/images/fin_ddjehz.png";
import Finxgh from "@/assets/images/fin_xghdd.png"; import Finxgh from "@/assets/images/fin_xghdd.png";
@ -37,6 +38,7 @@ const { RangePicker } = DatePicker;
const { TextArea } = Input; const { TextArea } = Input;
function OperationReport() { function OperationReport() {
const [form] = Form.useForm(); const [form] = Form.useForm();
const exportRef = useRef(null)
//- //-
const formdata = { const formdata = {
operator_id: "0", // operator_id: "0", //
@ -593,9 +595,11 @@ function OperationReport() {
document.body.removeChild(link); document.body.removeChild(link);
}; };
// //
const ReportPaySummaryReport = () => {
const ReportPaySummaryReport = (start, end) => {
ajax.ElectInvoice.getOperationReport({ ajax.ElectInvoice.getOperationReport({
...FormDatas, ...FormDatas,
start: start,
end: end,
area: FormDatas?.area?.length area: FormDatas?.area?.length
? FormDatas?.area[FormDatas.area.length - 1] ? FormDatas?.area[FormDatas.area.length - 1]
: "", : "",
@ -604,8 +608,10 @@ function OperationReport() {
(res) => { (res) => {
if (parseInt(res?.status) === 20000) { if (parseInt(res?.status) === 20000) {
Daownload(res?.data?.url); Daownload(res?.data?.url);
exportRef.current.handleCancel()
} else { } else {
message.error(res?.message); message.error(res?.message);
exportRef.current.handleError()
} }
}, },
(err) => { (err) => {
@ -1014,7 +1020,7 @@ function OperationReport() {
<p> <p>
共查询到<span> {Data?.total || 0}</span>条数据 共查询到<span> {Data?.total || 0}</span>条数据
</p> </p>
<span
{/* <span
className={"sear_ser"} className={"sear_ser"}
onClick={() => { onClick={() => {
Data?.total && ReportPaySummaryReport(); Data?.total && ReportPaySummaryReport();
@ -1022,7 +1028,19 @@ function OperationReport() {
}} }}
> >
导出 导出
</span>
</span> */}
<ExportBtnNew
children={<Button className="export-btn" size='medium' type="primary">导出</Button>}
modalType="noImg"
ref={exportRef}
totalRecords={Data?.total}
imgno={false}
postdata={{
formData: FormData
}}
isTableModule={true}
onOk={ReportPaySummaryReport}
/>
</div> </div>
<ResultFlow <ResultFlow
hasLoad={true} hasLoad={true}

27
src/pages/FinancialMgm/FinancialReport/ParkingIncomeReport/loadable.jsx

@ -13,6 +13,7 @@ import {
Form, Form,
Cascader, Cascader,
DatePicker, DatePicker,
Button
} from "antd"; } from "antd";
import { dictionary, utils } from "@/config/common"; import { dictionary, utils } from "@/config/common";
import moment from "moment"; import moment from "moment";
@ -25,7 +26,7 @@ import {
} from "@ant-design/icons"; } from "@ant-design/icons";
import ajax from "@/services"; import ajax from "@/services";
// import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks'; // import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks';
import { ResultFlow } from "@/components";
import { ResultFlow, ExportBtnNew } from "@/components";
import "./index.scss"; import "./index.scss";
import FinSr from "@/assets/images/fin_sr.png"; import FinSr from "@/assets/images/fin_sr.png";
import Finyh from "@/assets/images/fin_yh.png"; import Finyh from "@/assets/images/fin_yh.png";
@ -53,6 +54,8 @@ function ParkingIncomeReport() {
page_size: dictionary?.pageSizeOptions1[0], page_size: dictionary?.pageSizeOptions1[0],
}; };
const exportRef = useRef(null)
// //
const tabt = [ const tabt = [
{ {
@ -535,9 +538,11 @@ function ParkingIncomeReport() {
document.body.removeChild(link); document.body.removeChild(link);
}; };
// //
const ReportPaySummaryReport = () => {
const ReportPaySummaryReport = (start, end) => {
ajax.ElectInvoice.getParkingIncomeReport({ ajax.ElectInvoice.getParkingIncomeReport({
...FormDatas, ...FormDatas,
start: start,
end: end,
area: FormDatas?.area?.length area: FormDatas?.area?.length
? FormDatas?.area[FormDatas.area.length - 1] ? FormDatas?.area[FormDatas.area.length - 1]
: "", : "",
@ -546,8 +551,10 @@ function ParkingIncomeReport() {
(res) => { (res) => {
if (parseInt(res?.status) === 20000) { if (parseInt(res?.status) === 20000) {
Daownload(res?.data?.url); Daownload(res?.data?.url);
exportRef.current.handleCancel()
} else { } else {
message.error(res?.message); message.error(res?.message);
exportRef.current.handleError()
} }
}, },
(err) => { (err) => {
@ -930,7 +937,7 @@ function ParkingIncomeReport() {
<p> <p>
共查询到<span> {Data?.total || 0}</span>条数据 共查询到<span> {Data?.total || 0}</span>条数据
</p> </p>
<span
{/* <span
className={"sear_ser"} className={"sear_ser"}
onClick={() => { onClick={() => {
Data?.total && ReportPaySummaryReport(); Data?.total && ReportPaySummaryReport();
@ -938,7 +945,19 @@ function ParkingIncomeReport() {
}} }}
> >
导出 导出
</span>
</span> */}
<ExportBtnNew
children={<Button className="export-btn" size='medium' type="primary">导出</Button>}
modalType="noImg"
ref={exportRef}
totalRecords={Data?.total}
imgno={false}
postdata={{
formData: FormData
}}
isTableModule={true}
onOk={ReportPaySummaryReport}
/>
</div> </div>
<ResultFlow <ResultFlow
hasLoad={true} hasLoad={true}

25
src/pages/FinancialMgm/FinancialReport/PaySummaryReport/loadable.jsx

@ -22,7 +22,7 @@ import {
} from "@ant-design/icons"; } from "@ant-design/icons";
import ajax from "@/services"; import ajax from "@/services";
// import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks'; // import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks';
import { ResultFlow } from "@/components";
import { ResultFlow, ExportBtnNew } from "@/components";
import "./index.scss"; import "./index.scss";
import FinSr from "@/assets/images/fin_sr.png"; import FinSr from "@/assets/images/fin_sr.png";
import Fintchz from "@/assets/images/fin_tchz.png"; import Fintchz from "@/assets/images/fin_tchz.png";
@ -171,6 +171,7 @@ function PaySummaryReport() {
}, },
]; ];
let form_data = sessionStorage.getItem("FormData_PaySummaryReport"); let form_data = sessionStorage.getItem("FormData_PaySummaryReport");
const exportRef = useRef(null)
// //
const [FormData, setFormData] = useState( const [FormData, setFormData] = useState(
form_data ? JSON.parse(form_data) : formdata form_data ? JSON.parse(form_data) : formdata
@ -373,17 +374,21 @@ function PaySummaryReport() {
); );
}; };
// //
const ReportPaySummaryReport = () => {
const ReportPaySummaryReport = (start, end) => {
ajax.ElectInvoice.ReportPaySummaryReport({ ajax.ElectInvoice.ReportPaySummaryReport({
...FormDatas, ...FormDatas,
start: start,
end: end,
...DateFormt(FormDatas.type), ...DateFormt(FormDatas.type),
type: TimeChange().str, type: TimeChange().str,
}).then( }).then(
(res) => { (res) => {
if (parseInt(res?.status) === 20000) { if (parseInt(res?.status) === 20000) {
Daownload(res?.data?.url); Daownload(res?.data?.url);
exportRef.current.handleCancel()
} else { } else {
message.error(res?.message); message.error(res?.message);
exportRef.current.handleError()
} }
}, },
(err) => { (err) => {
@ -687,7 +692,7 @@ function PaySummaryReport() {
<p> <p>
共查询到<span> {Data?.total || 0}</span>条数据 共查询到<span> {Data?.total || 0}</span>条数据
</p> </p>
<span
{/* <span
className={"sear_ser"} className={"sear_ser"}
onClick={() => { onClick={() => {
Data?.total && ReportPaySummaryReport(); Data?.total && ReportPaySummaryReport();
@ -695,7 +700,19 @@ function PaySummaryReport() {
}} }}
> >
导出 导出
</span>
</span> */}
<ExportBtnNew
children={<Button className="export-btn" size='medium' type="primary">导出</Button>}
modalType="noImg"
ref={exportRef}
totalRecords={Data?.total}
imgno={false}
postdata={{
formData: FormData
}}
isTableModule={true}
onOk={ReportPaySummaryReport}
/>
</div> </div>
<ResultFlow <ResultFlow
hasLoad={true} hasLoad={true}

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

@ -780,6 +780,7 @@ function ParkingOrderInquiry(props) {
rowKey={'order_id'} rowKey={'order_id'}
initFormData={initFormData} initFormData={initFormData}
exportUrl={exportUrl} exportUrl={exportUrl}
isExport={true}
limitCon={limit ? limitCon : null} limitCon={limit ? limitCon : null}
search={searchOther} search={searchOther}
/> />

25
src/pages/FinancialMgm/PayRecordTotal/loadable.jsx

@ -1,5 +1,5 @@
import React, { useState, useEffect } from "react";
import { ResultFlowResult } from "@/components";
import React, { useState, useEffect, useRef } from "react";
import { ResultFlowResult, ExportBtnNew } from "@/components";
import { Select, Input, Button, Table, message, Pagination, DatePicker, Tooltip } from "antd"; import { Select, Input, Button, Table, message, Pagination, DatePicker, Tooltip } from "antd";
import { useSessionStorageState } from "ahooks"; import { useSessionStorageState } from "ahooks";
import { dictionary } from "@/config/common"; import { dictionary } from "@/config/common";
@ -62,6 +62,7 @@ function PayRecordTotal(props) {
value: { value: {
} }
}) })
const exportRef = useRef(null)
useEffect(() => { useEffect(() => {
if (sessionTabList && Object.values(sessionTabList).length > 0) { if (sessionTabList && Object.values(sessionTabList).length > 0) {
setFormData({ setFormData({
@ -280,7 +281,7 @@ function PayRecordTotal(props) {
}; };
// //
const handleExport = () => {
const handleExport = (start, end) => {
if (resultData.list?.length > 0) { if (resultData.list?.length > 0) {
let { pn, page_size, ...params } = defaultParams; let { pn, page_size, ...params } = defaultParams;
ajax.getPayRecordTotalListExport(params).then( ajax.getPayRecordTotalListExport(params).then(
@ -289,8 +290,10 @@ function PayRecordTotal(props) {
//window.location.href = res.data?.url //window.location.href = res.data?.url
window.open(res.data?.url) window.open(res.data?.url)
message.success(res?.message); message.success(res?.message);
exportRef.current.handleCancel()
} else { } else {
message.error(res?.message); message.error(res?.message);
exportRef.current.handleError()
} }
}, },
(err) => { (err) => {
@ -439,9 +442,21 @@ function PayRecordTotal(props) {
<span className="letter">条结果</span> <span className="letter">条结果</span>
</span> </span>
<div> <div>
<Button type="primary" onClick={handleExport}>
{/* <Button type="primary" onClick={handleExport}>
导出 导出
</Button>
</Button> */}
<ExportBtnNew
children={<Button className="export-btn" size='medium' type="primary">导出</Button>}
modalType="noImg"
ref={exportRef}
totalRecords={resultData.total}
imgno={false}
postdata={{
formData: formData
}}
isTableModule={true}
onOk={handleExport}
/>
</div> </div>
</div> </div>
<ResultFlowResult <ResultFlowResult

35
src/pages/FinancialMgm/SettleBill/PayRepeat/loadable.jsx

@ -14,7 +14,7 @@ import { dictionary, utils } from "@/config/common";
import moment from "moment"; import moment from "moment";
import ajax from "@/services"; import ajax from "@/services";
// import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks'; // import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks';
import { ResultFlow } from "@/components";
import { ResultFlow, ExportBtnNew } from "@/components";
import "./index.scss"; import "./index.scss";
// import errorImg from "@/assets/images/layout/error.png" // import errorImg from "@/assets/images/layout/error.png"
// import { useLocation } from "react-router-dom"; // import { useLocation } from "react-router-dom";
@ -32,6 +32,7 @@ function PayRepeat() {
pn: 1, pn: 1,
page_size: dictionary?.pageSizeOptions1[0], page_size: dictionary?.pageSizeOptions1[0],
}; };
const exportRef = useRef(null)
//-退 //-退
const formdatb = { const formdatb = {
type: 2, type: 2,
@ -413,15 +414,19 @@ function PayRepeat() {
document.body.removeChild(link); document.body.removeChild(link);
}; };
// //
const ReportPaySummaryReport = () => {
const ReportPaySummaryReport = (start, end) => {
ajax.ElectInvoice.ReportPayRepeat({ ajax.ElectInvoice.ReportPayRepeat({
...FormDatas, ...FormDatas,
start: start,
end: end
}).then( }).then(
(res) => { (res) => {
if (parseInt(res?.status) === 20000) { if (parseInt(res?.status) === 20000) {
Daownload(res?.data?.url); Daownload(res?.data?.url);
exportRef.current.handleCancel()
} else { } else {
message.error(res?.message); message.error(res?.message);
exportRef.current.handleError()
} }
}, },
(err) => { (err) => {
@ -872,14 +877,26 @@ function PayRepeat() {
共查询到<span> {Data?.total || 0}</span>条数据 共查询到<span> {Data?.total || 0}</span>条数据
</p> </p>
{FormData.type == 1 ? ( {FormData.type == 1 ? (
<span
className="sear_ser"
onClick={() => {
Data?.total && ReportPaySummaryReport();
// <span
// className="sear_ser"
// onClick={() => {
// Data?.total && ReportPaySummaryReport();
// }}
// >
//
// </span>
<ExportBtnNew
children={<Button className="export-btn" size='medium' type="primary">导出</Button>}
modalType="noImg"
ref={exportRef}
totalRecords={Data?.total}
imgno={false}
postdata={{
formData: FormData
}} }}
>
导出
</span>
isTableModule={true}
onOk={ReportPaySummaryReport}
/>
) : ( ) : (
"" ""
)} )}

183
src/pages/NewEnergy/ChargingMgm/BillingRule/dataSource.js

@ -0,0 +1,183 @@
//用来存储表头的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",
},
];

6
src/pages/NewEnergy/ChargingMgm/BillingRule/index.jsx

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

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

@ -0,0 +1,238 @@
@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);
}
// .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;
}
}

1126
src/pages/NewEnergy/ChargingMgm/BillingRule/loadable.jsx
File diff suppressed because it is too large
View File

183
src/pages/NewEnergy/ChargingMgm/OrderRuleMgm/dataSource.js

@ -0,0 +1,183 @@
//用来存储表头的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",
},
];

6
src/pages/NewEnergy/ChargingMgm/OrderRuleMgm/index.jsx

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

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

@ -0,0 +1,238 @@
@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);
}
// .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;
}
}

1126
src/pages/NewEnergy/ChargingMgm/OrderRuleMgm/loadable.jsx
File diff suppressed because it is too large
View File

8
src/pages/NewEnergy/ChargingMgm/index.jsx

@ -0,0 +1,8 @@
import BillingRule from './BillingRule'
import OrderRuleMgm from './OrderRuleMgm'
export default {
BillingRule,
OrderRuleMgm
}

5
src/pages/NewEnergy/index.jsx

@ -0,0 +1,5 @@
import ChargingMgm from './ChargingMgm'
export default {
...ChargingMgm
}

28
src/pages/OperationCenter/CustomerServieMgm/CallbackSuggestion/loadable.jsx

@ -1,5 +1,5 @@
import React, { useState, useRef, useEffect } from "react"; import React, { useState, useRef, useEffect } from "react";
import { ResultFlowResult, QuickMenu } from "@/components"
import { ResultFlowResult, QuickMenu, ExportBtnNew } from "@/components"
import { Select, Button, Table, message, Pagination, Input, Modal, Image, DatePicker, Space, Upload } from 'antd' import { Select, Button, Table, message, Pagination, Input, Modal, Image, DatePicker, Space, Upload } from 'antd'
import { import {
pageSizeOptions pageSizeOptions
@ -36,6 +36,7 @@ function CallbackSuggestion(props) {
const [imgVisible, setImgVisible] = useState(false) const [imgVisible, setImgVisible] = useState(false)
const [orderVisible, setOrderVisible] = useState(false) const [orderVisible, setOrderVisible] = useState(false)
const [evidenceVisible, setEvidenceVisible] = useState(false) const [evidenceVisible, setEvidenceVisible] = useState(false)
const exportRef = useRef(null)
// //
const handleAdviseType = (value) => { const handleAdviseType = (value) => {
@ -515,12 +516,17 @@ function CallbackSuggestion(props) {
} }
} }
const exportData = () => {
const exportData = (start, end) => {
let data = { let data = {
...formData
...formData,
start: start,
end: end
} }
ajax.exportDataList(data).then(res => { ajax.exportDataList(data).then(res => {
window.open(res.data.export_url) window.open(res.data.export_url)
exportRef.current.handleCancel()
}).catch(err => {
exportRef.current.handleError()
}) })
} }
const checkPic = () => { const checkPic = () => {
@ -644,9 +650,21 @@ function CallbackSuggestion(props) {
<div className="result"> <div className="result">
<div className="result-info-row"> <div className="result-info-row">
<span className="font">共检索到<em>{resultData.total_records}</em>条结果</span> <span className="font">共检索到<em>{resultData.total_records}</em>条结果</span>
<Button type="primary" className="yisa-btn colorBtn" onClick={() => { exportData() }}>
{/* <Button type="primary" className="yisa-btn colorBtn" onClick={() => { exportData() }}>
导出 导出
</Button>
</Button> */}
<ExportBtnNew
children={<Button className="export-btn" size='medium' type="primary">导出</Button>}
modalType="noImg"
ref={exportRef}
totalRecords={resultData.total_records}
imgno={false}
postdata={{
formData: formData
}}
isTableModule={true}
onOk={exportData}
/>
</div> </div>
<ResultFlowResult ajaxLoad={ajaxLoading} resultData={resultData.data ? resultData.data : []}> <ResultFlowResult ajaxLoad={ajaxLoading} resultData={resultData.data ? resultData.data : []}>
<Table <Table

5
src/pages/OperationCenter/CustomerServieMgm/ComplainManage/index.scss

@ -141,6 +141,11 @@ $color-primary: var(--color-primary);
cursor: pointer; cursor: pointer;
} }
.root_gfkk {
display: inline-block;
margin-left: 10px;
}
.paid-result { .paid-result {
width: calc(100% - 375px); width: calc(100% - 375px);
padding-bottom: 15px; padding-bottom: 15px;

26
src/pages/OperationCenter/CustomerServieMgm/ComplainManage/loadable.jsx

@ -1,5 +1,5 @@
import React, { useState, useRef, useEffect } from "react"; import React, { useState, useRef, useEffect } from "react";
import { ResultFlowResult } from "@/components";
import { ResultFlowResult, ExportBtnNew } from "@/components";
import { import {
Select, Select,
Input, Input,
@ -124,6 +124,8 @@ function ComplainManage(props) {
specific_content: "", // specific_content: "", //
}; };
const exportRef = useRef(null)
// //
const [visible1, setVisible1] = useState(false); const [visible1, setVisible1] = useState(false);
// -key // -key
@ -239,13 +241,15 @@ function ComplainManage(props) {
const [rowData, setRowData] = useState({}); const [rowData, setRowData] = useState({});
// //
const exportData = () => {
let data = { ...holdData, ...pageInfo };
const exportData = (start, end) => {
let data = { ...holdData, ...pageInfo, start: start, end: end };
ajax.getComplainExport(data).then((res) => { ajax.getComplainExport(data).then((res) => {
if (res?.data?.url) { if (res?.data?.url) {
window.open(res.data.url); window.open(res.data.url);
exportRef.current.handleCancel()
} else { } else {
message.error("导出异常"); message.error("导出异常");
exportRef.current.handleError()
} }
}); });
}; };
@ -1548,14 +1552,26 @@ function ComplainManage(props) {
> >
设置 设置
</Button> </Button>
<Button
{/* <Button
type="primary" type="primary"
onClick={() => { onClick={() => {
exportData(); exportData();
}} }}
> >
导出 导出
</Button>
</Button> */}
<ExportBtnNew
children={<Button className="export-btn" size='medium' type="primary">导出</Button>}
modalType="noImg"
ref={exportRef}
totalRecords={resultData.total}
imgno={false}
postdata={{
formData: formData
}}
isTableModule={true}
onOk={exportData}
/>
</div> </div>
</div> </div>
<ResultFlowResult <ResultFlowResult

30
src/pages/OperationCenter/OperationSales/CouponMgm/WriteOffDetail/loadable.jsx

@ -5,7 +5,7 @@ import { dictionary, utils } from "@/config/common";
import { useSetState , useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks'; import { useSetState , useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks';
import moment from "moment"; import moment from "moment";
import ajax from '@/services/OperationCenter/OperationSales/index' import ajax from '@/services/OperationCenter/OperationSales/index'
import { FormInput, FormSelect, ResultFlow ,FormSliderPicker} from "@/components"
import { FormInput, FormSelect, ResultFlow ,FormSliderPicker, ExportBtnNew} from "@/components"
import "./index.scss"; import "./index.scss";
import searchAjax from '@/services/search' import searchAjax from '@/services/search'
// import errorImg from "@/assets/images/layout/error.png" // import errorImg from "@/assets/images/layout/error.png"
@ -18,6 +18,7 @@ function WriteOffDetail() {
defaultValue:{} defaultValue:{}
}) })
const params = useRef() const params = useRef()
const exportRef = useRef(null)
const [typeOptions,setTypeOptions] = useState([]) const [typeOptions,setTypeOptions] = useState([])
const [operatorAllData, setOperatorAllData] = useState([]) // const [operatorAllData, setOperatorAllData] = useState([]) //
const [pageData, setPageData] = useSetState({ // const [pageData, setPageData] = useSetState({ //
@ -243,15 +244,24 @@ function WriteOffDetail() {
} }
// //
const exportData=()=>{
const exportData=(start, end)=>{
let data={ let data={
...formData
...formData,
start: start,
end: end
} }
ajax.handleOffExport(data).then(res => { ajax.handleOffExport(data).then(res => {
window.open(res.data.url) window.open(res.data.url)
exportRef.current.handleCancel()
}).catch(err => {
exportRef.current.handleError()
}) })
} }
const handleExport = (start, end) => {
exportData(start, end)
}
useEffect(()=>{ useEffect(()=>{
// getOffList() // getOffList()
getCouponOptions() getCouponOptions()
@ -357,7 +367,19 @@ function WriteOffDetail() {
<span className="total-number"> {resultData.total} </span> <span className="total-number"> {resultData.total} </span>
<span className="letter">条结果</span> <span className="letter">条结果</span>
</span> </span>
<Button type="primary" onClick={exportData} >导出</Button>
{/* <Button type="primary" onClick={exportData} >导出</Button> */}
<ExportBtnNew
children={<Button className="export-btn" size='medium' type="primary">导出</Button>}
modalType="noImg"
ref={exportRef}
totalRecords={resultData.total}
imgno={false}
postdata={{
formData: formData
}}
isTableModule={true}
onOk={handleExport}
/>
</div> </div>
<div className="table-wrap"> <div className="table-wrap">
<Table <Table

33
src/pages/OperationCenter/OperationSales/CouponMgm/WriteOffStat/loadable.jsx

@ -1,5 +1,5 @@
import React, { useState, useRef, useEffect } from "react"; import React, { useState, useRef, useEffect } from "react";
import { FormSliderPicker, ExportBtn, ResultFlowResult } from "@/components"
import { FormSliderPicker, ExportBtn, ResultFlowResult, ExportBtnNew } from "@/components"
import { Select, Input, Button, Table, message, Pagination } from 'antd' import { Select, Input, Button, Table, message, Pagination } from 'antd'
import { import {
pageSizeOptions pageSizeOptions
@ -31,6 +31,7 @@ function WriteOffStat(props) {
const [formData, setFormData] = useState(parameter) const [formData, setFormData] = useState(parameter)
const [lastFormData, setLastFormData] = useState(formData) const [lastFormData, setLastFormData] = useState(formData)
const lastFormDataRef = useRef(formData) const lastFormDataRef = useRef(formData)
const exportRef = useRef(null)
const [couponNameOptions, setCouponNameOptions] = useState([]) const [couponNameOptions, setCouponNameOptions] = useState([])
// //
@ -110,6 +111,11 @@ function WriteOffStat(props) {
} }
}) })
} }
const handleExport = (start, end) => {
exportData(start, end)
}
// //
const changePn = (pn, length) => { const changePn = (pn, length) => {
if (lastFormData.size === length) { if (lastFormData.size === length) {
@ -141,12 +147,17 @@ function WriteOffStat(props) {
} }
// //
const exportData=()=>{
const exportData=(start, end)=>{
let data={ let data={
...formData
...formData,
start: start,
end: end
} }
ajax.handleCountExport(data).then(res => { ajax.handleCountExport(data).then(res => {
window.open(res.data.url) window.open(res.data.url)
exportRef.current.handleCancel()
}).catch(err => {
exportRef.current.handleError()
}) })
} }
@ -225,9 +236,21 @@ function WriteOffStat(props) {
<div className="result"> <div className="result">
<div className="result-info-row"> <div className="result-info-row">
<span className="font">共检索到<em>{resultData.total}</em>条结果</span> <span className="font">共检索到<em>{resultData.total}</em>条结果</span>
<Button type="primary" className="yisa-btn" onClick={() => { exportData() }}>
{/* <Button type="primary" className="yisa-btn" onClick={() => { exportData() }}>
导出 导出
</Button>
</Button> */}
<ExportBtnNew
children={<Button className="export-btn" size='medium' type="primary">导出</Button>}
modalType="noImg"
ref={exportRef}
totalRecords={resultData.total}
imgno={false}
postdata={{
formData: formData
}}
isTableModule={true}
onOk={handleExport}
/>
</div> </div>
<ResultFlowResult ajaxLoad={ajaxLoading} resultData={resultData.list ? resultData.list : []}> <ResultFlowResult ajaxLoad={ajaxLoading} resultData={resultData.list ? resultData.list : []}>

25
src/pages/OperationCenter/OtherBusiness/ParkingCard/ParkingCardOrder/loadable.jsx

@ -3,7 +3,7 @@ import { Select, Input, Popconfirm,Button, Table, message, DatePicker, Paginatio
import { import {
pageSizeOptions pageSizeOptions
} from '@/config/character.config.js' } from '@/config/character.config.js'
import { ResultFlowResult } from "@/components"
import { ResultFlowResult, ExportBtnNew } from "@/components"
import { SearchOutlined, PlusOutlined,VerticalAlignBottomOutlined } from '@ant-design/icons'; import { SearchOutlined, PlusOutlined,VerticalAlignBottomOutlined } from '@ant-design/icons';
import moment from 'moment' import moment from 'moment'
import { useSetState,} from 'ahooks'; import { useSetState,} from 'ahooks';
@ -156,6 +156,7 @@ function ParkingCardOrder() {
}) })
const [lastFormData, setLastFormData] = useState(formData) const [lastFormData, setLastFormData] = useState(formData)
const exportRef = useRef(null)
const lastFormDataRef = useRef(formData) const lastFormDataRef = useRef(formData)
@ -292,17 +293,19 @@ function ParkingCardOrder() {
}; };
// //
const ReportPaySummaryReport = () => {
const ReportPaySummaryReport = (start, end) => {
if(!resultData.total){ if(!resultData.total){
message.warning("暂无数据") message.warning("暂无数据")
return return
} }
ajax.exportOrder(formData).then(res => {
ajax.exportOrder({...formData, start: start, end: end}).then(res => {
if (parseInt(res?.status) === 20000){ if (parseInt(res?.status) === 20000){
Donwload(res.data?.url) Donwload(res.data?.url)
exportRef.current.handleCancel()
} }
else { else {
message.error(res?.message); message.error(res?.message);
exportRef.current.handleError()
} }
}).catch(e => }).catch(e =>
console.log(e)) console.log(e))
@ -675,14 +678,26 @@ function ParkingCardOrder() {
style={{width:110}}> style={{width:110}}>
添加 添加
</Button>&emsp; </Button>&emsp;
<Button
{/* <Button
type="primary" type="primary"
className="yisa-btn colorBtn " className="yisa-btn colorBtn "
onClick={() => { ReportPaySummaryReport()}} onClick={() => { ReportPaySummaryReport()}}
// style={{background:"#fff",color:'#59b7ff',height:'100%'}} // style={{background:"#fff",color:'#59b7ff',height:'100%'}}
> >
导出 导出
</Button>
</Button> */}
<ExportBtnNew
children={<Button className="export-btn" size='medium' type="primary">导出</Button>}
modalType="noImg"
ref={exportRef}
totalRecords={resultData.total}
imgno={false}
postdata={{
formData: formData
}}
isTableModule={true}
onOk={ReportPaySummaryReport}
/>
</div> </div>
</div> </div>
<ResultFlowResult ajaxLoad={ajaxLoading} resultData={resultData.data ? resultData.data : []}> <ResultFlowResult ajaxLoad={ajaxLoading} resultData={resultData.data ? resultData.data : []}>

28
src/pages/OperationCenter/OtherBusiness/Staggered/StaggeredOrder/loadable.jsx

@ -1,5 +1,5 @@
import React, { useState, useRef, useEffect } from "react"; import React, { useState, useRef, useEffect } from "react";
import { ResultFlowResult } from "@/components"
import { ResultFlowResult, ExportBtnNew } from "@/components"
import { Select, Input, Button, Table, message, TreeSelect, Pagination, DatePicker, Cascader, Popover, Modal } from 'antd' import { Select, Input, Button, Table, message, TreeSelect, Pagination, DatePicker, Cascader, Popover, Modal } from 'antd'
import { import {
pageSizeOptions pageSizeOptions
@ -37,6 +37,7 @@ function StaggeredOrder(props) {
const [lastFormData, setLastFormData] = useState(formData) const [lastFormData, setLastFormData] = useState(formData)
const lastFormDataRef = useRef(formData) const lastFormDataRef = useRef(formData)
const [editVisible, setEditVisible] = useState(false) const [editVisible, setEditVisible] = useState(false)
const exportRef = useRef(null)
// //
@ -69,12 +70,17 @@ function StaggeredOrder(props) {
} }
// //
const exportData = () => {
const exportData = (start, end) => {
let data = { let data = {
...formData
...formData,
start: start,
end: end
} }
ajax.getExportOrder(data).then(res => { ajax.getExportOrder(data).then(res => {
window.open(res.data.url) window.open(res.data.url)
exportRef.current.handleCancel()
}).catch(err => {
exportRef.current.handleError()
}) })
} }
// //
@ -355,9 +361,21 @@ function StaggeredOrder(props) {
<div className="result"> <div className="result">
<div className="result-info-row"> <div className="result-info-row">
<span className="font">共检索到<em>{resultData.total_records}</em>条结果</span> <span className="font">共检索到<em>{resultData.total_records}</em>条结果</span>
<Button type="primary" className="yisa-btn colorBtn" onClick={() => { exportData() }}>
{/* <Button type="primary" className="yisa-btn colorBtn" onClick={() => { exportData() }}>
导出 导出
</Button>
</Button> */}
<ExportBtnNew
children={<Button className="export-btn" size='medium' type="primary">导出</Button>}
modalType="noImg"
ref={exportRef}
totalRecords={resultData.total_records}
imgno={false}
postdata={{
formData: formData
}}
isTableModule={true}
onOk={exportData}
/>
</div> </div>
<ResultFlowResult ajaxLoad={ajaxLoading} resultData={resultData.data ? resultData.data : []}> <ResultFlowResult ajaxLoad={ajaxLoading} resultData={resultData.data ? resultData.data : []}>
<Table <Table

28
src/pages/OperationCenter/OtherBusiness/Staggered/StaggeredStat/loadable.jsx

@ -1,5 +1,5 @@
import React, { useState, useRef, useEffect } from "react"; import React, { useState, useRef, useEffect } from "react";
import { ResultFlowResult } from "@/components"
import { ResultFlowResult, ExportBtnNew } from "@/components"
import { Select, Input, Button, Table, message, TreeSelect, Pagination, DatePicker, Space } from 'antd' import { Select, Input, Button, Table, message, TreeSelect, Pagination, DatePicker, Space } from 'antd'
import { import {
pageSizeOptions pageSizeOptions
@ -34,6 +34,7 @@ function StaggeredStat(props) {
const [lastFormData, setLastFormData] = useState(formData) const [lastFormData, setLastFormData] = useState(formData)
const lastFormDataRef = useRef(formData) const lastFormDataRef = useRef(formData)
const exportRef = useRef(null)
// //
const handlePartName = (value) => { const handlePartName = (value) => {
@ -50,12 +51,17 @@ function StaggeredStat(props) {
}; };
// //
const exportData = () => {
const exportData = (start, end) => {
let data = { let data = {
...formData
...formData,
start: start,
end: end
} }
ajax.getStaggeredStatExport(data).then(res => { ajax.getStaggeredStatExport(data).then(res => {
window.open(res.data.url) window.open(res.data.url)
exportRef.current.handleCancel()
}).catch(err => {
exportRef.current.handleError()
}) })
} }
// //
@ -233,9 +239,21 @@ function StaggeredStat(props) {
<div className="result"> <div className="result">
<div className="result-info-row"> <div className="result-info-row">
<span className="font">共检索到<em>{resultData.total_records}</em>条结果</span> <span className="font">共检索到<em>{resultData.total_records}</em>条结果</span>
<Button type="primary" className="yisa-btn colorBtn" onClick={() => { exportData() }}>
{/* <Button type="primary" className="yisa-btn colorBtn" onClick={() => { exportData() }}>
导出 导出
</Button>
</Button> */}
<ExportBtnNew
children={<Button className="export-btn" size='medium' type="primary">导出</Button>}
modalType="noImg"
ref={exportRef}
totalRecords={resultData.total_records}
imgno={false}
postdata={{
formData: formData
}}
isTableModule={true}
onOk={exportData}
/>
</div> </div>
<ResultFlowResult ajaxLoad={ajaxLoading} resultData={resultData.data ? resultData.data : []}> <ResultFlowResult ajaxLoad={ajaxLoading} resultData={resultData.data ? resultData.data : []}>
<Table <Table

1
src/pages/OutRoadMgm/OutBusinessRecord/OutParkingArrearsOrders/loadable.jsx

@ -209,6 +209,7 @@ function OutParkingArrearsOrders() {
pageName={"outParkingArrearsOrders"} pageName={"outParkingArrearsOrders"}
initFormData={initFormData} initFormData={initFormData}
exportUrl="/api/orp/business/get_parking_arrears_export" exportUrl="/api/orp/business/get_parking_arrears_export"
isExport={true}
isQuickMenu={[ isQuickMenu={[
{ text: "昨天", value: 1 }, { text: "昨天", value: 1 },
{ text: "近30天", value: 30 }, { text: "近30天", value: 30 },

1
src/pages/OutRoadMgm/OutBusinessRecord/OutPayOrders/loadable.jsx

@ -215,6 +215,7 @@ function OutPayOrders() {
search={fetch} search={fetch}
limitCon={limitCon} limitCon={limitCon}
initFormData={initFormData} initFormData={initFormData}
isExport={true}
exportUrl="/api/orp/business/get_payment_export" exportUrl="/api/orp/business/get_payment_export"
/> />
</> </>

1
src/pages/OutRoadMgm/OutSegmentMgm/OutSegment/index.scss

@ -20,6 +20,7 @@ $color-primary: var(--color-primary);
height: 100%; height: 100%;
.header-button { .header-button {
display: flex;
button { button {
margin: 0 3px; margin: 0 3px;
} }

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

@ -26,7 +26,7 @@ import {
useUpdate, useUpdate,
} from "ahooks"; } from "ahooks";
import ajax from "@/services"; import ajax from "@/services";
import { TableModule, ResultFlow } from "@/components";
import { TableModule, ResultFlow, ExportBtnNew } from "@/components";
import Detail from "./Detail"; import Detail from "./Detail";
import AddParking from "./AddParking"; import AddParking from "./AddParking";
import "./index.scss"; import "./index.scss";
@ -216,6 +216,7 @@ function OutSegment() {
pn: 1, pn: 1,
page_size: 15, page_size: 15,
}); });
const exportRef = useRef(null);
const tableRef = useRef(null); const tableRef = useRef(null);
const [appraise, setAppraise] = useState({}) const [appraise, setAppraise] = useState({})
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
@ -394,12 +395,14 @@ function OutSegment() {
} }
}, [formData]) }, [formData])
// //
const handleExport = () => {
const handleExport = (start, end) => {
if (tableData.length > 0) { if (tableData.length > 0) {
let values = searchForm.getFieldsValue(); let values = searchForm.getFieldsValue();
let end = values.area?.length > 0 ? values.area.slice(-1) : null; let end = values.area?.length > 0 ? values.area.slice(-1) : null;
let params = { let params = {
...values, ...values,
start: start,
end: end,
//area_id: values.area?.length > 0 ? end : areaId, //area_id: values.area?.length > 0 ? end : areaId,
area_id: sessionTabList?.area, area_id: sessionTabList?.area,
}; };
@ -410,12 +413,15 @@ function OutSegment() {
(res) => { (res) => {
if (res) { if (res) {
window.open(res.data.export_url) window.open(res.data.export_url)
tableRef.current.handleCancel()
} else { } else {
message.error(res?.message); message.error(res?.message);
tableRef.current.handleError()
} }
}, },
(err) => { (err) => {
console.log(err); console.log(err);
tableRef.current.handleError()
} }
); );
} else { } else {
@ -614,7 +620,19 @@ function OutSegment() {
> >
评价批量配置 评价批量配置
</Button> </Button>
<Button type="primary" onClick={handleExport}>导出</Button>
{/* <Button type="primary" onClick={handleExport}>导出</Button> */}
<ExportBtnNew
children={<Button className="export-btn" size='medium' type="primary">导出</Button>}
modalType="noImg"
ref={exportRef}
totalRecords={total}
imgno={false}
postdata={{
formData: formData
}}
isTableModule={true}
onOk={handleExport}
/>
</div> </div>
</div> </div>
<ResultFlow <ResultFlow

4
src/pages/index.jsx

@ -14,6 +14,7 @@ import OperationCenter from "./OperationCenter"
import FinancialMgm from "./FinancialMgm" import FinancialMgm from "./FinancialMgm"
import SystemMgm from "./SystemMgm" import SystemMgm from "./SystemMgm"
import OffPeak from "./OffPeak" import OffPeak from "./OffPeak"
import NewEnergy from "./NewEnergy"
export default { export default {
_404, _404,
_403, _403,
@ -26,5 +27,6 @@ export default {
...OperationCenter, ...OperationCenter,
...FinancialMgm, ...FinancialMgm,
...SystemMgm, ...SystemMgm,
...OffPeak
...OffPeak,
...NewEnergy
} }

14
src/router/router.config.js

@ -1303,12 +1303,26 @@ let routes = [
name: "timeRule", name: "timeRule",
component: pages.TimeRule, component: pages.TimeRule,
}, },
// -------------------------------新能源充电系统
{ {
path: "/newEnergy/newEnergyOverview", path: "/newEnergy/newEnergyOverview",
text: "数据概览", text: "数据概览",
name: "newEnergyOverview", name: "newEnergyOverview",
component: pages.NewEnergyOverview, component: pages.NewEnergyOverview,
}, },
{
path: "/newEnergy/billingRule",
text: "计费规则",
name: "billingRule",
component: pages.BillingRule,
},
{
path: "/newEnergy/orderRuleMgm",
text: "预约规则管理",
name: "orderRuleMgm",
component: pages.OrderRuleMgm,
},
], ],
}, },
]; ];

14
src/services/NewEnergy/chargingMgm.js

@ -0,0 +1,14 @@
import ajax from "@/config/ajax"
//公众号菜单配置-获取菜单
const getWechatMenuList = (params) => {
return ajax({
url: "/api/ope/app_manage/get_menu_list",
type: "post",
data: params,
});
};
export default{
getWechatMenuList
}

5
src/services/NewEnergy/index.js

@ -0,0 +1,5 @@
import chargingMgm from './chargingMgm'
export default {
...chargingMgm
}
Loading…
Cancel
Save