import React, {Component} from 'react'
|
import PropTypes from 'prop-types'
|
import { is, fromJS } from 'immutable'
|
import { Modal, Button, notification } from 'antd'
|
import moment from 'moment'
|
import md5 from 'md5'
|
|
import { colorTransform } from '@/utils/option.js'
|
import { getTables } from '@/utils/utils-custom.js'
|
import Api from '@/api'
|
import Utils from '@/utils/utils.js'
|
import './index.scss'
|
|
const { confirm } = Modal
|
|
class UpdateTable extends Component {
|
static propTpyes = {
|
config: PropTypes.object
|
}
|
|
state = {}
|
delButtons = []
|
baseMsg = {}
|
|
shouldComponentUpdate (nextProps, nextState) {
|
return !is(fromJS(this.state), fromJS(nextState))
|
}
|
|
trigger = () => {
|
const { config, menu, btnTab } = this.props
|
const _this = this
|
|
if (!config || !menu || !menu.LongParam) {
|
notification.warning({
|
top: 92,
|
message: '未获取到菜单配置!',
|
duration: 5
|
})
|
return
|
}
|
|
let _config = fromJS(config).toJS()
|
|
if (menu.LongParam.setting) {
|
_config.setting.primaryKey = menu.LongParam.setting.primaryKey
|
}
|
|
if (!_config.tabgroups) {
|
_config.tabgroups = [{ uuid: 'tabs', sublist: [] }]
|
} else if (typeof(_config.tabgroups[0]) === 'string') {
|
let _tabgroups = []
|
_config.tabgroups.forEach(groupId => {
|
let _group = {
|
uuid: groupId,
|
sublist: fromJS(_config[groupId]).toJS()
|
}
|
|
delete _config[groupId]
|
|
_tabgroups.push(_group)
|
})
|
|
_config.tabgroups = _tabgroups
|
}
|
|
_config.action = _config.action.map(item => {
|
if (item.intertype === 'inner' && !item.innerFunc) {
|
item.intertype = 'system'
|
}
|
return item
|
})
|
|
_config.btnId = btnTab.uuid
|
_config.btnName = btnTab.label
|
|
confirm({
|
title: '确定升级当前菜单吗?',
|
content: '',
|
onOk() {
|
return new Promise(resolve => {
|
_this.execUpdate(resolve, _config)
|
})
|
},
|
onCancel() {}
|
})
|
}
|
|
execUpdate = (_resolve, config) => {
|
const { menu } = this.props
|
|
this.delButtons = []
|
this.baseMsg = {
|
fstMenuId: config.fstMenuId,
|
parentId: config.ParentId,
|
MenuName: config.MenuName,
|
MenuNo: config.MenuNo,
|
}
|
|
let MenuID = md5(menu.MenuID + config.btnId)
|
|
let _config = {
|
version: 1.0,
|
uuid: MenuID,
|
MenuID: MenuID,
|
fstMenuId: menu.fstMenuId,
|
parentId: menu.ParentId,
|
Template: 'CustomPage',
|
easyCode: '',
|
enabled: false,
|
MenuName: menu.MenuName + '-' + config.btnName,
|
MenuNo: menu.MenuNo + '_' + MenuID.substr(-4),
|
OpenType: 'newtab',
|
tables: config.tables || [],
|
urlFields: [],
|
hidden: 'true',
|
Remark: '',
|
components: [],
|
viewType: 'menu',
|
style: { backgroundColor: '#ffffff', paddingTop: '16px', paddingBottom: '80px', paddingLeft: '16px', paddingRight: '16px'},
|
}
|
|
let formActions = []
|
let popActions = []
|
let errors = []
|
|
let mainF = {
|
uuid: Utils.getuuid(),
|
type: 'form',
|
format: 'object', // 组件属性 - 数据格式
|
pageable: false, // 组件属性 - 是否可分页
|
switchable: false, // 组件属性 - 数据是否可切换
|
width: 24,
|
name: '主表单',
|
subtype: 'simpleform',
|
setting: { interType: 'system' },
|
wrap: { name: '主表单', width: 24, datatype: 'static', enable: 'true', closeEnable: 'true' },
|
style: { marginLeft: '0px', marginRight: '0px', marginTop: '8px', marginBottom: '8px' },
|
headerStyle: { fontSize: '16px', borderBottomWidth: '1px', borderBottomColor: '#e8e8e8' },
|
columns: [],
|
scripts: [],
|
subcards: []
|
}
|
|
let card = {
|
uuid: Utils.getuuid(),
|
setting: {title: '', align: 'left_right', enable: 'true'},
|
style: {},
|
fields: [],
|
subButton: {label: '确定', type: 'submit', reload: 'false', sql: '', Ot: 'notRequired', enable: 'true', style: {backgroundColor: 'rgba(255, 255, 255, 1)', color: 'rgba(24, 144, 255, 1)', paddingLeft: '20px', paddingRight: '20px', paddingTop: '5px', paddingBottom: '5px', borderColor: 'rgba(24, 144, 255, 1)', borderWidth: '1px'}},
|
closeButton: {label: '关闭', type: 'close', enable: 'true', style: { color: 'rgba(245, 34, 45, 1)', paddingTop: '5px', paddingRight: '20px', marginLeft: '20px', backgroundColor: '#ffffff', borderColor: 'rgba(245, 34, 45, 1)', paddingLeft: '20px', borderWidth: '1px', paddingBottom: '5px'}},
|
}
|
|
let btn = config.action[0]
|
|
card.subButton.intertype = btn.intertype
|
card.subButton.innerFunc = btn.innerFunc || ''
|
card.subButton.execSuccess = btn.execSuccess || 'never'
|
card.subButton.execError = btn.execError || 'never'
|
|
if (btn.intertype === 'outer') {
|
card.subButton.procMode = btn.innerFunc ? 'inner' : 'none'
|
card.subButton.sysInterface = btn.sysInterface || 'false'
|
card.subButton.interface = btn.interface || ''
|
card.subButton.outerFunc = btn.outerFunc || ''
|
card.subButton.callbackFunc = btn.callbackFunc || ''
|
card.subButton.callbackType = btn.callbackFunc ? 'func' : 'none'
|
} else if (btn.intertype === 'system') {
|
card.subButton.sqlType = btn.sqlType || ''
|
card.subButton.sql = btn.sql || ''
|
card.subButton.verify = btn.verify || null
|
}
|
|
if (config.setting.datatype === 'query') {
|
mainF.wrap.datatype = 'dynamic'
|
mainF.setting = {
|
interType: config.setting.interType || 'system',
|
innerFunc: config.setting.innerFunc || '',
|
outerFunc: config.setting.outerFunc || '',
|
interface: config.setting.interface || '',
|
dataresource: config.setting.dataresource || '',
|
sysInterface: config.setting.sysInterface || 'false',
|
order: '',
|
primaryKey: config.setting.primaryKey || 'ID',
|
tableName: menu.LongParam.setting.tableName || '',
|
supModule: ['empty'],
|
sync: 'false',
|
onload: 'true'
|
}
|
|
if (mainF.setting.interType === 'inner' && !mainF.setting.innerFunc) {
|
mainF.setting.interType = 'system'
|
}
|
|
card.subButton.Ot = 'requiredSgl'
|
}
|
|
config.groups.forEach(group => {
|
if (!group.isDefault) {
|
card.fields.push({
|
uuid: Utils.getuuid(),
|
label: group.label,
|
span: 24,
|
type: 'split'
|
})
|
}
|
|
group.sublist.forEach(item => {
|
item.labelwidth = 33.3
|
item.span = 12
|
|
if (item.type === 'textarea' && config.setting.cols === '2') {
|
item.labelwidth = 16.2
|
item.span = 24
|
}
|
|
card.fields.push(item)
|
})
|
})
|
|
let _ids = []
|
|
card.fields.forEach(item => {
|
if (item.field) {
|
_ids.push(item.field.toLowerCase())
|
if (item.type === 'number') {
|
mainF.columns.push({
|
datatype: `decimal(18,${item.decimal === 0 ? 0 : (item.decimal || 2)})`,
|
field: item.field,
|
decimal: item.decimal || 0,
|
label: item.label,
|
type: 'number',
|
uuid: Utils.getuuid()
|
})
|
} else {
|
mainF.columns.push({
|
datatype: `Nvarchar(${item.fieldlength || 50})`,
|
field: item.field,
|
fieldlength: 50,
|
label: item.label,
|
type: 'text',
|
uuid: Utils.getuuid()
|
})
|
}
|
}
|
})
|
|
mainF.subcards.push(card)
|
|
let oldtabs = {
|
mainTable: mainF.uuid
|
}
|
|
if (mainF.wrap.datatype === 'dynamic') {
|
let primaryKey = mainF.setting.primaryKey.toLowerCase()
|
if (!_ids.includes(primaryKey)) {
|
mainF.columns.push({
|
datatype: `Nvarchar(50)`,
|
field: mainF.setting.primaryKey,
|
fieldlength: 50,
|
label: mainF.setting.primaryKey,
|
type: 'text',
|
uuid: Utils.getuuid()
|
})
|
}
|
} else {
|
oldtabs.mainTable = 'empty'
|
}
|
|
_config.components.push(mainF)
|
|
let _tbs = []
|
if (config.tabgroups && config.tabgroups.length > 0) {
|
config.tabgroups.forEach((m, i) => {
|
if (!m.sublist) return
|
|
m.sublist = m.sublist.filter(c => !!c.linkTab)
|
|
if (m.sublist.length === 0) return
|
|
let tabs = {
|
uuid: Utils.getuuid(),
|
type: 'tabs',
|
subtype: 'tabs',
|
name: '标签组' + (i + 1),
|
width: 24,
|
setting: {name: '标签组' + (i + 1), width: 24, position: 'top'},
|
style: {},
|
subtabs: m.sublist.map(n => {
|
let tab = { uuid: Utils.getuuid(), label: n.label, icon: n.icon, permission: 'false', components: [
|
{
|
uuid: Utils.getuuid(),
|
linkTab: n.linkTab,
|
name: n.label,
|
useMSearch: 'false',
|
supModule: n.supMenu || '',
|
equalTab: n.equalTab && n.equalTab.length > 0 ? n.equalTab[0] : ''
|
}
|
]}
|
this.delButtons.push(n.linkTab)
|
oldtabs[n.uuid] = tab.components[0].uuid
|
|
_tbs.push(tab.components[0])
|
|
return tab
|
})
|
}
|
|
_config.components.push(tabs)
|
})
|
}
|
|
if (_tbs.length > 0) {
|
let defers = _tbs.map((item, i) => {
|
return new Promise((resolve) => {
|
setTimeout(() => {
|
Api.getCloudConfig({
|
func: 'sPC_Get_LongParam',
|
MenuID: item.linkTab
|
}).then(res => {
|
if (res.status) {
|
let _LongParam = ''
|
if (res.LongParam) {
|
try {
|
_LongParam = JSON.parse(window.decodeURIComponent(window.atob(res.LongParam)))
|
} catch (e) {
|
console.warn('Parse Failure')
|
_LongParam = ''
|
}
|
}
|
if (_LongParam) {
|
_LongParam.uuid = item.linkTab
|
resolve(_LongParam)
|
} else {
|
resolve({uuid: item.linkTab, $empty: true})
|
}
|
} else {
|
notification.warning({
|
top: 92,
|
message: res.message,
|
duration: 5
|
})
|
resolve({uuid: item.linkTab, $empty: true})
|
}
|
})
|
}, i * 50)
|
})
|
})
|
Promise.all(defers).then(res => {
|
let menus = {}
|
res.forEach(item => {
|
if (item && !item.$empty) {
|
menus[item.uuid] = item
|
}
|
})
|
|
let supIds = []
|
_config.components = _config.components.map(item => {
|
if (item.type === 'tabs') {
|
item.subtabs = item.subtabs.map(tab => {
|
tab.components[0] = this.getTable(menus[tab.components[0].linkTab], tab.components[0], errors, formActions, popActions, oldtabs)
|
supIds.push([item.uuid, tab.uuid, tab.components[0].uuid])
|
return tab
|
})
|
}
|
return item
|
})
|
|
_config.components = _config.components.map(item => {
|
if (item.type === 'tabs') {
|
item.subtabs = item.subtabs.map(tab => {
|
if (tab.components[0].setting.supModule && tab.components[0].setting.supModule.length === 1) {
|
supIds.forEach(ids => {
|
if (ids[2] === tab.components[0].setting.supModule[0]) {
|
tab.components[0].setting.supModule = ids
|
}
|
})
|
}
|
return tab
|
})
|
}
|
return item
|
})
|
|
this.setPopView(_resolve, _config, formActions, popActions, errors)
|
})
|
} else {
|
this.setPopView(_resolve, _config, formActions, popActions, errors)
|
}
|
}
|
|
setPopView = (_resolve, _config, formActions, popActions, errors) => {
|
if (popActions.length > 0) {
|
let defers = popActions.map((item, i) => {
|
return new Promise((resolve) => {
|
setTimeout(() => {
|
Api.getCloudConfig({
|
func: 'sPC_Get_LongParam',
|
MenuID: item.linkTab
|
}).then(res => {
|
if (res.status) {
|
let _LongParam = ''
|
if (res.LongParam) {
|
try {
|
_LongParam = JSON.parse(window.decodeURIComponent(window.atob(res.LongParam)))
|
} catch (e) {
|
console.warn('Parse Failure')
|
_LongParam = ''
|
}
|
}
|
|
if (_LongParam) {
|
_LongParam.uuid = item.uuid
|
resolve(_LongParam)
|
} else {
|
resolve({uuid: item.uuid, $empty: true})
|
}
|
} else {
|
notification.warning({
|
top: 92,
|
message: res.message,
|
duration: 5
|
})
|
resolve({uuid: item.uuid, $empty: true})
|
}
|
})
|
}, i * 50)
|
})
|
})
|
Promise.all(defers).then(res => {
|
let menus = {}
|
res.forEach(item => {
|
if (item && !item.$empty) {
|
menus[item.uuid] = item
|
}
|
})
|
|
_config.components.forEach(item => {
|
if (item.type === 'tabs') {
|
item.subtabs.forEach(tab => {
|
tab.components[0].action.forEach(btn => {
|
if (btn.OpenType === 'popview') {
|
if (menus[btn.uuid]) {
|
let mainTb = {name: '主表', uuid: Utils.getuuid(), useMSearch: 'false'}
|
|
btn.config = {
|
uuid: btn.uuid,
|
MenuID: btn.uuid,
|
ParentId: tab.components[0].uuid,
|
MenuName: btn.label,
|
tables: _config.tables || [],
|
Template: 'CustomPage',
|
components: [this.getTable(menus[btn.uuid], mainTb, errors, formActions)],
|
viewType: 'popview',
|
style: { backgroundColor: '#ffffff', backgroundImage: '', paddingTop: '16px', paddingBottom: '40px', paddingLeft: '16px', paddingRight: '16px' }
|
}
|
|
btn.config.enabled = this.setEnabled(btn.config)
|
} else {
|
errors.push(tab.label + '中按钮《' + btn.label + '》配置信息丢失')
|
}
|
}
|
})
|
tab.components[0].cols.forEach(col => {
|
if (col.type !== 'custom') return
|
col.elements.forEach(btn => {
|
if (btn.eleType !== 'button') return
|
if (btn.OpenType === 'popview') {
|
if (menus[btn.uuid]) {
|
let mainTb = {name: '主表', uuid: Utils.getuuid(), useMSearch: 'false'}
|
|
btn.config = {
|
uuid: btn.uuid,
|
MenuID: btn.uuid,
|
ParentId: tab.components[0].uuid,
|
MenuName: btn.label,
|
tables: _config.tables || [],
|
Template: 'CustomPage',
|
components: [this.getTable(menus[btn.uuid], mainTb, errors, formActions)],
|
viewType: 'popview',
|
style: { backgroundColor: '#ffffff', backgroundImage: '', paddingTop: '16px', paddingBottom: '40px', paddingLeft: '16px', paddingRight: '16px' }
|
}
|
|
btn.config.enabled = this.setEnabled(btn.config)
|
} else {
|
errors.push(tab.label + '中按钮《' + btn.label + '》配置信息丢失')
|
}
|
}
|
})
|
})
|
})
|
} else if (item.type !== 'form') {
|
item.action.forEach(btn => {
|
if (btn.OpenType === 'popview') {
|
if (menus[btn.uuid]) {
|
let mainTb = {name: '主表', uuid: Utils.getuuid(), useMSearch: 'false'}
|
|
btn.config = {
|
uuid: btn.uuid,
|
MenuID: btn.uuid,
|
ParentId: item.uuid,
|
MenuName: btn.label,
|
tables: _config.tables || [],
|
Template: 'CustomPage',
|
components: [this.getTable(menus[btn.uuid], mainTb, errors, formActions)],
|
viewType: 'popview',
|
style: { backgroundColor: '#ffffff', backgroundImage: '', paddingTop: '16px', paddingBottom: '40px', paddingLeft: '16px', paddingRight: '16px' }
|
}
|
|
btn.config.enabled = this.setEnabled(btn.config)
|
} else {
|
errors.push('主表中按钮《' + btn.label + '》配置信息丢失')
|
}
|
}
|
})
|
item.cols.forEach(col => {
|
if (col.type !== 'custom') return
|
col.elements.forEach(btn => {
|
if (btn.eleType !== 'button') return
|
if (btn.OpenType === 'popview') {
|
if (menus[btn.uuid]) {
|
let mainTb = {name: '主表', uuid: Utils.getuuid(), useMSearch: 'false'}
|
|
btn.config = {
|
uuid: btn.uuid,
|
MenuID: btn.uuid,
|
ParentId: item.uuid,
|
MenuName: btn.label,
|
tables: _config.tables || [],
|
Template: 'CustomPage',
|
components: [this.getTable(menus[btn.uuid], mainTb, errors, formActions)],
|
viewType: 'popview',
|
style: { backgroundColor: '#ffffff', backgroundImage: '', paddingTop: '16px', paddingBottom: '40px', paddingLeft: '16px', paddingRight: '16px' }
|
}
|
|
btn.config.enabled = this.setEnabled(btn.config)
|
} else {
|
errors.push('主表中按钮《' + btn.label + '》配置信息丢失')
|
}
|
}
|
})
|
})
|
}
|
})
|
|
this.setPopForm(_resolve, _config, formActions, errors)
|
})
|
} else {
|
this.setPopForm(_resolve, _config, formActions, errors)
|
}
|
}
|
|
setEnabled = (config) => {
|
let enabled = true
|
config.components.forEach(item => {
|
if (item.type === 'tabs') {
|
item.subtabs.forEach(tab => {
|
if (tab.components[0].errors.length > 0) {
|
enabled = false
|
}
|
})
|
} else {
|
if (item.errors.length > 0) {
|
enabled = false
|
}
|
}
|
})
|
|
return enabled
|
}
|
|
setPopForm = (_resolve, _config, formActions, errors) => {
|
if (formActions.length > 0) {
|
let defers = formActions.map((item, i) => {
|
return new Promise((resolve) => {
|
setTimeout(() => {
|
Api.getCloudConfig({
|
func: 'sPC_Get_LongParam',
|
MenuID: item.origin
|
}).then(res => {
|
if (res.status) {
|
let _LongParam = ''
|
if (res.LongParam) {
|
try {
|
_LongParam = JSON.parse(window.decodeURIComponent(window.atob(res.LongParam)))
|
} catch (e) {
|
console.warn('Parse Failure')
|
_LongParam = ''
|
}
|
}
|
|
if (_LongParam) {
|
_LongParam.uuid = item.uuid
|
resolve(_LongParam)
|
} else {
|
resolve({uuid: item.uuid, $empty: true})
|
}
|
} else {
|
notification.warning({
|
top: 92,
|
message: res.message,
|
duration: 5
|
})
|
resolve({uuid: item.uuid, $empty: true})
|
}
|
})
|
}, i * 50)
|
})
|
})
|
Promise.all(defers).then(res => {
|
let menus = {}
|
res.forEach(item => {
|
if (item && !item.$empty) {
|
menus[item.uuid] = item
|
}
|
})
|
|
_config.components.forEach(item => {
|
if (item.type === 'tabs') {
|
item.subtabs.forEach(tab => {
|
tab.components[0].action.forEach(btn => {
|
if (btn.OpenType === 'popview' && btn.config && btn.config.components[0]) {
|
this.setTbForm(btn.config.components[0], menus, errors, tab.components[0].name + '-' + btn.label)
|
} else if (btn.OpenType === 'pop' || (btn.OpenType === 'funcbutton' && btn.funcType === 'print' && btn.execMode === 'pop')) {
|
if (menus[btn.uuid]) {
|
btn.modal = {
|
setting: menus[btn.uuid].setting,
|
tables: [],
|
groups: [],
|
fields: menus[btn.uuid].fields || []
|
}
|
} else {
|
errors.push(tab.label + '中按钮《' + btn.label + '》配置信息丢失')
|
}
|
}
|
})
|
tab.components[0].cols.forEach(col => {
|
if (col.type !== 'custom') return
|
col.elements.forEach(btn => {
|
if (btn.eleType !== 'button') return
|
if (btn.OpenType === 'popview' && btn.config && btn.config.components[0]) {
|
this.setTbForm(btn.config.components[0], menus, errors, tab.components[0].name + '-' + btn.label)
|
} else if (btn.OpenType === 'pop' || (btn.OpenType === 'funcbutton' && btn.funcType === 'print' && btn.execMode === 'pop')) {
|
if (menus[btn.uuid]) {
|
btn.modal = {
|
setting: menus[btn.uuid].setting,
|
tables: [],
|
groups: [],
|
fields: menus[btn.uuid].fields || []
|
}
|
} else {
|
errors.push(tab.label + '中按钮《' + btn.label + '》配置信息丢失')
|
}
|
}
|
})
|
})
|
})
|
} else if (item.type !== 'form') {
|
item.action.forEach(btn => {
|
if (btn.OpenType === 'popview' && btn.config && btn.config.components[0]) {
|
this.setTbForm(btn.config.components[0], menus, errors, item.name + '-' + btn.label)
|
} else if (btn.OpenType === 'pop' || (btn.OpenType === 'funcbutton' && btn.funcType === 'print' && btn.execMode === 'pop')) {
|
if (menus[btn.uuid]) {
|
btn.modal = {
|
setting: menus[btn.uuid].setting,
|
tables: [],
|
groups: [],
|
fields: menus[btn.uuid].fields || []
|
}
|
} else {
|
errors.push('主表中按钮《' + btn.label + '》配置信息丢失')
|
}
|
}
|
})
|
|
item.cols.forEach(col => {
|
if (col.type !== 'custom') return
|
col.elements.forEach(btn => {
|
if (btn.eleType !== 'button') return
|
if (btn.OpenType === 'popview' && btn.config && btn.config.components[0]) {
|
this.setTbForm(btn.config.components[0], menus, errors, item.name + '-' + btn.label)
|
} else if (btn.OpenType === 'pop' || (btn.OpenType === 'funcbutton' && btn.funcType === 'print' && btn.execMode === 'pop')) {
|
if (menus[btn.uuid]) {
|
btn.modal = {
|
setting: menus[btn.uuid].setting,
|
tables: [],
|
groups: [],
|
fields: menus[btn.uuid].fields || []
|
}
|
} else {
|
errors.push('主表中按钮《' + btn.label + '》配置信息丢失')
|
}
|
}
|
})
|
})
|
}
|
})
|
|
this.saveConfig(_resolve, _config, errors)
|
})
|
} else {
|
this.saveConfig(_resolve, _config, errors)
|
}
|
}
|
|
setTbForm = (item, menus, errors, name) => {
|
item.action.forEach(btn => {
|
if (btn.OpenType === 'pop' || (btn.OpenType === 'funcbutton' && btn.funcType === 'print' && btn.execMode === 'pop')) {
|
if (menus[btn.uuid]) {
|
btn.modal = {
|
setting: menus[btn.uuid].setting,
|
tables: [],
|
groups: [],
|
fields: menus[btn.uuid].fields || []
|
}
|
} else {
|
errors.push(name + '中按钮《' + btn.label + '》配置信息丢失')
|
}
|
}
|
})
|
item.cols.forEach(col => {
|
if (col.type !== 'custom') return
|
col.elements.forEach(btn => {
|
if (btn.eleType !== 'button') return
|
if (btn.OpenType === 'pop' || (btn.OpenType === 'funcbutton' && btn.funcType === 'print' && btn.execMode === 'pop')) {
|
if (menus[btn.uuid]) {
|
btn.modal = {
|
setting: menus[btn.uuid].setting,
|
tables: [],
|
groups: [],
|
fields: menus[btn.uuid].fields || []
|
}
|
} else {
|
errors.push(name + '中按钮《' + btn.label + '》配置信息丢失')
|
}
|
}
|
})
|
})
|
}
|
|
saveConfig = (_resolve, _config, errors) => {
|
let err = errors.join(';')
|
|
if (err) {
|
notification.warning({
|
top: 92,
|
message: err,
|
duration: 5
|
})
|
}
|
|
this.saveNewMenu(_resolve, _config)
|
}
|
|
saveNewMenu = (_resolve, _config) => {
|
_config.components.forEach(item => {
|
if (item.type === 'tabs') {
|
item.subtabs.forEach(tab => {
|
tab.components[0].action.forEach(btn => {
|
if (btn.OpenType === 'popview' && btn.config) {
|
btn.config.$tables = getTables(btn.config.components[0])
|
}
|
})
|
tab.components[0].cols.forEach(col => {
|
if (col.type !== 'custom') return
|
col.elements.forEach(btn => {
|
if (btn.eleType !== 'button') return
|
if (btn.OpenType === 'popview' && btn.config) {
|
btn.config.$tables = getTables(btn.config.components[0])
|
}
|
})
|
})
|
|
tab.components[0].$tables = getTables(tab.components[0])
|
})
|
} else {
|
item.$tables = getTables(item)
|
}
|
})
|
|
this.submitConfig(_resolve, _config)
|
}
|
|
checkBtns = (card) => {
|
card.action.forEach(cell => {
|
if (cell.hidden === 'true') return
|
if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) {
|
if (!cell.modal || cell.modal.fields.length === 0) {
|
card.errors.push({ level: 0, detail: `按钮“${cell.label}”中表单尚未添加`})
|
}
|
} else if (cell.OpenType === 'excelIn' && (!cell.verify || !cell.verify.sheet || !cell.verify.columns || cell.verify.columns.length === 0)) {
|
card.errors.push({ level: 0, detail: `按钮“${cell.label}”中导入列未设置!`})
|
} else if (cell.OpenType === 'excelOut' && (!cell.verify || !cell.verify.columns || cell.verify.columns.length === 0)) {
|
card.errors.push({ level: 0, detail: `按钮“${cell.label}”中导出列未设置!`})
|
}
|
})
|
|
card.cols.forEach(col => {
|
if (col.type !== 'custom') return
|
|
col.elements.forEach(cell => {
|
if (cell.hidden === 'true' || cell.eleType !== 'button') return
|
if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) {
|
if (!cell.modal || cell.modal.fields.length === 0) {
|
card.errors.push({ level: 0, detail: `按钮“${cell.label}”中表单尚未添加`})
|
}
|
} else if (cell.OpenType === 'excelIn' && (!cell.verify || !cell.verify.sheet || !cell.verify.columns || cell.verify.columns.length === 0)) {
|
card.errors.push({ level: 0, detail: `按钮“${cell.label}”中导入列未设置!`})
|
} else if (cell.OpenType === 'excelOut' && (!cell.verify || !cell.verify.columns || cell.verify.columns.length === 0)) {
|
card.errors.push({ level: 0, detail: `按钮“${cell.label}”中导出列未设置!`})
|
}
|
})
|
})
|
}
|
|
submitConfig = (_resolve, config) => {
|
let tbs = []
|
config.components.forEach(item => {
|
if (item.type === 'tabs') {
|
item.subtabs.forEach(tab => {
|
if (tab.components[0].$tables) {
|
tbs.push(...tab.components[0].$tables)
|
}
|
|
this.checkBtns(tab.components[0])
|
})
|
} else {
|
if (item.$tables) {
|
tbs.push(...item.$tables)
|
}
|
}
|
})
|
|
let arr = []
|
tbs = tbs.filter(tb => {
|
let _tb = tb.toLowerCase()
|
|
if (arr.includes(_tb)) return false
|
arr.push(_tb)
|
|
return true
|
})
|
tbs.sort()
|
if (tbs.length && sessionStorage.getItem('mk_tb_names')) {
|
let names = sessionStorage.getItem('mk_tb_names')
|
tbs = tbs.filter(tb => names.indexOf(',' + tb.toLowerCase() + ',') > -1)
|
}
|
tbs = tbs.map(tb => `'${tb}'`).join(';')
|
|
let key = md5(config.uuid + tbs.toLowerCase())
|
|
let urlparam = {
|
FstId: config.fstMenuId,
|
ParentId: config.parentId,
|
MenuID: config.uuid,
|
MenuName: config.MenuName,
|
MenuNo: config.MenuNo,
|
EasyCode: config.easyCode,
|
type: 'admin',
|
OpenType: config.OpenType,
|
PageParam: {Template: 'CustomPage', OpenType: 'newtab', hidden: config.hidden},
|
MenuType: 'custom'
|
}
|
let url = window.btoa(window.encodeURIComponent(JSON.stringify(urlparam)))
|
config.tbkey = key
|
|
let param = {
|
func: 'sPC_TrdMenu_AddUpt',
|
FstID: config.fstMenuId || '',
|
SndID: config.parentId,
|
ParentID: config.parentId,
|
MenuID: config.uuid,
|
MenuNo: config.MenuNo || '',
|
EasyCode: config.easyCode || '',
|
Template: 'CustomPage',
|
MenuName: config.MenuName || '',
|
PageParam: JSON.stringify({Template: 'CustomPage', OpenType: config.OpenType, hidden: config.hidden}),
|
open_edition: '',
|
debug_md5: key,
|
debug_url: url,
|
debug_list: window.btoa(tbs),
|
LongParam: window.btoa(window.encodeURIComponent(JSON.stringify(config)))
|
}
|
|
param.LText = Utils.formatOptions(param.LText)
|
param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
|
param.secretkey = Utils.encrypt(param.LText, param.timestamp)
|
|
Api.getCloudConfig(param).then(res => {
|
_resolve()
|
if (res.status) {
|
// if (this.delButtons.length > 0) {
|
// Api.getCloudConfig({
|
// func: 'sPC_MainMenu_Del',
|
// up_type: 'Y',
|
// MenuID: this.delButtons.join(',')
|
// })
|
// }
|
|
delete urlparam.type
|
|
let _param = window.btoa(window.encodeURIComponent(JSON.stringify(urlparam)))
|
|
window.open(window.location.href.split('#')[0] + `#/menudesign/${_param}`)
|
} else {
|
notification.warning({
|
top: 92,
|
message: res.message,
|
duration: 5
|
})
|
}
|
})
|
}
|
|
getTable = (config, newCon, errors, formActions, popActions, oldtabs) => {
|
let _card = {
|
uuid: newCon.uuid,
|
type: 'table',
|
name: newCon.name || '',
|
format: 'array',
|
pageable: true,
|
switchable: true,
|
search: [],
|
action: [],
|
subtype: 'normaltable',
|
setting: { useMSearch: 'false', sync: 'false', onload: 'true' },
|
wrap: {name: newCon.name || ''},
|
style: {},
|
headerStyle: {},
|
columns: [],
|
cols: [],
|
scripts: []
|
}
|
|
if (!config) {
|
errors.push(newCon.name + '配置信息丢失')
|
return _card
|
}
|
|
if (oldtabs && newCon.supModule && oldtabs[newCon.supModule]) {
|
_card.setting.supModule = [oldtabs[newCon.supModule]]
|
} else {
|
_card.setting.supModule = ['empty']
|
}
|
|
_card.search = config.search.map(item => {
|
item.uuid = Utils.getuuid()
|
return item
|
})
|
|
let _cols = {}
|
let _colspan = []
|
let lineMarks = []
|
config.columns.forEach(col => {
|
if (col.type === 'colspan') {
|
if (col.subfield) {
|
_colspan.push(...col.subfield.split(', '))
|
} else if (col.sublist && col.sublist.length > 0) {
|
_colspan.push(...col.sublist)
|
}
|
}
|
if (!col.field) return
|
|
let _col = fromJS(col).toJS()
|
|
if (_col.marks) {
|
_col.marks = []
|
col.marks.forEach(m => {
|
if (m.signType === 'card') return
|
|
let field = []
|
field.push(m.field)
|
field.push(m.contrastType)
|
|
if (m.contrastField) {
|
field.push(m.contrastField)
|
}
|
let color = '#1890ff'
|
if (m.color && m.color[1]) {
|
color = colorTransform[m.color[1]]
|
}
|
let signType = ['font']
|
if (m.signType === 'background') {
|
signType = ['background']
|
} else if (m.signType === 'icon') {
|
if (m.position === 'back') {
|
signType = ['iconback']
|
} else {
|
signType = ['iconfront']
|
}
|
signType.push(m.iconType)
|
signType.push(m.icon)
|
}
|
|
if (m.signType === 'line') {
|
lineMarks.push({
|
$index: lineMarks.length + 1,
|
uuid: Utils.getuuid(),
|
field: field,
|
color: color,
|
contrastValue: m.contrastValue || '',
|
match: m.match,
|
signType: ['background']
|
})
|
} else {
|
_col.marks.push({
|
$index: _col.marks.length + 1,
|
uuid: Utils.getuuid(),
|
field: field,
|
color: color,
|
contrastValue: m.contrastValue || '',
|
match: m.match,
|
signType: signType
|
})
|
}
|
})
|
}
|
|
_cols[col.field] = _col
|
})
|
|
config.columns.forEach(col => {
|
if (col.type === 'index') {
|
col.uuid = Utils.getuuid()
|
_card.cols.push(fromJS(col).toJS())
|
} else if (col.field && _cols[col.field]) {
|
let _col = fromJS(_cols[col.field]).toJS()
|
|
if (_colspan.includes(col.field)) {
|
_col.Hide = 'true'
|
}
|
|
_col.uuid = Utils.getuuid()
|
|
_card.cols.push(_col)
|
}
|
|
if (col.type === 'colspan') {
|
let ucol = {
|
Align: col.Align,
|
Hide: col.Hide,
|
label: col.label,
|
marks: [],
|
isSub: false,
|
uuid: Utils.getuuid(),
|
blacklist: []
|
}
|
|
let _subs = []
|
if (col.subfield) {
|
_subs = col.subfield.split(', ')
|
} else if (col.sublist) {
|
_subs = col.sublist
|
}
|
|
if (col.unfold === 'true') {
|
ucol.type = 'colspan'
|
ucol.subcols = []
|
|
_subs.forEach(sub => {
|
if (_cols[sub]) {
|
let _col = fromJS(_cols[sub]).toJS()
|
_col.Hide = 'false'
|
_col.isSub = true
|
_col.uuid = Utils.getuuid()
|
|
ucol.subcols.push(_col)
|
}
|
})
|
|
if (ucol.subcols.length > 0) {
|
_card.cols.push(ucol)
|
}
|
} else {
|
ucol.Width = 120
|
ucol.type = 'custom'
|
ucol.elements = []
|
ucol.style = {paddingTop: '12px', paddingLeft: '8px', paddingBottom: '12px', paddingRight: '8px'}
|
|
_subs.forEach(sub => {
|
if (_cols[sub]) {
|
let _col = {
|
copyable: 'false',
|
datatype: 'dynamic',
|
eleType: _cols[sub].type !== 'number' ? 'text' : 'number',
|
field: sub,
|
height: '',
|
innerHeight: 'auto',
|
marks: _cols[sub].marks || null,
|
noValue: 'show',
|
prefix: _cols[sub].prefix || '',
|
postfix: _cols[sub].postfix || '',
|
style: {},
|
width: 24,
|
uuid: Utils.getuuid()
|
}
|
|
ucol.elements.push(_col)
|
}
|
})
|
|
if (ucol.elements.length > 0) {
|
_card.cols.push(ucol)
|
}
|
}
|
}
|
})
|
|
_card.lineMarks = lineMarks
|
_card.columns = []
|
_card.absFields = []
|
_card.cols.forEach(col => {
|
if (!col.field) return
|
if (['text', 'picture', 'video', 'textarea'].includes(col.type)) {
|
_card.columns.push({
|
datatype: `Nvarchar(${col.fieldlength || 50})`,
|
field: col.field,
|
fieldlength: col.fieldlength || 50,
|
label: col.label,
|
type: 'text',
|
uuid: Utils.getuuid()
|
})
|
} else if (col.type === 'link') {
|
_card.columns.push({
|
datatype: `Nvarchar(${col.fieldlength || 50})`,
|
field: col.field,
|
fieldlength: col.fieldlength || 50,
|
label: col.label,
|
type: 'text',
|
uuid: Utils.getuuid()
|
})
|
if (col.nameField) {
|
_card.columns.push({
|
datatype: `Nvarchar(${col.fieldlength || 50})`,
|
field: col.nameField,
|
fieldlength: col.fieldlength || 50,
|
label: col.label + '(名称)',
|
type: 'text',
|
uuid: Utils.getuuid() + 'name'
|
})
|
}
|
} else if (col.type === 'number') {
|
_card.columns.push({
|
datatype: `Decimal(18,${col.decimal || 0})`,
|
field: col.field,
|
decimal: col.decimal || 0,
|
label: col.label,
|
type: 'number',
|
uuid: Utils.getuuid()
|
})
|
|
if (col.format === 'abs') {
|
_card.absFields.push(col.field)
|
}
|
}
|
})
|
|
if (_card.absFields.length) {
|
_card.absFields = Array.from(new Set(_card.absFields))
|
} else {
|
_card.absFields = null
|
}
|
|
let colbtns = []
|
let colors = { primary: '#1890ff', yellow: '#c49f47', orange: 'orange', danger: '#ff4d4f', green: '#26C281', dgreen: '#32c5d2', purple: '#8E44AD', cyan: '#13c2c2', gray: '#E7E7EF', default: 'rgba(0, 0, 0, 0.65)' }
|
|
let uuids = {}
|
config.action.forEach(btn => {
|
let _c = btn.class ? btn.class.replace('border-', '') : ''
|
let color = colors[_c] || '#1890ff'
|
let _btn = fromJS(btn).toJS()
|
|
delete _btn.position
|
delete _btn.linkTab
|
|
if (_btn.intertype === 'inner' && !_btn.innerFunc) {
|
_btn.intertype = 'system'
|
}
|
if ((_btn.intertype === 'outer' || _btn.intertype === 'custom') && !_btn.procMode) { // 兼容外部函数直传类型
|
_btn.procMode = !_btn.innerFunc ? 'none' : 'inner'
|
}
|
if (_btn.funcType === 'print' && _btn.execMode) {
|
_btn.OpenType = 'funcbutton'
|
} else if (_btn.OpenType === 'blank') {
|
_btn.OpenType = 'tab'
|
}
|
|
this.delButtons.push(btn.uuid)
|
|
_btn.show = 'button'
|
|
if (_btn.execSuccess === 'equaltab') {
|
_btn.execSuccess = 'grid'
|
_btn.syncComponent = []
|
|
if (newCon.equalTab && oldtabs && oldtabs[newCon.equalTab]) {
|
_btn.syncComponent.push(oldtabs[newCon.equalTab])
|
}
|
} else if (_btn.execSuccess === 'maingrid') {
|
_btn.execSuccess = 'mainline'
|
}
|
|
if (_btn.execError === 'equaltab') {
|
_btn.execError = 'grid'
|
} else if (_btn.execError === 'maingrid') {
|
_btn.execError = 'mainline'
|
}
|
|
if (_btn.popClose === 'equaltab') {
|
_btn.popClose = 'grid'
|
_btn.syncComponent = []
|
|
if (newCon.equalTab && oldtabs && oldtabs[newCon.equalTab]) {
|
_btn.syncComponent.push(oldtabs[newCon.equalTab])
|
}
|
} else if (_btn.popClose === 'maingrid') {
|
_btn.popClose = 'mainline'
|
}
|
|
if (_btn.OpenType === 'pop' || (_btn.OpenType === 'funcbutton' && _btn.funcType === 'print' && _btn.execMode === 'pop')) {
|
|
formActions.push({origin: btn.uuid, uuid: _btn.uuid, name: newCon.name, label: btn.label})
|
} else if (_btn.OpenType === 'popview') {
|
if (!popActions) return
|
|
popActions.push({origin: btn.uuid, linkTab: btn.linkTab || '', uuid: _btn.uuid, name: newCon.name, label: btn.label})
|
} else if (_btn.OpenType === 'tab') {
|
if (btn.tabTemplate === 'FormTab') {
|
errors.push(newCon.name + '中按钮《' + btn.label + '》不在支持')
|
return
|
} else if (!btn.linkmenu || btn.linkmenu.length !== 3) {
|
|
errors.push(newCon.name + '中按钮《' + btn.label + '》不在支持')
|
return
|
}
|
}
|
|
uuids[btn.uuid] = true
|
|
if (_btn.tabType === 'CommonTable' || _btn.tabType === 'SubTable') {
|
_btn.tabType = 'BaseTable'
|
}
|
|
if (btn.position === 'grid') {
|
_btn.eleType = 'button'
|
_btn.width = 24
|
_btn.style = {color: color, backgroundColor: 'transparent', borderColor: 'transparent'}
|
colbtns.push(_btn)
|
} else {
|
if (btn.class === 'default') {
|
_btn.style = {color: 'rgba(0, 0, 0, 0.65)', backgroundColor: '#fff', borderColor: '#d9d9d9', marginRight: '15px'}
|
} else if (btn.class.indexOf('border') > -1) {
|
_btn.style = {color: color, backgroundColor: '#fff', borderColor: color, marginRight: '15px'}
|
} else {
|
_btn.style = {color: btn.class === 'gray' ? 'rgba(0, 0, 0, 0.65)' : '#fff', backgroundColor: color, borderColor: color, marginRight: '15px'}
|
}
|
_card.action.push(_btn)
|
}
|
})
|
|
if (colbtns.length > 0) {
|
_card.cols.push({
|
Align: 'left',
|
label: '操作',
|
marks: [],
|
isSub: false,
|
uuid: Utils.getuuid(),
|
type: 'custom',
|
Width: 120,
|
elements: colbtns,
|
style: {paddingTop: '12px', paddingLeft: '8px', paddingBottom: '12px', paddingRight: '8px'}
|
})
|
}
|
|
let sets = ['tableName', 'interType', 'sysInterface', 'innerFunc', 'interface', 'proInterface', 'outerFunc', 'dataresource', ['queryType', 'query'], 'primaryKey', 'order', ['laypage', 'true'], ['pageSize', 10], ['onload', 'true']]
|
let wraps = ['tableType', ['bordered', 'true'], 'actionfixed', ['size', 'middle'], ['selected', 'false'], ['tableMode', 'compatible'], ['mask', 'show'], ['borderColor', '#e8e8e8'], 'height', 'controlField', 'controlVal']
|
|
_card.scripts = config.setting.scripts || []
|
|
sets.forEach(n => {
|
if (n === 'interType') {
|
if (!['system', 'inner', 'outer'].includes(config.setting.interType)) {
|
_card.setting.interType = 'system'
|
} else if (config.setting.interType === 'inner' && !config.setting.innerFunc) {
|
_card.setting.interType = 'system'
|
} else {
|
_card.setting.interType = config.setting.interType
|
}
|
} else if (typeof(n) === 'string') {
|
_card.setting[n] = config.setting[n] || ''
|
} else {
|
_card.setting[n[0]] = config.setting[n[0]] || n[1]
|
}
|
})
|
wraps.forEach(w => {
|
if (typeof(w) === 'string') {
|
_card.wrap[w] = config.setting[w] || ''
|
} else {
|
_card.wrap[w[0]] = config.setting[w[0]] || w[1]
|
}
|
})
|
|
_card.wrap.doubleClick = config.setting.doubleClick || ''
|
if (_card.wrap.doubleClick && !uuids[_card.wrap.doubleClick]) {
|
_card.wrap.doubleClick = ''
|
}
|
|
_card.setting.execute = config.setting.default || 'true'
|
|
_card.errors = []
|
let columns = _card.columns.map(c => c.field)
|
if (_card.setting.interType === 'system' && _card.setting.execute !== 'false' && !_card.setting.dataresource) {
|
_card.errors.push({ level: 0, detail: '未设置数据源!'})
|
} else if (_card.setting.interType === 'system' && _card.setting.execute === 'false' && _card.scripts.filter(script => script.status !== 'false').length === 0) {
|
_card.errors.push({ level: 0, detail: '数据源中无可用脚本!'})
|
} else if (!_card.setting.primaryKey) {
|
_card.errors.push({ level: 0, detail: '未设置主键!'})
|
} else if (!columns.includes(_card.setting.primaryKey)) {
|
_card.errors.push({ level: 0, detail: '主键已失效!'})
|
} else if (!_card.setting.supModule) {
|
_card.errors.push({ level: 0, detail: '未设置上级组件!'})
|
}
|
|
return _card
|
}
|
|
handleViewBack = () => {
|
const { menu } = this.props
|
|
let param = {
|
editMenu: menu,
|
editTab: null,
|
tabConfig: null,
|
editSubTab: null,
|
subTabConfig: null,
|
btnTab: null,
|
btnTabConfig: null,
|
editAction: null,
|
subConfig: null,
|
tabview: menu.LongParam.Template
|
}
|
|
this.props.handleView(param)
|
}
|
|
render() {
|
return (
|
<div className="formtab-update">
|
<div className="tip">表单标签页不在支持查看及编辑,请点击升级按钮创建新菜单。注:创建成功后请在原菜单中修改关联按钮绑定新菜单。</div>
|
<div className="buttons">
|
<Button className="mk-border-purple" onClick={this.trigger}>升级</Button>
|
<Button onClick={this.handleViewBack}>返回</Button>
|
</div>
|
</div>
|
)
|
}
|
}
|
|
export default UpdateTable
|