10 changed files with 2162 additions and 122 deletions
-
53src/pages/FinancialMgm/OrderInquiry/ParkingOrderInquiry/index.jsx
-
770src/pages/FinancialMgm/OrderInquiry/ProductOrderInquiry/index.jsx
-
322src/pages/FinancialMgm/OrderInquiry/ProductOrderInquiry/index.scss
-
4src/pages/FinancialMgm/OrderInquiry/index.jsx
-
36src/pages/FinancialMgm/PayConf/AppConf/index.jsx
-
66src/pages/FinancialMgm/PayConf/PayMerchantConf/index.jsx
-
42src/pages/FinancialMgm/PayConf/PlatformMerchantConf/index.jsx
-
325src/pages/SystemMgm/SystemLog/index.scss
-
630src/pages/SystemMgm/SystemLog/loadable.jsx
-
12src/router/router.config.js
@ -0,0 +1,770 @@ |
|||
import React, { useState, useRef, useEffect } from "react"; |
|||
import { |
|||
message, |
|||
Pagination, |
|||
Table, |
|||
Input, |
|||
Space, |
|||
Modal, |
|||
Button, |
|||
Select, |
|||
Tabs, |
|||
Descriptions, |
|||
Timeline |
|||
} from "antd"; |
|||
import moment from "moment"; |
|||
import ajax from '@/config/ajax.js' |
|||
import { TableModule } from "@/components"; |
|||
import { dictionary } from "@/config/common.js"; |
|||
import "./index.scss"; |
|||
function ProductOrderInquiry() { |
|||
const [carId, setCarId] = useState() |
|||
|
|||
//构建表头 |
|||
const createCol = (label, name, type) => { |
|||
label.length == name.length ? null : console.log('参数缺失', label.length, name.length) |
|||
var arr = [] |
|||
label?.map((item, index) => { |
|||
let cm = { |
|||
title: item, |
|||
dataIndex: name[index], |
|||
key: name[index], |
|||
align: "center", |
|||
} |
|||
switch (item) { |
|||
case "序号": |
|||
cm.render = (text, record, index) => index + 1 |
|||
break |
|||
case "退款订单ID": |
|||
case "业务订单ID": |
|||
case "支付订单ID": |
|||
cm.render = (text) => ( |
|||
<> |
|||
<a onClick={() => { |
|||
navigator.clipboard.writeText(`${text}`).then(() => { message.success("已复制到剪切板") }); |
|||
}}>{text}</a> |
|||
</> |
|||
) |
|||
break |
|||
default: break |
|||
} |
|||
arr.push(cm) |
|||
}) |
|||
var obj = { |
|||
title: "操作", |
|||
dataIndex: "operation", |
|||
key: "operation", |
|||
fixed: "right", |
|||
align: "center", |
|||
} |
|||
switch (type) { |
|||
case 2: |
|||
obj.render = (text, record) => (<> |
|||
<span type="primary" style={{ display: 'block', textAlign: 'center' }} onClick={() => { |
|||
setYcddData(record) |
|||
setDetailVisible(true) |
|||
}}> |
|||
<a>详情</a> |
|||
</span> |
|||
</>) |
|||
arr.push(obj) |
|||
break |
|||
default: break |
|||
} |
|||
return arr |
|||
} |
|||
//基本信息检索条件 |
|||
const formSearch = [ |
|||
{ |
|||
name: "carId", |
|||
type: "Input", |
|||
label: "车牌号", |
|||
placeholder: "请输入车牌号", |
|||
}, |
|||
{ |
|||
name: "mobile", |
|||
type: "Input", |
|||
label: "会员手机号", |
|||
placeholder: "请输入会员手机号", |
|||
}, |
|||
{ |
|||
name: "authState", |
|||
type: "Select", |
|||
label: "认证状态", |
|||
options: [ |
|||
{ |
|||
label: "已认证", |
|||
value: 0, |
|||
}, |
|||
{ |
|||
label: "未认证", |
|||
value: 1, |
|||
}, |
|||
|
|||
], |
|||
}, |
|||
{ |
|||
name: "bingState", |
|||
type: "Select", |
|||
label: "绑定状态", |
|||
options: [ |
|||
{ |
|||
label: "已绑定", |
|||
value: 0, |
|||
}, |
|||
{ |
|||
label: "未绑定", |
|||
value: 1, |
|||
}, |
|||
|
|||
], |
|||
}, |
|||
{ |
|||
name: "timePeriod", |
|||
type: "RangePicker", |
|||
label: "时间段", |
|||
defaultValue: [moment().subtract(1, "month"), moment()], |
|||
}, |
|||
]; |
|||
|
|||
//所有检索条件 |
|||
const ash = [ |
|||
{//1 |
|||
name: "region", |
|||
type: "TreeSelect", |
|||
label: "区域", |
|||
}, |
|||
{//2 |
|||
name: "operator", |
|||
type: "Select", |
|||
label: "商户名称", |
|||
options: dictionary.MerchantName, |
|||
}, |
|||
{//3 |
|||
name: "road", |
|||
type: "Input", |
|||
label: "停车场名称", |
|||
placeholder: "请输入停车场名称", |
|||
}, |
|||
{//4 |
|||
name: "road_type", |
|||
type: "Select", |
|||
label: "车场类型", |
|||
options: [ |
|||
{ |
|||
label: "全部", |
|||
value: 0, |
|||
}, |
|||
{ |
|||
label: "路侧平行", |
|||
value: 1, |
|||
}, |
|||
{ |
|||
label: "路侧垂停", |
|||
value: 2, |
|||
}, |
|||
{ |
|||
label: "封闭车场", |
|||
value: 3, |
|||
}, |
|||
{ |
|||
label: "半封闭车场", |
|||
value: 4, |
|||
}, |
|||
], |
|||
}, |
|||
{//5 |
|||
name: "phone", |
|||
type: "Input", |
|||
label: "手机号", |
|||
placeholder: "请输入手机号", |
|||
}, |
|||
{//6 |
|||
name: "type", |
|||
type: "Select", |
|||
label: "出入场类型", |
|||
placeholder: "请选择出入场类型", |
|||
defaultValue: 1, |
|||
options: [ |
|||
{ |
|||
label: "入场", |
|||
value: 1, |
|||
}, |
|||
{ |
|||
label: "出场", |
|||
value: 2, |
|||
}, |
|||
], |
|||
}, |
|||
|
|||
{//7 |
|||
name: "b", |
|||
type: "Input", |
|||
label: "商品名称", |
|||
placeholder: "请输入商品名称", |
|||
}, |
|||
{//8 |
|||
name: "b", |
|||
type: "Select", |
|||
label: "购买渠道", |
|||
placeholder: "请选择购买渠道", |
|||
options: [ |
|||
{ |
|||
label: "全部", |
|||
value: 0, |
|||
}, |
|||
{ |
|||
label: "线上渠道", |
|||
value: 1, |
|||
}, |
|||
{ |
|||
label: "后台录入", |
|||
value: 2, |
|||
}, |
|||
], |
|||
}, |
|||
{//9 |
|||
name: "b", |
|||
type: "Select", |
|||
label: "订单状态", |
|||
placeholder: "请选择订单状态", |
|||
options: [ |
|||
{ |
|||
label: "全部", |
|||
value: 0, |
|||
}, |
|||
{ |
|||
label: "未生效", |
|||
value: 1, |
|||
}, |
|||
{ |
|||
label: "生效中", |
|||
value: 2, |
|||
}, |
|||
{ |
|||
label: "已失效", |
|||
value: 3, |
|||
}, |
|||
], |
|||
}, |
|||
{//10 |
|||
name: "payment_channels", |
|||
type: "Select", |
|||
label: "支付渠道", |
|||
placeholder: "请选择支付渠道", |
|||
options: dictionary.PayChannel, |
|||
}, |
|||
{//11 |
|||
name: "payment_equipment", |
|||
type: "Select", |
|||
label: "支付设备", |
|||
placeholder: "请选择支付设备", |
|||
options: dictionary.PayDevice |
|||
}, |
|||
{//12 |
|||
name: "pay_type", |
|||
type: "Select", |
|||
label: "支付方式", |
|||
placeholder: "请选择支付方式", |
|||
options: dictionary.PaydMethod, |
|||
}, |
|||
{//13 |
|||
name: "timePeriod", |
|||
type: "RangePicker", |
|||
label: "时间段", |
|||
defaultValue: [moment().startOf("day"), moment()], |
|||
}, |
|||
{//14 |
|||
name: "b", |
|||
type: "Select", |
|||
label: "退款方式", |
|||
placeholder: "请选择退款方式", |
|||
options: dictionary.PaydMethod, |
|||
}, |
|||
{//15 |
|||
name: "b", |
|||
type: "Input", |
|||
label: "渠道流水号", |
|||
placeholder: "请输入渠道流水号", |
|||
}, |
|||
{//16 |
|||
name: "timePeriod", |
|||
type: "RangePicker", |
|||
label: "时间段", |
|||
defaultTitle: ['支付时间', '至'] |
|||
// defaultValue: [moment().startOf("day"), moment()], |
|||
}, |
|||
{//17 |
|||
name: "timePeriod", |
|||
type: "RangePicker", |
|||
label: "时间段", |
|||
defaultTitle: ['订购时间', '至'] |
|||
// defaultValue: [moment().startOf("day"), moment()], |
|||
}, |
|||
{//18 |
|||
name: "timePeriod", |
|||
type: "RangePicker", |
|||
label: "时间段", |
|||
defaultTitle: ['预约到场时间', '至'] |
|||
// defaultValue: [moment().startOf("day"), moment()], |
|||
}, |
|||
{//19 |
|||
name: "plate", |
|||
type: "Input", |
|||
label: "车牌号", |
|||
placeholder: "请输入车牌号", |
|||
}, |
|||
{//20 |
|||
name: "order_id", |
|||
type: "Input", |
|||
label: "支付订单ID", |
|||
placeholder: "请输入支付订单ID", |
|||
}, |
|||
{//21 |
|||
name: "berth_id", |
|||
type: "Input", |
|||
label: "泊位号", |
|||
placeholder: "请输入泊位号", |
|||
}, |
|||
{//22 |
|||
name: "t", |
|||
type: "Select", |
|||
label: "所属商户", |
|||
placeholder: "请选择所属商户", |
|||
options: dictionary.MerchantName, |
|||
}, |
|||
{//23 |
|||
name: "t", |
|||
type: "Input", |
|||
label: "预付订单ID", |
|||
placeholder: "请输入订单ID", |
|||
}, |
|||
{//24 |
|||
name: "t", |
|||
type: "Input", |
|||
label: "停车记录ID", |
|||
placeholder: "停车记录ID", |
|||
}, |
|||
{//25 |
|||
name: "dealer", |
|||
type: "Input", |
|||
label: "操作人", |
|||
placeholder: "请输入操作人", |
|||
}, |
|||
{//26 |
|||
name: "t", |
|||
type: "Input", |
|||
label: "停车订单ID", |
|||
placeholder: "停车订单ID", |
|||
}, |
|||
{//27 |
|||
name: "t", |
|||
type: "Input", |
|||
label: "欠费区间", |
|||
placeholder: "", |
|||
}, |
|||
{//28 |
|||
name: "timePeriod", |
|||
type: "RangePicker", |
|||
label: "时间段", |
|||
defaultTitle: ['订单修改时间', '至'] |
|||
// defaultValue: [moment().startOf("day"), moment()], |
|||
}, |
|||
{//29 |
|||
name: "b", |
|||
type: "Select", |
|||
label: "修改原因", |
|||
placeholder: "请选择修改原因", |
|||
options: [ |
|||
{ |
|||
label: "全部", |
|||
value: 0, |
|||
}, |
|||
{ |
|||
label: "订单自动找平", |
|||
value: 1, |
|||
}, |
|||
{ |
|||
label: "异常订单处理", |
|||
value: 2, |
|||
}, |
|||
], |
|||
}, |
|||
]; |
|||
const [resultData, setResultData] = useState([]) |
|||
const [ycddData, setYcddData] = useState([])//异常订单数据 |
|||
const [detailVisible, setDetailVisible] = useState(false); |
|||
const [timesVisible, setTimesVisible] = useState(false); //退款尝试次数展开 |
|||
const [tkddVisible, setTkddVisible] = useState(false); |
|||
const [eaeVisible, setEaeVisible] = useState(false);//出入场图片 |
|||
const [bigpicVisible, setBigpicVisible] = useState(false);//大图展示 |
|||
const [bigPic, setBigPic] = useState(); |
|||
const [total, setTotal] = useState(0); |
|||
const [tabKey, setTabKey] = useState("1"); |
|||
function changeKey(key) { |
|||
setTabKey(key); |
|||
} |
|||
|
|||
//基本信息查询 |
|||
function search(e) { |
|||
// if (!e.type) { |
|||
// e.type = 1 |
|||
// } |
|||
ajax({ |
|||
url: "/api/ope/car/list", |
|||
type: "post", |
|||
data: { ...e }, |
|||
}).then((res) => { |
|||
let { status, data, total } = res |
|||
if (status == 20000) { |
|||
setResultData(data) |
|||
setTotal(total) |
|||
} else { |
|||
message.error(res.message) |
|||
} |
|||
}) |
|||
} |
|||
|
|||
//详情其他模块查询 |
|||
function searchOther(e) { |
|||
var url = '' |
|||
switch (tabKey) { |
|||
case "1": |
|||
url = ""// |
|||
break |
|||
case "2": |
|||
url = ""// |
|||
break |
|||
default: break |
|||
} |
|||
// if (tabKey == '3' && e && !e?.type) { |
|||
// e.type = 1 |
|||
// } |
|||
ajax({ |
|||
url: url, |
|||
type: "post", |
|||
data: { ...e, carId: carId }, |
|||
}).then((res) => { |
|||
let { status, data, total } = res |
|||
if (status == 20000) { |
|||
if (data.list) { |
|||
setResultData(data.list) |
|||
setTotal(data.total) |
|||
} else { |
|||
setResultData(data) |
|||
setTotal(total) |
|||
} |
|||
} else { |
|||
setResultData([]) |
|||
message.error(res.message) |
|||
} |
|||
}) |
|||
} |
|||
//停车记录信息渲染 |
|||
function renderParkRecord(params) { |
|||
return ( |
|||
<div className="ltc-box"> |
|||
<div className="ltc-box-title"><div className="text">停车场信息</div><div className="line"></div></div> |
|||
<div className="ltc-content"> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">停车场名称</div><div className="new-value">{params?.road || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">泊位号</div><div className="new-value">{params.berth_id || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">区域</div><div className="new-value">{params.region || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">商户</div><div className="new-value">{params.operator || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">车场类型</div><div className="new-value">{params.road_type || "--"}</div> |
|||
</div> |
|||
</div> |
|||
<div className="ltc-box-title"><div className="text">停车信息</div><div className="line"></div></div> |
|||
<div className="ltc-content"> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">车牌号</div><div className="new-value">{params.plate || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">会员手机号</div><div className="new-value">{params.phone || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">入场时间</div><div className="new-value">{params.in_time || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">出场时间</div><div className="new-value">{params.out_time || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">停车时长</div><div className="new-value">{params.admission_time || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">订单金额</div><div className="new-value">{params.order_amount || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">停车卡折扣</div><div className="new-value">{params.parking_card_discount || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">车场折扣</div><div className="new-value">{params.road_discount || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">应收金额</div><div className="new-value">{params.receivable_amount || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">优惠券</div><div className="new-value">{params.preferential_amount || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">优惠总计</div><div className="new-value">{params.preferential_total || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">实付金额</div><div className="new-value">{params.actual_amount || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">优惠退款</div><div className="new-value">{params.refund_discount || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">实付退款</div><div className="new-value">{params.actual_refund || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">退款总计</div><div className="new-value">{params.refund_total || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">入场收费员</div><div className="new-value">{params.in_person || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">出场收费员</div><div className="new-value">{params.out_person || "--"}</div> |
|||
</div> |
|||
</div> |
|||
<div className="ltc-box-title"><div className="text">入场照片</div><div className="line"></div></div> |
|||
<div className="ltc-content"> |
|||
<div className="ltc-item ltc-item-img "> |
|||
<img src={params.in_veh_pic || require("../../../../../src/assets/images/error-img.png")} onClick={() => { setBigPic(params.in_veh_pic); setBigpicVisible(true) }} /> |
|||
</div> |
|||
<div className="ltc-item ltc-item-img "> |
|||
<img src={params.in_plate_pic || require("../../../../../src/assets/images/error-img.png")} onClick={() => { setBigPic(params.in_plate_pic); setBigpicVisible(true) }} /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
); |
|||
} |
|||
//其他页面渲染 |
|||
function renderTable(columns, arr, dataSource) { |
|||
return ( |
|||
<TableModule |
|||
columns={columns} |
|||
tableData={dataSource} |
|||
formSearch={arr} |
|||
total={total} |
|||
search={searchOther} |
|||
/> |
|||
); |
|||
} |
|||
//退款订单详情 |
|||
const tkddModal = <div className="ltc-box"> |
|||
<div className="ltc-box-title"><div className="text">退款订单:{ycddData?.refund_id}</div><div className="line"></div></div> |
|||
<div className="ltc-content"> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">生成时间</div><div className="new-value">{ycddData?.refund_time || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">退款状态</div><div className="new-value">{ycddData.refund_state || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">支付渠道</div><div className="new-value">{ycddData.payment_channels || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">退款方式</div><div className="new-value">{ycddData.refund_type || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">应退实付金额</div><div className="new-value">{ycddData.refund_actual_amount || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">已退实付金额</div><div className="new-value">{ycddData.has_refund_actual_amount || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">应退优惠金额</div><div className="new-value">{ycddData.refund_discount_amount || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">已退优惠金额</div><div className="new-value">{ycddData.has_refund_discount_amount || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">退款尝试次数</div><div className="new-value">{ycddData.try_count || "--"} |
|||
{timesVisible ? |
|||
<a onClick={() => { setTimesVisible(false) }}>收起</a> : |
|||
<a onClick={() => { setTimesVisible(true) }}>查看</a>} |
|||
</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">最近尝试时间</div><div className="new-value">{ycddData.latest_try_time || "--"}</div> |
|||
</div> |
|||
</div> |
|||
|
|||
|
|||
{timesVisible ? <> |
|||
<div className="ltc-box-title"><div className="text">退款尝试详情</div><div className="line"></div></div> |
|||
</> : |
|||
<> |
|||
<div className="ltc-box-title"><div className="text">支付订单:{ycddData.order_id}</div><div className="line"></div></div> |
|||
<div className="ltc-content"> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">平台商户</div><div className="new-value">{ycddData.payment_operator_name}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">生成时间</div><div className="new-value">{ycddData.payment_create_time}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">支付时间</div><div className="new-value">{ycddData.pay_time}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">支付渠道</div><div className="new-value">{ycddData.payment_equipment}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">优惠金额</div><div className="new-value">{ycddData.discount_amount}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">支付应用</div><div className="new-value">{ycddData.payment_equipment}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">实付金额</div><div className="new-value">{ycddData.paid_in_money}</div> |
|||
</div> |
|||
</div> |
|||
<div className="ltc-box-title"><div className="text">停车订单:{ycddData.park_record_id}</div><div className="line"></div></div> |
|||
<div className="ltc-box-title"><div className="text">车厂详情</div></div> |
|||
<div className="ltc-content"> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">平台商户</div><div className="new-value">{ycddData.payment_operator_name}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">停车场名称</div><div className="new-value">{ycddData?.road_name}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">区域</div><div className="new-value">{ycddData.area_name}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">商户名称</div><div className="new-value">{ycddData.park_operator_name}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">泊位号</div><div className="new-value">{ycddData.berth_code}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">车场类型</div><div className="new-value">{ycddData.road_type}</div> |
|||
</div> |
|||
</div> |
|||
<div className="ltc-box-title"><div className="text">车辆详情</div></div> |
|||
<div className="ltc-content"> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">车牌号</div><div className="new-value">{ycddData.plate_number}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">停车时长</div><div className="new-value">{ycddData.parking_duration}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">入场时间</div><div className="new-value">{ycddData.in_time}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">出场时间</div><div className="new-value">{ycddData.out_time}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">入场记录来源</div><div className="new-value">{ycddData.inSource}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">出场记录来源</div><div className="new-value">{ycddData.outSource}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">证据图像</div><div className="new-value"><a onClick={() => { setEaeVisible(true) }}>查看</a></div> |
|||
</div> |
|||
</div> |
|||
</>} |
|||
|
|||
</div> |
|||
|
|||
useEffect(() => { |
|||
searchOther() |
|||
}, [tabKey]) |
|||
|
|||
|
|||
return ( |
|||
<> |
|||
<Tabs activeKey={tabKey} onChange={changeKey}> |
|||
<Tabs.TabPane tab="停车卡订单" key="1"> |
|||
{renderTable( |
|||
createCol(['车牌号', '车牌颜色', '手机号', '商品名称', '实付金额', '支付渠道', '支付设备', '购买渠道', '支付时间', '订单状态', '渠道流水号'], |
|||
['merchantName', '', 'area', '', 'sectionName', '', 'licensePlateNumber', 'entryTime', 'exitTime', '', 'arrearsAmount'], 1), |
|||
[ash[18], ash[4], ash[6], ash[7], ash[8], ash[9], ash[10], ash[15], ash[14]], |
|||
resultData |
|||
)} |
|||
</Tabs.TabPane> |
|||
<Tabs.TabPane tab="错峰卡订单" key="2"> |
|||
{renderTable( |
|||
createCol(['序号', '停车场名称', '车牌号', '手机号', '订单金额', '支付方式', '渠道流水号', '同步MS状态', '订购时间'], |
|||
['index', '', 'area', '', 'sectionName', '', 'licensePlateNumber', 'entryTime', 'exitTime', '', 'arrearsAmount'],2), |
|||
[ash[2], ash[4], ash[18], ash[11], ash[16], ash[14]], |
|||
resultData |
|||
)} |
|||
</Tabs.TabPane> |
|||
{/* <Tabs.TabPane tab="预约订单" key="3"> |
|||
|
|||
</Tabs.TabPane> */} |
|||
</Tabs> |
|||
<Modal |
|||
open={bigpicVisible} |
|||
width={1600} |
|||
title={'图片展示'} |
|||
className="eae-modal" |
|||
onCancel={() => { |
|||
setBigpicVisible(false); |
|||
}} |
|||
footer={false} |
|||
> |
|||
<div> |
|||
<div className="eae-modal-item"> |
|||
<img src={bigPic} width={1550} /> |
|||
</div> |
|||
</div> |
|||
</Modal> |
|||
<Modal |
|||
open={tkddVisible} |
|||
width={1500} |
|||
title={'订单详情'} |
|||
onCancel={() => { |
|||
setTkddVisible(false); |
|||
}} |
|||
footer={[ |
|||
<Button key="back" onClick={() => { |
|||
setTkddVisible(false); |
|||
}}> |
|||
关闭窗口 |
|||
</Button>]} |
|||
> |
|||
{/* {tkddModal} */} |
|||
{tabKey == '5' ? tkddModal : tabKey == '6' ? tckModal : tabKey == '7' ? cfkModal : null} |
|||
|
|||
</Modal> |
|||
<Modal |
|||
open={eaeVisible} |
|||
width={1600} |
|||
title={'证据图像'} |
|||
className="eae-modal" |
|||
onCancel={() => { |
|||
setEaeVisible(false); |
|||
}} |
|||
footer={false} |
|||
> |
|||
<div> |
|||
<div className="eae-modal-title"><div className="ltc-icon"></div>入场图片</div> |
|||
<div className="eae-modal-item"> |
|||
<div>车辆照片</div> |
|||
<img src={ycddData.in_veh_pic} width={750} /> |
|||
</div> |
|||
<div className="eae-modal-item"> |
|||
<div>车牌照片</div> |
|||
<img src={ycddData.in_plate_pic} width={750} /> |
|||
</div> |
|||
</div> |
|||
</Modal> |
|||
</> |
|||
); |
|||
} |
|||
|
|||
export default ProductOrderInquiry; |
@ -0,0 +1,322 @@ |
|||
@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-tabpane-hidden { |
|||
display: none; |
|||
} |
|||
.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); |
|||
} |
|||
.ant-input:-ms-input-placeholder { |
|||
color: var(--color-placeholder); |
|||
} |
|||
.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; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
.base-ltc { |
|||
display: flex; |
|||
|
|||
} |
|||
.ltc-img { |
|||
margin-right: 20px; |
|||
} |
|||
.ltc-box { |
|||
width: 100%; |
|||
.ltc-box-title { |
|||
font-size: 18px; |
|||
font-weight: bolder; |
|||
width: 100%; |
|||
white-space: nowrap; |
|||
overflow: hidden; |
|||
.text { |
|||
display: inline-block; |
|||
} |
|||
.line { |
|||
display: inline-block; |
|||
border: 1px dotted #607092; |
|||
width: inherit; |
|||
margin-bottom: 6px; |
|||
} |
|||
.ltc-icon { |
|||
width: 5px; |
|||
background: #0080db; |
|||
height: 19px; |
|||
display: inline-block; |
|||
margin-right: 10px; |
|||
} |
|||
.ltc-btn { |
|||
display: inline-block; |
|||
border: 1px solid; |
|||
border-radius: 5px; |
|||
margin: 0 10px; |
|||
width: 60px; |
|||
height: 35px; |
|||
line-height: 35px; |
|||
text-align: center; |
|||
background: #409eff; |
|||
color: #fff; |
|||
font-weight: 100; |
|||
cursor: pointer; |
|||
} |
|||
.ltc-cancel { |
|||
background: #fff; |
|||
color: #000; |
|||
} |
|||
} |
|||
.ltc-box-line { |
|||
border: 1px solid #e7e7e7; |
|||
margin: 8px 0; |
|||
} |
|||
.ltc-box-in { |
|||
margin-left: 20px; |
|||
.ant-descriptions { |
|||
margin-left: 20px; |
|||
} |
|||
} |
|||
.ltc-title { |
|||
margin: auto; |
|||
width: 50%; |
|||
text-align: center; |
|||
font-size: 18px; |
|||
font-weight: 600; |
|||
} |
|||
.ltc-content { |
|||
margin: auto; |
|||
padding: 20px; |
|||
.ltc-item { |
|||
font-size: 14px; |
|||
margin: 6px 12px 6px 0; |
|||
display: inline-flex; |
|||
//width: 470px; |
|||
.new-item { |
|||
display: inline-block; |
|||
width: 120px; |
|||
height: 32px; |
|||
line-height: 32px; |
|||
background: rgba(150,161,192,0.24); |
|||
text-align: center; |
|||
} |
|||
.new-value { |
|||
display: inline-block; |
|||
width: 320px; |
|||
height: 32px; |
|||
line-height: 32px; |
|||
text-align: center; |
|||
background: #3E4557; |
|||
box-shadow: 0px 3px 8px 0px rgba(0,0,0,0.12); |
|||
} |
|||
.ltc-item-input { |
|||
display: inline-block; |
|||
width: 200px; |
|||
} |
|||
div { |
|||
width: 150px; |
|||
} |
|||
} |
|||
} |
|||
.ltc-liuc { |
|||
display: flex; |
|||
margin-left: 200px; |
|||
.ltc-item { |
|||
display: flex; |
|||
.ltc-item-name { |
|||
margin: 6px 10px 0 10px; |
|||
color: #3f94df; |
|||
} |
|||
} |
|||
.ltc-work{ |
|||
text-align: center; |
|||
.ltc-tips { |
|||
border: 3px solid #000; |
|||
text-align: center; |
|||
line-height: 27px; |
|||
height: 35px; |
|||
width: 35px; |
|||
border-radius: 28px; |
|||
margin: auto; |
|||
} |
|||
} |
|||
|
|||
} |
|||
} |
|||
.distable { |
|||
.ant-pagination { |
|||
justify-self: center; |
|||
} |
|||
} |
|||
.eae-modal { |
|||
.eae-modal-title { |
|||
font-size: 18px; |
|||
font-weight: bolder; |
|||
.ltc-icon { |
|||
width: 5px; |
|||
background: #0080db; |
|||
height: 19px; |
|||
display: inline-block; |
|||
margin-right: 10px; |
|||
} |
|||
} |
|||
.eae-modal-item { |
|||
display: inline-block; |
|||
font-size: 16px; |
|||
} |
|||
} |
|||
.cc-container { |
|||
overflow: auto; |
|||
} |
|||
.back-btn { |
|||
position: absolute; |
|||
right: 50px; |
|||
border: 1px solid #bdbdbd; |
|||
border-radius: 5px; |
|||
width: 60px; |
|||
height: 35px; |
|||
line-height: 30px; |
|||
text-align: center; |
|||
background: #ffffff; |
|||
color: #000; |
|||
cursor: pointer; |
|||
z-index: 9999; |
|||
} |
@ -1,5 +1,322 @@ |
|||
@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); |
|||
$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-tabpane-hidden { |
|||
display: none; |
|||
} |
|||
.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); |
|||
} |
|||
.ant-input:-ms-input-placeholder { |
|||
color: var(--color-placeholder); |
|||
} |
|||
.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; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
.base-ltc { |
|||
display: flex; |
|||
|
|||
} |
|||
.ltc-img { |
|||
margin-right: 20px; |
|||
} |
|||
.ltc-box { |
|||
width: 100%; |
|||
.ltc-box-title { |
|||
font-size: 18px; |
|||
font-weight: bolder; |
|||
width: 100%; |
|||
white-space: nowrap; |
|||
overflow: hidden; |
|||
.text { |
|||
display: inline-block; |
|||
} |
|||
.line { |
|||
display: inline-block; |
|||
border: 1px dotted #607092; |
|||
width: inherit; |
|||
margin-bottom: 6px; |
|||
} |
|||
.ltc-icon { |
|||
width: 5px; |
|||
background: #0080db; |
|||
height: 19px; |
|||
display: inline-block; |
|||
margin-right: 10px; |
|||
} |
|||
.ltc-btn { |
|||
display: inline-block; |
|||
border: 1px solid; |
|||
border-radius: 5px; |
|||
margin: 0 10px; |
|||
width: 60px; |
|||
height: 35px; |
|||
line-height: 35px; |
|||
text-align: center; |
|||
background: #409eff; |
|||
color: #fff; |
|||
font-weight: 100; |
|||
cursor: pointer; |
|||
} |
|||
.ltc-cancel { |
|||
background: #fff; |
|||
color: #000; |
|||
} |
|||
} |
|||
.ltc-box-line { |
|||
border: 1px solid #e7e7e7; |
|||
margin: 8px 0; |
|||
} |
|||
.ltc-box-in { |
|||
margin-left: 20px; |
|||
.ant-descriptions { |
|||
margin-left: 20px; |
|||
} |
|||
} |
|||
.ltc-title { |
|||
margin: auto; |
|||
width: 50%; |
|||
text-align: center; |
|||
font-size: 18px; |
|||
font-weight: 600; |
|||
} |
|||
.ltc-content { |
|||
margin: auto; |
|||
padding: 20px; |
|||
.ltc-item { |
|||
font-size: 14px; |
|||
margin: 6px 12px 6px 0; |
|||
display: inline-flex; |
|||
//width: 470px; |
|||
.new-item { |
|||
display: inline-block; |
|||
width: 120px; |
|||
height: 32px; |
|||
line-height: 32px; |
|||
background: rgba(150,161,192,0.24); |
|||
text-align: center; |
|||
} |
|||
.new-value { |
|||
display: inline-block; |
|||
width: 320px; |
|||
height: 32px; |
|||
line-height: 32px; |
|||
text-align: center; |
|||
background: #3E4557; |
|||
box-shadow: 0px 3px 8px 0px rgba(0,0,0,0.12); |
|||
} |
|||
.ltc-item-input { |
|||
display: inline-block; |
|||
width: 200px; |
|||
} |
|||
div { |
|||
width: 150px; |
|||
} |
|||
} |
|||
} |
|||
.ltc-liuc { |
|||
display: flex; |
|||
margin-left: 200px; |
|||
.ltc-item { |
|||
display: flex; |
|||
.ltc-item-name { |
|||
margin: 6px 10px 0 10px; |
|||
color: #3f94df; |
|||
} |
|||
} |
|||
.ltc-work{ |
|||
text-align: center; |
|||
.ltc-tips { |
|||
border: 3px solid #000; |
|||
text-align: center; |
|||
line-height: 27px; |
|||
height: 35px; |
|||
width: 35px; |
|||
border-radius: 28px; |
|||
margin: auto; |
|||
} |
|||
} |
|||
|
|||
} |
|||
} |
|||
.distable { |
|||
.ant-pagination { |
|||
justify-self: center; |
|||
} |
|||
} |
|||
.eae-modal { |
|||
.eae-modal-title { |
|||
font-size: 18px; |
|||
font-weight: bolder; |
|||
.ltc-icon { |
|||
width: 5px; |
|||
background: #0080db; |
|||
height: 19px; |
|||
display: inline-block; |
|||
margin-right: 10px; |
|||
} |
|||
} |
|||
.eae-modal-item { |
|||
display: inline-block; |
|||
font-size: 16px; |
|||
} |
|||
} |
|||
.cc-container { |
|||
overflow: auto; |
|||
} |
|||
.back-btn { |
|||
position: absolute; |
|||
right: 50px; |
|||
border: 1px solid #bdbdbd; |
|||
border-radius: 5px; |
|||
width: 60px; |
|||
height: 35px; |
|||
line-height: 30px; |
|||
text-align: center; |
|||
background: #ffffff; |
|||
color: #000; |
|||
cursor: pointer; |
|||
z-index: 9999; |
|||
} |
@ -1,15 +1,625 @@ |
|||
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 { 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 { useLocation } from "react-router-dom"; |
|||
import { |
|||
message, |
|||
Pagination, |
|||
Table, |
|||
Input, |
|||
Space, |
|||
Modal, |
|||
Button, |
|||
Select, |
|||
Tabs, |
|||
Descriptions, |
|||
Timeline |
|||
} from "antd"; |
|||
import moment from "moment"; |
|||
import ajax from '@/config/ajax.js' |
|||
import { TableModule } from "@/components"; |
|||
import { dictionary } from "@/config/common.js"; |
|||
import "./index.scss"; |
|||
|
|||
function SystemLog() { |
|||
return <div>SystemLog</div> |
|||
const [carId, setCarId] = useState() |
|||
|
|||
//构建表头 |
|||
const createCol = (label, name, type) => { |
|||
label.length == name.length ? null : console.log('参数缺失', label.length, name.length) |
|||
var arr = [] |
|||
label?.map((item, index) => { |
|||
let cm = { |
|||
title: item, |
|||
dataIndex: name[index], |
|||
key: name[index], |
|||
align: "center", |
|||
} |
|||
switch (item) { |
|||
case "序号": |
|||
cm.render = (text, record, index) => index + 1 |
|||
break |
|||
case "退款订单ID": |
|||
case "业务订单ID": |
|||
case "支付订单ID": |
|||
cm.render = (text) => ( |
|||
<> |
|||
<a onClick={() => { |
|||
navigator.clipboard.writeText(`${text}`).then(() => { message.success("已复制到剪切板") }); |
|||
}}>{text}</a> |
|||
</> |
|||
) |
|||
break |
|||
default: break |
|||
} |
|||
arr.push(cm) |
|||
}) |
|||
var obj = { |
|||
title: "操作", |
|||
dataIndex: "operation", |
|||
key: "operation", |
|||
fixed: "right", |
|||
align: "center", |
|||
} |
|||
switch (type) { |
|||
case 2: |
|||
obj.render = (text, record) => (<> |
|||
<span type="primary" style={{ display: 'block', textAlign: 'center' }} onClick={() => { |
|||
setYcddData(record) |
|||
setDetailVisible(true) |
|||
}}> |
|||
<a>详情</a> |
|||
</span> |
|||
</>) |
|||
arr.push(obj) |
|||
break |
|||
default: break |
|||
} |
|||
return arr |
|||
} |
|||
//基本信息检索条件 |
|||
const formSearch = [ |
|||
{ |
|||
name: "carId", |
|||
type: "Input", |
|||
label: "车牌号", |
|||
placeholder: "请输入车牌号", |
|||
}, |
|||
{ |
|||
name: "mobile", |
|||
type: "Input", |
|||
label: "会员手机号", |
|||
placeholder: "请输入会员手机号", |
|||
}, |
|||
{ |
|||
name: "authState", |
|||
type: "Select", |
|||
label: "认证状态", |
|||
options: [ |
|||
{ |
|||
label: "已认证", |
|||
value: 0, |
|||
}, |
|||
{ |
|||
label: "未认证", |
|||
value: 1, |
|||
}, |
|||
|
|||
], |
|||
}, |
|||
{ |
|||
name: "bingState", |
|||
type: "Select", |
|||
label: "绑定状态", |
|||
options: [ |
|||
{ |
|||
label: "已绑定", |
|||
value: 0, |
|||
}, |
|||
{ |
|||
label: "未绑定", |
|||
value: 1, |
|||
}, |
|||
|
|||
], |
|||
}, |
|||
{ |
|||
name: "timePeriod", |
|||
type: "RangePicker", |
|||
label: "时间段", |
|||
defaultValue: [moment().subtract(1, "month"), moment()], |
|||
}, |
|||
]; |
|||
|
|||
//所有检索条件 |
|||
const ash = [ |
|||
{//1 |
|||
name: "region", |
|||
type: "TreeSelect", |
|||
label: "区域", |
|||
}, |
|||
{//2 |
|||
name: "operator", |
|||
type: "Select", |
|||
label: "商户名称", |
|||
options: dictionary.MerchantName, |
|||
}, |
|||
{//3 |
|||
name: "road", |
|||
type: "Input", |
|||
label: "停车场名称", |
|||
placeholder: "请输入停车场名称", |
|||
}, |
|||
{//4 |
|||
name: "road_type", |
|||
type: "Select", |
|||
label: "车场类型", |
|||
options: [ |
|||
{ |
|||
label: "全部", |
|||
value: 0, |
|||
}, |
|||
{ |
|||
label: "路侧平行", |
|||
value: 1, |
|||
}, |
|||
{ |
|||
label: "路侧垂停", |
|||
value: 2, |
|||
}, |
|||
{ |
|||
label: "封闭车场", |
|||
value: 3, |
|||
}, |
|||
{ |
|||
label: "半封闭车场", |
|||
value: 4, |
|||
}, |
|||
], |
|||
}, |
|||
{//5 |
|||
name: "phone", |
|||
type: "Input", |
|||
label: "手机号", |
|||
placeholder: "请输入手机号", |
|||
}, |
|||
{//6 |
|||
name: "type", |
|||
type: "Select", |
|||
label: "出入场类型", |
|||
placeholder: "请选择出入场类型", |
|||
defaultValue: 1, |
|||
options: [ |
|||
{ |
|||
label: "入场", |
|||
value: 1, |
|||
}, |
|||
{ |
|||
label: "出场", |
|||
value: 2, |
|||
}, |
|||
], |
|||
}, |
|||
|
|||
{//7 |
|||
name: "b", |
|||
type: "Input", |
|||
label: "商品名称", |
|||
placeholder: "请输入商品名称", |
|||
}, |
|||
{//8 |
|||
name: "b", |
|||
type: "Select", |
|||
label: "购买渠道", |
|||
placeholder: "请选择购买渠道", |
|||
options: [ |
|||
{ |
|||
label: "全部", |
|||
value: 0, |
|||
}, |
|||
{ |
|||
label: "线上渠道", |
|||
value: 1, |
|||
}, |
|||
{ |
|||
label: "后台录入", |
|||
value: 2, |
|||
}, |
|||
], |
|||
}, |
|||
{//9 |
|||
name: "b", |
|||
type: "Select", |
|||
label: "订单状态", |
|||
placeholder: "请选择订单状态", |
|||
options: [ |
|||
{ |
|||
label: "全部", |
|||
value: 0, |
|||
}, |
|||
{ |
|||
label: "未生效", |
|||
value: 1, |
|||
}, |
|||
{ |
|||
label: "生效中", |
|||
value: 2, |
|||
}, |
|||
{ |
|||
label: "已失效", |
|||
value: 3, |
|||
}, |
|||
], |
|||
}, |
|||
{//10 |
|||
name: "payment_channels", |
|||
type: "Select", |
|||
label: "支付渠道", |
|||
placeholder: "请选择支付渠道", |
|||
options: dictionary.PayChannel, |
|||
}, |
|||
{//11 |
|||
name: "payment_equipment", |
|||
type: "Select", |
|||
label: "支付设备", |
|||
placeholder: "请选择支付设备", |
|||
options: dictionary.PayDevice |
|||
}, |
|||
{//12 |
|||
name: "pay_type", |
|||
type: "Select", |
|||
label: "支付方式", |
|||
placeholder: "请选择支付方式", |
|||
options: dictionary.PaydMethod, |
|||
}, |
|||
{//13 |
|||
name: "timePeriod", |
|||
type: "RangePicker", |
|||
label: "时间段", |
|||
defaultValue: [moment().startOf("day"), moment()], |
|||
}, |
|||
{//14 |
|||
name: "b", |
|||
type: "Select", |
|||
label: "退款方式", |
|||
placeholder: "请选择退款方式", |
|||
options: dictionary.PaydMethod, |
|||
}, |
|||
{//15 |
|||
name: "b", |
|||
type: "Input", |
|||
label: "渠道流水号", |
|||
placeholder: "请输入渠道流水号", |
|||
}, |
|||
{//16 |
|||
name: "timePeriod", |
|||
type: "RangePicker", |
|||
label: "时间段", |
|||
defaultTitle: ['支付时间', '至'] |
|||
// defaultValue: [moment().startOf("day"), moment()], |
|||
}, |
|||
{//17 |
|||
name: "timePeriod", |
|||
type: "RangePicker", |
|||
label: "时间段", |
|||
defaultTitle: ['订购时间', '至'] |
|||
// defaultValue: [moment().startOf("day"), moment()], |
|||
}, |
|||
{//18 |
|||
name: "timePeriod", |
|||
type: "RangePicker", |
|||
label: "时间段", |
|||
defaultTitle: ['预约到场时间', '至'] |
|||
// defaultValue: [moment().startOf("day"), moment()], |
|||
}, |
|||
{//19 |
|||
name: "plate", |
|||
type: "Input", |
|||
label: "车牌号", |
|||
placeholder: "请输入车牌号", |
|||
}, |
|||
{//20 |
|||
name: "order_id", |
|||
type: "Input", |
|||
label: "支付订单ID", |
|||
placeholder: "请输入支付订单ID", |
|||
}, |
|||
{//21 |
|||
name: "berth_id", |
|||
type: "Input", |
|||
label: "泊位号", |
|||
placeholder: "请输入泊位号", |
|||
}, |
|||
{//22 |
|||
name: "t", |
|||
type: "Select", |
|||
label: "所属商户", |
|||
placeholder: "请选择所属商户", |
|||
options: dictionary.MerchantName, |
|||
}, |
|||
{//23 |
|||
name: "t", |
|||
type: "Input", |
|||
label: "预付订单ID", |
|||
placeholder: "请输入订单ID", |
|||
}, |
|||
{//24 |
|||
name: "t", |
|||
type: "Input", |
|||
label: "停车记录ID", |
|||
placeholder: "停车记录ID", |
|||
}, |
|||
{//25 |
|||
name: "dealer", |
|||
type: "Input", |
|||
label: "操作人", |
|||
placeholder: "请输入操作人", |
|||
}, |
|||
{//26 |
|||
name: "t", |
|||
type: "Input", |
|||
label: "停车订单ID", |
|||
placeholder: "停车订单ID", |
|||
}, |
|||
{//27 |
|||
name: "t", |
|||
type: "Input", |
|||
label: "欠费区间", |
|||
placeholder: "", |
|||
}, |
|||
{//28 |
|||
name: "timePeriod", |
|||
type: "RangePicker", |
|||
label: "时间段", |
|||
defaultTitle: ['订单修改时间', '至'] |
|||
// defaultValue: [moment().startOf("day"), moment()], |
|||
}, |
|||
{//29 |
|||
name: "b", |
|||
type: "Select", |
|||
label: "修改原因", |
|||
placeholder: "请选择修改原因", |
|||
options: [ |
|||
{ |
|||
label: "全部", |
|||
value: 0, |
|||
}, |
|||
{ |
|||
label: "订单自动找平", |
|||
value: 1, |
|||
}, |
|||
{ |
|||
label: "异常订单处理", |
|||
value: 2, |
|||
}, |
|||
], |
|||
}, |
|||
]; |
|||
const [resultData, setResultData] = useState([]) |
|||
const [ycddData, setYcddData] = useState([])//异常订单数据 |
|||
const [detailVisible, setDetailVisible] = useState(false); |
|||
const [timesVisible, setTimesVisible] = useState(false); //退款尝试次数展开 |
|||
const [tkddVisible, setTkddVisible] = useState(false); |
|||
const [eaeVisible, setEaeVisible] = useState(false);//出入场图片 |
|||
const [bigpicVisible, setBigpicVisible] = useState(false);//大图展示 |
|||
const [bigPic, setBigPic] = useState(); |
|||
const [total, setTotal] = useState(0); |
|||
const [tabKey, setTabKey] = useState("1"); |
|||
function changeKey(key) { |
|||
setTabKey(key); |
|||
} |
|||
|
|||
//基本信息查询 |
|||
function search(e) { |
|||
// if (!e.type) { |
|||
// e.type = 1 |
|||
// } |
|||
ajax({ |
|||
url: "/api/ope/car/list", |
|||
type: "post", |
|||
data: { ...e }, |
|||
}).then((res) => { |
|||
let { status, data, total } = res |
|||
if (status == 20000) { |
|||
setResultData(data) |
|||
setTotal(total) |
|||
} else { |
|||
message.error(res.message) |
|||
} |
|||
}) |
|||
} |
|||
|
|||
//详情其他模块查询 |
|||
function searchOther(e) { |
|||
var url = '' |
|||
switch (tabKey) { |
|||
case "1": |
|||
url = ""// |
|||
break |
|||
case "2": |
|||
url = ""// |
|||
break |
|||
default: break |
|||
} |
|||
// if (tabKey == '3' && e && !e?.type) { |
|||
// e.type = 1 |
|||
// } |
|||
ajax({ |
|||
url: url, |
|||
type: "post", |
|||
data: { ...e, carId: carId }, |
|||
}).then((res) => { |
|||
let { status, data, total } = res |
|||
if (status == 20000) { |
|||
if (data.list) { |
|||
setResultData(data.list) |
|||
setTotal(data.total) |
|||
} else { |
|||
setResultData(data) |
|||
setTotal(total) |
|||
} |
|||
} else { |
|||
setResultData([]) |
|||
message.error(res.message) |
|||
} |
|||
}) |
|||
} |
|||
//停车记录信息渲染 |
|||
function renderParkRecord(params) { |
|||
return ( |
|||
<div className="ltc-box"> |
|||
<div className="ltc-box-title"><div className="text">停车场信息</div><div className="line"></div></div> |
|||
<div className="ltc-content"> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">停车场名称</div><div className="new-value">{params?.road || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">泊位号</div><div className="new-value">{params.berth_id || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">区域</div><div className="new-value">{params.region || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">商户</div><div className="new-value">{params.operator || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">车场类型</div><div className="new-value">{params.road_type || "--"}</div> |
|||
</div> |
|||
</div> |
|||
<div className="ltc-box-title"><div className="text">停车信息</div><div className="line"></div></div> |
|||
<div className="ltc-content"> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">车牌号</div><div className="new-value">{params.plate || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">会员手机号</div><div className="new-value">{params.phone || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">入场时间</div><div className="new-value">{params.in_time || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">出场时间</div><div className="new-value">{params.out_time || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">停车时长</div><div className="new-value">{params.admission_time || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">订单金额</div><div className="new-value">{params.order_amount || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">停车卡折扣</div><div className="new-value">{params.parking_card_discount || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">车场折扣</div><div className="new-value">{params.road_discount || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">应收金额</div><div className="new-value">{params.receivable_amount || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">优惠券</div><div className="new-value">{params.preferential_amount || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">优惠总计</div><div className="new-value">{params.preferential_total || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">实付金额</div><div className="new-value">{params.actual_amount || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">优惠退款</div><div className="new-value">{params.refund_discount || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">实付退款</div><div className="new-value">{params.actual_refund || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">退款总计</div><div className="new-value">{params.refund_total || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">入场收费员</div><div className="new-value">{params.in_person || "--"}</div> |
|||
</div> |
|||
<div className="ltc-item"> |
|||
<div className="new-item">出场收费员</div><div className="new-value">{params.out_person || "--"}</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
); |
|||
} |
|||
//其他页面渲染 |
|||
function renderTable(columns, arr, dataSource) { |
|||
return ( |
|||
<TableModule |
|||
columns={columns} |
|||
tableData={dataSource} |
|||
formSearch={arr} |
|||
total={total} |
|||
search={searchOther} |
|||
/> |
|||
); |
|||
} |
|||
useEffect(() => { |
|||
searchOther() |
|||
}, [tabKey]) |
|||
|
|||
|
|||
return ( |
|||
<> |
|||
{renderTable( |
|||
createCol(['车牌号', '车牌颜色', '手机号', '商品名称', '实付金额', '支付渠道', '支付设备', '购买渠道', '支付时间', '订单状态', '渠道流水号'], |
|||
['merchantName', '', 'area', '', 'sectionName', '', 'licensePlateNumber', 'entryTime', 'exitTime', '', 'arrearsAmount'], 1), |
|||
[ash[12]], |
|||
resultData |
|||
)} |
|||
<Modal |
|||
open={bigpicVisible} |
|||
width={1600} |
|||
title={'图片展示'} |
|||
className="eae-modal" |
|||
onCancel={() => { |
|||
setBigpicVisible(false); |
|||
}} |
|||
footer={false} |
|||
> |
|||
<div> |
|||
<div className="eae-modal-item"> |
|||
<img src={bigPic} width={1550} /> |
|||
</div> |
|||
</div> |
|||
</Modal> |
|||
<Modal |
|||
open={tkddVisible} |
|||
width={1500} |
|||
title={'订单详情'} |
|||
onCancel={() => { |
|||
setTkddVisible(false); |
|||
}} |
|||
footer={[ |
|||
<Button key="back" onClick={() => { |
|||
setTkddVisible(false); |
|||
}}> |
|||
关闭窗口 |
|||
</Button>]} |
|||
> |
|||
</Modal> |
|||
<Modal |
|||
open={eaeVisible} |
|||
width={1600} |
|||
title={'证据图像'} |
|||
className="eae-modal" |
|||
onCancel={() => { |
|||
setEaeVisible(false); |
|||
}} |
|||
footer={false} |
|||
> |
|||
<div> |
|||
<div className="eae-modal-title"><div className="ltc-icon"></div>入场图片</div> |
|||
<div className="eae-modal-item"> |
|||
<div>车辆照片</div> |
|||
<img src={ycddData.in_veh_pic} width={750} /> |
|||
</div> |
|||
<div className="eae-modal-item"> |
|||
<div>车牌照片</div> |
|||
<img src={ycddData.in_plate_pic} width={750} /> |
|||
</div> |
|||
</div> |
|||
</Modal> |
|||
</> |
|||
); |
|||
} |
|||
|
|||
export default SystemLog; |
Write
Preview
Loading…
Cancel
Save
Reference in new issue