tsg-web/src/models/auth/_.ts

411 lines
12 KiB
TypeScript
Raw Normal View History

2024-09-20 15:02:50 +08:00
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[]> {
2024-09-23 09:34:40 +08:00
// 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
2024-09-20 15:02:50 +08:00
const id = idgen()
2024-09-23 09:34:40 +08:00
return [
{ id: id(), title: '水库一张图', path: '/mgr/home', icon: 'jbqk' },
{ id: id(), title: '四预', redirect: '/mgr/sy/fhxzfx', icon: 'fxzb',
children: [
{ id: id(), title: '防洪形势', path: '/mgr/sy/fhxzfx'},
// { 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: '基本2情况', 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' },
2024-09-20 15:02:50 +08:00
2024-09-23 09:34:40 +08:00
// ]
// },
// {
// id: id(), title: '工程安全分析', redirect: '/mgr/gcaqjc/gcaqfx/jrx',
// children: [
// { id: id(), title: '浸润线', path: '/mgr/gcaqjc/gcaqfx/jrx' },
2024-09-20 15:02:50 +08:00
2024-09-23 09:34:40 +08:00
// ]
// },
// {
// 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' },
2024-09-20 15:02:50 +08:00
2024-09-23 09:34:40 +08:00
// ]
// },
2024-09-20 15:02:50 +08:00
2024-09-23 09:34:40 +08:00
// ],
// },
// {
// 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' },
2024-09-20 15:02:50 +08:00
2024-09-23 09:34:40 +08:00
// ]
// },
// {
// 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'
// },
]
2024-09-20 15:02:50 +08:00
}
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
}