Bläddra i källkod

update:调整了确认订单页面、购物车页面;调整了个人中心页面

RuHu.Xu 1 år sedan
förälder
incheckning
e03fbac4a7
100 ändrade filer med 1929 tillägg och 612 borttagningar
  1. 174 127
      pages.json
  2. 359 248
      pages/goods/components/detail/detail-navbar.vue
  3. 151 153
      pages/goods/components/detail/detail-tabbar.vue
  4. 3 3
      pages/goods/index.vue
  5. 33 19
      pages/index/cart.vue
  6. 83 22
      pages/order/confirm.vue
  7. 2 1
      pages/order/detail.vue
  8. 6 5
      pages/order/list.vue
  9. 1 1
      pages/user/goods-collect.vue
  10. 2 2
      pages/user/info.vue
  11. 354 0
      pages/user/invoice/edit.vue
  12. 152 0
      pages/user/invoice/list.vue
  13. 114 0
      pages/user/qrcode-share.vue
  14. 320 0
      pages/user/setting.vue
  15. 1 0
      sheep/components/s-goods-card/s-goods-card.vue
  16. 2 0
      sheep/components/s-goods-column/s-goods-column.vue
  17. 1 1
      sheep/components/s-layout/s-layout.vue
  18. 130 0
      sheep/components/s-points-pop/s-points-pop.vue
  19. 0 1
      sheep/components/s-share-modal/canvas-poster/index.vue
  20. 5 6
      sheep/components/s-share-modal/canvas-poster/useCanvas.js
  21. 1 1
      sheep/components/s-share-modal/s-share-modal.vue
  22. 12 6
      sheep/components/s-user-card/s-user-card.vue
  23. 2 2
      sheep/request/index.js
  24. 4 0
      sheep/scss/icon/_sheepicon.scss
  25. 1 1
      sheep/store/app.js
  26. BIN
      static/icon/cart.png
  27. BIN
      static/icon/index.png
  28. BIN
      static/icon/service.png
  29. BIN
      static/icon/shop.png
  30. 0 1
      unpackage/dist/build/h5/assets/address.37a0bf7a.js
  31. 1 0
      unpackage/dist/build/h5/assets/address.a1e89c5a.js
  32. 1 1
      unpackage/dist/build/h5/assets/afterSale.d34c7c30.js
  33. 1 0
      unpackage/dist/build/h5/assets/area.f2d778d6.js
  34. 1 1
      unpackage/dist/build/h5/assets/article.34de4789.js
  35. 0 0
      unpackage/dist/build/h5/assets/bargain.f8df20dc.js
  36. 1 1
      unpackage/dist/build/h5/assets/brokerage.827f31de.js
  37. 0 1
      unpackage/dist/build/h5/assets/cart-45d32ddc.css
  38. 1 0
      unpackage/dist/build/h5/assets/cart-515119e9.css
  39. BIN
      unpackage/dist/build/h5/assets/cart-ed457535.png
  40. 1 1
      unpackage/dist/build/h5/assets/category.4ed41703.js
  41. 1 1
      unpackage/dist/build/h5/assets/combination.1d0a80d8.js
  42. 0 0
      unpackage/dist/build/h5/assets/comment-item.193ce6fd.js
  43. 0 0
      unpackage/dist/build/h5/assets/comment-item.be3dc4d6.js
  44. 1 1
      unpackage/dist/build/h5/assets/config.6219f0d3.js
  45. 0 0
      unpackage/dist/build/h5/assets/confirm-002e56f8.css
  46. 0 0
      unpackage/dist/build/h5/assets/confirm-0c1d583a.css
  47. 1 1
      unpackage/dist/build/h5/assets/const.73e580a1.js
  48. 0 0
      unpackage/dist/build/h5/assets/detail-content-card-a4d2bdb2.css
  49. 0 0
      unpackage/dist/build/h5/assets/detail-content-card-d28c5e47.css
  50. 0 0
      unpackage/dist/build/h5/assets/detail-content-card.9a773ee8.js
  51. 0 0
      unpackage/dist/build/h5/assets/detail-content-card.b66a4463.js
  52. 0 0
      unpackage/dist/build/h5/assets/detail-eac28fda.css
  53. 0 0
      unpackage/dist/build/h5/assets/detail-eb23fc46.css
  54. 1 0
      unpackage/dist/build/h5/assets/edit-4ff5a0b1.css
  55. 1 1
      unpackage/dist/build/h5/assets/favorite.b57679d4.js
  56. 1 0
      unpackage/dist/build/h5/assets/goods-collect-c0ad4ce7.css
  57. 0 1
      unpackage/dist/build/h5/assets/goods-collect-ee21ad15.css
  58. 1 1
      unpackage/dist/build/h5/assets/history.f245f652.js
  59. 0 0
      unpackage/dist/build/h5/assets/index-44b9db5a.js
  60. BIN
      unpackage/dist/build/h5/assets/index-53a28843.png
  61. 0 0
      unpackage/dist/build/h5/assets/index-b4124b06.css
  62. 0 0
      unpackage/dist/build/h5/assets/index-faf74218.css
  63. 1 1
      unpackage/dist/build/h5/assets/index.ab14311e.js
  64. 0 0
      unpackage/dist/build/h5/assets/info-76cbd1d8.css
  65. 0 0
      unpackage/dist/build/h5/assets/list-19739a99.css
  66. 1 0
      unpackage/dist/build/h5/assets/list-83e59b38.css
  67. 0 0
      unpackage/dist/build/h5/assets/list-e79a7552.css
  68. 0 0
      unpackage/dist/build/h5/assets/mp-html.5f288a95.js
  69. 0 0
      unpackage/dist/build/h5/assets/pages-activity-bargain-detail.7deec51d.js
  70. 0 0
      unpackage/dist/build/h5/assets/pages-activity-bargain-list.9e0bc34c.js
  71. 0 0
      unpackage/dist/build/h5/assets/pages-activity-groupon-detail.489a4fb5.js
  72. 0 0
      unpackage/dist/build/h5/assets/pages-activity-groupon-list.e1169f8f.js
  73. 0 0
      unpackage/dist/build/h5/assets/pages-activity-groupon-order.8440ff27.js
  74. 0 0
      unpackage/dist/build/h5/assets/pages-activity-index.0739d1fb.js
  75. 0 0
      unpackage/dist/build/h5/assets/pages-activity-index.4ac783fa.js
  76. 0 0
      unpackage/dist/build/h5/assets/pages-activity-seckill-list.814d4a76.js
  77. 0 0
      unpackage/dist/build/h5/assets/pages-app-sign.96326a91.js
  78. 0 0
      unpackage/dist/build/h5/assets/pages-chat-index.0dfa1a3a.js
  79. 0 0
      unpackage/dist/build/h5/assets/pages-commission-commission-ranking.dfaab750.js
  80. 0 0
      unpackage/dist/build/h5/assets/pages-commission-goods.26525850.js
  81. 0 0
      unpackage/dist/build/h5/assets/pages-commission-index.0d8cb5d3.js
  82. 0 0
      unpackage/dist/build/h5/assets/pages-commission-order.91d21da4.js
  83. 0 0
      unpackage/dist/build/h5/assets/pages-commission-order.bf33469e.js
  84. 0 0
      unpackage/dist/build/h5/assets/pages-commission-promoter.2a1164a3.js
  85. 0 0
      unpackage/dist/build/h5/assets/pages-commission-promoter.bee15e5c.js
  86. 0 0
      unpackage/dist/build/h5/assets/pages-commission-team.1143d670.js
  87. 0 0
      unpackage/dist/build/h5/assets/pages-commission-wallet.b7cc96f1.js
  88. 0 0
      unpackage/dist/build/h5/assets/pages-commission-withdraw.feff1b0c.js
  89. 0 0
      unpackage/dist/build/h5/assets/pages-coupon-detail.1ad8167e.js
  90. 0 0
      unpackage/dist/build/h5/assets/pages-coupon-detail.27062a5d.js
  91. 0 0
      unpackage/dist/build/h5/assets/pages-coupon-list.3cdd668c.js
  92. 0 0
      unpackage/dist/build/h5/assets/pages-goods-comment-add.7ae21df9.js
  93. 0 0
      unpackage/dist/build/h5/assets/pages-goods-comment-list.c5268faa.js
  94. 0 0
      unpackage/dist/build/h5/assets/pages-goods-groupon.25e65ea9.js
  95. 0 0
      unpackage/dist/build/h5/assets/pages-goods-groupon.5ac0eb0d.js
  96. 0 0
      unpackage/dist/build/h5/assets/pages-goods-index.8331e52e.js
  97. 0 0
      unpackage/dist/build/h5/assets/pages-goods-list.1b30ab8a.js
  98. 0 0
      unpackage/dist/build/h5/assets/pages-goods-seckill.7c4de860.js
  99. 0 0
      unpackage/dist/build/h5/assets/pages-index-cart.29cf0983.js
  100. 0 0
      unpackage/dist/build/h5/assets/pages-index-cart.db47a72c.js

+ 174 - 127
pages.json

@@ -7,19 +7,19 @@
 		}
 	},
 	"pages": [{
-		"path": "pages/index/index",
-		"aliasPath": "/",
-		"style": {
-			"navigationBarTitleText": "首页",
-			"enablePullDownRefresh": true
+			"path": "pages/index/index",
+			"aliasPath": "/",
+			"style": {
+				"navigationBarTitleText": "首页",
+				"enablePullDownRefresh": true
+			},
+			"meta": {
+				"auth": false,
+				"sync": true,
+				"title": "首页",
+				"group": "商城"
+			}
 		},
-		"meta": {
-			"auth": false,
-			"sync": true,
-			"title": "首页",
-			"group": "商城"
-		}
-	},
 		{
 			"path": "pages/index/user",
 			"style": {
@@ -85,81 +85,81 @@
 		}
 	],
 	"subPackages": [{
-		"root": "pages/goods",
-		"pages": [{
-			"path": "index",
-			"style": {
-				"navigationBarTitleText": "商品详情"
-			},
-			"meta": {
-				"sync": true,
-				"title": "普通商品",
-				"group": "商品"
-			}
-		},
-			{
-				"path": "groupon",
-				"style": {
-					"navigationBarTitleText": "拼团商品"
+			"root": "pages/goods",
+			"pages": [{
+					"path": "index",
+					"style": {
+						"navigationBarTitleText": "商品详情"
+					},
+					"meta": {
+						"sync": true,
+						"title": "普通商品",
+						"group": "商品"
+					}
+				},
+				{
+					"path": "groupon",
+					"style": {
+						"navigationBarTitleText": "拼团商品"
+					},
+					"meta": {
+						"sync": true,
+						"title": "拼团商品",
+						"group": "商品"
+					}
 				},
-				"meta": {
-					"sync": true,
-					"title": "拼团商品",
-					"group": "商品"
-				}
-			},
 
-			{
-				"path": "seckill",
-				"style": {
-					"navigationBarTitleText": "秒杀商品"
+				{
+					"path": "seckill",
+					"style": {
+						"navigationBarTitleText": "秒杀商品"
+					},
+					"meta": {
+						"sync": true,
+						"title": "秒杀商品",
+						"group": "商品"
+					}
 				},
-				"meta": {
-					"sync": true,
-					"title": "秒杀商品",
-					"group": "商品"
-				}
-			},
-			{
-				"path": "list",
-				"style": {
-					"navigationBarTitleText": "商品列表"
+				{
+					"path": "list",
+					"style": {
+						"navigationBarTitleText": "商品列表"
+					},
+					"meta": {
+						"sync": true,
+						"title": "商品列表",
+						"group": "商品"
+					}
 				},
-				"meta": {
-					"sync": true,
-					"title": "商品列表",
-					"group": "商品"
-				}
-			},
-			{
-				"path": "comment/add",
-				"style": {
-					"navigationBarTitleText": "评价商品"
+				{
+					"path": "comment/add",
+					"style": {
+						"navigationBarTitleText": "评价商品"
+					},
+					"meta": {
+						"auth": true
+					}
 				},
-				"meta": {
-					"auth": true
-				}
-			},
-			{
-				"path": "comment/list",
-				"style": {
-					"navigationBarTitleText": "商品评价"
+				{
+					"path": "comment/list",
+					"style": {
+						"navigationBarTitleText": "商品评价"
+					}
 				}
-			}
-		]
-	},
+			]
+		},
 		{
 			"root": "pages/order",
 			"pages": [{
-				"path": "detail",
-				"style": {
-					"navigationBarTitleText": "订单详情"
+					"path": "detail",
+					"style": {
+						"navigationBarTitleText": "订单详情"
+					},
+					"meta": {
+						"auth": true,
+						"title": "订单详情"
+					}
 				},
-				"meta": {
-					"auth": true,
-					"title": "订单详情"
-				}
-			},
 				{
 					"path": "confirm",
 					"style": {
@@ -250,17 +250,41 @@
 		{
 			"root": "pages/user",
 			"pages": [{
-				"path": "info",
-				"style": {
-					"navigationBarTitleText": "我的信息"
+					"path": "info",
+					"style": {
+						"navigationBarTitleText": "我的信息"
+					},
+					"meta": {
+						"auth": true,
+						"sync": true,
+						"title": "用户信息",
+						"group": "用户中心"
+					}
+				},
+				{
+					"path": "setting",
+					"style": {
+						"navigationBarTitleText": "用户设置"
+					},
+					"meta": {
+						"auth": true,
+						"sync": true,
+						"title": "用户设置",
+						"group": "用户中心"
+					}
+				},
+				{
+					"path": "qrcode-share",
+					"style": {
+						"navigationBarTitleText": "我的二维码/分享页"
+					},
+					"meta": {
+						"auth": true,
+						"sync": true,
+						"title": "我的二维码/分享页",
+						"group": "用户中心"
+					}
 				},
-				"meta": {
-					"auth": true,
-					"sync": true,
-					"title": "用户信息",
-					"group": "用户中心"
-				}
-			},
 				{
 					"path": "goods-collect",
 					"style": {
@@ -297,6 +321,28 @@
 						"group": "用户中心"
 					}
 				},
+				{
+					"path": "invoice/edit",
+					"style": {
+						"navigationBarTitleText": "发票抬头编辑"
+					},
+					"meta": {
+						"auth": true,
+						"title": "发票抬头"
+					}
+				},
+				{
+					"path": "invoice/list",
+					"style": {
+						"navigationBarTitleText": "发票抬头管理"
+					},
+					"meta": {
+						"auth": true,
+						"sync": true,
+						"title": "发票抬头管理",
+						"group": "用户中心"
+					}
+				},
 				{
 					"path": "address/edit",
 					"style": {
@@ -331,22 +377,23 @@
 						"group": "用户中心"
 					}
 				}
+				
 			]
 		},
 		{
 			"root": "pages/commission",
 			"pages": [{
-				"path": "index",
-				"style": {
-					"navigationBarTitleText": "分销"
+					"path": "index",
+					"style": {
+						"navigationBarTitleText": "分销"
+					},
+					"meta": {
+						"auth": true,
+						"sync": true,
+						"title": "分销中心",
+						"group": "分销商城"
+					}
 				},
-				"meta": {
-					"auth": true,
-					"sync": true,
-					"title": "分销中心",
-					"group": "分销商城"
-				}
-			},
 				{
 					"path": "wallet",
 					"style": {
@@ -448,16 +495,16 @@
 		{
 			"root": "pages/public",
 			"pages": [{
-				"path": "setting",
-				"style": {
-					"navigationBarTitleText": "系统设置"
+					"path": "setting",
+					"style": {
+						"navigationBarTitleText": "系统设置"
+					},
+					"meta": {
+						"sync": true,
+						"title": "系统设置",
+						"group": "通用"
+					}
 				},
-				"meta": {
-					"sync": true,
-					"title": "系统设置",
-					"group": "通用"
-				}
-			},
 				{
 					"path": "richtext",
 					"style": {
@@ -497,16 +544,16 @@
 		{
 			"root": "pages/coupon",
 			"pages": [{
-				"path": "list",
-				"style": {
-					"navigationBarTitleText": "领券中心"
+					"path": "list",
+					"style": {
+						"navigationBarTitleText": "领券中心"
+					},
+					"meta": {
+						"sync": true,
+						"title": "领券中心",
+						"group": "优惠券"
+					}
 				},
-				"meta": {
-					"sync": true,
-					"title": "领券中心",
-					"group": "优惠券"
-				}
-			},
 				{
 					"path": "detail",
 					"style": {
@@ -539,11 +586,11 @@
 		{
 			"root": "pages/pay",
 			"pages": [{
-				"path": "index",
-				"style": {
-					"navigationBarTitleText": "收银台"
-				}
-			},
+					"path": "index",
+					"style": {
+						"navigationBarTitleText": "收银台"
+					}
+				},
 				{
 					"path": "result",
 					"style": {
@@ -579,11 +626,11 @@
 		{
 			"root": "pages/activity",
 			"pages": [{
-				"path": "groupon/detail",
-				"style": {
-					"navigationBarTitleText": "拼团详情"
-				}
-			},
+					"path": "groupon/detail",
+					"style": {
+						"navigationBarTitleText": "拼团详情"
+					}
+				},
 				{
 					"path": "groupon/order",
 					"style": {
@@ -664,8 +711,8 @@
 	},
 	"tabBar": {
 		"list": [{
-			"pagePath": "pages/index/index"
-		},
+				"pagePath": "pages/index/index"
+			},
 			{
 				"pagePath": "pages/index/cart"
 			},

+ 359 - 248
pages/goods/components/detail/detail-navbar.vue

@@ -1,256 +1,367 @@
 <!-- 商品详情:商品/评价/详情的 nav -->
 <template>
-  <su-fixed alway :bgStyles="{ background: '#fff' }" :val="0" noNav opacity :placeholder="false">
-    <su-status-bar />
-    <view
-      class="ui-bar ss-flex ss-col-center ss-row-between ss-p-x-20"
-      :style="[{ height: sys_navBar - sys_statusBar + 'px' }]"
-    >
-      <!-- 左 -->
-      <view class="icon-box ss-flex">
-        <view class="icon-button icon-button-left ss-flex ss-row-center" @tap="onClickLeft">
-          <text class="sicon-back" v-if="hasHistory" />
-          <text class="sicon-home" v-else />
-        </view>
-        <view class="line"></view>
-        <view class="icon-button icon-button-right ss-flex ss-row-center" @tap="onClickRight">
-          <text class="sicon-more" />
-        </view>
-      </view>
-      <!-- 中 -->
-      <view class="detail-tab-card ss-flex-1" :style="[{ opacity: state.tabOpacityVal }]">
-        <view class="tab-box ss-flex ss-col-center ss-row-around">
-          <view
-            class="tab-item ss-flex-1 ss-flex ss-row-center ss-col-center"
-            v-for="item in state.tabList"
-            :key="item.value"
-            @tap="onTab(item)"
-          >
-            <view class="tab-title" :class="state.curTab === item.value ? 'cur-tab-title' : ''">
-              {{ item.label }}
-            </view>
-            <view v-show="state.curTab === item.value" class="tab-line"></view>
-          </view>
-        </view>
-      </view>
-      <!-- #ifdef MP -->
-      <view :style="[capsuleStyle]"></view>
-      <!-- #endif -->
-    </view>
-  </su-fixed>
+	<su-fixed alway :bgStyles="{ background: '#fff' }" :val="0" noNav opacity :placeholder="false">
+		<su-status-bar />
+		<view class="ui-bar ss-flex ss-col-center ss-row-between ss-p-x-20"
+			:style="[{ height: sys_navBar - sys_statusBar + 'px' }]">
+			<!-- 左 -->
+			<view class="icon-box ss-flex">
+				<view class="icon-button icon-button-left ss-flex ss-row-center" @tap="onClickLeft">
+					<text class="sicon-back" v-if="hasHistory" />
+					<text class="sicon-home" v-else />
+				</view>
+				<view class="line"></view>
+				<view class="icon-button icon-button-right ss-flex ss-row-center" @tap="onClickRight">
+					<text class="sicon-more" />
+				</view>
+			</view>
+			<!-- 中 -->
+			<view class="detail-tab-card ss-flex-1" :style="[{ opacity: state.tabOpacityVal }]">
+				<view class="tab-box ss-flex ss-col-center ss-row-around">
+					<view class="tab-item ss-flex-1 ss-flex ss-row-center ss-col-center" v-for="item in state.tabList"
+						:key="item.value" @tap="onTab(item)">
+						<view class="tab-title" :class="state.curTab === item.value ? 'cur-tab-title' : ''">
+							{{ item.label }}
+						</view>
+						<view v-show="state.curTab === item.value" class="tab-line"></view>
+					</view>
+				</view>
+
+			</view>
+
+			<!-- 右 -->
+			<view class="ui-tabbar-box " :style="[{ opacity: state.tabOpacityVal }]"> 
+				<view class="ui-tabbar ss-flex ss-col-center ss-row-between">
+					<view class="ss-flex ss-col-center ss-row-between" >
+						<view v-if="collectIcon"
+							class="detail-tabbar-item ss-flex ss-flex-col ss-row-center ss-col-center"
+							@tap="onFavorite">
+							<block v-if="modelValue.favorite">
+								<image class="item-icon"
+									:src="sheep.$url.static('/static/img/shop/goods/collect_1.gif')" mode="aspectFit" />
+								<!-- <view class="item-title">已收藏</view> -->
+							</block>
+							<block v-else>
+								<image class="item-icon"
+									:src="sheep.$url.static('/static/img/shop/goods/collect_0.png')" mode="aspectFit" />
+								<!-- <view class="item-title">收藏</view> -->
+							</block>
+						</view>
+						<view v-if="shareIcon" class="detail-tabbar-item ss-flex ss-flex-col ss-row-center ss-col-center"
+							@tap="showShareModal">
+							<image class="item-icon" :src="sheep.$url.static('/static/img/shop/goods/share.png')"
+								mode="aspectFit" />
+							<!-- <view class="item-title">分享</view> -->
+						</view>
+					</view>
+				</view>
+			</view>
+			<!-- #ifdef MP -->
+			<view :style="[capsuleStyle]"></view>
+			<!-- #endif -->
+		</view>
+	</su-fixed>
 </template>
 
 <script setup>
-  import { reactive } from 'vue';
-  import { onPageScroll } from '@dcloudio/uni-app';
-  import sheep from '@/sheep';
-  import throttle from '@/sheep/helper/throttle.js';
-  import { showMenuTools, closeMenuTools } from '@/sheep/hooks/useModal';
-
-  const sys_statusBar = sheep.$platform.device.statusBarHeight;
-  const sys_navBar = sheep.$platform.navbar;
-  const capsuleStyle = {
-    width: sheep.$platform.capsule.width + 'px',
-    height: sheep.$platform.capsule.height + 'px',
-  };
-
-  const state = reactive({
-    tabOpacityVal: 0,
-    curTab: 'goods',
-    tabList: [
-      {
-        label: '商品',
-        value: 'goods',
-        to: 'detail-swiper-selector',
-      },
-      {
-        label: '评价',
-        value: 'comment',
-        to: 'detail-comment-selector',
-      },
-      {
-        label: '详情',
-        value: 'detail',
-        to: 'detail-content-selector',
-      },
-    ],
-  });
-  const emits = defineEmits(['clickLeft']);
-  const hasHistory = sheep.$router.hasHistory();
-
-  function onClickLeft() {
-    if (hasHistory) {
-      sheep.$router.back();
-    } else {
-      sheep.$router.go('/pages/index/index');
-    }
-    emits('clickLeft');
-  }
-
-  function onClickRight() {
-    showMenuTools();
-  }
-
-  let commentCard = {
-    top: 0,
-    bottom: 0,
-  };
-
-  function getCommentCardNode() {
-    return new Promise((res, rej) => {
-      uni.createSelectorQuery()
-        .select('.detail-comment-selector')
-        .boundingClientRect((data) => {
-          if (data) {
-            commentCard.top = data.top;
-            commentCard.bottom = data.top + data.height;
-            res(data);
-          } else {
-            res(null);
-          }
-        })
-        .exec();
-    });
-  }
-
-  function onTab(tab) {
-    let scrollTop = 0;
-    if (tab.value === 'comment') {
-      scrollTop = commentCard.top - sys_navBar + 1;
-    } else if (tab.value === 'detail') {
-      scrollTop = commentCard.bottom - sys_navBar + 1;
-    }
-    uni.pageScrollTo({
-      scrollTop,
-      duration: 200,
-    });
-  }
-
-  onPageScroll((e) => {
-    state.tabOpacityVal = e.scrollTop > sheep.$platform.navbar ? 1 : e.scrollTop * 0.01;
-    if (commentCard.top === 0) {
-      throttle(() => {
-        getCommentCardNode();
-      }, 50);
-    }
-
-    if (e.scrollTop < commentCard.top - sys_navBar) {
-      state.curTab = 'goods';
-    } else if (
-      e.scrollTop >= commentCard.top - sys_navBar &&
-      e.scrollTop <= commentCard.bottom - sys_navBar
-    ) {
-      state.curTab = 'comment';
-    } else {
-      state.curTab = 'detail';
-    }
-  });
+	import {
+		reactive
+	} from 'vue';
+	import {
+		onPageScroll
+	} from '@dcloudio/uni-app';
+	import sheep from '@/sheep';
+	import throttle from '@/sheep/helper/throttle.js';
+	import {
+		showMenuTools,
+		closeMenuTools
+	} from '@/sheep/hooks/useModal';
+	import {
+		showShareModal
+	} from '@/sheep/hooks/useModal';
+	import FavoriteApi from '@/sheep/api/product/favorite';
+	const sys_statusBar = sheep.$platform.device.statusBarHeight;
+	const sys_navBar = sheep.$platform.navbar;
+	const capsuleStyle = {
+		width: sheep.$platform.capsule.width + 'px',
+		height: sheep.$platform.capsule.height + 'px',
+	};
+
+	const state = reactive({
+		tabOpacityVal: 0,
+		curTab: 'goods',
+		tabList: [{
+				label: '商品',
+				value: 'goods',
+				to: 'detail-swiper-selector',
+			},
+			{
+				label: '评价',
+				value: 'comment',
+				to: 'detail-comment-selector',
+			},
+			{
+				label: '详情',
+				value: 'detail',
+				to: 'detail-content-selector',
+			},
+		],
+	});
+
+	// 接收参数
+	const props = defineProps({
+		modelValue: {
+			type: Object,
+			default () {},
+		},
+
+		collectIcon: {
+			type: Boolean,
+			default: true,
+		},
+		
+		shareIcon: {
+			type: Boolean,
+			default: true,
+		},
+	});
+	const emits = defineEmits(['clickLeft']);
+	const hasHistory = sheep.$router.hasHistory();
+
+	function onClickLeft() {
+		if (hasHistory) {
+			sheep.$router.back();
+		} else {
+			sheep.$router.go('/pages/index/index');
+		}
+		emits('clickLeft');
+	}
+
+	function onClickRight() {
+		showMenuTools();
+	}
+
+	let commentCard = {
+		top: 0,
+		bottom: 0,
+	};
+
+	function getCommentCardNode() {
+		return new Promise((res, rej) => {
+			uni.createSelectorQuery()
+				.select('.detail-comment-selector')
+				.boundingClientRect((data) => {
+					if (data) {
+						commentCard.top = data.top;
+						commentCard.bottom = data.top + data.height;
+						res(data);
+					} else {
+						res(null);
+					}
+				})
+				.exec();
+		});
+	}
+
+	function onTab(tab) {
+		let scrollTop = 0;
+		if (tab.value === 'comment') {
+			scrollTop = commentCard.top - sys_navBar + 1;
+		} else if (tab.value === 'detail') {
+			scrollTop = commentCard.bottom - sys_navBar + 1;
+		}
+		uni.pageScrollTo({
+			scrollTop,
+			duration: 200,
+		});
+	}
+	async function onFavorite() {
+		// 情况一:取消收藏
+		if (props.modelValue.favorite) {
+			const {
+				code
+			} = await FavoriteApi.deleteFavorite(props.modelValue.id);
+			if (code !== 0) {
+				return
+			}
+			sheep.$helper.toast('取消收藏');
+			props.modelValue.favorite = false;
+			// 情况二:添加收藏
+		} else {
+			const {
+				code
+			} = await FavoriteApi.createFavorite(props.modelValue.id);
+			if (code !== 0) {
+				return
+			}
+			sheep.$helper.toast('收藏成功');
+			props.modelValue.favorite = true;
+		}
+	}
+	onPageScroll((e) => {
+		state.tabOpacityVal = e.scrollTop > sheep.$platform.navbar ? 1 : e.scrollTop * 0.01;
+		if (commentCard.top === 0) {
+			throttle(() => {
+				getCommentCardNode();
+			}, 50);
+		}
+
+		if (e.scrollTop < commentCard.top - sys_navBar) {
+			state.curTab = 'goods';
+		} else if (
+			e.scrollTop >= commentCard.top - sys_navBar &&
+			e.scrollTop <= commentCard.bottom - sys_navBar
+		) {
+			state.curTab = 'comment';
+		} else {
+			state.curTab = 'detail';
+		}
+	});
 </script>
 
 <style lang="scss" scoped>
-  .icon-box {
-    box-shadow: 0px 0px 4rpx rgba(51, 51, 51, 0.08), 0px 4rpx 6rpx 2rpx rgba(102, 102, 102, 0.12);
-    border-radius: 30rpx;
-    width: 134rpx;
-    height: 56rpx;
-    margin-left: 8rpx;
-    border: 1px solid rgba(#fff, 0.4);
-    .line {
-      width: 2rpx;
-      height: 24rpx;
-      background: #e5e5e7;
-    }
-    .sicon-back {
-      font-size: 32rpx;
-      color: #000;
-    }
-    .sicon-home {
-      font-size: 32rpx;
-      color: #000;
-    }
-    .sicon-more {
-      font-size: 32rpx;
-      color: #000;
-    }
-    .icon-button {
-      width: 67rpx;
-      height: 56rpx;
-      &-left:hover {
-        background: rgba(0, 0, 0, 0.16);
-        border-radius: 30rpx 0px 0px 30rpx;
-      }
-      &-right:hover {
-        background: rgba(0, 0, 0, 0.16);
-        border-radius: 0px 30rpx 30rpx 0px;
-      }
-    }
-  }
-  .left-box {
-    position: relative;
-    width: 60rpx;
-    height: 60rpx;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    .circle {
-      position: absolute;
-      left: 0;
-      top: 0;
-      width: 60rpx;
-      height: 60rpx;
-      background: rgba(#fff, 0.6);
-      border: 1rpx solid #ebebeb;
-      border-radius: 50%;
-      box-sizing: border-box;
-      z-index: -1;
-    }
-  }
-  .right {
-    position: relative;
-    width: 60rpx;
-    height: 60rpx;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    .circle {
-      position: absolute;
-      left: 0;
-      top: 0;
-      width: 60rpx;
-      height: 60rpx;
-      background: rgba(#ffffff, 0.6);
-      border: 1rpx solid #ebebeb;
-      box-sizing: border-box;
-      border-radius: 50%;
-      z-index: -1;
-    }
-  }
-  .detail-tab-card {
-    width: 50%;
-    .tab-item {
-      height: 80rpx;
-      position: relative;
-      z-index: 11;
-
-      .tab-title {
-        font-size: 30rpx;
-      }
-
-      .cur-tab-title {
-        font-weight: $font-weight-bold;
-      }
-
-      .tab-line {
-        width: 60rpx;
-        height: 6rpx;
-        border-radius: 6rpx;
-        position: absolute;
-        left: 50%;
-        transform: translateX(-50%);
-        bottom: 10rpx;
-        background-color: var(--ui-BG-Main);
-        z-index: 12;
-      }
-    }
-  }
-</style>
+	.ui-tabbar-box {
+		// box-shadow: 0px -6px 10px 0px rgba(51, 51, 51, 0.2);
+	}
+
+	.ui-tabbar {
+		display: flex;
+		height: 100%;
+		background: #fff;
+
+		.detail-tabbar-item {
+			width: 80rpx;
+
+			.item-icon {
+				width: 40rpx;
+				height: 40rpx;
+			}
+
+			.item-title {
+				font-size: 20rpx;
+				font-weight: 500;
+				line-height: 20rpx;
+				margin-top: 12rpx;
+			}
+		}
+	}
+
+	.icon-box {
+		box-shadow: 0px 0px 4rpx rgba(51, 51, 51, 0.08), 0px 4rpx 6rpx 2rpx rgba(102, 102, 102, 0.12);
+		border-radius: 30rpx;
+		width: 134rpx;
+		height: 56rpx;
+		margin-left: 8rpx;
+		border: 1px solid rgba(#fff, 0.4);
+
+		.line {
+			width: 2rpx;
+			height: 24rpx;
+			background: #e5e5e7;
+		}
+
+		.sicon-back {
+			font-size: 32rpx;
+			color: #000;
+		}
+
+		.sicon-home {
+			font-size: 32rpx;
+			color: #000;
+		}
+
+		.sicon-more {
+			font-size: 32rpx;
+			color: #000;
+		}
+
+		.icon-button {
+			width: 67rpx;
+			height: 56rpx;
+
+			&-left:hover {
+				background: rgba(0, 0, 0, 0.16);
+				border-radius: 30rpx 0px 0px 30rpx;
+			}
+
+			&-right:hover {
+				background: rgba(0, 0, 0, 0.16);
+				border-radius: 0px 30rpx 30rpx 0px;
+			}
+		}
+	}
+
+	.left-box {
+		position: relative;
+		width: 60rpx;
+		height: 60rpx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+
+		.circle {
+			position: absolute;
+			left: 0;
+			top: 0;
+			width: 60rpx;
+			height: 60rpx;
+			background: rgba(#fff, 0.6);
+			border: 1rpx solid #ebebeb;
+			border-radius: 50%;
+			box-sizing: border-box;
+			z-index: -1;
+		}
+	}
+
+	.right {
+		position: relative;
+		width: 60rpx;
+		height: 60rpx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+
+		.circle {
+			position: absolute;
+			left: 0;
+			top: 0;
+			width: 60rpx;
+			height: 60rpx;
+			background: rgba(#ffffff, 0.6);
+			border: 1rpx solid #ebebeb;
+			box-sizing: border-box;
+			border-radius: 50%;
+			z-index: -1;
+		}
+	}
+
+	.detail-tab-card {
+		width: 50%;
+
+		.tab-item {
+			height: 80rpx;
+			position: relative;
+			z-index: 11;
+
+			.tab-title {
+				font-size: 30rpx;
+			}
+
+			.cur-tab-title {
+				font-weight: $font-weight-bold;
+			}
+
+			.tab-line {
+				width: 60rpx;
+				height: 6rpx;
+				border-radius: 6rpx;
+				position: absolute;
+				left: 50%;
+				transform: translateX(-50%);
+				bottom: 10rpx;
+				background-color: var(--ui-BG-Main);
+				z-index: 12;
+			}
+		}
+	}
+</style>

+ 151 - 153
pages/goods/components/detail/detail-tabbar.vue

@@ -1,169 +1,167 @@
 <!-- 商品详情的底部导航 -->
 <template>
-  <su-fixed bottom placeholder bg="bg-white">
-    <view class="ui-tabbar-box">
-      <view class="ui-tabbar ss-flex ss-col-center ss-row-between">
-        <view
-          v-if="collectIcon"
-          class="detail-tabbar-item ss-flex ss-flex-col ss-row-center ss-col-center"
-          @tap="onFavorite"
-        >
-          <block v-if="modelValue.favorite">
-            <image
-              class="item-icon"
-              :src="sheep.$url.static('/static/img/shop/goods/collect_1.gif')"
-              mode="aspectFit"
-            />
-            <view class="item-title">已收藏</view>
-          </block>
-          <block v-else>
-            <image
-              class="item-icon"
-              :src="sheep.$url.static('/static/img/shop/goods/collect_0.png')"
-              mode="aspectFit"
-            />
-            <view class="item-title">收藏</view>
-          </block>
-        </view>
-        <view
-          v-if="serviceIcon"
-          class="detail-tabbar-item ss-flex ss-flex-col ss-row-center ss-col-center"
-          @tap="onChat"
-        >
-          <image
-            class="item-icon"
-            :src="sheep.$url.static('/static/img/shop/goods/message.png')"
-            mode="aspectFit"
-          />
-          <view class="item-title">客服</view>
-        </view>
-        <view
-          v-if="shareIcon"
-          class="detail-tabbar-item ss-flex ss-flex-col ss-row-center ss-col-center"
-          @tap="showShareModal"
-        >
-          <image
-            class="item-icon"
-            :src="sheep.$url.static('/static/img/shop/goods/share.png')"
-            mode="aspectFit"
-          />
-          <view class="item-title">分享</view>
-        </view>
-        <slot></slot>
-      </view>
-    </view>
-  </su-fixed>
+	<su-fixed bottom placeholder bg="bg-white">
+		<view class="ui-tabbar-box">
+			<view class="ui-tabbar ss-flex ss-col-center ss-row-between">
+				<view v-if="serviceIcon" class="detail-tabbar-item ss-flex ss-flex-col ss-row-center ss-col-center"
+					@tap="onIndex">
+					<image class="item-icon" src="@/static/icon/index.png"
+						mode="aspectFit" />
+					<view class="item-title">首页</view>
+				</view>
+				<view v-if="serviceIcon" class="detail-tabbar-item ss-flex ss-flex-col ss-row-center ss-col-center"
+					@tap="onChat">
+					<image class="item-icon" src="@/static/icon/shop.png"
+						mode="aspectFit" />
+					<view class="item-title">店铺</view>
+				</view>
+				<!-- <view v-if="serviceIcon" class="detail-tabbar-item ss-flex ss-flex-col ss-row-center ss-col-center"
+					@tap="onChat">
+					<image class="item-icon" src="@/static/icon/service.png"
+						mode="aspectFit" />
+					<view class="item-title">客服</view>
+				</view> -->
+				
+				<view v-if="shareIcon" class="detail-tabbar-item ss-flex ss-flex-col ss-row-center ss-col-center"
+					@tap="showShareModal">
+					<image class="item-icon" src="@/static/icon/cart.png"
+						mode="aspectFit" />
+					<view class="item-title">购物车</view>
+				</view>
+				
+				<!-- <view v-if="shareIcon" class="detail-tabbar-item ss-flex ss-flex-col ss-row-center ss-col-center"
+					@tap="showShareModal">
+					<image class="item-icon" :src="sheep.$url.static('/static/img/shop/goods/share.png')"
+						mode="aspectFit" />
+					<view class="item-title">分享</view>
+				</view> -->
+				<slot></slot>
+			</view>
+		</view>
+	</su-fixed>
 </template>
 
 <script setup>
-  /**
-   *
-   * 底部导航
-   *
-   * @property {String} bg 			 			- 背景颜色Class
-   * @property {String} ui 			 			- 自定义样式Class
-   * @property {Boolean} noFixed 		 			- 是否定位
-   * @property {Boolean} topRadius 		 		- 上圆角
-   */
-  import { reactive } from 'vue';
-  import sheep from '@/sheep';
-  import { showShareModal } from '@/sheep/hooks/useModal';
-  import FavoriteApi from '@/sheep/api/product/favorite';
+	/**
+	 *
+	 * 底部导航
+	 *
+	 * @property {String} bg 			 			- 背景颜色Class
+	 * @property {String} ui 			 			- 自定义样式Class
+	 * @property {Boolean} noFixed 		 			- 是否定位
+	 * @property {Boolean} topRadius 		 		- 上圆角
+	 */
+	import {
+		reactive
+	} from 'vue';
+	import sheep from '@/sheep';
+	import {
+		showShareModal
+	} from '@/sheep/hooks/useModal';
+	import FavoriteApi from '@/sheep/api/product/favorite';
 
-  // 数据
-  const state = reactive({});
+	// 数据
+	const state = reactive({});
 
-  // 接收参数
-  const props = defineProps({
-    modelValue: {
-      type: Object,
-      default() {},
-    },
-    bg: {
-      type: String,
-      default: 'bg-white',
-    },
-    bgStyles: {
-      type: Object,
-      default() {},
-    },
-    ui: {
-      type: String,
-      default: '',
-    },
+	// 接收参数
+	const props = defineProps({
+		modelValue: {
+			type: Object,
+			default () {},
+		},
+		bg: {
+			type: String,
+			default: 'bg-white',
+		},
+		bgStyles: {
+			type: Object,
+			default () {},
+		},
+		ui: {
+			type: String,
+			default: '',
+		},
 
-    noFixed: {
-      type: Boolean,
-      default: false,
-    },
-    topRadius: {
-      type: Number,
-      default: 0,
-    },
-    collectIcon: {
-      type: Boolean,
-      default: true,
-    },
-    serviceIcon: {
-      type: Boolean,
-      default: true,
-    },
-    shareIcon: {
-      type: Boolean,
-      default: true,
-    },
-  });
+		noFixed: {
+			type: Boolean,
+			default: false,
+		},
+		topRadius: {
+			type: Number,
+			default: 0,
+		},
+		collectIcon: {
+			type: Boolean,
+			default: true,
+		},
+		serviceIcon: {
+			type: Boolean,
+			default: true,
+		},
+		shareIcon: {
+			type: Boolean,
+			default: true,
+		},
+	});
 
-  async function onFavorite() {
-    // 情况一:取消收藏
-    if (props.modelValue.favorite) {
-      const { code } = await FavoriteApi.deleteFavorite(props.modelValue.id);
-      if (code !== 0) {
-        return
-      }
-      sheep.$helper.toast('取消收藏');
-      props.modelValue.favorite = false;
-    // 情况二:添加收藏
-    } else {
-      const { code } = await FavoriteApi.createFavorite(props.modelValue.id);
-      if (code !== 0) {
-        return
-      }
-      sheep.$helper.toast('收藏成功');
-      props.modelValue.favorite = true;
-    }
-  }
+	async function onFavorite() {
+		// 情况一:取消收藏
+		if (props.modelValue.favorite) {
+			const {
+				code
+			} = await FavoriteApi.deleteFavorite(props.modelValue.id);
+			if (code !== 0) {
+				return
+			}
+			sheep.$helper.toast('取消收藏');
+			props.modelValue.favorite = false;
+			// 情况二:添加收藏
+		} else {
+			const {
+				code
+			} = await FavoriteApi.createFavorite(props.modelValue.id);
+			if (code !== 0) {
+				return
+			}
+			sheep.$helper.toast('收藏成功');
+			props.modelValue.favorite = true;
+		}
+	}
 
-  const onChat = () => {
-    sheep.$router.go('/pages/chat/index', {
-      id: props.modelValue.id,
-    });
-  };
+	const onChat = () => {
+		sheep.$router.go('/pages/chat/index', {
+			id: props.modelValue.id,
+		});
+	};
+	const onIndex = () => {
+		sheep.$router.go('/pages/index/index');
+	}
 </script>
 
 <style lang="scss" scoped>
-  .ui-tabbar-box {
-    box-shadow: 0px -6px 10px 0px rgba(51, 51, 51, 0.2);
-  }
-  .ui-tabbar {
-    display: flex;
-    height: 50px;
-    background: #fff;
+	.ui-tabbar-box {
+		box-shadow: 0px -6px 10px 0px rgba(51, 51, 51, 0.2);
+	}
 
-    .detail-tabbar-item {
-      width: 100rpx;
+	.ui-tabbar {
+		display: flex;
+		height: 50px;
+		background: #fff;
 
-      .item-icon {
-        width: 40rpx;
-        height: 40rpx;
-      }
+		.detail-tabbar-item {
+			width: 100rpx;
 
-      .item-title {
-        font-size: 20rpx;
-        font-weight: 500;
-        line-height: 20rpx;
-        margin-top: 12rpx;
-      }
-    }
-  }
-</style>
+			.item-icon {
+				width: 40rpx;
+				height: 40rpx;
+			}
+
+			.item-title {
+				font-size: 20rpx;
+				font-weight: 500;
+				line-height: 20rpx;
+				margin-top: 12rpx;
+			}
+		}
+	}
+</style>

+ 3 - 3
pages/goods/index.vue

@@ -2,7 +2,7 @@
 	<view>
 		<s-layout :onShareAppMessage="shareInfo" navbar="goods">
 			<!-- 标题栏 -->
-			<detailNavbar />
+			<detailNavbar v-model="state.goodsInfo"/>
 
 			<!-- 骨架屏 -->
 			<detailSkeleton v-if="state.skeletonLoading" />
@@ -362,7 +362,7 @@
 	// 购买
 	.buy-box {
 		.add-btn {
-			width: 214rpx;
+			width: 180rpx;
 			height: 72rpx;
 			font-weight: 500;
 			font-size: 28rpx;
@@ -372,7 +372,7 @@
 		}
 
 		.buy-btn {
-			width: 214rpx;
+			width: 180rpx;
 			height: 72rpx;
 			font-weight: 500;
 			font-size: 28rpx;

+ 33 - 19
pages/index/cart.vue

@@ -19,25 +19,33 @@
 					</button>
 				</view>
 			</view>
-			
+
 			<!-- 内容 -->
 			<view class="cart-content ss-flex-1 ss-p-x-30 ss-m-b-40">
-				<view class="goods-box ss-r-10 ss-m-b-14" v-for="item in state.list" :key="item.id">
-					
-					<view class="ss-flex ss-col-center">
-						<label class="check-box ss-flex ss-col-center ss-p-l-10" @tap="onSelectSingle(item.id)">
-							<radio :checked="state.selectedIds.includes(item.id)" color="var(--ui-BG-Main)"
-								style="transform: scale(0.8)" @tap.stop="onSelectSingle(item.id)" />
+				<view class="ss-m-b-14 bg-white goods-box">
+					<view class="title-text ss-p-x-10 ss-p-t-20 ss-flex ss-col-center">
+						<label class="check-box ss-flex ss-col-center" @tap="onSelectSingle()">
+							<radio color="var(--ui-BG-Main)"
+								style="transform: scale(0.8)"  />
 						</label>
-						
-						<s-goods-item :title="item.spu.name" :img="item.spu.picUrl || item.goods.image"
-							:price="item.sku.price"
-							:skuText="item.sku.properties.length>1? item.sku.properties.reduce((items2,items)=>items2.valueName+' '+items.valueName):item.sku.properties[0].valueName" priceColor="#FF3000" :titleWidth="400">
-							<template v-if="!state.editMode" v-slot:tool>
-								<su-number-box :min="0" :max="item.sku.stock" :step="1" v-model="item.count"
-									@change="onNumberChange($event, item)"></su-number-box>
-							</template>
-						</s-goods-item>
+						<text>中星旗舰店</text>
+					</view>
+					<view class="ss-r-10 " v-for="item in state.list" :key="item.id">
+						<view class="ss-flex ss-col-center">
+							<label class="check-box ss-flex ss-col-center ss-p-l-10" @tap="onSelectSingle(item.id)">
+								<radio :checked="state.selectedIds.includes(item.id)" color="var(--ui-BG-Main)"
+									style="transform: scale(0.8)" @tap.stop="onSelectSingle(item.id)" />
+							</label>
+							<s-goods-item :title="item.spu.name" :img="item.spu.picUrl || item.goods.image"
+								:price="item.sku.price"
+								:skuText="item.sku.properties.length>1? item.sku.properties.reduce((items2,items)=>items2.valueName+' '+items.valueName):item.sku.properties[0].valueName"
+								priceColor="#FF3000" :titleWidth="400">
+								<template v-if="!state.editMode" v-slot:tool>
+									<su-number-box :min="0" :max="item.sku.stock" :step="1" v-model="item.count"
+										@change="onNumberChange($event, item)"></su-number-box>
+								</template>
+							</s-goods-item>
+						</view>
 					</view>
 				</view>
 			</view>
@@ -79,7 +87,9 @@
 		reactive,
 		unref
 	} from 'vue';
-	import { fen2yuan } from '@/sheep/hooks/useGoods';
+	import {
+		fen2yuan
+	} from '@/sheep/hooks/useGoods';
 	const sys_navBar = sheep.$platform.navbar;
 	const cart = sheep.$store('cart');
 
@@ -162,7 +172,11 @@
 	:deep(.ui-fixed) {
 		height: 72rpx;
 	}
-
+	.title-text {
+		font-size: 30rpx;
+		font-weight: bold;
+		line-height: 42rpx;
+	}
 	.cart-box {
 		width: 100%;
 
@@ -195,7 +209,7 @@
 			margin-top: 70rpx;
 
 			.goods-box {
-				background-color: #fff;
+				border-radius: 20rpx;
 			}
 		}
 	}

+ 83 - 22
pages/order/confirm.vue

@@ -8,9 +8,14 @@
         </view>
       </s-address-item>
     </view>
-
     <!-- 商品信息 -->
     <view class="order-card-box ss-m-b-14">
+
+		<view class="title-text ss-p-x-20 ss-p-t-20">
+			{{state.orderInfo.shopNameMap[1]}}
+		</view>
+
+	  
       <s-goods-item
         v-for="item in state.orderInfo.items"
         :key="item.skuId"
@@ -19,8 +24,29 @@
         :skuText="item.properties.map((property) => property.valueName).join(' ')"
         :price="item.price"
         :num="item.count"
-        marginBottom="10"
       />
+	  <view class="order-item ss-flex ss-col-center ss-row-between ss-p-x-20 bg-white ss-r-10">
+	    <view class="item-title">运费</view>
+	    <view class="ss-flex ss-col-center">
+			包邮
+	    </view>
+	  </view>
+	  <view class="order-item ss-flex ss-col-center ss-row-between ss-p-x-20 bg-white ss-r-10">
+	    <view class="item-title">开具发票</view>
+	    <view class="ss-flex ss-col-center">
+	  		
+			<text
+			  class="item-value"
+			  :class="state.couponInfo.length > 0 ? 'text-red' : 'text-disabled'"
+			>
+			  {{
+			    state.couponInfo.length > 0 ? state.couponInfo.length + ' 张可用' : '不开具发票'
+			  }}
+			</text>
+			<text class="_icon-forward item-icon" />
+	    </view>
+		
+	  </view>
       <view class="order-item ss-flex ss-col-center ss-row-between ss-p-x-20 bg-white ss-r-10">
         <view class="item-title">订单备注</view>
         <view class="ss-flex ss-col-center">
@@ -33,13 +59,17 @@
           />
         </view>
       </view>
+	  
     </view>
 
     <!-- 价格信息 -->
     <view class="bg-white total-card-box ss-p-20 ss-m-b-14 ss-r-10">
+		<view class="title-text">
+			价格明细
+		</view>
       <view class="total-box-content border-bottom">
         <view class="order-item ss-flex ss-col-center ss-row-between">
-          <view class="item-title">商品金额</view>
+          <view class="item-title">商品总价 共{{state.orderInfo.items.length}}件商品</view>
           <view class="ss-flex ss-col-center">
             <text class="item-value ss-m-r-24">
               ¥{{ fen2yuan(state.orderInfo.price.totalPrice) }}
@@ -47,7 +77,7 @@
           </view>
         </view>
         <!-- TODO 芋艿:接入积分 -->
-        <view
+        <!-- <view
           class="order-item ss-flex ss-col-center ss-row-between"
           v-if="state.orderPayload.order_type === 'score'"
         >
@@ -59,15 +89,36 @@
             />
             <text class="item-value ss-m-r-24">{{ state.orderInfo.score_amount }}</text>
           </view>
-        </view>
+        </view> -->
         <view class="order-item ss-flex ss-col-center ss-row-between">
           <view class="item-title">运费</view>
           <view class="ss-flex ss-col-center">
             <text class="item-value ss-m-r-24">
-              +¥{{ fen2yuan(state.orderInfo.price.deliveryPrice) }}
+              ¥{{ fen2yuan(state.orderInfo.price.deliveryPrice) }}
             </text>
           </view>
         </view>
+		<view
+		  class="order-item ss-flex ss-col-center ss-row-between"
+		  v-if="state.orderInfo.type === 0"
+		>
+		  <view class="item-title">积分抵扣</view>
+		  <view class="ss-flex ss-col-center" @tap="state.showPoints = true">
+		    <!-- <text class="item-value text-red">
+		      -¥123 
+		    </text> -->
+		    <text
+		      class="item-value"
+		      :class="state.couponInfo.length > 0 ? 'text-red' : 'text-disabled'"
+		    >
+		      {{
+		        state.couponInfo.length > 0 ? state.couponInfo.length + ' 张可用' : '不使用积分'
+		      }}
+		    </text>
+		    <text class="_icon-forward item-icon" />
+		  </view>
+		</view>
+		
         <!-- 优惠劵:只有 type = 0 普通订单(非拼团、秒杀、砍价),才可以使用优惠劵 -->
 		<!-- 暂时隐藏优惠卷 -->
         <!-- <view
@@ -91,19 +142,19 @@
             <text class="_icon-forward item-icon" />
           </view>
         </view> -->
-        <view
+        <!-- <view
           class="order-item ss-flex ss-col-center ss-row-between"
           v-if="state.orderInfo.price.discountPrice > 0"
         >
           <view class="item-title">活动优惠</view>
           <view class="ss-flex ss-col-center">
-            <!--                @tap="state.showDiscount = true" TODO 芋艿:后续要把优惠信息打进去 -->
+                           @tap="state.showDiscount = true" TODO 芋艿:后续要把优惠信息打进去 
             <text class="item-value text-red">
               -¥{{ fen2yuan(state.orderInfo.price.discountPrice) }}
             </text>
             <text class="_icon-forward item-icon" />
           </view>
-        </view>
+        </view> -->
       </view>
       <view class="total-box-footer ss-font-28 ss-flex ss-row-right ss-col-center ss-m-r-28">
         <view class="total-num ss-m-r-20">
@@ -115,19 +166,19 @@
     </view>
 
     <!-- 选择优惠券弹框 -->
-    <s-coupon-select
+    <s-points-pop
       v-model="state.couponInfo"
-      :show="state.showCoupon"
-      @confirm="onSelectCoupon"
-      @close="state.showCoupon = false"
+      :show="state.showPoints"
+      @confirm="onInputPoints"
+      @close="state.showPoints = false"
     />
 
     <!-- 满额折扣弹框 TODO 芋艿:后续要把优惠信息打进去 -->
-    <s-discount-list
+    <!-- <s-discount-list
       v-model="state.orderInfo"
       :show="state.showDiscount"
       @close="state.showDiscount = false"
-    />
+    /> -->
 
     <!-- 底部 -->
     <su-fixed bottom :opacity="false" bg="bg-white" placeholder :noFixed="false" :index="200">
@@ -164,7 +215,7 @@
       price: {}, // 价格信息
     },
     addressInfo: {}, // 选择的收货地址
-    showCoupon: false, // 是否展示优惠劵
+    showPoints: false, // 是否积分抵扣
     couponInfo: [], // 优惠劵列表
     showDiscount: false, // 是否展示营销活动
   });
@@ -186,10 +237,11 @@
   }
 
   // 选择优惠券
-  async function onSelectCoupon(couponId) {
-    state.orderPayload.couponId = couponId || 0;
-    await getOrderInfo();
-    state.showCoupon = false;
+  async function onInputPoints(points) {
+	  console.log(points)
+    // state.orderPayload.couponId = couponId || 0;
+    // await getOrderInfo();
+    state.showPoints = false;
   }
 
   // 提交订单
@@ -269,7 +321,7 @@
     }
     state.orderPayload = JSON.parse(options.data);
     await getOrderInfo();
-    await getCoupons();
+    // await getCoupons();
   });
 </script>
 
@@ -300,7 +352,16 @@
       justify-content: right !important;
     }
   }
-
+  .order-card-box,.address-box,.total-card-box{
+	  background: white;
+	  margin: 20rpx;
+	  border-radius: 20rpx;
+  }
+	.title-text {
+		font-size: 30rpx;
+		font-weight: bold;
+		line-height: 42rpx;
+	}
   .score-img {
     width: 36rpx;
     height: 36rpx;

+ 2 - 1
pages/order/detail.vue

@@ -71,7 +71,7 @@
       <view class="order-list" v-for="item in state.orderInfo.items" :key="item.goods_id">
         <view class="order-card">
           <s-goods-item
-            @tap="onGoodsDetail(item.skuId)"
+            @tap="onGoodsDetail(item.spuId)"
             :img="item.picUrl"
             :title="item.spuName"
             :skuText="item.properties.map((property) => property.valueName).join(' ')"
@@ -277,6 +277,7 @@
 
   // 查看商品
   function onGoodsDetail(id) {
+	  // console.log(id)
     sheep.$router.go('/pages/goods/index', {
       id,
     });

+ 6 - 5
pages/order/list.vue

@@ -70,7 +70,7 @@
 		<!-- 加载更多 -->
 		<uni-load-more v-if="state.pagination.total > 0" :status="state.loadStatus" :content-text="{
         contentdown: '上拉加载更多',
-      }" @tap="loadMore" />
+      }" @tap="onReachBottom" />
 	</s-layout>
 </template>
 
@@ -302,9 +302,7 @@
 		}
 		
 		data.list.forEach(order => handleOrderButtons(order));
-		// state.pagination.list = _.concat(state.pagination.list, data.list)
 		state.pagination.list = (data.list)
-		// console.log("未经过处理前:",state.pagination.list)
 		state.pagination.total = data.total;
 		state.loadStatus = state.pagination.list.length < state.pagination.total ? 'more' : 'noMore';
 	}
@@ -316,12 +314,12 @@
 		await getOrderList();
 	});
 	onShow(async () => {
-		console.log("有没有刷新")
 		await getOrderList();
 	});
 	// 加载更多
 	function loadMore() {
 		if (state.loadStatus === 'noMore') {
+			console.log("noMoreasdf")
 			return
 		}
 		state.pagination.pageNo++;
@@ -330,12 +328,15 @@
 
 	// 上拉加载更多
 	onReachBottom(() => {
+		console.log('上拉')
 		loadMore();
+
 	});
 
 	// 下拉刷新
 	onPullDownRefresh(() => {
-		state.pagination = paginationNull;
+		state.pagination = JSON.parse(JSON.stringify(paginationNull) );
+		console.log(state.pagination)
 		getOrderList();
 		setTimeout(function() {
 			uni.stopPullDownRefresh();

+ 1 - 1
pages/user/goods-collect.vue

@@ -27,7 +27,7 @@
       <!-- 内容 -->
       <view class="cart-content">
         <view
-          class="goods-box ss-r-10 ss-m-b-14"
+          class="goods-box ss-r-10 "
           v-for="item in state.pagination.list"
           :key="item.id"
         >

+ 2 - 2
pages/user/info.vue

@@ -113,7 +113,7 @@
         </uni-forms-item>
       </view>
 
-      <view class="bg-white ss-m-t-14">
+      <!-- <view class="bg-white ss-m-t-14">
         <uni-list>
           <uni-list-item
             clickable
@@ -124,7 +124,7 @@
             class="list-border"
           />
         </uni-list>
-      </view>
+      </view> -->
     </uni-forms>
 
     <!-- 当前社交平台的绑定关系,只处理 wechat 微信场景 -->

+ 354 - 0
pages/user/invoice/edit.vue

@@ -0,0 +1,354 @@
+<!-- 收货地址的新增/编辑 -->
+<template>
+	<!-- {{ru}} -->
+	<s-layout :title="state.model.id ? '编辑发票抬头' : '新增发票抬头'">
+		<uni-forms ref="invoiceFormRef" v-model="state.model" :rules="rules" validateTrigger="bind" labelWidth="160"
+			labelAlign="left" border :labelStyle="{ fontWeight: 'bold' }">
+			<view class="bg-white form-box ss-p-x-30">
+				<uni-forms-item name="invoiceType" label="发票类型">
+					<radio-group @change="invoiceType">
+						<radio value="1" :checked="state.model.invoiceType == 1" color="var(--ui-BG-Main)"
+							class="radio ss-m-r-30" style="transform: scale(0.9)">纸质普票
+						</radio>
+						<radio value="2" :checked="state.model.invoiceType == 2" color="var(--ui-BG-Main)" class="radio"
+							style="transform: scale(0.9)">专用发票</radio>
+					</radio-group>
+				</uni-forms-item>
+				<!-- 当为专用发票时,不用选择抬头类型 -->
+				<uni-forms-item name="invoiceTitleType" label="抬头类型" class="form-item" v-if="state.model.invoiceType == 1">
+					<radio-group class="uni-flex uni-row radio-group" @change="invoiceTitleType">
+						<radio value="1" :checked="state.model.invoiceTitleType == 1" color="var(--ui-BG-Main)"
+							class="radio ss-m-r-30" style="transform: scale(0.9)">个人
+						</radio>
+						<radio value="2" :checked="state.model.invoiceTitleType == 2" color="var(--ui-BG-Main)"
+							style="transform: scale(0.9)" class="radio">单位</radio>
+					</radio-group>
+				</uni-forms-item>
+				<uni-forms-item name="invoiceTitle" label="发票抬头" class="form-item">
+					<uni-easyinput v-model="state.model.invoiceTitle" placeholder="请输入发票抬头"
+						:inputBorder="false"
+						placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal">
+					</uni-easyinput>
+				</uni-forms-item>
+				<template v-if="state.model.invoiceTitleType == 2">
+					<uni-forms-item name="taxIDNumber" label="单位税号" class="form-item">
+						<uni-easyinput v-model="state.model.taxIDNumber" type="number" placeholder="请输入单位税号"
+							:inputBorder="false"
+							placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal">
+						</uni-easyinput>
+					</uni-forms-item>
+					<uni-forms-item name="invoiceTitle" label="注册地址" class="form-item">
+						<uni-easyinput v-model="state.model.invoiceTitle" type="number" placeholder="选填"
+							:inputBorder="false"
+							placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal">
+						</uni-easyinput>
+					</uni-forms-item>
+					<uni-forms-item name="invoiceTitle" label="注册电话" class="form-item">
+						<uni-easyinput v-model="state.model.invoiceTitle" type="number" placeholder="选填"
+							:inputBorder="false"
+							placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal">
+						</uni-easyinput>
+					</uni-forms-item>
+					<uni-forms-item name="invoiceTitle" label="开户银行" class="form-item">
+						<uni-easyinput v-model="state.model.invoiceTitle" type="number" placeholder="选填"
+							:inputBorder="false"
+							placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal">
+						</uni-easyinput>
+					</uni-forms-item>
+					<uni-forms-item name="invoiceTitle" label="银行账号" class="form-item">
+						<uni-easyinput v-model="state.model.invoiceTitle" type="number" placeholder="选填"
+							:inputBorder="false"
+							placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal">
+						</uni-easyinput>
+					</uni-forms-item>
+				</template>
+				<template v-if="state.model.invoiceType == 2">
+					<uni-forms-item name="taxIDNumber" label="单位税号" class="form-item">
+						<uni-easyinput v-model="state.model.taxIDNumber" type="number" placeholder="请输入单位税号"
+							:inputBorder="false"
+							placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal">
+						</uni-easyinput>
+					</uni-forms-item>
+					<uni-forms-item name="invoiceTitle" label="注册地址" class="form-item">
+						<uni-easyinput v-model="state.model.invoiceTitle" type="number" placeholder="必填"
+							:inputBorder="false"
+							placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal">
+						</uni-easyinput>
+					</uni-forms-item>
+					<uni-forms-item name="invoiceTitle" label="注册电话" class="form-item">
+						<uni-easyinput v-model="state.model.invoiceTitle" type="number" placeholder="必填"
+							:inputBorder="false"
+							placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal">
+						</uni-easyinput>
+					</uni-forms-item>
+					<uni-forms-item name="invoiceTitle" label="开户银行" class="form-item">
+						<uni-easyinput v-model="state.model.invoiceTitle" type="number" placeholder="必填"
+							:inputBorder="false"
+							placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal">
+						</uni-easyinput>
+					</uni-forms-item>
+					<uni-forms-item name="invoiceTitle" label="银行账号" class="form-item">
+						<uni-easyinput v-model="state.model.invoiceTitle" type="number" placeholder="必填"
+							:inputBorder="false"
+							placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal">
+						</uni-easyinput>
+					</uni-forms-item>
+				</template>
+			</view>
+			<view class="ss-m-y-20 bg-white ss-p-x-30 ss-flex ss-row-between ss-col-center default-box" v-if="state.model.invoiceType == 2">
+				<view class="default-box-title" :class="{ shake: currentProtocol }"> 
+					<label class="radio ss-flex ss-col-center" @tap="onChange">
+						<radio :checked="state.protocol" color="var(--ui-BG-Main)" style="transform: scale(0.8)"
+							@tap.stop="onChange" />
+						<view class="agreement-text ss-flex ss-col-center ss-m-l-8">
+							我已阅读并同意
+							<view class="tcp-text" @tap.stop="onProtocol('专用发票抬头确认书')">
+								《专用发票抬头确认书》
+							</view>
+						</view>
+					</label>
+				</view>
+			</view>
+		</uni-forms>
+		<su-fixed bottom :opacity="false" bg="" placeholder :noFixed="false" :index="10">
+			<view class="footer-box ss-flex-col ss-row-between ss-p-20">
+				<view class="ss-m-b-20">
+					<button class="ss-reset-button save-btn ui-Shadow-Main" @tap="onSave">保存</button>
+				</view>
+				<button v-if="state.model.id" class="ss-reset-button cancel-btn" @tap="onDelete">
+					删除
+				</button>
+			</view>
+		</su-fixed>
+
+	</s-layout>
+</template>
+
+<script setup>
+	import {
+		ref,
+		reactive,
+		unref
+	} from 'vue';
+	import sheep from '@/sheep';
+	import {
+		onLoad
+	} from '@dcloudio/uni-app';
+	import _ from 'lodash';
+	import {
+		mobile
+	} from '@/sheep/validate/form';
+	import AreaApi from '@/sheep/api/system/area';
+	import AddressApi from '@/sheep/api/member/address';
+	import $helper from '@/sheep/helper';
+	const invoiceFormRef = ref(null);
+	const currentProtocol = ref(false)
+	const state = reactive({
+		showRegion: false,
+		model: {
+			invoiceType: 1,
+			invoiceTitleType: 1,
+			invoiceTitle: '',
+			taxIDNumber: ''
+		},
+		rules: {},
+		protocol: false,
+	});
+	// 勾选协议
+	function onChange() {
+		state.protocol = !state.protocol;
+	}
+	// 查看协议
+	function onProtocol(title) {
+		sheep.$router.go('/pages/public/richtext', {
+			title,
+		});
+	}
+	const rules = {
+		invoiceType: {
+			rules: [{
+				required: true,
+				errorMessage: '请选择发票类型'
+			}]
+		},
+		invoiceTitleType: {
+			rules: [{
+				required: true,
+				errorMessage: '请选择抬头类型'
+			}]
+		},
+		invoiceTitle: {
+			rules: [{
+				required: true,
+				errorMessage: '请输入发票抬头'
+			}]
+		},
+		taxIDNumber: {
+			rules: [{
+				required: true,
+				errorMessage: '请输入单位税号'
+			}]
+		},
+	};
+	const invoiceType = (e) => {
+		state.model.invoiceType = e.detail.value
+		state.model.invoiceTitleType = 1
+	}
+	const invoiceTitleType = (e) => {
+		state.model.invoiceTitleType = e.detail.value
+	}
+	// 保存收货地址
+	const onSave = async () => {
+		
+		// 参数校验
+		const validate = await unref(invoiceFormRef)
+			.validate()
+			.catch((error) => {
+				console.log('error: ', error);
+			});
+		if (!validate) {
+			return;
+		}
+		if(!state.protocol){
+			currentProtocol.value = true
+			setTimeout(function(){
+				currentProtocol.value = false
+			},500)
+			return
+		}
+		// 提交请求
+		const formData = {
+			...state.model
+		}
+		const {
+			code
+		} = state.model.id > 0 ? await AddressApi.updateAddress(formData) :
+			await AddressApi.createAddress(formData);
+		if (code === 0) {
+			sheep.$router.back();
+		}
+	};
+
+	// 删除收货地址
+	const onDelete = () => {
+		uni.showModal({
+			title: '提示',
+			content: '确认删除此收货地址吗?',
+			success: async function(res) {
+				if (!res.confirm) {
+					return;
+				}
+				const {
+					code
+				} = await AddressApi.deleteAddress(state.model.id);
+				if (code === 0) {
+					sheep.$router.back();
+				}
+			},
+		});
+	};
+
+	onLoad(async (options) => {
+
+
+
+		// // 情况一:基于 id 获得收件地址
+		// if (options.id) {
+		// 	let {
+		// 		code,
+		// 		data
+		// 	} = await AddressApi.getAddress(options.id);
+		// 	if (code !== 0) {
+		// 		return;
+		// 	}
+		// 	// console.log(data)
+		// 	state.model = data;
+		// }
+
+	});
+</script>
+
+<style lang="scss" scoped>
+	.shake {
+		animation: shake 0.05s linear 4 alternate;
+	}
+	
+	@keyframes shake {
+		from {
+			transform: translateX(-10rpx);
+		}
+	
+		to {
+			transform: translateX(10rpx);
+		}
+	}
+	:deep() {
+		.uni-forms-item__label .label-text {
+			font-size: 28rpx !important;
+			color: #333333 !important;
+			line-height: normal !important;
+		}
+
+		.uni-forms-item__content {
+			display: flex;
+			align-items: center;
+		}
+
+		.uni-easyinput__content-input {
+			font-size: 28rpx !important;
+			color: #333333 !important;
+			line-height: normal !important;
+			padding-left: 0 !important;
+		}
+
+		.uni-easyinput__content-textarea {
+			font-size: 28rpx !important;
+			color: #333333 !important;
+			line-height: normal !important;
+			margin-top: 8rpx !important;
+		}
+
+		.uni-icons {
+			font-size: 40rpx !important;
+		}
+
+		.is-textarea-icon {
+			margin-top: 22rpx;
+		}
+
+		.is-disabled {
+			color: #333333;
+		}
+	}
+
+	.default-box {
+		width: 100%;
+		box-sizing: border-box;
+		height: 100rpx;
+
+		.default-box-title {
+			font-size: 28rpx;
+			color: #333333;
+			line-height: normal;
+		}
+	}
+.tcp-text {
+		color: var(--ui-BG-Main);
+	}
+	.footer-box {
+		.save-btn {
+			width: 710rpx;
+			height: 80rpx;
+			border-radius: 40rpx;
+			background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
+			color: $white;
+		}
+
+		.cancel-btn {
+			width: 710rpx;
+			height: 80rpx;
+			border-radius: 40rpx;
+			background: var(--ui-BG);
+		}
+	}
+</style>

+ 152 - 0
pages/user/invoice/list.vue

@@ -0,0 +1,152 @@
+<!-- 发票管理 -->
+<template>
+	<s-layout title="发票抬头管理" :bgStyle="{ color: '#FFF' }">
+		<view v-if="state.list.length">
+			<s-address-item hasBorderBottom v-for="item in state.list" :key="item.id" :item="item"
+				@tap="onSelect(item)" />
+		</view>
+
+		<su-fixed bottom placeholder>
+			<view class="footer-box ss-flex ss-row-between ss-p-20">
+				<!-- 微信小程序和微信H5 -->
+				<!-- <button v-if="['WechatMiniProgram', 'WechatOfficialAccount'].includes(sheep.$platform.name)"
+					@tap="importWechatAddress"
+					class="border ss-reset-button sync-wxaddress ss-m-20 ss-flex ss-row-center ss-col-center">
+					<text class="cicon-weixin ss-p-r-10" style="color: #09bb07; font-size: 40rpx"></text>
+					导入微信地址
+				</button> -->
+				<button class="add-btn ss-reset-button ui-Shadow-Main"
+					@tap="sheep.$router.go('/pages/user/invoice/edit')">
+					新增发票抬头
+				</button>
+			</view>
+		</su-fixed>
+		<s-empty v-if="state.list.length === 0 && !state.loading" text="暂无发票抬头" icon="/static/data-empty.png" />
+	</s-layout>
+</template>
+
+<script setup>
+	import {
+		reactive,
+		onBeforeMount
+	} from 'vue';
+	import {
+		onShow
+	} from '@dcloudio/uni-app';
+	import sheep from '@/sheep';
+	import {
+		isEmpty
+	} from 'lodash';
+	import AreaApi from '@/sheep/api/system/area';
+	import AddressApi from '@/sheep/api/member/address';
+	import $helper from '@/sheep/helper';
+	const state = reactive({
+		list: [], // 地址列表
+		loading: true,
+	});
+
+	// 选择收货地址
+	const onSelect = (addressInfo) => {
+		uni.$emit('SELECT_ADDRESS', {
+			addressInfo,
+		});
+		sheep.$router.back();
+	};
+
+	// 导入微信地址
+	// TODO 芋艿:未测试
+	function importWechatAddress() {
+		let wechatAddress = {};
+		// #ifdef MP
+		uni.chooseAddress({
+			success: (res) => {
+				wechatAddress = {
+					consignee: res.userName,
+					mobile: res.telNumber,
+					province_name: res.provinceName,
+					city_name: res.cityName,
+					district_name: res.countyName,
+					address: res.detailInfo,
+					region: '',
+					is_default: false,
+				};
+				if (!isEmpty(wechatAddress)) {
+					sheep.$router.go('/pages/user/address/edit', {
+						data: JSON.stringify(wechatAddress),
+					});
+				}
+			},
+			fail: (err) => {
+				console.log("uni.chooseAddress调用失败,问题是:", err);
+			},
+		});
+		// #endif
+		// #ifdef H5
+		sheep.$platform.useProvider('wechat').jssdk.openAddress({
+			success: (res) => {
+				wechatAddress = {
+					consignee: res.userName,
+					mobile: res.telNumber,
+					province_name: res.provinceName,
+					city_name: res.cityName,
+					district_name: res.countryName,
+					address: res.detailInfo,
+					region: '',
+					is_default: false,
+				};
+				if (!isEmpty(wechatAddress)) {
+					sheep.$router.go('/pages/user/address/edit', {
+						data: JSON.stringify(wechatAddress),
+					});
+				}
+			},
+		});
+		// #endif
+
+
+	}
+
+	onShow(async () => {
+		state.list = (await AddressApi.getAddressList()).data;
+		state.loading = false;
+	});
+
+	onBeforeMount(() => {
+		if (!!uni.getStorageSync('areaData')) {
+			return;
+		}
+		// 提前加载省市区数据
+		AreaApi.getAreaTree().then((res) => {
+			if (res.code === 0) {
+				uni.setStorageSync('areaData', res.data);
+			}
+		});
+	});
+</script>
+
+<style lang="scss" scoped>
+	.footer-box {
+		.add-btn {
+			flex: 1;
+			background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
+			border-radius: 80rpx;
+			font-size: 30rpx;
+			font-weight: 500;
+			line-height: 80rpx;
+			color: $white;
+			position: relative;
+			z-index: 1;
+		}
+
+		.sync-wxaddress {
+			flex: 1;
+			line-height: 80rpx;
+			background: $white;
+			border-radius: 80rpx;
+			font-size: 30rpx;
+			font-weight: 500;
+			color: $dark-6;
+			margin-right: 18rpx;
+		}
+	}
+</style>

+ 114 - 0
pages/user/qrcode-share.vue

@@ -0,0 +1,114 @@
+<template>
+	<s-layout title="我的二维码/分享页" class="set-userinfo-wrap">
+		<view class="ss-flex-col ss-col-center ss-row-center">
+		<view v-if="poster.src === ''" class="poster-title ss-flex ss-row-center" :style="{
+		  height: poster.height + 'px',
+		  width: poster.width + 'px',
+		}">
+				海报加载中...
+			</view>
+		<image v-else class="poster-img ss-m-20" :src="poster.src" :style="{
+		  height: poster.height + 'px',
+		  width: poster.width + 'px',
+		}" :show-menu-by-longpress="true" />
+		<canvas class="hideCanvas" :canvas-id="poster.canvasId" :id="poster.canvasId" :style="{
+		  height: poster.height + 'px',
+		  width: poster.width + 'px',
+		}" />
+
+		</view>
+		<view class="modal-footer ss-flex ss-p-x-20">
+			<button class="confirm-btn" @tap="onSavePoster">{{
+		    ['wechatOfficialAccount', 'H5'].includes(sheep.$platform.name)
+		      ? '长按图片保存'
+		      : '保存图片'
+		  }}</button>
+			<button class="confirm-btn" @tap="showShareModal">分享</button>
+		</view>
+	</s-layout>
+</template>
+
+<script setup>
+	import {
+		computed,
+		reactive,
+		onBeforeMount,
+		getCurrentInstance
+	} from 'vue';
+	import sheep from '@/sheep';
+	import useCanvas from '@/sheep/components/s-share-modal/canvas-poster/useCanvas';
+
+	import {
+		showAuthModal,
+		showShareModal
+	} from '@/sheep/hooks/useModal';
+	const poster = reactive({
+		canvasId: 'canvasId',
+		width: sheep.$platform.device.windowWidth * 0.9,
+		height: 600,
+		src: '',
+	});
+	const vm = getCurrentInstance();
+	// 使用 canvas 生成海报
+	async function getPoster(params) {
+		poster.src = '';
+		poster.shareInfo = {
+			"title": "",
+			"desc": "",
+			"image": "",
+			"path": "",
+			"link": "https://zxgz.newfeifan.cn/",
+			// "query": "spm=undefined.1.0.1.1",
+			"poster": {
+				"type": "user"
+			}
+		};
+		// #ifdef APP-PLUS
+		poster.canvasId = 'canvasId-' + new Date().getTime();
+		// #endif
+		
+		const canvas = await useCanvas(poster, vm);
+		return canvas;
+	}
+	// 保存海报图片
+	const onSavePoster = () => {
+		if (['WechatOfficialAccount', 'H5'].includes(sheep.$platform.name)) {
+			sheep.$helper.toast('请长按图片保存');
+			return;
+		}
+		uni.saveImageToPhotosAlbum({
+			filePath: poster.src,
+			success: (res) => {
+				onClosePoster();
+				sheep.$helper.toast('保存成功');
+			},
+			fail: (err) => {
+				sheep.$helper.toast('保存失败');
+				console.log('图片保存失败:', err);
+			},
+		});
+	};
+	onBeforeMount(() => {
+		getPoster();
+	});
+</script>
+
+<style lang="scss" scoped>
+	.confirm-btn {
+		width: 710rpx;
+		margin-left: 20rpx;
+		height: 80rpx;
+		background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
+		border-radius: 40rpx;
+		color: #fff;
+	}
+	.confirm-btn:first-child{
+		margin-left: 0;
+	}
+	.hideCanvas {
+		position: fixed;
+		top: -99999rpx;
+		left: -99999rpx;
+		z-index: -99999;
+	}
+</style>

+ 320 - 0
pages/user/setting.vue

@@ -0,0 +1,320 @@
+<!-- 用户信息 -->
+<template>
+	<s-layout title="用户信息" class="set-userinfo-wrap">
+		<uni-forms :model="state.model" :rules="state.rules" labelPosition="left" border class="form-box">
+			<view class="bg-white">
+				<uni-list :border="false" class="ss-p-y-40">
+					<uni-list-chat clickable :avatar-circle="true" :title="state.model?.nickname"
+						:avatar="state.model?.avatar" note="个性签名" @tap="sheep.$router.go('/pages/user/info')">
+						<view class="chat-custom-right">
+							<text class="_icon-forward" style="color: #bbbbbb; font-size: 32rpx"></text>
+						</view>
+					</uni-list-chat>
+					<uni-list-item clickable @tap="sheep.$router.go('/pages/user/address/list')" title="收货地址管理"
+						showArrow :border="false" />
+					<uni-list-item clickable @tap="sheep.$router.go('/pages/user/invoice/list')" title="发票抬头管理"
+						showArrow :border="false" />
+					<uni-list-item :clickable="!userInfo.mobile" @tap="sheep.$router.go('/pages/user/address/list')"
+						title="实名认证" showArrow :border="false">
+						<template v-slot:body>
+							<p style="width: 100%;">实名认证&nbsp;&nbsp;&nbsp;&nbsp;{{userInfo.mobile?"已认证":"未认证"}}<span
+									style="float: right;">{{userInfo.mobile?"":"未认证"}}</span></p>
+						</template>
+					</uni-list-item>
+					<uni-list-item title="推荐老师" :border="false">
+						<template v-slot:body>
+							<p style="width: 100%;">推荐老师&nbsp;&nbsp;&nbsp;&nbsp;xxx</p>
+						</template>
+					</uni-list-item>
+					<uni-list-item title="我的二维码" clickable @tap="sheep.$router.go('/pages/user/qrcode-share')" :border="false">
+						<template v-slot:body>
+							<p style="width: 100%;display: flex;align-items: center;">
+								我的二维码&nbsp;&nbsp;&nbsp;&nbsp;<su-image class="content-img"
+									style="border:1px solid #f4f4f4" :current="0" :src="state.model?.avatar"
+									:height="160" :width="160" :radius="0" mode="scaleToFill" /></p>
+						</template>
+					</uni-list-item>
+				</uni-list>
+			</view>
+		</uni-forms>
+
+
+
+		<!-- <su-fixed bottom placeholder bg="none">
+			<view class="footer-box ss-p-20">
+				<button class="ss-rest-button logout-btn ui-Shadow-Main" @tap="onSubmit">保存</button>
+			</view>
+		</su-fixed> -->
+	</s-layout>
+</template>
+
+<script setup>
+	import {
+		computed,
+		reactive,
+		onBeforeMount
+	} from 'vue';
+	import sheep from '@/sheep';
+	import {
+		clone
+	} from 'lodash';
+	import {
+		showAuthModal,
+		showShareModal
+	} from '@/sheep/hooks/useModal';
+	import FileApi from '@/sheep/api/infra/file';
+	import UserApi from '@/sheep/api/member/user';
+
+	const state = reactive({
+		model: {}, // 个人信息
+		rules: {},
+		thirdInfo: {}, // 社交用户的信息
+	});
+
+	const placeholderStyle = 'color:#BBBBBB;font-size:28rpx;line-height:normal';
+
+
+
+	const userInfo = computed(() => sheep.$store('user').userInfo);
+
+
+
+
+
+
+
+
+
+	// 绑定第三方账号
+	async function bindThirdOauth() {
+		let result = await sheep.$platform.useProvider('wechat').bind();
+		if (result) {
+			await getUserInfo();
+		}
+	}
+
+	// 解绑第三方账号
+	function unBindThirdOauth() {
+		uni.showModal({
+			title: '解绑提醒',
+			content: '解绑后您将无法通过微信登录此账号',
+			cancelText: '再想想',
+			confirmText: '确定',
+			success: async function(res) {
+				if (!res.confirm) {
+					return;
+				}
+				const result = await sheep.$platform.useProvider('wechat').unbind(state.thirdInfo.openid);
+				if (result) {
+					await getUserInfo();
+				}
+			},
+		});
+	}
+
+	// 保存信息
+	async function onSubmit() {
+		const {
+			code
+		} = await UserApi.updateUser({
+			avatar: state.model.avatar,
+			nickname: state.model.nickname,
+			sex: state.model.sex,
+		});
+		if (code === 0) {
+			await getUserInfo();
+		}
+	}
+
+	// 获得用户信息
+	const getUserInfo = async () => {
+		// 个人信息
+		const userInfo = await sheep.$store('user').getInfo();
+		state.model = clone(userInfo);
+
+		// 获得社交用户的信息
+		if (sheep.$platform.name !== 'H5') {
+			const result = await sheep.$platform.useProvider('wechat').getInfo();
+			state.thirdInfo = result || {};
+		}
+	};
+
+	onBeforeMount(() => {
+		getUserInfo();
+	});
+</script>
+
+<style lang="scss" scoped>
+	:deep() {
+		.uni-file-picker {
+			border-radius: 50%;
+		}
+
+		.uni-list-chat__content-extra {
+			display: flex;
+			justify-content: center;
+		}
+
+		.uni-file-picker__container {
+			margin: -14rpx -12rpx;
+		}
+
+		.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;
+	}
+
+	.uni-list-item {
+		min-height: 100rpx;
+	}
+
+	.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;
+	}
+
+	.logout-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;
+	}
+
+	.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>

+ 1 - 0
sheep/components/s-goods-card/s-goods-card.vue

@@ -10,6 +10,7 @@
         :key="item.id"
         :style="[{ marginBottom: data.space * 2 + 'rpx' }]"
       >
+	  
         <s-goods-column
           class=""
           size="sl"

+ 2 - 0
sheep/components/s-goods-column/s-goods-column.vue

@@ -240,11 +240,13 @@
               <text class="price-unit ss-font-24">{{ priceUnit }}</text>
               {{ isArray(data.price) ? fen2yuan(data.price[0]) : fen2yuan(data.price) }}
             </view>
+			
             <view
               v-if="(goodsFields.original_price?.show||goodsFields.marketPrice?.show) &&( data.original_price > 0|| data.marketPrice > 0)"
               class="goods-origin-price ss-m-t-16 font-OPPOSANS ss-flex"
               :style="[{ color: originPriceColor }]"
             >
+			
               <text class="price-unit ss-font-20">{{ priceUnit }}</text>
               <view class="ss-m-l-8">{{ fen2yuan(data.marketPrice) }}</view>
             </view>

+ 1 - 1
sheep/components/s-layout/s-layout.vue

@@ -221,7 +221,7 @@
       min-height: 100%;
       display: flex;
       flex-direction: column;
-
+		background-color: var(--ui-BG-1) !important;
       .page-body {
         width: 100%;
         position: relative;

+ 130 - 0
sheep/components/s-points-pop/s-points-pop.vue

@@ -0,0 +1,130 @@
+<!-- 订单确认的使用积分弹窗 -->
+<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="state.points" class="uni-input input-points ss-m-b-10" type="number"
+				placeholder="请输入抵扣积分" />
+			<view class="subtitle">当前可用积分 {{state.pointsInfo}}</view>
+		</view>
+		<view class="modal-footer ss-flex">
+			<button class="confirm-btn ss-reset-button" @tap="emits('close')">取消</button>
+			<button class="confirm-btn ss-reset-button" @tap="onConfirm">确认</button>
+		</view>
+	</su-popup>
+</template>
+<script setup>
+	import {
+		computed,
+		reactive,
+		ref,
+		watch,
+		nextTick
+	} from 'vue';
+
+	const props = defineProps({
+		modelValue: { // 优惠劵列表
+			type: Object,
+			default () {},
+		},
+		show: {
+			type: Boolean,
+			default: false,
+		},
+	});
+	const emits = defineEmits(['confirm', 'close']);
+	const state = reactive({
+		pointsInfo: 1000, //computed(() => props.modelValue), 
+		points: undefined,
+	});
+
+
+	watch(() => state.points, (newValue) => {
+		if (newValue > state.pointsInfo) {
+			state.points = state.pointsInfo; // 强制更新为最大值
+			// 使用 nextTick 确保 DOM 更新
+			nextTick(() => {
+				state.points = state.pointsInfo;
+			});
+		}
+	});
+	// 确认
+	const onConfirm = () => {
+		if (!state.points) {
+			return false
+		}
+		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;
+		}
+	}
+
+	.title {
+		font-size: 36rpx;
+		height: 80rpx;
+		font-weight: bold;
+		color: #333333;
+	}
+
+	.subtitle {
+		// font-size: 26rpx;
+		font-weight: 500;
+		color: #333333;
+	}
+
+	.model-content {
+		height: 15vh;
+	}
+
+	.modal-footer {
+		width: 100%;
+		height: 120rpx;
+		//   background: #fff;
+	}
+
+	.confirm-btn {
+		width: 710rpx;
+		margin-left: 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>

+ 0 - 1
sheep/components/s-share-modal/canvas-poster/index.vue

@@ -68,7 +68,6 @@
 			sheep.$helper.toast('请长按图片保存');
 			return;
 		}
-
 		uni.saveImageToPhotosAlbum({
 			filePath: poster.src,
 			success: (res) => {

+ 5 - 6
sheep/components/s-share-modal/canvas-poster/useCanvas.js

@@ -11,7 +11,7 @@ import {
 } from './poster';
 
 export default async function useCanvas(options, vm) {
-
+	
 	const width = options.width;
 	const qsc = new QSCanvas({
 			canvasId: options.canvasId,
@@ -23,7 +23,7 @@ export default async function useCanvas(options, vm) {
 		},
 		vm,
 	);
-
+	
 	let drawer = getPosterData(options);
 
 	// 绘制背景图
@@ -38,7 +38,6 @@ export default async function useCanvas(options, vm) {
 		zIndex: 0,
 	});
 
-	console.log(background)
 	await qsc.updateCanvasWH({
 		width: background.width,
 		height: background.bottom,
@@ -48,9 +47,9 @@ export default async function useCanvas(options, vm) {
 
 	for (let i = 0; i < list.length; i++) {
 		let item = list[i];
+		// console.log(item)
 		// 绘制文字
 		if (item.type === 'text') {
-
 			await qsc.drawText(item);
 		}
 		// 绘制图片
@@ -74,11 +73,11 @@ export default async function useCanvas(options, vm) {
 					clip: true,
 				});
 			}
-			console.log(item)
+			// console.log(item)
 			try {
 				await qsc.drawImg(item);
 			} catch (error) {
-				console.log(error)
+				// console.log(error)
 			}
 
 			qsc.restore();

+ 1 - 1
sheep/components/s-share-modal/s-share-modal.vue

@@ -72,8 +72,8 @@
 			type: Object,
 			default () {},
 		},
+		
 	});
-
 	const state = reactive({
 		showShareGuide: false, // H5 的指引
 		showPosterModal: false, // 海报弹窗

+ 12 - 6
sheep/components/s-user-card/s-user-card.vue

@@ -16,9 +16,12 @@
 					</view>
 				</view>
 			</view>
-			<view class="right-box ss-m-r-52">
-				<button class="ss-reset-button" @tap="showShareModal">
-					<text class="sicon-qrcode"></text>
+			<view class="right-box ss-m-r-30">
+				<button class="ss-reset-button"  style="margin-right: 20rpx;">
+					<text class="cicon-service-o"></text>
+				</button>
+				<button class="ss-reset-button" @tap="sheep.$router.go('/pages/user/setting')">
+					<text class="cicon-settings-o"></text>
 				</button>
 			</view>
 		</view>
@@ -64,7 +67,7 @@
 
 	// 用户信息
 	const userInfo = computed(() => sheep.$store('user').userInfo);
-	console.log('用户信息', userInfo)
+	// console.log('用户信息', userInfo)
 
 	// 是否登录
 	const isLogin = computed(() => sheep.$store('user').isLogin);
@@ -81,7 +84,7 @@
 		},
 		nickname: {
 			type: String,
-			default: '请登录',
+			default: '请登录',
 		},
 		vip: {
 			type: [String, Number],
@@ -130,9 +133,12 @@
 			height: 30rpx;
 		}
 
-		.sicon-qrcode {
+		.cicon-service-o,.cicon-settings-o {
 			font-size: 40rpx;
 		}
+		.right-box{
+			display: flex;
+		}
 	}
 
 	.bind-mobile-box {

+ 2 - 2
sheep/request/index.js

@@ -160,7 +160,7 @@ http.interceptors.response.use(
 					errorMessage = '请求错误';
 					break;
 				case 401:
-          errorMessage = isLogin ? '您的登陆已过期' : '请登录';
+          errorMessage = isLogin ? '您的登陆已过期' : '请登录';
           // 正常情况下,后端不会返回 401 错误,所以这里不处理 handleAuthorized
           break;
 				case 403:
@@ -281,7 +281,7 @@ const handleAuthorized = () => {
   // 登录超时
   return Promise.reject({
     code: 401,
-    msg: userStore.isLogin ? '您的登陆已过期' : '请登录'
+    msg: userStore.isLogin ? '您的登陆已过期' : '请登录'
   })
 }
 

+ 4 - 0
sheep/scss/icon/_sheepicon.scss

@@ -92,3 +92,7 @@
 .sicon-qrcode:before {
   content: '\e6f9';
 }
+
+.sicon-setting:before {
+  content: '\e77a';
+}

+ 1 - 1
sheep/store/app.js

@@ -60,7 +60,7 @@ const app = defineStore({
 			// 加载装修配置
 			await adaptTemplate(this.template, templateId)
 
-			// TODO 芋艿:未来支持管理后台可配;对应 https://api.shopro.sheepjs.com/shop/api/init
+			// TODO 芋艿:未来支持管理后台可配;对应
 			if (true) {
 				this.info = {
 					name: '中星商城',

BIN
static/icon/cart.png


BIN
static/icon/index.png


BIN
static/icon/service.png


BIN
static/icon/shop.png


+ 0 - 1
unpackage/dist/build/h5/assets/address.37a0bf7a.js

@@ -1 +0,0 @@
-import{a7 as e}from"./index-38bd0f0a.js";const s={getAreaTree:()=>e({url:"/system/area/tree",method:"GET"})},d={getAddressList:()=>e({url:"/member/address/list",method:"GET"}),createAddress:s=>e({url:"/member/address/create",method:"POST",data:s,custom:{showSuccess:!0,successMsg:"保存成功"}}),updateAddress:s=>e({url:"/member/address/update",method:"PUT",data:s,custom:{showSuccess:!0,successMsg:"更新成功"}}),getAddress:s=>e({url:"/member/address/get",method:"GET",params:{id:s}}),deleteAddress:s=>e({url:"/member/address/delete",method:"DELETE",params:{id:s}})};export{d as A,s as a};

+ 1 - 0
unpackage/dist/build/h5/assets/address.a1e89c5a.js

@@ -0,0 +1 @@
+import{a6 as e}from"./index-44b9db5a.js";const s={getAddressList:()=>e({url:"/member/address/list",method:"GET"}),createAddress:s=>e({url:"/member/address/create",method:"POST",data:s,custom:{showSuccess:!0,successMsg:"保存成功"}}),updateAddress:s=>e({url:"/member/address/update",method:"PUT",data:s,custom:{showSuccess:!0,successMsg:"更新成功"}}),getAddress:s=>e({url:"/member/address/get",method:"GET",params:{id:s}}),deleteAddress:s=>e({url:"/member/address/delete",method:"DELETE",params:{id:s}})};export{s as A};

+ 1 - 1
unpackage/dist/build/h5/assets/afterSale.6dec4ece.js → unpackage/dist/build/h5/assets/afterSale.d34c7c30.js

@@ -1 +1 @@
-import{a7 as e}from"./index-38bd0f0a.js";const a={getAfterSalePage:a=>e({url:"/trade/after-sale/page",method:"GET",params:a,custom:{showLoading:!1}}),createAfterSale:a=>e({url:"/trade/after-sale/create",method:"POST",data:a}),getAfterSale:a=>e({url:"/trade/after-sale/get",method:"GET",params:{id:a}}),cancelAfterSale:a=>e({url:"/trade/after-sale/cancel",method:"DELETE",params:{id:a}}),getAfterSaleLogList:a=>e({url:"/trade/after-sale-log/list",method:"GET",params:{afterSaleId:a}}),deliveryAfterSale:a=>e({url:"/trade/after-sale/delivery",method:"PUT",data:a})};export{a as A};
+import{a6 as e}from"./index-44b9db5a.js";const a={getAfterSalePage:a=>e({url:"/trade/after-sale/page",method:"GET",params:a,custom:{showLoading:!1}}),createAfterSale:a=>e({url:"/trade/after-sale/create",method:"POST",data:a}),getAfterSale:a=>e({url:"/trade/after-sale/get",method:"GET",params:{id:a}}),cancelAfterSale:a=>e({url:"/trade/after-sale/cancel",method:"DELETE",params:{id:a}}),getAfterSaleLogList:a=>e({url:"/trade/after-sale-log/list",method:"GET",params:{afterSaleId:a}}),deliveryAfterSale:a=>e({url:"/trade/after-sale/delivery",method:"PUT",data:a})};export{a as A};

+ 1 - 0
unpackage/dist/build/h5/assets/area.f2d778d6.js

@@ -0,0 +1 @@
+import{a6 as e}from"./index-44b9db5a.js";const r={getAreaTree:()=>e({url:"/system/area/tree",method:"GET"})};export{r as A};

+ 1 - 1
unpackage/dist/build/h5/assets/article.359f5082.js → unpackage/dist/build/h5/assets/article.34de4789.js

@@ -1 +1 @@
-import{a7 as t}from"./index-38bd0f0a.js";const e={getArticle:(e,o)=>t({url:"/promotion/article/get",method:"GET",params:{id:e,title:o}})};export{e as A};
+import{a6 as t}from"./index-44b9db5a.js";const e={getArticle:(e,o)=>t({url:"/promotion/article/get",method:"GET",params:{id:e,title:o}})};export{e as A};

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/bargain.f8df20dc.js


+ 1 - 1
unpackage/dist/build/h5/assets/brokerage.3053efe9.js → unpackage/dist/build/h5/assets/brokerage.827f31de.js

@@ -1 +1 @@
-import{a7 as e}from"./index-38bd0f0a.js";const r={getBrokerageUser:()=>e({url:"/trade/brokerage-user/get",method:"GET"}),getBrokerageUserSummary:()=>e({url:"/trade/brokerage-user/get-summary",method:"GET"}),getBrokerageRecordPage:r=>{void 0===r.status&&delete r.status;const t=Object.keys(r).map((e=>encodeURIComponent(e)+"="+r[e])).join("&");return e({url:`/trade/brokerage-record/page?${t}`,method:"GET"})},createBrokerageWithdraw:r=>e({url:"/trade/brokerage-withdraw/create",method:"POST",data:r}),getProductBrokeragePrice:r=>e({url:"/trade/brokerage-record/get-product-brokerage-price",method:"GET",params:{spuId:r}}),getRankByPrice:r=>{const t=`times=${r.times[0]}&times=${r.times[1]}`;return e({url:`/trade/brokerage-user/get-rank-by-price?${t}`,method:"GET"})},getBrokerageUserChildSummaryPageByPrice:r=>{const t=Object.keys(r).map((e=>encodeURIComponent(e)+"="+r[e])).join("&");return e({url:`/trade/brokerage-user/rank-page-by-price?${t}`,method:"GET"})},getBrokerageUserRankPageByUserCount:r=>{const t=Object.keys(r).map((e=>encodeURIComponent(e)+"="+r[e])).join("&");return e({url:`/trade/brokerage-user/rank-page-by-user-count?${t}`,method:"GET"})},getBrokerageUserChildSummaryPage:r=>e({url:"/trade/brokerage-user/child-summary-page",method:"GET",params:r})};export{r as B};
+import{a6 as e}from"./index-44b9db5a.js";const r={getBrokerageUser:()=>e({url:"/trade/brokerage-user/get",method:"GET"}),getBrokerageUserSummary:()=>e({url:"/trade/brokerage-user/get-summary",method:"GET"}),getBrokerageRecordPage:r=>{void 0===r.status&&delete r.status;const t=Object.keys(r).map((e=>encodeURIComponent(e)+"="+r[e])).join("&");return e({url:`/trade/brokerage-record/page?${t}`,method:"GET"})},createBrokerageWithdraw:r=>e({url:"/trade/brokerage-withdraw/create",method:"POST",data:r}),getProductBrokeragePrice:r=>e({url:"/trade/brokerage-record/get-product-brokerage-price",method:"GET",params:{spuId:r}}),getRankByPrice:r=>{const t=`times=${r.times[0]}&times=${r.times[1]}`;return e({url:`/trade/brokerage-user/get-rank-by-price?${t}`,method:"GET"})},getBrokerageUserChildSummaryPageByPrice:r=>{const t=Object.keys(r).map((e=>encodeURIComponent(e)+"="+r[e])).join("&");return e({url:`/trade/brokerage-user/rank-page-by-price?${t}`,method:"GET"})},getBrokerageUserRankPageByUserCount:r=>{const t=Object.keys(r).map((e=>encodeURIComponent(e)+"="+r[e])).join("&");return e({url:`/trade/brokerage-user/rank-page-by-user-count?${t}`,method:"GET"})},getBrokerageUserChildSummaryPage:r=>e({url:"/trade/brokerage-user/child-summary-page",method:"GET",params:r})};export{r as B};

+ 0 - 1
unpackage/dist/build/h5/assets/cart-45d32ddc.css

@@ -1 +0,0 @@
-[data-v-38ec9e8b] .ui-fixed{height:2.25rem}.cart-box[data-v-38ec9e8b]{width:100%}.cart-box .cart-header[data-v-38ec9e8b]{height:2.1875rem;background-color:#f6f6f6;width:100%;position:fixed;left:0;top:var(--003f1891) rpx;z-index:1000;box-sizing:border-box}.cart-box .cart-footer[data-v-38ec9e8b]{height:3.125rem;background-color:#fff}.cart-box .cart-footer .pay-btn[data-v-38ec9e8b]{width:5.625rem;height:2.1875rem;font-size:.875rem;line-height:.875rem;font-weight:500;border-radius:1.25rem}.cart-box .cart-content[data-v-38ec9e8b]{margin-top:2.1875rem}.cart-box .cart-content .goods-box[data-v-38ec9e8b]{background-color:#fff}

+ 1 - 0
unpackage/dist/build/h5/assets/cart-515119e9.css

@@ -0,0 +1 @@
+[data-v-1316ddad] .ui-fixed{height:2.25rem}.title-text[data-v-1316ddad]{font-size:.9375rem;font-weight:700;line-height:1.3125rem}.cart-box[data-v-1316ddad]{width:100%}.cart-box .cart-header[data-v-1316ddad]{height:2.1875rem;background-color:#f6f6f6;width:100%;position:fixed;left:0;top:var(--a4dc0efc) rpx;z-index:1000;box-sizing:border-box}.cart-box .cart-footer[data-v-1316ddad]{height:3.125rem;background-color:#fff}.cart-box .cart-footer .pay-btn[data-v-1316ddad]{width:5.625rem;height:2.1875rem;font-size:.875rem;line-height:.875rem;font-weight:500;border-radius:1.25rem}.cart-box .cart-content[data-v-1316ddad]{margin-top:2.1875rem}.cart-box .cart-content .goods-box[data-v-1316ddad]{border-radius:.625rem}

BIN
unpackage/dist/build/h5/assets/cart-ed457535.png


+ 1 - 1
unpackage/dist/build/h5/assets/category.8ba41ec9.js → unpackage/dist/build/h5/assets/category.4ed41703.js

@@ -1 +1 @@
-import{a7 as t}from"./index-38bd0f0a.js";const o={getCategoryList:()=>t({url:"/product/category/list",method:"GET"}),getCategoryListByIds:o=>t({url:"/product/category/list-by-ids",method:"GET",params:{ids:o}})};export{o as C};
+import{a6 as t}from"./index-44b9db5a.js";const o={getCategoryList:()=>t({url:"/product/category/list",method:"GET"}),getCategoryListByIds:o=>t({url:"/product/category/list-by-ids",method:"GET",params:{ids:o}})};export{o as C};

+ 1 - 1
unpackage/dist/build/h5/assets/combination.6a14772e.js → unpackage/dist/build/h5/assets/combination.1d0a80d8.js

@@ -1 +1 @@
-import{a7 as o}from"./index-38bd0f0a.js";const t={getCombinationActivityList:t=>o({url:"/promotion/combination-activity/list",method:"GET",params:{count:t}}),getCombinationActivityPage:t=>o({url:"/promotion/combination-activity/page",method:"GET",params:t}),getCombinationActivity:t=>o({url:"/promotion/combination-activity/get-detail",method:"GET",params:{id:t}}),getHeadCombinationRecordList:(t,i,a)=>o({url:"/promotion/combination-record/get-head-list",method:"GET",params:{activityId:t,status:i,count:a}}),getCombinationRecordPage:t=>o({url:"/promotion/combination-record/page",method:"GET",params:t}),getCombinationRecordDetail:t=>o({url:"/promotion/combination-record/get-detail",method:"GET",params:{id:t}}),getCombinationRecordSummary:()=>o({url:"/promotion/combination-record/get-summary",method:"GET"})};export{t as C};
+import{a6 as o}from"./index-44b9db5a.js";const t={getCombinationActivityList:t=>o({url:"/promotion/combination-activity/list",method:"GET",params:{count:t}}),getCombinationActivityPage:t=>o({url:"/promotion/combination-activity/page",method:"GET",params:t}),getCombinationActivity:t=>o({url:"/promotion/combination-activity/get-detail",method:"GET",params:{id:t}}),getHeadCombinationRecordList:(t,i,a)=>o({url:"/promotion/combination-record/get-head-list",method:"GET",params:{activityId:t,status:i,count:a}}),getCombinationRecordPage:t=>o({url:"/promotion/combination-record/page",method:"GET",params:t}),getCombinationRecordDetail:t=>o({url:"/promotion/combination-record/get-detail",method:"GET",params:{id:t}}),getCombinationRecordSummary:()=>o({url:"/promotion/combination-record/get-summary",method:"GET"})};export{t as C};

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/comment-item.193ce6fd.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/comment-item.be3dc4d6.js


+ 1 - 1
unpackage/dist/build/h5/assets/config.e0805a31.js → unpackage/dist/build/h5/assets/config.6219f0d3.js

@@ -1 +1 @@
-import{a7 as e}from"./index-38bd0f0a.js";const o={getTradeConfig:()=>e({url:"/trade/config/get",method:"GET"})};export{o as T};
+import{a6 as e}from"./index-44b9db5a.js";const o={getTradeConfig:()=>e({url:"/trade/config/get",method:"GET"})};export{o as T};

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/confirm-002e56f8.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/confirm-0c1d583a.css


+ 1 - 1
unpackage/dist/build/h5/assets/const.ff2f4e3f.js → unpackage/dist/build/h5/assets/const.73e580a1.js

@@ -1 +1 @@
-import{a7 as t,aw as e}from"./index-38bd0f0a.js";const i={getSeckillConfigList:()=>t({url:"promotion/seckill-config/list",method:"GET"}),getNowSeckillActivity:()=>t({url:"promotion/seckill-activity/get-now",method:"GET"}),getSeckillActivityPage:e=>t({url:"promotion/seckill-activity/page",method:"GET",params:e}),getSeckillActivity:e=>t({url:"promotion/seckill-activity/get-detail",method:"GET",params:{id:e}})},o={PRICE:{type:1,name:"满减"},PERCENT:{type:2,name:"折扣"}},a={DATE:{type:1,name:"固定日期可用"},TERM:{type:2,name:"领取之后可用"}},l={WAIT_START:"即将开始",STARTED:"进行中",END:"已结束"},s=(t,i)=>{const o=e();return o.isBefore(t)?l.WAIT_START:o.isAfter(i)?l.END:l.STARTED};export{a as C,o as P,i as S,l as T,s as g};
+import{a6 as t,b3 as e}from"./index-44b9db5a.js";const i={getSeckillConfigList:()=>t({url:"promotion/seckill-config/list",method:"GET"}),getNowSeckillActivity:()=>t({url:"promotion/seckill-activity/get-now",method:"GET"}),getSeckillActivityPage:e=>t({url:"promotion/seckill-activity/page",method:"GET",params:e}),getSeckillActivity:e=>t({url:"promotion/seckill-activity/get-detail",method:"GET",params:{id:e}})},o={PRICE:{type:1,name:"满减"},PERCENT:{type:2,name:"折扣"}},a={DATE:{type:1,name:"固定日期可用"},TERM:{type:2,name:"领取之后可用"}},l={WAIT_START:"即将开始",STARTED:"进行中",END:"已结束"},s=(t,i)=>{const o=e();return o.isBefore(t)?l.WAIT_START:o.isAfter(i)?l.END:l.STARTED};export{a as C,o as P,i as S,l as T,s as g};

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/detail-content-card-a4d2bdb2.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/detail-content-card-d28c5e47.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/detail-content-card.9a773ee8.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/detail-content-card.b66a4463.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/detail-eac28fda.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/detail-eb23fc46.css


+ 1 - 0
unpackage/dist/build/h5/assets/edit-4ff5a0b1.css

@@ -0,0 +1 @@
+.shake[data-v-8b9ab6a6]{animation:shake-8b9ab6a6 .05s linear 4 alternate}@keyframes shake-8b9ab6a6{0%{transform:translate(-.3125rem)}to{transform:translate(.3125rem)}}[data-v-8b9ab6a6] .uni-forms-item__label .label-text{font-size:.875rem!important;color:#333!important;line-height:normal!important}[data-v-8b9ab6a6] .uni-forms-item__content{display:flex;align-items:center}[data-v-8b9ab6a6] .uni-easyinput__content-input{font-size:.875rem!important;color:#333!important;line-height:normal!important;padding-left:0!important}[data-v-8b9ab6a6] .uni-easyinput__content-textarea{font-size:.875rem!important;color:#333!important;line-height:normal!important;margin-top:.25rem!important}[data-v-8b9ab6a6] .uni-icons{font-size:1.25rem!important}[data-v-8b9ab6a6] .is-textarea-icon{margin-top:.6875rem}[data-v-8b9ab6a6] .is-disabled{color:#333}.default-box[data-v-8b9ab6a6]{width:100%;box-sizing:border-box;height:3.125rem}.default-box .default-box-title[data-v-8b9ab6a6]{font-size:.875rem;color:#333;line-height:normal}.tcp-text[data-v-8b9ab6a6]{color:var(--ui-BG-Main)}.footer-box .save-btn[data-v-8b9ab6a6]{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}.footer-box .cancel-btn[data-v-8b9ab6a6]{width:22.1875rem;height:2.5rem;border-radius:1.25rem;background:var(--ui-BG)}

+ 1 - 1
unpackage/dist/build/h5/assets/favorite.afc5b046.js → unpackage/dist/build/h5/assets/favorite.b57679d4.js

@@ -1 +1 @@
-import{a7 as e}from"./index-38bd0f0a.js";const t={getFavoritePage:t=>e({url:"/product/favorite/page",method:"GET",params:t}),isFavoriteExists:t=>e({url:"/product/favorite/exits",method:"GET",params:{spuId:t}}),createFavorite:t=>e({url:"/product/favorite/create",method:"POST",data:{spuId:t},custom:{auth:!0,showSuccess:!0,successMsg:"收藏成功"}}),deleteFavorite:t=>e({url:"/product/favorite/delete",method:"DELETE",data:{spuId:t},custom:{auth:!0,showSuccess:!0,successMsg:"取消成功"}})};export{t as F};
+import{a6 as e}from"./index-44b9db5a.js";const t={getFavoritePage:t=>e({url:"/product/favorite/page",method:"GET",params:t}),isFavoriteExists:t=>e({url:"/product/favorite/exits",method:"GET",params:{spuId:t}}),createFavorite:t=>e({url:"/product/favorite/create",method:"POST",data:{spuId:t},custom:{auth:!0,showSuccess:!0,successMsg:"收藏成功"}}),deleteFavorite:t=>e({url:"/product/favorite/delete",method:"DELETE",data:{spuId:t},custom:{auth:!0,showSuccess:!0,successMsg:"取消成功"}})};export{t as F};

+ 1 - 0
unpackage/dist/build/h5/assets/goods-collect-c0ad4ce7.css

@@ -0,0 +1 @@
+.cart-box .cart-header[data-v-bb241d57]{height:2.1875rem;background-color:#f6f6f6;width:100%;position:fixed;left:0;top:var(--66c3ede2) rpx;z-index:1000;box-sizing:border-box}.cart-box .cart-footer[data-v-bb241d57]{height:3.125rem;background-color:#fff}.cart-box .cart-footer .pay-btn[data-v-bb241d57]{height:2.5rem;line-height:2.5rem;border-radius:1.25rem;padding:0 1.25rem;min-width:6.25rem}.cart-box .cart-content[data-v-bb241d57]{width:100%;margin-top:2.1875rem;padding:0 .625rem;box-sizing:border-box}.cart-box .cart-content .goods-box[data-v-bb241d57]{background-color:#fff}.cart-box .cart-content .goods-box[data-v-bb241d57]:last-child{margin-bottom:1.25rem}

+ 0 - 1
unpackage/dist/build/h5/assets/goods-collect-ee21ad15.css

@@ -1 +0,0 @@
-.cart-box .cart-header[data-v-43e16939]{height:2.1875rem;background-color:#f6f6f6;width:100%;position:fixed;left:0;top:var(--016d8d2c) rpx;z-index:1000;box-sizing:border-box}.cart-box .cart-footer[data-v-43e16939]{height:3.125rem;background-color:#fff}.cart-box .cart-footer .pay-btn[data-v-43e16939]{height:2.5rem;line-height:2.5rem;border-radius:1.25rem;padding:0 1.25rem;min-width:6.25rem}.cart-box .cart-content[data-v-43e16939]{width:100%;margin-top:2.1875rem;padding:0 .625rem;box-sizing:border-box}.cart-box .cart-content .goods-box[data-v-43e16939]{background-color:#fff}.cart-box .cart-content .goods-box[data-v-43e16939]:last-child{margin-bottom:1.25rem}

+ 1 - 1
unpackage/dist/build/h5/assets/history.fdbba39b.js → unpackage/dist/build/h5/assets/history.f245f652.js

@@ -1 +1 @@
-import{a7 as s}from"./index-38bd0f0a.js";const o={deleteBrowseHistory:o=>s({url:"/product/browse-history/delete",method:"DELETE",data:{spuIds:o},custom:{showSuccess:!0,successMsg:"删除成功"}}),cleanBrowseHistory:()=>s({url:"/product/browse-history/clean",method:"DELETE",custom:{showSuccess:!0,successMsg:"清空成功"}}),getBrowseHistoryPage:o=>s({url:"/product/browse-history/page",method:"GET",data:o,custom:{showLoading:!1}})};export{o as S};
+import{a6 as s}from"./index-44b9db5a.js";const o={deleteBrowseHistory:o=>s({url:"/product/browse-history/delete",method:"DELETE",data:{spuIds:o},custom:{showSuccess:!0,successMsg:"删除成功"}}),cleanBrowseHistory:()=>s({url:"/product/browse-history/clean",method:"DELETE",custom:{showSuccess:!0,successMsg:"清空成功"}}),getBrowseHistoryPage:o=>s({url:"/product/browse-history/page",method:"GET",data:o,custom:{showLoading:!1}})};export{o as S};

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/index-44b9db5a.js


BIN
unpackage/dist/build/h5/assets/index-53a28843.png


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/index-b4124b06.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/index-faf74218.css


+ 1 - 1
unpackage/dist/build/h5/assets/index.fba4e968.js → unpackage/dist/build/h5/assets/index.ab14311e.js

@@ -1 +1 @@
-import{aw as t}from"./index-38bd0f0a.js";const r=t=>{let r="0.00";if(void 0===t)return r;const e=(t=>{if(void 0===t)return 0;const r="string"==typeof t?parseFloat(t):t;return parseFloat((r/100).toFixed(2))})(t),n=e.toString().split(".")[1];switch(n?n.length:0){case 0:r=e.toString()+".00";break;case 1:r=e.toString()+".0";break;case 2:r=e.toString()}return r};function e(r,e){return r?(void 0===e&&(e="YYYY-MM-DD HH:mm:ss"),t(r).format(e)):""}function n(t,r="id",e="parentId",n="children",i=0){const o=JSON.parse(JSON.stringify(t)),s=o.filter((t=>{let n=o.filter((n=>t[r]===n[e]));return n.length>0&&(t.children=n),t[e]===i}));return""!==s?s:t}function i(t){t.list=[],t.total=0,t.pageNo=1}export{e as a,r as f,n as h,i as r};
+import{b3 as t}from"./index-44b9db5a.js";const r=t=>{let r="0.00";if(void 0===t)return r;const e=(t=>{if(void 0===t)return 0;const r="string"==typeof t?parseFloat(t):t;return parseFloat((r/100).toFixed(2))})(t),n=e.toString().split(".")[1];switch(n?n.length:0){case 0:r=e.toString()+".00";break;case 1:r=e.toString()+".0";break;case 2:r=e.toString()}return r};function e(r,e){return r?(void 0===e&&(e="YYYY-MM-DD HH:mm:ss"),t(r).format(e)):""}function n(t,r="id",e="parentId",n="children",i=0){const o=JSON.parse(JSON.stringify(t)),s=o.filter((t=>{let n=o.filter((n=>t[r]===n[e]));return n.length>0&&(t.children=n),t[e]===i}));return""!==s?s:t}function i(t){t.list=[],t.total=0,t.pageNo=1}export{e as a,r as f,n as h,i as r};

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/info-76cbd1d8.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/list-19739a99.css


+ 1 - 0
unpackage/dist/build/h5/assets/list-83e59b38.css

@@ -0,0 +1 @@
+.footer-box .add-btn[data-v-529594e4]{flex:1;background:linear-gradient(90deg,var(--ui-BG-Main),var(--ui-BG-Main-gradient));border-radius:2.5rem;font-size:.9375rem;font-weight:500;line-height:2.5rem;color:#fff;position:relative;z-index:1}.footer-box .sync-wxaddress[data-v-529594e4]{flex:1;line-height:2.5rem;background:#ffffff;border-radius:2.5rem;font-size:.9375rem;font-weight:500;color:#666;margin-right:.5625rem}

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/list-e79a7552.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/mp-html.5f288a95.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-activity-bargain-detail.7deec51d.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-activity-bargain-list.9e0bc34c.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-activity-groupon-detail.489a4fb5.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-activity-groupon-list.e1169f8f.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-activity-groupon-order.8440ff27.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-activity-index.0739d1fb.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-activity-index.4ac783fa.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-activity-seckill-list.814d4a76.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-app-sign.96326a91.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-chat-index.0dfa1a3a.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-commission-commission-ranking.dfaab750.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-commission-goods.26525850.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-commission-index.0d8cb5d3.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-commission-order.91d21da4.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-commission-order.bf33469e.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-commission-promoter.2a1164a3.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-commission-promoter.bee15e5c.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-commission-team.1143d670.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-commission-wallet.b7cc96f1.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-commission-withdraw.feff1b0c.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-coupon-detail.1ad8167e.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-coupon-detail.27062a5d.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-coupon-list.3cdd668c.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-goods-comment-add.7ae21df9.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-goods-comment-list.c5268faa.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-goods-groupon.25e65ea9.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-goods-groupon.5ac0eb0d.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-goods-index.8331e52e.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-goods-list.1b30ab8a.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-goods-seckill.7c4de860.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-index-cart.29cf0983.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
unpackage/dist/build/h5/assets/pages-index-cart.db47a72c.js


Vissa filer visades inte eftersom för många filer har ändrats