king
2020-06-18 f59a500d24291d7f54b71dcca939a2a23dedca7c
src/templates/comtableconfig/index.jsx
@@ -14,15 +14,9 @@
import { getMainMenuForm } from '@/templates/zshare/formconfig'
import asyncComponent from '@/utils/asyncComponent'
import TableComponent from '@/templates/sharecomponent/tablecomponent'
import FieldsComponent from '@/templates/sharecomponent/fieldscomponent'
import ChartGroupComponent from '@/templates/sharecomponent/chartgroupcomponent'
import SearchComponent from '@/templates/sharecomponent/searchcomponent'
import ActionComponent from '@/templates/sharecomponent/actioncomponent'
import ColumnComponent from '@/templates/sharecomponent/columncomponent'
import TabsComponent from '@/templates/sharecomponent/tabscomponent'
import ChartComponent from '@/templates/sharecomponent/chartcomponent'
import CardComponent from '@/templates/sharecomponent/cardcomponent'
import MenuForm from '@/templates/zshare/menuform'
import EditComponent from '@/templates/zshare/editcomponent'
@@ -32,8 +26,13 @@
const { Panel } = Collapse
const { confirm } = Modal
const CommonDict = (!localStorage.getItem('lang') || localStorage.getItem('lang') === 'zh-CN') ? zhCN : enUS
const SettingComponent = asyncComponent(() => import('@/templates/sharecomponent/settingcomponent'))
const TableComponent = asyncComponent(() => import('@/templates/sharecomponent/tablecomponent'))
const FieldsComponent = asyncComponent(() => import('@/templates/sharecomponent/fieldscomponent'))
const ChartGroupComponent = asyncComponent(() => import('@/templates/sharecomponent/chartgroupcomponent'))
const ChartComponent = asyncComponent(() => import('@/templates/sharecomponent/chartcomponent'))
const CardComponent = asyncComponent(() => import('@/templates/sharecomponent/cardcomponent'))
const TabsComponent = asyncComponent(() => import('@/templates/sharecomponent/tabscomponent'))
class ComTableConfig extends Component {
  static propTpyes = {
@@ -44,13 +43,12 @@
  }
  state = {
    dict: CommonDict,        // 字典
    dict: localStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
    config: null,            // 页面配置
    tableFields: [],         // 表格显示列
    fields: null,            // 搜索条件及显示列,可选字段
    menuformlist: null,      // 基本信息表单字段
    formlist: null,          // 搜索条件、按钮、显示列表单字段
    card: null,              // 编辑元素
    menuloading: false,      // 菜单保存中
    menucloseloading: false, // 菜单关闭时,选择保存
    loading: false,          // 加载中,页面spin
@@ -65,7 +63,8 @@
    thawButtons: [],         // 已选择要解冻的按钮
    activeKey: '0',          // 默认展开基本信息
    chartview: null,         // 当前视图
    pasteContent: null       // 粘贴配置信息
    pasteContent: null,      // 粘贴配置信息
    openEdition: ''          // 编辑版本标记,防止多人操作
  }
  /**
@@ -82,7 +81,7 @@
    if (!_LongParam) {
      _config = fromJS(Source.baseConfig).toJS()
      if (!menu.isSubtable) { // 不是选择主子表时,隐藏标签页
        _config.tabs = []
        _config.tabgroups = [{ uuid: 'tabs', sublist: [] }]
      }
      _config.isAdd = true
    } else {
@@ -104,41 +103,75 @@
      })
    }
    // 配置默认值,兼容
    _config.tabs = _config.tabs || []
    _config.Template = 'CommonTable'
    _config.easyCode = _config.easyCode || ''
    if (!_config.version || _config.version < '1.0') {
      // 配置默认值,兼容
      _config.version = '1.0'
      _config.Template = 'CommonTable'
      _config.easyCode = _config.easyCode || ''
      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
      }
      // 兼容图表
      if (!_config.charts) {
        _config.expand = false
        _config.charts = [{
          uuid: Utils.getuuid(),
          label: '',
          title: '',
          chartType: 'table',
          icon: 'table',
          Hide: 'false',
          blacklist: []
        }]
      } else {
        _config.charts.forEach(card => {
          if (card.chartType === 'card') {
            card.details = card.details.map(_cell => {
              if (!_cell.fontSize) {
                _cell.fontSize = 14
              }
              if (!_cell.width) {
                _cell.width = 100
              } else if (_cell.width === 'helf') {
                _cell.width = 50
              } else if (_cell.width === 'third') {
                _cell.width = 33
              }
              if (_cell.bold === 'true') {
                _cell.fontWeight = 'normal'
              }
    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()
        }
              if (!_cell.height) {
                _cell.height = 1
              }
        delete _config[groupId]
              return _cell
            })
        _tabgroups.push(_group)
      })
      _config.tabgroups = _tabgroups
    }
    // 兼容图表
    if (!_config.charts) {
      _config.expand = false
      _config.charts = [{
        uuid: Utils.getuuid(),
        label: '',
        title: '',
        chartType: 'table',
        icon: 'table',
        Hide: 'false',
        blacklist: []
      }]
            if (card.widthType === 'ratio' && card.avatar && card.avatar.widthType !== 'ratio') {
              card.avatar.widthType = 'ratio'
              card.avatar.width = 32
            }
          }
        })
      }
    }
    
    let _oriActions = []
@@ -185,6 +218,7 @@
    this.setState({
      chartview: _config.charts[0].uuid,
      config: _config,
      openEdition: menu.open_edition || '',
      activeKey: menu.activeKey || '0',
      optionLibs: optionLibs,
      originActions: _oriActions,
@@ -252,13 +286,6 @@
    })
  }
  /**
   * @description 三级菜单切换模板
   */
  changeTemplate = () => {
    this.props.handleView({tabview: 'template'})
  }
  getFuncNames = (data, funcNames, tableNames) => {
    data.forEach(item => {
      if (item.subfuncs) {
@@ -288,7 +315,7 @@
   */
  submitConfig = () => {
    const { menu } = this.props
    const { originMenu, delActions, thawButtons } = this.state
    const { originMenu, delActions, thawButtons, openEdition } = this.state
    let config = fromJS(this.state.config).toJS()
@@ -549,6 +576,10 @@
        param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
        param.secretkey = Utils.encrypt(param.LText, param.timestamp)
        if (openEdition) { // 版本管理
          param.open_edition = openEdition
        }
        // 有按钮或标签删除时,先进行删除操作
        // 删除成功后,保存页面配置
        new Promise(resolve => {
@@ -663,6 +694,7 @@
              this.setState({
                config: _config,
                openEdition: response.open_edition || '',
                originMenu: {
                  ...originMenu,
                  LongParam: _config,
@@ -674,7 +706,7 @@
                  supMenuList: _supMenuList
                }
              })
              this.props.reloadmenu()
              
              this.submitAction(btnParam, tabParam)
@@ -684,6 +716,8 @@
              delete localParam.PageParam
              delete localParam.Template
              delete localParam.Sort
              delete localParam.EasyCode
              delete localParam.open_edition
              Api.getLocalConfig(localParam)
            } else {
@@ -943,7 +977,7 @@
   */
  setSubConfig = (item, type) => {
    const { menu } = this.props
    const { config, originMenu, optionLibs, activeKey } = this.state
    const { config, originMenu, optionLibs, activeKey, openEdition } = this.state
    if (!originMenu.MenuID) { // menuID不存在时,为新建菜单,提示菜单尚未保存
      notification.warning({
@@ -995,8 +1029,8 @@
          isbutton = false
        }
        // 保存当前打开页签
        _originMenu.activeKey = activeKey
        _originMenu.activeKey = activeKey       // 保存当前打开页签
        _originMenu.open_edition = openEdition  // 更新版本号
        let param = {
          optionLibs: optionLibs,
@@ -1010,6 +1044,11 @@
          editAction: isbutton ? item : '',
          subConfig: '',
          tabview: _view
        }
        // 当子表使用主页搜索条件时,将主页搜索向下传递
        if (param.editTab && param.editTab.searchPass === 'true') {
          param.editTab.mainsearch = fromJS(_config.search).toJS()
        }
        this.setState({
@@ -1040,6 +1079,14 @@
              param.subConfig = _LongParam
            } else if (_LongParam && param.tabview === 'SubTable' && _LongParam.Template === 'SubTable') {
              param.subConfig = _LongParam
            }
            if (param.editTab) {
              param.editTab.open_edition = res.open_edition || ''
            } else if (param.editAction) {
              param.editAction.open_edition = res.open_edition || ''
            } else if (param.btnTab) {
              param.btnTab.open_edition = res.open_edition || ''
            }
            this.props.handleView(param)
@@ -1099,12 +1146,30 @@
      })
    }
    if (config.setting.interType === 'inner' && !config.setting.innerFunc && !config.setting.dataresource) {
    let charterr = ''
    config.charts.forEach(chart => {
      if (!charterr && ['line', 'bar', 'pie'].includes(chart.chartType) && !chart.Xaxis) {
        charterr = '图表' + (chart.title ? '《' + chart.title + '》' : '') + '坐标轴未设置,不可启用!'
      }
    })
    let hasKey = false
    config.columns.forEach(col => {
      if (config.setting.primaryKey === col.field) {
        hasKey = true
      }
    })
    if (config.setting.interType === 'inner' && !config.setting.innerFunc && config.setting.default !== 'false' && !config.setting.dataresource) {
      return '菜单尚未设置数据源,不可启用!'
    } else if (!config.setting.primaryKey) {
      return '菜单尚未设置主键,不可启用!'
    } else if (!hasKey) {
      return '显示列中不存在主键字段,不可启用!'
    } else if (!tabinvalid) {
      return '菜单标签页设置错误(存在多行标签时,行标签不可为空)!'
    } else if (charterr) {
      return charterr
    } else {
      return true
    }
@@ -1240,16 +1305,13 @@
                <TableComponent
                  config={config}
                  containerId="main-basedata"
                  selectedTables={config.tables || []}
                  updatetable={this.updatetable}
                />
              </Panel>
              {/* 搜索条件添加 */}
              <Panel header={this.state.dict['header.menu.search']} key="1">
                <div className="search-element">
                  {Source.searchItems.map((item, index) => {
                    return (<SourceElement key={index} content={item}/>)
                  })}
                  {Source.searchItems.map((item, index) => (<SourceElement key={index} content={item}/>))}
                </div>
                <FieldsComponent
                  config={config}
@@ -1261,9 +1323,7 @@
              {/* 按钮添加 */}
              <Panel header={this.state.dict['header.menu.action']} key="2">
                <div className="search-element">
                  {Source.actionItems.map((item, index) => {
                    return (<SourceElement key={index} content={item}/>)
                  })}
                  {Source.actionItems.map((item, index) => (<SourceElement key={index} content={item}/>))}
                </div>
                <div className="config-btn">
                  {confActions.length > 0 ?
@@ -1291,9 +1351,7 @@
              {/* 添加显示列 */}
              <Panel header={this.state.dict['header.menu.column']} key="3">
                <div className="search-element">
                  {Source.columnItems.map((item, index) => {
                    return (<SourceElement key={index} content={item}/>)
                  })}
                  {Source.columnItems.map((item, index) => (<SourceElement key={index} content={item}/>))}
                </div>
                <FieldsComponent
                  config={config}
@@ -1305,9 +1363,7 @@
              {/* 添加标签 */}
              <Panel header={this.state.dict['header.menu.tab']} key="4">
                <div className="search-element">
                  {Source.tabItems.map((item, index) => {
                    return (<SourceElement key={index} content={item}/>)
                  })}
                  {Source.tabItems.map((item, index) => (<SourceElement key={index} content={item}/>))}
                </div>
                {configTabs.length > 0 ?
                  <p className="config-btn-title">
@@ -1342,7 +1398,6 @@
              <div>
                <EditComponent dict={this.state.dict} type="maintable" config={this.state.config} MenuID={this.props.menu.MenuID} thawButtons={this.state.thawButtons} refresh={this.editConfig}/>
                <Switch className="big" checkedChildren="启" unCheckedChildren="停" checked={this.state.config.enabled} onChange={this.onEnabledChange} />
                <Button type="primary" onClick={this.changeTemplate}>{this.state.dict['header.menu.template.change']}</Button>
                <Button type="primary" onClick={this.submitConfig} loading={this.state.menuloading}>{this.state.dict['header.save']}</Button>
                <Button onClick={this.cancelConfig}>{this.state.dict['header.return']}</Button>
              </div>
@@ -1422,7 +1477,6 @@
              </div>
              {/* 标签组 */}
              <TabsComponent
                type="main"
                config={config}
                tabs={this.state.tabviews}
                setSubConfig={(item) => this.setSubConfig(item, 'tab')}