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 @@
<view><slot/></view>
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./common/vendor.js");Math;const o=e.defineComponent({__name:"App",setup:o=>(e.onLaunch(()=>{console.log("App Launch")}),e.onShow(()=>{console.log("App Show")}),e.onHide(()=>{console.log("App Hide")}),(e,o)=>({}))});function n(){const n=e.createSSRApp(o),p=e.createPinia();return n.use(p),{app:n,pinia:p}}n().app.mount("#app"),exports.createApp=n;
+45
View File
@@ -0,0 +1,45 @@
{
"pages": [
"pages/user/login",
"pages/index/index",
"pages/price/price",
"pages/weigh/weigh",
"pages/bluetooth/bluetooth",
"pages/order/list",
"pages/order/detail",
"pages/user/profile",
"pages/admin/login",
"pages/admin/index",
"pages/admin/order/list",
"pages/admin/price/list",
"pages/admin/user/list",
"pages/admin/statistics"
],
"window": {
"navigationBarTextStyle": "white",
"navigationBarTitleText": "易分宝现场回收",
"navigationBarBackgroundColor": "#3366ff",
"backgroundColor": "#f5f5f5"
},
"tabBar": {
"color": "#999999",
"selectedColor": "#3366ff",
"borderStyle": "black",
"backgroundColor": "#ffffff",
"list": [
{
"pagePath": "pages/index/index",
"text": "首页",
"iconPath": "static/icons/home.png",
"selectedIconPath": "static/icons/home-active.png"
},
{
"pagePath": "pages/order/list",
"text": "订单",
"iconPath": "static/icons/order.png",
"selectedIconPath": "static/icons/order-active.png"
}
]
},
"usingComponents": {}
}
+2
View File
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

+1
View File
@@ -0,0 +1 @@
"use strict";exports._imports_0="/static/logo.png",exports._imports_0$1="/assets/Price.0f657164.png",exports._imports_0$2="/static/icons/bluetooth.png",exports._imports_0$3="/static/icons/empty-device.png",exports._imports_0$4="/static/no-orders.png",exports._imports_1="/static/Location.png",exports._imports_1$1="/static/icons/zero.png",exports._imports_1$2="/static/icons/remind.png",exports._imports_2="/assets/Recycle.06ae8010.png";
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
"use strict";var s;const r=null==(s={baseUrl:"/api"})?void 0:s.baseUrl;exports.BASE_URL=r;
@@ -0,0 +1 @@
"use strict";const t=require("../../../../../common/vendor.js"),e={name:"UniIcons",emits:["click"],props:{type:{type:String,default:""},color:{type:String,default:"#333333"},size:{type:[Number,String],default:16},customPrefix:{type:String,default:""},fontFamily:{type:String,default:""}},data:()=>({icons:t.fontData}),computed:{unicode(){let t=this.icons.find(t=>t.font_class===this.type);return t?t.unicode:""},iconSize(){return"number"==typeof(t=this.size)||/^[0-9]*$/g.test(t)?t+"px":t;var t},styleObj(){return""!==this.fontFamily?`color: ${this.color}; font-size: ${this.iconSize}; font-family: ${this.fontFamily};`:`color: ${this.color}; font-size: ${this.iconSize};`}},methods:{_onClick(t){this.$emit("click",t)}}};const i=t._export_sfc(e,[["render",function(e,i,o,n,s,c){return{a:t.s(c.styleObj),b:t.n("uniui-"+o.type),c:t.n(o.customPrefix),d:t.n(o.customPrefix?o.type:""),e:t.o((...t)=>c._onClick&&c._onClick(...t))}}]]);wx.createComponent(i);
@@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}
@@ -0,0 +1 @@
<text style="{{a}}" class="{{['uni-icons', b, c, d]}}" bindtap="{{e}}"><slot></slot></text>
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"),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
+1
View File
@@ -0,0 +1 @@
"use strict";var e=(e,n,t)=>new Promise((i,o)=>{var s=e=>{try{r(t.next(e))}catch(n){o(n)}},c=e=>{try{r(t.throw(e))}catch(n){o(n)}},r=e=>e.done?i(e.value):Promise.resolve(e.value).then(s,c);r((t=t.apply(e,n)).next())});const n=require("../../common/vendor.js"),t=require("../../common/assets.js"),i=require("../../stores/bluetooth.js"),o=n.defineComponent({__name:"bluetooth",setup(o){const s=i.useBluetoothStore(),c=()=>{s.isDiscovering?s.stopScan():s.startScan()},r=t=>e(this,null,function*(){s.isConnected&&(yield s.disconnect()),yield s.connect(t),s.isConnected&&(n.index.showToast({title:"连接成功",icon:"success"}),setTimeout(()=>{n.index.navigateBack()},1500))}),d=()=>e(this,null,function*(){yield s.disconnect(),n.index.showToast({title:"已断开连接",icon:"none"})});return(e,i)=>{var o;return n.e({a:n.unref(s).isDiscovering?"/static/icons/remind.png":"/static/icons/search.png",b:n.t(n.unref(s).isDiscovering?"停止搜索":"搜索设备"),c:n.unref(s).isDiscovering?1:"",d:n.o(c),e:n.unref(s).isConnected},n.unref(s).isConnected?{f:n.t(null==(o=n.unref(s).connectedDevice)?void 0:o.name),g:n.o(d)}:{},{h:n.unref(s).deviceList.length>0},n.unref(s).deviceList.length>0?{i:n.f(n.unref(s).deviceList,(e,t,i)=>{return{a:n.t(e.name),b:n.t(e.deviceId),c:n.t((o=e.RSSI,o>=-50?"📶":o>=-70?"📡":"📴")),d:e.deviceId,e:n.o(n=>r(e.deviceId),e.deviceId)};var o})}:{j:t._imports_0$3},{k:t._imports_1$2})}}}),s=n._export_sfc(o,[["__scopeId","data-v-5964b8fb"]]);wx.createPage(s);
+6
View File
@@ -0,0 +1,6 @@
{
"navigationBarTitleText": "蓝牙连接",
"navigationBarBackgroundColor": "#3366ff",
"navigationBarTextStyle": "white",
"usingComponents": {}
}
+1
View File
@@ -0,0 +1 @@
<view class="container data-v-5964b8fb"><view class="scan-header data-v-5964b8fb"><view class="{{['scan-btn', 'data-v-5964b8fb', c && 'scanning']}}" bindtap="{{d}}"><image class="scan-icon-img data-v-5964b8fb" src="{{a}}" mode="aspectFit"/><text class="data-v-5964b8fb">{{b}}</text></view></view><view class="status-section data-v-5964b8fb"><view wx:if="{{e}}" class="status-item connected data-v-5964b8fb"><text class="status-dot data-v-5964b8fb"></text><text class="status-text data-v-5964b8fb">已连接接 {{f}}</text><view class="disconnect-btn data-v-5964b8fb" bindtap="{{g}}">断开</view></view><view wx:else class="status-item disconnected data-v-5964b8fb"><text class="status-dot data-v-5964b8fb"></text><text class="status-text data-v-5964b8fb">未连接接设备</text></view></view><view wx:if="{{h}}" class="device-list data-v-5964b8fb"><view class="list-title data-v-5964b8fb"><text class="list-icon data-v-5964b8fb">📱</text><text class="data-v-5964b8fb">可用设备</text></view><view wx:for="{{i}}" wx:for-item="device" wx:key="d" class="device-item data-v-5964b8fb" bindtap="{{device.e}}"><view class="device-info data-v-5964b8fb"><text class="device-icon data-v-5964b8fb">📦</text><view class="device-detail data-v-5964b8fb"><text class="device-name data-v-5964b8fb">{{device.a}}</text><text class="device-id data-v-5964b8fb">{{device.b}}</text></view></view><view class="device-signal data-v-5964b8fb"><text class="data-v-5964b8fb">{{device.c}}</text></view></view></view><view wx:else class="empty-state data-v-5964b8fb"><image class="empty-icon-img data-v-5964b8fb" src="{{j}}" mode="aspectFit"/><text class="empty-text data-v-5964b8fb">暂无可用设备</text><text class="empty-hint data-v-5964b8fb">请确保电子秤已开启蓝牙</text></view><view class="tips-card data-v-5964b8fb"><image class="tips-icon-img data-v-5964b8fb" src="{{k}}" mode="aspectFit"/><text class="tips-text data-v-5964b8fb">搜索范围10米,设备名称通常包含"Scale"</text></view></view>
+1
View File
@@ -0,0 +1 @@
.container.data-v-5964b8fb{min-height:100vh;background:#f5f5f5;padding:32rpx}.scan-header.data-v-5964b8fb{margin-bottom:24rpx}.scan-btn.data-v-5964b8fb{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-5964b8fb{background:#fee2e2;color:#ef4444}.scan-icon.data-v-5964b8fb{margin-right:12rpx}.scan-icon-img.data-v-5964b8fb{width:40rpx;height:40rpx;margin-right:12rpx}.status-section.data-v-5964b8fb{margin-bottom:32rpx}.status-item.data-v-5964b8fb{display:flex;align-items:center;padding:20rpx 24rpx;border-radius:12rpx}.status-item.connected.data-v-5964b8fb{background:#dcfce7}.status-item.disconnected.data-v-5964b8fb{background:#fef2f2}.status-dot.data-v-5964b8fb{width:16rpx;height:16rpx;border-radius:50%;margin-right:12rpx}.connected .status-dot.data-v-5964b8fb{background:#22c55e}.disconnected .status-dot.data-v-5964b8fb{background:#ef4444}.status-text.data-v-5964b8fb{flex:1;font-size:28rpx}.connected .status-text.data-v-5964b8fb{color:#166534}.disconnected .status-text.data-v-5964b8fb{color:#991b1b}.disconnect-btn.data-v-5964b8fb{font-size:26rpx;color:#ef4444;padding:8rpx 20rpx;background:rgba(239,68,68,.1);border-radius:8rpx}.device-list.data-v-5964b8fb{background:#fff;border-radius:16rpx;overflow:hidden;margin-bottom:24rpx}.list-title.data-v-5964b8fb{display:flex;align-items:center;padding:24rpx;font-size:30rpx;font-weight:600;color:#333;border-bottom:1rpx solid #f0f0f0}.list-icon.data-v-5964b8fb{margin-right:12rpx}.device-item.data-v-5964b8fb{display:flex;justify-content:space-between;align-items:center;padding:24rpx;border-bottom:1rpx solid #f0f0f0}.device-item.data-v-5964b8fb:last-child{border-bottom:none}.device-item.data-v-5964b8fb:active{background:#f9fafb}.device-info.data-v-5964b8fb{display:flex;align-items:center;flex:1}.device-icon.data-v-5964b8fb{font-size:40rpx;margin-right:16rpx}.device-detail.data-v-5964b8fb{display:flex;flex-direction:column}.device-name.data-v-5964b8fb{font-size:30rpx;font-weight:600;color:#333;margin-bottom:4rpx}.device-id.data-v-5964b8fb{font-size:22rpx;color:#999}.device-signal.data-v-5964b8fb{font-size:26rpx;color:#666;padding:6rpx 16rpx;background:#f3f4f6;border-radius:20rpx}.empty-state.data-v-5964b8fb{display:flex;flex-direction:column;align-items:center;padding:80rpx 40rpx;background:#fff;border-radius:16rpx;margin-bottom:24rpx}.empty-icon.data-v-5964b8fb{font-size:80rpx;margin-bottom:20rpx}.empty-icon-img.data-v-5964b8fb{width:100rpx;height:100rpx;margin-bottom:20rpx}.empty-text.data-v-5964b8fb{font-size:32rpx;font-weight:600;color:#333;margin-bottom:8rpx}.empty-hint.data-v-5964b8fb{font-size:26rpx;color:#999}.tips-card.data-v-5964b8fb{background:#eff6ff;border:1rpx solid #dbeafe;border-radius:12rpx;padding:20rpx 24rpx;display:flex;align-items:center}.tips-icon.data-v-5964b8fb{font-size:32rpx;margin-right:12rpx}.tips-icon-img.data-v-5964b8fb{width:36rpx;height:36rpx;margin-right:12rpx}.tips-text.data-v-5964b8fb{font-size:26rpx;color:#1e40af}
+1
View File
@@ -0,0 +1 @@
"use strict";var e=(e,t,r)=>new Promise((i,s)=>{var u=e=>{try{n(r.next(e))}catch(t){s(t)}},o=e=>{try{n(r.throw(e))}catch(t){s(t)}},n=e=>e.done?i(e.value):Promise.resolve(e.value).then(u,o);n((r=r.apply(e,t)).next())});const t=require("../../common/vendor.js"),r=require("../../common/assets.js"),i=require("../../stores/price.js"),s=require("../../stores/region.js"),u=require("../../utils/price.js"),o=require("../../api/index.js"),n=t.defineComponent({__name:"index",setup(n){const l=i.usePriceStore(),c=s.useRegionStore(),a=t.ref([]),d=t.ref([]),f=t.ref([]),v=t.ref([]),m=t.ref(!1),y=t.ref(!1),g=t.ref(!1),p=t.ref(!1),C=()=>{t.index.navigateTo({url:"/pages/price/price"})},h=()=>e(this,null,function*(){a.value=yield o.regionApi.getCities()}),_=t=>e(this,null,function*(){const e=yield o.regionApi.getDistricts(t);d.value=[...e,"其他"]}),U=(t,r)=>e(this,null,function*(){const e="其他"===r?"":r,i=yield o.regionApi.getStations(t,e);f.value=[...i,"其他"]}),x=t=>e(this,null,function*(){c.setCity(t),m.value=!1,yield _(t)}),D=t=>e(this,null,function*(){c.setDistrict(t),y.value=!1,yield U(c.selectedCity,t)}),S=()=>e(this,null,function*(){const e=c.selectedCommunity;if(e){const t=yield o.regionApi.getSiteUsers(e);t.length>0?v.value=[...t]:v.value=["新增商户","新增个人"]}else v.value=["新增商户","新增个人"]}),j=t=>e(this,null,function*(){c.setCommunity(t),g.value=!1,yield S()}),q=e=>{c.setCustomDistrict(e.detail.value)},w=e=>{c.setCustomCommunity(e.detail.value)},P=e=>{c.setCustomUser(e.detail.value)},b=()=>{m.value=!1,y.value=!1,g.value=!1,p.value=!1};return t.onMounted(()=>e(this,null,function*(){t.index.getStorageSync("collector_login")?(l.loadPrices(),yield h(),c.selectedCity&&(yield _(c.selectedCity))):t.index.redirectTo({url:"/pages/user/login"})})),t.onShow(()=>{l.loadPrices()}),(e,i)=>t.e({a:r._imports_0$1,b:t.o(C),c:r._imports_1,d:t.t(t.unref(c).selectedCity||"请选择城市"),e:t.o(e=>m.value=!0),f:t.t(t.unref(c).selectedDistrict||"请选择区"),g:t.o(e=>y.value=!0),h:t.unref(c).selectedCity?"":1,i:"其他"===t.unref(c).selectedDistrict},"其他"===t.unref(c).selectedDistrict?{j:t.unref(c).customDistrict,k:t.o(q)}:{},{l:t.t(t.unref(c).selectedCommunity||"请选择回收站点"),m:t.o(e=>g.value=!0),n:t.unref(c).selectedDistrict?"":1,o:"其他"===t.unref(c).selectedCommunity},"其他"===t.unref(c).selectedCommunity?{p:t.unref(c).customCommunity,q:t.o(w)}:{},{r:t.t(t.unref(c).selectedUser||"请选择用户"),s:t.o(e=>p.value=!0),t:t.unref(c).selectedCommunity?"":1,v:"新增商户"===t.unref(c).selectedUser},"新增商户"===t.unref(c).selectedUser?{w:t.unref(c).customUser,x:t.o(P)}:{},{y:"新增个人"===t.unref(c).selectedUser},"新增个人"===t.unref(c).selectedUser?{z:t.unref(c).customUser,A:t.o(P)}:{},{B:r._imports_2,C:t.f(t.unref(l).prices,(e,r,i)=>({a:t.unref(u.getCategoryIcon)(e.category),b:t.t(e.name),c:t.t(e.price),d:t.t("kg"===e.unit?"kg":"个"),e:e.category,f:t.o(r=>{return i=e.category,void t.index.navigateTo({url:`/pages/weigh/weigh?category=${i}`});var i},e.category)})),D:m.value},m.value?{E:t.o(b),F:t.f(a.value,(e,r,i)=>({a:t.t(e),b:e,c:t.unref(c).selectedCity===e?1:"",d:t.o(t=>x(e),e)})),G:t.o(()=>{}),H:t.o(b)}:{},{I:y.value},y.value?{J:t.o(b),K:t.f(d.value,(e,r,i)=>({a:t.t(e),b:e,c:t.unref(c).selectedDistrict===e?1:"",d:t.o(t=>D(e),e)})),L:t.o(()=>{}),M:t.o(b)}:{},{N:g.value},g.value?{O:t.o(b),P:t.f(f.value,(e,r,i)=>({a:t.t(e),b:e,c:t.unref(c).selectedCommunity===e?1:"",d:t.o(t=>j(e),e)})),Q:t.o(()=>{}),R:t.o(b)}:{},{S:p.value},p.value?{T:t.o(b),U:t.f(v.value,(e,r,i)=>({a:t.t(e),b:e,c:t.unref(c).selectedUser===e?1:"",d:t.o(t=>(e=>{c.setUser(e),p.value=!1})(e),e)})),V:t.o(()=>{}),W:t.o(b)}:{})}}),l=t._export_sfc(n,[["__scopeId","data-v-3e68e5fa"]]);wx.createPage(l);
+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-3e68e5fa{min-height:100vh;background:#f5f5f5}.content.data-v-3e68e5fa{padding:48rpx 32rpx 180rpx}.region-card.data-v-3e68e5fa{background:#fff;border-radius:16rpx;padding:24rpx;margin-bottom:32rpx;box-shadow:0 4rpx 12rpx rgba(0,0,0,.05)}.region-title.data-v-3e68e5fa{font-size:28rpx;font-weight:600;color:#333;margin-bottom:20rpx;display:flex;align-items:center}.region-icon.data-v-3e68e5fa{width:36rpx;height:36rpx;margin-right:12rpx}.region-row.data-v-3e68e5fa{margin-bottom:16rpx}.region-item.data-v-3e68e5fa{display:flex;align-items:center;justify-content:space-between}.region-label.data-v-3e68e5fa{font-size:28rpx;color:#666;width:120rpx}.region-select.data-v-3e68e5fa{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-3e68e5fa{opacity:.5;pointer-events:none}.region-select .arrow.data-v-3e68e5fa{font-size:20rpx;color:#999}.custom-region.data-v-3e68e5fa{padding-left:120rpx;margin-bottom:16rpx}.custom-region .region-input.data-v-3e68e5fa{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-3e68e5fa{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-3e68e5fa{width:100%;background:#fff;border-radius:24rpx 24rpx 0 0;max-height:60vh}.picker-header.data-v-3e68e5fa{display:flex;justify-content:space-between;align-items:center;padding:24rpx 32rpx;border-bottom:1rpx solid #f0f0f0}.picker-title.data-v-3e68e5fa{font-size:32rpx;font-weight:600;color:#333}.picker-close.data-v-3e68e5fa{font-size:36rpx;color:#999}.picker-list.data-v-3e68e5fa{max-height:50vh}.picker-item.data-v-3e68e5fa{padding:28rpx 32rpx;font-size:30rpx;color:#333;border-bottom:1rpx solid #f5f5f5}.picker-item.active.data-v-3e68e5fa{color:#36f;background:#f0f5ff}.price-card.data-v-3e68e5fa{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-3e68e5fa{display:flex;align-items:center}.price-icon.data-v-3e68e5fa{width:40rpx;height:40rpx;margin-right:16rpx}.price-label.data-v-3e68e5fa{font-size:32rpx;font-weight:600;color:#333}.price-card-right.data-v-3e68e5fa{color:#36f}.price-arrow.data-v-3e68e5fa{font-size:40rpx;opacity:.8}.section-title.data-v-3e68e5fa{display:flex;align-items:center;margin-bottom:24rpx;font-size:32rpx;font-weight:600;color:#333}.section-icon.data-v-3e68e5fa{width:36rpx;height:36rpx;margin-right:12rpx}.category-grid.data-v-3e68e5fa{display:flex;flex-wrap:wrap;gap:24rpx;justify-content:space-between;box-sizing:border-box;width:100%}.category-item.data-v-3e68e5fa{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-3e68e5fa:active{transform:scale(.98);opacity:.9}.category-icon.data-v-3e68e5fa{margin-bottom:16rpx}.category-icon-wrap.data-v-3e68e5fa{width:64rpx;height:64rpx;margin-bottom:16rpx}.category-icon-img.data-v-3e68e5fa{width:100%;height:100%}.category-name.data-v-3e68e5fa{font-size:30rpx;font-weight:600;color:#333;margin-bottom:8rpx}.category-price.data-v-3e68e5fa{display:flex;align-items:baseline}.price-value.data-v-3e68e5fa{font-size:36rpx;font-weight:700;color:#36f}.price-unit.data-v-3e68e5fa{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");if(!Array){e.resolveComponent("uni-icons")()}Math;const o=e.defineComponent({__name:"detail",setup(o){const r=e.ref(null),i=()=>{e.index.navigateBack()},u=()=>{e.index.switchTab({url:"/pages/index/index"})};return e.onLoad(t=>{return n=this,o=null,i=function*(){if(null==t?void 0:t.orderId){const n=e.index.getStorageSync("orders"),o=n?JSON.parse(n):[];r.value=o.find(e=>e.orderId===t.orderId)||null}},new Promise((e,t)=>{var r=e=>{try{a(i.next(e))}catch(n){t(n)}},u=e=>{try{a(i.throw(e))}catch(n){t(n)}},a=t=>t.done?e(t.value):Promise.resolve(t.value).then(r,u);a((i=i.apply(n,o)).next())});var n,o,i}),(o,a)=>{var l,d,s,c,v,g,m;return{a:e.t(null==(l=r.value)?void 0:l.orderId),b:e.t(r.value?e.unref(t.formatOrderTime)(r.value.timestamp):"-"),c:e.t("completed"===(null==(d=r.value)?void 0:d.status)?"已完成":"pending"===(null==(s=r.value)?void 0:s.status)?"待处理":"已取消"),d:e.n(null==(c=r.value)?void 0:c.status),e:e.f(null==(v=r.value)?void 0:v.items,(t,o,r)=>({a:"c82568ec-0-"+r,b:e.p({type:e.unref(n.getCategoryIcon)(t.category),size:40,color:"#3366ff"}),c:e.t(t.name),d:e.t("kg"===t.unit?"重量":"数量"),e:e.t(t.weight||t.count),f:e.t("kg"===t.unit?"kg":"个"),g:e.t(t.unitPrice),h:e.t("kg"===t.unit?"kg":"个"),i:e.t(t.amount.toFixed(2)),j:o})),f:e.t((null==(g=r.value)?void 0:g.totalAmount.toFixed(2))||"0.00"),g:e.t((null==(m=r.value)?void 0:m.totalAmount.toFixed(2))||"0.00"),h:e.o(i),i:e.o(u)}}}}),r=e._export_sfc(o,[["__scopeId","data-v-c82568ec"]]);wx.createPage(r);
+8
View File
@@ -0,0 +1,8 @@
{
"navigationBarTitleText": "订单详情",
"navigationBarBackgroundColor": "#3366ff",
"navigationBarTextStyle": "white",
"usingComponents": {
"uni-icons": "../../node-modules/@dcloudio/uni-ui/lib/uni-icons/uni-icons"
}
}
+1
View File
@@ -0,0 +1 @@
<view class="container data-v-c82568ec"><view class="detail-card data-v-c82568ec"><view class="detail-header data-v-c82568ec"><view class="order-info data-v-c82568ec"><text class="order-id data-v-c82568ec">{{a}}</text><text class="order-time data-v-c82568ec">{{b}}</text></view><view class="{{['order-status', 'data-v-c82568ec', d]}}">{{c}}</view></view><view class="detail-section data-v-c82568ec"><view class="section-title data-v-c82568ec"><text class="section-icon data-v-c82568ec">📦</text><text class="data-v-c82568ec">回收物品</text></view><view class="items-list data-v-c82568ec"><view wx:for="{{e}}" wx:for-item="item" wx:key="j" class="item-card data-v-c82568ec"><view class="item-left data-v-c82568ec"><uni-icons wx:if="{{item.b}}" class="item-icon data-v-c82568ec" u-i="{{item.a}}" bind:__l="__l" u-p="{{item.b}}"/><view class="item-info data-v-c82568ec"><text class="item-name data-v-c82568ec">{{item.c}}</text><text class="item-spec data-v-c82568ec">{{item.d}}: {{item.e}} {{item.f}}</text></view></view><view class="item-right data-v-c82568ec"><text class="item-price data-v-c82568ec">¥{{item.g}}/{{item.h}}</text><text class="item-amount data-v-c82568ec">¥{{item.i}}</text></view></view></view></view><view class="detail-section data-v-c82568ec"><view class="section-title data-v-c82568ec"><text class="section-icon data-v-c82568ec">💰</text><text class="data-v-c82568ec">金额明细</text></view><view class="amount-detail data-v-c82568ec"><view class="amount-row data-v-c82568ec"><text class="amount-label data-v-c82568ec">物品总价</text><text class="amount-value data-v-c82568ec">¥{{f}}</text></view><view class="amount-row data-v-c82568ec"><text class="amount-label data-v-c82568ec">优惠金额</text><text class="amount-value discount data-v-c82568ec">-¥0.00</text></view><view class="amount-row total data-v-c82568ec"><text class="amount-label data-v-c82568ec">实付金额</text><text class="amount-value data-v-c82568ec">¥{{g}}</text></view></view></view></view><view class="bottom-actions data-v-c82568ec"><view class="action-btn secondary data-v-c82568ec" bindtap="{{h}}"><text class="data-v-c82568ec">返回</text></view><view class="action-btn primary data-v-c82568ec" bindtap="{{i}}"><text class="data-v-c82568ec">继续回收</text></view></view></view>
+1
View File
@@ -0,0 +1 @@
.container.data-v-c82568ec{min-height:100vh;background:#f5f5f5;padding:32rpx 32rpx 160rpx}.detail-card.data-v-c82568ec{background:#fff;border-radius:16rpx;overflow:hidden}.detail-header.data-v-c82568ec{display:flex;justify-content:space-between;align-items:flex-start;padding:28rpx 24rpx;background:linear-gradient(135deg,#36f,#254edb)}.order-info.data-v-c82568ec{display:flex;flex-direction:column}.order-id.data-v-c82568ec{font-size:30rpx;font-weight:600;color:#fff;margin-bottom:8rpx}.order-time.data-v-c82568ec{font-size:24rpx;color:rgba(255,255,255,.8)}.order-status.data-v-c82568ec{font-size:24rpx;padding:8rpx 20rpx;border-radius:20rpx;background:rgba(255,255,255,.2);color:#fff}.detail-section.data-v-c82568ec{padding:24rpx;border-bottom:1rpx solid #f0f0f0}.detail-section.data-v-c82568ec:last-child{border-bottom:none}.section-title.data-v-c82568ec{display:flex;align-items:center;font-size:30rpx;font-weight:600;color:#333;margin-bottom:20rpx}.section-icon.data-v-c82568ec{margin-right:12rpx}.items-list.data-v-c82568ec{display:flex;flex-direction:column;gap:16rpx}.item-card.data-v-c82568ec{display:flex;justify-content:space-between;align-items:center;padding:20rpx;background:#f9fafb;border-radius:12rpx}.item-left.data-v-c82568ec{display:flex;align-items:center;flex:1}.item-icon.data-v-c82568ec{font-size:44rpx;margin-right:16rpx}.item-info.data-v-c82568ec{display:flex;flex-direction:column}.item-name.data-v-c82568ec{font-size:30rpx;font-weight:600;color:#333;margin-bottom:4rpx}.item-spec.data-v-c82568ec{font-size:24rpx;color:#999}.item-right.data-v-c82568ec{display:flex;flex-direction:column;align-items:flex-end}.item-price.data-v-c82568ec{font-size:24rpx;color:#999;margin-bottom:4rpx}.item-amount.data-v-c82568ec{font-size:32rpx;font-weight:600;color:#36f}.amount-detail.data-v-c82568ec{background:#f9fafb;border-radius:12rpx;padding:20rpx}.amount-row.data-v-c82568ec{display:flex;justify-content:space-between;align-items:center;padding:12rpx 0}.amount-row.total.data-v-c82568ec{padding-top:16rpx;margin-top:12rpx;border-top:1rpx dashed #e5e7eb}.amount-label.data-v-c82568ec{font-size:28rpx;color:#666}.total .amount-label.data-v-c82568ec{font-weight:600;color:#333}.amount-value.data-v-c82568ec{font-size:28rpx;font-weight:600;color:#333}.amount-value.discount.data-v-c82568ec{color:#f59e0b}.total .amount-value.data-v-c82568ec{font-size:36rpx;color:#36f}.bottom-actions.data-v-c82568ec{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-c82568ec{flex:1;border-radius:40rpx;padding:24rpx;text-align:center;font-size:32rpx;font-weight:600}.action-btn.secondary.data-v-c82568ec{background:#f3f4f6;color:#666}.action-btn.primary.data-v-c82568ec{background:linear-gradient(135deg,#36f,#254edb);color:#fff}.action-btn.data-v-c82568ec:active{opacity:.85}
+1
View File
@@ -0,0 +1 @@
"use strict";const e=require("../../common/vendor.js"),t=require("../../common/assets.js"),r=require("../../stores/order.js"),o=require("../../utils/order.js"),n=e.defineComponent({__name:"list",setup(n){const u=r.useOrderStore(),i=e.ref([]),a=e.ref(50),l=e.ref(0),s=e.computed(()=>u.orders.length>0&&i.value.length===u.orders.length),d=e.computed(()=>i.value.reduce((e,t)=>{const r=u.orders.find(e=>e.id===t);return e+((null==r?void 0:r.totalAmount)||0)},0)),c=e.computed(()=>`${a.value+l.value}px`),m=e.computed(()=>`${a.value+60+l.value}px`),v=()=>{s.value?i.value=[]:i.value=u.orders.map(e=>e.id)},f=t=>{e.index.showModal({title:"确认删除",content:"确定要删除这笔订单吗?",success:e=>{return r=this,o=null,n=function*(){e.confirm&&(yield u.deleteOrder(t),i.value=i.value.filter(e=>e!==t))},new Promise((e,t)=>{var u=e=>{try{a(n.next(e))}catch(r){t(r)}},i=e=>{try{a(n.throw(e))}catch(r){t(r)}},a=t=>t.done?e(t.value):Promise.resolve(t.value).then(u,i);a((n=n.apply(r,o)).next())});var r,o,n}})},p=e=>{const t=[];return e.city&&t.push(e.city),e.district&&t.push(e.district),e.community&&t.push(e.community),e.user&&t.push(e.user),t.join(" > ")||"未选择区域"},g=()=>{var e;if("undefined"!=typeof window){const r=[".uni-tabbar",".uni-tabbar-bottom",".uni-tabbar__wrapper",'[class*="tabbar"]',".tab-bar",".tabbar"];let o=null;for(const e of r){const t=document.querySelector(e);if(t){o=t;break}}if(o)a.value=o.offsetHeight;else{const e=document.querySelectorAll("div");for(const t of e){const e=t.getBoundingClientRect();if(e.bottom>=window.innerHeight-100&&e.top>=window.innerHeight-150){a.value=e.height;break}}}a.value<40&&(a.value=60);let n=0;const u=window.getComputedStyle(document.documentElement);if(n=parseInt(u.getPropertyValue("--safe-area-inset-bottom"))||0,0===n&&(n=parseInt(u.getPropertyValue("safe-area-inset-bottom"))||0),0===n)try{n=parseInt(window.getComputedStyle(document.body).getPropertyValue("--safe-area-inset-bottom"))||0}catch(t){}l.value=n||0;const i=document.querySelector('meta[name="viewport"]');i&&!(null==(e=i.getAttribute("content"))?void 0:e.includes("viewport-fit"))&&i.setAttribute("content",i.getAttribute("content")+", viewport-fit=cover")}};return e.onMounted(()=>{u.loadOrders(),setTimeout(()=>{g()},500),setTimeout(()=>{g()},1500)}),(r,n)=>e.e({a:e.unref(u).orders.length>0},e.unref(u).orders.length>0?{b:e.f(e.unref(u).orders,(t,r,n)=>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(p(t)),e:e.t(e.unref(o.formatOrderTime)(t.createTime)),f:e.f(t.items,(t,r,o)=>({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||0).toFixed(2)),g:r})),g:e.t((t.totalAmount||0).toFixed(2)),h:e.o(e=>f(t.id),t.id),i:t.id}))}:{c:t._imports_0$4},{d:e.unref(u).orders.length>0},e.unref(u).orders.length>0?e.e({e:s.value},(s.value,{}),{f:s.value?1:"",g:e.o(v),h:e.t(i.value.length),i:e.t(d.value.toFixed(2)),j:e.t(a.value),k:e.t(l.value),l:c.value}):{},{m:m.value})}}),u=e._export_sfc(n,[["__scopeId","data-v-c21a684c"]]);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-c21a684c" style="{{'padding-bottom:' + m}}"><view class="content data-v-c21a684c"><view wx:if="{{a}}" class="order-list data-v-c21a684c"><view wx:for="{{b}}" wx:for-item="order" wx:key="i" class="order-item data-v-c21a684c"><view class="order-checkbox data-v-c21a684c" catchtap="{{order.c}}"><view class="{{['checkbox', 'data-v-c21a684c', order.b && 'checked']}}"><text wx:if="{{order.a}}" class="check-icon data-v-c21a684c">✓</text></view></view><view class="order-content data-v-c21a684c"><view class="order-header data-v-c21a684c"><view class="order-region data-v-c21a684c"><text class="region-icon data-v-c21a684c">📍</text><text class="region-text data-v-c21a684c">{{order.d}}</text></view><text class="order-time data-v-c21a684c">{{order.e}}</text></view><view class="order-items data-v-c21a684c"><view wx:for="{{order.f}}" wx:for-item="item" wx:key="g" class="order-item-row data-v-c21a684c"><text class="item-name data-v-c21a684c">{{item.a}}</text><view class="item-info data-v-c21a684c"><text class="item-weight data-v-c21a684c">{{item.b}} {{item.c}}</text><text class="item-price data-v-c21a684c">¥{{item.d}}/{{item.e}}</text></view><text class="item-amount data-v-c21a684c">¥{{item.f}}</text></view></view><view class="order-footer data-v-c21a684c"><view class="order-total data-v-c21a684c"><text class="total-label data-v-c21a684c">合计:</text><text class="total-amount data-v-c21a684c">¥{{order.g}}</text></view><view class="order-actions data-v-c21a684c"><text class="delete-btn data-v-c21a684c" catchtap="{{order.h}}">删除</text></view></view></view></view></view><view wx:else class="empty-state data-v-c21a684c"><image class="empty-icon data-v-c21a684c" src="{{c}}" mode="aspectFit"></image><text class="empty-text data-v-c21a684c">暂无订单</text><text class="empty-hint data-v-c21a684c">完成回收后将在此显示订单记录</text></view></view><view wx:if="{{d}}" class="bottom-bar data-v-c21a684c" style="{{'bottom:' + l}}"><view class="select-all data-v-c21a684c" bindtap="{{g}}"><view class="{{['checkbox', 'data-v-c21a684c', f && 'checked']}}"><text wx:if="{{e}}" class="check-icon data-v-c21a684c">✓</text></view><text class="select-text data-v-c21a684c">全选</text></view><view class="selected-info data-v-c21a684c"><text class="selected-count data-v-c21a684c">已选 {{h}} 单</text><text class="selected-total data-v-c21a684c">合计: ¥{{i}}</text></view><text class="debug-info data-v-c21a684c">tabBar:{{j}}px safeArea:{{k}}px</text></view></view>
+1
View File
@@ -0,0 +1 @@
.container.data-v-c21a684c{min-height:100vh;background:#f5f5f5}.content.data-v-c21a684c{padding:32rpx}.order-list.data-v-c21a684c{display:flex;flex-direction:column;gap:24rpx}.order-item.data-v-c21a684c{display:flex;background:#fff;border-radius:16rpx;padding:24rpx;box-shadow:0 2rpx 12rpx rgba(0,0,0,.04)}.order-checkbox.data-v-c21a684c{display:flex;align-items:flex-start;padding-right:20rpx;padding-top:8rpx}.checkbox.data-v-c21a684c{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-c21a684c{background:#36f;border-color:#36f}.check-icon.data-v-c21a684c{color:#fff;font-size:24rpx;font-weight:700}.order-content.data-v-c21a684c{flex:1}.order-header.data-v-c21a684c{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-c21a684c{display:flex;align-items:center;flex:1}.region-icon.data-v-c21a684c{font-size:28rpx;margin-right:8rpx}.region-text.data-v-c21a684c{font-size:26rpx;color:#333;font-weight:500}.order-time.data-v-c21a684c{font-size:24rpx;color:#999}.order-items.data-v-c21a684c{margin-bottom:16rpx}.order-item-row.data-v-c21a684c{display:flex;justify-content:space-between;align-items:center;padding:12rpx 0}.order-item-row.data-v-c21a684c:not(:last-child){border-bottom:1rpx solid #f8f9fa}.item-name.data-v-c21a684c{font-size:28rpx;color:#333;flex:1}.item-info.data-v-c21a684c{display:flex;flex-direction:column;align-items:flex-end;flex:2;margin-right:16rpx}.item-weight.data-v-c21a684c{font-size:24rpx;color:#666}.item-price.data-v-c21a684c{font-size:24rpx;color:#999}.item-amount.data-v-c21a684c{font-size:28rpx;font-weight:600;color:#36f}.order-footer.data-v-c21a684c{display:flex;justify-content:space-between;align-items:center;padding-top:16rpx;border-top:1rpx dashed #f0f0f0}.order-total.data-v-c21a684c{display:flex;align-items:baseline}.total-label.data-v-c21a684c{font-size:26rpx;color:#666;margin-right:8rpx}.total-amount.data-v-c21a684c{font-size:36rpx;font-weight:700;color:#36f}.order-actions.data-v-c21a684c{margin-left:16rpx}.delete-btn.data-v-c21a684c{font-size:26rpx;color:#ff4d4f;padding:8rpx 16rpx;border:1rpx solid #ff4d4f;border-radius:8rpx}.empty-state.data-v-c21a684c{display:flex;flex-direction:column;align-items:center;padding:120rpx 40rpx;background:#fff;border-radius:16rpx}.empty-icon.data-v-c21a684c{width:120rpx;height:120rpx;margin-bottom:24rpx}.empty-text.data-v-c21a684c{font-size:32rpx;font-weight:600;color:#333;margin-bottom:12rpx}.empty-hint.data-v-c21a684c{font-size:26rpx;color:#999}.bottom-bar.data-v-c21a684c{position:fixed;left:0;right:0;display:flex;justify-content:space-between;align-items:center;padding:15px 20px;background:#fff;box-shadow:0 -2px 12px rgba(0,0,0,.08);z-index:100}.select-all.data-v-c21a684c{display:flex;align-items:center}.select-text.data-v-c21a684c{font-size:28rpx;color:#333;margin-left:12rpx}.selected-info.data-v-c21a684c{display:flex;align-items:baseline;gap:16rpx}.selected-count.data-v-c21a684c{font-size:26rpx;color:#666}.selected-total.data-v-c21a684c{font-size:32rpx;font-weight:700;color:#36f}.debug-info.data-v-c21a684c{font-size:16rpx;color:#ff4d4f;position:absolute;bottom:2rpx;left:50%;transform:translate(-50%)}.batch-delete.data-v-c21a684c{margin-left:16rpx}.batch-delete-btn.data-v-c21a684c{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"),o=require("../../common/assets.js"),r=require("../../stores/price.js"),t=require("../../utils/price.js");if(!Array){e.resolveComponent("uni-icons")()}Math;const c=e.defineComponent({__name:"price",setup(c){const s=r.usePriceStore(),i=()=>{s.loadPrices(),e.index.showToast({title:"已刷新",icon:"success"})};return e.onMounted(()=>{s.loadPrices()}),(r,c)=>({a:o._imports_0$1,b:e.t(e.unref(s).date),c:e.o(i),d:e.f(e.unref(s).prices,(o,r,c)=>e.e({a:o.icon},o.icon?{b:o.icon}:{c:"a251c03f-0-"+c,d:e.p({type:e.unref(t.getCategoryIcon)(o.category),size:48,color:"#3366ff"})},{e:e.t(o.name),f:e.t("kg"===o.unit?"重量":"个数"),g:e.t(o.price),h:e.t("kg"===o.unit?"kg":"个"),i:o.category}))})}}),s=e._export_sfc(c,[["__scopeId","data-v-a251c03f"]]);wx.createPage(s);
+8
View File
@@ -0,0 +1,8 @@
{
"navigationBarTitleText": "今日价格",
"navigationBarBackgroundColor": "#3366ff",
"navigationBarTextStyle": "white",
"usingComponents": {
"uni-icons": "../../node-modules/@dcloudio/uni-ui/lib/uni-icons/uni-icons"
}
}
+1
View File
@@ -0,0 +1 @@
<view class="container data-v-a251c03f"><view class="date-header data-v-a251c03f"><view class="date-label-wrap data-v-a251c03f"><image class="date-icon data-v-a251c03f" src="{{a}}" mode="aspectFit"/><text class="date-label data-v-a251c03f">今日价格</text></view><text class="date-value data-v-a251c03f">{{b}}</text></view><view class="refresh-btn data-v-a251c03f" bindtap="{{c}}"><text class="refresh-icon data-v-a251c03f">🔄</text><text class="data-v-a251c03f">刷新</text></view><view class="price-list data-v-a251c03f"><view wx:for="{{d}}" wx:for-item="item" wx:key="i" class="price-item data-v-a251c03f"><view class="price-item-left data-v-a251c03f"><view wx:if="{{item.a}}" class="price-icon-wrap data-v-a251c03f"><image class="price-icon-img data-v-a251c03f" src="{{item.b}}" mode="aspectFit"/></view><uni-icons wx:else class="price-icon data-v-a251c03f" u-i="{{item.c}}" bind:__l="__l" u-p="{{item.d||''}}"/><view class="price-info data-v-a251c03f"><text class="price-name data-v-a251c03f">{{item.e}}</text><text class="price-desc data-v-a251c03f">按{{item.f}}计价</text></view></view><view class="price-item-right data-v-a251c03f"><text class="price-amount data-v-a251c03f"><text class="currency data-v-a251c03f">¥</text><text class="amount-num data-v-a251c03f">{{item.g}}</text><text class="amount-unit data-v-a251c03f">/{{item.h}}</text></text></view></view></view><view class="tips-card data-v-a251c03f"><text class="tips-icon data-v-a251c03f">💡</text><text class="tips-text data-v-a251c03f">价格每日更新,实际回收以当日价格为准</text></view></view>
+1
View File
@@ -0,0 +1 @@
.container.data-v-a251c03f{min-height:100vh;background:#f5f5f5;padding:32rpx}.date-header.data-v-a251c03f{display:flex;justify-content:space-between;align-items:center;margin-bottom:32rpx}.date-label-wrap.data-v-a251c03f{display:flex;align-items:center}.date-icon.data-v-a251c03f{width:48rpx;height:48rpx;margin-right:12rpx}.date-label.data-v-a251c03f{font-size:40rpx;font-weight:700;color:#333}.date-value.data-v-a251c03f{font-size:28rpx;color:#666}.refresh-btn.data-v-a251c03f{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-a251c03f{margin-right:8rpx}.price-list.data-v-a251c03f{background:#fff;border-radius:16rpx;overflow:hidden;margin-bottom:24rpx}.price-item.data-v-a251c03f{display:flex;justify-content:space-between;align-items:center;padding:28rpx 24rpx;border-bottom:1rpx solid #f0f0f0}.price-item.data-v-a251c03f:last-child{border-bottom:none}.price-item-left.data-v-a251c03f{display:flex;align-items:center}.price-icon.data-v-a251c03f{font-size:48rpx;margin-right:20rpx}.price-icon-wrap.data-v-a251c03f{width:48rpx;height:48rpx;margin-right:20rpx}.price-icon-img.data-v-a251c03f{width:100%;height:100%}.price-info.data-v-a251c03f{display:flex;flex-direction:column}.price-name.data-v-a251c03f{font-size:32rpx;font-weight:600;color:#333;margin-bottom:4rpx}.price-desc.data-v-a251c03f{font-size:24rpx;color:#999}.price-item-right.data-v-a251c03f,.price-amount.data-v-a251c03f{display:flex;align-items:baseline}.currency.data-v-a251c03f{font-size:28rpx;font-weight:600;color:#36f}.amount-num.data-v-a251c03f{font-size:44rpx;font-weight:700;color:#36f;margin-left:4rpx}.amount-unit.data-v-a251c03f{font-size:24rpx;color:#999;margin-left:4rpx}.tips-card.data-v-a251c03f{background:#fffbeb;border:1rpx solid #fef3c7;border-radius:12rpx;padding:20rpx 24rpx;display:flex;align-items:center}.tips-icon.data-v-a251c03f{font-size:32rpx;margin-right:12rpx}.tips-text.data-v-a251c03f{font-size:26rpx;color:#92400e}
+1
View File
@@ -0,0 +1 @@
"use strict";const e=require("../../common/vendor.js"),o=require("../../common/assets.js"),n=e.defineComponent({__name:"login",setup(n){const t=e.ref(""),l=e.ref(""),i=e.ref(!1),a=e.ref(!1),s=[{id:"1",name:"管理员",phone:"13800138000",role:"admin",createTime:"2024-01-01"},{id:"2",name:"回收员小王",phone:"18698102228",role:"collector",createTime:"2024-01-15"}],r=()=>{return o=this,n=null,i=function*(){if(t.value)if(11===t.value.length)if(l.value){a.value=!0;try{const o=s.find(e=>e.phone===t.value&&"collector"===e.role);console.log("Available users:",JSON.stringify(s)),console.log("Input phone:",t.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{a.value=!1}}else e.index.showToast({title:"请输入密码",icon:"none"});else e.index.showToast({title:"请输入正确的手机号",icon:"none"});else e.index.showToast({title:"请输入手机号",icon:"none"})},new Promise((e,t)=>{var l=e=>{try{s(i.next(e))}catch(o){t(o)}},a=e=>{try{s(i.throw(e))}catch(o){t(o)}},s=o=>o.done?e(o.value):Promise.resolve(o.value).then(l,a);s((i=i.apply(o,n)).next())});var o,n,i},c=()=>{e.index.showToast({title:"请联系管理员重置密码",icon:"none"})};return(n,s)=>e.e({a:o._imports_0,b:t.value,c:e.o(e=>t.value=e.detail.value),d:l.value,e:e.o(e=>l.value=e.detail.value),f:i.value},(i.value,{}),{g:i.value?1:"",h:e.o(e=>i.value=!i.value),i:a.value},(a.value,{}),{j:e.o(r),k:a.value?1:"",l:e.o(c)})}}),t=e._export_sfc(n,[["__scopeId","data-v-c7241c3c"]]);wx.createPage(t);
+5
View File
@@ -0,0 +1,5 @@
{
"navigationStyle": "custom",
"navigationBarTitleText": "登录",
"usingComponents": {}
}
+1
View File
@@ -0,0 +1 @@
<view class="login-container data-v-c7241c3c"><view class="login-box data-v-c7241c3c"><image class="login-logo data-v-c7241c3c" src="{{a}}" mode="aspectFit"/><view class="login-title data-v-c7241c3c">易分宝回收</view><view class="login-subtitle data-v-c7241c3c">回收员登录</view><view class="form-group data-v-c7241c3c"><view class="form-label data-v-c7241c3c">手机号</view><input type="text" class="form-input data-v-c7241c3c" placeholder="请输入手机号" maxlength="11" value="{{b}}" bindinput="{{c}}"/></view><view class="form-group data-v-c7241c3c"><view class="form-label data-v-c7241c3c">密码</view><input type="password" class="form-input data-v-c7241c3c" placeholder="请输入密码" value="{{d}}" bindinput="{{e}}"/></view><view class="form-group data-v-c7241c3c"><view class="checkbox data-v-c7241c3c" bindtap="{{h}}"><view class="{{['checkbox-box', 'data-v-c7241c3c', g && 'checked']}}"><text wx:if="{{f}}" class="data-v-c7241c3c">✓</text></view><text class="data-v-c7241c3c">记住密码</text></view></view><view bindtap="{{j}}" class="{{['login-btn', 'data-v-c7241c3c', k && 'disabled']}}"><text wx:if="{{i}}" class="data-v-c7241c3c">登录中...</text><text wx:else class="data-v-c7241c3c">登录</text></view><view class="forgot-link data-v-c7241c3c" bindtap="{{l}}"><text class="data-v-c7241c3c">忘记密码?</text></view></view></view>
+1
View File
@@ -0,0 +1 @@
.login-container.data-v-c7241c3c{min-height:100vh;background:linear-gradient(135deg,#36f,#254edb);display:flex;align-items:center;justify-content:center;padding:32rpx}.login-box.data-v-c7241c3c{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-c7241c3c{width:160rpx;height:160rpx;margin:0 auto 24rpx;display:block}.login-title.data-v-c7241c3c{font-size:40rpx;font-weight:700;color:#333;text-align:center;margin-bottom:8rpx}.login-subtitle.data-v-c7241c3c{font-size:28rpx;color:#999;text-align:center;margin-bottom:48rpx}.form-group.data-v-c7241c3c{margin-bottom:32rpx}.form-label.data-v-c7241c3c{font-size:28rpx;color:#666;margin-bottom:12rpx}.form-input.data-v-c7241c3c{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-c7241c3c:focus{border-color:#36f}.checkbox.data-v-c7241c3c{display:flex;align-items:center;font-size:26rpx;color:#666}.checkbox-box.data-v-c7241c3c{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-c7241c3c{background:#36f;border-color:#36f}.login-btn.data-v-c7241c3c{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-c7241c3c{font-size:32rpx;font-weight:600;color:#fff}.login-btn.data-v-c7241c3c:active:not(.disabled){opacity:.9}.login-btn.disabled.data-v-c7241c3c{opacity:.6}.forgot-link.data-v-c7241c3c{text-align:center;margin-top:32rpx}.forgot-link text.data-v-c7241c3c{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";var e=(e,t,o)=>new Promise((u,a)=>{var l=e=>{try{i(o.next(e))}catch(t){a(t)}},n=e=>{try{i(o.throw(e))}catch(t){a(t)}},i=e=>e.done?u(e.value):Promise.resolve(e.value).then(l,n);i((o=o.apply(e,t)).next())});const t=require("../../common/vendor.js"),o=require("../../common/assets.js"),u=require("../../stores/price.js"),a=require("../../stores/bluetooth.js"),l=require("../../stores/order.js"),n=require("../../stores/region.js"),i=t.defineComponent({__name:"weigh",setup(i){const r=u.usePriceStore(),v=a.useBluetoothStore(),s=l.useOrderStore(),c=n.useRegionStore(),d=t.ref(""),g=t.ref(0),h=t.ref(0),m=t.ref(""),p=t.ref("bluetooth"),f=t.ref(""),x=t.computed(()=>r.getPriceByCategory(d.value)),b=t.computed(()=>{if(!x.value)return 0;const e="kg"===x.value.unit?"bluetooth"===p.value?g.value:parseFloat(f.value)||0:h.value;return Number((e*x.value.price).toFixed(2))});t.onLoad(t=>e(this,null,function*(){(null==t?void 0:t.category)&&(d.value=t.category),yield r.loadPrices(),v.init()}));const w=()=>{t.index.navigateTo({url:"/pages/bluetooth/bluetooth"})},k=()=>{v.resetWeight(),g.value=0},y=()=>{h.value>0&&(h.value--,m.value=h.value.toString())},F=()=>{h.value++,m.value=h.value.toString()},_=()=>{const e=parseInt(m.value)||0;h.value=Math.max(0,e)},S=e=>{h.value+=e,m.value=h.value.toString()},j=e=>{p.value=e,"manual"===e&&(f.value=g.value>0?g.value.toString():"")},q=()=>{const e=parseFloat(f.value);!isNaN(e)&&e>=0&&(g.value=e)},P=e=>{const t=parseFloat(f.value)||0;f.value=(t+e).toFixed(2),q()},$=()=>e(this,null,function*(){if(!x.value)return void t.index.showToast({title:"请选择回收种类",icon:"none"});const o="kg"===x.value.unit?"bluetooth"===p.value?g.value:parseFloat(f.value)||0:h.value;if(o<=0)return void t.index.showToast({title:"kg"===x.value.unit?"请输入重量":"请输入数量",icon:"none"});const u={category:x.value.category,name:x.value.name,weight:"kg"===x.value.unit?o:void 0,count:"piece"===x.value.unit?h.value:void 0,unit:x.value.unit,price:x.value.price,amount:b.value};t.index.showModal({title:"确认回收",content:`确定回收${x.value.name} ${o}${"kg"===x.value.unit?"kg":"个"},金额¥${b.value.toFixed(2)}`,success:o=>e(this,null,function*(){if(o.confirm){t.index.showLoading({title:"保存中..."});const e=c.getRegion(),o=yield s.createOrder([u],e);t.index.hideLoading(),o?(t.index.showToast({title:"回收成功",icon:"success"}),setTimeout(()=>{t.index.navigateBack()},1500)):t.index.showToast({title:"保存失败",icon:"none"})}})})});return t.onMounted(()=>{const e=()=>{g.value=v.currentWeight};v.$subscribe(()=>{e()}),e()}),t.onShow(()=>{r.loadPrices()}),(e,u)=>{var a,l,n,i,r;return t.e({a:t.t(t.unref(v).isConnected?"🔵":"⚪"),b:t.t(t.unref(v).isConnected?"已连接":"未连接"),c:t.unref(v).isConnected?1:"",d:t.t((null==(a=x.value)?void 0:a.name)||"-"),e:t.t((null==(l=x.value)?void 0:l.price)||0),f:t.t("kg"===(null==(n=x.value)?void 0:n.unit)?"kg":"个"),g:"kg"===(null==(i=x.value)?void 0:i.unit)},"kg"===(null==(r=x.value)?void 0:r.unit)?t.e({h:"bluetooth"===p.value?1:"",i:t.o(e=>j("bluetooth")),j:"manual"===p.value?1:"",k:t.o(e=>j("manual")),l:"bluetooth"===p.value},"bluetooth"===p.value?{m:t.t(g.value.toFixed(2))}:{n:t.o([e=>f.value=e.detail.value,q]),o:f.value},{p:"bluetooth"===p.value},"bluetooth"===p.value?{q:o._imports_0$2,r:t.o(w),s:o._imports_1$1,t:t.o(k)}:{v:t.o(e=>P(.5)),w:t.o(e=>P(1)),x:t.o(e=>P(2)),y:t.o(e=>P(5))}):{z:t.o([e=>m.value=e.detail.value,_]),A:m.value,B:t.o(y),C:t.o(F),D:t.o(e=>S(1)),E:t.o(e=>S(5)),F:t.o(e=>S(10)),G:t.o(e=>S(50))},{H:t.t(b.value.toFixed(2)),I:t.o($)})}}}),r=t._export_sfc(i,[["__scopeId","data-v-95ce5baf"]]);wx.createPage(r);
+6
View File
@@ -0,0 +1,6 @@
{
"navigationBarTitleText": "称重回收",
"navigationBarBackgroundColor": "#3366ff",
"navigationBarTextStyle": "white",
"usingComponents": {}
}
+1
View File
@@ -0,0 +1 @@
<view class="container data-v-95ce5baf"><view class="status-bar data-v-95ce5baf"><view class="{{['bluetooth-status', 'data-v-95ce5baf', c && 'connected']}}"><text class="status-icon data-v-95ce5baf">{{a}}</text><text class="data-v-95ce5baf">{{b}}</text></view></view><view class="info-card data-v-95ce5baf"><view class="info-item data-v-95ce5baf"><text class="info-label data-v-95ce5baf">回收种类</text><text class="info-value data-v-95ce5baf">{{d}}</text></view><view class="info-item data-v-95ce5baf"><text class="info-label data-v-95ce5baf">单价</text><text class="info-value price-text data-v-95ce5baf">¥{{e}}/{{f}}</text></view></view><view wx:if="{{g}}" class="display-card data-v-95ce5baf"><view class="mode-switch data-v-95ce5baf"><view class="{{['mode-btn', 'data-v-95ce5baf', h && 'active']}}" bindtap="{{i}}"><text class="data-v-95ce5baf">蓝牙称重</text></view><view class="{{['mode-btn', 'data-v-95ce5baf', j && 'active']}}" bindtap="{{k}}"><text class="data-v-95ce5baf">手动输入</text></view></view><view wx:if="{{l}}" class="display-value-wrap data-v-95ce5baf"><text class="display-value data-v-95ce5baf">{{m}}</text><text class="display-unit data-v-95ce5baf">kg</text></view><view wx:else class="manual-input data-v-95ce5baf"><input class="data-v-95ce5baf" type="digit" placeholder="请输入重量" bindinput="{{n}}" value="{{o}}"/><text class="input-unit data-v-95ce5baf">kg</text></view><view wx:if="{{p}}" class="control-row data-v-95ce5baf"><view class="control-btn data-v-95ce5baf" bindtap="{{r}}"><image class="control-icon-img data-v-95ce5baf" src="{{q}}" mode="aspectFit"/><text class="data-v-95ce5baf">蓝牙连接</text></view><view class="control-btn data-v-95ce5baf" bindtap="{{t}}"><image class="control-icon-img data-v-95ce5baf" src="{{s}}" mode="aspectFit"/><text class="data-v-95ce5baf">归零</text></view></view><view wx:else class="quick-input data-v-95ce5baf"><view class="quick-btn data-v-95ce5baf" bindtap="{{v}}">+0.5kg</view><view class="quick-btn data-v-95ce5baf" bindtap="{{w}}">+1kg</view><view class="quick-btn data-v-95ce5baf" bindtap="{{x}}">+2kg</view><view class="quick-btn data-v-95ce5baf" bindtap="{{y}}">+5kg</view></view></view><view wx:else class="display-card data-v-95ce5baf"><view class="display-icon data-v-95ce5baf">🥫</view><view class="display-title data-v-95ce5baf">个数统计</view><view class="manual-input data-v-95ce5baf"><input class="data-v-95ce5baf" type="number" placeholder="请输入数量" bindinput="{{z}}" value="{{A}}"/><text class="input-unit data-v-95ce5baf">个</text></view><view class="count-controls data-v-95ce5baf"><view class="count-btn minus data-v-95ce5baf" bindtap="{{B}}"><text class="data-v-95ce5baf">-</text></view><view class="count-btn plus data-v-95ce5baf" bindtap="{{C}}"><text class="data-v-95ce5baf">+</text></view></view><view class="quick-input data-v-95ce5baf"><view class="quick-btn data-v-95ce5baf" bindtap="{{D}}">+1</view><view class="quick-btn data-v-95ce5baf" bindtap="{{E}}">+5</view><view class="quick-btn data-v-95ce5baf" bindtap="{{F}}">+10</view><view class="quick-btn data-v-95ce5baf" bindtap="{{G}}">+50</view></view></view><view class="amount-card data-v-95ce5baf"><view class="amount-title data-v-95ce5baf">💰 预估金额</view><view class="amount-value-wrap data-v-95ce5baf"><text class="amount-currency data-v-95ce5baf">¥</text><text class="amount-num data-v-95ce5baf">{{H}}</text></view></view><view class="confirm-btn data-v-95ce5baf" bindtap="{{I}}"><text class="data-v-95ce5baf">确认回收</text></view></view>
File diff suppressed because one or more lines are too long
+36
View File
@@ -0,0 +1,36 @@
{
"description": "项目配置文件。",
"packOptions": {
"ignore": []
},
"setting": {
"urlCheck": false,
"es6": true,
"postcss": false,
"minified": false,
"newFeature": true,
"bigPackageSizeSupport": true
},
"compileType": "miniprogram",
"libVersion": "",
"appid": "wx0000000000000000",
"projectname": "易分宝现场回收",
"condition": {
"search": {
"current": -1,
"list": []
},
"conversation": {
"current": -1,
"list": []
},
"game": {
"current": -1,
"list": []
},
"miniprogram": {
"current": -1,
"list": []
}
}
}
+22
View File
@@ -0,0 +1,22 @@
{
"libVersion": "3.15.2",
"projectname": "mp-weixin",
"condition": {},
"setting": {
"urlCheck": false,
"coverView": false,
"lazyloadPlaceholderEnable": false,
"skylineRenderEnable": false,
"preloadBackgroundData": false,
"autoAudits": false,
"useApiHook": true,
"showShadowRootInWxmlPanel": false,
"useStaticServer": false,
"useLanDebug": false,
"showES6CompileOption": false,
"compileHotReLoad": true,
"checkInvalidKey": true,
"ignoreDevUnusedFiles": true,
"bigPackageSizeSupport": true
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

+1
View File
@@ -0,0 +1 @@
"use strict";var e=(e,t,n)=>new Promise((o,r)=>{var c=e=>{try{i(n.next(e))}catch(t){r(t)}},l=e=>{try{i(n.throw(e))}catch(t){r(t)}},i=e=>e.done?o(e.value):Promise.resolve(e.value).then(c,l);i((n=n.apply(e,t)).next())});const t=require("../common/vendor.js"),n=require("../utils/bluetooth.js"),o=t.defineStore("bluetooth",()=>{const o=t.ref(!1),r=t.ref(!1),c=t.ref([]),l=t.ref(null),i=t.ref(0);return{isConnected:o,isDiscovering:r,deviceList:c,connectedDevice:l,currentWeight:i,init:()=>e(exports,null,function*(){try{yield n.initBluetooth()}catch(e){console.error("Bluetooth init failed:",e)}}),startScan:()=>e(exports,null,function*(){r.value=!0,c.value=[],yield n.startDiscovery(e=>{c.value=e})}),stopScan:()=>{r.value=!1,n.stopDiscovery()},connect:t=>e(exports,null,function*(){try{yield n.connectDevice(t);const e=c.value.find(e=>e.deviceId===t);e&&(l.value=e,o.value=!0),n.listenWeightData(e=>{i.value=e})}catch(e){console.error("Connect failed:",e)}}),disconnect:()=>e(exports,null,function*(){try{yield n.disconnectDevice(),o.value=!1,l.value=null,i.value=0}catch(e){console.error("Disconnect failed:",e)}}),resetWeight:()=>{i.value=0}}});exports.useBluetoothStore=o;
+1
View File
@@ -0,0 +1 @@
"use strict";var e=(e,t,r)=>new Promise((o,n)=>{var i=e=>{try{u(r.next(e))}catch(t){n(t)}},d=e=>{try{u(r.throw(e))}catch(t){n(t)}},u=e=>e.done?o(e.value):Promise.resolve(e.value).then(i,d);u((r=r.apply(e,t)).next())});const t=require("../common/vendor.js"),r=require("../api/index.js"),o=t.defineStore("order",()=>{const o=t.ref([]),n=t.ref([]),i=e=>{const t=(e.items||[]).map(e=>({category:e.category,name:e.name,weight:e.weight,count:e.count,unit:e.unit,price:e.price,amount:void 0!==e.amount?e.amount:(e.weight||e.count||0)*(e.price||0)})),r=void 0!==e.totalAmount?e.totalAmount:t.reduce((e,t)=>e+(t.amount||0),0);return{id:e.id,items:t,totalAmount:r,createTime:e.createTime,status:e.status||"pending",city:e.city,district:e.district,community:e.community,user:e.user}},d=()=>e(exports,null,function*(){try{const e=yield r.orderApi.getOrders();o.value=e.map(i)}catch(e){console.error("Failed to load orders:",e)}});return{orders:o,currentOrderItems:n,loadOrders:d,addOrderItem:e=>{n.value.push(e)},clearCurrentItems:()=>{n.value=[]},createOrder:(t,o)=>e(exports,null,function*(){try{const e=t.reduce((e,t)=>e+(t.amount||0),0),n={id:"",items:t,totalAmount:e,createTime:(new Date).toISOString(),status:"pending",city:null==o?void 0:o.city,district:null==o?void 0:o.district,community:null==o?void 0:o.community,user:null==o?void 0:o.user},i=yield r.orderApi.addOrder(n);return i?(yield d(),i):null}catch(e){return console.error("Failed to create order:",e),null}}),updateOrder:t=>e(exports,null,function*(){try{yield r.orderApi.updateOrder(t),yield d()}catch(e){console.error("Failed to update order:",e)}}),deleteOrder:t=>e(exports,null,function*(){try{yield r.orderApi.deleteOrder(t),yield d()}catch(e){console.error("Failed to delete order:",e)}}),getOrder:t=>e(exports,null,function*(){return yield d(),o.value.find(e=>e.id===t)||null}),getTotalAmount:()=>n.value.reduce((e,t)=>e+(t.amount||0),0)}});exports.useOrderStore=o;
+1
View File
@@ -0,0 +1 @@
"use strict";var e=(e,r,i)=>new Promise((t,c)=>{var o=e=>{try{a(i.next(e))}catch(r){c(r)}},l=e=>{try{a(i.throw(e))}catch(r){c(r)}},a=e=>e.done?t(e.value):Promise.resolve(e.value).then(o,l);a((i=i.apply(e,r)).next())});const r=require("../common/vendor.js"),i=require("../api/index.js"),t=r.defineStore("price",()=>{const t=r.ref([]),c=r.ref(""),o=r.ref(!1),l=()=>e(exports,null,function*(){o.value=!0;try{const e=yield i.priceApi.getPrices();e&&(t.value=e.prices,c.value=e.date)}catch(e){console.error("Failed to load prices:",e)}o.value=!1});return{prices:t,date:c,isLoading:o,loadPrices:l,getPriceByCategory:e=>t.value.find(r=>r.category===e),addPrice:r=>e(exports,null,function*(){try{yield i.priceApi.addPrice(r),yield l()}catch(e){console.error("Failed to add price:",e)}}),updatePrice:(r,t)=>e(exports,null,function*(){try{yield i.priceApi.updatePrice(r,t),yield l()}catch(e){console.error("Failed to update price:",e)}}),deletePrice:r=>e(exports,null,function*(){try{yield i.priceApi.deletePrice(r),yield l()}catch(e){console.error("Failed to delete price:",e)}})}});exports.usePriceStore=t;
+1
View File
@@ -0,0 +1 @@
"use strict";const e=require("../common/vendor.js"),u=e.defineStore("region",()=>{const u=e.ref("天津市"),v=e.ref(""),t=e.ref(""),l=e.ref(""),a=e.ref(""),s=e.ref(""),i=e.ref("");return{selectedCity:u,selectedDistrict:v,selectedCommunity:t,selectedUser:l,customDistrict:a,customCommunity:s,customUser:i,setCity:e=>{u.value=e,v.value="",t.value="",l.value="",a.value="",s.value="",i.value=""},setDistrict:e=>{v.value=e,t.value="",l.value="",s.value="",i.value=""},setCommunity:e=>{t.value=e,l.value="",i.value=""},setUser:e=>{l.value=e},setCustomDistrict:e=>{a.value=e},setCustomCommunity:e=>{s.value=e},setCustomUser:e=>{i.value=e},getRegion:()=>({city:u.value||void 0,district:"其他"===v.value?a.value||void 0:v.value||void 0,community:"其他"===t.value?s.value||void 0:t.value||void 0,user:"新增商户"===l.value||"新增个人"===l.value?i.value||void 0:l.value||void 0}),clearRegion:()=>{u.value="天津市",v.value="",t.value="",l.value="",a.value="",s.value="",i.value=""}}});exports.useRegionStore=u;
+1
View File
@@ -0,0 +1 @@
"use strict";var e=(e,r,s)=>new Promise((t,o)=>{var l=e=>{try{u(s.next(e))}catch(r){o(r)}},d=e=>{try{u(s.throw(e))}catch(r){o(r)}},u=e=>e.done?t(e.value):Promise.resolve(e.value).then(l,d);u((s=s.apply(e,r)).next())});const r=require("../common/vendor.js"),s=require("../api/index.js"),t=r.defineStore("user",()=>{const t=r.ref([]),o=r.ref(!1),l=()=>e(exports,null,function*(){o.value=!0;try{const e=yield s.userApi.getUsers();t.value=e}catch(e){console.error("Failed to load users:",e)}o.value=!1});return{users:t,isLoading:o,loadUsers:l,addUser:r=>e(exports,null,function*(){try{yield s.userApi.addUser(r),yield l()}catch(e){console.error("Failed to add user:",e)}}),updateUser:r=>e(exports,null,function*(){try{yield s.userApi.updateUser(r),yield l()}catch(e){console.error("Failed to update user:",e)}}),deleteUser:r=>e(exports,null,function*(){try{yield s.userApi.deleteUser(r),yield l()}catch(e){console.error("Failed to delete user:",e)}}),getUserById:e=>t.value.find(r=>r.id===e)}});exports.useUserStore=t;
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
"use strict";exports.formatOrderTime=t=>{const r=new Date(t);return`${r.getFullYear()}-${String(r.getMonth()+1).padStart(2,"0")}-${String(r.getDate()).padStart(2,"0")} ${String(r.getHours()).padStart(2,"0")}:${String(r.getMinutes()).padStart(2,"0")}`};
+1
View File
@@ -0,0 +1 @@
"use strict";require("../common/vendor.js"),(new Date).toISOString().split("T")[0];exports.getCategoryIcon=t=>{const s={"001":"/static/icons/paper.png","002":"/static/icons/metal.png","003":"/static/icons/can.png","004":"/static/icons/plastic.png","005":"/static/icons/fabric.png","006":"/static/icons/glass.png"};return s[t]?s[t]:"/static/icons/paper.png"};