wangfukang 3 months ago
parent
commit
5060a918b9
  1. 19
      components/tab-bar/myCenter.vue
  2. 22
      package1/buyFood/buyFood.vue
  3. 51
      package1/group/groupBuySingle.vue
  4. 28
      package1/group/shopEvaluate.vue
  5. 25
      package1/myCenter/addGoods.vue
  6. 91
      package1/myCenter/attributeList.vue
  7. 2
      package1/myCenter/goodsList.vue
  8. 12
      package1/myCenter/partTimeJobRegister.vue
  9. 5
      package1/order/orderDetail.vue
  10. 2
      package1/order/orderEvaluate.vue
  11. 2
      package1/runErrand/runErrand.vue
  12. 677
      package2/partTimeJob/partTimeJobCenter.vue
  13. 548
      package2/shop/afterService.vue
  14. 4
      package2/shop/merchantCenter.vue
  15. 289
      package2/shop/ranking.vue
  16. 12
      pages.json
  17. 2
      pages/index/index.vue
  18. 2
      uni_modules/uni-combox/components/uni-combox/uni-combox.vue
  19. 30
      uni_modules/uni-countdown/changelog.md
  20. 6
      uni_modules/uni-countdown/components/uni-countdown/i18n/en.json
  21. 8
      uni_modules/uni-countdown/components/uni-countdown/i18n/index.js
  22. 6
      uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hans.json
  23. 6
      uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hant.json
  24. 278
      uni_modules/uni-countdown/components/uni-countdown/uni-countdown.vue
  25. 86
      uni_modules/uni-countdown/package.json
  26. 10
      uni_modules/uni-countdown/readme.md
  27. 22
      uni_modules/uni-notice-bar/changelog.md
  28. 423
      uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue
  29. 90
      uni_modules/uni-notice-bar/package.json
  30. 13
      uni_modules/uni-notice-bar/readme.md

19
components/tab-bar/myCenter.vue

@ -1,10 +1,9 @@
<template> <template>
<view class="page1"> <view class="page1">
<view>22222222</view> <view style="margin-top: 80px;" @click="navigatorTo('merchant')">商家入驻</view>
<view style="margin-top: 100px;" @click="navigatorTo('merchant')">商家入驻</view> <view style="margin-top: 80px;" @click="navigatorTo('merchantCenter')">商家中心-{{shopCounts}}</view>
<view style="margin-top: 100px;" @click="navigatorTo('merchantCenter')">商家中心-{{shopCounts}}</view> <view style="margin-top: 80px;" @click="navigatorTo('jianzhizhuce')">兼职注册</view>
<view style="margin-top: 100px;" @click="navigatorTo('jianzhizhuce')">兼职注册</view> <view style="margin-top: 80px;" v-if="worker" @click="navigatorTo('jianzhizhuye')">兼职主页</view>
<view style="margin-top: 100px;" v-if="worker" @click="navigatorTo('jianzhizhuye')">兼职主页-{{workerCounts}}</view>
<!-- 未注册兼职弹窗 --> <!-- 未注册兼职弹窗 -->
<uni-popup ref="jianzhiPopup" background-color="rgba(2, 171, 255, 1)" borderRadius="40px 40px 40px 40px"> <uni-popup ref="jianzhiPopup" background-color="rgba(2, 171, 255, 1)" borderRadius="40px 40px 40px 40px">
<view class="jianzhi-content" @tap="navigatorTo('partTimeReg')"> <view class="jianzhi-content" @tap="navigatorTo('partTimeReg')">
@ -109,7 +108,7 @@
url: '/package2/shop/merchantCenter' url: '/package2/shop/merchantCenter'
}) })
}, },
navigatorTo(e){ navigatorTo(e,index){
let url = "" let url = ""
if(e=='addgoods'){ if(e=='addgoods'){
url = '/package1/myCenter/addGoods' url = '/package1/myCenter/addGoods'
@ -134,6 +133,12 @@
url = '/package1/myCenter/goodsList' url = '/package1/myCenter/goodsList'
}else if(e=='merchant'){ }else if(e=='merchant'){
url = '/package2/shop/merchantRegister' url = '/package2/shop/merchantRegister'
}else if(e=='jianzhichaping'){
let item = {
shopScore:uni.getStorageSync('worker').score,
id:uni.getStorageSync('worker').workerId
}
url = '/package1/group/shopEvaluate?item=' + JSON.stringify(item) + '&isMerchant=2&isCha=' + (index =='cha'?1:0)
}else if(e == 'partTimeReg'){ }else if(e == 'partTimeReg'){
let worker = uni.getStorageSync('worker') let worker = uni.getStorageSync('worker')
let that = this let that = this
@ -168,7 +173,7 @@
return return
} }
}else if(e=='jianzhizhuye'){ }else if(e=='jianzhizhuye'){
url = '/package2/partTimeJob/partTimeJobCenter?type=worker' url = '/package2/partTimeJob/partTimeJobCenter'
} }
uni.navigateTo({ uni.navigateTo({
url: url url: url

22
package1/buyFood/buyFood.vue

@ -313,7 +313,7 @@
<text <text
style="font-size: 60rpx;">{{backendTotalAmount ? backendTotalAmount.toFixed(2) : totalAmountCalc.toFixed(2)}}</text> style="font-size: 60rpx;">{{backendTotalAmount ? backendTotalAmount.toFixed(2) : totalAmountCalc.toFixed(2)}}</text>
</view> </view>
<view style="height: 40rpx;text-align: center;color: red;"> <view style="height: 40rpx;text-align: center;color: red;" v-if="isGroupBuy">
若拼团失败将会为您自动退款 若拼团失败将会为您自动退款
</view> </view>
</view> </view>
@ -693,7 +693,10 @@
let shopArea = this.shopItem.shopArea || ''; let shopArea = this.shopItem.shopArea || '';
let putArea = this.formData.address ? this.formData.address.areaId : ''; let putArea = this.formData.address ? this.formData.address.areaId : '';
if(shopArea == '' || putArea == ''){ if(shopArea == '' || putArea == ''){
this.tui.toast('请先选择取货和收货地址'); uni.showToast({
title: '请先选择取货和收货地址',
icon: 'none'
})
return; return;
} }
uni.navigateTo({ uni.navigateTo({
@ -756,7 +759,10 @@
wxPayment() { wxPayment() {
let that = this; let that = this;
if (!this.currentOrderId || !this.backendTotalAmount) { if (!this.currentOrderId || !this.backendTotalAmount) {
that.tui.toast(this.currentOrderId + this.backendTotalAmount); uni.showToast({
title: this.currentOrderId + this.backendTotalAmount,
icon: 'none'
})
return; return;
} }
@ -811,10 +817,16 @@
that.handlePaymentSuccess(); that.handlePaymentSuccess();
}, 1500); }, 1500);
}).catch(e => { }).catch(e => {
that.tui.toast("请求失败"); uni.showToast({
title: '请求失败',
icon: 'none'
})
}); });
} else { } else {
that.tui.toast(res.message); uni.showToast({
title: res.message,
icon: 'none'
})
} }
} }
}) })

51
package1/group/groupBuySingle.vue

@ -302,7 +302,7 @@
:class="selectedGroupRule && selectedGroupRule.groupCount === rule.groupCount ? 'team-check' : 'team1'" :class="selectedGroupRule && selectedGroupRule.groupCount === rule.groupCount ? 'team-check' : 'team1'"
v-for="(rule, rIndex) in currentItem.productGroupBuyPrices" :key="rIndex" v-for="(rule, rIndex) in currentItem.productGroupBuyPrices" :key="rIndex"
@tap="selectGroupRule(rule)"> @tap="selectGroupRule(rule)">
<view class="team11"> <view class="team11" style="margin-top: 0;">
{{parseFloat(rule.groupPrice).toFixed(2)}} {{parseFloat(rule.groupPrice).toFixed(2)}}
</view> </view>
<view class="team11"> <view class="team11">
@ -331,14 +331,17 @@
</view> </view>
</view> </view>
<view class="goods-team" v-if="moreBuyList.length > 0 && isPintuan"> <view class="goods-team" v-if="moreBuyList.length > 0 && isPintuan" style="min-height: 280rpx;">
<view :class="spec.isChecked ? 'team-check' : 'team1'" <view :class="spec.isChecked ? 'team-check1' : 'team2'"
v-for="(spec, sIndex) in moreBuyList" :key="sIndex" v-for="(spec, sIndex) in moreBuyList" :key="sIndex"
@tap="selectMoreBuy(spec,sIndex)"> @tap="selectMoreBuy(spec,sIndex)">
<view class="team11"> <view>
<img :src="spec.productPicture" alt="" style="width: 70px;height: 70px;background-size: 100%;">
</view>
<view class="team11" style="margin-top:10rpx;">
{{spec.attributeListPrice | sliceMsg}} {{spec.attributeListPrice | sliceMsg}}
</view> </view>
<view class="team11"> <view class="team11" style="margin-top:10rpx;">
{{spec.productName}} {{spec.productName}}
</view> </view>
<view class="jiaobiao" v-if="spec.isChecked && spec.quantity>0"> <view class="jiaobiao" v-if="spec.isChecked && spec.quantity>0">
@ -2107,6 +2110,11 @@
font-size: 28rpx; font-size: 28rpx;
font-weight: 700; font-weight: 700;
} }
.spec22 {
display: flex;
white-space: nowrap;
overflow-x: scroll;
}
.spec222 { .spec222 {
display: inline-block; display: inline-block;
@ -2133,7 +2141,6 @@
.team1 { .team1 {
width: 154rpx; width: 154rpx;
height: 126rpx;
background: #eee; background: #eee;
border-radius: 20rpx; border-radius: 20rpx;
font-size: 26rpx; font-size: 26rpx;
@ -2142,11 +2149,35 @@
float: left; float: left;
margin-right: 40rpx; margin-right: 40rpx;
font-weight: 700; font-weight: 700;
padding: 10px;
}
.team2{
width: 190rpx;
height: 270rpx;
background: #f5f5f5;
border-radius: 10px;
float: left;
text-align: center;
margin-right: 20px;
padding: 10px 10px 0;
}
.team-check1 {
width: 190rpx;
height: 280rpx;
background: rgba(166, 255, 234, 1);
border-radius: 20rpx;
font-size: 26rpx;
text-align: center;
line-height: 40rpx;
float: left;
margin-right: 40rpx;
position: relative;
padding: 10px 10px 0;
font-weight: 700;
} }
.team-check { .team-check {
width: 154rpx; width: 154rpx;
height: 126rpx; height: auto;
background: rgba(166, 255, 234, 1); background: rgba(166, 255, 234, 1);
border-radius: 20rpx; border-radius: 20rpx;
font-size: 26rpx; font-size: 26rpx;
@ -2155,6 +2186,7 @@
float: left; float: left;
margin-right: 40rpx; margin-right: 40rpx;
position: relative; position: relative;
padding: 10px;
} }
.zaixian-swiper{ .zaixian-swiper{
flex: 1; flex: 1;
@ -2177,6 +2209,9 @@
.goods-team { .goods-team {
width: 100%; width: 100%;
min-height: 130rpx; min-height: 130rpx;
display: flex;
white-space: nowrap;
overflow-x: scroll;
} }
.list-right { .list-right {

28
package1/group/shopEvaluate.vue

@ -62,21 +62,21 @@
<view class="eval-img" v-if="item.picture"> <view class="eval-img" v-if="item.picture">
<img @tap="largeImg" :src="item.picture" alt=""> <img @tap="largeImg" :src="item.picture" alt="">
</view> </view>
<view class="reply-card" :class="{'expanded': isExpanded}" v-for="(item1,index1) in item.comments" :key="index1"> <view class="reply-card" v-for="(item1,index1) in item.comments" :key="index1" :class="{'expanded': item1.isOpen}">
<!-- 标题行商家回复 + 展开/收起按钮 --> <!-- 标题行商家回复 + 展开/收起按钮 -->
<view class="reply-header"> <view class="reply-header">
<!-- 回复内容区域动态类控制展开/折叠 --> <!-- 回复内容区域动态类控制展开/折叠 -->
<view class="reply-content" :class="{ collapsed: !isExpanded, expanded: isExpanded }"> <view class="reply-content" :class="{ collapsed: !item1.isOpen, expanded: item1.isOpen }">
<text>{{item1.createByName}} : {{ item1.remark }}</text> <text>{{item1.createByName}} : {{ item1.remark }}</text>
<img :src="item1.picture" alt="" class="upload-img" style="margin-top: 10px;border-radius: 10px;"> <img :src="item1.picture" v-if="item1.picture" alt="" class="upload-img" style="margin-top: 10px;border-radius: 10px;">
</view> </view>
<view class="reply-expand-btn" @click="toggleReply"> <view class="reply-expand-btn" @click="toggleReply(index,index1)">
<text v-if="!isExpanded">展开</text> <text v-if="!item1.isOpen">展开</text>
<text v-else>收起</text> <text v-else>收起</text>
</view> </view>
</view> </view>
</view> </view>
<view class="" v-if="isMerchant == 1"> <view class="" v-if="(isMerchant == 1 || isMerchant == 2)">
<view @tap="changeStatus(index)" class="reply-card" v-if="!item.isReply" style="text-align: right;padding-right: 10px;color: #00BFFF;"> <view @tap="changeStatus(index)" class="reply-card" v-if="!item.isReply" style="text-align: right;padding-right: 10px;color: #00BFFF;">
回复 回复
</view> </view>
@ -111,6 +111,7 @@
</view> </view>
</view> </view>
</view> </view>
<view style="width: 100%;height: 100rpx;"></view>
</view> </view>
<!-- 查看大图弹出层 --> <!-- 查看大图弹出层 -->
<uni-popup ref="imgPopup" background-color="#fff"> <uni-popup ref="imgPopup" background-color="#fff">
@ -128,7 +129,6 @@
replyText:'', replyText:'',
isMerchant:0, isMerchant:0,
replyPicture:"", replyPicture:"",
isExpanded: false,
menuButtonInfo: {}, menuButtonInfo: {},
isPintuan: true, isPintuan: true,
bigImg: '', bigImg: '',
@ -216,6 +216,11 @@
} }
for(let i=0;i<that.shopComments.length;i++){ for(let i=0;i<that.shopComments.length;i++){
that.shopComments[i].isReply=false that.shopComments[i].isReply=false
if(that.shopComments[i].comments.length > 0){
for(let m=0;m<that.shopComments[i].comments.length;m++){
that.shopComments[i].comments[m].isOpen = false
}
}
} }
that.$forceUpdate() that.$forceUpdate()
if(this.searchAll){ if(this.searchAll){
@ -236,7 +241,7 @@
remark:this.replyText, remark:this.replyText,
picture:this.replyPicture, picture:this.replyPicture,
createBy:this.shopComments[v].shopId, createBy:this.shopComments[v].shopId,
createByName:'商家', createByName:this.isMerchant == 1?'商家':'配送员',
createByIcon:'https://ooo.0o0.ooo/2019/04/28/5cc5a71a6e3b6.png', createByIcon:'https://ooo.0o0.ooo/2019/04/28/5cc5a71a6e3b6.png',
orderId:this.shopComments[v].orderId, orderId:this.shopComments[v].orderId,
shopId:this.shopComments[v].shopId, shopId:this.shopComments[v].shopId,
@ -257,8 +262,11 @@
uni.hideLoading(); uni.hideLoading();
}).catch((res) => {}); }).catch((res) => {});
}, },
toggleReply() { toggleReply(i,m) {
this.isExpanded = !this.isExpanded;
this.shopComments[i].comments[m].isOpen = !this.shopComments[i].comments[m].isOpen;
console.log("11111",this.shopComments)
this.$forceUpdate()
}, },
changeStatus(v){ changeStatus(v){
this.shopComments[v].isReply = !this.shopComments[v].isReply this.shopComments[v].isReply = !this.shopComments[v].isReply

25
package1/myCenter/addGoods.vue

@ -54,9 +54,9 @@
<uni-forms-item label="拼团信息" name="productGroupBuyPrices"> <uni-forms-item label="拼团信息" name="productGroupBuyPrices">
<view> <view>
<view v-for="(item,index) in formData.productGroupBuyPrices" :key="index" style="display: flex;margin-top:10rpx;"> <view v-for="(item,index) in formData.productGroupBuyPrices" :key="index" style="display: flex;margin-top:10rpx;">
<input class="content-input" v-model="item.groupCount" style="padding-right: 20rpx;margin-right: 20rpx;" placeholder="成团人数" /> <input class="content-input" v-model="item.groupCount" style="padding-right: 20rpx;margin-right: 20rpx;width: 100px;" placeholder="成团人数" />
<input class="content-input" v-model="item.groupPrice" style="padding-right: 20rpx;" placeholder="成团价格"/> <input class="content-input" v-model="item.groupPrice" style="padding-right: 20rpx;width: 100px;" placeholder="成团价格"/>
<button @click="delGroup(index)" v-if="formData.productGroupBuyPrices.length>1" style="width: 240rpx;height: 60rpx;line-height: 60rpx;color: red;border:none;background: #fff;">删除</button> <view @click="delGroup(index)" v-if="formData.productGroupBuyPrices.length>1" style="width: 240rpx;height: 60rpx;line-height: 60rpx;color: red;border:none;background: #fff;">删除</view>
</view> </view>
<view @click="addGroup()" style="margin-top: 10rpx;width: 160rpx;height: 60rpx;text-align: center;line-height: 60rpx;background: rgba(0, 35, 28, 1);border-radius: 60rpx;color: rgba(166, 255, 234, 1);"> <view @click="addGroup()" style="margin-top: 10rpx;width: 160rpx;height: 60rpx;text-align: center;line-height: 60rpx;background: rgba(0, 35, 28, 1);border-radius: 60rpx;color: rgba(166, 255, 234, 1);">
新增拼团 新增拼团
@ -124,21 +124,24 @@
<!-- 添加分类弹出层 --> <!-- 添加分类弹出层 -->
<uni-popup ref="addTypeDialog" background-color="#fff"> <uni-popup ref="addTypeDialog" background-color="#fff">
<view class="add-popup-content"> <view class="add-popup-content">
<view style="height:900rpx;"> <view style="height:900rpx;display: flex;">
<view class="content-left" style="float: left;"> <view class="content-left">
<view class="left-box" v-for="(item,index) in categoryData" :key="index" <view class="left-box" v-for="(item,index) in categoryData" :key="index"
:class="item.parentId ? 'left-box-hover':''" @tap="clickLeftBtn(index)"> :class="item.parentId ? 'left-box-hover':''" @tap="clickLeftBtn(index)">
<text style="width: 100%;height: 100rpx;line-height: 100rpx;display: inline-block;overflow: hidden;" <text style="width: 100%;height: 100rpx;line-height: 100rpx;display: inline-block;overflow: hidden;"
:class="item.parentId ? 'red' :''">{{item.title}}</text> :class="item.parentId ? 'red' :''">{{item.title}}</text>
</view> </view>
</view> </view>
<view v-for="(item,index) in categorySonData" :key="index" @tap="checkSpecValue(index)" class="content-low" :class="item.checked?'checked':''"> <view style="flex: 1;position: relative;padding: 20rpx;">
{{item.title}} <view v-for="(item,index) in categorySonData" :key="index" @tap="checkSpecValue(index)" class="content-low" :class="item.checked?'checked':''">
</view> {{item.title}}
<view> </view>
<uni-forms-item label="可选数量" name="currentCanbuy"> <view style="position: absolute;bottom: 0;">
<view style="font-size: 28rpx;line-height: 60rpx;font-weight: 700;">
该分类可选数量
</view>
<input type="digit" class="content-input" v-model="currentCanbuy" placeholder="该分类可选几个(默认1)"> <input type="digit" class="content-input" v-model="currentCanbuy" placeholder="该分类可选几个(默认1)">
</uni-forms-item> </view>
</view> </view>
</view> </view>
<view slot="footer" style="display: flex;padding-left: 40rpx;margin-top: 20rpx;"> <view slot="footer" style="display: flex;padding-left: 40rpx;margin-top: 20rpx;">

91
package1/myCenter/attributeList.vue

@ -6,25 +6,25 @@
<uni-icons type="left" size="28"></uni-icons> <uni-icons type="left" size="28"></uni-icons>
</view> </view>
<view class="title-name" :style="{'padding-top': menuButtonInfo.top +'px'}"> <view class="title-name" :style="{'padding-top': menuButtonInfo.top +'px'}">
规格管理 属性管理
</view> </view>
</view> </view>
</view> </view>
<view style="width: 100%;position: fixed;bottom: 10px;background: #fff;z-index: 99;"> <view style="width: 100%;position: fixed;bottom: 10px;background: #fff;z-index: 99;">
<button size="default" type="default" @tap="inputDialogToggle('add')" hover-class="is-hover">添加规格</button> <button size="default" type="default" @tap="inputDialogToggle('add')" hover-class="is-hover">添加属性</button>
</view> </view>
<view class="card-list"> <view class="card-list">
<ul> <ul>
<li v-for="(item, index) in indexList" :key="index" @tap="clickList(item)"> <li v-for="(item, index) in indexList" :key="index" @tap="clickList(item)">
<view class="name"> <view class="name">
<text>{{item.attributeName}}</text> <text>{{item.attributeName}}</text>
<u-icon name="edit-pen-fill" size="22" v-if="item.attributeName != '默认规格'" @tap.stop="inputDialogToggle('edit', item)"></u-icon> <u-icon name="edit-pen-fill" size="22" v-if="item.attributeName != '默认属性'" @tap.stop="inputDialogToggle('edit', item)"></u-icon>
</view> </view>
<button class="bj-btn" @tap.stop="goGategoryLow(item)">管理属性</button> <button class="bj-btn" @tap.stop="goGategoryLow(item)">管理属性</button>
</li> </li>
</ul> </ul>
</view> </view>
<u-modal :show="show" :title="'删除'" :content="'是否确认删除此规格?'" showCancelButton="true" @cancel="show = false" <u-modal :show="show" :title="'删除'" :content="'是否确认删除此属性?'" showCancelButton="true" @cancel="show = false"
@confirm="delItemModal"></u-modal> @confirm="delItemModal"></u-modal>
<uni-popup ref="inputDialog" type="dialog"> <uni-popup ref="inputDialog" type="dialog">
<uni-popup-dialog ref="inputClose" mode="input" :title="dialogTit" :value="inputVal" placeholder="请输入名称" <uni-popup-dialog ref="inputClose" mode="input" :title="dialogTit" :value="inputVal" placeholder="请输入名称"
@ -35,17 +35,17 @@
<uni-popup ref="delDialog" background-color="#fff"> <uni-popup ref="delDialog" background-color="#fff">
<view class="add-popup-content"> <view class="add-popup-content">
<view class="add-popup-title"> <view class="add-popup-title">
<text>编辑规格</text> <text>编辑属性</text>
<uni-icons @tap='close' type="closeempty" color='red' size="16" <uni-icons @tap='close' type="closeempty" color='red' size="16"
style="height:40rpx;line-height: 40rpx;position: absolute !important;bottom:0;right: 30rpx;"></uni-icons> style="height:40rpx;line-height: 40rpx;position: absolute !important;bottom:0;right: 30rpx;"></uni-icons>
</view> </view>
<view class="add-popup-container"> <view class="add-popup-container">
<view style="width: 90%;margin: 40rpx auto 0;"> <view style="width: 90%;margin: 40rpx auto 0;">
规格名称 属性名称
<uni-easyinput type="text" v-model="inputVal" @blur="handleBlur" placeholder="请输入规格值" /> <uni-easyinput type="text" v-model="inputVal" @blur="handleBlur" placeholder="请输入属性值" />
</view> </view>
<view style="width: 100%;height: 90rpx;line-height: 90rpx;text-align: center;border-radius: 0;color: #fff;display: flex;position: absolute;bottom: 0;"> <view style="width: 100%;height: 90rpx;line-height: 90rpx;text-align: center;border-radius: 0;color: #fff;display: flex;position: absolute;bottom: 0;">
<view style="flex: 1;background: linear-gradient(90deg, #60F3FF, #088FEB);" v-if="inputVal != '默认规格'" @tap="dialogDel">删除</view> <view style="flex: 1;background: linear-gradient(90deg, #60F3FF, #088FEB);" v-if="inputVal != '默认属性'" @tap="dialogDel">删除</view>
<view style="flex: 1;background: linear-gradient(90deg, #FF9797, #FFC1E0);" @tap="dialogInputConfirm">确认</view> <view style="flex: 1;background: linear-gradient(90deg, #FF9797, #FFC1E0);" @tap="dialogInputConfirm">确认</view>
</view> </view>
<!-- <ul> <!-- <ul>
@ -64,20 +64,18 @@
</view> </view>
</view> </view>
</uni-popup> </uni-popup>
<!-- 添加规格弹出层 --> <!-- 添加属性弹出层 -->
<uni-popup ref="addTypeDialog" background-color="#fff"> <uni-popup ref="addTypeDialog" background-color="#fff">
<view class="add-popup-content"> <view class="add-popup-content">
<view class="add-popup-title"> <view class="add-popup-title">
<text>新增规格</text> <text>新增属性</text>
<uni-icons @tap='close' type="closeempty" color='red' size="16" <uni-icons @tap='close' type="closeempty" color='red' size="16"
style="height:40rpx;line-height: 40rpx;position: absolute !important;bottom:0;right: 30rpx;"></uni-icons> style="height:40rpx;line-height: 40rpx;position: absolute !important;bottom:0;right: 30rpx;"></uni-icons>
</view> </view>
<view class="add-popup-container"> <view class="add-popup-container">
<view>
<text style="color:red;font-size:22rpx;">*您可以点击默认项快捷添加规格,如没有想要的快捷项可以手动输入</text>
</view>
<input type="text" v-model="typeText" style="width: 100%;border: 1px solid #eee;height: 80rpx;padding-left: 20rpx;margin:20rpx 0;font-size: 25rpx;line-height: 80rpx;" <input type="text" v-model="typeText" style="width: 100%;border: 1px solid #eee;height: 80rpx;padding-left: 20rpx;margin:20rpx 0;font-size: 25rpx;line-height: 80rpx;"
placeholder="请输入规格名称"> placeholder="请输入属性名称">
<!-- <ul> <!-- <ul>
<li v-for="(item,index) in defaultList" :key="index"> <li v-for="(item,index) in defaultList" :key="index">
<view class="title-fur"> <view class="title-fur">
@ -99,7 +97,7 @@
</uni-popup> </uni-popup>
<uni-popup ref="attrValueDialog" background-color="#fff"> <uni-popup ref="attrValueDialog" background-color="#fff">
<view class="add-popup-content"> <view class="add-popup-content" style="width: 640rpx;max-height: 600px;overflow: scroll;">
<view class="add-popup-title"> <view class="add-popup-title">
<text>管理属性</text> <text>管理属性</text>
<uni-icons @tap='close' type="closeempty" color='red' size="16" <uni-icons @tap='close' type="closeempty" color='red' size="16"
@ -107,16 +105,20 @@
</view> </view>
<view class="add-popup-container"> <view class="add-popup-container">
<view> <view>
<text style="color:red;font-size:22rpx;">*您可以点击默认项快捷添加属性,如没有想要的快捷项可以手动输入</text> <text style="color:red;font-size:22rpx;">*点击+号可新增专属自己店铺的属性值</text>
</view>
<view style="display: flex;font-weight: 700;font-size: 16px;height: 50px;line-height: 50px;padding-right: 10px;">
<view style="flex: 1;">
属性列表
</view>
<uni-icons type="plusempty" @tap="toggle()" color="#5fd9ee" size="20"></uni-icons>
</view> </view>
<u-icon size="20" name="plus" color="#5fd9ee"
@tap="toggle() "></u-icon>
<ul> <ul>
<li v-for="(item,index) in defaultList" :key="index"> <li v-for="(item,index) in defaultList" :key="index">
<view class="title-fur"> <view class="title-fur">
<view class="name">{{item.value}}</view> <view class="name">{{item.value}}</view>
<view style="flex: 1;background: linear-gradient(90deg, #60F3FF, #088FEB);" v-if="inputVal != '默认规格'" @tap="editValue(item)">修改</view> <view class="btn" v-if="inputVal != '默认属性'" @tap="editValue(item)">修改</view>
<view style="flex: 1;background: linear-gradient(90deg, #60F3FF, #088FEB);" v-if="inputVal != '默认规格'" @tap="delValue(item)">删除</view> <view class="btn" v-if="inputVal != '默认属性'" @tap="delValue(item)">删除</view>
</view> </view>
</li> </li>
</ul> </ul>
@ -130,11 +132,11 @@
<view style="font-size: 36rpx;font-weight: bold;text-align: center;">提示</view> <view style="font-size: 36rpx;font-weight: bold;text-align: center;">提示</view>
<view v-if="goodsList !=''" <view v-if="goodsList !=''"
style="width:100%;font-weight:bold;text-align: center;font-size: 28rpx;margin: 20rpx 0;"> style="width:100%;font-weight:bold;text-align: center;font-size: 28rpx;margin: 20rpx 0;">
{{goodsList[0].productName}}规格下有以下库存确认继续删除吗 {{goodsList[0].productName}}属性下有以下库存确认继续删除吗
</view> </view>
<view class="tui-order-item boxbg"> <view class="tui-order-item boxbg">
<view style="display: flex;border-bottom: 1px solid #eee;height: 50rpx;line-height: 50rpx;"> <view style="display: flex;border-bottom: 1px solid #eee;height: 50rpx;line-height: 50rpx;">
<view style="width: 70%;text-align: center;border-right: 1px solid #eee;">商品规格</view> <view style="width: 70%;text-align: center;border-right: 1px solid #eee;">商品属性</view>
<view style="width: 29%;text-align: center;">数量</view> <view style="width: 29%;text-align: center;">数量</view>
</view> </view>
<view class="shop-box" v-for="(item,index) in goodsList" :key="index" style="position: relative;"> <view class="shop-box" v-for="(item,index) in goodsList" :key="index" style="position: relative;">
@ -191,7 +193,7 @@
isOpenId: '', isOpenId: '',
delType: '', delType: '',
goodsList: [], goodsList: [],
dialogTit: '输入规格名', dialogTit: '输入属性名',
typeText:'', typeText:'',
sortText:'', sortText:'',
sortTextEdit:'', sortTextEdit:'',
@ -369,7 +371,7 @@
}).catch((res) => {}) }).catch((res) => {})
}, },
// //
getGategoryList() { getGategoryList() {
this.tui.request("/app/productAttribute/selectByCategoryId", "post", {categoryId:this.attrId}, false, true).then((res) => { this.tui.request("/app/productAttribute/selectByCategoryId", "post", {categoryId:this.attrId}, false, true).then((res) => {
if (res.code == 200) { if (res.code == 200) {
@ -389,13 +391,13 @@
} else if (type == 'add') { } else if (type == 'add') {
this.inputVal = ''; this.inputVal = '';
this.isOpenId = item; this.isOpenId = item;
this.dialogTit = '输入规格名' this.dialogTit = '输入属性名'
this.$refs.addTypeDialog.open('bottom') this.$refs.addTypeDialog.open('bottom')
} }
}, },
close(){ close(){
this.$refs.addTypeDialog.close() this.$refs.attrValueDialog.close()
}, },
handleBlur(e){ handleBlur(e){
this.inputVal = e.detail.value this.inputVal = e.detail.value
@ -403,7 +405,7 @@
handleBlurSort(e){ handleBlurSort(e){
this.sortTextEdit = e.detail.value this.sortTextEdit = e.detail.value
}, },
// //
getTypeToNum(id) { getTypeToNum(id) {
let that = this; let that = this;
this.tui.request("/app/stock/getlistByAttributeList", "post", { this.tui.request("/app/stock/getlistByAttributeList", "post", {
@ -421,7 +423,7 @@
if (res1.result.length > 0) { if (res1.result.length > 0) {
uni.showModal({ uni.showModal({
title: "提示", title: "提示",
content: "此规格已经维护了子规格,确定继续删除吗?", content: "此属性已经维护了子属性,确定继续删除吗?",
success: function(res2) { success: function(res2) {
if (res2.confirm) { if (res2.confirm) {
that.delItemModal() that.delItemModal()
@ -486,7 +488,7 @@
}).catch((res) => {}) }).catch((res) => {})
} }
}, },
// //
dialogInputConfirm(e) { dialogInputConfirm(e) {
let that = this; let that = this;
switch (that.typeModel) { switch (that.typeModel) {
@ -501,7 +503,7 @@
} }
} }
if(e == ''){ if(e == ''){
that.tui.toast("请输入规格名") that.tui.toast("请输入属性名")
return return
} }
that.tui.request("/app/productAttribute/save", "post", { that.tui.request("/app/productAttribute/save", "post", {
@ -610,7 +612,7 @@
this.delItems = item; this.delItems = item;
this.getTypeToNum(this.delItems.id) this.getTypeToNum(this.delItems.id)
}, },
// //
goGategoryLow(item) { goGategoryLow(item) {
this.editItem = item this.editItem = item
this.tui.request("/app/productAttributeValue/selectByAttributeId", "get", { this.tui.request("/app/productAttributeValue/selectByAttributeId", "get", {
@ -628,7 +630,7 @@
}).catch((res) => {}) }).catch((res) => {})
}, },
// //
addMultipleType(item,item1,index){ addMultipleType(item,item1,index){
@ -644,16 +646,16 @@
this.multipleList.push(data) this.multipleList.push(data)
}else{ }else{
for(var i=0;i<this.multipleList.length;i++){ for(var i=0;i<this.multipleList.length;i++){
if(this.multipleList[i].attributeName == item.name){ // if(this.multipleList[i].attributeName == item.name){ //
for(var m=0;m<this.multipleList[i].productAttributeValueVoList.length;m++){ for(var m=0;m<this.multipleList[i].productAttributeValueVoList.length;m++){
if(this.multipleList[i].productAttributeValueVoList[m].value == item.list[index].value){ // if(this.multipleList[i].productAttributeValueVoList[m].value == item.list[index].value){ //
this.multipleList[i].productAttributeValueVoList.splice(m,1) this.multipleList[i].productAttributeValueVoList.splice(m,1)
return; return;
}else{ // }else{ //
if(m+1 == this.multipleList[i].productAttributeValueVoList.length){ if(m+1 == this.multipleList[i].productAttributeValueVoList.length){
this.multipleList[i].productAttributeValueVoList.push(item.list[index]) this.multipleList[i].productAttributeValueVoList.push(item.list[index])
@ -662,7 +664,7 @@
} }
} }
} }
}else{ // }else{ //
if(this.multipleList.length == i+1){ if(this.multipleList.length == i+1){
@ -760,7 +762,7 @@
border-radius: 10upx; border-radius: 10upx;
background: #fff; background: #fff;
height: auto; height: auto;
margin: 150rpx auto 0; margin: -200rpx auto 0;
} }
.checked{ .checked{
@ -847,6 +849,15 @@
bottom: 0; bottom: 0;
left: 20rpx; left: 20rpx;
} }
.btn{
flex: 1;
line-height: 25px;
text-align: center;
height: 25px;
color: #1E90FF;
border-radius: 7px;
margin: 5px 0 0 10px;
}
.title-search { .title-search {
margin-top: 110rpx; margin-top: 110rpx;
@ -901,7 +912,7 @@
justify-content: center; justify-content: center;
padding: 30rpx; padding: 30rpx;
width: 100%; width: 100%;
height: 400rpx; height: 325rpx;
background-color: #fff; background-color: #fff;
overflow: scroll; overflow: scroll;
} }
@ -941,10 +952,10 @@
height: 70rpx; height: 70rpx;
margin: 0 auto; margin: 0 auto;
border-bottom: 1px solid #eee; border-bottom: 1px solid #eee;
display: flex;
.name { .name {
font-size: 30rpx; font-size: 30rpx;
width: 90%; width: 65%;
float: left;
height: 70rpx; height: 70rpx;
line-height: 70rpx; line-height: 70rpx;
} }

2
package1/myCenter/goodsList.vue

@ -46,7 +46,7 @@
<text>餐盒费</text> <text>餐盒费</text>
</view> </view>
<view class="price-box"> <view class="price-box">
<text>{{item.startPayNum}}</text> <text>{{item.startPayNum?item.startPayNum:0}}</text>
<text>起售数量</text> <text>起售数量</text>
</view> </view>
<view class="price-box" @tap="changeShow(index,'shopList')" style="flex: 1;text-align: right;padding-top: 26rpx;"> <view class="price-box" @tap="changeShow(index,'shopList')" style="flex: 1;text-align: right;padding-top: 26rpx;">

12
package1/myCenter/partTimeJobRegister.vue

@ -11,7 +11,7 @@
<view class="content"> <view class="content">
<view class="box1"> <view class="box1">
<view class="reg-name"> <view class="reg-name">
* 姓名 <text style="color:red;">*</text> 姓名
</view> </view>
<view class="reg-value"> <view class="reg-value">
<input type="text" v-model="formData.name" placeholder="请填写姓名" <input type="text" v-model="formData.name" placeholder="请填写姓名"
@ -21,7 +21,7 @@
<view class="box1"> <view class="box1">
<view class="reg-name"> <view class="reg-name">
* 学生证上传 <text style="font-weight: 400;color: #777;">身份信息仅用于认证身份平台会严格保密</text> <text style="color:red;">*</text> 学生证上传 <text style="font-weight: 400;color: #777;font-size: 11px;">身份信息仅用于认证身份平台会严格保密</text>
</view> </view>
<view class="reg-value"> <view class="reg-value">
<img @tap="pictureAdd('mentou')" <img @tap="pictureAdd('mentou')"
@ -33,7 +33,7 @@
</view> </view>
<view class="box1"> <view class="box1">
<view class="reg-name"> <view class="reg-name">
* 超出3楼以上额外收费 <text style="color:red;">*</text> 超出3楼以上额外收费
</view> </view>
<view class="reg-value"> <view class="reg-value">
<input type="number" v-model="formData.highFloorFee" placeholder="可设置金额" <input type="number" v-model="formData.highFloorFee" placeholder="可设置金额"
@ -42,7 +42,7 @@
</view> </view>
<view class="box1"> <view class="box1">
<view class="reg-name"> <view class="reg-name">
* 手机号 <text style="color:red;">*</text> 手机号
</view> </view>
<view class="reg-value"> <view class="reg-value">
<input type="number" v-model="formData.mobile" placeholder="手机号" <input type="number" v-model="formData.mobile" placeholder="手机号"
@ -51,7 +51,7 @@
</view> </view>
<view class="box1"> <view class="box1">
<view class="reg-name"> <view class="reg-name">
* 兼职类型 <text style="color:red;">*</text> 兼职类型
</view> </view>
<view class="reg-value" style="display: flex;"> <view class="reg-value" style="display: flex;">
<view class="box-check-btn" @tap="waimaOrpaotui('waima')" <view class="box-check-btn" @tap="waimaOrpaotui('waima')"
@ -66,7 +66,7 @@
</view> </view>
<view class="box1" v-if="formData.waima != false || formData.paotui != false"> <view class="box1" v-if="formData.waima != false || formData.paotui != false">
<view class="reg-name"> <view class="reg-name">
* 规则配置 <text style="color:red;">*</text> 规则配置
</view> </view>
<view class="reg-value"> <view class="reg-value">
<view class="value1" v-if="formData.waima"> <view class="value1" v-if="formData.waima">

5
package1/order/orderDetail.vue

@ -65,7 +65,7 @@
</view> </view>
</view> </view>
<view class="kaituan41"> <view class="kaituan41">
<button open-type="share" style="background:transparent;border:none;color:inherit;font-size:inherit;display:inline-flex;align-items:center;"> <button open-type="share" class="share-btn" style="background:transparent;border:none;color:inherit;font-size:inherit;display:inline-flex;align-items:center;">
分享至微信 <uni-icons type="weixin" size="15"></uni-icons> 分享至微信 <uni-icons type="weixin" size="15"></uni-icons>
</button> </button>
</view> </view>
@ -1524,4 +1524,7 @@
font-size: 28rpx; font-size: 28rpx;
font-weight: 700; font-weight: 700;
} }
.share-btn::after{
border: 0;
}
</style> </style>

2
package1/order/orderEvaluate.vue

@ -216,7 +216,7 @@
data.push({ // data.push({ //
parentId:'', parentId:'',
leve:0, leve:0,
remark:this.shopRemark, remark:this.manRemark,
picture:this.manPicture, picture:this.manPicture,
createBy:uni.getStorageSync('id'), createBy:uni.getStorageSync('id'),
createByName:'微信用户', createByName:'微信用户',

2
package1/runErrand/runErrand.vue

@ -306,7 +306,7 @@
alt="" style="width: 36rpx;height: 36rpx;" /> alt="" style="width: 36rpx;height: 36rpx;" />
</view> </view>
</view> </view>
<view class="btn" @tap="wxPayment" style="width: 90%; height: 100rpx; background: linear-gradient(90deg, #e3ff96, #a6ffea); font-size: 32rpx; font-weight: 700; line-height: 100rpx; text-align: center; border-radius: 100rpx; margin: 40rpx auto 60rpx;"> <view class="btn" @tap="wxPayment" style="width: 90%; height: 100rpx; background: linear-gradient(90deg, #e3ff96, #a6ffea); font-size: 32rpx; font-weight: 700; line-height: 100rpx; text-align: center; border-radius: 100rpx; margin: 40rpx auto 0;">
确认付款 确认付款
</view> </view>
</view> </view>

677
package2/partTimeJob/partTimeJobCenter.vue

@ -1,4 +1,5 @@
<template> <template>
<!-- 兼职中心 -->
<view class="page1"> <view class="page1">
<view class="title"> <view class="title">
<view class="title-sreach"> <view class="title-sreach">
@ -6,398 +7,236 @@
<uni-icons type="left" size="28"></uni-icons> <uni-icons type="left" size="28"></uni-icons>
</view> </view>
<view class="title-name" :style="{'padding-top': menuButtonInfo.top +'px'}"> <view class="title-name" :style="{'padding-top': menuButtonInfo.top +'px'}">
待退款/售后{{returnCount}} 兼职中心
</view> </view>
</view> </view>
</view> </view>
<view class="content"> <view class="shop-title">
<!-- <view class="box1" style="display: flex;"> <view class="title1">
<view class=""> <img src="https://ooo.0o0.ooo/2019/04/28/5cc5a71a6e3b6.png" alt="" />
待退款/售后{{returnCount}} </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>
<view class="box1" v-for="(item,index) in returnData" :key="index"> </view>
<view style="display: flex;height: 50rpx;border-bottom: 1px solid #eee;"> <view class="shop-order">
<view style="display: flex;"> <view class="order1">
{{'#' + item.mallOrder.numberCode}} 待办事项
</view>
<view class="order2">
<view class="order22">
<view class="order33" @tap="goDetail('db',4)">
<view class="order44">
{{daiquhuo}}
</view>
<view class="order55">
待取货
</view>
</view> </view>
<view style="flex: 1;display: flex;padding-left: 20rpx;"> <view class="order33" @tap="goDetail('db',5)">
{{item.createTime | formatISOTime}} <view class="order44">
<!-- <text>已退款</text> --> {{daisongda}}
</view>
<view class="order55">
待送达
</view>
</view> </view>
<view> <view class="order33" @tap="goDetail('tui',11)">
{{item.status == 0?'待退款':item.status == 3?'待售后':""}} <view class="order44">
{{shopData.refundCount == undefined?0:shopData.refundCount}}
</view>
<view class="order55">
待退款/售后
</view>
</view> </view>
</view> <view class="order33" @tap="goDetail('pj','cha')">
<view style="height: 180rpx;padding-top: 20rpx;color: #777;"> <view class="order44">
<view style="height: 50rpx;line-height: 50rpx;font-size: 28rpx;"> {{shopData.pendingBadReviewCount == undefined?0:shopData.pendingBadReviewCount}}
<view>退款原因: <text style="font-weight: 700;color:#00231C;">{{item.refundTypeStatus == 1?'商家原因':item.refundTypeStatus == 2?'配送原因':item.refundTypeStatus == 3?'商家/配送都有原因(需要退配送费)':item.refundTypeStatus == 4?'平台退款':""}}</text></view> </view>
<view class="order55">
<view>退款类型: <text style="font-weight: 700;color:#00231C;">{{item.refundType == 1?'退商品':item.refundType == 2?'退配送费':item.refundType == 3?'全额退款':""}}</text></view> 待回复差评
<view style="text-align: right;">退款金额: <text style="color:red;font-size: 34rpx;font-weight: 700;">{{item.refundAmount}}</text></view> </view>
</view> </view>
</view> </view>
<view style="height: 80rpx;border-top: 1px solid #eee;display: flex;"> </view>
<view style="flex: 1;"> </view>
<view class="btn" @tap="orderDetailOpen(item)" style="display: inline-block;"> <view class="shop-order">
查看订单 <view class="order1" style="display: flex;">
</view> <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">
{{shopData.orderRevenueAndCount.count == undefined?0:shopData.orderRevenueAndCount.count}}
</view> </view>
<view class="btn" @tap="returnAmountAllow(item,0)" style="background: rgba(0, 35, 28, 1);color: rgba(166, 255, 234, 1);"> <view class="data333">
不同意 完成订单
</view> </view>
<view class="btn" @tap="returnAmountAllow(item,1)" style="margin-left: 10px;"> </view>
同意 <view class="data22">
<view class="data222">
{{shopData.orderRevenueAndCount.amount == undefined?0:shopData.orderRevenueAndCount.amount}}
</view>
<view class="data333">
配送佣金
</view> </view>
</view> </view>
</view> </view>
</view>
<view class="shop-order">
<view class="order1">
必备工具
</view>
<view class="menu2">
<view class="menu22" @tap="goDetail('xx')">
<uni-popup ref="orderPopup" background-color="#fff"> <view class="menu33">
<view class="popup-area-content" style="height: 1200rpx;overflow: scroll;"> <img src="/static/images/dingdan/dd0.png" alt="" />
<view class="popup-area-title">
<text>订单详情</text>
</view> </view>
<view class="box1"> <view class="menu44">
<view style="width: 100%;line-height: 70rpx;font-size: 28rpx;font-weight: 700;"> 信息管理
{{orderDetail.shopName}}
<img @tap="makeCall(orderDetail.shopPhone)"
src="https://jewel-shop.oss-cn-beijing.aliyuncs.com/869a7af6a1c24bf3a0d523c4a18b55c6.png"
alt="" style="width: 60rpx;height: 60rpx;" />
</view>
<view v-for="(item1,index1) in goodsList" :key="index1" v-if="goodsList != null && goodsList.length > 0" style="display: flex;padding: 20rpx;background: #eee;border-radius: 20rpx;">
<view class="goods-img">
<img :src="item1.productPicture" alt="">
</view>
<view class="goods-content">
<view class="goods-name">
{{item1.productName}}
</view>
<view class="goods-content-center">
<view class="goods-deal1">
{{item1.specs}}
</view>
</view>
<view class="goods-content-bottom">
<view style="width: 50%;">
X{{item1.quantity}}
</view>
<view class="pintuan-left-price">
{{item1.price}}
</view>
</view>
</view>
</view>
<view>
<view style="height: 80rpx;line-height: 80rpx;display: flex;" v-if="orderDetail.packageFee != null && orderDetail.packageFee > 0">
<view style="flex: 1;color: #777;font-weight: 700;">
打包费
</view>
<view style="color: #000;font-weight:700;">
{{orderDetail.packageFee}}
</view>
</view>
<view style="height: 80rpx;line-height: 80rpx;display: flex;" v-if="orderDetail.deliveryType == 1">
<view style="flex: 1;color: #777;font-weight: 700;">
配送费
</view>
<view style="color: #000;font-weight:700;">
{{orderDetail.deliveryFee}}
</view>
</view>
<view style="height: 80rpx;line-height: 80rpx;display: flex;">
<view style="flex: 1;color: #777;font-weight: 700;">
优惠券
</view>
<view style="color: #000;font-weight:700;">
-1 <uni-icons type="right" size="12"></uni-icons>
</view>
</view>
</view>
<view style="display: flex;height: 80rpx;line-height: 100rpx;border-top: 1px solid #eee;font-size: 32rpx;font-weight: 700;">
<view style="flex: 1;">
实付
</view>
<view class="">
{{orderDetail.totalAmount}}
</view>
</view>
</view> </view>
<view class="box1"> </view>
<view> <view class="menu22" @tap="goDetail('dd')">
<!-- <view style="height: 80rpx;line-height: 80rpx;display: flex;"> <view class="menu33">
<view style="flex: 1;color: #777;font-weight: 700;"> <img src="/static/images/dingdan/dd1.png" alt="" />
收件地址
</view>
<view style="color: #000;font-weight: 700;">
北校区1号宿舍楼5楼512(0702)
</view>
</view> -->
<view style="height: 80rpx;line-height: 80rpx;display: flex;" v-if="orderDetail.numberCode != null">
<view style="flex: 1;color: #777;font-weight: 700;">
订单号
</view>
<view style="color: #000;font-weight: 700;">
{{orderDetail.numberCode}}
</view>
</view>
<view style="height: 80rpx;line-height: 80rpx;display: flex;">
<view style="flex: 1;color: #777;font-weight: 700;">
下单时间
</view>
<view style="color: #000;font-weight: 700;">
{{orderDetail.createTime | formatISOTime}}
</view>
</view>
<view style="height: 80rpx;line-height: 80rpx;display: flex;" v-if="orderDetail.shopMakeTime != null">
<view style="flex: 1;color: #777;font-weight: 700;">
商家出餐时间
</view>
<view style="color: #000;font-weight: 700;">
{{orderDetail.shopMakeTime ? orderDetail.shopMakeTime : '' | formatISOTime}}
</view>
</view>
</view>
</view> </view>
<view class="popup-area-container" v-for="(item,index) in productData" :key="index"> <view class="menu44">
<text style="display: inline-block">{{item.productName}} {{item.specs}} * {{item.quantity}}</text> 订单管理
</view> </view>
</view> </view>
</uni-popup> <view class="menu22" @tap="goDetail('qb')">
<view class="menu33">
<!-- 拼团详情弹窗 --> <img src="/static/images/dingdan/dd2.png" alt="" />
<uni-popup ref="pintuanPopup" background-color="#fff"> </view>
<view class="guize-list"> <view class="menu44">
<view v-for="(item,index) in tuanzhangOrder" :key="index"> 我的钱包
<view style="height: 80rpx;line-height: 80rpx;font-size: 36rpx;font-weight: 700;"> </view>
订单-{{item.numberCode}} </view>
</view> <view class="menu22" @tap="goDetail('pj','')">
<view class=""> <view class="menu33">
<view class="dingdan"> <img src="/static/images/dingdan/dd3.png" alt="" />
<view style="display:flex"> </view>
<view style="width:300rpx;"> <view class="menu44">
订单状态 顾客评价
</view>
<view class="pituan-text">
{{item.status == 0?'待支付':item.status == 2?'待配送员接单':(item.status == 3 && item.deliveryType == 1 && item.shopMakeTime == null) || (item.status == 3 && item.deliveryType == 2 && item.userRequireMake == 1)?'待出餐':(item.status == 3 && item.deliveryType == 1 && item.shopMakeTime != null)?'待取货':(item.status == 3 && item.deliveryType == 2)?'待消费':item.status == 4?'待送达':item.status == 5?'已完成':item.status == 7?'待同意退款':item.status == 8?'已退款':item.status == 6?'已取消':item.status == 11?'售后中':item.status == 12?'已售后':""}}
</view>
</view>
<view style="display:flex">
<view style="width:300rpx;">
订单号
</view>
<view class="pituan-text">
{{item.id}}
</view>
</view>
<view style="display:flex">
<view style="width:300rpx;">
订单时间
</view>
<view class="pituan-text">
{{item.createTime | formatISOTime}}
</view>
</view>
</view>
<view class="dingdan" v-for="(item1,index1) in item.goodsList" :key="index1">
<view class="pt-title">
商品信息
</view>
<view style="display: flex;font-weight: 700;">
<view style="flex:1">
商品名{{item1.productName}}
</view>
<view style="width:100rpx;">
X{{item1.quantity}}
</view>
<view style="width:220rpx;text-align: right;padding-right:20rpx;">
{{item1.price}}
</view>
</view>
</view>
<view class="dingdan">
<view style="text-align: right;padding-right: 20rpx;color: #777;">
餐盒费{{item.packageFee}} 配送费{{item.deliveryFee}}
</view>
<view style="text-align: right;padding-right: 20rpx;font-size: 28rpx;font-weight: 700;color: red;">
总计{{item.totalAmount}}
</view>
</view>
</view>
</view> </view>
</view> </view>
</uni-popup> <view class="menu22" @tap="goDetail('ph','')">
<view class="menu33">
<img src="/static/images/dingdan/dd4.png" alt="" />
</view>
<view class="menu44">
排行
</view>
</view>
</view>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import base from '@/utils/ossUploadFile/base64.js';
export default { export default {
data() { data() {
return { return {
menuButtonInfo: {}, menuButtonInfo: {},
searchCountForm:{ worker: {},
linkId:uni.getStorageSync('worker').workerId, shopData: {},
pageNum:1, daixiaofei: 0,
pageSize:100, daichucan: 0,
statusList:[0,3] daiquhuo: 0,
}, daisongda: 0,
type:'worker', isBaozhang:false
returnFormData:{},
groupOrderIdList:[],
tuanzhangOrder:[],
goodsList:[],
orderDetail:{},
returnData:[],
returnCount:0
}
},
filters:{
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}`;
} }
}, },
onShow() { onShow() {
this.menuButtonInfo = uni.getMenuButtonBoundingClientRect() this.menuButtonInfo = uni.getMenuButtonBoundingClientRect()
this.searchCountForm.linkId = uni.getStorageSync('worker').workerId this.worker = uni.getStorageSync('worker')
this.getData()
}, },
onLoad(option) { onLoad(option) {
if(option.type){
this.type = option.type
}
this.getReturnCount()
}, },
methods: { methods: {
getGroupOrders(id){ getData() {
this.tui.request("/mall/order/selectAllOrderByOrderId/"+id, "GET", {}, false, true).then((res) => { this.tui.request("/mall/order/countByShop/" + uni.getStorageSync('shopId'), "GET", {}, false, true).then((
res) => {
if (res.code == 200) { if (res.code == 200) {
this.tuanzhangOrder = res.result; this.shopData = res.result
this.$refs.pintuanPopup.open('bottom') for (let i = 0; i < this.shopData.orderStatusCount.length; i++) {
} else { if (this.shopData.orderStatusCount[i].counttype) {
that.tui.toast(res.message) if (this.shopData.orderStatusCount[i].counttype == 'daisong') {
return this.daisongda = this.shopData.orderStatusCount[i].count
} } else if (this.shopData.orderStatusCount[i].counttype == 'daiqu') {
uni.hideLoading() this.daiquhuo = this.shopData.orderStatusCount[i].count
}).catch((res) => {}) } else if (this.shopData.orderStatusCount[i].counttype == 'daixiaofei') {
}, this.daixiaofei = this.shopData.orderStatusCount[i].count
orderDetailOpen(item){ } else if (this.shopData.orderStatusCount[i].counttype == 'daichucan') {
this.returnFormData.id = item.id; this.daichucan = this.shopData.orderStatusCount[i].count
this.returnFormData.linkId = item.linkId;
this.returnFormData.orderId = item.orderId;
this.returnFormData.deliveryType = item.mallOrder.deliveryType;
this.returnFormData.refundAmount = item.refundAmount;
this.returnFormData.refundType = item.refundType;
this.returnFormData.refundTypeStatus = item.refundTypeStatus;
this.orderDetail = item.mallOrder;
this.goodsList = item.items;
this.$refs.orderPopup.open();
},
makeCall(phone){
uni.makePhoneCall({
phoneNumber: phone
});
},
getReturnCount(){
let that = this
if(this.type == 'worker'){
this.searchCountForm.linkId = uni.getStorageSync('worker').workerId
}else{
this.searchCountForm.linkId = uni.getStorageSync('shopId')
}
this.tui.request("/mall/refund/page", "POST", this.searchCountForm, false, false).then((res) => {
if (res.code == 200 && res.result != null) {
that.returnCount = res.result.records.length;
that.returnData = res.result.records
that.$forceUpdate();
} else {
that.tui.toast(res.message);
return;
}
uni.hideLoading();
}).catch((res) => {});
},
returnAmountAllow(item,status){
let titleText = status == 1 ? '确定同意该申请吗?' : '确定拒绝该申请吗?';
//退
if(item.groupOrderIds != null && item.groupOrderIds != ''){
titleText += '该订单为面对面配送单,所有参团订单将同步处理';
for(let i = 0; i < this.returnData.length;i++){
if(item.groupOrderIds.indexOf(this.returnData[i].mallOrder.id) != -1){
//
this.groupOrderIdList.push(this.returnData[i]);
}
}
}else{
this.groupOrderIdList = []
}
// 2.
uni.showModal({
title: '提示',
content: titleText,
success: (res) => {
if (res.confirm) {
if(this.groupOrderIdList != [] && this.groupOrderIdList.length > 0){
for(let i = 0; i < this.groupOrderIdList.length;i++){
this.processReturn(this.groupOrderIdList[i], status);
} }
}else{
this.processReturn(item, status);
} }
} }
} else {
this.tui.toast(res.message)
} }
}); uni.hideLoading()
}).catch((res) => {})
}, },
processReturn(item,status){ goDetail(type, index) {
let url = '' let url = ''
//退 switch (type) {
if(item.status == 0){ case 'tj':
// url = '/package1/myCenter/dataStatistics'
if(status == 0){ break;
this.returnFormData.status = 2 case 'db':
}else{ url = '/package2/shop/shopOrderList?index=' + index
this.returnFormData.status = 1 break;
} case 'xx':
}else if(item.status == 3){ url = '/package1/myCenter/partTimeJobRegister'
// break;
if(status == 0){ case 'qb':
this.returnFormData.status = 5 url = ''
}else{ break;
this.returnFormData.status = 4 case 'dd':
} url = '/package2/shop/shopOrderList'
break;
case 'ph':
url = '/package2/shop/ranking'
break;
case 'tui':
uni.navigateTo({
url: '/package2/shop/afterService?type=worker'
})
break;
case 'pj':
let item = {
shopScore:uni.getStorageSync('worker').score,
id:uni.getStorageSync('worker').workerId
}
url = '/package1/group/shopEvaluate?item=' + JSON.stringify(item) + '&isMerchant=2&isCha=' + (index =='cha'?1:0)
break;
default:
} }
this.returnFormData.id = item.id; uni.navigateTo({
this.returnFormData.linkId = item.linkId; url: url
this.returnFormData.orderId = item.orderId; })
this.returnFormData.deliveryType = item.mallOrder.deliveryType;
this.returnFormData.orderType = item.mallOrder.orderType;
this.returnFormData.refundAmount = item.refundAmount;
this.returnFormData.refundType = item.refundType;
this.returnFormData.refundTypeStatus = item.refundTypeStatus;
let that = this
this.tui.request("/mall/refund/allowOrReject", "POST", this.returnFormData, false, false).then((res) => {
if (res.code == 200) {
that.tui.toast(res.message);
this.getReturnCount()
that.$forceUpdate();
} else {
that.tui.toast(res.message);
return;
}
uni.hideLoading();
}).catch((res) => {});
}, },
back() { back() {
uni.navigateBack() uni.navigateBack()
@ -448,101 +287,111 @@
flex: 1; flex: 1;
text-align: center; text-align: center;
} }
.content{
margin: -100rpx auto; .shop-title {
}
.box1 {
width: 95%; width: 95%;
margin: 20rpx auto; margin: -130rpx auto 0;
padding: 20rpx;
background: #fff; background: #fff;
border-radius: 20rpx; border-radius: 20rpx;
padding: 20rpx; display: flex;
} font-size: 28rpx;
.btn{
background: linear-gradient(90deg, rgba(227, 255, 150, 1), rgba(166, 255, 234, 1));
padding:0 20rpx;
height: 50rpx;
border-radius: 14rpx;
line-height: 50rpx;
text-align: center;
font-weight: 700; font-weight: 700;
margin-top: 20rpx;
} }
.popup-area-title {
font-size: 36rpx;
font-weight: bold;
text-align: center;
position: relative;
}
.popup-area-content {
align-items: center;
justify-content: center;
padding: 30rpx;
width: 500rpx;
height: auto;
background-color: #fff;
}
.goods-img {
width: 160rpx;
height: 160rpx;
position: relative;
.title1 {
width: 70rpx;
height: 70rpx;
img { img {
width: 100%; width: 100%;
background-size: 100%;
height: 100%; height: 100%;
border-radius: 20rpx; border-radius: 10rpx;
} }
} }
.pinzi{
margin: 20rpx 0; .title2 {
background: linear-gradient(90deg, #FF4500, #FFA07A); flex: 1;
width: 40rpx; line-height: 70rpx;
height: 40rpx; display: flex;
line-height: 40rpx;
text-align: center;
border-radius: 10rpx;
color: #fff;
} }
.goods-content {
.title22 {
flex: 1; flex: 1;
padding-left: 20rpx; padding-left: 20rpx;
} }
.goods-name { .shop-order {
font-size: 32rpx; width: 95%;
font-weight: 900; margin: 20rpx auto 0;
background: #fff;
border-radius: 20rpx;
padding: 0 20rpx 0;
}
.order1 {
height: 70rpx;
line-height: 70rpx;
font-size: 28rpx;
font-weight: 700;
border-bottom: 1px solid #eee;
} }
.goods-content-center { .order22 {
display: flex; display: flex;
margin: 16rpx 0; height: 100rpx;
color: #777; padding-top: 20rpx;
} }
.guize-list {
width: 100%; .order33 {
padding: 20rpx; flex: 1;
overflow: scroll; text-align: center;
background: #fff;
max-height: 1000rpx;
line-height: 25px;
} }
.pt-title{
.order44 {
font-size: 28rpx; font-size: 28rpx;
font-weight: 700; font-weight: 700;
color: #777;
} }
.dingdan{
border-top: 1px solid #eee; .data2 {
display: flex;
height: 140rpx;
text-align: center;
padding-top: 20rpx;
} }
.uni-popup__wrapper{
border-radius: 20rpx !important; .data22 {
flex: 1;
} }
.pituan-text{
flex:1; .data222 {
text-align:right; font-size: 36rpx;
padding-right:20rpx;
font-weight: 700; font-weight: 700;
padding-bottom: 20rpx;
}
.menu2 {
display: flex;
flex-wrap: wrap;
text-align: center;
padding-top: 20rpx;
}
.menu22 {
width: 25%;
height: 120rpx;
}
.menu33 {
img {
width: 50rpx;
height: 50rpx;
background-size: 100%;
}
}
.menu44 {
height: 40rpx;
line-height: 40rpx;
} }
</style> </style>

548
package2/shop/afterService.vue

@ -0,0 +1,548 @@
<template>
<view class="page1">
<view class="title">
<view class="title-sreach">
<view class="back-btn" @tap="back" :style="{'top': menuButtonInfo.top +'px'}">
<uni-icons type="left" size="28"></uni-icons>
</view>
<view class="title-name" :style="{'padding-top': menuButtonInfo.top +'px'}">
待退款/售后{{returnCount}}
</view>
</view>
</view>
<view class="content">
<!-- <view class="box1" style="display: flex;">
<view class="">
待退款/售后{{returnCount}}
</view>
</view> -->
<view class="box1" v-for="(item,index) in returnData" :key="index">
<view style="display: flex;height: 50rpx;border-bottom: 1px solid #eee;">
<view style="display: flex;">
{{'#' + item.mallOrder.numberCode}}
</view>
<view style="flex: 1;display: flex;padding-left: 20rpx;">
{{item.createTime | formatISOTime}}
<!-- <text>已退款</text> -->
</view>
<view>
{{item.status == 0?'待退款':item.status == 3?'待售后':""}}
</view>
</view>
<view style="height: 180rpx;padding-top: 20rpx;color: #777;">
<view style="height: 50rpx;line-height: 50rpx;font-size: 28rpx;">
<view>退款原因: <text style="font-weight: 700;color:#00231C;">{{item.refundTypeStatus == 1?'商家原因':item.refundTypeStatus == 2?'配送原因':item.refundTypeStatus == 3?'商家/配送都有原因(需要退配送费)':item.refundTypeStatus == 4?'平台退款':""}}</text></view>
<view>退款类型: <text style="font-weight: 700;color:#00231C;">{{item.refundType == 1?'退商品':item.refundType == 2?'退配送费':item.refundType == 3?'全额退款':""}}</text></view>
<view style="text-align: right;">退款金额: <text style="color:red;font-size: 34rpx;font-weight: 700;">{{item.refundAmount}}</text></view>
</view>
</view>
<view style="height: 80rpx;border-top: 1px solid #eee;display: flex;">
<view style="flex: 1;">
<view class="btn" @tap="orderDetailOpen(item)" style="display: inline-block;">
查看订单
</view>
</view>
<view class="btn" @tap="returnAmountAllow(item,0)" style="background: rgba(0, 35, 28, 1);color: rgba(166, 255, 234, 1);">
不同意
</view>
<view class="btn" @tap="returnAmountAllow(item,1)" style="margin-left: 10px;">
同意
</view>
</view>
</view>
<uni-popup ref="orderPopup" background-color="#fff">
<view class="popup-area-content" style="height: 1200rpx;overflow: scroll;">
<view class="popup-area-title">
<text>订单详情</text>
</view>
<view class="box1">
<view style="width: 100%;line-height: 70rpx;font-size: 28rpx;font-weight: 700;">
{{orderDetail.shopName}}
<img @tap="makeCall(orderDetail.shopPhone)"
src="https://jewel-shop.oss-cn-beijing.aliyuncs.com/869a7af6a1c24bf3a0d523c4a18b55c6.png"
alt="" style="width: 60rpx;height: 60rpx;" />
</view>
<view v-for="(item1,index1) in goodsList" :key="index1" v-if="goodsList != null && goodsList.length > 0" style="display: flex;padding: 20rpx;background: #eee;border-radius: 20rpx;">
<view class="goods-img">
<img :src="item1.productPicture" alt="">
</view>
<view class="goods-content">
<view class="goods-name">
{{item1.productName}}
</view>
<view class="goods-content-center">
<view class="goods-deal1">
{{item1.specs}}
</view>
</view>
<view class="goods-content-bottom">
<view style="width: 50%;">
X{{item1.quantity}}
</view>
<view class="pintuan-left-price">
{{item1.price}}
</view>
</view>
</view>
</view>
<view>
<view style="height: 80rpx;line-height: 80rpx;display: flex;" v-if="orderDetail.packageFee != null && orderDetail.packageFee > 0">
<view style="flex: 1;color: #777;font-weight: 700;">
打包费
</view>
<view style="color: #000;font-weight:700;">
{{orderDetail.packageFee}}
</view>
</view>
<view style="height: 80rpx;line-height: 80rpx;display: flex;" v-if="orderDetail.deliveryType == 1">
<view style="flex: 1;color: #777;font-weight: 700;">
配送费
</view>
<view style="color: #000;font-weight:700;">
{{orderDetail.deliveryFee}}
</view>
</view>
<view style="height: 80rpx;line-height: 80rpx;display: flex;">
<view style="flex: 1;color: #777;font-weight: 700;">
优惠券
</view>
<view style="color: #000;font-weight:700;">
-1 <uni-icons type="right" size="12"></uni-icons>
</view>
</view>
</view>
<view style="display: flex;height: 80rpx;line-height: 100rpx;border-top: 1px solid #eee;font-size: 32rpx;font-weight: 700;">
<view style="flex: 1;">
实付
</view>
<view class="">
{{orderDetail.totalAmount}}
</view>
</view>
</view>
<view class="box1">
<view>
<!-- <view style="height: 80rpx;line-height: 80rpx;display: flex;">
<view style="flex: 1;color: #777;font-weight: 700;">
收件地址
</view>
<view style="color: #000;font-weight: 700;">
北校区1号宿舍楼5楼512(0702)
</view>
</view> -->
<view style="height: 80rpx;line-height: 80rpx;display: flex;" v-if="orderDetail.numberCode != null">
<view style="flex: 1;color: #777;font-weight: 700;">
订单号
</view>
<view style="color: #000;font-weight: 700;">
{{orderDetail.numberCode}}
</view>
</view>
<view style="height: 80rpx;line-height: 80rpx;display: flex;">
<view style="flex: 1;color: #777;font-weight: 700;">
下单时间
</view>
<view style="color: #000;font-weight: 700;">
{{orderDetail.createTime | formatISOTime}}
</view>
</view>
<view style="height: 80rpx;line-height: 80rpx;display: flex;" v-if="orderDetail.shopMakeTime != null">
<view style="flex: 1;color: #777;font-weight: 700;">
商家出餐时间
</view>
<view style="color: #000;font-weight: 700;">
{{orderDetail.shopMakeTime ? orderDetail.shopMakeTime : '' | formatISOTime}}
</view>
</view>
</view>
</view>
<view class="popup-area-container" v-for="(item,index) in productData" :key="index">
<text style="display: inline-block">{{item.productName}} {{item.specs}} * {{item.quantity}}</text>
</view>
</view>
</uni-popup>
<!-- 拼团详情弹窗 -->
<uni-popup ref="pintuanPopup" background-color="#fff">
<view class="guize-list">
<view v-for="(item,index) in tuanzhangOrder" :key="index">
<view style="height: 80rpx;line-height: 80rpx;font-size: 36rpx;font-weight: 700;">
订单-{{item.numberCode}}
</view>
<view class="">
<view class="dingdan">
<view style="display:flex">
<view style="width:300rpx;">
订单状态
</view>
<view class="pituan-text">
{{item.status == 0?'待支付':item.status == 2?'待配送员接单':(item.status == 3 && item.deliveryType == 1 && item.shopMakeTime == null) || (item.status == 3 && item.deliveryType == 2 && item.userRequireMake == 1)?'待出餐':(item.status == 3 && item.deliveryType == 1 && item.shopMakeTime != null)?'待取货':(item.status == 3 && item.deliveryType == 2)?'待消费':item.status == 4?'待送达':item.status == 5?'已完成':item.status == 7?'待同意退款':item.status == 8?'已退款':item.status == 6?'已取消':item.status == 11?'售后中':item.status == 12?'已售后':""}}
</view>
</view>
<view style="display:flex">
<view style="width:300rpx;">
订单号
</view>
<view class="pituan-text">
{{item.id}}
</view>
</view>
<view style="display:flex">
<view style="width:300rpx;">
订单时间
</view>
<view class="pituan-text">
{{item.createTime | formatISOTime}}
</view>
</view>
</view>
<view class="dingdan" v-for="(item1,index1) in item.goodsList" :key="index1">
<view class="pt-title">
商品信息
</view>
<view style="display: flex;font-weight: 700;">
<view style="flex:1">
商品名{{item1.productName}}
</view>
<view style="width:100rpx;">
X{{item1.quantity}}
</view>
<view style="width:220rpx;text-align: right;padding-right:20rpx;">
{{item1.price}}
</view>
</view>
</view>
<view class="dingdan">
<view style="text-align: right;padding-right: 20rpx;color: #777;">
餐盒费{{item.packageFee}} 配送费{{item.deliveryFee}}
</view>
<view style="text-align: right;padding-right: 20rpx;font-size: 28rpx;font-weight: 700;color: red;">
总计{{item.totalAmount}}
</view>
</view>
</view>
</view>
</view>
</uni-popup>
</view>
</view>
</template>
<script>
export default {
data() {
return {
menuButtonInfo: {},
searchCountForm:{
linkId:uni.getStorageSync('worker').workerId,
pageNum:1,
pageSize:100,
statusList:[0,3]
},
type:'worker',
returnFormData:{},
groupOrderIdList:[],
tuanzhangOrder:[],
goodsList:[],
orderDetail:{},
returnData:[],
returnCount:0
}
},
filters:{
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}`;
}
},
onShow() {
this.menuButtonInfo = uni.getMenuButtonBoundingClientRect()
this.searchCountForm.linkId = uni.getStorageSync('worker').workerId
},
onLoad(option) {
if(option.type){
this.type = option.type
}
this.getReturnCount()
},
methods: {
getGroupOrders(id){
this.tui.request("/mall/order/selectAllOrderByOrderId/"+id, "GET", {}, false, true).then((res) => {
if (res.code == 200) {
this.tuanzhangOrder = res.result;
this.$refs.pintuanPopup.open('bottom')
} else {
that.tui.toast(res.message)
return
}
uni.hideLoading()
}).catch((res) => {})
},
orderDetailOpen(item){
this.returnFormData.id = item.id;
this.returnFormData.linkId = item.linkId;
this.returnFormData.orderId = item.orderId;
this.returnFormData.deliveryType = item.mallOrder.deliveryType;
this.returnFormData.refundAmount = item.refundAmount;
this.returnFormData.refundType = item.refundType;
this.returnFormData.refundTypeStatus = item.refundTypeStatus;
this.orderDetail = item.mallOrder;
this.goodsList = item.items;
this.$refs.orderPopup.open();
},
makeCall(phone){
uni.makePhoneCall({
phoneNumber: phone
});
},
getReturnCount(){
let that = this
if(this.type == 'worker'){
this.searchCountForm.linkId = uni.getStorageSync('worker').workerId
}else{
this.searchCountForm.linkId = uni.getStorageSync('shopId')
}
this.tui.request("/mall/refund/page", "POST", this.searchCountForm, false, false).then((res) => {
if (res.code == 200 && res.result != null) {
that.returnCount = res.result.records.length;
that.returnData = res.result.records
that.$forceUpdate();
} else {
that.tui.toast(res.message);
return;
}
uni.hideLoading();
}).catch((res) => {});
},
returnAmountAllow(item,status){
let titleText = status == 1 ? '确定同意该申请吗?' : '确定拒绝该申请吗?';
//退
if(item.groupOrderIds != null && item.groupOrderIds != ''){
titleText += '该订单为面对面配送单,所有参团订单将同步处理';
for(let i = 0; i < this.returnData.length;i++){
if(item.groupOrderIds.indexOf(this.returnData[i].mallOrder.id) != -1){
//
this.groupOrderIdList.push(this.returnData[i]);
}
}
}else{
this.groupOrderIdList = []
}
// 2.
uni.showModal({
title: '提示',
content: titleText,
success: (res) => {
if (res.confirm) {
if(this.groupOrderIdList != [] && this.groupOrderIdList.length > 0){
for(let i = 0; i < this.groupOrderIdList.length;i++){
this.processReturn(this.groupOrderIdList[i], status);
}
}else{
this.processReturn(item, status);
}
}
}
});
},
processReturn(item,status){
let url = ''
//退
if(item.status == 0){
//
if(status == 0){
this.returnFormData.status = 2
}else{
this.returnFormData.status = 1
}
}else if(item.status == 3){
//
if(status == 0){
this.returnFormData.status = 5
}else{
this.returnFormData.status = 4
}
}
this.returnFormData.id = item.id;
this.returnFormData.linkId = item.linkId;
this.returnFormData.orderId = item.orderId;
this.returnFormData.deliveryType = item.mallOrder.deliveryType;
this.returnFormData.orderType = item.mallOrder.orderType;
this.returnFormData.refundAmount = item.refundAmount;
this.returnFormData.refundType = item.refundType;
this.returnFormData.refundTypeStatus = item.refundTypeStatus;
let that = this
this.tui.request("/mall/refund/allowOrReject", "POST", this.returnFormData, false, false).then((res) => {
if (res.code == 200) {
that.tui.toast(res.message);
this.getReturnCount()
that.$forceUpdate();
} else {
that.tui.toast(res.message);
return;
}
uni.hideLoading();
}).catch((res) => {});
},
back() {
uni.navigateBack()
},
}
}
</script>
<style lang="scss">
page {
width: 100%;
height: 100%;
font-size: 24rpx;
background: #F5F8F5;
color: #00231C;
}
.page1 {
width: 100%;
height: 100%;
font-size: 24rpx;
position: relative;
}
.title {
background: url('https://jewel-shop.oss-cn-beijing.aliyuncs.com/8bc15960c2dc40268e295d6dd23aecce.png') no-repeat;
width: 100%;
height: 20%;
}
.title-sreach {
width: 100%;
display: flex;
height: 200rpx;
position: relative;
}
.back-btn {
position: absolute;
bottom: 0;
left: 0;
}
.title-name {
padding-top: 110rpx;
font-size: 36rpx;
font-weight: 700;
flex: 1;
text-align: center;
}
.content{
margin: -100rpx auto;
}
.box1 {
width: 95%;
margin: 20rpx auto;
background: #fff;
border-radius: 20rpx;
padding: 20rpx;
}
.btn{
background: linear-gradient(90deg, rgba(227, 255, 150, 1), rgba(166, 255, 234, 1));
padding:0 20rpx;
height: 50rpx;
border-radius: 14rpx;
line-height: 50rpx;
text-align: center;
font-weight: 700;
margin-top: 20rpx;
}
.popup-area-title {
font-size: 36rpx;
font-weight: bold;
text-align: center;
position: relative;
}
.popup-area-content {
align-items: center;
justify-content: center;
padding: 30rpx;
width: 500rpx;
height: auto;
background-color: #fff;
}
.goods-img {
width: 160rpx;
height: 160rpx;
position: relative;
img {
width: 100%;
background-size: 100%;
height: 100%;
border-radius: 20rpx;
}
}
.pinzi{
margin: 20rpx 0;
background: linear-gradient(90deg, #FF4500, #FFA07A);
width: 40rpx;
height: 40rpx;
line-height: 40rpx;
text-align: center;
border-radius: 10rpx;
color: #fff;
}
.goods-content {
flex: 1;
padding-left: 20rpx;
}
.goods-name {
font-size: 32rpx;
font-weight: 900;
}
.goods-content-center {
display: flex;
margin: 16rpx 0;
color: #777;
}
.guize-list {
width: 100%;
padding: 20rpx;
overflow: scroll;
background: #fff;
max-height: 1000rpx;
line-height: 25px;
}
.pt-title{
font-size: 28rpx;
font-weight: 700;
color: #777;
}
.dingdan{
border-top: 1px solid #eee;
}
.uni-popup__wrapper{
border-radius: 20rpx !important;
}
.pituan-text{
flex:1;
text-align:right;
padding-right:20rpx;
font-weight: 700;
}
</style>

4
package2/shop/merchantCenter.vue

@ -31,7 +31,7 @@
</view> </view>
<view class="order2"> <view class="order2">
<view class="order22"> <view class="order22">
<view class="order33" @tap="goDetail('db',3)"> <view class="order33" @tap="goDetail('db',13)">
<view class="order44"> <view class="order44">
{{daichucan}} {{daichucan}}
</view> </view>
@ -278,7 +278,7 @@
break; break;
case 'tui': case 'tui':
uni.navigateTo({ uni.navigateTo({
url: '/package2/partTimeJob/partTimeJobCenter?type=shop' url: '/package2/shop/afterService?type=shop'
}) })
break; break;
case 'zd': case 'zd':

289
package2/shop/ranking.vue

@ -0,0 +1,289 @@
<template>
<view>
<view class="title">
<view class="title-sreach">
<view class="back-btn" @tap="back" :style="{'top': menuButtonInfo.top +'px'}">
<uni-icons type="left" size="28"></uni-icons>
</view>
<view class="title-name" :style="{'padding-top': menuButtonInfo.top +'px'}">
兼职中心
</view>
</view>
</view>
<uni-notice-bar show-icon scrollable text="送单奖励活动开启:截止到当日24时,送单量前五名有额外奖励,奖励金额从高到低为20元/10元/8.8元/6.6元/5元,抓紧送单的奖励吧!" />
<uni-datetime-picker style="margin-bottom:10px;" v-model="range" @change="searchList" type="daterange" />
<view class="paiming">
<view style="width: 200rpx;height: 100rpx;position: absolute;bottom: 30%;left: 6%;text-align: center;color: #fff;font-size: 34rpx;font-weight: bold;">
<view>
{{fireList[2].productName == undefined?'':fireList[2].productName}}
</view>
<view style="line-height: 60rpx;">
{{fireList[2].totalSold == undefined?'':fireList[2].totalSold}}
</view>
</view>
<view style="width: 200rpx;height: 100rpx;position: absolute;top: 50%;left: 37%;text-align: center;color: #fff;font-size: 34rpx;font-weight: bold;">
<view>
{{fireList[0].productName == undefined?'':fireList[0].productName}}
</view>
<view style="line-height: 60rpx;">
{{fireList[0].totalSold == undefined?'':fireList[0].totalSold}}
</view>
</view>
<view style="width: 200rpx;height: 100rpx;position: absolute;bottom: 27%;right: 6%;text-align: center;color: #fff;font-size: 34rpx;font-weight: bold;">
<view>
{{fireList[1].productName == undefined?'':fireList[1].productName}}
</view>
<view style="line-height: 60rpx;">
{{fireList[1].totalSold == undefined?'':fireList[1].totalSold}}
</view>
</view>
</view>
<view class="content-list">
<view v-for="(item,index) in fireList" :key="index" class="content-item">
<view v-if="index == 0" style="justify-content: center;align-items: center;display: flex;">
<uni-icons type="medal-filled" size='22' color="#fcdb56"></uni-icons>
</view>
<view v-if="index == 1" style="justify-content: center;align-items: center;display: flex;">
<uni-icons type="medal-filled" size='22' color="#dedee0"></uni-icons>
</view>
<view v-if="index == 2" style="justify-content: center;align-items: center;display: flex;">
<uni-icons type="medal-filled" size='22' color="#f6bf6f"></uni-icons>
</view>
<view v-if="index != 0 && index != 1 && index != 2" style="width: 44rpx;justify-content: center;align-items: center;display: flex;">{{index + 1}}</view>
<view class="box-left" @tap.stop="largeImg(item)">
<img :src="item.productPicture" alt="" v-if="item.productPicture">
<view class="noPic" v-else>暂无图片</view>
</view>
<view class="box-right">
<view class="box-right-num">{{item.productName == null?'暂无':item.productName}}</view>
<view class="box-right-name">{{item.totalSold}}</view>
</view>
</view>
<u-loadmore :status="status" />
</view>
<!-- 弹出多图轮播 -->
<uni-popup ref="imgPopup" background-color="#fff">
<view class="showImg-box">
<swiper indicator-dots class="swiper-box" @change="lunbochange" circular autoplay :current="swiperDotIndex">
<swiper-item v-for="(item, index) in bigImg" :key="index">
<view class="swiper-item">
<image mode='aspectFit' show-menu-by-longpress :src="item.productPicture" alt="" style="width: 100%;height: 100%;border-radius: 10px;" /></image>
</view>
</swiper-item>
</swiper>
</view>
</uni-popup>
</view>
</template>
<script>
export default {
data() {
return {
menuButtonInfo: {},
range:[],
status: 'loadmore',
fireList:[],
pageNum:1,
pages:1,
indexList: [],
bigImg:[],
swiperDotIndex:0,
};
},
onShow(){
this.getMonth()
this.getFireList()
this.menuButtonInfo = uni.getMenuButtonBoundingClientRect()
},
onReachBottom() {
if (this.pageNum >= this.pages) return;
this.status = 'loading';
this.pageNum ++;
this.getFireList();
},
methods: {
lunbochange(e) {
this.current = e.detail.current
},
getFireList(){
this.tui.request("/app/product/getShareList", "POST", {
categoryId: "",
searchStr: "",
pageNum: this.pageNum,
pageSize: '10',
sortField:"totalSold",
startDate:this.range[0],
endDate:this.range[1]
}, false, false).then((res) => {
if (res.code == 200) {
this.status = 'nomore';
if (this.pages == 1) {
this.fireList = res.result.records
} else {
this.fireList = [...this.fireList, ...res.result.records]
}
this.pages = res.result.pages
} else {
this.tui.toast(res.message)
}
}).catch((res) => {})
},
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)){
this.tui.toast("暂无可展示的图片",300)
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">
.paiming{
background: url('https://jewel-shop.oss-cn-beijing.aliyuncs.com/a07b86e1b1c74c88ac42dcc8a592980c.jpg') no-repeat;
width: 100%;
height: 680rpx;
background-size: 100%;
position: relative;
z-index: 97;
}
.content-list{
width: 90%;
overflow: scroll;
border-radius: 20rpx;
background: #fff;
margin: -50rpx auto 0;
position: relative;
z-index: 98;
}
.content-item{
height: 180rpx;
width: 100%;
padding: 0 20rpx;
font-size: 32rpx;
border-bottom: 1px solid #eee;
display: flex;
}
.box-left {
width: 130rpx;
height: 131rpx;
background-size: 100%;
margin: 25rpx 30rpx 25rpx 10rpx;
}
.box-left img {
width: 100%;
height: 100%;
border-radius: 131rpx;
}
.box-right {
margin-top: 17rpx;
padding-top:30rpx;
}
.box-right-price {
display: flex;
font-size: 25rpx;
}
.noPic{
border-radius: 10px;
width: 140rpx;
height: 140rpx;
// margin: 30rpx 0 0 30rpx;
text-align: center;
line-height: 140rpx;
color: #777;
background: #eee;
}
.box-right-num {
padding: 5rpx 0;
color: #000;
font-weight: bold;
font-size: 30rpx;
}
.box-right-name {
font-size: 26rpx;
height: 50rpx;
line-height: 50rpx;
}
.showImg-box{
width: 700rpx;
height: 1000rpx;
border-radius: 10px;
}
.swiper-box {
height: 1000rpx;
}
.swiper-item {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
height: 1000rpx;
color: #fff;
background-color: #cee1fd;
border-radius: 10px;
}
.title {
background: url('https://jewel-shop.oss-cn-beijing.aliyuncs.com/8bc15960c2dc40268e295d6dd23aecce.png') no-repeat;
width: 100%;
height: 20%;
}
.title-sreach {
width: 100%;
display: flex;
height: 200rpx;
position: relative;
}
.back-btn {
position: absolute;
bottom: 0;
left: 0;
}
.title-name {
padding-top: 110rpx;
font-size: 36rpx;
font-weight: 700;
flex: 1;
text-align: center;
}
</style>

12
pages.json

@ -245,6 +245,12 @@
"navigationBarTitleText": "商家中心", "navigationBarTitleText": "商家中心",
"navigationStyle": "custom" "navigationStyle": "custom"
} }
},{
"path": "shop/ranking",
"style": {
"navigationBarTitleText": "排名中心",
"navigationStyle": "custom"
}
},{ },{
"path": "shop/shopBill", "path": "shop/shopBill",
"style": { "style": {
@ -263,6 +269,12 @@
"navigationBarTitleText": "商家订单", "navigationBarTitleText": "商家订单",
"navigationStyle": "custom" "navigationStyle": "custom"
} }
},{
"path": "shop/afterService",
"style": {
"navigationBarTitleText": "售后处理",
"navigationStyle": "custom"
}
},{ },{
"path": "partTimeJob/partTimeJobCenter", "path": "partTimeJob/partTimeJobCenter",
"style": { "style": {

2
pages/index/index.vue

@ -1213,7 +1213,7 @@
margin-top: 40rpx; margin-top: 40rpx;
background: #F5F8F5; background: #F5F8F5;
position: relative; position: relative;
z-index:100 z-index:99
} }
.menu-list { .menu-list {

2
uni_modules/uni-combox/components/uni-combox/uni-combox.vue

@ -153,7 +153,7 @@
font-size: 14px; font-size: 14px;
border: 1px solid #DCDFE6; border: 1px solid #DCDFE6;
border-radius: 4px; border-radius: 4px;
padding: 6px 10px; padding: 10px 10px;
position: relative; position: relative;
/* #ifndef APP-NVUE */ /* #ifndef APP-NVUE */
display: flex; display: flex;

30
uni_modules/uni-countdown/changelog.md

@ -0,0 +1,30 @@
## 1.2.5(2025-04-14)
- 修复 filterShow 导致的运行报错
## 1.2.4(2024-09-21)
- 新增 支持控制显示位数 默认显示2位
## 1.2.3(2024-02-20)
- 新增 支持控制小时,分钟的显隐:showHour showMinute
## 1.2.2(2022-01-19)
- 修复 在微信小程序中样式不生效的bug
## 1.2.1(2022-01-18)
- 新增 update 方法 ,在动态更新时间后,刷新组件
## 1.2.0(2021-11-19)
- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-countdown](https://uniapp.dcloud.io/component/uniui/uni-countdown)
## 1.1.3(2021-10-18)
- 重构
- 新增 font-size 支持自定义字体大小
## 1.1.2(2021-08-24)
- 新增 支持国际化
## 1.1.1(2021-07-30)
- 优化 vue3下小程序事件警告的问题
## 1.1.0(2021-07-30)
- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
## 1.0.5(2021-06-18)
- 修复 uni-countdown 重复赋值跳两秒的 bug
## 1.0.4(2021-05-12)
- 新增 组件示例地址
## 1.0.3(2021-05-08)
- 修复 uni-countdown 不能控制倒计时的 bug
## 1.0.2(2021-02-04)
- 调整为uni_modules目录规范

6
uni_modules/uni-countdown/components/uni-countdown/i18n/en.json

@ -0,0 +1,6 @@
{
"uni-countdown.day": "day",
"uni-countdown.h": "h",
"uni-countdown.m": "m",
"uni-countdown.s": "s"
}

8
uni_modules/uni-countdown/components/uni-countdown/i18n/index.js

@ -0,0 +1,8 @@
import en from './en.json'
import zhHans from './zh-Hans.json'
import zhHant from './zh-Hant.json'
export default {
en,
'zh-Hans': zhHans,
'zh-Hant': zhHant
}

6
uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hans.json

@ -0,0 +1,6 @@
{
"uni-countdown.day": "天",
"uni-countdown.h": "时",
"uni-countdown.m": "分",
"uni-countdown.s": "秒"
}

6
uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hant.json

@ -0,0 +1,6 @@
{
"uni-countdown.day": "天",
"uni-countdown.h": "時",
"uni-countdown.m": "分",
"uni-countdown.s": "秒"
}

278
uni_modules/uni-countdown/components/uni-countdown/uni-countdown.vue

@ -0,0 +1,278 @@
<template>
<view class="uni-countdown">
<text v-if="showDay" :style="[timeStyle]" class="uni-countdown__number">{{ d }}</text>
<text v-if="showDay" :style="[splitorStyle]" class="uni-countdown__splitor">{{dayText}}</text>
<text v-if="showHour" :style="[timeStyle]" class="uni-countdown__number">{{ h }}</text>
<text v-if="showHour" :style="[splitorStyle]" class="uni-countdown__splitor">{{ showColon ? ':' : hourText }}</text>
<text v-if="showMinute" :style="[timeStyle]" class="uni-countdown__number">{{ i }}</text>
<text v-if="showMinute" :style="[splitorStyle]" class="uni-countdown__splitor">{{ showColon ? ':' : minuteText }}</text>
<text :style="[timeStyle]" class="uni-countdown__number">{{ s }}</text>
<text v-if="!showColon" :style="[splitorStyle]" class="uni-countdown__splitor">{{secondText}}</text>
</view>
</template>
<script>
import {
initVueI18n
} from '@dcloudio/uni-i18n'
import messages from './i18n/index.js'
const {
t
} = initVueI18n(messages)
/**
* Countdown 倒计时
* @description 倒计时组件
* @tutorial https://ext.dcloud.net.cn/plugin?id=25
* @property {String} backgroundColor 背景色
* @property {String} color 文字颜色
* @property {Number} day 天数
* @property {Number} hour 小时
* @property {Number} minute 分钟
* @property {Number} second
* @property {Number} timestamp 时间戳
* @property {Boolean} showDay = [true|false] 是否显示天数
* @property {Boolean} showHour = [true|false] 是否显示小时
* @property {Boolean} showMinute = [true|false] 是否显示分钟
* @property {Boolean} show-colon = [true|false] 是否以冒号为分隔符
* @property {String} splitorColor 分割符号颜色
* @event {Function} timeup 倒计时时间到触发事件
* @example <uni-countdown :day="1" :hour="1" :minute="12" :second="40"></uni-countdown>
*/
export default {
name: 'UniCountdown',
emits: ['timeup'],
props: {
showDay: {
type: Boolean,
default: true
},
showHour: {
type: Boolean,
default: true
},
showMinute: {
type: Boolean,
default: true
},
showColon: {
type: Boolean,
default: true
},
start: {
type: Boolean,
default: true
},
backgroundColor: {
type: String,
default: ''
},
color: {
type: String,
default: '#333'
},
fontSize: {
type: Number,
default: 14
},
splitorColor: {
type: String,
default: '#333'
},
day: {
type: Number,
default: 0
},
hour: {
type: Number,
default: 0
},
minute: {
type: Number,
default: 0
},
second: {
type: Number,
default: 0
},
timestamp: {
type: Number,
default: 0
},
filterShow : {
type:Object,
default () {
return {}
}
}
},
data() {
return {
timer: null,
syncFlag: false,
d: '00',
h: '00',
i: '00',
s: '00',
leftTime: 0,
seconds: 0
}
},
computed: {
dayText() {
return t("uni-countdown.day")
},
hourText(val) {
return t("uni-countdown.h")
},
minuteText(val) {
return t("uni-countdown.m")
},
secondText(val) {
return t("uni-countdown.s")
},
timeStyle() {
const {
color,
backgroundColor,
fontSize
} = this
return {
color,
backgroundColor,
fontSize: `${fontSize}px`,
width: `${fontSize * 22 / 14}px`, // 14px
lineHeight: `${fontSize * 20 / 14}px`,
borderRadius: `${fontSize * 3 / 14}px`,
}
},
splitorStyle() {
const { splitorColor, fontSize, backgroundColor } = this
return {
color: splitorColor,
fontSize: `${fontSize * 12 / 14}px`,
margin: backgroundColor ? `${fontSize * 4 / 14}px` : ''
}
}
},
watch: {
day(val) {
this.changeFlag()
},
hour(val) {
this.changeFlag()
},
minute(val) {
this.changeFlag()
},
second(val) {
this.changeFlag()
},
start: {
immediate: true,
handler(newVal, oldVal) {
if (newVal) {
this.startData();
} else {
if (!oldVal) return
clearInterval(this.timer)
}
}
}
},
created: function(e) {
this.seconds = this.toSeconds(this.timestamp, this.day, this.hour, this.minute, this.second)
this.countDown()
},
// #ifndef VUE3
destroyed() {
clearInterval(this.timer)
},
// #endif
// #ifdef VUE3
unmounted() {
clearInterval(this.timer)
},
// #endif
methods: {
toSeconds(timestamp, day, hours, minutes, seconds) {
if (timestamp) {
return timestamp - parseInt(new Date().getTime() / 1000, 10)
}
return day * 60 * 60 * 24 + hours * 60 * 60 + minutes * 60 + seconds
},
timeUp() {
clearInterval(this.timer)
this.$emit('timeup')
},
countDown() {
let seconds = this.seconds
let [day, hour, minute, second] = [0, 0, 0, 0]
if (seconds > 0) {
day = Math.floor(seconds / (60 * 60 * 24))
hour = Math.floor(seconds / (60 * 60)) - (day * 24)
minute = Math.floor(seconds / 60) - (day * 24 * 60) - (hour * 60)
second = Math.floor(seconds) - (day * 24 * 60 * 60) - (hour * 60 * 60) - (minute * 60)
} else {
this.timeUp()
}
this.d = String(day).padStart(this.validFilterShow(this.filterShow.d), '0')
this.h = String(hour).padStart(this.validFilterShow(this.filterShow.h), '0')
this.i = String(minute).padStart(this.validFilterShow(this.filterShow.m), '0')
this.s = String(second).padStart(this.validFilterShow(this.filterShow.s), '0')
},
validFilterShow(filter){
return (filter && filter > 0) ? filter : 2;
},
startData() {
this.seconds = this.toSeconds(this.timestamp, this.day, this.hour, this.minute, this.second)
if (this.seconds <= 0) {
this.seconds = this.toSeconds(0, 0, 0, 0, 0)
this.countDown()
return
}
clearInterval(this.timer)
this.countDown()
this.timer = setInterval(() => {
this.seconds--
if (this.seconds < 0) {
this.timeUp()
return
}
this.countDown()
}, 1000)
},
update(){
this.startData();
},
changeFlag() {
if (!this.syncFlag) {
this.seconds = this.toSeconds(this.timestamp, this.day, this.hour, this.minute, this.second)
this.startData();
this.syncFlag = true;
}
}
}
}
</script>
<style lang="scss" scoped>
$font-size: 14px;
.uni-countdown {
display: flex;
flex-direction: row;
justify-content: flex-start;
align-items: center;
&__splitor {
margin: 0 2px;
font-size: $font-size;
color: #333;
}
&__number {
border-radius: 3px;
text-align: center;
font-size: $font-size;
}
}
</style>

86
uni_modules/uni-countdown/package.json

@ -0,0 +1,86 @@
{
"id": "uni-countdown",
"displayName": "uni-countdown 倒计时",
"version": "1.2.5",
"description": "CountDown 倒计时组件",
"keywords": [
"uni-ui",
"uniui",
"countdown",
"倒计时"
],
"repository": "https://github.com/dcloudio/uni-ui",
"engines": {
"HBuilderX": ""
},
"directories": {
"example": "../../temps/example_temps"
},
"dcloudext": {
"sale": {
"regular": {
"price": "0.00"
},
"sourcecode": {
"price": "0.00"
}
},
"contact": {
"qq": ""
},
"declaration": {
"ads": "无",
"data": "无",
"permissions": "无"
},
"npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
"type": "component-vue"
},
"uni_modules": {
"dependencies": ["uni-scss"],
"encrypt": [],
"platforms": {
"cloud": {
"tcb": "y",
"aliyun": "y",
"alipay": "n"
},
"client": {
"App": {
"app-vue": "y",
"app-nvue": "y",
"app-harmony": "u",
"app-uvue": "u"
},
"H5-mobile": {
"Safari": "y",
"Android Browser": "y",
"微信浏览器(Android)": "y",
"QQ浏览器(Android)": "y"
},
"H5-pc": {
"Chrome": "y",
"IE": "y",
"Edge": "y",
"Firefox": "y",
"Safari": "y"
},
"小程序": {
"微信": "y",
"阿里": "y",
"百度": "y",
"字节跳动": "y",
"QQ": "y"
},
"快应用": {
"华为": "u",
"联盟": "u"
},
"Vue": {
"vue2": "y",
"vue3": "y"
}
}
}
}
}

10
uni_modules/uni-countdown/readme.md

@ -0,0 +1,10 @@
## CountDown 倒计时
> **组件名:uni-countdown**
> 代码块: `uCountDown`
倒计时组件。
### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-countdown)
#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839

22
uni_modules/uni-notice-bar/changelog.md

@ -0,0 +1,22 @@
## 1.2.3(2025-04-14)
- 新增 左侧自定义插槽,可自定义文字或图标
## 1.2.2(2023-12-20)
- 修复动态绑定title时,滚动速度不一致的问题
## 1.2.1(2022-09-05)
- 新增 属性 fontSize,可修改文字大小。
## 1.2.0(2021-11-19)
- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-notice-bar](https://uniapp.dcloud.io/component/uniui/uni-notice-bar)
## 1.1.1(2021-11-09)
- 新增 提供组件设计资源,组件样式调整
## 1.1.0(2021-07-30)
- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
## 1.0.9(2021-05-12)
- 新增 组件示例地址
## 1.0.8(2021-04-21)
- 优化 添加依赖 uni-icons, 导入后自动下载依赖
## 1.0.7(2021-02-05)
- 优化 组件引用关系,通过uni_modules引用组件
## 1.0.6(2021-02-05)
- 调整为uni_modules目录规范

423
uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue

@ -0,0 +1,423 @@
<template>
<view v-if="show" class="uni-noticebar" :style="{ backgroundColor }" @click="onClick">
<slot v-if="showIcon === true || showIcon === 'true'" name="noticebarIcon">
<uni-icons class="uni-noticebar-icon" type="sound" :color="color" :size="fontSize * 1.5" />
</slot>
<view ref="textBox" class="uni-noticebar__content-wrapper" :class="{
'uni-noticebar__content-wrapper--scrollable': scrollable,
'uni-noticebar__content-wrapper--single': !scrollable && (single || moreText)
}" :style="{ height: scrollable ? fontSize * 1.5 + 'px' : 'auto' }">
<view :id="elIdBox" class="uni-noticebar__content" :class="{
'uni-noticebar__content--scrollable': scrollable,
'uni-noticebar__content--single': !scrollable && (single || moreText)
}">
<text :id="elId" ref="animationEle" class="uni-noticebar__content-text" :class="{
'uni-noticebar__content-text--scrollable': scrollable,
'uni-noticebar__content-text--single': !scrollable && (single || showGetMore)
}" :style="{
color: color,
fontSize: fontSize + 'px',
lineHeight: fontSize * 1.5 + 'px',
width: wrapWidth + 'px',
'animationDuration': animationDuration,
'-webkit-animationDuration': animationDuration,
animationPlayState: webviewHide ? 'paused' : animationPlayState,
'-webkit-animationPlayState': webviewHide ? 'paused' : animationPlayState,
animationDelay: animationDelay,
'-webkit-animationDelay': animationDelay
}">{{text}}</text>
</view>
</view>
<view v-if="isShowGetMore" class="uni-noticebar__more uni-cursor-point" @click="clickMore">
<text v-if="moreText.length > 0" :style="{ color: moreColor, fontSize: fontSize + 'px' }">{{ moreText }}</text>
<uni-icons v-else type="right" :color="moreColor" :size="fontSize * 1.1" />
</view>
<view class="uni-noticebar-close uni-cursor-point" v-if="isShowClose">
<uni-icons type="closeempty" :color="color" :size="fontSize * 1.1" @click="close" />
</view>
</view>
</template>
<script>
// #ifdef APP-NVUE
const dom = weex.requireModule('dom');
const animation = weex.requireModule('animation');
// #endif
/**
* NoticeBar 自定义导航栏
* @description 通告栏组件
* @tutorial https://ext.dcloud.net.cn/plugin?id=30
* @property {Number} speed 文字滚动的速度默认100px/
* @property {String} text 显示文字
* @property {String} backgroundColor 背景颜色
* @property {String} color 文字颜色
* @property {String} moreColor 查看更多文字的颜色
* @property {String} moreText 设置查看更多的文本
* @property {Boolean} single = [true|false] 是否单行
* @property {Boolean} scrollable = [true|false] 是否滚动为true时NoticeBar为单行
* @property {Boolean} showIcon = [true|false] 是否显示左侧喇叭图标
* @property {Boolean} showClose = [true|false] 是否显示左侧关闭按钮
* @property {Boolean} showGetMore = [true|false] 是否显示右侧查看更多图标为true时NoticeBar为单行
* @event {Function} click 点击 NoticeBar 触发事件
* @event {Function} close 关闭 NoticeBar 触发事件
* @event {Function} getmore 点击查看更多时触发事件
*/
export default {
name: 'UniNoticeBar',
emits: ['click', 'getmore', 'close'],
props: {
text: {
type: String,
default: ''
},
moreText: {
type: String,
default: ''
},
backgroundColor: {
type: String,
default: '#FFF9EA'
},
speed: {
// 1s100px
type: Number,
default: 100
},
color: {
type: String,
default: '#FF9A43'
},
fontSize: {
type: Number,
default: 14
},
moreColor: {
type: String,
default: '#FF9A43'
},
single: {
//
type: [Boolean, String],
default: false
},
scrollable: {
//
type: [Boolean, String],
default: false
},
showIcon: {
// icon
type: [Boolean, String],
default: false
},
showGetMore: {
//
type: [Boolean, String],
default: false
},
showClose: {
//
type: [Boolean, String],
default: false
}
},
data() {
const elId = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}`
const elIdBox = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}`
return {
textWidth: 0,
boxWidth: 0,
wrapWidth: '',
webviewHide: false,
// #ifdef APP-NVUE
stopAnimation: false,
// #endif
elId: elId,
elIdBox: elIdBox,
show: true,
animationDuration: 'none',
animationPlayState: 'paused',
animationDelay: '0s'
}
},
watch: {
text(newValue, oldValue) {
this.initSize();
}
},
computed: {
isShowGetMore() {
return this.showGetMore === true || this.showGetMore === 'true'
},
isShowClose() {
return (this.showClose === true || this.showClose === 'true') &&
(this.showGetMore === false || this.showGetMore === 'false')
}
},
mounted() {
// #ifdef APP-PLUS
var pages = getCurrentPages();
var page = pages[pages.length - 1];
var currentWebview = page.$getAppWebview();
currentWebview.addEventListener('hide', () => {
this.webviewHide = true
})
currentWebview.addEventListener('show', () => {
this.webviewHide = false
})
// #endif
this.$nextTick(() => {
this.initSize()
})
},
// #ifdef APP-NVUE
beforeDestroy() {
this.stopAnimation = true
},
// #endif
methods: {
initSize() {
if (this.scrollable) {
// #ifndef APP-NVUE
let query = [],
boxWidth = 0,
textWidth = 0;
let textQuery = new Promise((resolve, reject) => {
uni.createSelectorQuery()
// #ifndef MP-ALIPAY
.in(this)
// #endif
.select(`#${this.elId}`)
.boundingClientRect()
.exec(ret => {
this.textWidth = ret[0].width
resolve()
})
})
let boxQuery = new Promise((resolve, reject) => {
uni.createSelectorQuery()
// #ifndef MP-ALIPAY
.in(this)
// #endif
.select(`#${this.elIdBox}`)
.boundingClientRect()
.exec(ret => {
this.boxWidth = ret[0].width
resolve()
})
})
query.push(textQuery)
query.push(boxQuery)
Promise.all(query).then(() => {
this.animationDuration = `${this.textWidth / this.speed}s`
this.animationDelay = `-${this.boxWidth / this.speed}s`
setTimeout(() => {
this.animationPlayState = 'running'
}, 1000)
})
// #endif
// #ifdef APP-NVUE
dom.getComponentRect(this.$refs['animationEle'], (res) => {
let winWidth = uni.getSystemInfoSync().windowWidth
this.textWidth = res.size.width
animation.transition(this.$refs['animationEle'], {
styles: {
transform: `translateX(-${winWidth}px)`
},
duration: 0,
timingFunction: 'linear',
delay: 0
}, () => {
if (!this.stopAnimation) {
animation.transition(this.$refs['animationEle'], {
styles: {
transform: `translateX(-${this.textWidth}px)`
},
timingFunction: 'linear',
duration: (this.textWidth - winWidth) / this.speed * 1000,
delay: 1000
}, () => {
if (!this.stopAnimation) {
this.loopAnimation()
}
});
}
});
})
// #endif
}
// #ifdef APP-NVUE
if (!this.scrollable && (this.single || this.moreText)) {
dom.getComponentRect(this.$refs['textBox'], (res) => {
this.wrapWidth = res.size.width
})
}
// #endif
},
loopAnimation() {
// #ifdef APP-NVUE
animation.transition(this.$refs['animationEle'], {
styles: {
transform: `translateX(0px)`
},
duration: 0
}, () => {
if (!this.stopAnimation) {
animation.transition(this.$refs['animationEle'], {
styles: {
transform: `translateX(-${this.textWidth}px)`
},
duration: this.textWidth / this.speed * 1000,
timingFunction: 'linear',
delay: 0
}, () => {
if (!this.stopAnimation) {
this.loopAnimation()
}
});
}
});
// #endif
},
clickMore() {
this.$emit('getmore')
},
close() {
this.show = false;
this.$emit('close')
},
onClick() {
this.$emit('click')
}
}
}
</script>
<style lang="scss" scoped>
.uni-noticebar {
/* #ifndef APP-NVUE */
display: flex;
width: 100%;
box-sizing: border-box;
/* #endif */
flex-direction: row;
align-items: center;
padding: 10px 12px;
margin-bottom: 10px;
}
.uni-cursor-point {
/* #ifdef H5 */
cursor: pointer;
/* #endif */
}
.uni-noticebar-close {
margin-left: 8px;
margin-right: 5px;
}
.uni-noticebar-icon {
margin-right: 5px;
}
.uni-noticebar__content-wrapper {
flex: 1;
flex-direction: column;
overflow: hidden;
}
.uni-noticebar__content-wrapper--single {
/* #ifndef APP-NVUE */
line-height: 18px;
/* #endif */
}
.uni-noticebar__content-wrapper--single,
.uni-noticebar__content-wrapper--scrollable {
flex-direction: row;
}
/* #ifndef APP-NVUE */
.uni-noticebar__content-wrapper--scrollable {
position: relative;
}
/* #endif */
.uni-noticebar__content--scrollable {
/* #ifdef APP-NVUE */
flex: 0;
/* #endif */
/* #ifndef APP-NVUE */
flex: 1;
display: block;
overflow: hidden;
/* #endif */
}
.uni-noticebar__content--single {
/* #ifndef APP-NVUE */
display: flex;
flex: none;
width: 100%;
justify-content: center;
/* #endif */
}
.uni-noticebar__content-text {
font-size: 14px;
line-height: 18px;
/* #ifndef APP-NVUE */
word-break: break-all;
/* #endif */
}
.uni-noticebar__content-text--single {
/* #ifdef APP-NVUE */
lines: 1;
/* #endif */
/* #ifndef APP-NVUE */
display: block;
width: 100%;
white-space: nowrap;
/* #endif */
overflow: hidden;
text-overflow: ellipsis;
}
.uni-noticebar__content-text--scrollable {
/* #ifdef APP-NVUE */
lines: 1;
padding-left: 750rpx;
/* #endif */
/* #ifndef APP-NVUE */
position: absolute;
display: block;
height: 18px;
line-height: 18px;
white-space: nowrap;
padding-left: 100%;
animation: notice 10s 0s linear infinite both;
animation-play-state: paused;
/* #endif */
}
.uni-noticebar__more {
/* #ifndef APP-NVUE */
display: inline-flex;
/* #endif */
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
padding-left: 5px;
}
@keyframes notice {
100% {
transform: translate3d(-100%, 0, 0);
}
}
</style>

90
uni_modules/uni-notice-bar/package.json

@ -0,0 +1,90 @@
{
"id": "uni-notice-bar",
"displayName": "uni-notice-bar 通告栏",
"version": "1.2.3",
"description": "NoticeBar 通告栏组件,常用于展示公告信息,可设为滚动公告",
"keywords": [
"uni-ui",
"uniui",
"通告栏",
"公告",
"跑马灯"
],
"repository": "https://github.com/dcloudio/uni-ui",
"engines": {
"HBuilderX": ""
},
"directories": {
"example": "../../temps/example_temps"
},
"dcloudext": {
"sale": {
"regular": {
"price": "0.00"
},
"sourcecode": {
"price": "0.00"
}
},
"contact": {
"qq": ""
},
"declaration": {
"ads": "无",
"data": "无",
"permissions": "无"
},
"npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
"type": "component-vue"
},
"uni_modules": {
"dependencies": [
"uni-scss",
"uni-icons"
],
"encrypt": [],
"platforms": {
"cloud": {
"tcb": "y",
"aliyun": "y",
"alipay": "n"
},
"client": {
"App": {
"app-vue": "y",
"app-nvue": "y",
"app-harmony": "u",
"app-uvue": "u"
},
"H5-mobile": {
"Safari": "y",
"Android Browser": "y",
"微信浏览器(Android)": "y",
"QQ浏览器(Android)": "y"
},
"H5-pc": {
"Chrome": "y",
"IE": "y",
"Edge": "y",
"Firefox": "y",
"Safari": "y"
},
"小程序": {
"微信": "y",
"阿里": "y",
"百度": "y",
"字节跳动": "y",
"QQ": "y"
},
"快应用": {
"华为": "u",
"联盟": "u"
},
"Vue": {
"vue2": "y",
"vue3": "y"
}
}
}
}
}

13
uni_modules/uni-notice-bar/readme.md

@ -0,0 +1,13 @@
## NoticeBar 通告栏
> **组件名:uni-notice-bar**
> 代码块: `uNoticeBar`
通告栏组件 。
### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-notice-bar)
#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
Loading…
Cancel
Save