8 changed files with 373 additions and 3 deletions
-
6src/pages/OperationCenter/OtherBusiness/ParkingCard/CertificateReview/index.jsx
-
64src/pages/OperationCenter/OtherBusiness/ParkingCard/CertificateReview/index.scss
-
262src/pages/OperationCenter/OtherBusiness/ParkingCard/CertificateReview/loadable.jsx
-
5src/pages/OperationCenter/OtherBusiness/ParkingCard/ParkingCardMgm/loadable.jsx
-
4src/pages/OperationCenter/OtherBusiness/ParkingCard/index.jsx
-
7src/router/menu.js
-
6src/router/router.config.js
-
22src/services/OperationCenter/ParkingCardMgm/index.js
@ -0,0 +1,6 @@ |
|||
import React from "react" |
|||
import loadable from "@loadable/component" |
|||
import { LoadingImg } from "@/components" |
|||
|
|||
const MonitorCarAlarmLoadable = loadable(() => import("./loadable")) |
|||
export default (pros) => <MonitorCarAlarmLoadable {...pros} fallback={<LoadingImg />} /> |
@ -0,0 +1,64 @@ |
|||
@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); |
|||
|
|||
.certificate-modal { |
|||
.form-box { |
|||
width: 400px; |
|||
display: flex; |
|||
margin-bottom: 30px; |
|||
|
|||
>label { |
|||
text-align: right; |
|||
padding-right: 10px; |
|||
min-width: 120px; |
|||
|
|||
&.required::before { |
|||
margin-right: 4px; |
|||
color: #f56c6c; |
|||
font-family: SimSun, sans-serif; |
|||
content: "*"; |
|||
} |
|||
} |
|||
|
|||
.form-con { |
|||
flex: 1; |
|||
min-width: 190px; |
|||
} |
|||
} |
|||
|
|||
.pic-box { |
|||
margin-left: 80px; |
|||
margin-bottom: 30px; |
|||
width: 400px; |
|||
height: 300px; |
|||
|
|||
.ant-image { |
|||
width: 100%; |
|||
height: 100%; |
|||
|
|||
img { |
|||
width: 100%; |
|||
height: 100%; |
|||
object-fit: contain; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.submitBtn { |
|||
text-align: center; |
|||
margin: 15px 0 5px; |
|||
cursor: pointer; |
|||
|
|||
.ant-btn { |
|||
min-width: 90px; |
|||
height: 34px; |
|||
|
|||
&:not(&:first-child) { |
|||
margin-left: 20px; |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,262 @@ |
|||
import React, { useState, useRef, useEffect } from "react"; |
|||
import { message, Input, Select, Image, Modal, Button } from "antd"; |
|||
import { dictionary, utils } from "@/config/common"; |
|||
import moment from "moment"; |
|||
import ajax from "@/services"; |
|||
import { TableModule } from "@/components"; |
|||
import errorImg from "@/assets/images/layout/error.png"; |
|||
import "./index.scss"; |
|||
|
|||
function CertificateReview() { |
|||
const tableRef = useRef(null); |
|||
// 弹窗 |
|||
const [visible, setVisible] = useState(false); |
|||
// 拒绝弹窗 |
|||
const [visible1, setVisible1] = useState(false); |
|||
// 图片预览 |
|||
const [preview, setPreview] = useState(false); |
|||
// 表格数据 |
|||
const [rowData, setRowData] = useState({}); |
|||
const columns = [ |
|||
{ |
|||
title: "提交人", |
|||
dataIndex: "submit", |
|||
align: "center", |
|||
}, |
|||
{ |
|||
title: "审核人", |
|||
dataIndex: "check", |
|||
align: "center", |
|||
}, |
|||
{ |
|||
title: "提交时间", |
|||
dataIndex: "submit_time", |
|||
align: "center", |
|||
}, |
|||
{ |
|||
title: "审核时间", |
|||
dataIndex: "check_time", |
|||
align: "center", |
|||
}, |
|||
{ |
|||
title: "状态", |
|||
dataIndex: "status", |
|||
align: "center", |
|||
render: (val, row, index) => |
|||
val == 2 ? "已拒绝" : val == 3 ? "已通过" : "待审核", |
|||
}, |
|||
{ |
|||
title: "操作", |
|||
dataIndex: "handle", |
|||
align: "center", |
|||
width: 120, |
|||
render: (val, row, index) => { |
|||
const _status = row?.status; |
|||
return ( |
|||
<a |
|||
className="blue" |
|||
onClick={() => { |
|||
setRowData(row); |
|||
setPreview(true); |
|||
setVisible(true); |
|||
}} |
|||
> |
|||
{_status == 2 || _status == 3 ? "查看" : "审核"} |
|||
</a> |
|||
); |
|||
}, |
|||
}, |
|||
]; |
|||
const formSearch = [ |
|||
{ |
|||
name: "status", |
|||
type: "Select", |
|||
label: "状态", |
|||
placeholder: "请选择状态", |
|||
options: [ |
|||
{ |
|||
value: "", |
|||
label: "全部", |
|||
}, |
|||
{ |
|||
value: "1", |
|||
label: "待审核", |
|||
}, |
|||
{ |
|||
value: "2", |
|||
label: "已拒绝", |
|||
}, |
|||
{ |
|||
value: "3", |
|||
label: "已通过", |
|||
}, |
|||
], |
|||
}, |
|||
]; |
|||
//搜索参数初始化 |
|||
const initFormData = { |
|||
status: "", |
|||
}; |
|||
|
|||
//搜索的结果 |
|||
const [tableData, setTableData] = useState([]); |
|||
//搜索的总结果数 |
|||
const [total, setTotal] = useState(0); |
|||
|
|||
// 列表查询 |
|||
function fetch(params) { |
|||
ajax.getCredentialList(params).then( |
|||
(res) => { |
|||
if (parseInt(res?.status) === 20000) { |
|||
const { list, total } = res?.data || {}; |
|||
setTableData(list || []); |
|||
setTotal(total || 0); |
|||
} |
|||
}, |
|||
(err) => { |
|||
console.log(err); |
|||
message.error("服务器异常"); |
|||
} |
|||
); |
|||
} |
|||
|
|||
// 提交 |
|||
function handleSave(flag) { |
|||
if (flag == 2) { |
|||
setRowData({ ...rowData, text: "" }); |
|||
setVisible1(true); |
|||
} else { |
|||
doPost(flag); |
|||
} |
|||
} |
|||
|
|||
// 调用接口 |
|||
function doPost(flag) { |
|||
if (flag == 2 && !rowData?.text) { |
|||
message.error("请输入拒绝原因"); |
|||
return; |
|||
} |
|||
ajax |
|||
.doCredentialCheck({ id: rowData?.id, status: flag, text: rowData?.text }) |
|||
.then( |
|||
(res) => { |
|||
if (parseInt(res?.status) === 20000) { |
|||
message.success(res?.message); |
|||
setVisible1(false); |
|||
setVisible(false); |
|||
tableRef.current.fetch(); |
|||
} else { |
|||
message.error(res?.message); |
|||
} |
|||
}, |
|||
(err) => { |
|||
console.log(err); |
|||
message.error("服务器异常"); |
|||
} |
|||
); |
|||
} |
|||
|
|||
return ( |
|||
<> |
|||
<TableModule |
|||
ref={tableRef} |
|||
columns={columns} |
|||
tableData={tableData} |
|||
formSearch={formSearch} |
|||
total={total} |
|||
pagename="停车卡证件认证" |
|||
search={fetch} |
|||
pageName={"certificateReview"} |
|||
initFormData={initFormData} |
|||
isExport={false} |
|||
showSerial={true} |
|||
/> |
|||
<Modal |
|||
className="certificate-modal" |
|||
visible={visible} |
|||
title={"认证信息"} |
|||
// centered |
|||
width={"600px"} |
|||
onCancel={() => setVisible(false)} |
|||
footer={null} |
|||
> |
|||
<div className="form-box"> |
|||
<label>姓名:</label> |
|||
<span>{rowData?.submit || "-"}</span> |
|||
</div> |
|||
<div className="pic-box"> |
|||
<Image |
|||
src={rowData?.img} |
|||
fallback={errorImg} |
|||
preview={preview} |
|||
onError={() => setPreview(false)} |
|||
/> |
|||
</div> |
|||
{rowData?.status == 2 ? ( |
|||
<div className="form-box"> |
|||
<label>拒绝原因:</label> |
|||
<span>{rowData?.text || "-"}</span> |
|||
</div> |
|||
) : null} |
|||
<div className="submitBtn"> |
|||
{rowData?.status != 2 && rowData?.status != 3 ? ( |
|||
<> |
|||
<Button type="primary" onClick={() => handleSave(3)}> |
|||
通过 |
|||
</Button> |
|||
<Button type="primary" onClick={() => handleSave(2)}> |
|||
拒绝 |
|||
</Button> |
|||
</> |
|||
) : null} |
|||
<Button |
|||
type="primary" |
|||
className="cancel colorReset" |
|||
onClick={() => setVisible(false)} |
|||
> |
|||
返回 |
|||
</Button> |
|||
</div> |
|||
</Modal> |
|||
<Modal |
|||
className="certificate-modal" |
|||
visible={visible1} |
|||
title={"拒绝原因"} |
|||
// centered |
|||
width={"600px"} |
|||
onCancel={() => setVisible1(false)} |
|||
footer={null} |
|||
> |
|||
<div className="form-box"> |
|||
<label className="required">拒绝原因</label> |
|||
<Input.TextArea |
|||
className="form-con" |
|||
placeholder="请输入" |
|||
maxLength={2000} |
|||
value={rowData?.text || undefined} |
|||
onChange={(e) => |
|||
setRowData({ |
|||
...rowData, |
|||
text: e.target.value, |
|||
}) |
|||
} |
|||
/> |
|||
</div> |
|||
<div className="submitBtn"> |
|||
<Button type="primary" onClick={() => doPost(2)}> |
|||
确认 |
|||
</Button> |
|||
<Button |
|||
type="primary" |
|||
className="cancel colorReset" |
|||
onClick={() => setVisible1(false)} |
|||
> |
|||
取消 |
|||
</Button> |
|||
</div> |
|||
</Modal> |
|||
</> |
|||
); |
|||
} |
|||
|
|||
export default CertificateReview; |
@ -1,9 +1,11 @@ |
|||
import ParkingCardMgm from "./ParkingCardMgm" |
|||
import ParkingCardOrder from "./ParkingCardOrder" |
|||
import ParkingCardStat from "./ParkingCardStat" |
|||
import CertificateReview from "./CertificateReview" |
|||
|
|||
export default { |
|||
ParkingCardMgm, |
|||
ParkingCardOrder, |
|||
ParkingCardStat |
|||
ParkingCardStat, |
|||
CertificateReview |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue