king
2025-04-21 f3d4db769ba9b51b799d981511a710fd443d0e08
src/router/index.js
@@ -1,128 +1,71 @@
import React, {Component} from 'react'
import {HashRouter, Switch, Route, Redirect} from 'react-router-dom'
import md5 from 'md5'
import moment from 'moment'
import options from '@/store/options.js'
import asyncComponent from '@/utils/asyncComponent'
import asyncLoadComponent from '@/utils/asyncLoadComponent'
const Pay = asyncLoadComponent(() => import('@/views/pay'))
const Main = asyncLoadComponent(() => import('@/views/main'))
const Login = asyncLoadComponent(() => import('@/views/login'))
const Main = asyncLoadComponent(() => import('@/views/main'))
const Sso = asyncLoadComponent(() => import('@/views/sso'))
const Pay = asyncLoadComponent(() => import('@/views/pay'))
const MainParams = asyncLoadComponent(() => import('@/views/mainparams'))
const Design = asyncLoadComponent(() => import('@/views/design'))
const NotFound = asyncComponent(() => import('@/views/404'))
const MobManage = asyncLoadComponent(() => import('@/views/mobmanage'))
const AppManage = asyncLoadComponent(() => import('@/views/appmanage'))
const AppCheck = asyncLoadComponent(() => import('@/views/appcheck'))
const PCDesign = asyncLoadComponent(() => import('@/views/pcdesign'))
const MobDesign = asyncLoadComponent(() => import('@/views/mobdesign'))
const ImDesign = asyncLoadComponent(() => import('@/views/imdesign'))
const MenuDesign = asyncLoadComponent(() => import('@/views/menudesign'))
const BaseDesign = asyncLoadComponent(() => import('@/views/basedesign'))
const TableDesign = asyncLoadComponent(() => import('@/views/tabledesign'))
const BillPrint = asyncLoadComponent(() => import('@/views/billprint'))
const PrintT = asyncLoadComponent(() => import('@/views/printTemplate'))
const Interface = asyncLoadComponent(() => import('@/views/interface'))
const RoleManage = asyncLoadComponent(() => import('@/views/rolemanage'))
const SystemFunc = asyncLoadComponent(() => import('@/views/systemfunc'))
const SystemProc = asyncLoadComponent(() => import('@/views/systemproc'))
// const SystemCheck = asyncLoadComponent(() => import('@/views/syscheck'))
const MkIframe = asyncLoadComponent(() => import('@/views/mkiframe'))
// const MkAi = asyncLoadComponent(() => import('@/views/mkai'))
const routers = [
  {path: '/login', name: 'login', component: Login, auth: false},
  {path: '/pay/:param', name: 'pay', component: Pay, auth: false},
  {path: '/print/:param', name: 'print', component: PrintT, auth: false},
  {path: '/ssologin/:param', name: 'ssologin', auth: true},
  {path: '/main', name: 'main', component: Main, auth: true},
  {path: '/mobmanage', name: 'mobmanage', component: MobManage, auth: true},
  {path: '/mobdesign/:appId/:appType/:appCode/:appName', name: 'mobdesign', component: MobDesign, auth: true},
  {path: '/menudesign/:param', name: 'menudesign', component: MenuDesign, auth: true},
  {path: '/billprint/:param', name: 'billprint', component: BillPrint, auth: true},
  {path: '/paramsmain/:param', name: 'pmain', component: Main, auth: true}
  {path: '/login', name: 'login', component: Login},
  {path: '/main', name: 'main', component: Main},
  {path: '/pay/:param', name: 'pay', component: Pay},
  {path: '/print/:param', name: 'print', component: PrintT},
  {path: '/ssologin/:param', name: 'ssologin', component: Sso},
  {path: '/design', name: 'design', component: Design},
  {path: '/appmanage', name: 'appmanage', component: AppManage},
  {path: '/appcheck', name: 'appcheck', component: AppCheck},
  {path: '/pcdesign/:param', name: 'pcdesign', component: PCDesign},
  {path: '/mobdesign/:param', name: 'mobdesign', component: MobDesign},
  {path: '/imdesign/:param', name: 'imdesign', component: ImDesign},
  {path: '/menudesign/:param', name: 'menudesign', component: MenuDesign},
  {path: '/basedesign/:param', name: 'basedesign', component: BaseDesign},
  {path: '/tabledesign/:param', name: 'tabledesign', component: TableDesign},
  {path: '/billprint/:param', name: 'billprint', component: BillPrint},
  {path: '/docprint/:menuId', name: 'docprint', component: BillPrint},
  {path: '/docprint/:menuId/:id', name: 'docprint', component: BillPrint},
  {path: '/tab/:menuId', name: 'tab', component: MainParams},
  {path: '/role/:param', name: 'role', component: RoleManage},
  {path: '/hs', name: 'hs', component: SystemFunc},
  {path: '/proc', name: 'proc', component: SystemProc},
  {path: '/proc/:func', name: 'proc', component: SystemProc},
  {path: '/iframe/:menuId/:loginUid', name: 'iframe', component: MkIframe},
  {path: '/iframe/:menuId/:loginUid/:bid', name: 'iframe', component: MkIframe},
  {path: '/view/:menuId', name: 'iframe', component: MkIframe},
  {path: '/view/:menuId/:bid', name: 'iframe', component: MkIframe},
  {path: '/interface', name: 'interface', component: Interface},
  // {path: '/ai', name: 'ai', component: MkAi},
  // {path: '/syscheck', name: 'syscheck', component: SystemCheck}
]
export default class RouteConfig extends Component {
  controlRoute (item, props) {
    if (!item.auth) {            // 不需要授权,直接跳转(登录页)
      return (<item.component {...props}/>)
    }
    if (item.name === 'pmain') { // 新窗口打开,取url参数放入sessionStorage
      try {
        let _param = JSON.parse(window.decodeURIComponent(window.atob(props.match.params.param)))
        if (typeof(_param) === 'object') {
          _param.UserID && sessionStorage.setItem('UserID', _param.UserID)
          _param.LoginUID && sessionStorage.setItem('LoginUID', _param.LoginUID)
          _param.User_Name && sessionStorage.setItem('User_Name', _param.User_Name)
          _param.Full_Name && sessionStorage.setItem('Full_Name', _param.Full_Name)
          _param.debug && sessionStorage.setItem('debug', _param.debug)
          _param.dataM && sessionStorage.setItem('dataM', _param.dataM)
          _param.avatar && sessionStorage.setItem('avatar', _param.avatar)
          _param.role_id && sessionStorage.setItem('role_id', _param.role_id)
          _param.Member_Level && sessionStorage.setItem('Member_Level', _param.Member_Level)
          if (_param.mainlogo) {
            window.GLOB.mainlogo = _param.mainlogo
          }
          if (_param.mstyle && options.styles[_param.mstyle]) {
            document.getElementById('root').className = options.styles[_param.mstyle]
          }
          if (_param.MainMenu) {
            sessionStorage.setItem('MainMenu', _param.MainMenu)
          }
          if (_param.SubMenu) {
            sessionStorage.setItem('SubMenu', _param.SubMenu)
          }
          if (_param.ThirdMenu) {
            sessionStorage.setItem('ThirdMenu', _param.ThirdMenu)
          }
          if (_param.param) {
            _param.param.ThirdMenu = _param.ThirdMenu
            sessionStorage.setItem('MenuParam', JSON.stringify(_param.param))
          }
        }
      } catch {
        console.warn('菜单参数解析错误!')
      }
      return (<item.component {...props}/>)
    } else if (item.name === 'ssologin') {
      try {
        let _param = JSON.parse(window.decodeURIComponent(window.atob(props.match.params.param)))
        if (typeof(_param) === 'object') {
          if (_param.UserID) {
            sessionStorage.setItem('UserID', _param.UserID)
          }
          if (_param.LoginUID) {
            sessionStorage.setItem('LoginUID', _param.LoginUID)
          }
          if (_param.User_Name) {
            sessionStorage.setItem('User_Name', _param.User_Name)
          }
        }
      } catch {
        console.warn('菜单参数解析错误!')
      }
      return (<Redirect to={{ pathname: '/main'}}/>)
    }
    let userId = sessionStorage.getItem('UserID') // 判断是否存在userid
    let authCode = localStorage.getItem(window.location.href.split('#')[0] + 'AuthCode') // 判断系统是否在授权期限内
    let _s = md5('mksoft' + moment().format('YYYYMMDD'))
    let isauth = authCode && authCode.includes(_s)
    if (userId && isauth) {
      return (<item.component {...props}/>)
    } else {
      // return (<Redirect to={{ pathname: '/login', state: {from: props.location}}}/>)
      return (<Redirect to={{ pathname: '/login'}}/>)
    }
  }
  render () {
    return (
      <HashRouter>
        <Switch>
          {
            routers.map((item, index) => {
              return (
                <Route key={index} path={item.path} name={item.name} exact render={ props => {
                  return this.controlRoute(item, props)
                }}/>
              )
            })
          }
          {routers.map((item, index) => <Route key={index} path={item.path} name={item.name} exact render={ props => <item.component {...props}/>}/>)}
          <Redirect exact from="/" to="login"/>
          <Route component= {NotFound}/>
        </Switch>