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
+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);
+5
View File
@@ -0,0 +1,5 @@
{
"navigationStyle": "custom",
"navigationBarTitleText": "订单管理",
"usingComponents": {}
}
+1
View File
@@ -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>
+1
View File
@@ -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");if(!Array){e.resolveComponent("uni-icons")()}Math;const a=e.defineComponent({__name:"list",setup(a){const i=t.usePriceStore(),r=e.ref(""),n=e.ref(!1),c=e.ref(null),s=e.ref(""),u=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,s.value="",u.category="",u.name="",u.price="",u.unit="kg"},g=()=>{u.category?u.name?!u.price||parseFloat(u.price)<=0?e.index.showToast({title:"请输入有效单价",icon:"none"}):(c.value?(i.updatePrice({category:u.category,name:u.name,price:parseFloat(u.price),unit:u.unit}),e.index.showToast({title:"修改成功",icon:"success"})):(i.addPrice({category:u.category,name:u.name,price:parseFloat(u.price),unit:u.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:"7291cdc6-0-"+r,b:e.p({type:e.unref(o.getCategoryIcon)(t.category),size:48,color:"#3366ff"}),c:e.t(t.name),d:e.t(t.category),e:e.t(t.price),f:e.t("kg"===t.unit?"kg":"个"),g:e.o(e=>(e=>{c.value=e,s.value=e.category,u.category=e.category,u.name=e.name,u.price=e.price.toString(),u.unit=e.unit,n.value=!0})(t),t.category),h: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),i: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:u.category,m:e.o(e=>u.category=e.detail.value),n:u.name,o:e.o(e=>u.name=e.detail.value),p:u.price,q:e.o(e=>u.price=e.detail.value),r:"kg"===u.unit?1:"",s:e.o(e=>u.unit="kg"),t:"piece"===u.unit?1:"",v:e.o(e=>u.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-7291cdc6"]]);wx.createPage(i);
+7
View File
@@ -0,0 +1,7 @@
{
"navigationStyle": "custom",
"navigationBarTitleText": "价格管理",
"usingComponents": {
"uni-icons": "../../../node-modules/@dcloudio/uni-ui/lib/uni-icons/uni-icons"
}
}
+1
View File
@@ -0,0 +1 @@
<view class="admin-container data-v-7291cdc6"><view class="admin-header data-v-7291cdc6"><view class="header-left data-v-7291cdc6"><text class="header-title data-v-7291cdc6">价格管理</text><text class="header-subtitle data-v-7291cdc6">回收品类价格设置</text></view><view class="header-right data-v-7291cdc6" bindtap="{{a}}"><text class="add-icon data-v-7291cdc6">+</text><text class="add-text data-v-7291cdc6">新增</text></view></view><view class="search-bar data-v-7291cdc6"><view class="search-input-wrap data-v-7291cdc6"><text class="search-icon data-v-7291cdc6">🔍</text><input type="text" class="search-input data-v-7291cdc6" placeholder="搜索品类名称" value="{{b}}" bindinput="{{c}}"/></view></view><view class="category-list data-v-7291cdc6"><view wx:for="{{d}}" wx:for-item="item" wx:key="i" class="category-card data-v-7291cdc6"><view class="category-icon-wrap data-v-7291cdc6"><uni-icons wx:if="{{item.b}}" class="category-icon data-v-7291cdc6" u-i="{{item.a}}" bind:__l="__l" u-p="{{item.b}}"/></view><view class="category-info data-v-7291cdc6"><view class="category-name data-v-7291cdc6">{{item.c}}</view><view class="category-category data-v-7291cdc6">{{item.d}}</view></view><view class="category-price-info data-v-7291cdc6"><view class="price-value data-v-7291cdc6">¥{{item.e}}</view><view class="price-unit data-v-7291cdc6">/{{item.f}}</view></view><view class="category-actions data-v-7291cdc6"><view class="action-btn edit data-v-7291cdc6" bindtap="{{item.g}}">✏️</view><view class="action-btn delete data-v-7291cdc6" bindtap="{{item.h}}">🗑️</view></view></view></view><view wx:if="{{e}}" class="empty-state data-v-7291cdc6"><text class="empty-icon data-v-7291cdc6">📦</text><text class="empty-text data-v-7291cdc6">暂无品类</text></view><view class="tab-bar data-v-7291cdc6"><view class="tab-item data-v-7291cdc6" bindtap="{{f}}"><text class="tab-icon data-v-7291cdc6">🏠</text><text class="tab-text data-v-7291cdc6">首页</text></view><view class="tab-item data-v-7291cdc6" bindtap="{{g}}"><text class="tab-icon data-v-7291cdc6">📋</text><text class="tab-text data-v-7291cdc6">订单</text></view><view class="tab-item active data-v-7291cdc6"><text class="tab-icon data-v-7291cdc6">💰</text><text class="tab-text data-v-7291cdc6">价格</text></view><view class="tab-item data-v-7291cdc6" bindtap="{{h}}"><text class="tab-icon data-v-7291cdc6">👥</text><text class="tab-text data-v-7291cdc6">用户</text></view></view><view wx:if="{{i}}" class="modal-overlay data-v-7291cdc6" bindtap="{{z}}"><view class="modal-box data-v-7291cdc6" catchtap="{{y}}"><view class="modal-header data-v-7291cdc6"><text class="modal-title data-v-7291cdc6">{{j}}</text><view class="modal-close data-v-7291cdc6" bindtap="{{k}}">×</view></view><view class="modal-body data-v-7291cdc6"><view class="form-group data-v-7291cdc6"><text class="form-label data-v-7291cdc6">品类代码</text><input type="text" class="form-input data-v-7291cdc6" placeholder="如:plastic_bottle" value="{{l}}" bindinput="{{m}}"/></view><view class="form-group data-v-7291cdc6"><text class="form-label data-v-7291cdc6">品类名称</text><input type="text" class="form-input data-v-7291cdc6" placeholder="如:塑料瓶" value="{{n}}" bindinput="{{o}}"/></view><view class="form-group data-v-7291cdc6"><text class="form-label data-v-7291cdc6">单价</text><view class="price-input-wrap data-v-7291cdc6"><text class="price-symbol data-v-7291cdc6">¥</text><input type="digit" class="form-input price-input data-v-7291cdc6" placeholder="0.00" value="{{p}}" bindinput="{{q}}"/></view></view><view class="form-group data-v-7291cdc6"><text class="form-label data-v-7291cdc6">单位</text><view class="unit-options data-v-7291cdc6"><view class="{{['unit-option', 'data-v-7291cdc6', r && 'active']}}" bindtap="{{s}}">kg</view><view class="{{['unit-option', 'data-v-7291cdc6', t && 'active']}}" bindtap="{{v}}">个</view></view></view></view><view class="modal-footer data-v-7291cdc6"><view class="modal-btn cancel data-v-7291cdc6" bindtap="{{w}}">取消</view><view class="modal-btn confirm data-v-7291cdc6" 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);
+6
View File
@@ -0,0 +1,6 @@
{
"navigationBarTitleText": "统计报表",
"navigationBarBackgroundColor": "#3366ff",
"navigationBarTextStyle": "white",
"usingComponents": {}
}
+1
View File
@@ -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>
+1
View File
@@ -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 l=o.useUserStore(),t=e.ref(""),a=e.ref(!1),r=e.ref(null),i=e.reactive({name:"",phone:"",role:"collector"}),s=e.computed(()=>{let e=l.users;if(t.value){const o=t.value.toLowerCase();e=e.filter(e=>e.name.toLowerCase().includes(o)||e.phone.includes(o))}return e}),d=()=>{a.value=!1,r.value=null,i.name="",i.phone="",i.role="collector"},u=()=>{return o=this,n=null,t=function*(){i.name?i.phone&&11===i.phone.length?(r.value?(yield l.updateUser({id:r.value.id,name:i.name,phone:i.phone,role:i.role}),e.index.showToast({title:"修改成功",icon:"success"})):(yield l.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"})},new Promise((e,l)=>{var a=e=>{try{i(t.next(e))}catch(o){l(o)}},r=e=>{try{i(t.throw(e))}catch(o){l(o)}},i=o=>o.done?e(o.value):Promise.resolve(o.value).then(a,r);i((t=t.apply(o,n)).next())});var o,n,t},c=()=>{e.index.redirectTo({url:"/pages/admin/index"})},h=()=>{e.index.redirectTo({url:"/pages/admin/order/list"})},v=()=>{e.index.redirectTo({url:"/pages/admin/price/list"})};return e.onMounted(()=>{l.loadUsers()}),(o,n)=>e.e({a:e.o(e=>a.value=!0),b:t.value,c:e.o(e=>t.value=e.detail.value),d:e.f(s.value,(o,n,t)=>({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,a.value=!0})(o),o.id),g:e.o(n=>{return t=o.id,void e.index.showModal({title:"确认删除",content:"确定要删除此用户吗?",success:o=>{o.confirm&&(l.deleteUser(t),e.index.showToast({title:"删除成功",icon:"success"}))}});var t},o.id),h:o.id})),e:0===s.value.length},(s.value.length,{}),{f:e.o(c),g:e.o(h),h:e.o(v),i:a.value},a.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)}:{})}}),l=e._export_sfc(n,[["__scopeId","data-v-6d94a812"]]);wx.createPage(l);
+5
View File
@@ -0,0 +1,5 @@
{
"navigationStyle": "custom",
"navigationBarTitleText": "用户管理",
"usingComponents": {}
}
+1
View File
@@ -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