Initial commit - full huishou project

This commit is contained in:
jiapengyu
2026-07-27 14:07:26 +08:00
commit 60790ad1b3
39127 changed files with 5989265 additions and 0 deletions
+126
View File
@@ -0,0 +1,126 @@
"use strict";
const common_vendor = require("../../../common/vendor.js");
const stores_order = require("../../../stores/order.js");
const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
__name: "list",
setup(__props) {
const orderStore = stores_order.useOrderStore();
const searchKeyword = common_vendor.ref("");
const currentFilter = common_vendor.ref("all");
const filters = [
{ label: "全部", value: "all" },
{ label: "待处理", value: "pending" },
{ label: "已完成", value: "completed" },
{ label: "已取消", value: "cancelled" }
];
const filteredOrders = common_vendor.computed(() => {
let orders = orderStore.orders;
if (currentFilter.value !== "all") {
orders = orders.filter((order) => order.status === currentFilter.value);
}
if (searchKeyword.value) {
const keyword = searchKeyword.value.toLowerCase();
orders = orders.filter(
(order) => order.id.toLowerCase().includes(keyword) || order.name.toLowerCase().includes(keyword)
);
}
return [...orders].reverse();
});
const getStatusText = (status) => {
const statusMap = {
pending: "待处理",
completed: "已完成",
cancelled: "已取消"
};
return statusMap[status] || status;
};
const goToDetail = (id) => {
common_vendor.index.navigateTo({ url: `/pages/order/detail?id=${id}` });
};
const confirmOrder = (id) => {
common_vendor.index.showModal({
title: "确认订单",
content: "确定要确认此订单吗?",
success: (res) => {
if (res.confirm) {
orderStore.updateOrderStatus(id, "completed");
common_vendor.index.showToast({ title: "已确认", icon: "success" });
}
}
});
};
const cancelOrder = (id) => {
common_vendor.index.showModal({
title: "取消订单",
content: "确定要取消此订单吗?",
success: (res) => {
if (res.confirm) {
orderStore.updateOrderStatus(id, "cancelled");
common_vendor.index.showToast({ title: "已取消", icon: "success" });
}
}
});
};
const goToHome = () => {
common_vendor.index.redirectTo({ url: "/pages/admin/index" });
};
const goToPriceManager = () => {
common_vendor.index.redirectTo({ url: "/pages/admin/price/list" });
};
const goToUserManager = () => {
common_vendor.index.redirectTo({ url: "/pages/admin/user/list" });
};
common_vendor.onMounted(() => {
const isLogin = common_vendor.index.getStorageSync("admin_login");
if (!isLogin) {
common_vendor.index.redirectTo({ url: "/pages/admin/login" });
return;
}
orderStore.loadOrders();
});
return (_ctx, _cache) => {
return common_vendor.e({
a: searchKeyword.value,
b: common_vendor.o(($event) => searchKeyword.value = $event.detail.value),
c: common_vendor.f(filters, (filter, k0, i0) => {
return {
a: common_vendor.t(filter.label),
b: filter.value,
c: currentFilter.value === filter.value ? 1 : "",
d: common_vendor.o(($event) => currentFilter.value = filter.value, filter.value)
};
}),
d: common_vendor.f(filteredOrders.value, (order, k0, i0) => {
return common_vendor.e({
a: common_vendor.t(order.id),
b: common_vendor.t(getStatusText(order.status)),
c: common_vendor.n(order.status),
d: common_vendor.t(order.name),
e: common_vendor.t(order.weight ? order.weight + "kg" : order.count ? order.count + "个" : "-"),
f: common_vendor.t(order.unitPrice),
g: common_vendor.t(order.unit === "kg" ? "kg" : "个"),
h: common_vendor.t(order.createTime),
i: common_vendor.t(order.amount.toFixed(2)),
j: order.status === "pending"
}, order.status === "pending" ? {
k: common_vendor.o(($event) => confirmOrder(order.id), order.id)
} : {}, {
l: order.status !== "cancelled"
}, order.status !== "cancelled" ? {
m: common_vendor.o(($event) => cancelOrder(order.id), order.id)
} : {}, {
n: order.id,
o: common_vendor.o(($event) => goToDetail(order.id), order.id)
});
}),
e: filteredOrders.value.length === 0
}, filteredOrders.value.length === 0 ? {} : {}, {
f: common_vendor.o(goToHome),
g: common_vendor.o(goToPriceManager),
h: common_vendor.o(goToUserManager)
});
};
}
});
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-cdbe62fb"]]);
wx.createPage(MiniProgramPage);
+5
View File
@@ -0,0 +1,5 @@
{
"navigationStyle": "custom",
"navigationBarTitleText": "订单管理",
"usingComponents": {}
}
+1
View File
@@ -0,0 +1 @@
<view class="admin-container data-v-cdbe62fb"><view class="admin-header data-v-cdbe62fb"><view class="header-left data-v-cdbe62fb"><text class="header-title data-v-cdbe62fb">订单管理</text><text class="header-subtitle data-v-cdbe62fb">全部订单</text></view></view><view class="search-bar data-v-cdbe62fb"><view class="search-input-wrap data-v-cdbe62fb"><text class="search-icon data-v-cdbe62fb">🔍</text><input type="text" class="search-input data-v-cdbe62fb" placeholder="搜索订单号或品类" value="{{a}}" bindinput="{{b}}"/></view></view><view class="filter-bar data-v-cdbe62fb"><view wx:for="{{c}}" wx:for-item="filter" wx:key="b" class="{{['filter-item', 'data-v-cdbe62fb', filter.c && 'active']}}" bindtap="{{filter.d}}">{{filter.a}}</view></view><view class="order-list data-v-cdbe62fb"><view wx:for="{{d}}" wx:for-item="order" wx:key="n" class="order-card data-v-cdbe62fb" bindtap="{{order.o}}"><view class="order-header data-v-cdbe62fb"><view class="order-id data-v-cdbe62fb">订单? {{order.a}}</view><view class="{{['order-status', 'data-v-cdbe62fb', order.c]}}">{{order.b}}</view></view><view class="order-info data-v-cdbe62fb"><view class="info-row data-v-cdbe62fb"><text class="info-label data-v-cdbe62fb">品类:</text><text class="info-value data-v-cdbe62fb">{{order.d}}</text></view><view class="info-row data-v-cdbe62fb"><text class="info-label data-v-cdbe62fb">重量:</text><text class="info-value data-v-cdbe62fb">{{order.e}}</text></view><view class="info-row data-v-cdbe62fb"><text class="info-label data-v-cdbe62fb">单价:</text><text class="info-value data-v-cdbe62fb">¥{{order.f}}/{{order.g}}</text></view><view class="info-row data-v-cdbe62fb"><text class="info-label data-v-cdbe62fb">时间:</text><text class="info-value data-v-cdbe62fb">{{order.h}}</text></view></view><view class="order-footer data-v-cdbe62fb"><text class="total-amount data-v-cdbe62fb">¥{{order.i}}</text><view class="order-actions data-v-cdbe62fb"><view wx:if="{{order.j}}" class="action-btn confirm data-v-cdbe62fb" catchtap="{{order.k}}"> 确认 </view><view wx:if="{{order.l}}" class="action-btn cancel data-v-cdbe62fb" catchtap="{{order.m}}"> 取消 </view></view></view></view></view><view wx:if="{{e}}" class="empty-state data-v-cdbe62fb"><text class="empty-icon data-v-cdbe62fb">📭</text><text class="empty-text data-v-cdbe62fb">暂无订单</text></view><view class="tab-bar data-v-cdbe62fb"><view class="tab-item data-v-cdbe62fb" bindtap="{{f}}"><text class="tab-icon data-v-cdbe62fb">🏠</text><text class="tab-text data-v-cdbe62fb">首页</text></view><view class="tab-item active data-v-cdbe62fb"><text class="tab-icon data-v-cdbe62fb">📋</text><text class="tab-text data-v-cdbe62fb">订单</text></view><view class="tab-item data-v-cdbe62fb" bindtap="{{g}}"><text class="tab-icon data-v-cdbe62fb">💰</text><text class="tab-text data-v-cdbe62fb">价格</text></view><view class="tab-item data-v-cdbe62fb" bindtap="{{h}}"><text class="tab-icon data-v-cdbe62fb">👤</text><text class="tab-text data-v-cdbe62fb">用户</text></view></view></view>
+189
View File
@@ -0,0 +1,189 @@
.admin-container.data-v-cdbe62fb {
min-height: 100vh;
background: #f5f7fa;
padding-bottom: 120rpx;
}
.admin-header.data-v-cdbe62fb {
background: linear-gradient(135deg, #3366ff 0%, #254edb 100%);
padding: 48rpx 32rpx;
}
.header-left.data-v-cdbe62fb {
color: #fff;
}
.header-title.data-v-cdbe62fb {
font-size: 40rpx;
font-weight: 700;
display: block;
}
.header-subtitle.data-v-cdbe62fb {
font-size: 24rpx;
opacity: 0.8;
margin-top: 4rpx;
}
.search-bar.data-v-cdbe62fb {
padding: 24rpx 32rpx;
}
.search-input-wrap.data-v-cdbe62fb {
display: flex;
align-items: center;
background: #fff;
border-radius: 40rpx;
padding: 0 24rpx;
height: 72rpx;
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
}
.search-icon.data-v-cdbe62fb {
font-size: 28rpx;
margin-right: 16rpx;
}
.search-input.data-v-cdbe62fb {
flex: 1;
font-size: 28rpx;
}
.filter-bar.data-v-cdbe62fb {
display: flex;
gap: 16rpx;
padding: 0 32rpx 24rpx;
overflow-x: auto;
}
.filter-item.data-v-cdbe62fb {
padding: 12rpx 28rpx;
background: #fff;
border-radius: 24rpx;
font-size: 26rpx;
color: #666;
white-space: nowrap;
}
.filter-item.active.data-v-cdbe62fb {
background: #3366ff;
color: #fff;
}
.order-list.data-v-cdbe62fb {
padding: 0 32rpx;
}
.order-card.data-v-cdbe62fb {
background: #fff;
border-radius: 16rpx;
padding: 24rpx;
margin-bottom: 24rpx;
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
}
.order-header.data-v-cdbe62fb {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20rpx;
padding-bottom: 16rpx;
border-bottom: 1rpx solid #f0f0f0;
}
.order-id.data-v-cdbe62fb {
font-size: 26rpx;
color: #666;
}
.order-status.data-v-cdbe62fb {
font-size: 22rpx;
padding: 6rpx 16rpx;
border-radius: 20rpx;
}
.order-status.pending.data-v-cdbe62fb {
background: #fff3e0;
color: #f59e0b;
}
.order-status.completed.data-v-cdbe62fb {
background: #dcfce7;
color: #3366ff;
}
.order-status.cancelled.data-v-cdbe62fb {
background: #fef2f2;
color: #ef4444;
}
.order-info.data-v-cdbe62fb {
margin-bottom: 20rpx;
}
.info-row.data-v-cdbe62fb {
display: flex;
margin-bottom: 12rpx;
}
.info-row.data-v-cdbe62fb:last-child {
margin-bottom: 0;
}
.info-label.data-v-cdbe62fb {
font-size: 26rpx;
color: #999;
width: 100rpx;
}
.info-value.data-v-cdbe62fb {
font-size: 26rpx;
color: #333;
}
.order-footer.data-v-cdbe62fb {
display: flex;
justify-content: space-between;
align-items: center;
padding-top: 16rpx;
border-top: 1rpx solid #f0f0f0;
}
.total-amount.data-v-cdbe62fb {
font-size: 32rpx;
font-weight: 700;
color: #3366ff;
}
.order-actions.data-v-cdbe62fb {
display: flex;
gap: 16rpx;
}
.action-btn.data-v-cdbe62fb {
padding: 12rpx 28rpx;
border-radius: 24rpx;
font-size: 24rpx;
}
.action-btn.confirm.data-v-cdbe62fb {
background: #3366ff;
color: #fff;
}
.action-btn.cancel.data-v-cdbe62fb {
background: #f5f5f5;
color: #666;
}
.empty-state.data-v-cdbe62fb {
display: flex;
flex-direction: column;
align-items: center;
padding: 100rpx 0;
}
.empty-icon.data-v-cdbe62fb {
font-size: 96rpx;
margin-bottom: 24rpx;
}
.empty-text.data-v-cdbe62fb {
font-size: 28rpx;
color: #999;
}
.tab-bar.data-v-cdbe62fb {
position: fixed;
bottom: 0;
left: 0;
right: 0;
height: 100rpx;
background: #fff;
display: flex;
box-shadow: 0 -4rpx 12rpx rgba(0, 0, 0, 0.05);
}
.tab-item.data-v-cdbe62fb {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.tab-item.active .tab-icon.data-v-cdbe62fb, .tab-item.active .tab-text.data-v-cdbe62fb {
color: #3366ff;
}
.tab-icon.data-v-cdbe62fb {
font-size: 36rpx;
}
.tab-text.data-v-cdbe62fb {
font-size: 22rpx;
color: #999;
margin-top: 4rpx;
}