提交 9cda4ee5 作者: 18928357778

Merge branch 'master' of ssh://git.mmcuav.cn:8222/root/sharefly-web-nextjs into caoyun

......@@ -8,11 +8,6 @@ export interface RegionResp {
name: string;
pid: number;
}
export interface UserInfoParams {
userAccountId: number;
}
export interface UserInfoResp {
id: number;
accountType: number;
......@@ -28,6 +23,17 @@ export interface UserInfoResp {
remark: string;
portType: number;
createTime: string;
companyAuthStatus: number;
token: string;
}
export interface TestAppletLoginResp {
userAccountId: number;
token: string;
uid: string;
phoneNum?: string;
nickName: string;
sessionKey?: any;
}
export default {
......@@ -35,12 +41,41 @@ export default {
region: (): Promise<Response<Array<RegionResp>>> => {
return request("/pms/webDevice/getSecondDistrictInfo");
},
//测试-小程序unionId登录-注册
testAppletLogin: (): Promise<Response<TestAppletLoginResp>> => {
let params = new URLSearchParams();
params.append("unionId", "oQZEd5hy0Qrwaj10BGtP8xq8vH--s88888");
return request(
"/userapp/auth/testAppletLogin",
"post",
{},
{
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
body: params,
}
);
},
//生成小程序码
getAppletQRCode: (params: { randomLoginCode: string }) => {
return request("/userapp/wx/getAppletQRCode", "get", {
page: "page-identity/identity-empower/index",
scene: "randomLoginCode=" + params.randomLoginCode,
});
},
//查询登录信息
getLoginInfo: (params: { randomLoginCode: string }) => {
return request("/userapp/temp-auth/getLoginInfo", "get", params, {
hideError: true //隐藏错误提示
});
},
//获取用户基本信息
userInfo: (params: UserInfoParams): Promise<Response<UserInfoResp>> => {
return request("/userapp/user-account/info", "get", params, {});
userInfo: (): Promise<Response<UserInfoResp>> => {
return request("/userapp/user-account/info", "get");
},
//图片上传地址
imgOss: () => {
return config.baseUrl + "/pms/upload/imgOss";
}
},
};
......@@ -8,8 +8,14 @@ import config from './config';
* @param options 额外参数
* @returns Promise<Response>
*/
export default function request(url: string, method: String = 'get', data?: any, options = {}): Promise<Response<any>> {
export default function request(url: string, method: String = 'get', data?: any, options: any & { hideError?: boolean, headers?: { token?: string } } = {}): Promise<Response<any>> {
let token = localStorage.getItem('token') || '';
options = {
headers: {
token
},
...options,
}
switch (method.toLowerCase()) {
case 'get':
let params = new URLSearchParams();
......@@ -24,16 +30,22 @@ export default function request(url: string, method: String = 'get', data?: any,
case 'post':
options = {
...options,
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
body: JSON.stringify(data),
...options,
}
break;
}
function errMsg(msg: string) {
if (!options.hideError) {
errMsg(msg);
}
}
return fetch(config.baseUrl + url, options)
.then((r) => {
try {
......@@ -50,12 +62,12 @@ export default function request(url: string, method: String = 'get', data?: any,
.then((data) => {
if (data.errors) {
//全局消息提示
window.messageApi.error('请求出错')
errMsg('请求出错')
if (Array.isArray(data.errors)) {
data.errors.forEach((item: any) => {
if (item.defaultMessage){
window.messageApi.error(item.defaultMessage)
if (item.defaultMessage) {
errMsg(item.defaultMessage)
}
})
}
......@@ -66,6 +78,11 @@ export default function request(url: string, method: String = 'get', data?: any,
result: null
}
}
if (data.code !== '200') {
errMsg(data.message || '请求出错');
}
return data;
})
.catch(error => {
......
import React, { useEffect, useState } from "react";
import { Avatar, Button, Space, Tabs } from "antd";
import React, { useContext, useEffect, useState } from "react";
import { Avatar, Button, Dropdown, Space, Tabs } from "antd";
import type { TabsProps } from "antd";
import styles from "./index.module.scss";
import { useRouter } from "next/router";
......@@ -7,6 +7,7 @@ import LoginModal from "~/components/loginModal";
import { useUser } from "~/lib/hooks";
import PublishModal from "./publishModal";
import JoinModal from "./joinModal";
import { UserContext } from "~/lib/userProvider";
const items: TabsProps["items"] = [
{
......@@ -42,30 +43,55 @@ const items: TabsProps["items"] = [
export default function NavHeader() {
const router = useRouter();
const [currentPath, setCurrentPath] = useState("");
const user = useUser();
const { userInfo, testLogin, logout } = useContext(UserContext);
useEffect(() => {
setCurrentPath(router.route);
console.log("currentHash", currentPath);
}, [router.route]);
//导航更改
const onChange = (key: string) => {
router.push(key);
};
const [openLoginModal, setPpenLoginModal] = useState(false); //登录modal
const [openPublishModal, setOpenPublishModal] = useState(false); //发布modal
const showModal = () => {
setPpenLoginModal(true);
};
const handleCancel = () => {
setPpenLoginModal(false);
//退出登录
const onLogout = () => {
logout();
};
const [openLoginModal, setOpenLoginModal] = useState(false); //登录modal
const [openPublishModal, setOpenPublishModal] = useState(false); //发布modal
const [openJoinModal, setOpenJoinModal] = useState(false); //加盟modal
//发布按钮事件
function onPublish() {
//登录判断
if (!userInfo) {
setOpenLoginModal(true);
} else {
if (userInfo.companyAuthStatus) {
setOpenPublishModal(true);
} else {
router.push("/certification");
}
}
}
//加盟按钮事件
function onJoin() {
//登录判断
if (!userInfo) {
setOpenLoginModal(true);
} else {
if (userInfo.companyAuthStatus) {
setOpenJoinModal(true);
} else {
router.push("/certification");
}
}
}
return (
<div className={styles.navHeader}>
<div className={styles.nav}>
......@@ -77,39 +103,43 @@ export default function NavHeader() {
onChange={onChange}
/>
<Space size={16} className={styles.btns}>
<Button
type="primary"
className={styles.btn1}
onClick={() => setOpenPublishModal(true)}
>
<Button type="primary" className={styles.btn1} onClick={onPublish}>
+ 发布需求
</Button>
<Button
className={styles.btn2}
onClick={() => setOpenJoinModal(true)}
>
<Button className={styles.btn2} onClick={onJoin}>
加盟入驻
</Button>
</Space>
{user ? (
{userInfo ? (
<div className={styles.haedImg}>
<Dropdown
menu={{
items: [
{ key: "1", label: <div onClick={onLogout}>退出登录</div> },
],
}}
>
<Avatar
size={36}
style={{ background: "#bdbdbd" }}
src={user.userImg}
src={userInfo.userImg}
></Avatar>
</Dropdown>
</div>
) : (
<Button
type="text"
onClick={showModal}
onClick={() => testLogin()}
style={{ fontWeight: "bold", fontSize: 16 }}
>
登录
</Button>
)}
</div>
<LoginModal open={openLoginModal} onCancel={handleCancel}></LoginModal>
<LoginModal
open={openLoginModal}
onCancel={() => setOpenLoginModal(false)}
></LoginModal>
<PublishModal
open={openPublishModal}
onCancel={() => {
......
import React, { useEffect, useState } from "react";
import { AutoComplete, Modal } from "antd";
import Image from "next/image";
import React, { useContext, useEffect, useState } from "react";
import { Modal, Image } from "antd";
import api from "~/api";
import { UserContext } from "~/lib/userProvider";
type Props = {
open: boolean;
......@@ -9,9 +9,13 @@ type Props = {
};
export default function LoginModal(props: Props) {
const [qrCode, setQrCode] = useState("");
const [randomLoginCode, setRandomLoginCode] = useState("");
const { userInfo, setUserInfo } = useContext(UserContext);
const [timeHandle, setTimeHandle] = useState<NodeJS.Timer | null>(null);
useEffect(() => {
if (props.open) {
var obj = new window.WxLogin({
/* if (props.open) {
new window.WxLogin({
self_redirect: true,
id: "login_container",
appid: "wx18b7883acd204278",
......@@ -21,11 +25,56 @@ export default function LoginModal(props: Props) {
style: "",
href: "",
});
} */
if (!props.open) {
return;
}
window.setUserId(1);
setRandomLoginCode(String(Date.now()));
api
.getAppletQRCode({
randomLoginCode,
})
.then((res) => {
if (res.code == "200") {
setQrCode("data:image/png;base64," + res.result || "");
}
});
}, [props.open]);
useEffect(() => {
if (randomLoginCode && !userInfo) {
if (timeHandle) {
clearTimeout(timeHandle);
}
const handle = setInterval(() => {
api
.getLoginInfo({
randomLoginCode: randomLoginCode,
})
.then((res) => {
if (res.code === "200") {
setUserInfo({
...res.result,
id: res.result?.userAccountId,
});
window.messageApi.success("登录成功");
clearInterval(handle);
setTimeHandle(null);
props.onCancel();
}
});
}, 1000);
setTimeHandle(handle);
}
}, [randomLoginCode]);
useEffect(() => {
if (!props.open && timeHandle) {
clearTimeout(timeHandle);
}
}, [timeHandle, props.open]);
return (
<>
<Modal
......@@ -47,13 +96,12 @@ export default function LoginModal(props: Props) {
>
欢迎来到云享飞
</div>
<div
id="login_container"
style={{ margin: "auto", display: "table" }}
></div>
<div id="login_container" style={{ margin: "auto", display: "table" }}>
<Image src={qrCode} width={150} height={150}></Image>
</div>
<div
style={{
marginTop: -120,
// marginTop: -120,
marginBottom: 52,
fontSize: 14,
fontFamily: "MicrosoftYaHei",
......
......@@ -14,10 +14,6 @@ export function useUser() {
useEffect(() => {
setUserAccountId(Number(window.localStorage.getItem('userId')));
window.setUserId = (id) => {
setUserAccountId(id);
window.localStorage.setItem('userId', id);
};
try {
let userInfo = JSON.parse(window.localStorage.getItem('userInfo') || '') || null;
......@@ -26,16 +22,25 @@ export function useUser() {
}, [])
useEffect(() => {
if (!user && userAccountId) {
if (!user) {
api
.userInfo({
userAccountId: userAccountId,
})
.userInfo()
.then((res) => {
if(res.code == '200'){
setUser(res.result || null);
}else{
setUserAccountId('');
}
window.localStorage.setItem('userInfo', JSON.stringify(res.result || ''));
});
}
//退出登录
if(userAccountId === ''){
setUser(null);
window.localStorage.setItem('userInfo', '');
}
}, [userAccountId]);
return user;
......
import React, { createContext, Dispatch, SetStateAction, useEffect, useState } from "react";
import api, { UserInfoResp } from "~/api";
export const UserContext = createContext<{
testLogin: () => void;
logout: () => void;
userInfo: UserInfoResp | null;
setUserInfo: Dispatch<SetStateAction<UserInfoResp | null>>;
}>({
testLogin() {},
logout() {},
userInfo: null,
setUserInfo() {},
});
type Props = {
children: React.ReactNode;
};
const UserProvider = ({ children }: Props) => {
const [userInfo, setUserInfo] = useState<UserInfoResp | null>(null);
useEffect(() => {
try {
setUserInfo(JSON.parse(window.localStorage.getItem("userInfo") || ""));
} catch (e) {}
}, []);
useEffect(() => {
localStorage.setItem("userInfo", JSON.stringify(userInfo || ""));
}, [userInfo]);
//测试登录
function testLogin() {
api.testAppletLogin().then((res) => {
if (res.code == "200") {
window.localStorage.setItem("token", res.result?.token || "");
api.userInfo().then((res) => {
setUserInfo(res.result || null);
});
}
});
}
//登出
function logout() {
localStorage.setItem("token", "");
setUserInfo(null);
}
return (
<UserContext.Provider value={{ userInfo, setUserInfo, testLogin, logout }}>
{children}
</UserContext.Provider>
);
};
export default UserProvider;
......@@ -27,6 +27,7 @@ const nextConfig = {
{
source: "/local/:path*",
destination: "https://iuav.mmcuav.cn/:path*",
destination: "https://test.iuav.mmcuav.cn/:path*",
},
];
},
......
......@@ -45,7 +45,7 @@ export default function JoinPolicy() {
className={styles.font1}
style={{ textAlign: "center", paddingTop: 40, paddingBottom: 30 }}
>
加盟入驻政策
加盟入驻福利
</div>
<div
className={styles.font2}
......
......@@ -6,6 +6,7 @@ import { message } from 'antd';
import { useEffect } from 'react';
import Head from "next/head";
import Script from 'next/script';
import UserProvider, { UserContext } from "~/lib/userProvider";
export default function App({ Component, pageProps }: AppProps) {
const [messageApi, contextHolder] = message.useMessage();
......@@ -24,7 +25,9 @@ export default function App({ Component, pageProps }: AppProps) {
</Head>
<Script src="https://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></Script>
{contextHolder}
<UserProvider>
<Component {...pageProps} />
</UserProvider>
</>
);
}
......@@ -8,6 +8,7 @@ import Layout from "~/components/layout";
import api from "./api";
import styles from "./index.module.scss";
import gApi from '~/api';
import Router from "next/router";
const beforeUpload = (file: RcFile) => {
const isJpgOrPng = file.type === "image/jpeg" || file.type === "image/png";
......@@ -57,12 +58,14 @@ export default function Certification() {
.companyAuth({
...values,
licenseImg: imageUrl,
userAccountId: 1
})
.then((res) => {
console.log('提交结果', res);
if(res.result === '已通过'){
if(res.code === '200'){
window.messageApi.success(res.result);
setTimeout(() => {
Router.push('/');
}, 1000)
}
});
};
......
......@@ -6,22 +6,20 @@ import api, { Flying, SkillsType, RegionResp } from "../../../api";
interface BrushQuestionZoneType {
}
export default function index() {
export default function BrushQuestionZone() {
const [secondDistrictInfo, setSecondDistrictInfo] = useState(
Array<RegionResp>
);
const [skills, setSkills] = useState(
Array<RegionResp>
);
const [skills, setSkills] = useState(Array<RegionResp>);
const [flightSkillsList, setFlightSkillsList] = useState(Array<SkillsType>);
const [list,setList] = useState<Array<BrushQuestionZoneType>>()
const [list, setList] = useState<Array<BrushQuestionZoneType>>();
const handleChange = (value: string) => {
console.log(`selected ${value}`);
};
useEffect(() => {
setList([{},{},{},{},{},{}])
setList([{}, {}, {}, {}, {}, {}]);
api.region().then((res) => {
setSecondDistrictInfo(res.result || []);
});
......@@ -29,11 +27,11 @@ export default function index() {
setSkills(res.result || []);
});
api.IndustryFlightSkills().then((res) => {
const list = res.result?.map((item)=>{
item.label = item.skillsName
item.value = item.id
return item
})
const list = res.result?.map((item) => {
item.label = item.skillsName;
item.value = item.id;
return item;
});
setFlightSkillsList(list || []);
});
}, []);
......@@ -82,7 +80,7 @@ export default function index() {
allowClear
placeholder="选择课程"
className="selectItem"
style={{width:200}}
style={{ width: 200 }}
size="large"
fieldNames={{
label: "name",
......@@ -95,17 +93,15 @@ export default function index() {
/>
</div>
<div className="content">
{
list?.map(item=>(
<div className='item'>
<div className='img-box'></div>
<div className='item-content'>
{list?.map((item, i) => (
<div key={i} className="item">
<div className="img-box"></div>
<div className="item-content">
第一章 第1节 习题练习习题练习习题练习
</div>
</div>
))
}
))}
</div>
</Box>
)
);
}
......@@ -5,21 +5,19 @@ interface MockExamType {
}
export default function index() {
export default function MockExam() {
const [list, setList] = useState<Array<MockExamType>>();
const [list,setList] = useState<Array<MockExamType>>()
useEffect(()=>{
setList([{},{},{},{},{},{}])
},[])
useEffect(() => {
setList([{}, {}, {}, {}, {}, {}]);
}, []);
return (
<Box>
<div className="content">
{
list?.map(item=>(
<div className='item'>
<div className='img-box'></div>
<div className='item-content'>
{list?.map((item, i) => (
<div key={i} className="item">
<div className="img-box"></div>
<div className="item-content">
<div className="top">云飞手行业认证考核</div>
<div className="bottom">
<div className="user-img"></div>
......@@ -27,9 +25,8 @@ export default function index() {
</div>
</div>
</div>
))
}
))}
</div>
</Box>
)
);
}
......@@ -14,7 +14,7 @@ interface UserInfoType {
pageSize?:number
}
export default function index() {
export default function MoreServicePoints() {
const [mapItem, setMapItem] = useState(0);
const [userPositioning, setUserPositioning] = useState<UserInfoType>();
const [markerCol, setMarkerCol] = useState<any>([]);
......@@ -31,7 +31,7 @@ export default function index() {
plugins: [""], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
})
.then(async (AMap) => {
Amap = AMap
Amap = AMap;
MAP = new AMap.Map("container", {
// 设置地图容器id
viewMode: "3D", // 是否为3D地图模式
......@@ -39,40 +39,42 @@ export default function index() {
center: [113.93029, 22.53291], // 初始化地图中心点位置
});
//用户定位
AMap.plugin('AMap.Geolocation', function() {
AMap.plugin("AMap.Geolocation", function () {
const geolocation = new AMap.Geolocation({
enableHighAccuracy: true,//是否使用高精度定位,默认:true
enableHighAccuracy: true, //是否使用高精度定位,默认:true
timeout: 10000, //超过10秒后停止定位,默认:5s
position:'RB', //定位按钮的停靠位置
position: "RB", //定位按钮的停靠位置
offset: [10, 20], //定位按钮与设置的停靠位置的偏移量,默认:[10, 20]
zoomToAccuracy: true, //定位成功后是否自动调整地图视野到定位点
});
MAP.addControl(geolocation);
geolocation.getCurrentPosition(function(status:string,result:any){
geolocation.getCurrentPosition(function (
status: string,
result: any
) {
console.log(result);
if(status=='complete'){
onComplete(result)
}else{
onError(result)
if (status == "complete") {
onComplete(result);
} else {
onError(result);
}
});
});
//解析定位结果
async function onComplete(data:any) {
console.log('定位成功');
setUserPositioning(data.position)
async function onComplete(data: any) {
console.log("定位成功");
setUserPositioning(data.position);
// return await mapEntiy(0,data.position);
}
//解析定位错误信息
async function onError(data:any) {
async function onError(data: any) {
// message.error(`定位失败
// 失败原因排查信息:${data.message}
// 浏览器返回信息:${data.originMessage}
// `)
}
await mapEntiy(0)
await mapEntiy(0);
})
.catch((e) => {
console.log(e);
......@@ -81,7 +83,7 @@ export default function index() {
console.log(error);
}
};
const showPositioningInfo = async (index:number,data?:UserInfoType) => {
const showPositioningInfo = async (index: number, data?: UserInfoType) => {
const res = await api.listPositioningInfo({
lon: userPositioning?.lon || data?.lon || 113.93029,
lat: userPositioning?.lat || data?.lat || 22.53291,
......@@ -96,92 +98,99 @@ export default function index() {
const EntiyValue = addEntiy(item.jd, item.wd, item.dizhi);
markerList.push(EntiyValue);
});
setServicePoints(list)
if(markerList.length) MAP?.add(markerList);setMarkerCol([...markerList]);
}
setServicePoints(list);
if (markerList.length) MAP?.add(markerList);
setMarkerCol([...markerList]);
}
const showFlyerBitmap = async (index:number,data?:UserInfoType,pageSize?:number) => {
};
const showFlyerBitmap = async (
index: number,
data?: UserInfoType,
pageSize?: number
) => {
const res = await api.listFlyerBitmap({
lon: userPositioning?.lon || data?.lon || 113.93029,
lat: userPositioning?.lat || data?.lat || 22.53291,
pageNo:1,
pageSize: pageSize || 40
pageNo: 1,
pageSize: pageSize || 40,
});
const list = res.result?.list
const list = res.result?.list;
const markerList: any = [];
if (list?.length) {
list?.map((item) => {
const EntiyValue = addEntiy(item.lon, item.lat, item.flyerName);
markerList.push(EntiyValue);
});
setServicePoints(list)
if(markerList.length) MAP?.add(markerList);setMarkerCol(markerList)
}
setServicePoints(list);
if (markerList.length) MAP?.add(markerList);
setMarkerCol(markerList);
}
const showUavBitmap = async (index:number,data?:UserInfoType) => {
};
const showUavBitmap = async (index: number, data?: UserInfoType) => {
console.log(MAP.panTo);
const res = await api.listUavBitmap({
lon: userPositioning?.lon || data?.lon || 113.93029,
lat: userPositioning?.lat || data?.lat || 22.53291,
pageNo:1,
pageSize: 40
pageNo: 1,
pageSize: 40,
});
const list = res.result?.list
const list = res.result?.list;
const markerList: any = [];
if (list?.length) {
list?.map((item) => {
const EntiyValue = addEntiy(item.lon, item.lat, item.uavName);
markerList.push(EntiyValue);
});
setServicePoints(list)
if(markerList.length) MAP?.add(markerList);setMarkerCol(markerList)
}
setServicePoints(list);
if (markerList.length) MAP?.add(markerList);
setMarkerCol(markerList);
}
};
//添加点位
const mapEntiy = async (index: number,data?:UserInfoType) => {
const mapEntiy = async (index: number, data?: UserInfoType) => {
MAP?.remove(markerCol);
if (userPositioning) {
MAP?.setCenter([userPositioning.lon, userPositioning.lat]);
}
if (index === 0) {
showPositioningInfo(index,data)
}else if (index === 1) {
showFlyerBitmap(index,data,30)
} else if(index === 2) {
showUavBitmap(index,data)
}else{
showFlyerBitmap(index,data,30)
showPositioningInfo(index, data);
} else if (index === 1) {
showFlyerBitmap(index, data, 30);
} else if (index === 2) {
showUavBitmap(index, data);
} else {
showFlyerBitmap(index, data, 30);
}
setMapItem(index);
};
const addEntiy = ( lon: any, lat: any, name: string) => {
const addEntiy = (lon: any, lat: any, name: string) => {
if (!Amap) return;
const icons = new Amap.Icon({
size: new Amap.Size(60, 60), // 图标尺寸
image: icon.src, // Icon的图像
imageSize: new Amap.Size(60, 60) // 根据所设置的大小拉伸或压缩图片
imageSize: new Amap.Size(60, 60), // 根据所设置的大小拉伸或压缩图片
});
const marker = new Amap.Marker({
position: new Amap.LngLat(lon, lat),
offset: new Amap.Pixel(-10, -10),
icon: icons, // 添加 Icon 实例
title: name,
zoom: 13
zoom: 13,
});
return marker;
};
const moveTo = (item:any) => {
const moveTo = (item: any) => {
console.log(markerCol);
if (item.dizhi) {
return MAP?.setCenter([item.jd, item.wd]);
}else if (item.flyerName || item.uavName) {
} else if (item.flyerName || item.uavName) {
return MAP?.setCenter([item.lon, item.lat]);
}
return message.warning("暂无位置信息")
}
return message.warning("暂无位置信息");
};
useEffect(() => {
(async () => {
......@@ -193,23 +202,46 @@ export default function index() {
return (
<Layout>
<Box>
<div className='title'>
<div onClick={() => mapEntiy(0)} className={`item ${mapItem === 0 ? "active" : ""}`}>服务网点</div>
<div onClick={() => mapEntiy(1)} className={`item ${mapItem === 1 ? "active" : ""}`}>租赁网点</div>
<div onClick={() => mapEntiy(2)} className={`item ${mapItem === 2 ? "active" : ""}`}>培训网点</div>
<div onClick={() => mapEntiy(3)} className={`item ${mapItem === 3 ? "active" : ""}`}>机构网点</div>
<div className="title">
<div
onClick={() => mapEntiy(0)}
className={`item ${mapItem === 0 ? "active" : ""}`}
>
服务网点
</div>
<div
onClick={() => mapEntiy(1)}
className={`item ${mapItem === 1 ? "active" : ""}`}
>
租赁网点
</div>
<div
onClick={() => mapEntiy(2)}
className={`item ${mapItem === 2 ? "active" : ""}`}
>
培训网点
</div>
<div
onClick={() => mapEntiy(3)}
className={`item ${mapItem === 3 ? "active" : ""}`}
>
机构网点
</div>
<div className='content'>
</div>
<div className="content">
<div className="left">
<div className="left-title">服务网点</div>
<div className="left-content">
{
servicePoints.map((item:any)=>(
<div onClick={()=>moveTo(item)} className="left-content-item" title={item.dizhi || item.flyerName || item.uavName}>
{servicePoints.map((item: any) => (
<div
key={item.id}
onClick={() => moveTo(item)}
className="left-content-item"
title={item.dizhi || item.flyerName || item.uavName}
>
{item.dizhi || item.flyerName || item.uavName}
</div>
))
}
))}
</div>
</div>
<div className="right">
......@@ -218,5 +250,5 @@ export default function index() {
</div>
</Box>
</Layout>
)
);
}
......@@ -96,8 +96,9 @@ export default function News(props: Props) {
);
})}
</Col>
{list.length === 0 && <Empty style={{ margin: "0 auto" }}></Empty>}
</Row>
{list.length === 0 && <Empty></Empty>}
<Pagination
current={pageParams.pageNo}
defaultPageSize={pageParams.pageSize}
......
......@@ -4,7 +4,6 @@ declare global {
interface Window {
messageApi: MessageInstance; //全局消息提示api
WxLogin: any; //微信登录对象
setUserId: (number) => void; //获取用户信息需要的userId
_AMapSecurityConfig: { securityJsCode: string }; //高德地图api密钥配置
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论