移动app

This commit is contained in:
2023-09-24 17:55:19 +08:00
parent 736c5376e0
commit 59f7e39791
735 changed files with 80523 additions and 57 deletions

View File

@@ -0,0 +1,130 @@
// schema扩展相关文档请参阅https://uniapp.dcloud.net.cn/uniCloud/jql-schema-ext.html
const db = uniCloud.database();
const dbCmd = db.command
module.exports = {
trigger: {
async afterReadAsSecondaryCollection(e) {
await afterReadAction(e, true)
},
async afterRead(e) {
await afterReadAction(e)
}
}
}
async function afterReadAction({
field,
result,
userInfo: currentUserInfo,
primaryCollection
} = {}, asSecondaryCollection = false) {
if (result && field && field.includes("nickname")) {
//uni-im 处理查询nickname但值为空的情况
let {
data
} = result
if( !Array.isArray(data) ){
// 说明走了 getOne
data = [data]
}
// 为联查 且为副表时的字段
if (asSecondaryCollection && typeof(data[0]) == "object") {
let foreignKeysObj = {
"uni-im-group-member":"user_id",
"uni-im-friend":"friend_uid"
}
let foreignKey = foreignKeysObj[primaryCollection]
if(foreignKey in data[0]){
data = data.map(item => item[foreignKey][0])
}else{
return console.log('触发器uni-id-users.schema.ext.js未在当前操作生效。如需应用此触发器请补充主表表名及其foreignKey的值到触发器uni-id-users.schema.ext.js的变量foreignKeysObj内');
}
}
// console.log('data',data);
if (!Array.isArray(data)) {
data = [data]
}
// 记录没有nickname的用户id
let user_ids = [],
usersInfo = {};
data.forEach(item => {
if (item && !item.nickname) {
user_ids.push(item._id)
}
})
if (user_ids.length) {
console.info('注意uni-im项目用户数据依赖nickname。有' + user_ids.length +
`个用户数据 nickname 的值为空已多执行一次数据库查询将此用户的“用户名”或“邮箱”或“手机号”脱敏后作为nickname输出。请引导用户完善nickname减少查库次数`)
let res = await db.collection('uni-id-users')
.where({
_id: dbCmd.in(user_ids)
})
.field({
username: true,
email: true,
mobile: true
})
.limit(1000)
.get()
usersInfo = res.data.reduce((sum, current) => {
sum[current._id] = current
return sum
}, {})
}
let isUniImAdmin = currentUserInfo.role.includes('uni-im-admin') || currentUserInfo.role.includes('admin')
data.forEach(item => {
if (!item.nickname) {
let userInfo = usersInfo[item._id]
// 管理员可以看到不打码的
if (isUniImAdmin) {
item.nickname = userInfo.username || userInfo.email || userInfo.mobile
}else{
item.nickname = hideUsernameStr(userInfo.username) || hideEmailStr(userInfo.email) ||
hideMobileStr(userInfo.mobile)
}
}else if(!isUniImAdmin && item.nickname.includes('@')){
// 禁止昵称用邮箱 脱敏处理
item.nickname = hideEmailStr(item.nickname)
}
// 特殊处理某个用户xxx
if (item._id == "xxx") {
item.nickname = "xxx"
item.avatar_file = {
url: "xxx"
}
}
})
function hideUsernameStr(username) {
if (username == undefined) {
return false
}
let length = username.length
let n = parseInt(length / 2.5) * 2
return username.substr(0, length - n) + '**' + username.substr(-1 * n / 2)
}
function hideEmailStr(email) {
if (email == undefined) {
return false
}
const content = email.split("@")
return content[0].substr(0, content[0].length - 2) + '**' + content[1]
}
function hideMobileStr(mobile) {
if (mobile == undefined) {
return false
}
return mobile.substr(0, 3) + '****' + mobile.substr(-1 * 4)
}
}
}