123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- 'use strict';
- /**
- * 辅助方法扩展
- *
- * @author CaiAoLin
- * @date 2017/9/28
- * @version
- */
- module.exports = {
- /**
- * 内置验证器转换为前端jquery验证器
- *
- * @param {Object} rule - 后端service中的rule
- * @return {Object} - 返回转换后的数据
- */
- validateConvert(rule) {
- const result = {};
- if (Object.keys(rule).length <= 0) {
- return rule;
- }
- for (const index in rule) {
- result[index] = {};
- const type = rule[index].type !== undefined && rule[index].type !== '' ? rule[index].type : '';
- const stringType = ['string', 'password'];
- // 是否必填
- if (rule[index].required !== undefined) {
- result[index].required = rule[index].required;
- }
- // 最小长度
- if (stringType.indexOf(type) >= 0 && rule[index].min !== undefined) {
- result[index].minlength = rule[index].min;
- }
- // 最大长度
- if (stringType.indexOf(type) >= 0 && rule[index].max !== undefined) {
- result[index].maxlength = rule[index].max;
- }
- // 密码相关
- if (type === 'password' && rule[index].compare !== undefined) {
- result[index].equalTo = '#' + rule[index].compare;
- }
- // 最小值
- const integerType = ['integer', 'int', 'Number'];
- if (integerType.indexOf(type) >= 0 && rule[index].min !== undefined) {
- result[index].min = rule[index].min;
- }
- // 最大值
- if (integerType.indexOf(type) >= 0 && rule[index].max !== undefined) {
- result[index].max = rule[index].max;
- }
- // 自定义判断
- if (rule[index] === 'isMobile' || rule[index] === 'isIP') {
- result[index] = rule[index];
- }
- }
- return result;
- },
- /**
- * 生成随机字符串
- *
- * @param {Number} length - 需要生成字符串的长度
- * @param {Number} type - 1为数字和字符 2为纯数字 3为纯字母
- * @return {String} - 返回生成结果
- */
- generateRandomString(length, type = 1) {
- length = parseInt(length);
- length = isNaN(length) ? 1 : length;
- let randSeed = [];
- let numberSeed = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
- let stringSeed = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
- 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
- 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
- switch (type) {
- case 1:
- randSeed = stringSeed.concat(numberSeed);
- stringSeed = numberSeed = null;
- break;
- case 2:
- randSeed = numberSeed;
- break;
- case 3:
- randSeed = stringSeed;
- break;
- default:
- break;
- }
- const seedLength = randSeed.length - 1;
- let result = '';
- for (let i = 0; i < length; i++) {
- const index = Math.ceil(Math.random() * seedLength);
- result += randSeed[index];
- }
- return result;
- },
- /**
- * 显示排序符号
- *
- * @param {String} field - 字段名称
- * @return {String} - 返回字段排序的符号
- */
- showSortFlag(field) {
- const sort = this.ctx.sort;
- if (!(sort instanceof Array) || sort.length !== 2) {
- return '';
- }
- sort[1] = sort[1].toUpperCase();
- return (sort[0] === field && sort[1] === 'DESC') ? '' : '-';
- },
- /**
- * 判断是否为ajax请求
- *
- * @param {Object} request - 请求数据
- * @return {boolean} 判断结果
- */
- isAjax(request) {
- let headerInfo = request.headers['x-requested-with'] === undefined ? '' : request.headers['x-requested-with'];
- headerInfo = headerInfo.toLowerCase();
- return headerInfo === 'xmlhttprequest';
- },
- /**
- * 模拟发送请求
- *
- * @param {String} url - 请求地址
- * @param {Object} data - 请求数据
- * @param {String} type - 请求类型(POST) POST | GET
- * @return {Object} - 请求结果
- */
- async sendRequest(url, data, type = 'POST') {
- // 发起请求
- const response = await this.ctx.curl(url, {
- method: type,
- data,
- dataType: 'json',
- });
- if (response.status !== 200) {
- throw '请求失败';
- }
- return response.data;
- },
- /**
- * 转换面包屑导航数据
- *
- * @param {Object} breadCrumb - 面包屑数据
- * @param {String} mode - 模式 append 为追加型模式 \ replace 为全部替换模式
- * @return {String} - 转换为字符串数据
- */
- convertBreadCrumb(breadCrumb, mode = 'append') {
- let result = '';
- if (!breadCrumb instanceof Array || breadCrumb.length <= 0) {
- return result;
- }
- if (mode === 'append') {
- const tmpBreadCrumb = [];
- tmpBreadCrumb.push({ name: this.ctx.topPermission.name });
- tmpBreadCrumb.push.apply(tmpBreadCrumb, breadCrumb);
- tmpBreadCrumb.push({ name: this.ctx.currentName });
- breadCrumb = tmpBreadCrumb;
- }
- const tmpList = [];
- for (const data of breadCrumb) {
- if (data.name === undefined) {
- continue;
- }
- const tmp = data.url === undefined || data.url === '' ?
- data.name : '<a href="/' + data.url + '">' + data.name + '</a>';
- tmpList.push(tmp);
- }
- result = tmpList.join(' / ');
- return result;
- },
- };
|