/* * @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 }); }