Files
xingque/pages/merchant/merchant.js

368 lines
12 KiB
JavaScript

// pages/shangjiazhongxin/shangjiazhongxin.js
import request from '../../utils/request.js';
import popupService from '../../services/popupService.js';
import {
isRoleStatusActive,
isCenterPageActive,
syncRoleStatuses,
syncProfileFields,
ensureRoleOnCenterPage,
clearCacheAndEnterNormal,
} from '../../utils/role-tab-bar.js';
import { lockPrimaryRole } from '../../utils/primary-role.js';
import { ensureLogin } from '../../utils/login.js';
const app = getApp();
Page({
data: {
// 图片资源
imgUrls: {
pageBg: '',
avatarCardBg: '',
assetCardBg: '',
statCardBg: '',
funcItemBg: '',
primaryFuncBg: '',
highlightFuncBg: '',
iconRelease: '',
iconFast: '',
iconOrders: '',
iconService: '',
iconPunish: '',
iconRank: '',
iconRecharge: '',
iconWithdraw: '',
iconRefresh: '',
iconCopy: '',
avatarFrame: '',
iconClear: '',
},
// 商家状态
isShangjia: false,
isLoading: false,
isAutoRegistering: false,
// 用户基础信息
uid: '',
avatarUrl: '',
nicheng: '',
// 商家核心数据
sjyue: '0.00',
fabu: 0,
tuikuan: 0,
jinriliushui: '0.00',
jinyueliushui: '0.00',
jinridingdan: 0,
jinrituikuan: 0,
chenghaoList: [],
// 交互控制
inviteCode: '',
lastRefreshTime: 0,
canRefresh: true,
},
onLoad(options) {
this.initImageUrls();
this.checkShangjiaStatus();
const { inviteCode } = options || {};
if (inviteCode) {
this.setData({ inviteCode });
setTimeout(() => this.handleInviteCodeWithLoginCheck(inviteCode), 500);
}
if (!app.globalData.hasShownPopupOnColdStart) {
app.globalData.hasShownPopupOnColdStart = true;
setTimeout(() => popupService.checkAndShow(this, 'shangjiaduan'), 300);
}
},
onReady() {
if (isCenterPageActive(this, 'isShangjia', 'shangjiastatus')) {
ensureRoleOnCenterPage(this, 'shangjia');
}
},
onShow() {
this.registerNotificationComponent();
if (isCenterPageActive(this, 'isShangjia', 'shangjiastatus')) {
if (!this.data.isShangjia) this.setData({ isShangjia: true });
ensureRoleOnCenterPage(this, 'shangjia');
this.refreshShangjiaInfo();
}
},
onHide() {
const popupComp = this.selectComponent('#popupNotice');
popupComp?.cleanup?.();
},
// 图片路径初始化
initImageUrls() {
const ossBase = app.globalData.ossImageUrl || '';
const imgDir = `${ossBase}beijing/shangjiaduan/`;
this.setData({
imgUrls: {
pageBg: `${imgDir}page_bg.png`,
avatarCardBg: `${imgDir}avatar_card_bg.png`,
assetCardBg: `${imgDir}asset_card_bg.png`,
statCardBg: `${imgDir}stat_card_bg.png`,
funcItemBg: `${imgDir}func_item_bg.png`,
primaryFuncBg: `${imgDir}primary_func_bg.png`,
highlightFuncBg: `${imgDir}highlight_func_bg.png`,
iconRelease: `${imgDir}icon_release.png`,
iconFast: `${imgDir}icon_fast.png`,
iconOrders: `${imgDir}icon_orders.png`,
iconService: `${imgDir}icon_service.png`,
iconPunish: `${imgDir}icon_punish.png`,
iconRank: `${imgDir}icon_rank.png`,
iconRecharge: `${imgDir}icon_recharge.png`,
iconWithdraw: `${imgDir}icon_withdraw.png`,
iconRefresh: `${imgDir}icon_refresh.png`,
iconCopy: `${imgDir}icon_copy.png`,
avatarFrame: `${imgDir}avatar_frame.png`,
iconClear: `${ossBase}beijing/tubiao/grzx_qingchu.jpg`,
iconSwitch: '/images/_exit.png',
}
});
},
// 商家状态检查
checkShangjiaStatus() {
try {
const shangjiastatus = wx.getStorageSync('shangjiastatus');
const uid = wx.getStorageSync('uid');
if (isRoleStatusActive(shangjiastatus)) {
this.setData({ isShangjia: true, uid: uid || '' });
this.loadAvatar();
this.getShangjiaInfo();
ensureRoleOnCenterPage(this, 'shangjia');
} else {
this.setData({ isShangjia: false });
}
} catch (error) {
console.error('读取商家状态失败', error);
this.setData({ isShangjia: false });
}
},
loadAvatar() {
const { ossImageUrl = '', morentouxiang = 'avatar/default.jpg' } = app.globalData || {};
const touxiang = wx.getStorageSync('touxiang') || '';
let avatarUrl = '';
if (touxiang) {
avatarUrl = ossImageUrl + (touxiang.startsWith('/') ? touxiang : '/' + touxiang);
} else {
avatarUrl = ossImageUrl + (morentouxiang.startsWith('/') ? morentouxiang : '/' + morentouxiang);
}
this.setData({ avatarUrl });
},
// 获取商家信息
async getShangjiaInfo() {
this.setData({ isLoading: true });
try {
const res = await request({ url: '/yonghu/shangjiaxinxi', method: 'POST' });
if (res?.data?.code === 200) {
const data = res.data.data;
// 更新全局缓存
app.globalData.shangjia = data;
wx.setStorageSync('shangjiastatus', 1);
const chenghaoList = data.chenghao_list || [];
// 字段映射
this.setData({
nicheng: data.nicheng || '',
sjyue: data.sjyue || '0.00',
fabu: data.fadanzong || 0,
tuikuan: data.tuikuanzong || 0,
jinriliushui: data.riliushui || '0.00',
jinyueliushui: data.yueliushui || '0.00',
jinridingdan: data.jinripaidan || 0,
jinrituikuan: data.jinrituikuan || 0,
chenghaoList: chenghaoList,
isLoading: false,
});
if (this.data.isAutoRegistering) {
this.setData({ isAutoRegistering: false });
wx.showToast({ title: '商家注册成功', icon: 'success' });
}
} else {
throw new Error(res?.data?.msg || '获取商家信息失败');
}
} catch (error) {
console.error('获取商家信息失败', error);
this.setData({ isLoading: false });
wx.showToast({ title: error.message || '加载失败', icon: 'none' });
}
},
refreshShangjiaInfo() {
const now = Date.now();
if (!this.data.canRefresh || now - this.data.lastRefreshTime < 3000) {
wx.showToast({ title: '操作过快', icon: 'none' });
return;
}
this.setData({ lastRefreshTime: now, canRefresh: false });
this.getShangjiaInfo();
setTimeout(() => this.setData({ canRefresh: true }), 3000);
},
// 邀请码注册
handleInviteCodeWithLoginCheck(inviteCode) {
const token = wx.getStorageSync('token');
const uid = wx.getStorageSync('uid');
if (!token || !uid) {
this.setData({ inviteCode });
ensureLogin({ silent: false, page: this })
.then(() => {
if (!this.data.isShangjia) {
wx.showLoading({ title: '商家注册中...', mask: true });
this.setData({ isAutoRegistering: true });
this.onRegister();
}
})
.catch(() => {});
} else {
if (!this.data.isShangjia) {
wx.showLoading({ title: '商家注册中...', mask: true });
this.setData({ isAutoRegistering: true });
this.onRegister();
} else {
wx.showToast({ title: '您已是商家', icon: 'success' });
ensureRoleOnCenterPage(this, 'shangjia');
}
}
},
async onRegister() {
const { inviteCode } = this.data;
if (!inviteCode) {
wx.showToast({ title: '请输入邀请码', icon: 'none' });
return;
}
if (inviteCode.length > 100) {
wx.showToast({ title: '邀请码不能超过100字符', icon: 'none' });
return;
}
this.setData({ isLoading: true });
try {
const res = await request({
url: '/yonghu/shangjiahuce',
method: 'POST',
data: { inviteCode }
});
if (res?.data?.code === 200) {
const data = res.data.data || {};
syncRoleStatuses(data);
syncProfileFields(data);
if (!Object.prototype.hasOwnProperty.call(data, 'shangjiastatus')) {
wx.setStorageSync('shangjiastatus', 1);
app.globalData.shangjiastatus = 1;
}
app.globalData.shangjia = data;
const chenghaoList = data.chenghao_list || [];
this.setData({
isShangjia: true,
nicheng: data.nicheng || '',
sjyue: data.sjyue || '0.00',
fabu: data.fabu || 0,
tuikuan: data.tuikuan || 0,
jinriliushui: data.jinriliushui || '0.00',
jinyueliushui: data.jinyueliushui || '0.00',
jinridingdan: data.jinridingdan || 0,
chenghaoList: chenghaoList,
isLoading: false,
isAutoRegistering: false,
});
this.loadAvatar();
ensureRoleOnCenterPage(this, 'shangjia');
lockPrimaryRole('shangjia');
wx.showToast({ title: '商家注册成功', icon: 'success' });
} else {
throw new Error(res?.data?.msg || '注册失败');
}
} catch (error) {
console.error('商家注册失败', error);
this.setData({ isLoading: false, isAutoRegistering: false });
wx.showToast({ title: error.message, icon: 'error' });
}
},
// 辅助功能
registerNotificationComponent() {
const notificationComp = this.selectComponent('#global-notification');
if (notificationComp?.showNotification) {
app.globalData.globalNotification = {
show: (data) => notificationComp.showNotification(data),
hide: () => notificationComp.hideNotification()
};
}
},
copyUid() {
if (!this.data.uid) {
wx.showToast({ title: 'UID不存在', icon: 'none' });
return;
}
wx.setClipboardData({
data: this.data.uid,
success: () => wx.showToast({ title: 'UID已复制', icon: 'success' }),
fail: () => wx.showToast({ title: '复制失败', icon: 'error' })
});
},
previewAvatar() {
if (this.data.avatarUrl) {
wx.previewImage({ urls: [this.data.avatarUrl] });
}
},
// 页面跳转
goToPaiDan() { wx.navigateTo({ url: '/pages/merchant-dispatch/merchant-dispatch' }); },
goToJiSuPaiDan() {
wx.vibrateShort({ type: 'medium' });
wx.navigateTo({ url: '/pages/express-order/express-order' });
},
goToMyOrders() { wx.navigateTo({ url: '/pages/merchant-orders/merchant-orders' }); },
goToRecharge() { wx.navigateTo({ url: '/pages/merchant-recharge/merchant-recharge' }); },
goToWithdraw() { wx.navigateTo({ url: '/pages/withdraw/withdraw' }); },
goToRanking() { wx.navigateTo({ url: '/pages/fighter-rank/fighter-rank?type=shangjia' }); },
goToMessages() { wx.navigateTo({ url: '/pages/merchant-msg/merchant-msg' }); },
goToKefu() {
const { kefuConfig } = app.globalData;
if (kefuConfig?.link && kefuConfig?.enterpriseId) {
wx.openCustomerServiceChat({
extInfo: { url: kefuConfig.link },
corpId: kefuConfig.enterpriseId,
fail: () => wx.showToast({ title: '客服暂不可用', icon: 'none' })
});
} else {
wx.showToast({ title: '客服配置未加载', icon: 'none' });
}
},
clearCache() {
wx.showModal({
title: '清除缓存',
content: '将清除所有登录与身份数据,并回到点单端,确定继续?',
confirmText: '确定',
cancelText: '取消',
success: (r) => {
if (r.confirm) clearCacheAndEnterNormal(this);
},
});
},
switchToNormal() {
lockPrimaryRole('normal');
wx.reLaunch({ url: '/pages/mine/mine' });
},
});