chore: 抢单端UI回退前备份当前完整工作区

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-06-29 17:59:23 +08:00
parent 6e2f7bc39f
commit e8fb32c1fe
53 changed files with 3410 additions and 1065 deletions

View File

@@ -10,6 +10,7 @@ import { reconnectForRole } from '../../utils/role-tab-bar.js';
import { ensurePhoneAuth } from '../../utils/phone-auth.js';
import { fetchGonggaoLunbo, isGonggaoCacheValid } from '../../utils/display-config.js';
import { checkPenaltyForGrab } from '../../utils/grab-order-gate.js';
import { fetchMyZhidingOrders, submitZhidingResponse, processZhidingList, filterZhidingBannerList, ZHIDING_HF_MAP } from '../../utils/zhiding-order.js';
Page({
data: {
@@ -58,9 +59,25 @@ Page({
examRequired: false,
examPassed: false,
_examChecked: false,
myZhidingList: [],
highlightOrderId: '',
myZhidingCount: 0,
defaultAvatarUrl: '',
showZhidingDetail: false,
zhidingDetailOrder: null,
showLaterModal: false,
laterOrderId: '',
laterNote: '',
},
async onLoad() {
async onLoad(options) {
const defAvatar = getDefaultAvatarUrl(app);
const highlight = (options && options.highlight) ? String(options.highlight) : '';
this.setData({ defaultAvatarUrl: defAvatar, highlightOrderId: highlight });
if (options && options.highlight) {
this._pendingHighlight = String(options.highlight);
}
if (app.globalData._acceptOrderSessionReady && app.globalData._acceptOrderPageCache) {
const cache = { ...app.globalData._acceptOrderPageCache };
this.data.shangpinleixing = cache.shangpinleixing || [];
@@ -90,6 +107,7 @@ Page({
}
this.persistPageCache();
this._skipShowRefresh = true;
await this.loadMyZhidingOrders(true);
return;
}
@@ -97,6 +115,7 @@ Page({
const banner = await this.loadGonggaoAndLunbo(false);
await this.syncDashouProfileFromServer();
await this.loadShangpinLeixing(true, false, false);
await this.loadMyZhidingOrders(true);
this.persistPageCache(banner);
app.globalData._acceptOrderSessionReady = true;
@@ -149,6 +168,16 @@ Page({
await this.checkExamStatus(false);
this.setData({ defaultAvatarUrl: getDefaultAvatarUrl(app) });
await this.loadMyZhidingOrders(true);
const hl = app.globalData._acceptOrderHighlight;
if (hl) {
app.globalData._acceptOrderHighlight = '';
this.setData({ highlightOrderId: hl });
await this.loadMyZhidingOrders(true);
}
if (this._skipShowRefresh) {
this._skipShowRefresh = false;
return;
@@ -172,6 +201,7 @@ Page({
await this.loadDingdanList(true, true);
await this.loadBankuaiBiaoqian();
}
await this.loadMyZhidingOrders(true);
this.loadGlobalStatus();
this.persistPageCache(banner);
} catch (e) {
@@ -464,8 +494,11 @@ Page({
}
const isZhiding = item.zhuangtai === 7;
const uid = this.data.uid;
const isMyZhiding = isZhiding && uid && String(item.zhiding_uid) === String(uid);
let zhidingAvatar = '';
const defAvatar = getDefaultAvatarUrl(app);
let zhidingAvatar = defAvatar;
if (item.zhiding_avatar) {
zhidingAvatar = !item.zhiding_avatar.startsWith('http')
? ossUrl + item.zhiding_avatar
@@ -493,6 +526,11 @@ Page({
leixing_icon_url: fullTupianUrl,
shangjia_avatar_full: shangjiaAvatar,
isZhiding: isZhiding,
isMyZhiding,
isHighlighted: this.data.highlightOrderId && item.dingdan_id === this.data.highlightOrderId,
zhiding_hf: item.zhiding_hf,
zhiding_hf_text: item.zhiding_hf_text || ZHIDING_HF_MAP[item.zhiding_hf] || '',
zhiding_dhj_sm: item.zhiding_dhj_sm || '',
isPingtai: item.pingtai == 1,
isShangjia: item.pingtai == 2,
zhiding_avatar_full: zhidingAvatar,
@@ -684,6 +722,7 @@ Page({
);
that.setData({ dingdanList: newList });
that.persistPageCache();
that.loadMyZhidingOrders(true);
} else {
wx.showToast({
title: qiangdanRes.data.msg || '抢单失败',
@@ -714,6 +753,125 @@ Page({
});
},
async loadMyZhidingOrders(silent = false) {
if (!this.data.uid && !wx.getStorageSync('uid')) return;
try {
const raw = await fetchMyZhidingOrders();
const uid = this.data.uid || wx.getStorageSync('uid');
const highlight = this.data.highlightOrderId || this._pendingHighlight || '';
const list = filterZhidingBannerList(processZhidingList(raw, app, uid, highlight));
this.setData({ myZhidingList: list, myZhidingCount: list.length });
if (highlight && list.some((o) => o.dingdan_id === highlight)) {
this.setData({ highlightOrderId: highlight });
this._pendingHighlight = '';
}
} catch (e) {
if (!silent) console.warn('loadMyZhidingOrders', e);
}
},
openZhidingDetail(e) {
const item = e.currentTarget.dataset.item;
if (!item) return;
this.setData({ showZhidingDetail: true, zhidingDetailOrder: item });
},
closeZhidingDetail() {
this.setData({ showZhidingDetail: false, zhidingDetailOrder: null });
},
async onZhidingReject(e) {
const item = e.currentTarget.dataset.item;
if (!item) return;
wx.showModal({
title: '确认婉拒',
content: '婉拒后订单将退回抢单大厅,确定不想接此单吗?',
confirmText: '不想接',
confirmColor: '#e64340',
success: async (res) => {
if (!res.confirm) return;
wx.showLoading({ title: '提交中...', mask: true });
try {
const body = await submitZhidingResponse(item.dingdan_id, 2);
wx.hideLoading();
if (body && (body.code === 200 || body.code === 0)) {
wx.showToast({ title: body.msg || '已婉拒', icon: 'none' });
this.closeZhidingDetail();
await this.loadMyZhidingOrders(true);
await this.loadDingdanList(true, true);
} else {
wx.showToast({ title: body?.msg || '操作失败', icon: 'none' });
}
} catch (err) {
wx.hideLoading();
wx.showToast({ title: '网络错误', icon: 'none' });
}
},
});
},
onZhidingLater(e) {
const item = e.currentTarget.dataset.item;
if (!item) return;
this.setData({
showZhidingDetail: false,
zhidingDetailOrder: null,
showLaterModal: true,
laterOrderId: item.dingdan_id,
laterNote: item.zhiding_dhj_sm || '',
});
},
closeLaterModal() {
this.setData({ showLaterModal: false, laterOrderId: '', laterNote: '' });
},
onLaterNoteInput(e) {
this.setData({ laterNote: e.detail.value });
},
async confirmZhidingLater() {
const { laterOrderId, laterNote } = this.data;
if (!laterNote.trim()) {
wx.showToast({ title: '请填写预计接待时间', icon: 'none' });
return;
}
wx.showLoading({ title: '提交中...', mask: true });
try {
const body = await submitZhidingResponse(laterOrderId, 3, laterNote.trim());
wx.hideLoading();
if (body && (body.code === 200 || body.code === 0)) {
const note = laterNote.trim();
wx.showToast({ title: `已记录:${note}`, icon: 'none', duration: 3500 });
this.closeLaterModal();
this.closeZhidingDetail();
await this.loadMyZhidingOrders(true);
await this.loadDingdanList(true, true);
} else {
wx.showToast({ title: body?.msg || '操作失败', icon: 'none' });
}
} catch (e) {
wx.hideLoading();
wx.showToast({ title: '网络错误', icon: 'none' });
}
},
async onZhidingAccept(e) {
const item = e.currentTarget.dataset.item;
if (!item) return;
wx.showLoading({ title: '处理中...', mask: true });
try {
await submitZhidingResponse(item.dingdan_id, 1);
wx.hideLoading();
} catch (e) {
wx.hideLoading();
}
const processed = this.processDingdanItem(item);
this.onQiangdanTap({ currentTarget: { dataset: { item: processed } } });
},
noop() {},
onReachBottom() {
if (this.data.isLoading || this.data.isLoadingMore) return;
if (this.data.hasMore && !this.data.isLoading && this.data.xuanzhongLeixingId) {
@@ -744,6 +902,7 @@ Page({
await this.loadBankuaiBiaoqian();
await this.loadDingdanList(true);
}
await this.loadMyZhidingOrders(true);
this.loadGlobalStatus();
this.persistPageCache(banner);
} catch (e) {