| | |
| | | imgShow: false, // 图片放大模态框 |
| | | imgSrc: '', // 图片路径 |
| | | lineMarks: null, // 行标记 |
| | | colMap: null, // 列信息(全部) |
| | | activeIndex: null, // 标记当前选中行 |
| | | rowspan: null // 行合并字段信息 |
| | | } |
| | |
| | | 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 |
| | |
| | | } |
| | | } |
| | | |
| | | // 获取行标记 |
| | | 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) => { |
| | |
| | | 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 = '' |
| | |
| | | |
| | | 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({ |
| | |
| | | columns: _columns, |
| | | pageSize: pageSize ? pageSize : 10, |
| | | lineMarks: lineMarks, |
| | | colMap: colMap, |
| | | rowspan: rowspan |
| | | }) |
| | | } |
| | |
| | | } |
| | | |
| | | 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 |
| | |
| | | |
| | | 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 |
| | |
| | | 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 |