| | |
| | | MenuId: '', |
| | | MenuName: '', |
| | | MenuNo: '', |
| | | delButtons: [], |
| | | copyButtons: [], |
| | | thawButtons: [], |
| | | activeKey: 'component', |
| | | menuloading: false, |
| | | oriConfig: null, |
| | |
| | | document.getElementById('mk-mob-design-view').innerHTML = '<div style="text-align: center; font-size: 30px; margin-top: 40vh; height: 100vh; background: #fff;">本应用没有PC端页面的编辑权限,请联系管理员!</div>' |
| | | return |
| | | } |
| | | MKEmitter.addListener('delButtons', this.delButtons) |
| | | MKEmitter.addListener('thawButtons', this.thawButtons) |
| | | MKEmitter.addListener('copyButtons', this.copyButtons) |
| | | MKEmitter.addListener('changeEditMenu', this.changeEditMenu) |
| | | MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle) |
| | | MKEmitter.addListener('updateCustomComponent', this.updateCustomComponent) |
| | |
| | | this.setState = () => { |
| | | return |
| | | } |
| | | MKEmitter.removeListener('delButtons', this.delButtons) |
| | | MKEmitter.removeListener('thawButtons', this.thawButtons) |
| | | MKEmitter.removeListener('copyButtons', this.copyButtons) |
| | | MKEmitter.removeListener('changeEditMenu', this.changeEditMenu) |
| | | MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle) |
| | | MKEmitter.removeListener('updateCustomComponent', this.updateCustomComponent) |
| | |
| | | comloading: false |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | delButtons = (items) => { |
| | | const { copyButtons, delButtons } = this.state |
| | | |
| | | this.setState({ |
| | | delButtons: [...delButtons, ...items], |
| | | copyButtons: copyButtons.filter(item => !items.includes(item.uuid)) |
| | | }) |
| | | } |
| | | |
| | | copyButtons = (items) => { |
| | | this.setState({copyButtons: [...this.state.copyButtons, ...items]}) |
| | | } |
| | | |
| | | thawButtons = (item) => { |
| | | this.setState({thawButtons: [...this.state.thawButtons, item]}) |
| | | } |
| | | |
| | | closeView = () => { |
| | |
| | | |
| | | getMenuMessage = () => { |
| | | const { config } = this.state |
| | | let buttons = [] |
| | | let _sort = 1 |
| | | |
| | | let traversal = (components) => { |
| | | components.forEach(item => { |
| | | let list = components.map(item => { |
| | | let m = { |
| | | key: item.uuid, |
| | | title: item.name, |
| | | children: [] |
| | | } |
| | | if (item.type === 'tabs') { |
| | | let tabs = [] |
| | | item.subtabs.forEach(tab => { |
| | | traversal(tab.components) |
| | | let s = traversal(tab.components) |
| | | |
| | | if (s.length === 0) return |
| | | |
| | | tabs.push({ |
| | | key: tab.uuid, |
| | | title: tab.label, |
| | | children: s |
| | | }) |
| | | }) |
| | | |
| | | if (tabs.length > 0) { |
| | | m.children = tabs |
| | | } |
| | | } else if (item.type === 'group') { |
| | | traversal(item.components) |
| | | m.children = traversal(item.components) |
| | | } else if (item.type === 'card' || (item.type === 'table' && item.subtype === 'tablecard')) { |
| | | item.action && item.action.forEach(btn => { |
| | | this.checkBtn(btn) |
| | | buttons.push(`select '${btn.uuid}' as menuid, '${item.name + '-' + btn.label}' as menuname, '${_sort * 10}' as Sort`) |
| | | _sort++ |
| | | m.children.push({ |
| | | key: btn.uuid, |
| | | title: btn.label, |
| | | }) |
| | | }) |
| | | item.subcards.forEach(card => { |
| | | card.elements && card.elements.forEach(cell => { |
| | | if (cell.eleType !== 'button') return |
| | | this.checkBtn(cell) |
| | | buttons.push(`select '${cell.uuid}' as menuid, '${item.name + '-' + cell.label}' as menuname, '${_sort * 10}' as Sort`) |
| | | _sort++ |
| | | m.children.push({ |
| | | key: cell.uuid, |
| | | title: cell.label, |
| | | }) |
| | | }) |
| | | card.backElements && card.backElements.forEach(cell => { |
| | | if (cell.eleType !== 'button') return |
| | | this.checkBtn(cell) |
| | | buttons.push(`select '${cell.uuid}' as menuid, '${item.name + '-' + cell.label}' as menuname, '${_sort * 10}' as Sort`) |
| | | _sort++ |
| | | m.children.push({ |
| | | key: cell.uuid, |
| | | title: cell.label, |
| | | }) |
| | | }) |
| | | }) |
| | | } else if (item.type === 'carousel') { |
| | |
| | | card.elements && card.elements.forEach(cell => { |
| | | if (cell.eleType !== 'button') return |
| | | this.checkBtn(cell) |
| | | buttons.push(`select '${cell.uuid}' as menuid, '${item.name + '-' + cell.label}' as menuname, '${_sort * 10}' as Sort`) |
| | | _sort++ |
| | | m.children.push({ |
| | | key: cell.uuid, |
| | | title: cell.label, |
| | | }) |
| | | }) |
| | | }) |
| | | } else if (item.type === 'balcony') { |
| | | item.elements && item.elements.forEach(cell => { |
| | | if (cell.eleType !== 'button') return |
| | | this.checkBtn(cell) |
| | | buttons.push(`select '${cell.uuid}' as menuid, '${item.name + '-' + cell.label}' as menuname, '${_sort * 10}' as Sort`) |
| | | _sort++ |
| | | m.children.push({ |
| | | key: cell.uuid, |
| | | title: cell.label, |
| | | }) |
| | | } else if (item.type === 'line' || item.type === 'bar') { |
| | | item.action && item.action.forEach(btn => { |
| | | this.checkBtn(btn) |
| | | buttons.push(`select '${btn.uuid}' as menuid, '${item.name + '-' + btn.label}' as menuname, '${_sort * 10}' as Sort`) |
| | | _sort++ |
| | | }) |
| | | } else if (item.type === 'menubar') { |
| | | if (item.wrap.title) { |
| | | m.title = item.wrap.title |
| | | } |
| | | |
| | | m.children = item.subMenus.map(menu => { |
| | | return { |
| | | key: menu.uuid, |
| | | title: menu.setting.name |
| | | } |
| | | }) |
| | | } else if (item.type === 'table' && item.subtype === 'normaltable') { |
| | | item.action && item.action.forEach(btn => { |
| | | this.checkBtn(btn) |
| | | buttons.push(`select '${btn.uuid}' as menuid, '${item.name + '-' + btn.label}' as menuname, '${_sort * 10}' as Sort`) |
| | | _sort++ |
| | | m.children.push({ |
| | | key: btn.uuid, |
| | | title: btn.label, |
| | | }) |
| | | }) |
| | | item.cols && item.cols.forEach(col => { |
| | | if (col.type !== 'action') return |
| | | col.elements.forEach(btn => { |
| | | this.checkBtn(btn) |
| | | buttons.push(`select '${btn.uuid}' as menuid, '${item.name + '-' + btn.label}' as menuname, '${_sort * 10}' as Sort`) |
| | | _sort++ |
| | | m.children.push({ |
| | | key: btn.uuid, |
| | | title: btn.label, |
| | | }) |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | if (m.children.length === 0) return null |
| | | |
| | | return m |
| | | }) |
| | | |
| | | list = list.filter(Boolean) |
| | | |
| | | return list |
| | | } |
| | | |
| | | traversal(config.components) |
| | | let trees = traversal(config.components) |
| | | |
| | | return buttons |
| | | return trees |
| | | } |
| | | |
| | | checkBtn = (btn) => { |
| | |
| | | } |
| | | |
| | | submitConfig = () => { |
| | | const { delButtons, copyButtons, thawButtons } = this.state |
| | | let config = fromJS(this.state.config).toJS() |
| | | |
| | | if (!config.MenuName || !config.MenuNo || (config.cacheUseful === 'true' && !config.cacheTime)) { |
| | |
| | | param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') |
| | | param.secretkey = Utils.encrypt('', param.timestamp) |
| | | |
| | | let btnParam = { // 添加菜单按钮 |
| | | func: 'sPC_Button_AddUpt', |
| | | Type: 40, // 添加菜单下的按钮type为40,按钮下的按钮type为60 |
| | | ParentID: config.uuid, |
| | | MenuNo: config.MenuNo, |
| | | Template: 'webPage', |
| | | PageParam: '', |
| | | LongParam: '', |
| | | LText: [] |
| | | } |
| | | |
| | | btnParam.LText = this.getMenuMessage() |
| | | btnParam.LText = btnParam.LText.join(' union all ') |
| | | |
| | | let btnIds = btnParam.LText // 用于复制按钮的过滤 |
| | | |
| | | btnParam.LText = Utils.formatOptions(btnParam.LText) |
| | | btnParam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') |
| | | btnParam.secretkey = Utils.encrypt(btnParam.LText, btnParam.timestamp) |
| | | let roleParam = {key: config.uuid, title: config.MenuName, children: []} |
| | | roleParam.children = this.getMenuMessage() |
| | | console.log(roleParam) |
| | | |
| | | new Promise(resolve => { |
| | | let _config = fromJS(config).toJS() |
| | |
| | | _param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') |
| | | _param.secretkey = Utils.encrypt('', _param.timestamp) |
| | | |
| | | // let appMenuParam = null |
| | | // if (item.type === 'navbar') { |
| | | // appMenuParam = { |
| | | // func: 's_appmenus_addupt', |
| | | // exec_type: 'y' |
| | | // } |
| | | let roles = { |
| | | key: item.uuid, |
| | | title: item.name, |
| | | children: [] |
| | | } |
| | | |
| | | // appMenuParam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') |
| | | // appMenuParam.secretkey = Utils.encrypt('', _param.timestamp) |
| | | roles.children = item.menus.map(menu => { |
| | | return { |
| | | key: menu.MenuID, |
| | | title: menu.name |
| | | } |
| | | }) |
| | | console.log(roles) |
| | | |
| | | // let LText = [] |
| | | // let app_param = [] |
| | | // let kei_no = sessionStorage.getItem('kei_no') |
| | | // let userid = sessionStorage.getItem('CloudUserID') || '' |
| | | |
| | | // item.menus.forEach((fst, findex) => { |
| | | // // LText.push(`select '${fst.MenuID}','${fst.name}','','0','${sessionStorage.getItem('appId')}','0','${(findex + 1) * 10}','10','','${userid}','${window.GLOB.appkey}','${fst.MenuNo || ''}','${kei_no}','pc'`) |
| | | // LText.push(`select '${fst.MenuID}','${fst.name}','','0','0','0','${(findex + 1) * 10}','10','','${userid}','${window.GLOB.appkey}','${fst.MenuNo || ''}','${kei_no}','pc'`) |
| | | // app_param.push(`select '${window.GLOB.appkey}','${fst.MenuID}','${userid}','${(findex + 1) * 10}','','${fst.name}','${fst.MenuNo || ''}','0','10','${kei_no}','pc'`) |
| | | // if (fst.property === 'classify' && fst.sublist.length > 0) { |
| | | // fst.sublist.forEach(scd => { |
| | | // LText.push(`select '${scd.MenuID}','${scd.name}','','0','${fst.MenuID}','0','${(findex + 1) * 10}','20','','${userid}','${window.GLOB.appkey}','${scd.MenuNo || ''}','${kei_no}','pc'`) |
| | | // app_param.push(`select '${window.GLOB.appkey}','${scd.MenuID}','${userid}','${(findex + 1) * 10}','','${scd.name}','${scd.MenuNo || ''}','${fst.MenuID}','20','${kei_no}','pc'`) |
| | | |
| | | // if (scd.property === 'classify' && scd.sublist.length > 0) { |
| | | // scd.sublist.forEach(thd => { |
| | | // LText.push(`select '${thd.MenuID}','${thd.name}','','0','${scd.MenuID}','0','${(findex + 1) * 10}','20','','${userid}','${window.GLOB.appkey}','${thd.MenuNo || ''}','${kei_no}','pc'`) |
| | | // app_param.push(`select '${window.GLOB.appkey}','${thd.MenuID}','${userid}','${(findex + 1) * 10}','','${thd.name}','${thd.MenuNo || ''}','${scd.MenuID}','20','${kei_no}','pc'`) |
| | | // }) |
| | | // } |
| | | // }) |
| | | // } |
| | | // }) |
| | | // appMenuParam.LText = Utils.formatOptions(LText.join(' union ')) |
| | | // appMenuParam.LText1 = Utils.formatOptions(app_param.join(' union ')) |
| | | // } |
| | | |
| | | // if (appMenuParam) { |
| | | // Api.getSystemConfig(appMenuParam).then(_res => { |
| | | // if (!_res.status) { |
| | | // notification.warning({ |
| | | // top: 92, |
| | | // message: _res.message, |
| | | // duration: 5 |
| | | // }) |
| | | // this.setState({ menuloading: false }) |
| | | // return |
| | | // } |
| | | |
| | | // Api.getSystemConfig(_param).then(res => { |
| | | // if (!res.status) { |
| | | // notification.warning({ |
| | | // top: 92, |
| | | // message: res.message, |
| | | // duration: 5 |
| | | // }) |
| | | // this.setState({ menuloading: false }) |
| | | // return |
| | | // } |
| | | |
| | | // new_open_edition[item.uuid] = res.open_edition || '' |
| | | |
| | | // resolve() |
| | | // }) |
| | | // }) |
| | | // } else { |
| | | Api.getSystemConfig(_param).then(res => { |
| | | if (!res.status) { |
| | | notification.warning({ |
| | |
| | | new_open_edition[item.uuid] = res.open_edition || '' |
| | | resolve() |
| | | }) |
| | | // } |
| | | }) |
| | | }) |
| | | Promise.all(deffers).then(() => { |
| | |
| | | } |
| | | }) |
| | | } |
| | | }).then(res => { // 按钮或菜单删除 |
| | | if (!res) return |
| | | |
| | | if (delButtons.length === 0) { |
| | | return { status: true, nonexec: true } |
| | | } else { |
| | | let appHomeId = sessionStorage.getItem('appHomeId') |
| | | let _param = { |
| | | func: 'sPC_MainMenu_Del', |
| | | MenuID: delButtons.filter(id => id !== appHomeId).join(',') |
| | | } |
| | | return Api.getSystemConfig(_param) |
| | | } |
| | | }).then(res => { // 按钮解除冻结 |
| | | if (!res) return |
| | | if (!res.status) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: res.message, |
| | | duration: 5 |
| | | }) |
| | | return false |
| | | } else if (!res.nonexec) { // 执行删除后刷新菜单列表 |
| | | this.getAppMenus() |
| | | } |
| | | |
| | | let ids = thawButtons.filter(item => btnIds.indexOf(item) !== -1) |
| | | if (ids.length === 0) { |
| | | return { status: true } |
| | | } else { |
| | | return Api.getSystemConfig({ |
| | | func: 'sPC_MainMenu_ReDel', |
| | | MenuID: ids.join(',') |
| | | }) |
| | | } |
| | | }).then(res => { // 页面保存 |
| | | if (!res) return |
| | | |
| | | if (res.status) { |
| | | return Api.getSystemConfig(param) |
| | | } else { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: res.message, |
| | | duration: 5 |
| | | }) |
| | | return false |
| | | } |
| | | }).then(res => { // 页面按钮关系保存 |
| | | }).then(res => { |
| | | if (!res) return |
| | | |
| | | if (res.status) { |
| | |
| | | this.setState({ |
| | | config, |
| | | oriConfig: fromJS(config).toJS(), |
| | | }) |
| | | |
| | | if (btnParam.LText) { |
| | | return Api.getSystemConfig(btnParam) |
| | | } else { |
| | | return { |
| | | status: true |
| | | } |
| | | } |
| | | } else { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: res.message, |
| | | duration: 5 |
| | | }) |
| | | return false |
| | | } |
| | | }).then(res => { // 按钮复制 |
| | | if (!res) return |
| | | if (!res.status) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: res.message, |
| | | duration: 5 |
| | | }) |
| | | return false |
| | | } |
| | | |
| | | if (copyButtons.length === 0) { |
| | | return { |
| | | status: true |
| | | } |
| | | } else { |
| | | return new Promise(resolve => { |
| | | let deffers = copyButtons.map(item => { |
| | | return new Promise(resolve => { |
| | | if (btnIds.indexOf(item.uuid) === -1) { // 复制的按钮已删除 |
| | | resolve({ |
| | | status: true |
| | | }) |
| | | return |
| | | } |
| | | |
| | | Api.getSystemConfig({ |
| | | func: 'sPC_Get_LongParam', |
| | | MenuID: item.$originUuid |
| | | }).then(result => { |
| | | if (result.status) { |
| | | let _conf = '' |
| | | |
| | | try { |
| | | _conf = result.LongParam ? JSON.parse(window.decodeURIComponent(window.atob(result.LongParam))) : '' |
| | | } catch (e) { |
| | | console.warn('Parse Failure') |
| | | _conf = '' |
| | | } |
| | | |
| | | if (_conf) { |
| | | _conf.components = MenuUtils.resetConfig(_conf.components) |
| | | _conf.uuid = item.uuid |
| | | _conf.MenuID = item.uuid |
| | | _conf.Template = 'webPage' |
| | | } else { |
| | | resolve({ |
| | | status: true |
| | | }) |
| | | return |
| | | } |
| | | |
| | | let _param = { |
| | | func: 'sPC_ButtonParam_AddUpt', |
| | | ParentID: config.uuid, |
| | | MenuID: item.uuid, |
| | | MenuNo: '', |
| | | Template: 'webPage', |
| | | MenuName: item.label, |
| | | PageParam: JSON.stringify({Template: 'webPage'}), |
| | | LongParam: window.btoa(window.encodeURIComponent(JSON.stringify(_conf))) |
| | | } |
| | | |
| | | Api.getSystemConfig(_param).then(response => { |
| | | resolve(response) |
| | | }) |
| | | } |
| | | }) |
| | | }) |
| | | }) |
| | | Promise.all(deffers).then(result => { |
| | | let error = null |
| | | result.forEach(response => { |
| | | if (!response.status) { |
| | | error = response |
| | | } |
| | | }) |
| | | |
| | | if (error) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: error.message, |
| | | duration: 5 |
| | | }) |
| | | resolve(false) |
| | | } else { |
| | | resolve({ |
| | | status: true |
| | | }) |
| | | } |
| | | }) |
| | | }) |
| | | } |
| | | }).then(res => { |
| | | if (res && res.status) { |
| | | this.setState({ |
| | | delButtons: [], |
| | | copyButtons: [], |
| | | thawButtons: [], |
| | | menuloading: false, |
| | | comloading: true |
| | | }, () => { |
| | |
| | | comloading: false |
| | | }) |
| | | }) |
| | | |
| | | notification.success({ |
| | | top: 92, |
| | | message: '保存成功', |
| | | duration: 2 |
| | | }) |
| | | } else { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: res.message, |
| | | duration: 5 |
| | | }) |
| | | this.setState({ |
| | | menuloading: false |
| | | }) |