import Header from './Header' import './index.scss' import Taro from '@tarojs/taro'; import {Map} from '@tarojs/components' import {Search} from '@nutui/icons-react-taro' import {Button, Input} from '@nutui/nutui-react-taro' import {useShareAppMessage, useShareTimeline} from "@tarojs/taro" import {useEffect, useState} from "react"; import ExpirationTime from "./ExpirationTime"; import {User} from "@/api/system/user/model"; import {getSiteInfo, getUserInfo, getWxOpenId} from "@/api/layout"; import Login from "./Login"; import {pageByQQMap, pageHjmCar} from "@/api/hjm/hjmCar"; import {HjmCar} from "@/api/hjm/hjmCar/model"; // 导入GPS坐标转换工具 import GPS from '@/utils/gpsUtil.js'; export interface Market { // 自增ID id?: number; latitude?: number; longitude?: number; name?: string; title?: string; } function Home() { const [loading, setLoading] = useState(false) const [IsLogin, setIsLogin] = useState(true) const [isAdmin, setIsAdmin] = useState(false) const [search, setSearch] = useState(false) const [userInfo, setUserInfo] = useState() const [longitude, setLongitude] = useState() const [latitude, setLatitude] = useState() const [markers, setMarkers] = useState([]) const [scale, setScale] = useState(12) const [keywords, setKeywords] = useState('') const [list, setList] = useState([]) useShareTimeline(() => { return { title: '注册即可开通 - webSoft云应用', path: `/pages/index/index` }; }); useShareAppMessage(() => { return { title: '注册即可开通 - webSoft云应用', path: `/pages/index/index`, success: function (res) { console.log('分享成功', res); }, fail: function (res) { console.log('分享失败', res); } }; }); // const reloadMore = async () => { // setPage(page + 1) // } const showAuthModal = () => { Taro.showModal({ title: '授权提示', content: '需要获取您的用户信息', confirmText: '去授权', cancelText: '取消', success: (res) => { if (res.confirm) { // 用户点击确认,打开授权设置页面 openSetting(); } } }); }; const openSetting = () => { // Taro.openSetting:调起客户端小程序设置界面,返回用户设置的操作结果。设置界面只会出现小程序已经向用户请求过的权限。 Taro.openSetting({ success: (res) => { if (res.authSetting['scope.userInfo']) { // 用户授权成功,可以获取用户信息 reload(); } else { // 用户拒绝授权,提示授权失败 Taro.showToast({ title: '授权失败', icon: 'none' }); } } }); }; const onKeywords = (keywords: string) => { setKeywords(keywords) } // 登录成功后回调 const handleLogin = (data: User) => { setIsLogin(true) setUserInfo(data) Taro.showTabBar() reload(); } // 获取当前位置 const getLocation = async () => { try { const res = await Taro.getLocation({ type: 'wgs84' // 使用WGS84坐标系,然后手动转换为GCJ02 }) // 转换WGS84坐标到GCJ02坐标 if (res.latitude && res.longitude && !isNaN(res.latitude) && !isNaN(res.longitude) && isFinite(res.latitude) && isFinite(res.longitude)) { try { const lat = Number(res.latitude); const lng = Number(res.longitude); const transformed = GPS.gcj_encrypt(lat, lng); // 确保转换结果有效 if (transformed && !isNaN(transformed.lat) && !isNaN(transformed.lng)) { setLatitude(transformed.lat); setLongitude(transformed.lng); } else { // 如果转换结果无效,使用原始坐标 setLatitude(res.latitude); setLongitude(res.longitude); } } catch (error) { console.error('坐标转换错误:', error); setLatitude(res.latitude); setLongitude(res.longitude); } } else { setLatitude(res.latitude); setLongitude(res.longitude); } // 已认证用户 if (Taro.getStorageSync('Certification')) { setIsAdmin(true) setScale(11) // pageHjmCarByMap(res.latitude, res.longitude) } // 游客 if (!Taro.getStorageSync('access_token') || Taro.getStorageSync('RoleName') == '注册用户') { setScale(15) } return res; } catch (err) { console.error('获取位置失败:', err); } } const onQuery = () => { if (!keywords) { Taro.showToast({ title: '请输入关键字', icon: 'none' }); return false; } reload(); } const pageHjmCarByMap = async (latitude?: any, longitude?: any) => { // 搜索条件 const where = {} const user = await getUserInfo(); if (latitude) { // @ts-ignore where.latitude = latitude } if (longitude) { // @ts-ignore where.longitude = longitude } // 判断身份 const roleCode = Taro.getStorageSync('RoleCode'); if (roleCode == 'kuaidiyuan') { // @ts-ignore where.driverId = user.userId; } if (roleCode == 'zhandian') { // @ts-ignore where.organizationId = user.organizationId; } // 邮管(youzheng)可以查看管辖范围内车辆,通过 organizationParentId 查询 if (roleCode == 'youzheng') { // @ts-ignore // where.organizationParentId = undefined; where.limit = 1000; // @ts-ignore where.status = 1; } if (roleCode == 'kuaidi') { // @ts-ignore where.organizationParentId = user.organizationId; } pageByQQMap(where).then(res => { console.log(res?.count, 'pageByQQMap') if (res?.list && res?.list.length > 0) { const data = res?.list; const arr = [] data?.map((item: HjmCar) => { // 转换WGS84坐标到GCJ02坐标 let markerLat = item.latitude; let markerLng = item.longitude; if (item.latitude && item.longitude && !isNaN(item.latitude) && !isNaN(item.longitude) && isFinite(item.latitude) && isFinite(item.longitude)) { try { const lat = Number(item.latitude); const lng = Number(item.longitude); const transformed = GPS.gcj_encrypt(lat, lng); if (transformed && !isNaN(transformed.lat) && !isNaN(transformed.lng)) { markerLat = transformed.lat; markerLng = transformed.lng; } } catch (error) { console.error('标记点坐标转换错误:', error); } } // @ts-ignore arr.push({ id: item.id, latitude: markerLat, longitude: markerLng, label: { content: `${item?.code}`, color: '#000000', fontSize: 12, borderRadius: 5, bgColor: '#FFFFFF', // @ts-ignore padding: '5px 5px', borderWidth: 1 }, title: `${item.organization}`, name: item.organization }) }) setMarkers(arr) } }) } const reload = async () => { setLoading(true) if (!Taro.getStorageSync('access_token')) { return false; } pageHjmCarByMap(latitude, longitude) if (!isAdmin) { return false; } setMarkers([]) setScale(12) pageHjmCar({keywords, deleted: 0}).then(res => { if (res?.count == 0) { Taro.showToast({ title: '没有搜索结果', icon: 'none' }); return false } setList(res?.list || []) if (res?.list && res?.list.length > 0) { const data = res?.list[0]; // 转换WGS84坐标到GCJ02坐标 let displayLat = data.latitude; let displayLng = data.longitude; if (data.latitude && data.longitude && !isNaN(data.latitude) && !isNaN(data.longitude) && isFinite(data.latitude) && isFinite(data.longitude)) { try { const lat = Number(data.latitude); const lng = Number(data.longitude); const transformed = GPS.gcj_encrypt(lat, lng); if (transformed && !isNaN(transformed.lat) && !isNaN(transformed.lng)) { displayLat = transformed.lat; displayLng = transformed.lng; } } catch (error) { console.error('搜索结果坐标转换错误:', error); } } setLongitude(displayLng) setLatitude(displayLat) if (isAdmin) { setMarkers([{ id: data.id, latitude: displayLat, longitude: displayLng, // @ts-ignore label: { content: `${data?.code}`, color: '#000000', fontSize: 12, borderRadius: 5, bgColor: '#FFFFFF', // @ts-ignore padding: '5px 5px', borderWidth: 1 }, title: `${data.organization}`, name: `${data.organization}` }]) } } console.log(list.length, 'carList.length') }) }; useEffect(() => { // Taro.hideTabBar() getLocation().then() // 获取站点信息 getSiteInfo().then((data) => { console.log(data, 'siteInfo') if (data.search) { setSearch(false); } }) // Taro.getSetting:获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限。 Taro.getSetting({ success: (res) => { if (res.authSetting['scope.userInfo']) { // 用户已经授权过,可以直接获取用户信息 console.log('用户已经授权过,可以直接获取用户信息') reload().then(() => { setLoading(false) }); } else { // 用户未授权,需要弹出授权窗口 console.log('用户未授权,需要弹出授权窗口') showAuthModal(); } } }); // 获取用户信息 Taro.getUserInfo({ success: (res) => { const avatar = res.userInfo.avatarUrl; setUserInfo({ avatar, nickname: res.userInfo.nickName, sexName: res.userInfo.gender == 1 ? '男' : '女' }) getUserInfo().then((data) => { if (data) { // 是否管理员 if (data.certification) { setIsAdmin(true) } // 是否交警 if (Taro.getStorageSync('Certification') == 'jj') { console.log('交警', '12312') setIsAdmin(true) } if (Taro.getStorageSync('RoleCode') == 'Installer') { setIsAdmin(true) } setUserInfo(data) setIsLogin(true); Taro.setStorageSync('UserId', data.userId) // 获取openId if (!data.openid) { Taro.login({ success: (res) => { // 排查交警和邮政角色不保存openid if (Taro.getStorageSync('RoleCode') !== 'jiaojing' || Taro.getStorageSync('RoleCode') !== 'youzheng' || Taro.getStorageSync('RoleCode') !== 'Installer') { getWxOpenId({code: res.code}).then(() => { }) } } }) } } }).catch(() => { setIsLogin(false); console.log('未登录') }); } }); }, []); return ( <> {!IsLogin && search ? () : (<>
{!loading && ( { console.log('map tap', map) }} style={{width: '100%', height: '100vh'}} /> )} )} ) } export default Home