import React, {Component} from 'react'
|
import { fromJS } from 'immutable'
|
import { Spin, notification, Button, Modal } from 'antd'
|
import { SwapOutlined } from '@ant-design/icons'
|
import moment from 'moment'
|
import md5 from 'md5'
|
|
import Api from '@/api'
|
import Utils from '@/utils/utils.js'
|
import asyncComponent from '@/utils/asyncComponent'
|
import './index.scss'
|
|
const Header = asyncComponent(() => import('./header'))
|
const { confirm } = Modal
|
|
class SysCheck extends Component {
|
state = {
|
stop: false,
|
loading: false,
|
menulist: [],
|
activeMenu: null,
|
remain: 0,
|
lackmenus: [],
|
lacklinks: [],
|
outmenus: [],
|
backmenus: [],
|
appbackmenus: [],
|
btnmenus: [],
|
appbtnmenus: [],
|
unablemenus: [],
|
}
|
|
sqlmap = null
|
btnmap = null
|
allMenus = []
|
appMenus = {}
|
|
// delete _val.controlField 删除按钮控制字段
|
|
UNSAFE_componentWillMount() {
|
document.body.className = ''
|
}
|
|
componentDidMount() {
|
if (!sessionStorage.getItem('UserID')) {
|
this.props.history.replace('/login')
|
return
|
}
|
}
|
|
/**
|
* @description 组件销毁,清除state更新
|
*/
|
componentWillUnmount () {
|
this.setState = () => {
|
return
|
}
|
}
|
|
getMenus = () => {
|
this.setState({
|
stop: false,
|
activeMenu: null,
|
remain: 0,
|
menulist: [],
|
lackmenus: [],
|
lacklinks: [],
|
outmenus: [],
|
backmenus: [],
|
appbackmenus: [],
|
btnmenus: [],
|
appbtnmenus: [],
|
unablemenus: [],
|
loading: true
|
})
|
|
this.allMenus = []
|
Api.getCloudConfig({func: 's_get_pc_menus', systemType: window.GLOB.sysType, debug: 'Y'}).then(result => {
|
if (result.status) {
|
let menulist = []
|
result.fst_menu.forEach(fst => {
|
if (fst.snd_menu) {
|
fst.snd_menu.forEach(snd => {
|
if (snd.trd_menu) {
|
snd.trd_menu.forEach(trd => {
|
this.allMenus.push(trd.MenuID)
|
|
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,
|
})
|
})
|
}
|
})
|
}
|
})
|
|
if (menulist.length === 0) {
|
this.setState({
|
loading: false
|
})
|
notification.warning({
|
top: 92,
|
message: '未查询到菜单信息!',
|
duration: 5
|
})
|
} else {
|
this.sqlmap = new Map()
|
this.btnmap = new Map()
|
|
let errlist = sessionStorage.getItem('syscheck_main')
|
errlist = errlist ? JSON.parse(errlist) : null
|
|
if (!errlist) {
|
this.setState({
|
menulist
|
})
|
this.getMenuParam(fromJS(menulist).toJS())
|
} else {
|
const that = this
|
confirm({
|
title: '是否跳过检查合格菜单?',
|
content: '',
|
okText: '跳过',
|
cancelText: '不跳过',
|
onOk() {
|
menulist = menulist.filter(item => errlist.includes(item.MenuID))
|
|
that.setState({
|
menulist
|
})
|
that.getMenuParam(fromJS(menulist).toJS())
|
},
|
onCancel() {
|
that.setState({
|
menulist
|
})
|
that.getMenuParam(fromJS(menulist).toJS())
|
}
|
})
|
}
|
}
|
} else {
|
this.setState({
|
loading: false
|
})
|
notification.warning({
|
top: 92,
|
message: result.message,
|
duration: 5
|
})
|
}
|
})
|
}
|
|
getAppList = () => {
|
let param = {
|
func: 's_get_kei'
|
}
|
|
this.setState({
|
stop: false,
|
activeMenu: null,
|
remain: 0,
|
menulist: [],
|
lackmenus: [],
|
lacklinks: [],
|
outmenus: [],
|
backmenus: [],
|
appbackmenus: [],
|
btnmenus: [],
|
appbtnmenus: [],
|
unablemenus: [],
|
loading: true
|
})
|
|
this.allMenus = []
|
this.appMenus = {}
|
Api.getCloudConfig(param).then(result => {
|
if (result.status) {
|
let applist = []
|
result.data.forEach(item => {
|
if (!item.data_detail) return
|
item.data_detail.forEach(cell => {
|
applist.push({
|
ID: cell.d_id,
|
name: item.remark,
|
typename: cell.typename,
|
kei_no: item.kei_no,
|
lang: cell.lang,
|
menus: []
|
})
|
})
|
})
|
|
if (applist.length === 0) {
|
this.setState({
|
loading: false
|
})
|
notification.warning({
|
top: 92,
|
message: '未查询到菜单信息!',
|
duration: 5
|
})
|
} else {
|
let deffers = applist.map((app, i) =>
|
new Promise(resolve => {
|
let param = {
|
func: 's_get_app_menus',
|
TypeCharOne: app.kei_no,
|
typename: app.typename,
|
LText: `select '${window.GLOB.appkey}'`,
|
timestamp: moment().format('YYYY-MM-DD HH:mm:ss'),
|
lang: app.lang
|
}
|
|
param.secretkey = Utils.encrypt(param.LText, param.timestamp)
|
|
setTimeout(() => {
|
Api.getCloudConfig(param).then(result => {
|
if (result.status) {
|
app.status = true
|
app.menus = []
|
|
this.appMenus[app.ID] = []
|
|
result.menus.forEach(m => {
|
this.appMenus[app.ID].push(m.MenuID)
|
|
if (m.menus_rolelist) {
|
try {
|
let pageParam = JSON.parse(window.decodeURIComponent(window.atob(m.menus_rolelist)))
|
if (pageParam.type === 'navbar') {
|
m.type = pageParam.type
|
}
|
} catch(e) {
|
|
}
|
if (m.type === 'navbar') return
|
}
|
delete m.menus_rolelist
|
m.$pid = app.ID
|
|
app.menus.push(m)
|
})
|
resolve(app)
|
} else {
|
resolve(result)
|
}
|
})
|
}, 200 * i)
|
})
|
)
|
|
Promise.all(deffers).then(response => {
|
let error = response.filter(cell => !cell.status)
|
if (error[0]) {
|
notification.warning({
|
top: 92,
|
message: error[0].message,
|
duration: 5
|
})
|
this.setState({
|
loading: false
|
})
|
} else {
|
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.sqlmap = new Map()
|
this.btnmap = new Map()
|
|
let errlist = sessionStorage.getItem('syscheck_app')
|
errlist = errlist ? JSON.parse(errlist) : null
|
|
if (!errlist) {
|
this.setState({
|
menulist: list
|
})
|
this.getMenuParam(fromJS(list).toJS())
|
} else {
|
const that = this
|
confirm({
|
title: '是否跳过检查合格菜单?',
|
content: '',
|
okText: '跳过',
|
cancelText: '不跳过',
|
onOk() {
|
list = list.filter(item => errlist.includes(item.MenuID))
|
|
that.setState({
|
menulist: list
|
})
|
that.getMenuParam(fromJS(list).toJS())
|
},
|
onCancel() {
|
that.setState({
|
menulist: list
|
})
|
that.getMenuParam(fromJS(list).toJS())
|
}
|
})
|
}
|
}
|
}
|
})
|
}
|
} else {
|
this.setState({
|
loading: false
|
})
|
notification.warning({
|
top: 92,
|
message: result.message,
|
duration: 5
|
})
|
}
|
})
|
}
|
|
getMenuParam = (menus) => {
|
const { lackmenus, lacklinks, outmenus, unablemenus, backmenus, appbackmenus, btnmenus, appbtnmenus, stop } = this.state
|
|
let menu = menus.shift()
|
|
let param = {
|
func: 'sPC_Get_LongParam',
|
MenuID: menu.MenuID
|
}
|
|
let appType = 'admin'
|
if (menu.kei_no) {
|
param.TypeCharOne = menu.kei_no
|
param.typename = menu.typename
|
param.lang = menu.lang
|
|
appType = 'pc'
|
if (['pad', 'mob'].includes(menu.typename)) {
|
appType = 'mob'
|
}
|
|
this.allMenus = this.appMenus[menu.$pid] || []
|
}
|
|
this.setState({
|
activeMenu: menu,
|
remain: menus.length
|
})
|
|
Api.getCloudConfig(param).then(result => {
|
if (result.status) {
|
let config = null
|
|
try {
|
config = result.LongParam ? JSON.parse(window.decodeURIComponent(window.atob(result.LongParam))) : null
|
} catch (e) {
|
console.warn('Parse Failure')
|
config = null
|
}
|
|
if (!config) {
|
this.setState({lackmenus: [...lackmenus, menu]})
|
} else if (!menu.kei_no && !['CustomPage', 'BaseTable'].includes(config.Template)) {
|
this.setState({outmenus: [...outmenus, menu]})
|
} 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) {
|
this.setState({unablemenus: [...unablemenus, menu]})
|
} else {
|
let sqls = []
|
let btns = []
|
let links = []
|
|
this.getAllSqls(config, appType, sqls, btns, links)
|
|
if (links.length) {
|
links.forEach(item => {
|
window.mkInfo(menu.pName + ':' + item)
|
})
|
this.setState({lacklinks: [...lacklinks, menu]})
|
}
|
|
if (sqls.length) {
|
let keys = sqls.map(item => item.uuid)
|
|
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 (btns.length) {
|
let keys = btns.map(item => item.uuid)
|
if (keys.length > Array.from(new Set(keys)).length) {
|
this.setState({btnmenus: [...btnmenus, menu]})
|
} else {
|
let repeat = false
|
let premenu = null
|
btns.forEach(item => {
|
if (this.btnmap.has(item.uuid)) {
|
window.mkInfo(item)
|
if (repeat) return
|
repeat = true
|
premenu = this.btnmap.get(item.uuid)
|
} else {
|
this.btnmap.set(item.uuid, menu)
|
}
|
})
|
if (premenu) {
|
this.setState({appbtnmenus: [...appbtnmenus, [premenu, menu]]})
|
}
|
}
|
}
|
}
|
|
if (menus.length > 0 && !stop) {
|
setTimeout(() => {
|
this.getMenuParam(menus)
|
}, 200)
|
} else {
|
this.setState({
|
loading: false
|
}, () => {
|
this.record(menu.kei_no ? 'app' : '')
|
})
|
}
|
} else {
|
this.setState({
|
loading: false
|
})
|
notification.warning({
|
top: 92,
|
message: result.message,
|
duration: 5
|
})
|
}
|
})
|
}
|
|
getAllSqls = (config, appType, sqls, btns, links) => {
|
let filterComponent = (components, label = '') => {
|
components.forEach(item => {
|
item.$menuname = (config.MenuName || '') + label + '-' + (item.name || '')
|
|
if (item.type === 'tabs') {
|
item.subtabs.forEach(tab => {
|
filterComponent(tab.components, label)
|
})
|
} else if (item.type === 'group') {
|
filterComponent(item.components, label)
|
} else {
|
if (item.wrap && item.setting) {
|
if (item.wrap.datatype === 'public' || item.wrap.datatype === 'static') {
|
item.setting.interType = 'other'
|
}
|
}
|
|
if (appType === 'mob' && item.type !== 'search' && item.type !== 'topbar' && item.search && item.search.length > 0) {
|
item.search = []
|
}
|
if (appType !== 'mob' && item.search && item.search.length > 0) {
|
item.search.forEach(cell => {
|
if (['select', 'link', 'multiselect', 'checkcard', 'radio'].includes(cell.type) && cell.resourceType === '1' && cell.dataSource) {
|
sqls.push({uuid: md5(item.uuid + cell.uuid), type: 'sForm', LText: `${item.$menuname}-${cell.label}(搜索)`})
|
}
|
})
|
}
|
|
if (item.subtype === 'tablecard') { // 兼容
|
item.type = 'card'
|
}
|
|
if (item.setting && item.setting.interType === 'system') {
|
item.setting.$name = item.$menuname || ''
|
|
if (!item.setting.primaryKey) {
|
window.mkInfo(`${item.$menuname} 未设置主键!`)
|
} else if (item.columns) {
|
let columns = item.columns.map(c => c.field)
|
if (!columns.includes(item.setting.primaryKey)) {
|
window.mkInfo(`${item.$menuname} 主键已失效!`)
|
}
|
}
|
|
item.scripts && item.scripts.forEach(c => {
|
if (/"ErrCode":\s*"true"/.test(c.sql)) {
|
window.mkInfo(`${item.$menuname} 数据源自定义脚本中使用了"ErrCode":"true"!`)
|
}
|
})
|
|
sqls.push({uuid: item.uuid, type: 'datasource', LText: item.setting.$name})
|
}
|
|
item.action && item.action.forEach(cell => {
|
cell.logLabel = item.$menuname + '-' + cell.label
|
|
btns.push({uuid: cell.uuid, label: cell.logLabel})
|
|
if (cell.hidden === 'true') return false
|
|
resetButton(item, cell)
|
})
|
|
if (item.type === 'table') {
|
let getCols = (cols) => {
|
cols.forEach(col => {
|
if (col.type === 'action') {
|
col.type = 'custom'
|
}
|
if (col.type === 'colspan') {
|
getCols(col.subcols || [])
|
} else if (col.type === 'custom') {
|
col.elements.forEach(cell => {
|
if (cell.eleType !== 'button') {
|
resetElement(item, cell)
|
return
|
}
|
|
cell.logLabel = item.$menuname + '-' + cell.label
|
|
btns.push({uuid: cell.uuid, label: cell.logLabel})
|
|
if (cell.hidden === 'true') return
|
|
resetButton(item, cell)
|
})
|
} else if (item.subtype === 'editable' && col.editable === 'true') {
|
if (col.editType === 'select' && col.resourceType === '1') {
|
sqls.push({uuid: col.uuid, type: 'tbForm', LText: `${item.$menuname}-${col.label}(列表单)`})
|
} else if (col.editType === 'popSelect') {
|
if (col.pops) {
|
col.pops.forEach(n => {
|
sqls.push({uuid: n.uuid, type: 'popSource', LText: `${item.$menuname}-${col.label}(列表单)`})
|
})
|
} else {
|
sqls.push({uuid: col.uuid, type: 'popSource', LText: `${item.$menuname}-${col.label}(列表单)`})
|
}
|
}
|
}
|
})
|
}
|
|
getCols(item.cols)
|
|
if (item.subtype === 'editable' && item.submit.intertype === 'system') {
|
item.submit.logLabel = item.$menuname + '-提交'
|
|
sqls.push({uuid: 'submit_' + item.uuid, type: 'editable', LText: item.submit.logLabel})
|
}
|
} else if (['card', 'carousel', 'timeline'].includes(item.type)) {
|
item.subcards && item.subcards.forEach(card => {
|
if (card.setting.click === 'menu' && card.setting.menu) {
|
if (appType === 'admin') {
|
if (!Array.isArray(card.setting.menu)) {
|
links.push(item.$menuname)
|
} else {
|
let menuId = card.setting.menu.slice(-1)[0]
|
if (!this.allMenus.includes(menuId)) {
|
links.push(item.$menuname)
|
}
|
}
|
} else {
|
if (typeof(card.setting.menu) !== 'string') {
|
links.push(item.$menuname)
|
} else if (!this.allMenus.includes(card.setting.menu)) {
|
links.push(item.$menuname)
|
}
|
}
|
} else if (card.setting.click === 'menus' && card.menus && card.menus.length > 0) {
|
if (appType === 'admin') {
|
card.menus.forEach(m => {
|
if (!m.MenuID || !this.allMenus.includes(m.MenuID)) {
|
links.push(item.$menuname)
|
}
|
})
|
} else {
|
card.menus.forEach(m => {
|
if (typeof(m.menu) !== 'string' || !this.allMenus.includes(m.menu)) {
|
links.push(item.$menuname)
|
}
|
})
|
}
|
}
|
|
card.elements && card.elements.forEach(cell => {
|
if (cell.eleType !== 'button') {
|
resetElement(item, cell)
|
return
|
}
|
|
cell.logLabel = item.$menuname + '-' + cell.label
|
|
btns.push({uuid: cell.uuid, label: cell.logLabel})
|
|
if (cell.hidden === 'true') return
|
|
resetButton(item, cell)
|
})
|
|
if (!card.backElements || card.backElements.length === 0) return
|
|
card.backElements.forEach(cell => {
|
if (cell.eleType !== 'button') {
|
resetElement(item, cell)
|
return
|
}
|
|
cell.logLabel = item.$menuname + '-' + cell.label
|
|
btns.push({uuid: cell.uuid, label: cell.logLabel})
|
|
if (cell.hidden === 'true') return
|
|
resetButton(item, cell)
|
})
|
})
|
} else if (item.type === 'balcony') {
|
item.elements.forEach(cell => {
|
if (cell.eleType !== 'button') {
|
resetElement(item, cell)
|
return
|
}
|
|
cell.logLabel = item.$menuname + '-' + cell.label
|
|
btns.push({uuid: cell.uuid, label: cell.logLabel})
|
|
if (cell.hidden === 'true') return
|
|
resetButton(item, cell)
|
})
|
} else if (item.type === 'form') {
|
item.subcards.forEach(group => {
|
group.subButton.OpenType = 'formSubmit'
|
group.subButton.uuid = group.uuid
|
group.subButton.modal = {
|
fields: group.fields
|
}
|
|
group.subButton.logLabel = item.$menuname + '-' + group.subButton.label
|
|
btns.push({uuid: group.uuid, label: group.subButton.logLabel})
|
|
resetButton(item, group.subButton)
|
})
|
} else if (item.type === 'module' && item.subtype === 'invoice') {
|
if (item.buyer.setting && item.buyer.setting.interType === 'system') {
|
sqls.push({uuid: item.uuid + 'buyer', type: 'datasource', LText: item.$menuname + '-buyer'})
|
}
|
|
if (item.detail.setting && item.detail.setting.interType === 'system') {
|
sqls.push({uuid: item.uuid + 'detail', type: 'datasource', LText: item.$menuname + '-detail'})
|
}
|
|
sqls.push({uuid: item.uuid + item.billSaveBtn.type, type: 'button', LText: item.$menuname + '-' + item.billSaveBtn.label})
|
|
sqls.push({uuid: item.uuid + item.billOutBtn.type, type: 'button', LText: item.$menuname + '-' + item.billOutBtn.label})
|
|
sqls.push({uuid: item.uuid + 'billback', type: 'btnCallBack', LText: item.$menuname + '-' + item.billOutBtn.label + '(回调)'})
|
} else if (item.type === 'menubar') {
|
item.subMenus.forEach(cell => {
|
if (cell.setting.type === 'menu') {
|
if (!this.allMenus.includes(cell.uuid)) {
|
links.push(item.$menuname + '-' + cell.setting.name)
|
}
|
} else if (cell.setting.type === 'linkmenu') {
|
if (!this.allMenus.includes(cell.setting.linkMenuId)) {
|
links.push(item.$menuname + '-' + cell.setting.name)
|
}
|
}
|
})
|
} else if (item.type === 'login') {
|
if (!item.wrap.linkmenu || !this.allMenus.includes(item.wrap.linkmenu)) {
|
links.push(item.$menuname)
|
}
|
} else if (item.type === 'topbar') {
|
if (item.wrap.menus) {
|
item.wrap.menus.forEach(m => {
|
if (!this.allMenus.includes(m.menu)) {
|
links.push(item.$menuname)
|
}
|
})
|
}
|
}
|
}
|
})
|
}
|
|
let resetElement = (item, cell) => {
|
if (cell.linkmenu && cell.linkmenu.length) {
|
if (appType === 'admin') {
|
if (!Array.isArray(cell.linkmenu)) {
|
links.push(item.$menuname)
|
} else {
|
let menuId = cell.linkmenu.slice(-1)[0]
|
if (!this.allMenus.includes(menuId)) {
|
links.push(item.$menuname)
|
}
|
}
|
} else {
|
if (cell.linkmenu !== 'goback' && (typeof(cell.linkmenu) !== 'string' || !this.allMenus.includes(cell.linkmenu))) {
|
links.push(item.$menuname)
|
}
|
}
|
}
|
}
|
|
let resetButton = (item, cell) => {
|
if (['exec', 'prompt', 'pop', 'form', 'formSubmit'].includes(cell.OpenType)) {
|
if (cell.intertype === 'system' || cell.procMode === 'system') { // 系统接口
|
sqls.push({uuid: cell.uuid, type: 'button', LText: cell.logLabel})
|
}
|
if (cell.callbackType === 'script' && cell.verify && cell.verify.cbScripts) {
|
sqls.push({uuid: 'back_' + cell.uuid, type: 'btnCallBack', LText: cell.logLabel})
|
}
|
|
if (cell.verify) {
|
cell.verify.scripts && cell.verify.scripts.forEach(c => {
|
if (/"ErrCode":\s*"true"/.test(c.sql)) {
|
window.mkInfo(`${cell.logLabel} 自定义脚本中使用了"ErrCode":"true"!`)
|
}
|
})
|
cell.verify.cbScripts && cell.verify.cbScripts.forEach(c => {
|
if (/"ErrCode":\s*"true"/.test(c.sql)) {
|
window.mkInfo(`${cell.logLabel} 回调脚本中使用了"ErrCode":"true"!`)
|
}
|
})
|
}
|
|
if (['pop', 'formSubmit'].includes(cell.OpenType) && cell.modal && cell.modal.fields) {
|
cell.modal.fields.forEach(form => {
|
// if (form.type === 'fileupload' && form.compress !== 'oss') {
|
// window.mkInfo(`${cell.logLabel}-${form.label}`)
|
// }
|
// 数据源sql语句,预处理,权限黑名单字段设置为隐藏表单
|
if (['select', 'link', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(form.type) && form.resourceType === '1') {
|
sqls.push({uuid: md5(cell.uuid + form.uuid), type: 'form', LText: `${cell.logLabel}-${form.label}(表单)`})
|
} else if (form.type === 'popSelect') {
|
sqls.push({uuid: md5(cell.uuid + form.uuid), type: 'popSource', LText: `${cell.logLabel}-${form.label}(表单)`})
|
}
|
})
|
}
|
} else if (cell.OpenType === 'excelIn') {
|
if (cell.intertype === 'system') {
|
sqls.push({uuid: cell.uuid, type: 'excelIn', LText: cell.logLabel})
|
}
|
} else if (cell.OpenType === 'excelOut') {
|
if (cell.intertype === 'system' && cell.verify && cell.verify.dataType === 'custom') {
|
sqls.push({uuid: cell.uuid, type: 'excelOut', LText: cell.logLabel || ''})
|
} else if (cell.intertype === 'system' && cell.verify && item.setting && item.setting.interType === 'system') {
|
if (appType === 'mob') {
|
cell.pagination = 'false'
|
}
|
if (item.subtype === 'dualdatacard' || item.setting.laypage !== cell.pagination) {
|
sqls.push({uuid: cell.uuid, type: 'excelOut', LText: cell.logLabel || ''})
|
}
|
}
|
} else if (cell.OpenType === 'funcbutton') {
|
if (cell.funcType === 'print') {
|
if (cell.intertype === 'system' && cell.verify && cell.verify.dataType === 'custom') {
|
sqls.push({uuid: cell.uuid, type: 'print', LText: cell.logLabel || ''})
|
}
|
if (cell.execMode === 'pop' && cell.modal && cell.modal.fields) {
|
cell.modal.fields.forEach(form => {
|
// if (form.type === 'fileupload' && form.compress !== 'oss') {
|
// window.mkInfo(`${cell.logLabel}-${form.label}`)
|
// }
|
// 数据源sql语句,预处理,权限黑名单字段设置为隐藏表单
|
if (['select', 'link', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(form.type) && form.resourceType === '1') {
|
sqls.push({uuid: md5(cell.uuid + form.uuid), type: 'form', LText: `${cell.logLabel}-${form.label}(表单)`})
|
} else if (form.type === 'popSelect') {
|
sqls.push({uuid: md5(cell.uuid + form.uuid), type: 'popSource', LText: `${cell.logLabel}-${form.label}(表单)`})
|
}
|
})
|
}
|
} else if ((cell.funcType === 'refund' || cell.funcType === 'pay') && cell.payMode === 'system') {
|
sqls.push({uuid: cell.uuid, type: 'pay', LText: cell.logLabel})
|
}
|
} else if (cell.OpenType === 'innerpage' || cell.OpenType === 'outerpage') {
|
if (cell.pageTemplate === 'pay' && cell.payMode === 'system') {
|
sqls.push({uuid: cell.uuid, type: 'pay', LText: cell.logLabel})
|
}
|
} else if (cell.OpenType === 'popview') {
|
if (cell.config && cell.config.components && cell.config.enabled) {
|
let label = (item.name ? '-' + item.name : '') + '-' + cell.label
|
|
filterComponent(cell.config.components, label, true)
|
}
|
}
|
|
if (appType === 'admin') {
|
if (cell.refreshTab && cell.refreshTab.length) {
|
let tabId = cell.refreshTab[cell.refreshTab.length - 1]
|
if (!this.allMenus.includes(tabId)) {
|
links.push(cell.logLabel)
|
}
|
}
|
if (cell.openmenu && cell.openmenu.length) {
|
if (!Array.isArray(cell.openmenu)) {
|
links.push(cell.logLabel)
|
} else {
|
let menuId = cell.openmenu.slice(-1)[0]
|
if (!this.allMenus.includes(menuId)) {
|
links.push(cell.logLabel)
|
}
|
}
|
}
|
if (cell.linkmenu && cell.linkmenu.length) {
|
if (!Array.isArray(cell.linkmenu)) {
|
links.push(cell.logLabel)
|
} else {
|
let menuId = cell.linkmenu.slice(-1)[0]
|
if (!this.allMenus.includes(menuId)) {
|
links.push(cell.logLabel)
|
}
|
}
|
}
|
} else {
|
if (cell.openmenu && cell.openmenu.length && cell.openmenu !== 'goback' && (typeof(cell.openmenu) !== 'string' || !this.allMenus.includes(cell.openmenu))) {
|
links.push(cell.logLabel)
|
}
|
if (cell.linkmenu && cell.linkmenu.length && cell.linkmenu !== 'goback' && (typeof(cell.linkmenu) !== 'string' || !this.allMenus.includes(cell.linkmenu))) {
|
links.push(cell.logLabel)
|
}
|
}
|
}
|
|
if (appType === 'mob') {
|
config.components.forEach(item => {
|
if (item.type === 'topbar' && item.wrap.type !== 'navbar' && item.search) {
|
let search = []
|
search.push(...item.search.fields)
|
|
item.search.groups.forEach(group => {
|
search.push(...group.fields)
|
})
|
|
if (search.length > 0) {
|
search.forEach(cell => {
|
if (['select', 'link', 'multiselect', 'checkcard', 'radio'].includes(cell.type) && cell.resourceType === '1' && cell.dataSource) {
|
sqls.push({uuid: cell.uuid, type: 'sForm', LText: `搜索栏-${cell.label}(表单)`})
|
}
|
})
|
}
|
}
|
})
|
}
|
|
if (config.interfaces && config.interfaces.length > 0) {
|
config.interfaces.forEach(m => {
|
if (m.status !== 'true' || m.setting.interType !== 'system') return false
|
|
m.setting.$name = (config.MenuName || '') + '-' + (m.name || '')
|
|
sqls.push({uuid: m.uuid, type: 'interface', LText: m.setting.$name})
|
})
|
}
|
|
filterComponent(config.components)
|
}
|
|
record = (type) => {
|
const { lackmenus, lacklinks, outmenus, unablemenus, backmenus, appbackmenus, btnmenus, appbtnmenus } = this.state
|
|
let menus = []
|
|
lackmenus.forEach(item => {
|
menus.push(item.MenuID)
|
})
|
lacklinks.forEach(item => {
|
menus.push(item.MenuID)
|
})
|
outmenus.forEach(item => {
|
menus.push(item.MenuID)
|
})
|
unablemenus.forEach(item => {
|
menus.push(item.MenuID)
|
})
|
backmenus.forEach(item => {
|
menus.push(item.MenuID)
|
})
|
appbackmenus.forEach(item => {
|
menus.push(item[0].MenuID)
|
menus.push(item[1].MenuID)
|
})
|
btnmenus.forEach(item => {
|
menus.push(item.MenuID)
|
})
|
appbtnmenus.forEach(item => {
|
menus.push(item[0].MenuID)
|
menus.push(item[1].MenuID)
|
})
|
|
menus = Array.from(new Set(menus))
|
|
if (type === 'app') {
|
if (menus.length) {
|
sessionStorage.setItem('syscheck_app', JSON.stringify(menus))
|
} else {
|
sessionStorage.removeItem('syscheck_app')
|
}
|
} else {
|
if (menus.length) {
|
sessionStorage.setItem('syscheck_main', JSON.stringify(menus))
|
} else {
|
sessionStorage.removeItem('syscheck_main')
|
}
|
}
|
}
|
|
render () {
|
const { loading, activeMenu, menulist, remain, lackmenus, lacklinks, outmenus, unablemenus, backmenus, appbackmenus, btnmenus, appbtnmenus } = this.state
|
|
if (!sessionStorage.getItem('UserID')) return null
|
|
return (
|
<div className="mk-app-check">
|
<Header view="manage" />
|
{loading ? <Spin size="large" /> : null}
|
<div className="view-wrap">
|
<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}
|
{lacklinks.length ? <div className="item-wrap">
|
<div className="title">关联菜单不存在</div>
|
{lacklinks.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}
|
{btnmenus.length ? <div className="item-wrap">
|
<div className="title">菜单按钮ID重复</div>
|
{btnmenus.map((item, i) => {
|
return <div key={i}>{item.MenuName} <span></span> {item.pName}</div>
|
})}
|
</div> : null}
|
{appbtnmenus.length ? <div className="item-wrap">
|
<div className="title">菜单按钮ID重复(菜单间)</div>
|
{appbtnmenus.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>
|
)
|
}
|
}
|
|
export default SysCheck
|