From 7e615cc964abddfa421e5dca52c4339dc1dc78ac Mon Sep 17 00:00:00 2001 From: Lj <1095098147@qq.com> Date: Fri, 13 Jun 2025 17:56:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App.vue | 16 +- api/model/index.js | 197 ++-- pages.json | 25 +- pages/component/home.vue | 106 ++- pages/component/my.vue | 50 +- pages/component/recycle.vue | 150 ++- pages/index/index.vue | 5 +- pages/manager/inspect-result.vue | 58 +- pages/manager/inspect.vue | 330 +++++-- pages/manager/order-detail.vue | 1104 ++++++++++++++-------- pages/manager/order.vue | 268 +++--- pages/manager/staff-detail.vue | 16 +- pages/manager/staff.vue | 61 +- pages/manager/tui-apply-detail.vue | 29 +- pages/manager/tui-detail.vue | 2 +- pages/manager/tui.vue | 139 ++- pages/manager/user-detail.vue | 245 +++-- pages/manager/user.vue | 41 +- pages/subcomponent/admin_faq.vue | 155 +-- pages/subcomponent/detail.vue | 206 ++-- pages/subcomponent/edit_profile.vue | 31 +- pages/subcomponent/inspection-report.vue | 2 +- pages/subcomponent/order.vue | 249 +++-- pages/subcomponent/pickup.vue | 110 ++- pages/subcomponent/promotion-profit-detail.vue | 155 +++ pages/subcomponent/promotion-team.vue | 263 ++++++ pages/subcomponent/promotion-withdraw-record.vue | 122 +++ pages/subcomponent/promotion.vue | 164 +++- pages/subcomponent/select.vue | 8 +- pages/subcomponent/upgrad.vue | 23 +- pages/subcomponent/wallet.vue | 9 +- pages/subcomponent/withdraw.vue | 14 +- pages/wxUserInfo.vue | 115 ++- static/tui/1.png | Bin 0 -> 18595 bytes static/tui/2.png | Bin 0 -> 20225 bytes static/tui/3.png | Bin 0 -> 20160 bytes static/tui/4.png | Bin 0 -> 8040 bytes static/tui/5.png | Bin 0 -> 9124 bytes utils/pinyin.js | 403 ++++++++ wxcomponents/email-popup/email-popup.vue | 14 +- 40 files changed, 3574 insertions(+), 1311 deletions(-) create mode 100644 pages/subcomponent/promotion-profit-detail.vue create mode 100644 pages/subcomponent/promotion-team.vue create mode 100644 pages/subcomponent/promotion-withdraw-record.vue create mode 100644 static/tui/1.png create mode 100644 static/tui/2.png create mode 100644 static/tui/3.png create mode 100644 static/tui/4.png create mode 100644 static/tui/5.png create mode 100644 utils/pinyin.js diff --git a/App.vue b/App.vue index 9b0e1a3..6b499f3 100644 --- a/App.vue +++ b/App.vue @@ -6,12 +6,14 @@ login_status:true, phone:null, bannerList: [], - pricePreviewList: [] + pricePreviewList: [], + configData: [], }, onLaunch: function() { routerInterception() this.getBannerList() this.getPricePreviewList() + this.getConfigData() // console.log(this.$utils) console.log('App Launch') }, @@ -40,7 +42,17 @@ uni.$emit('pricePreviewListUpdated') } }) - } + }, + getConfigData() { + this.$api('getConfig', {}, res => { + // console.log('Config data response:', JSON.parse(JSON.stringify(res)) ) + if (res && res.success && Array.isArray(res.result)) { + getApp().globalData.configData = res.result + // console.log('Config data set:', JSON.parse(JSON.stringify(this.configData)) ) + } + }) + }, + } } diff --git a/api/model/index.js b/api/model/index.js index b6934e3..8e200da 100644 --- a/api/model/index.js +++ b/api/model/index.js @@ -8,151 +8,150 @@ const api = { auth : false, }, - getRiceIconList: { - url: '/index_common/getRiceIconList', + getHanHaiMemberUser: { + url: '/recycle-admin/applet/promotion/getHanHaiMemberUser', method: 'GET', + auth: true, }, - // 获取首页新闻详情 - getRiceNewsDetail: { - url: '/index_common/getCommonNewsDetail', - method: 'GET', + // 升级用户为推广官 + upgrade: { + url: '/recycle-admin/applet/info_team/upgrade', + method: 'POST', + auth: true, }, - // 获取首页新闻列表 - getRiceNewsList: { - url: '/index_common/getRiceNewsList', - method: 'GET', + // 拉黑用户 + blackUser: { + url: '/recycle-admin/applet/info_team/blackUser', + method: 'POST', + auth: true, }, - // 获取首页公告列表 - getRiceNoticeList: { - url: '/index_common/getRiceNoticeList', - method: 'GET', + // 订单驳回 + rejectOrder: { + url: '/recycle-admin/applet/info_team_order/rejectOrder', + method: 'POST', + auth: true, }, - // 获取首页商品详情 - getRiceProductDetail: { - url: '/index_common/getRiceProductDetail', - method: 'GET', + // 订单通过 + passOrder: { + url: '/recycle-admin/applet/info_team_order/passOrder', + method: 'POST', + auth: true, }, - // 获取首页体验产品 - getRiceProductList: { - url: '/index_common/getRiceProductList', - method: 'GET', + // 解除员工 + removeMember: { + url: '/recycle-admin/applet/member/removeMember', + method: 'POST', + auth: true, }, - // 查询分类接口 - getCategoryList: { - url: '/index_common/getCategoryList', + // 查询员工列表 + getMyTeamList: { + url: '/recycle-admin/applet/member/getMyTeamList', method: 'GET', + auth: true, }, - // 新查询分类以及商品数据接口 - getCategoryPidList: { - url: '/index_common/getCategoryPidList', + // 查询员工详情 + getMemberInfo: { + url: '/recycle-admin/applet/member/getMemberInfo', method: 'GET', - debounce : 250, + auth: true, }, - // 查询一级分类接口 - getPidList: { - url: '/index_common/getCategoryPidList', - method: 'GET', + // 拒绝推广官申请 + rejectPromotionApply: { + url: '/recycle-admin/applet/promotion/rejectPromotionApply', + method: 'POST', + auth: true, }, - // 获取分类分页商品列表接口 - getClassShopPageList: { - url: '/index_common/getClassShopPageList', - method: 'GET', + // 同意推广官申请 + passPromotionApply: { + url: '/recycle-admin/applet/promotion/passPromotionApply', + method: 'POST', + auth: true, }, - // 加入购物车 - addCart: { - url: '/index_common/addCart', + // 获取推广表单申请列表带分页 + getPromotionApplyListPage: { + url: '/recycle-admin/applet/promotion/getPromotionApplyListPage', method: 'GET', auth: true, - showLoading: true, - limit : 500, }, - // 删除购物车信息 - deleteCart: { - url: '/index_common/deleteCart', - method: 'DELETE', + // 获取推广员列表 + getPromotionList: { + url: '/recycle-admin/applet/promotion/getPromotionList', + method: 'GET', auth: true, - showLoading: true, }, // 修改购物车信息数量 - updateCartNum: { - url: '/index_common/updateCartNum', - method: 'POST', + getUserOrderNum: { + url: '/recycle-admin/applet/info_team_order/getUserOrderNum', + method: 'GET', auth: true, - debounce: 300, }, - // 创建订单 - createOrder: { - url: '/index_common/createOrder', + // 获取管理员订单详情 + getOrderDetail: { + url: '/recycle-admin/applet/info_team_order/getOrderDetail', method: 'GET', auth: true, - limit: 1000, - showLoading: true, }, - // 创建订单-再次支付 - createOrderTwo: { - url: '/index_common/createOrderTwo', + // 获取管理员订单列表 + getOrderList: { + url: '/recycle-admin/applet/info_team_order/getOrderList', method: 'GET', - auth: true, - limit: 1000, - showLoading: true, + auth: true }, - // 多商品创建订单 - createSumOrder: { - url: '/index_common/createSumOrder', + // 创建预约订单 + createOrder: { + url: '/recycle-admin/applet/order/createOrder', method: 'POST', auth: true, - limit: 1000, - showLoading: true, }, - // 多商品订单再次支付 - createSumOrderAgain: { - url: '/index_common/createSumOrderAgain', - method: 'POST', + // 流水列表带分页 + getMyMoneyLogPage: { + url: '/recycle-admin/applet/money/getMyMoneyLogPage', + method: 'GET', auth: true, - limit: 1000, - showLoading: true, }, // 确认收货 - confirmOrder: { - url: '/index_common/confirmOrder', - method: 'GET', + apply: { + url: '/recycle-admin/applet/promotion/apply', + method: 'POST', auth: true, - limit: 1000, - showLoading: true, }, - // 取消订单 - cancelOrder: { - url: '/index_common/cancelOrder', + // 获取推广官信息 + getMyPromotionInfo: { + url: '/recycle-admin/applet/promotion/getMyPromotionInfo', method: 'GET', auth: true, - limit: 1000, - showLoading: true, }, // 获取首页广告列表 - getRiceProductList: { - url: '/index_common/getRiceAdList', + getRankList: { + url: '/recycle-admin/applet/promotion/getRankList', method: 'GET', + auth : true }, - // 获取首页广告列表 - getRiceAdDetail: { - url: '/index_common/getRiceAdDetail', + // 获取品牌列表 + getGoodsBrandList: { + url: '/recycle-admin/applet/class/getGoodsBrandList', method: 'GET', + auth : false }, - //获取优惠券信息 - getRiceCouponList: { - url: '/info_common/getRiceCouponList', + //联系客服页面 + getQuestionList: { + url: '/recycle-admin/applet/order/getQuestionList', method: 'GET', + auth : false }, - //增加或者修改合伙人申请信息 - addOrUpdateCommonUser: { - url: '/index_common/addOrUpdateCommonUser', - method: 'POST', + //获取用户信息 + getInfoTeamListPage: { + url: '/recycle-admin/applet/info_team/getInfoTeamListPage', + method: 'GET', + auth : true }, - //根据用户查询渠合伙人申请信息表单 - getCommonUser: { - url: '/index_common/getCommonUser', - method: 'GET' + //查看订单详情 + getOrderDetail: { + url: '/recycle-admin/applet/order/getOrderDetail', + method: 'GET', + auth : true }, + //查看最近回收质检报告 getQualityReport: { url: '/recycle-admin/applet/index/getQualityReport', diff --git a/pages.json b/pages.json index 44b9b8b..f3fffc4 100644 --- a/pages.json +++ b/pages.json @@ -215,6 +215,27 @@ "navigationStyle": "custom", "enablePullDownRefresh": true } + }, + { + "path": "promotion-withdraw-record", + "style": { + "navigationStyle": "custom", + "enablePullDownRefresh": true + } + }, + { + "path": "promotion-profit-detail", + "style": { + "navigationStyle": "custom", + "enablePullDownRefresh": true + } + }, + { + "path": "promotion-team", + "style": { + "navigationStyle": "custom", + "enablePullDownRefresh": true + } } ] }, @@ -279,7 +300,7 @@ "path": "staff", "style": { "navigationStyle": "custom", - "enablePullDownRefresh": false + "enablePullDownRefresh": true } }, { @@ -293,7 +314,7 @@ "path": "tui", "style": { "navigationStyle": "custom", - "enablePullDownRefresh": false + "enablePullDownRefresh": true } }, { diff --git a/pages/component/home.vue b/pages/component/home.vue index 11265fe..ce969d1 100644 --- a/pages/component/home.vue +++ b/pages/component/home.vue @@ -44,7 +44,7 @@ 已开通包邮服务城市有哪些? - 武汉市、北京市、上海市、武汉市、北京市、上海市... + {{ cityListStr }} @@ -178,22 +178,8 @@ export default { return { value:0, processes: [ - // { icon: '/static/home/① 在线预约.png', text: '在线预约' }, - // { icon: '/static/home/② 快递上门.png', text: '快递上门' }, - // { icon: '/static/home/③ 透明质检.png', text: '透明质检' }, - // { icon: '/static/home/④ 现金打款.png', text: '现金打款' } ], priceList: [], - priceListStatic: [ - { icon: '/static/home/羽绒服.png', name: '羽绒服', price: '3-10', unit: '件' }, - { icon: '/static/home/鞋子.png', name: '鞋子', price: '3-10', unit: '件' }, - { icon: '/static/home/包包.png', name: '包包', price: '3-10', unit: '件' }, - { icon: '/static/home/床被.png', name: '床被', price: '3-10', unit: '件' }, - { icon: '/static/home/品牌服饰.png', name: '品牌服饰', price: '3-10', unit: '件' }, - { icon: '/static/home/T 恤衬衣.png', name: 'T恤衬衫', price: '3-10', unit: '件' }, - { icon: '/static/home/羽绒裤.png', name: '羽绒裤', price: '3-10', unit: '件' }, - { icon: '/static/home/儿童羽绒服.png', name: '儿童羽绒服', price: '3-10', unit: '件' } - ], records: [], destinations: [ { @@ -218,9 +204,21 @@ export default { } ], bannerList: [], - pricePreviewList: [] + pricePreviewList: [], + cityList: [] } }, + computed: { + cityListStr() { + // 只取前8个城市,超出用...结尾 + const names = this.cityList.map(c => c.name) + const max = 8 + if (names.length > max) { + return names.slice(0, max).join('、') + '...' + } + return names.join('、') + }, + }, methods: { changeTo(e){ this.value = e @@ -282,20 +280,22 @@ export default { getPricePreview() { const resList = this.pricePreviewList || [] if (Array.isArray(resList)) { - // 只取一级分类,按sort升序 + // 只取一级分类,按sort升序 const firstLevel = resList.filter(item => item.pid === '0').sort((a, b) => a.sort - b.sort) - this.priceList = firstLevel.map(item => { - // 从静态表中找图片和价格 - const staticItem = this.priceListStatic.find(s => s.name.replace(/\s/g, '') === item.title.replace(/\s/g, '')) - return { - id: item.id, // 保证有id - icon: staticItem ? staticItem.icon : '', - name: item.title, - price: staticItem ? staticItem.price : '', - unit: '件' - } - }) - } + // console.log(firstLevel,'firstLevel'); + this.priceList = firstLevel.map(item => { + // 从静态表中找图片和价格 + // const staticItem = this.priceListStatic.find(s => s.name.replace(/\s/g, '') === item.title.replace(/\s/g, '')) + // console.log(item,'item'); + return { + id: item.id, // 保证有id + icon: item.icon ? item.icon : '', + name: item.title, + price: item.priceNo ? item.priceNo : '', + unit: item.unit ? item.unit : '' + } + }) + } }, getRecentGoods() { this.$api('getRecentGoodsList', {}, res => { @@ -316,6 +316,16 @@ export default { uni.navigateTo({ url: `/pages/subcomponent/inspection-report?id=${item.id}` }) + }, + getFreeCityList() { + this.$api('getFreeCityList', {}, res => { + if (res && res.code === 200 && Array.isArray(res.result)) { + // 只取一级城市(有children的name) + this.cityList = res.result.map(item => ({ name: item.name })).filter(item => item.name) + } else { + this.cityList = [] + } + }) } }, onLoad() { @@ -324,6 +334,7 @@ export default { this.getRecentGoods(); this.pricePreviewList = getApp().globalData.pricePreviewList || [] this.bannerList = getApp().globalData.bannerList || [] + this.getFreeCityList(); uni.$on('pricePreviewListUpdated', () => { this.pricePreviewList = getApp().globalData.pricePreviewList || [] this.getPricePreview() @@ -339,6 +350,7 @@ export default { onShow() { // 移除自动下拉刷新 // uni.startPullDownRefresh() + this.getPricePreview(); } } @@ -495,7 +507,7 @@ export default { color: #999; } } - + .submit-btn { background: linear-gradient(to right, #ffd01e, #ff8917); border-radius: 70rpx; @@ -647,10 +659,10 @@ export default { border-radius: 16rpx; padding: 10rpx; background-color: #fff8ea; - image{ - width: 60rpx; - height: 60rpx; - } + image{ + width: 60rpx; + height: 60rpx; + } .location { font-size: 28rpx; color: #333; @@ -665,23 +677,23 @@ export default { } .user-id { - font-family: PingFang SC; + font-family: PingFang SC; font-weight: 500; font-size: 24rpx; - line-height: 140%; - letter-spacing: 0%; - text-align: center; - color: #183c5c; + line-height: 140%; + letter-spacing: 0%; + text-align: center; + color: #183c5c; } - .user-id-f{ - font-family: PingFang SC; - font-weight: 400; + .user-id-f{ + font-family: PingFang SC; + font-weight: 400; font-size: 22rpx; - line-height: 140%; - letter-spacing: 0%; - text-align: center; - color: #9b9b9b; - } + line-height: 140%; + letter-spacing: 0%; + text-align: center; + color: #9b9b9b; + } } } diff --git a/pages/component/my.vue b/pages/component/my.vue index 1d15e14..047ee73 100644 --- a/pages/component/my.vue +++ b/pages/component/my.vue @@ -43,7 +43,7 @@ {{userInfo.nickName}} - {{userInfo.id}} + ID: {{userInfo.intentioCode}} @@ -61,7 +61,7 @@ 累计回收 - 341 + {{totalOrders}} @@ -74,24 +74,24 @@ - + 我的订单 - + 查看全部 > - + {{tab.name}} - {{tab.badge}} + @@ -240,7 +240,8 @@ export default { { name: '修改信息', icon: '/static/my/修改信息.png' }, { name: '退出登录', icon: '/static/my/退出登录.png' } ], - orderList: [] + orderList: [], + totalOrders: 0 // 添加累计回收单数字段 } }, methods: { @@ -286,7 +287,7 @@ export default { const pages = [ // '/pages/subcomponent/promotion', '/pages/subcomponent/select', - '/pages/subcomponent/customer', + '/pages/subcomponent/admin_faq', '/pages/subcomponent/edit_profile', 'logout' ] @@ -345,18 +346,29 @@ export default { }, fetchOrderList() { let status = '' - if (this.currentTab === 1) status = 0 // 进行中 + if (this.currentTab === 1) status = 1 // 进行中 if (this.currentTab === 2) status = 3 // 已完成 const params = { pageSize: 1, current: 1 } if (status !== '') params.status = status this.$api && this.$api('getOrderListPage', params, res => { if (res && res.code === 200 && res.result && Array.isArray(res.result.records)) { this.orderList = res.result.records + // 更新累计回收单数 } else { this.orderList = [] } }) }, + getTotalOrders(){ + this.$api && this.$api('getOrderListPage', {}, res => { + if (res && res.code === 200 && res.result && Array.isArray(res.result.records)) { + // 更新累计回收单数 + this.totalOrders = res.result.total || 0 + } else { + this.totalOrders = 0 + } + }) + } }, computed: { customStyle() { @@ -377,6 +389,7 @@ export default { }) this.fetchUserInfo() this.fetchOrderList() + this.getTotalOrders() uni.$on('bannerListUpdated', () => { this.$forceUpdate && this.$forceUpdate() }) @@ -386,9 +399,11 @@ export default { }, onShow() { this.fetchUserInfo() + this.getTotalOrders() }, onPullDownRefresh() { this.fetchUserInfo() + this.getTotalOrders() setTimeout(() => { uni.stopPullDownRefresh() uni.showToast({ @@ -634,21 +649,6 @@ export default { background: #fff; box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.05); } - - .badge { - position: absolute; - top: 4rpx; - right: 50%; - transform: translateX(24rpx); - background: #ff6b35; - color: #fff; - font-size: 20rpx; - padding: 0 8rpx; - border-radius: 20rpx; - min-width: 28rpx; - height: 28rpx; - line-height: 28rpx; - } } } diff --git a/pages/component/recycle.vue b/pages/component/recycle.vue index 1bffb55..368f6d5 100644 --- a/pages/component/recycle.vue +++ b/pages/component/recycle.vue @@ -19,7 +19,7 @@ - + {{ category.title }} - + - + @@ -47,7 +47,7 @@ - {{item.desc}} + {{item.service}} ¥ @@ -60,7 +60,7 @@ - + 查看品牌 @@ -123,7 +123,7 @@ {{item.name}} - {{item.desc}} + {{2222}} ¥{{item.price}}/件 @@ -184,7 +184,7 @@ - + 关闭 @@ -259,6 +259,7 @@ @@ -226,313 +328,577 @@ $order-card-padding: 40px 28px; display: flex; flex-direction: column; align-items: center; - .nav-bar { - position: fixed; - top: 0; left: 0; right: 0; - z-index: 100; - background: #fff; - display: flex; - align-items: center; - justify-content: space-between; - .nav-title { flex: 1; text-align: center; font-size: 18px; font-weight: bold; } - .nav-icons { display: flex; align-items: center; gap: 16px; } +} +.nav-bar { + display: flex; + align-items: center; + height: calc(150rpx + var(--status-bar-height)); + padding: 0 32rpx; + padding-top: var(--status-bar-height); + background: #fff; + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 999; + box-sizing: border-box; + box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.03); + .back { + padding: 20rpx; + margin-left: -20rpx; + } + .nav-title { + flex: 1; + text-align: center; + font-size: 32rpx; + font-weight: 500; + color: #222; } - .main-content { - width: 100vw; - min-width: 0; - box-sizing: border-box; - padding: 0 16px 60px 16px; + .nav-icons { display: flex; - flex-direction: column; align-items: center; + gap: 12px; } - .info-card { - width: 100%; - max-width: 375px; - min-width: 0; - box-sizing: border-box; - margin: 0 auto 28px auto; - padding: 16px 8px; - background: #fff; - border-radius: 20px; - box-shadow: 0 2px 12px rgba(0,0,0,0.04); - // color: blue; - &.process-card { - position: relative; - .status-tag { - position: absolute; - right: 18px; - top: 18px; - font-size: 13px; +} +.main-content { + margin-top: calc(150rpx + var(--status-bar-height)); + width: 100vw; + min-width: 0; + box-sizing: border-box; + padding: 0 16px 60px 16px; + display: flex; + flex-direction: column; + align-items: center; +} +.info-card { + width: 100%; + max-width: 375px; + min-width: 0; + box-sizing: border-box; + margin: 0 auto 28px auto; + padding: 16px 8px; + background: #fff; + border-radius: 20px; + box-shadow: 0 2px 12px rgba(0,0,0,0.04); + // color: blue; + &.process-card { + position: relative; + .status-tag { + position: absolute; + right: 18px; + top: 18px; + font-size: 13px; + border-radius: 12px; + padding: 2px 10px; + font-weight: 500; + background: #e6f9e6; + color: #1ecb1e; + height: 22px; + line-height: 18px; + display: flex; + align-items: center; + &.orange { + background: #fff7e6; + color: #ffb400; + font-size: 14px; border-radius: 12px; - padding: 2px 10px; - font-weight: 500; - background: #e6f9e6; - color: #1ecb1e; + padding: 2px 14px; + font-weight: 400; height: 22px; - line-height: 18px; display: flex; align-items: center; - &.orange { - background: #fff7e6; - color: #ffb400; - font-size: 14px; - border-radius: 12px; - padding: 2px 14px; - font-weight: 400; - height: 22px; - display: flex; - align-items: center; - } - &.gray { - background: #f5f5f5; - color: #444; - font-size: 14px; - border-radius: 12px; - padding: 2px 14px; - font-weight: 400; - height: 22px; - display: flex; - align-items: center; - } - &.blue { - background: #eaf6ff; - color: #2a9cfb; - font-size: 14px; - border-radius: 12px; - padding: 2px 14px; - font-weight: 400; - height: 22px; - display: flex; - align-items: center; - } - } - .status-tag.red { - background: #fff0f0; - color: #ff4d4f; } - } - .info-card-header { - display: flex; align-items: center; justify-content: flex-start; - .info-title-wrap { + &.gray { + background: #f5f5f5; + color: #444; + font-size: 14px; + border-radius: 12px; + padding: 2px 14px; + font-weight: 400; + height: 22px; display: flex; align-items: center; - .info-title { font-size: 18px; font-weight: bold; color: #222; } - .tag-nobaoyou { - margin-left: 8px; - background: #fff0f0; - color: #ff4d4f; - font-size: 14px; - border-radius: 12px; - padding: 2px 14px; - font-weight: 400; - height: 22px; - display: flex; - align-items: center; - } } - .status-tag { margin-left: auto; } - } - .steps-bar { - display: flex; - justify-content: flex-start; - align-items: flex-start; - margin: 24px 0 24px 0; - gap: 14px; - .step-item { - background: #fff8ea; - border-radius: 16px; - width: 76px; - height: 76px; + &.blue { + background: #eaf6ff; + color: #2a9cfb; + font-size: 14px; + border-radius: 12px; + padding: 2px 14px; + font-weight: 400; + height: 22px; display: flex; - flex-direction: column; align-items: center; - box-shadow: 0 2px 8px rgba(255, 156, 0, 0.04); - overflow: hidden; - position: relative; - .step-icon { width: 44px; height: 44px; margin: 6px 0 0 0; } - .step-label { - width: 100%; height: 28px; background: transparent; position: absolute; left: 0; bottom: 0; border-radius: 0 0 12px 12px; display: flex; align-items: center; justify-content: center; transition: background 0.2s; overflow: hidden; - line-height: 1; - .step-num, .step-text { - font-size: 11px; - color: #9b9b9b; - font-weight: 600; - line-height: 1; - vertical-align: middle; - } - .step-num { margin-right: 2px; } - } - &.active .step-label { background: linear-gradient(90deg, #ffd01e 0%, #ff8917 100%); } - &.active .step-num, &.active .step-text { color: #fff; font-weight: bold; } } } - .base-info { - margin-top: 18px; - .base-info-row { + .status-tag.red { + background: #fff0f0; + color: #ff4d4f; + } + } + .info-card-header { + display: flex; align-items: center; justify-content: flex-start; + .info-title-wrap { + display: flex; + align-items: center; + .info-title { font-size: 18px; font-weight: bold; color: #222; } + .tag-nobaoyou { + margin-left: 8px; + background: #fff0f0; + color: #ff4d4f; + font-size: 14px; + border-radius: 12px; + padding: 2px 14px; + font-weight: 400; + height: 22px; display: flex; - align-items: flex-start; - padding: 0 0 0 0; - position: relative; - min-height: 36px; - justify-content: space-between; - .base-label-wrap { min-width: 80px; text-align: left; color: #8b8b8b; font-size: 13px;} - .base-value-wrap { display: flex; align-items: center; flex: 1; justify-content: flex-end; } - .base-value { color: #222; font-size: 15px; font-weight: 600; word-break: break-all; text-align: right; } - .copy-btn { color: #ffb400; font-size: 13px; margin-left: 6px; font-weight: 400; padding: 1px 6px; border-radius: 6px; transition: background 0.2s; } - .copy-btn:active { background: #fff7e6; } - .divider { position: absolute; left: 16px; right: 16px; bottom: -1px; height: 1px; background: #f0f0f0; } - uni-icons { margin-left: 6px; } + align-items: center; } - .base-info-row .base-value-wrap { flex-wrap: wrap; } - .base-info-row .base-value { white-space: pre-line; line-height: 1.5; } } - &.detail-card { + .status-tag { margin-left: auto; } + } + .steps-bar { + display: flex; + justify-content: space-between; + align-items: flex-start; + margin: 24px 0 24px 0; + gap: 14px; + .step-item { + background: #fff8ea; + border-radius: 16px; + width: 76px; + height: 76px; + display: flex; + flex-direction: column; + align-items: center; + box-shadow: 0 2px 8px rgba(255, 156, 0, 0.04); + overflow: hidden; position: relative; - padding: 0; - background: transparent; - .card-header-bg { - height: 56px; - background: linear-gradient(180deg, #fff7e6 0%, #fff 100%); - border-radius: 20px 20px 0 0; - display: flex; - align-items: flex-end; - padding-left: 20px; - padding-top: 12px; + transition: all 0.3s ease; + + .step-icon { + width: 44px; + height: 44px; + margin: 6px 0 0 0; + transition: transform 0.3s ease; } - .detail-content { - background: #fff; - border-radius: 0 0 20px 20px; - padding: 20px 16px 16px 16px; + + .step-label { + width: 100%; + height: 28px; + background: transparent; + position: absolute; + left: 0; + bottom: 0; + border-radius: 0 0 12px 12px; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.3s ease; + overflow: hidden; + line-height: 1; + + .step-num, .step-text { + font-size: 11px; + color: #9b9b9b; + font-weight: 600; + line-height: 1; + vertical-align: middle; + transition: color 0.3s ease; + } + + .step-num { + margin-right: 2px; + } } - .detail-row { - display: flex; - align-items: center; - min-height: 32px; - .detail-label { - color: #bcbcbc; - font-size: 14px; - width: 90px; - flex-shrink: 0; + + &.active { + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(255, 156, 0, 0.08); + + .step-icon { + transform: scale(1.05); } - .detail-value { - color: #222; - font-size: 15px; - font-weight: 500; - text-align: left; - margin-left: 0; - flex: 1; + + .step-label { + background: linear-gradient(90deg, #ffd01e 0%, #ff8917 100%); } - &.total-row .detail-value.total { - color: #ffb400; - font-size: 20px; - font-weight: bold; - text-align: right; - flex: unset; - margin-left: auto; - min-width: 100px; + + .step-num, .step-text { + color: #fff; + font-weight: bold; } - .orange { color: #ffb400; } } - .divider { height: 1px; background: #f0f0f0; margin: 16px 0; } - .goods-row { display: flex; align-items: flex-start; margin-bottom: 18px; } - .goods-img { width: 48px; height: 48px; border-radius: 12px; margin-right: 12px; } - .goods-info { flex: 1; } - .goods-name { font-size: 15px; font-weight: bold; color: #222; margin-bottom: 2px; } - .goods-desc { font-size: 13px; color: #bbb; margin-bottom: 8px; } - .goods-price-row { display: flex; align-items: center; } - .goods-price { color: #ffb400; font-size: 15px; font-weight: bold; margin-right: 8px; } - .goods-unit { font-size: 13px; color: #bbb; } - .goods-count { color: #bbb; font-size: 13px; margin-left: 8px; } - .goods-total { color: #222; font-size: 15px; font-weight: bold; margin-left: auto; } + + &:not(.active):hover { + transform: translateY(-1px); + box-shadow: 0 2px 12px rgba(255, 156, 0, 0.06); + } } } - .footer-btns { - position: fixed; left: 0; right: 0; bottom: 0; background: #fff; display: flex; gap: 16px; padding: 16px 24px 32px 24px; z-index: 101; - .btn-outline { - flex: 1; - height: 40px; - border-radius: 16px; - border: 1px solid #ffe09a; - color: #ffb400; - background: #fff0d2; - font-size: 15px; - font-weight: 500; - box-shadow: none; - padding: 0 18px; - } - .btn-main { - flex: 1; - height: 40px; - border-radius: 16px; - background: linear-gradient(90deg, #ffbe3d 0%, #ffac04 100%); - color: #fff; - border: none; - font-size: 15px; - font-weight: 500; - box-shadow: none; - padding: 0 18px; + .base-info { + margin-top: 18px; + .base-info-row { + display: flex; + align-items: flex-start; + padding: 0 0 0 0; + position: relative; + min-height: 36px; + justify-content: space-between; + .base-label-wrap { min-width: 80px; text-align: left; color: #8b8b8b; font-size: 13px;} + .base-value-wrap { display: flex; align-items: center; flex: 1; justify-content: flex-end; } + .base-value { color: #222; font-size: 15px; font-weight: 600; word-break: break-all; text-align: right; } + .copy-btn { color: #ffb400; font-size: 13px; margin-left: 6px; font-weight: 400; padding: 1px 6px; border-radius: 6px; transition: background 0.2s; } + .copy-btn:active { background: #fff7e6; } + .divider { position: absolute; left: 16px; right: 16px; bottom: -1px; height: 1px; background: #f0f0f0; } + uni-icons { margin-left: 6px; } } + .base-info-row .base-value-wrap { flex-wrap: wrap; } + .base-info-row .base-value { white-space: pre-line; line-height: 1.5; } } - .cancel-reason { - color: #bbb; - font-size: 13px; - margin-bottom: 10px; - padding-left: 2px; - } - .inspect-card { - max-width: 335px; - width: 100%; - margin: 0 auto 28px auto; - border-radius: 24px; - overflow: hidden; - .inspect-header { - height: 60px; - background: linear-gradient(180deg, #fff7e6 0%, #fffbe6 100%); - border-radius: 24px 24px 0 0; + &.detail-card { + position: relative; + padding: 0; + background: transparent; + .card-header-bg { + height: 56px; + background: linear-gradient(180deg, #fff7e6 0%, #fff 100%); + border-radius: 20px 20px 0 0; display: flex; align-items: flex-end; - padding-left: 24px; + padding-left: 20px; + padding-top: 12px; } - .inspect-title { - font-size: 20px; - font-weight: bold; - color: #222; - line-height: 60px; - } - .inspect-content { + .detail-content { background: #fff; - border-radius: 0 0 24px 24px; - padding: 24px 24px 20px 24px; - } - .inspect-row { - display: flex; align-items: center; justify-content: space-between; - min-height: 40px; - .inspect-label { color: #bcbcbc; font-size: 16px; } - .inspect-value { color: #222; font-size: 16px; font-weight: 500; } - .inspect-divider { height: 1px; background: #f0f0f0; margin: 0; width: 100%; position: absolute; left: 0; bottom: 0; } - position: relative; + border-radius: 0 0 20px 20px; + padding: 20px 16px 16px 16px; } - .inspect-btn { - width: 100%; - margin: 24px 0 0 0; - height: 48px; - border-radius: 24px; - border: 1.5px solid #ffb400; - color: #ffb400; - background: #fff0d2; - font-size: 18px; - font-weight: 500; - box-shadow: none; - text-align: center; - line-height: 48px; + .detail-row { + display: flex; + align-items: center; + min-height: 32px; + .detail-label { + color: #bcbcbc; + font-size: 14px; + width: 90px; + flex-shrink: 0; + } + .detail-value { + color: #222; + font-size: 15px; + font-weight: 500; + text-align: left; + margin-left: 0; + flex: 1; + } + &.total-row .detail-value.total { + color: #ffb400; + font-size: 20px; + font-weight: bold; + text-align: right; + flex: unset; + margin-left: auto; + min-width: 100px; + } + .orange { color: #ffb400; } } + .divider { height: 1px; background: #f0f0f0; margin: 16px 0; } + .goods-row { display: flex; align-items: flex-start; margin-bottom: 18px; } + .goods-img { width: 48px; height: 48px; border-radius: 12px; margin-right: 12px; } + .goods-info { flex: 1; } + .goods-name { font-size: 15px; font-weight: bold; color: #222; margin-bottom: 2px; } + .goods-desc { font-size: 13px; color: #bbb; margin-bottom: 8px; } + .goods-price-row { display: flex; align-items: center; } + .goods-price { color: #ffb400; font-size: 15px; font-weight: bold; margin-right: 8px; } + .goods-unit { font-size: 13px; color: #bbb; } + .goods-count { color: #bbb; font-size: 13px; margin-left: 8px; } + .goods-total { color: #222; font-size: 15px; font-weight: bold; margin-left: auto; } + } +} +.footer-btns { + position: fixed; left: 0; right: 0; bottom: 0; background: #fff; display: flex; gap: 16px; padding: 16px 24px 32px 24px; z-index: 101; + .btn-outline { + flex: 1; + height: 40px; + border-radius: 16px; + border: 1px solid #ffe09a; + color: #ffb400; + background: #fff0d2; + font-size: 15px; + font-weight: 500; + box-shadow: none; + padding: 0 18px; + } + .btn-main { + flex: 1; + height: 40px; + border-radius: 16px; + background: linear-gradient(90deg, #ffbe3d 0%, #ffac04 100%); + color: #fff; + border: none; + font-size: 15px; + font-weight: 500; + box-shadow: none; + padding: 0 18px; + } +} +.cancel-reason { + color: #bbb; + font-size: 13px; + margin-bottom: 10px; + padding-left: 2px; +} +.inspect-card { + max-width: 335px; + width: 100%; + margin: 0 auto 28px auto; + border-radius: 24px; + overflow: hidden; + .inspect-header { + height: 60px; + background: linear-gradient(180deg, #fff7e6 0%, #fffbe6 100%); + border-radius: 24px 24px 0 0; + display: flex; + align-items: flex-end; + padding-left: 24px; } - .card-title { + .inspect-title { font-size: 20px; font-weight: bold; color: #222; - margin-bottom: 12px; + line-height: 60px; + } + .inspect-content { + background: #fff; + border-radius: 0 0 24px 24px; + padding: 24px 24px 20px 24px; + } + .inspect-row { + display: flex; align-items: center; justify-content: space-between; + min-height: 40px; + .inspect-label { color: #bcbcbc; font-size: 16px; } + .inspect-value { color: #222; font-size: 16px; font-weight: 500; } + .inspect-divider { height: 1px; background: #f0f0f0; margin: 0; width: 100%; position: absolute; left: 0; bottom: 0; } + position: relative; + } + .inspect-btn { + width: 100%; + margin: 24px 0 0 0; + height: 48px; + border-radius: 24px; + border: 1.5px solid #ffb400; + color: #ffb400; + background: #fff0d2; + font-size: 18px; + font-weight: 500; + box-shadow: none; + text-align: center; + line-height: 48px; + } +} +.card-title { + font-size: 20px; + font-weight: bold; + color: #222; + margin-bottom: 12px; +} +.custom-inspect-card { + background: linear-gradient(180deg, #fffbe6 0%, #fff 90%); + border-radius: 20px; + box-shadow: 0 8px 24px rgba(255, 156, 0, 0.03); + padding: 0; + margin: 24rpx 0 0 0; + overflow: hidden; +} +.custom-header-bg { + height: 56px; + background: linear-gradient(180deg, #fff7e6 0%, #fff 100%); + border-radius: 20px 20px 0 0; + display: flex; + align-items: flex-end; + padding-left: 24px; + padding-top: 12px; +} +.custom-card-title { + font-size: 20px; + font-weight: bold; + color: #222; + margin-bottom: 12px; +} +.custom-detail-content { + background: #fff; + border-radius: 0 0 20px 20px; + padding: 20px 16px 16px 16px; +} +.custom-detail-row { + display: flex; + align-items: center; + min-height: 32px; + font-size: 15px; + .custom-detail-label { + color: #bcbcbc; + font-size: 14px; + width: 90px; + flex-shrink: 0; + } + .custom-detail-value { + color: #222; + font-size: 15px; + font-weight: 500; + text-align: left; + margin-left: 0; + flex: 1; + } + &.total-row .custom-detail-value.total { + color: #ffb400; + font-size: 20px; + font-weight: bold; + text-align: right; + flex: unset; + margin-left: auto; + min-width: 100px; + } + .highlight { + color: #ffb400; + font-size: 18px; + font-weight: bold; } } +.custom-divider { + width: 100%; + height: 1px; + background: #f0f0f0; + margin: 16px 0; +} +.custom-goods-row { + background: #fff; + border-radius: 24px; + display: flex; + align-items: center; + padding: 24px 20px; + box-shadow: 0 2px 8px rgba(255, 156, 0, 0.04); + position: relative; + margin-bottom: 18px; +} +.custom-goods-img { + width: 48px; + height: 48px; + border-radius: 12px; + margin-right: 12px; + flex-shrink: 0; +} +.custom-goods-info { + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; +} +.custom-goods-name { + font-size: 15px; + color: #222; + font-weight: bold; + margin-bottom: 2px; +} +.custom-goods-desc { + font-size: 13px; + color: #bcbcbc; + margin-bottom: 10px; +} +.custom-goods-meta { + display: flex; + align-items: center; + gap: 10px; +} +.custom-goods-price { + color: #ffb400; + font-size: 15px; + font-weight: bold; +} +.custom-goods-unit { + color: #bcbcbc; + font-size: 13px; + font-weight: normal; +} +.custom-goods-count { + color: #bcbcbc; + font-size: 13px; + margin-left: 8px; +} +.custom-goods-total { + color: #222; + font-size: 15px; + font-weight: bold; + margin-left: 18px; + flex-shrink: 0; +} +.user-stat-modal-mask { + position: fixed; + left: 0; right: 0; top: 0; bottom: 0; + background: rgba(0,0,0,0.45); + z-index: 9999; + display: flex; + align-items: center; + justify-content: center; +} +.user-stat-modal-box { + width: 80vw; + max-width: 420px; + background: linear-gradient(180deg, #fff7f2 0%, #fff 100%); + border-radius: 32px; + box-shadow: 0 8px 32px rgba(0,0,0,0.08); + padding: 38px 0 32px 0; + display: flex; + flex-direction: column; + align-items: center; +} +.user-stat-modal-title { + font-size: 24px; + font-weight: bold; + color: #222; + text-align: center; + margin-bottom: 32px; +} +.user-stat-modal-row { + width: 80%; + display: flex; + align-items: center; + justify-content: space-between; + font-size: 18px; + margin: 0 auto; + padding: 12px 0; +} +.user-stat-label { + color: #999; + font-size: 16px; +} +.user-stat-value { + color: #222; + font-size: 18px; + font-weight: 500; +} +.user-stat-modal-divider { + width: 80%; + height: 1px; + background: #f0f0f0; + margin: 0 auto; +} +.user-stat-modal-btn { + width: 80%; + margin: 32px auto 0 auto; + height: 48px; + border-radius: 24px; + background: #fffbe6; + color: #ffb400; + font-size: 20px; + font-weight: bold; + border: 2px solid #ffd01e; + text-align: center; + line-height: 48px; +} +.user-stat-trigger { + color: #222; + font-weight: 500; + cursor: pointer; +} \ No newline at end of file diff --git a/pages/manager/order.vue b/pages/manager/order.vue index 8d284a4..59b01f6 100644 --- a/pages/manager/order.vue +++ b/pages/manager/order.vue @@ -34,7 +34,7 @@ v-for="(tab, idx) in tabs" :key="tab.value" :class="['tab-item', {active: currentTab === idx}]" - @tap="switchTab(idx)" + @tap="onTabChange(idx)" > {{ tab.label }} @@ -57,7 +57,7 @@