Browse Source

feat(): 新建处理记录审核页面及修改接口字段等

tags/PMS_Frontend_v1.0.6-develop
陈宇航 1 year ago
parent
commit
e60ab44933
  1. 222
      src/components/ParkingRecordModal/RecordReviewModal.jsx
  2. 14
      src/components/ParkingRecordModal/VehicleInformation.jsx
  3. 9
      src/components/ParkingRecordModal/index.jsx
  4. 34
      src/components/ParkingRecordModal/index.scss
  5. 855
      src/pages/FinancialMgm/ExceptionDeal/DealRecordAudit/index.jsx
  6. 877
      src/pages/FinancialMgm/ExceptionDeal/DealRecordList/index.jsx
  7. 143
      src/pages/FinancialMgm/ExceptionDeal/StartExceptionDeal/index.jsx
  8. 46
      src/services/FinancialMgm/exceptionDeal.js

222
src/components/ParkingRecordModal/RecordReviewModal.jsx

@ -1,11 +1,8 @@
import React, { useState, useRef, useEffect } from "react";
import { Modal, Tabs, Table, message, Button, Input, Select, Timeline, DatePicker } from "antd";
import React, { useState, useEffect } from "react";
import { Modal, Table, message, Button, Input, Select, Timeline, DatePicker } from "antd";
import { RightOutlined, DownOutlined } from "@ant-design/icons";
import { dictionary, utils } from "@/config/common";
import VehicleInformation from "./VehicleInformation";
import { payRecordColumns, refundRecordColumns, operatorRecordColumns } from "./dataSource";
import moment from "moment";
import ajax from "@/services";
import "./index.scss";
const { TextArea } = Input;
const RecordReviewModal = (props) => {
@ -14,10 +11,22 @@ const RecordReviewModal = (props) => {
title = null, //
open = false,
data = [],
type = "", //
processViewData = {}, //
disabledModal = false, //
onCancel,
disabledAuditReason = false,
onCancel, //
onChangeSubmit, //
carOutTimeColor="", //
} = props;
//
const defaultData = {
deal_reason: "", //
examine_reason: "", //
examine_reason_id: 1, //
update_value: "", //
plate_type: 1, //
};
//
const changeProject = [
@ -69,26 +78,37 @@ const RecordReviewModal = (props) => {
align: "center",
},
{
title: "出场时间",
title: carOutTimeColor ? "计费时间" : "出场时间",
dataIndex: "strExitTime",
key: "strExitTime",
align: "center",
},
];
const [formData, setFormData] = useState(defaultData); //
const [modalVisible, setModalVisible] = useState(false); //
const [resultData, setResultData] = useState([]); //
const [expandedRowKeys, setExpandedRowKeys] = useState([0]); //
const [processView, setProcessView] = useState(false); //
const [getValueList, setGetValueList] = useState(1); //
const [adjustmentValue, setAdjustmentValue] = useState(1); //
//
const $onCancelModal = () => {
if (onCancel) onCancel(false);
setResultData([]);
setExpandedRowKeys([0]);
setFormData(defaultData);
setGetValueList(1);
setAdjustmentValue(1);
}
useEffect(() => {
setModalVisible(open)
setModalVisible(open);
if(!open) {
setFormData(defaultData);
setGetValueList(1);
setAdjustmentValue(1);
setProcessView(false);
};
}, [open]);
useEffect(() => {
@ -106,12 +126,26 @@ const RecordReviewModal = (props) => {
}
_data.push({
...value,
description: <VehicleInformation className="abnormal-order--table-content" data={value} type="2" />
description: <VehicleInformation className="abnormal-order--table-content" carOutTimeColor={carOutTimeColor} data={value} type="2" />
})
});
setResultData(_data);
if (data?.length && disabledModal) {
setFormData({
deal_reason: data[0]?.deal_reason || "",
examine_reason: disabledAuditReason ? data[0]?.examine_reason || "" : "",
examine_reason_id: data[0]?.examine_reason_id || 1,
update_value: data[0]?.update_value || "",
plate_type: data[0]?.plate_type || 1,
});
if (data[0]?.examine_reason_id == 1) {
if (Number(data[0]?.update_value || "")) {
setAdjustmentValue(2);
}
}
}
};
}, [data])
}, [data]);
return (
<Modal
className={`parking-record-modal ${className}`}
@ -139,7 +173,7 @@ const RecordReviewModal = (props) => {
)
}}
/>
{disabledModal ?
{disabledModal || type == "审核" ?
<div className="process-view">
<div className="item-title">流程查看 <span onClick={() => { setProcessView(!processView) }}>{processView ? "返回" : "查看全部"}</span></div>
<div className="item-content">
@ -205,9 +239,9 @@ const RecordReviewModal = (props) => {
</div>
</Timeline.Item>
</Timeline>
<div className="btn">
{/* <div className="btn">
<Button onClick={() => { setProcessView(false) }}>返回</Button>
</div>
</div> */}
</div>
:
<>
@ -218,9 +252,9 @@ const RecordReviewModal = (props) => {
maxLength={100}
// showCount
placeholder="请输入处理理由"
defaultValue={disabledModal ? resultData?.[0]?.deal_reason : null}
defaultValue={disabledModal ? formData?.deal_reason || "" : ""}
disabled={disabledModal}
onChange={(e) => { console.log(e.target.value); }}
onChange={(e) => { setFormData({ ...formData, deal_reason: e.target.value }) }}
/>
</div>
<div className="process-mode">
@ -230,9 +264,20 @@ const RecordReviewModal = (props) => {
<Select
style={{ width: 200 }}
placeholder="请选择更改项"
// value={submitDeploy.adviseType}
disabled={disabledModal}
value={formData?.examine_reason_id || ""}
options={changeProject}
onChange={(v) => { setGetValueList(v) }}
onChange={(v) => {
setGetValueList(v);
setFormData({
...formData,
examine_reason_id: v,
update_value: "",
plate_type: 1
});
setAdjustmentValue(1);
}}
/>
{getValueList === 1 ?
<>
@ -240,38 +285,133 @@ const RecordReviewModal = (props) => {
<Select
style={{ width: 200 }}
placeholder="请选择"
// value={submitDeploy.adjustTime}
value={adjustmentValue}
options={adjustment}
// onChange={handleAdjust}
disabled={disabledModal}
onChange={(v) => { setAdjustmentValue(v); setFormData({ ...formData, update_value: "" }) }}
/>
<label style={{ marginLeft: 30 }}>调整为</label>
<DatePicker
className="form-con"
showTime
format={"YYYY-MM-DD HH:mm:ss"}
// value={moment(formData.end_time)}
// onChange={(date, time) => {
// setFormData({ ...formData, end_time: time || null })
// }}
/>
</> : ''
{adjustmentValue == 1 ?
<DatePicker
className=""
disabled={disabledModal}
showTime
format={"YYYY-MM-DD HH:mm:ss"}
value={formData?.update_value ? moment(formData?.update_value) : null}
onChange={(date, time) => {
setFormData({ ...formData, update_value: time })
}}
/>
:
<>
<label>入场时间 +</label>
<Input
className="form-con"
placeholder="请输入数字"
disabled={disabledModal}
value={formData?.update_value}
allowClear
onChange={(e) => {
if (!/^[0-9]*$/.test(e.target.value)) return;
setFormData({ ...formData, update_value: e.target.value || "" })
}}
/>
<label> </label>
</>
}
</>
:
getValueList == 2 ?
<>
<label style={{ marginLeft: 30 }}>车牌号:</label>
<Select
style={{ width: 70 }}
placeholder="请选择"
disabled={disabledModal}
value={formData.plate_type}
options={sysConfig.plateColor}
onChange={(v) => {
setFormData({ ...formData, plate_type: v || "" })
}}
/>
<Input
placeholder="请输入车牌号"
disabled={disabledModal}
value={formData.update_value}
style={{ width: 150 }}
onChange={(v) => { setFormData({ ...formData, update_value: v?.target.value || "" }) }}
/>
</>
:
getValueList == 3 ?
<>
<label style={{ marginLeft: 30 }}>/:</label>
<Select
style={{ width: 70 }}
placeholder="请选择"
value={1}
disabled={true}
options={[
{
value: 1,
label: '减'
},
{
value: 2,
label: '增'
}
]}
onChange={() => { }}
/>
<label style={{ marginLeft: 30 }}><em>*</em>金额-</label>
<Input
placeholder="请输入金额"
disabled={disabledModal}
value={formData.update_value}
style={{ width: 150 }}
onChange={(v) => { setFormData({ ...formData, update_value: v?.target.value || "" }) }}
/>
</>
: null
}
</div>
<div className="text-area">
<span><em>*</em>审核理由</span>
<TextArea
maxLength={100}
// showCount
placeholder="请输入审核理由"
defaultValue={disabledModal ? resultData?.[0]?.examine_reason : null}
disabled={disabledModal}
onChange={(e) => { console.log(e.target.value); }}
/>
</div>
{type != "处理" ?
<div className="text-area">
<span><em>*</em>审核理由</span>
<TextArea
maxLength={100}
// showCount
placeholder="请输入审核理由"
defaultValue={disabledModal ? formData?.examine_reason || "" : ""}
disabled={disabledModal && disabledAuditReason}
onChange={(e) => { setFormData({ ...formData, examine_reason: e.target.value }) }}
/>
</div>
: null
}
</div>
</>
}
<div className="btn">
<div className="right">
{processView ?
<Button onClick={() => { setProcessView(false) }}>返回</Button>
: null
}
{type == "处理" ?
<Button type="primary" onClick={() => {if(onChangeSubmit)onChangeSubmit(formData)}}>提交审核</Button>
: null
}
{type== "审核" && !processView ?
<>
<Button type="primary" onClick={() => {if(onChangeSubmit)onChangeSubmit({...formData, deal_type: 1})}}>提交审核</Button>
<Button type="primary" onClick={() => {if(onChangeSubmit)onChangeSubmit({...formData, deal_type: 2})}}>退回审核</Button>
</>
: null
}
<Button onClick={$onCancelModal}>关闭窗口</Button>
</div>
</div>
</Modal>
);
}

14
src/components/ParkingRecordModal/VehicleInformation.jsx

@ -9,7 +9,9 @@ const VehicleInformation = (props) => {
className = "",
data = {},
type = "1", // "1": "2":
} = props
carOutTimeColor = "", //
} = props;
const [carImgPreview, setCarImgPreview] = useState(true); //
const [plateImgPreview, setPlateImgPreview] = useState(true); //
const [viewInCar, setViewInCar] = useState(true); //
@ -61,7 +63,7 @@ const VehicleInformation = (props) => {
<div className="item"><span>车牌号</span><span title={data?.plateNumber || "--"}>{data?.plateNumber || "--"}</span></div>
<div className="item"><span>停车时长</span><span title={data?.parkTime || "--"}>{data?.parkTime || "--"}</span></div>
<div className="item"><span>入场时间</span><span title={data?.strEntryTime || "--"}>{data?.strEntryTime || "--"}</span></div>
<div className="item"><span>出场时间</span><span title={data?.strExitTime || "--"}>{data?.strExitTime || "--"}</span></div>
<div className="item"><span>出场时间</span><span className={carOutTimeColor} title={data?.strExitTime || "--"}>{data?.strExitTime || "--"}</span></div>
<div className="item"><span>入场记录来源</span><span title={data?.entryDataSourceName || "--"}>{data?.entryDataSourceName || "--"}</span></div>
<div className="item"><span>出场记录来源</span><span title={data?.exitDataSourceName || "--"}>{data?.exitDataSourceName || "--"}</span></div>
<div className="item"><span>出入场图像</span><span className="link-click" onClick={() => {setImgModal(true)}}>查看</span></div>
@ -73,10 +75,10 @@ const VehicleInformation = (props) => {
<div className="car">
<div className="title"><span>订单详情</span><span className="line"></span></div>
<div className="content">
<div className="item"><span>订单金额</span><span title={data?.shouldPayMoney || "--"}>{data?.shouldPayMoney || "--"}</span></div>
<div className="item"><span>优惠总计</span><span title={data?.totalCoupon || "--"}>{data?.totalCoupon || "--"}</span></div>
<div className="item"><span>实付总计</span><span title={data?.totalPreMoney || "--"}>{data?.totalPreMoney || "--"}</span></div>
<div className="item"><span>欠费总计</span><span title={data?.sumActualPay || "--"}>{data?.sumActualPay || "--"}</span></div>
<div className="item"><span>订单金额</span><span title={data?.shouldPayMoney || "--"}><strike>{data?.shouldPayMoneyOld || ""} </strike>&nbsp;&nbsp; {data?.shouldPayMoney || "--"} </span></div>
<div className="item"><span>优惠总计</span><span title={data?.totalCoupon || "--"}>{data?.totalCoupon || "--"} </span></div>
<div className="item"><span>实付总计</span><span title={data?.totalPreMoney || "--"}><strike>{data?.totalPreMoneyOld || ""} </strike>&nbsp;&nbsp; {data?.totalPreMoney || "--"} </span></div>
<div className="item"><span>欠费总计</span><span title={data?.sumActualPay || "--"}>{data?.sumActualPay || "--"} </span></div>
</div>
</div>
: null

9
src/components/ParkingRecordModal/index.jsx

@ -28,7 +28,7 @@ const ParkingRecordModal = (props) => {
const [loading, setLoading] = useState(false); //
const [payRecord, setPayRecord] = useState([]); //
const [recordReviewModal, setRecordReviewModal] = useState({open: false, data: []}); //
const [processViewData, setProcessViewData] = useState([]); //
const [processViewData, setProcessViewData] = useState({}); //
//
const historyProgressColumns = [
@ -124,9 +124,9 @@ const ParkingRecordModal = (props) => {
return (
<Button
type="primary"
onClick={() => {$historyOperation(record?.deal_record_id)}}
onClick={() => {$historyOperation([record?.deal_record_id])}}
>
操作
查看
</Button>
);
},
@ -188,7 +188,7 @@ const ParkingRecordModal = (props) => {
ajax.getStartExceptionParkingRecordsInfo({id}).then((res) => {
if (res.status === 20000 || res.status == 0) {
setRecordReviewModal({open: true, data: res?.data || []});
$processView(id);
$processView(id.join(","));
} else {
message.error(res.message);
}
@ -269,6 +269,7 @@ const ParkingRecordModal = (props) => {
{...recordReviewModal}
processViewData={processViewData}
disabledModal={true}
disabledAuditReason={true}
onCancel={() => {setRecordReviewModal({open: false, data: []})}}
/>
</>

34
src/components/ParkingRecordModal/index.scss

@ -252,15 +252,6 @@
.ant-timeline-item-pending {
display: none;
}
.btn {
position: relative;
height: 42px;
margin-top: 20px;
.ant-btn {
position: absolute;
right: 10px;
}
}
}
.order-text,
.process-mode {
@ -291,6 +282,28 @@
}
}
}
.ant-picker {
background: transparent;
}
.form-con {
width: 110px;
}
.ant-input {
background-color: transparent;
border-color: #666d7d;
}
.btn {
position: relative;
height: 32px;
margin-top: 20px;
.right {
position: absolute;
right: 10px;
.ant-btn {
margin-left: 10px;
}
}
}
}
.vehicle-information-modal {
.park,
@ -384,6 +397,9 @@
margin-left: 50px;
}
}
.car-out-time-color {
color: #177ddc;
}
}
.abnormal-order--table-content {
padding: 0 50px;

855
src/pages/FinancialMgm/ExceptionDeal/DealRecordAudit/index.jsx

@ -1,453 +1,450 @@
import React, { useState, useRef, useEffect } from "react";
import { message, Pagination, Table, Select, Input, Cascader, DatePicker, Button, Popover } from "antd";
import { dictionary, utils } from "@/config/common";
import { message, Pagination, Table, Select, Input, DatePicker, Button } from "antd";
import { dictionary } from "@/config/common";
import moment from "moment";
import { useSessionStorageState, useUpdateEffect } from "ahooks";
import { useSessionStorageState } from "ahooks";
import ajax from "@/services";
import { QuickMenu, ParkingRecordModal } from "@/components";
import { QuickMenu } from "@/components";
import RecordReviewModal from "@/components/ParkingRecordModal/RecordReviewModal";
import "./index.scss";
import errorImg from "@/assets/images/layout/error.png";
import { useLocation } from "react-router-dom";
function DealRecordAudit() {
//
const defaultData = {
park_id: "", // ID
operator: 0, //
region: [0], //
road: "", //
road_type: 0, //
plate: "", //
type: 1, // 1: 2:
start_time: moment().subtract(7, "days").startOf("day").format("YYYY-MM-DD HH:mm:ss"), //
end_time: moment().format("YYYY-MM-DD HH:mm:ss"), //
pn: 1,
page_size: dictionary?.pageSizeOptions1[0]
};
//
const defaultData = {
deal_record_id: "", // ID
business_type: 0, //
park_id: "", // ID
start_time: moment().subtract(7, "days").startOf("day").format("YYYY-MM-DD HH:mm:ss"), //
end_time: moment().format("YYYY-MM-DD HH:mm:ss"), //
pn: 1,
page_size: dictionary?.pageSizeOptions1[0]
};
const [formData, setFormData] = useState(defaultData); //
const [operatorList, setOperatorList] = useState([{ value: 0, label: "全部" }]); //
const [areaList, setAreaList] = useState([]); //
const [loading, setLoading] = useState(false); //
const [tableSelectCheck, setTableSelectCheck] = useState([]); // id
const [parkingRecordModal, setParkingRecordModal] = useState({ open: false, tableData: {} }); //
const [formData, setFormData] = useState(defaultData); //
const [sessionData, setSessionData] = useSessionStorageState("dealRecordAudit", {value: {}}); // session
const [loading, setLoading] = useState(false); //
const [recordReviewModal, setRecordReviewModal] = useState({open: false, data: []}); //
const [processViewData, setProcessViewData] = useState({}); //
const [auditSubmitId, setAuditSubmitId] = useState(""); // 退id
//
const [resultData, setResultData] = useState({
total: 0,
list: [],
});
//
const [resultData, setResultData] = useState({
total: 0,
list: [],
});
//
const tableColumns = [
{
title: "序号",
width: 60,
align: "center",
fixed: 'left',
render: (text, record, index) => index + 1,
},
{
title: "处理记录ID",
dataIndex: "deal_record_id",
key: "deal_record_id",
width: 200,
align: "center",
fixed: 'left',
render: (text) => (
<>
<a onClick={() => {
navigator.clipboard.writeText(`${text}`).then(() => { message.success("已复制到剪切板") });
}}>{text}</a>
</>
),
},
{
title: "处理时间",
dataIndex: "deal_time",
key: "deal_time",
align: "center",
width: 150,
},
{
title: "处理人",
dataIndex: "dealer",
key: "dealer",
align: "center",
width: 150,
},
{
title: "业务订单类型",
dataIndex: "business_type",
key: "business_type",
align: "center",
width: 150,
},
{
title: "业务订单ID",
dataIndex: "park_id",
key: "park_id",
align: "center",
width: 150,
},
{
title: "更改项",
dataIndex: "change_content",
key: "change_content",
align: "center",
width: 150,
render: (text, record, index) => {
let content = ''
switch (text) {
case 1:
content = "调整出场时间"
break;
case 2:
content = "变更车牌号"
break;
case 3:
content = "更改订单金额"
break;
case 4:
content = "免费该订单"
break;
case 5:
content = "作废该订单"
break;
default:
break;
}
return <>{content}</>
},
},
{
title: "更改项初始值",
dataIndex: "initial_value",
key: "initial_value",
align: "center",
width: 150,
},
{
title: "更改项更新值",
dataIndex: "update_value",
key: "update_value",
align: "center",
width: 150,
},
{
title: "状态",
dataIndex: "status",
key: "status",
align: "center",
width: 150,
render: (text, record, index) => {
let content = '--'
switch (text) {
case 1:
content = "待审核"
break;
case 2:
content = "已完成"
break;
case 3:
content = "已驳回"
break;
default:
break;
}
return <>{content}</>
},
},
{
title: '操作',
key: 'operation',
dataIndex: 'operation',
align: "center",
fixed: 'right',
width: 100,
render: (text, record, index) => {
return <>
<Popover
overlayClassName="start-exception-deal-operate"
content={
<div className="operateBtn operate-btn" style={{ cursor: "pointer" }} trigger="hover">
<div className="hover" onClick={() => { setParkingRecordModal({ open: true, tableData: record || {} }) }}>查看</div>
{record?.status_now == 2 ?
<div className="disabled">处理中</div> :
<div className="hover" onClick={() => { console.log("处理"); }}>处理</div>
}
</div>
}
>
<Button type="primary">操作</Button>
</Popover>
</>
},
},
];
//
const tableColumns = [
{
title: "序号",
width: 60,
align: "center",
fixed: 'left',
render: (text, record, index) => index + 1,
},
{
title: "处理记录ID",
dataIndex: "deal_record_id",
key: "deal_record_id",
width: 200,
align: "center",
fixed: 'left',
render: (text) => (
<>
<a onClick={() => {
navigator.clipboard.writeText(`${text}`).then(() => { message.success("已复制到剪切板") });
}}>{text}</a>
</>
),
},
{
title: "处理时间",
dataIndex: "deal_time",
key: "deal_time",
align: "center",
width: 200,
},
{
title: "处理人",
dataIndex: "dealer",
key: "dealer",
align: "center",
width: 150,
},
{
title: "业务订单类型",
dataIndex: "business_type",
key: "business_type",
align: "center",
width: 120,
},
{
title: "业务订单ID",
dataIndex: "park_id",
key: "park_id",
align: "center",
width: 200,
render: (text) => (
<>
<a onClick={() => {
navigator.clipboard.writeText(`${text}`).then(() => { message.success("已复制到剪切板") });
}}>{text}</a>
</>
),
},
{
title: "更改项",
dataIndex: "change_content",
key: "change_content",
align: "center",
width: 150,
// render: (text, record, index) => {
// let content = ''
// switch (text) {
// case 1:
// content = ""
// break;
// case 2:
// content = ""
// break;
// case 3:
// content = ""
// break;
// case 4:
// content = ""
// break;
// case 5:
// content = ""
// break;
// default:
// break;
// }
// return <>{content}</>
// },
},
{
title: "更改项初始值",
dataIndex: "initial_value",
key: "initial_value",
align: "center",
width: 150,
},
{
title: "更改项更新值",
dataIndex: "update_value",
key: "update_value",
align: "center",
width: 150,
},
{
title: "状态",
dataIndex: "status",
key: "status",
align: "center",
width: 150,
render: (text, record, index) => {
let content = '--'
switch (text) {
case "1":
content = "待审核"
break;
case "2":
content = "已完成"
break;
case "3":
content = "已驳回"
break;
default:
break;
}
return <>{content}</>
},
},
{
title: '操作',
key: 'operation',
dataIndex: 'operation',
align: "center",
fixed: 'right',
width: 100,
render: (text, record, index) => {
return <>
<Button type="primary" onClick={() => {$dispose(record?.park_id)}}>审核</Button>
</>
},
},
];
//
const $batchProcessing = () => {
if (!tableSelectCheck?.length) return message.error("请选择需要处理的数据!");
console.log(tableSelectCheck);
//
const $changePn = (pn, page_size) => {
let temFormData = {};
if (formData.page_size == page_size) {
temFormData = {
...formData,
pn
};
} else {
temFormData = {
...formData,
pn: 1,
page_size,
};
};
setFormData(temFormData);
$getTableList(temFormData);
};
//
const $changePn = (pn, page_size) => {
let temFormData = {};
if (formData.page_size == page_size) {
temFormData = {
...formData,
pn
};
//
const $dispose = (id) => {
if(!id) return message.error("获取业务订单ID失败,请重新选择!");
ajax.getDealRecordActionListView({id}).then((res) => {
if (res.status === 20000 || res.status == 0) {
setRecordReviewModal({open: true, data: res?.data || []});
$processView(id);
setAuditSubmitId(id);
} else {
message.error(res.message);
}
}).catch((error) => {
message.error(error.message);
});
};
//
const $processView = (deal_record_id) => {
if(deal_record_id) {
ajax.getStartExceptionProcessView({deal_record_id}).then((res) => {
if (res.status === 20000 || res.status == 0) {
setProcessViewData(res?.data || []);
} else {
temFormData = {
...formData,
pn: 1,
page_size,
};
};
setFormData(temFormData);
$getTableList(temFormData);
};
message.error(res.message);
}
}).catch((error) => {
message.error(error.message);
});
}
};
//
const $getAllOperator = () => {
ajax
.getAllOperator()
.then((res) => {
if (res.status === 20000 || res.status == 0) {
setOperatorList(res.data || { value: 0, label: "全部" });
} else {
message.error(res.message);
}
})
.catch((error) => {
message.error(error.message);
});
// 退
const $auditSubmit = (value) => {
if(!value?.examine_reason) return message.error("处理理由不能为空!");
let _data = {
...value,
id: auditSubmitId
};
ajax.getStartExceptionExamineAbnormal(_data).then((res) => {
if (res.status == 20000 || res.status == 0) {
message.success(res?.message || "提交审核成功");
setRecordReviewModal({open: false, data: []})
} else {
console.log(123);
message.error(res.message);
}
}).catch((error) => {
console.log(456);
message.error(error.message);
});
};
//
const $getAreaList = () => {
ajax
.getAreaTree()
.then((res) => {
if (res.status === 20000 || res.status == 0) {
setAreaList(
res.data || [{ name: "全部", id: 0, level: 1, children: [] }]
);
} else {
message.error(res.message);
}
})
.catch((error) => {
message.error(error.message);
});
//
const $getTableList = (value = {}) => {
let _data = {
...formData,
...value
};
setLoading(true);
ajax.getDealRecordListTableData(_data).then((res) => {
setLoading(false);
if (res.status === 20000 || res.status == 0) {
setResultData(res?.data || {});
} else {
message.error(res.message);
}
}).catch((error) => {
setLoading(false);
message.error(error.message);
});
};
//
const $getTableList = (value = {}) => {
setTableSelectCheck([]); //
let _data = {
...formData,
...value
};
setLoading(true);
ajax.getDealRecordListTableData(_data).then((res) => {
setLoading(false);
if (res.status === 20000 || res.status == 0) {
setResultData(res?.data || {});
} else {
message.error(res.message);
}
}).catch((error) => {
setLoading(false);
message.error(error.message);
});
useEffect(() => {
let _data = {};
if(sessionData && Object.values(sessionData).length > 0) {
_data = {
deal_record_id: sessionData?.deal_record_id || "", // ID
business_type: sessionData?.business_type || [], //
park_id: sessionData?.park_id || [], // ID
start_time: sessionData?.start_time || "",
end_time: sessionData?.end_time || "",
pn: 1,
page_size: dictionary?.pageSizeOptions1[0],
};
setFormData({..._data});
};
$getTableList(_data);
}, []);
useEffect(() => {
$getAllOperator();
$getAreaList();
$getTableList();
}, []);
return (
<div className="start-exception-deal">
<div className="paid-search">
<div className="title">查询条件</div>
<div className="form-Wrap">
<div className="yisa-search">
<label>处理记录ID</label>
<Input
className="form-con"
placeholder="请输入处理记录ID"
value={formData?.deal_record_id}
allowClear
onChange={(e) =>
setFormData({ ...formData, deal_record_id: e.target.value || "" })
}
/>
</div>
<div className="yisa-search">
<label>业务订单类型</label>
<Select
className="form-con"
placeholder="请选择"
options={[
{
label: "全部",
value: -1,
},
]}
value={formData.business_type}
onChange={(v) => setFormData({ ...formData, business_type: v })}
/>
</div>
<div className="yisa-search">
<label>业务订单ID</label>
<Input
className="form-con"
placeholder="请输入业务订单ID"
value={formData?.park_id}
allowClear
onChange={(e) =>
setFormData({ ...formData, park_id: e.target.value || "" })
}
/>
</div>
<div className="yisa-search">
<label>时间段</label>
<DatePicker
className="form-con"
showTime
format={"YYYY-MM-DD HH:mm:ss"}
value={moment(formData.start_time)}
disabledDate={(current) => current > moment(formData.end_time)}
onChange={(date, time) => {
setFormData({ ...formData, start_time: time || null })
}}
/>
</div>
<div className="yisa-search" style={{ marginBottom: "0" }}>
<label></label>
<DatePicker
className="form-con"
showTime
format={"YYYY-MM-DD HH:mm:ss"}
value={moment(formData.end_time)}
disabledDate={(current) => current < moment(formData.start_time)}
onChange={(date, time) => {
setFormData({ ...formData, end_time: time || null })
}}
/>
</div>
<div className="yisa-search">
<label></label>
<QuickMenu
dropdownData={[
{ text: '昨日', value: 1 },
{ text: '近30天', value: 30 },
{ text: '近90天', value: 90 },
{ text: '近180天', value: 180 }
]}
onChange={(v) => {
let plate = formData?.plateNumber || "";
let value = v?.value || 0;
if (plate) {
console.log(utils?.validationPlate(plate))
if (utils?.validationPlate(plate)) {
setFormData({
...formData,
end_time: v?.endDateTime || null,
start_time: v?.startDateTime || null,
})
} else {
message.error('请正确输入车牌号')
return
}
} else {
if (value > 30) return message.warning("请输入您查询的车牌号!");
}
setFormData({
...formData,
end_time: v?.endDateTime || null,
start_time: v?.startDateTime || null,
})
}}
/>
</div>
<div className="form-btn">
<Button
className="reset"
onClick={() => setFormData({ ...defaultData, pn: formData?.pn || 1, page_size: formData?.page_size || dictionary?.pageSizeOptions1[0] })}
>
重置
</Button>
<Button
className="submit"
type="primary"
onClick={() => {
let _data = {
...formData,
pn: 1,
page_size: dictionary?.pageSizeOptions1[0]
}
setFormData(_data)
$getTableList(_data)
}}
loading={loading}
>
查询
</Button>
</div>
</div>
</div>
<div className="paid-result">
<div className="result">
<div className="row-head">
<span className="number-wrapper"></span>
</div>
<div className="result-data">
<Table
rowKey={(row) => row.park_id}
className="table"
dataSource={resultData?.list || []}
columns={tableColumns}
pagination={false}
loading={loading}
// rowSelection={{
// selectedRowKeys: tableSelectCheck,
// onChange: (selectedRowKeys, selectedRows) => {
// console.log(selectedRowKeys, selectedRows);
// setTableSelectCheck(selectedRowKeys)
// },
// getCheckboxProps: (record) => ({
// disabled: record?.status_now == 2
// })
// }}
scroll={{ x: "1500", y: "calc(100vh - 310px)" }}
/>
<Pagination
className="pagination-common"
showSizeChanger={true}
showQuickJumper={true}
showTotal={() => `${resultData.total || 0}`}
total={resultData.total}
current={formData.pn}
pageSize={formData.page_size}
pageSizeOptions={dictionary?.pageSizeOptions1}
onChange={$changePn}
/>
</div>
</div>
</div>
<ParkingRecordModal
title={parkingRecordModal?.tableData?.road || null}
{...parkingRecordModal}
onCancel={() => { setParkingRecordModal({ open: false, tableData: {} }) }}
useEffect(() => {
setSessionData(formData);
}, [formData]);
return (
<div className="start-exception-deal">
<div className="paid-search">
<div className="title">查询条件</div>
<div className="form-Wrap">
<div className="yisa-search">
<label>处理记录ID</label>
<Input
className="form-con"
placeholder="请输入处理记录ID"
value={formData?.deal_record_id}
allowClear
onChange={(e) =>
setFormData({ ...formData, deal_record_id: e.target.value || "" })
}
/>
</div>
<div className="yisa-search">
<label>业务订单类型</label>
<Select
className="form-con"
placeholder="请选择"
options={[
{label: "全部",value: 0},
{label: "停车订单",value: 1}
]}
value={formData.business_type}
onChange={(v) => setFormData({ ...formData, business_type: v })}
/>
</div>
<div className="yisa-search">
<label>业务订单ID</label>
<Input
className="form-con"
placeholder="请输入业务订单ID"
value={formData?.park_id}
allowClear
onChange={(e) =>
setFormData({ ...formData, park_id: e.target.value || "" })
}
/>
</div>
<div className="yisa-search">
<label>时间段</label>
<DatePicker
className="form-con"
showTime
format={"YYYY-MM-DD HH:mm:ss"}
value={moment(formData.start_time)}
disabledDate={(current) => current > moment(formData.end_time)}
onChange={(date, time) => {
setFormData({ ...formData, start_time: time || null })
}}
/>
</div>
<div className="yisa-search" style={{ marginBottom: "0" }}>
<label></label>
<DatePicker
className="form-con"
showTime
format={"YYYY-MM-DD HH:mm:ss"}
value={moment(formData.end_time)}
disabledDate={(current) => current < moment(formData.start_time)}
onChange={(date, time) => {
setFormData({ ...formData, end_time: time || null })
}}
/>
</div>
<div className="yisa-search">
<label></label>
<QuickMenu
dropdownData={[
{ text: '昨日', value: 1 },
{ text: '近30天', value: 30 },
{ text: '近90天', value: 90 },
{ text: '近180天', value: 180 }
]}
onChange={(v) => {
setFormData({
...formData,
end_time: v?.endDateTime || null,
start_time: v?.startDateTime || null,
})
}}
/>
</div>
<div className="form-btn">
<Button
className="reset"
onClick={() => {
setFormData({
...defaultData,
pn: formData?.pn || 1,
page_size: formData?.page_size || dictionary?.pageSizeOptions1[0]
})}
}
>
重置
</Button>
<Button
className="submit"
type="primary"
onClick={() => {
let _data = {
...formData,
pn: 1,
page_size: dictionary?.pageSizeOptions1[0]
}
setFormData(_data)
$getTableList(_data)
}}
loading={loading}
>
查询
</Button>
</div>
</div>
</div>
<div className="paid-result">
<div className="result">
<div className="row-head">
<span className="number-wrapper"></span>
</div>
<div className="result-data">
<Table
rowKey={(row) => row.park_id}
className="table"
dataSource={resultData?.list || []}
columns={tableColumns}
pagination={false}
loading={loading}
scroll={{ x: "1500", y: "calc(100vh - 310px)" }}
/>
<Pagination
className="pagination-common"
showSizeChanger={true}
showQuickJumper={true}
showTotal={() => `${resultData.total || 0}`}
total={resultData.total}
current={formData.pn}
pageSize={formData.page_size}
pageSizeOptions={dictionary?.pageSizeOptions1}
onChange={$changePn}
/>
</div>
</div>
);
</div>
<RecordReviewModal
title="异常订单处理记录审核"
{...recordReviewModal}
type="审核"
disabledModal={true}
disabledAuditReason = {false}
processViewData={processViewData}
onCancel={() => {setRecordReviewModal({open: false, data: []})}}
onChangeSubmit={$auditSubmit}
/>
</div>
);
}
export default DealRecordAudit;

877
src/pages/FinancialMgm/ExceptionDeal/DealRecordList/index.jsx

@ -1,456 +1,471 @@
import React, { useState, useRef, useEffect } from "react";
import { message, Pagination, Table, Select, Input, Cascader, DatePicker, Button, Popover } from "antd";
import { message, Pagination, Table, Select, Input, DatePicker, Button, Popover } from "antd";
import { dictionary, utils } from "@/config/common";
import moment from "moment";
import { useSessionStorageState, useUpdateEffect } from "ahooks";
import { useSessionStorageState } from "ahooks";
import ajax from "@/services";
import { QuickMenu, ParkingRecordModal } from "@/components";
import { QuickMenu } from "@/components";
import RecordReviewModal from "@/components/ParkingRecordModal/RecordReviewModal";
import "./index.scss";
import errorImg from "@/assets/images/layout/error.png";
import { useLocation } from "react-router-dom";
function DealRecordList() {
//
const defaultData = {
park_id: "", // ID
operator: 0, //
region: [0], //
road: "", //
road_type: 0, //
plate: "", //
type: 1, // 1: 2:
start_time: moment().subtract(7, "days").startOf("day").format("YYYY-MM-DD HH:mm:ss"), //
end_time: moment().format("YYYY-MM-DD HH:mm:ss"), //
pn: 1,
page_size: dictionary?.pageSizeOptions1[0]
};
//
const defaultData = {
deal_record_id: "", // ID
business_type: 0, //
park_id: "", // ID
status: 0, //
start_time: moment().subtract(7, "days").startOf("day").format("YYYY-MM-DD HH:mm:ss"), //
end_time: moment().format("YYYY-MM-DD HH:mm:ss"), //
pn: 1,
page_size: dictionary?.pageSizeOptions1[0]
};
const [formData, setFormData] = useState(defaultData); //
const [operatorList, setOperatorList] = useState([{ value: 0, label: "全部" }]); //
const [areaList, setAreaList] = useState([]); //
const [loading, setLoading] = useState(false); //
const [tableSelectCheck, setTableSelectCheck] = useState([]); // id
const [parkingRecordModal, setParkingRecordModal] = useState({ open: false, tableData: {} }); //
const [formData, setFormData] = useState(defaultData); //
const [sessionData, setSessionData] = useSessionStorageState("dealRecordAudit", {value: {}}); // session
const [loading, setLoading] = useState(false); //
const [recordReviewModal, setRecordReviewModal] = useState({open: false, data: []}); //
const [processViewData, setProcessViewData] = useState({}); //
//
const [resultData, setResultData] = useState({
total: 0,
list: [],
});
//
const [resultData, setResultData] = useState({
total: 0,
list: [],
});
//
const tableColumns = [
{
title: "序号",
width: 60,
align: "center",
fixed: 'left',
render: (text, record, index) => index + 1,
},
{
title: "处理记录ID",
dataIndex: "deal_record_id",
key: "deal_record_id",
width: 200,
align: "center",
fixed: 'left',
render: (text) => (
<>
<a onClick={() => {
navigator.clipboard.writeText(`${text}`).then(() => { message.success("已复制到剪切板") });
}}>{text}</a>
</>
),
},
{
title: "发起时间",
dataIndex: "deal_time",
key: "deal_time",
align: "center",
width: 150,
},
{
title: "处理人",
dataIndex: "dealer",
key: "dealer",
align: "center",
width: 150,
},
{
title: "业务订单类型",
dataIndex: "business_type",
key: "business_type",
align: "center",
width: 150,
},
{
title: "业务订单ID",
dataIndex: "park_id",
key: "park_id",
align: "center",
width: 150,
},
{
title: "更改项",
dataIndex: "change_content",
key: "change_content",
align: "center",
width: 150,
render: (text, record, index) => {
let content = ''
switch (text) {
case 1:
content = "调整出场时间"
break;
case 2:
content = "变更车牌号"
break;
case 3:
content = "更改订单金额"
break;
case 4:
content = "免费该订单"
break;
case 5:
content = "作废该订单"
break;
default:
break;
}
return <>{content}</>
},
},
{
title: "更改项初始值",
dataIndex: "initial_value",
key: "initial_value",
align: "center",
width: 150,
},
{
title: "更改项更新值",
dataIndex: "update_value",
key: "update_value",
align: "center",
width: 150,
},
{
title: '操作',
key: 'operation',
dataIndex: 'operation',
align: "center",
fixed: 'right',
width: 100,
render: (text, record, index) => {
return <>
<Popover
overlayClassName="start-exception-deal-operate"
content={
<div className="operateBtn operate-btn" style={{ cursor: "pointer" }} trigger="hover">
<div className="hover" onClick={() => { setParkingRecordModal({ open: true, tableData: record || {} }) }}>查看</div>
{record?.status_now == 2 ?
<div className="disabled">处理中</div> :
<div className="hover" onClick={() => { console.log("处理"); }}>处理</div>
}
</div>
}
>
<Button type="primary">操作</Button>
</Popover>
</>
},
},
];
//
const tableColumns = [
{
title: "序号",
width: 60,
align: "center",
fixed: 'left',
render: (text, record, index) => index + 1,
},
{
title: "处理记录ID",
dataIndex: "deal_record_id",
key: "deal_record_id",
width: 200,
align: "center",
fixed: 'left',
render: (text) => (
<>
<a onClick={() => {
navigator.clipboard.writeText(`${text}`).then(() => { message.success("已复制到剪切板") });
}}>{text}</a>
</>
),
},
{
title: "发起时间",
dataIndex: "deal_time",
key: "deal_time",
align: "center",
width: 200,
},
{
title: "处理人",
dataIndex: "dealer",
key: "dealer",
align: "center",
width: 150,
},
{
title: "业务订单类型",
dataIndex: "business_type",
key: "business_type",
align: "center",
width: 120,
},
{
title: "业务订单ID",
dataIndex: "park_id",
key: "park_id",
align: "center",
width: 200,
render: (text) => (
<>
<a onClick={() => {
navigator.clipboard.writeText(`${text}`).then(() => { message.success("已复制到剪切板") });
}}>{text}</a>
</>
),
},
{
title: "更改项",
dataIndex: "change_content",
key: "change_content",
align: "center",
width: 150,
// render: (text, record, index) => {
// let content = ''
// switch (text) {
// case 1:
// content = ""
// break;
// case 2:
// content = ""
// break;
// case 3:
// content = ""
// break;
// case 4:
// content = ""
// break;
// case 5:
// content = ""
// break;
// default:
// break;
// }
// return <>{content}</>
// },
},
{
title: "更改项初始值",
dataIndex: "initial_value",
key: "initial_value",
align: "center",
width: 150,
},
{
title: "更改项更新值",
dataIndex: "update_value",
key: "update_value",
align: "center",
width: 150,
},
{
title: "状态",
dataIndex: "status",
key: "status",
align: "center",
width: 150,
render: (text, record, index) => {
let content = '--'
switch (text) {
case "1":
content = "待审核"
break;
case "2":
content = "已完成"
break;
case "3":
content = "已驳回"
break;
default:
break;
}
return <>{content}</>
},
},
{
title: '操作',
key: 'operation',
dataIndex: 'operation',
align: "center",
fixed: 'right',
width: 100,
render: (text, record, index) => {
return <>
<Button type="primary" onClick={() => {$dispose(record?.park_id)}}>查看</Button>
</>
},
},
];
//
const $batchProcessing = () => {
if (!tableSelectCheck?.length) return message.error("请选择需要处理的数据!");
console.log(tableSelectCheck);
//
const $changePn = (pn, page_size) => {
let temFormData = {};
if (formData.page_size == page_size) {
temFormData = {
...formData,
pn
};
} else {
temFormData = {
...formData,
pn: 1,
page_size,
};
};
setFormData(temFormData);
$getTableList(temFormData);
};
//
const $dispose = (id) => {
if(!id) return message.error("获取业务订单ID失败,请重新选择!");
ajax.getDealRecordListActionView({id}).then((res) => {
if (res.status == 20000 || res.status == 0) {
setRecordReviewModal({open: true, data: res?.data || []});
$processView(id);
} else {
message.error(res.message);
}
}).catch((error) => {
message.error(error.message);
});
};
//
const $changePn = (pn, page_size) => {
let temFormData = {};
if (formData.page_size == page_size) {
temFormData = {
...formData,
pn
};
//
const $processView = (deal_record_id) => {
if(deal_record_id) {
ajax.getStartExceptionProcessView({deal_record_id}).then((res) => {
if (res.status === 20000 || res.status == 0) {
setProcessViewData(res?.data || []);
} else {
temFormData = {
...formData,
pn: 1,
page_size,
};
};
setFormData(temFormData);
$getTableList(temFormData);
};
message.error(res.message);
}
}).catch((error) => {
message.error(error.message);
});
}
};
//
const $getAllOperator = () => {
ajax
.getAllOperator()
.then((res) => {
if (res.status === 20000 || res.status == 0) {
setOperatorList(res.data || { value: 0, label: "全部" });
} else {
message.error(res.message);
}
})
.catch((error) => {
message.error(error.message);
});
//
const $getTableList = (value = {}) => {
let _data = {
...formData,
...value
};
setLoading(true);
ajax.getDealRecordListTableData(_data).then((res) => {
setLoading(false);
if (res.status === 20000 || res.status == 0) {
setResultData(res?.data || {});
} else {
message.error(res.message);
}
}).catch((error) => {
setLoading(false);
message.error(error.message);
});
};
//
const $getAreaList = () => {
ajax
.getAreaTree()
.then((res) => {
if (res.status === 20000 || res.status == 0) {
setAreaList(
res.data || [{ name: "全部", id: 0, level: 1, children: [] }]
);
} else {
message.error(res.message);
}
})
.catch((error) => {
message.error(error.message);
});
useEffect(() => {
let _data = {};
if(sessionData && Object.values(sessionData).length > 0) {
_data = {
deal_record_id: sessionData?.deal_record_id || "", // ID
business_type: sessionData?.business_type || [], //
park_id: sessionData?.park_id || [], // ID
status: sessionData?.status || 0, //
start_time: sessionData?.start_time || "",
end_time: sessionData?.end_time || "",
pn: 1,
page_size: dictionary?.pageSizeOptions1[0],
};
setFormData({..._data});
};
$getTableList(_data);
}, []);
//
const $getTableList = (value = {}) => {
setTableSelectCheck([]); //
let _data = {
...formData,
...value
};
setLoading(true);
ajax.getDealRecordListTableData(_data).then((res) => {
setLoading(false);
if (res.status === 20000 || res.status == 0) {
setResultData(res?.data || {});
} else {
message.error(res.message);
}
}).catch((error) => {
setLoading(false);
message.error(error.message);
});
};
useEffect(() => {
setSessionData(formData);
}, [formData]);
useEffect(() => {
$getAllOperator();
$getAreaList();
$getTableList();
}, []);
return (
<div className="start-exception-deal">
<div className="paid-search">
<div className="title">查询条件</div>
<div className="form-Wrap">
<div className="yisa-search">
<label>处理记录ID</label>
<Input
className="form-con"
placeholder="请输入处理记录ID"
value={formData?.deal_record_id}
allowClear
onChange={(e) =>
setFormData({ ...formData, deal_record_id: e.target.value || "" })
}
/>
</div>
<div className="yisa-search">
<label>业务订单类型</label>
<Select
className="form-con"
placeholder="请选择"
options={[
{
label: "全部",
value: -1,
},
return (
<div className="start-exception-deal">
<div className="paid-search">
<div className="title">查询条件</div>
<div className="form-Wrap">
<div className="yisa-search">
<label>处理记录ID</label>
<Input
className="form-con"
placeholder="请输入处理记录ID"
value={formData?.deal_record_id}
allowClear
onChange={(e) =>
setFormData({ ...formData, deal_record_id: e.target.value || "" })
}
/>
</div>
<div className="yisa-search">
<label>业务订单类型</label>
<Select
className="form-con"
placeholder="请选择"
options={[
{
label: "全部",
value: -1,
},
]}
value={formData.business_type}
onChange={(v) => setFormData({ ...formData, business_type: v })}
/>
</div>
<div className="yisa-search">
<label>业务订单ID</label>
<Input
className="form-con"
placeholder="请输入业务订单ID"
value={formData?.park_id}
allowClear
onChange={(e) =>
setFormData({ ...formData, park_id: e.target.value || "" })
}
/>
</div>
<div className="yisa-search">
<label>时间段</label>
<DatePicker
className="form-con"
showTime
format={"YYYY-MM-DD HH:mm:ss"}
value={moment(formData.start_time)}
disabledDate={(current) => current > moment(formData.end_time)}
onChange={(date, time) => {
setFormData({ ...formData, start_time: time || null })
}}
/>
</div>
<div className="yisa-search" style={{ marginBottom: "0" }}>
<label></label>
<DatePicker
className="form-con"
showTime
format={"YYYY-MM-DD HH:mm:ss"}
value={moment(formData.end_time)}
disabledDate={(current) => current < moment(formData.start_time)}
onChange={(date, time) => {
setFormData({ ...formData, end_time: time || null })
}}
/>
</div>
<div className="yisa-search">
<label></label>
<QuickMenu
dropdownData={[
{ text: '昨日', value: 1 },
{ text: '近30天', value: 30 },
{ text: '近90天', value: 90 },
{ text: '近180天', value: 180 }
]}
onChange={(v) => {
let plate = formData?.plateNumber || "";
let value = v?.value || 0;
if (plate) {
console.log(utils?.validationPlate(plate))
if (utils?.validationPlate(plate)) {
setFormData({
...formData,
end_time: v?.endDateTime || null,
start_time: v?.startDateTime || null,
})
} else {
message.error('请正确输入车牌号')
return
}
} else {
if (value > 30) return message.warning("请输入您查询的车牌号!");
}
setFormData({
...formData,
end_time: v?.endDateTime || null,
start_time: v?.startDateTime || null,
})
}}
/>
</div>
<div className="yisa-search">
<label>状态</label>
<Select
className="form-con"
placeholder="请选择"
options={[
{
label: "全部",
value: -1,
},
{
label: "待审核",
value: 1,
},
{
label: "已完成",
value: 2,
},
{
label: "已驳回",
value: 3,
},
]}
value={formData.status}
onChange={(v) => setFormData({ ...formData, status: v })}
/>
</div>
<div className="form-btn">
<Button
className="reset"
onClick={() => setFormData({ ...defaultData, pn: formData?.pn || 1, page_size: formData?.page_size || dictionary?.pageSizeOptions1[0] })}
>
重置
</Button>
<Button
className="submit"
type="primary"
onClick={() => {
let _data = {
...formData,
pn: 1,
page_size: dictionary?.pageSizeOptions1[0]
}
setFormData(_data)
$getTableList(_data)
}}
loading={loading}
>
查询
</Button>
</div>
</div>
</div>
<div className="paid-result">
<div className="result">
<div className="row-head">
<span className="number-wrapper">处理记录列表</span>
</div>
<div className="result-data">
<Table
rowKey={(row) => row.park_id}
className="table"
dataSource={resultData?.list || []}
columns={tableColumns}
pagination={false}
loading={loading}
// rowSelection={{
// selectedRowKeys: tableSelectCheck,
// onChange: (selectedRowKeys, selectedRows) => {
// console.log(selectedRowKeys, selectedRows);
// setTableSelectCheck(selectedRowKeys)
// },
// getCheckboxProps: (record) => ({
// disabled: record?.status_now == 2
// })
// }}
scroll={{ x: "1500", y: "calc(100vh - 310px)" }}
/>
<Pagination
className="pagination-common"
showSizeChanger={true}
showQuickJumper={true}
showTotal={() => `${resultData.total || 0}`}
total={resultData.total}
current={formData.pn}
pageSize={formData.page_size}
pageSizeOptions={dictionary?.pageSizeOptions1}
onChange={$changePn}
/>
</div>
</div>
</div>
<ParkingRecordModal
title={parkingRecordModal?.tableData?.road || null}
{...parkingRecordModal}
onCancel={() => { setParkingRecordModal({ open: false, tableData: {} }) }}
]}
value={formData.business_type}
onChange={(v) => setFormData({ ...formData, business_type: v })}
/>
</div>
<div className="yisa-search">
<label>业务订单ID</label>
<Input
className="form-con"
placeholder="请输入业务订单ID"
value={formData?.park_id}
allowClear
onChange={(e) =>
setFormData({ ...formData, park_id: e.target.value || "" })
}
/>
</div>
<div className="yisa-search">
<label>时间段</label>
<DatePicker
className="form-con"
showTime
format={"YYYY-MM-DD HH:mm:ss"}
value={moment(formData.start_time)}
disabledDate={(current) => current > moment(formData.end_time)}
onChange={(date, time) => {
setFormData({ ...formData, start_time: time || null })
}}
/>
</div>
<div className="yisa-search" style={{ marginBottom: "0" }}>
<label></label>
<DatePicker
className="form-con"
showTime
format={"YYYY-MM-DD HH:mm:ss"}
value={moment(formData.end_time)}
disabledDate={(current) => current < moment(formData.start_time)}
onChange={(date, time) => {
setFormData({ ...formData, end_time: time || null })
}}
/>
</div>
<div className="yisa-search">
<label></label>
<QuickMenu
dropdownData={[
{ text: '昨日', value: 1 },
{ text: '近30天', value: 30 },
{ text: '近90天', value: 90 },
{ text: '近180天', value: 180 }
]}
onChange={(v) => {
let plate = formData?.plateNumber || "";
let value = v?.value || 0;
if (plate) {
console.log(utils?.validationPlate(plate))
if (utils?.validationPlate(plate)) {
setFormData({
...formData,
end_time: v?.endDateTime || null,
start_time: v?.startDateTime || null,
})
} else {
message.error('请正确输入车牌号')
return
}
} else {
if (value > 30) return message.warning("请输入您查询的车牌号!");
}
setFormData({
...formData,
end_time: v?.endDateTime || null,
start_time: v?.startDateTime || null,
})
}}
/>
</div>
<div className="yisa-search">
<label>状态</label>
<Select
className="form-con"
placeholder="请选择"
options={[
{
label: "全部",
value: 0,
},
{
label: "待审核",
value: 1,
},
{
label: "已完成",
value: 2,
},
{
label: "已驳回",
value: 3,
},
]}
value={formData.status}
onChange={(v) => setFormData({ ...formData, status: v })}
/>
</div>
<div className="form-btn">
<Button
className="reset"
onClick={() => setFormData({ ...defaultData, pn: formData?.pn || 1, page_size: formData?.page_size || dictionary?.pageSizeOptions1[0] })}
>
重置
</Button>
<Button
className="submit"
type="primary"
onClick={() => {
let _data = {
...formData,
pn: 1,
page_size: dictionary?.pageSizeOptions1[0]
}
setFormData(_data)
$getTableList(_data)
}}
loading={loading}
>
查询
</Button>
</div>
</div>
</div>
<div className="paid-result">
<div className="result">
<div className="row-head">
<span className="number-wrapper">处理记录列表</span>
</div>
<div className="result-data">
<Table
rowKey={(row) => row.park_id}
className="table"
dataSource={resultData?.list || []}
columns={tableColumns}
pagination={false}
loading={loading}
scroll={{ x: "1500", y: "calc(100vh - 310px)" }}
/>
<Pagination
className="pagination-common"
showSizeChanger={true}
showQuickJumper={true}
showTotal={() => `${resultData.total || 0}`}
total={resultData.total}
current={formData.pn}
pageSize={formData.page_size}
pageSizeOptions={dictionary?.pageSizeOptions1}
onChange={$changePn}
/>
</div>
</div>
);
</div>
<RecordReviewModal
carOutTimeColor="car-out-time-color"
title="异常订单处理记录审核"
{...recordReviewModal}
disabledModal={true}
disabledAuditReason = {true}
processViewData={processViewData}
onCancel={() => {setRecordReviewModal({open: false, data: []})}}
// onChangeSubmit={$auditSubmit}
/>
</div>
);
}
export default DealRecordList;

143
src/pages/FinancialMgm/ExceptionDeal/StartExceptionDeal/index.jsx

@ -2,18 +2,17 @@ import React, { useState, useRef, useEffect } from "react";
import { message, Pagination, Table, Select, Input, Cascader, DatePicker, Button, Popover } from "antd";
import { dictionary, utils } from "@/config/common";
import moment from "moment";
import { useSessionStorageState, useUpdateEffect } from "ahooks";
import { useSessionStorageState} from "ahooks";
import ajax from "@/services";
import { QuickMenu, ParkingRecordModal} from "@/components";
import RecordReviewModal from "@/components/ParkingRecordModal/RecordReviewModal";
import "./index.scss";
import errorImg from "@/assets/images/layout/error.png";
import { useLocation } from "react-router-dom";
function StartExceptionDeal() {
//
const defaultData = {
park_id: "", // ID
operator: 0, //
region: [0], //
region: null, //
road: "", //
road_type: 0, //
plate: "", //
@ -25,12 +24,14 @@ function StartExceptionDeal() {
};
const [formData, setFormData] = useState(defaultData); //
const [sessionData, setSessionData] = useSessionStorageState("startExceptionDeal", {value: {}}); // session
const [operatorList, setOperatorList] = useState([{ value: 0, label: "全部" }]); //
const [areaList, setAreaList] = useState([]); //
const [loading, setLoading] = useState(false); //
const [tableSelectCheck, setTableSelectCheck] = useState([]); // id
const [parkingRecordModal, setParkingRecordModal] = useState({open: false, tableData: {}}); //
const [recordReviewModal, setRecordReviewModal] = useState({open: false, data: []}); //
const [auditSubmitId, setAuditSubmitId] = useState([]); // id
//
const [resultData, setResultData] = useState({
total: 0,
@ -115,14 +116,14 @@ function StartExceptionDeal() {
dataIndex: "in_time",
key: "in_time",
align: "center",
width: 150,
width: 200,
},
{
title: "计费时间",
dataIndex: "out_time",
key: "out_time",
align: "center",
width: 150,
width: 200,
},
{
title: "订单金额(元)",
@ -154,7 +155,7 @@ function StartExceptionDeal() {
<div className="hover" onClick={() => {setParkingRecordModal({open: true, tableData: record || {}})}}>查看</div>
{ record?.status_now == 2 ?
<div className="disabled">处理中</div> :
<div className="hover" onClick={() => {console.log("处理");}}>处理</div>
<div className="hover" onClick={() => {$dispose([record?.park_id])}}>处理</div>
}
</div>
}
@ -169,7 +170,7 @@ function StartExceptionDeal() {
//
const $batchProcessing = () => {
if(!tableSelectCheck?.length) return message.error("请选择需要处理的数据!");
console.log(tableSelectCheck);
$dispose(tableSelectCheck);
};
//
@ -191,6 +192,31 @@ function StartExceptionDeal() {
$getTableList(temFormData);
};
//
const $onClickTime = (v) => {
let plate = formData?.plateNumber || "";
let value = v?.value || 0;
if (plate) {
if (utils?.validationPlate(plate)) {
setFormData({
...formData,
end_time: v?.endDateTime || null,
start_time: v?.startDateTime || null,
})
} else {
message.error('请正确输入车牌号')
return
}
} else {
if (value > 30) return message.warning("请输入您查询的车牌号!");
}
setFormData({
...formData,
end_time: v?.endDateTime || null,
start_time: v?.startDateTime || null,
})
};
//
const $getAllOperator = () => {
ajax
@ -227,7 +253,7 @@ function StartExceptionDeal() {
//
const $getTableList = (value = {}) => {
setTableSelectCheck([]); //
setTableSelectCheck([]); //
let _data = {
...formData,
...value
@ -246,11 +272,72 @@ function StartExceptionDeal() {
});
};
//
const $dispose = (id) => {
if(!id?.length) return message.error("获取停车订单ID失败,请重新选择!");
ajax.getStartExceptionParkingRecordsInfo({id}).then((res) => {
if (res.status === 20000 || res.status == 0) {
setRecordReviewModal({open: true, data: res?.data || []});
setAuditSubmitId(id);
} else {
message.error(res.message);
}
}).catch((error) => {
message.error(error.message);
});
};
//
const $auditSubmit = (value) => {
console.log(value, auditSubmitId);
if(!value?.deal_reason) return message.error("处理理由不能为空!");
if(value?.examine_reason_id == 1 && !value?.update_value) return message.error("日期不能为空!");
if(value?.examine_reason_id == 2 && !value?.update_value) return message.error("车牌号不能为空!");
if(value?.examine_reason_id == 3 && !value?.update_value) return message.error("金额不能为空!");
let _data = {
...value,
id: auditSubmitId
};
ajax.getStartExceptionSendAbnormal(_data).then((res) => {
if (res.status === 20000 || res.status == 0) {
message.success(res?.message || "提交审核成功");
setRecordReviewModal({open: false, data: []})
} else {
message.error(res.message);
}
}).catch((error) => {
message.error(error.message);
});
};
useEffect(() => {
let _data = {};
if(sessionData && Object.values(sessionData).length > 0) {
_data = {
park_id: sessionData?.park_id || "", // ID
operator: sessionData?.operator || [], //
region: sessionData?.region || null, //
road: sessionData?.road || [], //
road_type: sessionData?.road_type || [], //
plate: sessionData?.plate || "", //
type: sessionData?.type || "", // 1: 2:
start_time: sessionData?.start_time || "",
end_time: sessionData?.end_time || "",
pn: 1,
page_size: dictionary?.pageSizeOptions1[0],
};
setFormData({..._data});
};
$getAllOperator();
$getAreaList();
$getTableList();
$getTableList(_data);
}, []);
useEffect(() => {
setSessionData(formData);
}, [formData]);
console.log(formData);
return (
<div className="start-exception-deal">
<div className="paid-search">
@ -284,7 +371,7 @@ function StartExceptionDeal() {
}}
value={formData.region}
onChange={(v, option) => {
setFormData({ ...formData, region: v ? v : [0] });
setFormData({ ...formData, region: v ? v : null });
}}
/>
</div>
@ -388,30 +475,7 @@ function StartExceptionDeal() {
{ text: '近90天', value: 90 },
{ text: '近180天', value: 180 }
]}
onChange={(v) => {
let plate = formData?.plateNumber || "";
let value = v?.value || 0;
if (plate) {
console.log(utils?.validationPlate(plate))
if (utils?.validationPlate(plate)) {
setFormData({
...formData,
end_time: v?.endDateTime || null,
start_time: v?.startDateTime || null,
})
} else {
message.error('请正确输入车牌号')
return
}
} else {
if(value > 30) return message.warning("请输入您查询的车牌号!");
}
setFormData({
...formData,
end_time: v?.endDateTime || null,
start_time: v?.startDateTime || null,
})
}}
onChange={$onClickTime}
/>
</div>
<div className="form-btn">
@ -489,6 +553,13 @@ function StartExceptionDeal() {
{...parkingRecordModal}
onCancel={() => {setParkingRecordModal({open: false, tableData: {}})}}
/>
<RecordReviewModal
title="异常订单处理记录审核"
{...recordReviewModal}
type="处理"
onCancel={() => {setRecordReviewModal({open: false, data: []})}}
onChangeSubmit={$auditSubmit}
/>
</div>
);
}

46
src/services/FinancialMgm/exceptionDeal.js

@ -58,6 +58,46 @@ export default {
});
},
// 发起异常处理 -- 提交审核
getStartExceptionSendAbnormal: (params) => {
return ajax({
url: "/api/fin/abnormal_action/send_abnormal",
type: "post",
data: params,
});
},
// -------------------------------------------------------------------
// 处理记录审核 表格数据
getDealRecordAuditTableData: (params) => {
return ajax({
url: "/api/fin/abnormal_action/abnormal_check_list",
type: "post",
data: params,
});
},
// 处理记录审核 -- 审核模态框数据
getDealRecordActionListView: (params) => {
return ajax({
url: "/api/fin/abnormal_action/action_list_view",
type: "post",
data: params,
});
},
// 处理记录审核 -- 提交审核
getStartExceptionExamineAbnormal: (params) => {
return ajax({
url: "/api/fin/abnormal_action/examine_abnormal",
type: "post",
data: params,
});
},
// ---------------------------------------------------------------------------------------------------
// 处理记录列表 表格数据
getDealRecordListTableData: (params) => {
return ajax({
@ -67,10 +107,10 @@ export default {
});
},
// 处理记录审核 表格数据
getDealRecordListTableData: (params) => {
// 处理记录列表 -- 订单详情数据
getDealRecordListActionView: (params) => {
return ajax({
url: "/api/fin/abnormal_action/abnormal_check_list",
url: "/api/fin/abnormal_action/abnormal_action_view",
type: "post",
data: params,
});

Loading…
Cancel
Save