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 <>
>
}
},
{
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 <>
{ CheckImg(record) }}>查看详情
>
}
}]
//图片
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 = (
);
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 <>
共检索到{resultData.total_records}条结果
`共 ${resultData.total_records} 条`}
total={resultData.total_records}
current={formData.pn}
pageSize={formData.page_size}
pageSizeOptions={pageSizeOptions}
onChange={changePn}
onShowSizeChange={changeLength}
/>
意见ID:{getImg.memberAdviseId}
停车订单ID:{getImg.parkRecordId}
出场时间:{getImg.strExitTime}
手机号:{getImg.memberName}
车牌号:{getImg.plateNumber}
类型:{getImg.adviseType}
停车场名称:{getImg.parkName}
状态:{getImg.adviseStatus}
入场时间:{getImg.strEntryTime}
意见反馈
{
getImgList.map((res, index) => {
console.log(res);
return (
{res.type == '1' ?
{res.adviseTime}
意见内容:{res.content}
{res.answerImgMap.length ?
res.answerImgMap.map(res => {
return (
)
}) : ''
}
:
{
res.status == 0 ?
{res.replyTime}
{res.sysUserName}回复:{res.replyContent}
{res.answerImgMap.length ?
res.answerImgMap.map(res => {
return (
)
})
: ''
}
{ handleReject(res) }}>撤回
:
你撤回了一条消息
{ handleAgain(res) }}>重新编辑
}
}
)
})
}
{fileList.length >= 8 ? null : uploadButton}
停车订单列表
{
rotate === false ?
车场详情
停车车名称:{getOrderData.parkName}
商户名称:{getOrderData.operationName}
车场类型::{getOrderData.parkTypeName}
区域:{getOrderData.areaName}
泊位号:{getOrderData.berthCode}
车场详情
车牌号:{getOrderData.plateNumber}
入场时间:{getOrderData.strEntryTime}
入场记录来源::{getOrderData.entryDataSourceName}
停车时长:{getOrderData.parkTime}
出场时间:{getOrderData.strExitTime}
出场记录来源:{getOrderData.exitDataSourceName}
车辆详情
应收金额:{getOrderData.shouldPayMoney}
优惠券:{getOrderData.coupon}
优惠总计:{getOrderData.totalCoupon}
实付总计:{getOrderData.totalPreMoney}
欠费总计:{getOrderData.sumActualPay}
: ''
}
异常停车处理信息
处理方式
*
{getValueList === 1 ?
<>
*
{
getAdjustTimeValue === 1 ?
: ''
}
{
getAdjustTimeValue === 2 ?
: ''
}
> : ''
}
{
getValueList === 2 ?
<>
*
> : ''
}
{
getValueList === 3 ? <>
*
*
> : ''
}
入场图像
车辆照片
{
getOrderData.admissionPic === '' ?
暂无数据
:
}
车牌照片
{
getOrderData.admissionPicPlate === '' ?
暂无数据
:
}
出场图像
车辆照片
{
getOrderData.exitionPic === '' ?
暂无数据
:
}
车牌照片
{
getOrderData.exitionPicPlate === '' ?
暂无数据
:
}
>
}
export default CallbackSuggestion;