Compare commits

...

4 Commits

Author SHA1 Message Date
tianyi 399650e2f0 1 1 week ago
tianyi 1f80962295 1 1 week ago
tianyi d6b5996a9d 1 1 week ago
tianyi ef94568991 1 1 week ago
  1. 14
      components/tab-bar/myCenter.vue
  2. 50
      pages.json
  3. 5
      pages/shop/afterService.vue
  4. 144
      pages/worker/index.vue
  5. 609
      pages/worker/partTimeJobCenter.vue
  6. 1974
      pages/worker/partTimeJobRegister.vue
  7. 655
      pages/worker/ranking.vue
  8. 1477
      pages/worker/wallet.vue
  9. 814
      pages/worker/workerOrderList.vue

14
components/tab-bar/myCenter.vue

@ -71,6 +71,17 @@
<uni-icons type="right" size="22"></uni-icons>
</view>
</view> -->
<view class="list-1" @click="navigatorTo('jianzhi')">
<view class="list-icon">
<uni-icons type="wallet" size="22"></uni-icons>
</view>
<view class="list-name">
兼职
</view>
<view class="list-right">
<uni-icons type="right" size="22"></uni-icons>
</view>
</view>
</view>
<view class="list-box">
<view class="list-2" @click="logOut">
@ -137,7 +148,10 @@
url = '/pages/myCenter/businessInfo'
}else if(e == 'xiugaimima'){
url = '/pages/login/regist?type=3'
}else if(e == 'jianzhi'){
url = '/pages/worker/index'
}
uni.navigateTo({
url: url
})

50
pages.json

@ -327,6 +327,56 @@
"bounce": "none"
}
}
},
{
"path": "pages/worker/ranking",
"style": {
"navigationBarTitleText": "配送员排行",
"navigationStyle": "custom",
"app-plus": {
"bounce": "none"
}
}
},
{
"path": "pages/worker/partTimeJobCenter",
"style": {
"navigationBarTitleText": "配送员主页",
"navigationStyle": "custom",
"app-plus": {
"bounce": "none"
}
}
},
{
"path": "pages/worker/partTimeJobRegister",
"style": {
"navigationBarTitleText": "规则设置",
"navigationStyle": "custom",
"app-plus": {
"bounce": "none"
}
}
},
{
"path": "pages/worker/workerOrderList",
"style": {
"navigationBarTitleText": "订单列表",
"navigationStyle": "custom",
"app-plus": {
"bounce": "none"
}
}
},
{
"path": "pages/worker/wallet",
"style": {
"navigationBarTitleText": "我的钱包",
"navigationStyle": "custom",
"app-plus": {
"bounce": "none"
}
}
}
],
"permission": {

5
pages/shop/afterService.vue

@ -394,7 +394,10 @@
callPlatformService() {
let regionId = this.getCurrentRegionId();
if (!regionId) {
this.tui.toast("请选择校区");
uni.showToast({
title: "请选择校区",
icon: 'none'
})
return;
}
let that = this;

144
pages/worker/index.vue

@ -39,18 +39,13 @@
alt=""
style="width: 80rpx;height: 14rpx;position: absolute;bottom: 4rpx;left: 32rpx;" />
</view>
<!-- <view class="tabs1" @tap="checkTab1('zhuandan')"
:style="{'color':tab1Checked == 'zhuandan'?'#000':'#777','font-size':tab1Checked== 'zhuandan'?'36rpx':'30rpx'}">
转单<text>()</text>
<img v-if="tab1Checked == 'zhuandan'"
src="https://jewel-shop.oss-cn-beijing.aliyuncs.com/4bb5fc7725cb4a7a84d1d3a15f05b39c.png"
alt=""
style="width: 80rpx;height: 14rpx;position: absolute;bottom: 4rpx;left: 32rpx;" />
</view> -->
</view>
<view class="title-refresh" :class="{'title-refresh--loading': refreshLoading}" @tap.stop="refreshCurrentTab">
<uni-icons type="refresh" size="20" color="#0b6b5a" style="margin-top: 6rpx;"></uni-icons>
</view>
<view @tap="goMyCenter" class="title-refresh" style="margin-left: 40px;">
<uni-icons type="person" size="26"></uni-icons>
</view>
</view>
</view>
</view>
@ -940,7 +935,10 @@
let worker = uni.getStorageSync('worker')
if (worker == '' || worker == undefined || worker == null) {
this.tui.toast('您还没有注册兼职')
uni.showToast({
title: '您还没有注册兼职',
icon: 'none'
});
return
}
this.isOnLine = uni.getStorageSync('worker').isOnLine
@ -994,6 +992,11 @@
}
}).exec();
},
goMyCenter(){
uni.navigateTo({
url: '/pages/worker/partTimeJobCenter'
})
},
getHomeAdImageCache() {
const cache = uni.getStorageSync(HOME_AD_IMAGE_CACHE_KEY)
return cache && typeof cache === 'object' ? cache : {}
@ -1079,7 +1082,10 @@
that.$forceUpdate()
}
} else {
that.tui.toast(res.message)
uni.showToast({
title: res.message,
icon: 'none'
});
return
}
uni.hideLoading()
@ -1229,7 +1235,7 @@
const redirectUrl = '/pages/index/index' + (!isNaN(index) && index > 0 ? '?tabIndex=' + index : '')
uni.setStorageSync(redirectKey, redirectUrl)
uni.navigateTo({
url: '/package2/login/login?redirect=' + redirectKey
url: '/pages/login/login?redirect=' + redirectKey
})
return false
},
@ -1257,7 +1263,10 @@
const diff = now - this.lastRefreshTime;
if (diff < refreshInterval) {
const waitSeconds = Math.ceil((refreshInterval - diff) / 1000);
this.tui.toast(waitSeconds + '秒后再刷新');
uni.showToast({
title: waitSeconds + '秒后再刷新',
icon: 'none'
});
return;
}
this.lastRefreshTime = now;
@ -1312,6 +1321,13 @@
this.getDelivery()
this.$forceUpdate()
},
resetDeliveryQuery() {
this.deliveryQueryVersion++
this.searchForm.pageNum = 1
this.totalPages = 1
this.deliveryItem = []
this.resetSwipeOrder()
},
getOrder(item, index) {
if (!this.requireLogin(0)) {
this.resetSwipeOrder()
@ -1338,10 +1354,16 @@
that.$refs.tabBar.indexWorkerCount ++
}else{
if(res.message == '接单成功'){
that.tui.toast(res.message);
uni.showToast({
title: res.message,
icon: 'none'
});
that.$refs.tabBar.indexWorkerCount ++
}else{
that.tui.toast(res.message,2000);
uni.showToast({
title: res.message,
icon: 'none'
});
}
}
that.deliveryItem.splice(index, 1)
@ -1364,7 +1386,10 @@
that.$forceUpdate();
} else {
that.resetSwipeOrder();
that.tui.toast(res.message);
uni.showToast({
title: res.message,
icon: 'none'
});
return;
}
})
@ -1450,7 +1475,7 @@
const redirectKey = 'login_redirect_' + Date.now()
uni.setStorageSync(redirectKey, target)
uni.navigateTo({
url: '/package2/login/login?redirect=' + redirectKey,
url: '/pages/login/login?redirect=' + redirectKey,
complete: () => {
setTimeout(() => {
this.loginRedirecting = false
@ -1464,13 +1489,13 @@
},
goDeliveryRanking() {
uni.navigateTo({
url: '/package2/shop/ranking'
url: '/pages/worker/ranking'
})
},
goPartTimeRegister() {
if (uni.getStorageSync('worker')) {
uni.navigateTo({
url: '/package2/myCenter/partTimeJobRegister'
url: '/pages/worker/partTimeJobRegister'
})
return
}
@ -1482,7 +1507,7 @@
if (worker) {
this.$refs.jianzhiPopup.close()
uni.navigateTo({
url: '/package2/myCenter/partTimeJobRegister'
url: '/pages/worker/partTimeJobRegister'
})
return
}
@ -1498,10 +1523,13 @@
}
this.$refs.jianzhiPopup.close()
uni.navigateTo({
url: '/package2/myCenter/partTimeJobRegister'
url: '/pages/worker/partTimeJobRegister'
})
} else {
this.tui.toast(res.message)
uni.showToast({
title: res.message,
icon: 'none'
});
}
uni.hideLoading()
})
@ -1525,7 +1553,10 @@
that.$refs.carPopup.open()
}
} else {
this.tui.toast(res.message)
uni.showToast({
title: res.message,
icon: 'none'
});
}
uni.hideLoading()
})
@ -1636,7 +1667,10 @@
that.totalPages = res.result.pages; // pages =
that.$forceUpdate();
} else {
this.tui.toast(res.message)
uni.showToast({
title: res.message,
icon: 'none'
});
}
if (that.refreshLoading) {
that.finishRefreshLoading()
@ -1810,7 +1844,15 @@
})
},
checkArea() {
this.isArea = !this.isArea
this.NB.sendRequest("/app/shopArea/getByParentId/0", {}, true, 'POST', 'application/x-www-form-urlencoded').then(res => {
if (res.code == 200) {
this.areaList = res.result
this.areaKeyword = ''
this.$refs.areaPopup.open();
} else {
this.tui.toast(res.message)
}
})
},
openPickupCodePopup(index, item, regionId) {
if (this.pickupCodePopupVisible || this.pickupCodePopupOpening) return
@ -1851,7 +1893,10 @@
}, true, 'POST', 'application/x-www-form-urlencoded').then(res => {
if (res.code == 200) {
that.deliveryItem.splice(index, 1)
that.tui.toast(res.message);
uni.showToast({
title: res.message,
icon: 'none'
});
if (item.workerId != null && item.workerId != undefined && item.workerId != '') {
that.zhipaiCount -= 1
} else {
@ -1865,7 +1910,10 @@
}
that.$forceUpdate();
} else {
that.tui.toast(res.message);
uni.showToast({
title: res.message,
icon: 'none'
});
return;
}
uni.hideLoading()
@ -1921,7 +1969,10 @@
if (res.code == 200) {
this.pageData.splice(context.index, 1)
this.decreaseDeliveryStatusCount(2)
this.tui.toast(res.message, 200)
uni.showToast({
title: res.message,
icon: 'none'
});
this.$refs.pickupCodePopup.close()
this.pickupCode = ''
this.pickupCodeContext = null
@ -1946,7 +1997,10 @@
if (!this.ensureLogin()) return
if (status == 3) {
if (this.completingDeliveryIds[item.id]) {
this.tui.toast('送达处理中,请勿重复提交 ')
uni.showToast({
title: '送达处理中,请勿重复提交',
icon: 'none'
});
return
}
this.$set(this.completingDeliveryIds, item.id, true)
@ -1983,12 +2037,16 @@
} else {
that.pageData[index].arriveTime = "qq"
}
that.tui.toast(res.message, 200);
/* that.searchForm.pageNum = 1
that.getDelivery() */
uni.showToast({
title: res.message,
icon: 'none'
});
that.$forceUpdate();
} else {
that.tui.toast(res.message, 200);
uni.showToast({
title: res.message,
icon: 'none'
});
return;
}
uni.hideLoading();
@ -2008,7 +2066,10 @@
that.putshopArea = res.result
}
} else {
that.tui.toast(res.message)
uni.showToast({
title: res.message,
icon: 'none'
});
return
}
}).catch((res) => {});
@ -2089,7 +2150,10 @@
if (!this.ensureLogin()) return
const worker = uni.getStorageSync('worker')
if (!worker || !worker.workerId) {
this.tui.toast('您还没有注册兼职')
uni.showToast({
title: '您还没有注册兼职',
icon: 'none'
});
return
}
let url = ''
@ -2116,9 +2180,15 @@
worker.isOnLine = value;
this.isOnLine = value
uni.setStorageSync('worker', worker);
this.tui.toast(value == 0 ? '下线后不再接收新订单通知' : res.message)
uni.showToast({
title: value == 0 ? '下线后不再接收新订单通知' : res.message,
icon: 'none'
});
} else {
this.tui.toast(res.message)
uni.showToast({
title: res.message,
icon: 'none'
});
}
uni.hideLoading()
})
@ -2161,7 +2231,7 @@
}
.delivery-title-tabs {
width: 600rpx;
width: 100%;
display: flex;
align-items: center;
}

609
pages/worker/partTimeJobCenter.vue

@ -0,0 +1,609 @@
<template>
<!-- 兼职中心 -->
<view class="page1">
<view class="title">
<view class="title-sreach">
<view class="back-btn" @tap="back">
<uni-icons type="left" size="28"></uni-icons>
</view>
<view class="title-name">
兼职中心
</view>
</view>
</view>
<view class="shop-title">
<view class="title1">
<img src="https://ooo.0o0.ooo/2019/04/28/5cc5a71a6e3b6.png" alt="" />
</view>
<view class="title2">
<view class="title22">
<view style="display: flex;font-size: 32rpx;font-weight: 700;">
{{worker.workerName}}
<!-- <img v-if="isBaozhang"
src="https://jewel-shop.oss-cn-beijing.aliyuncs.com/d27fa14c6bb7426482ed7821919d3aa7.png"
alt="" style="width: 140rpx;height: 32rpx;background-size: 100%;margin: 20rpx;">
<img v-else
src="https://jewel-shop.oss-cn-beijing.aliyuncs.com/176715c0f8ea41e7a9be8fa1c3edd670.png"
alt="" style="width: 140rpx;height: 32rpx;background-size: 100%;margin: 20rpx;"> -->
</view>
</view>
<view class="title33" @tap="goDetail('xx')">
修改信息
<uni-icons type="right" size="12"></uni-icons>
</view>
</view>
</view>
<view class="shop-order">
<view class="order1">
待办事项
</view>
<view class="order2">
<view class="order22">
<!-- <view class="order33" @tap="goDetail('db',4)">
<view class="order44">
{{daiquCount}}
</view>
<view class="order55">
待取货
</view>
</view>
<view class="order33" @tap="goDetail('db',5)">
<view class="order44">
{{daisongCount}}
</view>
<view class="order55">
待送达
</view>
</view> -->
<view class="order33" @tap="goDetail('tui',11)">
<view class="order44">
{{shouhouCount}}
</view>
<view class="order55">
待退款/售后
</view>
</view>
<view class="order33" @tap="goDetail('pj','cha')">
<view class="order44">
{{chapingCount}}
</view>
<view class="order55">
待回复差评
</view>
</view>
</view>
</view>
</view>
<view class="shop-order">
<view class="order1" style="display: flex;">
<view style="flex: 1;">
今日实时数据
</view>
<!-- <view @tap="goDetail('tj')">
更多
<uni-icons type="right" size="12"></uni-icons>
</view> -->
</view>
<view class="data2">
<view class="data22">
<view class="data222" @tap="goTodayOrderList">
{{orderData.orderCount == undefined?0:orderData.orderCount}}
</view>
<view class="data333">
完成订单
</view>
</view>
<view class="data22">
<view class="data222" @tap="goTodayOrderList">
{{orderData.amount == undefined ? 0 : orderData.amount}}
</view>
<view class="data333">
配送佣金
</view>
</view>
<view class="data22">
<view class="data222">
{{orderData.afterSaleCount == undefined ? 0 : orderData.afterSaleCount}}
</view>
<view class="data333">
退/售后笔数
</view>
</view>
<view class="data22">
<view class="data222">
{{orderData.afterSaleAmount == undefined ? 0 : orderData.afterSaleAmount}}
</view>
<view class="data333">
退/售后金额
</view>
</view>
</view>
</view>
<view class="shop-order">
<view class="order1">
必备工具
</view>
<view class="menu2">
<view class="menu22" @tap="goDetail('xx')">
<view class="menu33">
<image src="../../static/image/dingdan/dd0.png" alt="" />
</view>
<view class="menu44">
规则设置
</view>
</view>
<view class="menu22" @tap="goDetail('dd')">
<view class="menu33">
<image src="../../static/image/dingdan/dd1.png" alt="" />
</view>
<view class="menu44">
订单管理
</view>
</view>
<view class="menu22" @tap="goDetail('qb')">
<view class="menu33">
<image src="../../static/image/dingdan/dd2.png" alt="" />
</view>
<view class="menu44">
我的钱包
</view>
</view>
<view class="menu22" @tap="goDetail('pj','')">
<view class="menu33">
<image src="../../static/image/dingdan/dd3.png" alt="" />
</view>
<view class="menu44">
顾客评价
</view>
</view>
<view class="menu22" @tap="goDetail('ph','')">
<view class="menu33">
<image src="../../static/image/dingdan/dd4.png" alt="" />
</view>
<view class="menu44">
排行
</view>
</view>
<view class="menu22" @tap="goDetail('tuiRecord')">
<view class="menu33">
<image src="../../static/image/dingdan/dd1.png" alt="" />
</view>
<view class="menu44">
退款/售后记录
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
worker: {},
orderData: {},
chapingCount: 0,
shouhouCount: 0,
daiquCount: 0,
daisongCount: 0,
isBaozhang: false
}
},
onShow() {
this.refreshPage()
},
onLoad(option) {
},
methods: {
refreshPage() {
this.worker = uni.getStorageSync('worker') || {}
this.getData()
},
getData() {
const worker = uni.getStorageSync('worker') || {}
this.daiquCount = 0
this.daisongCount = 0
this.shouhouCount = 0
this.chapingCount = 0
this.orderData = {}
this.NB.sendRequest("/mall/delivery/countOrderByStatusIndex", {
workerId:worker.workerId,
regionId:JSON.parse(uni.getStorageSync('area')).id
}, true, 'POST', 'application/x-www-form-urlencoded').then(res => {
if (res.code == 200) {
if(res.result != null){
for(let i = 0;i<res.result.length;i++){
if(res.result[i].status == 1){
this.daiquCount = Number(res.result[i].orderCount)
}else if(res.result[i].status == 2){
this.daisongCount = Number(res.result[i].orderCount)
}else if(res.result[i].status == 3){
this.shouhouCount = Number(res.result[i].orderCount)
}else if(res.result[i].status == 4){
this.chapingCount = Number(res.result[i].orderCount);
}else{
this.orderData = res.result[i].workerIndex
}
}
}
this.$forceUpdate();
} else {
uni.showToast({
title: res.message,
icon: 'none'
});
return
}
uni.hideLoading()
})
},
goTodayOrderList() {
uni.navigateTo({
url: '/pages/worker/workerOrderList?today=1'
})
},
goDetail(type, index) {
let url = ''
switch (type) {
case 'tj':
url = '/pages/worker/dataStatistics'
break;
case 'db':
url = '/pages/shop/shopOrderList?index=' + index
break;
case 'xx':
url = '/pages/worker/partTimeJobRegister'
break;
case 'qb':
url = '/pages/worker/wallet?walletType=worker'
break;
case 'dd':
url = '/pages/worker/workerOrderList'
break;
case 'ph':
url = '/pages/worker/ranking'
break;
case 'tui':
url = '/pages/shop/afterService?type=worker'
break;
case 'tuiRecord':
url = '/pages/shop/afterService?type=worker&mode=record'
break;
case 'pj':
let item = {
shopScore: uni.getStorageSync('worker').score,
id: uni.getStorageSync('worker').workerId
}
url = '/pages/shop/shopEvaluate?item=' + JSON.stringify(item) + '&isMerchant=2&isCha=' + (
index == 'cha' ? 1 : 0)
break;
default:
}
uni.navigateTo({
url: url
})
},
back() {
uni.navigateBack()
},
}
}
</script>
<style lang="scss">
page {
width: 100%;
min-height: 100%;
font-size: 24rpx;
background: #F6FBF8;
color: #00231C;
}
.page1 {
width: 100%;
min-height: 100vh;
padding-bottom: 60rpx;
box-sizing: border-box;
position: relative;
overflow: hidden;
background:
radial-gradient(circle at 16% 210rpx, rgba(227, 255, 150, 0.62), rgba(227, 255, 150, 0) 260rpx),
radial-gradient(circle at 88% 150rpx, rgba(166, 255, 234, 0.68), rgba(166, 255, 234, 0) 280rpx),
linear-gradient(180deg, #f1ffe7 0%, #f4fff9 360rpx, #f6fbf8 100%);
}
.title {
width: 100%;
height: 252rpx;
background: linear-gradient(135deg, rgba(227, 255, 150, 0.92), rgba(166, 255, 234, 0.86));
position: relative;
}
.title::after {
content: '';
position: absolute;
left: -90rpx;
right: -90rpx;
bottom: -70rpx;
height: 150rpx;
border-radius: 0 0 50% 50%;
background: rgba(255, 255, 255, 0.28);
}
.title-sreach {
width: 100%;
display: flex;
height: 188rpx;
position: relative;
z-index: 1;
}
.back-btn {
padding-top: 110rpx;
width: 68rpx;
height: 68rpx;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
background: rgba(255, 255, 255, 0.34);
}
.title-name {
padding-top: 110rpx;
font-size: 38rpx;
font-weight: 900;
flex: 1;
text-align: center;
color: #153b35;
letter-spacing: 2rpx;
}
.shop-title {
width: 92%;
margin: -70rpx auto 0;
padding: 26rpx;
background:
radial-gradient(circle at 92% 14%, rgba(166, 255, 234, 0.5), rgba(166, 255, 234, 0) 150rpx),
linear-gradient(135deg, rgba(255, 255, 255, 0.96), rgba(250, 255, 248, 0.94));
border: 1px solid rgba(255, 255, 255, 0.78);
border-radius: 34rpx;
display: flex;
align-items: center;
font-size: 28rpx;
font-weight: 800;
box-shadow: 0 18rpx 42rpx rgba(0, 55, 44, 0.1);
position: relative;
z-index: 2;
box-sizing: border-box;
}
.title1 {
width: 92rpx;
height: 92rpx;
padding: 8rpx;
border-radius: 28rpx;
background: linear-gradient(135deg, #e3ff96, #a6ffea);
box-sizing: border-box;
box-shadow: 0 10rpx 24rpx rgba(32, 190, 154, 0.16);
img {
width: 100%;
height: 100%;
border-radius: 22rpx;
display: block;
}
}
.title2 {
flex: 1;
min-width: 0;
display: flex;
align-items: center;
margin-left: 18rpx;
}
.title22 {
flex: 1;
min-width: 0;
color: #153b35;
}
.title22 > view {
align-items: center;
}
.title33 {
flex-shrink: 0;
height: 58rpx;
line-height: 58rpx;
padding: 0 18rpx;
border-radius: 999rpx;
background: rgba(255, 255, 255, 0.72);
color: #08735d;
font-size: 24rpx;
font-weight: 800;
box-shadow: inset 0 0 0 1px rgba(88, 220, 190, 0.32);
}
.shop-order {
width: 92%;
margin: 22rpx auto 0;
background: rgba(255, 255, 255, 0.94);
border-radius: 30rpx;
padding: 0 24rpx 24rpx;
box-shadow: 0 14rpx 34rpx rgba(0, 35, 28, 0.07);
box-sizing: border-box;
}
.shop-title + .shop-order {
background:
radial-gradient(circle at 94% 12%, rgba(255, 220, 140, 0.32), rgba(255, 220, 140, 0) 150rpx),
linear-gradient(160deg, #ffffff 0%, #fffdf7 54%, #f2fff7 100%);
border: 1px solid rgba(255, 219, 145, 0.34);
}
.shop-title + .shop-order + .shop-order {
background:
radial-gradient(circle at 8% 16%, rgba(166, 255, 234, 0.38), rgba(166, 255, 234, 0) 170rpx),
linear-gradient(145deg, #ffffff 0%, #f4fffb 52%, #eef8ff 100%);
border: 1px solid rgba(132, 232, 205, 0.28);
}
.order1 {
height: 78rpx;
line-height: 78rpx;
font-size: 30rpx;
font-weight: 900;
color: #153b35;
border-bottom: 1px solid rgba(0, 35, 28, 0.06);
display: flex;
align-items: center;
}
.order1::before {
content: '';
width: 10rpx;
height: 30rpx;
margin-right: 12rpx;
border-radius: 999rpx;
background: linear-gradient(180deg, #e3ff96, #35d6a6);
}
.order22 {
display: flex;
min-height: 118rpx;
padding-top: 22rpx;
gap: 14rpx;
}
.order33 {
flex: 1;
text-align: center;
padding: 14rpx 6rpx;
border-radius: 24rpx;
box-sizing: border-box;
background: rgba(255, 255, 255, 0.6);
box-shadow: inset 0 0 0 1px rgba(0, 35, 28, 0.04);
}
.order33:active,
.menu22:active {
transform: scale(0.96);
}
.order44 {
display: inline-flex;
min-width: 56rpx;
height: 48rpx;
align-items: center;
justify-content: center;
padding: 0 10rpx;
border-radius: 999rpx;
background: linear-gradient(135deg, rgba(227, 255, 150, 0.82), rgba(166, 255, 234, 0.82));
font-size: 34rpx;
line-height: 48rpx;
font-weight: 900;
color: #08735d;
box-shadow: 0 8rpx 18rpx rgba(56, 196, 160, 0.12);
}
.shop-title + .shop-order .order44 {
background: linear-gradient(135deg, #fff1bf, #ffd6a2);
color: #9a5412;
box-shadow: 0 8rpx 18rpx rgba(255, 163, 79, 0.14);
}
.shop-title + .shop-order + .shop-order .order1::before {
background: linear-gradient(180deg, #a6ffea, #60b8ff);
}
.order55,
.data333,
.menu44 {
color: #415c56;
font-size: 23rpx;
}
.data2 {
display: flex;
min-height: 150rpx;
text-align: center;
padding-top: 26rpx;
gap: 16rpx;
}
.data22 {
flex: 1;
position: relative;
padding: 18rpx 8rpx;
border-radius: 26rpx;
background: rgba(255, 255, 255, 0.66);
box-shadow: inset 0 0 0 1px rgba(68, 202, 185, 0.08);
}
.data22 + .data22::before {
display: none;
}
.data222 {
font-size: 42rpx;
line-height: 54rpx;
font-weight: 900;
color: #0b6b5a;
padding-bottom: 12rpx;
}
.menu2 {
display: flex;
flex-wrap: wrap;
text-align: center;
padding-top: 24rpx;
}
.menu22 {
width: 25%;
height: 142rpx;
}
.menu33 {
width: 72rpx;
height: 72rpx;
margin: 0 auto 10rpx;
border-radius: 24rpx;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(135deg, #fff3d7, #ffd7b0);
box-shadow: 0 10rpx 22rpx rgba(255, 151, 97, 0.14);
image {
width: 46rpx;
height: 46rpx;
background-size: 100%;
display: block;
}
}
.menu22:nth-child(2n) .menu33 {
background: linear-gradient(135deg, #e4f4ff, #b9ddff);
}
.menu22:nth-child(3n) .menu33 {
background: linear-gradient(135deg, #e3ff96, #a6ffea);
}
.menu22:nth-child(4n) .menu33 {
background: linear-gradient(135deg, #fff2b8, #ffd98b);
}
.menu44 {
height: 40rpx;
line-height: 40rpx;
font-weight: 700;
}
</style>

1974
pages/worker/partTimeJobRegister.vue

File diff suppressed because it is too large

655
pages/worker/ranking.vue

@ -0,0 +1,655 @@
<template>
<view class="ranking-page">
<view class="title">
<view class="title-sreach">
<view class="back-btn" @tap="back">
<uni-icons type="left" size="26" color="#20243a"></uni-icons>
</view>
<view class="title-name">
配送今日排行榜
</view>
</view>
</view>
<view class="notice-wrap" v-if="reward != ''">
<view class="reward-card">
<view class="reward-title">
<view class="reward-icon">
<text></text>
</view>
<text>奖励规则</text>
</view>
<view class="reward-marquee">
<view class="reward-marquee-inner">{{reward}}</view>
</view>
</view>
</view>
<view class="hero">
<view class="hero-glow hero-glow-one"></view>
<view class="hero-glow hero-glow-two"></view>
<view class="hero-copy">
<!-- <view class="hero-tag">实时战况</view> -->
<view class="hero-title">今日配送之星</view>
<view class="hero-subtitle">按今日完成订单数排名 10 点截止</view>
</view>
<view class="podium">
<view class="podium-card podium-second" :class="{'podium-empty': !rankItem(1).workerName}">
<view class="podium-crown silver">2</view>
<image class="podium-avatar" :src="rankItem(1).icon || '/static/images/img/songshu.png'" mode="aspectFill"></image>
<view class="podium-name">{{displayName(rankItem(1))}}</view>
<view class="podium-count">{{displayCount(rankItem(1))}}</view>
<view class="podium-base">NO.2</view>
</view>
<view class="podium-card podium-first" :class="{'podium-empty': !rankItem(0).workerName}">
<view class="podium-crown gold">1</view>
<image class="podium-avatar champion" :src="rankItem(0).icon || '/static/images/img/songshu.png'" mode="aspectFill"></image>
<view class="podium-name">{{displayName(rankItem(0))}}</view>
<view class="podium-count">{{displayCount(rankItem(0))}}</view>
<view class="podium-base">NO.1</view>
</view>
<view class="podium-card podium-third" :class="{'podium-empty': !rankItem(2).workerName}">
<view class="podium-crown bronze">3</view>
<image class="podium-avatar" :src="rankItem(2).icon || '/static/images/img/songshu.png'" mode="aspectFill"></image>
<view class="podium-name">{{displayName(rankItem(2))}}</view>
<view class="podium-count">{{displayCount(rankItem(2))}}</view>
<view class="podium-base">NO.3</view>
</view>
</view>
</view>
<view class="content-list">
<view class="list-head">
<view>
<view class="list-title">今日榜单</view>
<view class="list-subtitle">多劳多得冲刺奖励</view>
</view>
<view class="list-total">{{fireList.length}} 人上榜</view>
</view>
<view v-if="fireList.length == 0" class="empty-box">
<image src="/static/images/img/songshu.png" mode="aspectFit"></image>
<view>暂无配送员上榜</view>
</view>
<view v-for="(item,index) in fireList" :key="index" class="content-item">
<view class="rank-badge" :class="rankClass(index)">
<uni-icons v-if="index < 3" type="medal-filled" size="22" :color="medalColor(index)"></uni-icons>
<text v-else>{{index + 1}}</text>
</view>
<image class="box-avatar" :src="item.icon || '/static/images/img/songshu.png'" mode="aspectFill"></image>
<view class="box-right">
<view class="box-right-num">{{item.workerName == null?'暂无':item.workerName}}</view>
<view class="box-right-name">当前排名第 {{index + 1}}</view>
</view>
<view class="order-pill">
<text>{{item.orderCount || 0}}</text>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
range:[],
fireList:[],
indexList: [],
reward:'',
rewardList:[],
bigImg:[],
swiperDotIndex:0,
};
},
onShow(){
this.getMonth()
this.getFireList()
},
onReachBottom() {
this.getFireList();
},
methods: {
rankItem(index) {
return this.fireList[index] || {}
},
displayName(item) {
return item.workerName || '虚位以待'
},
displayCount(item) {
return item.orderCount || 0
},
rankClass(index) {
if (index == 0) return 'rank-first'
if (index == 1) return 'rank-second'
if (index == 2) return 'rank-third'
return ''
},
medalColor(index) {
if (index == 0) return '#f8c33c'
if (index == 1) return '#b9c2d1'
return '#d99a55'
},
lunbochange(e) {
this.current = e.detail.current
},
getFireList(){
this.NB.sendRequest("/mall/delivery/countOrdersLimit", {
regionId: JSON.parse(uni.getStorageSync('area')).id
}, true, 'GET', 'application/x-www-form-urlencoded').then(res => {
if (res.code == 200) {
if(res.result.data != null){
this.fireList = res.result.data
}
if(res.result.reward != undefined && res.result.reward != null){
this.rewardList = res.result.reward
this.reward = '排位规则:'
for(let i = 0; i < res.result.reward.length; i++){
this.reward += '第' + res.result.reward[i].orderNum + '名 - 奖励' + res.result.reward[i].reward + '元;'
}
this.reward += '晚上10点截止'
}
} else {
uni.showToast({
title: res.message,
icon: 'none'
});
}
uni.hideLoading()
})
},
searchList(res) {
this.pageNum = 1;
this.fireList = [];
this.getFireList()
},
//1
getMonth() {
let date = new Date()
let year = date.getFullYear().toString() //''
let month = date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1).toString():(date.getMonth()+1).toString() //''
let da = date.getDate() < 10 ? '0'+date.getDate().toString():date.getDate().toString() //''
let end = year + '-' + month + '-' + da //
let beg = year + '-' + month + '-01' //
this.range = [beg,end]
},
largeImg(img) {
if((img.productPicture == null &&img.productPictures == null) || (img.productPicture == '' &&img.productPictures == '') || (img.productPicture == null &&img.productPictures == '') || (img.productPicture == '' &&img.productPictures == null)){
uni.showToast({
title: "暂无可展示的图片",
icon: 'none'
});
return
}
this.bigImg = []
if(img.productPicture != null){
let data = {
productPicture:img.productPicture
}
this.bigImg.push(data)
}
if(img.productPictures != null){
for(let i=0;i<img.productPictures.length;i++){
this.bigImg.push(img.productPictures[i])
}
}
this.$refs.imgPopup.open()
},
back() {
uni.navigateBack()
},
}
}
</script>
<style lang="scss">
.ranking-page {
min-height: 100vh;
background: linear-gradient(180deg, #f0ffe1 0%, #eafff9 34%, #f6f8ff 100%);
padding-bottom: 60rpx;
}
.title {
width: 100%;
background: linear-gradient(135deg, #e3ff96 0%, #c9ffcf 42%, #a6ffea 100%);
}
.title-sreach {
width: 100%;
display: flex;
height: 176rpx;
position: relative;
}
.back-btn {
padding-top: 100rpx;
width: 72rpx;
height: 72rpx;
display: flex;
align-items: center;
justify-content: center;
}
.title-name {
padding-top: 100rpx;
font-size: 36rpx;
font-weight: 800;
color: #20243a;
flex: 1;
text-align: center;
letter-spacing: 2rpx;
}
.notice-wrap {
position: relative;
z-index: 3;
margin: 0 24rpx 20rpx;
}
.reward-card {
display: flex;
align-items: center;
height: 82rpx;
padding: 0 14rpx 0 16rpx;
border: 1px solid rgba(119, 238, 204, 0.58);
border-radius: 28rpx;
background:
linear-gradient(135deg, rgba(255, 255, 255, 0.92) 0%, rgba(245, 255, 247, 0.88) 100%),
linear-gradient(90deg, #e3ff96, #a6ffea);
box-shadow: 0 16rpx 34rpx rgba(55, 190, 166, 0.14);
box-sizing: border-box;
}
.reward-title {
flex-shrink: 0;
display: flex;
align-items: center;
padding-right: 16rpx;
color: #113c36;
font-size: 24rpx;
font-weight: 800;
}
.reward-icon {
width: 42rpx;
height: 42rpx;
margin-right: 8rpx;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(135deg, #e3ff96, #a6ffea);
box-shadow: 0 8rpx 16rpx rgba(74, 206, 163, 0.2);
color: #0f5a50;
font-size: 22rpx;
font-weight: 900;
}
.reward-marquee {
flex: 1;
min-width: 0;
height: 54rpx;
overflow: hidden;
border-radius: 999rpx;
background: rgba(255, 255, 255, 0.58);
}
.reward-marquee-inner {
display: inline-block;
min-width: 100%;
padding-left: 100%;
padding-right: 18rpx;
box-sizing: border-box;
height: 54rpx;
line-height: 54rpx;
white-space: nowrap;
color: #0f5a50;
font-size: 24rpx;
font-weight: 800;
animation: reward-marquee 16s linear infinite;
}
@keyframes reward-marquee {
0% {
transform: translateX(0);
}
100% {
transform: translateX(-100%);
}
}
.hero {
position: relative;
overflow: hidden;
margin: 0 24rpx;
min-height: 610rpx;
border-radius: 0 0 42rpx 42rpx;
background:
radial-gradient(circle at 82% 18%, rgba(255, 255, 255, 0.38) 0, rgba(255, 255, 255, 0.2) 62rpx, transparent 64rpx),
linear-gradient(145deg, #86f2d8 0%, #8edfff 46%, #9aa7ff 100%);
box-shadow: 0 22rpx 44rpx rgba(68, 202, 185, 0.24);
}
.hero::before {
content: '';
position: absolute;
left: -120rpx;
top: -180rpx;
width: 620rpx;
height: 620rpx;
border-radius: 50%;
background: rgba(227, 255, 150, 0.2);
}
.hero::after {
content: '';
position: absolute;
right: -160rpx;
bottom: -200rpx;
width: 520rpx;
height: 520rpx;
border-radius: 50%;
background: rgba(255, 255, 255, 0.16);
}
.hero-glow {
position: absolute;
border-radius: 50%;
filter: blur(2rpx);
}
.hero-glow-one {
right: 74rpx;
top: 72rpx;
width: 92rpx;
height: 92rpx;
background: rgba(227, 255, 150, 0.58);
}
.hero-glow-two {
left: 66rpx;
top: 238rpx;
width: 42rpx;
height: 42rpx;
background: rgba(255, 255, 255, 0.32);
}
.hero-copy {
position: relative;
z-index: 2;
padding: 42rpx 40rpx 18rpx;
color: #fff;
}
.hero-tag {
display: inline-flex;
padding: 10rpx 22rpx;
border-radius: 999rpx;
background: rgba(255, 255, 255, 0.24);
font-size: 24rpx;
color: #fff;
}
.hero-title {
font-size: 48rpx;
font-weight: 900;
letter-spacing: 2rpx;
}
.hero-subtitle {
margin-top: 10rpx;
font-size: 25rpx;
color: rgba(255, 255, 255, 0.82);
}
.podium {
position: relative;
z-index: 2;
display: flex;
align-items: flex-end;
justify-content: space-between;
padding: 22rpx 28rpx 34rpx;
}
.podium-card {
width: 204rpx;
min-height: 312rpx;
padding: 24rpx 16rpx 0;
box-sizing: border-box;
border-radius: 34rpx 34rpx 20rpx 20rpx;
background: rgba(255, 255, 255, 0.95);
text-align: center;
box-shadow: 0 18rpx 32rpx rgba(34, 54, 136, 0.18);
}
.podium-first {
width: 232rpx;
min-height: 368rpx;
margin-bottom: 18rpx;
background: linear-gradient(180deg, #fff9dc 0%, #fff 58%);
}
.podium-second {
margin-bottom: 0;
}
.podium-third {
margin-bottom: -10rpx;
}
.podium-empty {
opacity: 0.72;
}
.podium-crown {
width: 54rpx;
height: 54rpx;
margin: 0 auto 14rpx;
border-radius: 50%;
line-height: 54rpx;
font-size: 28rpx;
font-weight: 900;
color: #fff;
}
.gold {
background: linear-gradient(135deg, #ffc72e, #ff9f1c);
box-shadow: 0 8rpx 18rpx rgba(255, 176, 31, 0.36);
}
.silver {
background: linear-gradient(135deg, #dbe4f1, #aeb9c9);
}
.bronze {
background: linear-gradient(135deg, #e6ad70, #c98145);
}
.podium-avatar {
width: 108rpx;
height: 108rpx;
border-radius: 50%;
border: 6rpx solid #fff;
box-shadow: 0 10rpx 22rpx rgba(40, 67, 146, 0.16);
}
.podium-avatar.champion {
width: 128rpx;
height: 128rpx;
}
.podium-name {
margin-top: 16rpx;
font-size: 28rpx;
font-weight: 800;
color: #20243a;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.podium-count {
margin-top: 8rpx;
font-size: 24rpx;
color: #6b7280;
}
.podium-base {
margin: 22rpx -16rpx 0;
height: 72rpx;
line-height: 72rpx;
border-radius: 0 0 20rpx 20rpx;
background: linear-gradient(135deg, #3655d9, #6c7dff);
font-size: 30rpx;
font-weight: 900;
color: rgba(255, 255, 255, 0.9);
}
.podium-first .podium-base {
background: linear-gradient(135deg, #37cfa8, #58b8ff);
}
.podium-second .podium-base {
background: linear-gradient(135deg, #75d6cf, #80a7ff);
}
.podium-third .podium-base {
background: linear-gradient(135deg, #7fdcb9, #8f9fff);
}
.content-list {
width: 92%;
margin: -20rpx auto 0;
position: relative;
z-index: 4;
border-radius: 34rpx;
background: #fff;
box-shadow: 0 18rpx 40rpx rgba(38, 48, 80, 0.09);
overflow: hidden;
}
.list-head {
display: flex;
align-items: center;
justify-content: space-between;
padding: 32rpx 30rpx 22rpx;
}
.list-title {
font-size: 34rpx;
font-weight: 900;
color: #20243a;
}
.list-subtitle {
margin-top: 8rpx;
font-size: 24rpx;
color: #99a1b3;
}
.list-total {
padding: 10rpx 20rpx;
border-radius: 999rpx;
background: #f1f5ff;
font-size: 24rpx;
color: #5772e8;
font-weight: 700;
}
.empty-box {
padding: 48rpx 0 58rpx;
text-align: center;
color: #98a1b2;
font-size: 26rpx;
}
.empty-box image {
width: 136rpx;
height: 136rpx;
margin-bottom: 12rpx;
}
.content-item {
min-height: 148rpx;
margin: 0 24rpx;
padding: 20rpx 0;
box-sizing: border-box;
font-size: 30rpx;
border-top: 1px solid #f1f2f6;
display: flex;
align-items: center;
}
.rank-badge {
width: 58rpx;
height: 58rpx;
margin-right: 18rpx;
border-radius: 18rpx;
display: flex;
align-items: center;
justify-content: center;
background: #f5f6fa;
color: #8b93a7;
font-size: 26rpx;
font-weight: 800;
}
.rank-first {
background: #fff6d9;
}
.rank-second {
background: #f0f4fa;
}
.rank-third {
background: #fff0df;
}
.box-avatar {
width: 94rpx;
height: 94rpx;
margin-right: 22rpx;
border-radius: 50%;
background: #f4f6fb;
}
.box-right {
flex: 1;
min-width: 0;
}
.box-right-num {
color: #20243a;
font-weight: 800;
font-size: 30rpx;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.box-right-name {
margin-top: 10rpx;
font-size: 24rpx;
color: #9aa2b4;
}
.order-pill {
min-width: 112rpx;
padding: 12rpx 18rpx;
border-radius: 999rpx;
background: linear-gradient(135deg, #fff7e2, #fff0d2);
color: #9b6517;
font-size: 24rpx;
text-align: center;
}
.order-pill text {
font-size: 34rpx;
font-weight: 900;
color: #ff9818;
}
</style>

1477
pages/worker/wallet.vue

File diff suppressed because it is too large

814
pages/worker/workerOrderList.vue

@ -0,0 +1,814 @@
<template>
<!-- 配送员已完成订单列表 -->
<view class="page1">
<view class="worker-order-fixed">
<view class="title">
<view class="title-sreach">
<view class="back-btn" @tap="back">
<uni-icons type="left" size="28"></uni-icons>
</view>
<view class="title-name">
已完成订单
</view>
</view>
</view>
<view class="summary-card">
<view class="summary-label">共计送达</view>
<view class="summary-count">{{totalCount}}<text></text></view>
</view>
<view class="search-card">
<view class="date-picker-wrap">
<uni-datetime-picker :clear-icon="false" v-model="range" type="daterange" @change="searchList" />
</view>
<view class="reset-btn" @tap="resetDateRange">重置</view>
</view>
</view>
<view class="worker-order-fixed-holder"></view>
<view class="list-wrap">
<view class="box1" @tap="goDetail(item)" v-for="(item,index) in orderList" :key="index">
<view class="order-head">
<view class="type-tag" :class="'type-' + item.deliveryType">
{{deliveryTypeText(item.deliveryType)}}
</view>
<view class="order-code" v-if="item.numberCode">
#{{orderCodeText(item.numberCode)}}
</view>
<view class="done-tag">已送达</view>
</view>
<view class="time-row">
<text v-if="item.mustFinishTime">{{item.mustFinishTime | formatHourMinute}}前送达</text>
<text v-else>{{item.createTime | formatISOTime}}</text>
</view>
<view class="time-detail">
<view class="time-item" v-if="item.acceptTime">
<text>接单</text>{{item.acceptTime | formatISOTime}}
</view>
<view class="time-item" v-if="item.arriveTime">
<text>到店</text>{{item.arriveTime | formatISOTime}}
</view>
<view class="time-item" v-if="item.getTime">
<text>取货</text>{{item.getTime | formatISOTime}}
</view>
<view class="time-item" v-if="item.finishTime">
<text>送达</text>{{item.finishTime | formatISOTime}}
</view>
</view>
<view class="remark" v-if="item.remark != '' && item.remark != null">
备注{{item.remark}}
</view>
<view class="extra-info" v-if="item.deliveryType == 2 || item.deliveryType == 3">
<text>{{item.allCount != null ? item.allCount : 0}}</text>
<text v-if="item.getCodes != null">取件码{{item.getCodes}}</text>
<text v-if="item.phoneNumber != null">尾号{{item.phoneNumber}}</text>
</view>
<view class="route-box">
<view class="route-line">
<view class="route-dot get"></view>
<view class="route-main">
<view class="route-name">{{item.shopName || '取货点'}}</view>
<view class="route-address">{{item.shopAddress || '暂无取货地址'}}</view>
</view>
</view>
<view class="route-line">
<view class="route-dot send"></view>
<view class="route-main">
<view class="route-name">{{item.receiverName || '收货人'}}</view>
<view class="route-address">{{item.receiverAddress || '暂无收货地址'}}</view>
</view>
</view>
</view>
<view class="goods-row" v-if="item.goodsList && item.goodsList.length > 0" @tap.stop="productDetail(item)">
<view class="goods-title">
商品详情
</view>
<view class="goods-desc">
{{item.goodsNum}}点击查看规格和数量
</view>
<uni-icons type="right" size="14" color="#7a8582"></uni-icons>
</view>
<view class="fee-row">
<view class="big-tag" v-if="item.isBig != null && item.isBig == 1">超大/超重</view>
<view class="fee-text">
配送佣金 <text>{{(item.deliveryFee + item.deliveryFeeMarketplace).toFixed(2)}}</text>
</view>
<view class="market-fee" v-if="item.deliveryFeeMarketplace != null">
含平台{{item.deliveryFeeMarketplace}}
</view>
</view>
</view>
<view class="empty-box" v-if="orderList.length == 0 && loadStatus == 'nomore'">
暂无已完成订单
</view>
</view>
<uni-popup ref="productPopup" background-color="transparent">
<view class="product-popup-content">
<view class="product-popup-header">
<view class="product-popup-title">商品详情</view>
<view class="product-popup-subtitle">请核对商品规格和数量</view>
</view>
<view class="product-popup-list" v-if="productData != null && productData.length > 0">
<view class="product-popup-card" v-for="(item1,index1) in productData" :key="index1">
<view class="product-popup-img">
<img :src="item1.productPicture" alt="">
</view>
<view class="product-popup-info">
<view class="product-popup-name">
{{item1.productName}}
</view>
<view class="product-popup-spec">
<text class="product-popup-label">规格</text>
<text class="product-popup-spec-text">{{item1.specs | delNode}}</text>
</view>
</view>
<view class="product-popup-quantity">
<view class="product-popup-quantity-num">x{{item1.quantity}}</view>
<view class="product-popup-quantity-label">数量</view>
</view>
</view>
</view>
<view class="product-popup-empty" v-else>
暂无商品详情
</view>
</view>
</uni-popup>
<view class="bottom-space"></view>
</view>
</template>
<script>
export default {
data() {
return {
loadStatus: 'more',
searchForm: {
status: 3,
pageNum: 1,
pageSize: 10,
order: '',
regionId: JSON.parse(uni.getStorageSync('area')).id,
deliveryType: null,
workerId: uni.getStorageSync('worker').workerId,
startDate: '',
endDate: ''
},
range: [],
productData: [],
totalPages: 1,
totalCount: 0,
tuanzhangOrder:[],
orderList: [],
currentIndex: 10
}
},
onReachBottom() {
if (this.searchForm.pageNum >= this.totalPages) return;
this.searchForm.pageNum++;
this.getList();
},
filters: {
formatHourMinute(value) {
if (!value) return '';
const date = new Date(value);
const day = String(date.getDate()).padStart(2, '0');
const hour = String(date.getHours()).padStart(2, '0');
const minute = String(date.getMinutes()).padStart(2, '0');
return `${day}${hour}:${minute}`;
},
formatISOTime(isoString) {
const date = new Date(isoString);
const year = date.getFullYear();
const month = (date.getMonth() + 1).toString().padStart(2, '0');
const day = date.getDate().toString().padStart(2, '0');
const hours = date.getHours().toString().padStart(2, '0');
const minutes = date.getMinutes().toString().padStart(2, '0');
const seconds = date.getSeconds().toString().padStart(2, '0');
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
},
delNode(data) {
let str;
if (typeof data === 'object' && data !== null) {
str = JSON.stringify(data);
} else if (typeof data === 'string') {
str = data;
} else {
str = String(data);
}
return str.replace(/[{}"]/g, '');
}
},
onShow() {
this.searchForm.regionId = JSON.parse(uni.getStorageSync('area')).id
},
onLoad(option) {
if (option.index) {
this.searchForm.searchStatus = option.index
this.currentIndex = option.index
}
if (option.today == 1) {
const today = this.formatDate(new Date())
this.range = [today, today]
this.searchForm.startDate = today
this.searchForm.endDate = today
}
this.getList()
},
methods: {
getList() {
this.loadStatus = 'loading'
let that = this
const requestForm = Object.assign({}, this.searchForm)
delete requestForm.shopId
this.NB.sendRequest("/mall/delivery/pagebyworkerHistory", requestForm, true, 'POST', 'application/json').then(res => {
that.loadStatus = 'nomore';
if (res.code == 200) {
if (that.searchForm.pageNum == 1) {
that.orderList = res.result.records;
} else {
that.orderList = [...that.orderList, ...res.result.records]
}
for(let i=0;i<that.orderList.length;i++){
that.orderList[i].goodsNum = 0
if (that.orderList[i].goodsList && that.orderList[i].goodsList.length) {
for(let m=0;m<that.orderList[i].goodsList.length;m++){
that.orderList[i].goodsNum += that.orderList[i].goodsList[m].quantity
}
}
}
that.totalPages = res.result.pages;
that.totalCount = res.result.total || that.orderList.length;
that.$forceUpdate();
} else {
uni.showToast({
title: res.message,
icon: 'none'
});
return;
}
uni.hideLoading();
})
},
deliveryTypeText(type) {
if (type == 1) return '外卖';
if (type == 2) return '代取快递';
if (type == 3) return '代跑腿';
return '配送';
},
orderCodeText(numberCode) {
if (!numberCode) return '';
if (numberCode.length > 14) return '多订单';
return numberCode.endsWith("+") ? numberCode.slice(0, -1) : numberCode;
},
formatDate(date) {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
},
productDetail(item) {
this.productData = item.goodsList || [];
this.$refs.productPopup.open()
},
searchList(range) {
const dateRange = range || this.range || [];
this.searchForm.startDate = dateRange[0] || '';
this.searchForm.endDate = dateRange[1] || '';
this.searchForm.pageNum = 1;
this.getList();
},
resetDateRange() {
this.range = [];
this.searchForm.startDate = '';
this.searchForm.endDate = '';
this.searchForm.pageNum = 1;
this.getList();
},
goDetail(item) {
uni.navigateTo({
url: '/package2/shop/orderDetail?type=work&id=' + item.orderId
})
},
back() {
uni.navigateBack()
},
}
}
</script>
<style>
page {
width: 100%;
height: 100%;
font-size: 24rpx;
background: #F5F8F5;
color: #00231C;
}
.page1 {
width: 100%;
height: 100%;
font-size: 24rpx;
position: relative;
padding-bottom: 40rpx;
}
.worker-order-fixed {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 1000;
padding-bottom: 12rpx;
background: #F5F8F5;
}
.worker-order-fixed-holder {
height: 462rpx;
}
.title {
background: url('https://jewel-shop.oss-cn-beijing.aliyuncs.com/8bc15960c2dc40268e295d6dd23aecce.png') no-repeat;
width: 100%;
height: 360rpx;
background-size: 100% 100%;
}
.title-sreach {
width: 100%;
display: flex;
height: 200rpx;
position: relative;
}
.back-btn {
padding-top: 110rpx;
}
.title-name {
padding-top: 110rpx;
font-size: 36rpx;
font-weight: 700;
flex: 1;
text-align: center;
}
.summary-card {
width: 92%;
height: 128rpx;
margin: -156rpx auto 24rpx;
padding: 24rpx 28rpx;
box-sizing: border-box;
display: flex;
align-items: center;
border-radius: 28rpx;
background:
radial-gradient(circle at 92% 0, rgba(166, 255, 234, 0.78) 0, rgba(166, 255, 234, 0) 170rpx),
#fff;
box-shadow: 0 14rpx 34rpx rgba(0, 35, 28, 0.08);
}
.summary-label {
flex: 1;
color: #61716d;
font-size: 26rpx;
font-weight: 700;
}
.summary-count {
color: #00231C;
font-size: 52rpx;
font-weight: 900;
line-height: 64rpx;
}
.summary-count text {
margin-left: 6rpx;
color: #61716d;
font-size: 24rpx;
font-weight: 700;
}
.list-wrap {
width: 92%;
margin: 0 auto;
position: relative;
z-index: 1;
}
.search-card {
width: 92%;
margin: 0 auto 8rpx;
padding: 16rpx 18rpx;
box-sizing: border-box;
display: flex;
align-items: center;
border-radius: 22rpx;
background: #fff;
box-shadow: 0 10rpx 24rpx rgba(0, 35, 28, 0.05);
}
.date-picker-wrap {
flex: 1;
min-width: 0;
}
.reset-btn {
width: 88rpx;
height: 56rpx;
margin-left: 14rpx;
border-radius: 56rpx;
background: rgba(166, 255, 234, 0.48);
color: #126255;
font-size: 24rpx;
font-weight: 800;
line-height: 56rpx;
text-align: center;
}
.box1 {
width: 100%;
margin: 18rpx auto;
background: #fff;
border-radius: 24rpx;
padding: 22rpx;
box-sizing: border-box;
box-shadow: 0 10rpx 28rpx rgba(0, 35, 28, 0.05);
}
.order-head {
display: flex;
align-items: center;
min-height: 44rpx;
}
.type-tag {
height: 40rpx;
line-height: 40rpx;
padding: 0 16rpx;
border-radius: 40rpx;
font-size: 22rpx;
font-weight: 700;
}
.type-1 {
background: rgba(255, 233, 89, 1);
}
.type-2 {
background: rgba(255, 220, 199, 1);
}
.type-3 {
background: rgba(130, 255, 130, 1);
}
.order-code {
flex: 1;
min-width: 0;
margin-left: 14rpx;
color: #60716c;
font-size: 22rpx;
height: 40rpx;
line-height: 40rpx;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.done-tag {
height: 38rpx;
line-height: 38rpx;
padding: 0 14rpx;
border-radius: 12rpx;
background: rgba(166, 255, 234, 0.5);
color: #0b665a;
font-size: 22rpx;
font-weight: 700;
}
.time-row {
margin-top: 12rpx;
color: #223b36;
font-size: 28rpx;
font-weight: 800;
line-height: 38rpx;
}
.time-detail {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 8rpx 14rpx;
margin-top: 12rpx;
padding: 12rpx 14rpx;
border-radius: 16rpx;
background: rgba(247, 248, 248, 0.58);
}
.time-item {
min-width: 0;
color: #6f7c78;
font-size: 20rpx;
line-height: 30rpx;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.time-item text {
margin-right: 8rpx;
color: #243d38;
font-weight: 800;
}
.remark,
.extra-info {
margin-top: 14rpx;
padding: 12rpx 16rpx;
border-radius: 16rpx;
background: rgba(247, 248, 248, 0.72);
color: #5f6c69;
font-size: 22rpx;
line-height: 34rpx;
}
.extra-info {
display: flex;
flex-wrap: wrap;
gap: 12rpx 24rpx;
}
.route-box {
margin-top: 16rpx;
padding: 14rpx 16rpx;
border: 1px solid rgba(166, 255, 234, 0.78);
border-radius: 20rpx;
}
.route-line {
display: flex;
padding: 8rpx 0;
}
.route-dot {
width: 38rpx;
height: 38rpx;
line-height: 38rpx;
flex-shrink: 0;
margin: 3rpx 14rpx 0 0;
text-align: center;
border-radius: 38rpx;
background: #00231C;
color: #fff;
font-size: 20rpx;
font-weight: 700;
}
.route-dot.send {
background: #8adfca;
color: #00231C;
}
.route-main {
flex: 1;
min-width: 0;
}
.route-name {
color: #152d28;
font-size: 25rpx;
font-weight: 800;
line-height: 34rpx;
}
.route-address {
margin-top: 4rpx;
color: #7a8582;
font-size: 22rpx;
line-height: 32rpx;
word-break: break-all;
}
.goods-row {
display: flex;
align-items: center;
margin-top: 16rpx;
padding: 14rpx 16rpx;
border-radius: 18rpx;
background: rgba(247, 248, 248, 0.72);
}
.goods-title {
color: #172f2a;
font-size: 24rpx;
font-weight: 900;
}
.goods-desc {
flex: 1;
min-width: 0;
margin-left: 16rpx;
color: #7a8582;
font-size: 22rpx;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.fee-row {
display: flex;
align-items: center;
margin-top: 16rpx;
color: #64726f;
font-size: 24rpx;
line-height: 40rpx;
}
.big-tag {
margin-right: 12rpx;
padding: 0 10rpx;
height: 32rpx;
line-height: 32rpx;
border-radius: 10rpx;
background: rgba(255, 117, 88, 1);
color: #fff;
font-size: 20rpx;
font-weight: 700;
}
.fee-text {
flex: 1;
}
.fee-text text {
color: #00231C;
font-size: 30rpx;
font-weight: 900;
}
.market-fee {
color: #9aa4a1;
font-size: 20rpx;
}
.empty-box {
padding: 120rpx 0;
color: #8b9894;
font-size: 28rpx;
text-align: center;
}
.product-popup-content {
width: 680rpx;
max-height: 880rpx;
padding: 34rpx 28rpx 30rpx;
box-sizing: border-box;
overflow: scroll;
border-radius: 36rpx;
background:
radial-gradient(circle at 92% 4%, rgba(166, 255, 234, 0.38) 0, rgba(166, 255, 234, 0) 180rpx),
linear-gradient(180deg, #ffffff 0%, #f8fffc 100%);
box-shadow: 0 24rpx 56rpx rgba(0, 35, 28, 0.18);
}
.product-popup-header {
margin-bottom: 26rpx;
text-align: center;
}
.product-popup-title {
color: #143d35;
font-size: 36rpx;
font-weight: 900;
line-height: 48rpx;
}
.product-popup-subtitle {
margin-top: 8rpx;
color: #7b8a85;
font-size: 24rpx;
line-height: 34rpx;
}
.product-popup-list {
display: flex;
flex-direction: column;
gap: 20rpx;
}
.product-popup-card {
display: flex;
align-items: center;
padding: 22rpx;
border: 1px solid rgba(166, 255, 234, 0.58);
border-radius: 28rpx;
background: rgba(255, 255, 255, 0.88);
box-shadow: 0 12rpx 28rpx rgba(0, 35, 28, 0.06);
}
.product-popup-img {
width: 128rpx;
height: 128rpx;
flex-shrink: 0;
overflow: hidden;
border-radius: 22rpx;
background: #f0f5f3;
}
.product-popup-img img {
width: 100%;
height: 100%;
background-size: 100%;
}
.product-popup-info {
flex: 1;
min-width: 0;
padding: 0 22rpx;
}
.product-popup-name {
color: #172f2a;
font-size: 30rpx;
font-weight: 900;
line-height: 42rpx;
}
.product-popup-spec {
display: flex;
align-items: flex-start;
margin-top: 16rpx;
}
.product-popup-label {
flex-shrink: 0;
height: 34rpx;
padding: 0 14rpx;
border-radius: 999rpx;
background: rgba(166, 255, 234, 0.72);
color: #126255;
font-size: 20rpx;
font-weight: 800;
line-height: 34rpx;
}
.product-popup-spec-text {
flex: 1;
margin-left: 12rpx;
color: #65736f;
font-size: 24rpx;
line-height: 34rpx;
word-break: break-all;
}
.product-popup-quantity {
width: 92rpx;
height: 92rpx;
flex-shrink: 0;
border-radius: 28rpx;
background: linear-gradient(135deg, #fff4ce 0%, #a6ffea 100%);
color: #103f36;
text-align: center;
box-shadow: 0 10rpx 20rpx rgba(0, 35, 28, 0.08);
}
.product-popup-quantity-num {
padding-top: 16rpx;
font-size: 30rpx;
font-weight: 900;
line-height: 34rpx;
}
.product-popup-quantity-label {
margin-top: 2rpx;
color: #52736b;
font-size: 20rpx;
line-height: 28rpx;
}
.product-popup-empty {
padding: 80rpx 20rpx;
border-radius: 28rpx;
background: rgba(247, 255, 251, 0.9);
color: #7b8a85;
font-size: 28rpx;
font-weight: 700;
text-align: center;
}
.bottom-space {
width: 100%;
height: 60rpx;
}
</style>
Loading…
Cancel
Save