feat(violation): 添加违章处理状态选择功能
- 新增处理状态字段,默认值为"未处理" - 添加状态选择器组件,支持选择"未处理"和"已处理" - 更新表单初始化逻辑,兼容编辑和新增模式下的状态设置 - 调整API基础URL配置,统一使用生产环境地址 - 更新应用名称为"邕递+" - 车辆信息模型增加保单图片字段 -优化车辆查询页面,显示保单图片预览功能 - 更新违章列表页面,将"提交时间"改为"创建时间"显示
This commit is contained in:
@@ -2,14 +2,14 @@
|
|||||||
export const ENV_CONFIG = {
|
export const ENV_CONFIG = {
|
||||||
// 开发环境
|
// 开发环境
|
||||||
development: {
|
development: {
|
||||||
API_BASE_URL: 'http://127.0.0.1/api',
|
API_BASE_URL: 'https://cms-api.websoft.top/api',
|
||||||
APP_NAME: '开发环境',
|
APP_NAME: '开发环境',
|
||||||
DEBUG: 'true',
|
DEBUG: 'true',
|
||||||
},
|
},
|
||||||
// 生产环境
|
// 生产环境
|
||||||
production: {
|
production: {
|
||||||
API_BASE_URL: 'https://cms-api.websoft.top/api',
|
API_BASE_URL: 'https://cms-api.websoft.top/api',
|
||||||
APP_NAME: '时里院子市集',
|
APP_NAME: '邕递+',
|
||||||
DEBUG: 'false',
|
DEBUG: 'false',
|
||||||
},
|
},
|
||||||
// 测试环境
|
// 测试环境
|
||||||
|
|||||||
@@ -38,6 +38,8 @@ export interface HjmCar {
|
|||||||
driverName?: string;
|
driverName?: string;
|
||||||
// 保险状态
|
// 保险状态
|
||||||
insuranceStatus?: number;
|
insuranceStatus?: number;
|
||||||
|
// 保单图片
|
||||||
|
bdImg?: string;
|
||||||
// GPS设备编号
|
// GPS设备编号
|
||||||
gpsNo?: string;
|
gpsNo?: string;
|
||||||
// 速度
|
// 速度
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import {HjmCar} from "@/api/hjm/hjmCar/model";
|
|||||||
import './location.scss';
|
import './location.scss';
|
||||||
import {Swiper} from '@nutui/nutui-react-taro'
|
import {Swiper} from '@nutui/nutui-react-taro'
|
||||||
import {copyText} from "@/utils/common";
|
import {copyText} from "@/utils/common";
|
||||||
import {View} from '@tarojs/components'
|
import {View,Text} from '@tarojs/components'
|
||||||
import {
|
import {
|
||||||
Form,
|
Form,
|
||||||
Button,
|
Button,
|
||||||
@@ -43,6 +43,8 @@ const Query = () => {
|
|||||||
const [dict, setDict] = useState<DictData[]>([])
|
const [dict, setDict] = useState<DictData[]>([])
|
||||||
const [claimVehicle, setClaimVehicle] = useState<boolean>(false)
|
const [claimVehicle, setClaimVehicle] = useState<boolean>(false)
|
||||||
const [showPreview, setShowPreview] = useState(false)
|
const [showPreview, setShowPreview] = useState(false)
|
||||||
|
const [showBdImgPreview, setShowBdImgPreview] = useState(false)
|
||||||
|
const [fileList2, setFileList2] = useState<UploadedImageData[]>([]) // 图片文件列表
|
||||||
const [disabled, setDisabled] = useState<boolean>(false)
|
const [disabled, setDisabled] = useState<boolean>(false)
|
||||||
const [fileList, setFileList] = useState<UploadedImageData[]>([]) // 图片文件列表
|
const [fileList, setFileList] = useState<UploadedImageData[]>([]) // 图片文件列表
|
||||||
const [FormData, setFormData] = useState<HjmCar>(
|
const [FormData, setFormData] = useState<HjmCar>(
|
||||||
@@ -321,8 +323,8 @@ const Query = () => {
|
|||||||
// 认领车辆
|
// 认领车辆
|
||||||
const onClaimVehicle = async () => {
|
const onClaimVehicle = async () => {
|
||||||
const myVerify = await myUserVerify({status: 1})
|
const myVerify = await myUserVerify({status: 1})
|
||||||
if(myVerify){
|
if (myVerify) {
|
||||||
if(myVerify.organizationId != FormData.organizationId){
|
if (myVerify.organizationId != FormData.organizationId) {
|
||||||
Taro.showToast({
|
Taro.showToast({
|
||||||
title: '只能认领【' + myVerify.organizationName + '】的车辆',
|
title: '只能认领【' + myVerify.organizationName + '】的车辆',
|
||||||
icon: 'none'
|
icon: 'none'
|
||||||
@@ -448,7 +450,7 @@ const Query = () => {
|
|||||||
// 2.1先查询名下有多少辆车
|
// 2.1先查询名下有多少辆车
|
||||||
const carCount = await pageHjmCar({driverId: Taro.getStorageSync('UserId')})
|
const carCount = await pageHjmCar({driverId: Taro.getStorageSync('UserId')})
|
||||||
carCount?.list.map(d => {
|
carCount?.list.map(d => {
|
||||||
if(d.code == code){
|
if (d.code == code) {
|
||||||
// 只能绑定一辆车
|
// 只能绑定一辆车
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -461,6 +463,20 @@ const Query = () => {
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
if(carInfo.bdImg){
|
||||||
|
const parse = JSON.parse(carInfo.bdImg);
|
||||||
|
|
||||||
|
if(parse.length > 0){
|
||||||
|
setFileList2(parse.map(
|
||||||
|
(img) => ({
|
||||||
|
url: img.url,
|
||||||
|
src: img.url,
|
||||||
|
name: img.name,
|
||||||
|
uid: img.uid
|
||||||
|
})
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
// if(carInfo.status == 1 && Taro.getStorageSync('UserId') != carInfo.driverId){
|
// if(carInfo.status == 1 && Taro.getStorageSync('UserId') != carInfo.driverId){
|
||||||
// Taro.showToast({
|
// Taro.showToast({
|
||||||
// title: '暂无权限',
|
// title: '暂无权限',
|
||||||
@@ -611,7 +627,7 @@ const Query = () => {
|
|||||||
style={{display: 'flex', alignItems: 'center'}}
|
style={{display: 'flex', alignItems: 'center'}}
|
||||||
onClick={saveGpsNo}
|
onClick={saveGpsNo}
|
||||||
>
|
>
|
||||||
<Scan />
|
<Scan/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
@@ -761,8 +777,11 @@ const Query = () => {
|
|||||||
<Cell className={'car-info-item-title'}>
|
<Cell className={'car-info-item-title'}>
|
||||||
管理责任人:{FormData?.kuaidiAdmin}
|
管理责任人:{FormData?.kuaidiAdmin}
|
||||||
</Cell>
|
</Cell>
|
||||||
<Cell className={'car-info-item-content'}>
|
<Cell title={
|
||||||
保险状态:{FormData?.insuranceStatus}
|
<View>保险状态:{FormData?.insuranceStatus}</View>
|
||||||
|
} className={'car-info-item-content'} extra={FormData?.bdImg ? <Text className={'text-blue-500'} onClick={() => {
|
||||||
|
setShowBdImgPreview(true)
|
||||||
|
}}>查看保单</Text> : ''}>
|
||||||
</Cell>
|
</Cell>
|
||||||
<Cell className={'car-info-item-content'}>
|
<Cell className={'car-info-item-content'}>
|
||||||
GPS编号:{FormData?.gpsNo}
|
GPS编号:{FormData?.gpsNo}
|
||||||
@@ -824,6 +843,13 @@ const Query = () => {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
<ImagePreview
|
||||||
|
autoPlay
|
||||||
|
// @ts-ignore
|
||||||
|
images={fileList2}
|
||||||
|
visible={showBdImgPreview}
|
||||||
|
onClose={() => setShowBdImgPreview(false)}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import {
|
|||||||
TextArea,
|
TextArea,
|
||||||
Cell,
|
Cell,
|
||||||
Input,
|
Input,
|
||||||
|
Picker
|
||||||
} from '@nutui/nutui-react-taro'
|
} from '@nutui/nutui-react-taro'
|
||||||
import {addHjmViolation, getHjmViolation, updateHjmViolation} from "@/api/hjm/hjmViolation";
|
import {addHjmViolation, getHjmViolation, updateHjmViolation} from "@/api/hjm/hjmViolation";
|
||||||
import {HjmViolation} from "@/api/hjm/hjmViolation/model";
|
import {HjmViolation} from "@/api/hjm/hjmViolation/model";
|
||||||
@@ -17,12 +18,19 @@ function Add() {
|
|||||||
const [loading, setLoading] = useState<boolean>(false)
|
const [loading, setLoading] = useState<boolean>(false)
|
||||||
const [lastSubmitTime, setLastSubmitTime] = useState<number>(0) // 最后提交时间
|
const [lastSubmitTime, setLastSubmitTime] = useState<number>(0) // 最后提交时间
|
||||||
const [isEditMode, setIsEditMode] = useState<boolean>(false) // 是否为编辑模式
|
const [isEditMode, setIsEditMode] = useState<boolean>(false) // 是否为编辑模式
|
||||||
|
const [isPickerVisible, setIsPickerVisible] = useState<boolean>(false) // 处理状态选择器可见性
|
||||||
|
// 处理状态选项
|
||||||
|
const statusOptions = [
|
||||||
|
{text: '未处理', value: 0},
|
||||||
|
{text: '已处理', value: 1}
|
||||||
|
]
|
||||||
const [formData, setFormData] = useState<HjmViolation>({
|
const [formData, setFormData] = useState<HjmViolation>({
|
||||||
code: '',
|
code: '',
|
||||||
title: '',
|
title: '',
|
||||||
money: '',
|
money: '',
|
||||||
score: '',
|
score: '',
|
||||||
comments: ''
|
comments: '',
|
||||||
|
status: 0 // 默认为未处理
|
||||||
})
|
})
|
||||||
|
|
||||||
// 初始化页面数据
|
// 初始化页面数据
|
||||||
@@ -35,7 +43,10 @@ function Add() {
|
|||||||
try {
|
try {
|
||||||
const violation = await getHjmViolation(Number(params.id));
|
const violation = await getHjmViolation(Number(params.id));
|
||||||
if (violation) {
|
if (violation) {
|
||||||
setFormData(violation);
|
setFormData({
|
||||||
|
...violation,
|
||||||
|
status: violation.status ?? 0 // 如果没有状态值,默认为0(未处理)
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
Taro.showToast({
|
Taro.showToast({
|
||||||
title: '未找到该违章记录',
|
title: '未找到该违章记录',
|
||||||
@@ -49,6 +60,12 @@ function Add() {
|
|||||||
icon: 'none'
|
icon: 'none'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// 新增模式下设置默认状态
|
||||||
|
setFormData(prev => ({
|
||||||
|
...prev,
|
||||||
|
status: 0
|
||||||
|
}))
|
||||||
}
|
}
|
||||||
setLoading(false)
|
setLoading(false)
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -113,12 +130,7 @@ function Add() {
|
|||||||
Taro.eventCenter.trigger('violationListRefresh')
|
Taro.eventCenter.trigger('violationListRefresh')
|
||||||
} else {
|
} else {
|
||||||
// 新增模式 - 添加违章记录
|
// 新增模式 - 添加违章记录
|
||||||
// 构建提交数据
|
await addHjmViolation(formData);
|
||||||
const submitData: HjmViolation = {
|
|
||||||
...formData,
|
|
||||||
status: 0 // 0未处理, 1已处理
|
|
||||||
}
|
|
||||||
await addHjmViolation(submitData);
|
|
||||||
Taro.showToast({
|
Taro.showToast({
|
||||||
title: '提交成功',
|
title: '提交成功',
|
||||||
icon: 'success'
|
icon: 'success'
|
||||||
@@ -131,7 +143,8 @@ function Add() {
|
|||||||
title: '',
|
title: '',
|
||||||
money: '',
|
money: '',
|
||||||
score: '',
|
score: '',
|
||||||
comments: ''
|
comments: '',
|
||||||
|
status: 0
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -148,6 +161,15 @@ function Add() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 处理状态选择确认
|
||||||
|
const handleStatusConfirm = (_: any[], values: (string | number)[]) => {
|
||||||
|
setFormData({
|
||||||
|
...formData,
|
||||||
|
status: values[0] as number
|
||||||
|
})
|
||||||
|
setIsPickerVisible(false)
|
||||||
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
initPageData().then(r => {
|
initPageData().then(r => {
|
||||||
console.log(r, 'rr')
|
console.log(r, 'rr')
|
||||||
@@ -198,7 +220,7 @@ function Add() {
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<Cell.Group>
|
<Cell.Group>
|
||||||
<Cell title="车辆编号" style={{padding: '12px 16px'}}>
|
<Cell title={'车辆编号'} description={'请填写车辆编号'} extra={
|
||||||
<Input
|
<Input
|
||||||
placeholder="YT000001"
|
placeholder="YT000001"
|
||||||
value={formData.code}
|
value={formData.code}
|
||||||
@@ -206,24 +228,29 @@ function Add() {
|
|||||||
style={{backgroundColor: '#ffffff', borderRadius: '8px'}}
|
style={{backgroundColor: '#ffffff', borderRadius: '8px'}}
|
||||||
disabled={isEditMode} // 编辑模式下禁用车辆编号输入
|
disabled={isEditMode} // 编辑模式下禁用车辆编号输入
|
||||||
/>
|
/>
|
||||||
|
} style={{padding: '12px 16px'}}>
|
||||||
</Cell>
|
</Cell>
|
||||||
<Cell title="违章标题" style={{padding: '12px 16px'}}>
|
<Cell title="违章项目" description={'逆行|闯红灯|不按规定停车'} extra={
|
||||||
<Input
|
<Input
|
||||||
placeholder="不按规定停车"
|
placeholder="不按规定停车"
|
||||||
value={formData.title}
|
value={formData.title}
|
||||||
onChange={(value) => setFormData({...formData, title: value})}
|
onChange={(value) => setFormData({...formData, title: value})}
|
||||||
style={{backgroundColor: '#ffffff', borderRadius: '8px'}}
|
style={{backgroundColor: '#ffffff', borderRadius: '8px'}}
|
||||||
/>
|
/>
|
||||||
|
} style={{padding: '12px 16px'}}>
|
||||||
|
|
||||||
</Cell>
|
</Cell>
|
||||||
<Cell title="违章描述" style={{padding: '12px 16px'}}>
|
<Cell title="违章描述" description="违章描述" extra={
|
||||||
<TextArea
|
<TextArea
|
||||||
placeholder={'XX路1号...'}
|
placeholder={'XX路1号...'}
|
||||||
value={formData.comments}
|
value={formData.comments}
|
||||||
onChange={(value) => setFormData({...formData, comments: value})}
|
onChange={(value) => setFormData({...formData, comments: value})}
|
||||||
style={{backgroundColor: '#ffffff', borderRadius: '8px'}}
|
style={{backgroundColor: '#ffffff', borderRadius: '8px'}}
|
||||||
/>
|
/>
|
||||||
|
} style={{padding: '12px 16px'}}>
|
||||||
|
|
||||||
</Cell>
|
</Cell>
|
||||||
<Cell title="处罚金额" style={{padding: '12px 16px'}}>
|
<Cell title="处罚金额" extra={
|
||||||
<Input
|
<Input
|
||||||
type="number"
|
type="number"
|
||||||
placeholder="200(元)"
|
placeholder="200(元)"
|
||||||
@@ -232,8 +259,10 @@ function Add() {
|
|||||||
onChange={(value) => setFormData({...formData, money: value})}
|
onChange={(value) => setFormData({...formData, money: value})}
|
||||||
style={{backgroundColor: '#ffffff', borderRadius: '8px'}}
|
style={{backgroundColor: '#ffffff', borderRadius: '8px'}}
|
||||||
/>
|
/>
|
||||||
|
} style={{padding: '12px 16px'}}>
|
||||||
|
|
||||||
</Cell>
|
</Cell>
|
||||||
<Cell title="扣分" style={{padding: '12px 16px'}}>
|
<Cell title="扣分" extra={
|
||||||
<Input
|
<Input
|
||||||
type="number"
|
type="number"
|
||||||
maxLength={2}
|
maxLength={2}
|
||||||
@@ -242,10 +271,35 @@ function Add() {
|
|||||||
onChange={(value) => setFormData({...formData, score: value})}
|
onChange={(value) => setFormData({...formData, score: value})}
|
||||||
style={{backgroundColor: '#ffffff', borderRadius: '8px'}}
|
style={{backgroundColor: '#ffffff', borderRadius: '8px'}}
|
||||||
/>
|
/>
|
||||||
|
} style={{padding: '12px 16px'}}>
|
||||||
|
|
||||||
|
</Cell>
|
||||||
|
<Cell title="处理状态" description={'请选择'} extra={
|
||||||
|
<div style={{
|
||||||
|
display: 'flex',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'flex-end',
|
||||||
|
height: '24px'
|
||||||
|
}}>
|
||||||
|
<span style={{color: '#333', fontSize: '14px'}}>
|
||||||
|
{statusOptions.find(option => option.value === formData.status)?.text || '请选择'}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
} style={{padding: '12px 16px'}} onClick={() => setIsPickerVisible(true)}>
|
||||||
</Cell>
|
</Cell>
|
||||||
</Cell.Group>
|
</Cell.Group>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{/* 处理状态选择器 */}
|
||||||
|
<Picker
|
||||||
|
visible={isPickerVisible}
|
||||||
|
options={statusOptions}
|
||||||
|
value={[formData.status ?? 0]}
|
||||||
|
onConfirm={handleStatusConfirm}
|
||||||
|
onCancel={() => setIsPickerVisible(false)}
|
||||||
|
onClose={() => setIsPickerVisible(false)}
|
||||||
|
/>
|
||||||
|
|
||||||
{/* 提交按钮 */}
|
{/* 提交按钮 */}
|
||||||
<div style={{
|
<div style={{
|
||||||
position: 'fixed',
|
position: 'fixed',
|
||||||
|
|||||||
@@ -249,7 +249,7 @@ const List: React.FC = () => {
|
|||||||
}}>
|
}}>
|
||||||
<Calendar size={14} color="#8c8c8c"/>
|
<Calendar size={14} color="#8c8c8c"/>
|
||||||
<span style={{fontSize: '13px', color: '#8c8c8c'}}>
|
<span style={{fontSize: '13px', color: '#8c8c8c'}}>
|
||||||
提交时间:{item.createTime}
|
创建时间:{item.createTime}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</Space>
|
</Space>
|
||||||
|
|||||||
Reference in New Issue
Block a user