/*
|
* @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(
|
<div className="confirmModal-title">{title}</div>,
|
<div className="confirmModal-subtitle" style={{ textAlign: 'left' }}>{subtitle || ''}</div>,
|
!!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(
|
<div className="confirmModal-title">{title}</div>,
|
<div className="confirmModal-subtitle">{subtitle || ''}</div>,
|
!!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(
|
<div className="confirmModal-title">{title}</div>,
|
<div className="confirmModal-subtitle">{subtitle || ''}</div>,
|
!!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 ? (
|
<span>
|
{beforeStr}
|
<span className="public-search-color">{searchValue}</span>
|
{afterStr}
|
</span>
|
) : (
|
<span>{strTitle}</span>
|
);
|
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 });
|
}
|