公共方法 common
import Vue from 'vue'
import { getStore } from 'js/store'
import Map from '@/assets/js/data/map';
let vm = new Vue({});
const BIN = require('bankcardinfo');
const printJS = require('print-js');
export default {
install(Vue) {
Vue.prototype.$delBtn = (delAjax, text) => {
const str = text || '此操作将删除该数据, 是否继续?';
vm.$confirm(str, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
cancelButtonClass: 'btn-custom-cancel',
type: 'warning'
}).then(() => {
delAjax();
})
}
Vue.prototype.$confirmAxios = function (data, axiosFn, url, txt) {
vm.$delBtn(() => {
const ids = this.$array.returnArrayByKey(data, "id").join(",");
url = url.replace("{id}", ids);
vm.axios[axiosFn](url)
.then((res) => {
vm.$message.success(res.message);
this.getList();
})
}, txt)
}
Vue.prototype.$btnValidator = (data, text, fn) => {
let warnObj = { text: text };
let res = false;
if (Array.isArray(data)) {
res = data.some((item) => {
if (fn(item, warnObj)) return true
})
} else if (typeof data === "object") {
res = fn(data, warnObj)
}
if (res) {
vm.$message({
type: 'warning',
message: warnObj.text
});
}
return res;
}
Vue.prototype.$dataTransform = (object, property) => {
if (Array.isArray(object[property])) {
object[property].forEach((val, i) => {
for (var j in val) {
object[property + "[" + i + "]." + j] = val[j];
}
});
delete object[property];
}
if (object[property] instanceof Object) {
for (const key in object[property]) {
if (object[property].hasOwnProperty(key)) {
const element = object[property][key];
object[property + "." + key] = element;
}
}
delete object[property];
}
}
Vue.prototype.$dataIsNull = (data) => {
if (typeof data === "undefined") {
return true;
} else if (data instanceof Array) {
if (data.length === 0) return true;
} else if (data instanceof Object) {
if (JSON.stringify(data) === '{}') return true;
} else if (data === 'null' || data === null || data === 'undefined' || data === '') {
return true;
} else {
return false;
}
}
Vue.prototype.$mergeObject = (pageData, getData) => {
for (const item in pageData) {
if (!getData.hasOwnProperty(item)) {
getData[item] = pageData[item];
}
}
return getData
}
Vue.prototype.$date = {
format: (date, fmt = "yyyy-MM-dd hh:mm:ss") => {
if (!date || date == null) {
return date;
}
date = new Date(date)
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
}
let o = {
'M+': date.getMonth() + 1,
'd+': date.getDate(),
'h+': date.getHours(),
'm+': date.getMinutes(),
's+': date.getSeconds()
};
let padLeftZero = (str) => {
return ('00' + str).substr(str.length);
};
for (let k in o) {
if (new RegExp(`(${k})`).test(fmt)) {
let str = o[k] + '';
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str));
}
}
return fmt;
},
validator: (start, end, symbol = ">=") => {
if (start && end) {
if (eval(`${new Date(start).getTime()}${symbol}${new Date(end).getTime()}`)) {
return false;
} else {
return true;
}
} else {
return false;
}
},
dateDiff: (sDate1, sDate2) => {
var fixDate = function (sDate) {
var aD = sDate.split('-');
for (var i = 0; i < aD.length; i++) {
aD[i] = fixZero(parseInt(aD[i]));
}
return aD.join('-');
};
var fixZero = function (n) {
return n < 10 ? '0' + n : n;
};
var fixInt = function (a) {
for (var i = 0; i < a.length; i++) {
a[i] = parseInt(a[i]);
}
return a;
};
var getMonthDays = function (y, m) {
var aMonthDays = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
if ((y % 400 == 0) || (y % 4 == 0 && y % 100 != 0)) {
aMonthDays[2] = 29;
}
return aMonthDays[m];
};
var y = 0;
var m = 0;
var d = 0;
var sTmp;
var aTmp;
sDate1 = fixDate(sDate1);
sDate2 = fixDate(sDate2);
if (sDate1 > sDate2) {
sTmp = sDate2;
sDate2 = sDate1;
sDate1 = sTmp;
}
var aDate1 = sDate1.split('-');
aDate1 = fixInt(aDate1);
var aDate2 = sDate2.split('-');
aDate2 = fixInt(aDate2);
y = aDate2[0] - aDate1[0];
if (sDate2.replace(aDate2[0], '') < sDate1.replace(aDate1[0], '')) {
y = y - 1;
}
aTmp = [aDate1[0] + y, aDate1[1], fixZero(aDate1[2])];
while (true) {
if (aTmp[1] == 12) {
aTmp[0]++;
aTmp[1] = 1;
} else {
aTmp[1]++;
}
if (([aTmp[0], fixZero(aTmp[1]), aTmp[2]]).join('-') <= sDate2) {
m++;
} else {
break;
}
}
aTmp = [aDate1[0] + y, aDate1[1] + m, aDate1[2]];
if (aTmp[1] > 12) {
aTmp[0]++;
aTmp[1] -= 12;
}
while (true) {
if (aTmp[2] == getMonthDays(aTmp[0], aTmp[1])) {
aTmp[1]++;
aTmp[2] = 1;
} else {
aTmp[2]++;
}
sTmp = ([aTmp[0], fixZero(aTmp[1]), fixZero(aTmp[2])]).join('-');
if (sTmp <= sDate2) {
d++;
} else {
break;
}
}
return { y: y, m: m, d: d };
}
}
Vue.prototype.$number = {
format: (number, decimals, isThousandsSep) => {
number = (number + '').replace(/[^0-9+-Ee.]/g, '');
let n = !isFinite(+number) ? 0 : +number,
prec = !isFinite(+decimals) ? 2 : Math.abs(decimals),
sep = ',',
dec = '.',
s = '',
toFixedFix = function (n, prec) {
var k = Math.pow(10, prec);
return '' + Math.round(n * k) / k;
};
s = toFixedFix(n, prec).split('.');
var re = /(-?\d+)(\d{3})/;
if (isThousandsSep) {
while (re.test(s[0])) {
s[0] = s[0].replace(re, "$1" + sep + "$2");
}
}
if ((s[1] || '').length < prec) {
s[1] = s[1] || '';
s[1] += new Array(prec - s[1].length + 1).join('0');
}
return s.join(dec);
},
parseNumber: (val) => {
return isNaN(Number(val)) ? val : Number(val)
}
}
Vue.prototype.$text = {
stripScript: (str) => {
return str.replace(/<script.*?>.*?<\/script>/ig, '');
},
trim: (str) => {
return str.replace(/(^\s*)|(\s*$)/g, "");
}
}
Vue.prototype.$array = {
returnArrayByKey: (originArr, key) => {
let arr = [];
if (Array.isArray(originArr)) {
originArr.forEach((item) => {
if (item[key]) arr.push(item[key]);
});
}
return arr;
}
}
Vue.prototype.$clone = (obj) => {
let clone = (obj) => {
if (obj === null) return obj;
if (typeof obj !== 'object') { return obj; }
let cloneObj = {};
switch (obj.constructor) {
case Array:
cloneObj = [];
if (obj.length !== 0) {
for (let i = 0, len = obj.length; i < len; i++) {
cloneObj.push(clone(obj[i]));
}
}
break;
case Object:
for (var property in obj) {
cloneObj[property] = typeof obj[property] === 'object' ? clone(obj[property]) : obj[property];
}
break;
case Map:
cloneObj = new Map();
obj.forEach((value, key) => {
cloneObj.set(key, typeof value === 'object' ? clone(value) : value);
});
break;
case Set:
cloneObj = new Set();
obj.forEach(value => {
cloneObj.add(typeof value === 'object' ? clone(value) : value);
});
break;
}
return cloneObj;
}
return clone(obj)
}
Vue.prototype.$treeFn = {
toTree: (originArr, originId, config) => {
const configName = config.name || "name";
const configPId = config.pId || "pId";
const configPName = config.pName || "pName";
const configChildren = config.children || "children";
const configOriginNode = config.originNode || "根节点";
let obj = {};
originArr.forEach((item, index) => {
obj[item.id] = item
})
const toTreeFn = (arr, id) => {
let tree = [];
let temp = null;
originArr.forEach((item, index) => {
item[configPName] = obj[item[configPId]] ? obj[item[configPId]][configName] : configOriginNode;
if (item[configPId] === id) {
temp = toTreeFn(arr, item.id);
if (temp.length > 0) {
item[configChildren] = temp;
}
tree.push(item);
delete originArr[index];
}
})
return tree;
}
return toTreeFn(originArr, originId)
},
findAllId: (originArr, config) => {
config = config || "children";
let arr = [];
const getId = (data1, arr1) => {
data1.map((item) => {
arr1.push(item.id);
if (item[config]) {
getId(item[config], arr1)
}
})
}
getId(originArr, arr);
return arr
},
findAllPId: (originArr, findId, config) => {
if (!findId) return [];
if (!config) {
config = {
children: "children",
pId: "pId"
}
}
let { children, pId } = config;
let result = [];
const findNode = (arr, id) => {
if (!Array.isArray(arr)) return;
arr.some((item) => {
if (item.id === id) {
result.unshift(item.id);
if (item[pId] !== 0) {
findNode(originArr, item[pId]);
};
}
if (item[children] && item[children].length !== 0) {
findNode(item[children], id);
}
})
}
findNode(originArr, findId);
return result;
},
findNodeById: (originArr, findId, config) => {
if (!findId) return [];
if (!config) {
config = {
children: "children"
}
}
let { children } = config;
let result = {};
const findNode = (arr, id) => {
if (!Array.isArray(arr)) return;
arr.find((item) => {
if (item.id === id) {
result = item;
return true;
}
if (item[children] && item[children].length !== 0) {
findNode(item[children], id);
}
})
}
findNode(originArr, findId);
return result;
}
}
Vue.prototype.$capital = (n) => {
if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n)) { return "数据非法"; }
var unit = "千百拾亿千百拾万千百拾元角分",
str = "";
n += "00";
var p = n.indexOf('.');
if (p >= 0)
n = n.substring(0, p) + n.substr(p + 1, 2);
unit = unit.substr(unit.length - n.length);
for (var i = 0; i < n.length; i++)
str += '零壹贰叁肆伍陆柒捌玖'.charAt(n.charAt(i)) + unit.charAt(i);
return str.replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(万|亿|元)/g, "$1").replace(/(亿)万|壹(拾)/g, "$1$2").replace(/^元零?|零分/g, "").replace(/元$/g, "元整");
}
Vue.prototype.$select = {
getByCodes: (arr) => {
if (!Array.isArray(arr)) return;
const codes = arr.join(",");
let option = {};
return new Promise((resolve, reject) => {
Vue.prototype.axios.get(`/api/common-service/select/${codes}/options`).then((res) => {
if (res.statusCode == 200) {
res.data.map((item) => {
option[item.code] = item.options.map((item) => {
if (/^[0-9]+$/.test(item.value)) {
item.id = Number(item.value);
} else {
item.id = item.value;
}
item.label = item.text;
return item;
})
})
resolve(option);
}
});
})
}
}
Vue.prototype.$bank = {
getInfo: (bankNo) => {
return new Promise((resolve, reject) => {
BIN.getBankBin(bankNo)
.then(function (data) {
resolve(data)
})
.catch(function (err) {
reject(err)
})
})
}
}
Vue.prototype.$filters = {
string: function (val, formatArr) {
if (vm.$dataIsNull(val)) return val;
if (Array.isArray(formatArr)) {
let obj = formatArr.find((item) => {
if (item.id == val || item.value == val) {
obj = item;
return true
}
})
if (!obj) return val;
if (obj.label) {
return obj.label
} else if (obj.name) {
return obj.name
} else if (obj.title) {
return obj.title
} else if (obj.text) {
return obj.text
} else {
return val
}
}
return val
},
date: function (val, formatTxt) {
if (val === undefined || val === null || val === "") return val;
if (typeof formatTxt !== "string" || formatTxt === "") {
formatTxt = "yyyy-MM-dd hh:mm:ss"
}
return Vue.prototype.$date.format(val, formatTxt)
},
number: function (val, formatTxt) {
if (val === undefined || val === null || val === "") return val;
if (typeof formatTxt === "string" && formatTxt !== "") {
let [n, isTS] = formatTxt.split(",");
if (isTS === "true") {
isTS = true;
} else {
isTS = false;
}
return Vue.prototype.$number.format(val, n, isTS)
}
return val;
},
area: function (val) {
const thisId = Number(val);
let result = null;
const parseId = (arr, id) => {
arr.map((item) => {
if (item.value === id) {
result = item.label;
return item.label;
}
if (item.children && item.children.length !== 0) {
parseId(item.children, id)
}
})
}
if (isNaN(thisId)) {
return val
} else {
parseId(Map, thisId);
return result === null ? val : result;
}
}
}
Vue.prototype.$print = {
html: (ElementId, header) => {
printJS({
printable: ElementId,
type: 'html',
header: header,
headerStyle: 'font-weight:400; text-align:center',
maxWidth: 1920,
css: '/static/css/print.css',
scanStyles: false
})
},
table: (printData, theaderData, header) => {
let data = Vue.prototype.$print.parseData(printData, theaderData);
printJS({
printable: data.body,
properties: data.header,
type: 'json',
header: header,
headerStyle: 'font-weight:400; text-align:center',
maxWidth: 1920,
css: '/static/css/print.css',
scanStyles: false
})
},
parseData: (tbodyData, theaderData) => {
let result = {
header: [],
body: []
};
result.body = Vue.prototype.$clone(tbodyData);
const parseData = (key, type, format) => {
result.body.map((item) => {
if (typeof item[key] === "undefined") item[key] = "";
if (item[key] === true) item[key] = "√";
if (item[key] === false) item[key] = "";
if (type) item[key] = Vue.prototype.$filters[type](item[key], format);
return item;
})
}
theaderData.forEach(item => {
result.header.push({
field: item.prop,
displayName: item.label
})
switch (item.type) {
case 0:
case 12:
parseData(item.prop, "string", item.format);
break;
case 8:
parseData(item.prop, "date", item.format);
break;
case 9:
parseData(item.prop, "number", item.format);
break;
case 11:
parseData(item.prop, "area", item.format);
break;
default:
parseData(item.prop);
break;
}
})
return result
},
pdf: (base64string) => {
printJS({ printable: base64string, type: 'pdf', base64: true })
}
}
Vue.prototype.$file = {
validator: (file, typeArr, size) => {
const testmsg = file.name.substring(file.name.lastIndexOf('.') + 1);
let [extension, isLt] = [true, true];
if (typeArr) {
extension = typeArr.join(",").indexOf(testmsg) !== -1;
if (!extension) {
Vue.prototype.$message({
message: `上传文件只能是 ${typeArr.join("/")} 格式!`,
type: 'warning'
});
}
}
if (size) {
isLt = file.size / 1024 / 1024 < size;
if (!isLt) {
Vue.prototype.$message({
message: `上传文件大小不能超过 ${size} Mb!`,
type: 'warning'
});
}
}
return extension && isLt
},
delete: (codesArr, encrypt) => {
if (!Array.isArray(codesArr)) return;
return new Promise((resolve, reject) => {
Vue.prototype.axios.del(`/api/file-service/file/code`, {
code: codesArr.join(","),
encrypt: encrypt
}).then((res) => {
if (res.statusCode == 200) {
Vue.prototype.$message({
message: '删除成功',
type: 'success'
});
resolve(res);
}
});
})
},
toUrl: (code) => {
const fileIpService = getStore({
name: "fileIpService"
});
const token = getStore({
name: 'access_token'
});
return fileIpService.ip + fileIpService.file + code + "?access_token=" + token
},
parseFileList: (arr) => {
if (!(Array.isArray(arr) && arr.length !== 0)) return [];
return arr.map((item) => {
item.fileUrl = {
label: item.fileName,
url: Vue.prototype.$file.toUrl(item.code)
}
return item
})
},
getList: (encrypt) => {
return new Promise((resolve, reject) => {
vm.axios.post('/api/file-service/file/owner', {
encrypt: encrypt
}, "json"
).then((res) => {
resolve(Vue.prototype.$file.parseFileList(res.data))
})
})
}
}
Vue.prototype.$ajax = {
toWorkflow: (workflowType, data, title) => {
return new Promise((resolve, reject) => {
vm.axios.get(`/api/activiti-service/actdemodelmappings/${workflowType}`)
.then((res) => {
const userInfo = getStore({ name: "userInfo" });
vm.axios.post(`/api/activiti-service/activiti/start`, {
businessEntityId: data.id,
callbaceURL: null,
formData: {
id: data.id,
name: userInfo.name,
orgName: userInfo.org_name,
content: data
},
processDefinitionKey: res.data.processId,
sheetName: title,
sheetType: workflowType
}, "json")
.then((subres) => {
vm.$message.success(subres.message);
resolve()
})
});
})
}
}
Vue.prototype.$handlerList = function (res) {
this.time = res.resTime;
this.total = res.data.total;
this.currentPage = res.data.current;
}
Vue.prototype.$search = function () {
this.currentPage = 1;
this.searchParam = this.$clone(this.searchData);
this.getList();
}
Vue.prototype.$resetSearch = function () {
this.currentPage = 1;
this.searchData = this.$options.data.call(this).searchData;
this.searchParam = {};
this.getList();
}
Vue.prototype.$genVoucher = function (id, type) {
return new Promise((resolve, reject) => {
Vue.prototype.axios.post(`/api/fin-service/voucher/generateData`, {
id: id,
type: type
}).then((res) => {
vm.$message.success(res.message);
resolve(res);
});
})
}
Vue.prototype.$isPermission = function (code) {
const permissions = getStore({ name: "userInfo" }).permissions;
return permissions.indexOf(code) !== -1
}
Vue.prototype.$findConfigByProp = function (prop, configArr) {
let res = null;
configArr.find((item1) => {
item1.find((item2) => {
res = item2.list.find((item3) => {
if (item3.prop === prop) return true
})
if (res instanceof Object) return true
})
if (res instanceof Object) return true
})
return res
}
}
}
表单验证规则 rule
export default {
install(Vue) {
Vue.prototype.$rules = {
setRequired: (text, trigger) => {
trigger = trigger || 'blur';
return {
required: true,
message: text,
trigger: trigger
}
},
setLength: (min, max) => {
min = Number(min);
max = Number(max);
return {
min: min,
max: max,
message: `长度在 ${min} 到 ${max} 个字符`,
trigger: 'blur'
}
},
setCode: (min, max) => {
let text = `以字母开头,长度在 ${min} - ${max} 之间, 只能包含字母、数字和下划线`;
min = Number(min) - 1;
max = Number(max) - 1;
let reg = new RegExp(`^[a-zA-Z][0-9a-zA-Z_]{${min},${max}}$`);
return {
pattern: reg,
message: text,
trigger: 'blur'
}
},
setPassword: (min, max) => {
let text = `只能输入 ${min} - ${max} 个字母、数字、下划线!`;
min = Number(min);
max = Number(max);
let reg = new RegExp(`^[0-9a-zA-Z_]{${min},${max}}$`);
return {
pattern: reg,
message: text,
trigger: 'blur'
}
},
setNewPassword: (vm, formRef, dataName, confirmPassword, isRequired = true, min = 6, max = 16) => {
let text = `只能输入 ${min} - ${max} 个字母、数字、下划线!`;
min = Number(min);
max = Number(max);
let reg = new RegExp(`^[0-9a-zA-Z_]{${min},${max}}$`);
const rule = (rule, value, callback) => {
if (vm.$dataIsNull(value)) {
if (isRequired) {
callback(new Error('请输入密码'));
} else {
callback();
}
} else if (!reg.test(value)) {
callback(new Error(text));
} else {
if (!vm.$dataIsNull(vm[dataName][confirmPassword])) {
vm.$refs[formRef].validateField(confirmPassword);
}
callback();
}
}
return {
required: isRequired,
validator: rule,
trigger: 'blur'
}
},
setConfirmPassword: (vm, dataName, newPassword, isRequired = true) => {
const rule = (rule, value, callback) => {
if (vm.$dataIsNull(value)) {
if (isRequired) {
callback(new Error('请再次输入密码'));
} else {
callback();
}
} else if (value !== vm[dataName][newPassword]) {
callback(new Error('两次输入密码不一致!'));
} else {
callback();
}
}
return {
required: isRequired,
validator: rule,
trigger: 'blur'
}
},
setNumber: (min, max) => {
let [text, reg] = [null, null];
min = Number(min);
if (max) {
text = `由 ${min} - ${max} 位数字组成`;
max = Number(max);
reg = new RegExp(`^[0-9]{${min},${max}}$`);
} else {
text = `由 ${min} 位数字组成`;
reg = new RegExp(`^[0-9]{${min}}$`);
}
return {
pattern: reg,
message: text,
trigger: 'blur'
}
},
setNumberList: () => {
return {
pattern: /^[1-9]([0-9]*,)([0-9]+,)*[0-9]+$/,
message: "非0数字开头,数字结尾,必须逗号连接",
trigger: 'blur'
}
},
setNoSpaceOrSpecial: () => {
return {
pattern: /^[\u4e00-\u9fa5_a-zA-Z0-9]+$/,
message: "不能由特殊符号和空格组成",
trigger: 'blur'
}
},
setNoSpace: () => {
return {
pattern: /^[^\s]*$/,
message: "不能由空格组成",
trigger: 'blur'
}
},
setNumberFormat: () => {
return {
pattern: /^([0-9]*,)(true|false){1}$/,
message: "保留小数点个数,true/fasle(是否千位分隔)",
trigger: 'blur'
}
},
checkUnCreditCode: (rule, value, callback) => {
const firstarray = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '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'];
const firstkeys = [3, 7, 9, 10, 5, 8, 4, 2];
const secondarray = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'T', 'U', 'W', 'X', 'Y'];
const secondkeys = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28];
const calc = function (code, array1, array2, b) {
var count = 0;
for (var i = 0; i < array2.length; i++) {
var a = code[i];
count += array2[i] * array1.indexOf(a);
}
return b - count % b;
}
const verify = function (str) {
var code = str.toUpperCase();
if (code.length != 18) {
return false;
}
var reg = /^\w\w\d{6}\w{9}\w$/;
if (!reg.test(code)) {
return false;
}
reg = /^[1,5,9,Y]\w\d{6}\w{9}\w$/;
if (!reg.test(code)) {
return false;
}
reg = /^(11|12|13|19|51|52|53|59|91|92|93|Y1)\d{6}\w{9}\w$/;
if (!reg.test(code)) {
return false;
}
reg = /^(11|12|13|19|51|52|53|59|91|92|93|Y1)\d{6}\w{9}\w$/;
if (!reg.test(code)) {
return false;
}
var firstkey = calc(code.substr(8), firstarray, firstkeys, 11);
var firstword;
if (firstkey < 10) {
firstword = firstkey;
}
if (firstkey == 10) {
firstword = 'X';
} else if (firstkey == 11) {
firstword = '0';
}
if (firstword != code.substr(16, 1)) {
debugger
return false;
}
var secondkey = calc(code, secondarray, secondkeys, 31);
secondkey = secondkey === 31 ? 0 : secondkey;
var secondword = secondarray[secondkey];
if (!secondword || secondword != code.substr(17, 1)) {
return false;
}
var word = code.substr(0, 16) + firstword + secondword;
if (code != word) {
return false;
}
return true;
}
if (!value) {
return callback(new Error('请填写统一社会信用代码'))
} else if (!verify(value)) {
return callback(new Error('格式不正确'))
} else {
callback()
}
},
checkPhone: (rule, value, callback) => {
const reg = /^1[3|4|5|7|8][0-9]{9}$/
if (!value) {
return callback()
} else if (!reg.test(value)) {
return callback(new Error('手机号格式不正确'))
} else {
callback()
}
},
checkTel: (isRequired = true) => {
const validator = (rule, value, callback) => {
const reg = /((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)/
if (!value) {
if (isRequired) {
return callback(new Error('不能为空'))
} else {
return callback()
}
} else if (!reg.test(value)) {
return callback(new Error('电话或者手机号格式不正确'))
} else {
callback()
}
};
return { required: isRequired, validator: validator, trigger: 'blur' }
},
checkEmail: (isRequired = true) => {
const validator = (rule, value, callback) => {
const reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
if (!value) {
if (isRequired) {
return callback(new Error('不能为空'))
} else {
return callback()
}
} else if (!reg.test(value)) {
return callback(new Error('邮箱格式不正确'))
} else {
callback()
}
};
return { required: isRequired, validator: validator, trigger: 'blur' }
},
checkInterNum: (isRequired = true, text = '请输入', maxLength = 8, includeZero = false) => {
const validator = (rule, value, callback) => {
const reg = /^[1-9][0-9]*$/;
const max = Math.pow(10, maxLength);
if (!value) {
if (isRequired) {
return callback(new Error(text))
} else {
return callback()
}
} else if (value == 0 && includeZero) {
return callback()
} else if (value == 0 && !includeZero) {
return callback(new Error(`不能为0`))
} else if (Number(value) > max) {
return callback(new Error(`请输入小于等于${max}的数`))
} else if (!reg.test(value)) {
return callback(new Error(`请输入的整数`))
} else {
callback()
}
}
return { required: isRequired, validator: validator, trigger: 'blur' }
},
checkFloatNum: (isRequired = true, text = '请输入', maxLength = 5, includeZero = true) => {
const max = Math.pow(10, maxLength);
const validator = (rule, value, callback) => {
const reg = /(^[1-9](\d+)?(\.\d{1,5})?$)|(^\d\.\d{1,5}$)/;
if (!value) {
if (isRequired) {
return callback(new Error(text))
} else {
return callback()
}
} else if (value == 0 && includeZero) {
return callback()
} else if (value == 0 && !includeZero) {
return callback(new Error(`不能为0`))
} else if (Number(value) > max) {
return callback(new Error(`请输入小于等于${max}的数`))
} else if (!reg.test(value)) {
return callback(new Error(`最多为5位小数`))
} else {
callback()
}
}
return { required: isRequired, validator: validator, trigger: 'blur' }
},
checkFloatNumMax: (max = 999999999, isRequired = true, text = '请输入', includeZero = true) => {
console.log(max);
const validator = (rule, value, callback) => {
const reg = /(^[1-9](\d+)?(\.\d{1,5})?$)|(^\d\.\d{1,5}$)/;
if (!value) {
if (isRequired) {
return callback(new Error("必填项"))
} else {
return callback()
}
} else if (value == 0 && includeZero) {
return callback()
} else if (value == 0 && !includeZero) {
return callback(new Error(`不能为0`))
} else if (Number(value) > max) {
return callback(new Error(text))
} else if (!reg.test(value)) {
return callback(new Error('最多为5位小数'))
} else {
callback()
}
}
return { required: isRequired, validator: validator, trigger: 'blur' }
},
checkIdNum: (isRequired = true) => {
const validator = (rule, value, callback) => {
const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
if (!value) {
if (isRequired) {
return callback(new Error('证件号码不能为空'))
} else {
return callback()
}
} else if (!reg.test(value)) {
return callback(new Error('证件号码格式不正确'))
} else {
callback()
}
};
return { required: isRequired, validator: validator, trigger: 'blur' }
},
checkPassport: (isRequired = true) => {
const validator = (rule, value, callback) => {
const reg = /^1[45][0-9]{7}|([P|p|S|s]\d{7})|([S|s|G|g]\d{8})|([Gg|Tt|Ss|Ll|Qq|Dd|Aa|Ff]\d{8})|([H|h|M|m]\d{8,10})$/;
if (!value) {
if (isRequired) {
return callback(new Error('护照号码不能为空'))
} else {
return callback()
}
} else if (!reg.test(value)) {
return callback(new Error('护照号码格式不正确'))
} else {
callback()
}
};
return { required: isRequired, validator: validator, trigger: 'blur' }
},
checkBankNo: (isRequired = true) => {
const validator = (rule, value, callback) => {
const reg = /^\d*$/;
if (!value) {
if (isRequired) {
return callback(new Error('卡号不能为空'))
} else {
return callback()
}
} else if (!reg.test(value)) {
return callback(new Error('卡号必须全为数字'))
} else if (value.length < 16 || value.length > 19) {
return callback(new Error('卡号长度必须在16到19之间'))
} else {
callback()
}
};
return { required: isRequired, validator: validator, trigger: 'blur' }
},
checkMoney: (rule, value, callback) => {
const reg = /(^[1-9]([0-9]{1,10})?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/
return {
pattern: reg,
message: '整数位应小于等于11位,小数位为2位',
trigger: 'blur'
}
},
checkVerificationCode: (rule, value, callback) => {
const reg = /^\d{6}$/
if (!value) {
return callback(new Error('请输入验证码'))
} else if (!reg.test(value)) {
return callback(new Error('请输入正确的验证码'))
} else {
callback()
}
}
}
}
}
存储localStorage
import {
validatenull
} from 'js/validate'
export const setStore = (params) => {
const {
name,
content,
type
} = params;
const obj = {
dataType: typeof (content),
content: content,
type: type,
datetime: new Date().getTime()
}
if (type) window.sessionStorage.setItem(name, JSON.stringify(obj))
else window.localStorage.setItem(name, JSON.stringify(obj))
}
export const getStore = (params) => {
const { name } = params;
let obj = {};
let content = null;
obj = window.localStorage.getItem(name)
if (validatenull(obj)) obj = window.sessionStorage.getItem(name);
if (validatenull(obj)) return null;
obj = JSON.parse(obj)
if (obj.dataType === 'number') {
content = Number(obj.content)
} else if (obj.dataType === 'boolean') {
content = eval(obj.content)
} else {
content = obj.content
}
return content;
}
export const removeStore = params => {
let {
name
} = params;
window.localStorage.removeItem(name);
window.sessionStorage.removeItem(name);
}
正则校验 validate
export function isvalidUsername(str) {
const valid_map = ['admin', 'editor']
return valid_map.indexOf(str.trim()) >= 0
}
export function validateURL(textval) {
const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
return urlregex.test(textval)
}
export function validateLowerCase(str) {
const reg = /^[a-z]+$/
return reg.test(str)
}
export function validateUpperCase(str) {
const reg = /^[A-Z]+$/
return reg.test(str)
}
export function validatAlphabets(str) {
const reg = /^[A-Za-z]+$/
return reg.test(str)
}
export const vaildatePc = function () {
const userAgentInfo = navigator.userAgent;
const Agents = ["Android", "iPhone",
"SymbianOS", "Windows Phone",
"iPad", "iPod"
];
let flag = true;
for (var v = 0; v < Agents.length; v++) {
if (userAgentInfo.indexOf(Agents[v]) > 0) {
flag = false;
break;
}
}
return flag;
}
export function validateEmail(email) {
const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
return re.test(email)
}
export function cardid(code) {
let list = [];
let result = true;
let msg = '';
var city = {
11: "北京",
12: "天津",
13: "河北",
14: "山西",
15: "内蒙古",
21: "辽宁",
22: "吉林",
23: "黑龙江 ",
31: "上海",
32: "江苏",
33: "浙江",
34: "安徽",
35: "福建",
36: "江西",
37: "山东",
41: "河南",
42: "湖北 ",
43: "湖南",
44: "广东",
45: "广西",
46: "海南",
50: "重庆",
51: "四川",
52: "贵州",
53: "云南",
54: "西藏 ",
61: "陕西",
62: "甘肃",
63: "青海",
64: "宁夏",
65: "新疆",
71: "台湾",
81: "香港",
82: "澳门",
91: "国外 "
};
if (!validatenull(code)) {
if (code.length == 18) {
if (!code || !/(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(code)) {
msg = "证件号码格式错误";
} else if (!city[code.substr(0, 2)]) {
msg = "地址编码错误";
} else {
code = code.split('');
var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2, 'x'];
var sum = 0;
var ai = 0;
var wi = 0;
for (var i = 0; i < 17; i++) {
ai = code[i];
wi = factor[i];
sum += ai * wi;
}
var last = parity[sum % 11];
if (parity[sum % 11] != code[17]) {
msg = "证件号码校验位错误";
} else {
result = false;
}
}
} else {
msg = "证件号码长度不为18位";
}
} else {
msg = "证件号码不能为空";
}
list.push(result);
list.push(msg);
return list;
}
export function isvalidatemobile(phone) {
let list = [];
let result = true;
let msg = '';
var isPhone = /^0\d{2,3}-?\d{7,8}$/;
var isMob = /^((\+?86)|(\(\+86\)))?(13[0123456789][0-9]{8}|15[012356789][0-9]{8}|18[012356789][0-9]{8}|14[57][0-9]{8}|17[3678][0-9]{8})$/;
if (!validatenull(phone)) {
if (phone.length == 11) {
if (isPhone.test(phone)) {
msg = '手机号码格式不正确';
} else {
result = false;
}
} else {
msg = '手机号码长度不为11位';
}
} else {
msg = '手机号码不能为空';
}
list.push(result);
list.push(msg);
return list;
}
export function validatename(name) {
var regName = /^[\u4e00-\u9fa5]{2,4}$/;
if (!regName.test(name)) return false;
return true;
};
export function validatenum(num, type) {
let regName = /[^\d.]/g;
if (type == 1) {
if (!regName.test(num)) return false;
} else if (type == 2) {
regName = /[^\d]/g;
if (!regName.test(num)) return false;
}
return true;
};
export function validatenumord(num, type) {
let regName = /[^\d.]/g;
if (type == 1) {
if (!regName.test(num)) return false;
} else if (type == 2) {
regName = /[^\d.]/g;
if (!regName.test(num)) return false;
}
return true;
};
export function validatenull(val) {
if (val instanceof Array) {
if (val.length == 0) return true;
} else if (val instanceof Object) {
if (JSON.stringify(val) === '{}') return true;
} else {
if (val == 'null' || val == null || val == 'undefined' || val == undefined || val == '') return true;
return false;
}
return false;
};
计算设置布局高度 setLayoutHeight
import { mapGetters } from 'vuex';
export default {
data() {
return {
contentH: 500,
tableMaxH: 500,
TopTableMaxH: 500,
BottomTableMaxH: 500
}
},
mounted() {
this.resetLayout();
},
computed: {
...mapGetters(["windowH"])
},
watch: {
windowH() {
this.resetLayout();
}
},
methods: {
resetLayout() {
this.$nextTick(() => {
this.contentH = $("#content").height();
const pagesH = $(".el-pagination").height() || 0;
const pagesMT = $(".el-pagination").css("margin-top") || 0;
this.tableMaxH = $("#content").height() - $(".setup-box").height() - pagesH - parseInt(pagesMT) - 10;
const contentTop = $("#top-list").height();
const contentBottom = $("#bot-list").height();
const setupBox = $("#top-list .setup-box").height() || 0;
const topPagesH = $("#top-list .pagination").height() || 0;
const tabH = $("#bot-list .el-tabs").height() || 0;
this.TopTableMaxH = contentTop - setupBox - topPagesH;
this.BottomTableMaxH = contentBottom - tabH - 5;
})
}
}
}