| | |
| | | import { fromJS } from 'immutable' |
| | | import { Spin, notification, Button } from 'antd' |
| | | import moment from 'moment' |
| | | // import { QuestionCircleOutlined } from '@ant-design/icons' |
| | | import { SwapOutlined } from '@ant-design/icons' |
| | | |
| | | import Api from '@/api' |
| | | import Utils from '@/utils/utils.js' |
| | |
| | | |
| | | class SysCheck extends Component { |
| | | state = { |
| | | stop: false, |
| | | loading: false, |
| | | menulist: [], |
| | | thdMenuList: [], |
| | | applist: [], |
| | | activeMenu: null, |
| | | remain: 0, |
| | | lackmenus: [], |
| | | outmenus: [], |
| | | backmenus: [], |
| | | appbackmenus: [], |
| | | unablemenus: [], |
| | | } |
| | | |
| | | sqlmap = null |
| | | repmap = null |
| | | |
| | | UNSAFE_componentWillMount() { |
| | | document.body.className = '' |
| | |
| | | |
| | | getMenus = () => { |
| | | this.setState({ |
| | | stop: false, |
| | | activeMenu: null, |
| | | remain: 0, |
| | | menulist: [], |
| | | lackmenus: [], |
| | | outmenus: [], |
| | | backmenus: [], |
| | | appbackmenus: [], |
| | | unablemenus: [], |
| | | loading: true |
| | | }) |
| | | Api.getCloudConfig({func: 's_get_pc_menus', systemType: window.GLOB.sysType, debug: 'Y'}).then(result => { |
| | | if (result.status) { |
| | | let thdMenuList = [] |
| | | let menulist = result.fst_menu.map(fst => { |
| | | let fstItem = { |
| | | MenuID: fst.MenuID, |
| | | MenuName: fst.MenuName, |
| | | children: [] |
| | | } |
| | | |
| | | let menulist = [] |
| | | result.fst_menu.forEach(fst => { |
| | | if (fst.snd_menu) { |
| | | fstItem.children = fst.snd_menu.map(snd => { |
| | | let sndItem = { |
| | | MenuID: snd.MenuID, |
| | | MenuName: snd.MenuName, |
| | | children: [] |
| | | } |
| | | |
| | | fst.snd_menu.forEach(snd => { |
| | | if (snd.trd_menu) { |
| | | sndItem.children = snd.trd_menu.map(trd => { |
| | | let trdItem = { |
| | | snd.trd_menu.forEach(trd => { |
| | | if (trd.PageParam) { |
| | | let pass = false |
| | | try { |
| | | let PageParam = JSON.parse(trd.PageParam) |
| | | if (PageParam && PageParam.Template === 'RolePermission') { |
| | | pass = true |
| | | } |
| | | } catch (e) { |
| | | |
| | | } |
| | | if (pass) return |
| | | } |
| | | |
| | | menulist.push({ |
| | | MenuID: trd.MenuID, |
| | | MenuName: trd.MenuName, |
| | | MenuNo: trd.MenuNo, |
| | | pName: fst.MenuName + '-' + snd.MenuName, |
| | | type: 'CustomPage', |
| | | } |
| | | |
| | | if (trd.PageParam) { |
| | | try { |
| | | trd.PageParam = JSON.parse(trd.PageParam) |
| | | trdItem.type = trd.PageParam.Template || 'CustomPage' |
| | | } catch (e) { |
| | | |
| | | } |
| | | } |
| | | |
| | | thdMenuList.push(trdItem) |
| | | |
| | | return trdItem |
| | | }) |
| | | }) |
| | | } |
| | | return sndItem |
| | | }) |
| | | } |
| | | return fstItem |
| | | }) |
| | | |
| | | this.setState({ |
| | | menulist, |
| | | thdMenuList |
| | | }) |
| | | |
| | | if (thdMenuList.length === 0) { |
| | | if (menulist.length === 0) { |
| | | this.setState({ |
| | | loading: false |
| | | }) |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '未查询到菜单信息!', |
| | | duration: 5 |
| | | }) |
| | | } else { |
| | | this.setState({ |
| | | menulist |
| | | }) |
| | | |
| | | this.sqlmap = new Map() |
| | | this.repmap = new Map() |
| | | this.getMenuParam(fromJS(thdMenuList).toJS()) |
| | | this.getMenuParam(fromJS(menulist).toJS()) |
| | | } |
| | | } else { |
| | | this.setState({ |
| | |
| | | } |
| | | |
| | | this.setState({ |
| | | stop: false, |
| | | activeMenu: null, |
| | | remain: 0, |
| | | menulist: [], |
| | | lackmenus: [], |
| | | outmenus: [], |
| | | backmenus: [], |
| | | appbackmenus: [], |
| | | unablemenus: [], |
| | | loading: true |
| | | }) |
| | | |
| | |
| | | this.setState({ |
| | | loading: false |
| | | }) |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '未查询到菜单信息!', |
| | | duration: 5 |
| | | }) |
| | | } else { |
| | | let deffers = applist.map((app, i) => |
| | | new Promise(resolve => { |
| | |
| | | |
| | | setTimeout(() => { |
| | | Api.getCloudConfig(param).then(result => { |
| | | delete result.ErrCode |
| | | delete result.ErrMesg |
| | | |
| | | if (result.status) { |
| | | result = { |
| | | ...app, |
| | | status: true, |
| | | menus: [] |
| | | } |
| | | app.status = true |
| | | app.menus = [] |
| | | |
| | | result.menus.forEach(m => { |
| | | if (m.menus_rolelist) { |
| | |
| | | } |
| | | delete m.menus_rolelist |
| | | |
| | | result.menus.push(m) |
| | | app.menus.push(m) |
| | | }) |
| | | resolve(app) |
| | | } else { |
| | | resolve(result) |
| | | } |
| | | |
| | | resolve(result) |
| | | }) |
| | | }, 200 * i) |
| | | }) |
| | |
| | | loading: false |
| | | }) |
| | | } else { |
| | | let list = response.filter(cell => cell.menus.length > 0) |
| | | this.setState({ |
| | | loading: false, |
| | | applist: list |
| | | let list = [] |
| | | response.forEach(item => { |
| | | item.menus.forEach(cell => { |
| | | list.push({ |
| | | ...cell, |
| | | lang: item.lang, |
| | | kei_no: item.kei_no, |
| | | typename: item.typename, |
| | | pName: `${item.name}(${item.typename} / ${item.lang})`, |
| | | }) |
| | | }) |
| | | }) |
| | | |
| | | if (list.length === 0) { |
| | | this.setState({ |
| | | loading: false |
| | | }) |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '未查询到菜单信息!', |
| | | duration: 5 |
| | | }) |
| | | } else { |
| | | this.setState({ |
| | | menulist: list |
| | | }) |
| | | |
| | | this.sqlmap = new Map() |
| | | this.getMenuParam(fromJS(list).toJS()) |
| | | } |
| | | } |
| | | }) |
| | | } |
| | |
| | | } |
| | | |
| | | getMenuParam = (menus) => { |
| | | const { lackmenus, outmenus, unablemenus, backmenus } = this.state |
| | | const { lackmenus, outmenus, unablemenus, backmenus, appbackmenus, stop } = this.state |
| | | |
| | | let menu = menus.shift() |
| | | const { MenuID } = menu |
| | | |
| | | let param = { |
| | | func: 'sPC_Get_LongParam', |
| | | MenuID: MenuID |
| | | MenuID: menu.MenuID |
| | | } |
| | | |
| | | if (menu.kei_no) { |
| | | param.TypeCharOne = menu.kei_no |
| | | param.typename = menu.typename |
| | | param.lang = menu.lang |
| | | } |
| | | |
| | | this.setState({ |
| | | activeMenu: menu, |
| | | remain: menus.length |
| | | }) |
| | | |
| | | Api.getCloudConfig(param).then(result => { |
| | | if (result.status) { |
| | |
| | | |
| | | if (!config) { |
| | | this.setState({lackmenus: [...lackmenus, menu]}) |
| | | } else if (!['CustomPage', 'BaseTable'].includes(config.Template)) { |
| | | } else if (!menu.kei_no && !['CustomPage', 'BaseTable'].includes(config.Template)) { |
| | | this.setState({outmenus: [...outmenus, menu]}) |
| | | } else if (config.Template === 'CustomPage' && config.version !== 2.0) { |
| | | } else if (!menu.kei_no && config.Template === 'CustomPage' && config.version !== 2.0) { |
| | | menu.version = config.version |
| | | this.setState({outmenus: [...outmenus, menu]}) |
| | | } else if (!config.enabled) { |
| | |
| | | let sqls = getAllSqls(config) |
| | | let keys = sqls.map(item => item.uuid) |
| | | |
| | | sqls.forEach(item => { |
| | | if (this.sqlmap.has(item.uuid)) { |
| | | if (!this.repmap.has(item.uuid)) { |
| | | this.repmap.set(item.uuid, menu) |
| | | } |
| | | } else { |
| | | this.sqlmap.set(item.uuid, menu) |
| | | } |
| | | }) |
| | | |
| | | if (keys.length > Array.from(new Set(keys)).length) { |
| | | this.setState({backmenus: [...backmenus, menu]}) |
| | | } else { |
| | | let repeat = false |
| | | let premenu = null |
| | | sqls.forEach(item => { |
| | | if (this.sqlmap.has(item.uuid)) { |
| | | window.mkInfo(item) |
| | | if (repeat) return |
| | | repeat = true |
| | | premenu = this.sqlmap.get(item.uuid) |
| | | } else { |
| | | this.sqlmap.set(item.uuid, menu) |
| | | } |
| | | }) |
| | | if (premenu) { |
| | | this.setState({appbackmenus: [...appbackmenus, [premenu, menu]]}) |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (menus.length > 0 && !stop) { |
| | | setTimeout(() => { |
| | | this.getMenuParam(menus) |
| | | }, 200) |
| | | } else { |
| | | this.setState({ |
| | | loading: false |
| | | }) |
| | | } |
| | | } else { |
| | | this.setState({ |
| | | loading: false |
| | | }) |
| | | notification.warning({ |
| | | top: 92, |
| | | message: result.message, |
| | |
| | | } |
| | | |
| | | render () { |
| | | const { loading } = this.state |
| | | const { loading, activeMenu, menulist, remain, lackmenus, outmenus, unablemenus, backmenus, appbackmenus } = this.state |
| | | |
| | | if (!sessionStorage.getItem('UserID')) return null |
| | | |
| | | return ( |
| | | <div className="mk-app-check"> |
| | | <Header view="manage" /> |
| | | {loading ? |
| | | <div className="loading-mask"> |
| | | <Spin size="large" /> |
| | | </div> : null |
| | | } |
| | | {loading ? <Spin size="large" /> : null} |
| | | <div className="view-wrap"> |
| | | <div> |
| | | <Button disabled={loading} type="primary" style={{marginRight: '15px'}} onClick={this.getMenus}>检查管理系统菜单</Button> |
| | | <Button disabled={loading} type="primary" onClick={this.getAppList}>检查子应用菜单</Button> |
| | | <div className="action"> |
| | | <Button disabled={loading} style={{marginRight: '15px'}} onClick={this.getMenus}>检查管理系统菜单</Button> |
| | | <Button disabled={loading} style={{marginRight: '15px'}} onClick={this.getAppList}>检查子应用菜单</Button> |
| | | <Button onClick={() => this.setState({stop: true})}>停止</Button> |
| | | </div> |
| | | {activeMenu ? <div className="menu-msg">当前菜单:{activeMenu.MenuName} <span></span> {activeMenu.pName} <span></span> 进度({menulist.length - remain} / {menulist.length})</div> : null} |
| | | {lackmenus.length ? <div className="item-wrap"> |
| | | <div className="title">菜单配置不存在</div> |
| | | {lackmenus.map((item, i) => { |
| | | return <div key={i}>{item.MenuName} <span></span> {item.pName}</div> |
| | | })} |
| | | </div> : null} |
| | | {outmenus.length ? <div className="item-wrap"> |
| | | <div className="title">菜单配置需要升级</div> |
| | | {outmenus.map((item, i) => { |
| | | return <div key={i}>{item.MenuName} <span></span> {item.pName}</div> |
| | | })} |
| | | </div> : null} |
| | | {unablemenus.length ? <div className="item-wrap"> |
| | | <div className="title">菜单未启用</div> |
| | | {unablemenus.map((item, i) => { |
| | | return <div key={i}>{item.MenuName} <span></span> {item.pName}</div> |
| | | })} |
| | | </div> : null} |
| | | {backmenus.length ? <div className="item-wrap"> |
| | | <div className="title">菜单后端脚本ID重复</div> |
| | | {backmenus.map((item, i) => { |
| | | return <div key={i}>{item.MenuName} <span></span> {item.pName}</div> |
| | | })} |
| | | </div> : null} |
| | | {appbackmenus.length ? <div className="item-wrap"> |
| | | <div className="title">菜单后端脚本ID重复(菜单间)</div> |
| | | {appbackmenus.map((item, i) => { |
| | | return <div key={i}>{item[0].MenuName} <span></span> {item[0].pName} <SwapOutlined /> {item[1].MenuName} <span></span> {item[1].pName}</div> |
| | | })} |
| | | </div> : null} |
| | | </div> |
| | | </div> |
| | | ) |