UNPKG

yinghe-lowcode-zln

Version:

基于vue、ant-design-vue,datagrid的低代码平台

1,161 lines (1,102 loc) 31.1 kB
import Vue from 'vue' import store from '@/store' import { ORG_ID, OPERATOR, PERSON_ID, DATA_FLAG } from '@/store/mutation-types' /** * 首页显示时间段 */ export function timeFix() { const time = new Date() const hour = time.getHours() return hour < 9 ? '早上好' : hour <= 11 ? '上午好' : hour <= 13 ? '中午好' : hour < 20 ? '下午好' : '晚上好' } /** * 首页显示欢迎语句 */ export function welcome() { const arr = ['天生我材必有用', '准备吃什么呢?', '要不要喝一瓶肥佬水', '我猜你可能累了'] const index = Math.floor(Math.random() * arr.length) return arr[index] } /** * 判断宿主是否为IE环境 */ export function isIE() { const bw = window.navigator.userAgent const compare = s => bw.indexOf(s) >= 0 const ie11 = (() => 'ActiveXObject' in window)() return compare('MSIE') || ie11 } /** * 定时移除页面中加载动画 */ export function removeLoadingAnimate(id = '', timeout = 1500) { if (id) { setTimeout(() => { document.body.removeChild(document.getElementById(id)) }, timeout) } } /** * 触发window窗口大小更改 */ export function triggerWindowResizeEvent() { const event = document.createEvent('HTMLEvents') event.initEvent('resize', true, true) event.eventType = 'message' window.dispatchEvent(event) } /** * 触发滚动事件、执行回调函数(参数-滚动方向) */ export function handleScrollHeader(callback) { let timer = 0 let beforeScrollTop = window.pageYOffset window.addEventListener( 'scroll', () => { clearTimeout(timer) timer = setTimeout(() => { let direction = 'up' const afterScrollTop = window.pageYOffset const delta = afterScrollTop - beforeScrollTop if (delta === 0) { return false } direction = delta > 0 ? 'down' : 'up' callback && callback(direction) beforeScrollTop = afterScrollTop }, 50) }, false ) } /** * 封装接口传参统一格式 * zhouji 2020-3-20 */ export const requestBuilder = (action = '', param = {}, pageNo = 0, pageSize = 10, sortField = '', sortOrder = '') => { const toSortField = (field, order) => { const sortField = field && field.replace(/(^|\B)([A-Z])/g, '_$2').toLowerCase() const sortOrder = order && order.replace(/end$/i, '') return (sortOrder && sortField) || undefined } const toSortOrder = (field, order) => { const sortField = field && field.replace(/(^|\B)([A-Z])/g, '_$2').toLowerCase() const sortOrder = order && order.replace(/end$/i, '') return (sortField && sortOrder) || undefined } return { param: param, action: action, orgId: Vue.ls.get(ORG_ID), operator: Vue.ls.get(OPERATOR), personId: Vue.ls.get(PERSON_ID), dataFlag: Vue.ls.get(DATA_FLAG), sortField: toSortField(sortField, sortOrder), sortOrder: toSortOrder(sortField, sortOrder), pageSize: pageSize, pageNo: pageNo } } /** * 根据 actions 判断当前账号权限 * lin pengteng 2020-3-31 */ export const getPermission = (context, actions, every = false) => { const roles = store.getters.roles const permission = context.$route.meta.permission const permissionIds = (permission instanceof String && [permission]) || permission for (const permission of roles.permissions) { if (!permissionIds.includes(permission.permissionId)) { continue } for (const action of actions) { if (!permission.actionList) { // 强校验 return false } if (every === false && permission.actionList.includes(action)) { return true } if (every !== false && !permission.actionList.includes(action)) { return false } } return every !== false } // 强校验 return false } /** * 递归更新 Object/Array 属性值 * lin pengteng 2020-3-26 */ export const deepUpdate = (...array) => { function isArray(arr) { return itType(arr) === 'Array' } function isObject(obj) { return itType(obj) === 'Object' } function isOwnProperty(context, property) { return Object.prototype.hasOwnProperty.call(context, property) } function itType(val) { return Object.prototype.toString.call(val).replace(/^\[[^\s\]]+\s*([^\s\]]+)]$/, '$1') } function isAllArray(oldArr, newArr) { return isArray(oldArr) && isArray(newArr) } function isAllObject(oldObj, newObj) { return isObject(oldObj) && isObject(newObj) } if (array.length > 1) { const oldData = array[0] const newArrs = array.slice(1) for (const newData of newArrs) { if (isAllArray(oldData, newData) || isAllObject(oldData, newData)) { for (const key in oldData) { if (isOwnProperty(oldData, key) && isOwnProperty(newData, key)) { if ((isArray(oldData[key]) && isArray(newData[key])) || (isObject(oldData[key]) && isObject(newData[key]))) { deepUpdate(oldData[key], newData[key]) continue } oldData[key] = newData[key] } } } } } return array[0] } /** * 根据 key 取出 tree 中节点数据 * lin pengteng 2020-3-27 */ export const takeTreeByKey = (tree, key, value = 'value', children = 'children') => { function isArray(arr) { return itType(arr) === 'Array' } function isString(obj) { return itType(obj) === 'String' } function itType(val) { return Object.prototype.toString.call(val).replace(/^\[[^\s\]]+\s*([^\s\]]+)]$/, '$1') } function isOwnProperty(context, property) { return Object.prototype.hasOwnProperty.call(context, property) } if (isArray(key)) { const result = [] for (const k of key) { result.push(takeTreeByKey(tree, k, value, children)) } return result } if (isArray(tree) && isString(key)) { for (let i = 0, l = tree.length; i < l; i++) { if (isOwnProperty(tree[i], value) && key === tree[i][value]) { return tree[i] } if (isArray(tree[i][children]) && tree[i][children].length > 0) { const result = takeTreeByKey(tree[i][children], key, value, children) if (result !== null) { return result } } } return null } } // 将当前时间转化为yyyy--mm--dd export function getNowDate() { let date = new Date() const f1 = '/' const year = date.getFullYear() let month = date.getMonth() + 1 const day = date.getDate() if (month >= 1 && month <= 9) { month = '0' + month } if (date >= 0 && date <= 9) { date = '0' + date } var currentdate = year + f1 + month + f1 + day return currentdate } // 添加日期范围 export function addDateRange(params, dateRange, propName) { const search = { ...params } if (dateRange !== null && dateRange !== '' && dateRange.length === 2) { search.params = {} if (typeof (propName) === 'undefined') { search['beginTime'] = dateRange[0] search['endTime'] = dateRange[1] } else { search[propName + 'BeginTime'] = dateRange[0] search[propName + 'EndTime'] = dateRange[1] } } return search } // 日期格式化 export function parseTime(time, pattern) { if (arguments.length === 0 || !time) { return null } const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}' let date if (typeof time === 'object') { date = time } else { if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { time = parseInt(time) } else if (typeof time === 'string') { time = time.replace(new RegExp(/-/gm), '/') } if ((typeof time === 'number') && (time.toString().length === 10)) { time = time * 1000 } date = new Date(time) } const formatObj = { y: date.getFullYear(), m: date.getMonth() + 1, d: date.getDate(), h: date.getHours(), i: date.getMinutes(), s: date.getSeconds(), a: date.getDay() } const timeStr = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { let value = formatObj[key] // Note: getDay() returns 0 on Sunday if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] } if (result.length > 0 && value < 10) { value = '0' + value } return value || 0 }) return timeStr } // 回显数据字典 export function selectDictLabel(datas, value) { var actions = [] Object.keys(datas).some(key => { if (datas[key].dictValue === ('' + value)) { actions.push(datas[key].dictLabel) return true } }) return actions.join('') } // 回显数据字典(字符串数组) export function selectDictLabels(datas, value, separator) { var actions = [] var currentSeparator = undefined === separator ? ',' : separator var temp = value.split(currentSeparator) Object.keys(value.split(currentSeparator)).some(val => { Object.keys(datas).some(key => { if (datas[key].dictValue === ('' + temp[val])) { actions.push(datas[key].dictLabel + currentSeparator) } }) }) return actions.join('').substring(0, actions.join('').length - 1) } /** * 构造树型结构数据 * @param {*} data 数据源 * @param {*} id id字段 默认 'id' * @param {*} parentId 父节点字段 默认 'parentId' * @param {*} children 孩子节点字段 默认 'children' * @param {*} rootId 根Id 默认 0 */ export function handleTree(data, id, parentId, children, rootId) { id = id || 'id' parentId = parentId || 'parentId' children = children || 'children' rootId = rootId || Math.min.apply(Math, data.map(item => { return item[parentId] })) || 0 // 对源数据深度克隆 const cloneData = JSON.parse(JSON.stringify(data)) // 循环所有项 const treeData = cloneData.filter(father => { var branchArr = cloneData.filter(child => { // 返回每一项的子级数组 return father[id] === child[parentId] }) if (branchArr.length > 0) { father.children = branchArr } else { father.children = '' } // 返回第一层 return father[parentId] === rootId }) return treeData !== '' ? treeData : data } /** * 递归删除children空数组 * @param {*} list * @returns */ export function removeEmptyChildren(list) { const result = list.map((item) => { return { ...item, children: item.children && item.children.length > 0 ? removeEmptyChildren(item.children) : undefined } }) return result } /** * 获取uuid */ export function getUUID() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => { return (c === 'x' ? (Math.random() * 16 | 0) : ('r&0x3' | '0x8')).toString(16) }) } /** * 根据类名获取页面组件名称 * @param className * @returns {*} */ export function getPageIdByClassName(className) { const arr = className.split('.') const pageId = arr[arr.length - 1] return toLowerLine(pageId).toUpperCase() } /** * 过滤对象中为空的属性 * @param obj * @returns {*} */ export function filterObj(obj) { if (!(typeof obj === 'object')) { return } for (const key in obj) { if (obj.hasOwnProperty(key) && (obj[key] === null || obj[key] === undefined || obj[key] === '')) { delete obj[key] } } return obj } /** * 如果值不存在就 push 进数组,反之不处理 * @param array 要操作的数据 * @param value 要添加的值 * @param key 可空,如果比较的是对象,可能存在地址不一样但值实际上是一样的情况,可以传此字段判断对象中唯一的字段,例如 id。不传则直接比较实际值 * @returns {boolean} 成功 push 返回 true,不处理返回 false */ export function pushIfNotExist(array, value, key) { for (const item of array) { if (key && (item[key] === value[key])) { return false } else if (item === value) { return false } } array.push(value) return true } /** * 深度克隆对象、数组 * @param obj 被克隆的对象 * @return 克隆后的对象 */ export function cloneObject(obj) { return JSON.parse(JSON.stringify(obj)) } /** * 随机生成字符串 * @param length 字符串的长度 * @param chats 可选字符串区间(只会生成传入的字符串中的字符) * @return string 生成的字符串 */ export function randomString(length, chats) { if (!length) length = 1 if (!chats) chats = '0123456789qwertyuioplkjhgfdsazxcvbnm' let str = '' for (let i = 0; i < length; i++) { const num = randomNumber(0, chats.length - 1) str += chats[num] } return str } export function parseCondition(condition) { switch (condition) { case '=': return 'andEq' case '<': return 'andLess' case '<=': return 'andLessEq' case '>=': return 'andGreatEq' case '>': return 'andGreat' case 'contains': return 'andLike' case 'notcontains': return 'andNotLike' case 'startswith': return 'andLeftLike' case 'endswith': return 'andRightLike' case '<>': return 'andNotEq' case 'and': return 'andBetween' default: return 'andLike' } } /** * 随机生成数字 * * 示例:生成长度为 12 的随机数:randomNumber(12) * 示例:生成 3~23 之间的随机数:randomNumber(3, 23) * * @param1 最小值 | 长度 * @param2 最大值 * @return var 生成后的数字 */ export function randomNumber() { // 生成 最小值 到 最大值 区间的随机数 const random = (min, max) => { return Math.floor(Math.random() * (max - min + 1) + min) } if (arguments.length === 1) { const [length] = arguments // 生成指定长度的随机数字,首位一定不是 0 const nums = [...Array(length).keys()].map(i => (i > 0 ? random(0, 9) : random(1, 9))) return parseInt(nums.join('')) } else if (arguments.length >= 2) { const [min, max] = arguments return random(min, max) } else { return Number.NaN } } /** * 随机生成uuid * @return string 生成的uuid */ export function randomUUID() { const chats = '0123456789abcdef' return randomString(32, chats) } /** * 下划线转驼峰 * @param string * @returns {*} */ export function underLine2CamelCase(string) { return string.replace(/_([a-z])/g, function (all, letter) { return letter.toUpperCase() }) } export function toUpperCaseLine(str) { var temp = str.replace(/[A-Z]/g, function (match) { return '_' + match.toLowerCase() }) if (temp.slice(0, 1) === '_') { // 如果首字母是大写,执行replace时会多一个_,这里需要去掉 temp = temp.slice(1) } return temp.toUpperCase() } // 驼峰转换下划线 export function toLowerLine(str) { var temp = str.replace(/[A-Z]/g, function (match) { return '_' + match.toLowerCase() }) if (temp.slice(0, 1) === '_') { // 如果首字母是大写,执行replace时会多一个_,这里需要去掉 temp = temp.slice(1) } return temp } export function toClassName(string) { var temp = string.replace(/_([a-z])/g, function (all, letter) { return letter.toUpperCase() }) return temp.slice(0, 1).toUpperCase() + temp.slice(1) } function getWindowClientHeight() { let winHeight = 0 if (window.innerHeight) { winHeight = window.innerHeight } else if ((document.body) && (document.body.clientHeight)) { winHeight = document.body.clientHeight } return winHeight } function getWindowClientWidth() { let winWidth = 0 if (window.innerHeight) { winWidth = window.innerWidth } else if ((document.body) && (document.body.clientWidth)) { winWidth = document.body.clientWidth } return winWidth } export function getClientHeight() { return getWindowClientHeight() } /** * 表格高度 */ export function getTableHeight() { return getWindowClientHeight() - 155 } export function getClientWidth() { return getWindowClientWidth() } /** * 组装中间层参数 * @param value 参数数组 * @returns {*} */ export function packageRpcParam(value, orderBys = [], columns = [], limit) { if (!limit) { limit = 1000 } const rpcParams = [] const queryParamWrapList = [] const subWheres = [] for (const item in value) { if (value[item] && item) { if (item.indexOf('_') >= 0) { let column = toLowerLine(item.split('_')[0]) let condition = item.split('_')[1] const queryParamWrap = {} if (condition.substr(0, 3) === 'sub') { subWheres.push({ column: column, condition: condition.substr(3), v1: value[item] }) continue } // 子表查询 #变. if (item.indexOf('#') >= 0) { column = toLowerLine(item.split('_')[0].replace('#', '.')) condition = item.split('_')[1] } else { column = toLowerLine(item.split('_')[0]) condition = item.split('_')[1] } if (condition === 'andIsNull' || condition === 'andIsNotNull') { queryParamWrap.condition = condition queryParamWrap.column = column } else { queryParamWrap.condition = condition queryParamWrap.column = column // 下拉多选不行了,将单条数据组成数组 queryParamWrap.v1 = condition === 'andIn' ? (value[item] instanceof Array ? value[item] : value[item].split(';')) : value[item] } if (Array.isArray(queryParamWrap.v1)) { if (queryParamWrap.v1.length > 0) { if (queryParamWrap.condition === 'andBetween') { queryParamWrap.v1 = value[item][0] queryParamWrap.v2 = value[item][1] } queryParamWrapList.push(queryParamWrap) } } else { queryParamWrapList.push(queryParamWrap) } } else { const queryParamWrap = {} queryParamWrap.column = toLowerLine(item) // 未指定下默认是like查询 queryParamWrap.condition = 'andLike' queryParamWrap.v1 = value[item] if (Array.isArray(queryParamWrap.v1)) { if (queryParamWrap.v1.length > 0) { queryParamWrapList.push(queryParamWrap) } } else { queryParamWrapList.push(queryParamWrap) } } } } var andSubWhere = { 'condition': 'and', 'andSubWheres': subWheres } queryParamWrapList.push(andSubWhere) rpcParams.push(queryParamWrapList) // add orderBys rpcParams.push(orderBys) // add columns 为了优化sql性能,查询部分字段 rpcParams.push(columns) // add pageInfo rpcParams.push({ pageNumber: 1, pageSize: limit }) return rpcParams } /** * 箱号校验 * @param str 参数数组 * @returns {*} */ export function checkCntNo(str) { var arg1 = /[A-Z]{4}[0-9]{7}/ if (str.match(arg1) === null) { return false } if (str.length !== 11) { return false } var tot = 0 var arrayOfConter = [10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38] for (var i = 1; i < 11; i++) { var dxsz var vcon = str.substring(i - 1, i) if (isNaN(vcon)) { dxsz = arrayOfConter[vcon.charCodeAt() - 'A'.charCodeAt()] } else { dxsz = vcon } var j = 1 var k = 1 while (j < i) { k = k * 2 j = j + 1 } tot = tot + dxsz * k } var rester = tot % 11 var hdsz = '012345678910' var res if (rester === 10) { res = '0' } else { res = hdsz.substring(rester, rester + 1) } if (res === str.substring(10, 11)) { return true } else { return false } } // 批量处理对象属性空格 export function batchTrim(obj) { Object.keys(obj).forEach(key => { // 去空格 if (typeof obj[key] === 'string') { let str = obj[key] // str = str.replace(/\s+/g, '') // 去除 空格 str = str.replace(/[\r\n]/g, '') // 去除 换行符 str = str.trim() // 去除 前后空格 // str = str.toUpperCase() // 转成大写 obj[key] = str } }) return obj } export function deepCopy(obj, weakmap = new WeakMap()) { if (weakmap.has(obj)) { return weakmap.get(obj) } if (obj === null) { return null } if (obj instanceof RegExp) { return new RegExp(obj) } if (obj instanceof Date) { return new Date(obj) } // 基本数据类型或者函数,直接返回 // 这样处理函数就不是深拷贝了 const type = typeof obj if (type !== 'object') { return obj } /** * 如果obj是数组,那么 obj.constructor 是 [Function: Array] * 如果obj是对象,那么 obj.constructor 是 [Function: Object] */ const res = new obj.constructor() // 当对象的一个属性引用自身时,要避免相互引用造成死循环,如obj1.a=obj1 // 可使用 WeakMap 来存储这个引用自身的属性 weakmap.set(obj, res) // 拷贝对象上的可遍历属性 for (const key in obj) { res[key] = deepCopy(obj[key], weakmap) } return res } /** * * @param {数组} array * @param {删除元素} value */ export function arrayRemove(array, value) { const index = array.indexOf(value) if (index !== -1) { array.splice(index, 1) } } /** * 数组去重(对象数组) * @param {数组} arr */ export function unique(arr) { var arr1 = [] var arr2 = [] for (let index = 0; index < arr.length; index++) { const element = arr[index] if (!arr2.includes(element.value)) { arr2.push(element.value) arr1.push(element) } } return arr1 } /** * 数组去重(字符串数组) * @param {数组} arr */ export function unique2(arr) { var arr1 = [] for (let index = 0; index < arr.length; index++) { const element = arr[index] if (arr1.indexOf(element) < 0) { arr1.push(element) } } return arr1 } export function getJsonTree(data) { var itemArr = [] const map = new Map() for (var i = 0; i < data.length; i++) { var node = data[i] var newNode = {} if (node.parentModel) { newNode.value = node.model newNode.label = node.label ? node.label : node.model if (map.has(node.parentModel)) { map.get(node.parentModel).children.push(newNode) } else { newNode.children = [newNode] map.set(node.parentModel, newNode) } } else { newNode.value = node.model newNode.label = node.label newNode.children = [] itemArr.push(newNode) } } for (const key of map.keys()) { newNode.value = key newNode.label = key newNode.children = map.get(key) itemArr.push(newNode) } console.log(itemArr) return itemArr }; export function getJsonTree2(data, itemArr = []) { data.forEach(item => { if (!item.list || item.type === 'batch') { console.log('model值: ' + item.model, 'parentModel: ' + item.parentModel) var newNode = {} if (item.parentModel) { newNode.value = item.parentModel newNode.label = item.parentModel } else { newNode.value = item.model newNode.label = item.label } itemArr.push(newNode) } else { getJsonTree2(item.list, itemArr) } }) }; // 数字转字符前补0 export function pad(num, n) { num = String(num) var len = String(num).length while (len < n) { num = '0' + num len++ } return num } // 将2个数字转为字符串20170101,0800 -> 20170101080000 export function dateToStr(date, time) { var timeStr = pad(time, 4) + '00' return String(date) + timeStr } // 将2个数字转为字符串 20170101,0800 -> date export function convertNumToDate(date, time) { var pattern = /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ var str = dateToStr(date, time) return str.replace(pattern, '$1/$2/$3 $4:$5:$6') } // 求时间差(分钟) export function vesselMin(bgDate, bgTime, edDate, edTime) { var pattern = /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ var bgStr = dateToStr(bgDate, bgTime) var bd = bgStr.replace(pattern, '$1/$2/$3 $4:$5:$6') bd = new Date(bd) var edStr = dateToStr(edDate, edTime) var ed = edStr.replace(pattern, '$1/$2/$3 $4:$5:$6') ed = new Date(ed) return (ed - bd) / 1000 / 60 } // 将数字表示日期时间转为字符串 1月1日 12:12 export function convertDHM(date, time) { var pattern = /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ var str = dateToStr(date, time) return str.replace(pattern, '$2/$3 $4:$5') } // 日期加减 export function addDate(date, days) { var d = new Date(date) d.setDate(d.getDate() + days) var m = d.getMonth() + 1 return d.getFullYear() + '-' + m + '-' + d.getDate() } // 小时加减 export function addHour(date, hours) { var d = new Date(date) d.setHours(d.getHours() + hours) var m = d.getMonth() + 1 return m + '/' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes() } // "2017-01-01"->"20170101" export function getCompackDateStr(str) { var pattern = /(\d{4})-(\d{2})-(\d{2})/ return str.replace(pattern, '$1$2$3') } export function groupBy(list, fn) { const groups = new Map() list.forEach(function (o) { const group = JSON.stringify(fn(o)) // groups[group] = groups[group] || []; // groups[group].push(o); groups.set(group, groups.get(group) || []) groups.get(group).push(o) }) return groups } export function compareUp(prop) { return function (obj1, obj2) { var val1 = obj1[prop] var val2 = obj2[prop] if (val1 < val2) { return -1 } else if (val1 > val2) { return 1 } else { return 0 } } } export function pad2(str) { str = str.trim() if (str.length === 1) { str = '0' + str } else if (str.length === 0) { str = '00' } return str } export function dateTovar(date) { const Y = date.getFullYear() + '' const M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '' const D = pad2(date.getDate() + '') return parseInt(Y + M + D) } export function conditionSetting(condition, columnValue, value) { switch (condition) { case '等于': return columnValue === value case '不等于': return columnValue !== value case '小于': return columnValue < value case '大于': return columnValue > value case '大于等于': return columnValue >= value case '小于等于': return columnValue <= value case '包含': columnValue = columnValue || [] return columnValue.includes(value) case '不包含': columnValue = columnValue || [] return !columnValue.includes(value) case '为空': return columnValue === '' case '不为空': return columnValue !== '' // case '属于': // break; // case '不属于': // break; // case '拥有': // break; // case '不拥有': // break; // case '位于': // break; // case '不位于': // break; default: return false } } export function conditionMapping(conditions, contype) { var initFlag, mapping if (contype === 'all') { initFlag = true } else { initFlag = false } for (var condition of conditions) { mapping = conditionSetting(condition.condition, condition.columnValue, condition.v1) if (contype === 'all') { initFlag = initFlag && mapping } else { initFlag = initFlag || mapping } } return initFlag } // 分割箱号 export function splitCtnNo(values) { var ctnNoList = [] if (values.indexOf(',') >= 0) { ctnNoList = values.split(',') } else if (values.indexOf('\n') >= 0) { ctnNoList = values.split('\n') } else if (values.indexOf(';') >= 0) { ctnNoList = values.split(';') } else if (values.indexOf(';') >= 0) { ctnNoList = values.split(';') } else if (values.indexOf(',') >= 0) { ctnNoList = values.split(',') } else if (values.indexOf(' ') >= 0) { ctnNoList = values.split(' ') } else if (values) { ctnNoList.push(values) } var ctnNoLists = [] for (const ctnNo of ctnNoList) { if (ctnNo.trim() !== '') { ctnNoLists.push(ctnNo.trim()) } } return ctnNoLists } var jsCommentReg = /("([^\\\"]*(\\.)?)*")|('([^\\\']*(\\.)?)*')|(\/{2,}.*?(\r|\n|$))|(\/\*(\n|.)*?\*\/)/g /** * 去除js注释 * @param {} script * @returns {} */ export function removeJsComments(script) { if (!script) return script return script.replace(jsCommentReg, function (word) { // 去除注释后的文本 return /^\/{2,}/.test(word) || /^\/\*/.test(word) ? '' : word }) } /** * @Date: 2020-06-18 15:10:49 * @method: 自定义事件的str转function * @param data{Object} 组件配置对象 * @param event{string} 事件类型 * @param context{Object} this 上下文 * @return: * @Author: 九哥 */ export function useCodeEvent(data = {}, event = '', context) { // 匹配事件名 if (data.handleInfo) { const item = data.handleInfo.find(item => item.eventName === event) let str = item ? item.code : '' if (str) { /* eslint-disable */ let mainFunction if (str.indexOf('function ()') >= 0) { str = str.replaceAll('function ()', 'tempFunc ()') } //去除注释 str = removeJsComments(str); const funArr = str.split('function') for (var i = 1; i < funArr.length; i++) { let functionScript = funArr[i] if (functionScript.indexOf('tempFunc ()') >= 0) { functionScript = functionScript.replaceAll('tempFunc ()', 'function ()') } const functionName = functionScript.match(/(\S*)\(/)[1] //获取参数 const params = functionScript.match(/\((.+?)\)/)[1].replace(/\s+/g, '').split(',') // 获取方法内容 const functionBody = functionScript.replace(new RegExp(`^([\\s\\S]*)(${params[params.length - 1]})\\)[\\n|\\s]*\\{`), '').replace(/\}[.|\n|\s]*$/, '') // 创建function 返回 if (i == 1) { mainFunction = new Function(...params, functionBody).bind(context) } else { context[functionName] = new Function(...params, functionBody).bind(context) } } return mainFunction } } return () => {} } export function isTimestamp(time) { var timestamp = /^\d{10}$|^\d{13}$/ return timestamp.test(time.toString()) } // end FUNCTION isTimestamp() /** * @Date: 2020-06-18 15:10:49 * @method: 自定义事件的str转function * @param script{string} 脚本 * @param context{Object} this 上下文 * @return: * @Author: 九哥 */ export function customCodeEvent(script, context) { // 匹配事件名 if (script) { /* eslint-disable */ // 获取参数 const params = script.match(/\((.+?)\)/)[1].replace(/\s+/g, '').split(',') // 获取方法内容 const functionBody = script.replace(new RegExp(`^([\\s\\S]*)(${params[params.length - 1]})\\)[\\n|\\s]*\\{`), '').replace(/\}[.|\n|\s]*$/, '') // 创建function 返回 return new Function(...params, functionBody).bind(context) } return () => {} }