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