第一次提交:微信小程序前端最新完整代码

This commit is contained in:
XingQue
2026-06-12 21:55:06 +08:00
commit 84be8489b4
330 changed files with 74263 additions and 0 deletions

View 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));
}