Files
Wechat/pages/merchant/merchant.js

289 lines
8.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.
// pages/shangjiazhongxin/shangjiiazhongxin.js
import { createPage, ensureRoleOnCenterPage, lockPrimaryRole, parseSceneOptions, request } from '../../utils/base-page.js';
import { ensureLogin } from '../../utils/login.js';
const app = getApp();
Page(createPage({
data: {
// 图片资源
imgUrls: {
pageBg: '',
avatarCardBg: '',
assetCardBg: '',
statCardBg: '',
funcItemBg: '',
primaryFuncBg: '',
highlightFuncBg: '',
iconRelease: '',
iconFast: '',
iconOrders: '',
iconService: '',
iconPunish: '',
iconRank: '',
iconRecharge: '',
iconWithdraw: '',
iconRefresh: '',
iconCopy: '',
avatarFrame: '',
iconClear: '',
},
// 商家状态
isShangjia: 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: '',
pendingCount: 0,
punishPending: 0,
statusBar: 20,
navBar: 44,
},
onLoad(options) {
const sys = wx.getSystemInfoSync();
this.setData({
statusBar: sys.statusBarHeight || 20,
navBar: (sys.statusBarHeight || 20) + 44,
});
const parsed = parseSceneOptions(options);
this.setupImageUrls();
this.checkRoleStatus();
const inviteCode = parsed.inviteCode;
if (inviteCode) {
this.setData({ inviteCode });
setTimeout(() => this.handleInviteCodeWithLoginCheck({
inviteCode,
role: 'shangjia',
statusKey: 'shangjiastatus',
alreadyMsg: '您已是商家',
onNeedLogin: (code) => {
this.setData({ inviteCode: code });
ensureLogin({ silent: false, page: this })
.then(() => {
if (!this.data.isShangjia) {
wx.showLoading({ title: '商家注册中...', mask: true });
this.setData({ isAutoRegistering: true });
this.onRegister();
}
})
.catch(() => {});
},
onAlreadyRegistered: () => {
wx.showToast({ title: '您已是商家', icon: 'success' });
ensureRoleOnCenterPage(this, 'shangjia');
},
}), 500);
}
this.checkColdStartPopup('shangjiaduan');
},
onShow() {
this.registerNotificationComponent();
if (this.data.isShangjia) {
ensureRoleOnCenterPage(this, 'shangjia');
this.refreshShangjiaInfo();
this.loadPendingCount();
this.loadPunishPending();
}
},
// 图片路径初始化
setupImageUrls() {
const ossBase = app.globalData.ossImageUrl || '';
const imgDir = `${ossBase}beijing/shangjiaduan/`;
this.setData({
imgUrls: this.initImageUrls({
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',
})
});
},
// 商家状态检查(覆盖基类 checkRoleStatus增加 getShangjiaInfo 调用)
checkRoleStatus() {
try {
const shangjiastatus = wx.getStorageSync('shangjiastatus');
const uid = wx.getStorageSync('uid');
if (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 });
}
},
// 获取商家信息
async getShangjiaInfo() {
await this.loadData({
url: '/yonghu/shangjiaxinxi',
method: 'POST',
successCode: 200,
errorMsg: '获取商家信息失败',
onSuccess: (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' });
}
},
});
},
refreshShangjiaInfo() {
this.throttledRefresh(() => this.getShangjiaInfo());
},
async loadPendingCount() {
try {
const res = await request({
url: '/dingdan/sjdingdanhq',
method: 'POST',
data: { zhuangtai_list: [8], page: 1, page_size: 1 },
});
if (res && res.data && (res.data.code === 0 || res.data.code === 200)) {
this.setData({ pendingCount: res.data.data.pending_count || 0 });
}
} catch (e) {
console.error('待结算数量失败', e);
}
},
async loadPunishPending() {
try {
const res = await request({
url: '/yonghu/sjcfjlhq',
method: 'POST',
data: { page: 1, page_size: 1, zhuangtai: 0 },
});
if (res && res.data && (res.data.code === 0 || res.data.code === 200)) {
const d = res.data.data || {};
this.setData({ punishPending: d.daichuli_count || d.pending_count || 0 });
}
} catch (e) {
/* 接口字段未定时静默 */
}
},
async onRegister() {
const { inviteCode } = this.data;
await this.registerWithInviteCode({
inviteCode,
apiUrl: '/yonghu/shangjiahuce',
role: 'shangjia',
statusKey: 'shangjiastatus',
successMsg: '商家注册成功',
onSuccess: (userData) => {
app.globalData.shangjia = userData;
const chenghaoList = userData.chenghao_list || [];
this.setData({
isShangjia: true,
nicheng: userData.nicheng || '',
sjyue: userData.sjyue || '0.00',
fabu: userData.fabu || 0,
tuikuan: userData.tuikuan || 0,
jinriliushui: userData.jinriliushui || '0.00',
jinyueliushui: userData.jinyueliushui || '0.00',
jinridingdan: userData.jinridingdan || 0,
chenghaoList: chenghaoList,
isAutoRegistering: false,
});
this.loadAvatar();
ensureRoleOnCenterPage(this, 'shangjia');
lockPrimaryRole('shangjia');
},
});
},
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.redirectTo({ url: '/pages/merchant-orders/merchant-orders' }); },
goToPendingOrders() { wx.redirectTo({ url: '/pages/merchant-orders/merchant-orders' }); },
goToHome() { wx.redirectTo({ url: '/pages/merchant-home/merchant-home' }); },
goToKefuKey() { wx.navigateTo({ url: '/pages/merchant-kefu-key/merchant-kefu-key' }); },
goToKefuList() { wx.navigateTo({ url: '/pages/merchant-kefu-list/merchant-kefu-list' }); },
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' }); },
}, {
roleConfig: {
role: 'shangjia',
statusKey: 'shangjiastatus',
dataFlag: 'isShangjia',
pageId: 'shangjiaduan',
apiUrl: '/yonghu/shangjiaxinxi',
},
}));