Files
xingque/utils/im-user.js
2026-06-29 17:59:23 +08:00

131 lines
3.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/** IM 用户 ID三端连接 + 管事/组长/考核官统一走打手 Ds 前缀 */
import { getPrimaryRole } from './primary-role.js';
import { resolveAvatarUrl } from './avatar.js';
import { ensureRoleOnCenterPage } from './role-tab-bar.js';
import { isStaffMode } from './staff-api.js';
/** 联系对象前缀:管事/组长/考核官已废弃独立前缀,统一 Ds */
const PEER_PREFIX = {
boss: 'Boss',
normal: 'Boss',
dashou: 'Ds',
shangjia: 'Sj',
guanshi: 'Ds',
zuzhang: 'Ds',
kaoheguan: 'Ds',
};
export const IM_ROLE_PREFIX = {
normal: 'Boss',
dashou: 'Ds',
shangjia: 'Sj',
guanshi: 'Ds',
zuzhang: 'Ds',
kaoheguan: 'Ds',
};
import { getDefaultAvatarUrl } from './avatar.js';
export function getDefaultAvatar(app) {
return getDefaultAvatarUrl(app || getApp());
}
export function getImPrefixForRole(role) {
if (isStaffMode()) return 'Sj';
return PEER_PREFIX[role] || 'Ds';
}
export function getImUserIdForRole(role, uid) {
if (!uid) return '';
const prefix = getImPrefixForRole(role);
return prefix + uid;
}
/** 当前端连接 GoEasy 用的 userId子客服仍用 Sj */
export function getLocalImUserId(app) {
app = app || getApp();
const uid = wx.getStorageSync('uid') || '';
if (!uid) return '';
if (isStaffMode()) return 'Sj' + uid;
const primary = getPrimaryRole(app);
if (primary === 'dashou') return 'Ds' + uid;
if (primary === 'shangjia') return 'Sj' + uid;
return 'Boss' + uid;
}
export function getLocalImIdentity(app) {
app = app || getApp();
if (isStaffMode()) return 'shangjia';
return getPrimaryRole(app) || 'normal';
}
export function getFreshImUser(app, role, uid) {
const effectiveRole = isStaffMode() ? 'shangjia' : role;
const id = getImUserIdForRole(effectiveRole, uid);
const touxiang = wx.getStorageSync('touxiang') || '';
const avatar = resolveAvatarUrl(touxiang, app);
const name = app.globalData.currentUser?.name || `用户${(uid || '').slice(-6)}`;
return { id, name, avatar };
}
export function persistGroupMeta(app, groupId, meta) {
if (!groupId || !meta) return;
if (!app.globalData.groupInfoMap) app.globalData.groupInfoMap = {};
app.globalData.groupInfoMap[groupId] = { ...app.globalData.groupInfoMap[groupId], ...meta };
try {
const cache = wx.getStorageSync('pairGroupMetaCache') || {};
cache[groupId] = app.globalData.groupInfoMap[groupId];
wx.setStorageSync('pairGroupMetaCache', cache);
} catch (e) {}
}
export function loadGroupMetaCache(app) {
try {
const cache = wx.getStorageSync('pairGroupMetaCache') || {};
if (!app.globalData.groupInfoMap) app.globalData.groupInfoMap = {};
Object.assign(app.globalData.groupInfoMap, cache);
} catch (e) {}
}
export function buildPeerImUserId(uid, role = 'dashou') {
if (!uid) return '';
return getImPrefixForRole(role) + uid;
}
export function buildGuanshiPeerId(uid) {
return buildDashouPeerId(uid);
}
export function buildDashouPeerId(uid) {
return buildPeerImUserId(uid, 'dashou');
}
export function buildInviterPeerId(uid) {
return buildDashouPeerId(uid);
}
export function ensureDashouImReady(page) {
const app = getApp();
ensureRoleOnCenterPage(page, 'dashou');
if (app.ensureConnection) app.ensureConnection();
}
export function openPrivateChat(page, { toUserId, toName, toAvatar, delay = 350 }) {
ensureDashouImReady(page);
const avatar = resolveAvatarUrl(toAvatar);
const param = {
toUserId,
toName: toName || '用户',
toAvatar: avatar,
};
return new Promise((resolve) => {
setTimeout(() => {
wx.navigateTo({
url: '/pages/chat/chat?data=' + encodeURIComponent(JSON.stringify(param)),
fail: () => wx.showToast({ title: '打开聊天失败', icon: 'none' }),
complete: resolve,
});
}, delay);
});
}