完成:黄家明项目的开发并存档

This commit is contained in:
2025-06-18 15:58:26 +08:00
parent 26db77ee12
commit f83b856438
7 changed files with 233 additions and 197 deletions

View File

@@ -3,7 +3,7 @@ import Taro, {useRouter} from '@tarojs/taro'
import {getHjmCarByCode, pageHjmCar, updateHjmCar} from "@/api/hjm/hjmCar";
import {HjmCar} from "@/api/hjm/hjmCar/model";
import './location.scss';
import { Swiper } from '@nutui/nutui-react-taro'
import {Swiper} from '@nutui/nutui-react-taro'
import {copyText} from "@/utils/common";
import {View} from '@tarojs/components'
import {
@@ -14,14 +14,13 @@ import {
Cell,
Image
} from '@nutui/nutui-react-taro'
import { ImagePreview } from '@nutui/nutui-react-taro'
import {ImagePreview} from '@nutui/nutui-react-taro'
import {Scan} from '@nutui/icons-react-taro'
import {pageDictData} from "@/api/system/dict-data";
import {DictData} from "@/api/system/dict-data/model";
import {myUserVerify} from "@/api/system/userVerify";
import {listUserRole, updateUserRole} from "@/api/system/userRole";
import {UserRole} from "@/api/system/userRole/model";
import {updateUser} from "@/api/system/user";
import {listUserRole} from "@/api/system/userRole";
import {TenantId} from "@/utils/config";
// 图片数据接口
interface UploadedImageData {
@@ -41,10 +40,9 @@ const Query = () => {
const {params} = useRouter();
const [keywords, setKeywords] = useState<string>()
const [dict, setDict] = useState<DictData[]>([])
const [adminId, setAdminId] = useState<number>()
const [claimVehicle, setClaimVehicle] = useState<boolean>(false)
const [showPreview, setShowPreview] = useState(false)
const [disabled, setDisabled] = useState<boolean>(false)
const [userRole, setUserRole] = useState<UserRole>()
const [fileList, setFileList] = useState<UploadedImageData[]>([]) // 图片文件列表
const [FormData, setFormData] = useState<HjmCar>(
{
@@ -108,55 +106,40 @@ const Query = () => {
// 提交表单
const submitSucceed = (values: any) => {
// 禁用按钮
if(disabled){
if (disabled) {
return false;
}
console.log(values)
if(FormData.image == '[]' || !FormData.image){
if (FormData.image == '[]' || !FormData.image) {
Taro.showToast({
title: '请上传车辆图片',
icon: 'error'
});
return false
// return false
}
if(!FormData.gpsNo){
if (!FormData.gpsNo) {
Taro.showToast({
title: '请绑定GPS',
icon: 'error'
});
return false
}
// 升级为快递员
if(userRole){
updateHjmCar({
...FormData,
status: 1,
driverId: adminId,
driverName: Taro.getStorageSync('RealName')
}).then(() => {
Taro.showToast({title: `绑定成功`, icon: 'success'})
// 变更角色
if (Taro.getStorageSync('OrganizationParentId') > 0) {
userRole.roleId = 1738;
updateUserRole(userRole).then(() => {
Taro.showToast({title: `绑定成功`, icon: 'success'})
})
updateUser({
userId: Taro.getStorageSync('UserId'),
organizationId: FormData.organizationId
}).then(() => {})
}
setTimeout(() => {
reload();
return Taro.navigateBack()
}, 1000)
}).catch(() => {
Taro.showToast({
title: '绑定失败',
icon: 'error'
});
})
}
// 安装车辆
updateHjmCar({
...FormData,
status: 1
}).then(() => {
Taro.showToast({title: `绑定成功`, icon: 'success'})
setTimeout(() => {
return Taro.navigateBack()
}, 1000)
}).catch((err) => {
Taro.showToast({
title: err.message,
icon: 'none'
});
})
}
const submitFailed = (error: any) => {
@@ -174,7 +157,7 @@ const Query = () => {
gpsNo: res.result
});
Taro.showToast({
title: '扫码成功' + res.result,
title: res.result,
icon: 'success',
duration: 2000
});
@@ -192,6 +175,13 @@ const Query = () => {
// 选择并上传图片
const handleChooseImage = () => {
if (disabled) {
Taro.showToast({
title: '您不是安装人员',
icon: 'error'
});
return false;
}
if (fileList.length >= 5) {
Taro.showToast({
title: '最多只能上传5张图片',
@@ -224,7 +214,6 @@ const Query = () => {
// 上传单张图片
const uploadSingleImage = (filePath: any, index: number) => {
const TenantId = Taro.getStorageSync('TenantId')
Taro.uploadFile({
url: 'https://server.gxwebsoft.com/api/oss/upload',
@@ -318,108 +307,128 @@ const Query = () => {
}
}
// 打开地图选择位置
// const chooseLocation = async () => {
// try {
// const res = await Taro.chooseLocation({
// latitude, // 默认纬度
// longitude // 默认经度
// })
// console.log('选择的位置:', res);
// } catch (err) {
// console.error('选择位置失败:', err);
// }
// }
const reload = () => {
// 认领车辆
const onClaimVehicle = () => {
updateHjmCar({
...FormData,
status: 2,
driverId: Taro.getStorageSync('UserId'),
driverName: Taro.getStorageSync('RealName')
}).then(() => {
Taro.showToast({title: `认领成功`, icon: 'success'})
setTimeout(() => {
return Taro.navigateBack()
}, 1000)
}).catch((err) => {
Taro.showToast({
title: err.message,
icon: 'none'
});
})
}
const reload = async () => {
// 1.判断是否登录
if (!Taro.getStorageSync('UserId')) {
Taro.showToast({
title: '请先登录',
icon: 'error'
})
setDisabled(true);
setTimeout(() => {
Taro.navigateBack()
}, 2000)
return false
}
const code = params.id;
// 获取数据字典
pageDictData({dictCode: 'InsuranceStatus'}).then(res => {
setDict(res?.list || [])
})
// 查询角色
listUserRole({userId: Taro.getStorageSync('UserId')}).then(res => {
if(res.length > 0){
setUserRole(res[0])
}
})
// 检查是否已实名
myUserVerify({status: 1}).then(data => {
if (!data) {
Taro.showToast({
title: '未实名认证',
icon: 'error'
})
setTimeout(() => {
Taro.navigateTo({
url: '/user/userVerify/index'
})
}, 1000)
return false
}
if(data){
setAdminId(data.userId);
setFormData( {...FormData, driverName: Taro.getStorageSync('RealName')})
}
})
// 获取车辆信息
if (code) {
getHjmCarByCode(code).then(data => {
if(data){
setFormData(data)
setKeywords(data.code)
// 解析图片数据
if (data.image) {
try {
const parsedImages: UploadedImageData[] = JSON.parse(data.image)
setFileList(parsedImages.map((img) => ({
url: img.url,
src: img.url
})))
} catch (error) {
// 如果解析失败可能是旧格式的单个URL
if (typeof data.image === 'string' && data.image.trim()) {
setFileList([{
src: data.image,
url: data.image,
message: '上传成功',
type: 'image',
uid: `legacy_${Date.now()}`,
}])
}
// 2.获取数据字典
const dict = await pageDictData({dictCode: 'InsuranceStatus'})
setDict(dict?.list || [])
// 3.检查是否已实名
const verify = await myUserVerify({status: 1})
if (!verify) {
Taro.showToast({
title: '未实名认证',
icon: 'error'
})
setTimeout(() => {
Taro.navigateTo({
url: '/user/userVerify/index'
})
}, 1000)
return false
}
// 4.查询角色
const role = await listUserRole({userId: Taro.getStorageSync('UserId')})
const roleCode = role[0].roleCode;
// 5.获取车辆信息
const code = params.id;
if (code) {
const carInfo = await getHjmCarByCode(code);
if (carInfo) {
// 赋值车辆信息
setFormData(carInfo)
setKeywords(carInfo.code)
if (carInfo.image) {
try {
const parsedImages: UploadedImageData[] = JSON.parse(carInfo.image)
setFileList(parsedImages.map((img) => ({
url: img.url,
src: img.url
})))
} catch (error) {
// 如果解析失败可能是旧格式的单个URL
if (carInfo.image && carInfo.image.trim()) {
setFileList([{
src: carInfo.image,
url: carInfo.image,
message: '上传成功',
type: 'image',
uid: `legacy_${Date.now()}`,
}])
}
}
}
if (data.status == 0) {
// 1.符合条件则由安装人员安装车辆,否则提示无权限
console.log(roleCode,'roleCode..')
if (carInfo.status == 0 && roleCode != 'Installer') {
Taro.setNavigationBarTitle({
title: '安装设备'
})
Taro.showToast({
title: '您不是安装人员',
icon: 'error'
})
setDisabled(true)
return false
}
// 2.如果已安装,则判断是否已认领车辆
if (carInfo.status == 1 && roleCode == 'kuaidiyuan') {
// 2.1先查询名下有多少辆车
const carCount = await pageHjmCar({driverId: Taro.getStorageSync('UserId')})
if (carCount?.count && carCount?.count == 0) {
// 2.2无车辆则认领
setClaimVehicle(true)
Taro.setNavigationBarTitle({
title: '安装设备'
title: '认领车辆'
})
setFormData({...data})
}
// 查询名下的车辆数
if(data?.status == 0 && Taro.getStorageSync('OrganizationParentId') != 0){
pageHjmCar({driverId: Taro.getStorageSync('UserId')}).then(res => {
if(res?.count && res?.count > 0){
setDisabled(true)
Taro.showToast({
title: '可绑定数量已达上限',
icon: 'none'
})
return false;
}
} else {
// 2.3存在车辆则展示车辆信息
setClaimVehicle(false)
Taro.setNavigationBarTitle({
title: '车辆信息'
})
}
}
})
}
}
// 执行搜索
if (keywords) {
pageHjmCar({keywords}).then(res => {
@@ -434,10 +443,11 @@ const Query = () => {
}
useEffect(() => {
reload()
reload().then(() => {
console.log('初始化完成')
})
}, [])
return (
<>
{/* 未安装 */}
@@ -525,6 +535,7 @@ const Query = () => {
<Input
placeholder="请填入GPS设备编号"
value={FormData.gpsNo}
disabled={disabled}
onChange={(value) => setFormData({...FormData, gpsNo: value})}
/>
<div
@@ -629,7 +640,7 @@ const Query = () => {
<Form.Item
label={'操作员'}
name="driverName"
name="driver"
rules={[{message: '操作员'}]}
>
<Input placeholder="操作员" type="text"/>
@@ -640,7 +651,7 @@ const Query = () => {
) : ''}
{/* 已安装 */}
{FormData?.status == 1 ? (
{FormData?.status != 0 ? (
<div className={'car-info w-full bg-white'}>
{/* 显示多张图片 */}
<div style={{
@@ -685,9 +696,6 @@ const Query = () => {
<Cell className={'car-info-item-title'}>
{FormData?.parentOrganizationAdmin}
</Cell>
<Cell className={'car-info-item-content'}>
{FormData?.driver}
</Cell>
<Cell className={'car-info-item-content'}>
{FormData?.insuranceStatus}
</Cell>
@@ -697,35 +705,53 @@ const Query = () => {
<Cell className={'car-info-item-content'}>
{FormData.fenceName}
</Cell>
<div className={'flex justify-around py-4'}>
<Button nativeType="submit" type="info" onClick={
() => {
Taro.navigateTo({
url: `/hjm/location?id=${FormData?.code}`
})
}
}>
</Button>
<Button nativeType="submit" type="warning" onClick={
() => {
Taro.navigateTo({
url: `/hjm/trajectory/trajectory?id=${FormData?.code}`
})
}
}>
</Button>
<Button nativeType="submit" type="default" onClick={
() => {
Taro.navigateTo({
url: `/hjm/gps-log/gps-log?id=${FormData?.gpsNo}`
})
}
}>
</Button>
</div>
<Cell className={'car-info-item-content'}>
{FormData.status == 2 ? FormData.driver : '-'}
</Cell>
{
// 认领车辆
claimVehicle && (
<div className={'flex justify-around py-4'}>
<Button nativeType="submit" type="danger" onClick={onClaimVehicle}>
</Button>
</div>
)
}
{
// 展示车辆信息
!claimVehicle && !disabled && (
<div className={'flex justify-around py-4'}>
<Button nativeType="submit" type="info" onClick={
() => {
Taro.navigateTo({
url: `/hjm/location?id=${FormData?.code}`
})
}
}>
</Button>
<Button nativeType="submit" type="warning" onClick={
() => {
Taro.navigateTo({
url: `/hjm/trajectory/trajectory?id=${FormData?.code}`
})
}
}>
</Button>
<Button nativeType="submit" type="default" onClick={
() => {
Taro.navigateTo({
url: `/hjm/gps-log/gps-log?id=${FormData?.gpsNo}`
})
}
}>
</Button>
</div>
)
}
</div>
</div>
) : ''}