diff --git a/src/api/system/userRole/model/index.ts b/src/api/system/userRole/model/index.ts index 926bf9b..835bbae 100644 --- a/src/api/system/userRole/model/index.ts +++ b/src/api/system/userRole/model/index.ts @@ -1,4 +1,4 @@ -import type { PageParam } from '@/api'; +import type { PageParam } from '@/api/index'; /** * 用户 @@ -15,6 +15,8 @@ export interface UserRole { updateTime?: string; // 角色名称 roleName?: string; + // 角色标识 + roleCode?: string; // 租户ID tenantId?: number; } diff --git a/src/api/system/website/field/index.ts b/src/api/system/website/field/index.ts index cd4290c..b76d574 100644 --- a/src/api/system/website/field/index.ts +++ b/src/api/system/website/field/index.ts @@ -12,7 +12,7 @@ import type { */ export async function pageWebsiteField(params: CmsWebsiteFieldParam) { const res = await request.get>>( - '/cms/website-field/page', + '/cms/cms-website-field/page', { params } @@ -28,7 +28,7 @@ export async function pageWebsiteField(params: CmsWebsiteFieldParam) { */ export async function listWebsiteField(params?: CmsWebsiteFieldParam) { const res = await request.get>( - 'https://modules.gxwebsoft.com/api/cms/website-field', + '/cms/cms-website-field', { params } @@ -44,7 +44,7 @@ export async function listWebsiteField(params?: CmsWebsiteFieldParam) { */ export async function getWebsiteField(id: number) { const res = await request.get>( - '/cms/website-field/' + id + '/cms/cms-website-field/' + id ); if (res.code === 0 && res.data) { return res.data; @@ -57,7 +57,7 @@ export async function getWebsiteField(id: number) { */ export async function addWebsiteField(data: CmsWebsiteField) { const res = await request.post>( - '/cms/website-field', + '/cms/cms-website-field', data ); if (res.code === 0) { @@ -71,7 +71,7 @@ export async function addWebsiteField(data: CmsWebsiteField) { */ export async function updateWebsiteField(data: CmsWebsiteField) { const res = await request.put>( - '/cms/website-field', + '/cms/cms-website-field', data ); if (res.code === 0) { @@ -85,7 +85,7 @@ export async function updateWebsiteField(data: CmsWebsiteField) { */ export async function removeWebsiteField(id?: number) { const res = await request.del>( - '/cms/website-field/' + id + '/cms/cms-website-field/' + id ); if (res.code === 0) { return res.message; @@ -98,7 +98,7 @@ export async function removeWebsiteField(id?: number) { */ export async function removeBatchWebsiteField(data: (number | undefined)[]) { const res = await request.del>( - '/cms/website-field/batch', + '/cms/cms-website-field/batch', { data } @@ -118,7 +118,7 @@ export async function checkExistence( id?: number ) { const res = await request.get>( - '/cms/website-field/existence', + '/cms/cms-website-field/existence', { params: { field, value, id } } @@ -134,7 +134,7 @@ export async function checkExistence( */ export async function configWebsiteField(params?: CmsWebsiteFieldParam) { const res = await request.get>( - 'https://modules.gxwebsoft.com/api/cms/website-field/config', + 'https://modules.gxwebsoft.com/api/cms/cms-website-field/config', { params } diff --git a/src/app.ts b/src/app.ts index 9475559..b9b19e8 100644 --- a/src/app.ts +++ b/src/app.ts @@ -10,8 +10,8 @@ import {mqttStart} from "@/api/hjm/hjmCar"; function App(props) { const reload = () => { - mqttStart().then(res => { - console.log(res, 'mqttStart') + mqttStart().then(() => { + console.log('mqttStart') }) Taro.login({ success: (res) => { diff --git a/src/hjm/bx/bx-add.tsx b/src/hjm/bx/bx-add.tsx index 1b4fcf3..44d6d04 100644 --- a/src/hjm/bx/bx-add.tsx +++ b/src/hjm/bx/bx-add.tsx @@ -14,6 +14,7 @@ import {HjmBxLog} from "@/api/hjm/hjmBxLog/model"; import {HjmCar} from "@/api/hjm/hjmCar/model"; import {listCmsWebsiteField} from "@/api/cms/cmsWebsiteField"; import {CmsWebsiteField} from "@/api/cms/cmsWebsiteField/model"; +import {TenantId} from "@/utils/config"; // 图片数据接口 interface UploadedImageData { @@ -126,7 +127,6 @@ function BxAdd() { // 上传单张图片 const uploadSingleImage = (filePath: string, index: number) => { - const TenantId = Taro.getStorageSync('TenantId') Taro.uploadFile({ url: 'https://server.gxwebsoft.com/api/oss/upload', diff --git a/src/hjm/query.tsx b/src/hjm/query.tsx index 852b0b9..f8bcf99 100644 --- a/src/hjm/query.tsx +++ b/src/hjm/query.tsx @@ -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() const [dict, setDict] = useState([]) - const [adminId, setAdminId] = useState() + const [claimVehicle, setClaimVehicle] = useState(false) const [showPreview, setShowPreview] = useState(false) const [disabled, setDisabled] = useState(false) - const [userRole, setUserRole] = useState() const [fileList, setFileList] = useState([]) // 图片文件列表 const [FormData, setFormData] = useState( { @@ -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 = () => { setFormData({...FormData, gpsNo: value})} />
{ @@ -640,7 +651,7 @@ const Query = () => { ) : ''} {/* 已安装 */} - {FormData?.status == 1 ? ( + {FormData?.status != 0 ? (
{/* 显示多张图片 */}
{ 管理责任人:{FormData?.parentOrganizationAdmin} - - 操作员:{FormData?.driver} - 保险状态:{FormData?.insuranceStatus} @@ -697,35 +705,53 @@ const Query = () => { 电子围栏:{FormData.fenceName} -
- - - -
+ + 操作员:{FormData.status == 2 ? FormData.driver : '-'} + + { + // 认领车辆 + claimVehicle && ( +
+ +
+ ) + } + { + // 展示车辆信息 + !claimVehicle && !disabled && ( +
+ + + +
+ ) + }
) : ''} diff --git a/src/pages/index/Header.tsx b/src/pages/index/Header.tsx index f8d7f52..942c466 100644 --- a/src/pages/index/Header.tsx +++ b/src/pages/index/Header.tsx @@ -43,6 +43,14 @@ const Header = (props: any) => { if(data.certification){ Taro.setStorageSync('Certification','1') } + // 安装人员 + const isInstaller = data.roles?.findIndex(item => item.roleCode == 'Installer') + if(isInstaller != -1){ + setRoleName('安装人员') + Taro.setStorageSync('RoleName', '安装人员') + Taro.setStorageSync('RoleCode', 'Installer') + return false; + } // 管理员 const isKdy = data.roles?.findIndex(item => item.roleCode == 'admin') if(isKdy != -1){ diff --git a/src/pages/study/study.tsx b/src/pages/study/study.tsx index a77a2bf..8d27de4 100644 --- a/src/pages/study/study.tsx +++ b/src/pages/study/study.tsx @@ -5,7 +5,7 @@ import {pageCmsArticle} from "@/api/cms/cmsArticle"; import {CmsArticle} from "@/api/cms/cmsArticle/model"; import {checkMonthTaskCompleted} from "@/api/hjm/hjmExamLog"; import Questions from '@/components/Questions'; -import {getUserInfo} from "@/api/layout"; +import {getWebsiteField} from "@/api/system/website/field"; /** * 文章终极列表 @@ -17,28 +17,28 @@ const Study = () => { const [list, setList] = useState() const [monthTaskCompleted, setMonthTaskCompleted] = useState(false) - const reload = () => { + const reload = async () => { setLoading(true) - getUserInfo().then((data) => { - console.log(data) - if(data.certification){ - setIsAdmin(true) - } - }) - checkMonthTaskCompleted().then(res => { - if (res) { - setMonthTaskCompleted(true) - } - pageCmsArticle({categoryId: 4289, status: 0}).then(data => { - setList(data?.list) - }) - }).finally(() => { - setLoading(false) - }) + const field = await getWebsiteField(15524); + if (field.value == '0') { + setIsAdmin(true) + }else { + setIsAdmin(false) + } + const article = await pageCmsArticle({categoryId: 4289, status: 0}) + if(article){ + setList(article?.list) + } + const promise = await checkMonthTaskCompleted(); + if(promise){ + setMonthTaskCompleted(true) + } } useEffect(() => { - reload() + reload().then(() => { + console.log('初始化完成') + }) }, []) return (