import React, { useState, useEffect } from 'react';
import Taro, { useRouter } from '@tarojs/taro';
import {
View,
RadioGroup,
Radio,
Button,
Image,
Input,
Picker
} from '@tarojs/components';
import { AtButton, AtTextarea, AtImagePicker, AtAvatar } from 'taro-ui';
import InputPicker from '../components/inputPicker';
import request from '@/services/request';
import { postReport, getReportDetail } from '@/services/api';
import './index.scss';
import arrowIcon from '../../static/img/patrol/arrow-down.svg';
const Index = () => {
const router = useRouter()
const { params: { type } } = router
const isView = type === 'view' ? true : false
const [reportType, setReportType] = useState('patrol') // 上报类型
const [projectType, setProjectType] = useState('') // 工程类型
const [road, setRoad] = useState('') // 所在道路
const [roadSectionStart, setRoadSectionStart] = useState('') // 路段 Start
const [roadSectionEnd, setRoadSectionEnd] = useState('') // 路段 End
const [address, setAddress] = useState('') // 具体位置
const [content, setContent] = useState('') // 巡查内容
const [scenePic, setScenePic] = useState([]) // 现场图片
const [conserveBeforePic, setConserveBeforePic] = useState([]) // 养护前图片
const [conserveUnderwayPic, setConserveUnderwayPic] = useState([]) // 养护中图片
const [conserveAfterPic, setConserveAfterPic] = useState([]) // 养护后图片
const [roadStartSelector, setRoadStartSelector] = useState([])
const [roadEndSelector, setRoadEndSelector] = useState([])
const [canReport, setCanReport] = useState(true)
const [typeList, setTypeList] = useState([
{
value: 'patrol',
text: '巡查',
checked: true
},
{
value: 'conserve',
text: '养护',
checked: false
}
])
const rPrjTypeSelector = ['道路', '桥梁', '涵洞', '其他']
const rRoadSelector = ['富山一路', '金沙大道', '玉湖路']
const rRoadStartSelector = ['一段', '二段', '三段']
const rRoadEndSelector = ['一段', '二段', '三段']
useEffect(() => {
if (isView) {
Taro.showLoading({
title: '加载中'
})
request.get(getReportDetail(router.params.id)).then(res => {
Taro.hideLoading()
if (res.statusCode == 200 || res.statusCode == 204) {
const { data } = res
setReportType(data.reportType)
setProjectType(data.projectType)
setRoad(data.road)
setRoadSectionStart(data.roadSectionStart)
setRoadSectionEnd(data.roadSectionEnd)
setAddress(data.address)
setContent(data.content)
setScenePic(data.scenePic ? data.scenePic.map(item => ({ url: item })) : [])
setConserveBeforePic(data.conserveBeforePic ? data.conserveBeforePic.map(item => ({ url: item })) : [])
setConserveUnderwayPic(data.conserveUnderwayPic ? data.conserveUnderwayPic.map(item => ({ url: item })) : [])
setConserveAfterPic(data.conserveAfterPic ? data.conserveAfterPic.map(item => ({ url: item })) : [])
} else {
Taro.showToast({ title: res.data.message || '请求出错', icon: 'none' })
}
}, err => {
Taro.showToast({ title: err.message || '请求出错', icon: 'none' })
})
}
setRoadStartSelector(rRoadStartSelector)
setRoadEndSelector(rRoadEndSelector)
}, [])
useEffect(() => {
setTypeList([
{
value: 'patrol',
text: '巡查',
checked: reportType === 'patrol' ? true : false
},
{
value: 'conserve',
text: '养护',
checked: reportType === 'conserve' ? true : false
}
])
}, [reportType])
function report() {
if (!canReport) { return }
if (!projectType || !road) {
Taro.showToast({ title: '请完善必填信息', icon: 'none' })
return
}
if (rPrjTypeSelector.indexOf(projectType) === -1) {
Taro.showToast({ title: '工程类型错误', icon: 'none' })
return
}
let data = {
reportType,
projectType,
road,
roadSectionStart,
roadSectionEnd,
address,
content,
// longitude: 37.000000000000,
// latitude: 69.000000000000
}
if (reportType === 'patrol') {
data['scenePic'] = scenePic.length > 0 ? scenePic.map(item => item.url) : null
} else {
data['conserveBeforePic'] = conserveBeforePic.length > 0 ? conserveBeforePic.map(item => item.url) : null
data['conserveUnderwayPic'] = conserveUnderwayPic.length > 0 ? conserveUnderwayPic.map(item => item.url) : null
data['conserveAfterPic'] = conserveAfterPic.length > 0 ? conserveAfterPic.map(item => item.url) : null
}
Taro.showModal({
title: '提示',
content: '您要进行信息上报么?',
success: function (res) {
if (res.confirm) {
setCanReport(false)
setTimeout(() => {
setCanReport(true)
}, 3000) // 3秒内不可以重复点击
Taro.showLoading({
title: '上报中'
})
request.post(postReport(), data).then(res => {
Taro.hideLoading()
if (res.statusCode == 200 || res.statusCode == 204) {
Taro.showToast({ title: '上报成功', icon: 'none', duration: 1500 })
setTimeout(() => {
Taro.reLaunch({
url: '/pages/home/index'
});
}, 1500)
} else {
Taro.showToast({ title: res.data.message || '请求出错', icon: 'none' })
}
}, err => {
Taro.showToast({ title: err.message || '请求出错', icon: 'none' })
})
}
}
})
}
function handleInput({ detail: { value } }, type) {
switch (type) {
case 'roadSectionStart':
setRoadSectionStart(value)
if (value) {
setRoadStartSelector(rRoadStartSelector.filter(item => item.includes(value)))
} else {
setRoadStartSelector(rRoadStartSelector)
}
break;
case 'roadSectionEnd':
setRoadSectionEnd(value)
if (value) {
setRoadEndSelector(rRoadEndSelector.filter(item => item.includes(value)))
} else {
setRoadEndSelector(rRoadEndSelector)
}
break;
case 'address':
setAddress(value)
break;
case 'content':
setContent(value)
default:
break;
}
}
function handleTypeChange(e) {
setReportType(e.detail.value)
}
function handleImgChange(files, type) {
switch (type) {
case 'scenePic':
setScenePic(files)
break;
case 'conserveBeforePic':
setConserveBeforePic(files)
break;
case 'conserveUnderwayPic':
setConserveUnderwayPic(files)
break;
case 'conserveAfterPic':
setConserveAfterPic(files)
break;
default:
break;
}
}
function handleImgClick(index, file) {
Taro.previewImage({
urls: [file.url] // 需要预览的图片http链接列表
})
}
function renderAddImg() {
return (
reportType === 'patrol' ?
现场图片:
= 3 ? false : true}
files={scenePic}
onChange={files => handleImgChange(files, 'scenePic')}
onImageClick={handleImgClick}
/>
:
养护图片:
养护前
= 3 ? false : true}
files={conserveBeforePic}
onChange={files => handleImgChange(files, 'conserveBeforePic')}
onImageClick={handleImgClick}
/>
养护中
= 3 ? false : true}
files={conserveUnderwayPic}
onChange={files => handleImgChange(files, 'conserveUnderwayPic')}
onImageClick={handleImgClick}
/>
养护后
= 3 ? false : true}
files={conserveAfterPic}
onChange={files => handleImgChange(files, 'conserveAfterPic')}
onImageClick={handleImgClick}
/>
)
}
function renderViewImg() {
return (
reportType === 'patrol' ?
现场图片:
{scenePic.map(item => (
handleImgClick(undefined, item)} />
))}
:
养护图片:
养护前
{conserveBeforePic.map(item => (
handleImgClick(undefined, item)} />
))}
养护中
{conserveUnderwayPic.map(item => (
handleImgClick(undefined, item)} />
))}
养护后
{conserveAfterPic.map(item => (
handleImgClick(undefined, item)} />
))}
)
}
return (
上报类型
{
typeList.map((item, i) => {
return (
{item.text}
)
})
}
所属路段:
handleInput(e, 'roadSectionStart')}
disabled={isView}
/>
{
isView &&
setRoadSectionStart(roadStartSelector[e.detail.value])}
>
}
至
handleInput(e, 'roadSectionEnd')}
disabled={isView}
/>
{
isView &&
setRoadSectionEnd(roadEndSelector[e.detail.value])}
>
}
具体位置:
handleInput(e, 'address')}
disabled={isView}
/>
handleInput(e, 'content')}
disabled={isView}
/>
{
isView ?
renderViewImg() :
renderAddImg()
}
{
!isView && 上报
}
)
}
export default Index