123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283 |
- /**
- * Created by PanJiaChen on 16/11/18.
- */
- /**
- * @param {string} path
- * @returns {Boolean}
- */
- export function isExternal(path) {
- return /^(https?:|mailto:|tel:)/.test(path)
- }
- /**
- * @param {string} str
- * @returns {Boolean}
- */
- export function validUsername(str) {
- const valid_map = ['admin', 'editor']
- return valid_map.indexOf(str.trim()) >= 0
- }
- // 账号组树构造
- // export function translateDataToTreeAll(data, parentKey, parentIDKey) {
- // const parent = data.filter(value => Number(value[parentKey]) <= 0) // 父数据
- // const children = data.filter(value => Number(value[parentKey]) > 0) // 子数据
- // // console.log('--parent', parent)
- // // console.log('--children', children)
- // const translator = (parent, children) => {
- // parent.forEach(parent => {
- // parent.children = []
- // // children.forEach((current, index) => {
- // // if (current[parentKey] === parent[parentIDKey]) {
- // // const temp = JSON.parse(JSON.stringify(children))
- // // temp.splice(index, 1)
- // // translator([current], temp)
- // // typeof parent.children !== 'undefined' ? parent.children.push(current) : (parent.children = [current])
- // // }
- // // })
- // for (let i = 0; i < children.length; ) {
- // if (children[i][parentKey] === parent[parentIDKey]) {
- // const temp = children.splice(i, 1)
- // typeof parent.children !== 'undefined' ? parent.children.push(...temp) : (parent.children = temp)
- // translator(temp, children)
- // } else {
- // i++
- // }
- // }
- // })
- // }
- // translator(parent, children)
- // return parent
- // }
- export function translateDataToTreeAll(arr, parentKey, key) {
- const map = {}
- const result = []
- arr.forEach(element => {
- const id = element[key]
- const pid = element[parentKey]
- if (map[id]) {
- map[id] = {
- ...element,
- children: map[id].children
- }
- } else {
- map[id] = {
- ...element,
- children: []
- }
- }
- const item = map[id]
- if (pid <= 0) {
- result.push(item)
- } else {
- if (map[pid]) {
- map[pid].children.push(item)
- } else {
- map[pid] = {
- children: [item]
- }
- }
- }
- })
- return result
- }
- // 模糊查询
- export function findarrays(ar, feature, v) {
- var arr = []
- ar.forEach(res => {
- console.log(res.feature)
- })
- for (var i = 0; i < ar.length; i++) {
- var atxt = ar[i][feature]
- var btxt = v
- var type = 0
- if (atxt.match(btxt) == btxt) {
- type = 1
- }
- if (type == 1) {
- arr.push(ar[i])
- }
- }
- // var arr = [];
- // for (var i = 0; i < ar.length; i++) {
- // var atxt = ar[i][feature];
- // var btxt = v;
- // // 将字符串按某个字符切割成若干个字符串,并以数组形式返回
- // var atxtarr = atxt;
- // var btxtarr = btxt;
- // var type = 0;
- // // for (var k = 0; k < atxtarr.length; k++) {
- // // if (btxtarr[0].length >= atxtarr[k].length) {
- // // if (atxtarr[k] == btxtarr[0]) {
- // // type = 1;
- // // }
- // // }
- // // }
- // if (atxtarr == btxtarr) {
- // type = 1;
- // } else if (atxtarr.length > btxtarr.length) {
- // for (var k = 0; k < atxtarr.length; k++) {
- // if (btxtarr[0].length >= atxtarr[k].length) {
- // if (atxtarr[k] == btxtarr) {
- // type = 1;
- // }
- // }
- // }
- // }
- // if (type == 1) {
- // arr.push(ar[i]);
- // }
- // }
- return arr
- }
- // 随机长度
- function randomNum(start, end) {
- return Math.floor(Math.random() * (Number(end) - Number(start)) + start)
- }
- // 字母随机
- function randomAlp(arr, count) {
- let shuffled = arr.slice(0),
- i = arr.length,
- min = i - count,
- temp,
- index
- while (i-- > min) {
- index = Math.floor((i + 1) * Math.random())
- temp = shuffled[index]
- shuffled[index] = shuffled[i]
- shuffled[i] = temp
- }
- return shuffled.slice(min)
- }
- /**
- * @param {minLen} 密码最小长度
- * @param {maxLen} 密码最大长度
- * @param {struc} 密码规则
- * @returns {Object}
- * 4位密码规则 1111 = 大写 小写 特殊字符 数字 都开启
- */
- export function pwdProduce(minLen, maxLen, struc) {
- // 密码规则转化
- const pwdStruc = typeof struc === 'string' ? struc.split('') : `${struc}`.split('')
- // 字母
- const alphabet = 'abcdefghijklmnopqrstuvwxyz'
- // 特殊字符
- const special = ['~', '!', '@', '#', '$', '%', '^', '&', '*', '_', '+', '.']
- // 数字
- const numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
- // 密码随机长度
- const pwdLen = randomNum(minLen, maxLen)
- const datas = []
- if (pwdStruc.length) {
- let typeLong = Number(pwdStruc[0]) + Number(pwdStruc[1]) + Number(pwdStruc[2]) + Number(pwdStruc[3])
- let passLong = Math.ceil(pwdLen / typeLong)
- let dis = ''
- if (pwdStruc[0] == 1) {
- let arr = alphabet.toLocaleUpperCase().split('')
- let v = randomAlp(arr, passLong)
- for (let i = 0; i < passLong; i++) {
- dis += v[i]
- }
- }
- if (pwdStruc[1] == 1) {
- let arr = alphabet.split('')
- let v = randomAlp(arr, passLong)
- for (let i = 0; i < passLong; i++) {
- dis += v[i]
- }
- }
- if (pwdStruc[2] == 1) {
- let arr = special
- let v = randomAlp(arr, passLong)
- for (let i = 0; i < passLong; i++) {
- dis += v[i]
- }
- }
- if (pwdStruc[3] == 1) {
- let arr = numbers
- let v = randomAlp(arr, passLong)
- for (let i = 0; i < passLong; i++) {
- dis += v[i]
- }
- }
- return dis
- // 缓存当前的密码规则
- // pwdStruc.forEach((item, index) => {
- // if (item == 1) {
- // datas.push(index)
- // }
- // })
- // // 只有一种规则时
- // if (datas.length === 1) {
- // const num = datas[0]
- // const dis = randomAlp(alphabet.split('')).splice(0, pwdLen).join('')
- // switch (num) {
- // case 0:
- // return dis.toLocaleUpperCase()
- // break;
- // case 1:
- // return dis
- // break;
- // default:
- // break;
- // }
- // }
- } else {
- return new Error('密码规则转换失败')
- }
- }
- // 表单输入长度验证
- function getRealLength(string) {
- let realLength = 0,
- len = string.length,
- charCode = -1
- for (let i = 0; i < len; i++) {
- charCode = string.charCodeAt(i)
- if (charCode >= 0 && charCode <= 128) {
- realLength += 1
- } else {
- realLength += 2
- }
- }
- return realLength
- }
- export function lengthValidator(rule, value, callback) {
- value = value ?? ''
- const realLength = getRealLength(value)
- if (realLength === 0) {
- callback()
- } else if (rule.min && realLength < rule.min) {
- rule.message += ` ${realLength}/${rule.min}`
- callback(new Error('长度小于最小值'))
- } else if (rule.max && realLength > rule.max) {
- rule.message += ` ${realLength}/${rule.max}`
- callback(new Error('长度超出最大值'))
- } else {
- callback()
- }
- }
- /**
- * 是否合法IP地址
- * @param value
- * @param callback
- */
- export function validateIP(rule, value, callback) {
- if (value === '' || typeof value === 'undefined' || value == null) {
- callback(new Error('请输入正确的IP地址'))
- } else {
- const reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
- if ((!reg.test(value)) && value !== '') {
- callback(new Error('请输入正确的IP地址'))
- } else {
- callback()
- }
- }
- }
|