/*
* @Company: hugeInfo
* @Author: ldh
* @Date: 2022-08-08 16:42:08
* @LastEditTime: 2025-05-23 16:11:04
* @LastEditors: lwh
* @Version: 1.0.0
* @Description: 公用方法
*/
import React, { useEffect, useRef } from 'react';
import { Toast, Modal } from 'dingtalk-design-mobile';
import * as apiHandler from '../api/apiHandler';
import selectOptionObj from './selectOption';
import caseTypeSelectObj from './caseTypeSelect';
import threelocationSelect from './threeLocationSelect';
import { message, Empty } from 'antd';
import rule from './rules';
import dd from 'gdt-jsapi';
import { debug, web, test } from '../api/appUrl';
// eslint-disable-next-line no-undef
export const moment = dayjs;
export const isDebug = true; // 是否开发环境
export const isTest = false; // 是否测试环境
export const appUrl = isDebug ? debug : isTest ? test : web; // api
export const title = isDebug ? '(矛盾纠纷应用测试版)' : isTest ? '(矛盾纠纷应用测试版)' : '(矛盾纠纷应用)'; // api
// 下拉数据
export const selectOption = selectOptionObj;
export const caseTypeSelect = caseTypeSelectObj;
// 纠纷类型
export const caseTypeList = caseTypeSelect;
// 纠纷发生地点
export const threelocationSelectList = threelocationSelect;
export { default as caseOptions } from './caseCauseSelect';
// axios
export const ax = apiHandler;
// 版本号
export const versionNumber = '1.0.0';
// 地区
// eslint-disable-next-line no-undef
export const region = regionData;
// 海口地区 没有海口市,每一行都携带暂无
// eslint-disable-next-line no-undef
export const hkRegionLValue = regionData2;
export const hkRegion = getLocal('areaTree') || [];
//海口地区,包含海口市
// eslint-disable-next-line no-undef
export const CityRegion = regionData1;
// 睡眠
export function sleep(timeout = 500) {
return new Promise((resolve) => setTimeout(resolve, timeout));
}
// 清除字符串中的空格,
export function verifyEmpty(value) {
return value?.toString().replace(/\s+/g, '');
}
// api错误提示
export function catchApiError({ content }) {
return Toast.fail({
content,
position: 'middle',
duration: 1.5,
mask: false,
});
}
// 轻提示
export function showToast({ type = 'info', content, position = 'middle', showType, duration = 1.5, icon, mask = false }) {
return Toast[type]({ content, position, showType, duration, icon, mask });
}
// 地址栏截取
export function getQueryString(name) {
let result = window.location.href.match(new RegExp('[?&]' + name + '=([^&]+)', 'i'));
if (!result || result.length < 1) {
return null;
}
return decodeURI(result[1]);
}
// 操作二次确认弹框
export function confirmModal({ title = '提示', subtitle, cancelText = '我再想想', onCancel = null, okText = '确定', onOk, actions }) {
return Modal.alert(
{title}
,
{subtitle || ''}
,
!!actions
? actions
: [
{ text: cancelText, onClick: onCancel, style: { fontSize: '16px' } },
{
text: okText,
onClick: onOk,
style: { color: 'var(--theme_primary1_color)', fontSize: '16px' },
},
]
);
}
// 操作两个竖着按钮确认弹框
export function confirmTwoButtonModal({
title = '标题',
subtitle,
cancelText = '我再想想',
onCancel = null,
okText = '确定',
assistText,
onAssist = null,
onOk,
actions,
}) {
return Modal.alert(
{title}
,
{subtitle || ''}
,
!!actions
? actions
: [
{
text: cancelText,
onClick: onCancel,
style: { color: 'var(--theme_primary1_color)', fontSize: '16px' },
},
{ text: okText, onClick: onOk, style: { fontSize: '16px' } },
{
text: assistText,
onClick: onAssist,
style: { fontSize: '17px', display: 'none' },
},
]
);
}
// 操作三个按钮确认弹框
export function confirmThreeButtonModal({
title = '标题',
subtitle,
cancelText = '我再想想',
onCancel = null,
okText = '确定',
assistText,
onAssist = null,
onOk,
actions,
}) {
return Modal.alert(
{title}
,
{subtitle || ''}
,
!!actions
? actions
: [
{
text: cancelText,
onClick: onCancel,
style: { color: 'var(--theme_primary1_color)', fontSize: '16px' },
},
{ text: okText, onClick: onOk, style: { fontSize: '16px' } },
{ text: assistText, onClick: onAssist, style: { fontSize: '16px' } },
]
);
}
// 过滤菜单方法
export function filterArray(arr1, arr2) {
// 创建一个 Set 来存储 arr2 中的所有 name
const namesInArr2 = new Set(arr2.map((item) => item.menuName));
// 过滤 arr1,只保留那些 name 在 arr2 中存在的对象
return arr1.filter((item) => namesInArr2.has(item.name));
}
// 显示99+
export function showMoreNum(value) {
return Number(value || 0) > 99 ? '99+' : value;
}
// 计算我的消息时间显示
export function msgTime(value) {
if (!value) return;
let res = '';
if (moment(value).format('YYYYMMDD') === moment().format('YYYYMMDD')) {
res = '今日';
} else if (moment(value).format('YYYYMMDD') === moment().add(-1, 'd').format('YYYYMMDD')) {
res = '昨天';
} else {
res = moment(value).format('YYYY-MM-DD');
}
return `${res} ${moment(value).format('HH:mm')}`;
}
// 计算上午,中午,下午,晚上 的
export function tipTime(value) {
if (!value) return;
let res = '';
if (moment(value).format('HH') >= 5 && moment(value).format('HH') < 12) {
res = '上午';
} else if (moment(value).format('HH') >= 12 && moment(value).format('HH') < 14) {
res = '中午';
} else if (moment(value).format('HH') >= 14 && moment(value).format('HH') < 18) {
res = '下午';
} else {
res = '晚上';
}
return `${res}`;
}
// 计算:周一至周末
export function getweekTime(value) {
if (!value) return;
let res = '';
if (new Date(value).getDay() === 1) {
res = '周一';
} else if (new Date(value).getDay() === 2) {
res = '周二';
} else if (new Date(value).getDay() === 3) {
res = '周三';
} else if (new Date(value).getDay() === 4) {
res = '周四';
} else if (new Date(value).getDay() === 5) {
res = '周五';
} else if (new Date(value).getDay() === 6) {
res = '周六';
} else if (new Date(value).getDay() === 0) {
res = '周日';
} else {
return;
}
return `${res}`;
}
// 计算: 'week'近一周,'month'近一个月,'threeMonth'近三个月,'sixMonth'近半年,'year'近一年的开始时间和结束时间
export function getCountTime(type) {
let e = '';
if (type === 'today') {
e = moment().add(0, 'd');
}
if (type === 'yesToday') {
e = moment().add(-1, 'd');
}
if (type === 'week') {
e = moment().add(-7, 'd');
}
if (type === 'month') {
e = moment().add(-30, 'd');
}
if (type === 'threeMonth') {
e = moment().add(-90, 'd');
}
if (type === 'sixMonth') {
e = moment().add(-180, 'd');
}
if (type === 'year') {
e = moment().add(-365, 'd');
}
return {
start: e.format('YYYY-MM-DD') + ' 00:00',
end: moment().format('YYYY-MM-DD 23:59'),
};
}
// 搜索后头部的高亮显示
export function searchTitle(strTitle, searchValue) {
const index = strTitle?.indexOf(searchValue);
const beforeStr = strTitle?.substring(0, index);
const afterStr = strTitle?.slice(index + searchValue.length);
const label =
index > -1 ? (
{beforeStr}
{searchValue}
{afterStr}
) : (
{strTitle}
);
return label;
}
// 敏感信息使用*代替
export function sensitiveTitle(value, strNum, endNum) {
return !!value ? value.replace(/^(.{3})(?:\d+)(.{4})$/, '$1***********$2') : '-';
}
// 超出文字使用省略号
export function ellipsis(value, len) {
if (!value) return '';
if (value.length > len) {
return value.slice(0, len) + '...';
}
return value;
}
// 时间格式化
export function dateFormat(value) {
return !!value ? moment(value).format('YYYY-MM-DD') : '-';
}
// liveStatus 居住状态,1-在住,0-迁出,空-其他
export function liveStatus(value) {
return value === '1' ? '在住' : value === '0' ? '迁出' : '-';
}
export function timeFormat(value, isValue) {
return !!value ? moment(value).format('YYYY-MM-DD HH:mm') : isValue ? '' : '-';
}
export function minuteFormat(value, isValue) {
return !!value ? moment(value).format('YYYY-MM-DD HH:mm') : isValue ? '' : '-';
}
export function myTimeFormat(value, str, isValue) {
return !!value ? moment(value).format(str) : isValue ? '' : '-';
}
/**
* 验证号码格式 (支持手机号码、不含区号固定电话)
* @param tel 号码
* @returns {Boolean}
*/
export function checkTel(tel) {
var pattern = /(^[0-9]{8}$)|(^1[3-9][0-9]{9}$)/; //手机号码
var pattern2 = /(^[0-9]{3,4}[-][0-9]{7,8}$)/; //座机号码
if (pattern.test(tel) || pattern2.test(tel)) {
return true;
} else {
return false;
}
}
// 手机号码正则
export const mobileRegExp = new RegExp('^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$', 'g');
// 身份证正则18位和15位
export const idcardRegExp = new RegExp(
'^(^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$)|(^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])((\\d{4})|\\d{3}[Xx])$)$',
'g'
);
// 短表表单(格式)校验
export function verification({ requireFields, formData, tabsType }) {
const msgList = [];
for (const a of requireFields) {
let { name, type, value, label, tabs } = a;
if (type == 'text' || type == 'number' || type == 'password' || type == 'phone' || type == 'idcard' || type == 'digit') {
if (!formData[a.name]) {
msgList.push({
value: (tabsType ? `P${tabs} ` : null) + label + '为必填项',
name,
tabs,
});
} else {
if (name == 'idcard') {
if (formData.permitType == '111' || formData.permitType == '112') {
if (checkIdCard(formData[a.name]) == false) {
msgList.push({
value: (tabsType ? `P${tabs} ` : null) + label + '格式不正确',
name,
tabs,
});
}
}
}
if (name == 'contact') {
if (checkTel(formData[a.name]) == false) {
msgList.push({
value: (tabsType ? `P${tabs} ` : null) + label + '格式不正确',
name,
tabs,
});
}
}
}
} else if (type == 'select') {
if (!formData[a.name]) {
msgList.push({
value: (tabsType && `P${tabs} `) + '请选择' + label,
name,
tabs,
});
}
} else {
if (!formData[a.name]) {
msgList.push({
value: (tabsType && `P${tabs} `) + '请选择' + label,
name,
tabs,
});
}
}
}
return msgList;
}
// 长表表单(格式)校验
export function verificationLong({ requireFields, formData }) {
const msgList = [];
for (const a of requireFields) {
let { name, type, value, label, tabs } = a;
if (type == 'text' || type == 'number' || type == 'password' || type == 'phone' || type == 'idcard' || type == 'digit') {
if (!formData[a.name]) {
msgList.push({ value: label + '为必填项', name, tabs });
} else {
if (name === 'idcard') {
if (formData.permitType == '111' || formData.permitType == '112') {
if (checkIdCard(formData[a.name]) === false) {
msgList.push({ value: label + '格式不正确', name, tabs });
}
}
}
if (name === 'contact') {
if (checkTel(formData[a.name]) === false) {
msgList.push({ value: label + '格式不正确', name, tabs });
}
}
}
} else if (type == 'select') {
if (!formData[a.name]) {
msgList.push({ value: '请选择' + label, name, tabs });
}
} else {
if (!formData[a.name]) {
msgList.push({ value: '请选择' + label, name, tabs });
}
}
}
return msgList;
}
// 纯格式校验
export function verificationSwf({ requireFields, formData, title }) {
const msgList = [];
let valueList = [];
for (const a of requireFields) {
let { name, type, value, label, tabs, require } = a;
if (!formData[name] || formData[name] == '') {
valueList.push({ value: false, type, name, label, require });
} else {
valueList.push({ value: true, type, name, label, require });
}
}
if (!valueList.filter((item) => item.type !== 'switch').find((item) => item.value == true)) {
msgList.push({ value: title });
}
for (const a of requireFields) {
let { name, type, value, label, tabs } = a;
if (!formData[name] || formData[name] == '') {
} else {
if (type === 'number') {
if (checkTel(formData[name]) == false) {
msgList.push({ value: label + '格式不正确', name, tabs });
}
}
if (name == 'landIdcard') {
if (formData.landCardtype === '111' || formData.landCardtype === '112') {
if (formData.landIdcard !== '' || !formData.landIdcard) {
if (checkIdCard(formData.landIdcard) == false) {
msgList.push({ value: label + '格式不正确', name, tabs });
}
}
}
}
if (name == 'manageIdcard') {
if (formData.manageCardtype === '111' || formData.manageCardtype === '112') {
if (formData.manageIdcard !== '' || !formData.manageIdcard) {
if (checkIdCard(formData.manageIdcard) == false) {
msgList.push({ value: label + '格式不正确', name, tabs });
}
}
}
}
if (name == 'pCorporationIdCard') {
if (formData.pCorporationIdType === '111' || formData.pCorporationIdType === '112') {
if (formData.pCorporationIdCard !== '' || !formData.pCorporationIdCard) {
if (checkIdCard(formData.pCorporationIdCard) == false) {
msgList.push({ value: label + '格式不正确', name, tabs });
}
}
}
}
if (name == 'pPrincipalIdCard') {
if (formData.pPrincipalIdType === '111' || formData.pPrincipalIdType === '112') {
if (formData.pPrincipalIdCard !== '' || !formData.pPrincipalIdCard) {
if (checkIdCard(formData.pPrincipalIdCard) == false) {
msgList.push({ value: label + '格式不正确', name, tabs });
}
}
}
}
}
}
return msgList;
}
//阿拉伯数字转中文数字
export function noToChinese(num) {
if (!/^\d*(\.\d*)?$/.test(num)) {
alert('Number is wrong!');
return 'Number is wrong!';
}
var AA = new Array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九');
var BB = new Array('', '十', '百', '千', '万', '亿', '点', '');
var a = ('' + num).replace(/(^0*)/g, '').split('.'),
k = 0,
re = '';
for (var i = a[0].length - 1; i >= 0; i--) {
switch (k) {
case 0:
re = BB[7] + re;
break;
case 4:
if (!new RegExp('0{4}\\d{' + (a[0].length - i - 1) + '}$').test(a[0])) re = BB[4] + re;
break;
case 8:
re = BB[5] + re;
BB[7] = BB[5];
k = 0;
break;
}
if (k % 4 == 2 && a[0].charAt(i + 2) != 0 && a[0].charAt(i + 1) == 0) re = AA[0] + re;
if (a[0].charAt(i) != 0) re = AA[a[0].charAt(i)] + BB[k % 4] + re;
k++;
}
if (a.length > 1) {
//加上小数部分(如果有小数部分)
re += BB[6];
for (var i = 0; i < a[1].length; i++) re += AA[a[1].charAt(i)];
}
return re;
}
// 中文一二三四五六七八九十转换为阿拉伯数字
export function checkIsNum(str) {
let arr = str ? str.split('') : [];
let ChineseItem = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '百', '千', '万', '两']; //十,百
let numItem = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 1000, 10000, 2];
let doubleNum = [];
let NumIndex = [];
for (let i = 0; i < arr.length; i++) {
let ChineseOne = arr[i].charAt();
for (let j = 0; j < ChineseItem.length; j++) {
if (ChineseOne == ChineseItem[j]) {
let a = {
index: j,
seat: i,
};
NumIndex.push(a);
}
}
}
let double = [];
let float = [];
let Num = 0;
for (var k = 0; k < NumIndex.length; k++) {
if (NumIndex[k].index == 0) {
} else {
if (k % 2 == 0) {
//单数
float.push(numItem[NumIndex[k].index]);
}
if (k % 2 == 1) {
double.push(numItem[NumIndex[k].index]);
}
}
}
if (double.length == 0) {
Num = float[0];
}
for (var j = 0; j < double.length; j++) {
if (double.length < float.length) {
if (float[j] == 0) {
} else {
Num = Num + double[j] * float[j];
if (j == double.length - 1 && j < float.length) {
if (float[j + 1] > 10) {
Num = Num * float[j + 1];
} else {
Num = Num + float[j + 1];
}
}
}
} else if (double.length == float.length) {
if (float[j] == 0) {
Num = Num + double[j] * float[j + 1];
} else {
Num = Num + double[j] * float[j];
}
}
}
const lastStr = arr.filter((item, index) => (NumIndex.find((da) => da.seat == index) ? '' : item));
if (NumIndex.length > 0) {
lastStr.splice(NumIndex[0].seat, 0, String(Num));
}
return lastStr.join('');
}
/**
* 修改数组
* @param originData 原数组
* @param data 需要新增的属性数组
* @returns {Array}
*/
export function modifyArray(form, data) {
return form.map((item) => ({
...item,
list: item.list.map(({ name, ...a }) =>
data.find((b) => b.name === name)
? {
...a,
name,
disabled: data.find((b) => b.name == name).disabled,
extra: data.find((b) => b.name == name).extra,
clear: data.find((b) => b.name == name).clear,
delFun: data.find((b) => b.name == name).delFun,
disabledDom: data.find((b) => b.name == name).disabledDom,
onClick: data.find((b) => b.name == name).onClick,
display: data.find((b) => b.name == name).display,
}
: { ...a, name }
),
}));
}
/**
* 获取户籍地详址
* @param v 户籍地编码址
* @returns String
*/
export function gainRegionDesc(v) {
let v1 = v.slice(0, 2) + '0000';
let v2 = v.slice(0, 4) + '00';
let v3 = v.slice(0);
let arr;
let str = '';
let index1 = region.findIndex(({ value }) => value == v1);
arr = [index1];
if (region[index1].children) {
let index2 = region[index1].children.findIndex(({ value }) => value == v2);
if (index2 !== -1) {
arr.push(index2);
let index3 = region[index1].children[index2].children.findIndex(({ value }) => value == v3);
str += region[index1].label + region[index1].children[index2].label;
if (index3 !== -1) {
arr.push(index3);
str += region[index1].children[index2].children[index3].label;
}
} else {
str += region[index1].label;
}
} else {
arr = [index1];
str = region[index1].label;
}
return str;
}
// 获取区域,街道详细(两级联动)
export function villageRegionDesc(list, v) {
let v1 = v.slice(0, 6);
let v2 = v.slice(0);
let arr;
let str = [];
let index1 = list.findIndex(({ value }) => value == v1);
arr = [index1];
if (list[index1].children) {
let index2 = list[index1].children.findIndex(({ value }) => value == v2);
if (index2 !== -1) {
arr.push(index2);
str = [list[index1].label, list[index1].children[index2].label];
} else {
str = [list[index1].label];
}
} else {
arr = [index1];
str = [list[index1].label];
}
return str;
}
// 多维数组转换为一维数组
export function flattenNestedArray(arr) {
const result = [];
function recursiveFlatten(arr) {
for (let i = 0; i < arr.length; i++) {
result.push(arr[i]);
if (arr[i].children && arr[i].children.length > 0) {
recursiveFlatten(arr[i].children);
}
}
}
recursiveFlatten(arr);
return result;
}
// 获取区域,街道详细(三级联动) v:['xxx所在区','xxx所在街道','xxx居委会']
export function regionThreeDesc1(list, v) {
let select = flattenNestedArray(list);
console.log('select', select);
let v1 = v[0];
let v2 = v[1];
let v3 = v[2];
let label1 = select.find(({ value }) => value === v1)?.label;
let label2 = select.find(({ value }) => value === v2)?.label;
let label3 = select.find(({ value }) => value === v3)?.label;
return [label1, label2, label3];
}
// 后端给接口的,不同层级有相同value
// 获取区域,街道详细(三级联动) v:['xxx所在区','xxx所在街道','xxx居委会']
export function regionThreeDesc(list, v) {
let list1 = list.map((i) => [...i.children]).flat();
let list2 = list1.map((i) => [...i.children]).flat();
let v1 = v[0];
let v2 = v[1];
let v3 = v[2];
let label1 = list.find(({ value }) => value === v1)?.label;
let label2 = list1.find(({ value }) => value === v2)?.label;
let label3 = list2.find(({ value }) => value === v3)?.label;
return [label1, label2, label3];
}
export function selectThreeDesc(list, v) {
let select = flattenNestedArray(list);
let v1 = v[0];
let label1 = select.find(({ value }) => value === v1)?.label;
return label1;
}
/**
* 获取户籍地code 省,市,区
*
*/
export function gainRegionCode(v) {
let v1 = v.slice(0, 2) + '0000';
let v2 = v.slice(0, 4) + '00';
let v3 = v.slice(0);
let arr = [v1, v2, v3];
return arr;
}
/**
* 获取户籍地code 市,区 街道
*
*/
export function gainnewRegionCode(v) {
let v1 = v.slice(0, 4) + '00';
let v2 = v.slice(0, 6);
let v3 = v.slice(0, 9);
let v4 = v.slice(0, 12);
let arr = [v1, v2, v3, v4];
return arr;
}
export function regionThreeCode(v) {
let v2 = v.slice(0, 6);
let v3 = v.slice(0, 9);
let v4 = v.slice(0, 12);
let arr = [v2, v3, v4];
return arr;
}
// 获取当前季度的开始日期和结束日期
export function getQuarter() {
// 获取季度
let nowMonth = moment().format('M'),
quarter = { s: 0, e: 0 };
if (nowMonth >= 1 && nowMonth <= 3) {
quarter = { s: 1, e: 3 };
} else if (nowMonth >= 4 && nowMonth <= 6) {
quarter = { s: 4, e: 6 };
} else if (nowMonth >= 7 && nowMonth <= 9) {
quarter = { s: 7, e: 9 };
} else if (nowMonth >= 10 && nowMonth <= 12) {
quarter = { s: 10, e: 12 };
}
return {
start: moment(`${moment().format('YYYY')}-${quarter.s}`).startOf('month'),
end: moment(`${moment().format('YYYY')}-${quarter.e}`).endOf('month'),
};
}
// 当月有更新, 当季有更新, 超过半年未更新, 当季未更新
export function getUpdateStr(updateTime) {
if (!updateTime) return null;
let now = moment(),
target = moment(updateTime);
let quarter = getQuarter();
if (now.diff(target, 'day') < 90) {
return '近3个月有更新';
} else if (now.diff(target, 'day') > 90) {
return '超过3个月未更新';
}
}
// 计算往前的日期
export function getBeforeDate(value) {
return moment().day(-Number(value)).format('YYYY-MM-DD');
}
// 缓存
export function setLocal(name, value) {
localStorage.setItem(name, JSON.stringify(value || ''));
}
export function getLocal(name) {
try {
let data = localStorage.getItem(name);
return JSON.parse(data);
} catch (error) {
return null;
}
}
export function clearLocal(name) {
return name ? localStorage.removeItem(name) : localStorage.clear();
}
export function setSessionStorage(name, value) {
sessionStorage.setItem(name, JSON.stringify(value || ''));
}
export function getSessionStorage(name) {
let data = sessionStorage.getItem(name);
return !data ? null : JSON.parse(data);
}
export function clearSessionStorage(name) {
return name ? sessionStorage.removeItem(name) : sessionStorage.clear();
}
// 根据身份证获取性别
export function getSexByIdcard(idcard) {
let flag;
if (idcard.length == 18) {
flag = parseInt(idcard.substring(16, 17));
} else if (idcard.length == 15) {
flag = parseInt(idcard.substring(13, 14));
} else {
return null;
}
return parseInt(flag) % 2 == 0 ? '女' : '男';
}
// 根据身份证获取出生年月
export function getBirthdatByIdNo(iIdNo) {
var tmpStr = '';
var idDate = '';
var tmpInt = 0;
var strReturn = '';
iIdNo = iIdNo.replace(/^\s+|\s+$/g, '');
if (iIdNo.length == 15) {
tmpStr = iIdNo.substring(6, 12);
tmpStr = '19' + tmpStr;
tmpStr = tmpStr.substring(0, 4) + '-' + tmpStr.substring(4, 6) + '-' + tmpStr.substring(6);
return tmpStr;
} else {
tmpStr = iIdNo.substring(6, 14);
tmpStr = tmpStr.substring(0, 4) + '-' + tmpStr.substring(4, 6) + '-' + tmpStr.substring(6);
return tmpStr;
}
}
// 通过身份证获取年龄, 精确到月
export function getAgeByIdcard(idcard) {
var year = 0;
var month = 0;
if (idcard.length == 15) {
year = parseInt(idcard.substring(6, 8)) + 1900;
month = parseInt(idcard.substring(8, 10));
} else if (idcard.length == 18) {
year = parseInt(idcard.substring(6, 10));
month = parseInt(idcard.substring(10, 12));
} else {
return '-';
}
var currYear = new Date().getFullYear();
var currMonth = new Date().getMonth() + 1;
var age = currYear - year;
age = month > currMonth ? age - 1 : age;
return age;
}
//身份号码位数及格式检验
export function checkIdCard(idcard) {
var idNum = idcard || '';
var re;
var len = idNum.length;
//身份证位数检验
if (len != 15 && len != 18) {
return false;
} else if (len == 15) {
re = new RegExp(/^(\d{6})()?(\d{2})(\d{2})(\d{2})(\d{3})$/);
return false;
} else {
re = new RegExp(/^(\d{6})()?(\d{4})(\d{2})(\d{2})(\d{3})([0-9xX])$/);
}
var area = {
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: '澳门',
83: '台湾',
91: '国外',
};
var idcard_array = new Array();
idcard_array = idNum.split('');
//地区检验
if (area[parseInt(idNum.substr(0, 2))] == null) {
return false;
}
//出生日期正确性检验
var a = idNum.match(re);
if (a != null) {
if (len == 15) {
var DD = new Date('19' + a[3] + '/' + a[4] + '/' + a[5]);
var flag = DD.getYear() == a[3] && DD.getMonth() + 1 == a[4] && DD.getDate() == a[5];
} else if (len == 18) {
var DD = new Date(a[3] + '/' + a[4] + '/' + a[5]);
var flag = DD.getFullYear() == a[3] && DD.getMonth() + 1 == a[4] && DD.getDate() == a[5];
}
if (!flag) {
return false;
}
//检验校验位
if (len == 18) {
var S =
(parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7 +
(parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9 +
(parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10 +
(parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5 +
(parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8 +
(parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4 +
(parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2 +
parseInt(idcard_array[7]) * 1 +
parseInt(idcard_array[8]) * 6 +
parseInt(idcard_array[9]) * 3;
var Y = S % 11;
var M = 'F';
var JYM = '10X98765432';
var M = JYM.substr(Y, 1); //判断校验位
//检测ID的校验位
if (M == idcard_array[17]) {
return true;
} else {
return false;
}
}
} else {
return false;
}
return true;
}
/* <行政区划名><街巷路名><门牌号>[小区名][楼栋名][附属物/特殊类][铺面名称]
<行政区划名><街巷路名><小区名>[楼栋名][附属物/特殊类][铺面名称]
<行政区划名><街巷路名><门牌号><标志物名>[楼栋名][附属物/特殊类][铺面名称]
<行政区划名><街巷路名><标志物名>[楼栋名][附属物/特殊类][铺面名称]
<行政区划名><村名><门牌号>[楼栋名][附属物/特殊类][铺面名称]
*/
// 行政区划名.districtName 村名.vilname 街巷路名.strrdname 门牌号.dooplate 小区名.groupname or dmAUidHkName 标志物名.landmark (楼栋名building 附属物/特殊类.appendant 铺面名称.shopno 谁都可以拼接)
export function guize(districtName, params) {
//网格员所属区
const { strrdname, vilname, dooplate, groupname, dmAUidHkName, building, landmark, appendant, shopno } = params;
const msg = '地名地址不符合规则,请检查后重新输入';
if (strrdname && vilname) {
return { status: false, msg: '街巷路名和村名只能填写其中一项' };
}
if (!strrdname && !vilname) {
return { status: false, msg };
}
if (strrdname && !vilname) {
if (dooplate) {
if (districtName === '龙华区') {
if (dmAUidHkName && landmark) {
return { status: false, msg };
}
} else {
if (groupname && landmark) {
return { status: false, msg };
}
}
} else {
if (districtName === '龙华区') {
if (!dmAUidHkName && !landmark) {
return { status: false, msg };
}
if (dmAUidHkName && landmark) {
return { status: false, msg };
}
} else {
if (!groupname && !landmark) {
return { status: false, msg };
}
if (groupname && landmark) {
return { status: false, msg };
}
}
}
}
if (!strrdname && vilname) {
if (dooplate) {
if (landmark) {
return { status: false, msg };
}
} else {
return { status: false, msg };
}
}
return {
status: true,
msg:
(districtName || '') +
(strrdname || '') +
(vilname || '') +
(dooplate || '') +
(dmAUidHkName || '') +
(groupname || '') +
(building || '') +
(landmark || '') +
(appendant || '') +
(shopno || ''),
};
}
// 记录旧值的公用hooks
export function usePrevious(value) {
const ref = useRef();
useEffect(() => {
ref.current = value;
});
return ref.current;
}
// 获取唯一的key
export const getBusinessId = () => {
let four = `${parseInt(Math.random() * 10)}${parseInt(Math.random() * 10)}${parseInt(Math.random() * 10)}${parseInt(Math.random() * 10)}`;
let result = `${moment().format('YYYYMMDDHHmmss')}${four}`;
return result;
};
// 查看文件
export function openFiles({ type, url, urls, name }) {
console.log('url', url);
console.log('urls', urls);
function getAllImg() {
let arr = [];
urls.forEach((x) => {
if (x.type === '22_00017-3') {
arr.push(`${appUrl.fileUrl}${x.showUrl}`);
}
});
return arr;
}
if (type === '22_00017-3') {
dd.previewImage({
current: url,
urls: urls && urls.length > 0 ? getAllImg() : [url],
}).catch(() => {
showToast({ content: '查看失败' });
});
} else if (['22_00017-4', '22_00017-5', '22_00017-6', '22_00017-9'].includes(type)) {
dd.downloadFile({ url: url, name: name })
.then((res) => {
dd.openDownloadFile({
url: res,
});
})
.catch(() => {
showToast({ content: '查看失败' });
});
} else {
showToast({ content: '抱歉!您所点击的附件暂不支持查看' });
}
}
// 重新登录弹窗
let errorNum = false;
export function loginModal() {
if (errorNum) return false;
errorNum = true;
return confirmModal({
subtitle: '抱歉! 登录状态已失效请重新登录',
actions: [
{
text: '我知道了',
onClick: () => {
errorNum = false;
clearLocal();
window.location.href = '#/hztGrid/login';
},
style: { color: 'var(--theme_primary1_color)', fontSize: '16px' },
},
],
});
}
// 全局提示
export function info({ type, content, duration, onClose }) {
return message[type](content, duration || 3, onClose);
}
export function infoSuccess({ content }) {
return info({ type: 'success', content });
}
export function infoError({ content }) {
return info({ type: 'error', content });
}