- wx:if 改为 hidden,避免 DOM 销毁重建导致的闪烁 - statusBarHeight 去掉 || 20 fallback,避免 header 高度跳变 - empty-card 加 min-height 占位,减少加载到内容的布局跳动 - 修复 sed 替换导致的运算优先级问题(!! 和 !status ===) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
88 lines
3.0 KiB
JavaScript
88 lines
3.0 KiB
JavaScript
/**
|
|
* 管理层仪表盘页面
|
|
* 职责:展示待审批和待发厂订单数量统计,以及最近订单列表。
|
|
*/
|
|
|
|
function mapOrderStatus(status) {
|
|
var app = getApp();
|
|
return app.mapOrderStatus(status);
|
|
}
|
|
|
|
function getStatusBadge(status) {
|
|
var map = {
|
|
pending_approve: "badge-orange", cancel_pending: "badge-orange",
|
|
approved: "badge-green", pending_factory: "badge-blue",
|
|
pending_driver: "badge-blue", accepted: "badge-blue",
|
|
picked_up: "badge-blue", delivered: "badge-green",
|
|
rejected: "badge-red", canceled: "badge-red",
|
|
};
|
|
return map[status] || "badge-gray";
|
|
}
|
|
|
|
Page({
|
|
data: {
|
|
statusBarHeight: 20,
|
|
loading: true,
|
|
message: "",
|
|
summary: { pendingApproveCount: 0, pendingFactoryCount: 0, pendingDriverCount: 0 },
|
|
recentOrders: [],
|
|
},
|
|
|
|
onPullDownRefresh: function () {
|
|
this.loadDashboard().then(function () { wx.stopPullDownRefresh(); });
|
|
},
|
|
|
|
async onShow() {
|
|
var app = getApp();
|
|
this.setData({ statusBarHeight: app.globalData.statusBarHeight });
|
|
var tab = this.getTabBar();
|
|
if (tab) {
|
|
tab.setData({ selected: 0 });
|
|
tab.updateRole(app.globalData.userRole);
|
|
}
|
|
await this.loadDashboard();
|
|
},
|
|
|
|
async loadDashboard() {
|
|
var app = getApp();
|
|
this.setData({ loading: true, message: "" });
|
|
try {
|
|
var results = await Promise.all([
|
|
app.request({ url: "/api/orders?order_status=pending_approve&page_no=1&page_size=50", method: "GET" }),
|
|
app.request({ url: "/api/orders?order_status=pending_factory&page_no=1&page_size=50", method: "GET" }),
|
|
]);
|
|
var pendingList = results[0].list || [];
|
|
var factoryList = results[1].list || [];
|
|
var recentOrders = pendingList.concat(factoryList).slice(0, 8).map(function (item) {
|
|
return {
|
|
orderId: item.order_id,
|
|
orderNo: item.order_no,
|
|
customerName: item.customer_name,
|
|
statusText: mapOrderStatus(item.order_status),
|
|
badgeClass: getStatusBadge(item.order_status),
|
|
amount: Number(item.sale_price_total || 0).toFixed(2),
|
|
createdAt: item.created_at ? item.created_at.slice(0, 10) : "",
|
|
};
|
|
});
|
|
this.setData({
|
|
summary: { pendingApproveCount: pendingList.length, pendingFactoryCount: factoryList.length, pendingDriverCount: 0 },
|
|
recentOrders: recentOrders,
|
|
});
|
|
} catch (error) {
|
|
this.setData({ message: error.message || "加载失败" });
|
|
} finally {
|
|
this.setData({ loading: false });
|
|
}
|
|
},
|
|
|
|
goApproveList: function () { wx.switchTab({ url: "/pages/manager/approve-list/approve-list" }); },
|
|
goSupplierText: function () { wx.navigateTo({ url: "/pages/manager/supplier-text/supplier-text" }); },
|
|
goTaskCreate: function () { wx.navigateTo({ url: "/pages/manager/task-create/task-create" }); },
|
|
goOrderList: function () { wx.switchTab({ url: "/pages/manager/order-list/order-list" }); },
|
|
|
|
handleOrderTap: function (event) {
|
|
var id = event.currentTarget.dataset.id;
|
|
wx.navigateTo({ url: "/pages/manager/approve-detail/approve-detail?id=" + id });
|
|
},
|
|
});
|