ed-frame-vue
Version:
easydata 基础组件
207 lines (194 loc) • 6.28 kB
JavaScript
import {getVarType} from "./utils";
/**
* @name getControlProp
* @param control
* @param controlProps
* @returns {any}
* @description 获取ControlProp信息
*/
export function getControlProp(control, controlProps) {
return (controlProps && controlProps[control.id]) ? JSON.parse(controlProps[control.id].controlProps) : {}
}
/**
* 初始化上传组件 headers 数据
* @name initHeaders
* @returns {{"Authorization": string}}
*/
export function initHeaders() {
return {"Authorization": 'Bearer ' + localStorage.getItem('ACCESS_TOKEN')}
}
/**
* @name getDefault
* @param props
* @return {{}}
* @description 获取默认属性值
*/
export function getDefault(props) {
let obj = {}
for (const key in props) {
obj[key] = typeof props[key].default !== 'function' ? props[key].default : {}
}
return obj
}
/**
* 解析formData数据
* @name setFormData
* @param formData
* @param controlInfos
* @param that
* @returns {{}|any}
*/
export function setFormData(formData, controlInfos, that) {
if (getVarType(formData) === 'object') {
const {key, keyInfo, keyInfoObject, id, keyInfoView} = formData
let data = keyInfoView? keyInfoView : keyInfoObject ? keyInfoObject : keyInfo ? keyInfo : key ? key : formData
if (getVarType(data) === 'string') {
return Object.assign({}, JSON.parse(data), {id: id})
} else if (data && getVarType(data) === 'object') {
return removeTag(Object.assign({}, data, {id: id}), controlInfos, that)
} else {
return {}
}
} else if (getVarType(formData) === 'array') {
return formData.map(item => {
if (getVarType(item.keyInfo) === 'string') {
item.keyInfo = JSON.parse(item.keyInfo)
}
if (item.detailKey) {
item.detailKey = JSON.parse(item.detailKey)
}
return item
})
} else {
return {}
}
}
/**
* @name setTableData
* @param tableData
* @return {*}
*/
export function setTableData(tableData) {
tableData.map(item => {
const {key, keyInfo, keyInfoObject} = item
let data = keyInfoObject ? keyInfoObject : keyInfo ? keyInfo : key
Object.keys(data).map(i => {
if (getVarType(data[i]) === 'object') {
data[i] = data[i].value
} else if (getVarType(data[i]) === 'array') {
let d = ''
data[i].map(t => d += `${t.value},`)
data[i] = d.replace(/,$/gi, "");
}
})
item.key = data
item.keyInfo = data
item.keyInfoObject = data
item.data= null
})
return tableData
}
/**
* @name setFormDataDefault
* @param controlInfos
* @param controlProps
* @param dataSource
* @return {{}}
* @description 获取配置的默认值
*/
export function setDefaultFormData({controlInfos, controlProps, dataSource, isSearchForm}) {
let formData = {}
controlInfos.map((control, index) => {
let props = getControlProp(control, controlProps)
formData[control.controlName] = ""
if (props.hasOwnProperty('defaultValue')) {
formData[control.controlName] = props.defaultValue === 'true' ? true : props.defaultValue === 'false' ? false : props.defaultValue
} else {
if (["checkbox", "upload"].includes(control.controlType)) {
formData[control.controlName] = []
_isCheckedDataSource(control, props, formData, true)
}else if(['select', 'radio'].includes(control.controlType)) {
_isCheckedDataSource(control, props, formData, props.multiple)
//todo 暂时放这里,应该map循环只对isShow == true的做处理 (在切换显示隐藏formItem时会有问题)
} else if(control.controlType === '_switch' && !isSearchForm && control.isShow) {
if(props && props.hasOwnProperty('inactiveValue')) {
formData[control.controlName] = props.inactiveValue
}else {
formData[control.controlName] = false
}
}else if(control.controlType === 'inputNumber') {
formData[control.controlName] = undefined
}
}
})
return formData
}
function _isCheckedDataSource(control, props, formData, multiple = false) {
if (props.dataSource) {
if(multiple){
formData[control.controlName] = []
let data = props.dataSource.filter(i => i.isChecked)
if(data.length > 0){
data.map(item => formData[control.controlName].push(item.value))
}
}
else {
let data = props.dataSource.find(i => i.isChecked)
formData[control.controlName] = data ? data.value : ""
}
}
}
/**
* @name removeTag
* @param data
* @param controlInfos
* @param that
* @return {*}
*/
export function removeTag(data, controlInfos, that) {
if (controlInfos) {
for (const key in data) {
if (data[key] == null || data[key] == undefined) {
delete data[key]
continue
}
const controlInfo = controlInfos.filter(t => t.controlName === key);
if (controlInfo && controlInfo.length === 1) {
//部分控件做转换
if (['select', 'cascader', '_switch', 'checkbox', 'radio'].includes(controlInfo[0].controlType)) {
if (getVarType(data[key]) === 'object') {
if (data[key].label && getVarType(data[key].value) !== 'undefined') {
data[key] = data[key].value;
}
} else if (getVarType(data[key]) === 'array') {
data[key] = data[key].map(item => {
if (item.label && getVarType(item.value) !== 'undefined') {
return item.value;
}
return item;
})
}
} else if (controlInfo[0].controlType === 'popup') {
if (getVarType(data[key]) === 'object' && that) {
that.popupFormModel[key] = data[key]
data[key] = data[key].label
} else if (getVarType(data[key]) === 'array' && that) {
that.popupFormModel[key] = data[key]
let arr = []
data[key].forEach(item => {
arr.push(item.label)
})
data[key] = arr
}
}
}
}
}
return data
}
export function getKeyInfo(data){
const {key, keyInfo, keyInfoObject} = data
if(keyInfoObject) return keyInfoObject
if(keyInfo) return getVarType(keyInfo) === 'string' ? JSON.parse(keyInfo) : keyInfo
if(key) return key
}