368 lines
12 KiB
JavaScript
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' });
|
|
},
|
|
}); |