第一次提交:微信小程序前端最新完整代码
This commit is contained in:
85
utils/conversation-display.js
Normal file
85
utils/conversation-display.js
Normal file
@@ -0,0 +1,85 @@
|
||||
/** 会话列表展示:私聊固定显示对方昵称/头像,避免来回变成自己的 */
|
||||
import { resolveAvatarUrl } from './avatar.js';
|
||||
import { getLocalImUserId } from './im-user.js';
|
||||
|
||||
function getLocalDisplayName(app) {
|
||||
app = app || getApp();
|
||||
return (
|
||||
wx.getStorageSync('nicheng')
|
||||
|| app.globalData.dashouNicheng
|
||||
|| app.globalData.nicheng
|
||||
|| ''
|
||||
);
|
||||
}
|
||||
|
||||
function isLikelySelfProfile(name, avatar, app) {
|
||||
const myName = getLocalDisplayName(app);
|
||||
if (myName && name && name === myName) return true;
|
||||
const myTx = wx.getStorageSync('touxiang') || '';
|
||||
if (!myTx || !avatar) return false;
|
||||
const a = String(avatar);
|
||||
const t = String(myTx);
|
||||
return a.includes(t) || t.includes(a.replace(/^https?:\/\/[^/]+/, ''));
|
||||
}
|
||||
|
||||
function stripImPrefix(id) {
|
||||
if (!id) return '';
|
||||
return String(id).replace(/^(Ds|Sj|Boss|Gs|Zz|Kh)/, '') || id;
|
||||
}
|
||||
|
||||
export function normalizeConversationItem(item, app, peerCache = {}) {
|
||||
if (!item) return item;
|
||||
if (!item.data) item.data = {};
|
||||
|
||||
if (item.type === 'private' && item.userId) {
|
||||
const peerId = item.userId;
|
||||
const lastMsg = item.lastMessage;
|
||||
let peerName = '';
|
||||
let peerAvatar = '';
|
||||
|
||||
if (lastMsg && lastMsg.senderId === peerId && lastMsg.senderData) {
|
||||
peerName = lastMsg.senderData.name || '';
|
||||
peerAvatar = lastMsg.senderData.avatar || '';
|
||||
}
|
||||
|
||||
if (peerCache[peerId]) {
|
||||
if (!peerName) peerName = peerCache[peerId].name || '';
|
||||
if (!peerAvatar) peerAvatar = peerCache[peerId].avatar || '';
|
||||
}
|
||||
|
||||
if (item.data.name && !isLikelySelfProfile(item.data.name, item.data.avatar, app)) {
|
||||
if (!peerName) peerName = item.data.name;
|
||||
if (!peerAvatar) peerAvatar = item.data.avatar || '';
|
||||
}
|
||||
|
||||
if (!peerName || isLikelySelfProfile(peerName, peerAvatar, app)) {
|
||||
peerName = stripImPrefix(peerId) || peerId;
|
||||
}
|
||||
|
||||
item.data.name = peerName;
|
||||
item.data.avatar = resolveAvatarUrl(peerAvatar, app);
|
||||
item.key = 'private_' + peerId;
|
||||
|
||||
if (peerName && !isLikelySelfProfile(peerName, peerAvatar, app)) {
|
||||
peerCache[peerId] = { name: peerName, avatar: peerAvatar };
|
||||
}
|
||||
} else if (item.type === 'group') {
|
||||
item.data.avatar = resolveAvatarUrl(item.data.avatar, app);
|
||||
if (!item.data.name) {
|
||||
item.data.name = item.data.orderId || item.groupId || '订单群聊';
|
||||
}
|
||||
item.key = 'group_' + (item.groupId || item.data.orderId || '');
|
||||
} else if (item.type === 'cs') {
|
||||
item.data.avatar = resolveAvatarUrl(item.data.avatar, app);
|
||||
if (!item.data.name) item.data.name = '在线客服';
|
||||
item.key = 'cs_' + (item.teamId || 'default');
|
||||
} else {
|
||||
item.key = item.userId || item.groupId || String(item.lastMessage?.timestamp || Math.random());
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
export function normalizeConversationsList(conversations, app, peerCache) {
|
||||
return (conversations || []).map((c) => normalizeConversationItem(c, app, peerCache));
|
||||
}
|
||||
Reference in New Issue
Block a user