UNPKG

@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
// 获取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 }