249 lines
7.5 KiB
JavaScript
249 lines
7.5 KiB
JavaScript
|
|
/*
|
|||
|
|
* @Descripttion:
|
|||
|
|
* @Author: lip
|
|||
|
|
* @Date: 2023-07-27 15:56:06
|
|||
|
|
* @LastEditors: shirlwang
|
|||
|
|
*/
|
|||
|
|
import {
|
|||
|
|
getPersonBase
|
|||
|
|
} from '@/apiRc/person';
|
|||
|
|
import store from '@/utilsRc/store';
|
|||
|
|
import tab from '@/utilsRc/plugins/tab.js'
|
|||
|
|
/**
|
|||
|
|
* 显示消息提示框
|
|||
|
|
* @param content 提示的标题
|
|||
|
|
*/
|
|||
|
|
export function toast(content) {
|
|||
|
|
uni.showToast({
|
|||
|
|
icon: 'none',
|
|||
|
|
title: content
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 显示模态弹窗
|
|||
|
|
* @param content 提示的标题
|
|||
|
|
*/
|
|||
|
|
export function showConfirm(content, cancelText, confirmText, showCancel) {
|
|||
|
|
return new Promise((resolve, reject) => {
|
|||
|
|
uni.showModal({
|
|||
|
|
title: '提示',
|
|||
|
|
content: content,
|
|||
|
|
cancelText: cancelText || '取消',
|
|||
|
|
confirmText: confirmText || '确定',
|
|||
|
|
showCancel: showCancel === false ? false : true,
|
|||
|
|
success: function(res) {
|
|||
|
|
resolve(res)
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
// 修改后的 checkPersonBase 方法
|
|||
|
|
export function checkPersonBase() {
|
|||
|
|
return new Promise((resolve) => {
|
|||
|
|
const roles = store.getters.roles;
|
|||
|
|
const userId = store.getters.userId;
|
|||
|
|
const isRole = (role) => roles.includes(role);
|
|||
|
|
|
|||
|
|
if (isRole('qunzhong')) {
|
|||
|
|
getPersonBase(userId).then(resp => {
|
|||
|
|
const shouldGoToPersonInfo = resp.data.auditStatus === '0';
|
|||
|
|
if (shouldGoToPersonInfo) {
|
|||
|
|
uni.showModal({
|
|||
|
|
title: '提示',
|
|||
|
|
content: '您的个人信息尚未维护,请前往维护个人信息。',
|
|||
|
|
confirmText: '去维护',
|
|||
|
|
cancelText: '取消',
|
|||
|
|
success: function(res) {
|
|||
|
|
if (res.confirm) {
|
|||
|
|
tab.navigateTo('/pages/personInfo/index');
|
|||
|
|
}
|
|||
|
|
resolve(false); // 需要维护,返回 false
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
} else {
|
|||
|
|
resolve(true); // 不需要维护,返回 true
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
} else {
|
|||
|
|
resolve(true); // 非群众角色直接放行
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
/**
|
|||
|
|
* 参数处理
|
|||
|
|
* @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
|
|||
|
|
}
|
|||
|
|
/**
|
|||
|
|
* 姓名、手机、邮箱、身份证脱敏
|
|||
|
|
* @param str 姓名或手机或邮箱或身份证
|
|||
|
|
* @param type 数据类型
|
|||
|
|
*/
|
|||
|
|
export function publicEncrypt(str, type) {
|
|||
|
|
if (!str) {
|
|||
|
|
return ''
|
|||
|
|
} else if (type == 'name') {
|
|||
|
|
return str.substr(0, 1) + '*'
|
|||
|
|
} else if (type == 'idCard') {
|
|||
|
|
return str.replace(/^(.{6})(?:\d+)(.{4})$/, '$1********$2')
|
|||
|
|
} else if (type == 'phone') {
|
|||
|
|
return str.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
|
|||
|
|
} else if (type == 'email') {
|
|||
|
|
let count, emailArr, emailFront, emailBack;
|
|||
|
|
emailArr = str.split('@');
|
|||
|
|
emailFront = emailArr[0];
|
|||
|
|
count = emailFront.length / 2;
|
|||
|
|
emailFront = emailFront.substring(0, emailFront.length - count);
|
|||
|
|
emailBack = emailArr[1];
|
|||
|
|
return emailFront + '***@' + emailBack;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 根据value值筛选对应的label
|
|||
|
|
* @param {Array} options - 原数组
|
|||
|
|
* @param {string | Number} value - 表示
|
|||
|
|
* @returns {string} - 返回后的汉字
|
|||
|
|
*/
|
|||
|
|
export function getLabelByValue(options = [], value, valueKey = 'value', labelKey = 'label') {
|
|||
|
|
for (let i = 0; i < options.length; i++) {
|
|||
|
|
// 动态使用传入的 valueKey 和 labelKey
|
|||
|
|
if (options[i][valueKey] === value) {
|
|||
|
|
return options[i][labelKey];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
/**
|
|||
|
|
* 将数组转换为字符串
|
|||
|
|
* @param {Array} arr - 要转换的数组
|
|||
|
|
* @param {string} delimiter - 用于连接数组元素的分隔符,默认为逗号
|
|||
|
|
* @returns {string} - 转换后的字符串
|
|||
|
|
*/
|
|||
|
|
export function arrayToString(arr, delimiter = ',') {
|
|||
|
|
return arr.join(delimiter);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 延时函数 */
|
|||
|
|
export function delay(ms) {
|
|||
|
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 获取当前年月日 时分秒 */
|
|||
|
|
export function getCurrentDate() {
|
|||
|
|
const date = new Date();
|
|||
|
|
const year = date.getFullYear();
|
|||
|
|
const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1
|
|||
|
|
const day = String(date.getDate()).padStart(2, '0'); // 使用padStart补零
|
|||
|
|
const hours = String(date.getHours()).padStart(2, '0'); // 补零
|
|||
|
|
const minutes = String(date.getMinutes()).padStart(2, '0'); // 补零
|
|||
|
|
const seconds = String(date.getSeconds()).padStart(2, '0'); // 补零
|
|||
|
|
|
|||
|
|
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
export function processFileUrl(fileUrl) {
|
|||
|
|
let fileList = [];
|
|||
|
|
if (typeof fileUrl === 'string' && fileUrl) {
|
|||
|
|
// 如果 fileUrl 是一个字符串,则按照逗号分割成数组
|
|||
|
|
const urls = fileUrl.split(',').map(url => url.trim()); // 去除每个 URL 前后的空白字符
|
|||
|
|
fileList = urls.map(url => ({
|
|||
|
|
url,
|
|||
|
|
success: 'success',
|
|||
|
|
name: 'fileUrl'
|
|||
|
|
}));
|
|||
|
|
}
|
|||
|
|
return fileList;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 密码强校验
|
|||
|
|
export function isPasswordComplex(password) {
|
|||
|
|
// 长度在8位以上,并且包含大小写字母、数字和特殊符号
|
|||
|
|
return /^(?=.*[A-Za-z])(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@#$%^&*!])[A-Za-z\d@#$%^&*!]{8,}$/.test(password);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 手机号码校验
|
|||
|
|
export function isPhoneNumberValid(phoneNumber) {
|
|||
|
|
// 匹配国内常见的手机号格式
|
|||
|
|
return /^1[3-9]\d{9}$/.test(phoneNumber);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
// 身份证校验函数
|
|||
|
|
export function isValidIdCard (idCard) {
|
|||
|
|
if (typeof idCard !== 'string') {
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 定义省份代码
|
|||
|
|
const provinceCodes = {
|
|||
|
|
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 (!/^\d{17}(\d|X|x)$/.test(idCard)) {
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 验证省份代码
|
|||
|
|
const provinceCode = idCard.substring(0, 2);
|
|||
|
|
if (!provinceCodes[provinceCode]) {
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
// 验证出生日期
|
|||
|
|
const birthDate = idCard.substring(6, 14);
|
|||
|
|
const birthYear = parseInt(birthDate.substring(0, 4), 10);
|
|||
|
|
const birthMonth = parseInt(birthDate.substring(4, 6), 10);
|
|||
|
|
const birthDay = parseInt(birthDate.substring(6, 8), 10);
|
|||
|
|
const birthDateObject = new Date(birthYear, birthMonth - 1, birthDay);
|
|||
|
|
|
|||
|
|
if (
|
|||
|
|
birthDateObject.getFullYear() !== birthYear ||
|
|||
|
|
birthDateObject.getMonth() + 1 !== birthMonth ||
|
|||
|
|
birthDateObject.getDate() !== birthDay
|
|||
|
|
) {
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
// 验证校验码
|
|||
|
|
const weightFactors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
|
|||
|
|
const checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
|
|||
|
|
|
|||
|
|
const sum = idCard
|
|||
|
|
.substring(0, 17)
|
|||
|
|
.split('')
|
|||
|
|
.reduce((acc, num, index) => acc + parseInt(num, 10) * weightFactors[index], 0);
|
|||
|
|
|
|||
|
|
const checkCode = checkCodes[sum % 11];
|
|||
|
|
return checkCode === idCard[17].toUpperCase();
|
|||
|
|
};
|
|||
|
|
|