Initial commit

This commit is contained in:
jiapengyu
2026-07-27 13:37:48 +08:00
commit ecba71e2a5
39123 changed files with 5989154 additions and 0 deletions
+64
View File
@@ -0,0 +1,64 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const utils_order = require("../../utils/order.js");
const utils_price = require("../../utils/price.js");
if (!Array) {
const _easycom_uni_icons2 = common_vendor.resolveComponent("uni-icons");
_easycom_uni_icons2();
}
const _easycom_uni_icons = () => "../../node-modules/@dcloudio/uni-ui/lib/uni-icons/uni-icons.js";
if (!Math) {
_easycom_uni_icons();
}
const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
__name: "detail",
setup(__props) {
const order = common_vendor.ref(null);
const goBack = () => {
common_vendor.index.navigateBack();
};
const createNewOrder = () => {
common_vendor.index.switchTab({ url: "/pages/index/index" });
};
common_vendor.onLoad(async (options) => {
if (options == null ? void 0 : options.orderId) {
const data = common_vendor.index.getStorageSync("orders");
const orders = data ? JSON.parse(data) : [];
order.value = orders.find((o) => o.orderId === options.orderId) || null;
}
});
return (_ctx, _cache) => {
var _a, _b, _c, _d, _e, _f, _g;
return {
a: common_vendor.t((_a = order.value) == null ? void 0 : _a.orderId),
b: common_vendor.t(order.value ? common_vendor.unref(utils_order.formatOrderTime)(order.value.timestamp) : "-"),
c: common_vendor.t(((_b = order.value) == null ? void 0 : _b.status) === "completed" ? "已完成" : ((_c = order.value) == null ? void 0 : _c.status) === "pending" ? "待处理" : "已取消"),
d: common_vendor.n((_d = order.value) == null ? void 0 : _d.status),
e: common_vendor.f((_e = order.value) == null ? void 0 : _e.items, (item, index, i0) => {
return {
a: "5511cfa9-0-" + i0,
b: common_vendor.p({
type: common_vendor.unref(utils_price.getCategoryIcon)(item.category),
size: 40,
color: "#3366ff"
}),
c: common_vendor.t(item.name),
d: common_vendor.t(item.unit === "kg" ? "重量" : "数量"),
e: common_vendor.t(item.weight || item.count),
f: common_vendor.t(item.unit === "kg" ? "kg" : "个"),
g: common_vendor.t(item.unitPrice),
h: common_vendor.t(item.unit === "kg" ? "kg" : "个"),
i: common_vendor.t(item.amount.toFixed(2)),
j: index
};
}),
f: common_vendor.t(((_f = order.value) == null ? void 0 : _f.totalAmount.toFixed(2)) || "0.00"),
g: common_vendor.t(((_g = order.value) == null ? void 0 : _g.totalAmount.toFixed(2)) || "0.00"),
h: common_vendor.o(goBack),
i: common_vendor.o(createNewOrder)
};
};
}
});
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-5511cfa9"]]);
wx.createPage(MiniProgramPage);
+8
View File
@@ -0,0 +1,8 @@
{
"navigationBarTitleText": "订单详情",
"navigationBarBackgroundColor": "#3366ff",
"navigationBarTextStyle": "white",
"usingComponents": {
"uni-icons": "../../node-modules/@dcloudio/uni-ui/lib/uni-icons/uni-icons"
}
}
+1
View File
@@ -0,0 +1 @@
<view class="container data-v-5511cfa9"><view class="detail-card data-v-5511cfa9"><view class="detail-header data-v-5511cfa9"><view class="order-info data-v-5511cfa9"><text class="order-id data-v-5511cfa9">{{a}}</text><text class="order-time data-v-5511cfa9">{{b}}</text></view><view class="{{['order-status', 'data-v-5511cfa9', d]}}">{{c}}</view></view><view class="detail-section data-v-5511cfa9"><view class="section-title data-v-5511cfa9"><text class="section-icon data-v-5511cfa9">📦</text><text class="data-v-5511cfa9">回收物品</text></view><view class="items-list data-v-5511cfa9"><view wx:for="{{e}}" wx:for-item="item" wx:key="j" class="item-card data-v-5511cfa9"><view class="item-left data-v-5511cfa9"><uni-icons wx:if="{{item.b}}" class="item-icon data-v-5511cfa9" u-i="{{item.a}}" bind:__l="__l" u-p="{{item.b}}"/><view class="item-info data-v-5511cfa9"><text class="item-name data-v-5511cfa9">{{item.c}}</text><text class="item-spec data-v-5511cfa9">{{item.d}}: {{item.e}} {{item.f}}</text></view></view><view class="item-right data-v-5511cfa9"><text class="item-price data-v-5511cfa9">¥{{item.g}}/{{item.h}}</text><text class="item-amount data-v-5511cfa9">¥{{item.i}}</text></view></view></view></view><view class="detail-section data-v-5511cfa9"><view class="section-title data-v-5511cfa9"><text class="section-icon data-v-5511cfa9">💰</text><text class="data-v-5511cfa9">金额明细</text></view><view class="amount-detail data-v-5511cfa9"><view class="amount-row data-v-5511cfa9"><text class="amount-label data-v-5511cfa9">物品总价</text><text class="amount-value data-v-5511cfa9">¥{{f}}</text></view><view class="amount-row data-v-5511cfa9"><text class="amount-label data-v-5511cfa9">优惠金额</text><text class="amount-value discount data-v-5511cfa9">-¥0.00</text></view><view class="amount-row total data-v-5511cfa9"><text class="amount-label data-v-5511cfa9">实付金额</text><text class="amount-value data-v-5511cfa9">¥{{g}}</text></view></view></view></view><view class="bottom-actions data-v-5511cfa9"><view class="action-btn secondary data-v-5511cfa9" bindtap="{{h}}"><text class="data-v-5511cfa9">返回</text></view><view class="action-btn primary data-v-5511cfa9" bindtap="{{i}}"><text class="data-v-5511cfa9">继续回收</text></view></view></view>
+175
View File
@@ -0,0 +1,175 @@
.container.data-v-5511cfa9 {
min-height: 100vh;
background: #f5f5f5;
padding: 32rpx;
padding-bottom: 160rpx;
}
.detail-card.data-v-5511cfa9 {
background: #fff;
border-radius: 16rpx;
overflow: hidden;
}
.detail-header.data-v-5511cfa9 {
display: flex;
justify-content: space-between;
align-items: flex-start;
padding: 28rpx 24rpx;
background: linear-gradient(135deg, #3366ff 0%, #254edb 100%);
}
.order-info.data-v-5511cfa9 {
display: flex;
flex-direction: column;
}
.order-id.data-v-5511cfa9 {
font-size: 30rpx;
font-weight: 600;
color: #fff;
margin-bottom: 8rpx;
}
.order-time.data-v-5511cfa9 {
font-size: 24rpx;
color: rgba(255, 255, 255, 0.8);
}
.order-status.data-v-5511cfa9 {
font-size: 24rpx;
padding: 8rpx 20rpx;
border-radius: 20rpx;
background: rgba(255, 255, 255, 0.2);
color: #fff;
}
.detail-section.data-v-5511cfa9 {
padding: 24rpx;
border-bottom: 1rpx solid #f0f0f0;
}
.detail-section.data-v-5511cfa9:last-child {
border-bottom: none;
}
.section-title.data-v-5511cfa9 {
display: flex;
align-items: center;
font-size: 30rpx;
font-weight: 600;
color: #333;
margin-bottom: 20rpx;
}
.section-icon.data-v-5511cfa9 {
margin-right: 12rpx;
}
.items-list.data-v-5511cfa9 {
display: flex;
flex-direction: column;
gap: 16rpx;
}
.item-card.data-v-5511cfa9 {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx;
background: #f9fafb;
border-radius: 12rpx;
}
.item-left.data-v-5511cfa9 {
display: flex;
align-items: center;
flex: 1;
}
.item-icon.data-v-5511cfa9 {
font-size: 44rpx;
margin-right: 16rpx;
}
.item-info.data-v-5511cfa9 {
display: flex;
flex-direction: column;
}
.item-name.data-v-5511cfa9 {
font-size: 30rpx;
font-weight: 600;
color: #333;
margin-bottom: 4rpx;
}
.item-spec.data-v-5511cfa9 {
font-size: 24rpx;
color: #999;
}
.item-right.data-v-5511cfa9 {
display: flex;
flex-direction: column;
align-items: flex-end;
}
.item-price.data-v-5511cfa9 {
font-size: 24rpx;
color: #999;
margin-bottom: 4rpx;
}
.item-amount.data-v-5511cfa9 {
font-size: 32rpx;
font-weight: 600;
color: #3366ff;
}
.amount-detail.data-v-5511cfa9 {
background: #f9fafb;
border-radius: 12rpx;
padding: 20rpx;
}
.amount-row.data-v-5511cfa9 {
display: flex;
justify-content: space-between;
align-items: center;
padding: 12rpx 0;
}
.amount-row.total.data-v-5511cfa9 {
padding-top: 16rpx;
margin-top: 12rpx;
border-top: 1rpx dashed #e5e7eb;
}
.amount-label.data-v-5511cfa9 {
font-size: 28rpx;
color: #666;
}
.total .amount-label.data-v-5511cfa9 {
font-weight: 600;
color: #333;
}
.amount-value.data-v-5511cfa9 {
font-size: 28rpx;
font-weight: 600;
color: #333;
}
.amount-value.discount.data-v-5511cfa9 {
color: #f59e0b;
}
.total .amount-value.data-v-5511cfa9 {
font-size: 36rpx;
color: #3366ff;
}
.bottom-actions.data-v-5511cfa9 {
position: fixed;
bottom: 0;
left: 0;
right: 0;
display: flex;
gap: 24rpx;
padding: 24rpx 32rpx;
padding-bottom: calc(24rpx + env(safe-area-inset-bottom));
background: #fff;
box-shadow: 0 -4rpx 12rpx rgba(0, 0, 0, 0.05);
}
.action-btn.data-v-5511cfa9 {
flex: 1;
border-radius: 40rpx;
padding: 24rpx;
text-align: center;
font-size: 32rpx;
font-weight: 600;
}
.action-btn.secondary.data-v-5511cfa9 {
background: #f3f4f6;
color: #666;
}
.action-btn.primary.data-v-5511cfa9 {
background: linear-gradient(135deg, #3366ff 0%, #254edb 100%);
color: #fff;
}
.action-btn.data-v-5511cfa9:active {
opacity: 0.85;
}
+98
View File
@@ -0,0 +1,98 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const stores_order = require("../../stores/order.js");
const utils_order = require("../../utils/order.js");
const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
__name: "list",
setup(__props) {
const orderStore = stores_order.useOrderStore();
const selectedOrders = common_vendor.ref([]);
const isAllSelected = common_vendor.computed(() => {
return orderStore.orders.length > 0 && selectedOrders.value.length === orderStore.orders.length;
});
const selectedTotalAmount = common_vendor.computed(() => {
return selectedOrders.value.reduce((sum, orderId) => {
const order = orderStore.orders.find((o) => o.id === orderId);
return sum + ((order == null ? void 0 : order.totalAmount) || 0);
}, 0);
});
const toggleSelect = (orderId) => {
const index = selectedOrders.value.indexOf(orderId);
if (index > -1) {
selectedOrders.value.splice(index, 1);
} else {
selectedOrders.value.push(orderId);
}
};
const toggleSelectAll = () => {
if (isAllSelected.value) {
selectedOrders.value = [];
} else {
selectedOrders.value = orderStore.orders.map((o) => o.id);
}
};
const handleDelete = (orderId) => {
common_vendor.index.showModal({
title: "确认删除",
content: "确定要删除这笔订单吗?",
success: async (res) => {
if (res.confirm) {
await orderStore.deleteOrder(orderId);
selectedOrders.value = selectedOrders.value.filter((id) => id !== orderId);
}
}
});
};
const getRegionText = (order) => {
const parts = [];
if (order.city) parts.push(order.city);
if (order.district) parts.push(order.district);
if (order.community) parts.push(order.community);
return parts.join(" > ") || "未选择区域";
};
common_vendor.onMounted(() => {
orderStore.loadOrders();
});
return (_ctx, _cache) => {
return common_vendor.e({
a: common_vendor.unref(orderStore).orders.length > 0
}, common_vendor.unref(orderStore).orders.length > 0 ? {
b: common_vendor.f(common_vendor.unref(orderStore).orders, (order, k0, i0) => {
return common_vendor.e({
a: selectedOrders.value.includes(order.id)
}, selectedOrders.value.includes(order.id) ? {} : {}, {
b: selectedOrders.value.includes(order.id) ? 1 : "",
c: common_vendor.o(($event) => toggleSelect(order.id), order.id),
d: common_vendor.t(getRegionText(order)),
e: common_vendor.t(common_vendor.unref(utils_order.formatOrderTime)(order.createTime)),
f: common_vendor.f(order.items, (item, index, i1) => {
return {
a: common_vendor.t(item.name),
b: common_vendor.t(item.weight || item.count),
c: common_vendor.t(item.unit === "kg" ? "kg" : "个"),
d: common_vendor.t(item.price.toFixed(2)),
e: common_vendor.t(item.unit === "kg" ? "kg" : "个"),
f: common_vendor.t(item.amount.toFixed(2)),
g: index
};
}),
g: common_vendor.t(order.totalAmount.toFixed(2)),
h: common_vendor.o(($event) => handleDelete(order.id), order.id),
i: order.id
});
})
} : {}, {
c: selectedOrders.value.length > 0
}, selectedOrders.value.length > 0 ? common_vendor.e({
d: isAllSelected.value
}, isAllSelected.value ? {} : {}, {
e: isAllSelected.value ? 1 : "",
f: common_vendor.o(toggleSelectAll),
g: common_vendor.t(selectedOrders.value.length),
h: common_vendor.t(selectedTotalAmount.value.toFixed(2))
}) : {});
};
}
});
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-80f8e5f8"]]);
wx.createPage(MiniProgramPage);
+6
View File
@@ -0,0 +1,6 @@
{
"navigationBarTitleText": "订单列表",
"navigationBarBackgroundColor": "#3366ff",
"navigationBarTextStyle": "white",
"usingComponents": {}
}
+1
View File
@@ -0,0 +1 @@
<view class="container data-v-80f8e5f8"><view class="content data-v-80f8e5f8"><view wx:if="{{a}}" class="order-list data-v-80f8e5f8"><view wx:for="{{b}}" wx:for-item="order" wx:key="i" class="order-item data-v-80f8e5f8"><view class="order-checkbox data-v-80f8e5f8" catchtap="{{order.c}}"><view class="{{['checkbox', 'data-v-80f8e5f8', order.b && 'checked']}}"><text wx:if="{{order.a}}" class="check-icon data-v-80f8e5f8">✓</text></view></view><view class="order-content data-v-80f8e5f8"><view class="order-header data-v-80f8e5f8"><view class="order-region data-v-80f8e5f8"><text class="region-icon data-v-80f8e5f8">📍</text><text class="region-text data-v-80f8e5f8">{{order.d}}</text></view><text class="order-time data-v-80f8e5f8">{{order.e}}</text></view><view class="order-items data-v-80f8e5f8"><view wx:for="{{order.f}}" wx:for-item="item" wx:key="g" class="order-item-row data-v-80f8e5f8"><text class="item-name data-v-80f8e5f8">{{item.a}}</text><view class="item-info data-v-80f8e5f8"><text class="item-weight data-v-80f8e5f8">{{item.b}} {{item.c}}</text><text class="item-price data-v-80f8e5f8">¥{{item.d}}/{{item.e}}</text></view><text class="item-amount data-v-80f8e5f8">¥{{item.f}}</text></view></view><view class="order-footer data-v-80f8e5f8"><view class="order-total data-v-80f8e5f8"><text class="total-label data-v-80f8e5f8">合计:</text><text class="total-amount data-v-80f8e5f8">¥{{order.g}}</text></view><view class="order-actions data-v-80f8e5f8"><text class="delete-btn data-v-80f8e5f8" catchtap="{{order.h}}">删除</text></view></view></view></view></view><view wx:else class="empty-state data-v-80f8e5f8"><text class="empty-icon data-v-80f8e5f8">📭</text><text class="empty-text data-v-80f8e5f8">暂无订单</text><text class="empty-hint data-v-80f8e5f8">完成回收后将在此显示订单记录</text></view></view><view wx:if="{{c}}" class="bottom-bar data-v-80f8e5f8"><view class="select-all data-v-80f8e5f8" bindtap="{{f}}"><view class="{{['checkbox', 'data-v-80f8e5f8', e && 'checked']}}"><text wx:if="{{d}}" class="check-icon data-v-80f8e5f8">✓</text></view><text class="select-text data-v-80f8e5f8">全选</text></view><view class="selected-info data-v-80f8e5f8"><text class="selected-count data-v-80f8e5f8">已选 {{g}} 单</text><text class="selected-total data-v-80f8e5f8">合计: ¥{{h}}</text></view></view></view>
+210
View File
@@ -0,0 +1,210 @@
.container.data-v-80f8e5f8 {
min-height: 100vh;
background: #f5f5f5;
padding-bottom: 120rpx;
}
.content.data-v-80f8e5f8 {
padding: 32rpx;
}
.order-list.data-v-80f8e5f8 {
display: flex;
flex-direction: column;
gap: 24rpx;
}
.order-item.data-v-80f8e5f8 {
display: flex;
background: #fff;
border-radius: 16rpx;
padding: 24rpx;
box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.04);
}
.order-checkbox.data-v-80f8e5f8 {
display: flex;
align-items: flex-start;
padding-right: 20rpx;
padding-top: 8rpx;
}
.checkbox.data-v-80f8e5f8 {
width: 44rpx;
height: 44rpx;
border: 2rpx solid #ddd;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s;
}
.checkbox.checked.data-v-80f8e5f8 {
background: #3366ff;
border-color: #3366ff;
}
.check-icon.data-v-80f8e5f8 {
color: #fff;
font-size: 24rpx;
font-weight: bold;
}
.order-content.data-v-80f8e5f8 {
flex: 1;
}
.order-header.data-v-80f8e5f8 {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 16rpx;
padding-bottom: 16rpx;
border-bottom: 1rpx dashed #f0f0f0;
}
.order-region.data-v-80f8e5f8 {
display: flex;
align-items: center;
flex: 1;
}
.region-icon.data-v-80f8e5f8 {
font-size: 28rpx;
margin-right: 8rpx;
}
.region-text.data-v-80f8e5f8 {
font-size: 26rpx;
color: #333;
font-weight: 500;
}
.order-time.data-v-80f8e5f8 {
font-size: 24rpx;
color: #999;
}
.order-items.data-v-80f8e5f8 {
margin-bottom: 16rpx;
}
.order-item-row.data-v-80f8e5f8 {
display: flex;
justify-content: space-between;
align-items: center;
padding: 12rpx 0;
}
.order-item-row.data-v-80f8e5f8:not(:last-child) {
border-bottom: 1rpx solid #f8f9fa;
}
.item-name.data-v-80f8e5f8 {
font-size: 28rpx;
color: #333;
flex: 1;
}
.item-info.data-v-80f8e5f8 {
display: flex;
flex-direction: column;
align-items: flex-end;
flex: 2;
margin-right: 16rpx;
}
.item-weight.data-v-80f8e5f8 {
font-size: 24rpx;
color: #666;
}
.item-price.data-v-80f8e5f8 {
font-size: 24rpx;
color: #999;
}
.item-amount.data-v-80f8e5f8 {
font-size: 28rpx;
font-weight: 600;
color: #3366ff;
}
.order-footer.data-v-80f8e5f8 {
display: flex;
justify-content: space-between;
align-items: center;
padding-top: 16rpx;
border-top: 1rpx dashed #f0f0f0;
}
.order-total.data-v-80f8e5f8 {
display: flex;
align-items: baseline;
}
.total-label.data-v-80f8e5f8 {
font-size: 26rpx;
color: #666;
margin-right: 8rpx;
}
.total-amount.data-v-80f8e5f8 {
font-size: 36rpx;
font-weight: 700;
color: #3366ff;
}
.order-actions.data-v-80f8e5f8 {
margin-left: 16rpx;
}
.delete-btn.data-v-80f8e5f8 {
font-size: 26rpx;
color: #ff4d4f;
padding: 8rpx 16rpx;
border: 1rpx solid #ff4d4f;
border-radius: 8rpx;
}
.empty-state.data-v-80f8e5f8 {
display: flex;
flex-direction: column;
align-items: center;
padding: 120rpx 40rpx;
background: #fff;
border-radius: 16rpx;
}
.empty-icon.data-v-80f8e5f8 {
font-size: 100rpx;
margin-bottom: 24rpx;
}
.empty-text.data-v-80f8e5f8 {
font-size: 32rpx;
font-weight: 600;
color: #333;
margin-bottom: 12rpx;
}
.empty-hint.data-v-80f8e5f8 {
font-size: 26rpx;
color: #999;
}
.bottom-bar.data-v-80f8e5f8 {
position: fixed;
bottom: 0;
left: 0;
right: 0;
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx 32rpx;
padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
background: #fff;
box-shadow: 0 -2rpx 12rpx rgba(0, 0, 0, 0.08);
}
.select-all.data-v-80f8e5f8 {
display: flex;
align-items: center;
}
.select-text.data-v-80f8e5f8 {
font-size: 28rpx;
color: #333;
margin-left: 12rpx;
}
.selected-info.data-v-80f8e5f8 {
display: flex;
align-items: baseline;
gap: 16rpx;
}
.selected-count.data-v-80f8e5f8 {
font-size: 26rpx;
color: #666;
}
.selected-total.data-v-80f8e5f8 {
font-size: 32rpx;
font-weight: 700;
color: #3366ff;
}
.batch-delete.data-v-80f8e5f8 {
margin-left: 16rpx;
}
.batch-delete-btn.data-v-80f8e5f8 {
font-size: 28rpx;
color: #fff;
padding: 12rpx 24rpx;
background: #ff4d4f;
border-radius: 8rpx;
}