import {idCard} from '@/utils/regular' /** * 通用js方法封装处理 * Copyright (c) 2019 ruoyi */ // 日期格式化 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), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/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 time_str = 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 time_str } // 表单重置 export function resetForm(refName) { if (this.$refs[refName]) { this.$refs[refName].resetFields(); } } // 添加日期范围 export function addDateRange(params, dateRange, propName) { let search = params; search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {}; dateRange = Array.isArray(dateRange) ? dateRange : []; if (typeof (propName) === 'undefined') { search.params['beginTime'] = dateRange[0]; search.params['endTime'] = dateRange[1]; } else { search.params['begin' + propName] = dateRange[0]; search.params['end' + propName] = dateRange[1]; } return search; } // 回显数据字典 export function selectDictLabel(datas, value) { if (value === undefined) { return ""; } var actions = []; Object.keys(datas).some((key) => { if (datas[key].value == ('' + value)) { actions.push(datas[key].label); return true; } }) if (actions.length === 0) { actions.push(value); } return actions.join(''); } // 回显数据字典(字符串数组) export function selectDictLabels(datas, value, separator) { if (value === undefined) { return ""; } var actions = []; var currentSeparator = undefined === separator ? "," : separator; var temp = value.split(currentSeparator); Object.keys(value.split(currentSeparator)).some((val) => { var match = false; Object.keys(datas).some((key) => { if (datas[key].value == ('' + temp[val])) { actions.push(datas[key].label + currentSeparator); match = true; } }) if (!match) { actions.push(temp[val] + currentSeparator); } }) return actions.join('').substring(0, actions.join('').length - 1); } // 字符串格式化(%s ) export function sprintf(str) { var args = arguments, flag = true, i = 1; str = str.replace(/%s/g, function () { var arg = args[i++]; if (typeof arg === 'undefined') { flag = false; return ''; } return arg; }); return flag ? str : ''; } // 转换字符串,undefined,null等转化为"" export function parseStrEmpty(str) { if (!str || str == "undefined" || str == "null") { return ""; } return str; } // 数据合并 export function mergeRecursive(source, target) { for (var p in target) { try { if (target[p].constructor == Object) { source[p] = mergeRecursive(source[p], target[p]); } else { source[p] = target[p]; } } catch (e) { source[p] = target[p]; } } return source; }; /** * 构造树型结构数据 * @param {*} data 数据源 * @param {*} id id字段 默认 'id' * @param {*} parentId 父节点字段 默认 'parentId' * @param {*} children 孩子节点字段 默认 'children' */ export function handleTree(data, id, parentId, children) { let config = { id: id || 'id', parentId: parentId || 'parentId', childrenList: children || 'children' }; var childrenListMap = {}; var nodeIds = {}; var tree = []; for (let d of data) { let parentId = d[config.parentId]; if (childrenListMap[parentId] == null) { childrenListMap[parentId] = []; } nodeIds[d[config.id]] = d; childrenListMap[parentId].push(d); } for (let d of data) { let parentId = d[config.parentId]; if (nodeIds[parentId] == null) { tree.push(d); } } for (let t of tree) { adaptToChildrenList(t); } function adaptToChildrenList(o) { if (childrenListMap[o[config.id]] !== null) { o[config.childrenList] = childrenListMap[o[config.id]]; } if (o[config.childrenList]) { for (let c of o[config.childrenList]) { adaptToChildrenList(c); } } } return tree; } /** * 参数处理 * @param {*} params 参数 */ export function tansParams(params) { let result = '' for (const propName of Object.keys(params)) { const value = params[propName]; var part = encodeURIComponent(propName) + "="; if (value !== null && value !== "" && typeof (value) !== "undefined") { if (typeof value === 'object') { for (const key of Object.keys(value)) { if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') { let params = propName + '[' + key + ']'; var subPart = encodeURIComponent(params) + "="; result += subPart + encodeURIComponent(value[key]) + "&"; } } } else { result += part + encodeURIComponent(value) + "&"; } } } return result } // 验证是否为blob格式 export async function blobValidate(data) { try { const text = await data.text(); JSON.parse(text); return false; } catch (error) { return true; } } /** * 特殊时间格式处理 例如20200329 * @param {*} data 数据源 * @param {*} type 类型 默认 'date' * @param {*} theme 转换的格式 默认 0 */ let themeData=[ ['-','-'], ['年','月','日'], ] export function special(data,type='date',theme=0){ let time=""; switch (type) { case 'date': if(data&&data.length>=8) { time=data.slice(0,data.length-4)+themeData[theme][0]+data.slice(-4,-2)+themeData[theme][1]+data.slice(-2)+(themeData[theme][2]?themeData[theme][2]:'') } break; case 'time': if(data&&data.length>=14) { time=data.slice(0,data.length-10)+themeData[theme][0]+data.slice(-10,-8)+themeData[theme][1]+data.slice(-8,-6)+(themeData[theme][2]?themeData[theme][2]:'') time+=" "+data.slice(-6,-4)+':'+data.slice(-4,-2)+':'+data.slice(-2) } break; default:break; } return time; } /** * 删除数据处理 * @param {*} data 数据源 * @param {*} name 需要显示的字段名 * @param {*} title 需要显示字段的名称 * @param {*} index 单个删除的顺序号 */ export function changeDelData(data,name,title,index){ return "顺序号【"+(index)+"】"+title+"【"+data[name]+"】"; } /** * 两个对象比对 * @param {*} object 数据源1 * @param {*} other 数据源2 * @param {*} def 默认需要穿的参数 * 以数据源1作为根本 */ export function comparisonObject(object,other,def){ let diff = {}; let vChildren; Object.keys(object).forEach(key=>{ if (typeof object[key] === "object" && typeof other[key] === "object" && object[key] && other[key]) { vChildren = comparisonObject(object[key], other[key],def); if (vChildren) { diff[key] = vChildren; } } else if (object[key] !== other[key]) { diff[key] = (object[key]==null?'':object[key]); if(def&&object[def]) { diff[def]=object[def] } } }) if (Object.keys(diff).length===0) { return null; } return diff; } /** * 两个对象比对 * @param {*} data 全部数据 * @param {*} id 需要替换数据的id * @param {*} value 需要替换的数据 */ export function dataReplacement(data,id,value){ return data.map((item)=>{ if(item.id==id) { return {...item,...value} } return item }) } /** * 对象的深度拷贝 */ export function deepCopy(data) { return JSON.parse(JSON.stringify(data)) } /* * 检验身份证的方法 */ export function valid(rules, zjhmKey, zjlx = '01'){ console.log(rules); console.log(zjhmKey); console.log(zjlx); if (zjlx !== '01') { rules[zjhmKey] = [ { required: true, message: '证件号码不能为空', trigger: 'blur' }, { max: 18, message: '证件号码不能超过18个字符', trigger: 'blur' } ]; }else { rules[zjhmKey]= [ { required: true, message: '证件号码不能为空', trigger: 'blur' }, { max: 18, message: '证件号码不能超过18个字符', trigger: 'blur' }, { validator: idCard, trigger: 'blur' } ]; } } export function checkPassword(str){ const SPEC_CHARACTERS = " !\"#$%&'()*+,-./:;<=>?@\\]\\[^_`{|}~"; // 纯字母 const character = /[a-zA-Z]{1,}$/; // 纯数字 const numberic = /[0-9]{1,}$/; // 字母和数字 const number_and_character = /((^[a-zA-Z]{1,}[0-9]{1,}[a-zA-Z0-9]*)+)|((^[0-9]{1,}[a-zA-Z]{1,}[a-zA-Z0-9]*)+)$/; let isLegal = false; let hasSpecChar = false; const charArray = str.split(""); charArray.forEach(item=>{ if (SPEC_CHARACTERS.indexOf(item) != -1) { hasSpecChar = true; // 替换此字符串 str = str.replace(item, ' '); } }) const excSpecCharStr = str.replace(" ", ""); const isPureNum = numberic.test(excSpecCharStr); const isPureChar = character.test(excSpecCharStr); const isNumAndChar = number_and_character.test(excSpecCharStr); isLegal = ((isPureNum && hasSpecChar) || (isPureChar && hasSpecChar) || isNumAndChar && hasSpecChar) || isNumAndChar; return isLegal; }