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
+1
View File
@@ -0,0 +1 @@
"use strict";const e=require("../../common/vendor.js"),r=require("../../stores/order.js"),d=require("../../stores/price.js"),t=e.defineComponent({__name:"index",setup(t){const o=r.useOrderStore(),i=d.usePriceStore(),n=e.computed(()=>o.orders.length),s=e.computed(()=>o.orders.reduce((e,r)=>e+r.amount,0)),a=e.computed(()=>o.orders.reduce((e,r)=>e+(r.weight||0),0)),c=e.computed(()=>i.prices.length),u=e.computed(()=>[...o.orders].reverse().slice(0,5)),l=()=>{e.index.showModal({title:"确认退出",content:"确定要退出登录吗?",success:r=>{r.confirm&&(e.index.removeStorageSync("admin_login"),e.index.redirectTo({url:"/pages/admin/login"}))}})},m=()=>{e.index.redirectTo({url:"/pages/admin/order/list"})},g=()=>{e.index.redirectTo({url:"/pages/admin/price/list"})},p=()=>{e.index.redirectTo({url:"/pages/admin/user/list"})},x=()=>{e.index.navigateTo({url:"/pages/admin/statistics"})};return e.onMounted(()=>{e.index.getStorageSync("admin_login")?(o.loadOrders(),i.loadPrices()):e.index.redirectTo({url:"/pages/admin/login"})}),(r,d)=>({a:e.o(l),b:e.t(n.value),c:e.t(s.value.toFixed(2)),d:e.t(a.value.toFixed(2)),e:e.t(c.value),f:e.o(m),g:e.o(g),h:e.o(p),i:e.o(x),j:e.o(m),k:e.f(u.value,(r,d,t)=>{return{a:e.t(r.id),b:e.t(r.createTime),c:e.t(r.amount.toFixed(2)),d:e.t((o=r.status,{pending:"待处理",completed:"已完成",cancelled:"已取消"}[o]||o)),e:e.n(r.status),f:r.id,g:e.o(d=>{return t=r.id,void e.index.navigateTo({url:`/pages/order/detail?id=${t}`});var t},r.id)};var o}),l:e.o(m),m:e.o(g),n:e.o(p)})}}),o=e._export_sfc(t,[["__scopeId","data-v-d9b751dd"]]);wx.createPage(o);
+5
View File
@@ -0,0 +1,5 @@
{
"navigationStyle": "custom",
"navigationBarTitleText": "管理后台",
"usingComponents": {}
}
+1
View File
@@ -0,0 +1 @@
<view class="admin-container data-v-d9b751dd"><view class="admin-header data-v-d9b751dd"><view class="header-left data-v-d9b751dd"><text class="header-title data-v-d9b751dd">管理后台</text><text class="header-subtitle data-v-d9b751dd">易分宝现场回收系统</text></view><view class="header-right data-v-d9b751dd" bindtap="{{a}}"><text class="logout-icon data-v-d9b751dd">📤</text><text class="logout-text data-v-d9b751dd">退出</text></view></view><view class="stats-grid data-v-d9b751dd"><view class="stat-card data-v-d9b751dd"><view class="stat-icon data-v-d9b751dd">📊</view><view class="stat-info data-v-d9b751dd"><text class="stat-value data-v-d9b751dd">{{b}}</text><text class="stat-label data-v-d9b751dd">今日订单</text></view></view><view class="stat-card data-v-d9b751dd"><view class="stat-icon data-v-d9b751dd">💰</view><view class="stat-info data-v-d9b751dd"><text class="stat-value data-v-d9b751dd">¥{{c}}</text><text class="stat-label data-v-d9b751dd">今日金额</text></view></view><view class="stat-card data-v-d9b751dd"><view class="stat-icon data-v-d9b751dd">♻️</view><view class="stat-info data-v-d9b751dd"><text class="stat-value data-v-d9b751dd">{{d}}kg</text><text class="stat-label data-v-d9b751dd">回收总量</text></view></view><view class="stat-card data-v-d9b751dd"><view class="stat-icon data-v-d9b751dd">📦</view><view class="stat-info data-v-d9b751dd"><text class="stat-value data-v-d9b751dd">{{e}}</text><text class="stat-label data-v-d9b751dd">回收品类</text></view></view></view><view class="quick-actions data-v-d9b751dd"><view class="section-title data-v-d9b751dd">快捷操作</view><view class="action-grid data-v-d9b751dd"><view class="action-item data-v-d9b751dd" bindtap="{{f}}"><view class="action-icon data-v-d9b751dd">📋</view><text class="action-name data-v-d9b751dd">订单管理</text></view><view class="action-item data-v-d9b751dd" bindtap="{{g}}"><view class="action-icon data-v-d9b751dd">💰</view><text class="action-name data-v-d9b751dd">价格管理</text></view><view class="action-item data-v-d9b751dd" bindtap="{{h}}"><view class="action-icon data-v-d9b751dd">👥</view><text class="action-name data-v-d9b751dd">用户管理</text></view><view class="action-item data-v-d9b751dd" bindtap="{{i}}"><view class="action-icon data-v-d9b751dd">📈</view><text class="action-name data-v-d9b751dd">统计报表</text></view></view></view><view class="recent-orders data-v-d9b751dd"><view class="section-title data-v-d9b751dd"><text class="data-v-d9b751dd">最近订单</text><text class="view-all data-v-d9b751dd" bindtap="{{j}}">查看全部</text></view><view class="order-list data-v-d9b751dd"><view wx:for="{{k}}" wx:for-item="order" wx:key="f" class="order-item data-v-d9b751dd" bindtap="{{order.g}}"><view class="order-left data-v-d9b751dd"><view class="order-id data-v-d9b751dd">{{order.a}}</view><view class="order-time data-v-d9b751dd">{{order.b}}</view></view><view class="order-right data-v-d9b751dd"><view class="order-amount data-v-d9b751dd">¥{{order.c}}</view><view class="{{['order-status', 'data-v-d9b751dd', order.e]}}">{{order.d}}</view></view></view></view></view><view class="tab-bar data-v-d9b751dd"><view class="tab-item active data-v-d9b751dd"><text class="tab-icon data-v-d9b751dd">🏠</text><text class="tab-text data-v-d9b751dd">首页</text></view><view class="tab-item data-v-d9b751dd" bindtap="{{l}}"><text class="tab-icon data-v-d9b751dd">📋</text><text class="tab-text data-v-d9b751dd">订单</text></view><view class="tab-item data-v-d9b751dd" bindtap="{{m}}"><text class="tab-icon data-v-d9b751dd">💰</text><text class="tab-text data-v-d9b751dd">价格</text></view><view class="tab-item data-v-d9b751dd" bindtap="{{n}}"><text class="tab-icon data-v-d9b751dd">👤</text><text class="tab-text data-v-d9b751dd">用户</text></view></view></view>
+1
View File
@@ -0,0 +1 @@
.admin-container.data-v-d9b751dd{min-height:100vh;background:#f5f7fa;padding-bottom:120rpx}.admin-header.data-v-d9b751dd{background:linear-gradient(135deg,#36f,#254edb);padding:48rpx 32rpx;display:flex;justify-content:space-between;align-items:center}.header-left.data-v-d9b751dd{color:#fff}.header-title.data-v-d9b751dd{font-size:40rpx;font-weight:700;display:block}.header-subtitle.data-v-d9b751dd{font-size:24rpx;opacity:.8;margin-top:4rpx}.header-right.data-v-d9b751dd{display:flex;align-items:center;color:#fff;padding:12rpx 24rpx;background:rgba(255,255,255,.2);border-radius:24rpx}.logout-icon.data-v-d9b751dd{font-size:28rpx;margin-right:8rpx}.logout-text.data-v-d9b751dd{font-size:26rpx}.stats-grid.data-v-d9b751dd{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:16rpx;padding:32rpx}.stat-card.data-v-d9b751dd{background:#fff;border-radius:12rpx;padding:20rpx 16rpx;display:flex;flex-direction:column;align-items:center;box-shadow:0 4rpx 12rpx rgba(0,0,0,.05)}.stat-icon.data-v-d9b751dd{font-size:40rpx;margin-bottom:12rpx}.stat-info.data-v-d9b751dd{display:flex;flex-direction:column;align-items:center;text-align:center}.stat-value.data-v-d9b751dd{font-size:28rpx;font-weight:700;color:#36f}.stat-label.data-v-d9b751dd{font-size:20rpx;color:#999;margin-top:4rpx}.quick-actions.data-v-d9b751dd,.recent-orders.data-v-d9b751dd{padding:0 32rpx 32rpx}.section-title.data-v-d9b751dd{font-size:32rpx;font-weight:600;color:#333;margin-bottom:24rpx;display:flex;justify-content:space-between;align-items:center}.view-all.data-v-d9b751dd{font-size:26rpx;color:#36f;font-weight:400}.action-grid.data-v-d9b751dd{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:24rpx}.action-item.data-v-d9b751dd{background:#fff;border-radius:16rpx;padding:24rpx 16rpx;display:flex;flex-direction:column;align-items:center;box-shadow:0 4rpx 12rpx rgba(0,0,0,.05)}.action-item.data-v-d9b751dd:active{opacity:.8}.action-icon.data-v-d9b751dd{font-size:48rpx;margin-bottom:12rpx}.action-name.data-v-d9b751dd{font-size:24rpx;color:#333;text-align:center}.order-list.data-v-d9b751dd{background:#fff;border-radius:16rpx;overflow:hidden;box-shadow:0 4rpx 12rpx rgba(0,0,0,.05)}.order-item.data-v-d9b751dd{display:flex;justify-content:space-between;align-items:center;padding:24rpx;border-bottom:1rpx solid #f0f0f0}.order-item.data-v-d9b751dd:last-child{border-bottom:none}.order-item.data-v-d9b751dd:active{background:#f9f9f9}.order-id.data-v-d9b751dd{font-size:28rpx;font-weight:600;color:#333}.order-time.data-v-d9b751dd{font-size:24rpx;color:#999;margin-top:4rpx}.order-amount.data-v-d9b751dd{font-size:32rpx;font-weight:700;color:#36f}.order-status.data-v-d9b751dd{font-size:22rpx;padding:6rpx 16rpx;border-radius:20rpx;margin-top:8rpx}.order-status.pending.data-v-d9b751dd{background:#fff3e0;color:#f59e0b}.order-status.completed.data-v-d9b751dd{background:#dcfce7;color:#36f}.order-status.cancelled.data-v-d9b751dd{background:#fef2f2;color:#ef4444}.tab-bar.data-v-d9b751dd{position:fixed;bottom:0;left:0;right:0;height:100rpx;background:#fff;display:flex;box-shadow:0 -4rpx 12rpx rgba(0,0,0,.05)}.tab-item.data-v-d9b751dd{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center}.tab-item.active .tab-icon.data-v-d9b751dd,.tab-item.active .tab-text.data-v-d9b751dd{color:#36f}.tab-icon.data-v-d9b751dd{font-size:36rpx}.tab-text.data-v-d9b751dd{font-size:22rpx;color:#999;margin-top:4rpx}
+1
View File
@@ -0,0 +1 @@
"use strict";const e=require("../../common/vendor.js"),o=e.defineComponent({__name:"login",setup(o){const n=e.ref(""),a=e.ref(""),t=e.ref(!1),i=()=>{n.value?a.value?"admin"===n.value&&"123456"===a.value?(e.index.setStorageSync("admin_login",!0),e.index.showToast({title:"登录成功",icon:"success"}),setTimeout(()=>{e.index.redirectTo({url:"/pages/admin/index"})},1500)):e.index.showToast({title:"用户名或密码错误",icon:"none"}):e.index.showToast({title:"请输入密码",icon:"none"}):e.index.showToast({title:"请输入用户名",icon:"none"})},l=()=>{e.index.showToast({title:"请联系管理员重置密码",icon:"none"})};return(o,s)=>e.e({a:n.value,b:e.o(e=>n.value=e.detail.value),c:a.value,d:e.o(e=>a.value=e.detail.value),e:t.value},(t.value,{}),{f:t.value?1:"",g:e.o(e=>t.value=!t.value),h:e.o(i),i:e.o(l)})}}),n=e._export_sfc(o,[["__scopeId","data-v-52de05b2"]]);wx.createPage(n);
+5
View File
@@ -0,0 +1,5 @@
{
"navigationStyle": "custom",
"navigationBarTitleText": "管理员登录",
"usingComponents": {}
}
+1
View File
@@ -0,0 +1 @@
<view class="login-container data-v-52de05b2"><view class="login-box data-v-52de05b2"><view class="login-logo data-v-52de05b2">🔧</view><view class="login-title data-v-52de05b2">易分宝管理后台</view><view class="login-subtitle data-v-52de05b2">管理员登录</view><view class="form-group data-v-52de05b2"><view class="form-label data-v-52de05b2">用户名</view><input type="text" class="form-input data-v-52de05b2" placeholder="请输入用户名" value="{{a}}" bindinput="{{b}}"/></view><view class="form-group data-v-52de05b2"><view class="form-label data-v-52de05b2">密码</view><input type="password" class="form-input data-v-52de05b2" placeholder="请输入密码" value="{{c}}" bindinput="{{d}}"/></view><view class="form-group data-v-52de05b2"><view class="checkbox data-v-52de05b2" bindtap="{{g}}"><view class="{{['checkbox-box', 'data-v-52de05b2', f && 'checked']}}"><text wx:if="{{e}}" class="data-v-52de05b2">✓</text></view><text class="data-v-52de05b2">记住密码</text></view></view><view class="login-btn data-v-52de05b2" bindtap="{{h}}"><text class="data-v-52de05b2">登录</text></view><view class="forgot-link data-v-52de05b2" bindtap="{{i}}"><text class="data-v-52de05b2">忘记密码?</text></view></view></view>
+1
View File
@@ -0,0 +1 @@
.login-container.data-v-52de05b2{min-height:100vh;background:linear-gradient(135deg,#36f,#254edb);display:flex;align-items:center;justify-content:center;padding:32rpx}.login-box.data-v-52de05b2{width:100%;max-width:600rpx;background:#fff;border-radius:24rpx;padding:64rpx 48rpx;box-shadow:0 20rpx 60rpx rgba(0,0,0,.15)}.login-logo.data-v-52de05b2{font-size:96rpx;text-align:center;margin-bottom:24rpx}.login-title.data-v-52de05b2{font-size:40rpx;font-weight:700;color:#333;text-align:center;margin-bottom:8rpx}.login-subtitle.data-v-52de05b2{font-size:28rpx;color:#999;text-align:center;margin-bottom:48rpx}.form-group.data-v-52de05b2{margin-bottom:32rpx}.form-label.data-v-52de05b2{font-size:28rpx;color:#666;margin-bottom:12rpx}.form-input.data-v-52de05b2{width:100%;height:88rpx;border:2rpx solid #e5e7eb;border-radius:12rpx;padding:0 24rpx;font-size:32rpx;box-sizing:border-box}.form-input.data-v-52de05b2:focus{border-color:#36f}.checkbox.data-v-52de05b2{display:flex;align-items:center;font-size:26rpx;color:#666}.checkbox-box.data-v-52de05b2{width:40rpx;height:40rpx;border:2rpx solid #ccc;border-radius:8rpx;display:flex;align-items:center;justify-content:center;margin-right:12rpx;font-size:24rpx;color:#fff}.checkbox-box.checked.data-v-52de05b2{background:#36f;border-color:#36f}.login-btn.data-v-52de05b2{width:100%;height:88rpx;background:linear-gradient(135deg,#36f,#254edb);border-radius:12rpx;display:flex;align-items:center;justify-content:center;margin-top:16rpx}.login-btn text.data-v-52de05b2{font-size:32rpx;font-weight:600;color:#fff}.login-btn.data-v-52de05b2:active{opacity:.9}.forgot-link.data-v-52de05b2{text-align:center;margin-top:32rpx}.forgot-link text.data-v-52de05b2{font-size:26rpx;color:#36f}
+1
View File
@@ -0,0 +1 @@
"use strict";const e=require("../../../common/vendor.js"),t=require("../../../stores/order.js"),a=e.defineComponent({__name:"list",setup(a){const l=t.useOrderStore(),d=e.ref(""),i=e.ref("all"),n=[{label:"全部",value:"all"},{label:"待处理",value:"pending"},{label:"已完成",value:"completed"},{label:"已取消",value:"cancelled"}],r=e.computed(()=>{let e=l.orders;if("all"!==i.value&&(e=e.filter(e=>e.status===i.value)),d.value){const t=d.value.toLowerCase();e=e.filter(e=>e.id.toLowerCase().includes(t)||e.name.toLowerCase().includes(t))}return[...e].reverse()}),o=()=>{e.index.redirectTo({url:"/pages/admin/index"})},s=()=>{e.index.redirectTo({url:"/pages/admin/price/list"})},u=()=>{e.index.redirectTo({url:"/pages/admin/user/list"})};return e.onMounted(()=>{e.index.getStorageSync("admin_login")?l.loadOrders():e.index.redirectTo({url:"/pages/admin/login"})}),(t,a)=>e.e({a:d.value,b:e.o(e=>d.value=e.detail.value),c:e.f(n,(t,a,l)=>({a:e.t(t.label),b:t.value,c:i.value===t.value?1:"",d:e.o(e=>i.value=t.value,t.value)})),d:e.f(r.value,(t,a,d)=>{return e.e({a:e.t(t.id),b:e.t((i=t.status,{pending:"待处理",completed:"已完成",cancelled:"已取消"}[i]||i)),c:e.n(t.status),d:e.t(t.name),e:e.t(t.weight?t.weight+"kg":t.count?t.count+"个":"-"),f:e.t(t.unitPrice),g:e.t("kg"===t.unit?"kg":"个"),h:e.t(t.createTime),i:e.t(t.amount.toFixed(2)),j:"pending"===t.status},"pending"===t.status?{k:e.o(a=>{return d=t.id,void e.index.showModal({title:"确认订单",content:"确定要确认此订单吗?",success:t=>{t.confirm&&(l.updateOrderStatus(d,"completed"),e.index.showToast({title:"已确认",icon:"success"}))}});var d},t.id)}:{},{l:"cancelled"!==t.status},"cancelled"!==t.status?{m:e.o(a=>{return d=t.id,void e.index.showModal({title:"取消订单",content:"确定要取消此订单吗?",success:t=>{t.confirm&&(l.updateOrderStatus(d,"cancelled"),e.index.showToast({title:"已取消",icon:"success"}))}});var d},t.id)}:{},{n:t.id,o:e.o(a=>{return l=t.id,void e.index.navigateTo({url:`/pages/order/detail?id=${l}`});var l},t.id)});var i}),e:0===r.value.length},(r.value.length,{}),{f:e.o(o),g:e.o(s),h:e.o(u)})}}),l=e._export_sfc(a,[["__scopeId","data-v-0ece1262"]]);wx.createPage(l);
@@ -0,0 +1,5 @@
{
"navigationStyle": "custom",
"navigationBarTitleText": "订单管理",
"usingComponents": {}
}
@@ -0,0 +1 @@
<view class="admin-container data-v-0ece1262"><view class="admin-header data-v-0ece1262"><view class="header-left data-v-0ece1262"><text class="header-title data-v-0ece1262">订单管理</text><text class="header-subtitle data-v-0ece1262">全部订单</text></view></view><view class="search-bar data-v-0ece1262"><view class="search-input-wrap data-v-0ece1262"><text class="search-icon data-v-0ece1262">🔍</text><input type="text" class="search-input data-v-0ece1262" placeholder="搜索订单号或品类" value="{{a}}" bindinput="{{b}}"/></view></view><view class="filter-bar data-v-0ece1262"><view wx:for="{{c}}" wx:for-item="filter" wx:key="b" class="{{['filter-item', 'data-v-0ece1262', filter.c && 'active']}}" bindtap="{{filter.d}}">{{filter.a}}</view></view><view class="order-list data-v-0ece1262"><view wx:for="{{d}}" wx:for-item="order" wx:key="n" class="order-card data-v-0ece1262" bindtap="{{order.o}}"><view class="order-header data-v-0ece1262"><view class="order-id data-v-0ece1262">订单? {{order.a}}</view><view class="{{['order-status', 'data-v-0ece1262', order.c]}}">{{order.b}}</view></view><view class="order-info data-v-0ece1262"><view class="info-row data-v-0ece1262"><text class="info-label data-v-0ece1262">品类:</text><text class="info-value data-v-0ece1262">{{order.d}}</text></view><view class="info-row data-v-0ece1262"><text class="info-label data-v-0ece1262">重量:</text><text class="info-value data-v-0ece1262">{{order.e}}</text></view><view class="info-row data-v-0ece1262"><text class="info-label data-v-0ece1262">单价:</text><text class="info-value data-v-0ece1262">¥{{order.f}}/{{order.g}}</text></view><view class="info-row data-v-0ece1262"><text class="info-label data-v-0ece1262">时间:</text><text class="info-value data-v-0ece1262">{{order.h}}</text></view></view><view class="order-footer data-v-0ece1262"><text class="total-amount data-v-0ece1262">¥{{order.i}}</text><view class="order-actions data-v-0ece1262"><view wx:if="{{order.j}}" class="action-btn confirm data-v-0ece1262" catchtap="{{order.k}}"> 确认 </view><view wx:if="{{order.l}}" class="action-btn cancel data-v-0ece1262" catchtap="{{order.m}}"> 取消 </view></view></view></view></view><view wx:if="{{e}}" class="empty-state data-v-0ece1262"><text class="empty-icon data-v-0ece1262">📭</text><text class="empty-text data-v-0ece1262">暂无订单</text></view><view class="tab-bar data-v-0ece1262"><view class="tab-item data-v-0ece1262" bindtap="{{f}}"><text class="tab-icon data-v-0ece1262">🏠</text><text class="tab-text data-v-0ece1262">首页</text></view><view class="tab-item active data-v-0ece1262"><text class="tab-icon data-v-0ece1262">📋</text><text class="tab-text data-v-0ece1262">订单</text></view><view class="tab-item data-v-0ece1262" bindtap="{{g}}"><text class="tab-icon data-v-0ece1262">💰</text><text class="tab-text data-v-0ece1262">价格</text></view><view class="tab-item data-v-0ece1262" bindtap="{{h}}"><text class="tab-icon data-v-0ece1262">👤</text><text class="tab-text data-v-0ece1262">用户</text></view></view></view>
@@ -0,0 +1 @@
.admin-container.data-v-0ece1262{min-height:100vh;background:#f5f7fa;padding-bottom:120rpx}.admin-header.data-v-0ece1262{background:linear-gradient(135deg,#36f,#254edb);padding:48rpx 32rpx}.header-left.data-v-0ece1262{color:#fff}.header-title.data-v-0ece1262{font-size:40rpx;font-weight:700;display:block}.header-subtitle.data-v-0ece1262{font-size:24rpx;opacity:.8;margin-top:4rpx}.search-bar.data-v-0ece1262{padding:24rpx 32rpx}.search-input-wrap.data-v-0ece1262{display:flex;align-items:center;background:#fff;border-radius:40rpx;padding:0 24rpx;height:72rpx;box-shadow:0 4rpx 12rpx rgba(0,0,0,.05)}.search-icon.data-v-0ece1262{font-size:28rpx;margin-right:16rpx}.search-input.data-v-0ece1262{flex:1;font-size:28rpx}.filter-bar.data-v-0ece1262{display:flex;gap:16rpx;padding:0 32rpx 24rpx;overflow-x:auto}.filter-item.data-v-0ece1262{padding:12rpx 28rpx;background:#fff;border-radius:24rpx;font-size:26rpx;color:#666;white-space:nowrap}.filter-item.active.data-v-0ece1262{background:#36f;color:#fff}.order-list.data-v-0ece1262{padding:0 32rpx}.order-card.data-v-0ece1262{background:#fff;border-radius:16rpx;padding:24rpx;margin-bottom:24rpx;box-shadow:0 4rpx 12rpx rgba(0,0,0,.05)}.order-header.data-v-0ece1262{display:flex;justify-content:space-between;align-items:center;margin-bottom:20rpx;padding-bottom:16rpx;border-bottom:1rpx solid #f0f0f0}.order-id.data-v-0ece1262{font-size:26rpx;color:#666}.order-status.data-v-0ece1262{font-size:22rpx;padding:6rpx 16rpx;border-radius:20rpx}.order-status.pending.data-v-0ece1262{background:#fff3e0;color:#f59e0b}.order-status.completed.data-v-0ece1262{background:#dcfce7;color:#36f}.order-status.cancelled.data-v-0ece1262{background:#fef2f2;color:#ef4444}.order-info.data-v-0ece1262{margin-bottom:20rpx}.info-row.data-v-0ece1262{display:flex;margin-bottom:12rpx}.info-row.data-v-0ece1262:last-child{margin-bottom:0}.info-label.data-v-0ece1262{font-size:26rpx;color:#999;width:100rpx}.info-value.data-v-0ece1262{font-size:26rpx;color:#333}.order-footer.data-v-0ece1262{display:flex;justify-content:space-between;align-items:center;padding-top:16rpx;border-top:1rpx solid #f0f0f0}.total-amount.data-v-0ece1262{font-size:32rpx;font-weight:700;color:#36f}.order-actions.data-v-0ece1262{display:flex;gap:16rpx}.action-btn.data-v-0ece1262{padding:12rpx 28rpx;border-radius:24rpx;font-size:24rpx}.action-btn.confirm.data-v-0ece1262{background:#36f;color:#fff}.action-btn.cancel.data-v-0ece1262{background:#f5f5f5;color:#666}.empty-state.data-v-0ece1262{display:flex;flex-direction:column;align-items:center;padding:100rpx 0}.empty-icon.data-v-0ece1262{font-size:96rpx;margin-bottom:24rpx}.empty-text.data-v-0ece1262{font-size:28rpx;color:#999}.tab-bar.data-v-0ece1262{position:fixed;bottom:0;left:0;right:0;height:100rpx;background:#fff;display:flex;box-shadow:0 -4rpx 12rpx rgba(0,0,0,.05)}.tab-item.data-v-0ece1262{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center}.tab-item.active .tab-icon.data-v-0ece1262,.tab-item.active .tab-text.data-v-0ece1262{color:#36f}.tab-icon.data-v-0ece1262{font-size:36rpx}.tab-text.data-v-0ece1262{font-size:22rpx;color:#999;margin-top:4rpx}
+1
View File
@@ -0,0 +1 @@
"use strict";const e=require("../../../common/vendor.js"),t=require("../../../stores/price.js"),o=require("../../../utils/price.js"),a=e.defineComponent({__name:"list",setup(a){const i=t.usePriceStore(),r=e.ref(""),n=e.ref(!1),c=e.ref(null),u=e.ref(""),s=e.reactive({category:"",name:"",price:"",unit:"kg"}),l=e.computed(()=>{let e=i.prices;if(r.value){const t=r.value.toLowerCase();e=e.filter(e=>e.name.toLowerCase().includes(t)||e.category.toLowerCase().includes(t))}return e}),d=()=>{n.value=!1,c.value=null,u.value="",s.category="",s.name="",s.price="",s.unit="kg"},g=()=>{s.category?s.name?!s.price||parseFloat(s.price)<=0?e.index.showToast({title:"请输入有效单价",icon:"none"}):(c.value?(i.updatePrice({category:s.category,name:s.name,price:parseFloat(s.price),unit:s.unit}),e.index.showToast({title:"修改成功",icon:"success"})):(i.addPrice({category:s.category,name:s.name,price:parseFloat(s.price),unit:s.unit}),e.index.showToast({title:"新增成功",icon:"success"})),d()):e.index.showToast({title:"请输入品类名称",icon:"none"}):e.index.showToast({title:"请输入品类代码",icon:"none"})},p=()=>{e.index.redirectTo({url:"/pages/admin/index"})},v=()=>{e.index.redirectTo({url:"/pages/admin/order/list"})},m=()=>{e.index.redirectTo({url:"/pages/admin/user/list"})};return e.onMounted(()=>{i.loadPrices()}),(t,a)=>e.e({a:e.o(e=>n.value=!0),b:r.value,c:e.o(e=>r.value=e.detail.value),d:e.f(l.value,(t,a,r)=>({a:e.t(e.unref(o.getCategoryIcon)(t.category)),b:e.t(t.name),c:e.t(t.category),d:e.t(t.price),e:e.t("kg"===t.unit?"kg":"个"),f:e.o(e=>(e=>{c.value=e,u.value=e.category,s.category=e.category,s.name=e.name,s.price=e.price.toString(),s.unit=e.unit,n.value=!0})(t),t.category),g:e.o(o=>{return a=t.category,void e.index.showModal({title:"确认删除",content:"确定要删除此品类吗?",success:t=>{t.confirm&&(i.deletePrice(a),e.index.showToast({title:"删除成功",icon:"success"}))}});var a},t.category),h:t.category})),e:0===l.value.length},(l.value.length,{}),{f:e.o(p),g:e.o(v),h:e.o(m),i:n.value},n.value?{j:e.t(c.value?"编辑品类":"新增品类"),k:e.o(d),l:s.category,m:e.o(e=>s.category=e.detail.value),n:s.name,o:e.o(e=>s.name=e.detail.value),p:s.price,q:e.o(e=>s.price=e.detail.value),r:"kg"===s.unit?1:"",s:e.o(e=>s.unit="kg"),t:"piece"===s.unit?1:"",v:e.o(e=>s.unit="piece"),w:e.o(d),x:e.o(g),y:e.o(()=>{}),z:e.o(d)}:{})}}),i=e._export_sfc(a,[["__scopeId","data-v-7e588986"]]);wx.createPage(i);
@@ -0,0 +1,5 @@
{
"navigationStyle": "custom",
"navigationBarTitleText": "价格管理",
"usingComponents": {}
}
@@ -0,0 +1 @@
<view class="admin-container data-v-7e588986"><view class="admin-header data-v-7e588986"><view class="header-left data-v-7e588986"><text class="header-title data-v-7e588986">价格管理</text><text class="header-subtitle data-v-7e588986">回收品类价格设置</text></view><view class="header-right data-v-7e588986" bindtap="{{a}}"><text class="add-icon data-v-7e588986">+</text><text class="add-text data-v-7e588986">新增</text></view></view><view class="search-bar data-v-7e588986"><view class="search-input-wrap data-v-7e588986"><text class="search-icon data-v-7e588986">🔍</text><input type="text" class="search-input data-v-7e588986" placeholder="搜索品类名称" value="{{b}}" bindinput="{{c}}"/></view></view><view class="category-list data-v-7e588986"><view wx:for="{{d}}" wx:for-item="item" wx:key="h" class="category-card data-v-7e588986"><view class="category-icon-wrap data-v-7e588986"><text class="category-icon data-v-7e588986">{{item.a}}</text></view><view class="category-info data-v-7e588986"><view class="category-name data-v-7e588986">{{item.b}}</view><view class="category-category data-v-7e588986">{{item.c}}</view></view><view class="category-price-info data-v-7e588986"><view class="price-value data-v-7e588986">¥{{item.d}}</view><view class="price-unit data-v-7e588986">/{{item.e}}</view></view><view class="category-actions data-v-7e588986"><view class="action-btn edit data-v-7e588986" bindtap="{{item.f}}">✏️</view><view class="action-btn delete data-v-7e588986" bindtap="{{item.g}}">🗑️</view></view></view></view><view wx:if="{{e}}" class="empty-state data-v-7e588986"><text class="empty-icon data-v-7e588986">📦</text><text class="empty-text data-v-7e588986">暂无品类</text></view><view class="tab-bar data-v-7e588986"><view class="tab-item data-v-7e588986" bindtap="{{f}}"><text class="tab-icon data-v-7e588986">🏠</text><text class="tab-text data-v-7e588986">首页</text></view><view class="tab-item data-v-7e588986" bindtap="{{g}}"><text class="tab-icon data-v-7e588986">📋</text><text class="tab-text data-v-7e588986">订单</text></view><view class="tab-item active data-v-7e588986"><text class="tab-icon data-v-7e588986">💰</text><text class="tab-text data-v-7e588986">价格</text></view><view class="tab-item data-v-7e588986" bindtap="{{h}}"><text class="tab-icon data-v-7e588986">👥</text><text class="tab-text data-v-7e588986">用户</text></view></view><view wx:if="{{i}}" class="modal-overlay data-v-7e588986" bindtap="{{z}}"><view class="modal-box data-v-7e588986" catchtap="{{y}}"><view class="modal-header data-v-7e588986"><text class="modal-title data-v-7e588986">{{j}}</text><view class="modal-close data-v-7e588986" bindtap="{{k}}">×</view></view><view class="modal-body data-v-7e588986"><view class="form-group data-v-7e588986"><text class="form-label data-v-7e588986">品类代码</text><input type="text" class="form-input data-v-7e588986" placeholder="如:plastic_bottle" value="{{l}}" bindinput="{{m}}"/></view><view class="form-group data-v-7e588986"><text class="form-label data-v-7e588986">品类名称</text><input type="text" class="form-input data-v-7e588986" placeholder="如:塑料瓶" value="{{n}}" bindinput="{{o}}"/></view><view class="form-group data-v-7e588986"><text class="form-label data-v-7e588986">单价</text><view class="price-input-wrap data-v-7e588986"><text class="price-symbol data-v-7e588986">¥</text><input type="digit" class="form-input price-input data-v-7e588986" placeholder="0.00" value="{{p}}" bindinput="{{q}}"/></view></view><view class="form-group data-v-7e588986"><text class="form-label data-v-7e588986">单位</text><view class="unit-options data-v-7e588986"><view class="{{['unit-option', 'data-v-7e588986', r && 'active']}}" bindtap="{{s}}">kg</view><view class="{{['unit-option', 'data-v-7e588986', t && 'active']}}" bindtap="{{v}}">个</view></view></view></view><view class="modal-footer data-v-7e588986"><view class="modal-btn cancel data-v-7e588986" bindtap="{{w}}">取消</view><view class="modal-btn confirm data-v-7e588986" bindtap="{{x}}">保存</view></view></view></view></view>
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
"use strict";const e=require("../../common/vendor.js"),t=require("../../stores/order.js"),a=e.defineComponent({__name:"statistics",setup(a){const o=t.useOrderStore(),r=e.ref("today"),n=[{label:"今日",value:"today"},{label:"本周",value:"week"},{label:"本月",value:"month"},{label:"全部",value:"all"}],u=e.computed(()=>{const e=o.orders,t=e.length,a=e.reduce((e,t)=>e+t.amount,0);return{totalOrders:t,totalAmount:a,totalWeight:e.reduce((e,t)=>e+(t.weight||0),0),avgAmount:t>0?a/t:0}}),l=e.computed(()=>{const e={};return o.orders.forEach(t=>{e[t.category]||(e[t.category]={name:t.name,amount:0}),e[t.category].amount+=t.amount}),Object.values(e).sort((e,t)=>t.amount-e.amount).slice(0,5)}),d=e.computed(()=>["周一","周二","周三","周四","周五","周六","周日"].map((e,t)=>({date:`2026-05-${String(t+1).padStart(2,"0")}`,label:e,amount:Math.floor(500*Math.random())+100}))),c=e.computed(()=>{const e={pending:0,completed:0,cancelled:0};return o.orders.forEach(t=>{t.status in e&&e[t.status]++}),e}),m=e=>0===e?"rank-1":1===e?"rank-2":2===e?"rank-3":"";return e.onMounted(()=>{e.index.getStorageSync("admin_login")?o.loadOrders():e.index.redirectTo({url:"/pages/admin/login"})}),(t,a)=>({a:e.f(n,(t,a,o)=>({a:e.t(t.label),b:t.value,c:r.value===t.value?1:"",d:e.o(e=>r.value=t.value,t.value)})),b:e.t(u.value.totalOrders),c:e.t(u.value.totalAmount.toFixed(2)),d:e.t(u.value.totalWeight.toFixed(2)),e:e.t(u.value.avgAmount.toFixed(2)),f:e.f(l.value,(t,a,o)=>{return{a:e.t(a+1),b:e.n(m(a)),c:e.t(t.name),d:(r=t.amount,r/Math.max(...l.value.map(e=>e.amount),1)*100+"%"),e:e.t(t.amount.toFixed(2)),f:t.category};var r}),g:e.f(5,(e,t,a)=>({a:e})),h:e.f(d.value,(t,a,o)=>{return{a:(r=t.amount,r/Math.max(...d.value.map(e=>e.amount),1)*100+"%"),b:e.t(t.label),c:t.date};var r}),i:e.t(c.value.pending),j:e.t(c.value.completed),k:e.t(c.value.cancelled)})}}),o=e._export_sfc(a,[["__scopeId","data-v-858c90b0"]]);wx.createPage(o);
@@ -0,0 +1,6 @@
{
"navigationBarTitleText": "统计报表",
"navigationBarBackgroundColor": "#3366ff",
"navigationBarTextStyle": "white",
"usingComponents": {}
}
@@ -0,0 +1 @@
<view class="admin-container data-v-858c90b0"><view class="admin-header data-v-858c90b0"><view class="header-left data-v-858c90b0"><text class="header-title data-v-858c90b0">统计报表</text><text class="header-subtitle data-v-858c90b0">数据统计与分析</text></view></view><view class="time-filter data-v-858c90b0"><view wx:for="{{a}}" wx:for-item="filter" wx:key="b" class="{{['filter-item', 'data-v-858c90b0', filter.c && 'active']}}" bindtap="{{filter.d}}">{{filter.a}}</view></view><view class="summary-cards data-v-858c90b0"><view class="summary-card data-v-858c90b0"><view class="card-icon data-v-858c90b0">📊</view><view class="card-content data-v-858c90b0"><text class="card-value data-v-858c90b0">{{b}}</text><text class="card-label data-v-858c90b0">总订单数</text></view></view><view class="summary-card data-v-858c90b0"><view class="card-icon data-v-858c90b0">💰</view><view class="card-content data-v-858c90b0"><text class="card-value data-v-858c90b0">¥{{c}}</text><text class="card-label data-v-858c90b0">总金额</text></view></view><view class="summary-card data-v-858c90b0"><view class="card-icon data-v-858c90b0">♻️</view><view class="card-content data-v-858c90b0"><text class="card-value data-v-858c90b0">{{d}}kg</text><text class="card-label data-v-858c90b0">总回收量</text></view></view><view class="summary-card data-v-858c90b0"><view class="card-icon data-v-858c90b0">📈</view><view class="card-content data-v-858c90b0"><text class="card-value data-v-858c90b0">{{e}}</text><text class="card-label data-v-858c90b0">平均单价</text></view></view></view><view class="chart-section data-v-858c90b0"><view class="section-header data-v-858c90b0"><text class="section-title data-v-858c90b0">品类回收排行</text></view><view class="chart-list data-v-858c90b0"><view wx:for="{{f}}" wx:for-item="item" wx:key="f" class="chart-item data-v-858c90b0"><view class="{{['chart-rank', 'data-v-858c90b0', item.b]}}">{{item.a}}</view><view class="chart-info data-v-858c90b0"><view class="chart-name data-v-858c90b0">{{item.c}}</view><view class="chart-bar-wrap data-v-858c90b0"><view class="chart-bar data-v-858c90b0" style="{{'width:' + item.d}}"></view></view></view><view class="chart-value data-v-858c90b0">¥{{item.e}}</view></view></view></view><view class="chart-section data-v-858c90b0"><view class="section-header data-v-858c90b0"><text class="section-title data-v-858c90b0">每日趋势</text></view><view class="line-chart data-v-858c90b0"><view class="chart-grid data-v-858c90b0"><view wx:for="{{g}}" wx:for-item="i" wx:key="a" class="grid-line data-v-858c90b0"></view></view><view class="chart-bars data-v-858c90b0"><view wx:for="{{h}}" wx:for-item="day" wx:key="c" class="bar-item data-v-858c90b0"><view class="bar data-v-858c90b0" style="{{'height:' + day.a}}"></view><text class="bar-label data-v-858c90b0">{{day.b}}</text></view></view></view></view><view class="detail-section data-v-858c90b0"><view class="section-header data-v-858c90b0"><text class="section-title data-v-858c90b0">订单状态分布</text></view><view class="status-stats data-v-858c90b0"><view class="status-item data-v-858c90b0"><view class="status-circle pending data-v-858c90b0"><text class="status-value data-v-858c90b0">{{i}}</text></view><text class="status-label data-v-858c90b0">待处理</text></view><view class="status-item data-v-858c90b0"><view class="status-circle completed data-v-858c90b0"><text class="status-value data-v-858c90b0">{{j}}</text></view><text class="status-label data-v-858c90b0">已完成</text></view><view class="status-item data-v-858c90b0"><view class="status-circle cancelled data-v-858c90b0"><text class="status-value data-v-858c90b0">{{k}}</text></view><text class="status-label data-v-858c90b0">已取消</text></view></view></view></view>
@@ -0,0 +1 @@
.admin-container.data-v-858c90b0{min-height:100vh;background:#f5f7fa;padding-bottom:32rpx}.admin-header.data-v-858c90b0{background:linear-gradient(135deg,#36f,#254edb);padding:48rpx 32rpx}.header-left.data-v-858c90b0{color:#fff}.header-title.data-v-858c90b0{font-size:40rpx;font-weight:700;display:block}.header-subtitle.data-v-858c90b0{font-size:24rpx;opacity:.8;margin-top:4rpx}.time-filter.data-v-858c90b0{display:flex;gap:16rpx;padding:24rpx 32rpx;background:#fff}.filter-item.data-v-858c90b0{padding:12rpx 28rpx;background:#f5f5f5;border-radius:24rpx;font-size:26rpx;color:#666}.filter-item.active.data-v-858c90b0{background:#36f;color:#fff}.summary-cards.data-v-858c90b0{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:16rpx;padding:32rpx}.summary-card.data-v-858c90b0{background:#fff;border-radius:12rpx;padding:20rpx 16rpx;display:flex;flex-direction:column;align-items:center;box-shadow:0 4rpx 12rpx rgba(0,0,0,.05)}.card-icon.data-v-858c90b0{font-size:40rpx;margin-bottom:12rpx}.card-content.data-v-858c90b0{display:flex;flex-direction:column;align-items:center;text-align:center}.card-value.data-v-858c90b0{font-size:28rpx;font-weight:700;color:#36f}.card-label.data-v-858c90b0{font-size:20rpx;color:#999;margin-top:4rpx}.chart-section.data-v-858c90b0,.detail-section.data-v-858c90b0{margin:0 32rpx 32rpx;background:#fff;border-radius:16rpx;padding:24rpx;box-shadow:0 4rpx 12rpx rgba(0,0,0,.05)}.section-header.data-v-858c90b0{margin-bottom:24rpx}.section-title.data-v-858c90b0{font-size:30rpx;font-weight:600;color:#333}.chart-list.data-v-858c90b0{display:flex;flex-direction:column;gap:20rpx}.chart-item.data-v-858c90b0{display:flex;align-items:center}.chart-rank.data-v-858c90b0{width:48rpx;height:48rpx;border-radius:50%;background:#f0f0f0;display:flex;align-items:center;justify-content:center;font-size:24rpx;font-weight:600;color:#666;margin-right:16rpx}.chart-rank.rank-1.data-v-858c90b0{background:gold;color:#fff}.chart-rank.rank-2.data-v-858c90b0{background:silver;color:#fff}.chart-rank.rank-3.data-v-858c90b0{background:#cd7f32;color:#fff}.chart-info.data-v-858c90b0{flex:1}.chart-name.data-v-858c90b0{font-size:26rpx;color:#333;margin-bottom:8rpx}.chart-bar-wrap.data-v-858c90b0{height:12rpx;background:#f0f0f0;border-radius:6rpx;overflow:hidden}.chart-bar.data-v-858c90b0{height:100%;background:linear-gradient(90deg,#36f,#254edb);border-radius:6rpx;transition:width .5s ease}.chart-value.data-v-858c90b0{font-size:26rpx;font-weight:600;color:#36f;margin-left:16rpx}.line-chart.data-v-858c90b0{position:relative;height:300rpx}.chart-grid.data-v-858c90b0{position:absolute;top:0;left:0;right:0;bottom:40rpx;display:flex;flex-direction:column;justify-content:space-between}.grid-line.data-v-858c90b0{height:1rpx;background:#f0f0f0}.chart-bars.data-v-858c90b0{position:absolute;bottom:40rpx;left:0;right:0;display:flex;justify-content:space-around;align-items:flex-end;height:calc(100% - 40rpx)}.bar-item.data-v-858c90b0{display:flex;flex-direction:column;align-items:center;width:10%}.bar.data-v-858c90b0{width:80%;background:linear-gradient(180deg,#36f,#254edb);border-radius:4rpx 4rpx 0 0;min-height:4rpx;transition:height .5s ease}.bar-label.data-v-858c90b0{font-size:20rpx;color:#999;margin-top:8rpx}.status-stats.data-v-858c90b0{display:flex;justify-content:space-around}.status-item.data-v-858c90b0{display:flex;flex-direction:column;align-items:center}.status-circle.data-v-858c90b0{width:120rpx;height:120rpx;border-radius:50%;display:flex;align-items:center;justify-content:center;margin-bottom:12rpx}.status-circle.pending.data-v-858c90b0{background:linear-gradient(135deg,#fef3c7,#fde68a)}.status-circle.completed.data-v-858c90b0{background:linear-gradient(135deg,#dcfce7,#bbf7d0)}.status-circle.cancelled.data-v-858c90b0{background:linear-gradient(135deg,#fee2e2,#fecaca)}.status-value.data-v-858c90b0{font-size:40rpx;font-weight:700;color:#333}.status-label.data-v-858c90b0{font-size:24rpx;color:#666}
+1
View File
@@ -0,0 +1 @@
"use strict";const e=require("../../../common/vendor.js"),o=require("../../../stores/user.js"),n=e.defineComponent({__name:"list",setup(n){const a=o.useUserStore(),l=e.ref(""),t=e.ref(!1),r=e.ref(null),i=e.reactive({name:"",phone:"",role:"collector"}),s=e.computed(()=>{let e=a.users;if(l.value){const o=l.value.toLowerCase();e=e.filter(e=>e.name.toLowerCase().includes(o)||e.phone.includes(o))}return e}),d=()=>{t.value=!1,r.value=null,i.name="",i.phone="",i.role="collector"},u=async()=>{i.name?i.phone&&11===i.phone.length?(r.value?(await a.updateUser({id:r.value.id,name:i.name,phone:i.phone,role:i.role}),e.index.showToast({title:"修改成功",icon:"success"})):(await a.addUser({name:i.name,phone:i.phone,role:i.role}),e.index.showToast({title:"新增成功",icon:"success"})),d()):e.index.showToast({title:"请输入正确的手机号",icon:"none"}):e.index.showToast({title:"请输入用户名",icon:"none"})},c=()=>{e.index.redirectTo({url:"/pages/admin/index"})},m=()=>{e.index.redirectTo({url:"/pages/admin/order/list"})},h=()=>{e.index.redirectTo({url:"/pages/admin/price/list"})};return e.onMounted(()=>{a.loadUsers()}),(o,n)=>e.e({a:e.o(e=>t.value=!0),b:l.value,c:e.o(e=>l.value=e.detail.value),d:e.f(s.value,(o,n,l)=>({a:e.t(o.name.charAt(0)),b:e.t(o.name),c:e.t(o.phone),d:e.t("admin"===o.role?"管理员":"回收员"),e:e.n(o.role),f:e.o(e=>(e=>{r.value=e,i.name=e.name,i.phone=e.phone,i.role=e.role,t.value=!0})(o),o.id),g:e.o(n=>{return l=o.id,void e.index.showModal({title:"确认删除",content:"确定要删除此用户吗?",success:o=>{o.confirm&&(a.deleteUser(l),e.index.showToast({title:"删除成功",icon:"success"}))}});var l},o.id),h:o.id})),e:0===s.value.length},(s.value.length,{}),{f:e.o(c),g:e.o(m),h:e.o(h),i:t.value},t.value?{j:e.t(r.value?"编辑用户":"新增用户"),k:e.o(d),l:i.name,m:e.o(e=>i.name=e.detail.value),n:i.phone,o:e.o(e=>i.phone=e.detail.value),p:"admin"===i.role?1:"",q:e.o(e=>i.role="admin"),r:"collector"===i.role?1:"",s:e.o(e=>i.role="collector"),t:e.o(d),v:e.o(u),w:e.o(()=>{}),x:e.o(d)}:{})}}),a=e._export_sfc(n,[["__scopeId","data-v-6d94a812"]]);wx.createPage(a);
@@ -0,0 +1,5 @@
{
"navigationStyle": "custom",
"navigationBarTitleText": "用户管理",
"usingComponents": {}
}
@@ -0,0 +1 @@
<view class="admin-container data-v-6d94a812"><view class="admin-header data-v-6d94a812"><view class="header-left data-v-6d94a812"><text class="header-title data-v-6d94a812">用户管理</text><text class="header-subtitle data-v-6d94a812">系统用户列表</text></view><view class="header-right data-v-6d94a812" bindtap="{{a}}"><text class="add-icon data-v-6d94a812">+</text><text class="add-text data-v-6d94a812">新增</text></view></view><view class="search-bar data-v-6d94a812"><view class="search-input-wrap data-v-6d94a812"><text class="search-icon data-v-6d94a812">🔍</text><input type="text" class="search-input data-v-6d94a812" placeholder="搜索用户名或手机号" value="{{b}}" bindinput="{{c}}"/></view></view><view class="user-list data-v-6d94a812"><view wx:for="{{d}}" wx:for-item="user" wx:key="h" class="user-card data-v-6d94a812"><view class="user-avatar data-v-6d94a812"><text class="avatar-icon data-v-6d94a812">{{user.a}}</text></view><view class="user-info data-v-6d94a812"><view class="user-name data-v-6d94a812">{{user.b}}</view><view class="user-phone data-v-6d94a812">{{user.c}}</view></view><view class="user-role data-v-6d94a812"><text class="{{['role-tag', 'data-v-6d94a812', user.e]}}">{{user.d}}</text></view><view class="user-actions data-v-6d94a812"><view class="action-btn edit data-v-6d94a812" bindtap="{{user.f}}">✏️</view><view class="action-btn delete data-v-6d94a812" bindtap="{{user.g}}">🗑️</view></view></view></view><view wx:if="{{e}}" class="empty-state data-v-6d94a812"><text class="empty-icon data-v-6d94a812">👥</text><text class="empty-text data-v-6d94a812">暂无用户</text></view><view class="tab-bar data-v-6d94a812"><view class="tab-item data-v-6d94a812" bindtap="{{f}}"><text class="tab-icon data-v-6d94a812">🏠</text><text class="tab-text data-v-6d94a812">首页</text></view><view class="tab-item data-v-6d94a812" bindtap="{{g}}"><text class="tab-icon data-v-6d94a812">📋</text><text class="tab-text data-v-6d94a812">订单</text></view><view class="tab-item data-v-6d94a812" bindtap="{{h}}"><text class="tab-icon data-v-6d94a812">💰</text><text class="tab-text data-v-6d94a812">价格</text></view><view class="tab-item active data-v-6d94a812"><text class="tab-icon data-v-6d94a812">👥</text><text class="tab-text data-v-6d94a812">用户</text></view></view><view wx:if="{{i}}" class="modal-overlay data-v-6d94a812" bindtap="{{x}}"><view class="modal-box data-v-6d94a812" catchtap="{{w}}"><view class="modal-header data-v-6d94a812"><text class="modal-title data-v-6d94a812">{{j}}</text><view class="modal-close data-v-6d94a812" bindtap="{{k}}">×</view></view><view class="modal-body data-v-6d94a812"><view class="form-group data-v-6d94a812"><text class="form-label data-v-6d94a812">用户名</text><input type="text" class="form-input data-v-6d94a812" placeholder="请输入用户名" value="{{l}}" bindinput="{{m}}"/></view><view class="form-group data-v-6d94a812"><text class="form-label data-v-6d94a812">手机号</text><input type="number" class="form-input data-v-6d94a812" placeholder="请输入手机号" value="{{n}}" bindinput="{{o}}"/></view><view class="form-group data-v-6d94a812"><text class="form-label data-v-6d94a812">角色</text><view class="role-options data-v-6d94a812"><view class="{{['role-option', 'data-v-6d94a812', p && 'active']}}" bindtap="{{q}}">管理员</view><view class="{{['role-option', 'data-v-6d94a812', r && 'active']}}" bindtap="{{s}}">回收员</view></view></view></view><view class="modal-footer data-v-6d94a812"><view class="modal-btn cancel data-v-6d94a812" bindtap="{{t}}">取消</view><view class="modal-btn confirm data-v-6d94a812" bindtap="{{v}}">保存</view></view></view></view></view>
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
"use strict";const e=require("../../common/vendor.js"),n=require("../../stores/bluetooth.js"),t=e.defineComponent({__name:"bluetooth",setup(t){const i=n.useBluetoothStore(),c=()=>{i.isDiscovering?i.stopScan():i.startScan()},o=async()=>{await i.disconnect(),e.index.showToast({title:"已断开连接",icon:"none"})};return(n,t)=>{var s;return e.e({a:e.t(e.unref(i).isDiscovering?"⏹️":"🔍"),b:e.t(e.unref(i).isDiscovering?"停止搜索":"搜索设备"),c:e.unref(i).isDiscovering?1:"",d:e.o(c),e:e.unref(i).isConnected},e.unref(i).isConnected?{f:e.t(null==(s=e.unref(i).connectedDevice)?void 0:s.name),g:e.o(o)}:{},{h:e.unref(i).deviceList.length>0},e.unref(i).deviceList.length>0?{i:e.f(e.unref(i).deviceList,(n,t,c)=>{return{a:e.t(n.name),b:e.t(n.deviceId),c:e.t((o=n.RSSI,o>=-50?"📶":o>=-70?"📡":"📴")),d:n.deviceId,e:e.o(t=>(async n=>{i.isConnected&&await i.disconnect(),await i.connect(n),i.isConnected&&(e.index.showToast({title:"连接成功",icon:"success"}),setTimeout(()=>{e.index.navigateBack()},1500))})(n.deviceId),n.deviceId)};var o})}:{})}}}),i=e._export_sfc(t,[["__scopeId","data-v-7381148d"]]);wx.createPage(i);
@@ -0,0 +1,6 @@
{
"navigationBarTitleText": "蓝牙连接",
"navigationBarBackgroundColor": "#3366ff",
"navigationBarTextStyle": "white",
"usingComponents": {}
}
@@ -0,0 +1 @@
<view class="container data-v-7381148d"><view class="scan-header data-v-7381148d"><view class="{{['scan-btn', 'data-v-7381148d', c && 'scanning']}}" bindtap="{{d}}"><text class="scan-icon data-v-7381148d">{{a}}</text><text class="data-v-7381148d">{{b}}</text></view></view><view class="status-section data-v-7381148d"><view wx:if="{{e}}" class="status-item connected data-v-7381148d"><text class="status-dot data-v-7381148d"></text><text class="status-text data-v-7381148d">已连接接 {{f}}</text><view class="disconnect-btn data-v-7381148d" bindtap="{{g}}">断开</view></view><view wx:else class="status-item disconnected data-v-7381148d"><text class="status-dot data-v-7381148d"></text><text class="status-text data-v-7381148d">未连接接设备</text></view></view><view wx:if="{{h}}" class="device-list data-v-7381148d"><view class="list-title data-v-7381148d"><text class="list-icon data-v-7381148d">📱</text><text class="data-v-7381148d">可用设备</text></view><view wx:for="{{i}}" wx:for-item="device" wx:key="d" class="device-item data-v-7381148d" bindtap="{{device.e}}"><view class="device-info data-v-7381148d"><text class="device-icon data-v-7381148d">📦</text><view class="device-detail data-v-7381148d"><text class="device-name data-v-7381148d">{{device.a}}</text><text class="device-id data-v-7381148d">{{device.b}}</text></view></view><view class="device-signal data-v-7381148d"><text class="data-v-7381148d">{{device.c}}</text></view></view></view><view wx:else class="empty-state data-v-7381148d"><text class="empty-icon data-v-7381148d">📡</text><text class="empty-text data-v-7381148d">暂无可用设备</text><text class="empty-hint data-v-7381148d">请确保电子秤已开启蓝牙</text></view><view class="tips-card data-v-7381148d"><text class="tips-icon data-v-7381148d">💡</text><text class="tips-text data-v-7381148d">搜索范围10米,设备名称通常包含"Scale"</text></view></view>
@@ -0,0 +1 @@
.container.data-v-7381148d{min-height:100vh;background:#f5f5f5;padding:32rpx}.scan-header.data-v-7381148d{margin-bottom:24rpx}.scan-btn.data-v-7381148d{background:#fff;border-radius:40rpx;padding:24rpx;display:flex;align-items:center;justify-content:center;font-size:32rpx;font-weight:600;color:#36f;box-shadow:0 4rpx 12rpx rgba(0,0,0,.06)}.scan-btn.scanning.data-v-7381148d{background:#fee2e2;color:#ef4444}.scan-icon.data-v-7381148d{margin-right:12rpx}.status-section.data-v-7381148d{margin-bottom:32rpx}.status-item.data-v-7381148d{display:flex;align-items:center;padding:20rpx 24rpx;border-radius:12rpx}.status-item.connected.data-v-7381148d{background:#dcfce7}.status-item.disconnected.data-v-7381148d{background:#fef2f2}.status-dot.data-v-7381148d{width:16rpx;height:16rpx;border-radius:50%;margin-right:12rpx}.connected .status-dot.data-v-7381148d{background:#22c55e}.disconnected .status-dot.data-v-7381148d{background:#ef4444}.status-text.data-v-7381148d{flex:1;font-size:28rpx}.connected .status-text.data-v-7381148d{color:#166534}.disconnected .status-text.data-v-7381148d{color:#991b1b}.disconnect-btn.data-v-7381148d{font-size:26rpx;color:#ef4444;padding:8rpx 20rpx;background:rgba(239,68,68,.1);border-radius:8rpx}.device-list.data-v-7381148d{background:#fff;border-radius:16rpx;overflow:hidden;margin-bottom:24rpx}.list-title.data-v-7381148d{display:flex;align-items:center;padding:24rpx;font-size:30rpx;font-weight:600;color:#333;border-bottom:1rpx solid #f0f0f0}.list-icon.data-v-7381148d{margin-right:12rpx}.device-item.data-v-7381148d{display:flex;justify-content:space-between;align-items:center;padding:24rpx;border-bottom:1rpx solid #f0f0f0}.device-item.data-v-7381148d:last-child{border-bottom:none}.device-item.data-v-7381148d:active{background:#f9fafb}.device-info.data-v-7381148d{display:flex;align-items:center;flex:1}.device-icon.data-v-7381148d{font-size:40rpx;margin-right:16rpx}.device-detail.data-v-7381148d{display:flex;flex-direction:column}.device-name.data-v-7381148d{font-size:30rpx;font-weight:600;color:#333;margin-bottom:4rpx}.device-id.data-v-7381148d{font-size:22rpx;color:#999}.device-signal.data-v-7381148d{font-size:26rpx;color:#666;padding:6rpx 16rpx;background:#f3f4f6;border-radius:20rpx}.empty-state.data-v-7381148d{display:flex;flex-direction:column;align-items:center;padding:80rpx 40rpx;background:#fff;border-radius:16rpx;margin-bottom:24rpx}.empty-icon.data-v-7381148d{font-size:80rpx;margin-bottom:20rpx}.empty-text.data-v-7381148d{font-size:32rpx;font-weight:600;color:#333;margin-bottom:8rpx}.empty-hint.data-v-7381148d{font-size:26rpx;color:#999}.tips-card.data-v-7381148d{background:#eff6ff;border:1rpx solid #dbeafe;border-radius:12rpx;padding:20rpx 24rpx;display:flex;align-items:center}.tips-icon.data-v-7381148d{font-size:32rpx;margin-right:12rpx}.tips-text.data-v-7381148d{font-size:26rpx;color:#1e40af}
+1
View File
@@ -0,0 +1 @@
"use strict";const e=require("../../common/vendor.js"),t=require("../../common/assets.js"),r=require("../../stores/price.js"),s=require("../../stores/region.js"),i=require("../../utils/price.js"),a=require("../../api/index.js"),o=e.defineComponent({__name:"index",setup(o){const u=r.usePriceStore(),n=s.useRegionStore(),c=e.ref([]),l=e.ref([]),d=e.ref([]),f=e.ref([]),v=e.ref(!1),m=e.ref(!1),g=e.ref(!1),y=e.ref(!1),C=()=>{e.index.navigateTo({url:"/pages/price/price"})},p=async e=>{const t=await a.regionApi.getDistricts(e);l.value=[...t,"其他"]},w=async e=>{n.setDistrict(e),m.value=!1,await(async(e,t)=>{const r="其他"===t?"":t,s=await a.regionApi.getStations(e,r);d.value=[...s,"其他"]})(n.selectedCity,e)},_=async e=>{n.setCommunity(e),g.value=!1,await(async()=>{const e=n.selectedCommunity;if(e){const t=await a.regionApi.getSiteUsers(e);t.length>0?f.value=[...t]:f.value=["新增商户","新增个人"]}else f.value=["新增商户","新增个人"]})()},U=e=>{n.setCustomDistrict(e.detail.value)},D=e=>{n.setCustomCommunity(e.detail.value)},x=e=>{n.setCustomUser(e.detail.value)},S=()=>{v.value=!1,m.value=!1,g.value=!1,y.value=!1};return e.onMounted(async()=>{e.index.getStorageSync("collector_login")?(u.loadPrices(),await(async()=>{c.value=await a.regionApi.getCities()})(),n.selectedCity&&await p(n.selectedCity)):e.index.redirectTo({url:"/pages/user/login"})}),e.onShow(()=>{u.loadPrices()}),(r,s)=>e.e({a:t._imports_0,b:e.o(C),c:t._imports_1,d:e.t(e.unref(n).selectedCity||"请选择城市"),e:e.o(e=>v.value=!0),f:e.t(e.unref(n).selectedDistrict||"请选择区"),g:e.o(e=>m.value=!0),h:e.unref(n).selectedCity?"":1,i:"其他"===e.unref(n).selectedDistrict},"其他"===e.unref(n).selectedDistrict?{j:e.unref(n).customDistrict,k:e.o(U)}:{},{l:e.t(e.unref(n).selectedCommunity||"请选择回收站点"),m:e.o(e=>g.value=!0),n:e.unref(n).selectedDistrict?"":1,o:"其他"===e.unref(n).selectedCommunity},"其他"===e.unref(n).selectedCommunity?{p:e.unref(n).customCommunity,q:e.o(D)}:{},{r:e.t(e.unref(n).selectedUser||"请选择用户"),s:e.o(e=>y.value=!0),t:e.unref(n).selectedCommunity?"":1,v:"新增商户"===e.unref(n).selectedUser},"新增商户"===e.unref(n).selectedUser?{w:e.unref(n).customUser,x:e.o(x)}:{},{y:"新增个人"===e.unref(n).selectedUser},"新增个人"===e.unref(n).selectedUser?{z:e.unref(n).customUser,A:e.o(x)}:{},{B:t._imports_2,C:e.f(e.unref(u).prices,(t,r,s)=>({a:e.t(e.unref(i.getCategoryIcon)(t.category)),b:e.t(t.name),c:e.t(t.price),d:e.t("kg"===t.unit?"kg":"个"),e:t.category,f:e.o(r=>{return s=t.category,void e.index.navigateTo({url:`/pages/weigh/weigh?category=${s}`});var s},t.category)})),D:v.value},v.value?{E:e.o(S),F:e.f(c.value,(t,r,s)=>({a:e.t(t),b:t,c:e.unref(n).selectedCity===t?1:"",d:e.o(e=>(async e=>{n.setCity(e),v.value=!1,await p(e)})(t),t)})),G:e.o(()=>{}),H:e.o(S)}:{},{I:m.value},m.value?{J:e.o(S),K:e.f(l.value,(t,r,s)=>({a:e.t(t),b:t,c:e.unref(n).selectedDistrict===t?1:"",d:e.o(e=>w(t),t)})),L:e.o(()=>{}),M:e.o(S)}:{},{N:g.value},g.value?{O:e.o(S),P:e.f(d.value,(t,r,s)=>({a:e.t(t),b:t,c:e.unref(n).selectedCommunity===t?1:"",d:e.o(e=>_(t),t)})),Q:e.o(()=>{}),R:e.o(S)}:{},{S:y.value},y.value?{T:e.o(S),U:e.f(f.value,(t,r,s)=>({a:e.t(t),b:t,c:e.unref(n).selectedUser===t?1:"",d:e.o(e=>(e=>{n.setUser(e),y.value=!1})(t),t)})),V:e.o(()=>{}),W:e.o(S)}:{})}}),u=e._export_sfc(o,[["__scopeId","data-v-56a56d45"]]);wx.createPage(u);
+6
View File
@@ -0,0 +1,6 @@
{
"navigationBarTitleText": "易分宝回收",
"navigationBarBackgroundColor": "#3366ff",
"navigationBarTextStyle": "white",
"usingComponents": {}
}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
.container.data-v-56a56d45{min-height:100vh;background:#f5f5f5}.content.data-v-56a56d45{padding:48rpx 32rpx 180rpx}.region-card.data-v-56a56d45{background:#fff;border-radius:16rpx;padding:24rpx;margin-bottom:32rpx;box-shadow:0 4rpx 12rpx rgba(0,0,0,.05)}.region-title.data-v-56a56d45{font-size:28rpx;font-weight:600;color:#333;margin-bottom:20rpx;display:flex;align-items:center}.region-icon.data-v-56a56d45{width:36rpx;height:36rpx;margin-right:12rpx}.region-row.data-v-56a56d45{margin-bottom:16rpx}.region-item.data-v-56a56d45{display:flex;align-items:center;justify-content:space-between}.region-label.data-v-56a56d45{font-size:28rpx;color:#666;width:120rpx}.region-select.data-v-56a56d45{flex:1;display:flex;align-items:center;justify-content:space-between;padding:16rpx 20rpx;background:#f8f8f8;border-radius:8rpx;font-size:28rpx;color:#333}.region-select.disabled.data-v-56a56d45{opacity:.5;pointer-events:none}.region-select .arrow.data-v-56a56d45{font-size:20rpx;color:#999}.custom-region.data-v-56a56d45{padding-left:120rpx;margin-bottom:16rpx}.custom-region .region-input.data-v-56a56d45{width:calc(100% - 20rpx);height:80rpx;padding:20rpx;background:#f8f8f8;border-radius:8rpx;font-size:28rpx;box-sizing:border-box;margin-left:10rpx;line-height:40rpx}.picker-overlay.data-v-56a56d45{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);display:flex;align-items:flex-end;z-index:1000}.picker-content.data-v-56a56d45{width:100%;background:#fff;border-radius:24rpx 24rpx 0 0;max-height:60vh}.picker-header.data-v-56a56d45{display:flex;justify-content:space-between;align-items:center;padding:24rpx 32rpx;border-bottom:1rpx solid #f0f0f0}.picker-title.data-v-56a56d45{font-size:32rpx;font-weight:600;color:#333}.picker-close.data-v-56a56d45{font-size:36rpx;color:#999}.picker-list.data-v-56a56d45{max-height:50vh}.picker-item.data-v-56a56d45{padding:28rpx 32rpx;font-size:30rpx;color:#333;border-bottom:1rpx solid #f5f5f5}.picker-item.active.data-v-56a56d45{color:#36f;background:#f0f5ff}.price-card.data-v-56a56d45{background:#fff;border-radius:16rpx;padding:24rpx;display:flex;justify-content:space-between;align-items:center;margin-bottom:32rpx;box-shadow:0 4rpx 12rpx rgba(0,0,0,.05)}.price-card-left.data-v-56a56d45{display:flex;align-items:center}.price-icon.data-v-56a56d45{width:40rpx;height:40rpx;margin-right:16rpx}.price-label.data-v-56a56d45{font-size:32rpx;font-weight:600;color:#333}.price-card-right.data-v-56a56d45{color:#36f}.price-arrow.data-v-56a56d45{font-size:40rpx;opacity:.8}.section-title.data-v-56a56d45{display:flex;align-items:center;margin-bottom:24rpx;font-size:32rpx;font-weight:600;color:#333}.section-icon.data-v-56a56d45{width:36rpx;height:36rpx;margin-right:12rpx}.category-grid.data-v-56a56d45{display:flex;flex-wrap:wrap;gap:24rpx;justify-content:space-between;box-sizing:border-box;width:100%}.category-item.data-v-56a56d45{width:47%;background:#fff;border-radius:16rpx;padding:32rpx 24rpx;display:flex;flex-direction:column;align-items:center;box-shadow:0 4rpx 12rpx rgba(0,0,0,.05);transition:all .2s;box-sizing:border-box}.category-item.data-v-56a56d45:active{transform:scale(.98);opacity:.9}.category-icon.data-v-56a56d45{font-size:64rpx;margin-bottom:16rpx}.category-name.data-v-56a56d45{font-size:30rpx;font-weight:600;color:#333;margin-bottom:8rpx}.category-price.data-v-56a56d45{display:flex;align-items:baseline}.price-value.data-v-56a56d45{font-size:36rpx;font-weight:700;color:#36f}.price-unit.data-v-56a56d45{font-size:24rpx;color:#999;margin-left:4rpx}
+1
View File
@@ -0,0 +1 @@
"use strict";const e=require("../../common/vendor.js"),t=require("../../utils/order.js"),n=require("../../utils/price.js"),o=e.defineComponent({__name:"detail",setup(o){const u=e.ref(null),i=()=>{e.index.navigateBack()},a=()=>{e.index.switchTab({url:"/pages/index/index"})};return e.onLoad(async t=>{if(null==t?void 0:t.orderId){const n=e.index.getStorageSync("orders"),o=n?JSON.parse(n):[];u.value=o.find(e=>e.orderId===t.orderId)||null}}),(o,r)=>{var d,l,s,c,v,g,m;return{a:e.t(null==(d=u.value)?void 0:d.orderId),b:e.t(u.value?e.unref(t.formatOrderTime)(u.value.timestamp):"-"),c:e.t("completed"===(null==(l=u.value)?void 0:l.status)?"已完成":"pending"===(null==(s=u.value)?void 0:s.status)?"待处理":"已取消"),d:e.n(null==(c=u.value)?void 0:c.status),e:e.f(null==(v=u.value)?void 0:v.items,(t,o,u)=>({a:e.t(e.unref(n.getCategoryIcon)(t.category)),b:e.t(t.name),c:e.t("kg"===t.unit?"重量":"数量"),d:e.t(t.weight||t.count),e:e.t("kg"===t.unit?"kg":"个"),f:e.t(t.unitPrice),g:e.t("kg"===t.unit?"kg":"个"),h:e.t(t.amount.toFixed(2)),i:o})),f:e.t((null==(g=u.value)?void 0:g.totalAmount.toFixed(2))||"0.00"),g:e.t((null==(m=u.value)?void 0:m.totalAmount.toFixed(2))||"0.00"),h:e.o(i),i:e.o(a)}}}}),u=e._export_sfc(o,[["__scopeId","data-v-8ca850cb"]]);wx.createPage(u);
+6
View File
@@ -0,0 +1,6 @@
{
"navigationBarTitleText": "订单详情",
"navigationBarBackgroundColor": "#3366ff",
"navigationBarTextStyle": "white",
"usingComponents": {}
}
+1
View File
@@ -0,0 +1 @@
<view class="container data-v-8ca850cb"><view class="detail-card data-v-8ca850cb"><view class="detail-header data-v-8ca850cb"><view class="order-info data-v-8ca850cb"><text class="order-id data-v-8ca850cb">{{a}}</text><text class="order-time data-v-8ca850cb">{{b}}</text></view><view class="{{['order-status', 'data-v-8ca850cb', d]}}">{{c}}</view></view><view class="detail-section data-v-8ca850cb"><view class="section-title data-v-8ca850cb"><text class="section-icon data-v-8ca850cb">📦</text><text class="data-v-8ca850cb">回收物品</text></view><view class="items-list data-v-8ca850cb"><view wx:for="{{e}}" wx:for-item="item" wx:key="i" class="item-card data-v-8ca850cb"><view class="item-left data-v-8ca850cb"><text class="item-icon data-v-8ca850cb">{{item.a}}</text><view class="item-info data-v-8ca850cb"><text class="item-name data-v-8ca850cb">{{item.b}}</text><text class="item-spec data-v-8ca850cb">{{item.c}}: {{item.d}} {{item.e}}</text></view></view><view class="item-right data-v-8ca850cb"><text class="item-price data-v-8ca850cb">¥{{item.f}}/{{item.g}}</text><text class="item-amount data-v-8ca850cb">¥{{item.h}}</text></view></view></view></view><view class="detail-section data-v-8ca850cb"><view class="section-title data-v-8ca850cb"><text class="section-icon data-v-8ca850cb">💰</text><text class="data-v-8ca850cb">金额明细</text></view><view class="amount-detail data-v-8ca850cb"><view class="amount-row data-v-8ca850cb"><text class="amount-label data-v-8ca850cb">物品总价</text><text class="amount-value data-v-8ca850cb">¥{{f}}</text></view><view class="amount-row data-v-8ca850cb"><text class="amount-label data-v-8ca850cb">优惠金额</text><text class="amount-value discount data-v-8ca850cb">-¥0.00</text></view><view class="amount-row total data-v-8ca850cb"><text class="amount-label data-v-8ca850cb">实付金额</text><text class="amount-value data-v-8ca850cb">¥{{g}}</text></view></view></view></view><view class="bottom-actions data-v-8ca850cb"><view class="action-btn secondary data-v-8ca850cb" bindtap="{{h}}"><text class="data-v-8ca850cb">返回</text></view><view class="action-btn primary data-v-8ca850cb" bindtap="{{i}}"><text class="data-v-8ca850cb">继续回收</text></view></view></view>
+1
View File
@@ -0,0 +1 @@
.container.data-v-8ca850cb{min-height:100vh;background:#f5f5f5;padding:32rpx 32rpx 160rpx}.detail-card.data-v-8ca850cb{background:#fff;border-radius:16rpx;overflow:hidden}.detail-header.data-v-8ca850cb{display:flex;justify-content:space-between;align-items:flex-start;padding:28rpx 24rpx;background:linear-gradient(135deg,#36f,#254edb)}.order-info.data-v-8ca850cb{display:flex;flex-direction:column}.order-id.data-v-8ca850cb{font-size:30rpx;font-weight:600;color:#fff;margin-bottom:8rpx}.order-time.data-v-8ca850cb{font-size:24rpx;color:rgba(255,255,255,.8)}.order-status.data-v-8ca850cb{font-size:24rpx;padding:8rpx 20rpx;border-radius:20rpx;background:rgba(255,255,255,.2);color:#fff}.detail-section.data-v-8ca850cb{padding:24rpx;border-bottom:1rpx solid #f0f0f0}.detail-section.data-v-8ca850cb:last-child{border-bottom:none}.section-title.data-v-8ca850cb{display:flex;align-items:center;font-size:30rpx;font-weight:600;color:#333;margin-bottom:20rpx}.section-icon.data-v-8ca850cb{margin-right:12rpx}.items-list.data-v-8ca850cb{display:flex;flex-direction:column;gap:16rpx}.item-card.data-v-8ca850cb{display:flex;justify-content:space-between;align-items:center;padding:20rpx;background:#f9fafb;border-radius:12rpx}.item-left.data-v-8ca850cb{display:flex;align-items:center;flex:1}.item-icon.data-v-8ca850cb{font-size:44rpx;margin-right:16rpx}.item-info.data-v-8ca850cb{display:flex;flex-direction:column}.item-name.data-v-8ca850cb{font-size:30rpx;font-weight:600;color:#333;margin-bottom:4rpx}.item-spec.data-v-8ca850cb{font-size:24rpx;color:#999}.item-right.data-v-8ca850cb{display:flex;flex-direction:column;align-items:flex-end}.item-price.data-v-8ca850cb{font-size:24rpx;color:#999;margin-bottom:4rpx}.item-amount.data-v-8ca850cb{font-size:32rpx;font-weight:600;color:#36f}.amount-detail.data-v-8ca850cb{background:#f9fafb;border-radius:12rpx;padding:20rpx}.amount-row.data-v-8ca850cb{display:flex;justify-content:space-between;align-items:center;padding:12rpx 0}.amount-row.total.data-v-8ca850cb{padding-top:16rpx;margin-top:12rpx;border-top:1rpx dashed #e5e7eb}.amount-label.data-v-8ca850cb{font-size:28rpx;color:#666}.total .amount-label.data-v-8ca850cb{font-weight:600;color:#333}.amount-value.data-v-8ca850cb{font-size:28rpx;font-weight:600;color:#333}.amount-value.discount.data-v-8ca850cb{color:#f59e0b}.total .amount-value.data-v-8ca850cb{font-size:36rpx;color:#36f}.bottom-actions.data-v-8ca850cb{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,.05)}.action-btn.data-v-8ca850cb{flex:1;border-radius:40rpx;padding:24rpx;text-align:center;font-size:32rpx;font-weight:600}.action-btn.secondary.data-v-8ca850cb{background:#f3f4f6;color:#666}.action-btn.primary.data-v-8ca850cb{background:linear-gradient(135deg,#36f,#254edb);color:#fff}.action-btn.data-v-8ca850cb:active{opacity:.85}
+1
View File
@@ -0,0 +1 @@
"use strict";const e=require("../../common/vendor.js"),t=require("../../stores/order.js"),r=require("../../utils/order.js"),u=e.defineComponent({__name:"list",setup(u){const d=t.useOrderStore(),i=e.ref([]),o=e.computed(()=>d.orders.length>0&&i.value.length===d.orders.length),n=e.computed(()=>i.value.reduce((e,t)=>{const r=d.orders.find(e=>e.id===t);return e+((null==r?void 0:r.totalAmount)||0)},0)),l=()=>{o.value?i.value=[]:i.value=d.orders.map(e=>e.id)},s=e=>{const t=[];return e.city&&t.push(e.city),e.district&&t.push(e.district),e.community&&t.push(e.community),t.join(" > ")||"未选择区域"};return e.onMounted(()=>{d.loadOrders()}),(t,u)=>e.e({a:e.unref(d).orders.length>0},e.unref(d).orders.length>0?{b:e.f(e.unref(d).orders,(t,u,o)=>e.e({a:i.value.includes(t.id)},(i.value.includes(t.id),{}),{b:i.value.includes(t.id)?1:"",c:e.o(e=>(e=>{const t=i.value.indexOf(e);t>-1?i.value.splice(t,1):i.value.push(e)})(t.id),t.id),d:e.t(s(t)),e:e.t(e.unref(r.formatOrderTime)(t.createTime)),f:e.f(t.items,(t,r,u)=>({a:e.t(t.name),b:e.t(t.weight||t.count),c:e.t("kg"===t.unit?"kg":"个"),d:e.t(t.price.toFixed(2)),e:e.t("kg"===t.unit?"kg":"个"),f:e.t(t.amount.toFixed(2)),g:r})),g:e.t(t.totalAmount.toFixed(2)),h:e.o(r=>{return u=t.id,void e.index.showModal({title:"确认删除",content:"确定要删除这笔订单吗?",success:async e=>{e.confirm&&(await d.deleteOrder(u),i.value=i.value.filter(e=>e!==u))}});var u},t.id),i:t.id}))}:{},{c:i.value.length>0},i.value.length>0?e.e({d:o.value},(o.value,{}),{e:o.value?1:"",f:e.o(l),g:e.t(i.value.length),h:e.t(n.value.toFixed(2))}):{})}}),d=e._export_sfc(u,[["__scopeId","data-v-4039793c"]]);wx.createPage(d);
+6
View File
@@ -0,0 +1,6 @@
{
"navigationBarTitleText": "订单列表",
"navigationBarBackgroundColor": "#3366ff",
"navigationBarTextStyle": "white",
"usingComponents": {}
}
+1
View File
@@ -0,0 +1 @@
<view class="container data-v-4039793c"><view class="content data-v-4039793c"><view wx:if="{{a}}" class="order-list data-v-4039793c"><view wx:for="{{b}}" wx:for-item="order" wx:key="i" class="order-item data-v-4039793c"><view class="order-checkbox data-v-4039793c" catchtap="{{order.c}}"><view class="{{['checkbox', 'data-v-4039793c', order.b && 'checked']}}"><text wx:if="{{order.a}}" class="check-icon data-v-4039793c">✓</text></view></view><view class="order-content data-v-4039793c"><view class="order-header data-v-4039793c"><view class="order-region data-v-4039793c"><text class="region-icon data-v-4039793c">📍</text><text class="region-text data-v-4039793c">{{order.d}}</text></view><text class="order-time data-v-4039793c">{{order.e}}</text></view><view class="order-items data-v-4039793c"><view wx:for="{{order.f}}" wx:for-item="item" wx:key="g" class="order-item-row data-v-4039793c"><text class="item-name data-v-4039793c">{{item.a}}</text><view class="item-info data-v-4039793c"><text class="item-weight data-v-4039793c">{{item.b}} {{item.c}}</text><text class="item-price data-v-4039793c">¥{{item.d}}/{{item.e}}</text></view><text class="item-amount data-v-4039793c">¥{{item.f}}</text></view></view><view class="order-footer data-v-4039793c"><view class="order-total data-v-4039793c"><text class="total-label data-v-4039793c">合计:</text><text class="total-amount data-v-4039793c">¥{{order.g}}</text></view><view class="order-actions data-v-4039793c"><text class="delete-btn data-v-4039793c" catchtap="{{order.h}}">删除</text></view></view></view></view></view><view wx:else class="empty-state data-v-4039793c"><text class="empty-icon data-v-4039793c">📭</text><text class="empty-text data-v-4039793c">暂无订单</text><text class="empty-hint data-v-4039793c">完成回收后将在此显示订单记录</text></view></view><view wx:if="{{c}}" class="bottom-bar data-v-4039793c"><view class="select-all data-v-4039793c" bindtap="{{f}}"><view class="{{['checkbox', 'data-v-4039793c', e && 'checked']}}"><text wx:if="{{d}}" class="check-icon data-v-4039793c">✓</text></view><text class="select-text data-v-4039793c">全选</text></view><view class="selected-info data-v-4039793c"><text class="selected-count data-v-4039793c">已选 {{g}} 单</text><text class="selected-total data-v-4039793c">合计: ¥{{h}}</text></view></view></view>
+1
View File
@@ -0,0 +1 @@
.container.data-v-4039793c{min-height:100vh;background:#f5f5f5;padding-bottom:120rpx}.content.data-v-4039793c{padding:32rpx}.order-list.data-v-4039793c{display:flex;flex-direction:column;gap:24rpx}.order-item.data-v-4039793c{display:flex;background:#fff;border-radius:16rpx;padding:24rpx;box-shadow:0 2rpx 12rpx rgba(0,0,0,.04)}.order-checkbox.data-v-4039793c{display:flex;align-items:flex-start;padding-right:20rpx;padding-top:8rpx}.checkbox.data-v-4039793c{width:44rpx;height:44rpx;border:2rpx solid #ddd;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .2s}.checkbox.checked.data-v-4039793c{background:#36f;border-color:#36f}.check-icon.data-v-4039793c{color:#fff;font-size:24rpx;font-weight:700}.order-content.data-v-4039793c{flex:1}.order-header.data-v-4039793c{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-4039793c{display:flex;align-items:center;flex:1}.region-icon.data-v-4039793c{font-size:28rpx;margin-right:8rpx}.region-text.data-v-4039793c{font-size:26rpx;color:#333;font-weight:500}.order-time.data-v-4039793c{font-size:24rpx;color:#999}.order-items.data-v-4039793c{margin-bottom:16rpx}.order-item-row.data-v-4039793c{display:flex;justify-content:space-between;align-items:center;padding:12rpx 0}.order-item-row.data-v-4039793c:not(:last-child){border-bottom:1rpx solid #f8f9fa}.item-name.data-v-4039793c{font-size:28rpx;color:#333;flex:1}.item-info.data-v-4039793c{display:flex;flex-direction:column;align-items:flex-end;flex:2;margin-right:16rpx}.item-weight.data-v-4039793c{font-size:24rpx;color:#666}.item-price.data-v-4039793c{font-size:24rpx;color:#999}.item-amount.data-v-4039793c{font-size:28rpx;font-weight:600;color:#36f}.order-footer.data-v-4039793c{display:flex;justify-content:space-between;align-items:center;padding-top:16rpx;border-top:1rpx dashed #f0f0f0}.order-total.data-v-4039793c{display:flex;align-items:baseline}.total-label.data-v-4039793c{font-size:26rpx;color:#666;margin-right:8rpx}.total-amount.data-v-4039793c{font-size:36rpx;font-weight:700;color:#36f}.order-actions.data-v-4039793c{margin-left:16rpx}.delete-btn.data-v-4039793c{font-size:26rpx;color:#ff4d4f;padding:8rpx 16rpx;border:1rpx solid #ff4d4f;border-radius:8rpx}.empty-state.data-v-4039793c{display:flex;flex-direction:column;align-items:center;padding:120rpx 40rpx;background:#fff;border-radius:16rpx}.empty-icon.data-v-4039793c{font-size:100rpx;margin-bottom:24rpx}.empty-text.data-v-4039793c{font-size:32rpx;font-weight:600;color:#333;margin-bottom:12rpx}.empty-hint.data-v-4039793c{font-size:26rpx;color:#999}.bottom-bar.data-v-4039793c{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,.08)}.select-all.data-v-4039793c{display:flex;align-items:center}.select-text.data-v-4039793c{font-size:28rpx;color:#333;margin-left:12rpx}.selected-info.data-v-4039793c{display:flex;align-items:baseline;gap:16rpx}.selected-count.data-v-4039793c{font-size:26rpx;color:#666}.selected-total.data-v-4039793c{font-size:32rpx;font-weight:700;color:#36f}.batch-delete.data-v-4039793c{margin-left:16rpx}.batch-delete-btn.data-v-4039793c{font-size:28rpx;color:#fff;padding:12rpx 24rpx;background:#ff4d4f;border-radius:8rpx}
+1
View File
@@ -0,0 +1 @@
"use strict";const e=require("../../common/vendor.js"),t=require("../../common/assets.js"),r=require("../../stores/price.js"),s=require("../../utils/price.js"),o=e.defineComponent({__name:"price",setup(o){const c=r.usePriceStore(),i=()=>{c.loadPrices(),e.index.showToast({title:"已刷新新",icon:"success"})};return e.onMounted(()=>{c.loadPrices()}),(r,o)=>({a:t._imports_0,b:e.t(e.unref(c).date),c:e.o(i),d:e.f(e.unref(c).prices,(t,r,o)=>({a:e.t(e.unref(s.getCategoryIcon)(t.category)),b:e.t(t.name),c:e.t("kg"===t.unit?"重量":"个数"),d:e.t(t.price),e:e.t("kg"===t.unit?"kg":"个"),f:t.category}))})}}),c=e._export_sfc(o,[["__scopeId","data-v-c0174a40"]]);wx.createPage(c);
+6
View File
@@ -0,0 +1,6 @@
{
"navigationBarTitleText": "今日价格",
"navigationBarBackgroundColor": "#3366ff",
"navigationBarTextStyle": "white",
"usingComponents": {}
}
+1
View File
@@ -0,0 +1 @@
<view class="container data-v-c0174a40"><view class="date-header data-v-c0174a40"><view class="date-label-wrap data-v-c0174a40"><image class="date-icon data-v-c0174a40" src="{{a}}" mode="aspectFit"/><text class="date-label data-v-c0174a40">今日价格</text></view><text class="date-value data-v-c0174a40">{{b}}</text></view><view class="refresh-btn data-v-c0174a40" bindtap="{{c}}"><text class="refresh-icon data-v-c0174a40">🔄</text><text class="data-v-c0174a40">刷新</text></view><view class="price-list data-v-c0174a40"><view wx:for="{{d}}" wx:for-item="item" wx:key="f" class="price-item data-v-c0174a40"><view class="price-item-left data-v-c0174a40"><text class="price-icon data-v-c0174a40">{{item.a}}</text><view class="price-info data-v-c0174a40"><text class="price-name data-v-c0174a40">{{item.b}}</text><text class="price-desc data-v-c0174a40">按{{item.c}}计价</text></view></view><view class="price-item-right data-v-c0174a40"><text class="price-amount data-v-c0174a40"><text class="currency data-v-c0174a40">¥</text><text class="amount-num data-v-c0174a40">{{item.d}}</text><text class="amount-unit data-v-c0174a40">/{{item.e}}</text></text></view></view></view><view class="tips-card data-v-c0174a40"><text class="tips-icon data-v-c0174a40">💡</text><text class="tips-text data-v-c0174a40">价格每日更新,实际回收以当日价格为准</text></view></view>
+1
View File
@@ -0,0 +1 @@
.container.data-v-c0174a40{min-height:100vh;background:#f5f5f5;padding:32rpx}.date-header.data-v-c0174a40{display:flex;justify-content:space-between;align-items:center;margin-bottom:32rpx}.date-label-wrap.data-v-c0174a40{display:flex;align-items:center}.date-icon.data-v-c0174a40{width:48rpx;height:48rpx;margin-right:12rpx}.date-label.data-v-c0174a40{font-size:40rpx;font-weight:700;color:#333}.date-value.data-v-c0174a40{font-size:28rpx;color:#666}.refresh-btn.data-v-c0174a40{display:flex;align-items:center;justify-content:center;background:#fff;border-radius:40rpx;padding:16rpx 32rpx;margin-bottom:24rpx;font-size:28rpx;color:#36f;box-shadow:0 2rpx 8rpx rgba(0,0,0,.06)}.refresh-icon.data-v-c0174a40{margin-right:8rpx}.price-list.data-v-c0174a40{background:#fff;border-radius:16rpx;overflow:hidden;margin-bottom:24rpx}.price-item.data-v-c0174a40{display:flex;justify-content:space-between;align-items:center;padding:28rpx 24rpx;border-bottom:1rpx solid #f0f0f0}.price-item.data-v-c0174a40:last-child{border-bottom:none}.price-item-left.data-v-c0174a40{display:flex;align-items:center}.price-icon.data-v-c0174a40{font-size:48rpx;margin-right:20rpx}.price-info.data-v-c0174a40{display:flex;flex-direction:column}.price-name.data-v-c0174a40{font-size:32rpx;font-weight:600;color:#333;margin-bottom:4rpx}.price-desc.data-v-c0174a40{font-size:24rpx;color:#999}.price-item-right.data-v-c0174a40,.price-amount.data-v-c0174a40{display:flex;align-items:baseline}.currency.data-v-c0174a40{font-size:28rpx;font-weight:600;color:#36f}.amount-num.data-v-c0174a40{font-size:44rpx;font-weight:700;color:#36f;margin-left:4rpx}.amount-unit.data-v-c0174a40{font-size:24rpx;color:#999;margin-left:4rpx}.tips-card.data-v-c0174a40{background:#fffbeb;border:1rpx solid #fef3c7;border-radius:12rpx;padding:20rpx 24rpx;display:flex;align-items:center}.tips-icon.data-v-c0174a40{font-size:32rpx;margin-right:12rpx}.tips-text.data-v-c0174a40{font-size:26rpx;color:#92400e}
+1
View File
@@ -0,0 +1 @@
"use strict";const e=require("../../common/vendor.js"),o=e.defineComponent({__name:"login",setup(o){const n=e.ref(""),l=e.ref(""),i=e.ref(!1),t=e.ref(!1),a=[{id:"1",name:"管理员",phone:"13800138000",role:"admin",createTime:"2024-01-01"},{id:"2",name:"回收员小王",phone:"18698102228",role:"collector",createTime:"2024-01-15"}],s=async()=>{if(n.value)if(11===n.value.length)if(l.value){t.value=!0;try{const o=a.find(e=>e.phone===n.value&&"collector"===e.role);console.log("Available users:",JSON.stringify(a)),console.log("Input phone:",n.value),console.log("Found user:",JSON.stringify(o)),o?"123456"===l.value?(e.index.setStorageSync("collector_login",!0),e.index.setStorageSync("collector_info",JSON.stringify(o)),e.index.showToast({title:"登录成功",icon:"success"}),setTimeout(()=>{e.index.switchTab({url:"/pages/index/index"})},1500)):e.index.showToast({title:"密码错误",icon:"none"}):e.index.showToast({title:"用户不存在",icon:"none"})}catch(o){console.error("Login error:",o),e.index.showToast({title:"登录失败",icon:"none"})}finally{t.value=!1}}else e.index.showToast({title:"请输入密码",icon:"none"});else e.index.showToast({title:"请输入正确的手机号",icon:"none"});else e.index.showToast({title:"请输入手机号",icon:"none"})},c=()=>{e.index.showToast({title:"请联系管理员重置密码",icon:"none"})};return(o,a)=>e.e({a:n.value,b:e.o(e=>n.value=e.detail.value),c:l.value,d:e.o(e=>l.value=e.detail.value),e:i.value},(i.value,{}),{f:i.value?1:"",g:e.o(e=>i.value=!i.value),h:t.value},(t.value,{}),{i:e.o(s),j:t.value?1:"",k:e.o(c)})}}),n=e._export_sfc(o,[["__scopeId","data-v-d9e76be2"]]);wx.createPage(n);
+5
View File
@@ -0,0 +1,5 @@
{
"navigationStyle": "custom",
"navigationBarTitleText": "登录",
"usingComponents": {}
}
+1
View File
@@ -0,0 +1 @@
<view class="login-container data-v-d9e76be2"><view class="login-box data-v-d9e76be2"><view class="login-logo data-v-d9e76be2">♻️</view><view class="login-title data-v-d9e76be2">易分宝回收</view><view class="login-subtitle data-v-d9e76be2">回收员登录</view><view class="form-group data-v-d9e76be2"><view class="form-label data-v-d9e76be2">手机号</view><input type="text" class="form-input data-v-d9e76be2" placeholder="请输入手机号" maxlength="11" value="{{a}}" bindinput="{{b}}"/></view><view class="form-group data-v-d9e76be2"><view class="form-label data-v-d9e76be2">密码</view><input type="password" class="form-input data-v-d9e76be2" placeholder="请输入密码" value="{{c}}" bindinput="{{d}}"/></view><view class="form-group data-v-d9e76be2"><view class="checkbox data-v-d9e76be2" bindtap="{{g}}"><view class="{{['checkbox-box', 'data-v-d9e76be2', f && 'checked']}}"><text wx:if="{{e}}" class="data-v-d9e76be2">✓</text></view><text class="data-v-d9e76be2">记住密码</text></view></view><view bindtap="{{i}}" class="{{['login-btn', 'data-v-d9e76be2', j && 'disabled']}}"><text wx:if="{{h}}" class="data-v-d9e76be2">登录中...</text><text wx:else class="data-v-d9e76be2">登录</text></view><view class="forgot-link data-v-d9e76be2" bindtap="{{k}}"><text class="data-v-d9e76be2">忘记密码?</text></view></view></view>
+1
View File
@@ -0,0 +1 @@
.login-container.data-v-d9e76be2{min-height:100vh;background:linear-gradient(135deg,#36f,#254edb);display:flex;align-items:center;justify-content:center;padding:32rpx}.login-box.data-v-d9e76be2{width:100%;max-width:600rpx;background:#fff;border-radius:24rpx;padding:64rpx 48rpx;box-shadow:0 20rpx 60rpx rgba(0,0,0,.15)}.login-logo.data-v-d9e76be2{font-size:96rpx;text-align:center;margin-bottom:24rpx}.login-title.data-v-d9e76be2{font-size:40rpx;font-weight:700;color:#333;text-align:center;margin-bottom:8rpx}.login-subtitle.data-v-d9e76be2{font-size:28rpx;color:#999;text-align:center;margin-bottom:48rpx}.form-group.data-v-d9e76be2{margin-bottom:32rpx}.form-label.data-v-d9e76be2{font-size:28rpx;color:#666;margin-bottom:12rpx}.form-input.data-v-d9e76be2{width:100%;height:88rpx;border:2rpx solid #e5e7eb;border-radius:12rpx;padding:0 24rpx;font-size:32rpx;box-sizing:border-box}.form-input.data-v-d9e76be2:focus{border-color:#36f}.checkbox.data-v-d9e76be2{display:flex;align-items:center;font-size:26rpx;color:#666}.checkbox-box.data-v-d9e76be2{width:40rpx;height:40rpx;border:2rpx solid #ccc;border-radius:8rpx;display:flex;align-items:center;justify-content:center;margin-right:12rpx;font-size:24rpx;color:#fff}.checkbox-box.checked.data-v-d9e76be2{background:#36f;border-color:#36f}.login-btn.data-v-d9e76be2{width:100%;height:88rpx;background:linear-gradient(135deg,#36f,#254edb);border-radius:12rpx;display:flex;align-items:center;justify-content:center;margin-top:16rpx}.login-btn text.data-v-d9e76be2{font-size:32rpx;font-weight:600;color:#fff}.login-btn.data-v-d9e76be2:active:not(.disabled){opacity:.9}.login-btn.disabled.data-v-d9e76be2{opacity:.6}.forgot-link.data-v-d9e76be2{text-align:center;margin-top:32rpx}.forgot-link text.data-v-d9e76be2{font-size:26rpx;color:#36f}
+1
View File
@@ -0,0 +1 @@
"use strict";const e=require("../../common/vendor.js"),t=e.defineComponent({__name:"profile",setup(t){const o=e.ref([]),n=e.computed(()=>{const e=(new Date).toDateString();return o.value.filter(t=>new Date(t.timestamp).toDateString()===e).length}),a=e.computed(()=>{const e=(new Date).toDateString();return o.value.filter(t=>new Date(t.timestamp).toDateString()===e).reduce((e,t)=>e+t.totalAmount,0)}),r=e.computed(()=>o.value.length),u=()=>{e.index.navigateTo({url:"/pages/price/price"})},i=()=>{e.index.navigateTo({url:"/pages/bluetooth/bluetooth"})},c=()=>{e.index.showModal({title:"关于我们",content:"易分宝现场回收 v1.0.0\n\n致力于为回收行业提供便捷的现场回收解决方案",showCancel:!1})};return e.onMounted(()=>{const t=e.index.getStorageSync("orders");o.value=t?JSON.parse(t):[]}),(t,o)=>({a:e.t(n.value),b:e.t(a.value.toFixed(2)),c:e.t(r.value),d:e.o(u),e:e.o(i),f:e.o(c)})}}),o=e._export_sfc(t,[["__scopeId","data-v-50e886ff"]]);wx.createPage(o);
+6
View File
@@ -0,0 +1,6 @@
{
"navigationBarTitleText": "个人中心",
"navigationBarBackgroundColor": "#3366ff",
"navigationBarTextStyle": "white",
"usingComponents": {}
}
+1
View File
@@ -0,0 +1 @@
<view class="container data-v-50e886ff"><view class="user-card data-v-50e886ff"><view class="avatar data-v-50e886ff"><text class="avatar-icon data-v-50e886ff">👤</text></view><view class="user-info data-v-50e886ff"><text class="user-name data-v-50e886ff">回收员</text><text class="user-id data-v-50e886ff">ID: YFB20260514</text></view><view class="edit-btn data-v-50e886ff"><text class="data-v-50e886ff">✏️</text></view></view><view class="stats-card data-v-50e886ff"><view class="stat-item data-v-50e886ff"><text class="stat-value data-v-50e886ff">{{a}}</text><text class="stat-label data-v-50e886ff">今日订单</text></view><view class="stat-divider data-v-50e886ff"></view><view class="stat-item data-v-50e886ff"><text class="stat-value data-v-50e886ff">¥{{b}}</text><text class="stat-label data-v-50e886ff">今日收入</text></view><view class="stat-divider data-v-50e886ff"></view><view class="stat-item data-v-50e886ff"><text class="stat-value data-v-50e886ff">{{c}}</text><text class="stat-label data-v-50e886ff">累计订单</text></view></view><view class="menu-card data-v-50e886ff"><view class="menu-title data-v-50e886ff">功能菜单</view><view class="menu-list data-v-50e886ff"><view class="menu-item data-v-50e886ff" bindtap="{{d}}"><text class="menu-icon data-v-50e886ff">📊</text><text class="menu-text data-v-50e886ff">价格查询</text><text class="menu-arrow data-v-50e886ff"></text></view><view class="menu-item data-v-50e886ff" bindtap="{{e}}"><text class="menu-icon data-v-50e886ff">📱</text><text class="menu-text data-v-50e886ff">蓝牙设置</text><text class="menu-arrow data-v-50e886ff"></text></view><view class="menu-item data-v-50e886ff" bindtap="{{f}}"><text class="menu-icon data-v-50e886ff">️</text><text class="menu-text data-v-50e886ff">关于我们</text><text class="menu-arrow data-v-50e886ff"></text></view></view></view><view class="version-info data-v-50e886ff"><text class="version-text data-v-50e886ff">易分宝现场回?v1.0.0</text></view></view>
+1
View File
@@ -0,0 +1 @@
.container.data-v-50e886ff{min-height:100vh;background:#f5f5f5;padding:32rpx}.user-card.data-v-50e886ff{background:linear-gradient(135deg,#36f,#254edb);border-radius:20rpx;padding:32rpx;display:flex;align-items:center;margin-bottom:24rpx}.avatar.data-v-50e886ff{width:100rpx;height:100rpx;background:rgba(255,255,255,.2);border-radius:50%;display:flex;align-items:center;justify-content:center;margin-right:20rpx}.avatar-icon.data-v-50e886ff{font-size:56rpx}.user-info.data-v-50e886ff{flex:1;display:flex;flex-direction:column}.user-name.data-v-50e886ff{font-size:36rpx;font-weight:600;color:#fff;margin-bottom:8rpx}.user-id.data-v-50e886ff{font-size:24rpx;color:rgba(255,255,255,.8)}.edit-btn.data-v-50e886ff{width:60rpx;height:60rpx;background:rgba(255,255,255,.2);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:36rpx;color:#fff}.stats-card.data-v-50e886ff{background:#fff;border-radius:16rpx;padding:32rpx;display:flex;justify-content:space-around;margin-bottom:24rpx;box-shadow:0 2rpx 12rpx rgba(0,0,0,.04)}.stat-item.data-v-50e886ff{display:flex;flex-direction:column;align-items:center;flex:1}.stat-value.data-v-50e886ff{font-size:48rpx;font-weight:700;color:#36f;margin-bottom:8rpx}.stat-label.data-v-50e886ff{font-size:24rpx;color:#999}.stat-divider.data-v-50e886ff{width:1rpx;background:#f0f0f0}.menu-card.data-v-50e886ff{background:#fff;border-radius:16rpx;overflow:hidden;box-shadow:0 2rpx 12rpx rgba(0,0,0,.04)}.menu-title.data-v-50e886ff{padding:24rpx;font-size:30rpx;font-weight:600;color:#333;border-bottom:1rpx solid #f0f0f0}.menu-list.data-v-50e886ff{padding:0 24rpx}.menu-item.data-v-50e886ff{display:flex;align-items:center;padding:28rpx 0;border-bottom:1rpx solid #f8f9fa}.menu-item.data-v-50e886ff:last-child{border-bottom:none}.menu-item.data-v-50e886ff:active{opacity:.7}.menu-icon.data-v-50e886ff{font-size:40rpx;margin-right:20rpx}.menu-text.data-v-50e886ff{flex:1;font-size:30rpx;color:#333}.menu-arrow.data-v-50e886ff{font-size:36rpx;color:#ccc}.version-info.data-v-50e886ff{text-align:center;padding:48rpx}.version-text.data-v-50e886ff{font-size:24rpx;color:#999}
+1
View File
@@ -0,0 +1 @@
"use strict";const e=require("../../common/vendor.js"),t=require("../../stores/price.js"),o=require("../../stores/bluetooth.js"),u=require("../../stores/order.js"),a=require("../../stores/region.js"),l=e.defineComponent({__name:"weigh",setup(l){const n=t.usePriceStore(),i=o.useBluetoothStore(),v=u.useOrderStore(),r=a.useRegionStore(),s=e.ref(""),c=e.ref(0),d=e.ref(0),g=e.ref(""),h=e.ref("bluetooth"),m=e.ref(""),p=e.computed(()=>n.getPriceByCategory(s.value)),f=e.computed(()=>{if(!p.value)return 0;const e="kg"===p.value.unit?"bluetooth"===h.value?c.value:parseFloat(m.value)||0:d.value;return Number((e*p.value.price).toFixed(2))});e.onLoad(async e=>{(null==e?void 0:e.category)&&(s.value=e.category),await n.loadPrices(),i.init()});const x=()=>{e.index.navigateTo({url:"/pages/bluetooth/bluetooth"})},b=()=>{i.resetWeight(),c.value=0},w=()=>{d.value>0&&(d.value--,g.value=d.value.toString())},k=()=>{d.value++,g.value=d.value.toString()},y=()=>{const e=parseInt(g.value)||0;d.value=Math.max(0,e)},F=e=>{d.value+=e,g.value=d.value.toString()},S=e=>{h.value=e,"manual"===e&&(m.value=c.value>0?c.value.toString():"")},j=()=>{const e=parseFloat(m.value);!isNaN(e)&&e>=0&&(c.value=e)},q=e=>{const t=parseFloat(m.value)||0;m.value=(t+e).toFixed(2),j()},C=async()=>{if(!p.value)return void e.index.showToast({title:"请选择回收种类",icon:"none"});const t="kg"===p.value.unit?"bluetooth"===h.value?c.value:parseFloat(m.value)||0:d.value;if(t<=0)return void e.index.showToast({title:"kg"===p.value.unit?"请输入重量":"请输入数量",icon:"none"});const o={category:p.value.category,name:p.value.name,weight:"kg"===p.value.unit?t:void 0,count:"piece"===p.value.unit?d.value:void 0,unit:p.value.unit,price:p.value.price,amount:f.value};e.index.showModal({title:"确认回收",content:`确定回收${p.value.name} ${t}${"kg"===p.value.unit?"kg":"个"},金额¥${f.value.toFixed(2)}`,success:async t=>{if(t.confirm){e.index.showLoading({title:"保存中..."});const t=r.getRegion(),u=await v.createOrder([o],t);e.index.hideLoading(),u?(e.index.showToast({title:"回收成功",icon:"success"}),setTimeout(()=>{e.index.navigateBack()},1500)):e.index.showToast({title:"保存失败",icon:"none"})}}})};return e.onMounted(()=>{const e=()=>{c.value=i.currentWeight};i.$subscribe(()=>{e()}),e()}),e.onShow(()=>{n.loadPrices()}),(t,o)=>{var u,a,l,n,v;return e.e({a:e.t(e.unref(i).isConnected?"🔵":"⚪"),b:e.t(e.unref(i).isConnected?"已连接":"未连接"),c:e.unref(i).isConnected?1:"",d:e.t((null==(u=p.value)?void 0:u.name)||"-"),e:e.t((null==(a=p.value)?void 0:a.price)||0),f:e.t("kg"===(null==(l=p.value)?void 0:l.unit)?"kg":"个"),g:"kg"===(null==(n=p.value)?void 0:n.unit)},"kg"===(null==(v=p.value)?void 0:v.unit)?e.e({h:"bluetooth"===h.value?1:"",i:e.o(e=>S("bluetooth")),j:"manual"===h.value?1:"",k:e.o(e=>S("manual")),l:"bluetooth"===h.value},"bluetooth"===h.value?{m:e.t(c.value.toFixed(2))}:{n:e.o([e=>m.value=e.detail.value,j]),o:m.value},{p:"bluetooth"===h.value},"bluetooth"===h.value?{q:e.o(x),r:e.o(b)}:{s:e.o(e=>q(.5)),t:e.o(e=>q(1)),v:e.o(e=>q(2)),w:e.o(e=>q(5))}):{x:e.o([e=>g.value=e.detail.value,y]),y:g.value,z:e.o(w),A:e.o(k),B:e.o(e=>F(1)),C:e.o(e=>F(5)),D:e.o(e=>F(10)),E:e.o(e=>F(50))},{F:e.t(f.value.toFixed(2)),G:e.o(C)})}}}),n=e._export_sfc(l,[["__scopeId","data-v-594d2caf"]]);wx.createPage(n);
+6
View File
@@ -0,0 +1,6 @@
{
"navigationBarTitleText": "称重回收",
"navigationBarBackgroundColor": "#3366ff",
"navigationBarTextStyle": "white",
"usingComponents": {}
}
+1
View File
@@ -0,0 +1 @@
<view class="container data-v-594d2caf"><view class="status-bar data-v-594d2caf"><view class="{{['bluetooth-status', 'data-v-594d2caf', c && 'connected']}}"><text class="status-icon data-v-594d2caf">{{a}}</text><text class="data-v-594d2caf">{{b}}</text></view></view><view class="info-card data-v-594d2caf"><view class="info-item data-v-594d2caf"><text class="info-label data-v-594d2caf">回收种类</text><text class="info-value data-v-594d2caf">{{d}}</text></view><view class="info-item data-v-594d2caf"><text class="info-label data-v-594d2caf">单价</text><text class="info-value price-text data-v-594d2caf">¥{{e}}/{{f}}</text></view></view><view wx:if="{{g}}" class="display-card data-v-594d2caf"><view class="display-icon data-v-594d2caf">📏</view><view class="display-title data-v-594d2caf">重量输入</view><view class="mode-switch data-v-594d2caf"><view class="{{['mode-btn', 'data-v-594d2caf', h && 'active']}}" bindtap="{{i}}"><text class="data-v-594d2caf">蓝牙称重</text></view><view class="{{['mode-btn', 'data-v-594d2caf', j && 'active']}}" bindtap="{{k}}"><text class="data-v-594d2caf">手动输入</text></view></view><view wx:if="{{l}}" class="display-value-wrap data-v-594d2caf"><text class="display-value data-v-594d2caf">{{m}}</text><text class="display-unit data-v-594d2caf">kg</text></view><view wx:else class="manual-input data-v-594d2caf"><input class="data-v-594d2caf" type="digit" placeholder="请输入重量" bindinput="{{n}}" value="{{o}}"/><text class="input-unit data-v-594d2caf">kg</text></view><view wx:if="{{p}}" class="control-row data-v-594d2caf"><view class="control-btn data-v-594d2caf" bindtap="{{q}}"><text class="control-icon data-v-594d2caf">📱</text><text class="data-v-594d2caf">蓝牙连接</text></view><view class="control-btn data-v-594d2caf" bindtap="{{r}}"><text class="control-icon data-v-594d2caf">⚖️</text><text class="data-v-594d2caf">归零</text></view></view><view wx:else class="quick-input data-v-594d2caf"><view class="quick-btn data-v-594d2caf" bindtap="{{s}}">+0.5kg</view><view class="quick-btn data-v-594d2caf" bindtap="{{t}}">+1kg</view><view class="quick-btn data-v-594d2caf" bindtap="{{v}}">+2kg</view><view class="quick-btn data-v-594d2caf" bindtap="{{w}}">+5kg</view></view></view><view wx:else class="display-card data-v-594d2caf"><view class="display-icon data-v-594d2caf">🥫</view><view class="display-title data-v-594d2caf">个数统计</view><view class="manual-input data-v-594d2caf"><input class="data-v-594d2caf" type="number" placeholder="请输入数量" bindinput="{{x}}" value="{{y}}"/><text class="input-unit data-v-594d2caf">个</text></view><view class="count-controls data-v-594d2caf"><view class="count-btn minus data-v-594d2caf" bindtap="{{z}}"><text class="data-v-594d2caf">-</text></view><view class="count-btn plus data-v-594d2caf" bindtap="{{A}}"><text class="data-v-594d2caf">+</text></view></view><view class="quick-input data-v-594d2caf"><view class="quick-btn data-v-594d2caf" bindtap="{{B}}">+1</view><view class="quick-btn data-v-594d2caf" bindtap="{{C}}">+5</view><view class="quick-btn data-v-594d2caf" bindtap="{{D}}">+10</view><view class="quick-btn data-v-594d2caf" bindtap="{{E}}">+50</view></view></view><view class="amount-card data-v-594d2caf"><view class="amount-title data-v-594d2caf">💰 预估金额</view><view class="amount-value-wrap data-v-594d2caf"><text class="amount-currency data-v-594d2caf">¥</text><text class="amount-num data-v-594d2caf">{{F}}</text></view></view><view class="confirm-btn data-v-594d2caf" bindtap="{{G}}"><text class="data-v-594d2caf">确认回收</text></view></view>
File diff suppressed because one or more lines are too long