@ecip/ecip-web
Version:
A magical vue admin. An out-of-box UI solution for enterprise applications. Newest development stack of vue. Lots of awesome features
223 lines (204 loc) • 6.34 kB
JavaScript
// 获取UUID
export const guid = function() {
return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
const r = Math.random() * 16 | 0
const v = c === 'x' ? r : (r & 0x3 | 0x8)
return v.toString(16)
})
}
export const SIZE = 13
// 初始化可编辑表格数据
export const editable = (tableData) => {
if (tableData.length < SIZE) {
tableData.forEach(item => {
item.edited = true
item._id = item.id || guid()
})
newEmptyObj(tableData, SIZE - tableData.length)
}
}
// 添加在已有数据的基础上,添加对象
export const addEmptyObj = (data) => {
newEmptyObj(data, SIZE - data.length)
}
// new size个新的对象到data中
export const newEmptyObj = (data, size) => {
for (let i = 0; i < size; i++) {
data.push({ edited: false, _id: guid() })
}
}
// 获取复杂对象中的某属性值
export const getComplexVal = (obj, key) => {
const arr = key.split('.')
if (arr.length === 1) {
return obj[key]
}
let value = obj
key.split('.').forEach((item, index) => {
if (value === undefined) {
return false
}
value = value[item]
})
return value
}
// 判断是否为图片文件,主要为 jpg/jpeg/png 文件类型
export const judgePicFile = (filename) => {
if (!filename) {
return false
}
const a = filename.split('').reverse().join('')
const suffix = a.substring(0, a.search(/\./)).split('').reverse().join('').toLowerCase()
return suffix === 'jpg' || suffix === 'jpeg' || suffix === 'png'
}
export const filterNode = (value, data, node, field) => {
// 如果什么都没填就直接返回
if (!value) return true
// 如果传入的value和data中的label相同说明是匹配到了
if (data[field].indexOf(value) !== -1) {
return true
}
// 否则要去判断它是不是选中节点的子节点
return checkBelongToChooseNode(value, data, node, field)
}
// 判断传入的节点是不是选中节点的子节点
export const checkBelongToChooseNode = (value, data, node, field) => {
const level = node.level
// 如果传入的节点本身就是一级节点就不用校验了
if (level === 1) {
return false
}
// 先取当前节点的父节点
let parentData = node.parent
// 遍历当前节点的父节点
let index = 0
while (index < level - 1) {
// 如果匹配到直接返回
if (parentData.data[field].indexOf(value) !== -1) {
return true
}
// 否则的话再往上一层做匹配
parentData = parentData.parent
index++
}
// 没匹配到返回false
return false
}
export const dateFormat = (date, format) => {
let fmt = format || 'yyyy-MM-dd'
let ret
const opt = {
'y+': date.getFullYear().toString(), // 年
'M+': (date.getMonth() + 1).toString(), // 月
'd+': date.getDate().toString(), // 日
'H+': date.getHours().toString(), // 时
'm+': date.getMinutes().toString(), // 分
's+': date.getSeconds().toString() // 秒
// 有其他格式化字符需求可以继续添加,必须转化成字符串
}
for (const k in opt) {
ret = new RegExp('(' + k + ')').exec(fmt)
if (ret) {
fmt = fmt.replace(ret[1], (ret[1].length === 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, '0')))
}
}
return fmt
}
//
// (fmt) {
// var o = {
// "M+": this.getMonth() + 1, //月份
// "d+": this.getDate(), //日
// "h+": this.getHours(), //小时
// "m+": this.getMinutes(), //分
// "s+": this.getSeconds(), //秒
// "q+": Math.floor((this.getMonth() + 3) / 3), //季度
// "S": this.getMilliseconds() //毫秒
// };
// if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
// for (var k in o)
// if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
// return fmt;
// }
const _treeProps = { children: 'children', id: 'id', parent: 'parentId' }
export const treeFind = (data, callback, props) => {
return null // todo
}
export const treeEach = (data, callback, props) => {
const treeProps = Object.assign({}, _treeProps, props)
// const idKey = treeProps.id
const childrenKey = treeProps.children
// const parentIdKey = treeProps.parentId
_treeEach(data, callback, childrenKey)
}
export const treeFilter = (data, callback, props) => {
return null // todo
}
const _treeEach = (data, callback, childrenKey) => {
if (!data || data.length === 0) {
return
}
for (let i = 0; i < data.length; i++) {
const result = callback(data[i], i)
if (result === true) {
continue
} else if (result === false) {
break
}
_treeEach(data[i][childrenKey], callback, childrenKey)
}
}
export const treeToList = (trees, keepChildren) => {
if (!trees) {
return []
}
const nodeList = []
trees.forEach(node => {
if (node.children) {
const tmpList = treeToList(node.children)
nodeList.push(...tmpList)
}
if (!keepChildren) {
delete node.children
}
nodeList.push(node)
})
return nodeList
}
export const treeBuilder = (treeNodes, idField, pidField) => {
console.log(treeNodes)
const trees = []
treeNodes.forEach(treeNode => {
if (!treeNode[pidField]) {
trees.push(treeNode)
}
treeNodes.forEach(it => {
if (it[pidField] && it[pidField] === treeNode[idField]) {
if (!treeNode.children) {
// console.log('eee')
// console.log(treeNode)
// Vue.set(treeNode, 'children', [])
treeNode.children = []
// console.log(treeNode)
}
treeNode.children.push(it)
}
})
})
// console.log(trees)
return trees
}
export const validateRepeatField = (data, key, name) => {
let repeatMsg = ''
data.forEach((item, i) => {
for (let j = i + 1; j < data.length - 1; j++) {
const val1 = item[key].trim().toLowerCase()
const val2 = data[j][key].trim().toLowerCase()
if (val1 === val2) {
repeatMsg = `${repeatMsg}第 ${i + 1} 行与第 ${j + 1} 行 ${name} ${item[key].trim()} 重复<br/>`
// repeatMsg = repeatMsg + "<div style='color: red'>第" + (i + 1) + "行与第" + (j + 1) + "行java属性名称" + $Tri + "重复!!!</div>";
}
}
})
return repeatMsg
}