king
2020-11-27 a06655e10f4242c350a3450c6c21e77f33302e2e
src/tabviews/zshare/normalTable/index.jsx
@@ -56,7 +56,6 @@
    imgShow: false,       // 图片放大模态框
    imgSrc: '',           // 图片路径
    lineMarks: null,      // 行标记
    colMap: null,         // 列信息(全部)
    activeIndex: null,    // 标记当前选中行
    rowspan: null         // 行合并字段信息
  }
@@ -66,7 +65,6 @@
    let columns = JSON.parse(JSON.stringify(this.props.columns))
    let lineMarks = []
    let _columns = []
    let colMap = new Map() // 用于获取字段信息
    let radio = 5          // 虚化比例
    let _format = false    // 是否虚化处理
    let rowspan = null
@@ -81,10 +79,15 @@
      }
    }
    // 获取行标记
    config.columns.forEach(col => {
      if (!col.field) return
      colMap.set(col.field, col)
      col.marks && col.marks.forEach(mark => {
        if (mark.signType === 'line') {
          lineMarks.push(mark)
        }
      })
    })
    columns.forEach((item, index) => {
@@ -94,31 +97,8 @@
        item.blur = true
      }
      if (item.marks) {
        item.marks = item.marks.filter(mark => {
          let originField = colMap.get(mark.field)
          let contrastField = mark.contrastType === 'dynamic' ? colMap.get(mark.contrastField) : ''
          if (!originField || (mark.contrastType === 'dynamic' && !contrastField)) return false
          if (contrastField && originField.type !== contrastField.type) return false
          if (mark.contrastType === 'static') {
            if (originField.type === 'text' && typeof(mark.contrastValue) === 'number') {
              return false
            } else if (originField.type === 'number' && typeof(mark.contrastValue) === 'string') {
              return false
            } else if (!['number', 'text'].includes(originField.type)) {
              return false
            }
          }
          if (mark.signType === 'line') {
            lineMarks.push(mark)
            return false
          } else if (mark.signType === 'card') {
            return false
          }
          return true
        })
      if (item.marks) { // 过滤行和卡片标记
        item.marks = item.marks.filter(mark => mark.signType !== 'line' && mark.signType !== 'card')
        if (item.marks.length === 0) {
          item.marks = ''
@@ -134,6 +114,14 @@
          if (col.rowspan === 'true') {
            rowspan = col
          }
          if (col.marks) { // 过滤行和卡片标记
            col.marks = col.marks.filter(mark => mark.signType !== 'line' && mark.signType !== 'card')
            if (col.marks.length === 0) {
              col.marks = ''
            }
          }
          cell.children.push({
@@ -179,7 +167,6 @@
      columns: _columns,
      pageSize: pageSize ? pageSize : 10,
      lineMarks: lineMarks,
      colMap: colMap,
      rowspan: rowspan
    })
  }
@@ -271,54 +258,48 @@
  }
  getMark = (record, marks) => {
    const { colMap } = this.state
    let className = ''
    let isIcon = false
    let position = 'back'
    let icon = ''
    marks.some(mark => {
      let originField = colMap.get(mark.field)
      if (!originField) return false
      let originType = originField.type || 'text'
      let originVal = record.hasOwnProperty(mark.field) ? record[mark.field] : ''
      let originVal = record[mark.field] + ''
      let contrastVal = ''
      if (mark.contrastType === 'static') {
        contrastVal = mark.contrastValue
        contrastVal = mark.contrastValue + ''
      } else {
        contrastVal = record.hasOwnProperty(mark.contrastField) ? record[mark.contrastField] : ''
        contrastVal = record[mark.contrastField] + ''
      }
      if (originType === 'text') {
        originVal = '' + originVal
        contrastVal = '' + contrastVal
      } else if (originType === 'number' && originVal !== '' && contrastVal !== '') {
      if (mark.match === '=') {
        className = originVal === contrastVal ? mark.color[1] : ''
      } else if (mark.match === '!=') {
        className = originVal !== contrastVal ? mark.color[1] : ''
      } else if (mark.match === 'like') {
        className = originVal.indexOf(contrastVal) > -1 ? mark.color[1] : ''
      } else if (mark.match === '>') {
        try {
          originVal = parseFloat(originVal)
          contrastVal = parseFloat(contrastVal)
          if (isNaN(originVal) || isNaN(contrastVal)) {
            originVal = ''
          }
        } catch {
          originVal = ''
          originVal = NaN
        }
      }
      if (originVal === '' || contrastVal === '') return false
        if (!isNaN(originVal) && !isNaN(contrastVal) && originVal > contrastVal) {
          className = mark.color[1]
        }
      } else if (mark.match === '<') {
        try {
          originVal = parseFloat(originVal)
          contrastVal = parseFloat(contrastVal)
        } catch {
          originVal = NaN
        }
      if (mark.match === '=' && originVal === contrastVal) {
        className = mark.color[1]
      } else if (mark.match === '!=' && originVal !== contrastVal) {
        className = mark.color[1]
      } else if (mark.match === 'like' && originVal.indexOf(contrastVal) > -1) {
        className = mark.color[1]
      } else if (mark.match === '>' && originVal > contrastVal) {
        className = mark.color[1]
      } else if (mark.match === '<' && originVal < contrastVal) {
        className = mark.color[1]
        if (!isNaN(originVal) && !isNaN(contrastVal) && originVal < contrastVal) {
          className = mark.color[1]
        }
      }
      if (!className) return false
@@ -999,7 +980,7 @@
  render() {
    const { setting, pickup, statFValue } = this.props
    const { selectedRowKeys, lineMarks, colMap, activeIndex, rowspan } = this.state
    const { selectedRowKeys, lineMarks, activeIndex, rowspan } = this.state
    // 设置表格选择属性:单选、多选、不可选
    let rowSelection = null
@@ -1112,43 +1093,42 @@
            if (lineMarks.length === 0) return className
            lineMarks.some(mark => {
              let originType = colMap.get(mark.field).type
              let originVal = record.hasOwnProperty(mark.field) ? record[mark.field] : ''
              let originVal = record[mark.field] + ''
              let contrastVal = ''
              if (mark.contrastType === 'static') {
                contrastVal = mark.contrastValue
                contrastVal = mark.contrastValue + ''
              } else {
                contrastVal = record.hasOwnProperty(mark.contrastField) ? record[mark.contrastField] : ''
                contrastVal = record[mark.contrastField] + ''
              }
              if (originType === 'text') {
                originVal = '' + originVal
                contrastVal = '' + contrastVal
              } else if (originType === 'number' && originVal !== '' && contrastVal !== '') {
              if (mark.match === '=') {
                className = originVal === contrastVal ? 'background ' + mark.color[1] : ''
              } else if (mark.match === '!=') {
                className = originVal !== contrastVal ? 'background ' + mark.color[1] : ''
              } else if (mark.match === 'like') {
                className = originVal.indexOf(contrastVal) > -1 ? 'background ' + mark.color[1] : ''
              } else if (mark.match === '>') {
                try {
                  originVal = parseFloat(originVal)
                  contrastVal = parseFloat(contrastVal)
                  if (isNaN(originVal) || isNaN(contrastVal)) {
                    originVal = ''
                  }
                } catch {
                  originVal = ''
                  originVal = NaN
                }
              }
              if (originVal === '' || contrastVal === '') return false
              if (mark.match === '=' && originVal === contrastVal) {
                className = 'background ' + mark.color[1]
              } else if (mark.match === '!=' && originVal !== contrastVal) {
                className = 'background ' + mark.color[1]
              } else if (mark.match === 'like' && originVal.indexOf(contrastVal) > -1) {
                className = 'background ' + mark.color[1]
              } else if (mark.match === '>' && originVal > contrastVal) {
                className = 'background ' + mark.color[1]
              } else if (mark.match === '<' && originVal < contrastVal) {
                className = 'background ' + mark.color[1]
                if (!isNaN(originVal) && !isNaN(contrastVal) && originVal > contrastVal) {
                  className = 'background ' + mark.color[1]
                }
              } else if (mark.match === '<') {
                try {
                  originVal = parseFloat(originVal)
                  contrastVal = parseFloat(contrastVal)
                } catch {
                  originVal = NaN
                }
                if (!isNaN(originVal) && !isNaN(contrastVal) && originVal < contrastVal) {
                  className = 'background ' + mark.color[1]
                }
              }
              if (!className) return false