You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
235 lines
5.5 KiB
235 lines
5.5 KiB
/* eslint-disable */
|
|
import column from '@js/columns/columns'
|
|
|
|
export default {
|
|
/**
|
|
* 获取列
|
|
*
|
|
* @param keyword
|
|
* @param type
|
|
* @returns {Array}
|
|
*/
|
|
getColumns(keyword, type) {
|
|
if (!keyword) {
|
|
return []
|
|
}
|
|
let columns = column[keyword]
|
|
let colFrozen = [] // 左固定列
|
|
let colNormal = [] // 非固定列
|
|
columns.forEach((column) => {
|
|
let _col = this.formatCol(column, type)
|
|
if (_col) {
|
|
if (_col.isFrozen) {
|
|
colFrozen.push(_col)
|
|
} else {
|
|
colNormal.push(_col)
|
|
}
|
|
}
|
|
})
|
|
if (type === 'table' || type === 'formA' || type === 'formU') {
|
|
return colFrozen.concat(colNormal)
|
|
}
|
|
return [colFrozen, colNormal]
|
|
},
|
|
|
|
/**
|
|
* 格式化列
|
|
*
|
|
* @param col
|
|
* @param type
|
|
* @returns {*}
|
|
*/
|
|
formatCol(column, type) {
|
|
// 防止污染column.js基础配置
|
|
let col = {}
|
|
Object.assign(col, column)
|
|
if (column.display && column.display.length > 0) {
|
|
switch (type) {
|
|
case 'table':
|
|
col.align = 'center'
|
|
col.headerAlign = 'center'
|
|
col.isResize = true // 是否拖动单元格
|
|
if (!column.display.includes(type)) {
|
|
return null
|
|
}
|
|
if (column.fixed) {
|
|
col.isFrozen = true
|
|
}
|
|
if (!column.width) {
|
|
col.width = 120
|
|
}
|
|
col.formatter = (rowData) => {
|
|
// 没有数值
|
|
if (!rowData[column.key] && rowData[column.key] != '0') return '--'
|
|
if (column.format) {
|
|
switch (column.format) {
|
|
case 'date':
|
|
return app.util.formatDate(rowData[column.key], column.fmt)
|
|
break
|
|
case 'decimal': // 数字格式化
|
|
return Number(rowData[column.key].toFixed(column.num))
|
|
break
|
|
case 'address': // 地址组合
|
|
let address =
|
|
rowData[column.provinceKey] +
|
|
rowData[column.cityKey] +
|
|
rowData[column.countyKey]
|
|
return address
|
|
break
|
|
default:
|
|
return column.format(rowData[column.key])
|
|
}
|
|
} else {
|
|
return rowData[column.key]
|
|
}
|
|
}
|
|
if (column.renderType) {
|
|
col.render = function(data, row) {
|
|
switch (column.renderType) {
|
|
case 'image':
|
|
return (
|
|
'<img style="width:30pxheight: 30px" src="' + data + '"/>'
|
|
)
|
|
break
|
|
case 'icon':
|
|
return '<i class="el-icon-" + col.icon></i>'
|
|
break
|
|
case 'color':
|
|
return (
|
|
'<span style="width:20% height: 100% color: #fffdisplay: inline-block line-height:23px border-radius:4px background-color: ' +
|
|
getTagColor(data) +
|
|
'">' +
|
|
data +
|
|
'</span>'
|
|
)
|
|
break
|
|
default:
|
|
return '<span></span>'
|
|
}
|
|
}
|
|
}
|
|
break
|
|
case 'search':
|
|
if (!column.display.includes(type)) {
|
|
return null
|
|
}
|
|
if (column.type) {
|
|
col.formType = column.type
|
|
}
|
|
break
|
|
case 'formA':
|
|
case 'formU':
|
|
if (!column.display.includes(type)) {
|
|
return null
|
|
}
|
|
if (column.disabled && column.disabled.includes(type)) {
|
|
col.disabled = true
|
|
} else {
|
|
col.disabled = false
|
|
}
|
|
break
|
|
default:
|
|
return col
|
|
}
|
|
return col
|
|
} else {
|
|
return col
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 获取验证规则
|
|
*
|
|
* @param keyword
|
|
*/
|
|
getRules(keyword) {
|
|
let rules = {}
|
|
let _columns = column[keyword]
|
|
if (_columns) {
|
|
_columns.forEach((_column) => {
|
|
if (_column.rule) {
|
|
_column.rule.forEach((_col) => {
|
|
if (!_col.message) {
|
|
Object.assign(_col, { message: _col.title + '不合法' })
|
|
}
|
|
})
|
|
rules[_column.key] = _column.rule
|
|
}
|
|
})
|
|
}
|
|
return rules
|
|
},
|
|
|
|
/**
|
|
* 获取model
|
|
*
|
|
* @param keyword
|
|
*/
|
|
getModel(keyword) {
|
|
let _model = {}
|
|
let _columns = column[keyword]
|
|
if (_columns) {
|
|
_columns.forEach((_column) => {
|
|
if (_column.display && _column.display.includes('model')) {
|
|
_model[_column.key] = this.initValue(_column)
|
|
}
|
|
})
|
|
}
|
|
return _model
|
|
},
|
|
|
|
/**
|
|
* 初始化 变量值
|
|
* @param col
|
|
* @returns {string|number|Array}
|
|
*/
|
|
initValue(col) {
|
|
let value
|
|
switch (col.type) {
|
|
case 'input':
|
|
case 'textarea':
|
|
value = ''
|
|
break
|
|
case 'inputNum':
|
|
case 'switch':
|
|
value = ''
|
|
break
|
|
case 'counter':
|
|
value = 0
|
|
break
|
|
case 'select':
|
|
value = ''
|
|
break
|
|
case 'radio':
|
|
value = 1
|
|
break
|
|
case 'selectMul':
|
|
case 'checkbox':
|
|
value = []
|
|
break
|
|
case 'date':
|
|
value = ''
|
|
break
|
|
case 'cascader':
|
|
value = []
|
|
break
|
|
default:
|
|
value = ''
|
|
break
|
|
}
|
|
|
|
return value
|
|
}
|
|
}
|
|
function getTagColor(title) {
|
|
let color
|
|
switch (title) {
|
|
case '启用':
|
|
color = '#2fcc2f'
|
|
break
|
|
case '停用':
|
|
color = 'red'
|
|
break
|
|
}
|
|
return color
|
|
}
|
|
|