lilei 9 months ago
parent
commit
3780b2c349
59 changed files with 2095 additions and 693 deletions
  1. 3 89
      App.vue
  2. 6 2
      components/icon-items-list/icon-items-list.vue
  3. 33 0
      components/skline/sklineFooter.vue
  4. 71 0
      components/skline/sklineHeader.vue
  5. 50 0
      components/skline/sklineTemp.vue
  6. 0 101
      components/uni-badge/uni-badge.vue
  7. 71 0
      flex.css
  8. 23 12
      pages.json
  9. 29 23
      pages/index/index.vue
  10. 2 2
      pages/index/productItem.vue
  11. 46 40
      pages/morePage/morePage.vue
  12. 7 1
      pages/promo/index.vue
  13. 7 1
      pages/videos/index.vue
  14. 261 226
      pagesA/digitalShelf/choosePart.vue
  15. 23 14
      pagesA/digitalShelf/choosePartResult.vue
  16. 104 22
      pagesA/digitalShelf/components/otherPartItem.vue
  17. 78 23
      pagesA/digitalShelf/components/vinPartItem.vue
  18. 223 101
      pagesB/cart/index.vue
  19. 16 16
      pagesB/cart/productitem.vue
  20. 4 2
      pagesB/components/chooseProductItemSkline.vue
  21. 2 3
      pagesB/shopiing/productDetail.vue
  22. 1 1
      pagesB/shopiing/searchProduct.vue
  23. BIN
      pagesB/static/ashbin.png
  24. BIN
      pagesB/static/round.png
  25. BIN
      pagesB/static/round_check_fill.png
  26. BIN
      static/arrow-left.png
  27. 0 0
      static/iconfont/iconfont.css
  28. BIN
      static/tab/tab_cart_normal.png
  29. BIN
      static/tab/tab_cart_pressed.png
  30. BIN
      static/tab/tab_scan_mid.png
  31. BIN
      static/temp/t1.jpeg
  32. BIN
      static/temp/t10.jpg
  33. BIN
      static/temp/t11.jpg
  34. BIN
      static/temp/t12.jpg
  35. BIN
      static/temp/t2.jpeg
  36. BIN
      static/temp/t3.jpg
  37. BIN
      static/temp/t4.jpg
  38. BIN
      static/temp/t5.png
  39. BIN
      static/temp/t6.jpeg
  40. BIN
      static/temp/t7.jpg
  41. BIN
      static/temp/t8.jpg
  42. BIN
      static/temp/t9.jpg
  43. 14 14
      uni.scss
  44. 33 0
      uni_modules/uni-badge/changelog.md
  45. 268 0
      uni_modules/uni-badge/components/uni-badge/uni-badge.vue
  46. 85 0
      uni_modules/uni-badge/package.json
  47. 10 0
      uni_modules/uni-badge/readme.md
  48. 19 0
      uni_modules/uni-load-more/changelog.md
  49. 5 0
      uni_modules/uni-load-more/components/uni-load-more/i18n/en.json
  50. 8 0
      uni_modules/uni-load-more/components/uni-load-more/i18n/index.js
  51. 5 0
      uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json
  52. 5 0
      uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json
  53. 112 0
      uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue
  54. 86 0
      uni_modules/uni-load-more/package.json
  55. 14 0
      uni_modules/uni-load-more/readme.md
  56. 23 0
      uni_modules/uni-tag/changelog.md
  57. 251 0
      uni_modules/uni-tag/components/uni-tag/uni-tag.vue
  58. 84 0
      uni_modules/uni-tag/package.json
  59. 13 0
      uni_modules/uni-tag/readme.md

+ 3 - 89
App.vue

@@ -2,8 +2,8 @@
 	export default {
 		globalData: {
 			// baseUrl: 'http://192.168.2.10:7002/saas/clz/', // 本地
-			baseUrl: 'https://md.test.zyucgj.com/saas/clz/', // 预发布
-			// baseUrl: 'https://car.zyucgj.com/saas/clz/' // 生产
+			// baseUrl: 'https://md.test.zyucgj.com/saas/clz/', // 预发布
+			baseUrl: 'https://car.zyucgj.com/saas/clz/' // 生产
 		},
 		onLaunch: function() {
 			console.log('App Launch');
@@ -41,6 +41,7 @@
 <style lang="scss">
 	@import "uview-ui/index.scss";
 	@import "/static/iconfont/iconfont.css";
+	@import 'flex.css';
 	/*每个页面公共css */
 	page {
 		width: 100%;
@@ -104,91 +105,4 @@
 		box-shadow: 1px 1px 3px #EEEEEE;
 		font-size: 28upx;
 	}
-	/* 显示一行省略号 */
-	.ellipsis-one{
-		white-space: nowrap;
-		text-overflow: ellipsis;
-		overflow: hidden;
-		word-break: break-all;
-	}
-	/* 显示两行,省略号 */
-	.ellipsis-two{
-		overflow: hidden;
-		text-overflow: ellipsis;
-		display: -webkit-box;
-		-webkit-line-clamp: 2;
-		line-clamp: 2;
-		-webkit-box-orient: vertical;
-	}
-	/* felx布局 */
-	.flex{
-		display: -webkit-flex; /* Chrome 21+, Safari 6.1+, iOS Safari 7+, Opera 15/16 */  
-		display: -moz-flex; /* Firefox 18+ */  
-		display: -ms-flexbox; /* IE 10 */  
-		display: flex; /* Chrome 29+, Firefox 22+, IE 11+, Opera 12.1/17/18, Android 4.4+ */
-	}
-	/*伸缩流方向*/
-	.flex_column{
-	    -webkit-box-orient: vertical;
-	    -ms-flex-direction: column;
-	    -webkit-flex-direction: column;
-	    flex-direction: column;
-	}
-	/*主轴对齐*/
-	.justify_center{
-	    -webkit-box-pack: center;
-	    -ms-flex-pack: center;
-	    -webkit-justify-content: center;
-	    justify-content: center;
-	}
-	.justify_end{
-	    -webkit-box-pack: end;
-	    -ms-flex-pack: end;
-	    -webkit-justify-content: flex-end;
-	    justify-content: flex-end;
-	}
-	.justify_between{
-	    -webkit-box-pack: justify;
-	    -ms-flex-pack: justify;
-	    -webkit-justify-content: space-between;
-	    justify-content: space-between;
-	}
-	/*侧轴对齐*/
-	.align_start{
-	    -webkit-box-align: start;
-	    -ms-flex-align: start;
-	    -webkit-align-items: flex-start;
-	    align-items: flex-start;
-	}
-	.align_end{
-	    -webkit-box-align: end;
-	    -ms-flex-align: end;
-	    -webkit-align-items: flex-end;
-	    align-items: flex-end;
-	}
-	.align_center{
-	    -webkit-box-align: center;
-	    -ms-flex-align: center;
-	    -webkit-align-items: center;
-	    align-items: center;
-	}
-	.align_baseline{
-	    -webkit-box-align: baseline;
-	    -ms-flex-align: baseline;
-	    -webkit-align-items: baseline;
-	    align-items: baseline;
-	}
-	/*伸缩性*/
-	.flex_auto{
-	    -webkit-box-flex: 1;
-	    -ms-flex: auto;
-	    -webkit-flex: auto;
-	    flex: auto;
-	}
-	.flex_1{
-	    -webkit-box-flex: 1;
-	    -ms-flex: 1;
-	    -webkit-flex: 1;
-	    flex: 1;    
-	}
 </style>

+ 6 - 2
components/icon-items-list/icon-items-list.vue

@@ -3,7 +3,7 @@
 		<div class="icon-items-icons" :style="{width:itemWidth}" v-for="(item,index) in list" :key="item.id" @click="toPage(item,index)">
 			<div class="icon-items-imgse" >
 				<image class="imgs" v-if="type=='img'" :class="item.auth?'':'uni-img-gray'" :fade-show='true' :src="item.icon||'/static/def_imgs.png'"></image>
-				<u-icon class="icons" v-if="type=='icon'" :color="item.color" :size="60" :name="item.icon" custom-prefix="custom-icon"></u-icon>
+				<u-icon class="icons" v-if="type=='icon'" :color="item.color" :size="iconSize" :name="item.icon" custom-prefix="custom-icon"></u-icon>
 				<u-badge class="tag" :absolute="false" type="error"  v-if="item.nums" :count="item.nums"></u-badge>
 			</div>
 			<div class="icon-items-text">{{item.name}}</div>
@@ -29,6 +29,10 @@
 				type: String,
 				default: '25%'
 			},
+			iconSize: {
+				type: Number,
+				default: 60
+			},
 			type: {
 				type: String,
 				default: 'icon'
@@ -117,7 +121,7 @@
 		}
 		.icon-items-text{
 			font-size: 24upx;
-			color: #666666;
+			color: #333;
 		}
 	}
 	.icon-items-icons{

+ 33 - 0
components/skline/sklineFooter.vue

@@ -0,0 +1,33 @@
+<template>
+	<div class="skline_footer">
+		<view class="skline_footer-content">
+			<slot></slot>
+		</view>
+		<view :style="{height:safeAreaBottom+'px'}"></view>
+	</div>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				safeAreaBottom: 0
+			}
+		},
+		mounted() {
+			uni.getSystemInfo({
+				success: (res) => {
+					this.safeAreaBottom = res.safeAreaInsets.bottom
+				}
+			})
+		}
+	}
+</script>
+
+<style lang="less">
+	.skline_footer {
+		 .skline_footer-content{
+			 height: 100rpx;
+		 }
+	}
+</style>

+ 71 - 0
components/skline/sklineHeader.vue

@@ -0,0 +1,71 @@
+<template>
+	<view class="scrollPage-header">
+		<view :style="{height:statusBarHeight+'px'}"></view>
+		<view class="header-title">
+			<view class="header-left" @click="goBack">
+				<image style="width: 16px; height: 16px;margin-right:3px;" mode="aspectFit" src="/static/arrow-left.png"></image>
+				<text>返回</text>
+			</view>
+			<view class="header-title"><text class="ellipsis-one" overflow="ellipsis">{{title}}</text></view>
+			<view class="header-right">
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: "sklineHeader",
+		props: {
+			title: {
+				type: String,
+				default: '标题'
+			},
+		},
+		data() {
+			return {
+				statusBarHeight: 0,
+			};
+		},
+		created() {
+			this.statusBarHeight = uni.getSystemInfoSync().statusBarHeight;
+		},
+		methods: {
+			goBack() {
+				uni.navigateBack();
+			},
+		}
+	}
+</script>
+
+<style lang="less">
+	.scrollPage-header{
+		z-index: 1;
+		.header-title{
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			padding: 0 10px;
+			height: 44px;
+			background-color: #FFFFFF;
+			box-shadow: 0px 1px 0px 0px #E6E6E6;
+			.header-title{
+				font-size: 16px;
+				color: #333333;
+				max-width: 70%;
+			}
+			.header-left{
+				display: flex;
+				align-items: center;
+				text{
+					font-size: 14px;
+					color: #333333;
+					margin-left: 5px;
+				}
+			}
+			.header-right{
+				width: 50px;
+			}
+		}
+	}
+</style>

+ 50 - 0
components/skline/sklineTemp.vue

@@ -0,0 +1,50 @@
+<template>
+	<view class="empty-bar">
+		<image mode="aspectFit" :style="{width:iconSize+'px',height:iconSize+'px'}" :src="src"></image>
+		<view>{{text}}</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: "sklineTemp",
+		props: {
+			src: {
+				type: String,
+				default: '/static/nodata.png'
+			},
+			text: {
+				type: String,
+				default: '暂无数据'
+			},
+			iconSize: {
+				type: Number,
+				default: 100
+			}
+		},
+		data() {
+			return {
+
+			};
+		}
+	}
+</script>
+
+<style lang="less">
+	.empty-bar{
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		padding: 20px 0;
+		image{
+			width: 100px;
+			height: 100px;
+		}
+		view{
+			font-size: 14px;
+			color: #999999;
+			margin-top: 10px;
+		}
+	}
+</style>

+ 0 - 101
components/uni-badge/uni-badge.vue

@@ -1,101 +0,0 @@
-<template>
-  <text v-if="text" :class="inverted ? 'uni-badge-' + type + ' uni-badge--' + size + ' uni-badge-inverted' : 'uni-badge-' + type + ' uni-badge--' + size"
-    class="uni-badge" @click="onClick()">{{ text }}</text>
-</template>
-
-<script>
-  export default {
-    name: 'UniBadge',
-    props: {
-      type: {
-        type: String,
-        default: 'default'
-      },
-      inverted: {
-        type: Boolean,
-        default: false
-      },
-      text: {
-        type: String,
-        default: ''
-      },
-      size: { // small.normal
-        type: String,
-        default: 'normal'
-      }
-    },
-    methods: {
-      onClick() {
-        this.$emit('click')
-      }
-    }
-  }
-</script>
-
-<style lang="scss">
-  $bage-size:12px;
-  $bage-small:scale(0.8);
-
-  .uni-badge {
-    font-family: 'Helvetica Neue', Helvetica, sans-serif;
-    box-sizing: border-box;
-    font-size: $bage-size;
-    line-height: 1;
-    display: inline-block;
-    padding: 3px 6px;
-    color: $uni-text-color;
-    border-radius: 100px;
-    background-color: $uni-bg-color-hover;
-
-    &.uni-badge-inverted {
-      padding: 0 5px 0 0;
-      color: $uni-text-color-grey;
-      background-color: transparent;
-    }
-
-    &-primary {
-      color: $uni-text-color-inverse;
-      background-color: $uni-color-primary;
-
-      &.uni-badge-inverted {
-        color: $uni-color-primary;
-        background-color: transparent
-      }
-    }
-
-    &-success {
-      color: $uni-text-color-inverse;
-      background-color: $uni-color-success;
-
-      &.uni-badge-inverted {
-        color: $uni-color-success;
-        background-color: transparent
-      }
-    }
-
-    &-warning {
-      color: $uni-text-color-inverse;
-      background-color: $uni-color-warning;
-
-      &.uni-badge-inverted {
-        color: $uni-color-warning;
-        background-color: transparent
-      }
-    }
-
-    &-error {
-      color: $uni-text-color-inverse;
-      background-color: $uni-color-error;
-
-      &.uni-badge-inverted {
-        color: $uni-color-error;
-        background-color: transparent
-      }
-    }
-
-    &--small {
-      transform: $bage-small;
-      transform-origin: center center;
-    }
-  }
-</style>

+ 71 - 0
flex.css

@@ -0,0 +1,71 @@
+/* felx布局 */
+.flex{
+	display: -webkit-flex; /* Chrome 21+, Safari 6.1+, iOS Safari 7+, Opera 15/16 */  
+	display: -moz-flex; /* Firefox 18+ */  
+	display: -ms-flexbox; /* IE 10 */  
+	display: flex; /* Chrome 29+, Firefox 22+, IE 11+, Opera 12.1/17/18, Android 4.4+ */
+}
+/*伸缩流方向*/
+.flex_column{
+	-webkit-box-orient: vertical;
+	-ms-flex-direction: column;
+	-webkit-flex-direction: column;
+	flex-direction: column;
+}
+/*主轴对齐*/
+.justify_center{
+	-webkit-box-pack: center;
+	-ms-flex-pack: center;
+	-webkit-justify-content: center;
+	justify-content: center;
+}
+.justify_end{
+	-webkit-box-pack: end;
+	-ms-flex-pack: end;
+	-webkit-justify-content: flex-end;
+	justify-content: flex-end;
+}
+.justify_between{
+	-webkit-box-pack: justify;
+	-ms-flex-pack: justify;
+	-webkit-justify-content: space-between;
+	justify-content: space-between;
+}
+/*侧轴对齐*/
+.align_start{
+	-webkit-box-align: start;
+	-ms-flex-align: start;
+	-webkit-align-items: flex-start;
+	align-items: flex-start;
+}
+.align_end{
+	-webkit-box-align: end;
+	-ms-flex-align: end;
+	-webkit-align-items: flex-end;
+	align-items: flex-end;
+}
+.align_center{
+	-webkit-box-align: center;
+	-ms-flex-align: center;
+	-webkit-align-items: center;
+	align-items: center;
+}
+.align_baseline{
+	-webkit-box-align: baseline;
+	-ms-flex-align: baseline;
+	-webkit-align-items: baseline;
+	align-items: baseline;
+}
+/*伸缩性*/
+.flex_auto{
+	-webkit-box-flex: 1;
+	-ms-flex: auto;
+	-webkit-flex: auto;
+	flex: auto;
+}
+.flex_1{
+	-webkit-box-flex: 1;
+	-ms-flex: 1;
+	-webkit-flex: 1;
+	flex: 1;    
+}

+ 23 - 12
pages.json

@@ -143,13 +143,6 @@
         	{
         		"navigationBarTitleText" : "促销活动"
         	}
-        },
-        {
-        	"path" : "pages/cart/index",
-        	"style" : 
-        	{
-        		"navigationBarTitleText" : "购物车"
-        	}
         }
     ],
 	"subPackages":[
@@ -187,7 +180,14 @@
 			    "style" :                                                                                    
 			    {
 			        "navigationBarTitleText": "选择配件",
-			        "enablePullDownRefresh": false
+			        "enablePullDownRefresh": false,
+					"navigationStyle": "custom",
+					"disableScroll": true,
+					"app-plus":{
+						"bounce":"none"
+					},
+					"renderer":"skyline",
+					"componentFramework": "glass-easel"
 			    }
 			}
 			,{
@@ -487,7 +487,21 @@
 				"navigationBarTitleText" : "商品详情",
 				"navigationStyle": "custom"
 			}
-		}
+		},
+        {
+        	"path" : "cart/index",
+        	"style" : 
+        	{
+        		"navigationBarTitleText" : "购物车",
+				"navigationStyle": "custom",
+				"disableScroll": true,
+				"app-plus":{
+					"bounce":"none"
+				},
+				"renderer":"skyline",
+				"componentFramework": "glass-easel"
+        	}
+        }
 		]
 	}
 	],
@@ -517,9 +531,6 @@
 			{
 				"pagePath": "pages/videos/index"
 			},
-			{
-				"pagePath": "pages/cart/index"
-			},
 			{
 				"pagePath": "pages/morePage/morePage"
 			}

+ 29 - 23
pages/index/index.vue

@@ -59,7 +59,7 @@
 					</view>
 					<!-- 搜索 -->
 					<view class="search-head" v-if="hasShopiing">
-						<uni-search-bar radius="100" placeholder="请输入产品名称/轮胎规格" clearButton="auto" cancelButton="none" @confirm="toSearch"/>
+						<uni-search-bar radius="100" placeholder="请输入商品名称/产品编码/原厂编码" clearButton="auto" cancelButton="none" @confirm="toSearch"/>
 					</view>
 				</view>
 				<view :class="hasShopiing?'body-box1':'body-box'">	
@@ -80,7 +80,7 @@
 					</view>
 					<!-- 快捷导航 -->
 					<view class="quick-nav pa-box" v-if="hasShopiing&&navList.length">
-						<iconItemsList :list="navList" @callback="onNavFun"></iconItemsList>
+						<iconItemsList :list="navList" :iconSize="45" @callback="onNavFun"></iconItemsList>
 					</view>
 					<!-- 产品分类 -->
 					<view class="ptype-nav pa-box" v-if="hasShopiing">
@@ -103,8 +103,8 @@
 							:key="index" 
 							:list="item" 
 							:index="index"
-							:itemWidth="(screenWidth-30)*0.5"
-							:gap="10"
+							:itemWidth="(screenWidth-25)*0.5"
+							:gap="5"
 							></productItem>
 						</view>
 					</view>
@@ -137,7 +137,7 @@
 			</view>
 		</view>
 		<!-- tab栏 -->
-		<u-tabbar :list="vuex_tabBarList" :before-switch="beforeSwitch" :midButton="vuex_tabBarList.length==5"></u-tabbar>
+		<u-tabbar :list="vuex_tabBarList" :mid-button-size="80" :before-switch="beforeSwitch" :midButton="vuex_tabBarList.length==5"></u-tabbar>
 	</view>
 </template>
 
@@ -236,7 +236,7 @@
 						auth: this.hasLogin&&this.userInfo.sysUserFlag == '1',
 						icon:'bianmachaxun',
 						name: '产品编码取货',
-						color:'#2196f3',
+						color:'#056cd9',
 						url: 'openTakeGood0',
 						target: 'fun'
 					},
@@ -245,7 +245,7 @@
 						auth: this.hasLogin&&this.userInfo.sysUserFlag == '1',
 						icon:'saoma',
 						name: '二维/条码取货',
-						color:'#FF9800',
+						color:'#ffaa7f',
 						url:'openTakeGood1',
 						target: 'fun'
 					},
@@ -253,8 +253,8 @@
 						id:'n3',
 						auth: this.hasLogin,
 						icon:'shipin1',
-						name: '视频讲堂',
-						color:'#55aa00',
+						name: '视频教程',
+						color:'#55aaff',
 						url:'/pagesB/videos/index',
 						target: 'page'
 					},
@@ -263,7 +263,7 @@
 						auth: this.hasLogin,
 						icon:'chaxunjilu',
 						name: 'VIN查询历史',
-						color:'#55557f',
+						color:'#abc4ff',
 						url:'/pagesA/vinRecord/vinRecord',
 						target: 'page'
 					}
@@ -347,6 +347,12 @@
 				if(row.text == '促销'){
 					uni.$emit('refashProm')
 				}
+				if(row.text == '购物车'){
+					uni.navigateTo({
+						url:'/pagesB/cart/index',
+						target: 'page'
+					})
+				}
 				if(row.text == '扫描VIN'){
 					this.openCamera()
 				}else{
@@ -537,7 +543,7 @@
 									id:'0',
 									sn:'0',
 									name:'轮胎',
-									icon:'',
+									icon:'/static/temp/t1.jpeg',
 									url: 'ptypeNav',
 									target: 'fun'
 								},
@@ -545,7 +551,7 @@
 									id:'1',
 									sn:'1',
 									name:'滤清器',
-									icon:'',
+									icon:'/static/temp/t2.jpeg',
 									url: 'ptypeNav',
 									target: 'fun'
 								},
@@ -553,70 +559,70 @@
 									id:'2',
 									sn:'3',
 									name:'刹车片',
-									icon:'',
+									icon:'/static/temp/t4.jpg',
 									url: 'ptypeNav',
 									target: 'fun'
 								},{
 									id:'4',
 									sn:'4',
 									name:'油品',
-									icon:'',
+									icon:'/static/temp/t5.png',
 									url: 'ptypeNav',
 									target: 'fun'
 								},{
 									id:'5',
 									sn:'5',
 									name:'雨刮',
-									icon:'',
+									icon:'/static/temp/t11.jpg',
 									url: 'ptypeNav',
 									target: 'fun'
 								},{
 									id:'6',
 									sn:'6',
 									name:'火花塞',
-									icon:'',
+									icon:'/static/temp/t6.jpeg',
 									url: 'ptypeNav',
 									target: 'fun'
 								},{
 									id:'7',
 									sn:'7',
 									name:'电火线圈',
-									icon:'',
+									icon:'/static/temp/t7.jpg',
 									url: 'ptypeNav',
 									target: 'fun'
 								},{
 									id:'8',
 									sn:'8',
 									name:'照明系列',
-									icon:'',
+									icon:'/static/temp/t9.jpg',
 									url: 'ptypeNav',
 									target: 'fun'
 								},{
 									id:'9',
 									sn:'9',
 									name:'空气滤',
-									icon:'',
+									icon:'/static/temp/t10.jpg',
 									url: 'ptypeNav',
 									target: 'fun'
 								},{
 									id:'10',
 									sn:'10',
 									name:'机油率',
-									icon:'',
+									icon:'/static/temp/t3.jpg',
 									url: 'ptypeNav',
 									target: 'fun'
 								},{
 									id:'11',
 									sn:'11',
 									name:'电瓶电池',
-									icon:'',
+									icon:'/static/temp/t8.jpg',
 									url: 'ptypeNav',
 									target: 'fun'
 								},{
 									id:'12',
 									sn:'12',
 									name:'洗美养护',
-									icon:'',
+									icon:'/static/temp/t12.jpg',
 									url: 'ptypeNav',
 									target: 'fun'
 								}
@@ -915,7 +921,7 @@
 		background-image: linear-gradient(#86defa 0%,#cdeff9 25%,#ffffff 40%);
 	}
 	.bg-1{
-		background-image: linear-gradient(#86defa 0%, #cdeff9 15%, #f8f8f8 60%);
+		background-image: linear-gradient(#066cff 10%, #80b1fd 30%, #f8f8f8 50%);
 	}
 	.content {
 		margin: 0;

+ 2 - 2
pages/index/productItem.vue

@@ -85,6 +85,7 @@
 	flex-wrap: wrap;
 	justify-content: space-between;
 	padding: 0;
+	width: 100%;
 }
 .product-item{
 	background: #ffffff;
@@ -122,8 +123,7 @@
 			padding: 10px 10px 40px;
 			.product-name{
 				font-size: 28rpx;
-				font-weight: 900;
-				color: #666;
+				color: #333;
 			}
 			.product-guige{
 				margin: 10rpx 0;

+ 46 - 40
pages/morePage/morePage.vue

@@ -92,7 +92,7 @@
 		</u-popup>
 	</view>
 	<!-- tab -->
-	<u-tabbar :list="vuex_tabBarList" :before-switch="beforeSwitch" :midButton="vuex_tabBarList.length==5"></u-tabbar>
+	<u-tabbar :list="vuex_tabBarList" :mid-button-size="80" :before-switch="beforeSwitch" :midButton="vuex_tabBarList.length==5"></u-tabbar>
 	</view>
 </template>
 
@@ -146,7 +146,7 @@
 								icon: 'huojiaguanli',
 								auth: this.$hasPermissions('M_shelfOrder_mini'),
 								path: '/pagesA/digitalShelf/orderList',
-								color: '#00aaff',
+								color: '#056cd9',
 								isShelf: true
 							},
 							{
@@ -154,7 +154,7 @@
 								icon: 'yijianshansong',
 								auth: this.$hasPermissions('M_tempShelfOrder_mini'),
 								path: '/pagesA/digitalShelf/tempOrderList/tempOrderList',
-								color: '#ff7b1c',
+								color: '#dd6859',
 								isShelf: true
 							},
 							{
@@ -162,7 +162,7 @@
 								icon: 'purchaseorder',
 								auth: this.$hasPermissions('M_procureOrder_mini'),
 								path: '/pagesB/procureOrderList',
-								color: '#00aa00'
+								color: '#ffaa00'
 							}
 						],
 					},
@@ -173,36 +173,12 @@
 						column: 4,
 						size: 60,
 						child:[
-							{
-								text: '编码取货',
-								icon: 'ziyuanxhdpi',
-								auth: this.userInfo && this.userInfo.sysUserFlag == '1',
-								path: '#quhuo1',
-								color: '#2196f3',
-								isShelf: true
-							},
-							{
-								text: '扫码取货',
-								icon: 'saoma1',
-								auth: this.userInfo && this.userInfo.sysUserFlag == '1',
-								path: '#quhuo0',
-								color: '#FF9800',
-								isShelf: true
-							},
-							{
-								text: 'VIN查询历史',
-								icon: 'lishijilu',
-								auth: this.hasLogin,
-								path: '/pagesA/vinRecord/vinRecord',
-								color: '#55557f',
-								isShelf: true
-							},
 							{
 								text: '库存查询',
 								icon: 'stockquery',
 								auth: this.$hasPermissions('M_stockQueryList_mini'),
 								path: '/pagesB/stockQuery/stockQuery',
-								color: '#00aaff',
+								color: '#ff87a3',
 								isShelf: true
 							},
 							{
@@ -210,7 +186,7 @@
 								icon: 'replenishment',
 								auth: this.$hasPermissions('M_stockPut_mini'),
 								path: '/pagesA/digitalShelf/stockPut',
-								color: '#aa55ff',
+								color: '#55aaff',
 								isShelf: true
 							},
 							{
@@ -218,7 +194,7 @@
 								icon: 'settlement',
 								auth: this.$hasPermissions('M_settlementRecord_mini'),
 								path: '/pagesA/digitalShelf/settlementRecord/settlementRecord',
-								color: '#55aa00',
+								color: '#55aa7f',
 								isShelf: true
 							},
 							{
@@ -226,12 +202,36 @@
 								icon: 'payrecord',
 								auth: this.$hasPermissions('M_settlementManage_mini'),
 								path: '/pagesA/digitalShelf/settlementManage/settlementManage',
-								color: '#ff5500',
+								color: '#ff9777',
+								isShelf: true
+							},
+							{
+								text: '编码取货',
+								icon: 'ziyuanxhdpi',
+								auth: this.userInfo && this.userInfo.sysUserFlag == '1',
+								path: '#quhuo1',
+								color: '#2196f3',
+								isShelf: true
+							},
+							{
+								text: '扫码取货',
+								icon: 'saoma1',
+								auth: this.userInfo && this.userInfo.sysUserFlag == '1',
+								path: '#quhuo0',
+								color: '#ffaa00',
+								isShelf: true
+							},
+							{
+								text: 'VIN查询历史',
+								icon: 'lishijilu',
+								auth: this.hasLogin,
+								path: '/pagesA/vinRecord/vinRecord',
+								color: '#abc4ff',
 								isShelf: true
 							},
 							{
 								text: '联系汽配商',
-								icon: 'phone',
+								icon: 'lianxidianhua',
 								auth: this.hasLogin&&this.dealerPhone,
 								path: '#call',
 								color: '#00aaff',
@@ -251,14 +251,14 @@
 								icon: 'zhibaodan',
 								auth: this.$hasPermissions('M_creatWarranty_mini'),
 								path: '/pagesA/qualityPolicy/creatOrder',
-								color: '#5555ff'
+								color: '#056cd9'
 							},
 							{
 								text: '质保单查询',
 								icon: 'ordersearch',
 								auth: this.$hasPermissions('M_searchWarranty_mini'),
 								path: '/pagesA/qualityPolicy/searchOrder',
-								color: '#ff557f'
+								color: '#ffaa7f'
 							},
 						],
 					},
@@ -274,21 +274,21 @@
 								icon: 'employee',
 								auth: this.$hasPermissions('M_employee_mini'),
 								path: '/pages/storeManage/personnel',
-								color: '#0055ff'
+								color: '#ff9d7c'
 							},
 							{
 								text: '岗位权限',
 								icon: 'job',
 								auth: this.$hasPermissions('M_roleSetting_mini'),
 								path: '/pages/storeManage/roleSetting/roleSetting',
-								color: '#55aa00'
+								color: '#aaaaff'
 							},
 							{
 								text: '价格显示设置',
 								icon: 'permission',
 								auth: this.$hasPermissions('M_priceShow_mini')&&this.showPriceSet,
 								path: '/pages/storeManage/priceSetting/priceSetting',
-								color: '#ff5500',
+								color: '#55aaff',
 								isShelf: true
 							},
 						],
@@ -338,6 +338,12 @@
 				if(row.text == '促销'){
 					uni.$emit('refashProm')
 				}
+				if(row.text == '购物车'){
+					uni.navigateTo({
+						url:'/pagesB/cart/index',
+						target: 'page'
+					})
+				}
 				if(row.text == '扫描VIN'){
 					this.openCamera()
 				}else{
@@ -558,7 +564,7 @@
 	.header-box{
 		z-index: 5;
 		padding: 0em 1em;
-		background: #066cff;
+		background: #03A9F4;
 		 .title{
 			 padding: 0;
 		 }
@@ -594,7 +600,7 @@
 				content: '';
 				border-radius: 0 0 50% 50%;
 				/*分别对应 左上 右上 右下 左下 可以修改成其它颜色*/
-			    background: linear-gradient(to bottom, #066cff, #1d77ff);  
+			    background: linear-gradient(to bottom, #03A9F4, #02a6ec);  
 			}
 			.userCard{
 				position:relative;

+ 7 - 1
pages/promo/index.vue

@@ -21,7 +21,7 @@
 				 </view>
 			</scroll-view>     
 		</view>
-		<u-tabbar :list="vuex_tabBarList" :before-switch="beforeSwitch" :midButton="vuex_tabBarList.length==5"></u-tabbar>
+		<u-tabbar :list="vuex_tabBarList" :mid-button-size="80" :before-switch="beforeSwitch" :midButton="vuex_tabBarList.length==5"></u-tabbar>
 	</view>
 </template>
 
@@ -120,6 +120,12 @@
 				if(row.text == '促销'){
 					uni.$emit('refashProm')
 				}
+				if(row.text == '购物车'){
+					uni.navigateTo({
+						url:'/pagesB/cart/index',
+						target: 'page'
+					})
+				}
 				if(row.text == '扫描VIN'){
 					this.openCamera()
 				}else{

+ 7 - 1
pages/videos/index.vue

@@ -36,7 +36,7 @@
 					</swiper-item>
 				</swiper>
 		</view>
-		<u-tabbar :list="vuex_tabBarList" :before-switch="beforeSwitch" :midButton="vuex_tabBarList.length==5"></u-tabbar>
+		<u-tabbar :list="vuex_tabBarList" :mid-button-size="80" :before-switch="beforeSwitch" :midButton="vuex_tabBarList.length==5"></u-tabbar>
 	</view>
 </template>
 
@@ -180,6 +180,12 @@
 				if(row.text == '促销'){
 					uni.$emit('refashProm')
 				}
+				if(row.text == '购物车'){
+					uni.navigateTo({
+						url:'/pagesB/cart/index',
+						target: 'page'
+					})
+				}
 				if(row.text == '扫描VIN'){
 					this.openCamera()
 				}else{

+ 261 - 226
pagesA/digitalShelf/choosePart.vue

@@ -1,9 +1,10 @@
 <template>
 	<view class="flex flex_column choosePartByVin">
+		<sklineHeader title="选择配件"></sklineHeader>
 		<!-- 头部车辆信息 -->
 		<div class="flex align-center cpb_header" v-if="carInfo">
 			<div>
-				<u-image border-radius="30" :src="carInfo.icon" width="100" height="100" bg-color="#EBEBEB" ></u-image>
+				<image :src="carInfo.icon" style="width: 100rpx;height: 100rpx;border-radius: 10px;background-color: #fff;"></image>
 			</div>
 			<div>
 				<div class="flex align-center">
@@ -18,100 +19,125 @@
 		<!-- 配件列表 -->
 		<div class="cpb_middle flex">
 			<div class="slider-bar">
-				<div class="tabs">
-					<view :class="[curLeve2 == 'all' ? 'active' : '']" @click="selLeve2('all')">
+				<scroll-view type="list" style="width:100%;height:100%;" scroll-y>
+					<view class="tabs-item" :class="[curLeve2 == 'all' ? 'active' : '']" @click="selLeve2('all')">
 						全部
 					</view>
-					<view :class="[curLeve2 == item.id ? 'active' : '']" v-for="(item, index) in leve2Data" :key="index" @click="selLeve2(item.id)">
+					<view class="tabs-item" :class="[curLeve2 == item.id ? 'active' : '']" v-for="(item, index) in leve2Data" :key="index" @click="selLeve2(item.id)">
 						{{item.label}}
 					</view>
-				</div>
+				</scroll-view>
 			</div>
 			<div class="right-list">
 				<scroll-view
 				class="right-list-content" 
 				scroll-y 
+				type="custom"
 				@scrolltolower="onreachBottom">
 					<!-- vin适配配件 -->
-					<view>
-						<view class="nav-right-title">适配推荐</view>
-						<vinPartItem 
-						:list="vinPartList" 
-						:commonPartCode="commonPartCodeList" 
-						:configPrice="configPrice"
-						:showCarPrice="showCarPrice"
-						:showCostPrice="showCostPrice"
-						:showShelfDetial="showShelfDetial"
-						:showNonShelfDetial="showNonShelfDetial"
-						:priceShowVal="priceShowVal"
-						@viewImg="viewImg"
-						@openPrice="openPriceModal"
-						@addPart="addPart"
-						@updateVinNums="updateVinNums"
-						></vinPartItem>
-						 <view v-if="vinPartList&&vinPartList.length==0">
-						 	<u-empty v-if="vinStatus!='loading'" :src="`/static/nodata.png`" icon-size="180" text="暂无适配推荐" mode="list" :margin-top="30"></u-empty>
-						 </view>
-						 <view style="padding: 20upx;" v-if="vinStatus=='loading'" >
-						 	<u-loadmore :status="vinStatus" />
-						 </view>
-					</view>
+					<sticky-section>
+						<sticky-header>
+							<view class="nav-right-title">适配推荐</view>
+						</sticky-header>
+						<list-view>
+						   <vinPartItem
+						   v-for="(item,index) in vinPartList"
+						   :key="index"
+						   :list="item" 
+						   :commonPartCode="commonPartCodeList" 
+						   :configPrice="configPrice"
+						   :showCarPrice="showCarPrice"
+						   :showCostPrice="showCostPrice"
+						   :showShelfDetial="showShelfDetial"
+						   :showNonShelfDetial="showNonShelfDetial"
+						   :priceShowVal="priceShowVal"
+						   @viewImg="viewImg"
+						   @openPrice="openPriceModal"
+						   @addPart="addPart"
+						   @updateVinNums="updateVinNums"
+						   ></vinPartItem>
+						    <view v-if="vinPartList&&vinPartList.length==0">
+						   	 <sklineTemp v-if="vinStatus!='loading'" text="暂无适配推荐"/>
+						    </view>
+						    <view style="padding: 20upx;" v-if="vinStatus=='loading'" >
+								<uni-load-more :status="vinStatus" />
+						    </view>
+						</list-view>
+				    </sticky-section>
+					 
 					<!-- 其它配件 -->
-					<view class="nav-right-title flex align_center justify_between" v-if="vinStatus!='loading'" @click="showOther=!showOther">
-						其它配件
-						<text>{{showOther?'隐藏':'展开'}}</text>
-					</view>
-					<otherPartItem
-					v-if="showOther"
-					:list="partList" 
-					:configPrice="configPrice"
-					:showCarPrice="showCarPrice"
-					:showCostPrice="showCostPrice"
-					:showShelfDetial="showShelfDetial"
-					:priceShowVal="priceShowVal"
-					@viewImg="viewImg"
-					@openPrice="openPriceModal"
-					@addPart="addPart"
-					@updateNums="updateNums"
-					></otherPartItem>
-					<view v-if="partList&&partList.length==0">
-						<u-empty v-if="status!='loading'" :src="`/static/nodata.png`" icon-size="180" :text="noDataText" mode="list" :margin-top="150"></u-empty>
-					</view>
-					<view style="padding: 20upx;" v-if="showOther">
-						<u-loadmore v-if="total>pageSize || status=='loading'" :status="status" />
-					</view>
+					<sticky-section>
+						<sticky-header>
+							<view class="nav-right-title flex align_center justify_between" @click="showOther=!showOther">
+								其它配件 <text>{{showOther?'隐藏':'展开'}}</text>
+							</view>
+						</sticky-header>
+						<list-view v-if="showOther">
+							<otherPartItem
+							v-for="(item,index) in partList"
+							:key="index"
+							:list="item" 
+							:configPrice="configPrice"
+							:showCarPrice="showCarPrice"
+							:showCostPrice="showCostPrice"
+							:showShelfDetial="showShelfDetial"
+							:priceShowVal="priceShowVal"
+							@viewImg="viewImg"
+							@openPrice="openPriceModal"
+							@addPart="addPart"
+							@updateNums="updateNums"
+							></otherPartItem>
+							<view v-if="total==0">
+								<sklineTemp v-if="status!='loading'" :text="noDataText"/>
+							</view>
+							<view style="padding: 20upx;" v-if="showOther&&total>0">
+								<uni-load-more :status="status"/>
+							</view>
+						</list-view>
+					</sticky-section>
 				</scroll-view>
 			</div>
 		</div>
 		<!-- 底部提交按钮 -->
-		<div class="cpb_footer flex align-center" :class="isIphoneXup?'isIPXup':''">
-			<div>
-				<div class="cpb_cart" @click="openCart">
-					<u-badge type="error" :count="cartNums" :offset="[-4,-4]" bgColor="#FF5200"></u-badge>
-					<u-image width="44" height="44" :src="`/pagesA/static/icon_shopping@3x.png`"></u-image>
+		<sklineFooter></sklineFooter>
+		<div class="cpb_footer flex align-center flex_column">
+			<view class="flex align-center">
+				<div>
+					<div class="cpb_cart" @click="openCart">
+						<uni-badge type="error" :text="cartNums" :style="{position:'absolute',right:'3px',top:'3px'}" absolute="rightTop" size="small"></uni-badge>
+						<image style="width: 44rpx;height: 44rpx;" :src="`/pagesA/static/icon_shopping@3x.png`"></image>
+					</div>
 				</div>
-			</div>
-			<view>
-				<!-- 合计:<text>¥{{totalAmount}}</text> -->
-				<view style="font-size: 0.8em;color: dodgerblue;" v-if="dealerPhone" @click="callPhone()">
-					<u-icon size="30" name="phone" color="dodgerblue"></u-icon><text>联系汽配商</text>
+				<view>
+					<view class="flex align_center" v-if="dealerPhone" @click="callPhone()">
+						<uni-icons size="18" type="phone" color="dodgerblue"></uni-icons> <view class="btnlink">联系汽配商</view>
+					</view>
 				</view>
+				<div>
+					<button class="submitBtn" type="primary" :loading="saveLoading" @click="submitForm">确认拿货</button>
+				</div>
 			</view>
-			<div>
-				<u-button type="primary" :loading="saveLoading" @click="submitForm" :custom-style="{background:'#066cff',fontSize:'32rpx'}" shape="circle">确认拿货</u-button>
-			</div>
+			<view :style="{height:safeAreaBottom+'px'}"></view>
 		</div>
 		<!-- 已选配件 购物车 -->
-		<div class="cpb_cart-mask" v-if="showCart">
+		<page-container
+		:show="showCart" 
+		:round="true"
+		:z-index="10"
+		position="bottom" 
+		custom-style="height:70%"
+		@afterleave="closeCart">
 			<div class="cpb_cart-box">
-				<div class="cpb_close flex align-center justify_center" @click="showCart=false"><u-icon name="close"></u-icon></div>
+				<div class="cpb_close flex align_center justify_center" @click="showCart=false">
+					<uni-icons size="26" type="close"></uni-icons>
+				</div>
 				<div class="cpb_cart-tit">
 					已选配件
 				</div>
-				<div class="cpb_cart-list">
+				<scroll-view type="list" scroll-y="true" class="cpb_cart-list">
 					<view class="nav-right-item flex" v-for="(item, index) in partListData" :key="item.productSn">
 						<view class="uni-col-2">
-							<u-image border-radius="30" :src="item.images" width="150" height="150" bg-color="#EBEBEB" ></u-image>
+							<u-image :src="item.images+'?x-oss-process=image/resize,m_fixed,h_75,w_75,color_ffffff'" border-radius="30" width="150" height="150" bg-color="#EBEBEB" ></u-image>
 						</view>
 						<view class="item-info uni-col-10">
 							<view class="item-name">
@@ -125,7 +151,7 @@
 										<text class="item-detail-text" v-if="item.affiliation!='NON_SHELF'">库存:{{item.currentInven?item.currentInven:0}} {{item.unit}}</text>
 									</view>
 									<view class="flex" v-if="item.productTypeSn=='543766811373752320'" style="padding-bottom: 5px;">
-										<u-tag :text="item.origCode" mode="light" borderColor="#ffffff" shape="circle" type="success"></u-tag>
+										<uni-tag :text="item.origCode" inverted :circle="true" type="success"></uni-tag>
 									</view>
 									<view class="flex justify_between">
 										<view class="item-detail-text flex_1">
@@ -133,28 +159,31 @@
 											<text class="item-price" :style="{color:!item.cost?'#666':''}" v-if="showCostPrice">{{item.cost?'¥'+item.cost:'暂无价格'}}</text>
 										</view>
 										<view class="item-detail-text">
-											<u-number-box @change="updateCartNums" @blur="updateCartNums" v-model="item.qty" :index="'cart_'+item.productSn" :min="0" :max="item.currentInven||999999"></u-number-box>
+											<uni-number-box @change="e=>updateCartNums({value:e,index:'cart_'+item.productSn})" v-model="item.qty" :index="'cart_'+item.productSn" :min="0" :max="item.currentInven||999999"></uni-number-box>
 										</view>
 									</view>
 								</view>
 							</view>
 						</view>
 					</view>
-				</div>
+				</scroll-view>
+				<sklineFooter></sklineFooter>
 			</div>
-		</div>
+		</page-container>
 		<!-- 去认证 -->
-		<u-popup v-model="showPopup" mode="center" :border-radius="20" closeable>
-			<view style="background-color: #fff;padding:1rem;">
-				<u-image width="533" height="415" src="/static/authimg.jpg"></u-image>
+		<uni-popup ref="showPopup" type="center" :is-mask-click="false">
+			<view class="popu-modal">
+				<view class="popu-close" @click="$refs.showPopup.close()"><uni-icons type="close" size="26"></uni-icons></view>
+				<image width="533" height="415" style="width: 533rpx;height: 415rpx;" src="/static/authimg.jpg"></image>
 				<view style="padding-top:1rem;" class="flex justify_center">
-					<u-button @click="toAuthStore()" shape="circle" :custom-style="{background:'#066cff',color:'#fff',width:'350rpx'}">开始认证</u-button>
+					<button @click="toAuthStore()" shape="circle" :style="{background:'#066cff',color:'#fff',width:'350rpx'}">开始认证</button>
 				</view>
 			</view>
-		</u-popup>
+		</uni-popup>
 		<!-- 价格查看 -->
-		<u-popup v-model="showPriceModal" mode="center" length="80%" closeable>
-			<view class="show-price-modal" v-if="tempData">
+		<uni-popup ref="showPriceModal" type="center">
+			<view class="show-price-modal popu-modal" v-if="tempData">
+				<view class="popu-close" @click="$refs.showPriceModal.close()"><uni-icons type="close" size="26"></uni-icons></view>
 				<view class="itemlist">
 					<text>产品编码</text>
 					<text>{{tempData.code||'--'}}</text>
@@ -188,7 +217,7 @@
 					</view>
 				</view>
 			</view>
-		</u-popup>
+		</uni-popup>
 	</view>
 </template>
 
@@ -197,10 +226,16 @@
 	import { scanVinLogCopy } from '@/api/car'
 	import vinPartItem from './components/vinPartItem.vue'
 	import otherPartItem from './components/otherPartItem.vue'
+	import sklineHeader from '@/components/skline/sklineHeader.vue'
+	import sklineTemp from '@/components/skline/sklineTemp.vue'
+	import sklineFooter from '@/components/skline/sklineFooter.vue'
 	export default {
 		components:{
 			vinPartItem,
-			otherPartItem
+			otherPartItem,
+			sklineHeader,
+			sklineTemp,
+			sklineFooter
 		},
 		data() {
 			return {
@@ -215,7 +250,7 @@
 				vinStatus: 'loading',
 				noDataText: '暂无配件',
 				pageNo: 1,
-				pageSize: 10,
+				pageSize: 20,
 				total: 0, // 列表总数
 				noMore: false ,// 没有更多
 				showCart: false, // 购物车
@@ -231,7 +266,8 @@
 				priceShowVal: null, // 是否可以查看所有价格
 				showCarPrice: false, // 显示车主价
 				showCostPrice: false, // 显示成本价
-				tempData: null // 临时数据
+				tempData: null ,// 临时数据
+				safeAreaBottom:0
 			}
 		},
 		computed:{
@@ -281,6 +317,8 @@
 			}
 		},
 		onLoad(opts) {
+			this.safeAreaBottom = uni.getSystemInfoSync().safeAreaInsets.bottom
+			
 			this.theme = getApp().globalData.theme
 			this.vinNumber = opts.vinNumber
 			this.carInfo = opts.carList?JSON.parse(decodeURIComponent(opts.carList)):null
@@ -294,10 +332,18 @@
 			if(this.userInfo.sysUserFlag == '0'){
 				// 未认证
 				if(!this.storeApply || this.storeApply&&!this.storeApply.auditStatus){
-					this.showPopup = true
+					this.$refs.showPopup.open()
 				}
 			}
 		},
+		onUnload() {
+			this.carList = null
+			this.partList = null// 配件列表
+			this.partListData = null // 已选配件
+			this.vinPartList = null
+			this.vinCode = null
+			this.commonPartCodeList = null
+		},
 		onShow() {
 			this.$store.state.vuex_shelfChoosePart = []
 			this.getShowPriceType()
@@ -335,7 +381,7 @@
 						row.affiliation = "SHELF"
 					}
 					this.tempData = row
-					this.showPriceModal = true
+					this.$refs.showPriceModal.open()
 				}
 			},
 			scanVinLogCopy(){
@@ -344,7 +390,7 @@
 				})
 			},
 			toAuthStore(){
-				this.showPopup = false
+				this.$refs.showPopup.close()
 				uni.redirectTo({
 					url: '/pages/storeManage/storeAuth'
 				})
@@ -425,30 +471,26 @@
 					console.log(res,'获取数字货架配件列表')
 			 		uni.hideLoading()
 			 		if(res.status == 200){
-			 			let list = res.data.list
-			 			if (list && list.length){
-			 				// 分页 拼接数据
-			 				if (_this.pageNo != 1) {
-			 					_this.partList = _this.partList ? _this.partList.concat(this.fiterChecked(list)) : this.fiterChecked(list)
-			 				} else {
-			 					_this.partList = this.fiterChecked(list)
-			 				}
-			 				this.total = res.data.count
-			 				if (_this.partList.length == res.data.count) {
-			 					_this.status = 'nomore'
-			 				} else {
-			 					_this.status = 'loadmore'
-			 				}
-			 			} else {
-			 				_this.partList = list || []
-			 				this.total = 0
-			 				_this.status = 'nomore'
-			 			}
-			 			_this.noDataText = '暂无配件'
+						_this.total = Number(res.data.count)
+						if(_this.total>0){
+							const list = res.data.list || []
+							// 追加数据
+							_this.partList.push(_this.fiterChecked(list))
+							// 判断是否最后一页
+							const maxPages = Math.ceil(_this.total / _this.pageSize)
+							if(this.pageNo >= maxPages){
+								_this.status = 'noMore'
+								_this.noDataText = '没有更多了'
+							}
+						}else{
+							_this.partList = []
+							_this.status = 'noMore'
+							_this.noDataText = '暂无配件'
+						}
+			 			
 			 		}else{
-			 			_this.status = 'loadmore'
+			 			_this.status = 'more'
 			 			_this.partList = []
-			 			this.total = 0
 			 			_this.noDataText = res.message ? res.message : '网络似乎出错了,请稍后再试'
 			 		}
 			 	})
@@ -466,14 +508,17 @@
 				})
 				this.vinStatus = 'loading'
 				getShelfQueryList(params).then(res => {
-					this.vinPartList = this.fiterChecked(res.data || []) 
-					this.vinStatus = 'nomore'
+					const ret = this.fiterChecked(res.data || []) 
+					for(let i=0;i<ret.length;i=i+this.pageSize){
+						this.vinPartList.push(ret.slice(i,(i+this.pageSize)>ret.length?ret.length:(i+this.pageSize)))
+					}
+					this.vinStatus = 'noMore'
 					uni.hideLoading()
 				})
 			},
 			// 过滤已选择的
 			fiterChecked (list){
-				this.partListData.map(item => {
+				this.partListData.forEach(item => {
 					let p = list.find(k => {
 						return k.productSn == item.productSn
 					})
@@ -490,21 +535,30 @@
 					this.pageNo++
 					this.getShelfProductList()
 				}else{
-					this.status = "nomore"
+					this.status = "noMore"
 				}
 			},
+			// 根据productSn查找
+			getItemById(sn,type){
+				const a = this[type].findIndex(k => k.find(s=> s.productSn == sn))
+				const b = a>=0 ? this[type][a].findIndex(s=> s.productSn == sn) : -1
+				return {p:a,s:b}
+			},
+			// 更新页面列表数量状态
+			updateListData(sn,type,qty,checked){
+				const row = this.getItemById(sn,type)
+				if(row.p>=0 && row.s>=0){
+					this[type][row.p][row.s].checked = checked
+					this[type][row.p][row.s].qty = qty
+					this[type][row.p].splice()
+				} 
+			},
 			// 添加到购物车
 			addPart(item,type){
 				if(type == 'vin'){
-					const idx = this.vinPartList.findIndex(k => k.id == item.id)
-					this.vinPartList[idx].checked = true
-					this.vinPartList[idx].qty = 1
-					this.vinPartList.splice()
+					this.updateListData(item.productSn,'vinPartList',1,true)
 				}else{
-					const idx = this.partList.findIndex(k => k.id == item.id)
-					this.partList[idx].checked = true
-					this.partList[idx].qty = 1
-					this.partList.splice()
+					this.updateListData(item.productSn,'partList',1,true)
 				}
 				// 已选列表
 				this.partListData.unshift({
@@ -526,18 +580,21 @@
 			},
 			// 更新配件列表数量
 			updatePartList(data,type){
-				const prow = this[type].find(item => item.productSn == data.index)
 				const index = this.partListData.findIndex(item => item.productSn == data.index)
 				// 删除
 				if(!data.value){
-					prow.checked = false
+					// 删除页面上的数量
+					this.updateListData(data.index,type,0,false)
+					// 删除已选列表
 					if(index>=0){
 						this.partListData.splice(index,1)
 					}
+					// 没有已选,关闭弹框
 					if(this.partListData.length==0){
 						this.showCart = false
 					}
 				}else{
+					// 更新数量
 					this.partListData[index].qty = data.value
 					this.partListData.splice()
 				}
@@ -563,19 +620,9 @@
 					}
 				}
 				// 同步更新Vin适配配件列表上的
-				const vinprow = this.vinPartList.find(item => 'cart_'+item.productSn == data.index)
-				if(vinprow){
-					vinprow.qty = data.value
-					vinprow.checked = !!data.value
-					this.vinPartList.splice()
-				}
+				this.updateListData(data.index.split('_')[1],'vinPartList',data.value,!!data.value)
 				// 同步更新其它配件列表上的
-				const prow = this.partList.find(item => 'cart_'+item.productSn == data.index)
-				if(prow){
-					prow.qty = data.value
-					prow.checked = !!data.value
-					this.partList.splice()
-				}
+				this.updateListData(data.index.split('_')[1],'partList',data.value,!!data.value)
 			},
 			// 打开购物车
 			openCart(){
@@ -588,6 +635,10 @@
 					})
 				}
 			},
+			// 关闭购物车
+			closeCart(){
+				this.showCart = false
+			},
 			// 格式化数据
 			formatData(){
 				const partList = []
@@ -614,7 +665,7 @@
 				if(this.userInfo.sysUserFlag == '0'){
 					// 未认证
 					if(!this.storeApply || this.storeApply&&(!this.storeApply.auditStatus || this.storeApply.auditStatus == 'REFUSE')){
-						this.showPopup = true
+						this.$refs.showPopup.open()
 					}
 					// 认证通过
 					if(this.storeApply&&this.storeApply.auditStatus=='WAIT'){
@@ -657,14 +708,16 @@
 					shelfOrderFlowCreate(params).then(res => {
 						console.log(res,'shelfOrderFlowCreate')
 						if(res.status == 200){
+							this.$store.state.vuex_tempData = res.data
 							// 提交成功
 							uni.redirectTo({
-								url:"/pagesA/digitalShelf/choosePartResult?data="+encodeURIComponent(JSON.stringify(res.data))+"&state=1"
+								url:"/pagesA/digitalShelf/choosePartResult?state=1"
 							})
 						}else{
+							this.$store.state.vuex_tempData = {shelfOrder:{remindMessage:res.message}}
 							// 或失败
 							uni.redirectTo({
-								url:"/pagesA/digitalShelf/choosePartResult?data="+encodeURIComponent(JSON.stringify({shelfOrder:{remindMessage:res.message}}))+"&state=0"
+								url:"/pagesA/digitalShelf/choosePartResult?state=0"
 							})
 						}
 						this.saveLoading = false
@@ -676,6 +729,7 @@
 </script>
 
 <style lang="less">
+@import '/flex.css';
 .choosePartByVin{
 	height: 100vh;
 	.cpb_header{
@@ -730,8 +784,31 @@
 			margin-left: 10rpx;
 		}
 	}
-	.show-price-modal{
+	.popu-modal{
+		width: 300px;
 		padding: 30px 20px;
+		background-color: #fff;
+		border-radius: 15px;
+		position: relative;
+		.popu-close{
+			position: absolute;
+			right: 6px;
+			top: 6px;
+			width: 30px;
+			height: 30px;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+		}
+		.popu-title{
+			font-size: 18px;
+			font-weight: bold;
+			color: #333;
+			text-align: center;
+			margin-bottom: 20px;
+		}
+	}
+	.show-price-modal{
 		.itemlist{
 			display: flex;
 			align-items: center;
@@ -749,26 +826,23 @@
 	}
 	.cpb_middle{
 		flex-grow: 1;
-		padding-top: 10rpx;
+		padding-top: 4rpx;
 		overflow: auto;
 		.slider-bar{
 			width: 25%;
 			background: #F5F6F7;
 			height: 100%;
-			overflow: auto;
-			.tabs{
-				> view{
-					border-left: 6rpx solid #F5F6F7;
-					padding: 20rpx 10rpx;
-					font-size: 28rpx;
-					color: #666E75;
-					text-align: center;
-				}
-				.active{
-					border-color: #0485F6;
-					color: #0485F6;
-					background: #fff;
-				}
+			.tabs-item{
+				border-left: 6rpx solid #F5F6F7;
+				padding: 20rpx 10rpx;
+				font-size: 28rpx;
+				color: #666E75;
+				text-align: center;
+			}
+			.active{
+				border-color: #0485F6;
+				color: #0485F6;
+				background: #fff;
 			}
 		}
 		.right-list{
@@ -783,69 +857,42 @@
 					font-weight: bold;
 					padding: 20upx 25upx;
 					border-bottom: 2rpx solid #eee;
+					background: #fff;
 					> text{
 						color: #9E9E9E;
 						font-weight: normal;
 					}
 				}
-				.nav-right-item{
-					padding: 15upx 25upx;
-					border-bottom: 2rpx solid #f5f5f5;
-					.item-info{
-						padding-left: 20upx;
-						flex-grow: 1;
-						.item-name{
-							font-size: 30upx;
-							color: #191919;
-							display: flex;
-							align-items: center;
-							>image{
-								width: 38rpx;
-								height: 38rpx;
-								margin-right: 10rpx;
-							}
-							>text{
-								flex: 1;
-								word-break: break-all;
-							}
-						}
-						.item-detail{
-							.item-detail-info{
-								padding: 10upx 0 4upx;
-								/deep/ .u-tag{
-									word-break: break-all;
-									font-size: 28rpx;
-									color: #0fab04eee;
-									border: 0;
-									padding: 0.2rem 0.3rem;
-								}
-								> view{
-									padding-bottom: 10rpx;
-									align-items: center;
-									.item-detail-text{
-										color: #999;
-										.phtxt{
-											color: #0485F6;
-											font-size: 28upx;
-										}
-										.item-price{
-											color: #FB1E1E;
-											font-size: 28upx;
-										}
-									}
-								}
-							}
-						}
-					}
-				}
 			}
 		}
 	}
 	.cpb_footer{
-		padding: 20rpx;
 		background-color: #fff;
 		align-items: center;
 		justify-content: space-between;
+		z-index: 1000;
+		position: fixed;
+		width: 100%;
+		left: 0;
+		bottom: 0;
+		.btnlink{
+			font-size: 14px;
+			color: #3390e2;
+		}
+		> view{
+			width: 100%;
+			&:first-child{
+				padding: 0 20rpx;
+				justify-content: space-between;
+				height: 50px;
+				align-items: center;
+				.submitBtn{
+					background-color: #FB1E1E;
+					font-size: 28rpx;
+					border-radius: 100px;
+				}
+			}
+		}
 		.cpb_cart{
 			width: 84rpx;
 			height: 84rpx;
@@ -862,33 +909,23 @@
 			}
 		}
 	}
-	.cpb_cart-mask{
-		position: fixed;
-		width: 100%;
-		background: rgba(0,0,0,0.5);
-		z-index: 900;
-		bottom: 120rpx;
-		top: 0;
-	}
 	.cpb_cart-box{
 		background-color: #fff;
-		position: absolute;
 		width: 100%;
-		z-index: 1000;
-		bottom: 0;
+		height: 100%;
 		padding: 0;
 		border-radius: 30rpx 30rpx 0 0;
-		max-height: 70vh;
 		display: flex;
 		flex-direction: column;
 		.cpb_close{
 			position: absolute;
-			top: 10rpx;
-			right: 20rpx;
+			top: 3rpx;
+			right: 15rpx;
 			width: 70rpx;
 			height: 70rpx;
 			font-size: 32rpx;
 			color: #999;
+			z-index: 100;
 		}
 		.cpb_cart-tit{
 			text-align: center;
@@ -897,16 +934,13 @@
 			border-bottom: 1px solid #eee;
 		}
 		.cpb_cart-list{
-			padding: 20rpx 30rpx;
-			overflow: auto;
 			flex-grow: 1;
-			> view{
-				margin-bottom: 20rpx;
+			.nav-right-item{
+				padding: 10px;
 				border-bottom:2rpx solid #eee;
 			}
 			.item-name{
 				font-size: 30rpx;
-				margin-bottom: 5px;
 				.item-tempPart{
 					background: #0055ff;
 					color: #fff;
@@ -917,12 +951,13 @@
 			}
 			.item-info{
 				flex-grow: 1;
-				padding-left: 0.8em;
+				padding-left: 10px;
+				width: 80%;
 			}
 			.item-detail{
 				.item-detail-info{
 					padding: 10upx 0 4upx;
-					/deep/ .u-tag{
+					/deep/ .uni-tag{
 						word-break: break-all;
 						font-size: 28rpx;
 						color: #0fab04eee;
@@ -930,7 +965,7 @@
 						padding: 0.2rem 0.3rem;
 					}
 					> view{
-						padding-bottom: 20rpx;
+						padding-bottom: 10rpx;
 						align-items: center;
 						.item-detail-text{
 							color: #999;

+ 23 - 14
pagesA/digitalShelf/choosePartResult.vue

@@ -4,8 +4,7 @@
 			<view class="statusH">
 				<view class="flex flex_column align_center">
 					<view class="status-row">
-						<u-icon :name="statusIcon" size="42" color="#fff"> 
-						</u-icon>
+						<u-icon :name="statusIcon" size="42" color="#fff"> </u-icon>
 						<text>{{statusText}}</text>
 					</view>
 					<view class="messageText" v-html="info&&info.shelfOrder&&info.shelfOrder.remindMessage||''"></view>
@@ -168,31 +167,41 @@
 			   redPacketData: null
 		   }
 	   },
+	   onUnload() {
+		 this.$store.state.vuex_tempData = null
+	   },
 	   onLoad(option) { 
-		  this.info = option.data?JSON.parse(decodeURIComponent(option.data)):null
 		  this.state = option.state
-		  console.log(this.info,'-------------')
-		  if(option.state==1){
+		  // 更改标题栏背景色
+		  uni.setNavigationBarColor({
+		  	frontColor: '#ffffff',
+		  	backgroundColor: option.state==1 ? '#066cff':'#ff5500',
+		  })
+		  this.info = this.$store.state.vuex_tempData
+	   },
+	   onShow(){
+		   uni.showLoading({
+		   	title: '加载中...'
+		   })
+		   if(this.state==1){
 			  this.statusText = '拿货成功';
 			  this.statusIcon = 'checkmark-circle';
 			  // 获取配件列表
 			  this.partList = this.info.shelfOrder ? this.info.shelfOrder.shelfOrderDetailList : [];
+			  this.current = this.partList.length ? 0 : 1;
+			  
 			  this.tempPartList = this.info.shelfTempBill ? this.info.shelfTempBill.detailList : [];
 			  this.shelfOrderSn = this.info.shelfOrder ? this.info.shelfOrder.shelfOrderSn : '';
-			  this.current = this.partList.length ? 0 : 1;
 			  
 			  // 是否有红包活动奖励
 			  this.getOrderRedReward()
-		  }else{
+		   }else{
 			  this.statusText = '拿货失败'
 			  this.statusIcon = 'close-circle'
-		  }
-		  
-		  // 更改标题栏背景色
-		  uni.setNavigationBarColor({
-		  	frontColor: '#ffffff',
-		  	backgroundColor: option.state==1 ? '#066cff':'#ff5500',
-		  })
+		   }
+		   this.$nextTick(()=>{
+			  uni.hideLoading()
+		   })
 	   },
 	   computed: {
 		   totalNums(){

+ 104 - 22
pagesA/digitalShelf/components/otherPartItem.vue

@@ -1,8 +1,9 @@
 <template>
 	<block>
-		<view class="nav-right-item flex" v-for="(item, index) in list" :key="item.productSn">
+		<view class="nav-right-item flex" v-for="item in list" :key="item.productSn">
 			<view class="uni-col-2">
-				<u-image :src="item.images+'?x-oss-process=image/resize,m_fixed,h_120,w_120,color_ffffff'" @click="viewImg(item)" border-radius="30" width="100" height="100" bg-color="#EBEBEB" ></u-image>
+				<u-image :src="item.images+'?x-oss-process=image/resize,m_fixed,h_60,w_60,color_ffffff'"
+					@click="viewImg(item)" border-radius="30" width="100" height="100" bg-color="#EBEBEB"></u-image>
 			</view>
 			<view class="item-info uni-col-10">
 				<view class="item-name">
@@ -12,26 +13,38 @@
 					<view class="item-detail-info">
 						<view class="flex justify_between">
 							<text class="item-detail-text flex_1">{{item.code}}</text>
-							<text class="item-detail-text">库存:{{item.currentInven?item.currentInven:0}} {{item.unit}}</text>
+							<text class="item-detail-text" style="width: 50%;text-align: right;">库存:{{item.currentInven?item.currentInven:0}}{{item.unit}}</text>
 						</view>
 						<view class="flex" v-if="item.productTypeSn=='543766811373752320'">
-							<u-tag :text="item.origCode" mode="light" borderColor="#ffffff" shape="circle" type="success"></u-tag>
+							<uni-tag :text="item.origCode" inverted circle type="success"></uni-tag>
 						</view>
 						<view class="flex justify_between">
-							<view class="item-detail-text flex_1" @click="openPriceModal(item,0,showShelfDetial)">
-								<text class="item-price" :style="{color:!item.price?'#666':''}" v-if="showCarPrice&&configPrice&&configPrice.shelf_price_show == '1'">{{item.price?'¥'+item.price:'暂无价格'}}</text>
-								<text class="item-price" :style="{color:!item.cost?'#666':''}" v-if="showCostPrice&&configPrice&&configPrice.shelf_cost_show == '1'">{{item.cost?'¥'+item.cost:'暂无价格'}}</text>
-								<u-icon name="arrow-right" v-if="priceShowVal&&showShelfDetial"></u-icon>
+							<view class="item-detail-text flex align_center"
+								@click="openPriceModal(item,0,showShelfDetial)">
+								<view class="item-price" :style="{color:!item.price?'#666':''}"
+									v-if="showCarPrice&&configPrice&&configPrice.shelf_price_show == '1'">
+									{{item.price?'¥'+item.price:'暂无价格'}}
+								</view>
+								<view class="item-price" :style="{color:!item.cost?'#666':''}"
+									v-if="showCostPrice&&configPrice&&configPrice.shelf_cost_show == '1'">
+									{{item.cost?'¥'+item.cost:'暂无价格'}}
+								</view>
+								<uni-icons type="arrowright" color="#00aaff" size="12"
+									v-if="priceShowVal&&showShelfDetial"></uni-icons>
 							</view>
-							<view class="item-detail-text" v-if="item.currentInven">
-								<u-button shape="circle" @click="addPart(item)" v-if="!item.checked" :custom-style="{width:'48upx',height:'48upx',background:'#066cff'}" type="primary" size="mini">
-									<u-icon name="plus" color="#fff" size="28"></u-icon>
-								</u-button>
-								<u-number-box v-else @change="updateNums" @blur="updateNums" v-model="item.qty" :index="item.productSn" :min="0" :max="item.currentInven"></u-number-box>
+							<view class="item-detail-text flex align_center" v-if="item.currentInven">
+								<button @click="addPart(item)" v-if="!item.checked"
+									:style="{width:'48rpx',height:'48rpx',background:'#066cff',borderRadius:'50px',padding:0,border:'none'}"
+									type="primary" size="mini">
+									<uni-icons type="plusempty" color="#fff" size="20"></uni-icons>
+								</button>
+								<uni-number-box v-else @change="e=>updateNums(e,item.productSn)" v-model="item.qty"
+									:min="0" :max="item.currentInven"></uni-number-box>
 							</view>
-							<view class="item-detail-text" v-else>
+							<view class="item-detail-text flex align_center" v-else>
 								<text @click="addPart(item)" v-if="!item.checked" class="phtxt">我要急送</text>
-								<u-number-box v-else @change="updateNums" @blur="updateNums" v-model="item.qty" :index="item.productSn" :min="0"></u-number-box>
+								<uni-number-box v-else @change="e=>updateNums(e,item.productSn)" v-model="item.qty"
+									:min="0"></uni-number-box>
 							</view>
 						</view>
 					</view>
@@ -78,8 +91,7 @@
 			},
 		},
 		data() {
-			return {
-			}
+			return {}
 		},
 		methods: {
 			openPriceModal(item, type, show) {
@@ -88,15 +100,85 @@
 			addPart(item) {
 				this.$emit('addPart', item, 'other')
 			},
-			updateNums(e) {
-				this.$emit('updateNums', e)
+			updateNums(value, id) {
+				this.$emit('updateNums', {
+					value: value,
+					index: id
+				})
 			},
-			viewImg(item){
-				this.$emit('viewImg',item)
+			viewImg(item) {
+				this.$emit('viewImg', item)
 			}
 		}
 	}
 </script>
 
-<style>
+<style lang="less">
+	@import '/flex.css';
+
+	.nav-right-item {
+		padding: 15upx 25upx;
+		border-bottom: 2rpx solid #f5f5f5;
+
+		.uni-col-2 {
+			width: 50px;
+		}
+
+		.item-info {
+			padding-left: 10upx;
+			width: 80%;
+			flex-grow: 1;
+
+			.item-name {
+				font-size: 30upx;
+				color: #191919;
+				display: flex;
+				align-items: center;
+
+				>image {
+					width: 38rpx;
+					height: 38rpx;
+					margin-right: 10rpx;
+				}
+
+				>text {
+					flex: 1;
+					word-break: break-all;
+				}
+			}
+
+			.item-detail {
+				.item-detail-info {
+					padding: 10upx 0 4upx;
+
+					/deep/ .uni-tag {
+						word-break: break-all;
+						font-size: 28rpx;
+						color: #0fab04eee;
+						border: 0;
+						padding: 0.2rem 0.3rem;
+					}
+
+					>view {
+						padding-bottom: 10rpx;
+						align-items: center;
+
+						.item-detail-text {
+							color: #999;
+
+							.phtxt {
+								color: #0485F6;
+								font-size: 28upx;
+							}
+
+							.item-price {
+								color: #FB1E1E;
+								font-size: 28upx;
+							}
+						}
+					}
+				}
+			}
+		}
+	}
 </style>

+ 78 - 23
pagesA/digitalShelf/components/vinPartItem.vue

@@ -1,8 +1,8 @@
 <template>
 	<block>
-		<view class="nav-right-item flex" v-for="(item, index) in list" :key="item.productSn">
+		<view class="nav-right-item flex" v-for="item in list" :key="item.productSn">
 			<view class="uni-col-2">
-				<u-image :src="item.images+'?x-oss-process=image/resize,m_fixed,h_120,w_120,color_ffffff'" @click="viewImg(item)" border-radius="30" width="100" height="100" bg-color="#EBEBEB" ></u-image>
+				<u-image :src="item.images+'?x-oss-process=image/resize,m_fixed,h_60,w_60,color_ffffff'" @click="viewImg(item)" border-radius="30" width="100" height="100" bg-color="#EBEBEB" ></u-image>
 			</view>
 			<view class="item-info uni-col-10">
 				<view class="item-name">
@@ -11,39 +11,39 @@
 				<view class="item-detail">
 					<view class="item-detail-info">
 						<view class="flex justify_between">
-							<view>
+							<view class="flex align_center">
 								<text class="item-detail-text flex_1">{{item.code}}</text>
-								<u-tag v-if="commonPartCode.includes(item.code)" size="mini" style="margin-left: 5px;" text="通用" mode="light" shape="circle" type="success"></u-tag>
+								<uni-tag v-if="commonPartCode.includes(item.code)" size="small" style="margin-left: 5px;" text="通用" :circle="true" type="success"></uni-tag>
 							</view>
-							<text class="item-detail-text" v-if="item.affiliation=='SHELF'">库存:{{item.currentInven?item.currentInven:0}} {{item.unit}}</text>
+							<text class="item-detail-text" style="width: 50%;text-align: right;" v-if="item.affiliation=='SHELF'">库存:{{item.currentInven?item.currentInven:0}} {{item.unit}}</text>
 						</view>
 						<view class="flex" v-if="item.productTypeSn=='543766811373752320'">
-							<u-tag :text="item.origCode" mode="light" borderColor="#ffffff" shape="circle" type="success"></u-tag>
+							<uni-tag :text="item.origCode" inverted :circle="true" type="success"></uni-tag>
 						</view>
 						<view class="flex justify_between">
-							<view class="item-detail-text flex_1">
+							<view class="item-detail-text">
 								<!-- 货架产品 -->
-								<view @click="openPriceModal(item,1,showShelfDetial)" v-if="item.affiliation=='SHELF'">
-									<text class="item-price" :style="{color:!item.price?'#666':''}" v-if="showCarPrice&&configPrice&&configPrice.shelf_price_show == '1'">{{item.price?'¥'+item.price:'暂无价格'}}</text>
-									<text class="item-price" :style="{color:!item.cost?'#666':''}" v-if="showCostPrice&&configPrice&&configPrice.shelf_cost_show == '1'">{{item.cost?'¥'+item.cost:'暂无价格'}}</text>
-									<u-icon name="arrow-right" v-if="priceShowVal&&showShelfDetial"></u-icon>
+								<view class="flex align_center" @click="openPriceModal(item,1,showShelfDetial)" v-if="item.affiliation=='SHELF'">
+									<view class="item-price" :style="{color:!item.price?'#666':''}" v-if="showCarPrice&&configPrice&&configPrice.shelf_price_show == '1'">{{item.price?'¥'+item.price:'暂无价格'}}</view>
+									<view class="item-price" :style="{color:!item.cost?'#666':''}" v-if="showCostPrice&&configPrice&&configPrice.shelf_cost_show == '1'">{{item.cost?'¥'+item.cost:'暂无价格'}}</view>
+									<uni-icons type="arrowright" color="#00aaff" size="12" v-if="priceShowVal&&showShelfDetial"></uni-icons>
 								</view>
 								<!-- 非货架 -->
-								<view @click="openPriceModal(item,1,showNonShelfDetial)" v-else>
-									<text class="item-price" :style="{color:!item.price?'#666':''}" v-if="showCarPrice&&configPrice&&configPrice.non_shelf_price_show == '1'">{{item.price?'¥'+item.price:'暂无价格'}}</text>
-									<text class="item-price" :style="{color:!item.cost?'#666':''}" v-if="showCostPrice&&configPrice&&configPrice.non_shelf_cost_show == '1'">{{item.cost?'¥'+item.cost:'暂无价格'}}</text>
-									<u-icon name="arrow-right" v-if="priceShowVal&&showNonShelfDetial"></u-icon>
+								<view class="flex align_center" @click="openPriceModal(item,1,showNonShelfDetial)" v-else>
+									<view class="item-price" :style="{color:!item.price?'#666':''}" v-if="showCarPrice&&configPrice&&configPrice.non_shelf_price_show == '1'">{{item.price?'¥'+item.price:'暂无价格'}}</view>
+									<view class="item-price" :style="{color:!item.cost?'#666':''}" v-if="showCostPrice&&configPrice&&configPrice.non_shelf_cost_show == '1'">{{item.cost?'¥'+item.cost:'暂无价格'}}</view>
+									<uni-icons type="arrowright" color="#00aaff" size="12" v-if="priceShowVal&&showNonShelfDetial"></uni-icons>
 								</view>
 							</view>
 							<view class="item-detail-text" v-if="item.currentInven">
-								<u-button shape="circle" @click="addPart(item)" v-if="!item.checked" :custom-style="{width:'48upx',height:'48upx'}" type="primary" size="mini">
-									<u-icon name="plus" color="#fff" size="28"></u-icon>
-								</u-button>
-								<u-number-box v-else @change="updateVinNums" @blur="updateVinNums" v-model="item.qty" :index="item.productSn" :min="0" :max="item.currentInven"></u-number-box>
+								<button @click="addPart(item)" v-if="!item.checked" :style="{width:'48rpx',height:'48rpx',background:'#066cff',borderRadius:'50px',padding:0,border:'none'}" type="primary" size="mini">
+									<uni-icons type="plusempty" color="#fff" size="20"></uni-icons>
+								</button>
+								<uni-number-box v-else @change="e=>updateVinNums(e,item.productSn)" v-model="item.qty" :min="0" :max="item.currentInven"></uni-number-box>
 							</view>
 							<view class="item-detail-text" v-if="item.affiliation=='NON_SHELF'||!item.currentInven">
 								<text v-if="!item.checked" @click="addPart(item)" class="phtxt">我要急送</text>
-								<u-number-box v-else @change="updateVinNums" @blur="updateVinNums" v-model="item.qty" :index="item.productSn" :min="0"></u-number-box>
+								<uni-number-box v-else @change="e=>updateVinNums(e,item.productSn)" v-model="item.qty" :min="0"></uni-number-box>
 							</view>
 						</view>
 					</view>
@@ -106,8 +106,8 @@
 			addPart(item) {
 				this.$emit('addPart', item, 'vin')
 			},
-			updateVinNums(e) {
-				this.$emit('updateVinNums', e)
+			updateVinNums(value,id) {
+				this.$emit('updateVinNums', {value:value,index:id})
 			},
 			viewImg(item){
 				this.$emit('viewImg',item)
@@ -116,5 +116,60 @@
 	}
 </script>
 
-<style>
+<style lang="less">
+	@import '/flex.css';
+	.nav-right-item{
+		padding: 15upx 25upx;
+		border-bottom: 2rpx solid #f5f5f5;
+		.uni-col-2{
+			width: 50px;
+		}
+		.item-info{
+			padding-left: 10upx;
+			width: 80%;
+			flex-grow: 1;
+			.item-name{
+				font-size: 30upx;
+				color: #191919;
+				display: flex;
+				align-items: center;
+				>image{
+					width: 38rpx;
+					height: 38rpx;
+					margin-right: 10rpx;
+				}
+				>text{
+					flex: 1;
+					word-break: break-all;
+				}
+			}
+			.item-detail{
+				.item-detail-info{
+					padding: 10upx 0 4upx;
+					/deep/ .uni-tag{
+						word-break: break-all;
+						font-size: 28rpx;
+						color: #0fab04eee;
+						border: 0;
+						padding: 0.2rem 0.3rem;
+					}
+					> view{
+						padding-bottom: 10rpx;
+						align-items: center;
+						.item-detail-text{
+							color: #999;
+							.phtxt{
+								color: #0485F6;
+								font-size: 28upx;
+							}
+							.item-price{
+								color: #FB1E1E;
+								font-size: 28upx;
+							}
+						}
+					}
+				}
+			}
+		}
+	}
 </style>

+ 223 - 101
pages/cart/index.vue → pagesB/cart/index.vue

@@ -1,57 +1,85 @@
 <template>
 	<view class="pages">
-		<view class="cart-body">
-				<!-- 头部 -->
-				<view class="cart-head">
-					<view class="cart-head-left">共<text>{{total}}</text>款商品</view>
-					<view class="cart-head-btton" @click="editFlag=!editFlag"><text>{{editFlag?'完成':'编辑'}}</text></view>
+		<!-- head -->
+		<view class="scrollPage-header">
+			<view :style="{height:statusBarHeight+'px'}"></view>
+			<view class="header-title">
+				<view class="header-left" @click="goBack">
+					<image style="width: 16px; height: 16px;margin-right:3px;" mode="aspectFit" src="../static/arrow-left.png"></image>
+					<text>返回</text>
 				</view>
+				<view class="header-title"><text class="ellipsis-one" overflow="ellipsis">购物车</text></view>
+				<view class="header-right"></view>
+			</view>
+		</view>
+		<view class="cart-body">
 				<!-- 内容 -->
-				<scroll-view scroll-y class="cart-list" :style="{height:scrollHeight+'px'}"  @scrolltolower="onreachBottom">
+				<scroll-view 
+				scroll-y 
+				class="cart-list" 
+				type="custom" 
+				@scrolltolower="onreachBottom">
+					<sticky-header>
+						 <!-- 头部 -->
+						 <view class="cart-head">
+						 	<view class="cart-head-left">共<text>{{total}}</text>款商品</view>
+						 	<view class="cart-head-right">
+								<view class="cart-head-btton blue" @click="editAll">
+									<text>{{editFlag?'完成':'编辑'}}</text>
+								</view>
+							</view>
+						 </view>
+					</sticky-header>
 					<productItem
 					v-for="(item, index) in list"
 					:key="item.id"  
 					:index="index"
 					:list="item" 
-					:edit="editFlag" 
 					@changeQty="changeQty" 
 					@check="chooseItem"
 					@remove="removeChoose">
 					</productItem>
-					<view style="padding: 20upx;">
-						 <u-empty :src="`/static/nodata.png`" icon-size="180" :text="noDataText" img-width="120" v-if="list.length==0 && status!='loading'" mode="list"></u-empty>
-						 <u-loadmore v-if="(total>=list.length&&list.length)||status=='loading'" :status="status" />
+					<!-- loading -->
+					<view class="loading-bar" v-if="list.length==0 && status!='loading'">{{noDataText}}</view>
+					<view class="empty-bar" v-if="(total>=list.length&&list.length)||status!='loading'">
+						<image mode="aspectFit" :src="empty.imgUrl"></image>
+						<view>{{empty.tip}}</view>
 					</view>
 				</scroll-view>
 				<!-- 底部 -->
 				<view class="cart-footer">
-					<view class="cart-footer-left">
-							<view class="cart-footer-left-all" @click="chooseAll">
-								<view class="cart-footer-left-all-icon">
-									<u-icon size="45" :color="allChecked?'#ff0000':'#969799'" :name="allChecked?'roundcheckfill':'round'" custom-prefix="custom-icon"></u-icon>
+					<view class="cart-footer-box">
+						<view class="cart-footer-left">
+								<view class="cart-footer-left-all" @click="chooseAll">
+									<view class="cart-footer-left-all-icon">
+										<image style="width: 24px;height: 24px;" mode="aspectFill" :src="'../static/'+(allChecked?'round_check_fill':'round')+'.png'"></image>
+									</view>
+									<view class="cart-footer-left-all-text">
+										<text>全选</text>
+									</view>
 								</view>
-								<view class="cart-footer-left-all-text">
-									<text>全选</text>
+						</view>
+						<view class="cart-footer-right">
+							<view class="cart-footer-left-price" v-if="!editFlag">
+								<view class="cart-footer-left-price-text">
+									<text>合计:</text>
+								</view>
+								<view class="cart-footer-left-price-num">
+									<text>¥{{totalAmount}}</text>
 								</view>
 							</view>
-					</view>
-					<view class="cart-footer-right">
-						<view class="cart-footer-left-price" v-if="!editFlag">
-							<view class="cart-footer-left-price-text">
-								<text>合计:</text>
+							<view class="cart-head-btton red" v-if="editFlag" @click="clearAll">
+								<text>清空购物车</text>
 							</view>
-							<view class="cart-footer-left-price-num">
-								<text>¥{{totalAmount}}</text>
+							<view class="cart-footer-right-button">
+								<u-button v-if="!editFlag" type="error" shape="circle" @click="settlement">去结算</u-button>
+								<u-button v-else type="error" plain shape="circle" @click="batchRemove">删除</u-button>
 							</view>
 						</view>
-						<view class="cart-footer-right-button">
-							<u-button v-if="!editFlag" type="error" shape="circle" @click="settlement">去结算</u-button>
-							<u-button v-else type="error" plain shape="circle" @click="batchRemove">删除</u-button>
-						</view>
 					</view>
+					<view :style="{height:safeAreaBottom+'px'}"></view>
 				</view>
 		</view>
-		<u-tabbar :list="vuex_tabBarList" :before-switch="beforeSwitch"></u-tabbar>
 	</view>
 </template>
 
@@ -60,12 +88,18 @@
 	    mapState,
 	    mapMutations,
 	} from 'vuex'
-	import productItem from '@/pages/cart/productitem.vue'
+	import productItem from '@/pagesB/cart/productitem.vue'
 	export default {
 		components:{
 			productItem
 		},
 		onLoad() {
+			// 计算区域高度
+			this.statusBarHeight = uni.getSystemInfoSync().statusBarHeight
+			this.screenWidth = uni.getSystemInfoSync().windowWidth
+			this.screenHeight = uni.getSystemInfoSync().windowHeight
+			this.safeAreaBottom = uni.getSystemInfoSync().safeAreaInsets.bottom
+			
 			this.cacheList = this.getCacheList()
 			this.cacheList.forEach(key => {
 				this.total += key.length // 总款数
@@ -76,6 +110,10 @@
 			return {
 				status: 'loading',
 				noDataText: '暂无活动',
+				empty: {
+					tip: '暂无产品',
+					imgUrl: '/static/nodata.png'
+				},
 				// 查询条件
 				pageNo: 1,
 				pageSize: 3,
@@ -85,19 +123,23 @@
 				totalNum: 0,
 				editFlag: false,
 				allChecked: false,
-				cacheList: []
+				cacheList: [],
+				screenWidth: 325,
+				screenHeight: 0,
+				statusBarHeight: 44,
+				safeAreaBottom: 0,
 			}
 		},
 		computed: {
-			...mapState(['hasLogin','vuex_vinScanNums','vuex_scanMaxNums','vuex_tabBarList']),
+			...mapState(['hasLogin']),
 			userInfo(){
 				return this.$store.state.vuex_userInfo
-			},
-			scrollHeight(){
-				return uni.getSystemInfoSync().windowHeight - 142
 			}
 		},
 		methods: {
+			goBack(){
+				uni.navigateBack()
+			},
 			// 从缓存获取数据
 			getCacheList(){
 				const cacheList = this.$store.state.vuex_cartList.find(k => k.sn == '693459699332595712')
@@ -188,6 +230,37 @@
 					}
 				}
 			},
+			// 编辑
+			editAll(){
+				this.editFlag = !this.editFlag
+				this.list.forEach(key => {
+					key.forEach(item => {
+						item.edit = this.editFlag
+					})
+				})
+			},
+			// 清空购物车
+			clearAll(){
+				const _this = this
+				uni.showModal({
+					title: '提示',
+					content: '确定清空购物车?',
+					confirmText: '确定',
+					success(res) {
+						if(res.confirm){
+							// uni.showLoading({
+							// 	title: '正在清空...',
+							// 	mask: true
+							// })
+							_this.list = []
+							_this.cacheList = []
+							_this.allChecked = false
+							_this.editFlag = false
+							_this.getChooseHeji()
+						}
+					}
+				})
+			},
 			// 全选
 			chooseAll(){
 				this.allChecked = !this.allChecked
@@ -200,13 +273,16 @@
 				this.getChooseHeji()
 			},
 			//单个删除
-			removeChoose(id){
+			removeChoose(id,isBatch){
 				// 删除项
 				const crow = this.getItemById(id)
 				if(crow.p>=0&&crow.s>=0){
 					this.list[crow.p].splice(crow.s, 1);
+					this.total = this.total - 1
 					// 合计
-					this.getChooseHeji()
+					if(!isBatch){
+						this.getChooseHeji()
+					}
 				}
 			},
 			// 批量删除
@@ -218,19 +294,30 @@
 					})
 					return false
 				}
-				// 如果是全选
-				if(this.allChecked){
-					this.list = []
-					this.allChecked = false
-				}else{
-					this.list.forEach(item => {
-						item.filter(k=>k.checked).forEach(s=>{
-							this.removeChoose(s.id)
-						})
-					})
-				}
-				// 合计
-				this.getChooseHeji()
+				const _this = this
+				uni.showModal({
+					title: '提示',
+					content: '确定删除商品吗?',
+					confirmText: '确定',
+					success(res) {
+						if(res.confirm){
+							 // 如果是全选
+							 if(_this.allChecked){
+							 	_this.list = []
+								_this.cacheList = []
+							 	_this.allChecked = false
+							 }else{
+							 	_this.list.forEach(item => {
+							 		item.filter(k=>k.checked).forEach(s=>{
+							 			_this.removeChoose(s.id,true)
+							 		})
+							 	})
+							 }
+							 // 合计
+							 _this.getChooseHeji()
+						}
+					}
+				})
 			},
 			// 去结算
 			settlement(){
@@ -254,46 +341,6 @@
 					})
 				})
 			},
-			// 扫描vin
-			beforeSwitch(index){
-				const row = this.$store.state.vuex_tabBarList[index]
-				if(row.text == '促销'){
-					uni.$emit('refashProm')
-				}
-				if(row.text == '扫描VIN'){
-					this.openCamera()
-				}else{
-					return true
-				}
-			},
-			// 去扫描
-			openCamera(){
-				if(this.hasLogin){
-					if(this.userInfo.sysUserFlag == '0'){
-						if(this.vuex_vinScanNums < this.vuex_scanMaxNums){
-							uni.navigateTo({
-								url: "/pages/scan-frame/scan-frame"
-							})
-						}else{
-							uni.showModal({
-								title: '提示',
-								content: '个人用户扫描VIN仅限10次,您的次数已用完!',
-								confirmText: '好的',
-								showCancel: false,
-								success(res) {}
-							})
-						}
-					}else{
-						uni.navigateTo({
-							url: "/pages/scan-frame/scan-frame"
-						})
-					}
-				}else{
-					uni.navigateTo({
-						url: '/pages/login/login'
-					})
-				}
-			},
 		}
 	}
 </script>
@@ -303,6 +350,35 @@
 	height: 100vh;
 	display: flex;
 	flex-direction: column;
+	.scrollPage-header{
+		z-index: 1;
+		.header-title{
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			padding: 0 10px;
+			height: 44px;
+			background-color: #FFFFFF;
+			box-shadow: 0px 1px 0px 0px #E6E6E6;
+			.header-title{
+				font-size: 16px;
+				color: #333333;
+				max-width: 70%;
+			}
+			.header-left{
+				display: flex;
+				align-items: center;
+				text{
+					font-size: 14px;
+					color: #333333;
+					margin-left: 5px;
+				}
+			}
+			.header-right{
+				width: 50px;
+			}
+		}
+	}
 	.cart-body{
 		position: relative;
 		flex-grow: 1;
@@ -312,39 +388,76 @@
 			display: flex;
 			justify-content: space-between;
 			align-items: center;
-			padding: 20rpx;
+			padding: 0 20rpx;
 			background-color: #FFFFFF;
+			height: 40px;
 			.cart-head-left{
+				display: flex;
+				align-items: center;
 				font-size: 28rpx;
 				color: #333333;
+				height: 100%;
 				text{
-					color: #FF0000;
+					color: #d81e06;
 					margin: 0 10rpx;
 				}
 			}
+			.cart-head-right{
+				display: flex;
+				align-items: center;
+			}
+			.red{
+				color: #d81e06;
+			}
+			.blue{
+				color: #2196F3;
+			}
 			.cart-head-btton{
+				height: 100%;
 				font-size: 28rpx;
-				color: #333333;
+				margin-right: 10px;
 			}
 		}
 		.cart-list{
 			flex-grow: 1;
 			background-color: #F5F5F5;
 			width: 100%;
-			height: calc(100% - 180rpx);
-			overflow: auto;
+			.loading-bar{
+				text-align: center;
+				padding: 10px 0;
+				color: #999999;
+			}
+			.empty-bar{
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				justify-content: center;
+				padding: 20px 0;
+				image{
+					width: 100px;
+					height: 100px;
+				}
+				view{
+					font-size: 14px;
+					color: #999999;
+					margin-top: 10px;
+				}
+			}
 		}
 		.cart-footer{
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
 			width: 100%;
-			height: 100rpx;
 			background-color: #FFFFFF;
+			.cart-footer-box{
+				width: 100%;
+				height: 100rpx;
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+			}
 			.cart-footer-left{
 				display: flex;
 				align-items: center;
-				padding: 0 20rpx;
+				padding: 0 20rpx 0 36rpx;
 				.cart-footer-left-all{
 					display: flex;
 					align-items: center;
@@ -370,12 +483,21 @@
 					}
 					.cart-footer-left-price-num{
 						font-size: 28rpx;
-						color: #FF0000;
+						color: #d81e06;
 					}
 				}
+				.red{
+					color: #d81e06;
+				}
+				.cart-head-btton{
+					height: 100%;
+					font-size: 28rpx;
+					color: #333333;
+				}
 				.cart-footer-right-button{
+					display: flex;
+					align-items: center;
 					margin-left: 20rpx;
-					width: 180rpx;
 					text-align: right;
 				}
 			}

+ 16 - 16
pages/cart/productitem.vue → pagesB/cart/productitem.vue

@@ -5,24 +5,28 @@
 		:key="item.id" 
 		>
 			<view class="choose-product-item-check" @click="checkItem(item.id)">
-				<u-icon size="45" :color="item.checked?'#ff0000':'#969799'" :name="item.checked?'roundcheckfill':'round'" custom-prefix="custom-icon"></u-icon>
+				<image style="width: 24px;height: 24px;" mode="aspectFill" :src="'../static/'+(item.checked?'round_check_fill':'round')+'.png'"></image>
 			</view>
 			 <view>
 				 <view class="choose-product-item-img">
 					<image mode="aspectFit" :src="item.productImage+'?x-oss-process=image/resize,p_30'" style="width: 100%;height: 180rpx;"></image>
-					<view class="back-price" v-if="item.promoRuleValue">返<text>{{item.promoRuleValue}}</text>元</view>
+					<!-- <view class="back-price" v-if="item.promoRuleValue">返<text>{{item.promoRuleValue}}</text>元</view> -->
 					<view class="choose-product-item-left-info-code ellipsis-one">{{item.productCode}}</view>
 				 </view>
 				 <view class="choose-product-item-info">
 					<view class="choose-product-item-left-info-name ellipsis-two">{{item.productName}}</view>
-					<view class="choose-product-item-left-info-guige ellipsis-two">{{item.productOrigCode}}</view>
+					<view class="choose-product-item-left-info-guige">
+						<text class="ellipsis-two" max-lines="2" overflow="ellipsis">{{item.productOrigCode}}</text>
+					</view>
 					<view class="choose-product-item-left-info-price">
 						<view class="price-txt">¥<text>{{item.cost}}</text></view>
 						<view>
-							<uni-number-box v-if="!edit" v-model="item.qty" :min="1" :max="999999" @change="v=>{changeQty(v,item.id)}"></uni-number-box>
-							<view v-else class="edit-qty">
+							<view :style="{opacity:!item.edit?1:0,width:!item.edit?'auto':0}">
+								<uni-number-box v-show="!item.edit" v-model="item.qty" :min="1" :max="999999" @change="v=>{changeQty(v,item.id)}"></uni-number-box>
+							</view>
+							<view v-if="item.edit" class="edit-qty">
 								X <text>{{item.qty}}</text>
-								<u-icon size="42" color="#ff0000" name="ashbin" custom-prefix="custom-icon" @click="remove(item.id)"></u-icon>
+								<image style="width: 24px;height: 24px;" mode="aspectFill" :src="'../static/ashbin.png'" @click="remove(item.id)"></image>
 							</view>
 						</view>
 					</view>
@@ -48,10 +52,6 @@
 				type: Array,
 				default: () => []
 			},
-			edit: {
-				type: Boolean,
-				default: false
-			}
 		},
 		data() {
 			return {
@@ -62,7 +62,7 @@
 				this.$emit('changeQty', e, id)
 			},
 			remove(id){
-				this.$emit('remove',id)
+				this.$emit('remove', id, false)
 			},
 			checkItem(id){
 				this.$emit('check',id)
@@ -78,7 +78,7 @@
 		justify-content: space-between;
 		padding: 10px;
 		background: #fff;
-		margin: 8px 0;
+		margin: 8px 8px 0 8px;
 		border-radius: 10px;
 		.price-txt{
 			color: red;
@@ -94,14 +94,16 @@
 			 justify-content: space-between;
 			 &:last-child{
 				 flex-grow: 1;
+				 width: 80%;
 			 }
 		}
 		.choose-product-item-check{
 			padding: 0 20rpx 0 0;
+			width: 24px;
 		}
 		.choose-product-item-img{
 			margin-right: 20rpx;
-			width: 35%;
+			width: 30%;
 			position: relative;
 			overflow: hidden;
 			border: 1px solid #eee;
@@ -136,8 +138,7 @@
 			}
 		}
 		.choose-product-item-info{
-			margin-right: 10rpx;
-			width: 65%;
+			width: 70%;
 			flex-grow: 1;
 			.choose-product-item-left-info-price{
 				display: flex;
@@ -164,7 +165,6 @@
 			}
 			.choose-product-item-left-info-name{
 				font-size: 28rpx;
-				font-weight: 900;
 				color: #666;
 			}
 			.choose-product-item-left-info-guige{

+ 4 - 2
pagesB/components/chooseProductItemSkline.vue

@@ -12,8 +12,10 @@
 					<view class="choose-product-item-left-info-code ellipsis-one">{{item.productCode}}</view>
 				 </view>
 				 <view class="choose-product-item-info">
-					<view class="choose-product-item-left-info-name ellipsis-two">{{item.productName}}</view>
-					<view class="choose-product-item-left-info-guige ellipsis-two">{{item.productOrigCode}}</view>
+					<view class="choose-product-item-left-info-name">{{item.productName}}</view>
+					<view class="choose-product-item-left-info-guige">
+						<text class="ellipsis-two" max-lines="2" overflow="ellipsis">{{item.productOrigCode}}</text>
+					</view>
 					<view class="choose-product-item-left-info-price">
 						<view class="price-txt">¥<text>{{item.cost}}</text></view>
 						<view v-if="!isView">

+ 2 - 3
pagesB/shopiing/productDetail.vue

@@ -47,7 +47,7 @@
 			<view class="scrollPage-footer-box">
 				<view class="footer-left">
 					<view class="footer-left-item" @click="toCart">
-						<u-icon :size='40' name="shopping-cart"></u-icon>
+						<u-icon :size='50' name="shopping-cart"></u-icon>
 						<text class="footer-left-item-text">购物车</text>
 						<text class="badge" v-if="totalNum">{{totalNum>99?'99+':totalNum}}</text>
 					</view>
@@ -300,7 +300,6 @@
 					.footer-left-item-text{
 						font-size: 12px;
 						color: #666666;
-						margin-top: 3px;
 					}
 					.badge{
 						background: #f44336;
@@ -392,7 +391,7 @@
 					display: flex;
 					align-items: center;
 					justify-content: center;
-					margin-top: 10px;
+					margin-top: 20px;
 					.popu-content-btn-item{
 						width: 100%;
 						height: 40px;

+ 1 - 1
pagesB/shopiing/searchProduct.vue

@@ -31,7 +31,7 @@
 					<!-- 搜索,吸顶 -->
 					<sticky-header>
 						<view class="search-head">
-							<uni-search-bar v-model="queryWord" radius="100" placeholder="请输入产品名称/轮胎规格" bgColor="#fff" textColor="#666" clearButton="auto" cancelButton="none" @confirm="searchList" @clear="searchList" />
+							<uni-search-bar v-model="queryWord" radius="100" placeholder="请输入商品名称/产品编码/原厂编码" bgColor="#fff" textColor="#666" clearButton="auto" cancelButton="none" @confirm="searchList" @clear="searchList" />
 						</view>
 					</sticky-header>
 					<!-- 产品列表 -->

BIN
pagesB/static/ashbin.png


BIN
pagesB/static/round.png


BIN
pagesB/static/round_check_fill.png


BIN
static/arrow-left.png


File diff suppressed because it is too large
+ 0 - 0
static/iconfont/iconfont.css


BIN
static/tab/tab_cart_normal.png


BIN
static/tab/tab_cart_pressed.png


BIN
static/tab/tab_scan_mid.png


BIN
static/temp/t1.jpeg


BIN
static/temp/t10.jpg


BIN
static/temp/t11.jpg


BIN
static/temp/t12.jpg


BIN
static/temp/t2.jpeg


BIN
static/temp/t3.jpg


BIN
static/temp/t4.jpg


BIN
static/temp/t5.png


BIN
static/temp/t6.jpeg


BIN
static/temp/t7.jpg


BIN
static/temp/t8.jpg


BIN
static/temp/t9.jpg


+ 14 - 14
uni.scss

@@ -76,6 +76,20 @@ $uni-font-size-subtitle:36rpx;
 $uni-color-paragraph: #3F536E; // 文章段落颜色
 $uni-font-size-paragraph:30rpx;
 
+// 必填*
+.u-required{
+	position: relative;
+}
+.u-required:before{
+	content: '*';
+	position: absolute;
+	left: -8px;
+	top: 10upx;
+	font-size: 14px;
+	color: #fa3534;
+	height: 9px;
+	line-height: 1;
+}
 /* 显示一行省略号 */
 .ellipsis-one{
 	white-space: nowrap;
@@ -92,17 +106,3 @@ $uni-font-size-paragraph:30rpx;
 	line-clamp: 2;
 	-webkit-box-orient: vertical;
 }
-// 必填*
-.u-required{
-	position: relative;
-}
-.u-required:before{
-	content: '*';
-	position: absolute;
-	left: -8px;
-	top: 10upx;
-	font-size: 14px;
-	color: #fa3534;
-	height: 9px;
-	line-height: 1;
-}

+ 33 - 0
uni_modules/uni-badge/changelog.md

@@ -0,0 +1,33 @@
+## 1.2.2(2023-01-28)
+- 修复 运行/打包 控制台警告问题
+## 1.2.1(2022-09-05)
+- 修复 当 text 超过 max-num 时,badge 的宽度计算是根据 text 的长度计算,更改为 css 计算实际展示宽度,详见:[https://ask.dcloud.net.cn/question/150473](https://ask.dcloud.net.cn/question/150473)
+## 1.2.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-badge](https://uniapp.dcloud.io/component/uniui/uni-badge)
+## 1.1.7(2021-11-08)
+- 优化 升级ui
+- 修改 size 属性默认值调整为 small
+- 修改 type 属性,默认值调整为 error,info 替换 default
+## 1.1.6(2021-09-22)
+- 修复 在字节小程序上样式不生效的 bug
+## 1.1.5(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.4(2021-07-29)
+- 修复 去掉 nvue 不支持css 的 align-self 属性,nvue 下不暂支持 absolute 属性
+## 1.1.3(2021-06-24)
+- 优化 示例项目
+## 1.1.1(2021-05-12)
+- 新增 组件示例地址
+## 1.1.0(2021-05-12)
+- 新增 uni-badge 的 absolute 属性,支持定位
+- 新增 uni-badge 的 offset 属性,支持定位偏移
+- 新增 uni-badge 的 is-dot 属性,支持仅显示有一个小点
+- 新增 uni-badge 的 max-num 属性,支持自定义封顶的数字值,超过 99 显示99+
+- 优化 uni-badge 属性 custom-style, 支持以对象形式自定义样式
+## 1.0.7(2021-05-07)
+- 修复 uni-badge 在 App 端,数字小于10时不是圆形的bug
+- 修复 uni-badge 在父元素不是 flex 布局时,宽度缩小的bug
+- 新增 uni-badge 属性 custom-style, 支持自定义样式
+## 1.0.6(2021-02-04)
+- 调整为uni_modules目录规范

+ 268 - 0
uni_modules/uni-badge/components/uni-badge/uni-badge.vue

@@ -0,0 +1,268 @@
+<template>
+	<view class="uni-badge--x">
+		<slot />
+		<text v-if="text" :class="classNames" :style="[positionStyle, customStyle, dotStyle]"
+			class="uni-badge" @click="onClick()">{{displayValue}}</text>
+	</view>
+</template>
+
+<script>
+	/**
+	 * Badge 数字角标
+	 * @description 数字角标一般和其它控件(列表、9宫格等)配合使用,用于进行数量提示,默认为实心灰色背景
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=21
+	 * @property {String} text 角标内容
+	 * @property {String} size = [normal|small] 角标内容
+	 * @property {String} type = [info|primary|success|warning|error] 颜色类型
+	 * 	@value info 灰色
+	 * 	@value primary 蓝色
+	 * 	@value success 绿色
+	 * 	@value warning 黄色
+	 * 	@value error 红色
+	 * @property {String} inverted = [true|false] 是否无需背景颜色
+	 * @property {Number} maxNum 展示封顶的数字值,超过 99 显示 99+
+	 * @property {String} absolute = [rightTop|rightBottom|leftBottom|leftTop] 开启绝对定位, 角标将定位到其包裹的标签的四角上
+	 * 	@value rightTop 右上
+	 * 	@value rightBottom 右下
+	 * 	@value leftTop 左上
+	 * 	@value leftBottom 左下
+	 * @property {Array[number]} offset	距定位角中心点的偏移量,只有存在 absolute 属性时有效,例如:[-10, -10] 表示向外偏移 10px,[10, 10] 表示向 absolute 指定的内偏移 10px
+	 * @property {String} isDot = [true|false] 是否显示为一个小点
+	 * @event {Function} click 点击 Badge 触发事件
+	 * @example <uni-badge text="1"></uni-badge>
+	 */
+
+	export default {
+		name: 'UniBadge',
+		emits: ['click'],
+		props: {
+			type: {
+				type: String,
+				default: 'error'
+			},
+			inverted: {
+				type: Boolean,
+				default: false
+			},
+			isDot: {
+				type: Boolean,
+				default: false
+			},
+			maxNum: {
+				type: Number,
+				default: 99
+			},
+			absolute: {
+				type: String,
+				default: ''
+			},
+			offset: {
+				type: Array,
+				default () {
+					return [0, 0]
+				}
+			},
+			text: {
+				type: [String, Number],
+				default: ''
+			},
+			size: {
+				type: String,
+				default: 'small'
+			},
+			customStyle: {
+				type: Object,
+				default () {
+					return {}
+				}
+			}
+		},
+		data() {
+			return {};
+		},
+		computed: {
+			width() {
+				return String(this.text).length * 8 + 12
+			},
+			classNames() {
+				const {
+					inverted,
+					type,
+					size,
+					absolute
+				} = this
+				return [
+					inverted ? 'uni-badge--' + type + '-inverted' : '',
+					'uni-badge--' + type,
+					'uni-badge--' + size,
+					absolute ? 'uni-badge--absolute' : ''
+				].join(' ')
+			},
+			positionStyle() {
+				if (!this.absolute) return {}
+				let w = this.width / 2,
+					h = 10
+				if (this.isDot) {
+					w = 5
+					h = 5
+				}
+				const x = `${- w  + this.offset[0]}px`
+				const y = `${- h + this.offset[1]}px`
+
+				const whiteList = {
+					rightTop: {
+						right: x,
+						top: y
+					},
+					rightBottom: {
+						right: x,
+						bottom: y
+					},
+					leftBottom: {
+						left: x,
+						bottom: y
+					},
+					leftTop: {
+						left: x,
+						top: y
+					}
+				}
+				const match = whiteList[this.absolute]
+				return match ? match : whiteList['rightTop']
+			},
+			dotStyle() {
+				if (!this.isDot) return {}
+				return {
+					width: '10px',
+					minWidth: '0',
+					height: '10px',
+					padding: '0',
+					borderRadius: '10px'
+				}
+			},
+			displayValue() {
+				const {
+					isDot,
+					text,
+					maxNum
+				} = this
+				return isDot ? '' : (Number(text) > maxNum ? `${maxNum}+` : text)
+			}
+		},
+		methods: {
+			onClick() {
+				this.$emit('click');
+			}
+		}
+	};
+</script>
+
+<style lang="scss" >
+	$uni-primary: #2979ff !default;
+	$uni-success: #4cd964 !default;
+	$uni-warning: #f0ad4e !default;
+	$uni-error: #dd524d !default;
+	$uni-info: #909399 !default;
+
+
+	$bage-size: 12px;
+	$bage-small: scale(0.8);
+
+	.uni-badge--x {
+		/* #ifdef APP-NVUE */
+		// align-self: flex-start;
+		/* #endif */
+		/* #ifndef APP-NVUE */
+		display: inline-block;
+		/* #endif */
+		position: relative;
+	}
+
+	.uni-badge--absolute {
+		position: absolute;
+	}
+
+	.uni-badge--small {
+		transform: $bage-small;
+		transform-origin: center center;
+	}
+
+	.uni-badge {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		overflow: hidden;
+		box-sizing: border-box;
+		font-feature-settings: "tnum";
+		min-width: 20px;
+		/* #endif */
+		justify-content: center;
+		flex-direction: row;
+		height: 20px;
+		padding: 0 4px;
+		line-height: 18px;
+		color: #fff;
+		border-radius: 100px;
+		background-color: $uni-info;
+		background-color: transparent;
+		border: 1px solid #fff;
+		text-align: center;
+		font-family: 'Helvetica Neue', Helvetica, sans-serif;
+		font-size: $bage-size;
+		/* #ifdef H5 */
+		z-index: 999;
+		cursor: pointer;
+		/* #endif */
+
+		&--info {
+			color: #fff;
+			background-color: $uni-info;
+		}
+
+		&--primary {
+			background-color: $uni-primary;
+		}
+
+		&--success {
+			background-color: $uni-success;
+		}
+
+		&--warning {
+			background-color: $uni-warning;
+		}
+
+		&--error {
+			background-color: $uni-error;
+		}
+
+		&--inverted {
+			padding: 0 5px 0 0;
+			color: $uni-info;
+		}
+
+		&--info-inverted {
+			color: $uni-info;
+			background-color: transparent;
+		}
+
+		&--primary-inverted {
+			color: $uni-primary;
+			background-color: transparent;
+		}
+
+		&--success-inverted {
+			color: $uni-success;
+			background-color: transparent;
+		}
+
+		&--warning-inverted {
+			color: $uni-warning;
+			background-color: transparent;
+		}
+
+		&--error-inverted {
+			color: $uni-error;
+			background-color: transparent;
+		}
+
+	}
+</style>

+ 85 - 0
uni_modules/uni-badge/package.json

@@ -0,0 +1,85 @@
+{
+  "id": "uni-badge",
+  "displayName": "uni-badge 数字角标",
+  "version": "1.2.2",
+  "description": "数字角标(徽章)组件,在元素周围展示消息提醒,一般用于列表、九宫格、按钮等地方。",
+  "keywords": [
+    "",
+    "badge",
+    "uni-ui",
+    "uniui",
+    "数字角标",
+    "徽章"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": ""
+  },
+  "directories": {
+    "example": "../../temps/example_temps"
+  },
+"dcloudext": {
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+    "type": "component-vue"
+  },
+  "uni_modules": {
+    "dependencies": ["uni-scss"],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "y"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+          "QQ": "y"
+        },
+        "快应用": {
+          "华为": "y",
+          "联盟": "y"
+        },
+        "Vue": {
+            "vue2": "y",
+            "vue3": "y"
+        }
+      }
+    }
+  }
+}

+ 10 - 0
uni_modules/uni-badge/readme.md

@@ -0,0 +1,10 @@
+## Badge 数字角标
+> **组件名:uni-badge**
+> 代码块: `uBadge`
+
+数字角标一般和其它控件(列表、9宫格等)配合使用,用于进行数量提示,默认为实心灰色背景,
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-badge)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 
+
+

+ 19 - 0
uni_modules/uni-load-more/changelog.md

@@ -0,0 +1,19 @@
+## 1.3.3(2022-01-20)
+- 新增 showText属性 ,是否显示文本
+## 1.3.2(2022-01-19)
+- 修复 nvue 平台下不显示文本的bug
+## 1.3.1(2022-01-19)
+- 修复 微信小程序平台样式选择器报警告的问题
+## 1.3.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-load-more](https://uniapp.dcloud.io/component/uniui/uni-load-more)
+## 1.2.1(2021-08-24)
+- 新增 支持国际化
+## 1.2.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.8(2021-05-12)
+- 新增 组件示例地址
+## 1.1.7(2021-03-30)
+- 修复 uni-load-more 在首页使用时,h5 平台报 'uni is not defined' 的 bug
+## 1.1.6(2021-02-05)
+- 调整为uni_modules目录规范

+ 5 - 0
uni_modules/uni-load-more/components/uni-load-more/i18n/en.json

@@ -0,0 +1,5 @@
+{
+	"uni-load-more.contentdown": "Pull up to show more",
+	"uni-load-more.contentrefresh": "loading...",
+	"uni-load-more.contentnomore": "No more data"
+}

+ 8 - 0
uni_modules/uni-load-more/components/uni-load-more/i18n/index.js

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

+ 5 - 0
uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json

@@ -0,0 +1,5 @@
+{
+	"uni-load-more.contentdown": "上拉显示更多",
+	"uni-load-more.contentrefresh": "正在加载...",
+	"uni-load-more.contentnomore": "没有更多数据了"
+}

+ 5 - 0
uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json

@@ -0,0 +1,5 @@
+{
+	"uni-load-more.contentdown": "上拉顯示更多",
+	"uni-load-more.contentrefresh": "正在加載...",
+	"uni-load-more.contentnomore": "沒有更多數據了"
+}

File diff suppressed because it is too large
+ 112 - 0
uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue


+ 86 - 0
uni_modules/uni-load-more/package.json

@@ -0,0 +1,86 @@
+{
+  "id": "uni-load-more",
+  "displayName": "uni-load-more 加载更多",
+  "version": "1.3.3",
+  "description": "LoadMore 组件,常用在列表里面,做滚动加载使用。",
+  "keywords": [
+    "uni-ui",
+    "uniui",
+    "加载更多",
+    "load-more"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": ""
+  },
+  "directories": {
+    "example": "../../temps/example_temps"
+  },
+  "dcloudext": {
+    "category": [
+      "前端组件",
+      "通用组件"
+    ],
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+  },
+  "uni_modules": {
+    "dependencies": ["uni-scss"],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "y"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+          "QQ": "y"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        },
+        "Vue": {
+            "vue2": "y",
+            "vue3": "y"
+        }
+      }
+    }
+  }
+}

+ 14 - 0
uni_modules/uni-load-more/readme.md

@@ -0,0 +1,14 @@
+
+
+### LoadMore 加载更多
+> **组件名:uni-load-more**
+> 代码块: `uLoadMore`
+
+
+用于列表中,做滚动加载使用,展示 loading 的各种状态。
+
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-load-more)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 
+
+

+ 23 - 0
uni_modules/uni-tag/changelog.md

@@ -0,0 +1,23 @@
+## 2.1.1(2024-03-20)
+- 优化 app下边框过窄导致不显示的bug
+## 2.1.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-tag](https://uniapp.dcloud.io/component/uniui/uni-tag)
+## 2.0.0(2021-11-09)
+- 新增 提供组件设计资源,组件样式调整
+- 移除 插槽
+- 移除 type 属性的 royal 选项
+## 1.1.1(2021-08-11)
+- type 不是 default 时,size 为 small 字体大小显示不正确
+## 1.1.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.0.7(2021-06-18)
+- 修复 uni-tag 在字节跳动小程序上 css 类名编译错误的 bug
+## 1.0.6(2021-06-04)
+- 修复 未定义 sass 变量 "$uni-color-royal" 的bug
+## 1.0.5(2021-05-10)
+- 修复 royal 类型无效的bug
+- 修复 uni-tag 宽度不自适应的bug
+- 新增 uni-tag 支持属性 custom-style 自定义样式
+## 1.0.4(2021-02-05)
+- 调整为uni_modules目录规范

+ 251 - 0
uni_modules/uni-tag/components/uni-tag/uni-tag.vue

@@ -0,0 +1,251 @@
+<template>
+	<text class="uni-tag" v-if="text" :class="classes" :style="customStyle" @click="onClick">{{text}}</text>
+</template>
+
+<script>
+	/**
+	 * Tag 标签
+	 * @description 用于展示1个或多个文字标签,可点击切换选中、不选中的状态
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=35
+	 * @property {String} text 标签内容
+	 * @property {String} size = [default|small|mini] 大小尺寸
+	 * 	@value default 正常
+	 * 	@value small 小尺寸
+	 * 	@value mini 迷你尺寸
+	 * @property {String} type = [default|primary|success|warning|error]  颜色类型
+	 * 	@value default 灰色
+	 * 	@value primary 蓝色
+	 * 	@value success 绿色
+	 * 	@value warning 黄色
+	 * 	@value error 红色
+	 * @property {Boolean} disabled = [true|false] 是否为禁用状态
+	 * @property {Boolean} inverted = [true|false] 是否无需背景颜色(空心标签)
+	 * @property {Boolean} circle = [true|false] 是否为圆角
+	 * @event {Function} click 点击 Tag 触发事件
+	 */
+
+	export default {
+		name: "UniTag",
+		emits: ['click'],
+		props: {
+			type: {
+				// 标签类型default、primary、success、warning、error、royal
+				type: String,
+				default: "default"
+			},
+			size: {
+				// 标签大小 normal, small
+				type: String,
+				default: "normal"
+			},
+			// 标签内容
+			text: {
+				type: String,
+				default: ""
+			},
+			disabled: {
+				// 是否为禁用状态
+				type: [Boolean, String],
+				default: false
+			},
+			inverted: {
+				// 是否为空心
+				type: [Boolean, String],
+				default: false
+			},
+			circle: {
+				// 是否为圆角样式
+				type: [Boolean, String],
+				default: false
+			},
+			mark: {
+				// 是否为标记样式
+				type: [Boolean, String],
+				default: false
+			},
+			customStyle: {
+				type: String,
+				default: ''
+			}
+		},
+		computed: {
+			classes() {
+				const {
+					type,
+					disabled,
+					inverted,
+					circle,
+					mark,
+					size,
+					isTrue
+				} = this
+				const classArr = [
+					'uni-tag--' + type,
+					'uni-tag--' + size,
+					isTrue(disabled) ? 'uni-tag--disabled' : '',
+					isTrue(inverted) ? 'uni-tag--' + type + '--inverted' : '',
+					isTrue(circle) ? 'uni-tag--circle' : '',
+					isTrue(mark) ? 'uni-tag--mark' : '',
+					// type === 'default' ? 'uni-tag--default' : 'uni-tag-text',
+					isTrue(inverted) ? 'uni-tag--inverted uni-tag-text--' + type : '',
+					size === 'small' ? 'uni-tag-text--small' : ''
+				]
+				// 返回类的字符串,兼容字节小程序
+				return classArr.join(' ')
+			}
+		},
+		methods: {
+			isTrue(value) {
+				return value === true || value === 'true'
+			},
+			onClick() {
+				if (this.isTrue(this.disabled)) return
+				this.$emit("click");
+			}
+		}
+	};
+</script>
+
+<style lang="scss" scoped>
+	$uni-primary: #2979ff !default;
+	$uni-success: #18bc37 !default;
+	$uni-warning: #f3a73f !default;
+	$uni-error: #e43d33 !default;
+	$uni-info: #8f939c !default;
+
+
+	$tag-default-pd: 4px 7px;
+	$tag-small-pd: 2px 5px;
+	$tag-mini-pd: 1px 3px;
+
+	.uni-tag {
+		line-height: 14px;
+		font-size: 12px;
+		padding: $tag-default-pd;
+		color: #fff;
+		border-radius: 3px;
+		background-color: $uni-info;
+		border-width: 1px;
+		border-style: solid;
+		border-color: $uni-info;
+		/* #ifdef H5 */
+		cursor: pointer;
+		/* #endif */
+
+		// size attr
+		&--default {
+			font-size: 12px;
+		}
+
+		&--default--inverted {
+			color: $uni-info;
+			border-color: $uni-info;
+		}
+
+		&--small {
+			padding: $tag-small-pd;
+			font-size: 12px;
+			border-radius: 2px;
+		}
+
+		&--mini {
+			padding: $tag-mini-pd;
+			font-size: 12px;
+			border-radius: 2px;
+		}
+
+		// type attr
+		&--primary {
+			background-color: $uni-primary;
+			border-color: $uni-primary;
+			color: #fff;
+		}
+
+		&--success {
+			color: #fff;
+			background-color: $uni-success;
+			border-color: $uni-success;
+		}
+
+		&--warning {
+			color: #fff;
+			background-color: $uni-warning;
+			border-color: $uni-warning;
+		}
+
+		&--error {
+			color: #fff;
+			background-color: $uni-error;
+			border-color: $uni-error;
+		}
+
+		&--primary--inverted {
+			color: $uni-primary;
+			border-color: $uni-primary;
+		}
+
+		&--success--inverted {
+			color: $uni-success;
+			border-color: $uni-success;
+		}
+
+		&--warning--inverted {
+			color: $uni-warning;
+			border-color: $uni-warning;
+		}
+
+		&--error--inverted {
+			color: $uni-error;
+			border-color: $uni-error;
+		}
+
+		&--inverted {
+			background-color: #fff;
+		}
+
+		// other attr
+		&--circle {
+			border-radius: 15px;
+		}
+
+		&--mark {
+			border-top-left-radius: 0;
+			border-bottom-left-radius: 0;
+			border-top-right-radius: 15px;
+			border-bottom-right-radius: 15px;
+		}
+
+		&--disabled {
+			opacity: 0.5;
+			/* #ifdef H5 */
+			cursor: not-allowed;
+			/* #endif */
+		}
+	}
+
+
+	.uni-tag-text {
+		color: #fff;
+		font-size: 14px;
+
+		&--primary {
+			color: $uni-primary;
+		}
+
+		&--success {
+			color: $uni-success;
+		}
+
+		&--warning {
+			color: $uni-warning;
+		}
+
+		&--error {
+			color: $uni-error;
+		}
+
+		&--small {
+			font-size: 12px;
+		}
+	}
+</style>

+ 84 - 0
uni_modules/uni-tag/package.json

@@ -0,0 +1,84 @@
+{
+  "id": "uni-tag",
+  "displayName": "uni-tag 标签",
+  "version": "2.1.1",
+  "description": "Tag 组件,用于展示1个或多个文字标签,可点击切换选中、不选中的状态。",
+  "keywords": [
+    "uni-ui",
+    "uniui",
+    "",
+    "tag",
+    "标签"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": ""
+  },
+  "directories": {
+    "example": "../../temps/example_temps"
+  },
+"dcloudext": {
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+    "type": "component-vue"
+  },
+  "uni_modules": {
+    "dependencies": ["uni-scss"],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "y"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+          "QQ": "y"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        },
+        "Vue": {
+            "vue2": "y",
+            "vue3": "y"
+        }
+      }
+    }
+  }
+}

+ 13 - 0
uni_modules/uni-tag/readme.md

@@ -0,0 +1,13 @@
+
+
+## Tag 标签
+> **组件名:uni-tag**
+> 代码块: `uTag`
+
+
+用于展示1个或多个文字标签,可点击切换选中、不选中的状态 。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-tag)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 
+
+

Some files were not shown because too many files changed in this diff