页面UI更新
This commit is contained in:
@@ -14,12 +14,66 @@ const arr = [
|
||||
'password'
|
||||
]
|
||||
|
||||
// 敏感数据
|
||||
// 敏感数据:响应解密后保留明文原字段,脱敏值写入 {field}_tm
|
||||
const sensitiveData = [
|
||||
'id_card',
|
||||
'idcard'
|
||||
'idcard',
|
||||
'guardian_id_card'
|
||||
]
|
||||
|
||||
// 仅展示脱敏、编辑需明文的字段
|
||||
const displayMaskFields = [
|
||||
'mobile',
|
||||
'express_mobile',
|
||||
'patient_mobile',
|
||||
]
|
||||
|
||||
/**
|
||||
* 脱敏展示值(写入 field_tm)
|
||||
*/
|
||||
function maskFieldValue(key, plainText) {
|
||||
if (plainText == null || plainText === '') {
|
||||
return plainText
|
||||
}
|
||||
const str = String(plainText)
|
||||
switch (key) {
|
||||
case 'express_name':
|
||||
case 'express_region':
|
||||
case 'accept_name':
|
||||
case 'patient':
|
||||
return str.slice(0, 1).padEnd(str.length, '*')
|
||||
case 'mobile':
|
||||
case 'express_mobile':
|
||||
case 'patient_mobile':
|
||||
case 'guardian_mobile':
|
||||
if (str.length <= 7) {
|
||||
return str
|
||||
}
|
||||
return str.slice(0, 3).padEnd(str.length - 4, '*') + str.slice(-4)
|
||||
case 'id_card':
|
||||
case 'idcard':
|
||||
case 'guardian_id_card':
|
||||
if (str.length <= 10) {
|
||||
return str
|
||||
}
|
||||
return str.slice(0, 6).padEnd(str.length - 4, '*') + str.slice(-4)
|
||||
default:
|
||||
return str
|
||||
}
|
||||
}
|
||||
|
||||
/** 只读展示:优先 field_tm */
|
||||
export function displayTm(obj, field) {
|
||||
if (obj == null) {
|
||||
return ''
|
||||
}
|
||||
const tm = obj[field + '_tm']
|
||||
if (tm != null && tm !== '') {
|
||||
return tm
|
||||
}
|
||||
return obj[field] ?? ''
|
||||
}
|
||||
|
||||
const isDev = checkDev('dev');
|
||||
|
||||
// 环境URL配置
|
||||
@@ -254,56 +308,39 @@ function request(url, params, method = 0) {
|
||||
|
||||
function getRes(obj, isDecode = true) {
|
||||
try {
|
||||
if (obj == null || typeof obj !== 'object') {
|
||||
return obj
|
||||
}
|
||||
for (const key in obj) {
|
||||
if (key.endsWith('_tm')) {
|
||||
continue
|
||||
}
|
||||
if (Array.isArray(obj[key])) {
|
||||
obj[key] = getRes(obj[key])
|
||||
} else if (typeof obj[key] === 'object') {
|
||||
obj[key] = getRes(obj[key])
|
||||
} else {
|
||||
// 判断obj[key]是否在arr中
|
||||
if (arr.indexOf(key) !== -1) {
|
||||
let aseFile = ''
|
||||
if (isDecode === true) {
|
||||
aseFile = customBase64Decode(obj[key])
|
||||
} else {
|
||||
aseFile = customBase64Encode(obj[key])
|
||||
obj[key] = getRes(obj[key], isDecode)
|
||||
} else if (obj[key] !== null && typeof obj[key] === 'object') {
|
||||
obj[key] = getRes(obj[key], isDecode)
|
||||
} else if (arr.indexOf(key) !== -1) {
|
||||
let plainValue = ''
|
||||
if (isDecode === true) {
|
||||
plainValue = customBase64Decode(obj[key])
|
||||
} else {
|
||||
plainValue = customBase64Encode(obj[key])
|
||||
}
|
||||
const isGarbled = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\xFF]|[\u{E000}-\u{F8FF}]/u.test(
|
||||
typeof plainValue === 'string' ? plainValue : ''
|
||||
)
|
||||
if (isGarbled) {
|
||||
plainValue = obj[key]
|
||||
}
|
||||
if (isDecode === true) {
|
||||
const needTm = sensitiveData.indexOf(key) !== -1
|
||||
|| displayMaskFields.indexOf(key) !== -1
|
||||
obj[key] = plainValue
|
||||
if (needTm) {
|
||||
obj[key + '_tm'] = maskFieldValue(key, plainValue)
|
||||
}
|
||||
const isGarbled = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\xFF]|[\u{E000}-\u{F8FF}]/u.test(
|
||||
typeof aseFile === 'string' ? aseFile : ''
|
||||
)
|
||||
if (isGarbled) {
|
||||
aseFile = obj[key]
|
||||
}
|
||||
// 为了修改,暂时不脱敏
|
||||
if (isDecode === true) {
|
||||
|
||||
if (sensitiveData.indexOf(key) !== -1) {
|
||||
// 数据脱敏,自动匹配姓名、手机号、身份证
|
||||
switch (key) {
|
||||
case 'express_name':
|
||||
case 'express_region':
|
||||
case 'accept_name':
|
||||
case 'patient':
|
||||
// 保留前两个字符,其余用星号代替
|
||||
aseFile = aseFile.slice(0, 1).padEnd(aseFile.length, '*');
|
||||
break;
|
||||
case 'mobile':
|
||||
case 'express_mobile':
|
||||
// 保留前三位和后四位,中间用星号代替
|
||||
aseFile = aseFile.slice(0, 3).padEnd(aseFile.length - 4, '*') + aseFile.slice(-4);
|
||||
break;
|
||||
case 'id_card':
|
||||
case 'idcard':
|
||||
// 保留前六位和后四位,中间用星号代替
|
||||
aseFile = aseFile.slice(0, 6).padEnd(aseFile.length - 4, '*') + aseFile.slice(-4);
|
||||
break;
|
||||
default:
|
||||
// 默认情况下,全部用星号代替
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
obj[key] = aseFile
|
||||
} else {
|
||||
obj[key] = plainValue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user