382 lines
10 KiB
TypeScript
382 lines
10 KiB
TypeScript
|
|
import { message } from 'antd'
|
||
|
|
import { config } from '../../config'
|
||
|
|
import { wait } from '../../utils/common'
|
||
|
|
import { httpget, httppost, xyt_httpget2 } from '../../utils/request'
|
||
|
|
import { MenuItem } from '../_'
|
||
|
|
import { apiPaths } from '../_/apipath'
|
||
|
|
import apiurl from '../../service/apiurl'
|
||
|
|
import { store } from '../store'
|
||
|
|
// @ts-ignore
|
||
|
|
import cookie from 'react-cookies'
|
||
|
|
|
||
|
|
export type LoginUser = {
|
||
|
|
id: number
|
||
|
|
loginName: string
|
||
|
|
name: string
|
||
|
|
roleList: string[]
|
||
|
|
tokenInfo: {
|
||
|
|
tokenValue: string
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
export type AuthState = {
|
||
|
|
user: LoginUser | null | -1
|
||
|
|
menu: MenuItem[]
|
||
|
|
roleObj: any,
|
||
|
|
role: any
|
||
|
|
}
|
||
|
|
|
||
|
|
export const USER_SESSION_KEY = '__usereinfo__'
|
||
|
|
|
||
|
|
export function removeLoginInfo() {
|
||
|
|
let keysToKeep = ["checked", "loginNamePwd"];
|
||
|
|
let keysToRemove = [];
|
||
|
|
// 遍历 localStorage
|
||
|
|
for (let i = 0; i < localStorage.length; i++) {
|
||
|
|
let key: any = localStorage.key(i);
|
||
|
|
if (!keysToKeep.includes(key)) {
|
||
|
|
keysToRemove.push(key);
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
for (let i = 0; i < keysToRemove.length; i++) {
|
||
|
|
localStorage.removeItem(keysToRemove[i]);
|
||
|
|
}
|
||
|
|
|
||
|
|
/*localStorage.removeItem(USER_SESSION_KEY);
|
||
|
|
localStorage.removeItem('TOKEN');*/
|
||
|
|
|
||
|
|
// localStorage.clear()
|
||
|
|
sessionStorage.clear()
|
||
|
|
cookie.remove('Admin-Token')
|
||
|
|
}
|
||
|
|
|
||
|
|
export function setLoginInfo(userInfo: string, token: string) {
|
||
|
|
sessionStorage.setItem(USER_SESSION_KEY, userInfo)
|
||
|
|
localStorage.setItem('TOKEN', token)
|
||
|
|
}
|
||
|
|
|
||
|
|
export function getUserFromSession(): LoginUser | null {
|
||
|
|
const strUser = sessionStorage.getItem(USER_SESSION_KEY)
|
||
|
|
if (!strUser) {
|
||
|
|
return null
|
||
|
|
}
|
||
|
|
|
||
|
|
try {
|
||
|
|
const obj: LoginUser = JSON.parse(strUser)
|
||
|
|
if (obj.id && obj.tokenInfo.tokenValue) {
|
||
|
|
return obj
|
||
|
|
}
|
||
|
|
} catch (e) {}
|
||
|
|
return null
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function regByToken(
|
||
|
|
token: string
|
||
|
|
): Promise<LoginUser | undefined> {
|
||
|
|
const result: LoginUser | null = await httppost(
|
||
|
|
apiPaths.auth.registerByToken,
|
||
|
|
{ token }
|
||
|
|
)
|
||
|
|
if (!result) {
|
||
|
|
message.error('登陆失败')
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
setLoginInfo(JSON.stringify(result), result.tokenInfo?.tokenValue)
|
||
|
|
|
||
|
|
return result
|
||
|
|
}
|
||
|
|
|
||
|
|
//user: string, pw: string, captcha: string
|
||
|
|
/*export async function login(form: { user: string, pw: string }): Promise<LoginUser | undefined> {
|
||
|
|
const result = await httppost('/shzh/'+store.getState().systemSwitch.address+apiurl.upgramurl.login.authOld, {
|
||
|
|
user: form.user,
|
||
|
|
pw: form.pw,
|
||
|
|
//captcha: form.captcha
|
||
|
|
});
|
||
|
|
|
||
|
|
if(result.code === 200){
|
||
|
|
localStorage.setItem('TOKEN', result.data.token);
|
||
|
|
localStorage.setItem('account', result.data.name);
|
||
|
|
}else{
|
||
|
|
message.error('登陆失败');
|
||
|
|
//return;
|
||
|
|
}
|
||
|
|
//setLoginInfo(JSON.stringify(result), result.data.token?.token);
|
||
|
|
|
||
|
|
return result;
|
||
|
|
}*/
|
||
|
|
|
||
|
|
function idgen() {
|
||
|
|
let id = 1
|
||
|
|
|
||
|
|
return () => `${id++}`
|
||
|
|
}
|
||
|
|
|
||
|
|
const handelTreeData = (data:any,id:any)=>{
|
||
|
|
if (data.length > 0) {
|
||
|
|
data.forEach((item:any) => {
|
||
|
|
item.id = id()
|
||
|
|
item.title = item.menuName;
|
||
|
|
item.icon = item.icon;
|
||
|
|
|
||
|
|
|
||
|
|
if(item.menuType==='M'&&item.children && item.children.length > 0){//目录
|
||
|
|
item.redirect = item.path;
|
||
|
|
delete item.path
|
||
|
|
handelTreeData(item.children,id);
|
||
|
|
}
|
||
|
|
if(item.menuType==='C'){//菜单
|
||
|
|
item.rule = item.children;
|
||
|
|
delete item.children
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
const buildTree = (data:any, parentId:any)=> {
|
||
|
|
let tree:any = [];
|
||
|
|
data.forEach((node:any) => {
|
||
|
|
if (node.parentId === parentId) {
|
||
|
|
let children = buildTree(data, node.menuId);
|
||
|
|
if (children.length) {
|
||
|
|
node.children = children;
|
||
|
|
}
|
||
|
|
tree.push(node);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
return tree;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
export function loadRole(data:any) {
|
||
|
|
const roleObj:any = {}
|
||
|
|
const handelTreeData2 = (data:any)=>{
|
||
|
|
if (data.length > 0) {
|
||
|
|
data.forEach((item:any) => {
|
||
|
|
if (item.children && item.children.length > 0) {
|
||
|
|
//是目录
|
||
|
|
handelTreeData2(item.children);
|
||
|
|
}else{
|
||
|
|
//是菜单
|
||
|
|
roleObj[item.path] = item
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
handelTreeData2(data)
|
||
|
|
|
||
|
|
return roleObj
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function loadMenu(): Promise<MenuItem[]> {
|
||
|
|
|
||
|
|
|
||
|
|
await wait(200)
|
||
|
|
const { code, data } = await xyt_httpget2(apiurl.xytlogin.role)
|
||
|
|
if( code!== 200){
|
||
|
|
message.error('获取用户权限失败')
|
||
|
|
return []
|
||
|
|
}
|
||
|
|
//获取到菜单后遍历
|
||
|
|
const id = idgen()
|
||
|
|
// handelTreeData(data,id)
|
||
|
|
|
||
|
|
|
||
|
|
const tree = buildTree(data,0)
|
||
|
|
const tree2 = tree?.filter((item:any) =>(item.menuId != "1" && item.menuId != "2" && item.menuId != "3"))
|
||
|
|
handelTreeData(tree2,id)
|
||
|
|
|
||
|
|
return tree2
|
||
|
|
|
||
|
|
// return [
|
||
|
|
// { id: id(), title: '基本情况', path: '/mgr/home', icon: 'jbqk' },
|
||
|
|
// {
|
||
|
|
// id: id(),
|
||
|
|
// title: '防汛调度',
|
||
|
|
// redirect: '/mgr/fxzb/fhxs',
|
||
|
|
// icon: 'fxzb',
|
||
|
|
// children: [
|
||
|
|
// { id: id(), title: '防洪形势', path: '/mgr/fxzb/fhxs'},
|
||
|
|
// { id: id(), title: '天气预报', path: '/mgr/fxzb/tqyb'},
|
||
|
|
// {
|
||
|
|
// id: id(), title: '洪水预报', redirect: '/mgr/fxzb/hsyb/hyybjs',
|
||
|
|
// children: [
|
||
|
|
// { id: id(), title: '洪水预报计算', path: '/mgr/fxzb/hsyb/hyybjs' },
|
||
|
|
// { id: id(), title: '预报方案管理', path: '/mgr/fxzb/hsyb/ybfagl' },
|
||
|
|
// { id: id(), title: '参数管理', path: '/mgr/fxzb/hsyb/csgl' },
|
||
|
|
// ]
|
||
|
|
// },
|
||
|
|
// { id: id(), title: '调度规程', path: '/mgr/fxzb/ddgc'},
|
||
|
|
// { id: id(), title: '防汛预案', path: '/mgr/fxzb/fxya'},
|
||
|
|
// {
|
||
|
|
// id: id(),
|
||
|
|
// title: '抢险物料',
|
||
|
|
// path: '/mgr/fxzb/qxwl',
|
||
|
|
// },
|
||
|
|
// {
|
||
|
|
// id: id(),
|
||
|
|
// title: '抢险队伍',
|
||
|
|
// path: '/mgr/fxzb/qxdw',
|
||
|
|
// },
|
||
|
|
// ],
|
||
|
|
// },
|
||
|
|
// {
|
||
|
|
// id: id(),
|
||
|
|
// title: '工程安全监测',
|
||
|
|
// redirect: '/mgr/gcaqjc/gcaqyj/bzt',
|
||
|
|
// icon: 'fxzb',
|
||
|
|
// children: [
|
||
|
|
// { id: id(), title: '布置图', path: '/mgr/gcaqjc/gcaqyj/bzt' },
|
||
|
|
// {
|
||
|
|
// id: id(), title: '工程安全预警', redirect: '/mgr/gcaqjc/gcaqyj/yhyj',
|
||
|
|
// children: [
|
||
|
|
// { id: id(), title: '隐患预警', path: '/mgr/gcaqjc/gcaqyj/yhyj' },
|
||
|
|
// { id: id(), title: '预警规则配置', path: '/mgr/gcaqjc/gcaqyj/yjgzpz' },
|
||
|
|
|
||
|
|
// ]
|
||
|
|
// },
|
||
|
|
// {
|
||
|
|
// id: id(), title: '工程安全分析', redirect: '/mgr/gcaqjc/gcaqfx/jrx',
|
||
|
|
// children: [
|
||
|
|
// { id: id(), title: '浸润线', path: '/mgr/gcaqjc/gcaqfx/jrx' },
|
||
|
|
|
||
|
|
// ]
|
||
|
|
// },
|
||
|
|
// {
|
||
|
|
// id: id(), title: '数据统计查询', redirect: '/mgr/gcaqjc/sjtjcx/sljx',
|
||
|
|
// children: [
|
||
|
|
// { id: id(), title: '测值查询', path: '/mgr/gcaqjc/sjtjcx/czcx' },
|
||
|
|
// { id: id(), title: '渗压监测', path: '/mgr/gcaqjc/sjtjcx/syjx' },
|
||
|
|
// { id: id(), title: '渗流监测', path: '/mgr/gcaqjc/sjtjcx/sljx' },
|
||
|
|
// { id: id(), title: '位移监测', path: '/mgr/gcaqjc/sjtjcx/wyjx' },
|
||
|
|
// { id: id(), title: '年度渗压统计表', path: '/mgr/gcaqjc/sjtjcx/ndsytjb' },
|
||
|
|
// { id: id(), title: '年度渗流统计表', path: '/mgr/gcaqjc/sjtjcx/ndsltjb' },
|
||
|
|
// { id: id(), title: '年度位移统计表', path: '/mgr/gcaqjc/sjtjcx/ndwytjb' },
|
||
|
|
|
||
|
|
// ]
|
||
|
|
// },
|
||
|
|
|
||
|
|
// ],
|
||
|
|
// },
|
||
|
|
// {
|
||
|
|
// id: id(),
|
||
|
|
// title: '日常管理',
|
||
|
|
// redirect: '/mgr/rcgl/gcdsj',
|
||
|
|
// icon: 'fxzb',
|
||
|
|
// children: [
|
||
|
|
// {
|
||
|
|
// id: id(),
|
||
|
|
// title: '工程大事件',
|
||
|
|
// path: '/mgr/rcgl/gcdsj',
|
||
|
|
// },
|
||
|
|
// {
|
||
|
|
// id: id(), title: '值班管理', redirect: '/mgr/rcgl/zbgl/zbb',
|
||
|
|
// children: [
|
||
|
|
// { id: id(), title: '值班表', path: '/mgr/rcgl/zbgl/zbb' },
|
||
|
|
// { id: id(), title: '值班日志', path: '/mgr/rcgl/zbgl/zbrz' },
|
||
|
|
|
||
|
|
// ]
|
||
|
|
// },
|
||
|
|
// {
|
||
|
|
// id: id(),
|
||
|
|
// title: '水质整编',
|
||
|
|
// path: '/mgr/rcgl/szzb',
|
||
|
|
// },
|
||
|
|
// {
|
||
|
|
// id: id(),
|
||
|
|
// title: '生态流量监控',
|
||
|
|
// path: '/mgr/rcgl/stlljc',
|
||
|
|
// },
|
||
|
|
// ],
|
||
|
|
// }, {
|
||
|
|
// id: id(),
|
||
|
|
// title: '供水兴利',
|
||
|
|
// redirect: '/mgr/gsxl/zfzl',
|
||
|
|
// icon: 'fxzb',
|
||
|
|
// children: [
|
||
|
|
// {
|
||
|
|
// id: id(),
|
||
|
|
// title: '闸阀总览',
|
||
|
|
// path: '/mgr/gsxl/zfzl',
|
||
|
|
// },
|
||
|
|
// {
|
||
|
|
// id: id(),
|
||
|
|
// title: '闸阀监控',
|
||
|
|
// path: '/mgr/gsxl/zfjk',
|
||
|
|
// },
|
||
|
|
// {
|
||
|
|
// id: id(),
|
||
|
|
// title: '供水统计分析',
|
||
|
|
// path: '/mgr/gsxl/gstjfx',
|
||
|
|
// },
|
||
|
|
// {
|
||
|
|
// id: id(),
|
||
|
|
// title: '典型年降雨资料',
|
||
|
|
// path: '/mgr/gsxl/dxnjyzl',
|
||
|
|
// },
|
||
|
|
// ],
|
||
|
|
// },
|
||
|
|
// {
|
||
|
|
// id: id(),
|
||
|
|
// title: '视频监控',
|
||
|
|
// redirect: '/mgr/spjk/spjk',
|
||
|
|
// icon: 'spjk',
|
||
|
|
// children: [
|
||
|
|
// {
|
||
|
|
// id: id(),
|
||
|
|
// title: '视频监控',
|
||
|
|
// path: '/mgr/spjk/spjk',
|
||
|
|
// },
|
||
|
|
// {
|
||
|
|
// id: id(),
|
||
|
|
// title: 'AI告警',
|
||
|
|
// path: '/mgr/spjk/aiWarn',
|
||
|
|
// },
|
||
|
|
// ],
|
||
|
|
// },
|
||
|
|
// {
|
||
|
|
// id: id(),
|
||
|
|
// title: '数字孪生大屏',
|
||
|
|
// path: '/',
|
||
|
|
// icon: 'spjk'
|
||
|
|
// },
|
||
|
|
// ]
|
||
|
|
}
|
||
|
|
|
||
|
|
export function defaultHomePage() {
|
||
|
|
return '/mgr/home'
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function currentBreadcrumbs() {
|
||
|
|
let url = window.location.href
|
||
|
|
let index = url.lastIndexOf('/')
|
||
|
|
let str = url.substring(index + 1, url.length)
|
||
|
|
let menuData: any = await loadMenu()
|
||
|
|
//console.log("menuData",menuData);
|
||
|
|
let breadcrumbsArray: any = []
|
||
|
|
menuData.map(function (item: any) {
|
||
|
|
if (item.children && item.children.length > 0) {
|
||
|
|
item.children.map(function (item1: any) {
|
||
|
|
if (item1.children && item1.children.length > 0) {
|
||
|
|
item1.children.map(function (item2: any) {
|
||
|
|
let index = item2.path.lastIndexOf('/')
|
||
|
|
if (str === item2.path.substring(index + 1, url.length)) {
|
||
|
|
breadcrumbsArray = [item.title, item1.title, item2.title]
|
||
|
|
}
|
||
|
|
})
|
||
|
|
} else {
|
||
|
|
let index = item1.path.lastIndexOf('/')
|
||
|
|
if (str === item1.path.substring(index + 1, url.length)) {
|
||
|
|
breadcrumbsArray = [item.title, item1.title]
|
||
|
|
}
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
})
|
||
|
|
return breadcrumbsArray
|
||
|
|
}
|