king
2024-03-21 a9b02f6862522b54d0824152017bf2acfec2af7b
src/tabviews/custom/components/share/normalTable/index.jsx
@@ -20,6 +20,63 @@
  '5:1': '20%', '6:1': '16.67%', '7:1': '14.29%', '8:1': '12.5%', '9:1': '11.11%',
  '10:1': '10%', '3:4': '133.33%', '2:3': '150%', '9:16': '177.78%'
}
// 字段透视
const triggerLink = (e, item, record) => {
  e.stopPropagation()
  if (item.linkThdMenu) {
    let __param = {
      $BID: record.$$uuid
    }
    if (item.field) {
      __param.$searchkey = item.field.toLowerCase()
      __param.$searchval = record[item.field] || ''
    }
    if (item.linkThdMenu.urlFields) {
      let lower = {}
      Object.keys(record).forEach(key => {
        lower[key.toLowerCase()] = record[key]
      })
      item.linkThdMenu.urlFields.split(',').forEach(field => {
        __param[field] = lower[field.toLowerCase()] || ''
      })
    } else if (item.linkfields && item.linkfields.length > 0) {
      item.linkfields.forEach(field => {
        __param[field] = record[field] || ''
      })
    }
    let tabmenu = item.linkThdMenu
    tabmenu.param = __param
    MKEmitter.emit('modifyTabs', tabmenu, true)
  } else if (item.linkurl) {
    let src = item.linkurl
    let con = '?'
    if (/\?/ig.test(src)) {
      con = '&'
    }
    if (item.linkfields && item.linkfields.length > 0) {
      item.linkfields.forEach(field => {
        if (field.toLowerCase() === 'id') return
        con += `${field}=${record[field] || ''}&`
      })
    }
    src = src + `${con}id=${record.$$uuid}&appkey=${window.GLOB.appkey}&userid=${sessionStorage.getItem('UserID')}&LoginUID=${sessionStorage.getItem('LoginUID') || ''}`
    window.open(src)
  }
}
class BodyRow extends React.Component {
  shouldComponentUpdate (nextProps, nextState) {
    return !is(fromJS(this.props.data), fromJS(nextProps.data)) || this.props.className !== nextProps.className
@@ -107,10 +164,10 @@
  }
  render() {
    let { col, config, record, className, style, triggerLink, ...resProps } = this.props
    let { col, config, record, className, style, ...resProps } = this.props
    if (!col) return (<td {...resProps} className={className} style={style}/>)
    if (col.type === 'text') {
      let content = ''
      if (record[col.field] !== undefined) {
@@ -124,6 +181,10 @@
          content = `${content.substr(0, 4)}-${content.substr(5, 2)}-${content.substr(8, 2)} ${content.substr(11, 2)}:${content.substr(14, 2)}:${content.substr(17, 2)}`
        } else if (col.textFormat === 'encryption') {
          content = <span>{col.prefix || ''}<Encrypts value={content} />{col.postfix || ''}</span>
        }
        if (col.noValue === 'hide' && content < '1949-10-02') {
          content = ''
        }
        if (col.textFormat !== 'encryption') {
@@ -162,21 +223,19 @@
        resProps.rowSpan = record['$$' + col.field]
      }
      
      if (!record.$disabled && (col.linkThdMenu || col.linkurl)) {
        content = (
          <div>
            <div className="link-menu" onDoubleClick={(e) => triggerLink(e, col, record)}></div>
            {content}
          </div>
        )
      }
      resProps.children = content
      if (!record.$disabled && (col.linkThdMenu || col.linkurl)) {
        return (<td {...resProps} className={className + ' clickable'} onClick={(e) => triggerLink(e, col, record)} style={style}/>)
      }
    } else if (col.type === 'number') {
      let content = ''
      try {
        content = parseFloat(record[col.field])
        if (isNaN(content)) {
          content = ''
        }
        if (col.noValue === 'hide' && content === 0) {
          content = ''
        }
      } catch (e) {
@@ -235,16 +294,11 @@
        resProps.rowSpan = record['$$' + col.field]
      }
      if (!record.$disabled && (col.linkThdMenu || col.linkurl)) {
        content = (
          <div>
            <div className="link-menu" onDoubleClick={(e) => triggerLink(e, col, record)}></div>
            {content}
          </div>
        )
      }
      resProps.children = content
      if (!record.$disabled && (col.linkThdMenu || col.linkurl)) {
        return (<td {...resProps} className={className + ' clickable'} onClick={(e) => triggerLink(e, col, record)} style={style}/>)
      }
    } else if (col.type === 'picture') {
      let photos = ''
      if (record[col.field]) {
@@ -352,6 +406,10 @@
          // eslint-disable-next-line
          let func = new Function('data', col.formula)
          content = func([record])
          if (col.noValue === 'hide' && content === 0) {
            content = ''
          }
        } catch (e) {
          console.warn(e)
          content = ''
@@ -365,6 +423,10 @@
          try {
            // eslint-disable-next-line
            content = eval(content)
            if (col.noValue === 'hide' && content === 0) {
              content = ''
            }
          } catch (e) {
            console.info(content)
            console.warn(e)
@@ -517,7 +579,6 @@
                record,
                col: item,
                config: item.type === 'custom' ? {setting, columns: fields} : null,
                triggerLink: this.triggerLink
              })
            }
          }
@@ -651,6 +712,9 @@
        result = originVal === contrastVal
      } else if (item.match === '!=') {
        result = originVal !== contrastVal
      } else if (item.match === 'regexp') {
        let reg = new RegExp(item.contrastValue, 'ig')
        result = reg.test(originVal)
      } else {
        originVal = isNaN(originVal) ? originVal : +originVal
        contrastVal = isNaN(contrastVal) ? contrastVal : +contrastVal
@@ -788,50 +852,6 @@
  
      MKEmitter.emit('resetSelectLine', MenuID, '', '')
      MKEmitter.emit('syncBalconyData', MenuID, [], false)
    }
  }
  // 字段透视
  triggerLink = (e, item, record) => {
    e.stopPropagation()
    let __param = {
      $searchkey: item.field,
      $searchval: record[item.field] || '',
      $BID: record.$$uuid
    }
    if (item.linkfields && item.linkfields.length > 0) {
      item.linkfields.forEach(field => {
        __param[field] = record[field] || ''
      })
    }
    if (item.linkThdMenu) {
      let tabmenu = item.linkThdMenu
      tabmenu.param = __param
      MKEmitter.emit('modifyTabs', tabmenu, true)
    } else if (item.linkurl) {
      let src = item.linkurl
      let con = '?'
      if (/\?/ig.test(src)) {
        con = '&'
      }
      if (item.linkfields && item.linkfields.length > 0) {
        item.linkfields.forEach(field => {
          if (field.toLowerCase() === 'id') return
          con += `${field}=${record[field] || ''}&`
        })
      }
      src = src + `${con}id=${record.$$uuid}&appkey=${window.GLOB.appkey}&userid=${sessionStorage.getItem('UserID')}&LoginUID=${sessionStorage.getItem('LoginUID') || ''}`
      window.open(src)
    }
  }
@@ -1147,7 +1167,7 @@
    }
    return (
      <div className={`normal-custom-table ${setting.tableHeader || ''} ${height ? 'fixed-height' : ''} ${setting.mode || ''} table-vertical-${setting.vertical || 'middle'} table-col-${columns.length} ${fixed}`} style={style}>
      <div className={`normal-custom-table ${setting.tableHeader || ''} ${setting.parity === 'true' ? 'mk-parity' : ''} ${height ? 'fixed-height' : ''} ${setting.mode || ''} table-vertical-${setting.vertical || 'middle'} table-col-${columns.length} ${fixed}`} style={style}>
        {(setting.tableType === 'radio' || setting.tableType === 'checkbox') && data && data.length > 0 ?
          <Switch title="收起" className="main-pickup" checkedChildren="开" unCheckedChildren="关" checked={pickup} onChange={this.pickupChange} /> : null
        }