You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1144 lines
48 KiB
1144 lines
48 KiB
import React, { useState, useRef, useEffect } from "react";
|
|
import { ResultFlowResult, QuickMenu } from "@/components"
|
|
import { Select, Button, Table, message, Pagination, Input, Modal, Image, DatePicker, Space, Upload } from 'antd'
|
|
import {
|
|
pageSizeOptions
|
|
} from '@/config/character.config.js'
|
|
import "./index.scss";
|
|
import { SearchOutlined, DeleteOutlined, PlusOutlined, DownOutlined, UpOutlined } from '@ant-design/icons';
|
|
import ajax from '@/services'
|
|
import moment from 'moment'
|
|
import copy from 'copy-to-clipboard';
|
|
const { RangePicker } = DatePicker;
|
|
const { TextArea } = Input;
|
|
function CallbackSuggestion(props) {
|
|
const [ajaxLoading, setAjaxLoading] = useState(false)
|
|
const [resultData, setResultData] = useState({
|
|
data: [],
|
|
total_records: 0,
|
|
export_url: '',
|
|
process_url: ""
|
|
})
|
|
const parameter = {
|
|
carAppealId: '', //意见ID
|
|
mobile: '',//手机号
|
|
content: '',//标题
|
|
adviseType: 0,//意见类型
|
|
operateType: 0,//意见状态
|
|
start_time: moment().subtract(30, 'days').startOf('day').format('YYYY-MM-DD HH:mm:ss'),
|
|
end_time: moment().format('YYYY-MM-DD 23:59:59'),
|
|
pn: 1,
|
|
page_size: Number(pageSizeOptions[0]), // 每页条数
|
|
}
|
|
const [formData, setFormData] = useState(parameter)
|
|
const [lastFormData, setLastFormData] = useState(formData)
|
|
const lastFormDataRef = useRef(formData)
|
|
const [imgVisible, setImgVisible] = useState(false)
|
|
const [orderVisible, setOrderVisible] = useState(false)
|
|
const [evidenceVisible, setEvidenceVisible] = useState(false)
|
|
|
|
//物品型号
|
|
const handleAdviseType = (value) => {
|
|
setFormData({ ...formData, adviseType: value })
|
|
}
|
|
//申诉ID
|
|
const handleCarAppealId = (v) => {
|
|
setFormData({ ...formData, carAppealId: v.target.value })
|
|
}
|
|
//手机号
|
|
const handleMobile = (v) => {
|
|
setFormData({ ...formData, mobile: v.target.value })
|
|
}
|
|
//车牌号
|
|
const handleContent = (v) => {
|
|
setFormData({ ...formData, content: v.target.value })
|
|
}
|
|
const onChange = (value, dateString) => {
|
|
setFormData({
|
|
...formData,
|
|
start_time: dateString[0],
|
|
end_time: dateString[1]
|
|
})
|
|
};
|
|
//审核状态
|
|
const handleStatus = (value) => {
|
|
setFormData({ ...formData, operateType: value })
|
|
}
|
|
const addChild = (child, res) => {
|
|
if (child.children) {
|
|
child.children.forEach((item) => {
|
|
addChild(item, res);
|
|
});
|
|
} else {
|
|
res.push(child.id);
|
|
}
|
|
};
|
|
//列表
|
|
const handleColumns = (tab) => {
|
|
let result = [...deployListColumns];
|
|
switch (tab) {
|
|
case '1':
|
|
result.splice(5, 1)
|
|
break;
|
|
|
|
}
|
|
return result;
|
|
}
|
|
const handleDealData = (tab) => {
|
|
let result = [...dealListColumns];
|
|
switch (tab) {
|
|
case '1':
|
|
result.splice(5, 1)
|
|
break;
|
|
|
|
}
|
|
return result;
|
|
}
|
|
const [rotate, setRotate] = useState(false)
|
|
const dealListColumns = [
|
|
{
|
|
title: '停车订单ID',
|
|
dataIndex: 'parkRecordId',
|
|
key: 'parkRecordId',
|
|
render: (text, record) => {
|
|
return <>
|
|
<div>
|
|
<span className="iconLined" onClick={handleTrans}>{rotate === false ? <DownOutlined /> : <UpOutlined />} </span>
|
|
<a onClick={() => { navigator.clipboard.writeText(`${record.park_id}`).then(() => { message.success("已复制到剪切板") }); }}>{record.park_id}</a>
|
|
</div>
|
|
</>
|
|
}
|
|
},
|
|
{
|
|
title: '车牌号',
|
|
dataIndex: 'plateNumber',
|
|
key: 'plateNumber',
|
|
},
|
|
{
|
|
title: '停车场名称',
|
|
dataIndex: 'parkName',
|
|
key: 'parkName',
|
|
},
|
|
{
|
|
title: '入场时间',
|
|
dataIndex: 'strEntryTime',
|
|
key: 'strEntryTime',
|
|
},
|
|
{
|
|
title: '出场时间',
|
|
dataIndex: 'strExitTime',
|
|
key: 'strExitTime',
|
|
},
|
|
]
|
|
//列表
|
|
const deployListColumns = [
|
|
{
|
|
title: '意见ID',
|
|
dataIndex: 'memberAdviseId',
|
|
key: 'memberAdviseId',
|
|
},
|
|
{
|
|
title: '手机号',
|
|
dataIndex: 'mobile',
|
|
key: 'mobile',
|
|
},
|
|
{
|
|
title: '标题',
|
|
dataIndex: 'content',
|
|
key: 'content',
|
|
},
|
|
{
|
|
title: '意见状态',
|
|
dataIndex: 'adviseStatus',
|
|
key: 'adviseStatus',
|
|
},
|
|
{
|
|
title: '意见类型',
|
|
dataIndex: 'adviseType',
|
|
key: 'adviseType',
|
|
},
|
|
{
|
|
title: '停车订单ID',
|
|
dataIndex: 'parkRecordsId',
|
|
key: 'parkRecordsId',
|
|
},
|
|
{
|
|
title: '最后信息时间',
|
|
dataIndex: 'updatedTime',
|
|
key: 'updatedTime',
|
|
},
|
|
{
|
|
title: '操作',
|
|
render: (text, record) => {
|
|
return <>
|
|
<a onClick={() => { CheckImg(record) }}>查看详情</a>
|
|
</>
|
|
}
|
|
}]
|
|
//图片
|
|
const [getImg, setGetImg] = useState({})
|
|
const [getImgList, setGetImgList] = useState([])
|
|
const [getId, setGetId] = useState({})
|
|
const CheckImg = (record) => {
|
|
setGetId(record.id)
|
|
let data = {
|
|
id: record.id
|
|
}
|
|
ajax.checkFeedData(data).then(res => {
|
|
if (res.status === 20000) {
|
|
setImgVisible(true)
|
|
setGetImg(res.data)
|
|
setGetImgList(res.data.dialogueDetail)
|
|
|
|
} else {
|
|
message.error(res.message)
|
|
}
|
|
})
|
|
}
|
|
const imgModal = () => {
|
|
setImgVisible(false)
|
|
setRepairData({
|
|
content: '',
|
|
image: []
|
|
})
|
|
setFileList([])
|
|
}
|
|
const cancelImg = () => {
|
|
setImgVisible(false)
|
|
setRepairData({
|
|
content: '',
|
|
image: []
|
|
})
|
|
setFileList([])
|
|
}
|
|
const getParkId = (record) => {
|
|
if (copy(record.parkRecordId)) {
|
|
message.success("复制成功");
|
|
} else message.error("复制失败,请手动复制");
|
|
}
|
|
// 获取列表数据
|
|
const getData = (data = formData) => {
|
|
if (moment(data.end_time) - moment(data.start_time) > 180 * 3600 * 24000) {
|
|
if (!(data.carAppealId || data.mobile)) {
|
|
message.error('查询时间范围大于半年,需填写手机号或意见ID!')
|
|
return
|
|
}
|
|
}
|
|
setAjaxLoading(true)
|
|
ajax.getFeedbackList(data).then(res => {
|
|
setAjaxLoading(false)
|
|
if (res.status === 20000) {
|
|
let resDataArr = res.data.list.map((item) => {
|
|
item.key = item.id
|
|
return item
|
|
})
|
|
setResultData({
|
|
...resultData,
|
|
data: resDataArr,
|
|
total_records: res.data.total_records
|
|
})
|
|
} else {
|
|
setResultData({
|
|
data: [],
|
|
total_records: 0,
|
|
export_url: '',
|
|
process_url: ""
|
|
})
|
|
message.error(res.message)
|
|
}
|
|
}, err => {
|
|
console.log(err)
|
|
})
|
|
}
|
|
//切换分页
|
|
const changePn = (pn, length) => {
|
|
if (lastFormData.page_size === length) {
|
|
setFormData(Object.assign({}, formData, { pn: pn, page_size: length }))
|
|
setLastFormData(Object.assign({}, lastFormData, { pn: pn, page_size: length }))
|
|
lastFormDataRef.current = Object.assign({}, lastFormData, { pn: pn, page_size: length })
|
|
getData(Object.assign({}, formData, { pn: pn, page_size: length }))
|
|
}
|
|
}
|
|
//切换每页条数
|
|
const changeLength = (pn, length) => {
|
|
setFormData(Object.assign({}, formData, { pn: 1, page_size: length }))
|
|
setLastFormData(Object.assign({}, lastFormData, { pn: 1, page_size: length }))
|
|
lastFormDataRef.current = Object.assign({}, lastFormData, { pn: 1, page_size: length })
|
|
getData(Object.assign({}, formData, { pn: 1, page_size: length }))
|
|
}
|
|
//检索数据
|
|
const getSearchData = (data = formData) => {
|
|
// getData(data)
|
|
setFormData({ ...formData, pn: 1 })
|
|
getData(Object.assign({}, formData, { pn: 1 }))
|
|
}
|
|
//重置数据
|
|
const getResetData = () => {
|
|
setFormData({
|
|
...parameter
|
|
})
|
|
getData({ ...parameter, pn: 1 })
|
|
}
|
|
|
|
//详情回复
|
|
const onChangeText = (value) => {
|
|
setRepairData({ ...repairData, content: value.target.value })
|
|
}
|
|
const getBase64 = (file) =>
|
|
new Promise((resolve, reject) => {
|
|
const reader = new FileReader();
|
|
reader.readAsDataURL(file);
|
|
reader.onload = () => resolve(reader.result);
|
|
reader.onerror = (error) => reject(error);
|
|
});
|
|
const [previewOpen, setPreviewOpen] = useState(false);
|
|
const [previewImage, setPreviewImage] = useState('');
|
|
const [previewTitle, setPreviewTitle] = useState('');
|
|
const [repairData, setRepairData] = useState({})
|
|
const handleCancel = () => setPreviewOpen(false);
|
|
const [fileList, setFileList] = useState([])
|
|
console.log(fileList);
|
|
const imgData = () => {
|
|
let imgUrl = []
|
|
fileList.map(res => {
|
|
imgUrl.push(res.response?.data)
|
|
})
|
|
setRepairData(
|
|
Object.assign({}, repairData, { image: imgUrl })
|
|
);
|
|
}
|
|
//撤回
|
|
const handleReject = (res) => {
|
|
let data = {
|
|
dialogueId: res.dialogueId,
|
|
id: getId
|
|
}
|
|
ajax.getRejectData(data).then(res => {
|
|
if (res.status === 20000) {
|
|
console.log(res.data);
|
|
setGetImgList(res.data.dialogueDetail)
|
|
} else {
|
|
message.error(res.message)
|
|
}
|
|
})
|
|
}
|
|
// 日期转换
|
|
const parseDate = (val, format) => {
|
|
if (val) {
|
|
return moment(val, format ? format : "YYYY-MM-DD HH:mm:ss");
|
|
} else {
|
|
return null;
|
|
}
|
|
};
|
|
const handleAgain = (res) => {
|
|
setRepairData({ content: res.replyContent })
|
|
}
|
|
const handleRepair = () => {
|
|
let data = {
|
|
...repairData,
|
|
id: getId
|
|
}
|
|
let dataId = {
|
|
id: getId
|
|
}
|
|
ajax.replyData(data).then(res => {
|
|
if (res.status === 20000) {
|
|
ajax.checkFeedData(dataId).then(res => {
|
|
if (res.status === 20000) {
|
|
setGetImg(res.data)
|
|
setGetImgList(res.data.dialogueDetail)
|
|
setRepairData({
|
|
content: '',
|
|
image: []
|
|
})
|
|
setFileList([])
|
|
} else {
|
|
message.error(res.message)
|
|
}
|
|
})
|
|
} else {
|
|
message.error(res.message)
|
|
}
|
|
})
|
|
}
|
|
useEffect(() => {
|
|
imgData()
|
|
}, [fileList])
|
|
// 在上传前进行文件类型检查
|
|
const beforeUpload = (file) => {
|
|
const isValidType = file.type === 'image/jpeg' || file.type === 'image/png' || file.type === 'image/jpg';
|
|
if (!isValidType) {
|
|
message.error(`请上传png,jpeg,jpg类型图片`);
|
|
}
|
|
return isValidType || Upload.LIST_IGNORE;
|
|
};
|
|
const handlePreview = async (file) => {
|
|
if (!file.url && !file.preview) {
|
|
file.preview = await getBase64(file.originFileObj);
|
|
}
|
|
setPreviewImage(file.url || file.preview);
|
|
setPreviewOpen(true);
|
|
setPreviewTitle(file.name || file.url.substring(file.url.lastIndexOf('/') + 1));
|
|
};
|
|
const handleChange = ({ fileList: newFileList }) => setFileList(newFileList);
|
|
const uploadButton = (
|
|
<div>
|
|
<PlusOutlined />
|
|
<div
|
|
style={{
|
|
marginTop: 8,
|
|
}}
|
|
>
|
|
点击上传
|
|
</div>
|
|
</div>
|
|
);
|
|
const handleTrans = () => {
|
|
if (rotate === false) {
|
|
setRotate(true)
|
|
}
|
|
if (rotate === true) {
|
|
setRotate(false)
|
|
}
|
|
console.log(rotate);
|
|
}
|
|
//去处理
|
|
const orderModal = () => {
|
|
setOrderVisible(false)
|
|
setSubmitDeploy({ change_content: '', update_value: '', plate_type: '', deal_reason: '' })
|
|
setGetAdjustTimeValue(1)
|
|
setGetValueList({})
|
|
}
|
|
const [getDealData, setGetDealData] = useState({
|
|
data: []
|
|
})
|
|
const [getOrderData, setGetOrderData] = useState({})
|
|
const handleDeal = () => {
|
|
let data = {
|
|
id: getImg.parkRecordId
|
|
}
|
|
ajax.dealData(data).then(res => {
|
|
if (res.status === 20000) {
|
|
let resDataArr = res.data.map((item) => {
|
|
setGetOrderData(item)
|
|
item.key = item.id
|
|
return item
|
|
})
|
|
setOrderVisible(true)
|
|
setGetDealData({
|
|
...getDealData,
|
|
data: resDataArr
|
|
})
|
|
} else {
|
|
message.error(res.message)
|
|
}
|
|
})
|
|
}
|
|
const [submitDeploy, setSubmitDeploy] = useState({
|
|
change_content: '',
|
|
update_value: '',
|
|
plate_type: '',
|
|
deal_reason: '',
|
|
adjustTime:1
|
|
})
|
|
//提交审核
|
|
const onChangeReason = (value) => {
|
|
setSubmitDeploy({ ...submitDeploy, deal_reason: value.target.value })
|
|
}
|
|
const [getValueList, setGetValueList] = useState({})
|
|
const handleChoose = (value) => {
|
|
setGetValueList(value)
|
|
// setSubmitDeploy({ ...submitDeploy, change_content: value })
|
|
if (value) {
|
|
setSubmitDeploy({
|
|
...submitDeploy,
|
|
update_value: '',
|
|
plate_type: '',
|
|
change_content: value
|
|
})
|
|
}
|
|
}
|
|
const [getAdjustTimeValue, setGetAdjustTimeValue] = useState(1)
|
|
const handleAdjust = (value) => {
|
|
setGetAdjustTimeValue(value)
|
|
submitDeploy.update_value = ''
|
|
}
|
|
const handleAdjustTime = (v, dateString) => {
|
|
setSubmitDeploy({ ...submitDeploy, update_value: dateString })
|
|
}
|
|
const handlePlateColor = (v) => {
|
|
setSubmitDeploy({ ...submitDeploy, plate_type: v })
|
|
}
|
|
const handlePlateNumber = (v) => {
|
|
setSubmitDeploy({ ...submitDeploy, update_value: v.target.value })
|
|
}
|
|
const handleAdd = (v) => {
|
|
setSubmitDeploy({ ...submitDeploy, add: v })
|
|
}
|
|
const handleAddCount = (v) => {
|
|
setSubmitDeploy({ ...submitDeploy, update_value: v.target.value })
|
|
}
|
|
const handleComeTime = (v) => {
|
|
setSubmitDeploy({ ...submitDeploy, update_value: v.target.value })
|
|
}
|
|
const cancelBtn = () => {
|
|
setOrderVisible(false)
|
|
setSubmitDeploy({ change_content: '', update_value: '', plate_type: '', deal_reason: '' })
|
|
setGetAdjustTimeValue(1)
|
|
setGetValueList({})
|
|
}
|
|
const submitBtn = () => {
|
|
let data = {
|
|
...submitDeploy,
|
|
id: [getImg.parkRecordId],
|
|
examine_reason_id: submitDeploy.change_content,
|
|
examine_reason: submitDeploy.deal_reason
|
|
}
|
|
if (submitDeploy.deal_reason === '') {
|
|
message.error('请输入处理理由')
|
|
} else if (submitDeploy.change_content === '') {
|
|
message.error('请选择对应的更改项')
|
|
}else if (submitDeploy.update_value === '') {
|
|
message.error('请输入对应的更改项')
|
|
}else {
|
|
ajax.submitData(data).then(res => {
|
|
if (res.status === 20000) {
|
|
setOrderVisible(false)
|
|
setImgVisible(false)
|
|
setSubmitDeploy({ change_content: '', update_value: '', plate_type: '', deal_reason: '' })
|
|
setGetAdjustTimeValue(1)
|
|
setGetValueList({})
|
|
} else {
|
|
message.error(res.message)
|
|
}
|
|
})
|
|
}
|
|
|
|
}
|
|
const exportData = () => {
|
|
let data = {
|
|
...formData
|
|
}
|
|
ajax.exportDataList(data).then(res => {
|
|
window.open(res.data.export_url)
|
|
})
|
|
}
|
|
const checkPic = () => {
|
|
setEvidenceVisible(true)
|
|
}
|
|
const evidenceModal = () => {
|
|
setEvidenceVisible(false)
|
|
}
|
|
const closePic = () => {
|
|
setEvidenceVisible(false)
|
|
}
|
|
useEffect(() => {
|
|
getData()
|
|
}, [])
|
|
return <>
|
|
<div className="paid-CallbackSuggestion">
|
|
<div className="paid-search">
|
|
<label className="search">查询条件</label>
|
|
<div className="yisa-search">
|
|
<label>意见ID</label>
|
|
<Input
|
|
placeholder="请输入准确信息"
|
|
value={formData.carAppealId}
|
|
style={{ width: 270, marginLeft: 14 }}
|
|
onChange={handleCarAppealId}
|
|
/>
|
|
</div>
|
|
<div className="yisa-search">
|
|
<label>手机号</label>
|
|
<Input
|
|
placeholder="请输入准确信息"
|
|
value={formData.mobile}
|
|
style={{ width: 270, marginLeft: 14 }}
|
|
onChange={handleMobile}
|
|
/>
|
|
</div>
|
|
<div className="yisa-search">
|
|
<label>标题</label>
|
|
<Input
|
|
placeholder="请输入准确信息"
|
|
value={formData.content}
|
|
style={{ width: 270, marginLeft: 28 }}
|
|
onChange={handleContent}
|
|
/>
|
|
</div>
|
|
<div className="yisa-search">
|
|
<label>意见状态</label>
|
|
<Select
|
|
style={{ width: 270 }}
|
|
placeholder="请选择"
|
|
value={formData.operateType}
|
|
options={[
|
|
{
|
|
value: 0,
|
|
label: '全部'
|
|
},
|
|
{
|
|
value: 1,
|
|
label: '待回复'
|
|
}, {
|
|
value: 2,
|
|
label: '已回复'
|
|
}
|
|
]}
|
|
onChange={handleStatus}
|
|
/>
|
|
</div>
|
|
<div className="yisa-search">
|
|
<label>意见类型</label>
|
|
<Select
|
|
style={{ width: 270 }}
|
|
placeholder="请选择"
|
|
value={formData.adviseType}
|
|
options={sysConfig.feedbackType}
|
|
onChange={handleAdviseType}
|
|
/>
|
|
</div>
|
|
<div className="yisa-time">
|
|
<label>最后信息时间</label>
|
|
<Space direction="vertical" size={12}>
|
|
<RangePicker
|
|
value={[moment(formData.start_time), moment(formData.end_time)]}
|
|
showTime={{
|
|
format: 'HH:mm:ss',
|
|
}}
|
|
allowClear={false}
|
|
style={{ width: 344 }}
|
|
format="YYYY-MM-DD HH:mm:ss"
|
|
onChange={onChange}
|
|
/>
|
|
</Space>
|
|
<QuickMenu
|
|
dropdownData={[
|
|
{ text: '昨日', value: 1 },
|
|
{ text: '今日', value: 0 },
|
|
{ text: '近三日', value: 2 },
|
|
{ text: '近一周', value: 6 },
|
|
{ text: '近一月', value: 29 },
|
|
{ text: '近半年', value: 180 },
|
|
{ text: '近一年', value: 365 },
|
|
{ text: '近两年', value: 730 },
|
|
]}
|
|
onChange={(v) => {
|
|
setFormData({ ...formData, start_time: v.startDateTime, end_time: v.endDateTime })
|
|
}} />
|
|
</div>
|
|
<div className="timePicker ">
|
|
<div className="btnBox">
|
|
<Button className="yisa-btn colorReset reset" onClick={() => { getResetData() }}>
|
|
重置
|
|
</Button>
|
|
<Button type="primary" className="yisa-btn colorBtn submit" onClick={() => { getSearchData() }}>
|
|
查询
|
|
</Button>
|
|
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div className="paid-result">
|
|
<div className="result">
|
|
<div className="result-info-row">
|
|
<span className="font">共检索到<em>{resultData.total_records}</em>条结果</span>
|
|
<Button type="primary" className="yisa-btn colorBtn" onClick={() => { exportData() }}>
|
|
导出
|
|
</Button>
|
|
</div>
|
|
<ResultFlowResult ajaxLoad={ajaxLoading} resultData={resultData.data ? resultData.data : []}>
|
|
<Table
|
|
bordered
|
|
// className='yisa-table'
|
|
dataSource={resultData.data}
|
|
columns={
|
|
handleColumns()
|
|
}
|
|
pagination={false}
|
|
loading={ajaxLoading}
|
|
/>
|
|
<Pagination
|
|
className="pagination-common"
|
|
showSizeChanger
|
|
showQuickJumper
|
|
showTotal={() => `共 ${resultData.total_records} 条`}
|
|
total={resultData.total_records}
|
|
current={formData.pn}
|
|
pageSize={formData.page_size}
|
|
pageSizeOptions={pageSizeOptions}
|
|
onChange={changePn}
|
|
onShowSizeChange={changeLength}
|
|
/>
|
|
</ResultFlowResult>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
<Modal
|
|
visible={imgVisible}
|
|
onCancel={imgModal}
|
|
footer={null}
|
|
className="checkMsg"
|
|
title='查看详情'
|
|
>
|
|
<div className="car-error">
|
|
<div className="car-msg">
|
|
<div className="plate">
|
|
意见ID:<span className="font">{getImg.memberAdviseId}</span>
|
|
</div>
|
|
<div className="plate">
|
|
停车订单ID:<span className="font">{getImg.parkRecordId}</span>
|
|
</div>
|
|
<div className="plate">
|
|
出场时间:<span className="font">{getImg.strExitTime}</span>
|
|
</div>
|
|
</div>
|
|
<div className="car-msg">
|
|
<div className="plate">
|
|
手机号:<span className="font">{getImg.memberName}</span>
|
|
</div>
|
|
<div className="plate">
|
|
车牌号:<span className="font">{getImg.plateNumber}</span>
|
|
</div>
|
|
</div>
|
|
<div className="car-msg">
|
|
<div className="plate">
|
|
类型:<span className="font">{getImg.adviseType}</span>
|
|
</div>
|
|
<div className="plate">
|
|
停车场名称:<span className="font">{getImg.parkName}</span>
|
|
</div>
|
|
</div>
|
|
<div className="car-msg">
|
|
<div className="plate">
|
|
状态:<span className="font">{getImg.adviseStatus}</span>
|
|
</div>
|
|
<div className="plate">
|
|
入场时间:<span className="font">{getImg.strEntryTime}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div className="deal"><button onClick={handleDeal}>去处理</button></div>
|
|
<div className="id-msg">
|
|
<div className="feedback">
|
|
<div className="title"><span>意见反馈</span></div>
|
|
<div className="message">
|
|
{
|
|
getImgList.map((res, index) => {
|
|
console.log(res);
|
|
return (
|
|
<div className="content">
|
|
{res.type == '1' ?
|
|
<div className="feedbackMsg">
|
|
<div className="margin-msg">
|
|
<div className="time">{res.adviseTime}</div>
|
|
<div className="concent">意见内容:<span>{res.content}</span></div>
|
|
<div className="picFlex">
|
|
<div className="pic">
|
|
{res.answerImgMap.length ?
|
|
res.answerImgMap.map(res => {
|
|
return (
|
|
|
|
<Image src={res} />
|
|
)
|
|
}) : ''
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
:
|
|
<div className="reject">
|
|
{
|
|
res.status == 0 ? <div className="content">
|
|
<div className="reply">
|
|
<div className="margin-msg">
|
|
<div className="time">{res.replyTime}</div>
|
|
<div className="concent">{res.sysUserName}回复:<span>{res.replyContent}</span>
|
|
</div>
|
|
<div className="picFlex">
|
|
{res.answerImgMap.length ?
|
|
res.answerImgMap.map(res => {
|
|
return (
|
|
<div className="pic"><Image src={res} /></div>
|
|
)
|
|
})
|
|
: ''
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div className="rejectContent" onClick={() => { handleReject(res) }}>撤回</div>
|
|
</div>
|
|
:
|
|
<div className="reapir">你撤回了一条消息
|
|
<span className="again" onClick={() => { handleAgain(res) }}>重新编辑</span>
|
|
</div>
|
|
}
|
|
|
|
</div>
|
|
|
|
}
|
|
|
|
</div>
|
|
)
|
|
})
|
|
}
|
|
<TextArea showCount maxLength={200} value={repairData.content} className="text" onChange={onChangeText} />
|
|
<div className="uploadBtn">
|
|
<div className="upload">
|
|
<Upload
|
|
action="/PMS/api/com/common/file_upload"
|
|
listType="picture-card"
|
|
fileList={fileList}
|
|
// accept=".doc,.docx,.xml,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document"
|
|
onPreview={handlePreview}
|
|
beforeUpload={beforeUpload}
|
|
onChange={handleChange}
|
|
>
|
|
{fileList.length >= 8 ? null : uploadButton}
|
|
</Upload>
|
|
<Modal open={previewOpen} title={previewTitle} footer={null} onCancel={handleCancel}>
|
|
<img
|
|
alt="example"
|
|
style={{
|
|
width: '100%',
|
|
}}
|
|
src={previewImage}
|
|
/>
|
|
</Modal>
|
|
</div>
|
|
<div className="repairBtn">
|
|
<button onClick={handleRepair}>回复</button>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
<div className="btn"><button className="passBtn" onClick={cancelImg}>返回</button></div>
|
|
</Modal>
|
|
<Modal
|
|
visible={orderVisible}
|
|
onCancel={orderModal}
|
|
footer={null}
|
|
className="checkOrder"
|
|
title='异常订单处理记录审核'
|
|
>
|
|
<div className="error-order">
|
|
<div className="carTitle">
|
|
<span className="font">停车订单列表</span>
|
|
</div>
|
|
<Table
|
|
bordered
|
|
// className='yisa-table'
|
|
dataSource={getDealData.data}
|
|
columns={
|
|
handleDealData()
|
|
}
|
|
pagination={false}
|
|
loading={ajaxLoading}
|
|
/>
|
|
{
|
|
rotate === false ? <div className="order-detail">
|
|
<div className="park-detail">
|
|
<div className="title">车场详情</div>
|
|
<div className="park-area">
|
|
<div className="car-msg">
|
|
<div className="plate">
|
|
停车车名称:<span className="font">{getOrderData.parkName}</span>
|
|
</div>
|
|
<div className="plate">
|
|
商户名称:<span className="font">{getOrderData.operationName}</span>
|
|
</div>
|
|
<div className="plate">
|
|
车场类型::<span className="font">{getOrderData.parkTypeName}</span>
|
|
</div>
|
|
</div>
|
|
<div className="car-msg">
|
|
<div className="plate">
|
|
区域:<span className="font">{getOrderData.areaName}</span>
|
|
</div>
|
|
<div className="plate">
|
|
泊位号:<span className="font">{getOrderData.berthCode}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div className="park-detail">
|
|
<div className="title">车场详情</div>
|
|
<div className="park-area">
|
|
<div className="car-msg">
|
|
<div className="plate">
|
|
车牌号:<span className="font">{getOrderData.plateNumber}</span>
|
|
</div>
|
|
<div className="plate">
|
|
入场时间:<span className="font">{getOrderData.strEntryTime}</span>
|
|
</div>
|
|
<div className="plate">
|
|
入场记录来源::<span className="font">{getOrderData.entryDataSourceName}</span>
|
|
</div>
|
|
<div className="plate">
|
|
出入场图像::<span className="font"><a onClick={checkPic}>查看</a></span>
|
|
</div>
|
|
</div>
|
|
<div className="car-msg">
|
|
<div className="plate">
|
|
停车时长:<span className="font">{getOrderData.parkTime}</span>
|
|
</div>
|
|
<div className="plate">
|
|
出场时间:<span className="font">{getOrderData.strExitTime}</span>
|
|
</div>
|
|
<div className="plate">
|
|
出场记录来源:<span className="font">{getOrderData.exitDataSourceName}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div className="park-detail">
|
|
<div className="title">车辆详情</div>
|
|
<div className="park-area">
|
|
<div className="car-msg">
|
|
<div className="plate">
|
|
应收金额:<span className="font">{getOrderData.shouldPayMoney}</span>
|
|
</div>
|
|
<div className="plate">
|
|
优惠券:<span className="font">{getOrderData.coupon}</span>
|
|
</div>
|
|
</div>
|
|
<div className="car-msg">
|
|
<div className="plate">
|
|
优惠总计:<span className="font">{getOrderData.totalCoupon}</span>
|
|
</div>
|
|
<div className="plate">
|
|
实付总计:<span className="font">{getOrderData.totalPreMoney}</span>
|
|
</div>
|
|
<div className="plate">
|
|
欠费总计:<span className="font">{getOrderData.sumActualPay}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div> : ''
|
|
}
|
|
<div className="carTitle">
|
|
<span className="font">异常停车处理信息</span>
|
|
</div>
|
|
<div className="deal-reason">
|
|
<div className="logpTip">
|
|
<div className="redLogo">*</div>
|
|
<div className="title">处理理由</div>
|
|
</div>
|
|
<TextArea showCount maxLength={30} value={submitDeploy.deal_reason} className="text" onChange={onChangeReason} />
|
|
</div>
|
|
<div className="deal-style">
|
|
<div className="title">处理方式</div>
|
|
<div className="yisa-search">
|
|
<div className="redLogo">*</div>
|
|
<label style={{width:56}}> 更改项</label>
|
|
<Select
|
|
style={{ width: 200 }}
|
|
placeholder="请选择"
|
|
placement='topRight'
|
|
value={submitDeploy.change_content}
|
|
options={[
|
|
{
|
|
value: 1,
|
|
label: '调整出场时间'
|
|
},
|
|
{
|
|
value: 2,
|
|
label: '变更车牌号'
|
|
},
|
|
{
|
|
value: 3,
|
|
label: '变更订单金额'
|
|
},
|
|
{
|
|
value: 4,
|
|
label: '免费该订单'
|
|
},
|
|
// {
|
|
// value: 5,
|
|
// label: '作废该订单'
|
|
// }
|
|
]}
|
|
onChange={handleChoose}
|
|
/>
|
|
{getValueList === 1 ?
|
|
<>
|
|
<label style={{width:76,marginLeft: 30 }}>调整基于:</label>
|
|
<Select
|
|
style={{ width: 200 }}
|
|
placeholder="请选择"
|
|
placement='topRight'
|
|
value={submitDeploy.adjustTime}
|
|
options={[
|
|
{
|
|
value: 1,
|
|
label: '具体时间日期'
|
|
},
|
|
{
|
|
value: 2,
|
|
label: '记录入场时间'
|
|
}
|
|
]}
|
|
onChange={handleAdjust}
|
|
/>
|
|
<div className="redLogo" style={{ marginLeft: 30 }}>*</div>
|
|
<label style={{width:60}}>调整为:</label>
|
|
{
|
|
getAdjustTimeValue === 1 ?
|
|
<DatePicker
|
|
format="YYYY-MM-DD HH:mm:ss"
|
|
placement='topRight'
|
|
value={parseDate(submitDeploy?.update_value, 'YYYY-MM-DD HH:mm:ss')}
|
|
style={{ width: 300 }}
|
|
showTime
|
|
onChange={handleAdjustTime}
|
|
/> : ''
|
|
}
|
|
{
|
|
getAdjustTimeValue === 2 ?
|
|
<div className="comeTime" style={{ display: "contents" }}>
|
|
<label>入场时间+</label>
|
|
<Input
|
|
placeholder="请输入数字"
|
|
value={submitDeploy.update_value}
|
|
style={{ width: 150 }}
|
|
onChange={handleComeTime}
|
|
/>
|
|
<label>秒</label>
|
|
</div> : ''
|
|
}
|
|
</> : ''
|
|
}
|
|
{
|
|
getValueList === 2 ?
|
|
<>
|
|
<div className="redLogo" style={{ marginLeft: 30 }}>*</div>
|
|
<label >车牌号:</label>
|
|
<Select
|
|
style={{ width: 100 }}
|
|
placeholder="请选择"
|
|
placement='topRight'
|
|
value={submitDeploy.plate_type}
|
|
options={sysConfig.plateColor}
|
|
onChange={handlePlateColor}
|
|
/>
|
|
<Input
|
|
placeholder="请输入内容"
|
|
value={submitDeploy.update_value}
|
|
style={{ width: 150 }}
|
|
onChange={handlePlateNumber}
|
|
/>
|
|
</> : ''
|
|
}
|
|
{
|
|
getValueList === 3 ? <>
|
|
<div className="redLogo" style={{ marginLeft: 30 }}>*</div>
|
|
<label >增/减:</label>
|
|
<Select
|
|
style={{ width: 100 }}
|
|
placeholder="请选择"
|
|
value={1}
|
|
disabled={true}
|
|
options={[
|
|
{
|
|
value: 1,
|
|
label: '减'
|
|
},
|
|
{
|
|
value: 2,
|
|
label: '增'
|
|
}
|
|
]}
|
|
onChange={handleAdd}
|
|
/>
|
|
<div className="redLogo" style={{ marginLeft: 30 }}>*</div>
|
|
<label>金额-</label>
|
|
<Input
|
|
placeholder="请输入内容"
|
|
value={submitDeploy.update_value}
|
|
style={{ width: 150 }}
|
|
onChange={handleAddCount}
|
|
/>
|
|
</> : ''
|
|
}
|
|
|
|
</div>
|
|
</div>
|
|
<div className="deal-btn">
|
|
<button className="submit" onClick={submitBtn}>提交审核</button>
|
|
<button className="cancel" onClick={cancelBtn}>关闭窗口</button>
|
|
</div>
|
|
</div>
|
|
</Modal>
|
|
<Modal
|
|
visible={evidenceVisible}
|
|
onCancel={evidenceModal}
|
|
footer={null}
|
|
className="checkevidence"
|
|
title='证据图像查看'
|
|
>
|
|
<div className="admissionPic">
|
|
<div className="pic">
|
|
<div className="carTitle">
|
|
<span className="font">入场图像</span>
|
|
</div>
|
|
<div className="car-plate">
|
|
<div className="carPic">
|
|
<div className="name">车辆照片</div>
|
|
<div className="pic">
|
|
{
|
|
getOrderData.admissionPic === '' ? <div className="nodate">暂无数据</div> : <Image src={getOrderData.admissionPic} />
|
|
}
|
|
|
|
</div>
|
|
</div>
|
|
<div className="plate">
|
|
<div className="name">车牌照片</div>
|
|
<div className="pic">
|
|
{
|
|
getOrderData.admissionPicPlate === '' ? <div className="nodate">暂无数据</div> : <Image src={getOrderData.admissionPicPlate} />
|
|
}
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div className="exitPic">
|
|
<div className="carTitle">
|
|
<span className="font">出场图像</span>
|
|
</div>
|
|
<div className="car-plate">
|
|
<div className="carPic">
|
|
<div className="name">车辆照片</div>
|
|
<div className="pic">
|
|
{
|
|
getOrderData.exitionPic === '' ? <div className="nodate">暂无数据</div> : <Image src={getOrderData.exitionPic} />
|
|
}
|
|
</div>
|
|
</div>
|
|
<div className="plate">
|
|
<div className="name">车牌照片</div>
|
|
<div className="pic">
|
|
{
|
|
getOrderData.exitionPicPlate === '' ? <div className="nodate">暂无数据</div> : <Image src={getOrderData.exitionPicPlate} />
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div className="btn">
|
|
<button onClick={closePic}>关闭窗口</button>
|
|
</div>
|
|
</div>
|
|
</Modal>
|
|
</>
|
|
}
|
|
|
|
export default CallbackSuggestion;
|