king
2022-04-26 5046d0d13dc6a8563b8e54e31913bc44cfa1072f
src/menu/replaceField/index.jsx
@@ -9,6 +9,7 @@
import Utils from '@/utils/utils.js'
import SettingForm from './settingform'
import { queryTableSql } from '@/utils/option.js'
import MKEmitter from '@/utils/events.js'
import './index.scss'
class ReplaceField extends Component {
@@ -84,11 +85,28 @@
  }
  submit = () => {
    let config = fromJS(this.props.config).toJS()
    this.settingRef.handleConfirm().then(res => {
      this.setState({confirming: true})
      if (res.resource === 'custom') {
        if (res.reType === 'name') {
          let map = {[res.label.toLowerCase()]: {
            FieldDec: res.label,
            FieldName: res.field,
            datatype: ''
          }}
          this.exec(map)
        } else {
          let map = {[res.field.toLowerCase()]: {
            FieldDec: res.label,
            FieldName: res.field,
            datatype: ''
          }}
          this.execLabel(map)
        }
      } else {
      let param = {func: 'sPC_Get_FieldName', TBName: res.table}
      if (options.cloudServiceApi) { // 且存在云端地址
        param.rduri = options.cloudServiceApi
@@ -109,14 +127,35 @@
          return
        }
          if (res.reType === 'name') {
        let map = {}
        result.FDName.forEach(item => {
              if (!item.FieldDec) return
          if (/NVARCHAR|INT|Decimal/ig.test(item.FieldType)) {
            item.datatype = item.FieldType
          }
          map[item.FieldDec] = item
              map[item.FieldDec.toLowerCase()] = item
        })
            this.exec(map)
          } else {
            let map = {}
            result.FDName.forEach(item => {
              if (!item.FieldName) return
              map[item.FieldName.toLowerCase()] = item
            })
            this.execLabel(map)
          }
        })
      }
    })
  }
  exec = (map) => {
    let config = fromJS(this.props.config).toJS()
        if (this.props.type === 'custom') {
          let _replace = (components) => {
@@ -133,10 +172,11 @@
              
              if (item.columns) {
                item.columns = item.columns.map(col => {
                  if (map[col.field]) {
                    col.field = map[col.field].FieldName
                    if (map[col.field].datatype) {
                      col.datatype = map[col.field].datatype
              let cell = map[col.field.toLowerCase()]
              if (cell) {
                col.field = cell.FieldName
                if (cell.datatype) {
                  col.datatype = cell.datatype
                    }
                  }
                  return col
@@ -144,8 +184,8 @@
              }
              if (item.search) {
                item.search = item.search.map(col => {
                  if (map[col.field]) {
                    col.field = map[col.field].FieldName
              if (col.field && map[col.field.toLowerCase()]) {
                col.field = map[col.field.toLowerCase()].FieldName
                  }
                  return col
                })
@@ -155,8 +195,16 @@
                item.action.forEach(m => {
                  if (m.modal && m.modal.fields) {
                    m.modal.fields = m.modal.fields.map(col => {
                      if (map[col.field]) {
                        col.field = map[col.field].FieldName
                  if (col.field && map[col.field.toLowerCase()]) {
                    col.field = map[col.field.toLowerCase()].FieldName
                  }
                  return col
                })
              }
              if (m.verify && m.verify.columns) {
                m.verify.columns = m.verify.columns.map(col => {
                  if (col.Column && map[col.Column.toLowerCase()]) {
                    col.Column = map[col.Column.toLowerCase()].FieldName
                      }
                      return col
                    })
@@ -168,13 +216,21 @@
                item.subcards.forEach(card => {
                  if (card.elements) { // 卡片
                    card.elements = card.elements.map(m => {
                      if (m.datatype === 'dynamic' && map[m.field]) {
                        m.field = map[m.field].FieldName
                  if (m.datatype === 'dynamic' && map[m.field.toLowerCase()]) {
                    m.field = map[m.field.toLowerCase()].FieldName
                      }
                      if (m.modal && m.modal.fields) {
                        m.modal.fields = m.modal.fields.map(col => {
                          if (map[col.field]) {
                            col.field = map[col.field].FieldName
                      if (col.field && map[col.field.toLowerCase()]) {
                        col.field = map[col.field.toLowerCase()].FieldName
                      }
                      return col
                    })
                  }
                  if (m.verify && m.verify.columns) {
                    m.verify.columns = m.verify.columns.map(col => {
                      if (col.Column && map[col.Column.toLowerCase()]) {
                        col.Column = map[col.Column.toLowerCase()].FieldName
                          }
                          return col
                        })
@@ -185,13 +241,21 @@
  
                  if (card.backElements) { // 卡片
                    card.backElements = card.backElements.map(m => {
                      if (m.datatype === 'dynamic' && map[m.field]) {
                        m.field = map[m.field].FieldName
                  if (m.datatype === 'dynamic' && map[m.field.toLowerCase()]) {
                    m.field = map[m.field.toLowerCase()].FieldName
                      }
                      if (m.modal && m.modal.fields) {
                        m.modal.fields = m.modal.fields.map(col => {
                          if (map[col.field]) {
                            col.field = map[col.field].FieldName
                      if (col.field && map[col.field.toLowerCase()]) {
                        col.field = map[col.field.toLowerCase()].FieldName
                      }
                      return col
                    })
                  }
                  if (m.verify && m.verify.columns) {
                    m.verify.columns = m.verify.columns.map(col => {
                      if (col.Column && map[col.Column.toLowerCase()]) {
                        col.Column = map[col.Column.toLowerCase()].FieldName
                          }
                          return col
                        })
@@ -202,8 +266,8 @@
                  if (card.fields) { // 表单
                    card.fields = card.fields.map(m => {
                      if (map[m.field]) {
                        m.field = map[m.field].FieldName
                  if (m.field && map[m.field.toLowerCase()]) {
                    m.field = map[m.field.toLowerCase()].FieldName
                      }
                      return m
                    })
@@ -213,13 +277,21 @@
  
              if (item.elements) {
                item.elements = item.elements.map(m => {
                  if (m.datatype === 'dynamic' && map[m.field]) {
                    m.field = map[m.field].FieldName
              if (m.datatype === 'dynamic' && map[m.field.toLowerCase()]) {
                m.field = map[m.field.toLowerCase()].FieldName
                  }
                  if (m.modal && m.modal.fields) {
                    m.modal.fields = m.modal.fields.map(col => {
                      if (map[col.field]) {
                        col.field = map[col.field].FieldName
                  if (col.field && map[col.field.toLowerCase()]) {
                    col.field = map[col.field.toLowerCase()].FieldName
                  }
                  return col
                })
              }
              if (m.verify && m.verify.columns) {
                m.verify.columns = m.verify.columns.map(col => {
                  if (col.Column && map[col.Column.toLowerCase()]) {
                    col.Column = map[col.Column.toLowerCase()].FieldName
                      }
                      return col
                    })
@@ -229,42 +301,42 @@
              }
  
              if (item.plot) {
                if (item.plot.Xaxis && map[item.plot.Xaxis]) {
                  item.plot.Xaxis = map[item.plot.Xaxis].FieldName
            if (item.plot.Xaxis && map[item.plot.Xaxis.toLowerCase()]) {
              item.plot.Xaxis = map[item.plot.Xaxis.toLowerCase()].FieldName
                }
                // 统计图
                if (item.plot.InfoValue && map[item.plot.InfoValue]) {
                  item.plot.InfoValue = map[item.plot.InfoValue].FieldName
            if (item.plot.InfoValue && map[item.plot.InfoValue.toLowerCase()]) {
              item.plot.InfoValue = map[item.plot.InfoValue.toLowerCase()].FieldName
                }
                if (item.plot.InfoType && map[item.plot.InfoType]) {
                  item.plot.InfoType = map[item.plot.InfoType].FieldName
            if (item.plot.InfoType && map[item.plot.InfoType.toLowerCase()]) {
              item.plot.InfoType = map[item.plot.InfoType.toLowerCase()].FieldName
                }
                // 占比图
                if (item.plot.valueField && map[item.plot.valueField]) {
                  item.plot.valueField = map[item.plot.valueField].FieldName
            if (item.plot.valueField && map[item.plot.valueField.toLowerCase()]) {
              item.plot.valueField = map[item.plot.valueField.toLowerCase()].FieldName
                }
                if (item.plot.labelField && map[item.plot.labelField]) {
                  item.plot.labelField = map[item.plot.labelField].FieldName
            if (item.plot.labelField && map[item.plot.labelField.toLowerCase()]) {
              item.plot.labelField = map[item.plot.labelField.toLowerCase()].FieldName
                }
                // 饼图
                if (item.plot.type && map[item.plot.type]) {
                  item.plot.type = map[item.plot.type].FieldName
            if (item.plot.type && map[item.plot.type.toLowerCase()]) {
              item.plot.type = map[item.plot.type.toLowerCase()].FieldName
                }
                // 散点图
                if (item.plot.gender && map[item.plot.gender]) {
                  item.plot.gender = map[item.plot.gender].FieldName
            if (item.plot.gender && map[item.plot.gender.toLowerCase()]) {
              item.plot.gender = map[item.plot.gender.toLowerCase()].FieldName
                }
                if (item.Yaxis) {
                  if (Array.isArray(item.Yaxis)) {
                    item.Yaxis = item.Yaxis.map(m => {
                      if (map[m]) {
                        return map[m].FieldName
                  if (map[m.toLowerCase()]) {
                    return map[m.toLowerCase()].FieldName
                      }
                      return m
                    })
                  } else {
                    if (map[item.Yaxis]) {
                      item.Yaxis = map[item.Yaxis].FieldName
                if (item.Yaxis && map[item.Yaxis.toLowerCase()]) {
                  item.Yaxis = map[item.Yaxis.toLowerCase()].FieldName
                    }
                  }
                }
@@ -277,8 +349,16 @@
                      col.elements = col.elements.map(m => {
                        if (m.modal && m.modal.fields) {
                          m.modal.fields = m.modal.fields.map(col => {
                            if (map[col.field]) {
                              col.field = map[col.field].FieldName
                        if (col.field && map[col.field.toLowerCase()]) {
                          col.field = map[col.field.toLowerCase()].FieldName
                        }
                        return col
                      })
                    }
                    if (m.verify && m.verify.columns) {
                      m.verify.columns = m.verify.columns.map(col => {
                        if (col.Column && map[col.Column.toLowerCase()]) {
                          col.Column = map[col.Column.toLowerCase()].FieldName
                            }
                            return col
                          })
@@ -288,8 +368,8 @@
                      })
                    } else if (col.type === 'custom' && col.elements) {
                      col.elements = col.elements.map(m => {
                        if (m.datatype === 'dynamic' && map[m.field]) {
                          m.field = map[m.field].FieldName
                    if (m.datatype === 'dynamic' && map[m.field.toLowerCase()]) {
                      m.field = map[m.field.toLowerCase()].FieldName
                        }
    
                        return m
@@ -297,8 +377,8 @@
                    } else if (col.type === 'colspan') {
                      col.subcols = _update(col.subcols)
                    } else if (col.field) {
                      if (map[col.field]) {
                        col.field = map[col.field].FieldName
                  if (map[col.field.toLowerCase()]) {
                    col.field = map[col.field.toLowerCase()].FieldName
                      }
                    }
                    
@@ -316,24 +396,37 @@
          config.components = _replace(config.components)
        } else if (this.props.type === 'table') {
          config.columns = config.columns.map(col => {
            if (col.field && map[col.field]) {
              col.field = map[col.field].FieldName
        if (col.field && map[col.field.toLowerCase()]) {
          col.field = map[col.field.toLowerCase()].FieldName
            }
            return col
          })
          config.search = config.search.map(col => {
            if (col.field && map[col.field]) {
              col.field = map[col.field].FieldName
        if (col.field && map[col.field.toLowerCase()]) {
          col.field = map[col.field.toLowerCase()].FieldName
            }
            if (col.datefield && map[col.datefield]) {
              col.datefield = map[col.datefield].FieldName
        if (col.datefield && map[col.datefield.toLowerCase()]) {
          col.datefield = map[col.datefield.toLowerCase()].FieldName
            }
            return col
      })
      config.action = config.action.map(m => {
        if (m.verify && m.verify.columns) {
          m.verify.columns = m.verify.columns.map(col => {
            if (col.Column && map[col.Column.toLowerCase()]) {
              col.Column = map[col.Column.toLowerCase()].FieldName
            }
            return col
          })
        }
        return m
          })
        } else if (this.props.type === 'form') {
          config.fields = config.fields.map(col => {
            if (col.field && map[col.field]) {
              col.field = map[col.field].FieldName
        if (col.field && map[col.field.toLowerCase()]) {
          col.field = map[col.field.toLowerCase()].FieldName
            }
            return col
          })
@@ -350,9 +443,160 @@
          duration: 3
        })
        this.props.updateConfig(config)
    setTimeout(() => {
      MKEmitter.emit('revert')
    }, 300)
  }
  execLabel = (map) => {
    let config = fromJS(this.props.config).toJS()
    if (this.props.type === 'custom') {
      let _replace = (components) => {
        return components.map(item => {
          if (item.type === 'tabs') {
            item.subtabs.forEach(tab => {
              tab.components = _replace(tab.components)
      })
            return item
          } else if (item.type === 'group') {
            item.components = _replace(item.components)
            return item
          }
          if (item.columns) {
            item.columns = item.columns.map(col => {
              if (col.field && map[col.field.toLowerCase()]) {
                col.label = map[col.field.toLowerCase()].FieldDec
              }
              return col
    })
  }
          if (item.search) {
            item.search = item.search.map(col => {
              if (col.field && map[col.field.toLowerCase()]) {
                col.label = map[col.field.toLowerCase()].FieldDec
              }
              return col
            })
          }
          if (item.action) {
            item.action.forEach(m => {
              if (m.modal && m.modal.fields) {
                m.modal.fields = m.modal.fields.map(col => {
                  if (col.field && map[col.field.toLowerCase()]) {
                    col.label = map[col.field.toLowerCase()].FieldDec
                  }
                  return col
                })
              }
              if (m.verify && m.verify.columns) {
                m.verify.columns = m.verify.columns.map(col => {
                  if (col.Column && map[col.Column.toLowerCase()]) {
                    col.Text = map[col.Column.toLowerCase()].FieldDec
                  }
                  return col
                })
              }
            })
          }
          if (item.cols) {
            let _update = (cols) => {
              return cols.map(col => {
                if (col.type === 'action' && col.elements) {
                  col.elements = col.elements.map(m => {
                    if (m.modal && m.modal.fields) {
                      m.modal.fields = m.modal.fields.map(col => {
                        if (col.field && map[col.field.toLowerCase()]) {
                          col.label = map[col.field.toLowerCase()].FieldDec
                        }
                        return col
                      })
                    }
                    if (m.verify && m.verify.columns) {
                      m.verify.columns = m.verify.columns.map(col => {
                        if (col.Column && map[col.Column.toLowerCase()]) {
                          col.Text = map[col.Column.toLowerCase()].FieldDec
                        }
                        return col
                      })
                    }
                    return m
                  })
                } else if (col.type === 'colspan') {
                  col.subcols = _update(col.subcols)
                } else if (col.field) {
                  if (map[col.field.toLowerCase()]) {
                    col.label = map[col.field.toLowerCase()].FieldDec
                  }
                }
                return col
              })
            }
            item.cols = _update(item.cols)
          }
          return item
        })
      }
      config.components = _replace(config.components)
    } else if (this.props.type === 'table') {
      config.columns = config.columns.map(col => {
        if (col.field && map[col.field.toLowerCase()]) {
          col.label = map[col.field.toLowerCase()].FieldDec
        }
        return col
      })
      config.search = config.search.map(col => {
        if (col.field && map[col.field.toLowerCase()]) {
          col.label = map[col.field.toLowerCase()].FieldDec
        }
        return col
      })
      config.action = config.action.map(m => {
        if (m.verify && m.verify.columns) {
          m.verify.columns = m.verify.columns.map(col => {
            if (col.Column && map[col.Column.toLowerCase()]) {
              col.Text = map[col.Column.toLowerCase()].FieldDec
            }
            return col
          })
        }
        return m
      })
    } else if (this.props.type === 'form') {
      config.fields = config.fields.map(col => {
        if (col.field && map[col.field.toLowerCase()]) {
          col.label = map[col.field.toLowerCase()].FieldDec
        }
        return col
      })
    }
    this.setState({
      confirming: false,
      visible: false
    })
    notification.success({
      top: 92,
      message: '更新已完成。',
      duration: 3
    })
    this.props.updateConfig(config)
    setTimeout(() => {
      MKEmitter.emit('revert')
    }, 500)
  }
  render() {
    const { visible, loadingTable, tables, confirming } = this.state