10 Commits 6ef6851b36 ... f91c18d8d1

Autor SHA1 Mensagem Data
  RuHu.Xu f91c18d8d1 更新消费分模块 2 meses atrás
  RuHu.Xu 4f12496e57 消费分转账弹窗 2 meses atrás
  RuHu.Xu 54133d96c7 调整用户消费分充值,大于x元以上才获得x倍消费分 2 meses atrás
  RuHu.Xu f4fa9e15a4 更新钱包ui 2 meses atrás
  RuHu.Xu 817cff4a1f 新增内测用户函数,消费分充值只有内测用户才显示 2 meses atrás
  RuHu.Xu 279258e2da 更新用户自充值消费分 2 meses atrás
  RuHu.Xu b0986a5ad9 更新售后订单的按钮 2 meses atrás
  RuHu.Xu 434544394b 消费分模块接口加上请求提示 2 meses atrás
  RuHu.Xu d38973bc11 重新打包上一版本 2 meses atrás
  RuHu.Xu 5e4598b335 更新消费分 2 meses atrás
100 arquivos alterados com 2844 adições e 483 exclusões
  1. 63 2
      pages.json
  2. 33 26
      pages/goods/components/detail/detail-cell-sku.vue
  3. 3 2
      pages/goods/index.vue
  4. 5 3
      pages/index/index.vue
  5. 35 13
      pages/order/aftersale/detail.vue
  6. 1 1
      pages/order/aftersale/return-delivery.vue
  7. 51 9
      pages/order/confirm.vue
  8. 45 12
      pages/order/detail.vue
  9. 1 0
      pages/order/list.vue
  10. 391 305
      pages/pay/index.vue
  11. 9 9
      pages/pay/result.vue
  12. 27 11
      pages/pay/resultYuan.vue
  13. 278 0
      pages/user/wallet/consumptionLog.vue
  14. 487 0
      pages/user/wallet/consumptionTransfers.vue
  15. 282 0
      pages/user/wallet/consumptionTransfersLog.vue
  16. 71 34
      pages/user/wallet/score.vue
  17. 361 0
      pages/user/wallet/scoreToConsumption.vue
  18. 261 0
      pages/user/wallet/topupConsumptionPoints.vue
  19. 67 11
      pages/user/wallet/withdraw.vue
  20. 3 2
      pages/user/wallet/withdrawalLog.vue
  21. 51 0
      sheep/api/distri/consumption.js
  22. 13 0
      sheep/api/distri/withdrawal.js
  23. 7 0
      sheep/api/member/auth.js
  24. 10 1
      sheep/api/pay/order.js
  25. 12 1
      sheep/api/pay/wallet.js
  26. 4 4
      sheep/components/s-auth-modal/components/sms-login.vue
  27. 188 0
      sheep/components/s-consumptionPoints-pop/s-consumptionPoints-pop.vue
  28. 3 2
      sheep/components/s-points-pop/s-points-pop.vue
  29. 3 2
      sheep/components/s-wallet-card/s-wallet-card.vue
  30. 18 13
      sheep/components/s-wallet-modal/s-wallet-modal.vue
  31. 9 0
      sheep/hooks/useApp.js
  32. 18 0
      sheep/hooks/useGoods.js
  33. 6 2
      sheep/hooks/useModal.js
  34. 2 2
      sheep/platform/index.js
  35. 18 12
      sheep/platform/pay.js
  36. 3 0
      sheep/store/modal.js
  37. 2 1
      sheep/store/user.js
  38. 0 1
      unpackage/dist/build/web/assets/comment-item.2d6e4c2c.js
  39. 1 0
      unpackage/dist/build/web/assets/comment-item.8d4f6805.js
  40. 0 0
      unpackage/dist/build/web/assets/confirm-54e0d556.css
  41. 0 0
      unpackage/dist/build/web/assets/confirm-8c722113.css
  42. 1 1
      unpackage/dist/build/web/assets/const.856087f9.js
  43. 0 0
      unpackage/dist/build/web/assets/consumptionLog-eb91f19c.css
  44. 0 0
      unpackage/dist/build/web/assets/consumptionTransfers-4c8cb37f.css
  45. 0 0
      unpackage/dist/build/web/assets/consumptionTransfersLog-1c65a99d.css
  46. 0 0
      unpackage/dist/build/web/assets/detail-037dd82c.css
  47. 0 0
      unpackage/dist/build/web/assets/detail-4dd1a9c1.css
  48. 0 0
      unpackage/dist/build/web/assets/detail-50a5ec46.css
  49. 0 0
      unpackage/dist/build/web/assets/detail-b2feebd6.css
  50. 0 0
      unpackage/dist/build/web/assets/detail-content-card.d4ce4dc2.js
  51. 0 0
      unpackage/dist/build/web/assets/detail-content-card.fa06b7be.js
  52. 0 0
      unpackage/dist/build/web/assets/index-0ad3a2e0.js
  53. 1 0
      unpackage/dist/build/web/assets/index-5c5a85d7.css
  54. 0 1
      unpackage/dist/build/web/assets/index-9cb84373.css
  55. 0 0
      unpackage/dist/build/web/assets/index-f7195083.css
  56. 0 0
      unpackage/dist/build/web/assets/list-511fdd29.css
  57. 0 0
      unpackage/dist/build/web/assets/list-e7e17a52.css
  58. 0 0
      unpackage/dist/build/web/assets/md5.0e6d361f.js
  59. 0 0
      unpackage/dist/build/web/assets/mp-html.7c66f819.js
  60. 0 0
      unpackage/dist/build/web/assets/pages-activity-bargain-detail.c7432ec8.js
  61. 0 0
      unpackage/dist/build/web/assets/pages-activity-bargain-detail.e331bafc.js
  62. 0 0
      unpackage/dist/build/web/assets/pages-activity-bargain-list.9fe13808.js
  63. 0 0
      unpackage/dist/build/web/assets/pages-activity-groupon-detail.10469859.js
  64. 0 0
      unpackage/dist/build/web/assets/pages-activity-groupon-detail.34359fa7.js
  65. 0 0
      unpackage/dist/build/web/assets/pages-activity-groupon-list.963035ab.js
  66. 0 0
      unpackage/dist/build/web/assets/pages-activity-groupon-order.34a238d4.js
  67. 0 0
      unpackage/dist/build/web/assets/pages-activity-groupon-order.545572a8.js
  68. 0 0
      unpackage/dist/build/web/assets/pages-activity-index.3091f900.js
  69. 0 0
      unpackage/dist/build/web/assets/pages-activity-index.412e5eea.js
  70. 0 0
      unpackage/dist/build/web/assets/pages-activity-seckill-list.b5a7b15e.js
  71. 0 0
      unpackage/dist/build/web/assets/pages-activity-seckill-list.fc52721d.js
  72. 0 0
      unpackage/dist/build/web/assets/pages-app-sign.7830bf3b.js
  73. 0 0
      unpackage/dist/build/web/assets/pages-app-sign.be798a5d.js
  74. 0 0
      unpackage/dist/build/web/assets/pages-chat-index.73927f55.js
  75. 0 0
      unpackage/dist/build/web/assets/pages-chat-speechtotext.d3225f8b.js
  76. 0 0
      unpackage/dist/build/web/assets/pages-commission-commission-ranking.4f03ab89.js
  77. 0 0
      unpackage/dist/build/web/assets/pages-commission-commission-ranking.fd595222.js
  78. 0 0
      unpackage/dist/build/web/assets/pages-commission-goods.487234d7.js
  79. 0 0
      unpackage/dist/build/web/assets/pages-commission-goods.da97f9f9.js
  80. 0 0
      unpackage/dist/build/web/assets/pages-commission-index.992b7b11.js
  81. 0 0
      unpackage/dist/build/web/assets/pages-commission-index.b9a9691c.js
  82. 0 0
      unpackage/dist/build/web/assets/pages-commission-order.77633e14.js
  83. 0 0
      unpackage/dist/build/web/assets/pages-commission-order.f2306793.js
  84. 0 0
      unpackage/dist/build/web/assets/pages-commission-promoter.ca9af5e1.js
  85. 0 0
      unpackage/dist/build/web/assets/pages-commission-promoter.f519f0af.js
  86. 0 0
      unpackage/dist/build/web/assets/pages-commission-team.8e5ee61d.js
  87. 0 0
      unpackage/dist/build/web/assets/pages-commission-wallet.1e6681c0.js
  88. 0 0
      unpackage/dist/build/web/assets/pages-commission-withdraw.9d74cdc2.js
  89. 0 0
      unpackage/dist/build/web/assets/pages-coupon-detail.0fd6aea5.js
  90. 0 0
      unpackage/dist/build/web/assets/pages-coupon-detail.4aad141e.js
  91. 0 0
      unpackage/dist/build/web/assets/pages-coupon-list.33eb843d.js
  92. 0 0
      unpackage/dist/build/web/assets/pages-coupon-list.7631df54.js
  93. 0 0
      unpackage/dist/build/web/assets/pages-goods-comment-add.a2a8efb8.js
  94. 0 0
      unpackage/dist/build/web/assets/pages-goods-comment-add.a8011fae.js
  95. 0 0
      unpackage/dist/build/web/assets/pages-goods-comment-list.8a263efe.js
  96. 0 0
      unpackage/dist/build/web/assets/pages-goods-comment-list.9de0a575.js
  97. 0 0
      unpackage/dist/build/web/assets/pages-goods-groupon.002ae742.js
  98. 0 0
      unpackage/dist/build/web/assets/pages-goods-groupon.e89f3c9a.js
  99. 0 0
      unpackage/dist/build/web/assets/pages-goods-index.1f2653d2.js
  100. 0 0
      unpackage/dist/build/web/assets/pages-goods-index.9ea1aa14.js

+ 63 - 2
pages.json

@@ -395,12 +395,73 @@
 				{
 					"path": "wallet/score",
 					"style": {
-						"navigationBarTitleText": "我的佣金"
+						"navigationBarTitleText": "钱包"
 					},
 					"meta": {
 						"auth": true,
 						"sync": true,
-						"title": "用户佣金",
+						"title": "钱包",
+						"group": "用户中心"
+					}
+				},
+				{
+					"path": "wallet/consumptionLog",
+					"style": {
+						"navigationBarTitleText": "消费分来源"
+					},
+					"meta": {
+						"auth": true,
+						"sync": true,
+						"title": "消费分来源",
+						"group": "用户中心"
+					}
+				},
+				{
+					"path": "wallet/topupConsumptionPoints",
+					"style": {
+						"navigationBarTitleText": "消费分充值"
+					},
+					"meta": {
+						"auth": true,
+						"sync": true,
+						"title": "消费分充值",
+						"group": "用户中心"
+					}
+				},
+				{
+					"path": "wallet/consumptionTransfersLog",
+					"style": {
+						"navigationBarTitleText": "消费分转账"
+					},
+					"meta": {
+						"auth": true,
+						"sync": true,
+						"title": "消费分转账",
+						"group": "用户中心"
+					}
+				},
+				
+				{
+					"path": "wallet/consumptionTransfers",
+					"style": {
+						"navigationBarTitleText": "消费分转让"
+					},
+					"meta": {
+						"auth": true,
+						"sync": true,
+						"title": "消费分转让",
+						"group": "用户中心"
+					}
+				},
+				{
+					"path": "wallet/scoreToConsumption",
+					"style": {
+						"navigationBarTitleText": "佣金转消费分"
+					},
+					"meta": {
+						"auth": true,
+						"sync": true,
+						"title": "佣金转消费分",
 						"group": "用户中心"
 					}
 				},

+ 33 - 26
pages/goods/components/detail/detail-cell-sku.vue

@@ -1,31 +1,38 @@
 <template>
-  <!-- SKU 选择的提示框 -->
-  <detail-cell label="选择" :value="value" />
+	<!-- SKU 选择的提示框 -->
+
+	<detail-cell label="选择" :value="value" />
 </template>
 
 <script setup>
-  import { computed } from 'vue';
-  import detailCell from './detail-cell.vue';
+	import {
+		computed
+	} from 'vue';
+	import detailCell from './detail-cell.vue';
 
-  const props = defineProps({
-    modelValue: {
-      type: Array,
-      default() {
-        return [];
-      },
-    },
-    sku: {
-      type: Object
-    }
-  });
-  const value = computed(() => {
-    if (!props.sku?.id) {
-      return '请选择商品规格';
-    }
-    let str = '';
-    props.sku.properties.forEach(property => {
-      str += property.propertyName + ':' + property.valueName + ' ';
-    });
-    return str;
-  });
-</script>
+	const props = defineProps({
+		modelValue: {
+			type: Array,
+			default () {
+				return [];
+			},
+		},
+		sku: {
+			type: Object
+		}
+	});
+	const value = computed(() => {
+		if (!props.sku?.id) {
+			return '请选择商品规格';
+		}
+		let str = '';
+		props.sku.properties.forEach(property => {
+			if (property.valueName === property.propertyName) {
+				str += property.propertyName;
+			} else {
+				str += property.propertyName + ':' + property.valueName + ' ';
+			}
+		});
+		return str;
+	});
+</script>

+ 3 - 2
pages/goods/index.vue

@@ -60,6 +60,7 @@
 
 					<!-- 功能卡片 -->
 					<view class="detail-cell-card detail-card ss-flex-col">
+						
 						<detail-cell-sku v-model="state.selectedSku.goods_sku_text" :sku="state.selectedSku"
 							@tap="state.showSelectSku = true" />
 					</view>
@@ -280,7 +281,7 @@
 			// 加载到商品
 			state.skeletonLoading = false;
 			state.goodsInfo = res.data;
-			console.log(state.goodsInfo )
+			// console.log(state.goodsInfo )
 			if(!isLogin.value){
 				return;
 			}
@@ -348,7 +349,7 @@
 				} else if (activity.type === 5) { // 情况二:满减送
 					state.activityInfo.push(activity);
 				} else { // 情况三:限时折扣 TODO 芋艿
-					console.log('待实现!优先级不高');
+					// console.log('待实现!优先级不高');
 				}
 			})
 		});

+ 5 - 3
pages/index/index.vue

@@ -1,7 +1,7 @@
 <!-- 商城首页,支持店铺装修 -->
 <template>
 	<view v-if="template">
-		
+		{{android}}
 		<s-layout title="首页" navbar="custom" tabbar="/pages/index/index" :bgStyle="template.page"
 			:navbarStyle="template.style?.navbar" onShareAppMessage>
 			<s-block v-for="(item, index) in template.components" :key="index" :styles="item.property.style">
@@ -22,15 +22,17 @@
 	} from '@dcloudio/uni-app';
 	import sheep from '@/sheep';
 	import $share from '@/sheep/platform/share';
+	import { isAndroid } from '@/sheep/hooks/useApp'
 	import {
 		showWalletModal,
 		colseWalletModal
 	} from '@/sheep/hooks/useModal';
 	// 隐藏原生tabBar
 	uni.hideTabBar();
-
+	
 	const template = computed(() => sheep.$store('app').template?.home);
-
+	const android = computed(() => isAndroid());
+	// const identifier = window.Android && window.Android.getIdentifier();
 	// 在此处拦截改变一下首页轮播图 此处先写死后期复活 放到启动函数里
 	// (async function() {
 		// console.log('原代码首页定制化数据',template)

+ 35 - 13
pages/order/aftersale/detail.vue

@@ -42,15 +42,33 @@
 			</view>
 
 			<!-- 退款金额 -->
-			<view class="aftersale-money ss-flex ss-col-center ss-row-between">
-				<view class="aftersale-money--title">退款总额</view>
-				<view class="aftersale-money--num">¥{{ fen2yuan(state.info.refundPrice) }}</view>
+			<view class="aftersale-content ss-m-y-20">
+				<view class="aftersale-item ss-flex ss-col-center">
+					<view class="item-title">退款总额:</view>
+					<view class="item-content">
+						¥{{ fen2yuan(state.info.refundPriceTotal) }}
+					</view>
+				</view>
+				<view class="aftersale-item ss-flex ss-col-center">
+					<view class="item-title">退款金额:</view>
+					<view class="item-content">¥{{ fen2yuan(state.info.refundPrice) }}</view>
+				</view>
+				<view class="aftersale-item ss-flex ss-col-center">
+					<view class="item-title">退款佣金:</view>
+					<view class="item-content">¥{{ points2point(state.info.refundIntegral) }}</view>
+				</view>
+				<view class="aftersale-item ss-flex ss-col-center">
+					<view class="item-title">退款消费分:</view>
+					<view class="item-content">¥{{ points2point(state.info.refundConsumptionPoints) }}</view>
+				</view>
 			</view>
+			
 			<!-- 服务商品 -->
+			
 			<view class="order-shop">
-				<s-goods-item :img=" state.info.picUrl" :title=" state.info.spuName" :titleWidth="480"
+				<s-goods-item :price="state.info.refundPriceTotal" :img="state.info.picUrl" :title="state.info.spuName" :titleWidth="480"
 					:skuText="state.info.properties.map((property) => property.valueName).join(' ')"
-					:num=" state.info.count" />
+					:num="state.info.count" />
 			</view>
 
 			<!-- 服务内容 -->
@@ -83,21 +101,21 @@
 
 		<!-- 操作区 -->
 		<s-empty v-if="isEmpty(state.info) && state.loading" icon="/static/order-empty.png" text="暂无该订单售后详情" />
-		<su-fixed bottom placeholder bg="bg-white" v-if="!isEmpty(state.info)">
+		<!--<su-fixed bottom placeholder bg="bg-white" v-if="!isEmpty(state.info)">
 			<view class="foot_box">
 				<button class="ss-reset-button btn" v-if="state.info.buttons?.includes('cancel')"
 					@tap="onApply(state.info.id)">
 					取消申请
 				</button>
-				<button class="ss-reset-button btn" v-if="state.info.buttons?.includes('delivery')"
+				 <button class="ss-reset-button btn" v-if="state.info.buttons?.includes('delivery')"
 					@tap="sheep.$router.go('/pages/order/aftersale/return-delivery', { id: state.info.id })">
 					填写退货
-				</button>
-				<button class="ss-reset-button contcat-btn btn" @tap="sheep.$router.go('/pages/chat/index')">
+				</button> -->
+				<!-- <button class="ss-reset-button contcat-btn btn" @tap="sheep.$router.go('/pages/chat/index')">
 					联系客服
 				</button>
 			</view>
-		</su-fixed>
+		</su-fixed> -->
 	</s-layout>
 </template>
 
@@ -119,6 +137,7 @@
 	} from '@/sheep/hooks/useModal';
 	import {
 		fen2yuan,
+		points2point,
 		formatAfterSaleStatusDescription,
 		handleAfterSaleButtons
 	} from '@/sheep/hooks/useGoods';
@@ -304,13 +323,15 @@
 			color: rgba(153, 153, 153, 1);
 		}
 	}
-
+	.aftersale-info{
+		margin: 20rpx;
+	}
 	// 退款金额
 	.aftersale-money {
 		background-color: #fff;
 		height: 98rpx;
 		padding: 0 20rpx;
-		margin: 20rpx;
+		
 
 		.aftersale-money--title {
 			font-size: 28rpx;
@@ -338,7 +359,8 @@
 	.aftersale-content {
 		background-color: #fff;
 		padding: 20rpx;
-		margin: 0 20rpx;
+		margin-left:  20rpx;
+		margin-right:  20rpx;
 
 		.aftersale-item {
 			height: 60rpx;

+ 1 - 1
pages/order/aftersale/return-delivery.vue

@@ -9,7 +9,7 @@
 							<picker mode='selector' class='num' @change="bindPickerChange" :value="state.expressIndex"
 								:range="state.expresses" range-key="name">
 								<view class="picker acea-row row-between-wrapper "  style="display: flex;align-items: center;">
-									<view class='reason'>{{ state.expresses[state.expressIndex].name }}</view>
+									<view class='reason'>{{ state.expresses[state.expressIndex]?.name }}</view>
 									<!-- TODO 非繁人:这里样式有问题,少了 > 按钮 -->
 									<image src="@/static/icon/select-icon.png" class="select-icon" />
 								</view>

+ 51 - 9
pages/order/confirm.vue

@@ -108,11 +108,22 @@
 						<!-- <text class="item-value text-red">
 		    </text> -->
 						<text class="item-value" :class="state.usedPoint > 0 ? 'text-red' : 'text-disabled'">
-							{{ state.usedPoint > 0 ?  ' 抵扣' + state.usedPoint + '元' : '不使用佣金' }}
+							{{ state.usedPoint > 0 ?  ' 抵扣' + state.usedPoint + '元' : '不使用佣金' }}
 						</text>
 						<text class="_icon-forward item-icon" />
 					</view>
 				</view>
+				<view class="order-item ss-flex ss-col-center ss-row-between" v-if="state.orderPayload.spuPayType != 2">
+						<view class="item-title">消费分抵扣</view>
+						<view class="ss-flex ss-col-center" @tap="state.showConsumptionPoints = true">
+							<!-- <text class="item-value text-red">
+				</text> -->
+							<text class="item-value" :class="state.usedConsumptionPoints > 0 ? 'text-red' : 'text-disabled'">
+								{{ state.usedConsumptionPoints > 0 ?  ' 抵扣' + state.usedConsumptionPoints + '元' : '不使用消费分' }}
+							</text>
+							<text class="_icon-forward item-icon" />
+						</view>
+					</view>
 
 				<!-- 优惠劵:只有 type = 0 普通订单(非拼团、秒杀、砍价),才可以使用优惠劵 -->
 				<!-- 暂时隐藏优惠卷 -->
@@ -177,7 +188,12 @@
 		<s-points-pop v-model="state.couponInfo" :currentMemberPoints="state.currentMemberPoints"
 			:currentTotalPrice="state.currentTotalPrice" :currentDeliveryPrice="state.currentDeliveryPrice"
 			:show="state.showPoints" @confirm="onInputPoints" @close="state.showPoints = false" />
-
+			
+		<!-- 消费分 -->
+		<s-consumptionPoints-pop v-model="state.couponInfo" :currentMemberConsumptionPoints="state.currentMemberConsumptionPoints"
+			:currentTotalPrice="state.currentTotalPrice" :currentDeliveryPrice="state.currentDeliveryPrice"
+			:show="state.showConsumptionPoints" @confirm="onInputConsumptionPoints" @close="state.showConsumptionPoints = false" />
+		
 		<!-- 满额折扣弹框 TODO 非繁人:后续要把优惠信息打进去 -->
 		<!-- <s-discount-list
       v-model="state.orderInfo"
@@ -241,10 +257,13 @@
 		},
 		addressInfo: {}, // 选择的收货地址
 		showPoints: false, // 是否佣金抵扣
+		showConsumptionPoints: false, // 是否消费分抵扣
 		couponInfo: [], // 优惠劵列表
 		showDiscount: false, // 是否展示营销活动
 		currentMemberPoints: 0, //用户当前可用佣金
+		currentMemberConsumptionPoints: 0, //用户当前可用消费分
 		usedPoint: 0, //用户使用的佣金 
+		usedConsumptionPoints:0,//用户使用的消费分
 		currentTotalPrice: 0, //当前的整个订单的总价格
 		currentDeliveryPrice: 0 // 当前订单的总运费
 	});
@@ -282,7 +301,7 @@
 		uni.$once('SELECT_ADDRESS', (e) => {
 			changeConsignee(e.addressInfo);
 		});
-		console.log(state.orderPayload.spuType)
+		// console.log(state.orderPayload.spuType)
 		// 如果是虚拟商品 进入选虚拟地址
 		if (state.orderPayload.spuType) {
 			sheep.$router.go('/pages/user/address/list');
@@ -301,16 +320,28 @@
 	}
 	// 使用佣金
 	async function onInputPoints(points) {
-
 		if (points == undefined) {
 			points = 0
 		}
 		const payprice = state.currentTotalPrice
 		state.orderInfo.price.payPrice = (payprice - points) * 100
 		state.usedPoint = points
+		// 与消费分互斥
+		state.usedConsumptionPoints = 0 
 		state.showPoints = false;
 	}
-
+	// 使用消费分
+	function onInputConsumptionPoints(points) {
+		if (points == undefined) {
+			points = 0
+		}
+		const payprice = state.currentTotalPrice
+		state.orderInfo.price.payPrice = (payprice - points) * 100
+		state.usedConsumptionPoints = points
+		// 与佣金互斥
+		state.usedPoint = 0 
+		state.showConsumptionPoints = false;
+	}
 	// 提交订单
 	function onConfirm() {
 
@@ -323,7 +354,14 @@
 			sheep.$helper.toast('可用佣金不足');
 			return;
 		}
-		
+		if (parseFloat(state.usedConsumptionPoints) && parseFloat(state.usedConsumptionPoints) > parseFloat(state.currentMemberConsumptionPoints)) {
+			sheep.$helper.toast('可用消费分不足');
+			return;
+		}
+		if (parseFloat(state.usedPoint) && parseFloat(state.usedConsumptionPoints) ) {
+			sheep.$helper.toast('佣金不能搭配消费分使用');
+			return;
+		}
 		submitOrder();
 	}
 	// 截取小数 不保留四舍五入
@@ -350,6 +388,7 @@
 		});
 		// 如果不是高精度商品 就走原来的程序,如果是高精度的商品,就拿到高精度返回的商品总价 / 100 然后保留四位小数再干掉两位,实现佣金可以刚好大于当前佣金的0.01
 		const usedPoint = state.orderPayload.highPrecision ? customRound((state.orderInfo.price.virtualPayPrice / 100 ), 2):  state.usedPoint;
+		
 		const {
 			code,
 			data
@@ -363,7 +402,7 @@
 			combinationHeadId: state.orderPayload.combinationHeadId,
 			seckillActivityId: state.orderPayload.seckillActivityId,
 			payIntegral: usedPoint,
-			// payIntegral: 0.95,
+			payConsumptionPoints:state.usedConsumptionPoints,
 			shopRemarks: shopRemarks
 		});
 		if (code !== 0) {
@@ -376,6 +415,7 @@
 		// 跳转到支付页面
 		sheep.$router.redirect('/pages/pay/index', {
 			id: data.payOrderId,
+			type:1
 		});
 	}
 
@@ -421,7 +461,9 @@
 		if (state.orderInfo.address) {
 			state.addressInfo = state.orderInfo.address;
 		}
+		// console.log(state.orderInfo)/
 		state.currentMemberPoints = state.orderInfo.currentQuota > 0 ? points2point(state.orderInfo.currentQuota) : 0
+		state.currentMemberConsumptionPoints = state.orderInfo.consumePoints > 0 ? points2point(state.orderInfo.consumePoints) : 0
 		
 		state.currentTotalPrice = fen2yuan(state.orderInfo.price.payPrice)
 		state.currentDeliveryPrice = fen2yuan(state.orderInfo.price.deliveryPrice)
@@ -429,7 +471,7 @@
 
 		if (state.orderPayload.spuPayType == 2) {
 			state.usedPoint = state.currentTotalPrice - 0.01
-			console.log(state.spuType)
+			// console.log(state.spuType)
 		}
 
 	}
@@ -459,7 +501,7 @@
 			return;
 		}
 		state.orderPayload = JSON.parse(options.data);
-		console.log(state.orderPayload)
+		// console.log(state.orderPayload)
 		await getOrderInfo();
 
 	});

+ 45 - 12
pages/order/detail.vue

@@ -102,12 +102,7 @@
 					<button class="ss-reset-button copy-btn" @tap="onCopy">复制</button>
 				</view>
 
-				<view class="notice-item">
-					<text class="title">使用佣金:</text>
-					<text class="detail">
-						{{ points2point(state.orderInfo.payIntegral) }}
-					</text>
-				</view>
+				
 				<view class="notice-item">
 					<text class="title">用户留言:</text>
 					<text class="detail">
@@ -145,6 +140,14 @@
 				<text class="title">运费</text>
 				<text class="detail">¥{{ fen2yuan(state.orderInfo.deliveryPrice) }}</text>
 			</view>
+			<view class="notice-item ss-flex ss-row-between" v-if="state.orderInfo.payIntegral > 0">
+				<text class="title">使用佣金</text>
+				<text class="detail">{{ points2point(state.orderInfo.payIntegral) }}</text>
+			</view>
+			<view class="notice-item ss-flex ss-row-between" v-if="state.orderInfo.payConsumptionPoints > 0">
+				<text class="title">使用消费分</text>
+				<text class="detail">{{ points2point(state.orderInfo.payConsumptionPoints) }}</text>
+			</view>
 			<!-- TODO 非繁人:优惠劵抵扣、佣金抵扣 -->
 			<view class="notice-item ss-flex ss-row-between" v-if="state.orderInfo.discountPrice > 0">
 				<text class="title">优惠金额</text>
@@ -165,6 +168,7 @@
 		<su-fixed bottom placeholder bg="bg-white" v-if="state.orderInfo.buttons?.length">
 
 			<view class="footer-box ss-flex ss-col-center ss-row-right">
+				<!-- {{state.orderInfo.buttons}} -->
 				<button class="ss-reset-button cancel-btn" v-if="state.orderInfo.buttons?.includes('cancel')"
 					@tap="onCancel(state.orderInfo.id)">
 					取消订单
@@ -174,14 +178,16 @@
 					继续支付
 				</button>
 				<!-- TODO 非繁人:拼团接入 -->
-				<button class="ss-reset-button cancel-btn" v-if="state.orderInfo.buttons?.includes('combination')" @tap="
+				<!-- <button class="ss-reset-button cancel-btn" v-if="state.orderInfo.buttons?.includes('combination')" @tap="
             sheep.$router.go('/pages/activity/groupon/detail', {
               id: state.orderInfo.ext.groupon_id,
             })
           ">
 					拼团详情
-				</button>
-				<button class="ss-reset-button cancel-btn" v-if="state.orderInfo.buttons?.includes('express')"
+					
+				</button> -->
+				<!-- 商家发货&&用户不售后就能看到物流 -->
+				<button class="ss-reset-button cancel-btn" v-if="state.orderInfo.buttons?.includes('express') && !state.orderInfo.items[0]?.refundStatus"
 					@tap="onExpress(state.orderInfo.id)">
 					查看物流
 				</button>
@@ -193,6 +199,15 @@
 					@tap="onComment(state.orderInfo.id)">
 					评价
 				</button>
+				<!-- 售后用户退货 -->
+				<button class="ss-reset-button cancel-btn" v-if="state.orderInfo.buttons?.includes('aftersaleCancel')"
+					@tap="onApply(state.orderInfo.items[0].afterSaleId)">
+					取消申请
+				</button>
+				<button class="ss-reset-button cancel-btn" v-if="state.orderInfo.buttons?.includes('aftersaleDelivery')"
+					@tap="sheep.$router.go('/pages/order/aftersale/return-delivery', { id: state.orderInfo.items[0].afterSaleId })">
+					填写退货
+				</button>
 			</view>
 		</su-fixed>
 	</s-layout>
@@ -219,6 +234,7 @@
 		points2point
 	} from '@/sheep/hooks/useGoods';
 	import OrderApi from '@/sheep/api/trade/order';
+	import AfterSaleApi from '@/sheep/api/trade/afterSale';
 	import {
 		showAuthModal
 	} from '@/sheep/hooks/useModal';
@@ -271,14 +287,14 @@
 			},
 		});
 	}
-
+	
 	// 查看物流
 	async function onExpress(id) {
 		sheep.$router.go('/pages/order/express/log', {
 			id,
 		});
 	}
-
+	
 	// 确认收货 TODO 非繁人:待测试
 	async function onConfirm(orderId, ignore = false) {
 		// 需开启确认收货组件
@@ -352,7 +368,24 @@
 			id
 		});
 	}
-
+	// 取消售后申请
+	function onApply(id) {
+		uni.showModal({
+			title: '提示',
+			content: '确定要取消此申请吗?',
+			success: async function(res) {
+				if (!res.confirm) {
+					return;
+				}
+				const {
+					code
+				} = await AfterSaleApi.cancelAfterSale(id);
+				if (code === 0) {
+					await getOrderDetail(id);
+				}
+			},
+		});
+	}
 	async function getOrderDetail(id) {
 		// 对详情数据进行适配
 		let res;

+ 1 - 0
pages/order/list.vue

@@ -189,6 +189,7 @@
 	function onPay(id) {
 		sheep.$router.go('/pages/pay/index', {
 			id: id,
+			type:1,
 			openType:2
 		});
 	}

+ 391 - 305
pages/pay/index.vue

@@ -1,313 +1,399 @@
 <!-- 收银台 -->
 <template>
-  <s-layout title="收银台">
-    <view class="bg-white ss-modal-box ss-flex-col">
-      <!-- 订单信息 -->
-      <view class="modal-header ss-flex-col ss-col-center ss-row-center">
-        <view class="money-box ss-m-b-20">
-          <text class="money-text">{{ fen2yuan(state.orderInfo.price) }}</text>
-        </view>
-        <view class="time-text">
-          <text>{{ payDescText }}</text>
-        </view>
-      </view>
-      <!-- 支付方式 -->
-      <view class="modal-content ss-flex-1">
-        <view class="pay-title ss-p-l-30 ss-m-y-30">选择支付方式</view>
-        <radio-group @change="onTapPay">
-          <label class="pay-type-item" v-for="item in state.payMethods" :key="item.title">
-            <view
-              class="pay-item ss-flex ss-col-center ss-row-between ss-p-x-30 border-bottom"
-              :class="{ 'disabled-pay-item': item.disabled }"
-            >
-              <view class="ss-flex ss-col-center">
-                <image
-                  class="pay-icon"
-                  v-if="item.disabled"
-
-                  :src="sheep.$url.static('/static/img/shop/pay/cod_disabled.png')"
-                  mode="aspectFit"
-                />
-				<!-- @/static/icon/cart.png -->
-				
-                <image
-                  class="pay-icon"
-                  v-else
-                  :src="item.icon"
-                  mode="aspectFit"
-                />
-
-                <text class="pay-title">{{ item.title }}</text>
-              </view>
-              <view class="check-box ss-flex ss-col-center ss-p-l-10">
-				<!-- {{item.value}} -->
-                <radio
-                  :value="item.value"
-                  color="var(--ui-BG-Main)"
-                  style="transform: scale(0.8)"
-                  :disabled="item.disabled"
-                  :checked="state.payment === item.value"
-                />
-              </view>
-            </view>
-          </label>
-        </radio-group>
-      </view>
-
-      <!-- 工具 -->
-      <view class="modal-footer ss-flex ss-row-center ss-col-center ss-m-t-80 ss-m-b-40">
-        <button v-if="state.payStatus === 0" class="ss-reset-button past-due-btn">
-          检测支付环境中
-        </button>
-        <button v-else-if="state.payStatus === -1" class="ss-reset-button past-due-btn" disabled>
-          支付已过期
-        </button>
-        <button
-          v-else
-          class="ss-reset-button save-btn"
-          @tap="onPay"
-          :disabled="state.payStatus !== 1"
-          :class="{ 'disabled-btn': state.payStatus !== 1 }"
-        >
-          立即支付
-        </button>
-      </view>
-    </view>
-  </s-layout>
+	<s-layout title="收银台">
+		<view class="bg-white ss-modal-box ss-flex-col">
+			<!-- 订单信息 -->
+			<view class="modal-header ss-flex-col ss-col-center ss-row-center">
+				<view class="money-box ss-m-b-20">
+					<text class="money-text">{{ fen2yuan(state.orderInfo.price)  }}</text>
+				</view>
+				<view class="time-text">
+					<text>{{ payDescText }}</text>
+				</view>
+			</view>
+			<!-- 支付方式 -->
+			<view class="modal-content ss-flex-1" v-if="state.orderInfo.price">
+				<view class="pay-title ss-p-l-30 ss-m-y-30">选择支付方式</view>
+				<radio-group @change="onTapPay">
+					<label class="pay-type-item" v-for="item in state.payMethods" :key="item.title">
+						<view class="pay-item ss-flex ss-col-center ss-row-between ss-p-x-30 border-bottom"
+							:class="{ 'disabled-pay-item': item.disabled }">
+							<view class="ss-flex ss-col-center">
+								<image class="pay-icon" v-if="item.disabled"
+									:src="sheep.$url.static('/static/img/shop/pay/cod_disabled.png')"
+									mode="aspectFit" />
+								<!-- @/static/icon/cart.png -->
+
+								<image class="pay-icon" v-else :src="item.icon" mode="aspectFit" />
+
+								<text class="pay-title">{{ item.title }}</text>
+							</view>
+							<view class="check-box ss-flex ss-col-center ss-p-l-10">
+								<radio :value="item.value" color="var(--ui-BG-Main)" style="transform: scale(0.8)"
+									:disabled="item.disabled" :checked="state.payment === item.value" />
+							</view>
+						</view>
+					</label>
+				</radio-group>
+			</view>
+			<!-- 如果是0元,被佣金或者消费分抵扣完了 走验证码 -->
+			<view class="" v-else>
+				<uni-forms :model="state.model" :rules="state.rules" validateTrigger="bind" labelPosition="left" border
+					class="form-box" labelWidth='200' ref="FormRef">
+					<view class="bg-white ss-p-x-30">
+
+						<uni-forms-item name="mobile" label="手机号" class="mobile loginUniFormItem ss-p-t-10">
+							<uni-easyinput v-model="state.model.smsCodeUseReqDTO.mobile" type="smsCodeUseReqDTO"
+								placeholder="请输入手机号" :inputBorder="false" :clearable="false" :disabled="true">
+								<template v-slot:right>
+									<button class="ss-reset-button code-btn code-btn-start"
+										:disabled="state.payStatus !== 1"
+										@tap="getSmsCode('zeroBuy', state.model.smsCodeUseReqDTO.mobile)">
+										{{ getSmsTimer('zeroBuy') }}
+									</button>
+								</template>
+							</uni-easyinput>
+						</uni-forms-item>
+						<uni-forms-item name="smsCodeUseReqDTO.code" label="验证码" :required="true">
+							<uni-easyinput v-model="state.model.smsCodeUseReqDTO.code" type="number"
+								placeholder="请输入验证码" :inputBorder="false" :clearable="false">
+							</uni-easyinput>
+						</uni-forms-item>
+
+					</view>
+				</uni-forms>
+			</view>
+			<!-- 工具 -->
+			<view class="modal-footer ss-flex ss-row-center ss-col-center ss-m-t-80 ss-m-b-40">
+				<button v-if="state.payStatus === 0" class="ss-reset-button past-due-btn">
+					检测支付环境中
+				</button>
+				<button v-else-if="state.payStatus === -1" class="ss-reset-button past-due-btn" disabled>
+					支付已过期
+				</button>
+				<!-- 支付状态没过期,并且支付金额不为0 -->
+				<button v-else-if="state.payStatus === 1 && state.orderInfo.price" class="ss-reset-button save-btn"
+					@tap="onPay" :disabled="state.payStatus !== 1" :class="{ 'disabled-btn': state.payStatus !== 1 }">
+					立即支付
+				</button>
+				<!-- 支付状态没过期,并且支付金额为0 -->
+				<button v-else class="ss-reset-button save-btn" @tap="onZeroPay" :disabled="state.payStatus !== 1"
+					:class="{ 'disabled-btn': state.payStatus !== 1 }">
+					立即支付
+				</button>
+			</view>
+		</view>
+	</s-layout>
 </template>
 <script setup>
-  import { computed, reactive } from 'vue';
-  import { onLoad } from '@dcloudio/uni-app';
-  import sheep from '@/sheep';
-  import { fen2yuan, useDurationTime } from '@/sheep/hooks/useGoods';
-  import PayOrderApi from '@/sheep/api/pay/order';
-  import PayChannelApi from '@/sheep/api/pay/channel';
-  import { getPayMethods } from '@/sheep/platform/pay';
-  import md5 from 'blueimp-md5';
-
-  const userWallet = computed(() => sheep.$store('user').userWallet);
-
-  // 检测支付环境
-  const state = reactive({
-    orderType: 'goods', // 订单类型; goods - 商品订单, recharge - 充值订单
-    orderInfo: {}, // 支付单信息
-    payStatus: 0, // 0=检测支付环境, -2=未查询到支付单信息, -1=支付已过期, 1=待支付,2=订单已支付
-    payMethods: [], // 可选的支付方式
-    payment: '', // 选中的支付方式
-  });
-
-  const onPay = () => {
-    if (state.payment === '') {
-      sheep.$helper.toast('请选择支付方式');
-      return;
-    }
-	
-    if (state.payment === 'wallet') {
-      uni.showModal({
-        title: '提示',
-        content: '确定要支付吗?',
-        success: function (res) {
-          if (res.confirm) {
-            sheep.$platform.pay(state.payment, state.orderType, state.orderInfo.id);
-          }
-        },
-      });
-    } else {
-      sheep.$platform.pay(state.payment, state.orderType, state.orderInfo.id);
-    }
-  };
-
-  // 支付文案提示
-  const payDescText = computed(() => {
-    if (state.payStatus === 2) {
-      return '该订单已支付';
-    }
-    if (state.payStatus === 1) {
-      const time = useDurationTime(state.orderInfo.expireTime);
-      if (time.ms <= 0) {
-        state.payStatus = -1;
-        return '';
-      }
-      return `剩余支付时间 ${time.h}:${time.m}:${time.s} `;
-    }
-    if (state.payStatus === -2) {
-      return '未查询到支付单信息';
-    }
-    return '';
-  });
-
-  // 状态转换:payOrder.status => payStatus
-  function checkPayStatus() {
-    if (state.orderInfo.status === 10
-      || state.orderInfo.status === 20 ) { // 支付成功
-      state.payStatus = 2;
-      return;
-    }
-    if (state.orderInfo.status === 30) { // 支付关闭
-      state.payStatus = -1;
-      return;
-    }
-    state.payStatus = 1; // 待支付
-  }
-
-  // 切换支付方式
-  function onTapPay(e) {
-    state.payment = e.detail.value;
-  }
-
-  // 设置支付订单信息
-  async function setOrder(id) {
-    // 获得支付订单信息
-    const { data, code } = await PayOrderApi.getOrder(id);
-    if (code !== 0 || !data) {
-      state.payStatus = -2;
-      return;
-    }
-    state.orderInfo = data;
-    // 获得支付方式
-    await setPayMethods();
-    // 设置支付状态
-    checkPayStatus();
-  }
-	
-  // 设置支付订单信息
-  async function setPayOrder(id) {
-    // 获得支付订单信息
-    const { data, code } = await PayOrderApi.getPayOrder(id);
-    if (code !== 0 || !data) {
-      state.payStatus = -2;
-      return;
-    }
-    state.orderInfo = data;
-    // 获得支付方式
-    await setPayMethods();
-    // 设置支付状态
-    checkPayStatus();
-  }
-  
-  // 获得支付方式
-  async function setPayMethods() {
-    const { data , code } = await PayChannelApi.getEnableChannelCodeList(state.orderInfo.appId)
-    if (code !== 0) {
-      return
-    }
-    state.payMethods = getPayMethods(data)
-  }
-
-  onLoad((options) => {	  
-    if (sheep.$platform.name === 'WechatOfficialAccount'
-      && sheep.$platform.os === 'ios'
-      && !sheep.$platform.landingPage.includes('pages/pay/index')) {
-      location.reload();
-      return;
-    }
-    // 获得支付订单信息
-	// console.log(options)
-    let id = options.id;
-    if (options.orderType) {
-      state.orderType = options.orderType;
-    }
-	if(options.openType == 2){
-		setPayOrder(id)
-	}else{
-		// console.log(123)
-		setOrder(id);
+	import {
+		computed,
+		reactive,
+		ref,
+		unref
+	} from 'vue';
+	import {
+		onLoad
+	} from '@dcloudio/uni-app';
+	import sheep from '@/sheep';
+	import {
+		fen2yuan,
+		useDurationTime
+	} from '@/sheep/hooks/useGoods';
+	import PayOrderApi from '@/sheep/api/pay/order';
+	import PayChannelApi from '@/sheep/api/pay/channel';
+	import {
+		getPayMethods
+	} from '@/sheep/platform/pay';
+	import md5 from 'blueimp-md5';
+
+	import {
+		showAuthModal,
+		closeAuthModal,
+		getSmsCode,
+		getSmsTimer
+	} from '@/sheep/hooks/useModal';
+	const userWallet = computed(() => sheep.$store('user').userWallet);
+	const userInfo = computed(() => sheep.$store('user').userInfo);
+	// 检测支付环境
+	const state = reactive({
+		orderType: 'goods', // 订单类型; goods - 商品订单, recharge - 充值订单
+		orderInfo: {}, // 支付单信息
+		payStatus: 0, // 0=检测支付环境, -2=未查询到支付单信息, -1=支付已过期, 1=待支付,2=订单已支付
+		payMethods: [], // 可选的支付方式
+		payment: '', // 选中的支付方式
+		model: {
+			id: '',
+			smsCodeUseReqDTO: {
+				mobile: '',
+				code: '',
+				scene: 12,
+			},
+			orderType:0
+		},
+		rules: {
+			"smsCodeUseReqDTO.code": {
+				rules: [{
+					required: true,
+					errorMessage: '验证码不能为空',
+				}, ],
+			},
+
+		}
+	});
+
+	const onPay = () => {
+		if (state.payment === '') {
+			sheep.$helper.toast('请选择支付方式');
+			return;
+		}
+		sheep.$platform.pay(state.payment, state.orderType, state.orderInfo.id , state.model.type);
+	};
+	const FormRef = ref(null);
+	const onZeroPay = async () => {
+		const validate = await unref(FormRef)
+			.validate()
+			.catch((error) => {
+				console.log('error: ', error);
+			});
+		if (!validate) {
+			return;
+		}
+		const { code , data } = await PayOrderApi.ZeroPurchaseSubmit(state.model);
+		if (data) {
+			sheep.$router.redirect('/pages/pay/resultYuan', {
+				id: state.model.id,
+				orderType: state.orderType,
+				payState: 'success',
+				payRes: JSON.stringify(data),
+			});
+		}
+
+	}
+	// 支付文案提示
+	const payDescText = computed(() => {
+		if (state.payStatus === 2) {
+			return '该订单已支付';
+		}
+		if (state.payStatus === 1) {
+			const time = useDurationTime(state.orderInfo.expireTime);
+			if (time.ms <= 0) {
+				state.payStatus = -1;
+				return '';
+			}
+			return `剩余支付时间 ${time.h}:${time.m}:${time.s} `;
+		}
+		if (state.payStatus === -2) {
+			return '未查询到支付单信息';
+		}
+		return '';
+	});
+
+	// 状态转换:payOrder.status => payStatus
+	function checkPayStatus() {
+		if (state.orderInfo.status === 10 ||
+			state.orderInfo.status === 20) { // 支付成功
+			state.payStatus = 2;
+			return;
+		}
+		if (state.orderInfo.status === 30) { // 支付关闭
+			state.payStatus = -1;
+			return;
+		}
+		state.payStatus = 1; // 待支付
+	}
+
+	// 切换支付方式
+	function onTapPay(e) {
+		state.payment = e.detail.value;
 	}
-    
-    // 刷新钱包的缓存
-    sheep.$store('user').getWallet();
-  });
+
+	// 设置支付订单信息
+	async function setOrder(id) {
+		// 获得支付订单信息
+		const {
+			data,
+			code
+		} = await PayOrderApi.getOrder(id);
+		if (code !== 0 || !data) {
+			state.payStatus = -2;
+			return;
+		}
+		state.orderInfo = data;
+		// 获得支付方式
+		await setPayMethods();
+		// 设置支付状态
+		checkPayStatus();
+	}
+
+	// 设置支付订单信息
+	async function setPayOrder(id) {
+		// 获得支付订单信息
+		const {
+			data,
+			code
+		} = await PayOrderApi.getPayOrder(id);
+		if (code !== 0 || !data) {
+			state.payStatus = -2;
+			return;
+		}
+		state.orderInfo = data;
+		// 获得支付方式
+		await setPayMethods();
+		// 设置支付状态
+		checkPayStatus();
+	}
+
+	// 获得支付方式
+	async function setPayMethods() {
+		const {
+			data,
+			code
+		} = await PayChannelApi.getEnableChannelCodeList(state.orderInfo.appId)
+		if (code !== 0) {
+			return
+		}
+		state.payMethods = getPayMethods(data)
+	}
+
+	onLoad((options) => {
+		if (sheep.$platform.name === 'WechatOfficialAccount' &&
+			sheep.$platform.os === 'ios' &&
+			!sheep.$platform.landingPage.includes('pages/pay/index')) {
+			location.reload();
+			return;
+		}
+		let id = options.id;
+		let type = options.type;
+		state.model.id = options.id;
+		state.model.type = options.type;
+
+		if (options.orderType) {
+			state.orderType = options.orderType;
+		}
+		if (options.openType == 2) {
+			setPayOrder(id)
+		} else {
+
+			setOrder(id);
+		}
+
+		// 刷新钱包的缓存
+		sheep.$store('user').getWallet();
+
+		// 拿到用户的手机号
+		state.model.smsCodeUseReqDTO.mobile = userInfo.value.mobile
+	});
 </script>
 
 <style lang="scss" scoped>
-  .pay-icon {
-    width: 36rpx;
-    height: 36rpx;
-    margin-right: 26rpx;
-  }
-
-  .ss-modal-box {
-    // max-height: 1000rpx;
-
-    .modal-header {
-      position: relative;
-      padding: 60rpx 20rpx 40rpx;
-
-
-      .money-text {
-        color: $red;
-        font-size: 46rpx;
-        font-weight: bold;
-        font-family: OPPOSANS;
-
-        &::before {
-          content: '¥';
-          font-size: 30rpx;
-        }
-      }
-
-      .time-text {
-        font-size: 26rpx;
-        color: $gray-b;
-      }
-
-      .close-icon {
-        position: absolute;
-        top: 10rpx;
-        right: 20rpx;
-        font-size: 46rpx;
-        opacity: 0.2;
-      }
-    }
-
-    .modal-content {
-      overflow-y: auto;
-
-      .pay-title {
-        font-size: 26rpx;
-        font-weight: 500;
-        color: #333333;
-      }
-
-      .pay-tip {
-        font-size: 26rpx;
-        color: #bbbbbb;
-      }
-
-      .pay-item {
-        height: 86rpx;
-      }
-      .disabled-pay-item {
-        .pay-title {
-          color: #999999;
-        }
-      }
-
-      .userInfo-money {
-        font-size: 26rpx;
-        color: #bbbbbb;
-        line-height: normal;
-      }
-    }
-
-    .save-btn {
-      width: 710rpx;
-      height: 80rpx;
-      border-radius: 40rpx;
-      background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
-      color: $white;
-    }
-    .disabled-btn {
-      background: #e5e5e5;
-      color: #999999;
-    }
-
-    .past-due-btn {
-      width: 710rpx;
-      height: 80rpx;
-      border-radius: 40rpx;
-      background-color: #999;
-      color: #fff;
-    }
-  }
-</style>
+	.code-btn-start {
+		width: 158rpx;
+		height: 56rpx;
+		line-height: normal;
+		background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
+		border-radius: 28rpx;
+		font-size: 26rpx;
+		font-weight: 500;
+		color: #fff;
+	}
+
+	:deep() {
+		.is-disabled {
+			color: #333333;
+		}
+	}
+
+	.pay-icon {
+		width: 36rpx;
+		height: 36rpx;
+		margin-right: 26rpx;
+	}
+
+	.ss-modal-box {
+		// max-height: 1000rpx;
+
+		.modal-header {
+			position: relative;
+			padding: 60rpx 20rpx 40rpx;
+
+
+			.money-text {
+				color: $red;
+				font-size: 46rpx;
+				font-weight: bold;
+				font-family: OPPOSANS;
+
+				&::before {
+					content: '¥';
+					font-size: 30rpx;
+				}
+			}
+
+			.time-text {
+				font-size: 26rpx;
+				color: $gray-b;
+			}
+
+			.close-icon {
+				position: absolute;
+				top: 10rpx;
+				right: 20rpx;
+				font-size: 46rpx;
+				opacity: 0.2;
+			}
+		}
+
+		.modal-content {
+			overflow-y: auto;
+
+			.pay-title {
+				font-size: 26rpx;
+				font-weight: 500;
+				color: #333333;
+			}
+
+			.pay-tip {
+				font-size: 26rpx;
+				color: #bbbbbb;
+			}
+
+			.pay-item {
+				height: 86rpx;
+			}
+
+			.disabled-pay-item {
+				.pay-title {
+					color: #999999;
+				}
+			}
+
+			.userInfo-money {
+				font-size: 26rpx;
+				color: #bbbbbb;
+				line-height: normal;
+			}
+		}
+
+		.save-btn {
+			width: 710rpx;
+			height: 80rpx;
+			border-radius: 40rpx;
+			background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
+			color: $white;
+		}
+
+		.disabled-btn {
+			background: #e5e5e5;
+			color: #999999;
+		}
+
+		.past-due-btn {
+			width: 710rpx;
+			height: 80rpx;
+			border-radius: 40rpx;
+			background-color: #999;
+			color: #fff;
+		}
+	}
+</style>

+ 9 - 9
pages/pay/result.vue

@@ -25,9 +25,12 @@
           ">
 					重新支付
 				</button> -->
-				<button class="check-btn ss-reset-button" v-if="payResult === 'success'" @tap="goOrderList">
+				<button class="check-btn ss-reset-button" v-if="payResult === 'success' && !isTopUp" @tap="onOrder">
 					查看订单
 				</button>
+				<button class="check-btn ss-reset-button" v-if="payResult === 'success' && isTopUp" @tap="sheep.$router.redirect('/pages/user/wallet/score')">
+					查看钱包
+				</button>
 				<!-- TODO 非繁人:拼团接入 -->
 				<!-- <button class="check-btn ss-reset-button" v-if="payResult === 'success' && state.tradeOrder.type === 3"
 					@tap="sheep.$router.redirect('/pages/activity/groupon/order')">
@@ -76,8 +79,7 @@
 	} from '@/sheep/hooks/useModal';
 	
 	const order = ref({});
-	const result = ref({
-	});
+	const result = ref({});
 	const url = ref('https://payapp.weixin.qq.com');
 
 
@@ -127,12 +129,10 @@
 			return 'closed';
 		}
 	});
-	// watchEffect(()=>{
-	// 	if(payResult.value == 'success'){
-	// 		showWalletModal({points: state.orderInfo.jf,socialStatus: state.orderInfo.sj})
-	// 	}
-	// })
-	
+	// 是否充值消费分订单
+	const isTopUp = computed(() => {
+		return result.value.out_trade_no.includes("top-up") ;
+	});
 	// 获得订单信息
 	async function getOrderInfo(payOrderNo) {
 		state.counter++;

+ 27 - 11
pages/pay/resultYuan.vue

@@ -25,9 +25,12 @@
           ">
 					重新支付
 				</button>
-				<button class="check-btn ss-reset-button" v-if="payResult === 'success'" @tap="onOrder">
+				<button class="check-btn ss-reset-button" v-if="payResult === 'success' && !isTopUp" @tap="onOrder">
 					查看订单
 				</button>
+				<button class="check-btn ss-reset-button" v-if="payResult === 'success' && isTopUp" @tap="sheep.$router.redirect('/pages/user/wallet/score')">
+					查看钱包
+				</button>
 				<!-- TODO 非繁人:拼团接入 -->
 				<button class="check-btn ss-reset-button" v-if="payResult === 'success' && state.tradeOrder.type === 3"
 					@tap="sheep.$router.redirect('/pages/activity/groupon/order')">
@@ -155,7 +158,7 @@
 		if (state.orderType === 'recharge') {
 			sheep.$router.redirect('/pages/pay/recharge-log');
 		} else {
-			sheep.$router.redirect('/pages/order/list');
+			sheep.$router.redirect('/pages/order/list',{type:2});
 		}
 	}
 
@@ -170,9 +173,14 @@
 		sheep.$platform.useProvider('wechat').subscribeMessage(event);
 	}
 	// #endif
+	
+	// 是否充值消费分订单
+	const isTopUp = computed(() => {
+		return state.orderInfo.no.includes("top-up") ;
+	});
 
 	onLoad(async (options) => {
-		console.log(options.id)
+		// console.log(options.payRes)
 		// 支付订单号
 		if (options.id) {
 			state.id = options.id;
@@ -182,17 +190,25 @@
 			state.orderType = options.orderType;
 		}
 
-		// 支付结果传值过来是失败,则直接显示失败界面
-		// if (options.payState === 'fail') {
-		//   state.result = 'failed';
-		// } else {
-		// 轮询三次检测订单支付结果
-		await getOrderInfo(state.id);
-		// }
+		// 传payRes过来,是0元购,不需要在当前页面请求了
+		if (options.payRes) {
+			state.payState = 'success'
+			state.orderInfo = JSON.parse(options.payRes)
+			state.result = 'paid';
+
+		} else {
+			// console.log('getOrderInfo')
+			// 轮询三次检测订单支付结果
+			await getOrderInfo(state.id);
+
+		}
+		
+		
 	});
 
 	onShow(() => {
-		if (isEmpty(state.orderInfo)) {
+		
+		if (isEmpty(state.orderInfo) || state.payState === 'success') {
 			return;
 		}
 		getOrderInfo(state.id);

+ 278 - 0
pages/user/wallet/consumptionLog.vue

@@ -0,0 +1,278 @@
+<template>
+	<!-- 消费分来源 -->
+	<s-layout class="wallet-wrap" :bgStyle="{'backgroundColor':'#ffffff'}" title="" navbar="normal">
+
+		<view class="model-box ss-flex-col">
+			<scroll-view class="list-box" scroll-y="true" @touchmove.stop>
+				<view v-if="state.pagination.total > 0" style="padding: 20rpx;">
+					<view class="list-item ss-flex ss-col-center ss-row-between "
+						v-for="(item,index)  in state.pagination.list" :key="item.id"
+						style="padding:0;padding: 20rpx 0;border-bottom: 1px solid #c4c4c4;">
+						<view class="ss-flex ss-col-center" style="width: 100%;">
+							<view class="ss-flex ss-m-t-10"
+								style="flex-direction: column;align-items: flex-start;width: 100%;">
+								<view class="name" style="width: 100%;"> {{ item.consumptionStatusName  }}{{ [3,4].includes(item.consumptionStatus) ? "(" + item.generateUserName +")" : ""}} {{ item.consumptionStatus === 1 ? "(金额:" + points2point(item.practicalConsumptionPoints)+")" : ""}}
+									<text  style="float: right;" class="color-red"
+										:class="{'color-green':item.consumptionPoints < 0}" > 
+										{{item.consumptionPoints > 0 ? '+'+points2point(item.consumptionPoints) : points2point(item.consumptionPoints)}}
+									</text>
+									
+								</view>
+								<view class="time " style="width: 100%;">
+									{{sheep.$helper.timeFormat(item.createTime, 'yyyy-mm-dd hh:MM')}}
+									<text style="float: right;">余额:{{ points2point(item.afterConsumptionPoints)}}</text>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+				<s-empty v-else text="暂无数据" paddingTop="200" icon="/static/data-empty.png" />
+				<uni-load-more v-if="state.pagination.total > 0" :status="state.loadStatus" :content-text="{
+					  contentdown: '点击加载更多',
+					}" @tap="onLoadMore(true)" @scrolltolower="onLoadMore(true)" />
+			</scroll-view>
+
+		</view>
+	</s-layout>
+</template>
+
+<script setup>
+	import sheep from '@/sheep';
+	import {
+		onLoad,
+		onReachBottom
+	} from '@dcloudio/uni-app';
+	import {
+		computed,
+		reactive
+	} from 'vue';
+	import {
+		points2point
+	} from '@/sheep/hooks/useGoods';
+	import _ from 'lodash';
+	import dayjs from 'dayjs';
+	import PointApi from '@/sheep/api/member/point';
+	import {
+		resetPagination
+	} from '@/sheep/util';
+	import ConsumptionApi from '@/sheep/api/distri/consumption';
+	const userWallet = computed(() => sheep.$store('user').userWallet);
+	const statusBarHeight = sheep.$platform.device.statusBarHeight * 2;
+	const userInfo = computed(() => sheep.$store('user').userInfo);
+	const sys_navBar = sheep.$platform.navbar;
+
+	const state = reactive({
+		currentTab: 0,
+		pagination: {
+			list: [],
+			total: 0,
+			pageSize: 10,
+			pageNo: 1,
+		},
+		loadStatus: '',
+		showModel: false,
+		showQueModel: false
+	});
+
+
+	async function getLogList() {
+		state.loadStatus = 'loading';
+		// isFreeze为true是冻结佣金 isFreeze为false是已拿到的佣金
+		let {
+			code,
+			data
+		} = await ConsumptionApi.getConsumptionLog({
+			pageNo: state.pagination.pageNo,
+			pageSize: state.pagination.pageSize,
+		
+		});
+		if (code !== 0) {
+			return;
+		}
+		let list = _.concat(state.pagination.list, data.list);
+		state.pagination.list = list;
+		state.pagination.total = data.total;
+		state.loadStatus = state.pagination.list.length < state.pagination.total ? 'more' : 'noMore';
+	}
+	
+	// 列表标题
+	const title = (item) => {
+		// {{ item.profitStatusName || '空' }}
+		let title = item.profitStatusName + '';
+		// 如果有返回username就显示
+		if(item.username){
+			title += '('+item.username+ ')'
+		}
+
+
+		return title;
+	}
+	
+	
+	function onLoadMore(isFreeze) {
+		if (state.loadStatus === 'noMore') {
+			return;
+		}
+		state.pagination.pageNo++;
+		getLogList();
+	}
+
+	onReachBottom(() => {
+		onLoadMore();
+	});
+	onLoad(() => {
+		getLogList();
+	});
+</script>
+
+<style lang="scss" scoped>
+	.color-red {
+		color: red;
+	}
+
+	.color-green {
+		color: green;
+	}
+
+	.score-box {
+		margin: 20rpx;
+		border-radius: 20rpx;
+		padding-top: 100rpx;
+	}
+
+	.avatar-box {
+		width: 100rpx;
+		height: 100rpx;
+		border-radius: 50%;
+		overflow: hidden;
+
+		.avatar-img {
+			width: 100%;
+			height: 100%;
+		}
+	}
+
+	.value-box {
+		width: 100rpx;
+		height: 100rpx;
+		line-height: 100rpx;
+		text-align: center;
+		border-radius: 50%;
+		border: 2px solid #f6f6f6;
+	}
+
+	.btn {
+		width: 300rpx;
+		background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
+		border-radius: 20rpx;
+		font-size: 30rpx;
+		font-weight: 500;
+		line-height: 80rpx;
+		color: $white;
+		position: relative;
+		z-index: 1;
+	}
+
+	.header-box {
+		width: 100%;
+		background: linear-gradient(180deg, var(--ui-BG-Main) 0%, var(--ui-BG-Main-gradient) 100%) no-repeat;
+		background-size: 750rpx 100%;
+		padding: 0 0 120rpx 0;
+		box-sizing: border-box;
+
+		.score-box {
+			height: 100%;
+
+			.all-num {
+				font-size: 50rpx;
+				font-weight: bold;
+				color: #fff;
+				font-family: OPPOSANS;
+			}
+
+			.all-title {
+				font-size: 26rpx;
+				font-weight: 500;
+				color: #fff;
+			}
+
+			.cicon-help-o {
+				color: #fff;
+				font-size: 28rpx;
+			}
+		}
+	}
+
+	// 筛选
+	.filter-box {
+		height: 114rpx;
+		background-color: $bg-page;
+
+		.total-box {
+			font-size: 24rpx;
+			font-weight: 500;
+			color: $dark-9;
+		}
+
+		.date-btn {
+			background-color: $white;
+			line-height: 54rpx;
+			border-radius: 27rpx;
+			padding: 0 20rpx;
+			font-size: 24rpx;
+			font-weight: 500;
+			color: $dark-6;
+
+			.ss-seldate-icon {
+				font-size: 50rpx;
+				color: $dark-9;
+			}
+		}
+	}
+
+
+	.list-box {
+		// width: 600rpx;
+		// padding: 0 30rpx;
+		overflow-y: auto;
+		height: 100vh;
+
+		.list-item {
+
+			background: #fff;
+			// border-bottom: 1rpx solid #dfdfdf;
+			padding: 30rpx;
+
+			.name {
+				font-size: 28rpx;
+
+				font-weight: 500;
+				color: rgba(102, 102, 102, 1);
+				line-height: 28rpx;
+				// margin-bottom: 20rpx;
+			}
+
+			.time {
+				font-size: 24rpx;
+
+				font-weight: 500;
+				color: rgba(196, 196, 196, 1);
+				line-height: 24px;
+			}
+
+			.add {
+				font-size: 30rpx;
+
+				font-weight: 500;
+				color: #e6b873;
+			}
+
+			.minus {
+				font-size: 30rpx;
+
+				font-weight: 500;
+				color: $dark-3;
+			}
+		}
+	}
+</style>

+ 487 - 0
pages/user/wallet/consumptionTransfers.vue

@@ -0,0 +1,487 @@
+<template>
+	<s-layout class="set-wrap" title="消费分转让" :bgStyle="{ color: '#FFF' }">
+		<uni-forms :model="state.model" :rules="state.rules" validateTrigger="bind" labelPosition="left" border
+			class="form-box" labelWidth='200' ref="FormRef">
+			<view class="bg-white ss-p-x-30">
+				<uni-forms-item name="recipientUserName" label="接收人" :required="true"
+					:error-message="state.usernameErrorMsg">
+					<uni-easyinput v-model="state.model.recipientUserName" type="recipientUserName"
+						placeholder="请输入接收人用户名" :inputBorder="false" :clearable="false" @blur="verifyUsername">
+						<template v-slot:right>
+							<view v-if="state.verifyUsername" class="icon">
+								<image style :src="sheep.$url.static('/static/images/shibai.png')" />
+							</view>
+							<view v-else class="icon">
+								<image :src="sheep.$url.static('/static/images/chenggong.png')" />
+							</view>
+						</template>
+					</uni-easyinput>
+				</uni-forms-item>
+				<uni-forms-item name="recipientUserPhone" label="接收人手机号" :required="true"
+					:error-message="state.mobileErrorMsg">
+					<uni-easyinput v-model="state.model.recipientUserPhone" type="number"
+						placeholder="请输入接收人手机号" :inputBorder="false" :clearable="false"
+						@blur="verifyPhone" >
+						<template v-slot:right>
+							<view v-if="state.verifyMobile" class="icon">
+								<image style :src="sheep.$url.static('/static/images/shibai.png')" />
+							</view>
+							<view v-else class="icon">
+								<image :src="sheep.$url.static('/static/images/chenggong.png')" />
+							</view>
+						</template>
+					</uni-easyinput>
+				</uni-forms-item>
+
+				<uni-forms-item name="mobile" label="手机号" class="mobile loginUniFormItem ss-p-t-10"
+					>
+					<uni-easyinput v-model="state.model.smsCodeUseReqDTO.mobile" type="smsCodeUseReqDTO"
+						placeholder="请输入验证码" :inputBorder="false" :clearable="false" :disabled="true">
+						<template v-slot:right>
+							<button class="ss-reset-button code-btn code-btn-start" :disabled="!verifyUsername"
+								:class="{ 'disabled': !verifyUsername }"
+								@tap="getSmsCode('consumptionTransfers', state.model.smsCodeUseReqDTO.mobile)">
+								{{ getSmsTimer('consumptionTransfers') }}
+							</button>
+						</template>
+					</uni-easyinput>
+				</uni-forms-item>
+				<uni-forms-item name="smsCodeUseReqDTO.code" label="验证码" :required="true">
+					<uni-easyinput v-model="state.model.smsCodeUseReqDTO.code" type="number"
+						placeholder="请输入验证码" :inputBorder="false" :clearable="false">
+					</uni-easyinput>
+				</uni-forms-item>
+				<uni-forms-item name="consumptionPoints" label="转让金额" :required="true">
+					<uni-easyinput v-model="state.model.consumptionPoints" type="number"
+						placeholder="请输入转让金额" :inputBorder="false" :clearable="false" @input="validateInput" />
+				</uni-forms-item>
+
+
+			</view>
+		</uni-forms>
+		<view class="ss-flex ss-row-center ss-col-center ss-m-t-30">
+			您当前可转让的金额:<text class="text-red">{{canUseConsumptionPoints}}</text>
+			<!-- <button class="ss-m-l-10 all-btn " @click="useAllPonints">全部</button> -->
+
+		</view>
+		<su-fixed bottom placeholder bg="none">
+			<view class="footer-box ss-p-20 ss-flex">
+				<button class="ss-rest-button btn" @tap="onSubmit">确定</button>
+			</view>
+		</su-fixed>
+
+	</s-layout>
+</template>
+
+
+<script setup>
+	import {
+		computed,
+		reactive,
+		onBeforeMount,
+		ref,
+		unref,
+		watch,
+		nextTick
+	} from 'vue';
+	import sheep from '@/sheep';
+	import {
+		clone
+	} from 'lodash';
+	import {
+		onLoad
+	} from '@dcloudio/uni-app';
+	import {
+		points2point
+	} from '@/sheep/hooks/useGoods';
+	import {
+		email
+	} from '@/sheep/validate/form';
+
+	import AuthUtil from '@/sheep/api/member/auth';
+	import ConsumptionApi from '@/sheep/api/distri/consumption';
+	import {
+		showAuthModal,
+		closeAuthModal,
+		getSmsCode,
+		getSmsTimer,
+		showWalletModal,
+		colseWalletModal
+	} from '@/sheep/hooks/useModal';
+	const userInfo = computed(() => sheep.$store('user').userInfo);
+	const userWallet = computed(() => sheep.$store('user').userWallet);
+	const state = reactive({
+		verifyUsername: true,
+		verifyMobile:true,
+		usernameErrorMsg: '',
+		mobileErrorMsg: '',
+		model: {
+			recipientUserName: undefined,
+			recipientUserId: undefined,
+			recipientUserPhone: undefined,
+			consumptionPoints: undefined,
+			smsCodeUseReqDTO: {
+				mobile: undefined,
+				scene: 11,
+				code: undefined
+			}
+		},
+		rules: {
+			recipientUserName: {
+				rules: [{
+					required: true,
+					errorMessage: '接收人不能为空',
+				}, ],
+			},
+			recipientUserPhone: {
+				rules: [{
+					required: true,
+					errorMessage: '接收人手机号不能为空',
+				}, ],
+			},
+			"smsCodeUseReqDTO.code": {
+				rules: [{
+					required: true,
+					errorMessage: '验证码不能为空',
+				}, ],
+			},
+			consumptionPoints: {
+				rules: [{
+					required: true,
+					errorMessage: '转让金额不能为空',
+				}, 
+				{
+				  validateFunction: function (rule, value, data, callback) {
+
+				    if (value<=0) {
+				      callback('转让金额不能小于等于0');
+				    }
+				    return true;
+				  },
+				},
+				],
+			},
+		}
+	});
+	const canUseConsumptionPoints = computed(() => points2point(userWallet.value.integralDO.consumptionPoints));
+	let lastUsername = ref('')
+	async function verifyUsername(e) {
+		const username = e.detail.value;
+		if (username == '' || username == lastUsername.value) {
+			return false;
+		}else if (username === userInfo.value.username) {
+			state.usernameErrorMsg = '接收人不能为自己'
+			return false;
+		}
+		lastUsername.value = username
+		// 提交数据
+		const {
+			data
+		} = await AuthUtil.verifyUsername(username);
+		if (data) {
+			state.usernameErrorMsg = '用户不存在!'
+		} else {
+			state.usernameErrorMsg = ''
+		}
+		state.verifyUsername = data
+	}
+	let lastphone = ref('')
+	async function verifyPhone(e) {
+		const phone = e.detail.value;
+		if (phone == '' || phone == lastphone.value) {
+			// 为空或者没改东西,不调校验
+			return false;
+		}
+		lastphone.value = phone
+		// 提交数据
+		const {
+			data
+		} = await AuthUtil.verifyPhone(state.model.recipientUserName, phone);
+		// false就是已经有这个用户名,可以登录,true是没有,不可以登录
+		if (!data || data.mobile !== phone ) {
+			state.mobileErrorMsg = '接收人用户名与手机号不匹配!'
+			state.verifyMobile = true
+		} else {
+			state.mobileErrorMsg = ''
+			state.model.recipientUserId = data.id
+			state.verifyMobile = false
+		}
+	}
+	async function validateInput(value) {
+		// 确保输入是整数
+		const intValue = parseInt(value);
+		const strPoints = value.toString()
+		const [integerPart, decimalPart] = strPoints.split('.')
+		if (decimalPart) {
+			const points = parseFloat(`${integerPart}.${decimalPart.slice(0, 2)}`);
+			// 使用 nextTick 确保 DOM 更新
+			nextTick(() => {
+				state.model.consumptionPoints = integerPart;
+			});
+		}
+		
+		if (intValue > parseInt(canUseConsumptionPoints.value)) {
+			nextTick(() => {
+				state.model.consumptionPoints = parseInt(canUseConsumptionPoints.value); 
+			});
+
+		} else {
+			nextTick(() => {
+				state.model.consumptionPoints = intValue; 
+			});
+		}
+	}
+
+	// 提交审核
+	const FormRef = ref(null);
+	const onSubmit = async () => {
+		
+		if(state.model.recipientUserName === userInfo.value.username){
+			uni.showToast({
+				title: '不能给自己转账',
+				icon: 'none',
+				duration: 2000
+			})
+			return;
+		}else if (state.verifyUsername ) {
+			return;
+		}else if(state.verifyMobile ){
+			return;
+		}
+		// 参数校验
+		const validate = await unref(FormRef)
+			.validate()
+			.catch((error) => {
+				console.log('error: ', error);
+			});
+		if (!validate) {
+			return;
+		}
+		const {
+			data,
+			code
+		} = await ConsumptionApi.createConsumptionLog(state.model);
+		if (code === 0) {
+			showWalletModal({msg:"转账成功"})
+			uni.$emit('consumptionTransfersComplete');
+			sheep.$router.redirect('/pages/user/wallet/score')
+		}
+	}
+
+	const isLogin = computed(() => sheep.$store('user').isLogin);
+	// 监听到在这个页面登陆,并刷新页面
+	watch(
+		() => isLogin.value,
+		(newVal) => {
+			if (newVal) {
+				window.location.reload()
+			}
+		}, {
+			deep: true, // 深度监听
+		},
+	);
+
+	onLoad(async (options) => {
+		if (!isLogin.value) {
+			showAuthModal();
+		}
+		state.model.smsCodeUseReqDTO.mobile = userInfo.value.mobile
+	});
+</script>
+
+<style lang="scss" scoped>
+	.code-btn-start {
+
+		width: 158rpx;
+		height: 56rpx;
+		line-height: normal;
+		background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
+		border-radius: 28rpx;
+		font-size: 26rpx;
+		font-weight: 500;
+		color: #fff;
+
+	}
+
+	.disabled {
+		border: 1px solid #f7f7f7;
+	}
+
+	.icon {
+		display: flex;
+		align-items: center;
+		margin-right: 7rpx
+	}
+
+	.icon image {
+		width: 35rpx;
+		height: 35rpx;
+	}
+
+	:deep() {
+
+		.file-picker__progress {
+			height: 0 !important;
+		}
+
+		.uni-list-item__content-title {
+			font-size: 28rpx !important;
+			color: #333333 !important;
+			line-height: normal !important;
+		}
+
+		.uni-icons {
+			font-size: 40rpx !important;
+		}
+
+		.is-disabled {
+			color: #333333;
+		}
+	}
+
+	:deep(.disabled) {
+		opacity: 1;
+	}
+
+	.gender-name {
+		font-size: 28rpx;
+		font-weight: 500;
+		line-height: normal;
+		color: #333333;
+	}
+
+	.title-box {
+		font-size: 28rpx;
+		font-weight: 500;
+		color: #666666;
+		line-height: 100rpx;
+	}
+
+	.btn {
+		width: 710rpx;
+		height: 80rpx;
+		background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
+		border-radius: 40rpx;
+		font-size: 30rpx;
+		font-weight: 500;
+		color: $white;
+	}
+
+	.btn-two {
+		width: 310rpx;
+		height: 80rpx;
+		background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
+		border-radius: 40rpx;
+		font-size: 30rpx;
+		font-weight: 500;
+		color: $white;
+	}
+
+	.radio-dark {
+		filter: grayscale(100%);
+		filter: gray;
+		opacity: 0.4;
+	}
+
+	.content-img {
+		border-radius: 50%;
+	}
+
+	.header-box-content {
+		position: relative;
+		width: 160rpx;
+		height: 160rpx;
+		overflow: hidden;
+		border-radius: 50%;
+	}
+
+	.avatar-action {
+		position: absolute;
+		left: 50%;
+		transform: translateX(-50%);
+		bottom: 0;
+		z-index: 1;
+		width: 160rpx;
+		height: 46rpx;
+		background: rgba(#000000, 0.3);
+
+		.avatar-action-btn {
+			width: 160rpx;
+			height: 46rpx;
+			font-weight: 500;
+			font-size: 24rpx;
+			color: #ffffff;
+		}
+	}
+
+	// 绑定项
+	.account-list {
+		background-color: $white;
+		height: 100rpx;
+		padding: 0 20rpx;
+
+		.list-img {
+			width: 40rpx;
+			height: 40rpx;
+			margin-right: 10rpx;
+		}
+
+		.list-name {
+			font-size: 28rpx;
+			color: #333333;
+		}
+
+		.info {
+			.avatar {
+				width: 38rpx;
+				height: 38rpx;
+				border-radius: 50%;
+				overflow: hidden;
+			}
+
+			.name {
+				font-size: 28rpx;
+				font-weight: 400;
+				color: $dark-9;
+			}
+		}
+
+		.bind-box {
+			width: 100rpx;
+			height: 50rpx;
+			line-height: normal;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			font-size: 24rpx;
+
+			.bind-btn {
+				width: 100%;
+				height: 100%;
+				border-radius: 25rpx;
+				background: #f4f4f4;
+				color: #999999;
+			}
+
+			.relieve-btn {
+				width: 100%;
+				height: 100%;
+				border-radius: 25rpx;
+				background: var(--ui-BG-Main-opacity-1);
+				color: var(--ui-BG-Main);
+			}
+		}
+	}
+
+	.list-border {
+		font-size: 28rpx;
+		font-weight: 400;
+		color: #333333;
+		border-bottom: 2rpx solid #eeeeee;
+	}
+
+	image {
+		width: 100%;
+		height: 100%;
+	}
+</style>

+ 282 - 0
pages/user/wallet/consumptionTransfersLog.vue

@@ -0,0 +1,282 @@
+<template>
+	<!-- 消费分转账 -->
+	<s-layout class="wallet-wrap" :bgStyle="{'backgroundColor':'#ffffff'}" title="" navbar="normal">
+
+		<view class="model-box ss-flex-col">
+			<scroll-view class="list-box" scroll-y="true" @touchmove.stop>
+				<view v-if="state.pagination.total > 0" style="padding: 20rpx;">
+					<view class="list-item ss-flex ss-col-center ss-row-between "
+						v-for="(item,index)  in state.pagination.list" :key="item.id"
+						style="padding:0;padding: 20rpx 0;border-bottom: 1px solid #c4c4c4;">
+						<view class="ss-flex ss-col-center" style="width: 100%;">
+							<view class="ss-flex ss-m-t-10"
+								style="flex-direction: column;align-items: flex-start;width: 100%;">
+								<view class="name" style="width: 100%;"> {{ item.transferUserName+ ' > ' + item.recipientUserName }} 
+									<text  style="float: right;" class="color-red"
+										:class="{'color-green':formatChangeValue(item) < 0}" > 
+										{{ formatChangeValue(item) }}
+									</text>
+									
+								</view>
+								<view class="time " style="width: 100%;">
+									{{sheep.$helper.timeFormat(item.createTime, 'yyyy-mm-dd hh:MM')}}
+									<text style="float: right;">余额:{{ formatValue(item)}}</text>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+				<s-empty v-else text="暂无数据" paddingTop="200" icon="/static/data-empty.png" />
+				<uni-load-more v-if="state.pagination.total > 0" :status="state.loadStatus" :content-text="{
+					  contentdown: '点击加载更多',
+					}" @tap="onLoadMore(true)" @scrolltolower="onLoadMore(true)" />
+			</scroll-view>
+
+		</view>
+	</s-layout>
+</template>
+
+<script setup>
+	import sheep from '@/sheep';
+	import {
+		onLoad,
+		onReachBottom
+	} from '@dcloudio/uni-app';
+	import {
+		computed,
+		reactive
+	} from 'vue';
+	import {
+		points2point
+	} from '@/sheep/hooks/useGoods';
+	import _ from 'lodash';
+	import dayjs from 'dayjs';
+	import PointApi from '@/sheep/api/member/point';
+	import {
+		resetPagination
+	} from '@/sheep/util';
+	import ConsumptionApi from '@/sheep/api/distri/consumption';
+	const userWallet = computed(() => sheep.$store('user').userWallet);
+	const statusBarHeight = sheep.$platform.device.statusBarHeight * 2;
+	const userInfo = computed(() => sheep.$store('user').userInfo);
+	const sys_navBar = sheep.$platform.navbar;
+
+	const state = reactive({
+		currentTab: 0,
+		pagination: {
+			list: [],
+			total: 0,
+			pageSize: 10,
+			pageNo: 1,
+		},
+		loadStatus: '',
+		showModel: false,
+		showQueModel: false
+	});
+
+
+	async function getLogList() {
+		state.loadStatus = 'loading';
+		// isFreeze为true是冻结佣金 isFreeze为false是已拿到的佣金
+		let {
+			code,
+			data
+		} = await ConsumptionApi.getConsumptionTransfersLog({
+			pageNo: state.pagination.pageNo,
+			pageSize: state.pagination.pageSize,
+		
+		});
+		if (code !== 0) {
+			return;
+		}
+		let list = _.concat(state.pagination.list, data.list);
+		state.pagination.list = list;
+		state.pagination.total = data.total;
+		state.loadStatus = state.pagination.list.length < state.pagination.total ? 'more' : 'noMore';
+	}
+	const currentUserId = userWallet.value.integralDO.userId;
+	// 变化的值
+	const formatChangeValue = (item) => {
+	
+		if(currentUserId === item.recipientUserId){
+			return points2point(item.recipientPoints)
+		}else{
+			return points2point(item.consumptionPoints)
+		}
+	}
+	const formatValue = (item) => {
+
+		if(currentUserId === item.recipientUserId){
+			return points2point(item.afterRecipientConsumptionPoints)
+		}else{
+			return points2point(item.afterTransferConsumptionPoints)
+		}
+	}
+	
+	function onLoadMore(isFreeze) {
+		if (state.loadStatus === 'noMore') {
+			return;
+		}
+		state.pagination.pageNo++;
+		getLogList();
+	}
+
+	onReachBottom(() => {
+		onLoadMore();
+	});
+	onLoad(() => {
+		getLogList();
+	});
+</script>
+
+<style lang="scss" scoped>
+	.color-red {
+		color: red;
+	}
+
+	.color-green {
+		color: green;
+	}
+
+	.score-box {
+		margin: 20rpx;
+		border-radius: 20rpx;
+		padding-top: 100rpx;
+	}
+
+	.avatar-box {
+		width: 100rpx;
+		height: 100rpx;
+		border-radius: 50%;
+		overflow: hidden;
+
+		.avatar-img {
+			width: 100%;
+			height: 100%;
+		}
+	}
+
+	.value-box {
+		width: 100rpx;
+		height: 100rpx;
+		line-height: 100rpx;
+		text-align: center;
+		border-radius: 50%;
+		border: 2px solid #f6f6f6;
+	}
+
+	.btn {
+		width: 300rpx;
+		background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
+		border-radius: 20rpx;
+		font-size: 30rpx;
+		font-weight: 500;
+		line-height: 80rpx;
+		color: $white;
+		position: relative;
+		z-index: 1;
+	}
+
+	.header-box {
+		width: 100%;
+		background: linear-gradient(180deg, var(--ui-BG-Main) 0%, var(--ui-BG-Main-gradient) 100%) no-repeat;
+		background-size: 750rpx 100%;
+		padding: 0 0 120rpx 0;
+		box-sizing: border-box;
+
+		.score-box {
+			height: 100%;
+
+			.all-num {
+				font-size: 50rpx;
+				font-weight: bold;
+				color: #fff;
+				font-family: OPPOSANS;
+			}
+
+			.all-title {
+				font-size: 26rpx;
+				font-weight: 500;
+				color: #fff;
+			}
+
+			.cicon-help-o {
+				color: #fff;
+				font-size: 28rpx;
+			}
+		}
+	}
+
+	// 筛选
+	.filter-box {
+		height: 114rpx;
+		background-color: $bg-page;
+
+		.total-box {
+			font-size: 24rpx;
+			font-weight: 500;
+			color: $dark-9;
+		}
+
+		.date-btn {
+			background-color: $white;
+			line-height: 54rpx;
+			border-radius: 27rpx;
+			padding: 0 20rpx;
+			font-size: 24rpx;
+			font-weight: 500;
+			color: $dark-6;
+
+			.ss-seldate-icon {
+				font-size: 50rpx;
+				color: $dark-9;
+			}
+		}
+	}
+
+
+	.list-box {
+		// width: 600rpx;
+		// padding: 0 30rpx;
+		overflow-y: auto;
+		height: 100vh;
+
+		.list-item {
+
+			background: #fff;
+			// border-bottom: 1rpx solid #dfdfdf;
+			padding: 30rpx;
+
+			.name {
+				font-size: 28rpx;
+
+				font-weight: 500;
+				color: rgba(102, 102, 102, 1);
+				line-height: 28rpx;
+				// margin-bottom: 20rpx;
+			}
+
+			.time {
+				font-size: 24rpx;
+
+				font-weight: 500;
+				color: rgba(196, 196, 196, 1);
+				line-height: 24px;
+			}
+
+			.add {
+				font-size: 30rpx;
+
+				font-weight: 500;
+				color: #e6b873;
+			}
+
+			.minus {
+				font-size: 30rpx;
+
+				font-weight: 500;
+				color: $dark-3;
+			}
+		}
+	}
+</style>

+ 71 - 34
pages/user/wallet/score.vue

@@ -1,25 +1,48 @@
 <!-- 我的佣金 -->
 <template>
-	<s-layout class="wallet-wrap" :bgStyle="{'backgroundColor':'#ffffff'}" title="我的佣金" navbar="normal">
+	<s-layout class="wallet-wrap" :bgStyle="{'backgroundColor':'#ffffff'}" title="钱包" navbar="normal">
 		<view class="score-box bg-white ss-flex-col ss-row-center ss-col-center">
-			<view class="ss-m-b-10  circle value-box ss-flex ss-row-center" :style="circleStyle">
-				<view>佣金</view>
-			</view>
-			<view class="ss-m-b-30 ss-font-40" :style="{color:percentageColor}">
-				<text class="all-title ss-m-r-8">{{ points2point(userWallet.integralDO.currentQuota) }}</text>
-			</view>
-			<view class="ss-m-b-40 ss-flex">
-				<!-- <view class="all-title ss-m-r-8">
-					<button class="btn ss-reset-button"
-						@tap="sheep.$router.go('/pages/goods/list', { categoryId: 98 })">
-						兑换
-					</button>
-				</view> -->
-				<view class="all-title ss-m-r-8" >
-					<button class="btn ss-reset-button"
-						@tap="sheep.$router.go('/pages/user/wallet/withdraw')">
-						提现
-					</button>
+			<view class="ss-flex ss-m-y-30 w-100">
+				<view class="ss-flex"  style="flex-direction: column;flex:1;border-right:1px solid #f6f6f6">
+					<view class="ss-m-b-10  circle value-box ss-flex ss-row-center" :style="circleStyle">
+						<view>佣金</view>
+					</view>
+					<view class="ss-m-b-30 ss-font-40" :style="{color:percentageColor}">
+						<text class="all-title ss-m-r-8">{{ points2point(userWallet.integralDO.currentQuota) }}</text>
+					</view>
+					<view class="ss-flex">
+						<view class="all-title ss-m-r-8">
+							<button class="btn ss-reset-button" @tap="sheep.$router.go('/pages/user/wallet/withdraw')">
+								提现
+							</button>
+						</view>
+						<view class="all-title ss-m-r-8">
+							<button class="btn ss-reset-button" @tap="sheep.$router.go('/pages/user/wallet/scoreToConsumption')">
+								转消费分
+							</button>
+						</view>
+					</view>
+				</view>
+				<view class="ss-flex" style="flex-direction: column;flex:1;">
+					<view class="ss-m-b-10  circle value-box ss-flex ss-row-center" style="background:#0c912f">
+						<view>消费分</view>
+					</view>
+					<view class="ss-m-b-30 ss-font-40" style="color:#0c912f">
+						<text class="all-title ss-m-r-8">{{ points2point(userWallet.integralDO.consumptionPoints) }}</text>
+					</view>
+					<view class="ss-flex">
+						<view class="all-title ss-m-x-8" v-if="isBeta">
+							<button class="btn ss-reset-button" @tap="sheep.$router.go('/pages/user/wallet/topupConsumptionPoints')">
+								充值
+							</button>
+						</view>
+						<view class="all-title ss-m-x-8">
+							
+							<button class="btn ss-reset-button" @tap="sheep.$router.go('/pages/user/wallet/consumptionTransfers')">
+								消费分转让
+							</button>
+						</view>
+					</view>
 				</view>
 			</view>
 			<!-- 分割线 -->
@@ -40,15 +63,27 @@
 					</template>
 				</uni-list-item> -->
 				<uni-list-item clickable @tap="sheep.$router.go('/pages/user/wallet/ScoreLog',{isFreeze: false})"
-					title="佣金来源记录" showArrow :border="false">
+					title="佣金记录" showArrow :border="false">
 					<template v-slot:body>
-						<p style="width: 100%">佣金来源记录</p>
+						<p style="width: 100%">佣金记录</p>
 					</template>
 				</uni-list-item>
-				<uni-list-item clickable @tap="sheep.$router.go('/pages/user/wallet/withdrawalLog')"
-					title="提现记录" showArrow :border="false">
+				<uni-list-item clickable @tap="sheep.$router.go('/pages/user/wallet/consumptionLog')"
+					title="消费分记录" showArrow :border="false">
 					<template v-slot:body>
-						<p style="width: 100%">提现记录 (预计24小时左右到账)</p>
+						<p style="width: 100%">消费分记录</p>
+					</template>
+				</uni-list-item>
+				<!-- <uni-list-item clickable @tap="sheep.$router.go('/pages/user/wallet/consumptionTransfersLog')"
+					title="消费分转账" showArrow :border="false">
+					<template v-slot:body>
+						<p style="width: 100%">消费分转账</p>
+					</template>
+				</uni-list-item> -->
+				<uni-list-item clickable @tap="sheep.$router.go('/pages/user/wallet/withdrawalLog')" title="提现记录"
+					showArrow :border="false">
+					<template v-slot:body>
+						<p style="width: 100%">提现 (预计24小时左右到账)</p>
 					</template>
 				</uni-list-item>
 				<uni-list-item clickable @tap="state.showModel = true" title="佣金计算规则" :border="false">
@@ -87,7 +122,8 @@
 		reactive
 	} from 'vue';
 	import {
-		points2point
+		points2point,
+		isBetaUser
 	} from '@/sheep/hooks/useGoods';
 	import _ from 'lodash';
 	import dayjs from 'dayjs';
@@ -102,6 +138,7 @@
 	const userWallet = computed(() => sheep.$store('user').userWallet);
 	const statusBarHeight = sheep.$platform.device.statusBarHeight * 2;
 	const userInfo = computed(() => sheep.$store('user').userInfo);
+	const isBeta = computed(() => isBetaUser(userInfo.value.username));
 	const sys_navBar = sheep.$platform.navbar;
 
 	const state = reactive({
@@ -148,6 +185,7 @@
 	});
 	onLoad((options) => {
 		uni.$on('createWithDrawComplete', sheep.$store('user').getWallet);
+		uni.$on('consumptionTransfersComplete', sheep.$store('user').getWallet);
 	});
 </script>
 
@@ -163,10 +201,10 @@
 	.circle::before {
 		content: '';
 		position: absolute;
-		top: 10px;
-		left: 10px;
-		right: 10px;
-		bottom: 10px;
+		top: 5px;
+		left: 5px;
+		right: 5px;
+		bottom: 5px;
 		border-radius: 50%;
 		background-color: #fff;
 	}
@@ -218,7 +256,7 @@
 
 	.score-box {
 		border-radius: 20rpx;
-		padding-top: 100rpx;
+		// padding-top: 100rpx;
 	}
 
 	.avatar-box {
@@ -242,17 +280,16 @@
 	}
 
 	.btn {
-		width: 250rpx;
+		padding:0 1rem;
 		background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
 		border-radius: 20rpx;
-		font-size: 30rpx;
+		font-size: 28rpx;
 		font-weight: 500;
-		line-height: 80rpx;
 		color: $white;
 		position: relative;
 		z-index: 1;
 	}
-
+	
 	.header-box {
 		width: 100%;
 		background: linear-gradient(180deg, var(--ui-BG-Main) 0%, var(--ui-BG-Main-gradient) 100%) no-repeat;

+ 361 - 0
pages/user/wallet/scoreToConsumption.vue

@@ -0,0 +1,361 @@
+<template>
+	<s-layout class="set-wrap" title="佣金转消费分" :bgStyle="{ color: '#FFF' }">
+		<uni-forms :model="state.model" :rules="state.rules" validateTrigger="bind" labelPosition="left" border
+			class="form-box" labelWidth='200' ref="FormRef">
+			<view class="bg-white ss-p-x-30">
+				<uni-forms-item name="quota" label="消费分" :required="true">
+					<uni-easyinput v-model="state.model.quota" type="number"
+						placeholder="请输入转换金额" :inputBorder="false" :clearable="false" @input="validateInput" />
+				</uni-forms-item>
+
+
+			</view>
+		</uni-forms>
+		<view class="ss-flex ss-row-center ss-col-center ss-m-t-30">
+			您当前可转换的佣金额度:<text class="text-red">{{currentQuota}}</text>
+			<!-- <button class="ss-m-l-10 all-btn " @click="useAllPonints">全部</button> -->
+
+		</view>
+		<su-fixed bottom placeholder bg="none">
+			<view class="footer-box ss-p-20 ss-flex">
+				<button class="ss-rest-button btn" @tap="onSubmit">确定</button>
+			</view>
+		</su-fixed>
+
+	</s-layout>
+</template>
+
+
+<script setup>
+	import {
+		computed,
+		reactive,
+		onBeforeMount,
+		ref,
+		unref,
+		watch,
+		nextTick
+	} from 'vue';
+	import sheep from '@/sheep';
+	import {
+		clone
+	} from 'lodash';
+	import {
+		onLoad
+	} from '@dcloudio/uni-app';
+	import {
+		points2point
+	} from '@/sheep/hooks/useGoods';
+	import {
+		email
+	} from '@/sheep/validate/form';
+
+	import AuthUtil from '@/sheep/api/member/auth';
+	import ConsumptionApi from '@/sheep/api/distri/consumption';
+	import {
+		showAuthModal,
+	} from '@/sheep/hooks/useModal';
+	const userInfo = computed(() => sheep.$store('user').userInfo);
+	const userWallet = computed(() => sheep.$store('user').userWallet);
+	const state = reactive({
+
+		model: {
+			quota: undefined,
+		},
+		rules: {
+			quota: {
+				rules: [{
+					required: true,
+					errorMessage: '转换金额不能为空',
+				}, 
+				{
+				  validateFunction: function (rule, value, data, callback) {
+				    if (value<=0) {
+				      callback('转换金额不能小于等于0');
+				    }
+				    return true;
+				  },
+				},
+				],
+			},
+		}
+	});
+	const currentQuota = computed(() => points2point(userWallet.value.integralDO.currentQuota));
+	
+	async function validateInput(value) {
+		// 确保输入是整数
+		const intValue = parseInt(value);
+		const strPoints = value.toString()
+		const [integerPart, decimalPart] = strPoints.split('.')
+		if (decimalPart) {
+			nextTick(() => {
+				state.model.quota = integerPart;
+			});
+		}
+		
+		if (intValue > parseInt(currentQuota.value)) {
+			nextTick(() => {
+				state.model.quota = parseInt(currentQuota.value); 
+			});
+
+		} else {
+			nextTick(() => {
+				state.model.quota = intValue; 
+			});
+		}
+	}
+
+	// 提交审核
+	const FormRef = ref(null);
+	const onSubmit = async () => {
+		// 参数校验
+		const validate = await unref(FormRef)
+			.validate()
+			.catch((error) => {
+				console.log('error: ', error);
+			});
+		if (!validate) {
+			return;
+		}
+		uni.showModal({
+			title: '提示',
+			content: '佣金转为消费分后不可逆,是否转换?',
+			
+			success: async function(res) {
+				if (!res.confirm) {
+					return;
+				}
+				const {
+					data,
+					code
+				} = await ConsumptionApi.quotaTransition(state.model.quota);
+				if (code === 0) {
+					uni.showToast({
+						title: '转换成功',
+						icon: 'none',
+						duration: 2000
+					});
+					uni.$emit('consumptionTransfersComplete');
+					sheep.$router.redirect('/pages/user/wallet/score')
+				}
+			},
+		});
+		
+	}
+
+	const isLogin = computed(() => sheep.$store('user').isLogin);
+	// 监听到在这个页面登陆,并刷新页面
+	watch(
+		() => isLogin.value,
+		(newVal) => {
+			if (newVal) {
+				window.location.reload()
+			}
+		}, {
+			deep: true, // 深度监听
+		},
+	);
+
+	onLoad(async (options) => {
+		if (!isLogin.value) {
+			showAuthModal();
+		}
+	});
+</script>
+
+<style lang="scss" scoped>
+	.code-btn-start {
+
+		width: 158rpx;
+		height: 56rpx;
+		line-height: normal;
+		background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
+		border-radius: 28rpx;
+		font-size: 26rpx;
+		font-weight: 500;
+		color: #fff;
+
+	}
+
+	.disabled {
+		border: 1px solid #f7f7f7;
+	}
+
+	.icon {
+		display: flex;
+		align-items: center;
+		margin-right: 7rpx
+	}
+
+	.icon image {
+		width: 35rpx;
+		height: 35rpx;
+	}
+
+	:deep() {
+
+		.file-picker__progress {
+			height: 0 !important;
+		}
+
+		.uni-list-item__content-title {
+			font-size: 28rpx !important;
+			color: #333333 !important;
+			line-height: normal !important;
+		}
+
+		.uni-icons {
+			font-size: 40rpx !important;
+		}
+
+		.is-disabled {
+			color: #333333;
+		}
+	}
+
+	:deep(.disabled) {
+		opacity: 1;
+	}
+
+	.gender-name {
+		font-size: 28rpx;
+		font-weight: 500;
+		line-height: normal;
+		color: #333333;
+	}
+
+	.title-box {
+		font-size: 28rpx;
+		font-weight: 500;
+		color: #666666;
+		line-height: 100rpx;
+	}
+
+	.btn {
+		width: 710rpx;
+		height: 80rpx;
+		background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
+		border-radius: 40rpx;
+		font-size: 30rpx;
+		font-weight: 500;
+		color: $white;
+	}
+
+	.btn-two {
+		width: 310rpx;
+		height: 80rpx;
+		background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
+		border-radius: 40rpx;
+		font-size: 30rpx;
+		font-weight: 500;
+		color: $white;
+	}
+
+	.radio-dark {
+		filter: grayscale(100%);
+		filter: gray;
+		opacity: 0.4;
+	}
+
+	.content-img {
+		border-radius: 50%;
+	}
+
+	.header-box-content {
+		position: relative;
+		width: 160rpx;
+		height: 160rpx;
+		overflow: hidden;
+		border-radius: 50%;
+	}
+
+	.avatar-action {
+		position: absolute;
+		left: 50%;
+		transform: translateX(-50%);
+		bottom: 0;
+		z-index: 1;
+		width: 160rpx;
+		height: 46rpx;
+		background: rgba(#000000, 0.3);
+
+		.avatar-action-btn {
+			width: 160rpx;
+			height: 46rpx;
+			font-weight: 500;
+			font-size: 24rpx;
+			color: #ffffff;
+		}
+	}
+
+	// 绑定项
+	.account-list {
+		background-color: $white;
+		height: 100rpx;
+		padding: 0 20rpx;
+
+		.list-img {
+			width: 40rpx;
+			height: 40rpx;
+			margin-right: 10rpx;
+		}
+
+		.list-name {
+			font-size: 28rpx;
+			color: #333333;
+		}
+
+		.info {
+			.avatar {
+				width: 38rpx;
+				height: 38rpx;
+				border-radius: 50%;
+				overflow: hidden;
+			}
+
+			.name {
+				font-size: 28rpx;
+				font-weight: 400;
+				color: $dark-9;
+			}
+		}
+
+		.bind-box {
+			width: 100rpx;
+			height: 50rpx;
+			line-height: normal;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			font-size: 24rpx;
+
+			.bind-btn {
+				width: 100%;
+				height: 100%;
+				border-radius: 25rpx;
+				background: #f4f4f4;
+				color: #999999;
+			}
+
+			.relieve-btn {
+				width: 100%;
+				height: 100%;
+				border-radius: 25rpx;
+				background: var(--ui-BG-Main-opacity-1);
+				color: var(--ui-BG-Main);
+			}
+		}
+	}
+
+	.list-border {
+		font-size: 28rpx;
+		font-weight: 400;
+		color: #333333;
+		border-bottom: 2rpx solid #eeeeee;
+	}
+
+	image {
+		width: 100%;
+		height: 100%;
+	}
+</style>

+ 261 - 0
pages/user/wallet/topupConsumptionPoints.vue

@@ -0,0 +1,261 @@
+<!-- 消费分充值 -->
+<template>
+	<s-layout title="消费分充值">
+		<view class="bg-white ss-modal-box ss-flex-col">
+
+			<!-- 提现金额 -->
+			<view class="modal-content ss-m-t-30">
+				<uni-forms :model="state.model" :rules="state.rules" validateTrigger="bind" labelPosition="left" border
+					class="form-box" labelWidth='200' ref="FormRef">
+					<view class="bg-white ss-p-x-30">
+						<uni-forms-item name="quota" label="充值金额" :required="true">
+							<uni-easyinput v-model="state.payPrice" type="number" placeholder="请输入金额"
+								:inputBorder="false" :clearable="false" @input="validateInput" :maxlength="9" />
+						</uni-forms-item>
+						<uni-forms-item name="quota" label="实到消费分">
+							<view class="ss-flex ss-h-100">
+								{{consumption}}
+							</view>
+						</uni-forms-item>
+
+					</view>
+				</uni-forms>
+				<view class="ss-flex ss-row-center ss-col-center ss-m-t-30 text-red text-center">备注:充值{{state.percentage.triggerMagnificationPoints}}元及以上,可获得{{parseFloat(state.percentage.consumptionMagnification)}}倍消费分
+				</view>
+			</view>
+			<view class="modal-footer ss-flex ss-row-center ss-col-center ss-m-t-80 ss-m-b-40 ss-flex-5">
+				<button class="ss-reset-button save-btn" @tap="submit">
+					确定
+				</button>
+			</view>
+		</view>
+	</s-layout>
+</template>
+<script setup>
+	import {
+		computed,
+		reactive,
+		watchEffect,
+		nextTick,
+		onUnmounted
+	} from 'vue';
+	import {
+		onLoad
+	} from '@dcloudio/uni-app';
+	import sheep from '@/sheep';
+	import {
+		clone
+	} from 'lodash';
+	import {
+		fen2yuan,
+		points2point
+	} from '@/sheep/hooks/useGoods';
+	import md5 from 'blueimp-md5';
+	import PayWalletApi from '@/sheep/api/pay/wallet';
+	import WithdrawalApi from '@/sheep/api/distri/withdrawal';
+	import {
+		showAuthModal,
+		showShareModal
+	} from '@/sheep/hooks/useModal';
+	const userWallet = computed(() => sheep.$store('user').userWallet);
+	const userInfo = computed(() => sheep.$store('user').userInfo);
+
+	const state = reactive({
+		model: {},
+		payPrice: undefined,
+		percentage: {
+			consumptionMagnification: 0,
+			userTopUpConsumptionPoints: 0,
+			triggerMagnificationPoints: 0
+		}
+	});
+
+	const consumption = computed(() => {
+		if (!state.payPrice) {
+			return 0;
+		}
+		let result;
+		if (state.payPrice >= parseFloat(state.percentage.triggerMagnificationPoints)) {
+			result = (parseFloat(state.percentage.consumptionMagnification) * state.payPrice).toFixed(2)
+		} else {
+			result = state.payPrice
+		}
+		return result;
+	});
+
+	// 确保输入是整数
+	// async function validateInput(value) {
+	// 	const intValue = parseInt(value);
+	// 	const strPoints = value.toString()
+	// 	const [integerPart, decimalPart] = strPoints.split('.')
+	// 	if (decimalPart) {
+	// 		nextTick(() => {
+	// 			state.payPrice = integerPart;
+	// 		});
+	// 	}
+	// }
+
+	const submit = async () => {
+		if (!state.payPrice) {
+			sheep.$helper.toast('请输入充值金额');
+			return;
+		}
+		if (parseFloat(state.payPrice) < state.percentage.userTopUpConsumptionPoints) {
+			sheep.$helper.toast(`充值金额不能少于${state.percentage.userTopUpConsumptionPoints}`);
+			return;
+		}
+		let {
+			code,
+			data
+		} = await PayWalletApi.topupConsumptionPointsCreate({
+			payPrice: state.payPrice,
+			topUpConsumptionPoints: state.payPrice,
+			userName: userInfo.value.username,
+		});
+		if (code === 0) {
+			sheep.$router.redirect('/pages/pay/index', {
+				id: data.payOrderId,
+				type: 2
+			});
+		}
+	};
+
+	const getpercentage = async () => {
+		const {
+			code,
+			data
+		} = await WithdrawalApi.getWithdrawalPercentage();
+		if (code === 0) {
+			state.percentage = data;
+		}
+	}
+
+	onLoad(async (options) => {
+		await getpercentage();
+	});
+</script>
+
+<style lang="scss" scoped>
+	.all-btn {
+		height: 60rpx;
+		line-height: 60rpx;
+		min-width: 80rpx;
+		padding: 0 30rpx;
+		border-radius: 30rpx;
+		font-size: 26rpx;
+		margin-right: 10rpx;
+		border: 2rpx solid var(--ui-BG-Main);
+		color: var(--ui-BG-Main);
+	}
+
+	.out-icon {
+		width: 36rpx;
+		height: 36rpx;
+		margin-right: 26rpx;
+	}
+
+	.ss-modal-box {
+		height: calc(100vh - 88rpx);
+
+		// max-height: 1000rpx;
+		.input-money {
+			width: 90%;
+			padding: 0 10rpx;
+			// text-indent: 20rpx;
+			height: 80rpx;
+			border: 1px solid #bbbbbb;
+			border-radius: 10rpx;
+			margin: 15rpx auto;
+			font-size: 28rpx;
+
+			input {
+				width: 100%;
+				height: 100%;
+				font-size: 28rpx;
+			}
+		}
+
+		.modal-header {
+			position: relative;
+			padding: 60rpx 20rpx 40rpx;
+
+
+			.money-text {
+				color: $red;
+				font-size: 46rpx;
+				font-weight: bold;
+				font-family: OPPOSANS;
+
+				&::before {
+					content: '¥';
+					font-size: 30rpx;
+				}
+			}
+
+			.time-text {
+				font-size: 26rpx;
+				color: $gray-b;
+			}
+
+			.close-icon {
+				position: absolute;
+				top: 10rpx;
+				right: 20rpx;
+				font-size: 46rpx;
+				opacity: 0.2;
+			}
+		}
+
+		.modal-content {
+			overflow-y: auto;
+
+			.out-title {
+				font-size: 26rpx;
+				font-weight: 500;
+				color: #333333;
+			}
+
+			.out-tip {
+				font-size: 26rpx;
+				color: #bbbbbb;
+			}
+
+			.out-item {
+				height: 86rpx;
+			}
+
+			.disabled-out-item {
+				.out-title {
+					color: #999999;
+				}
+			}
+
+			.userInfo-money {
+				font-size: 26rpx;
+				color: #bbbbbb;
+				line-height: normal;
+			}
+		}
+
+		.save-btn {
+			width: 710rpx;
+			height: 80rpx;
+			border-radius: 40rpx;
+			background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
+			color: $white;
+		}
+
+		.disabled-btn {
+			background: #e5e5e5;
+			color: #999999;
+		}
+
+		.past-due-btn {
+			width: 710rpx;
+			height: 80rpx;
+			border-radius: 40rpx;
+			background-color: #999;
+			color: #fff;
+		}
+	}
+</style>

+ 67 - 11
pages/user/wallet/withdraw.vue

@@ -31,19 +31,40 @@
 				</radio-group>
 			</view>
 			<!-- 提现金额 -->
-			<view class="modal-content ">
-				<view class="out-title ss-p-l-30 ss-m-y-30">提现金额</view>
+			<view class="modal-content ss-m-t-30">
+				<uni-forms :model="state.model" :rules="state.rules" validateTrigger="bind" labelPosition="left" border
+					class="form-box" labelWidth='200' ref="FormRef">
+					<view class="bg-white ss-p-x-30">
+						<uni-forms-item name="quota" label="提现金额" :required="true">
+							<uni-easyinput v-model="state.outMoney" type="number"
+								placeholder="请输入金额" :inputBorder="false" :clearable="false"  />
+						</uni-forms-item>
+						<uni-forms-item name="quota" label="实到金额">
+							<view class="ss-flex ss-h-100">
+								{{commission}}
+							</view>
+						</uni-forms-item>
+						<uni-forms-item name="quota" label="消费分">
+							<view class="ss-flex ss-h-100">
+								{{consumption}}
+							</view>
+
+
+						</uni-forms-item>
+					</view>
+				</uni-forms>
+				<!-- <view class="out-title ss-p-l-30 ss-m-y-30">提现金额</view>
 				<view class="ss-flex ss-row-left ss-col-center  input-money ss-m-y-30" >
 					<input v-model.number="state.outMoney"  class="uni-input " type="number"
-						placeholder="请输入金额" oninput="handleInput" />
-				</view>
+						placeholder="请输入金额"  />
+				</view> -->
 				<view class="ss-flex ss-row-center ss-col-center ss-m-t-30">
 					您当前可兑换金额:¥<text class="text-red">{{canUseMoney}}</text> 
 					<button class="ss-m-l-10 all-btn " @click="useAllPonints">全部</button>
 					
 				</view>
-				<view class="ss-flex ss-row-center ss-col-center ss-m-t-30 text-red">备注:提现,平台将收取7%的手续费</view> 
+				<view class="ss-flex ss-row-center ss-col-center ss-m-t-30 text-red text-center">备注:实际到账金额{{withdrawCommission}},消费分{{withdrawConsumption}}。<br>免提现手续费</view> 
 			</view>
 			
 			
@@ -77,6 +98,7 @@
 	} from '@/sheep/hooks/useGoods';
 	import md5 from 'blueimp-md5';
 	import PayWalletApi from '@/sheep/api/pay/wallet';
+	import WithdrawalApi from '@/sheep/api/distri/withdrawal';
 	import { showAuthModal, showShareModal } from '@/sheep/hooks/useModal';
 	const userWallet = computed(() => sheep.$store('user').userWallet);
 	const userInfo = computed(() => sheep.$store('user').userInfo);
@@ -116,6 +138,10 @@
 		outMent: '',
 		outMoney:undefined,
 		disabled:true,
+		withdrawalPercentage:{
+			withdrawCommission:0,
+			withdrawConsumption:0
+		},
 		outMethods: [
 			// {
 			// 	title: "提现到微信",
@@ -133,7 +159,30 @@
 			}
 		]
 	});
-	
+	const withdrawCommission = computed(() => {
+		return state.withdrawalPercentage.withdrawCommission * 100 + '%';
+	});
+	const withdrawConsumption = computed(() => {
+		return state.withdrawalPercentage.withdrawConsumption * 100 + '%';
+	});
+	const commission = computed(() => {
+		if(!state.outMoney){
+			return 0;
+		}
+		let result = parseFloat(state.withdrawalPercentage.withdrawCommission) * state.outMoney;
+		// 地板除到小数点后两位
+		result = Math.floor(result * 100) / 100;
+		return result;
+	});
+	const consumption = computed(() => {
+		if(!state.outMoney){
+			return 0;
+		}
+		let result = parseFloat(state.withdrawalPercentage.withdrawConsumption) * state.outMoney;
+		// 地板除到小数点后两位
+		result = Math.floor(result * 100) / 100;
+		return result;
+	});
 	const handleBind = async (type) => {
 		// console.log(type)
 		if(type === '2'){
@@ -186,7 +235,7 @@
 			code,
 			data
 		} = await PayWalletApi.createWithdrawal({
-			amount:state.outMoney,
+			amountTotal:state.outMoney,
 			withdrawalType:state.outMent
 		});
 		if(code === 0){
@@ -194,7 +243,7 @@
 				icon: 'success',
 				title: "申请成功",
 			});
-			sheep.$router.go('/pages/user/wallet/withdrawalLog')
+			sheep.$router.redirect('/pages/user/wallet/withdrawalLog')
 			uni.$emit('createWithDrawComplete');
 		}
 	};
@@ -211,10 +260,10 @@
 	}
 	watchEffect(() => {
 		// 提现金额不能大于可用佣金
-		if (state.outMoney > canUseMoney.value) {
+		if (parseFloat(state.outMoney) > parseFloat(canUseMoney.value)) {
 			// 使用 nextTick 确保 DOM 更新
 			nextTick(() => {
-				state.outMoney = canUseMoney.value;
+				state.outMoney = parseInt(canUseMoney.value);
 			});
 		}
 		// 如果计算出来的当前可以使用的最大佣金等于小于0 则不给输入
@@ -238,11 +287,18 @@
 			}else if(item.value === '3'){
 				item.account = bankAccount(state.model.bankAccount);
 			}
-			// console.log(item)
 		})
 	};
+	const getWithdrawalPercentage = async () => {
+		const {code,data} = await WithdrawalApi.getWithdrawalPercentage();
+		if(code === 0){
+			state.withdrawalPercentage = data;
+		}
+	}
+
 	onLoad(async(options) => {
 		await getUserInfo();
+		await getWithdrawalPercentage();
 		// refresh()
 		uni.$on('alipayAccountChangeComplete', getUserInfo);
 		uni.$on('bankAccountChangeComplete', getUserInfo);

+ 3 - 2
pages/user/wallet/withdrawalLog.vue

@@ -15,7 +15,7 @@
 									({{item.withdrawalAccount}})
 									
 									<text  style="float: right;" class="color-red">
-										¥{{item.amount}}
+										¥{{fen2yuan(item.amount) }} (消费分{{points2point(item.withdrawConsumption)}})
 									</text>
 								</view>
 								<view class="time " style="width: 100%;">
@@ -47,7 +47,8 @@
 		reactive
 	} from 'vue';
 	import {
-		points2point
+		points2point,
+		fen2yuan
 	} from '@/sheep/hooks/useGoods';
 	import _ from 'lodash';
 	import dayjs from 'dayjs';

+ 51 - 0
sheep/api/distri/consumption.js

@@ -0,0 +1,51 @@
+import request from '@/sheep/request';
+
+const ConsumptionApi = {
+	// 获取消费分记录
+	getConsumptionLog: (params) => {
+		return request({
+			url: '/distri/consumption-change-log/page',
+			method: 'GET',
+			params,
+			custom: {
+				showLoading: true,
+				showError: true,
+			},
+		});
+	},
+	// 消费分转让
+	createConsumptionLog: (data) => {
+		return request({
+			url: '/distri/consumption-transfer-log/create',
+			method: 'POST',
+			data,
+			custom: {
+				showLoading: true,
+				showError: true,
+			},
+		})
+	},
+	// 获取消费分转让记录
+	getConsumptionTransfersLog: (params) => {
+		return request({
+			url: '/distri/consumption-transfer-log/page',
+			method: 'GET',
+			params,
+			custom: {
+				showLoading: true,
+				showError: true,
+			},
+		});
+	},
+	quotaTransition: (quota) => {
+		return request({
+			url: '/distri/integral/quotaTransition?quota=' + quota,
+			method: 'PUT',
+			custom: {
+				showLoading: true,
+				showError: true,
+			},
+		});
+	},
+};
+export default ConsumptionApi;

+ 13 - 0
sheep/api/distri/withdrawal.js

@@ -12,5 +12,18 @@ const WithdrawalApi = {
       },
     });
   },
+  // 获得提现比例
+  getWithdrawalPercentage: (params) => {
+    return request({
+      url: '/distri/order-percentage/get',
+      method: 'GET',
+      params,
+      custom: {
+        showLoading: false,
+        showError: false,
+      },
+    });
+  },
+  
 };
 export default WithdrawalApi;

+ 7 - 0
sheep/api/member/auth.js

@@ -48,6 +48,13 @@ const AuthUtil = {
 			method: 'GET',
 		});
 	},
+	// 根据用户名和手机号查询用户
+	verifyPhone: (username,mobile) => {
+		return request({
+			url: '/member/user/getUserByUserNameWithMobile?username='+username+'&mobile='+mobile,
+			method: 'GET',
+		});
+	},
 	// 发送手机验证码
 	sendSmsCode: (mobile, scene) => {
 		return request({

+ 10 - 1
sheep/api/pay/order.js

@@ -50,6 +50,14 @@ const PayOrderApi = {
       data
     });
   },
+  // 佣金、消费分抵扣完 0元购
+  ZeroPurchaseSubmit: (data) => {
+    return request({
+      url: '/trade/order/submit-ZeroPurchase',
+      method: 'POST',
+      data
+    });
+  },
   // 第三方富友支付
   fuYouSubmitOrder: (data) => {
     return request({
@@ -57,7 +65,8 @@ const PayOrderApi = {
       method: 'POST',
       data
     });
-  }
+  },
+  
 };
 
 export default PayOrderApi;

+ 12 - 1
sheep/api/pay/wallet.js

@@ -62,7 +62,18 @@ const PayWalletApi = {
       data,
     });
   },
-  
+  // 消费分充值
+  topupConsumptionPointsCreate: (data) => {
+    return request({
+      url: '/distri/user-top-up-consumption-points-order/create',
+      method: 'POST',
+      data,
+	  custom: {
+	    showError: true,
+	    showLoading: true,
+	  },
+    });
+  },
   // 获得钱包充值记录分页
   getWalletRechargePage: (params) => {
     return request({

+ 4 - 4
sheep/components/s-auth-modal/components/sms-login.vue

@@ -7,10 +7,10 @@
 			labelAlign="center" class="loginUniForm">
 			<uni-forms-item name="username" label="用户名" class="loginUniFormItem" :error-message="state.usernameErrorMsg">
 				<uni-easyinput placeholder="请输入用户名" v-model="state.model.username" :inputBorder="false" :clearable="false" @blur="verifyUsername">
-				<template v-slot:right>
-					<view v-if="state.verifyUsername" class="icon"><image style :src="sheep.$url.static('/static/images/shibai.png')" /></view>
-					<view v-else class="icon"> <image :src="sheep.$url.static('/static/images/chenggong.png')" /></view>
-				</template>
+					<template v-slot:right>
+						<view v-if="state.verifyUsername" class="icon"><image style :src="sheep.$url.static('/static/images/shibai.png')" /></view>
+						<view v-else class="icon"> <image :src="sheep.$url.static('/static/images/chenggong.png')" /></view>
+					</template>
 				</uni-easyinput>
 			</uni-forms-item>
 			<uni-forms-item name="mobile" label="手机号" class="mobile loginUniFormItem ss-p-t-10" :error-message="state.mobileErrorMsg">

+ 188 - 0
sheep/components/s-consumptionPoints-pop/s-consumptionPoints-pop.vue

@@ -0,0 +1,188 @@
+<!-- 订单确认的使用消费分弹窗 -->
+<template>
+	<su-popup :show="show" type="bottom" round="10" @close="emits('close')" showClose backgroundColor="#ffffff">
+		<view class="title ss-m-t-16 ss-m-l-20 ss-flex">使用消费分</view>
+		<view class="model-box ss-p-x-30">
+			<input v-model.number="state.points" class="uni-input input-points ss-m-b-10" type="number"
+				placeholder="请输入抵扣消费分" oninput="this.value=this.value.replace(/\D/g);" :disabled="state.disabled"/>
+		</view>
+		<view class="modal-footer text-center">
+			<view class="subtitle text-disabled">您的可用消费分<text class="text-red">{{currentMemberConsumptionPoints}}</text></view>
+			<view class="subtitle text-disabled">当前订单价格<text class="text-red">¥{{currentOrderTotalPrice}}</text>,可使用最高<text class="text-red"> {{canUesPoint}} </text>消费分 </view>
+			<view class="ss-flex ss-m-y-20 ss-col-center">
+				<button class="confirm-btn ss-reset-button"
+					@tap="state.points = 0;emits('confirm', state.points)">取消</button>
+				<button class="confirm-btn ss-reset-button" @tap="onConfirm">确认</button>
+			</view>
+		</view>
+	</su-popup>
+</template>
+<script setup>
+	import {
+		computed,
+		reactive,
+		ref,
+		watch,
+		nextTick,
+		watchEffect
+	} from 'vue';
+
+	const props = defineProps({
+		modelValue: { // 优惠劵列表
+			type: Object,
+			default () {},
+		},
+		show: {
+			type: Boolean,
+			default: false,
+		},
+		currentMemberConsumptionPoints: {
+			type: Number,
+			default: 0
+		},
+		currentTotalPrice: {
+			type: Number,
+			default: 0
+		},
+		currentDeliveryPrice:{
+			type: Number,
+			default: 0
+		}
+	});
+	const emits = defineEmits(['confirm', 'close']);
+	const state = reactive({
+		points: 0,
+		disabled:false
+	});
+	const currentOrderMemberPoints = computed(()=>{
+		return parseFloat(props.currentMemberConsumptionPoints)
+	})
+	const currentOrderTotalPrice = computed(()=>{
+		return parseFloat(props.currentTotalPrice)
+	})
+	const currentOrderDeliveryPrice= computed(()=>{
+		return parseFloat(props.currentDeliveryPrice)
+	})
+	
+	// 当前可使用的最高消费分 = 当前的总价格(即最低也要给1分钱) 并且消费分只能是正数 且不能抵扣运费
+	const canUesPoint = computed(()=>{
+		// console.log("state.currentTotalPrice",currentOrderTotalPrice.value - 1)
+		if(!currentOrderTotalPrice.value) return currentOrderTotalPrice.value
+		// - 0.01  - 0.01分钱
+		return (currentOrderTotalPrice.value  - currentOrderDeliveryPrice.value).toFixed(2)
+	})
+	watchEffect(() => {
+		// 分割整数部分和小数部分
+		const strPoints = state.points.toString()
+		const [integerPart, decimalPart] = strPoints.split('.')
+		if (decimalPart) {
+			const points = parseFloat(`${integerPart}.${decimalPart.slice(0, 2)}`);
+			// 使用 nextTick 确保 DOM 更新
+			nextTick(() => {
+				state.points = points;
+			});
+		}
+		// 使用消费分不能大于可用消费分
+		if (state.points > currentOrderMemberPoints.value) {
+			// 使用 nextTick 确保 DOM 更新
+			nextTick(() => {
+				state.points = currentOrderMemberPoints.value;
+			});
+		}
+		// 使用消费分不能大于当前可以使用的最大消费分
+		if (state.points > canUesPoint.value) {
+			nextTick(() => {
+				state.points = canUesPoint.value;
+			});
+		}
+		// 如果计算出来的当前可以使用的最大消费分等于小于0 则不给输入
+		if(canUesPoint.value == 0 || canUesPoint.value < 0){
+			state.disabled = true
+		}
+		if(canUesPoint.value > 0){
+			state.disabled = false
+		}
+	})
+	// 确认
+	const onConfirm = () => {
+		if(state.points === ''){
+			state.points = 0
+		}
+
+		emits('confirm', state.points);
+	}
+</script>
+<style lang="scss" scoped>
+	:deep() {
+		.uni-checkbox-input {
+			background-color: var(--ui-BG-Main);
+		}
+
+		.uni-input-wrapper {
+			width: 100% !important
+		}
+	}
+
+	.model-box {
+		// height: 10vh;
+		text-align: center;
+		font-size: 30rpx;
+
+		.input-points {
+			text-align: left;
+			text-indent: 20rpx;
+			height: 80rpx;
+			border: 1px solid #bbbbbb;
+			border-radius: 10rpx;
+		}
+	}
+.text-disabled {
+			color: #bbbbbb;
+		}
+
+	.title {
+		font-size: 36rpx;
+		height: 80rpx;
+		font-weight: bold;
+		color: #333333;
+	}
+
+	.subtitle {
+		// font-size: 26rpx;
+		font-weight: 500;
+		color: #333333;
+	}
+
+	.model-content {
+		height: 10vh;
+	}
+
+	.modal-footer {
+		width: 100%;
+		// height: 120rpx;
+		//   background: #fff;
+	}
+
+	.confirm-btn {
+		width: 710rpx;
+		margin:0 20rpx;
+		height: 80rpx;
+		background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
+		border-radius: 40rpx;
+		color: #fff;
+	}
+
+	.reason-title {
+		font-weight: 600;
+		font-size: 20rpx;
+		line-height: 26rpx;
+		color: #ff0003;
+	}
+
+	.reason-desc {
+		font-weight: 600;
+		font-size: 20rpx;
+		line-height: 26rpx;
+		color: #434343;
+	}
+</style>

+ 3 - 2
sheep/components/s-points-pop/s-points-pop.vue

@@ -64,11 +64,12 @@
 		return parseFloat(props.currentDeliveryPrice)
 	})
 	
-	// 当前可使用的最高佣金 = 当前的总价格 - 0.01分钱(即最低也要给1分钱) 并且佣金只能是正数 且不能抵扣运费
+	// 当前可使用的最高佣金 = 当前的总价格(即最低也要给1分钱) 并且佣金只能是正数 且不能抵扣运费
 	const canUesPoint = computed(()=>{
 		// console.log("state.currentTotalPrice",currentOrderTotalPrice.value - 1)
 		if(!currentOrderTotalPrice.value) return currentOrderTotalPrice.value
-		return (currentOrderTotalPrice.value - 0.01 - currentOrderDeliveryPrice.value).toFixed(2)
+		// - 0.01  - 0.01分钱
+		return (currentOrderTotalPrice.value  - currentOrderDeliveryPrice.value).toFixed(2)
 	})
 	watchEffect(() => {
 		// 分割整数部分和小数部分

+ 3 - 2
sheep/components/s-wallet-card/s-wallet-card.vue

@@ -52,9 +52,10 @@
 			<view class="menu-item ss-flex-1 ss-flex-col  ss-col-center ss-row-center"
 				@tap="sheep.$router.go('/pages/user/wallet/score')">
 				<view class="value-box ">
-					<view class="value-text">佣金</view>
+					<view class="value-text">钱包</view>
 				</view>
-				<view class="menu-title  ss-m-t-15">可用:{{ points2point(userWallet.integralDO.currentQuota)  }}</view>
+				<view class="menu-title  ss-m-t-15">佣金:{{ points2point(userWallet.integralDO.currentQuota)  }}</view>
+				<view class="menu-title  ss-m-t-15">消费分:{{ points2point(userWallet.integralDO.consumptionPoints)  }}</view>
 				<!-- <view class="menu-title ss-m-t-15">待确权:{{ points2point(userWallet.integralDO.freezeQuota)  }}</view> -->
 			</view>
 			<view class="menu-item ss-flex-1 ss-flex-col  ss-col-center ss-row-center"

+ 18 - 13
sheep/components/s-wallet-modal/s-wallet-modal.vue

@@ -5,22 +5,27 @@
 		<view class="model-box ss-flex-col">
 			<view class="ss-m-t-56 ss-flex-col ss-col-center">
 				<text class="cicon-check-round"></text>
-			
-				<view class="score-title">恭喜</view>
-				<template v-if="state.points && state.points  !== 'null' && points2point(state.points) > 0 || state.socialStatus && state.socialStatus  !== 'null'">
-					<view class="model-title ss-flex ss-col-center ss-m-t-15 ss-font-35" v-if="state.points && points2point(state.points) > 0"> 
-						获得佣金:{{ points2point(state.points) }}
-					</view>
-					<view class="model-title ss-flex ss-col-center ss-m-t-15 ss-font-35" v-if="state.socialStatus">
-						获得身价:{{state.socialStatus}}
-					</view>
+				<template v-if="!state.msg">
+					<view class="score-title">恭喜</view>
+					<template v-if="state.points && state.points  !== 'null' && points2point(state.points) > 0 || state.socialStatus && state.socialStatus  !== 'null'">
+						<view class="model-title ss-flex ss-col-center ss-m-t-15 ss-font-35" v-if="state.points && points2point(state.points) > 0"> 
+							获得佣金:{{ points2point(state.points) }}
+						</view>
+						<view class="model-title ss-flex ss-col-center ss-m-t-15 ss-font-35" v-if="state.socialStatus">
+							获得身价:{{state.socialStatus}}
+						</view>
+					</template>
+					<template v-else>
+						<view class="model-title ss-flex ss-col-center ss-m-y-15 " >
+							下单成功
+						</view>
+					</template>
 				</template>
+				
 				<template v-else>
-					<view class="model-title ss-flex ss-col-center ss-m-y-15 " >
-						下单成功
-					</view>
-				</template>
 
+					<view class="model-title ss-flex ss-col-center ss-m-y-15 ">{{state.msg}}</view>
+				</template>
 			</view>
 			<view class="model-bg ss-flex-col ss-col-center ss-row-right">
 				<view class="ss-m-b-40">

+ 9 - 0
sheep/hooks/useApp.js

@@ -0,0 +1,9 @@
+
+	
+/**
+ * 判断是否安卓打开
+ * @return {boolean} 是否是安卓打开
+ */
+export function isAndroid() {
+  return  window.Android && window.Android.getIdentifier();
+}

+ 18 - 0
sheep/hooks/useGoods.js

@@ -3,6 +3,15 @@ import dayjs from 'dayjs';
 import $url from '@/sheep/url';
 import { formatDate } from '@/sheep/util';
 
+/**
+ * 判断内测资格
+ * @param {string} username 用户名
+ * @return {boolean} 是否是内测用户
+ */
+export function isBetaUser(username) {
+  return username === 'ru10' || username === '迷鹿' || username === '非繁';
+}
+
 /**
  * 格式化销量
  * @param {'exact' | string} type 格式类型:exact=精确值,其它=大致数量
@@ -163,6 +172,7 @@ export function formatOrderStatusDescription(order) {
  * @param order 订单
  */
 export function handleOrderButtons(order) {
+	console.log()
   order.buttons = []
   if (order.type === 3) { // 查看拼团
     order.buttons.push('combination');
@@ -184,6 +194,13 @@ export function handleOrderButtons(order) {
   if (order.status === 40) { // 删除订单
     order.buttons.push('delete');
   }
+  if ([10, 20, 30].includes(order.items[0]?.refundStatus)) { // 取消订单
+    order.buttons.push('aftersaleCancel');
+  }
+  // 如果订单是发起了售后,商家同意了。待用户发货回平台
+  if (order.items[0]?.refundStatus === 20){
+	order.buttons.push('aftersaleDelivery');
+  }
 }
 
 /**
@@ -258,6 +275,7 @@ export function formatAfterSaleStatusDescription(afterSale) {
  * @param afterSale 售后
  */
 export function handleAfterSaleButtons(afterSale) {
+console.log(afterSale)
   afterSale.buttons = [];
   if ([10, 20, 30].includes(afterSale.status)) { // 取消订单
     afterSale.buttons.push('cancel');

+ 6 - 2
sheep/hooks/useModal.js

@@ -13,7 +13,6 @@ let time = 30;
 let timer = null;
 // 登录
 async function onSign() {
-	console.log("onSign")
 	const {
 		code,
 		data
@@ -160,7 +159,6 @@ export function closeMenuTools() {
 export function getSmsCode(event, mobile) {
 	const modalStore = $store('modal');
 	const lastSendTimer = modalStore.lastTimer[event];
-	// console.log(lastSendTimer)
 	if (typeof lastSendTimer === 'undefined') {
 		$helper.toast('短信发送事件错误');
 		return;
@@ -196,6 +194,12 @@ export function getSmsCode(event, mobile) {
 		case 'smsLogin':
 			scene = 1;
 			break;
+		case 'consumptionTransfers':
+			scene = 11;
+			break;
+		case 'zeroBuy':
+			scene = 12;
+			break;
 	}
 	AuthUtil.sendSmsCode(mobile, scene).then((res) => {
 		if (res.code === 0) {

+ 2 - 2
sheep/platform/index.js

@@ -75,8 +75,8 @@ const useProvider = (_provider = '') => {
 };
 
 // 支付服务转发
-const pay = (payment, orderType, orderSN) => {
-  return new Pay(payment, orderType, orderSN);
+const pay = (payment, orderType, orderSN, orderType2) => {
+  return new Pay(payment, orderType, orderSN, orderType2);
 };
 
 /**

+ 18 - 12
sheep/platform/pay.js

@@ -13,23 +13,28 @@ import PayOrderApi from '@/sheep/api/pay/order';
  * @param {String} payment = ['wechat','alipay','wallet','mock']  	- 支付方式
  * @param {String} orderType = ['goods','recharge','groupon']  	- 订单类型
  * @param {String} id					- 订单号
+ * @param {String} orderType2 = ['1','2']  	- 中星订单类型,1商品 2消费分充值	
  */
 
 export default class SheepPay {
-	constructor(payment, orderType, id) {
+	constructor(payment, orderType, id, orderType2) {
 		this.payment = payment;
 		this.id = id;
 		this.orderType = orderType;
+		this.orderType2 = orderType2;
 		this.payAction();
+		
 	}
 
 	payAction() {
 		const payAction = {
+			
 			WechatOfficialAccount: {
 				wechat: () => {
 					this.wechatOfficialAccountPay();
 				},
 				JSAPI:() => {
+					
 					this.fuYouWechatOfficialAccountPay();
 				},
 				alipay: () => {
@@ -100,7 +105,9 @@ export default class SheepPay {
 					this.mockPay();
 				},
 				wx_pub:() => {
-					this.wechatWapPay();
+					// this.wechatWapPay();
+					this.wechatOfficialAccountPay();
+					// payAction.WechatOfficialAccount.wechat();
 				}
 			},
 		};
@@ -114,12 +121,13 @@ export default class SheepPay {
 			let data = {
 				id: this.id,
 				channelCode: channel,
-				channelExtras: {}
+				channelExtras: {},
+				orderType:this.orderType2
 			};
 			// 特殊逻辑:微信公众号、小程序支付时,必须传入 openid
 			if (['wx_pub', 'wx_lite'].includes(channel)) {
 				const openid = await sheep.$platform.useProvider('wechat').getOpenid(true);
-				console.log(openid)
+				// console.log(openid)
 				// 如果获取不到 openid,微信无法发起支付,此时需要引导
 				if (!openid) {
 					this.bindWeixin();
@@ -150,6 +158,7 @@ export default class SheepPay {
 			let data = {
 				id: this.id,
 				channelCode:channel,
+				orderType:this.orderType2,
 				req: {
 					trade_type: channel,
 				}
@@ -184,9 +193,8 @@ export default class SheepPay {
 	}
 	// #ifdef H5
 	// 富友微信公众号 JSSDK 支付
-	async fuYouWechatOfficialAccountPay() {
-		console.log("富友微信公众号 JSSDK 支付");
-		// this.payResult('fail');
+	async fuYouWechatOfficialAccountPay(orderType2) {
+		// console.log("富友微信公众号 JSSDK 支付");
 		let {
 			code,
 			data
@@ -198,7 +206,7 @@ export default class SheepPay {
 
 		let newJsonString = data.replace(/"sdk_package":/g, '"packageValue":');
 		const payConfig = JSON.parse(newJsonString);
-		console.log('payConfig',payConfig);
+		// console.log('payConfig',payConfig);
 		// return;
 		
 		$wxsdk.wxpay(payConfig, {
@@ -219,9 +227,7 @@ export default class SheepPay {
 		});
 	}
 	// 微信公众号 JSSDK 支付
-	async wechatOfficialAccountPay() {
-		// this.payResult('fail');
-		console.log("原微信公众号 JSSDK 支付")
+	async wechatOfficialAccountPay(orderType2) {
 		let {
 			code,
 			data
@@ -420,7 +426,7 @@ export default class SheepPay {
 }
 
 export function getPayMethods(channels) {
-	console.log("来拿支付渠道",channels)
+	// console.log("来拿支付渠道",channels)
 	let payMethods = [
 		{
 			icon: '/static/images/wechat.png',

+ 3 - 0
sheep/store/modal.js

@@ -26,6 +26,9 @@ const modal = defineStore({
       changeMobileNew: 0,
       resetPassword: 0,
       changePassword: 0,
+      consumptionTransfers: 0,
+	  zeroBuy:0,
+	  
     }
   }),
   persist: {

+ 2 - 1
sheep/store/user.js

@@ -39,7 +39,8 @@ const defaultUserWallet = {
 	integralDO: {
 		currentQuota: 0, // 当前佣金
 		highQuota: 0, //最高佣金
-		freezeQuota: 0 //冻结佣金
+		freezeQuota: 0, //冻结佣金
+		consumptionPoints:0//消费分
 	},
 	
 	descNo: 0, //用户直推人人数

+ 0 - 1
unpackage/dist/build/web/assets/comment-item.2d6e4c2c.js

@@ -1 +0,0 @@
-import{m as s,n as e,f as l,g as a,w as t,k as r,u as c,v as i,l as m,F as u,r as n,i as o,y as d,j as p,D as f}from"./index-c3738be6.js";import{_}from"./uni-rate.4d4811b5.js";import{_ as y}from"./su-image.06bb32a4.js";import{_ as v}from"./_plugin-vue_export-helper.1b428a4d.js";const g=v({__name:"comment-item",props:{item:{type:Object,default(){}}},setup:v=>(g,x)=>{const j=d,h=p,k=s(e("uni-rate"),_),w=s(e("su-image"),y),b=f;return l(),a(h,null,{default:t((()=>{var s;return[r(h,{class:"user ss-flex ss-m-b-14"},{default:t((()=>[r(h,{class:"ss-m-r-20 ss-flex"},{default:t((()=>[r(j,{class:"avatar",src:v.item.userAvatar},null,8,["src"])])),_:1}),r(h,{class:"nickname ss-m-r-20"},{default:t((()=>[c(i(v.item.userNickname),1)])),_:1}),r(h,{class:""},{default:t((()=>[r(k,{readonly:!0,modelValue:v.item.scores,"onUpdate:modelValue":x[0]||(x[0]=s=>v.item.scores=s),size:"18"},null,8,["modelValue"])])),_:1})])),_:1}),r(h,{class:"content"},{default:t((()=>[c(i(v.item.content),1)])),_:1}),(null==(s=v.item.picUrls)?void 0:s.length)?(l(),a(h,{key:0,class:"ss-m-t-24"},{default:t((()=>[r(b,{class:"scroll-box","scroll-x":"","scroll-anchoring":""},{default:t((()=>[r(h,{class:"ss-flex"},{default:t((()=>[(l(!0),m(u,null,n(v.item.picUrls,((s,e)=>(l(),a(h,{key:s,class:"ss-m-r-10"},{default:t((()=>[r(w,{class:"content-img",isPreview:"",previewList:v.item.picUrls,current:e,src:s,height:120,width:120,mode:"aspectFill"},null,8,["previewList","current","src"])])),_:2},1024)))),128))])),_:1})])),_:1})])),_:1})):o("",!0),v.item.replyTime?(l(),a(h,{key:1,class:"ss-m-t-20 reply-box"},{default:t((()=>[r(h,{class:"reply-title"},{default:t((()=>[c("商家回复:")])),_:1}),r(h,{class:"reply-content"},{default:t((()=>[c(i(v.item.replyContent),1)])),_:1})])),_:1})):o("",!0)]})),_:1})}},[["__scopeId","data-v-c011c544"]]);export{g as c};

+ 1 - 0
unpackage/dist/build/web/assets/comment-item.8d4f6805.js

@@ -0,0 +1 @@
+import{n as s,p as e,f as l,g as a,w as t,l as r,k as c,t as i,m,F as n,r as u,i as o,y as p,j as d,D as f}from"./index-0ad3a2e0.js";import{_}from"./uni-rate.be6bf6ee.js";import{_ as y}from"./su-image.6953cf21.js";import{_ as v}from"./_plugin-vue_export-helper.1b428a4d.js";const x=v({__name:"comment-item",props:{item:{type:Object,default(){}}},setup:v=>(x,g)=>{const h=p,j=d,k=s(e("uni-rate"),_),w=s(e("su-image"),y),b=f;return l(),a(j,null,{default:t((()=>{var s;return[r(j,{class:"user ss-flex ss-m-b-14"},{default:t((()=>[r(j,{class:"ss-m-r-20 ss-flex"},{default:t((()=>[r(h,{class:"avatar",src:v.item.userAvatar},null,8,["src"])])),_:1}),r(j,{class:"nickname ss-m-r-20"},{default:t((()=>[c(i(v.item.userNickname),1)])),_:1}),r(j,{class:""},{default:t((()=>[r(k,{readonly:!0,modelValue:v.item.scores,"onUpdate:modelValue":g[0]||(g[0]=s=>v.item.scores=s),size:"18"},null,8,["modelValue"])])),_:1})])),_:1}),r(j,{class:"content"},{default:t((()=>[c(i(v.item.content),1)])),_:1}),(null==(s=v.item.picUrls)?void 0:s.length)?(l(),a(j,{key:0,class:"ss-m-t-24"},{default:t((()=>[r(b,{class:"scroll-box","scroll-x":"","scroll-anchoring":""},{default:t((()=>[r(j,{class:"ss-flex"},{default:t((()=>[(l(!0),m(n,null,u(v.item.picUrls,((s,e)=>(l(),a(j,{key:s,class:"ss-m-r-10"},{default:t((()=>[r(w,{class:"content-img",isPreview:"",previewList:v.item.picUrls,current:e,src:s,height:120,width:120,mode:"aspectFill"},null,8,["previewList","current","src"])])),_:2},1024)))),128))])),_:1})])),_:1})])),_:1})):o("",!0),v.item.replyTime?(l(),a(j,{key:1,class:"ss-m-t-20 reply-box"},{default:t((()=>[r(j,{class:"reply-title"},{default:t((()=>[c("商家回复:")])),_:1}),r(j,{class:"reply-content"},{default:t((()=>[c(i(v.item.replyContent),1)])),_:1})])),_:1})):o("",!0)]})),_:1})}},[["__scopeId","data-v-c011c544"]]);export{x as c};

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/confirm-54e0d556.css


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/confirm-8c722113.css


+ 1 - 1
unpackage/dist/build/web/assets/const.9262d0ab.js → unpackage/dist/build/web/assets/const.856087f9.js

@@ -1 +1 @@
-import{bh as e}from"./index-c3738be6.js";const T={PRICE:{type:1,name:"满减"},PERCENT:{type:2,name:"折扣"}},s={DATE:{type:1,name:"固定日期可用"},TERM:{type:2,name:"领取之后可用"}},t={WAIT_START:"即将开始",STARTED:"进行中",END:"已结束"},a=(T,s)=>{const a=e();return a.isBefore(T)?t.WAIT_START:a.isAfter(s)?t.END:t.STARTED};export{s as C,T as P,t as T,a as g};
+import{bh as e}from"./index-0ad3a2e0.js";const T={PRICE:{type:1,name:"满减"},PERCENT:{type:2,name:"折扣"}},s={DATE:{type:1,name:"固定日期可用"},TERM:{type:2,name:"领取之后可用"}},t={WAIT_START:"即将开始",STARTED:"进行中",END:"已结束"},a=(T,s)=>{const a=e();return a.isBefore(T)?t.WAIT_START:a.isAfter(s)?t.END:t.STARTED};export{s as C,T as P,t as T,a as g};

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/consumptionLog-eb91f19c.css


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/consumptionTransfers-4c8cb37f.css


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/consumptionTransfersLog-1c65a99d.css


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/detail-037dd82c.css


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/detail-4dd1a9c1.css


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/detail-50a5ec46.css


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/detail-b2feebd6.css


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/detail-content-card.d4ce4dc2.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/detail-content-card.fa06b7be.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/index-0ad3a2e0.js


+ 1 - 0
unpackage/dist/build/web/assets/index-5c5a85d7.css

@@ -0,0 +1 @@
+.code-btn-start[data-v-87caef2e]{width:4.9375rem;height:1.75rem;line-height:normal;background:linear-gradient(90deg,var(--ui-BG-Main),var(--ui-BG-Main-gradient));border-radius:.875rem;font-size:.8125rem;font-weight:500;color:#fff}[data-v-87caef2e] .is-disabled{color:#333}.pay-icon[data-v-87caef2e]{width:1.125rem;height:1.125rem;margin-right:.8125rem}.ss-modal-box .modal-header[data-v-87caef2e]{position:relative;padding:1.875rem .625rem 1.25rem}.ss-modal-box .modal-header .money-text[data-v-87caef2e]{color:#ff3000;font-size:1.4375rem;font-weight:700;font-family:OPPOSANS}.ss-modal-box .modal-header .money-text[data-v-87caef2e]:before{content:"¥";font-size:.9375rem}.ss-modal-box .modal-header .time-text[data-v-87caef2e]{font-size:.8125rem;color:#bbb}.ss-modal-box .modal-header .close-icon[data-v-87caef2e]{position:absolute;top:.3125rem;right:.625rem;font-size:1.4375rem;opacity:.2}.ss-modal-box .modal-content[data-v-87caef2e]{overflow-y:auto}.ss-modal-box .modal-content .pay-title[data-v-87caef2e]{font-size:.8125rem;font-weight:500;color:#333}.ss-modal-box .modal-content .pay-tip[data-v-87caef2e]{font-size:.8125rem;color:#bbb}.ss-modal-box .modal-content .pay-item[data-v-87caef2e]{height:2.6875rem}.ss-modal-box .modal-content .disabled-pay-item .pay-title[data-v-87caef2e]{color:#999}.ss-modal-box .modal-content .userInfo-money[data-v-87caef2e]{font-size:.8125rem;color:#bbb;line-height:normal}.ss-modal-box .save-btn[data-v-87caef2e]{width:22.1875rem;height:2.5rem;border-radius:1.25rem;background:linear-gradient(90deg,var(--ui-BG-Main),var(--ui-BG-Main-gradient));color:#fff}.ss-modal-box .disabled-btn[data-v-87caef2e]{background:#e5e5e5;color:#999}.ss-modal-box .past-due-btn[data-v-87caef2e]{width:22.1875rem;height:2.5rem;border-radius:1.25rem;background-color:#999;color:#fff}

+ 0 - 1
unpackage/dist/build/web/assets/index-9cb84373.css

@@ -1 +0,0 @@
-.pay-icon[data-v-6fa12d44]{width:1.125rem;height:1.125rem;margin-right:.8125rem}.ss-modal-box .modal-header[data-v-6fa12d44]{position:relative;padding:1.875rem .625rem 1.25rem}.ss-modal-box .modal-header .money-text[data-v-6fa12d44]{color:#ff3000;font-size:1.4375rem;font-weight:700;font-family:OPPOSANS}.ss-modal-box .modal-header .money-text[data-v-6fa12d44]:before{content:"¥";font-size:.9375rem}.ss-modal-box .modal-header .time-text[data-v-6fa12d44]{font-size:.8125rem;color:#bbb}.ss-modal-box .modal-header .close-icon[data-v-6fa12d44]{position:absolute;top:.3125rem;right:.625rem;font-size:1.4375rem;opacity:.2}.ss-modal-box .modal-content[data-v-6fa12d44]{overflow-y:auto}.ss-modal-box .modal-content .pay-title[data-v-6fa12d44]{font-size:.8125rem;font-weight:500;color:#333}.ss-modal-box .modal-content .pay-tip[data-v-6fa12d44]{font-size:.8125rem;color:#bbb}.ss-modal-box .modal-content .pay-item[data-v-6fa12d44]{height:2.6875rem}.ss-modal-box .modal-content .disabled-pay-item .pay-title[data-v-6fa12d44]{color:#999}.ss-modal-box .modal-content .userInfo-money[data-v-6fa12d44]{font-size:.8125rem;color:#bbb;line-height:normal}.ss-modal-box .save-btn[data-v-6fa12d44]{width:22.1875rem;height:2.5rem;border-radius:1.25rem;background:linear-gradient(90deg,var(--ui-BG-Main),var(--ui-BG-Main-gradient));color:#fff}.ss-modal-box .disabled-btn[data-v-6fa12d44]{background:#e5e5e5;color:#999}.ss-modal-box .past-due-btn[data-v-6fa12d44]{width:22.1875rem;height:2.5rem;border-radius:1.25rem;background-color:#999;color:#fff}

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/index-f7195083.css


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/list-511fdd29.css


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/list-e7e17a52.css


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/md5.0e6d361f.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/mp-html.7c66f819.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-activity-bargain-detail.c7432ec8.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-activity-bargain-detail.e331bafc.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-activity-bargain-list.9fe13808.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-activity-groupon-detail.10469859.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-activity-groupon-detail.34359fa7.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-activity-groupon-list.963035ab.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-activity-groupon-order.34a238d4.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-activity-groupon-order.545572a8.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-activity-index.3091f900.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-activity-index.412e5eea.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-activity-seckill-list.b5a7b15e.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-activity-seckill-list.fc52721d.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-app-sign.7830bf3b.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-app-sign.be798a5d.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-chat-index.73927f55.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-chat-speechtotext.d3225f8b.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-commission-commission-ranking.4f03ab89.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-commission-commission-ranking.fd595222.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-commission-goods.487234d7.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-commission-goods.da97f9f9.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-commission-index.992b7b11.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-commission-index.b9a9691c.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-commission-order.77633e14.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-commission-order.f2306793.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-commission-promoter.ca9af5e1.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-commission-promoter.f519f0af.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-commission-team.8e5ee61d.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-commission-wallet.1e6681c0.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-commission-withdraw.9d74cdc2.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-coupon-detail.0fd6aea5.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-coupon-detail.4aad141e.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-coupon-list.33eb843d.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-coupon-list.7631df54.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-goods-comment-add.a2a8efb8.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-goods-comment-add.a8011fae.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-goods-comment-list.8a263efe.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-goods-comment-list.9de0a575.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-goods-groupon.002ae742.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-goods-groupon.e89f3c9a.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-goods-index.1f2653d2.js


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
unpackage/dist/build/web/assets/pages-goods-index.9ea1aa14.js


Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff