Browse Source

feat(): 完成渠道统计、停车收入报表和总收入报表的绘制

tags/PMS_Frontend_v1.0.6-develop
chenqiang 1 year ago
parent
commit
e50830650c
  1. BIN
      src/assets/images/fin_ddjehz.png
  2. BIN
      src/assets/images/fin_sf.png
  3. BIN
      src/assets/images/fin_tsf.png
  4. BIN
      src/assets/images/fin_xghdd.png
  5. BIN
      src/assets/images/fin_yh.png
  6. BIN
      src/assets/images/fin_ys.png
  7. 177
      src/pages/FinancialMgm/FinancialReport/OperationReport/index.scss
  8. 362
      src/pages/FinancialMgm/FinancialReport/OperationReport/loadable.jsx
  9. 409
      src/pages/FinancialMgm/FinancialReport/ParkingIncomeReport/index.scss
  10. 870
      src/pages/FinancialMgm/FinancialReport/ParkingIncomeReport/loadable.jsx
  11. 298
      src/pages/FinancialMgm/FinancialReport/PayChannelStat/index.scss
  12. 709
      src/pages/FinancialMgm/FinancialReport/PayChannelStat/loadable.jsx
  13. 31
      src/pages/FinancialMgm/FinancialReport/PaySummaryReport/index.scss
  14. 7
      src/pages/FinancialMgm/FinancialReport/PaySummaryReport/loadable.jsx
  15. 50
      src/pages/FinancialMgm/FinancialReport/PdaStat/index.scss
  16. 34
      src/pages/FinancialMgm/FinancialReport/PdaStat/loadable.jsx
  17. 31
      src/pages/FinancialMgm/FinancialReport/PreOrderReport/index.scss
  18. 3
      src/pages/FinancialMgm/FinancialReport/PreOrderReport/loadable.jsx

BIN
src/assets/images/fin_ddjehz.png

After

Width: 80  |  Height: 80  |  Size: 3.8 KiB

BIN
src/assets/images/fin_sf.png

After

Width: 80  |  Height: 80  |  Size: 4.0 KiB

BIN
src/assets/images/fin_tsf.png

After

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

BIN
src/assets/images/fin_xghdd.png

After

Width: 80  |  Height: 80  |  Size: 4.1 KiB

BIN
src/assets/images/fin_yh.png

After

Width: 80  |  Height: 80  |  Size: 3.8 KiB

BIN
src/assets/images/fin_ys.png

After

Width: 80  |  Height: 80  |  Size: 4.6 KiB

177
src/pages/FinancialMgm/FinancialReport/OperationReport/index.scss

@ -7,24 +7,39 @@ $color-primary : var(--color-primary);
.OperationReport {
padding: 10px 20px;
height: 100%;
position: relative;
.hfts {
position: absolute;
width: 390px;
margin-bottom: 0%;
background: rgba(254, 242, 213, .47);
color: #ff974a;
height: 40px;
// background: rgba(254, 242, 213, .47);
color: #FFCC3F;
font-size: 16px;
line-height: 40px;
position: relative;
// position: relative;
right: 20px;
top: 0px;
background: var(--color-table-body-bg-nth-child-even);
border-radius: 4px;
border-left: #FFCC3F 3px solid;
padding: 10px 8px;
z-index: 1;
display: flex;
.anticon-info-circle {
padding-top: 6px;
margin-right: 4px;
}
.adfg {
position: absolute;
right: 0;
right: 4px;
top: 0%;
cursor: pointer;
svg {
width: 20px;
height: 20px;
width: 16px;
height: 16px;
}
}
}
@ -182,29 +197,143 @@ $color-primary : var(--color-primary);
height: 54px;
}
}
.showdetaild {
opacity: .6;
display: flex;
cursor: pointer;
align-items: center;
.span {
display: flex;
border-radius: 50%;
margin-left: 4px;
width: 14px;
justify-content: center;
align-items: center;
height: 14px;
border: 1px solid $color-text;
}
}
.table_raps {
width: 1300px;
position: relative;
.bleu {
color: #3AA9FF;
.span {
border-color: #3AA9FF;
}
}
}
.detailroad {
padding: 10px;
display: flex;
.twosa {
display: flex;
width: 50%;
.fel {
display: flex;
width: 48px;
align-items: center;
justify-content: center;
writing-mode: vertical-lr;
height: 181px;
border-left: 5px solid rgba(29, 112, 255, .32);
background: rgba(151, 164, 204, .08);
border-radius: 3px 0 0 3px;
}
.roadcard {
flex: 1;
display: flex;
flex-wrap: wrap;
.scards {
width: 24%;
border-radius: 4px;
background: rgba(151, 164, 204, .08);
height: 88px;
margin-left: 2px;
.contr {
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
.toopl {
height: 50%;
display: flex;
align-items: center;
opacity: 0.6;
font-size: 12px;
i {
cursor: pointer;
margin-left: 2px;
display: inline-block;
width: 14px;
height: 14px;
border: solid 1px $color-text;
border-radius: 7px;
line-height: 14px;
text-align: center;
}
}
.money {
height: 50%;
margin-bottom: 0;
font-size: 16px;
span {
opacity: .6;
font-size: 12px;
}
}
}
}
.cyd {
width: 33%;
}
}
}
}
.scrplltab {
width: 1270px;
overflow-x: scroll;
// position: relative;
.poxi {
cursor: pointer;
background-color: var(--color-table-header-bg);
width: 24px;
height: 50px;
position: absolute;
right: 0;
top: 0;
position: fixed;
right: 40px;
top: 232px;
padding: 10px 8px;
z-index: 1;
.colsa {
color: #3AA9FF;
}
}
.showas {
top: 432px
}
}
.yisa_table {
.table_raps {
width: 2988px;
}
.yisa_tabled {
width: 100%;
.ant-table-thead {
@ -212,6 +341,18 @@ $color-primary : var(--color-primary);
border: rgba(255, 255, 255, .08) 1px solid;
background: var(--color-table-header-bg) !important;
i {
cursor: pointer;
margin-left: 10px;
display: inline-block;
width: 14px;
height: 14px;
border: solid 1px $color-text;
border-radius: 7px;
line-height: 14px;
text-align: center;
}
&::before {
display: none;
}
@ -253,9 +394,9 @@ $color-primary : var(--color-primary);
}
.selectcols {
width: 140px;
height: 250px;
.selectcolsopt {
width: 160px;
height: 450px;
.tirl {
font-size: 16px;

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

@ -15,17 +15,23 @@ import {
} from "antd";
import { dictionary, utils } from "@/config/common";
import moment from "moment";
import { FunnelPlotOutlined, CloseOutlined } from "@ant-design/icons";
import {
FunnelPlotOutlined,
CloseOutlined,
InfoCircleOutlined,
DownOutlined,
UpOutlined,
} from "@ant-design/icons";
import ajax from "@/services";
// import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks';
import { ResultFlow } from "@/components";
import "./index.scss";
import FinSr from "@/assets/images/fin_sr.png";
import Fintchz from "@/assets/images/fin_tchz.png";
import Fintccard from "@/assets/images/fin_tccard.png";
import Finyytc from "@/assets/images/fin_yytc.png";
import Fincuotc from "@/assets/images/fin_cuotc.png";
import Fintk from "@/assets/images/fin_tk.png";
import Finddje from "@/assets/images/fin_ddjehz.png";
import Finxgh from "@/assets/images/fin_xghdd.png";
import Finss from "@/assets/images/fin_ys.png";
import Finsf from "@/assets/images/fin_sf.png";
import Finyh from "@/assets/images/fin_yh.png";
import Fintsf from "@/assets/images/fin_tsf.png";
// import { useLocation } from "react-router-dom";
const { RangePicker } = DatePicker;
const { TextArea } = Input;
@ -64,130 +70,235 @@ function OperationReport() {
value: "2",
},
];
//
const tabt = [
{
text: "收入合计",
text: "订单金额合计",
value: "40988.00",
icon: Finddje,
tip: "按计费规则计算的应收金额,不含任何优惠和异常处理的值",
},
{
text: "修改后订单金额合计",
value: "40988.00",
icon: FinSr,
tip: "停车收入实付+停车卡订单实收+预约订单实收+错锋订单实收",
icon: Finxgh,
tip: "按出场时间在统计日期的「停车记录查询」应收金额(含「订单修改查询」中处理完成修正应收金额)之和",
},
{
text: "停车收入合计",
text: "应收合计",
value: "40988.00",
icon: Fintchz,
tip: "按停车支付时间在统计日期内实付金额之和",
icon: Finss,
tip: "停车记录中应收金额之和",
},
{
text: "停车卡收入",
text: "实付合计",
value: "40988.00",
icon: Fintccard,
tip: "按支付时间在统计日期的停车卡实付金额之和",
icon: Finsf,
tip: "按出场时间在统计日期的「停车记录查询」实付金额之和",
},
{
text: "预约停车收入",
text: "优惠合计",
value: "40988.00",
icon: Finyytc,
tip: "按支付时间在统计日期的停车预约实付金额之和",
icon: Finyh,
tip: "按出场时间在统计日期的「停车记录查询」优惠总计之和",
},
{
text: "错峰停车收入",
text: "退实付合计",
value: "00.00",
icon: Fintsf,
tip: "按出场时间在统计日期的「停车记录查询」退实付金额之和",
},
];
//
const Showdatat = [
{
text: "修改后订单金额合计",
value: "40988.00",
icon: Fincuotc,
tip: "按支付时间在统计日期的错锋订单实付金额之和",
valuet: "0.00",
},
{
text: "退款合计",
text: "应收合计",
value: "40988.00",
valuet: "0.00",
tip: "停车记录中应收金额之和",
},
{
text: "优惠合计",
valuet: "0.00",
value: "40988.00",
},
{
text: "实付合计",
valuet: "0.00",
value: "40988.00",
},
{
text: "退实付合计",
valuet: "0.00",
value: "00.00",
icon: Fintk,
tip: "按支付时间在统计日期的错锋订单实付金额之和",
},
{
text: "欠费合计",
value: "40988.00",
valuet: "0.00",
tip: "按出场时间在统计日期的「停车记录查询」欠费金额之和",
},
{
text: "单泊位应收",
value: "40988.00",
valuet: "0.00",
class: "cyd",
tip: "应收总和/泊位数",
},
];
const col = [
{
title: "统计日期",
title: "日期",
dataIndex: "create_time",
key: "create_time",
align: "center",
},
{
title: "区域",
dataIndex: "qy",
key: "qy",
align: "center",
},
{
title: "所属商户",
dataIndex: "sell_name",
key: "sell_name",
align: "center",
},
{
title: "停车收入",
title: "停车",
align: "center",
children: [
{
title: "实付",
dataIndex: "sf",
key: "sf",
title: "车场名称",
dataIndex: "ccmc",
key: "ccmc",
align: "center",
},
{
title: "泊位数",
dataIndex: "bws",
key: "bws",
align: "center",
},
{
title: "退实付",
dataIndex: "tsf",
key: "tsf",
title: "车场类型",
dataIndex: "cclx",
key: "cclx",
align: "center",
},
{
title: "商用状态",
dataIndex: "syzt",
key: "syzt",
align: "center",
},
],
},
{
title: "停车卡收入",
title: "订单金额(元)",
dataIndex: "ddje",
key: "ddje",
align: "center",
children: [
},
{
title: "停车卡订单实收",
dataIndex: "tck",
key: "tck",
title: (
<span>
异常金额()
<Tooltip
placement="topLeft"
title={
<p>
按出场时间统计的停车记录出场当日异常处理中修改后订单金额和订单金额的差值
</p>
}
>
<i>?</i>
</Tooltip>
</span>
),
dataIndex: "ycje",
key: "ycje",
align: "center",
},
],
{
title: "修改后订单金额(元)",
dataIndex: "xfhje",
key: "xfhje",
align: "center",
},
{
title: "预约停车收入",
title: "停车卡折扣(元)",
dataIndex: "tckzk",
key: "tckzk",
align: "center",
children: [
},
{
title: "预约订单实收",
dataIndex: "yydd",
key: "yydd",
title: "车场折扣(元)",
dataIndex: "cczk",
key: "cczk",
align: "center",
},
{
title: "预约退款",
dataIndex: "yytk",
key: "yytk",
title: "应收金额(元)",
dataIndex: "ysje",
key: "ysje",
align: "center",
},
],
{
title: "单泊位应收(元)",
dataIndex: "dbwys",
key: "dbwys",
align: "center",
},
{
title: "错峰停车收入",
title: "实收金额",
align: "center",
children: [
{
title: "错峰订单实收",
dataIndex: "cfdd",
key: "cfdd",
title: "优惠卷金额(元)",
dataIndex: "yhqje",
key: "yhqje",
align: "center",
},
{
title: "实付",
dataIndex: "sf",
key: "sf",
align: "center",
},
],
},
{
title: "收入合计",
dataIndex: "srhj",
key: "srhj",
title: "欠费(元)",
dataIndex: "qf",
key: "qf",
align: "center",
},
{
title: "退款金额",
align: "center",
children: [
{
title: "退优惠(元)",
dataIndex: "tyh",
key: "tyh",
align: "center",
},
{
title: "退款合计",
dataIndex: "tkhj",
key: "tkhj",
title: "退实付(元)",
dataIndex: "tdf",
key: "tdf",
align: "center",
},
],
},
];
//
const [FormData, setFormData] = useState(formdata);
@ -206,6 +317,8 @@ function OperationReport() {
const [Open, setOpen] = useState(true);
//
const [selectArr, setSelectArr] = useState([]);
//
const [Show, setShow] = useState(false);
const column = (arr) => {
let copr = [];
if (arr.length) {
@ -322,7 +435,7 @@ function OperationReport() {
const SelectCol = () => {
return (
<div className="selectcols">
<div className="selectcolsopt">
<p className="tirl">隐藏列</p>
{col.map((ele) => {
if (ele.children) {
@ -333,7 +446,7 @@ function OperationReport() {
value={selectArr.includes(val.key)}
onChange={() => onChange(val.key)}
disabled={
selectArr.length == 9 && !selectArr.includes(val.key)
selectArr.length == 18 && !selectArr.includes(val.key)
}
>
{val.title}
@ -348,7 +461,7 @@ function OperationReport() {
value={selectArr.includes(ele.key)}
onChange={() => onChange(ele.key)}
disabled={
selectArr.length == 9 && !selectArr.includes(ele.key)
selectArr.length == 18 && !selectArr.includes(ele.key)
}
>
{ele.title}
@ -391,6 +504,7 @@ function OperationReport() {
<div className="OperationReport">
{Open && (
<p className="hfts">
<InfoCircleOutlined />
实际运营情况报表按出场时间统计停车实际运营收费情况会根据异常处理动态更新本报表适用于运营人员了解车场实际运营情况以及帮助财务人员掌握车场财务情况
<span
className="adfg"
@ -564,24 +678,16 @@ function OperationReport() {
placeholder="请选择"
options={[
{
value: "1",
value: "",
label: "全部",
},
{
value: "2",
label: "错位共享停车场",
label: "路内车场",
},
{
value: "3",
label: "公共事业集团",
},
{
value: "4",
label: "社会类停车场",
},
{
value: "5",
label: "智慧互通",
label: "路外车场",
},
]}
onChange={(e) =>
@ -605,23 +711,23 @@ function OperationReport() {
options={[
{
value: "1",
label: "全部",
label: "待上线",
},
{
value: "2",
label: "错位共享停车场",
label: "商用",
},
{
value: "3",
label: "公共事业集团",
label: "试运行",
},
{
value: "4",
label: "社会类停车场",
label: "下线",
},
{
value: "5",
label: "智慧互通",
label: "废弃",
},
]}
onChange={(e) =>
@ -683,16 +789,105 @@ function OperationReport() {
</div>
);
})}
<div
onClick={() => {
setShow(!Show);
}}
className={Show ? "showdetaild bleu" : "showdetaild"}
>
{Show ? "收起" : "展开"}
<span className="span">
{Show ? <UpOutlined /> : <DownOutlined />}
</span>
</div>
</div>
{Show ? (
<div className="detailroad">
<div className="twosa">
<div className="fel">路内</div>
<div className="roadcard">
{Showdatat.map((ele) => {
return (
<div
className={ele.class ? `scards ${ele.class}` : "scards"}
key={ele.text + "ln"}
>
<div className="contr">
<span className="toopl">
{ele.text}
{ele.tip && (
<Tooltip
placement="topLeft"
title={<p>{ele.tip}</p>}
>
<i>?</i>
</Tooltip>
)}
</span>
<p className="money">
{ele.value}
<span></span>
</p>
</div>
</div>
);
})}
</div>
</div>
<div className="twosa">
<div className="fel">路外</div>
<div className="roadcard">
{Showdatat.map((ele) => {
return (
<div
className={ele.class ? `scards ${ele.class}` : "scards"}
key={ele.text + "lw"}
>
<div className="contr">
<span className="toopl">
{ele.text}
{ele.tip && (
<Tooltip
placement="topLeft"
title={<p>{ele.tip}</p>}
>
<i>?</i>
</Tooltip>
)}
</span>
<p className="money">
{ele.valuet}
<span></span>
</p>
</div>
</div>
);
})}
</div>
</div>
</div>
) : (
""
)}
<ResultFlow
hasLoad={true}
loading={loading}
resultData={Data.data}
message={"暂无数据"}
>
<div className="scrplltab">
<Tooltip
placement="leftBottom"
title={SelectCol}
trigger={"click"}
>
<div className={Show ? "poxi showas" : "poxi"} title="隐藏列">
<FunnelPlotOutlined className={"colsa"} />
</div>
</Tooltip>
<div className="table_raps">
<Table
className="yisa_table"
className="yisa_tabled"
columns={column(selectArr)}
rowKey={(record) => record.id}
dataSource={Data.data}
@ -702,16 +897,9 @@ function OperationReport() {
y: "calc(100vh - 400px)",
}}
/>
<Tooltip
placement="leftBottom"
title={SelectCol}
trigger={"click"}
>
<div className="poxi" title="隐藏列">
<FunnelPlotOutlined className={"colsa"} />
</div>
</Tooltip>
</div>
<div>
<Pagination
className="pagination-common"

409
src/pages/FinancialMgm/FinancialReport/ParkingIncomeReport/index.scss

@ -3,3 +3,412 @@ $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);
.ParkingIncomeReport {
padding: 10px 20px;
height: 100%;
position: relative;
.hfts {
position: absolute;
width: 390px;
margin-bottom: 0%;
// background: rgba(254, 242, 213, .47);
color: #FFCC3F;
font-size: 16px;
// position: relative;
right: 20px;
top: 0px;
background: var(--color-table-body-bg-nth-child-even);
border-radius: 4px;
border-left: #FFCC3F 3px solid;
padding: 10px 8px;
z-index: 1;
display: flex;
.anticon-info-circle {
padding-top: 6px;
margin-right: 4px;
}
.adfg {
position: absolute;
right: 4px;
top: 0%;
cursor: pointer;
svg {
width: 16px;
height: 16px;
}
}
}
.body_cenf {
display: flex;
height: 100%;
.left_search {
width: 370px;
height: 100%;
.form_item {
width: 100%;
display: flex;
align-items: center;
padding: 0 10px 16px 0;
.lab {
width: 90px;
text-align: right;
margin-right: 10px;
}
.labb {
width: 90px;
text-align: right;
margin-right: 10px;
// display: flex;
display: flex;
align-items: center;
.daf {
margin-left: 4px;
border: 1px solid var(--color-table-border-bottom-color);
}
}
// .labs {
// width: 120px;
// text-align: right;
// border: 1px solid var(--color-table-border-bottom-color);
// margin-right: 10px;
// }
.inputs {
flex: 1;
border: 1px solid var(--color-table-border-bottom-color);
border-radius: 4px;
overflow: hidden;
}
.inputst {
// flex: 228px;
border: 1px solid var(--color-table-border-bottom-color);
border-radius: 4px;
overflow: hidden;
}
}
.but_on {
display: flex;
// align-items: center;
margin: 0 10px 0 0;
justify-content: space-between;
span {
width: 110px;
height: 36px;
border-radius: 4px;
color: #ffffff;
margin-right: 10px;
text-align: center;
line-height: 36px;
cursor: pointer;
}
.sear_ser,
.sear_rep {
background-color: $color-primary;
}
.sear_res {
background: #636d80;
}
.lent {
width: 230px;
margin-left: 20px;
}
}
}
.right_tab {
flex: 1;
height: 100%;
padding: 20px;
background: var(--color-user-list-bg);
box-shadow: 0px 3px 8px 0px rgba(0, 0, 0, 0.12);
border-radius: 28px 0 0 0;
.colfour {
width: 100%;
height: 110px;
display: flex;
align-items: center;
justify-content: space-around;
.shujutj {
display: flex;
align-items: center;
.contr {
display: flex;
flex-direction: column;
color: $color-text;
margin-left: 8px;
.toopl {
height: 50%;
display: flex;
align-items: center;
opacity: 0.6;
font-size: 12px;
i {
cursor: pointer;
margin-left: 2px;
display: inline-block;
width: 14px;
height: 14px;
border: solid 1px $color-text;
border-radius: 7px;
line-height: 14px;
text-align: center;
}
}
.money {
height: 50%;
font-size: 16px;
margin-bottom: 0%;
span {
font-size: 12px;
opacity: 0.6;
margin-left: 4px;
}
}
}
img {
width: 54px;
height: 54px;
}
}
.showdetaild {
opacity: .6;
display: flex;
cursor: pointer;
align-items: center;
.span {
display: flex;
border-radius: 50%;
margin-left: 4px;
width: 14px;
justify-content: center;
align-items: center;
height: 14px;
border: 1px solid $color-text;
}
}
.bleu {
color: #3AA9FF;
.span {
border-color: #3AA9FF;
}
}
}
.detailroad {
padding: 10px;
display: flex;
.twosa {
display: flex;
width: 50%;
.fel {
display: flex;
width: 48px;
align-items: center;
justify-content: center;
writing-mode: vertical-lr;
height: 181px;
border-left: 5px solid rgba(29, 112, 255, .32);
background: rgba(151, 164, 204, .08);
border-radius: 3px 0 0 3px;
}
.roadcard {
flex: 1;
display: flex;
flex-wrap: wrap;
.scards {
width: 32%;
border-radius: 4px;
background: rgba(151, 164, 204, .08);
height: 88px;
margin-left: 2px;
.contr {
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
.toopl {
height: 50%;
display: flex;
align-items: center;
opacity: 0.6;
font-size: 12px;
i {
cursor: pointer;
margin-left: 2px;
display: inline-block;
width: 14px;
height: 14px;
border: solid 1px $color-text;
border-radius: 7px;
line-height: 14px;
text-align: center;
}
}
.money {
height: 50%;
margin-bottom: 0;
font-size: 16px;
span {
opacity: .6;
font-size: 12px;
}
}
}
}
.cyd {
width: 97%;
}
}
}
}
.scrplltab {
width: 1270px;
overflow-x: scroll;
// position: relative;
.poxi {
cursor: pointer;
background-color: var(--color-table-header-bg);
width: 24px;
height: 50px;
position: fixed;
right: 40px;
top: 232px;
padding: 10px 8px;
z-index: 1;
.colsa {
color: #3AA9FF;
}
}
.showas {
top: 432px
}
}
.table_raps {
width: 2012px;
}
.yisa_tabled {
width: 100%;
.ant-table-thead {
th {
border: rgba(255, 255, 255, .08) 1px solid;
background: var(--color-table-header-bg) !important;
i {
cursor: pointer;
margin-left: 10px;
display: inline-block;
width: 14px;
height: 14px;
border: solid 1px $color-text;
border-radius: 7px;
line-height: 14px;
text-align: center;
}
&::before {
display: none;
}
}
.ant-table-selection-column {
text-align: center;
padding: 0;
}
}
.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;
}
}
}
}
}
}
}
.ant-tooltip-inner,
.ant-tooltip-arrow-content:before {
background-color: $color-container-bg;
}
.selectcolpark {
width: 160px;
height: 340px;
.tirl {
font-size: 16px;
margin-bottom: 4px;
}
.ant-checkbox-inner {
border-color: $color-text;
}
font-size: 14px;
color: $color-text;
}

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

@ -1,15 +1,869 @@
import React, { useState, useRef, useEffect } from "react";
// import { message, Pagination, Table, Space, Modal, } from "antd";
// import { dictionary, utils } from "@/config/common";
// import moment from 'moment'
import {
message,
Pagination,
Table,
Select,
Input,
Popover,
Modal,
AutoComplete,
Tooltip,
Checkbox,
Form,
DatePicker,
} from "antd";
import { dictionary, utils } from "@/config/common";
import moment from "moment";
import {
FunnelPlotOutlined,
CloseOutlined,
InfoCircleOutlined,
DownOutlined,
UpOutlined,
} from "@ant-design/icons";
import ajax from "@/services";
// import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks';
// import ajax from "@/services"
// import { FormInput, FormSelect, OptionPanel, ResultPanel, FormSliderPicker, AreaCascader, ImgResize, ImgZoom, } from "@/components"
// import "./index.scss";
// import errorImg from "@/assets/images/layout/error.png"
import { ResultFlow } from "@/components";
import "./index.scss";
import FinSr from "@/assets/images/fin_sr.png";
import Finyh from "@/assets/images/fin_yh.png";
import Fintk from "@/assets/images/fin_tk.png";
// import { useLocation } from "react-router-dom";
const { RangePicker } = DatePicker;
const { TextArea } = Input;
function ParkingIncomeReport() {
return <div>ParkingIncomeReport</div>
const [form] = Form.useForm();
//-
const formdata = {
sell_name: "", //
head_name: "", //
order_type: "", //
headname: "", //
start_time: moment().startOf("day").format("YYYY-MM-DD"),
end_time: moment().endOf("day").format("YYYY-MM-DD"),
pn: "1",
page_size: "15",
};
//
const Headtype = [
{
label: "个人",
value: "1",
},
{
label: "企业",
value: "2",
},
];
//
const Bussinss = [
{
label: "停车支付订单",
value: "1",
},
{
label: "停车卡订单",
value: "2",
},
];
//
const tabt = [
{
text: "收入合计",
value: "40988.00",
icon: FinSr,
tip: "停车支付订单应收金额总计(含预付金额)",
},
{
text: "优惠卷合计",
value: "40988.00",
icon: Finyh,
tip: "停车支付订单中优惠券金额总计",
},
{
text: "退款合计",
value: "00.00",
icon: Fintk,
tip: "退优惠金额+退实付金额的值累加",
},
];
//
const Showdatat = [
{
text: "收入合计",
value: "40988.00",
valuet: "0.00",
},
{
text: "优惠合计",
value: "40988.00",
valuet: "0.00",
},
{
text: "退款合计",
valuet: "0.00",
value: "40988.00",
},
{
text: "单泊位应收",
value: "40988.00",
valuet: "0.00",
class: "cyd",
tip: "车场收入合计/泊位数",
},
];
const col = [
{
title: "日期",
dataIndex: "create_time",
key: "create_time",
align: "center",
},
{
title: "区域",
dataIndex: "qy",
key: "qy",
align: "center",
},
{
title: "所属商户",
dataIndex: "sell_name",
key: "sell_name",
align: "center",
},
{
title: "停车场",
align: "center",
children: [
{
title: "车场名称",
dataIndex: "ccmc",
key: "ccmc",
align: "center",
},
{
title: "泊位数",
dataIndex: "bws",
key: "bws",
align: "center",
},
{
title: "车场类型",
dataIndex: "cclx",
key: "cclx",
align: "center",
},
{
title: "商用状态",
dataIndex: "syzt",
key: "syzt",
align: "center",
},
],
},
{
title: (
<span>
停车费收入
<Tooltip
placement="topLeft"
title={
<p>数据来源停车支付订单按支付时间统计的值含预付金额</p>
}
>
<i>?</i>
</Tooltip>
</span>
),
align: "center",
children: [
{
title: "收入合计(元)",
dataIndex: "sr",
key: "sr",
align: "center",
},
{
title: "优惠券金额(元)",
dataIndex: "yhjje",
key: "yhjje",
align: "center",
},
{
title: "实付金额(元)",
dataIndex: "sf",
key: "sf",
align: "center",
},
{
title: "单泊位收入(元)",
dataIndex: "dbwje",
key: "dbwje",
align: "center",
},
],
},
{
title: (
<span>
停车费退款
<Tooltip
placement="topLeft"
title={
<p>
数据来源退款成功或异常处理退款处理完成时间在筛选范围的停车订单
</p>
}
>
<i>?</i>
</Tooltip>
</span>
),
align: "center",
children: [
{
title: "退款合计(元)",
dataIndex: "tk",
key: "tk",
align: "center",
},
{
title: "退款优惠金额(元)",
dataIndex: "tyh",
key: "tyh",
align: "center",
},
{
title: "退实付(元)",
dataIndex: "tdf",
key: "tdf",
align: "center",
},
],
},
];
//
const [FormData, setFormData] = useState(formdata);
//2
const [FormDatas, setFormDatas] = useState(formdata);
//
const [loading, setLoading] = useState(false);
//
const [Data, setData] = useState({
data: [],
total: 0,
});
const [Picker, setPicker] = useState("");
//
const [options, setOptions] = useState([]);
const [Open, setOpen] = useState(true);
//
const [selectArr, setSelectArr] = useState([]);
//
const [Show, setShow] = useState(false);
const column = (arr) => {
let copr = [];
if (arr.length) {
col.forEach((ele, index) => {
if (ele.children) {
var lisr = [];
let bool = false;
ele.children.forEach((val) => {
if (!arr.includes(val.key)) {
lisr.push(val);
bool = true;
}
});
if (bool) {
copr.push({ ...ele, children: [...lisr] });
}
} else {
if (!arr.includes(ele.key)) {
copr.push(ele);
}
}
});
} else {
copr = col;
}
return [...copr];
};
const onSearch = (searchText) => {
console.log(searchText);
setOptions([
{
value: "1",
label: "全部",
},
{
value: "2",
label: "错位共享停车场",
},
{
value: "3",
label: "公共事业集团",
},
{
value: "4",
label: "社会类停车场",
},
{
value: "5",
label: "智慧互通",
},
]);
// ajax.ElectInvoice.getInvoice({ searchText }).then(
// (res) => {
// if (parseInt(res?.status) === 20000) {
// setData({
// data: res?.data.list || {},
// total: res.data.total || 0,
// });
// setLoading(true);
// } else {
// message.error(res?.message);
// }
// setLoading(true);
// },
// (err) => {
// console.log(err);
// setLoading(true);
// }
// );
};
//
const onChangeData = (dates, dataString) => {
if (Picker == "week") {
setFormData({
...FormData,
start_time: moment(dates[0]).day(1).format("YYYY-MM-DD"),
end_time: moment(dates[1]).day(7).format("YYYY-MM-DD"),
});
} else {
setFormData({
...FormData,
start_time: dataString[0],
end_time: dataString[1],
});
}
};
//
function onShowSizeChange(pn, pn_size) {
setFormData({
...FormData,
pn: pn,
page_size: pn_size,
});
setFormDatas({
...FormDatas,
pn: pn,
page_size: pn_size,
});
}
const onChange = (eal) => {
var e = eal;
var are = JSON.parse(JSON.stringify(selectArr));
if (are.includes(e)) {
are.forEach((ele, index) => {
if (ele == e) {
are.splice(index, 1);
}
});
} else {
are.push(e);
}
setSelectArr([...are]);
};
const SelectCol = () => {
return (
<div className="selectcolpark">
<p className="tirl">隐藏列</p>
{col.map((ele) => {
if (ele.children) {
return ele.children.map((val) => {
return (
<div className="licd" key={val.key}>
<Checkbox
value={selectArr.includes(val.key)}
onChange={() => onChange(val.key)}
disabled={
selectArr.length == 13 && !selectArr.includes(val.key)
}
>
{val.title}
</Checkbox>
</div>
);
});
} else {
return (
<div className="licd" key={ele.key}>
<Checkbox
value={selectArr.includes(ele.key)}
onChange={() => onChange(ele.key)}
disabled={
selectArr.length == 13 && !selectArr.includes(ele.key)
}
>
{ele.title}
</Checkbox>
</div>
);
}
})}
</div>
);
};
//
const getData = (data) => {
setLoading(false);
ajax.ElectInvoice.getInvoiceMess({ ...data }).then(
(res) => {
if (parseInt(res?.status) === 20000) {
setData({
data: res?.data || {},
total: res.total || 0,
});
setLoading(true);
} else {
message.error(res?.message);
}
setLoading(true);
},
(err) => {
console.log(err);
setLoading(true);
}
);
};
useEffect(() => {
getData(FormDatas);
//
}, [FormDatas]);
return (
<div className="ParkingIncomeReport">
{Open && (
<p className="hfts">
<InfoCircleOutlined />
停车收入报表按支付时间统计收入和退款信息异常处理订单数据不影响本报表本报表适用于财务人员了解车场收入情况
<span
className="adfg"
onClick={() => {
setOpen(false);
}}
>
<CloseOutlined />
</span>
</p>
)}
<div className="body_cenf">
<div className="left_search">
<div className="hrestit">查询条件</div>
<div className="form_item">
<div className="labb">
日期
<div className="daf">
<Select
value={Picker}
// style={{
// width: "100%",
// }}
placeholder="请选择"
options={[
{
value: "",
label: "日",
},
{
value: "week",
label: "周",
},
{
value: "month",
label: "月",
},
{
value: "year",
label: "年",
},
]}
onChange={(e) => setPicker(e)}
/>
</div>
</div>
<div className="inputs">
<RangePicker
value={[
FormData.start_time ? moment(FormData.start_time) : null,
FormData.end_time ? moment(FormData.end_time) : null,
]}
picker={Picker}
// showTime={true}
onChange={(dates, dataString) =>
onChangeData(dates, dataString)
}
/>
</div>
</div>
<div className="form_item">
<span className="lab">区域</span>
<div className="inputs">
<Select
value={FormData.sell_name}
style={{
width: "100%",
}}
placeholder="请选择"
options={[
{
value: "1",
label: "全部",
},
{
value: "2",
label: "错位共享停车场",
},
{
value: "3",
label: "公共事业集团",
},
{
value: "4",
label: "社会类停车场",
},
{
value: "5",
label: "智慧互通",
},
]}
onChange={(e) =>
setFormData({
...FormData,
sell_name: e,
})
}
/>
</div>
</div>
<div className="form_item">
<span className="lab">所属商户</span>
<div className="inputs">
<Select
value={FormData.sell_name}
style={{
width: "100%",
}}
placeholder="请选择"
options={[
{
value: "1",
label: "全部",
},
{
value: "2",
label: "错位共享停车场",
},
{
value: "3",
label: "公共事业集团",
},
{
value: "4",
label: "社会类停车场",
},
{
value: "5",
label: "智慧互通",
},
]}
onChange={(e) =>
setFormData({
...FormData,
sell_name: e,
})
}
/>
</div>
</div>
<div className="form_item">
<span className="lab">停车场</span>
<div className="inputs">
<AutoComplete
value={FormData.headname}
style={{
width: "100%",
}}
placeholder="输入路段名称"
options={options}
onSearch={onSearch}
onChange={(e) => {
console.log(e);
setFormData({
...FormData,
headname: e,
});
}}
/>
</div>
</div>
<div className="form_item">
<span className="lab">车场类型</span>
<div className="inputs">
<Select
value={FormData.sell_name}
style={{
width: "100%",
}}
placeholder="请选择"
options={[
{
value: "",
label: "全部",
},
{
value: "2",
label: "路内车场",
},
{
value: "3",
label: "路外车场",
},
]}
onChange={(e) =>
setFormData({
...FormData,
sell_name: e,
})
}
/>
</div>
</div>
<div className="form_item">
<span className="lab">商用状态</span>
<div className="inputs">
<Select
value={FormData.sell_name}
style={{
width: "100%",
}}
placeholder="请选择"
options={[
{
value: "1",
label: "待上线",
},
{
value: "2",
label: "商用",
},
{
value: "3",
label: "试运行",
},
{
value: "4",
label: "下线",
},
{
value: "5",
label: "废弃",
},
]}
onChange={(e) =>
setFormData({
...FormData,
sell_name: e,
})
}
/>
</div>
</div>
<div className="but_on">
<span
className="sear_res"
onClick={() => {
var reset = formdata;
setFormData(reset);
setFormDatas(reset);
}}
>
重置
</span>
<span
className={"sear_ser"}
onClick={() => {
setFormDatas({ ...FormData });
}}
>
查询
</span>
<span
className={"sear_ser"}
onClick={() => {
// setFormDatas({ ...FormData });
}}
>
导出
</span>
</div>
</div>
<div className="right_tab">
<div className="colfour">
{tabt.map((ele) => {
return (
<div className="shujutj" key={ele.text}>
<img src={ele.icon} alt="" />
<div className="contr">
<span className="toopl">
{ele.text}
<Tooltip placement="topLeft" title={<p>{ele.tip}</p>}>
<i>?</i>
</Tooltip>
</span>
<p className="money">
{ele.value}
<span></span>
</p>
</div>
</div>
);
})}
<div
onClick={() => {
setShow(!Show);
}}
className={Show ? "showdetaild bleu" : "showdetaild"}
>
{Show ? "收起" : "展开"}
<span className="span">
{Show ? <UpOutlined /> : <DownOutlined />}
</span>
</div>
</div>
{Show ? (
<div className="detailroad">
<div className="twosa">
<div className="fel">路内</div>
<div className="roadcard">
{Showdatat.map((ele) => {
return (
<div
className={ele.class ? `scards ${ele.class}` : "scards"}
key={ele.text + "ln"}
>
<div className="contr">
<span className="toopl">
{ele.text}
{ele.tip && (
<Tooltip
placement="topLeft"
title={<p>{ele.tip}</p>}
>
<i>?</i>
</Tooltip>
)}
</span>
<p className="money">
{ele.value}
<span></span>
</p>
</div>
</div>
);
})}
</div>
</div>
<div className="twosa">
<div className="fel">路外</div>
<div className="roadcard">
{Showdatat.map((ele) => {
return (
<div
className={ele.class ? `scards ${ele.class}` : "scards"}
key={ele.text + "lw"}
>
<div className="contr">
<span className="toopl">
{ele.text}
{ele.tip && (
<Tooltip
placement="topLeft"
title={<p>{ele.tip}</p>}
>
<i>?</i>
</Tooltip>
)}
</span>
<p className="money">
{ele.valuet}
<span></span>
</p>
</div>
</div>
);
})}
</div>
</div>
</div>
) : (
""
)}
<ResultFlow
hasLoad={true}
loading={loading}
resultData={Data.data}
message={"暂无数据"}
>
<div className="scrplltab">
<Tooltip
placement="leftBottom"
title={SelectCol}
trigger={"click"}
>
<div className={Show ? "poxi showas" : "poxi"} title="隐藏列">
<FunnelPlotOutlined className={"colsa"} />
</div>
</Tooltip>
<div className="table_raps">
<Table
className="yisa_tabled"
columns={column(selectArr)}
rowKey={(record) => record.id}
dataSource={Data.data}
pagination={false}
scroll={{
// x: 1300,
y: "calc(100vh - 400px)",
}}
/>
</div>
</div>
<div>
<Pagination
className="pagination-common"
showSizeChanger={true}
showQuickJumper={true}
// showTotal={() => ` ${total_records} `}
total={Data.total}
current={FormData.pn}
pageSize={FormData.page_size}
pageSizeOptions={dictionary?.pageSizeOptions}
onChange={onShowSizeChange}
onShowSizeChange={onShowSizeChange}
/>
</div>
</ResultFlow>
</div>
</div>
</div>
);
}
export default ParkingIncomeReport;

298
src/pages/FinancialMgm/FinancialReport/PayChannelStat/index.scss

@ -3,3 +3,301 @@ $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);
.PayChannelStat {
padding: 10px 20px;
height: 100%;
position: relative;
.hfts {
position: absolute;
width: 390px;
margin-bottom: 0%;
// background: rgba(254, 242, 213, .47);
color: #FFCC3F;
font-size: 16px;
// position: relative;
right: 20px;
top: 0px;
background: var(--color-table-body-bg-nth-child-even);
border-radius: 4px;
border-left: #FFCC3F 3px solid;
padding: 10px 8px;
z-index: 12;
display: flex;
.anticon-info-circle {
padding-top: 6px;
margin-right: 4px;
}
.adfg {
position: absolute;
right: 4px;
top: 0%;
cursor: pointer;
svg {
width: 16px;
height: 16px;
}
}
}
.body_cenf {
display: flex;
height: 100%;
.left_search {
width: 370px;
height: 100%;
.form_item {
width: 100%;
display: flex;
align-items: center;
padding: 0 10px 16px 0;
.lab {
width: 90px;
text-align: right;
margin-right: 10px;
}
.labb {
width: 90px;
text-align: right;
margin-right: 10px;
// display: flex;
display: flex;
align-items: center;
.daf {
margin-left: 4px;
border: 1px solid var(--color-table-border-bottom-color);
}
}
// .labs {
// width: 120px;
// text-align: right;
// border: 1px solid var(--color-table-border-bottom-color);
// margin-right: 10px;
// }
.inputs {
flex: 1;
border: 1px solid var(--color-table-border-bottom-color);
border-radius: 4px;
overflow: hidden;
}
.inputst {
// flex: 228px;
border: 1px solid var(--color-table-border-bottom-color);
border-radius: 4px;
overflow: hidden;
}
}
.but_on {
display: flex;
// align-items: center;
margin: 0 10px 0 0;
justify-content: space-between;
span {
width: 110px;
height: 36px;
border-radius: 4px;
color: #ffffff;
margin-right: 10px;
text-align: center;
line-height: 36px;
cursor: pointer;
}
.sear_ser,
.sear_rep {
background-color: $color-primary;
}
.sear_res {
background: #636d80;
}
.lent {
width: 230px;
margin-left: 20px;
}
}
}
.right_tab {
flex: 1;
height: 100%;
padding: 20px;
background: var(--color-user-list-bg);
box-shadow: 0px 3px 8px 0px rgba(0, 0, 0, 0.12);
border-radius: 28px 0 0 0;
.prossess {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
.cors {
width: 120px;
height: 120px;
border-radius: 50%;
// background: $color-container-bg;
background: rgba(255, 255, 255, 0.08);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
.cirr {
width: 100%;
text-align: center;
}
.frdf {
font-size: 24px;
font-weight: 700;
}
}
.pros {
width: 220px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
margin-bottom: 8px;
.dsf {
text-align: center;
}
.dfsf {
font-size: 14px;
margin-top: 8px;
}
}
}
.scrplltab {
width: 1270px;
overflow-x: scroll;
// position: relative;
.poxi {
cursor: pointer;
background-color: var(--color-table-header-bg);
width: 24px;
height: 50px;
position: fixed;
right: 40px;
top: 421px;
padding: 10px 8px;
z-index: 1;
.colsa {
color: #3AA9FF;
}
}
.showas {
top: 432px
}
}
.table_raps {
width: 2012px;
}
.yisa_tabled {
width: 100%;
.ant-table-thead {
th {
border: rgba(255, 255, 255, .08) 1px solid;
background: var(--color-table-header-bg) !important;
i {
cursor: pointer;
margin-left: 10px;
display: inline-block;
width: 14px;
height: 14px;
border: solid 1px $color-text;
border-radius: 7px;
line-height: 14px;
text-align: center;
}
&::before {
display: none;
}
}
.ant-table-selection-column {
text-align: center;
padding: 0;
}
}
.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;
}
}
}
}
}
}
}
.ant-tooltip-inner,
.ant-tooltip-arrow-content:before {
background-color: $color-container-bg;
}
.selectcans {
width: 160px;
height: 276px;
.tirl {
font-size: 16px;
margin-bottom: 4px;
}
.ant-checkbox-inner {
border-color: $color-text;
}
font-size: 14px;
color: $color-text;
}

709
src/pages/FinancialMgm/FinancialReport/PayChannelStat/loadable.jsx

@ -1,15 +1,708 @@
import React, { useState, useRef, useEffect } from "react";
// import { message, Pagination, Table, Space, Modal, } from "antd";
// import { dictionary, utils } from "@/config/common";
// import moment from 'moment'
import {
message,
Pagination,
Table,
Select,
Input,
Popover,
Modal,
Progress,
Tooltip,
Checkbox,
Form,
DatePicker,
} from "antd";
import { dictionary, utils } from "@/config/common";
import moment from "moment";
import {
FunnelPlotOutlined,
CloseOutlined,
InfoCircleOutlined,
DownOutlined,
UpOutlined,
} from "@ant-design/icons";
import ajax from "@/services";
// import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks';
// import ajax from "@/services"
// import { FormInput, FormSelect, OptionPanel, ResultPanel, FormSliderPicker, AreaCascader, ImgResize, ImgZoom, } from "@/components"
// import "./index.scss";
// import errorImg from "@/assets/images/layout/error.png"
import { ResultFlow } from "@/components";
import "./index.scss";
import FinSr from "@/assets/images/fin_sr.png";
import Finyh from "@/assets/images/fin_yh.png";
import Fintk from "@/assets/images/fin_tk.png";
// import { useLocation } from "react-router-dom";
const { RangePicker } = DatePicker;
const { TextArea } = Input;
function PayChannelStat() {
return <div>PayChannelStat</div>
const [form] = Form.useForm();
//-
const formdata = {
sell_name: "", //
head_name: "", //
order_type: "", //
headname: "", //
start_time: moment().startOf("day").format("YYYY-MM-DD"),
end_time: moment().endOf("day").format("YYYY-MM-DD"),
pn: "1",
page_size: "15",
};
//
const col = [
{
title: (
<span>
退款合计
<Tooltip
placement="topLeft"
title={<p>停车退款+预约停车退款+异常支付退款+重复支付退款</p>}
>
<i>?</i>
</Tooltip>
</span>
),
dataIndex: "srhj",
key: "srhj",
align: "center",
},
{
title: (
<span>
停车收入
<Tooltip
placement="topLeft"
title={
<p>
按支付时间在统计日期的停车支付订单实付金额之和含预付抵扣金额
</p>
}
>
<i>?</i>
</Tooltip>
</span>
),
dataIndex: "tcsr",
key: "tcsr",
align: "center",
},
{
title: (
<span>
停车退款
<Tooltip
placement="topLeft"
title={<p>按退款时间在统计日期停车记录中实付退款金额之和</p>}
>
<i>?</i>
</Tooltip>
</span>
),
dataIndex: "tctk",
key: "tctk",
align: "center",
},
{
title: (
<span>
停车卡收入
<Tooltip
placement="topLeft"
title={<p>按支付时间在统计日期的停车卡实付金额之和</p>}
>
<i>?</i>
</Tooltip>
</span>
),
dataIndex: "tcksr",
key: "tcksr",
align: "center",
},
{
title: (
<span>
预约停车收入
<Tooltip
placement="topLeft"
title={<p>按支付时间在统计日期的停车预约实付金额之和</p>}
>
<i>?</i>
</Tooltip>
</span>
),
dataIndex: "yytcsr",
key: "yytcsr",
align: "center",
},
{
title: (
<span>
预约停车退款
<Tooltip
placement="topLeft"
title={<p>按退款时间在统计日期的预约停车退款金额之和</p>}
>
<i>?</i>
</Tooltip>
</span>
),
dataIndex: "yytctk",
key: "yytctk",
align: "center",
},
{
title: (
<span>
错峰停车收入
<Tooltip
placement="topLeft"
title={<p>按支付时间在统计日期的错锋订单实付金额之和</p>}
>
<i>?</i>
</Tooltip>
</span>
),
dataIndex: "cftcsr",
key: "cftcsr",
align: "center",
},
{
title: (
<span>
异常支付
<Tooltip
placement="topLeft"
title={<p>按支付时间在统计日期的异常支付的支付金额之和</p>}
>
<i>?</i>
</Tooltip>
</span>
),
dataIndex: "yczf",
key: "yczf",
align: "center",
},
{
title: (
<span>
异常支付退款
<Tooltip
placement="topLeft"
title={<p>按退款时间在统计日期的异常支付的退款金额之和</p>}
>
<i>?</i>
</Tooltip>
</span>
),
dataIndex: "异常支付退款",
key: "异常支付退款",
align: "center",
},
{
title: (
<span>
重复支付
<Tooltip
placement="topLeft"
title={<p>按支付时间在统计日期的重复支付的支付金额之和</p>}
>
<i>?</i>
</Tooltip>
</span>
),
dataIndex: "cfzf",
key: "cfzf",
align: "center",
},
{
title: (
<span>
重复支付退款
<Tooltip
placement="topLeft"
title={<p>按退款时间在统计日期的重复支付的退款金额之和</p>}
>
<i>?</i>
</Tooltip>
</span>
),
dataIndex: "cfzftk",
key: "cfzftk",
align: "center",
},
];
const Procc = [
{
text: "总收入",
value: 100,
num: 100,
color: "#222",
},
{
text: "微信",
value: 20,
num: 100,
color: "#28C445",
},
{
text: "余额",
value: 20,
num: 100,
color: "#3AA9FF",
},
{
text: "车场自收",
value: 20,
num: 100,
color: "#7781E1",
},
{
text: "支付宝",
value: 20,
num: 100,
color: "#00A0EA",
},
{
text: "现金",
value: 20,
num: 100,
color: "#09D1D6",
},
{
text: "系统录入",
value: 20,
num: 100,
color: "#FF6978",
},
{
text: "招商银行",
value: 20,
num: 100,
color: "#F9712F",
},
{
text: "数字人民币",
value: 20,
num: 100,
color: "#F9C842",
},
{
text: "ETC",
value: 20,
num: 100,
color: "#9BC2D4",
},
];
//
const [FormData, setFormData] = useState(formdata);
//2
const [FormDatas, setFormDatas] = useState(formdata);
//
const [loading, setLoading] = useState(false);
//
const [Data, setData] = useState({
data: [],
total: 0,
});
const [Picker, setPicker] = useState("");
//
const [options, setOptions] = useState([]);
const [Open, setOpen] = useState(true);
//
const [selectArr, setSelectArr] = useState([]);
//
const [Show, setShow] = useState(false);
const column = (arr) => {
let copr = [];
if (arr.length) {
col.forEach((ele, index) => {
if (ele.children) {
var lisr = [];
let bool = false;
ele.children.forEach((val) => {
if (!arr.includes(val.key)) {
lisr.push(val);
bool = true;
}
});
if (bool) {
copr.push({ ...ele, children: [...lisr] });
}
} else {
if (!arr.includes(ele.key)) {
copr.push(ele);
}
}
});
} else {
copr = col;
}
return [
{
title: "渠道",
dataIndex: "qd",
key: "qd",
align: "center",
},
{
title: (
<span>
收入合计
<Tooltip
placement="topLeft"
title={<p>停车收入+停车卡订单实收+预约订单实收+错锋订单实收</p>}
>
<i>?</i>
</Tooltip>
</span>
),
dataIndex: "srhj",
key: "srhj",
align: "center",
},
...copr,
];
};
const onSearch = (searchText) => {
console.log(searchText);
setOptions([
{
value: "1",
label: "全部",
},
{
value: "2",
label: "错位共享停车场",
},
{
value: "3",
label: "公共事业集团",
},
{
value: "4",
label: "社会类停车场",
},
{
value: "5",
label: "智慧互通",
},
]);
// ajax.ElectInvoice.getInvoice({ searchText }).then(
// (res) => {
// if (parseInt(res?.status) === 20000) {
// setData({
// data: res?.data.list || {},
// total: res.data.total || 0,
// });
// setLoading(true);
// } else {
// message.error(res?.message);
// }
// setLoading(true);
// },
// (err) => {
// console.log(err);
// setLoading(true);
// }
// );
};
//
const onChangeData = (dates, dataString) => {
if (Picker == "week") {
setFormData({
...FormData,
start_time: moment(dates[0]).day(1).format("YYYY-MM-DD"),
end_time: moment(dates[1]).day(7).format("YYYY-MM-DD"),
});
} else {
setFormData({
...FormData,
start_time: dataString[0],
end_time: dataString[1],
});
}
};
//
function onShowSizeChange(pn, pn_size) {
setFormData({
...FormData,
pn: pn,
page_size: pn_size,
});
setFormDatas({
...FormDatas,
pn: pn,
page_size: pn_size,
});
}
const onChange = (eal) => {
var e = eal;
var are = JSON.parse(JSON.stringify(selectArr));
if (are.includes(e)) {
are.forEach((ele, index) => {
if (ele == e) {
are.splice(index, 1);
}
});
} else {
are.push(e);
}
setSelectArr([...are]);
};
const SelectCol = () => {
return (
<div className="selectcans">
<p className="tirl">隐藏列</p>
{col.map((ele) => {
if (ele.children) {
return ele.children.map((val) => {
return (
<div className="licd" key={val.key}>
<Checkbox
value={selectArr.includes(val.key)}
onChange={() => onChange(val.key)}
disabled={
selectArr.length == 10 && !selectArr.includes(val.key)
}
>
{val.title}
</Checkbox>
</div>
);
});
} else {
return (
<div className="licd" key={ele.key}>
<Checkbox
value={selectArr.includes(ele.key)}
onChange={() => onChange(ele.key)}
disabled={
selectArr.length == 10 && !selectArr.includes(ele.key)
}
>
{ele.title}
</Checkbox>
</div>
);
}
})}
</div>
);
};
//
const getData = (data) => {
setLoading(false);
ajax.ElectInvoice.getInvoiceMess({ ...data }).then(
(res) => {
if (parseInt(res?.status) === 20000) {
setData({
data: res?.data || {},
total: res.total || 0,
});
setLoading(true);
} else {
message.error(res?.message);
}
setLoading(true);
},
(err) => {
console.log(err);
setLoading(true);
}
);
};
useEffect(() => {
getData(FormDatas);
//
}, [FormDatas]);
return (
<div className="PayChannelStat">
{Open && (
<p className="hfts">
<InfoCircleOutlined />
渠道统计统计支付日期内的各渠道各业务类型收入和退款情况以环形图呈现渠道收入的占比情况选中每个渠道可以查看该渠道的堆叠图适用于运营和财务人员掌握各渠道收入和退款情况
<span
className="adfg"
onClick={() => {
setOpen(false);
}}
>
<CloseOutlined />
</span>
</p>
)}
<div className="body_cenf">
<div className="left_search">
<div className="hrestit">查询条件</div>
<div className="form_item">
<div className="labb">
日期
<div className="daf">
<Select
value={Picker}
// style={{
// width: "100%",
// }}
placeholder="请选择"
options={[
{
value: "",
label: "日",
},
{
value: "week",
label: "周",
},
{
value: "month",
label: "月",
},
{
value: "year",
label: "年",
},
]}
onChange={(e) => setPicker(e)}
/>
</div>
</div>
<div className="inputs">
<RangePicker
value={[
FormData.start_time ? moment(FormData.start_time) : null,
FormData.end_time ? moment(FormData.end_time) : null,
]}
picker={Picker}
// showTime={true}
onChange={(dates, dataString) =>
onChangeData(dates, dataString)
}
/>
</div>
</div>
<div className="but_on">
<span
className="sear_res"
onClick={() => {
var reset = formdata;
setFormData(reset);
setFormDatas(reset);
}}
>
重置
</span>
<span
className={"sear_ser lent"}
onClick={() => {
setFormDatas({ ...FormData });
}}
>
查询
</span>
</div>
</div>
<div className="right_tab">
<div className="prossess">
{Procc.map((ele, index) => {
if (index == 0) {
return (
<div className="pros">
<div className="cors">
<div className="cirr">
<div
className="frdf"
style={{
color: ele.color,
fontWeight: 700,
}}
>
{ele.value}%
</div>
<div className="dfsf sds">{ele.num}</div>
</div>
</div>
<div className="dsf">{ele.text}</div>
</div>
);
} else {
return (
<div className="pros">
<Progress
type="circle"
strokeWidth={15}
strokeColor={ele.color}
format={(percent) => (
<div className="cirr">
<div
style={{
color: ele.color,
fontWeight: 700,
}}
>
{percent}%
</div>
<div className="dfsf">{ele.num}</div>
</div>
)}
percent={ele.value}
/>
<div className="dsf">{ele.text}</div>
</div>
);
}
})}
</div>
<ResultFlow
hasLoad={true}
loading={loading}
resultData={Data.data}
message={"暂无数据"}
>
<div className="scrplltab">
<Tooltip
placement="leftBottom"
title={SelectCol}
trigger={"click"}
>
<div className={Show ? "poxi showas" : "poxi"} title="隐藏列">
<FunnelPlotOutlined className={"colsa"} />
</div>
</Tooltip>
<div className="table_raps">
<Table
className="yisa_tabled"
columns={column(selectArr)}
rowKey={(record) => record.id}
dataSource={Data.data}
pagination={false}
scroll={{
// x: 1000,
y: "calc(100vh - 660px)",
}}
/>
</div>
</div>
<div>
<Pagination
className="pagination-common"
showSizeChanger={true}
showQuickJumper={true}
// showTotal={() => ` ${total_records} `}
total={Data.total}
current={FormData.pn}
pageSize={FormData.page_size}
pageSizeOptions={dictionary?.pageSizeOptions}
onChange={onShowSizeChange}
onShowSizeChange={onShowSizeChange}
/>
</div>
</ResultFlow>
</div>
</div>
</div>
);
}
export default PayChannelStat;

31
src/pages/FinancialMgm/FinancialReport/PaySummaryReport/index.scss

@ -7,24 +7,39 @@ $color-primary : var(--color-primary);
.PaySummaryReport {
padding: 10px 20px;
height: 100%;
position: relative;
.hfts {
position: absolute;
width: 390px;
margin-bottom: 0%;
background: rgba(254, 242, 213, .47);
color: #ff974a;
height: 40px;
// background: rgba(254, 242, 213, .47);
color: #FFCC3F;
font-size: 16px;
line-height: 40px;
position: relative;
// position: relative;
right: 20px;
top: 0px;
background: var(--color-table-body-bg-nth-child-even);
border-radius: 4px;
border-left: #FFCC3F 3px solid;
padding: 10px 8px;
z-index: 1;
display: flex;
.anticon-info-circle {
padding-top: 6px;
margin-right: 4px;
}
.adfg {
position: absolute;
right: 0;
right: 4px;
top: 0%;
cursor: pointer;
svg {
width: 20px;
height: 20px;
width: 16px;
height: 16px;
}
}
}

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

@ -15,7 +15,11 @@ import {
} from "antd";
import { dictionary, utils } from "@/config/common";
import moment from "moment";
import { FunnelPlotOutlined, CloseOutlined } from "@ant-design/icons";
import {
FunnelPlotOutlined,
CloseOutlined,
InfoCircleOutlined,
} from "@ant-design/icons";
import ajax from "@/services";
// import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks';
import { ResultFlow } from "@/components";
@ -347,6 +351,7 @@ function PaySummaryReport() {
<div className="PaySummaryReport">
{Open && (
<p className="hfts">
<InfoCircleOutlined />
总收入报表统计支付日期内的各业务类型的收入和退款情况适用于运营人员分析各业务营收情况
<span
className="adfg"

50
src/pages/FinancialMgm/FinancialReport/PdaStat/index.scss

@ -7,24 +7,39 @@ $color-primary : var(--color-primary);
.pdastart {
padding: 10px 20px;
height: 100%;
position: relative;
.hfts {
position: absolute;
width: 390px;
margin-bottom: 0%;
background: rgba(254, 242, 213, .47);
color: #ff974a;
height: 40px;
// background: rgba(254, 242, 213, .47);
color: #FFCC3F;
font-size: 16px;
line-height: 40px;
position: relative;
// position: relative;
right: 20px;
top: 0px;
background: var(--color-table-body-bg-nth-child-even);
border-radius: 4px;
border-left: #FFCC3F 3px solid;
padding: 10px 8px;
z-index: 10;
display: flex;
.anticon-info-circle {
padding-top: 6px;
margin-right: 4px;
}
.adfg {
position: absolute;
right: 0;
right: 4px;
top: 0%;
cursor: pointer;
svg {
width: 20px;
height: 20px;
width: 16px;
height: 16px;
}
}
}
@ -127,8 +142,9 @@ $color-primary : var(--color-primary);
box-shadow: 0px 3px 8px 0px rgba(0, 0, 0, 0.12);
border-radius: 28px 0 0 0;
.table_raps {
width: 1300px;
.scrolkd {
width: 1270px;
overflow-x: scroll;
position: relative;
.poxi {
@ -136,9 +152,10 @@ $color-primary : var(--color-primary);
background-color: var(--color-table-header-bg);
width: 24px;
height: 50px;
position: absolute;
right: 0;
top: 0;
position: fixed;
right: 40px;
top: 122px;
z-index: 1;
padding: 10px 8px;
.colsa {
@ -147,6 +164,13 @@ $color-primary : var(--color-primary);
}
}
.table_raps {
width: 1550px;
position: relative;
}
.yisa-table {
width: 100%;

34
src/pages/FinancialMgm/FinancialReport/PdaStat/loadable.jsx

@ -15,7 +15,11 @@ import {
} from "antd";
import { dictionary, utils } from "@/config/common";
import moment from "moment";
import { FunnelPlotOutlined, CloseOutlined } from "@ant-design/icons";
import {
FunnelPlotOutlined,
CloseOutlined,
InfoCircleOutlined,
} from "@ant-design/icons";
import ajax from "@/services";
// import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks';
import { ResultFlow } from "@/components";
@ -41,8 +45,8 @@ function PdaStat() {
const col = [
{
title: "日期",
dataIndex: "create_time",
key: "create_time",
dataIndex: "time_type",
key: "time_type",
align: "center",
},
{
@ -53,8 +57,8 @@ function PdaStat() {
},
{
title: "登陆名",
dataIndex: "dl",
key: "dl",
dataIndex: "pda_number",
key: "pda_number",
align: "center",
},
{
@ -287,6 +291,7 @@ function PdaStat() {
<div className="pdastart">
{Open && (
<p className="hfts">
<InfoCircleOutlined />
PDA统计按支付时间统计PDA收缴的各渠道金额适用于运营人员了解PDA收费情况
<span
className="adfg"
@ -484,6 +489,16 @@ function PdaStat() {
resultData={Data.data}
message={"暂无数据"}
>
<div className="scrolkd">
<Tooltip
placement="leftBottom"
title={SelectCol}
trigger={"click"}
>
<div className="poxi" title="隐藏列">
<FunnelPlotOutlined className={"colsa"} />
</div>
</Tooltip>
<div className="table_raps">
<Table
className="yisa-table"
@ -496,16 +511,9 @@ function PdaStat() {
y: "calc(100vh - 300px)",
}}
/>
<Tooltip
placement="leftBottom"
title={SelectCol}
trigger={"click"}
>
<div className="poxi" title="隐藏列">
<FunnelPlotOutlined className={"colsa"} />
</div>
</Tooltip>
</div>
<div>
<Pagination
className="pagination-common"

31
src/pages/FinancialMgm/FinancialReport/PreOrderReport/index.scss

@ -7,24 +7,39 @@ $color-primary : var(--color-primary);
.PreOrderReport {
padding: 10px 20px;
height: 100%;
position: relative;
.hfts {
position: absolute;
width: 390px;
margin-bottom: 0%;
background: rgba(254, 242, 213, .47);
color: #ff974a;
height: 40px;
// background: rgba(254, 242, 213, .47);
color: #FFCC3F;
font-size: 16px;
line-height: 40px;
position: relative;
// position: relative;
right: 20px;
top: 0px;
background: var(--color-table-body-bg-nth-child-even);
border-radius: 4px;
border-left: #FFCC3F 3px solid;
padding: 10px 8px;
z-index: 1;
display: flex;
.anticon-info-circle {
padding-top: 6px;
margin-right: 4px;
}
.adfg {
position: absolute;
right: 0;
right: 4px;
top: 0%;
cursor: pointer;
svg {
width: 20px;
height: 20px;
width: 16px;
height: 16px;
}
}
}

3
src/pages/FinancialMgm/FinancialReport/PreOrderReport/loadable.jsx

@ -15,7 +15,7 @@ import {
} from "antd";
import { dictionary, utils } from "@/config/common";
import moment from "moment";
import { CloseOutlined } from "@ant-design/icons";
import { CloseOutlined, InfoCircleOutlined } from "@ant-design/icons";
import ajax from "@/services";
// import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks';
import { ResultFlow } from "@/components";
@ -273,6 +273,7 @@ function PreOrderReport() {
<div className="PreOrderReport">
{Open && (
<p className="hfts">
<InfoCircleOutlined />
预付报表统计路内停车预付费缴费情况适用于运营人员和财务人员了解预付情况
<span
className="adfg"

Loading…
Cancel
Save