浏览代码

地图筛选和部分bug,产品部分bug

yfso 2 年之前
父节点
当前提交
497da24cc1
共有 44 个文件被更改,包括 565 次插入6181 次删除
  1. 61 0
      components/extra/navbarTransparent.vue
  2. 3 2
      components/hch-position/hch-position.vue
  3. 2 2
      manifest.json
  4. 4 2
      pages.json
  5. 394 0
      pages/goods/goods-detail/index.scss
  6. 10 391
      pages/goods/goods-detail/index.vue
  7. 3 1
      pages/goods/goods.vue
  8. 12 12
      pages/map/map.scss
  9. 76 118
      pages/map/map.vue
  10. 0 63
      uni_modules/uni-file-picker/changelog.md
  11. 0 224
      uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js
  12. 0 656
      uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue
  13. 0 325
      uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue
  14. 0 292
      uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue
  15. 0 109
      uni_modules/uni-file-picker/components/uni-file-picker/utils.js
  16. 0 86
      uni_modules/uni-file-picker/package.json
  17. 0 11
      uni_modules/uni-file-picker/readme.md
  18. 0 20
      uni_modules/uni-list/changelog.md
  19. 0 107
      uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue
  20. 0 58
      uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss
  21. 0 538
      uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue
  22. 0 454
      uni_modules/uni-list/components/uni-list-item/uni-list-item.vue
  23. 0 108
      uni_modules/uni-list/components/uni-list/uni-list.vue
  24. 0 65
      uni_modules/uni-list/components/uni-list/uni-refresh.vue
  25. 0 87
      uni_modules/uni-list/components/uni-list/uni-refresh.wxs
  26. 0 91
      uni_modules/uni-list/package.json
  27. 0 346
      uni_modules/uni-list/readme.md
  28. 0 23
      uni_modules/uni-table/changelog.md
  29. 0 455
      uni_modules/uni-table/components/uni-table/uni-table.vue
  30. 0 29
      uni_modules/uni-table/components/uni-tbody/uni-tbody.vue
  31. 0 90
      uni_modules/uni-table/components/uni-td/uni-td.vue
  32. 0 503
      uni_modules/uni-table/components/uni-th/filter-dropdown.vue
  33. 0 278
      uni_modules/uni-table/components/uni-th/uni-th.vue
  34. 0 129
      uni_modules/uni-table/components/uni-thead/uni-thead.vue
  35. 0 179
      uni_modules/uni-table/components/uni-tr/table-checkbox.vue
  36. 0 171
      uni_modules/uni-table/components/uni-tr/uni-tr.vue
  37. 0 9
      uni_modules/uni-table/i18n/en.json
  38. 0 9
      uni_modules/uni-table/i18n/es.json
  39. 0 9
      uni_modules/uni-table/i18n/fr.json
  40. 0 12
      uni_modules/uni-table/i18n/index.js
  41. 0 9
      uni_modules/uni-table/i18n/zh-Hans.json
  42. 0 9
      uni_modules/uni-table/i18n/zh-Hant.json
  43. 0 86
      uni_modules/uni-table/package.json
  44. 0 13
      uni_modules/uni-table/readme.md

+ 61 - 0
components/extra/navbarTransparent.vue

xqd
@@ -0,0 +1,61 @@
+<template>
+	<view class="navbarTran" :style="{height: `${placeholderHeight}px`}">
+		<view :style="{height: `${barHeight}px`, marginTop:`${barTop}px`}">
+			<uni-icons style="margin-left: 10px;" type="back" color="#000000" size="26" @click="back"></uni-icons>
+			<text style="margin-left: 10px;">{{title}}</text>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		name: "navbarTransparent",
+		props:['title'],
+		data(){
+			return {
+				barTop:0,
+				barHeight:0,
+				placeholderHeight:0
+			}
+		},
+		onReady(){
+			this.barTop = uni.getSystemInfoSync().statusBarHeight
+			const menuButtonInfo = uni.getMenuButtonBoundingClientRect()
+			this.barHeight = menuButtonInfo.height + (menuButtonInfo.top - this.barTop) * 2
+			this.placeholderHeight = this.barHeight + this.barTop
+		},
+		methods:{
+			back(){
+				uni.navigateBack({
+					fail:()=>{
+						uni.switchTab({
+							url: "/pages/index/index"
+						})
+					}
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.navbarTran{
+		z-index: 100;
+		position: fixed;
+		top: 0;
+		// height: 100rpx;
+		width: 100%;
+		background-color: transparent;
+		
+		>view{
+			display: flex;
+			align-items: center;
+			justify-content: flex-start;
+		}
+		text{
+			color:#000;
+			font-size: 32rpx;
+			text-shadow: 0.1px 0.1px 0.2px #000;
+		}
+	}
+</style>

+ 3 - 2
components/hch-position/hch-position.vue

xqd
@@ -140,8 +140,9 @@
 				})
 			},
 			//	点击标记点时触发,e.detail = {markerId}
-			markertap(e, mode = true) {
-				if(this.isActiveMarker === e.markerId || this.isMarkering) return;
+			markertap(e, mode = true, isQt = false) {
+				if(!isQt && (this.isActiveMarker === e.markerId || this.isMarkering)) return;
+				
 				this.isMarkering = true;
 				setTimeout(()=>{
 					this.isMarkering = false

+ 2 - 2
manifest.json

xqd xqd
@@ -1,6 +1,6 @@
 {
     "name" : "hotel_uni",
-    "appid" : "__UNI__807A871",
+    "appid" : "__UNI__9140D70",
     "description" : "",
     "versionName" : "1.0.0",
     "versionCode" : "100",
@@ -69,7 +69,7 @@
             }
         },
         "requiredPrivateInfos" : [ "getLocation", "chooseLocation" ],
-		"lazyCodeLoading": "requiredComponents"
+        "lazyCodeLoading" : "requiredComponents"
     },
     "mp-alipay" : {
         "usingComponents" : true

+ 4 - 2
pages.json

xqd xqd
@@ -39,7 +39,8 @@
 			"path": "pages/goods/goods",
 			"style": {
 				"navigationBarTitleText": "产品活动列表",
-				"enablePullDownRefresh": false
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
 			}
 
 		},
@@ -47,7 +48,8 @@
 			"path": "pages/goods/goods-detail/index",
 			"style": {
 				"navigationBarTitleText": "产品详情",
-				"enablePullDownRefresh": false
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
 			}
 
 		},

+ 394 - 0
pages/goods/goods-detail/index.scss

xqd
@@ -0,0 +1,394 @@
+$pageColor:#F9F9F9;
+	$bgColor:#FFFFFF;
+
+	@mixin flexlayout {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+
+	page {
+		height: 100% !important;
+		background: #F9F9F9 !important;
+	}
+
+	.code-purchase {
+		width: 640rpx;
+		height: 764rpx;
+		background: $bgColor;
+		border-radius: 20rpx;
+		padding-top: 64rpx;
+		box-sizing: border-box;
+
+		.title {
+			@include flexlayout();
+			margin-bottom: 24rpx;
+
+			text {
+				font-size: 34rpx;
+				font-family: PingFangSC-Medium, PingFang SC;
+				font-weight: 500;
+				color: #333333;
+			}
+		}
+
+		.img {
+			margin-top: 10rpx;
+			margin-left: 48rpx;
+			width: 544rpx;
+			height: 468rpx;
+			background: $bgColor;
+			border-radius: 2rpx;
+			@include flexlayout();
+
+			image {
+				width: 392rpx;
+				height: 390rpx;
+			}
+		}
+
+		.btn {
+			margin-top: 40rpx;
+			width: 100%;
+			height: 110rpx;
+			display: flex;
+			align-items: center;
+
+			.cancel {
+				@include flexlayout();
+				width: 50%;
+				height: 100%;
+				border-top: #E5E5E5 solid 1rpx;
+				border-right: #E5E5E5 solid 1rpx;
+
+				text {
+					font-size: 32rpx;
+					font-family: PingFangSC-Medium, PingFang SC;
+					font-weight: 500;
+					color: #666666;
+				}
+			}
+
+			.download {
+				border-top: #E5E5E5 solid 1rpx;
+				// border-left:#E5E5E5 solid 0.3rpx;
+				@include flexlayout();
+				height: 100%;
+				width: 50%;
+
+				text {
+					font-size: 32rpx;
+					font-family: PingFangSC-Medium, PingFang SC;
+					font-weight: 500;
+					color: #FF7119;
+				}
+			}
+		}
+	}
+
+
+
+	.purchase {
+		position: fixed;
+		bottom: 0;
+		width: 100%;
+		height: 148rpx;
+		background: #FFFFFF;
+		box-shadow: 0px -4px 8px 0px rgba(0, 0, 0, 0.05);
+		padding: 0 30rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+
+		.purchase-btn {
+			width: 100%;
+			height: 92rpx;
+			background: linear-gradient(270deg, #FF6200 0%, #FF9342 100%);
+			border-radius: 12rpx;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			font-weight: bold;
+			color: #FFFFFF;
+			font-size: 30rpx;
+		}
+	}
+
+	.pop {
+		padding: 32rpx 30rpx 80rpx;
+		width: 100%;
+		height: 914rpx;
+		background: #FFFFFF;
+		border-radius: 22rpx 22rpx 0px 0px;
+		overflow-y: scroll;
+		position: relative;
+
+		.pop-price {
+			display: flex;
+			align-items: flex-start;
+			justify-content: space-between;
+
+			.pop-price-left {
+				flex: 1;
+				display: flex;
+				align-items: center;
+				justify-content: flex-start;
+
+				.pop-price-left-money {
+					font-weight: 800;
+					color: #FF6200;
+					font-size: 48rpx;
+					margin-left: 20rpx;
+				}
+			}
+		}
+
+		.pop-flavor {
+			width: 100%;
+			margin-top: 64rpx;
+			font-weight: bold;
+			color: #333333;
+			font-size: 32rpx;
+		}
+	}
+
+	//口味切换
+	.tab_flavor {
+		margin-top: 14rpx;
+		width: 100%;
+		display: flex;
+		justify-content: flex-start;
+		align-items: center;
+		font-family: PingFang-SC-Heavy, PingFang-SC;
+		flex-wrap: wrap;
+	}
+
+	.tab_flavor .flavorTitle-item {
+		width: 220rpx;
+		height: 60rpx;
+		background-color: #FFF;
+		border: 2rpx solid #CCCCCC;
+		border-radius: 30rpx;
+		font-size: 30rpx;
+		color: #999;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		margin-right: 15rpx;
+		font-weight: normal;
+		margin-top: 16rpx;
+
+		&:nth-child(3n) {
+			margin-right: 0;
+		}
+	}
+	
+	.flavorTitle-item-active{
+		border: none !important;
+	}
+	
+	.active-flavor {
+		width: 220rpx;
+		height: 60rpx;
+		border-radius: 30rpx;
+		background-color: #FF6200;
+		border: none;
+		color: #fff;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.buy-btn {
+		position: fixed;
+		bottom: 0;
+		width: 100%;
+		padding: 0 30rpx 0 58rpx;
+		height: 148rpx;
+		background: #FFFFFF;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+
+		.buy-btn-left {
+			flex: none;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			justify-content: center;
+			color: #FF6200;
+			font-size: 22rpx;
+		}
+
+		.buy-btn-right {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			margin-left: 40rpx;
+			flex: 1;
+			height: 92rpx;
+			background: linear-gradient(270deg, #FF6200 0%, #FF9342 100%);
+			border-radius: 12rpx;
+			font-weight: bold;
+			color: #FFFFFF;
+			font-size: 30rpx;
+		}
+	}
+
+
+	.goods-detail {
+		height: 100%;
+		background: #F9F9F9;
+	}
+
+	.produce {
+		margin-top: 24rpx;
+		padding: 40rpx 30rpx 36rpx;
+		background: #FFFFFF;
+		box-shadow: 0px 4rpx 8rpx 0px rgba(0, 0, 0, 0.02);
+		border-radius: 16rpx;
+
+		.produce-title {
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #333333;
+		}
+
+		.produce-text {
+			margin-top: 26rpx;
+			font-size: 30rpx;
+			color: #333333;
+			line-height: 48rpx;
+		}
+	}
+
+	.about {
+		padding: 40rpx 30rpx 40rpx;
+		width: 100%;
+		// height: 350rpx;
+		background: #FFFFFF;
+		box-shadow: 0px 4rpx 8rpx 0px rgba(0, 0, 0, 0.02);
+		border-radius: 16rpx;
+		display: flex;
+		flex-direction: column;
+		align-items: flex-start;
+		justify-content: flex-start;
+
+		.about-title {
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #333333;
+		}
+
+		.about-name {
+			margin: 30rpx 0 20rpx;
+			font-size: 30rpx;
+			color: #333333;
+		}
+
+		.about-address {
+			font-size: 30rpx;
+			color: #333333;
+		}
+
+		.about-phone {
+			margin: 20rpx 0 48rpx;
+			font-size: 30rpx;
+			color: #333333;
+		}
+
+		.about-all {
+			width: 100%;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			font-size: 32rpx;
+			color: #FF6200;
+		}
+	}
+
+
+
+	.home-swiper {
+		height: 576rpx;
+
+		.swiper-box {
+			height: 576rpx;
+		}
+	}
+
+	::v-deep .uni-swiper__dots-box {
+		bottom: 48rpx !important;
+	}
+
+	.price {
+		padding: 32rpx 30rpx 0rpx;
+		position: relative;
+		top: -20rpx;
+		// height: 406rpx;
+		background: #FFFFFF;
+		box-shadow: 0px 4rpx 8rpx 0px rgba(0, 0, 0, 0.02);
+		border-radius: 16rpx;
+		display: flex;
+		flex-direction: column;
+		align-items: flex-start;
+		justify-content: flex-start;
+
+		.price-top {
+			font-size: 48rpx;
+			font-weight: 800;
+			color: #FF6200;
+		}
+
+		.price-text {
+			margin: 30rpx 0 26rpx;
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #333333;
+		}
+
+		.price-banner {
+			padding: 0 24rpx;
+			width: 100%;
+			height: 80rpx;
+			background-repeat: no-repeat;
+			background-size: cover;
+			background-position: center;
+			font-size: 32rpx;
+			color: #FFFFFF;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+
+		}
+
+		.price-specs {
+			margin-top: 48rpx;
+			width: 100%;
+			height: 110rpx;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			border-top: 2rpx solid #F0F0F0;
+
+			.price-specs-left {
+				flex: none;
+				font-size: 32rpx;
+				font-weight: bold;
+				color: #333333;
+			}
+
+			.price-specs-main {
+				flex: 1;
+				margin-left: 28rpx;
+				font-size: 30rpx;
+				color: #666666;
+			}
+
+		}
+	}
+	.header{
+		text{
+			color:#fff;
+		}
+	}

+ 10 - 391
pages/goods/goods-detail/index.vue

xqd xqd xqd xqd xqd
@@ -1,5 +1,6 @@
 <template>
 	<view class="goods-detail">
+		<navbarTransparent :title="page.title"/>
 		<!-- swiper -->
 		<view class="home-swiper">
 			<!-- <uni-swiper-dot :info="info" :current="current1" :mode="mode" :dots-styles="dotsStyles">
@@ -165,7 +166,9 @@
 </template>
 
 <script>
+	import navbarTransparent from "@/components/extra/navbarTransparent.vue"
 	export default {
+		components:{navbarTransparent},
 		data() {
 			return {
 				jump_type: '',
@@ -211,6 +214,9 @@
 				//指示点模式
 				mode: 'dot',
 				attr_groups:[],
+				page: {
+					title: '产品详情'
+				}
 			}
 		},
 		onReady: function(res) {
@@ -302,6 +308,9 @@
 						//获取默认酒店
 						const hotel_ids = JSON.parse(res.data.hotel_ids);
 						(hotel_ids.constructor == Array) && (hotel_ids.length > 0) &&  this.getHotelDetail(hotel_ids[0]);
+						//
+						const sku = JSON.parse(res.data.sku);
+						console.log(sku)
 					}
 				})
 			},
@@ -389,394 +398,4 @@
 	}
 </script>
 
-<style lang="scss" scoped>
-	$pageColor:#F9F9F9;
-	$bgColor:#FFFFFF;
-
-	@mixin flexlayout {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-	}
-
-	page {
-		height: 100% !important;
-		background: #F9F9F9 !important;
-	}
-
-	.code-purchase {
-		width: 640rpx;
-		height: 764rpx;
-		background: $bgColor;
-		border-radius: 20rpx;
-		padding-top: 64rpx;
-		box-sizing: border-box;
-
-		.title {
-			@include flexlayout();
-			margin-bottom: 24rpx;
-
-			text {
-				font-size: 34rpx;
-				font-family: PingFangSC-Medium, PingFang SC;
-				font-weight: 500;
-				color: #333333;
-			}
-		}
-
-		.img {
-			margin-top: 10rpx;
-			margin-left: 48rpx;
-			width: 544rpx;
-			height: 468rpx;
-			background: $bgColor;
-			border-radius: 2rpx;
-			@include flexlayout();
-
-			image {
-				width: 392rpx;
-				height: 390rpx;
-			}
-		}
-
-		.btn {
-			margin-top: 40rpx;
-			width: 100%;
-			height: 110rpx;
-			display: flex;
-			align-items: center;
-
-			.cancel {
-				@include flexlayout();
-				width: 50%;
-				height: 100%;
-				border-top: #E5E5E5 solid 1rpx;
-				border-right: #E5E5E5 solid 1rpx;
-
-				text {
-					font-size: 32rpx;
-					font-family: PingFangSC-Medium, PingFang SC;
-					font-weight: 500;
-					color: #666666;
-				}
-			}
-
-			.download {
-				border-top: #E5E5E5 solid 1rpx;
-				// border-left:#E5E5E5 solid 0.3rpx;
-				@include flexlayout();
-				height: 100%;
-				width: 50%;
-
-				text {
-					font-size: 32rpx;
-					font-family: PingFangSC-Medium, PingFang SC;
-					font-weight: 500;
-					color: #FF7119;
-				}
-			}
-		}
-	}
-
-
-
-	.purchase {
-		position: fixed;
-		bottom: 0;
-		width: 100%;
-		height: 148rpx;
-		background: #FFFFFF;
-		box-shadow: 0px -4px 8px 0px rgba(0, 0, 0, 0.05);
-		padding: 0 30rpx;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-
-		.purchase-btn {
-			width: 100%;
-			height: 92rpx;
-			background: linear-gradient(270deg, #FF6200 0%, #FF9342 100%);
-			border-radius: 12rpx;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			font-weight: bold;
-			color: #FFFFFF;
-			font-size: 30rpx;
-		}
-	}
-
-	.pop {
-		padding: 32rpx 30rpx 80rpx;
-		width: 100%;
-		height: 914rpx;
-		background: #FFFFFF;
-		border-radius: 22rpx 22rpx 0px 0px;
-		overflow-y: scroll;
-		position: relative;
-
-		.pop-price {
-			display: flex;
-			align-items: flex-start;
-			justify-content: space-between;
-
-			.pop-price-left {
-				flex: 1;
-				display: flex;
-				align-items: center;
-				justify-content: flex-start;
-
-				.pop-price-left-money {
-					font-weight: 800;
-					color: #FF6200;
-					font-size: 48rpx;
-					margin-left: 20rpx;
-				}
-			}
-		}
-
-		.pop-flavor {
-			width: 100%;
-			margin-top: 64rpx;
-			font-weight: bold;
-			color: #333333;
-			font-size: 32rpx;
-		}
-	}
-
-	//口味切换
-	.tab_flavor {
-		margin-top: 14rpx;
-		width: 100%;
-		display: flex;
-		justify-content: flex-start;
-		align-items: center;
-		font-family: PingFang-SC-Heavy, PingFang-SC;
-		flex-wrap: wrap;
-	}
-
-	.tab_flavor .flavorTitle-item {
-		width: 220rpx;
-		height: 60rpx;
-		background-color: #FFF;
-		border: 2rpx solid #CCCCCC;
-		border-radius: 30rpx;
-		font-size: 30rpx;
-		color: #999;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		margin-right: 15rpx;
-		font-weight: normal;
-		margin-top: 16rpx;
-
-		&:nth-child(3n) {
-			margin-right: 0;
-		}
-	}
-	
-	.flavorTitle-item-active{
-		border: none !important;
-	}
-	
-	.active-flavor {
-		width: 220rpx;
-		height: 60rpx;
-		border-radius: 30rpx;
-		background-color: #FF6200;
-		border: none;
-		color: #fff;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-	}
-
-	.buy-btn {
-		position: fixed;
-		bottom: 0;
-		width: 100%;
-		padding: 0 30rpx 0 58rpx;
-		height: 148rpx;
-		background: #FFFFFF;
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-
-		.buy-btn-left {
-			flex: none;
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-			justify-content: center;
-			color: #FF6200;
-			font-size: 22rpx;
-		}
-
-		.buy-btn-right {
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			margin-left: 40rpx;
-			flex: 1;
-			height: 92rpx;
-			background: linear-gradient(270deg, #FF6200 0%, #FF9342 100%);
-			border-radius: 12rpx;
-			font-weight: bold;
-			color: #FFFFFF;
-			font-size: 30rpx;
-		}
-	}
-
-
-	.goods-detail {
-		height: 100%;
-		background: #F9F9F9;
-	}
-
-	.produce {
-		margin-top: 24rpx;
-		padding: 40rpx 30rpx 36rpx;
-		background: #FFFFFF;
-		box-shadow: 0px 4rpx 8rpx 0px rgba(0, 0, 0, 0.02);
-		border-radius: 16rpx;
-
-		.produce-title {
-			font-size: 32rpx;
-			font-weight: bold;
-			color: #333333;
-		}
-
-		.produce-text {
-			margin-top: 26rpx;
-			font-size: 30rpx;
-			color: #333333;
-			line-height: 48rpx;
-		}
-	}
-
-	.about {
-		padding: 40rpx 30rpx 40rpx;
-		width: 100%;
-		// height: 350rpx;
-		background: #FFFFFF;
-		box-shadow: 0px 4rpx 8rpx 0px rgba(0, 0, 0, 0.02);
-		border-radius: 16rpx;
-		display: flex;
-		flex-direction: column;
-		align-items: flex-start;
-		justify-content: flex-start;
-
-		.about-title {
-			font-size: 32rpx;
-			font-weight: bold;
-			color: #333333;
-		}
-
-		.about-name {
-			margin: 30rpx 0 20rpx;
-			font-size: 30rpx;
-			color: #333333;
-		}
-
-		.about-address {
-			font-size: 30rpx;
-			color: #333333;
-		}
-
-		.about-phone {
-			margin: 20rpx 0 48rpx;
-			font-size: 30rpx;
-			color: #333333;
-		}
-
-		.about-all {
-			width: 100%;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			font-size: 32rpx;
-			color: #FF6200;
-		}
-	}
-
-
-
-	.home-swiper {
-		height: 576rpx;
-
-		.swiper-box {
-			height: 576rpx;
-		}
-	}
-
-	::v-deep .uni-swiper__dots-box {
-		bottom: 48rpx !important;
-	}
-
-	.price {
-		padding: 32rpx 30rpx 0rpx;
-		position: relative;
-		top: -20rpx;
-		// height: 406rpx;
-		background: #FFFFFF;
-		box-shadow: 0px 4rpx 8rpx 0px rgba(0, 0, 0, 0.02);
-		border-radius: 16rpx;
-		display: flex;
-		flex-direction: column;
-		align-items: flex-start;
-		justify-content: flex-start;
-
-		.price-top {
-			font-size: 48rpx;
-			font-weight: 800;
-			color: #FF6200;
-		}
-
-		.price-text {
-			margin: 30rpx 0 26rpx;
-			font-size: 32rpx;
-			font-weight: bold;
-			color: #333333;
-		}
-
-		.price-banner {
-			padding: 0 24rpx;
-			width: 100%;
-			height: 80rpx;
-			background-repeat: no-repeat;
-			background-size: cover;
-			background-position: center;
-			font-size: 32rpx;
-			color: #FFFFFF;
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-
-		}
-
-		.price-specs {
-			margin-top: 48rpx;
-			width: 100%;
-			height: 110rpx;
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-			border-top: 2rpx solid #F0F0F0;
-
-			.price-specs-left {
-				flex: none;
-				font-size: 32rpx;
-				font-weight: bold;
-				color: #333333;
-			}
-
-			.price-specs-main {
-				flex: 1;
-				margin-left: 28rpx;
-				font-size: 30rpx;
-				color: #666666;
-			}
-
-		}
-	}
-</style>
+<style lang="scss" scoped src="./index.scss"></style>

+ 3 - 1
pages/goods/goods.vue

xqd xqd
@@ -1,5 +1,6 @@
 <template>
 	<view class="goods">
+		<navbarTransparent title="产品活动列表"/>
 		<scroll-view class="scroll-y" @scroll="handleScroll" :scroll-into-view="topItem" scroll-with-animation
 			scroll-y="true">
 			<view id="top"></view>
@@ -59,8 +60,9 @@
 
 <script>
 	import util from '@/utils/util.js'
+	import navbarTransparent from "@/components/extra/navbarTransparent.vue"
 	export default {
-
+		components:{navbarTransparent},
 		data() {
 			return {
 				//搜索

+ 12 - 12
pages/map/map.scss

xqd xqd xqd xqd
@@ -138,7 +138,7 @@ page {
 		width: 100%;
 		position: absolute;
 		top: 88rpx;
-		z-index: 999 !important;
+		// z-index: 999 !important;
 		background-color: #ffffff;
 		box-shadow: 0px 12rpx 16rpx 0px rgba(220, 222, 229, 0.4);
 		padding: 20rpx 30rpx 20rpx;
@@ -200,8 +200,9 @@ page {
 			align-items: center;
 
 			.areaTitle {
-				width: 156rpx;
+				min-width: 156rpx;
 				height: 56rpx;
+				padding: 0px 20rpx;
 				background: #FFFFFF;
 				border: 2rpx solid #EDEDED;
 				border-radius: 28rpx;
@@ -216,7 +217,13 @@ page {
 				&:nth-child(4n) {
 					margin-right: 0;
 				}
+				&.on{
+					background-color: #FF6200;
+					color:#fff;
+				}
 			}
+			
+			
 
 			// .areaTitle-item {
 			// 	width: 156rpx;
@@ -229,16 +236,9 @@ page {
 			// 	justify-content: center;
 			// 	align-items: center;
 			// }
-			.active-area {
-				width: 156rpx;
-				height: 56rpx;
-				border-radius: 28rpx;
-				background-color: #FF6200;
-				color: #fff;
-				display: flex;
-				justify-content: center;
-				align-items: center;
-			}
+			// .active-area {
+			// 	background-color: #FF6200;
+			// }
 		}
 
 		.search-detail-btn {

+ 76 - 118
pages/map/map.vue

xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd
@@ -8,30 +8,13 @@
 					<image style="width: 32rpx;height: 32rpx;" src="/static/icon/search02.png" mode=""></image>
 				</view>
 				<view class="search-area-all">
-					<view :class="isSelectArea?'search-area':'search-areaClick'" @click="openArea">
-						<text>地区</text>
-						<image v-if="isSelectArea" style="width: 16rpx;height: 10rpx;" src="/static/icon/down01.png"
+					<view :class="search.openId!=item.id?'search-area':'search-areaClick'" 
+					v-for="(item, index) in search.content" :key="item.id" @click="openSelector(item.id)">
+						<text>{{item.name}}</text>
+						<image v-if="search.openId!=item.id" style="width: 16rpx;height: 10rpx;" src="/static/icon/down01.png"
 							mode="">
 						</image>
-						<image v-if="!isSelectArea" style="width: 16rpx;height: 10rpx;" src="/static/icon/up01.png"
-							mode="">
-						</image>
-					</view>
-					<view :class="isSelectBrand?'search-area':'search-areaClick'" @click="openBrand">
-						<text>品牌</text>
-						<image v-if="isSelectBrand" style="width: 16rpx;height: 10rpx;" src="/static/icon/down01.png"
-							mode="">
-						</image>
-						<image v-if="!isSelectBrand" style="width: 16rpx;height: 10rpx;" src="/static/icon/up01.png"
-							mode="">
-						</image>
-					</view>
-					<view class="search-area" :class="isSelectSift?'search-area':'search-areaClick'" @click="openSift">
-						<text>更多筛选</text>
-						<image v-if="isSelectSift" style="width: 16rpx;height: 10rpx;" src="/static/icon/down01.png"
-							mode="">
-						</image>
-						<image v-if="!isSelectSift" style="width: 16rpx;height: 10rpx;" src="/static/icon/up01.png"
+						<image v-else style="width: 16rpx;height: 10rpx;" src="/static/icon/up01.png"
 							mode="">
 						</image>
 					</view>
@@ -46,44 +29,34 @@
 					</template>
 				</u-input>
 			</view>
-			<!-- 选择地区 -->
-			<view class="search-detail" v-if="!isSelectArea">
-				<view class="search-detail-area">
-					<view class="areaTitle" v-for="(item,index) in search.content.area" :key="item.id" @click="checked(item.id,'area')">
-						<view :class="{'active-area':search.area === item.id}">
-							{{item.name}}
+			
+				
+			<template v-for="(item, index) in search.content">
+				<view :key="item.id" class="search-detail" style="z-index: 9;" v-if="search.openId == item.id">
+					<view class="search-detail-area">
+						<view :class="{areaTitle:true, on: search.selected.includes(v.id)}" 
+						v-for="(v,k) in item.sub" 
+						:key="v.id" 
+						@click="checked(v.id)">
+							<view>
+								{{v.name}}
+							</view>
 						</view>
 					</view>
-				</view>
-				<view class="search-detail-btn">
-					<view class="search-detail-btn-left" @click="cancelSearch">
-						<text>取消</text>
-					</view>
-					<view class="search-detail-btn-right" @click="toSearchList()">
-						<text>确认</text>
-					</view>
-				</view>
-			</view>
-			<!-- 选择品牌-->
-			<view class="search-detail" v-if="!isSelectBrand">
-				<view class="search-detail-area">
-					<view class="areaTitle" v-for="(item,index) in search.content.brand" :key="item.id" @click="checked(item.id,'brand')">
-						<view :class="{'active-area':search.brand === item.id}">
-							{{item.name}}
+					<view class="search-detail-btn">
+						<view class="search-detail-btn-left" @click="cancelSearch">
+							<text>取消</text>
+						</view>
+						<view class="search-detail-btn-right" @click="confirmSearch">
+							<text>确认</text>
 						</view>
 					</view>
 				</view>
-				<view class="search-detail-btn">
-					<view class="search-detail-btn-left" @click="cancelSearch">
-						<text>取消</text>
-					</view>
-					<view class="search-detail-btn-right" @click="toSearchList()">
-						<text>确认</text>
-					</view>
-				</view>
-			</view>
+			</template>
+			
+		
 			<!-- 筛选-->
-			<view class="search-detail" v-if="!isSelectSift">
+			<view class="search-detail" style="z-index: 9;display: none;" v-if="!isSelectSift">
 				<view class="partner">
 					<view class="partner-top" @click="selectPartner">
 						<text>合作伙伴</text>
@@ -121,7 +94,7 @@
 						<view class="search-detail-btn-left" @click="cancelSearch">
 							<text>取消</text>
 						</view>
-						<view class="search-detail-btn-right" @click="toSearchList()">
+						<view class="search-detail-btn-right" @click="">
 							<text>确认</text>
 						</view>
 					</view>
@@ -149,7 +122,7 @@
 					style="width: 100%; overflow-x: scroll; display: none;align-items: center;justify-content: space-between;">	
 				</view>
 				<!-- @scroll="bottomScroll" -->
-				<scroll-view style="width: calc(100% + 16px);height:318rpx;white-space: nowrap;margin-left: -8px;" 
+				<scroll-view style="width: calc(100% + 16px);height:318rpx;white-space: nowrap;margin-left: -8px;z-index:10" 
 					@scrolltolower="scrollTolower" 
 					@scroll="bottomScroll"
 					:scroll-x="true" 
@@ -198,7 +171,7 @@
 		</view>
 
 		<!-- 酒店列表 -->
-		<view class="hotel-list" style="position: absolute;" v-if="!isShow">
+		<view class="hotel-list" style="position: absolute;z-index:11;height:100%" v-if="!isShow">
 			<view class="hotel-list-item" v-for="(item,index) in hotelList" :key="index" @click="goBook(item.id)">
 				<view class="wrap">
 					<view class="mark">
@@ -273,19 +246,14 @@
 				//是否展示地图
 				isShow: true,
 				value: [0],
-				//地区
+				//搜索
 				search:{
-					area: "",
-					brand: "",
-					coop: [],
-					league: [],
-					isActiveIds:[],
-					content: {
-						area: [],
-						brand: [],
-						coop: [],
-						league: [],
-					}
+					content: {},
+					text: "",
+					openId:0,
+					isSearch:false,
+					selected:[],
+					currentSelected:[]
 				},
 				areaList: [],
 				//激活指定table菜单
@@ -310,7 +278,6 @@
 					activeIndex:0
 				},
 				beginConfig:{
-					first: true,
 					hotel_id: 0
 				}
 			}
@@ -319,7 +286,8 @@
 			const {hotel_id,category_ids} = e;
 			this.beginConfig.hotel_id = hotel_id;
 			if(category_ids){
-				this.search.isActiveIds = category_ids.split(",")
+				this.search.currentSelected = category_ids.split(",")
+				this.search.selected = Object.assign(this.search.currentSelected)
 			}
 			//获取经纬度
 			this.getHotelCategory()
@@ -330,15 +298,30 @@
 			})
 		},
 		methods: {
+			confirmSearch(){
+				this.search.currentSelected = Object.assign(this.search.selected);
+				this.getList();
+				this.search.isSearch = true;
+				this.search.openId = 0;
+			},
+			cancelSearch(){
+				this.search.selected = Object.assign(this.search.currentSelected);
+				this.search.openId = 0;
+			},
+			//打开选择器
+			openSelector(id){
+				if(this.search.openId == id){
+					this.cancelSearch()
+				}else{
+					this.search.openId = id
+				}
+			},
 			//获取筛选数据
 			getHotelCategory(){
 				this.$api.hotel.getHotelCategory().then(res=>{
 					if(res.code !== 0) return;
-					this.search.content.area = res.data[0]?.sub;
-					this.search.content.brand = res.data[1]?.sub;
-					this.search.content.coop = res.data[2]?.sub;
-					this.search.content.league = res.data[3]?.sub;
-										
+					this.search.content = res.data;
+					
 					this.updated()
 				})
 			},
@@ -367,7 +350,7 @@
 						_this.latitude = res.latitude
 						_this.longitude = res.longitude
 						_this.$refs.map.goLocation(res.latitude,res.longitude)
-						_this.toSearchList()
+						_this.getList()
 						//获取酒店列表
 					},
 					fail: function(res) {
@@ -387,32 +370,24 @@
 			},
 			//-------------------------------------
 			//菜单index切换
-			checked(id,categoreName) {
-				this.search[categoreName] = id;
-			},
-			toSearchList(param={}){
-				if(this.beginConfig.first){
-					this.beginConfig.first = false;
-					this.getList(param);
-					return;
+			checked(id) {
+				if(this.search.selected.includes(id)){
+					const tempSet = new Set(this.search.selected)
+					tempSet.delete(id)
+					this.search.selected = Array.from(tempSet)
+				}else{
+					this.search.selected.push(id)
 				}
-				this.isSelectArea = true
-				this.isSelectBrand = true
-				this.isSelectSift = true
-				this.search.isActiveIds = [...this.search.coop,...this.search.league]
-				this.search.area && this.search.isActiveIds.push(this.search.area)
-				this.search.brand && this.search.isActiveIds.push(this.search.brand)
-				this.getList(param);
 			},
-			getList(param={}) {
-				const tempobj = {type: 1};
-				if(this.search.isActiveIds.length){
-					tempobj['category_ids[0]'] = this.search.isActiveIds;
+			getList() {
+				const tempobj = {type: 1,page: 1,};
+				if(this.search.currentSelected.length){
+					this.search.currentSelected.forEach((item,index) => {
+						tempobj[`category_ids[${index}]`] = item
+					})
 				}
 				this.$api.hotel.getHotelList({
-					page: 1,
 					...tempobj,
-					...param
 				}).then(res => {
 					this.hotelList = res.data.data.map(item=>{
 						item.logo = this.$utils.toHttps(item.logo);
@@ -455,7 +430,9 @@
 					
 					setTimeout(()=>{
 						if(!this.beginConfig.hotel_id){
-							this.$refs.map.markertap({markerId: this.hotelList[0].id})	
+							this.$refs.map.markertap({markerId: this.hotelList[0].id},true,this.search.isSearch)
+							this.beginConfig.hotel_id = 0
+							this.search.isSearch = false
 						}else{	
 							this.localToMark(this.beginConfig.hotel_id);
 							// this.$refs.map.markertap({markerId: this.beginConfig.hotel_id})	
@@ -497,28 +474,9 @@
 			//合作伙伴刷选
 			change(e) {
 			},
-			//展开地区选择
-			openArea() {
-				this.isSelectArea = !this.isSelectArea
-				this.isSelectBrand = true
-				this.isSelectSift = true
-			},
-			//展开品牌选择
-			openBrand() {
-				this.isSelectBrand = !this.isSelectBrand
-				this.isSelectArea = true
-				this.isSelectSift = true
-			},
 			//展开筛选选择
 			openSift() {
 				this.isSelectSift = !this.isSelectSift
-				this.isSelectBrand = true
-				this.isSelectArea = true
-			},
-			cancelSearch(){
-				this.isSelectSift = true
-				this.isSelectBrand = true
-				this.isSelectArea = true
 			},
 			//下面酒店位移
 			moveToMarkId(markId){

+ 0 - 63
uni_modules/uni-file-picker/changelog.md

xqd
@@ -1,63 +0,0 @@
-## 1.0.2(2022-07-04)
-- 修复 在uni-forms下样式不生效的bug
-## 1.0.1(2021-11-23)
-- 修复 参数为对象的情况下,url在某些情况显示错误的bug
-## 1.0.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-file-picker](https://uniapp.dcloud.io/component/uniui/uni-file-picker)
-## 0.2.16(2021-11-08)
-- 修复 传入空对象 ,显示错误的Bug
-## 0.2.15(2021-08-30)
-- 修复 return-type="object" 时且存在v-model时,无法删除文件的Bug
-## 0.2.14(2021-08-23)
-- 新增 参数中返回 fileID 字段
-## 0.2.13(2021-08-23)
-- 修复 腾讯云传入fileID 不能回显的bug
-- 修复 选择图片后,不能放大的问题
-## 0.2.12(2021-08-17)
-- 修复 由于 0.2.11 版本引起的不能回显图片的Bug
-## 0.2.11(2021-08-16)
-- 新增 clearFiles(index) 方法,可以手动删除指定文件
-- 修复 v-model 值设为 null 报错的Bug
-## 0.2.10(2021-08-13)
-- 修复 return-type="object" 时,无法删除文件的Bug
-## 0.2.9(2021-08-03)
-- 修复 auto-upload 属性失效的Bug
-## 0.2.8(2021-07-31)
-- 修复 fileExtname属性不指定值报错的Bug
-## 0.2.7(2021-07-31)
-- 修复 在某种场景下图片不回显的Bug
-## 0.2.6(2021-07-30)
-- 修复 return-type为object下,返回值不正确的Bug
-## 0.2.5(2021-07-30)
-- 修复(重要) H5 平台下如果和uni-forms组件一同使用导致页面卡死的问题
-## 0.2.3(2021-07-28)
-- 优化 调整示例代码
-## 0.2.2(2021-07-27)
-- 修复 vue3 下赋值错误的Bug
-- 优化 h5平台下上传文件导致页面卡死的问题
-## 0.2.0(2021-07-13)
-- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
-## 0.1.1(2021-07-02)
-- 修复 sourceType 缺少默认值导致 ios 无法选择文件
-## 0.1.0(2021-06-30)
-- 优化 解耦与uniCloud的强绑定关系 ,如不绑定服务空间,默认autoUpload为false且不可更改
-## 0.0.11(2021-06-30)
-- 修复 由 0.0.10 版本引发的 returnType 属性失效的问题
-## 0.0.10(2021-06-29)
-- 优化 文件上传后进度条消失时机
-## 0.0.9(2021-06-29)
-- 修复 在uni-forms 中,删除文件 ,获取的值不对的Bug
-## 0.0.8(2021-06-15)
-- 修复 删除文件时无法触发 v-model 的Bug
-## 0.0.7(2021-05-12)
-- 新增 组件示例地址
-## 0.0.6(2021-04-09)
-- 修复 选择的文件非 file-extname 字段指定的扩展名报错的Bug
-## 0.0.5(2021-04-09)
-- 优化 更新组件示例
-## 0.0.4(2021-04-09)
-- 优化 file-extname 字段支持字符串写法,多个扩展名需要用逗号分隔
-## 0.0.3(2021-02-05)
-- 调整为uni_modules目录规范
-- 修复 微信小程序不指定 fileExtname 属性选择失败的Bug

+ 0 - 224
uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js

xqd
@@ -1,224 +0,0 @@
-'use strict';
-
-const ERR_MSG_OK = 'chooseAndUploadFile:ok';
-const ERR_MSG_FAIL = 'chooseAndUploadFile:fail';
-
-function chooseImage(opts) {
-	const {
-		count,
-		sizeType = ['original', 'compressed'],
-		sourceType = ['album', 'camera'],
-		extension
-	} = opts
-	return new Promise((resolve, reject) => {
-		uni.chooseImage({
-			count,
-			sizeType,
-			sourceType,
-			extension,
-			success(res) {
-				resolve(normalizeChooseAndUploadFileRes(res, 'image'));
-			},
-			fail(res) {
-				reject({
-					errMsg: res.errMsg.replace('chooseImage:fail', ERR_MSG_FAIL),
-				});
-			},
-		});
-	});
-}
-
-function chooseVideo(opts) {
-	const {
-		camera,
-		compressed,
-		maxDuration,
-		sourceType = ['album', 'camera'],
-		extension
-	} = opts;
-	return new Promise((resolve, reject) => {
-		uni.chooseVideo({
-			camera,
-			compressed,
-			maxDuration,
-			sourceType,
-			extension,
-			success(res) {
-				const {
-					tempFilePath,
-					duration,
-					size,
-					height,
-					width
-				} = res;
-				resolve(normalizeChooseAndUploadFileRes({
-					errMsg: 'chooseVideo:ok',
-					tempFilePaths: [tempFilePath],
-					tempFiles: [
-					{
-						name: (res.tempFile && res.tempFile.name) || '',
-						path: tempFilePath,
-						size,
-						type: (res.tempFile && res.tempFile.type) || '',
-						width,
-						height,
-						duration,
-						fileType: 'video',
-						cloudPath: '',
-					}, ],
-				}, 'video'));
-			},
-			fail(res) {
-				reject({
-					errMsg: res.errMsg.replace('chooseVideo:fail', ERR_MSG_FAIL),
-				});
-			},
-		});
-	});
-}
-
-function chooseAll(opts) {
-	const {
-		count,
-		extension
-	} = opts;
-	return new Promise((resolve, reject) => {
-		let chooseFile = uni.chooseFile;
-		if (typeof wx !== 'undefined' &&
-			typeof wx.chooseMessageFile === 'function') {
-			chooseFile = wx.chooseMessageFile;
-		}
-		if (typeof chooseFile !== 'function') {
-			return reject({
-				errMsg: ERR_MSG_FAIL + ' 请指定 type 类型,该平台仅支持选择 image 或 video。',
-			});
-		}
-		chooseFile({
-			type: 'all',
-			count,
-			extension,
-			success(res) {
-				resolve(normalizeChooseAndUploadFileRes(res));
-			},
-			fail(res) {
-				reject({
-					errMsg: res.errMsg.replace('chooseFile:fail', ERR_MSG_FAIL),
-				});
-			},
-		});
-	});
-}
-
-function normalizeChooseAndUploadFileRes(res, fileType) {
-	res.tempFiles.forEach((item, index) => {
-		if (!item.name) {
-			item.name = item.path.substring(item.path.lastIndexOf('/') + 1);
-		}
-		if (fileType) {
-			item.fileType = fileType;
-		}
-		item.cloudPath =
-			Date.now() + '_' + index + item.name.substring(item.name.lastIndexOf('.'));
-	});
-	if (!res.tempFilePaths) {
-		res.tempFilePaths = res.tempFiles.map((file) => file.path);
-	}
-	return res;
-}
-
-function uploadCloudFiles(files, max = 5, onUploadProgress) {
-	files = JSON.parse(JSON.stringify(files))
-	const len = files.length
-	let count = 0
-	let self = this
-	return new Promise(resolve => {
-		while (count < max) {
-			next()
-		}
-
-		function next() {
-			let cur = count++
-			if (cur >= len) {
-				!files.find(item => !item.url && !item.errMsg) && resolve(files)
-				return
-			}
-			const fileItem = files[cur]
-			const index = self.files.findIndex(v => v.uuid === fileItem.uuid)
-			fileItem.url = ''
-			delete fileItem.errMsg
-
-			uniCloud
-				.uploadFile({
-					filePath: fileItem.path,
-					cloudPath: fileItem.cloudPath,
-					fileType: fileItem.fileType,
-					onUploadProgress: res => {
-						res.index = index
-						onUploadProgress && onUploadProgress(res)
-					}
-				})
-				.then(res => {
-					fileItem.url = res.fileID
-					fileItem.index = index
-					if (cur < len) {
-						next()
-					}
-				})
-				.catch(res => {
-					fileItem.errMsg = res.errMsg || res.message
-					fileItem.index = index
-					if (cur < len) {
-						next()
-					}
-				})
-		}
-	})
-}
-
-
-
-
-
-function uploadFiles(choosePromise, {
-	onChooseFile,
-	onUploadProgress
-}) {
-	return choosePromise
-		.then((res) => {
-			if (onChooseFile) {
-				const customChooseRes = onChooseFile(res);
-				if (typeof customChooseRes !== 'undefined') {
-					return Promise.resolve(customChooseRes).then((chooseRes) => typeof chooseRes === 'undefined' ?
-						res : chooseRes);
-				}
-			}
-			return res;
-		})
-		.then((res) => {
-			if (res === false) {
-				return {
-					errMsg: ERR_MSG_OK,
-					tempFilePaths: [],
-					tempFiles: [],
-				};
-			}
-			return res
-		})
-}
-
-function chooseAndUploadFile(opts = {
-	type: 'all'
-}) {
-	if (opts.type === 'image') {
-		return uploadFiles(chooseImage(opts), opts);
-	}
-	else if (opts.type === 'video') {
-		return uploadFiles(chooseVideo(opts), opts);
-	}
-	return uploadFiles(chooseAll(opts), opts);
-}
-
-export {
-	chooseAndUploadFile,
-	uploadCloudFiles
-};

+ 0 - 656
uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue

xqd
@@ -1,656 +0,0 @@
-<template>
-	<view class="uni-file-picker">
-		<view v-if="title" class="uni-file-picker__header">
-			<text class="file-title">{{ title }}</text>
-			<text class="file-count">{{ filesList.length }}/{{ limitLength }}</text>
-		</view>
-		<upload-image v-if="fileMediatype === 'image' && showType === 'grid'" :readonly="readonly"
-			:image-styles="imageStyles" :files-list="filesList" :limit="limitLength" :disablePreview="disablePreview"
-			:delIcon="delIcon" @uploadFiles="uploadFiles" @choose="choose" @delFile="delFile">
-			<slot>
-				<view class="is-add">
-					<view class="icon-add"></view>
-					<view class="icon-add rotate"></view>
-				</view>
-			</slot>
-		</upload-image>
-		<upload-file v-if="fileMediatype !== 'image' || showType !== 'grid'" :readonly="readonly"
-			:list-styles="listStyles" :files-list="filesList" :showType="showType" :delIcon="delIcon"
-			@uploadFiles="uploadFiles" @choose="choose" @delFile="delFile">
-			<slot><button type="primary" size="mini">选择文件</button></slot>
-		</upload-file>
-	</view>
-</template>
-
-<script>
-	import {
-		chooseAndUploadFile,
-		uploadCloudFiles
-	} from './choose-and-upload-file.js'
-	import {
-		get_file_ext,
-		get_extname,
-		get_files_and_is_max,
-		get_file_info,
-		get_file_data
-	} from './utils.js'
-	import uploadImage from './upload-image.vue'
-	import uploadFile from './upload-file.vue'
-	let fileInput = null
-	/**
-	 * FilePicker 文件选择上传
-	 * @description 文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间
-	 * @tutorial https://ext.dcloud.net.cn/plugin?id=4079
-	 * @property {Object|Array}	value	组件数据,通常用来回显 ,类型由return-type属性决定
-	 * @property {Boolean}	disabled = [true|false]	组件禁用
-	 * 	@value true 	禁用
-	 * 	@value false 	取消禁用
-	 * @property {Boolean}	readonly = [true|false]	组件只读,不可选择,不显示进度,不显示删除按钮
-	 * 	@value true 	只读
-	 * 	@value false 	取消只读
-	 * @property {String}	return-type = [array|object]	限制 value 格式,当为 object 时 ,组件只能单选,且会覆盖
-	 * 	@value array	规定 value 属性的类型为数组
-	 * 	@value object	规定 value 属性的类型为对象
-	 * @property {Boolean}	disable-preview = [true|false]	禁用图片预览,仅 mode:grid 时生效
-	 * 	@value true 	禁用图片预览
-	 * 	@value false 	取消禁用图片预览
-	 * @property {Boolean}	del-icon = [true|false]	是否显示删除按钮
-	 * 	@value true 	显示删除按钮
-	 * 	@value false 	不显示删除按钮
-	 * @property {Boolean}	auto-upload = [true|false]	是否自动上传,值为true则只触发@select,可自行上传
-	 * 	@value true 	自动上传
-	 * 	@value false 	取消自动上传
-	 * @property {Number|String}	limit	最大选择个数 ,h5 会自动忽略多选的部分
-	 * @property {String}	title	组件标题,右侧显示上传计数
-	 * @property {String}	mode = [list|grid]	选择文件后的文件列表样式
-	 * 	@value list 	列表显示
-	 * 	@value grid 	宫格显示
-	 * @property {String}	file-mediatype = [image|video|all]	选择文件类型
-	 * 	@value image	只选择图片
-	 * 	@value video	只选择视频
-	 * 	@value all		选择所有文件
-	 * @property {Array}	file-extname	选择文件后缀,根据 file-mediatype 属性而不同
-	 * @property {Object}	list-style	mode:list 时的样式
-	 * @property {Object}	image-styles	选择文件后缀,根据 file-mediatype 属性而不同
-	 * @event {Function} select 	选择文件后触发
-	 * @event {Function} progress 文件上传时触发
-	 * @event {Function} success 	上传成功触发
-	 * @event {Function} fail 		上传失败触发
-	 * @event {Function} delete 	文件从列表移除时触发
-	 */
-	export default {
-		name: 'uniFilePicker',
-		components: {
-			uploadImage,
-			uploadFile
-		},
-		options: {
-			virtualHost: true
-		},
-		emits: ['select', 'success', 'fail', 'progress', 'delete', 'update:modelValue', 'input'],
-		props: {
-			// #ifdef VUE3
-			modelValue: {
-				type: [Array, Object],
-				default () {
-					return []
-				}
-			},
-			// #endif
-
-			// #ifndef VUE3
-			value: {
-				type: [Array, Object],
-				default () {
-					return []
-				}
-			},
-			// #endif
-
-			disabled: {
-				type: Boolean,
-				default: false
-			},
-			disablePreview: {
-				type: Boolean,
-				default: false
-			},
-			delIcon: {
-				type: Boolean,
-				default: true
-			},
-			// 自动上传
-			autoUpload: {
-				type: Boolean,
-				default: true
-			},
-			// 最大选择个数 ,h5只能限制单选或是多选
-			limit: {
-				type: [Number, String],
-				default: 9
-			},
-			// 列表样式 grid | list | list-card
-			mode: {
-				type: String,
-				default: 'grid'
-			},
-			// 选择文件类型  image/video/all
-			fileMediatype: {
-				type: String,
-				default: 'image'
-			},
-			// 文件类型筛选
-			fileExtname: {
-				type: [Array, String],
-				default () {
-					return []
-				}
-			},
-			title: {
-				type: String,
-				default: ''
-			},
-			listStyles: {
-				type: Object,
-				default () {
-					return {
-						// 是否显示边框
-						border: true,
-						// 是否显示分隔线
-						dividline: true,
-						// 线条样式
-						borderStyle: {}
-					}
-				}
-			},
-			imageStyles: {
-				type: Object,
-				default () {
-					return {
-						width: 'auto',
-						height: 'auto'
-					}
-				}
-			},
-			readonly: {
-				type: Boolean,
-				default: false
-			},
-			returnType: {
-				type: String,
-				default: 'array'
-			},
-			sizeType: {
-				type: Array,
-				default () {
-					return ['original', 'compressed']
-				}
-			}
-		},
-		data() {
-			return {
-				files: [],
-				localValue: []
-			}
-		},
-		watch: {
-			// #ifndef VUE3
-			value: {
-				handler(newVal, oldVal) {
-					this.setValue(newVal, oldVal)
-				},
-				immediate: true
-			},
-			// #endif
-			// #ifdef VUE3
-			modelValue: {
-				handler(newVal, oldVal) {
-					this.setValue(newVal, oldVal)
-				},
-				immediate: true
-			},
-			// #endif
-		},
-		computed: {
-			filesList() {
-				let files = []
-				this.files.forEach(v => {
-					files.push(v)
-				})
-				return files
-			},
-			showType() {
-				if (this.fileMediatype === 'image') {
-					return this.mode
-				}
-				return 'list'
-			},
-			limitLength() {
-				if (this.returnType === 'object') {
-					return 1
-				}
-				if (!this.limit) {
-					return 1
-				}
-				if (this.limit >= 9) {
-					return 9
-				}
-				return this.limit
-			}
-		},
-		created() {
-			// TODO 兼容不开通服务空间的情况
-			if (!(uniCloud.config && uniCloud.config.provider)) {
-				this.noSpace = true
-				uniCloud.chooseAndUploadFile = chooseAndUploadFile
-			}
-			this.form = this.getForm('uniForms')
-			this.formItem = this.getForm('uniFormsItem')
-			if (this.form && this.formItem) {
-				if (this.formItem.name) {
-					this.rename = this.formItem.name
-					this.form.inputChildrens.push(this)
-				}
-			}
-		},
-		methods: {
-			/**
-			 * 公开用户使用,清空文件
-			 * @param {Object} index
-			 */
-			clearFiles(index) {
-				if (index !== 0 && !index) {
-					this.files = []
-					this.$nextTick(() => {
-						this.setEmit()
-					})
-				} else {
-					this.files.splice(index, 1)
-				}
-				this.$nextTick(() => {
-					this.setEmit()
-				})
-			},
-			/**
-			 * 公开用户使用,继续上传
-			 */
-			upload() {
-				let files = []
-				this.files.forEach((v, index) => {
-					if (v.status === 'ready' || v.status === 'error') {
-						files.push(Object.assign({}, v))
-					}
-				})
-				return this.uploadFiles(files)
-			},
-			async setValue(newVal, oldVal) {
-				const newData =  async (v) => {
-					const reg = /cloud:\/\/([\w.]+\/?)\S*/
-					let url = ''
-					if(v.fileID){
-						url = v.fileID
-					}else{
-						url = v.url
-					}
-					if (reg.test(url)) {
-						v.fileID = url
-						v.url = await this.getTempFileURL(url)
-					}
-					if(v.url) v.path = v.url
-					return v
-				}
-				if (this.returnType === 'object') {
-					if (newVal) {
-						await newData(newVal)
-					} else {
-						newVal = {}
-					}
-				} else {
-					if (!newVal) newVal = []
-					for(let i =0 ;i < newVal.length ;i++){
-						let v = newVal[i]
-						await newData(v)
-					}
-				}
-				this.localValue = newVal
-				if (this.form && this.formItem &&!this.is_reset) {
-					this.is_reset = false
-					this.formItem.setValue(this.localValue)
-				}
-				let filesData = Object.keys(newVal).length > 0 ? newVal : [];
-				this.files = [].concat(filesData)
-			},
-
-			/**
-			 * 选择文件
-			 */
-			choose() {
-
-				if (this.disabled) return
-				if (this.files.length >= Number(this.limitLength) && this.showType !== 'grid' && this.returnType ===
-					'array') {
-					uni.showToast({
-						title: `您最多选择 ${this.limitLength} 个文件`,
-						icon: 'none'
-					})
-					return
-				}
-				this.chooseFiles()
-			},
-
-			/**
-			 * 选择文件并上传
-			 */
-			chooseFiles() {
-				const _extname = get_extname(this.fileExtname)
-				// 获取后缀
-				uniCloud
-					.chooseAndUploadFile({
-						type: this.fileMediatype,
-						compressed: false,
-						sizeType: this.sizeType,
-						// TODO 如果为空,video 有问题
-						extension: _extname.length > 0 ? _extname : undefined,
-						count: this.limitLength - this.files.length, //默认9
-						onChooseFile: this.chooseFileCallback,
-						onUploadProgress: progressEvent => {
-							this.setProgress(progressEvent, progressEvent.index)
-						}
-					})
-					.then(result => {
-						this.setSuccessAndError(result.tempFiles)
-					})
-					.catch(err => {
-						console.log('选择失败', err)
-					})
-			},
-
-			/**
-			 * 选择文件回调
-			 * @param {Object} res
-			 */
-			async chooseFileCallback(res) {
-				const _extname = get_extname(this.fileExtname)
-				const is_one = (Number(this.limitLength) === 1 &&
-						this.disablePreview &&
-						!this.disabled) ||
-					this.returnType === 'object'
-				// 如果这有一个文件 ,需要清空本地缓存数据
-				if (is_one) {
-					this.files = []
-				}
-
-				let {
-					filePaths,
-					files
-				} = get_files_and_is_max(res, _extname)
-				if (!(_extname && _extname.length > 0)) {
-					filePaths = res.tempFilePaths
-					files = res.tempFiles
-				}
-
-				let currentData = []
-				for (let i = 0; i < files.length; i++) {
-					if (this.limitLength - this.files.length <= 0) break
-					files[i].uuid = Date.now()
-					let filedata = await get_file_data(files[i], this.fileMediatype)
-					filedata.progress = 0
-					filedata.status = 'ready'
-					this.files.push(filedata)
-					currentData.push({
-						...filedata,
-						file: files[i]
-					})
-				}
-				this.$emit('select', {
-					tempFiles: currentData,
-					tempFilePaths: filePaths
-				})
-				res.tempFiles = files
-				// 停止自动上传
-				if (!this.autoUpload || this.noSpace) {
-					res.tempFiles = []
-				}
-			},
-
-			/**
-			 * 批传
-			 * @param {Object} e
-			 */
-			uploadFiles(files) {
-				files = [].concat(files)
-				return uploadCloudFiles.call(this, files, 5, res => {
-						this.setProgress(res, res.index, true)
-					})
-					.then(result => {
-						this.setSuccessAndError(result)
-						return result;
-					})
-					.catch(err => {
-						console.log(err)
-					})
-			},
-
-			/**
-			 * 成功或失败
-			 */
-			async setSuccessAndError(res, fn) {
-				let successData = []
-				let errorData = []
-				let tempFilePath = []
-				let errorTempFilePath = []
-				for (let i = 0; i < res.length; i++) {
-					const item = res[i]
-					const index = item.uuid ? this.files.findIndex(p => p.uuid === item.uuid) : item.index
-
-					if (index === -1 || !this.files) break
-					if (item.errMsg === 'request:fail') {
-						this.files[index].url = item.path
-						this.files[index].status = 'error'
-						this.files[index].errMsg = item.errMsg
-						// this.files[index].progress = -1
-						errorData.push(this.files[index])
-						errorTempFilePath.push(this.files[index].url)
-					} else {
-						this.files[index].errMsg = ''
-						this.files[index].fileID = item.url
-						const reg = /cloud:\/\/([\w.]+\/?)\S*/
-						if (reg.test(item.url)) {
-							this.files[index].url = await this.getTempFileURL(item.url)
-						}else{
-							this.files[index].url = item.url
-						}
-
-						this.files[index].status = 'success'
-						this.files[index].progress += 1
-						successData.push(this.files[index])
-						tempFilePath.push(this.files[index].fileID)
-					}
-				}
-
-				if (successData.length > 0) {
-					this.setEmit()
-					// 状态改变返回
-					this.$emit('success', {
-						tempFiles: this.backObject(successData),
-						tempFilePaths: tempFilePath
-					})
-				}
-
-				if (errorData.length > 0) {
-					this.$emit('fail', {
-						tempFiles: this.backObject(errorData),
-						tempFilePaths: errorTempFilePath
-					})
-				}
-			},
-
-			/**
-			 * 获取进度
-			 * @param {Object} progressEvent
-			 * @param {Object} index
-			 * @param {Object} type
-			 */
-			setProgress(progressEvent, index, type) {
-				const fileLenth = this.files.length
-				const percentNum = (index / fileLenth) * 100
-				const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total)
-				let idx = index
-				if (!type) {
-					idx = this.files.findIndex(p => p.uuid === progressEvent.tempFile.uuid)
-				}
-				if (idx === -1 || !this.files[idx]) return
-				// fix by mehaotian 100 就会消失,-1 是为了让进度条消失
-				this.files[idx].progress = percentCompleted - 1
-				// 上传中
-				this.$emit('progress', {
-					index: idx,
-					progress: parseInt(percentCompleted),
-					tempFile: this.files[idx]
-				})
-			},
-
-			/**
-			 * 删除文件
-			 * @param {Object} index
-			 */
-			delFile(index) {
-				this.$emit('delete', {
-					tempFile: this.files[index],
-					tempFilePath: this.files[index].url
-				})
-				this.files.splice(index, 1)
-				this.$nextTick(() => {
-					this.setEmit()
-				})
-			},
-
-			/**
-			 * 获取文件名和后缀
-			 * @param {Object} name
-			 */
-			getFileExt(name) {
-				const last_len = name.lastIndexOf('.')
-				const len = name.length
-				return {
-					name: name.substring(0, last_len),
-					ext: name.substring(last_len + 1, len)
-				}
-			},
-
-			/**
-			 * 处理返回事件
-			 */
-			setEmit() {
-				let data = []
-				if (this.returnType === 'object') {
-					data = this.backObject(this.files)[0]
-					this.localValue = data?data:null
-				} else {
-					data = this.backObject(this.files)
-					if (!this.localValue) {
-						this.localValue = []
-					}
-					this.localValue = [...data]
-				}
-				// #ifdef VUE3
-				this.$emit('update:modelValue', this.localValue)
-				// #endif
-				// #ifndef VUE3
-				this.$emit('input', this.localValue)
-				// #endif
-			},
-
-			/**
-			 * 处理返回参数
-			 * @param {Object} files
-			 */
-			backObject(files) {
-				let newFilesData = []
-				files.forEach(v => {
-					newFilesData.push({
-						extname: v.extname,
-						fileType: v.fileType,
-						image: v.image,
-						name: v.name,
-						path: v.path,
-						size: v.size,
-						fileID:v.fileID,
-						url: v.url
-					})
-				})
-				return newFilesData
-			},
-			async getTempFileURL(fileList) {
-				fileList = {
-					fileList: [].concat(fileList)
-				}
-				const urls = await uniCloud.getTempFileURL(fileList)
-				return urls.fileList[0].tempFileURL || ''
-			},
-			/**
-			 * 获取父元素实例
-			 */
-			getForm(name = 'uniForms') {
-				let parent = this.$parent;
-				let parentName = parent.$options.name;
-				while (parentName !== name) {
-					parent = parent.$parent;
-					if (!parent) return false;
-					parentName = parent.$options.name;
-				}
-				return parent;
-			}
-		}
-	}
-</script>
-
-<style>
-	.uni-file-picker {
-		/* #ifndef APP-NVUE */
-		box-sizing: border-box;
-		overflow: hidden;
-		width: 100%;
-		/* #endif */
-		flex: 1;
-	}
-
-	.uni-file-picker__header {
-		padding-top: 5px;
-		padding-bottom: 10px;
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		justify-content: space-between;
-	}
-
-	.file-title {
-		font-size: 14px;
-		color: #333;
-	}
-
-	.file-count {
-		font-size: 14px;
-		color: #999;
-	}
-
-	.is-add {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		align-items: center;
-		justify-content: center;
-	}
-
-	.icon-add {
-		width: 50px;
-		height: 5px;
-		background-color: #f1f1f1;
-		border-radius: 2px;
-	}
-
-	.rotate {
-		position: absolute;
-		transform: rotate(90deg);
-	}
-</style>

+ 0 - 325
uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue

xqd
@@ -1,325 +0,0 @@
-<template>
-	<view class="uni-file-picker__files">
-		<view v-if="!readonly" class="files-button" @click="choose">
-			<slot></slot>
-		</view>
-		<!-- :class="{'is-text-box':showType === 'list'}" -->
-		<view v-if="list.length > 0" class="uni-file-picker__lists is-text-box" :style="borderStyle">
-			<!-- ,'is-list-card':showType === 'list-card' -->
-
-			<view class="uni-file-picker__lists-box" v-for="(item ,index) in list" :key="index" :class="{
-				'files-border':index !== 0 && styles.dividline}"
-			 :style="index !== 0 && styles.dividline &&borderLineStyle">
-				<view class="uni-file-picker__item">
-					<!-- :class="{'is-text-image':showType === 'list'}" -->
-					<!-- 	<view class="files__image is-text-image">
-						<image class="header-image" :src="item.logo" mode="aspectFit"></image>
-					</view> -->
-					<view class="files__name">{{item.name}}</view>
-					<view v-if="delIcon&&!readonly" class="icon-del-box icon-files" @click="delFile(index)">
-						<view class="icon-del icon-files"></view>
-						<view class="icon-del rotate"></view>
-					</view>
-				</view>
-				<view v-if="(item.progress && item.progress !== 100) ||item.progress===0 " class="file-picker__progress">
-					<progress class="file-picker__progress-item" :percent="item.progress === -1?0:item.progress" stroke-width="4"
-					 :backgroundColor="item.errMsg?'#ff5a5f':'#EBEBEB'" />
-				</view>
-				<view v-if="item.status === 'error'" class="file-picker__mask" @click.stop="uploadFiles(item,index)">
-					点击重试
-				</view>
-			</view>
-
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: "uploadFile",
-		emits:['uploadFiles','choose','delFile'],
-		props: {
-			filesList: {
-				type: Array,
-				default () {
-					return []
-				}
-			},
-			delIcon: {
-				type: Boolean,
-				default: true
-			},
-			limit: {
-				type: [Number, String],
-				default: 9
-			},
-			showType: {
-				type: String,
-				default: ''
-			},
-			listStyles: {
-				type: Object,
-				default () {
-					return {
-						// 是否显示边框
-						border: true,
-						// 是否显示分隔线
-						dividline: true,
-						// 线条样式
-						borderStyle: {}
-					}
-				}
-			},
-			readonly:{
-				type:Boolean,
-				default:false
-			}
-		},
-		computed: {
-			list() {
-				let files = []
-				this.filesList.forEach(v => {
-					files.push(v)
-				})
-				return files
-			},
-			styles() {
-				let styles = {
-					border: true,
-					dividline: true,
-					'border-style': {}
-				}
-				return Object.assign(styles, this.listStyles)
-			},
-			borderStyle() {
-				let {
-					borderStyle,
-					border
-				} = this.styles
-				let obj = {}
-				if (!border) {
-					obj.border = 'none'
-				} else {
-					let width = (borderStyle && borderStyle.width) || 1
-					width = this.value2px(width)
-					let radius = (borderStyle && borderStyle.radius) || 5
-					radius = this.value2px(radius)
-					obj = {
-						'border-width': width,
-						'border-style': (borderStyle && borderStyle.style) || 'solid',
-						'border-color': (borderStyle && borderStyle.color) || '#eee',
-						'border-radius': radius
-					}
-				}
-				let classles = ''
-				for (let i in obj) {
-					classles += `${i}:${obj[i]};`
-				}
-				return classles
-			},
-			borderLineStyle() {
-				let obj = {}
-				let {
-					borderStyle
-				} = this.styles
-				if (borderStyle && borderStyle.color) {
-					obj['border-color'] = borderStyle.color
-				}
-				if (borderStyle && borderStyle.width) {
-					let width = borderStyle && borderStyle.width || 1
-					let style = borderStyle && borderStyle.style || 0
-					if (typeof width === 'number') {
-						width += 'px'
-					} else {
-						width = width.indexOf('px') ? width : width + 'px'
-					}
-					obj['border-width'] = width
-
-					if (typeof style === 'number') {
-						style += 'px'
-					} else {
-						style = style.indexOf('px') ? style : style + 'px'
-					}
-					obj['border-top-style'] = style
-				}
-				let classles = ''
-				for (let i in obj) {
-					classles += `${i}:${obj[i]};`
-				}
-				return classles
-			}
-		},
-
-		methods: {
-			uploadFiles(item, index) {
-				this.$emit("uploadFiles", {
-					item,
-					index
-				})
-			},
-			choose() {
-				this.$emit("choose")
-			},
-			delFile(index) {
-				this.$emit('delFile', index)
-			},
-			value2px(value) {
-				if (typeof value === 'number') {
-					value += 'px'
-				} else {
-					value = value.indexOf('px') !== -1 ? value : value + 'px'
-				}
-				return value
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.uni-file-picker__files {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: column;
-		justify-content: flex-start;
-	}
-
-	.files-button {
-		// border: 1px red solid;
-	}
-
-	.uni-file-picker__lists {
-		position: relative;
-		margin-top: 5px;
-		overflow: hidden;
-	}
-
-	.file-picker__mask {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		justify-content: center;
-		align-items: center;
-		position: absolute;
-		right: 0;
-		top: 0;
-		bottom: 0;
-		left: 0;
-		color: #fff;
-		font-size: 14px;
-		background-color: rgba(0, 0, 0, 0.4);
-	}
-
-	.uni-file-picker__lists-box {
-		position: relative;
-	}
-
-	.uni-file-picker__item {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		align-items: center;
-		padding: 8px 10px;
-		padding-right: 5px;
-		padding-left: 10px;
-	}
-
-	.files-border {
-		border-top: 1px #eee solid;
-	}
-
-	.files__name {
-		flex: 1;
-		font-size: 14px;
-		color: #666;
-		margin-right: 25px;
-		/* #ifndef APP-NVUE */
-		word-break: break-all;
-		word-wrap: break-word;
-		/* #endif */
-	}
-
-	.icon-files {
-		/* #ifndef APP-NVUE */
-		position: static;
-		background-color: initial;
-		/* #endif */
-	}
-
-	// .icon-files .icon-del {
-	// 	background-color: #333;
-	// 	width: 12px;
-	// 	height: 1px;
-	// }
-
-
-	.is-list-card {
-		border: 1px #eee solid;
-		margin-bottom: 5px;
-		border-radius: 5px;
-		box-shadow: 0 0 2px 0px rgba(0, 0, 0, 0.1);
-		padding: 5px;
-	}
-
-	.files__image {
-		width: 40px;
-		height: 40px;
-		margin-right: 10px;
-	}
-
-	.header-image {
-		width: 100%;
-		height: 100%;
-	}
-
-	.is-text-box {
-		border: 1px #eee solid;
-		border-radius: 5px;
-	}
-
-	.is-text-image {
-		width: 25px;
-		height: 25px;
-		margin-left: 5px;
-	}
-
-	.rotate {
-		position: absolute;
-		transform: rotate(90deg);
-	}
-
-	.icon-del-box {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		margin: auto 0;
-		/* #endif */
-		align-items: center;
-		justify-content: center;
-		position: absolute;
-		top: 0px;
-		bottom: 0;
-		right: 5px;
-		height: 26px;
-		width: 26px;
-		// border-radius: 50%;
-		// background-color: rgba(0, 0, 0, 0.5);
-		z-index: 2;
-		transform: rotate(-45deg);
-	}
-
-	.icon-del {
-		width: 15px;
-		height: 1px;
-		background-color: #333;
-		// border-radius: 1px;
-	}
-
-	/* #ifdef H5 */
-	@media all and (min-width: 768px) {
-		.uni-file-picker__files {
-			max-width: 375px;
-		}
-	}
-
-	/* #endif */
-</style>

+ 0 - 292
uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue

xqd
@@ -1,292 +0,0 @@
-<template>
-	<view class="uni-file-picker__container">
-		<view class="file-picker__box" v-for="(item,index) in filesList" :key="index" :style="boxStyle">
-			<view class="file-picker__box-content" :style="borderStyle">
-				<image class="file-image" :src="item.url" mode="aspectFill" @click.stop="prviewImage(item,index)"></image>
-				<view v-if="delIcon && !readonly" class="icon-del-box" @click.stop="delFile(index)">
-					<view class="icon-del"></view>
-					<view class="icon-del rotate"></view>
-				</view>
-				<view v-if="(item.progress && item.progress !== 100) ||item.progress===0 " class="file-picker__progress">
-					<progress class="file-picker__progress-item" :percent="item.progress === -1?0:item.progress" stroke-width="4"
-					 :backgroundColor="item.errMsg?'#ff5a5f':'#EBEBEB'" />
-				</view>
-				<view v-if="item.errMsg" class="file-picker__mask" @click.stop="uploadFiles(item,index)">
-					点击重试
-				</view>
-			</view>
-		</view>
-		<view v-if="filesList.length < limit && !readonly" class="file-picker__box" :style="boxStyle">
-			<view class="file-picker__box-content is-add" :style="borderStyle" @click="choose">
-				<slot>
-					<view class="icon-add"></view>
-					<view class="icon-add rotate"></view>
-				</slot>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: "uploadImage",
-		emits:['uploadFiles','choose','delFile'],
-		props: {
-			filesList: {
-				type: Array,
-				default () {
-					return []
-				}
-			},
-			disabled:{
-				type: Boolean,
-				default: false
-			},
-			disablePreview: {
-				type: Boolean,
-				default: false
-			},
-			limit: {
-				type: [Number, String],
-				default: 9
-			},
-			imageStyles: {
-				type: Object,
-				default () {
-					return {
-						width: 'auto',
-						height: 'auto',
-						border: {}
-					}
-				}
-			},
-			delIcon: {
-				type: Boolean,
-				default: true
-			},
-			readonly:{
-				type:Boolean,
-				default:false
-			}
-		},
-		computed: {
-			styles() {
-				let styles = {
-					width: 'auto',
-					height: 'auto',
-					border: {}
-				}
-				return Object.assign(styles, this.imageStyles)
-			},
-			boxStyle() {
-				const {
-					width = 'auto',
-						height = 'auto'
-				} = this.styles
-				let obj = {}
-				if (height === 'auto') {
-					if (width !== 'auto') {
-						obj.height = this.value2px(width)
-						obj['padding-top'] = 0
-					} else {
-						obj.height = 0
-					}
-				} else {
-					obj.height = this.value2px(height)
-					obj['padding-top'] = 0
-				}
-
-				if (width === 'auto') {
-					if (height !== 'auto') {
-						obj.width = this.value2px(height)
-					} else {
-						obj.width = '33.3%'
-					}
-				} else {
-					obj.width = this.value2px(width)
-				}
-
-				let classles = ''
-				for(let i in obj){
-					classles+= `${i}:${obj[i]};`
-				}
-				return classles
-			},
-			borderStyle() {
-				let {
-					border
-				} = this.styles
-				let obj = {}
-				const widthDefaultValue = 1
-				const radiusDefaultValue = 3
-				if (typeof border === 'boolean') {
-					obj.border = border ? '1px #eee solid' : 'none'
-				} else {
-					let width = (border && border.width) || widthDefaultValue
-					width = this.value2px(width)
-					let radius = (border && border.radius) || radiusDefaultValue
-					radius = this.value2px(radius)
-					obj = {
-						'border-width': width,
-						'border-style': (border && border.style) || 'solid',
-						'border-color': (border && border.color) || '#eee',
-						'border-radius': radius
-					}
-				}
-				let classles = ''
-				for(let i in obj){
-					classles+= `${i}:${obj[i]};`
-				}
-				return classles
-			}
-		},
-		methods: {
-			uploadFiles(item, index) {
-				this.$emit("uploadFiles", item)
-			},
-			choose() {
-				this.$emit("choose")
-			},
-			delFile(index) {
-				this.$emit('delFile', index)
-			},
-			prviewImage(img, index) {
-				let urls = []
-				if(Number(this.limit) === 1&&this.disablePreview&&!this.disabled){
-					this.$emit("choose")
-				}
-				if(this.disablePreview) return
-				this.filesList.forEach(i => {
-					urls.push(i.url)
-				})
-
-				uni.previewImage({
-					urls: urls,
-					current: index
-				});
-			},
-			value2px(value) {
-				if (typeof value === 'number') {
-					value += 'px'
-				} else {
-					if (value.indexOf('%') === -1) {
-						value = value.indexOf('px') !== -1 ? value : value + 'px'
-					}
-				}
-				return value
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.uni-file-picker__container {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		box-sizing: border-box;
-		/* #endif */
-		flex-wrap: wrap;
-		margin: -5px;
-	}
-
-	.file-picker__box {
-		position: relative;
-		// flex: 0 0 33.3%;
-		width: 33.3%;
-		height: 0;
-		padding-top: 33.33%;
-		/* #ifndef APP-NVUE */
-		box-sizing: border-box;
-		/* #endif */
-	}
-
-	.file-picker__box-content {
-		position: absolute;
-		top: 0;
-		right: 0;
-		bottom: 0;
-		left: 0;
-		margin: 5px;
-		border: 1px #eee solid;
-		border-radius: 5px;
-		overflow: hidden;
-	}
-
-	.file-picker__progress {
-		position: absolute;
-		bottom: 0;
-		left: 0;
-		right: 0;
-		/* border: 1px red solid; */
-		z-index: 2;
-	}
-
-	.file-picker__progress-item {
-		width: 100%;
-	}
-
-	.file-picker__mask {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		justify-content: center;
-		align-items: center;
-		position: absolute;
-		right: 0;
-		top: 0;
-		bottom: 0;
-		left: 0;
-		color: #fff;
-		font-size: 12px;
-		background-color: rgba(0, 0, 0, 0.4);
-	}
-
-	.file-image {
-		width: 100%;
-		height: 100%;
-	}
-
-	.is-add {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		align-items: center;
-		justify-content: center;
-	}
-
-	.icon-add {
-		width: 50px;
-		height: 5px;
-		background-color: #f1f1f1;
-		border-radius: 2px;
-	}
-
-	.rotate {
-		position: absolute;
-		transform: rotate(90deg);
-	}
-
-	.icon-del-box {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		align-items: center;
-		justify-content: center;
-		position: absolute;
-		top: 3px;
-		right: 3px;
-		height: 26px;
-		width: 26px;
-		border-radius: 50%;
-		background-color: rgba(0, 0, 0, 0.5);
-		z-index: 2;
-		transform: rotate(-45deg);
-	}
-
-	.icon-del {
-		width: 15px;
-		height: 2px;
-		background-color: #fff;
-		border-radius: 2px;
-	}
-</style>

+ 0 - 109
uni_modules/uni-file-picker/components/uni-file-picker/utils.js

xqd
@@ -1,109 +0,0 @@
-/**
- * 获取文件名和后缀
- * @param {String} name
- */
-export const get_file_ext = (name) => {
-	const last_len = name.lastIndexOf('.')
-	const len = name.length
-	return {
-		name: name.substring(0, last_len),
-		ext: name.substring(last_len + 1, len)
-	}
-}
-
-/**
- * 获取扩展名
- * @param {Array} fileExtname
- */
-export const get_extname = (fileExtname) => {
-	if (!Array.isArray(fileExtname)) {
-		let extname = fileExtname.replace(/(\[|\])/g, '')
-		return extname.split(',')
-	} else {
-		return fileExtname
-	}
-	return []
-}
-
-/**
- * 获取文件和检测是否可选
- */
-export const get_files_and_is_max = (res, _extname) => {
-	let filePaths = []
-	let files = []
-	if(!_extname || _extname.length === 0){
-		return {
-			filePaths,
-			files
-		}
-	}
-	res.tempFiles.forEach(v => {
-		let fileFullName = get_file_ext(v.name)
-		const extname = fileFullName.ext.toLowerCase()
-		if (_extname.indexOf(extname) !== -1) {
-			files.push(v)
-			filePaths.push(v.path)
-		}
-	})
-	if (files.length !== res.tempFiles.length) {
-		uni.showToast({
-			title: `当前选择了${res.tempFiles.length}个文件 ,${res.tempFiles.length - files.length} 个文件格式不正确`,
-			icon: 'none',
-			duration: 5000
-		})
-	}
-
-	return {
-		filePaths,
-		files
-	}
-}
-
-
-/**
- * 获取图片信息
- * @param {Object} filepath
- */
-export const get_file_info = (filepath) => {
-	return new Promise((resolve, reject) => {
-		uni.getImageInfo({
-			src: filepath,
-			success(res) {
-				resolve(res)
-			},
-			fail(err) {
-				reject(err)
-			}
-		})
-	})
-}
-/**
- * 获取封装数据
- */
-export const get_file_data = async (files, type = 'image') => {
-	// 最终需要上传数据库的数据
-	let fileFullName = get_file_ext(files.name)
-	const extname = fileFullName.ext.toLowerCase()
-	let filedata = {
-		name: files.name,
-		uuid: files.uuid,
-		extname: extname || '',
-		cloudPath: files.cloudPath,
-		fileType: files.fileType,
-		url: files.path || files.path,
-		size: files.size, //单位是字节
-		image: {},
-		path: files.path,
-		video: {}
-	}
-	if (type === 'image') {
-		const imageinfo = await get_file_info(files.path)
-		delete filedata.video
-		filedata.image.width = imageinfo.width
-		filedata.image.height = imageinfo.height
-		filedata.image.location = imageinfo.path
-	} else {
-		delete filedata.image
-	}
-	return filedata
-}

+ 0 - 86
uni_modules/uni-file-picker/package.json

xqd
@@ -1,86 +0,0 @@
-{
-  "id": "uni-file-picker",
-  "displayName": "uni-file-picker 文件选择上传",
-  "version": "1.0.2",
-  "description": "文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间",
-  "keywords": [
-    "uni-ui",
-    "uniui",
-    "图片上传",
-    "文件上传"
-],
-  "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": "n"
-        },
-        "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"
-        }
-      }
-    }
-  }
-}

+ 0 - 11
uni_modules/uni-file-picker/readme.md

xqd
@@ -1,11 +0,0 @@
-
-## FilePicker 文件选择上传
-
-> **组件名:uni-file-picker**
->  代码块: `uFilePicker`
-
-
-文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间
-
-### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-file-picker)
-#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 

+ 0 - 20
uni_modules/uni-list/changelog.md

xqd
@@ -1,20 +0,0 @@
-## 1.2.1(2022-03-30)
-- 删除无用文件
-## 1.2.0(2021-11-23)
-- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
-- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-list](https://uniapp.dcloud.io/component/uniui/uni-list)
-## 1.1.3(2021-08-30)
-- 修复 在vue3中to属性在发行应用的时候报错的bug
-## 1.1.2(2021-07-30)
-- 优化 vue3下事件警告的问题
-## 1.1.1(2021-07-21)
-- 修复 与其他组件嵌套使用时,点击失效的Bug
-## 1.1.0(2021-07-13)
-- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
-## 1.0.17(2021-05-12)
-- 新增 组件示例地址
-## 1.0.16(2021-02-05)
-- 优化 组件引用关系,通过uni_modules引用组件
-## 1.0.15(2021-02-05)
-- 调整为uni_modules目录规范
-- 修复 uni-list-chat 角标显示不正常的问题

+ 0 - 107
uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue

xqd
@@ -1,107 +0,0 @@
-<template>
-	<!-- #ifdef APP-NVUE -->
-	<cell>
-		<!-- #endif -->
-		<view class="uni-list-ad">
-			<view v-if="borderShow" :class="{'uni-list--border':border,'uni-list-item--first':isFirstChild}"></view>
-			<ad style="width: 200px;height: 300px;border-width: 1px;border-color: red;border-style: solid;" adpid="1111111111"
-			 unit-id="" appid="" apid="" type="feed" @error="aderror" @close="closeAd"></ad>
-		</view>
-		<!-- #ifdef APP-NVUE -->
-	</cell>
-	<!-- #endif -->
-
-</template>
-
-<script>
-	// #ifdef APP-NVUE
-	const dom = uni.requireNativePlugin('dom');
-	// #endif
-	export default {
-		name: 'UniListAd',
-		props: {
-			title: {
-				type: String,
-				default: '',
-
-			}
-		},
-		// inject: ['list'],
-		data() {
-			return {
-				isFirstChild: false,
-				border: false,
-				borderShow: true,
-			}
-		},
-
-		mounted() {
-			this.list = this.getForm()
-			if (this.list) {
-				if (!this.list.firstChildAppend) {
-					this.list.firstChildAppend = true
-					this.isFirstChild = true
-				}
-				this.border = this.list.border
-			}
-		},
-		methods: {
-			/**
-			 * 获取父元素实例
-			 */
-			getForm(name = 'uniList') {
-				let parent = this.$parent;
-				let parentName = parent.$options.name;
-				while (parentName !== name) {
-					parent = parent.$parent;
-					if (!parent) return false
-					parentName = parent.$options.name;
-				}
-				return parent;
-			},
-			aderror(e) {
-				console.log("aderror: " + JSON.stringify(e.detail));
-			},
-			closeAd(e) {
-				this.borderShow = false
-			}
-		}
-	}
-</script>
-
-<style lang="scss" >
-	.uni-list-ad {
-		position: relative;
-		border: 1px red solid;
-	}
-
-	.uni-list--border {
-		position: relative;
-		padding-bottom: 1px;
-		/* #ifdef APP-PLUS */
-		border-top-color: $uni-border-color;
-		border-top-style: solid;
-		border-top-width: 0.5px;
-		/* #endif */
-		margin-left: $uni-spacing-row-lg;
-	}
-
-	/* #ifndef APP-NVUE */
-	.uni-list--border:after {
-		position: absolute;
-		top: 0;
-		right: 0;
-		left: 0;
-		height: 1px;
-		content: '';
-		-webkit-transform: scaleY(.5);
-		transform: scaleY(.5);
-		background-color: $uni-border-color;
-	}
-
-	.uni-list-item--first:after {
-		height: 0px;
-	}
-
-	/* #endif */
-</style>

+ 0 - 58
uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss

xqd
@@ -1,58 +0,0 @@
-/**
- * 这里是 uni-list 组件内置的常用样式变量
- * 如果需要覆盖样式,这里提供了基本的组件样式变量,您可以尝试修改这里的变量,去完成样式替换,而不用去修改源码
- *
- */
-
-// 背景色
-$background-color : #fff;
-// 分割线颜色
-$divide-line-color : #e5e5e5;
-
-// 默认头像大小,如需要修改此值,注意同步修改 js 中的值 const avatarWidth = xx ,目前只支持方形头像
-// nvue 页面不支持修改头像大小
-$avatar-width : 45px ;
-
-// 头像边框
-$avatar-border-radius: 5px;
-$avatar-border-color: #eee;
-$avatar-border-width: 1px;
-
-// 标题文字样式
-$title-size : 16px;
-$title-color : #3b4144;
-$title-weight : normal;
-
-// 描述文字样式
-$note-size : 12px;
-$note-color : #999;
-$note-weight : normal;
-
-// 右侧额外内容默认样式
-$right-text-size : 12px;
-$right-text-color : #999;
-$right-text-weight : normal;
-
-// 角标样式
-// nvue 页面不支持修改圆点位置以及大小
-// 角标在左侧时,角标的位置,默认为 0 ,负数左/下移动,正数右/上移动
-$badge-left: 0px;
-$badge-top: 0px;
-
-// 显示圆点时,圆点大小
-$dot-width: 10px;
-$dot-height: 10px;
-
-// 显示角标时,角标大小和字体大小
-$badge-size : 18px;
-$badge-font : 12px;
-// 显示角标时,角标前景色
-$badge-color : #fff;
-// 显示角标时,角标背景色
-$badge-background-color : #ff5a5f;
-// 显示角标时,角标左右间距
-$badge-space : 6px;
-
-// 状态样式
-// 选中颜色
-$hover : #f5f5f5;

+ 0 - 538
uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue

xqd
@@ -1,538 +0,0 @@
-<template>
-	<!-- #ifdef APP-NVUE -->
-	<cell>
-		<!-- #endif -->
-		<view :hover-class="!clickable && !link ? '' : 'uni-list-chat--hover'" class="uni-list-chat" @click.stop="onClick">
-			<view :class="{ 'uni-list--border': border, 'uni-list-chat--first': isFirstChild }"></view>
-			<view class="uni-list-chat__container">
-				<view class="uni-list-chat__header-warp">
-					<view v-if="avatarCircle || avatarList.length === 0" class="uni-list-chat__header" :class="{ 'header--circle': avatarCircle }">
-						<image class="uni-list-chat__header-image" :class="{ 'header--circle': avatarCircle }" :src="avatar" mode="aspectFill"></image>
-					</view>
-					<!-- 头像组 -->
-					<view v-else class="uni-list-chat__header">
-						<view v-for="(item, index) in avatarList" :key="index" class="uni-list-chat__header-box" :class="computedAvatar"
-						 :style="{ width: imageWidth + 'px', height: imageWidth + 'px' }">
-							<image class="uni-list-chat__header-image" :style="{ width: imageWidth + 'px', height: imageWidth + 'px' }" :src="item.url"
-							 mode="aspectFill"></image>
-						</view>
-					</view>
-				</view>
-				<view v-if="badgeText && badgePositon === 'left'" class="uni-list-chat__badge uni-list-chat__badge-pos" :class="[isSingle]">
-					<text class="uni-list-chat__badge-text">{{ badgeText === 'dot' ? '' : badgeText }}</text>
-				</view>
-				<view class="uni-list-chat__content">
-					<view class="uni-list-chat__content-main">
-						<text class="uni-list-chat__content-title uni-ellipsis">{{ title }}</text>
-						<text class="uni-list-chat__content-note uni-ellipsis">{{ note }}</text>
-					</view>
-					<view class="uni-list-chat__content-extra">
-						<slot>
-							<text class="uni-list-chat__content-extra-text">{{ time }}</text>
-							<view v-if="badgeText && badgePositon === 'right'" class="uni-list-chat__badge" :class="[isSingle, badgePositon === 'right' ? 'uni-list-chat--right' : '']">
-								<text class="uni-list-chat__badge-text">{{ badgeText === 'dot' ? '' : badgeText }}</text>
-							</view>
-						</slot>
-					</view>
-				</view>
-			</view>
-		</view>
-		<!-- #ifdef APP-NVUE -->
-	</cell>
-	<!-- #endif -->
-</template>
-
-<script>
-	// 头像大小
-	const avatarWidth = 45;
-
-	/**
-	 * ListChat 聊天列表
-	 * @description 聊天列表,用于创建聊天类列表
-	 * @tutorial https://ext.dcloud.net.cn/plugin?id=24
-	 * @property {String} 	title 							标题
-	 * @property {String} 	note 							描述
-	 * @property {Boolean} 	clickable = [true|false] 		是否开启点击反馈,默认为false
-	 * @property {String} 	badgeText						数字角标内容
-	 * @property {String}  	badgePositon = [left|right]		角标位置,默认为 right
-	 * @property {String} 	link = [false|navigateTo|redirectTo|reLaunch|switchTab] 是否展示右侧箭头并开启点击反馈,默认为false
-	 *  @value false	 	不开启
-	 *  @value navigateTo 	同 uni.navigateTo()
-	 * 	@value redirectTo 	同 uni.redirectTo()
-	 * 	@value reLaunch   	同 uni.reLaunch()
-	 * 	@value switchTab  	同 uni.switchTab()
-	 * @property {String | PageURIString} 	to  			跳转目标页面
-	 * @property {String} 	time							右侧时间显示
-	 * @property {Boolean} 	avatarCircle = [true|false]		是否显示圆形头像,默认为false
-	 * @property {String} 	avatar							头像地址,avatarCircle 不填时生效
-	 * @property {Array} 	avatarList 						头像组,格式为 [{url:''}]
-	 * @event {Function} 	click 							点击 uniListChat 触发事件
-	 */
-	export default {
-		name: 'UniListChat',
-		emits:['click'],
-		props: {
-			title: {
-				type: String,
-				default: ''
-			},
-			note: {
-				type: String,
-				default: ''
-			},
-			clickable: {
-				type: Boolean,
-				default: false
-			},
-			link: {
-				type: [Boolean, String],
-				default: false
-			},
-			to: {
-				type: String,
-				default: ''
-			},
-			badgeText: {
-				type: [String, Number],
-				default: ''
-			},
-			badgePositon: {
-				type: String,
-				default: 'right'
-			},
-			time: {
-				type: String,
-				default: ''
-			},
-			avatarCircle: {
-				type: Boolean,
-				default: false
-			},
-			avatar: {
-				type: String,
-				default: ''
-			},
-			avatarList: {
-				type: Array,
-				default () {
-					return [];
-				}
-			}
-		},
-		// inject: ['list'],
-		computed: {
-			isSingle() {
-				if (this.badgeText === 'dot') {
-					return 'uni-badge--dot';
-				} else {
-					const badgeText = this.badgeText.toString();
-					if (badgeText.length > 1) {
-						return 'uni-badge--complex';
-					} else {
-						return 'uni-badge--single';
-					}
-				}
-			},
-			computedAvatar() {
-				if (this.avatarList.length > 4) {
-					this.imageWidth = avatarWidth * 0.31;
-					return 'avatarItem--3';
-				} else if (this.avatarList.length > 1) {
-					this.imageWidth = avatarWidth * 0.47;
-					return 'avatarItem--2';
-				} else {
-					this.imageWidth = avatarWidth;
-					return 'avatarItem--1';
-				}
-			}
-		},
-		data() {
-			return {
-				isFirstChild: false,
-				border: true,
-				// avatarList: 3,
-				imageWidth: 50
-			};
-		},
-		mounted() {
-			this.list = this.getForm()
-			if (this.list) {
-				if (!this.list.firstChildAppend) {
-					this.list.firstChildAppend = true;
-					this.isFirstChild = true;
-				}
-				this.border = this.list.border;
-			}
-		},
-		methods: {
-			/**
-			 * 获取父元素实例
-			 */
-			getForm(name = 'uniList') {
-				let parent = this.$parent;
-				let parentName = parent.$options.name;
-				while (parentName !== name) {
-					parent = parent.$parent;
-					if (!parent) return false
-					parentName = parent.$options.name;
-				}
-				return parent;
-			},
-			onClick() {
-				if (this.to !== '') {
-					this.openPage();
-					return;
-				}
-
-				if (this.clickable || this.link) {
-					this.$emit('click', {
-						data: {}
-					});
-				}
-			},
-			openPage() {
-				if (['navigateTo', 'redirectTo', 'reLaunch', 'switchTab'].indexOf(this.link) !== -1) {
-					this.pageApi(this.link);
-				} else {
-					this.pageApi('navigateTo');
-				}
-			},
-			pageApi(api) {
-				uni[api]({
-					url: this.to,
-					success: res => {
-						this.$emit('click', {
-							data: res
-						});
-					},
-					fail: err => {
-						this.$emit('click', {
-							data: err
-						});
-						console.error(err.errMsg);
-					}
-				});
-			}
-		}
-	};
-</script>
-
-<style lang="scss" >
-	$uni-font-size-lg:16px;
-	$uni-spacing-row-sm: 5px;
-	$uni-spacing-row-base: 10px;
-	$uni-spacing-row-lg: 15px;
-	$background-color: #fff;
-	$divide-line-color: #e5e5e5;
-	$avatar-width: 45px;
-	$avatar-border-radius: 5px;
-	$avatar-border-color: #eee;
-	$avatar-border-width: 1px;
-	$title-size: 16px;
-	$title-color: #3b4144;
-	$title-weight: normal;
-	$note-size: 12px;
-	$note-color: #999;
-	$note-weight: normal;
-	$right-text-size: 12px;
-	$right-text-color: #999;
-	$right-text-weight: normal;
-	$badge-left: 0px;
-	$badge-top: 0px;
-	$dot-width: 10px;
-	$dot-height: 10px;
-	$badge-size: 18px;
-	$badge-font: 12px;
-	$badge-color: #fff;
-	$badge-background-color: #ff5a5f;
-	$badge-space: 6px;
-	$hover: #f5f5f5;
-
-	.uni-list-chat {
-		font-size: $uni-font-size-lg;
-		position: relative;
-		flex-direction: column;
-		justify-content: space-between;
-		background-color: $background-color;
-	}
-
-	// .uni-list-chat--disabled {
-	// 	opacity: 0.3;
-	// }
-
-	.uni-list-chat--hover {
-		background-color: $hover;
-	}
-
-	.uni-list--border {
-		position: relative;
-		margin-left: $uni-spacing-row-lg;
-		/* #ifdef APP-PLUS */
-		border-top-color: $divide-line-color;
-		border-top-style: solid;
-		border-top-width: 0.5px;
-		/* #endif */
-	}
-
-	/* #ifndef APP-NVUE */
-	.uni-list--border:after {
-		position: absolute;
-		top: 0;
-		right: 0;
-		left: 0;
-		height: 1px;
-		content: '';
-		-webkit-transform: scaleY(0.5);
-		transform: scaleY(0.5);
-		background-color: $divide-line-color;
-	}
-
-	.uni-list-item--first:after {
-		height: 0px;
-	}
-
-	/* #endif */
-
-	.uni-list-chat--first {
-		border-top-width: 0px;
-	}
-
-	.uni-ellipsis {
-		/* #ifndef APP-NVUE */
-		overflow: hidden;
-		white-space: nowrap;
-		text-overflow: ellipsis;
-		/* #endif */
-		/* #ifdef APP-NVUE */
-		lines: 1;
-		/* #endif */
-	}
-
-	.uni-ellipsis-2 {
-		/* #ifndef APP-NVUE */
-		overflow: hidden;
-		text-overflow: ellipsis;
-		display: -webkit-box;
-		-webkit-line-clamp: 2;
-		-webkit-box-orient: vertical;
-		/* #endif */
-
-		/* #ifdef APP-NVUE */
-		lines: 2;
-		/* #endif */
-	}
-
-	.uni-list-chat__container {
-		position: relative;
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-		flex: 1;
-		padding: $uni-spacing-row-base $uni-spacing-row-lg;
-		position: relative;
-		overflow: hidden;
-	}
-
-	.uni-list-chat__header-warp {
-		position: relative;
-	}
-
-	.uni-list-chat__header {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		align-content: center;
-		/* #endif */
-		flex-direction: row;
-		justify-content: center;
-		align-items: center;
-		flex-wrap: wrap-reverse;
-		/* #ifdef APP-NVUE */
-		width: 50px;
-		height: 50px;
-		/* #endif */
-		/* #ifndef APP-NVUE */
-		width: $avatar-width;
-		height: $avatar-width;
-		/* #endif */
-
-		border-radius: $avatar-border-radius;
-		border-color: $avatar-border-color;
-		border-width: $avatar-border-width;
-		border-style: solid;
-		overflow: hidden;
-	}
-
-	.uni-list-chat__header-box {
-		/* #ifndef APP-PLUS */
-		box-sizing: border-box;
-		display: flex;
-		width: $avatar-width;
-		height: $avatar-width;
-		/* #endif */
-		/* #ifdef APP-NVUE */
-		width: 50px;
-		height: 50px;
-		/* #endif */
-		overflow: hidden;
-		border-radius: 2px;
-	}
-
-	.uni-list-chat__header-image {
-		margin: 1px;
-		/* #ifdef APP-NVUE */
-		width: 50px;
-		height: 50px;
-		/* #endif */
-		/* #ifndef APP-NVUE */
-		width: $avatar-width;
-		height: $avatar-width;
-		/* #endif */
-	}
-
-	/* #ifndef APP-NVUE */
-	.uni-list-chat__header-image {
-		display: block;
-		width: 100%;
-		height: 100%;
-	}
-
-	.avatarItem--1 {
-		width: 100%;
-		height: 100%;
-	}
-
-	.avatarItem--2 {
-		width: 47%;
-		height: 47%;
-	}
-
-	.avatarItem--3 {
-		width: 32%;
-		height: 32%;
-	}
-
-	/* #endif */
-	.header--circle {
-		border-radius: 50%;
-	}
-
-	.uni-list-chat__content {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-		flex: 1;
-		overflow: hidden;
-		padding: 2px 0;
-	}
-
-	.uni-list-chat__content-main {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: column;
-		justify-content: space-between;
-		padding-left: $uni-spacing-row-base;
-		flex: 1;
-		overflow: hidden;
-	}
-
-	.uni-list-chat__content-title {
-		font-size: $title-size;
-		color: $title-color;
-		font-weight: $title-weight;
-		overflow: hidden;
-	}
-
-	.uni-list-chat__content-note {
-		margin-top: 3px;
-		color: $note-color;
-		font-size: $note-size;
-		font-weight: $title-weight;
-		overflow: hidden;
-	}
-
-	.uni-list-chat__content-extra {
-		/* #ifndef APP-NVUE */
-		flex-shrink: 0;
-		display: flex;
-		/* #endif */
-		flex-direction: column;
-		justify-content: space-between;
-		align-items: flex-end;
-		margin-left: 5px;
-	}
-
-	.uni-list-chat__content-extra-text {
-		color: $right-text-color;
-		font-size: $right-text-size;
-		font-weight: $right-text-weight;
-		overflow: hidden;
-	}
-
-	.uni-list-chat__badge-pos {
-		position: absolute;
-		/* #ifdef APP-NVUE */
-		left: 55px;
-		top: 3px;
-		/* #endif */
-		/* #ifndef APP-NVUE */
-		left: calc(#{$avatar-width} + 10px - #{$badge-space} + #{$badge-left});
-		top: calc(#{$uni-spacing-row-base}/ 2 + 1px + #{$badge-top});
-		/* #endif */
-	}
-
-	.uni-list-chat__badge {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		justify-content: center;
-		align-items: center;
-		border-radius: 100px;
-		background-color: $badge-background-color;
-	}
-
-	.uni-list-chat__badge-text {
-		color: $badge-color;
-		font-size: $badge-font;
-	}
-
-	.uni-badge--single {
-		/* #ifndef APP-NVUE */
-		// left: calc(#{$avatar-width} + 7px + #{$badge-left});
-		/* #endif */
-		width: $badge-size;
-		height: $badge-size;
-	}
-
-	.uni-badge--complex {
-		/* #ifdef APP-NVUE */
-		left: 50px;
-		/* #endif */
-		/* #ifndef APP-NVUE */
-		width: auto;
-		/* #endif */
-		height: $badge-size;
-		padding: 0 $badge-space;
-	}
-
-	.uni-badge--dot {
-		/* #ifdef APP-NVUE */
-		left: 60px;
-		top: 6px;
-		/* #endif */
-		/* #ifndef APP-NVUE */
-		left: calc(#{$avatar-width} + 15px - #{$dot-width}/ 2 + 1px + #{$badge-left});
-		/* #endif */
-		width: $dot-width;
-		height: $dot-height;
-		padding: 0;
-	}
-
-	.uni-list-chat--right {
-		/* #ifdef APP-NVUE */
-		left: 0;
-		/* #endif */
-	}
-</style>

+ 0 - 454
uni_modules/uni-list/components/uni-list-item/uni-list-item.vue

xqd
@@ -1,454 +0,0 @@
-<template>
-	<!-- #ifdef APP-NVUE -->
-	<cell>
-		<!-- #endif -->
-
-		<view :class="{ 'uni-list-item--disabled': disabled }"
-			:hover-class="(!clickable && !link) || disabled || showSwitch ? '' : 'uni-list-item--hover'"
-			class="uni-list-item" @click="onClick">
-			<view v-if="!isFirstChild" class="border--left" :class="{ 'uni-list--border': border }"></view>
-			<view class="uni-list-item__container"
-				:class="{ 'container--right': showArrow || link, 'flex--direction': direction === 'column' }">
-				<slot name="header">
-					<view class="uni-list-item__header">
-						<view v-if="thumb" class="uni-list-item__icon">
-							<image :src="thumb" class="uni-list-item__icon-img" :class="['uni-list--' + thumbSize]" />
-						</view>
-						<view v-else-if="showExtraIcon" class="uni-list-item__icon">
-							<uni-icons :color="extraIcon.color" :size="extraIcon.size" :type="extraIcon.type" />
-						</view>
-					</view>
-				</slot>
-				<slot name="body">
-					<view class="uni-list-item__content"
-						:class="{ 'uni-list-item__content--center': thumb || showExtraIcon || showBadge || showSwitch }">
-						<text v-if="title" class="uni-list-item__content-title"
-							:class="[ellipsis !== 0 && ellipsis <= 2 ? 'uni-ellipsis-' + ellipsis : '']">{{ title }}</text>
-						<text v-if="note" class="uni-list-item__content-note">{{ note }}</text>
-					</view>
-				</slot>
-				<slot name="footer">
-					<view v-if="rightText || showBadge || showSwitch" class="uni-list-item__extra"
-						:class="{ 'flex--justify': direction === 'column' }">
-						<text v-if="rightText" class="uni-list-item__extra-text">{{ rightText }}</text>
-						<uni-badge v-if="showBadge" :type="badgeType" :text="badgeText" :custom-style="badgeStyle" />
-						<switch v-if="showSwitch" :disabled="disabled" :checked="switchChecked"
-							@change="onSwitchChange" />
-					</view>
-				</slot>
-			</view>
-			<uni-icons v-if="showArrow || link" :size="16" class="uni-icon-wrapper" color="#bbb" type="arrowright" />
-		</view>
-		<!-- #ifdef APP-NVUE -->
-	</cell>
-	<!-- #endif -->
-</template>
-
-<script>
-	/**
-	 * ListItem 列表子组件
-	 * @description 列表子组件
-	 * @tutorial https://ext.dcloud.net.cn/plugin?id=24
-	 * @property {String} 	title 							标题
-	 * @property {String} 	note 							描述
-	 * @property {String} 	thumb 							左侧缩略图,若thumb有值,则不会显示扩展图标
-	 * @property {String}  	thumbSize = [lg|base|sm]		略缩图大小
-	 * 	@value 	 lg			大图
-	 * 	@value 	 base		一般
-	 * 	@value 	 sm			小图
-	 * @property {String} 	badgeText						数字角标内容
-	 * @property {String} 	badgeType 						数字角标类型,参考[uni-icons](https://ext.dcloud.net.cn/plugin?id=21)
-	 * @property {Object}   badgeStyle           数字角标样式
-	 * @property {String} 	rightText 						右侧文字内容
-	 * @property {Boolean} 	disabled = [true|false]			是否禁用
-	 * @property {Boolean} 	clickable = [true|false] 		是否开启点击反馈
-	 * @property {String} 	link = [navigateTo|redirectTo|reLaunch|switchTab] 是否展示右侧箭头并开启点击反馈
-	 *  @value 	navigateTo 	同 uni.navigateTo()
-	 * 	@value redirectTo 	同 uni.redirectTo()
-	 * 	@value reLaunch   	同 uni.reLaunch()
-	 * 	@value switchTab  	同 uni.switchTab()
-	 * @property {String | PageURIString} 	to  			跳转目标页面
-	 * @property {Boolean} 	showBadge = [true|false] 		是否显示数字角标
-	 * @property {Boolean} 	showSwitch = [true|false] 		是否显示Switch
-	 * @property {Boolean} 	switchChecked = [true|false] 	Switch是否被选中
-	 * @property {Boolean} 	showExtraIcon = [true|false] 	左侧是否显示扩展图标
-	 * @property {Object} 	extraIcon 						扩展图标参数,格式为 {color: '#4cd964',size: '22',type: 'spinner'}
-	 * @property {String} 	direction = [row|column]		排版方向
-	 * @value row 			水平排列
-	 * @value column 		垂直排列
-	 * @event {Function} 	click 							点击 uniListItem 触发事件
-	 * @event {Function} 	switchChange 					点击切换 Switch 时触发
-	 */
-	export default {
-		name: 'UniListItem',
-		emits: ['click', 'switchChange'],
-		props: {
-			direction: {
-				type: String,
-				default: 'row'
-			},
-			title: {
-				type: String,
-				default: ''
-			},
-			note: {
-				type: String,
-				default: ''
-			},
-			ellipsis: {
-				type: [Number,String],
-				default: 0
-			},
-			disabled: {
-				type: [Boolean, String],
-				default: false
-			},
-			clickable: {
-				type: Boolean,
-				default: false
-			},
-			showArrow: {
-				type: [Boolean, String],
-				default: false
-			},
-			link: {
-				type: [Boolean, String],
-				default: false
-			},
-			to: {
-				type: String,
-				default: ''
-			},
-			showBadge: {
-				type: [Boolean, String],
-				default: false
-			},
-			showSwitch: {
-				type: [Boolean, String],
-				default: false
-			},
-			switchChecked: {
-				type: [Boolean, String],
-				default: false
-			},
-			badgeText: {
-				type: String,
-				default: ''
-			},
-			badgeType: {
-				type: String,
-				default: 'success'
-			},
-			badgeStyle:{
-				type: Object,
-				default () {
-					return {}
-				}
-			},
-			rightText: {
-				type: String,
-				default: ''
-			},
-			thumb: {
-				type: String,
-				default: ''
-			},
-			thumbSize: {
-				type: String,
-				default: 'base'
-			},
-			showExtraIcon: {
-				type: [Boolean, String],
-				default: false
-			},
-			extraIcon: {
-				type: Object,
-				default () {
-					return {
-						type: '',
-						color: '#000000',
-						size: 20
-					};
-				}
-			},
-			border: {
-				type: Boolean,
-				default: true
-			}
-		},
-		// inject: ['list'],
-		data() {
-			return {
-				isFirstChild: false
-			};
-		},
-		mounted() {
-			this.list = this.getForm()
-			// 判断是否存在 uni-list 组件
-			if (this.list) {
-				if (!this.list.firstChildAppend) {
-					this.list.firstChildAppend = true;
-					this.isFirstChild = true;
-				}
-			}
-		},
-		methods: {
-			/**
-			 * 获取父元素实例
-			 */
-			getForm(name = 'uniList') {
-				let parent = this.$parent;
-				let parentName = parent.$options.name;
-				while (parentName !== name) {
-					parent = parent.$parent;
-					if (!parent) return false
-					parentName = parent.$options.name;
-				}
-				return parent;
-			},
-			onClick() {
-				if (this.to !== '') {
-					this.openPage();
-					return;
-				}
-				if (this.clickable || this.link) {
-					this.$emit('click', {
-						data: {}
-					});
-				}
-			},
-			onSwitchChange(e) {
-				this.$emit('switchChange', e.detail);
-			},
-			openPage() {
-				if (['navigateTo', 'redirectTo', 'reLaunch', 'switchTab'].indexOf(this.link) !== -1) {
-					this.pageApi(this.link);
-				} else {
-					this.pageApi('navigateTo');
-				}
-			},
-			pageApi(api) {
-				let callback = {
-					url: this.to,
-					success: res => {
-						this.$emit('click', {
-							data: res
-						});
-					},
-					fail: err => {
-						this.$emit('click', {
-							data: err
-						});
-					}
-				}
-				switch (api) {
-					case 'navigateTo':
-						uni.navigateTo(callback)
-						break
-					case 'redirectTo':
-						uni.redirectTo(callback)
-						break
-					case 'reLaunch':
-						uni.reLaunch(callback)
-						break
-					case 'switchTab':
-						uni.switchTab(callback)
-						break
-					default:
-					uni.navigateTo(callback)
-				}
-			}
-		}
-	};
-</script>
-
-<style lang="scss">
-	$uni-font-size-sm:12px;
-	$uni-font-size-base:14px;
-	$uni-font-size-lg:16px;
-	$uni-spacing-col-lg: 12px;
-	$uni-spacing-row-lg: 15px;
-	$uni-img-size-sm:20px;
-	$uni-img-size-base:26px;
-	$uni-img-size-lg:40px;
-	$uni-border-color:#e5e5e5;
-	$uni-bg-color-hover:#f1f1f1;
-	$uni-text-color-grey:#999;
-	$list-item-pd: $uni-spacing-col-lg $uni-spacing-row-lg;
-	.uni-list-item {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		font-size: $uni-font-size-lg;
-		position: relative;
-		justify-content: space-between;
-		align-items: center;
-		background-color: #fff;
-		flex-direction: row;
-		/* #ifdef H5 */
-		cursor: pointer;
-		/* #endif */
-	}
-	.uni-list-item--disabled {
-		opacity: 0.3;
-	}
-	.uni-list-item--hover {
-		background-color: $uni-bg-color-hover;
-	}
-	.uni-list-item__container {
-		position: relative;
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-		padding: $list-item-pd;
-		padding-left: $uni-spacing-row-lg;
-		flex: 1;
-		overflow: hidden;
-		// align-items: center;
-	}
-	.container--right {
-		padding-right: 0;
-	}
-	// .border--left {
-	// 	margin-left: $uni-spacing-row-lg;
-	// }
-	.uni-list--border {
-		position: absolute;
-		top: 0;
-		right: 0;
-		left: 0;
-		/* #ifdef APP-NVUE */
-		border-top-color: $uni-border-color;
-		border-top-style: solid;
-		border-top-width: 0.5px;
-		/* #endif */
-	}
-	/* #ifndef APP-NVUE */
-	.uni-list--border:after {
-		position: absolute;
-		top: 0;
-		right: 0;
-		left: 0;
-		height: 1px;
-		content: '';
-		-webkit-transform: scaleY(0.5);
-		transform: scaleY(0.5);
-		background-color: $uni-border-color;
-	}
-	/* #endif */
-	.uni-list-item__content {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		padding-right: 8px;
-		flex: 1;
-		color: #3b4144;
-		// overflow: hidden;
-		flex-direction: column;
-		justify-content: space-between;
-		overflow: hidden;
-	}
-	.uni-list-item__content--center {
-		justify-content: center;
-	}
-	.uni-list-item__content-title {
-		font-size: $uni-font-size-base;
-		color: #3b4144;
-		overflow: hidden;
-	}
-	.uni-list-item__content-note {
-		margin-top: 6rpx;
-		color: $uni-text-color-grey;
-		font-size: $uni-font-size-sm;
-		overflow: hidden;
-	}
-	.uni-list-item__extra {
-		// width: 25%;
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-		justify-content: flex-end;
-		align-items: center;
-	}
-	.uni-list-item__header {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-		align-items: center;
-	}
-	.uni-list-item__icon {
-		margin-right: 18rpx;
-		flex-direction: row;
-		justify-content: center;
-		align-items: center;
-	}
-	.uni-list-item__icon-img {
-		/* #ifndef APP-NVUE */
-		display: block;
-		/* #endif */
-		height: $uni-img-size-base;
-		width: $uni-img-size-base;
-		margin-right: 10px;
-	}
-	.uni-icon-wrapper {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		align-items: center;
-		padding: 0 10px;
-	}
-	.flex--direction {
-		flex-direction: column;
-		/* #ifndef APP-NVUE */
-		align-items: initial;
-		/* #endif */
-	}
-	.flex--justify {
-		/* #ifndef APP-NVUE */
-		justify-content: initial;
-		/* #endif */
-	}
-	.uni-list--lg {
-		height: $uni-img-size-lg;
-		width: $uni-img-size-lg;
-	}
-	.uni-list--base {
-		height: $uni-img-size-base;
-		width: $uni-img-size-base;
-	}
-	.uni-list--sm {
-		height: $uni-img-size-sm;
-		width: $uni-img-size-sm;
-	}
-	.uni-list-item__extra-text {
-		color: $uni-text-color-grey;
-		font-size: $uni-font-size-sm;
-	}
-	.uni-ellipsis-1 {
-		/* #ifndef APP-NVUE */
-		overflow: hidden;
-		white-space: nowrap;
-		text-overflow: ellipsis;
-		/* #endif */
-		/* #ifdef APP-NVUE */
-		lines: 1;
-		text-overflow:ellipsis;
-		/* #endif */
-	}
-	.uni-ellipsis-2 {
-		/* #ifndef APP-NVUE */
-		overflow: hidden;
-		text-overflow: ellipsis;
-		display: -webkit-box;
-		-webkit-line-clamp: 2;
-		-webkit-box-orient: vertical;
-		/* #endif */
-		/* #ifdef APP-NVUE */
-		lines: 2;
-		text-overflow:ellipsis;
-		/* #endif */
-	}
-</style>

+ 0 - 108
uni_modules/uni-list/components/uni-list/uni-list.vue

xqd
@@ -1,108 +0,0 @@
-<template>
-	<!-- #ifndef APP-NVUE -->
-	<view class="uni-list uni-border-top-bottom">
-		<view v-if="border" class="uni-list--border-top"></view>
-		<slot />
-		<view v-if="border" class="uni-list--border-bottom"></view>
-	</view>
-	<!-- #endif -->
-	<!-- #ifdef APP-NVUE -->
-	<list class="uni-list" :class="{ 'uni-list--border': border }" :enableBackToTop="enableBackToTop" loadmoreoffset="15"><slot /></list>
-	<!-- #endif -->
-</template>
-
-<script>
-/**
- * List 列表
- * @description 列表组件
- * @tutorial https://ext.dcloud.net.cn/plugin?id=24
- * @property {String} 	border = [true|false] 		标题
- */
-export default {
-	name: 'uniList',
-	'mp-weixin': {
-		options: {
-			multipleSlots: false
-		}
-	},
-	props: {
-		enableBackToTop: {
-			type: [Boolean, String],
-			default: false
-		},
-		scrollY: {
-			type: [Boolean, String],
-			default: false
-		},
-		border: {
-			type: Boolean,
-			default: true
-		}
-	},
-	// provide() {
-	// 	return {
-	// 		list: this
-	// 	};
-	// },
-	created() {
-		this.firstChildAppend = false;
-	},
-	methods: {
-		loadMore(e) {
-			this.$emit('scrolltolower');
-		}
-	}
-};
-</script>
-<style lang="scss" >
-$uni-bg-color:#ffffff;
-$uni-border-color:#e5e5e5;
-.uni-list {
-	/* #ifndef APP-NVUE */
-	display: flex;
-	/* #endif */
-	background-color: $uni-bg-color;
-	position: relative;
-	flex-direction: column;
-}
-
-.uni-list--border {
-	position: relative;
-	/* #ifdef APP-NVUE */
-	border-top-color: $uni-border-color;
-	border-top-style: solid;
-	border-top-width: 0.5px;
-	border-bottom-color: $uni-border-color;
-	border-bottom-style: solid;
-	border-bottom-width: 0.5px;
-	/* #endif */
-	z-index: -1;
-}
-
-/* #ifndef APP-NVUE */
-
-.uni-list--border-top {
-	position: absolute;
-	top: 0;
-	right: 0;
-	left: 0;
-	height: 1px;
-	-webkit-transform: scaleY(0.5);
-	transform: scaleY(0.5);
-	background-color: $uni-border-color;
-	z-index: 1;
-}
-
-.uni-list--border-bottom {
-	position: absolute;
-	bottom: 0;
-	right: 0;
-	left: 0;
-	height: 1px;
-	-webkit-transform: scaleY(0.5);
-	transform: scaleY(0.5);
-	background-color: $uni-border-color;
-}
-
-/* #endif */
-</style>

+ 0 - 65
uni_modules/uni-list/components/uni-list/uni-refresh.vue

xqd
@@ -1,65 +0,0 @@
-<template>
-    <!-- #ifdef APP-NVUE -->
-    <refresh :display="display" @refresh="onrefresh" @pullingdown="onpullingdown">
-        <slot />
-    </refresh>
-    <!-- #endif -->
-    <!-- #ifndef APP-NVUE -->
-    <view ref="uni-refresh" class="uni-refresh" v-show="isShow">
-        <slot />
-    </view>
-    <!-- #endif -->
-</template>
-
-<script>
-    export default {
-        name: 'UniRefresh',
-        props: {
-            display: {
-                type: [String],
-                default: "hide"
-            }
-        },
-        data() {
-            return {
-                pulling: false
-            }
-        },
-        computed: {
-            isShow() {
-                if (this.display === "show" || this.pulling === true) {
-                    return true;
-                }
-                return false;
-            }
-        },
-        created() {},
-        methods: {
-            onchange(value) {
-                this.pulling = value;
-            },
-            onrefresh(e) {
-                this.$emit("refresh", e);
-            },
-            onpullingdown(e) {
-                // #ifdef APP-NVUE
-                this.$emit("pullingdown", e);
-                // #endif
-                // #ifndef APP-NVUE
-                var detail = {
-                    viewHeight: 90,
-                    pullingDistance: e.height
-                }
-                this.$emit("pullingdown", detail);
-                // #endif
-            }
-        }
-    }
-</script>
-
-<style>
-    .uni-refresh {
-        height: 0;
-        overflow: hidden;
-    }
-</style>

+ 0 - 87
uni_modules/uni-list/components/uni-list/uni-refresh.wxs

xqd
@@ -1,87 +0,0 @@
-var pullDown = {
-    threshold: 95,
-    maxHeight: 200,
-    callRefresh: 'onrefresh',
-    callPullingDown: 'onpullingdown',
-    refreshSelector: '.uni-refresh'
-};
-
-function ready(newValue, oldValue, ownerInstance, instance) {
-    var state = instance.getState()
-    state.canPullDown = newValue;
-    // console.log(newValue);
-}
-
-function touchStart(e, instance) {
-    var state = instance.getState();
-    state.refreshInstance = instance.selectComponent(pullDown.refreshSelector);
-    state.canPullDown = (state.refreshInstance != null && state.refreshInstance != undefined);
-    if (!state.canPullDown) {
-        return
-    }
-
-    // console.log("touchStart");
-
-    state.height = 0;
-    state.touchStartY = e.touches[0].pageY || e.changedTouches[0].pageY;
-    state.refreshInstance.setStyle({
-        'height': 0
-    });
-    state.refreshInstance.callMethod("onchange", true);
-}
-
-function touchMove(e, ownerInstance) {
-    var instance = e.instance;
-    var state = instance.getState();
-    if (!state.canPullDown) {
-        return
-    }
-
-    var oldHeight = state.height;
-    var endY = e.touches[0].pageY || e.changedTouches[0].pageY;
-    var height = endY - state.touchStartY;
-    if (height > pullDown.maxHeight) {
-        return;
-    }
-
-    var refreshInstance = state.refreshInstance;
-    refreshInstance.setStyle({
-        'height': height + 'px'
-    });
-
-    height = height < pullDown.maxHeight ? height : pullDown.maxHeight;
-    state.height = height;
-    refreshInstance.callMethod(pullDown.callPullingDown, {
-        height: height
-    });
-}
-
-function touchEnd(e, ownerInstance) {
-    var state = e.instance.getState();
-    if (!state.canPullDown) {
-        return
-    }
-
-    state.refreshInstance.callMethod("onchange", false);
-
-    var refreshInstance = state.refreshInstance;
-    if (state.height > pullDown.threshold) {
-        refreshInstance.callMethod(pullDown.callRefresh);
-        return;
-    }
-
-    refreshInstance.setStyle({
-        'height': 0
-    });
-}
-
-function propObserver(newValue, oldValue, instance) {
-    pullDown = newValue;
-}
-
-module.exports = {
-    touchmove: touchMove,
-    touchstart: touchStart,
-    touchend: touchEnd,
-    propObserver: propObserver
-}

+ 0 - 91
uni_modules/uni-list/package.json

xqd
@@ -1,91 +0,0 @@
-{
-  "id": "uni-list",
-  "displayName": "uni-list 列表",
-  "version": "1.2.1",
-  "description": "List 组件 ,帮助使用者快速构建列表。",
-  "keywords": [
-    "",
-    "uni-ui",
-    "uniui",
-    "列表",
-    "",
-    "list"
-],
-  "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-badge",
-      "uni-icons"
-    ],
-    "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"
-        }
-      }
-    }
-  }
-}

+ 0 - 346
uni_modules/uni-list/readme.md

xqd
@@ -1,346 +0,0 @@
-## List 列表
-> **组件名:uni-list**
-> 代码块: `uList`、`uListItem`
-> 关联组件:`uni-list-item`、`uni-badge`、`uni-icons`、`uni-list-chat`、`uni-list-ad`
-
-
-List 列表组件,包含基本列表样式、可扩展插槽机制、长列表性能优化、多端兼容。
-
-在vue页面里,它默认使用页面级滚动。在app-nvue页面里,它默认使用原生list组件滚动。这样的长列表,在滚动出屏幕外后,系统会回收不可见区域的渲染内存资源,不会造成滚动越长手机越卡的问题。
-
-uni-list组件是父容器,里面的核心是uni-list-item子组件,它代表列表中的一个可重复行,子组件可以无限循环。
-
-uni-list-item有很多风格,uni-list-item组件通过内置的属性,满足一些常用的场景。当内置属性不满足需求时,可以通过扩展插槽来自定义列表内容。
-
-内置属性可以覆盖的场景包括:导航列表、设置列表、小图标列表、通信录列表、聊天记录列表。
-
-涉及很多大图或丰富内容的列表,比如类今日头条的新闻列表、类淘宝的电商列表,需要通过扩展插槽实现。
-
-下文均有样例给出。
-
-uni-list不包含下拉刷新和上拉翻页。上拉翻页另见组件:[uni-load-more](https://ext.dcloud.net.cn/plugin?id=29)
-
-
-### 安装方式
-
-本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。
-
-如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55)
-
-> **注意事项**
-> 为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。
-> - 组件需要依赖 `sass` 插件 ,请自行手动安装
-> - 组件内部依赖 `'uni-icons'` 、`uni-badge` 组件
-> - `uni-list` 和 `uni-list-item` 需要配套使用,暂不支持单独使用 `uni-list-item`
-> - 只有开启点击反馈后,会有点击选中效果
-> - 使用插槽时,可以完全自定义内容
-> - note 、rightText 属性暂时没做限制,不支持文字溢出隐藏,使用时应该控制长度显示或通过默认插槽自行扩展
-> - 支付宝小程序平台需要在支付宝小程序开发者工具里开启 component2 编译模式,开启方式: 详情 --> 项目配置 --> 启用 component2 编译
-> - 如果需要修改 `switch`、`badge` 样式,请使用插槽自定义
-> - 在 `HBuilderX` 低版本中,可能会出现组件显示 `undefined` 的问题,请升级最新的 `HBuilderX` 或者 `cli`
-> - 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
- 
-
-### 基本用法 
-
-- 设置 `title` 属性,可以显示列表标题
-- 设置 `disabled` 属性,可以禁用当前项
-
-```html
-<uni-list>
-	<uni-list-item  title="列表文字" ></uni-list-item>
-	<uni-list-item :disabled="true" title="列表禁用状态" ></uni-list-item>
-</uni-list>
-			 
-```
-
-### 多行内容显示
-
-- 设置 `note` 属性 ,可以在第二行显示描述文本信息
-
-```html
-<uni-list>
-	<uni-list-item title="列表文字" note="列表描述信息"></uni-list-item>
-	<uni-list-item :disabled="true" title="列表文字" note="列表禁用状态"></uni-list-item>
-</uni-list>
-
-```
-
-### 右侧显示角标、switch
-
-- 设置 `show-badge` 属性 ,可以显示角标内容
-- 设置 `show-switch` 属性,可以显示 switch 开关
-
-```html
-<uni-list>
-	<uni-list-item  title="列表右侧显示角标" :show-badge="true" badge-text="12" ></uni-list-item>
-	<uni-list-item title="列表右侧显示 switch"  :show-switch="true"  @switchChange="switchChange" ></uni-list-item>
-</uni-list>
-
-```
-
-### 左侧显示略缩图、图标  
-
-- 设置 `thumb` 属性 ,可以在列表左侧显示略缩图
-- 设置 `show-extra-icon` 属性,并指定 `extra-icon` 可以在左侧显示图标
-
-```html
- <uni-list>
- 	<uni-list-item title="列表左侧带略缩图" note="列表描述信息" thumb="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/460d46d0-4fcc-11eb-8ff1-d5dcf8779628.png"
- 	 thumb-size="lg" rightText="右侧文字"></uni-list-item>
- 	<uni-list-item :show-extra-icon="true" :extra-icon="extraIcon1" title="列表左侧带扩展图标" ></uni-list-item>
-</uni-list>
-```
-
-### 开启点击反馈和右侧箭头
-- 设置 `clickable` 为 `true` ,则表示这是一个可点击的列表,会默认给一个点击效果,并可以监听 `click` 事件
-- 设置 `link` 属性,会自动开启点击反馈,并给列表右侧添加一个箭头
-- 设置 `to` 属性,可以跳转页面,`link` 的值表示跳转方式,如果不指定,默认为 `navigateTo`
-
-```html
-
-<uni-list>
-	<uni-list-item title="开启点击反馈" clickable  @click="onClick" ></uni-list-item>
-	<uni-list-item title="默认 navigateTo 方式跳转页面" link to="/pages/vue/index/index" @click="onClick($event,1)" ></uni-list-item>
-	<uni-list-item title="reLaunch 方式跳转页面" link="reLaunch" to="/pages/vue/index/index" @click="onClick($event,1)" ></uni-list-item>
-</uni-list>
-
-```
-
-
-### 聊天列表示例
-- 设置 `clickable` 为 `true` ,则表示这是一个可点击的列表,会默认给一个点击效果,并可以监听 `click` 事件
-- 设置 `link` 属性,会自动开启点击反馈,`link` 的值表示跳转方式,如果不指定,默认为 `navigateTo`
-- 设置 `to` 属性,可以跳转页面
-- `time` 属性,通常会设置成时间显示,但是这个属性不仅仅可以设置时间,你可以传入任何文本,注意文本长度可能会影响显示
-- `avatar` 和 `avatarList` 属性同时只会有一个生效,同时设置的话,`avatarList` 属性的长度大于1 ,`avatar` 属性将失效
-- 可以通过默认插槽自定义列表右侧内容
-
-```html
-
-<uni-list>
-	<uni-list :border="true">
-		<!-- 显示圆形头像 -->
-		<uni-list-chat :avatar-circle="true" title="uni-app" avatar="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/460d46d0-4fcc-11eb-8ff1-d5dcf8779628.png" note="您收到一条新的消息" time="2020-02-02 20:20" ></uni-list-chat>
-		<!-- 右侧带角标 -->
-		<uni-list-chat title="uni-app" avatar="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/460d46d0-4fcc-11eb-8ff1-d5dcf8779628.png" note="您收到一条新的消息" time="2020-02-02 20:20" badge-text="12" :badge-style="{backgroundColor:'#FF80AB'}"></uni-list-chat>
-		<!-- 头像显示圆点 -->
-		<uni-list-chat title="uni-app" avatar="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/460d46d0-4fcc-11eb-8ff1-d5dcf8779628.png" note="您收到一条新的消息" time="2020-02-02 20:20" badge-positon="left" badge-text="dot"></uni-list-chat>
-		<!-- 头像显示角标 -->
-		<uni-list-chat title="uni-app" avatar="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/460d46d0-4fcc-11eb-8ff1-d5dcf8779628.png" note="您收到一条新的消息" time="2020-02-02 20:20" badge-positon="left" badge-text="99"></uni-list-chat>
-		<!-- 显示多头像 -->
-		<uni-list-chat title="uni-app" :avatar-list="avatarList" note="您收到一条新的消息" time="2020-02-02 20:20" badge-positon="left" badge-text="dot"></uni-list-chat>
-		<!-- 自定义右侧内容 -->
-		<uni-list-chat title="uni-app" :avatar-list="avatarList" note="您收到一条新的消息" time="2020-02-02 20:20" badge-positon="left" badge-text="dot">
-			<view class="chat-custom-right">
-				<text class="chat-custom-text">刚刚</text>
-				<!-- 需要使用 uni-icons 请自行引入 -->
-				<uni-icons type="star-filled" color="#999" size="18"></uni-icons>
-			</view>
-		</uni-list-chat>
-	</uni-list>
-</uni-list>
-
-```
-
-```javascript
-
-export default {
-	components: {},
-	data() {
-		return {
-			avatarList: [{
-				url: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/460d46d0-4fcc-11eb-8ff1-d5dcf8779628.png'
-			}, {
-				url: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/460d46d0-4fcc-11eb-8ff1-d5dcf8779628.png'
-			}, {
-				url: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/460d46d0-4fcc-11eb-8ff1-d5dcf8779628.png'
-			}]
-		}
-	}
-}
-
-```
-
-
-```css
-
-.chat-custom-right {
-	flex: 1;
-	/* #ifndef APP-NVUE */
-	display: flex;
-	/* #endif */
-	flex-direction: column;
-	justify-content: space-between;
-	align-items: flex-end;
-}
-
-.chat-custom-text {
-	font-size: 12px;
-	color: #999;
-}
-
-```
-
-## API
-
-### List Props
-
-属性名			|类型		|默认值		|	说明																									
-:-:				|:-:		|:-:		|	:-:	
-border			|Boolean	|true		|	是否显示边框
-
-
-### ListItem Props
-
-属性名			|类型		|默认值		|	说明																					
-:-:				|:-:		|:-:		|	:-:	
-title			|String		|-			|	标题
-note			|String		|-			|	描述
-ellipsis		|Number		|0			|	title 是否溢出隐藏,可选值,0:默认;  1:显示一行;	2:显示两行;【nvue 暂不支持】
-thumb			|String		|-			|	左侧缩略图,若thumb有值,则不会显示扩展图标
-thumbSize		|String 	|medium 	|	略缩图尺寸,可选值,lg:大图;  medium:一般;	sm:小图;
-showBadge		|Boolean	|false		|	是否显示数字角标	
-badgeText		|String		|-			|	数字角标内容
-badgeType		|String		|-			|	数字角标类型,参考[uni-icons](https://ext.dcloud.net.cn/plugin?id=21)	
-badgeStyle  |Object   |-      | 数字角标样式,使用uni-badge的custom-style参数
-rightText		|String		|-			|	右侧文字内容
-disabled		|Boolean	|false		|	是否禁用	
-showArrow 		|Boolean	|true		|	是否显示箭头图标			
-link			|String 	|navigateTo	|	新页面跳转方式,可选值见下表
-to				|String		|-			|	新页面跳转地址,如填写此属性,click 会返回页面是否跳转成功			
-clickable		|Boolean	|false		|	是否开启点击反馈
-showSwitch	    |Boolean	|false		|	是否显示Switch																			
-switchChecked	|Boolean	|false		|	Switch是否被选中																			
-showExtraIcon   |Boolean	|false		|	左侧是否显示扩展图标																		
-extraIcon		|Object		|-			|	扩展图标参数,格式为 ``{color: '#4cd964',size: '22',type: 'spinner'}``,参考 [uni-icons](https://ext.dcloud.net.cn/plugin?id=28)	
-direction		| String	|row		|	排版方向,可选值,row:水平排列;  column:垂直排列; 3个插槽是水平排还是垂直排,也受此属性控制
-
-
-#### Link Options
-
-属性名				|	说明
-:-:					|	:-:
-navigateTo 	| 	同 uni.navigateTo()
-redirectTo 	|	同 uni.reLaunch()
-reLaunch		|	同 uni.reLaunch()
-switchTab  	|	同 uni.switchTab()
-
-### ListItem Events
-
-事件称名			|说明									|返回参数			
-:-:				|:-:									|:-:				
-click			|点击 uniListItem 触发事件,需开启点击反馈	|-					
-switchChange	|点击切换 Switch 时触发,需显示 switch		|e={value:checked}	
-
-
-
-### ListItem Slots
-
-名称	 	|	说明					
-:-:		|	:-:						
-header	|	左/上内容插槽,可完全自定义默认显示
-body	|	中间内容插槽,可完全自定义中间内容				
-footer	|	右/下内容插槽,可完全自定义右侧内容		
-
-
-> **通过插槽扩展**
-> 需要注意的是当使用插槽时,内置样式将会失效,只保留排版样式,此时的样式需要开发者自己实现
-> 如果	`uni-list-item` 组件内置属性样式无法满足需求,可以使用插槽来自定义uni-list-item里的内容。
-> uni-list-item提供了3个可扩展的插槽:`header`、`body`、`footer`
-> - 当 `direction` 属性为 `row` 时表示水平排列,此时 `header` 表示列表的左边部分,`body` 表示列表的中间部分,`footer` 表示列表的右边部分
-> - 当 `direction` 属性为 `column` 时表示垂直排列,此时 `header` 表示列表的上边部分,`body` 表示列表的中间部分,`footer` 表示列表的下边部分
-> 开发者可以只用1个插槽,也可以3个一起使用。在插槽中可自主编写view标签,实现自己所需的效果。
-
-	
-**示例**
-
-```html
-<uni-list>
-	<uni-list-item title="自定义右侧插槽" note="列表描述信息" link>
-		<template slot="header">
-			<image class="slot-image" src="/static/logo.png" mode="widthFix"></image>
-		</template>
-	</uni-list-item>
-	<uni-list-item>
-		<!-- 自定义 header -->
-		<view slot="header" class="slot-box"><image class="slot-image" src="/static/logo.png" mode="widthFix"></image></view>
-		<!-- 自定义 body -->
-		<text slot="body" class="slot-box slot-text">自定义插槽</text>
-		<!-- 自定义 footer-->
-		<template slot="footer">
-			<image class="slot-image" src="/static/logo.png" mode="widthFix"></image>
-		</template>
-	</uni-list-item>
-</uni-list>
-```
-
-
-
-
-
-### ListItemChat Props
-
-属性名			|类型		|默认值		|	说明																		
-:-:				|:-:		|:-:		|	:-:	
-title 			|String		|-			|	标题
-note 			|String		|-			|	描述
-clickable		|Boolean	|false		|	是否开启点击反馈
-badgeText		|String		|-			|	数字角标内容,设置为 `dot` 将显示圆点
-badgePositon 	|String		|right		|	角标位置
-link			|String 	|navigateTo	|	是否展示右侧箭头并开启点击反馈,可选值见下表
-clickable		|Boolean	|false		|	是否开启点击反馈
-to				|String		|-			|	跳转页面地址,如填写此属性,click 会返回页面是否跳转成功	
-time			|String 	|-			|	右侧时间显示
-avatarCircle 	|Boolean 	|false		|	是否显示圆形头像
-avatar			|String 	|-			|	头像地址,avatarCircle 不填时生效
-avatarList 		|Array	 	|-			|	头像组,格式为 [{url:''}]
-
-#### Link Options
-
-属性名		|	说明
-:-:			|	:-:
-navigateTo 	| 	同 uni.navigateTo()
-redirectTo 	|	同 uni.reLaunch()
-reLaunch	|	同 uni.reLaunch()
-switchTab  	|	同 uni.switchTab()
-
-### ListItemChat Slots
-
-名称	 	|	说明					
-:-		|	:-						
-default	|	自定义列表右侧内容(包括时间和角标显示)
-
-### ListItemChat Events
-事件称名			|	说明						|	返回参数			
-:-:				|	:-:						|	:-:	
-@click			|	点击 uniListChat 触发事件	|	{data:{}}	,如有 to 属性,会返回页面跳转信息	
-
-
-
-
-
-
-## 基于uni-list扩展的页面模板
-
-通过扩展插槽,可实现多种常见样式的列表
-
-**新闻列表类**
-
-1. 云端一体混合布局:[https://ext.dcloud.net.cn/plugin?id=2546](https://ext.dcloud.net.cn/plugin?id=2546)
-2. 云端一体垂直布局,大图模式:[https://ext.dcloud.net.cn/plugin?id=2583](https://ext.dcloud.net.cn/plugin?id=2583)
-3. 云端一体垂直布局,多行图文混排:[https://ext.dcloud.net.cn/plugin?id=2584](https://ext.dcloud.net.cn/plugin?id=2584)
-4. 云端一体垂直布局,多图模式:[https://ext.dcloud.net.cn/plugin?id=2585](https://ext.dcloud.net.cn/plugin?id=2585)
-5. 云端一体水平布局,左图右文:[https://ext.dcloud.net.cn/plugin?id=2586](https://ext.dcloud.net.cn/plugin?id=2586)
-6. 云端一体水平布局,左文右图:[https://ext.dcloud.net.cn/plugin?id=2587](https://ext.dcloud.net.cn/plugin?id=2587)
-7. 云端一体垂直布局,无图模式,主标题+副标题:[https://ext.dcloud.net.cn/plugin?id=2588](https://ext.dcloud.net.cn/plugin?id=2588)
-
-**商品列表类**
-
-1. 云端一体列表/宫格视图互切:[https://ext.dcloud.net.cn/plugin?id=2651](https://ext.dcloud.net.cn/plugin?id=2651)
-2. 云端一体列表(宫格模式):[https://ext.dcloud.net.cn/plugin?id=2671](https://ext.dcloud.net.cn/plugin?id=2671)
-3. 云端一体列表(列表模式):[https://ext.dcloud.net.cn/plugin?id=2672](https://ext.dcloud.net.cn/plugin?id=2672)
-
-## 组件示例
-
-点击查看:[https://hellouniapp.dcloud.net.cn/pages/extUI/list/list](https://hellouniapp.dcloud.net.cn/pages/extUI/list/list)

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

xqd
@@ -1,23 +0,0 @@
-## 1.2.1(2022-06-06)
-- 修复 微信小程序存在无使用组件的问题
-## 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-table](https://uniapp.dcloud.io/component/uniui/uni-table)
-## 1.1.0(2021-07-30)
-- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
-## 1.0.7(2021-07-08)
-- 新增 uni-th 支持 date 日期筛选范围
-## 1.0.6(2021-07-05)
-- 新增 uni-th 支持 range 筛选范围
-## 1.0.5(2021-06-28)
-- 新增 uni-th 筛选功能
-## 1.0.4(2021-05-12)
-- 新增 示例地址
-- 修复 示例项目缺少组件的Bug
-## 1.0.3(2021-04-16)
-- 新增 sortable 属性,是否开启单列排序
-- 优化 表格多选逻辑
-## 1.0.2(2021-03-22)
-- uni-tr 添加 disabled 属性,用于 type=selection 时,设置某行是否可由全选按钮控制
-## 1.0.1(2021-02-05)
-- 调整为uni_modules目录规范

+ 0 - 455
uni_modules/uni-table/components/uni-table/uni-table.vue

xqd
@@ -1,455 +0,0 @@
-<template>
-	<view class="uni-table-scroll" :class="{ 'table--border': border, 'border-none': !noData }">
-		<!-- #ifdef H5 -->
-		<table class="uni-table" border="0" cellpadding="0" cellspacing="0" :class="{ 'table--stripe': stripe }" :style="{ 'min-width': minWidth + 'px' }">
-			<slot></slot>
-			<view v-if="noData" class="uni-table-loading">
-				<view class="uni-table-text" :class="{ 'empty-border': border }">{{ emptyText }}</view>
-			</view>
-			<view v-if="loading" class="uni-table-mask" :class="{ 'empty-border': border }"><div class="uni-table--loader"></div></view>
-		</table>
-		<!-- #endif -->
-		<!-- #ifndef H5 -->
-		<view class="uni-table" :style="{ 'min-width': minWidth + 'px' }" :class="{ 'table--stripe': stripe }">
-			<slot></slot>
-			<view v-if="noData" class="uni-table-loading">
-				<view class="uni-table-text" :class="{ 'empty-border': border }">{{ emptyText }}</view>
-			</view>
-			<view v-if="loading" class="uni-table-mask" :class="{ 'empty-border': border }"><div class="uni-table--loader"></div></view>
-		</view>
-		<!-- #endif -->
-	</view>
-</template>
-
-<script>
-/**
- * Table 表格
- * @description 用于展示多条结构类似的数据
- * @tutorial https://ext.dcloud.net.cn/plugin?id=3270
- * @property {Boolean} 	border 				是否带有纵向边框
- * @property {Boolean} 	stripe 				是否显示斑马线
- * @property {Boolean} 	type 					是否开启多选
- * @property {String} 	emptyText 			空数据时显示的文本内容
- * @property {Boolean} 	loading 			显示加载中
- * @event {Function} 	selection-change 	开启多选时,当选择项发生变化时会触发该事件
- */
-export default {
-	name: 'uniTable',
-	options: {
-		virtualHost: true
-	},
-	emits:['selection-change'],
-	props: {
-		data: {
-			type: Array,
-			default() {
-				return []
-			}
-		},
-		// 是否有竖线
-		border: {
-			type: Boolean,
-			default: false
-		},
-		// 是否显示斑马线
-		stripe: {
-			type: Boolean,
-			default: false
-		},
-		// 多选
-		type: {
-			type: String,
-			default: ''
-		},
-		// 没有更多数据
-		emptyText: {
-			type: String,
-			default: '没有更多数据'
-		},
-		loading: {
-			type: Boolean,
-			default: false
-		},
-		rowKey: {
-			type: String,
-			default: ''
-		}
-	},
-	data() {
-		return {
-			noData: true,
-			minWidth: 0,
-			multiTableHeads: []
-		}
-	},
-	watch: {
-		loading(val) {},
-		data(newVal) {
-			let theadChildren = this.theadChildren
-			let rowspan = 1
-			if (this.theadChildren) {
-				rowspan = this.theadChildren.rowspan
-			}
-			
-			// this.trChildren.length - rowspan
-			this.noData = false
-			// this.noData = newVal.length === 0 
-		}
-	},
-	created() {
-		// 定义tr的实例数组
-		this.trChildren = []
-		this.thChildren = []
-		this.theadChildren = null
-		this.backData = []
-		this.backIndexData = []
-	},
-
-	methods: {
-		isNodata() {
-			let theadChildren = this.theadChildren
-			let rowspan = 1
-			if (this.theadChildren) {
-				rowspan = this.theadChildren.rowspan
-			}
-			this.noData = this.trChildren.length - rowspan <= 0
-		},
-		/**
-		 * 选中所有
-		 */
-		selectionAll() {
-			let startIndex = 1
-			let theadChildren = this.theadChildren
-			if (!this.theadChildren) {
-				theadChildren = this.trChildren[0]
-			} else {
-				startIndex = theadChildren.rowspan - 1
-			}
-			let isHaveData = this.data && this.data.length.length > 0
-			theadChildren.checked = true
-			theadChildren.indeterminate = false
-			this.trChildren.forEach((item, index) => {
-				if (!item.disabled) {
-					item.checked = true
-					if (isHaveData && item.keyValue) {
-						const row = this.data.find(v => v[this.rowKey] === item.keyValue)
-						if (!this.backData.find(v => v[this.rowKey] === row[this.rowKey])) {
-							this.backData.push(row)
-						}
-					}
-					if (index > (startIndex - 1) && this.backIndexData.indexOf(index - startIndex) === -1) {
-						this.backIndexData.push(index - startIndex)
-					}
-				}
-			})
-			// this.backData = JSON.parse(JSON.stringify(this.data))
-			this.$emit('selection-change', {
-				detail: {
-					value: this.backData,
-					index: this.backIndexData
-				}
-			})
-		},
-		/**
-		 * 用于多选表格,切换某一行的选中状态,如果使用了第二个参数,则是设置这一行选中与否(selected 为 true 则选中)
-		 */
-		toggleRowSelection(row, selected) {
-			// if (!this.theadChildren) return
-			row = [].concat(row)
-
-			this.trChildren.forEach((item, index) => {
-				// if (item.keyValue) {
-
-				const select = row.findIndex(v => {
-					//
-					if (typeof v === 'number') {
-						return v === index - 1
-					} else {
-						return v[this.rowKey] === item.keyValue
-					}
-				})
-				let ischeck = item.checked
-				if (select !== -1) {
-					if (typeof selected === 'boolean') {
-						item.checked = selected
-					} else {
-						item.checked = !item.checked
-					}
-					if (ischeck !== item.checked) {
-						this.check(item.rowData||item, item.checked, item.rowData?item.keyValue:null, true)
-					}
-				}
-				// }
-			})
-			this.$emit('selection-change', {
-				detail: {
-					value: this.backData,
-					index:this.backIndexData
-				}
-			})
-		},
-
-		/**
-		 * 用于多选表格,清空用户的选择
-		 */
-		clearSelection() {
-			let theadChildren = this.theadChildren
-			if (!this.theadChildren) {
-				theadChildren = this.trChildren[0]
-			}
-			// if (!this.theadChildren) return
-			theadChildren.checked = false
-			theadChildren.indeterminate = false
-			this.trChildren.forEach(item => {
-				// if (item.keyValue) {
-					item.checked = false
-				// }
-			})
-			this.backData = []
-			this.backIndexData = []
-			this.$emit('selection-change', {
-				detail: {
-					value: [],
-					index: []
-				}
-			})
-		},
-		/**
-		 * 用于多选表格,切换所有行的选中状态
-		 */
-		toggleAllSelection() {
-			let list = []
-			let startIndex = 1
-			let theadChildren = this.theadChildren
-			if (!this.theadChildren) {
-				theadChildren = this.trChildren[0]
-			} else {
-				startIndex = theadChildren.rowspan - 1
-			}
-			this.trChildren.forEach((item, index) => {
-				if (!item.disabled) {
-					if (index > (startIndex - 1) ) {
-						list.push(index-startIndex)
-					}
-				}
-			})
-			this.toggleRowSelection(list)
-		},
-
-		/**
-		 * 选中\取消选中
-		 * @param {Object} child
-		 * @param {Object} check
-		 * @param {Object} rowValue
-		 */
-		check(child, check, keyValue, emit) {
-			let theadChildren = this.theadChildren
-			if (!this.theadChildren) {
-				theadChildren = this.trChildren[0]
-			}
-			
-			
-			
-			let childDomIndex = this.trChildren.findIndex((item, index) => child === item)
-			if(childDomIndex < 0){
-				childDomIndex = this.data.findIndex(v=>v[this.rowKey] === keyValue) + 1
-			}
-			const dataLen = this.trChildren.filter(v => !v.disabled && v.keyValue).length
-			if (childDomIndex === 0) {
-				check ? this.selectionAll() : this.clearSelection()
-				return
-			}
-
-			if (check) {
-				if (keyValue) {
-					this.backData.push(child)
-				}
-				this.backIndexData.push(childDomIndex - 1)
-			} else {
-				const index = this.backData.findIndex(v => v[this.rowKey] === keyValue)
-				const idx = this.backIndexData.findIndex(item => item === childDomIndex - 1)
-				if (keyValue) {
-					this.backData.splice(index, 1)
-				}
-				this.backIndexData.splice(idx, 1)
-			}
-
-			const domCheckAll = this.trChildren.find((item, index) => index > 0 && !item.checked && !item.disabled)
-			if (!domCheckAll) {
-				theadChildren.indeterminate = false
-				theadChildren.checked = true
-			} else {
-				theadChildren.indeterminate = true
-				theadChildren.checked = false
-			}
-
-			if (this.backIndexData.length === 0) {
-				theadChildren.indeterminate = false
-			}
-
-			if (!emit) {
-				this.$emit('selection-change', {
-					detail: {
-						value: this.backData,
-						index: this.backIndexData
-					}
-				})
-			}
-		}
-	}
-}
-</script>
-
-<style lang="scss">
-$border-color: #ebeef5;
-
-.uni-table-scroll {
-	width: 100%;
-	/* #ifndef APP-NVUE */
-	overflow-x: auto;
-	/* #endif */
-}
-
-.uni-table {
-	position: relative;
-	width: 100%;
-	border-radius: 5px;
-	// box-shadow: 0px 0px 3px 1px rgba(0, 0, 0, 0.1);
-	background-color: #fff;
-	/* #ifndef APP-NVUE */
-	box-sizing: border-box;
-	display: table;
-	overflow-x: auto;
-	::v-deep .uni-table-tr:nth-child(n + 2) {
-		&:hover {
-			background-color: #f5f7fa;
-		}
-	}
-	::v-deep .uni-table-thead {
-		.uni-table-tr {
-			// background-color: #f5f7fa;
-			&:hover {
-				background-color:#fafafa;
-			}
-		}
-	}
-	/* #endif */
-}
-
-.table--border {
-	border: 1px $border-color solid;
-	border-right: none;
-}
-
-.border-none {
-	/* #ifndef APP-NVUE */
-	border-bottom: none;
-	/* #endif */
-}
-
-.table--stripe {
-	/* #ifndef APP-NVUE */
-	::v-deep .uni-table-tr:nth-child(2n + 3) {
-		background-color: #fafafa;
-	}
-	/* #endif */
-}
-
-/* 表格加载、无数据样式 */
-.uni-table-loading {
-	position: relative;
-	/* #ifndef APP-NVUE */
-	display: table-row;
-	/* #endif */
-	height: 50px;
-	line-height: 50px;
-	overflow: hidden;
-	box-sizing: border-box;
-}
-.empty-border {
-	border-right: 1px $border-color solid;
-}
-.uni-table-text {
-	position: absolute;
-	right: 0;
-	left: 0;
-	text-align: center;
-	font-size: 14px;
-	color: #999;
-}
-
-.uni-table-mask {
-	position: absolute;
-	top: 0;
-	bottom: 0;
-	left: 0;
-	right: 0;
-	background-color: rgba(255, 255, 255, 0.8);
-	z-index: 99;
-	/* #ifndef APP-NVUE */
-	display: flex;
-	margin: auto;
-	transition: all 0.5s;
-	/* #endif */
-	justify-content: center;
-	align-items: center;
-}
-
-.uni-table--loader {
-	width: 30px;
-	height: 30px;
-	border: 2px solid #aaa;
-	// border-bottom-color: transparent;
-	border-radius: 50%;
-	/* #ifndef APP-NVUE */
-	animation: 2s uni-table--loader linear infinite;
-	/* #endif */
-	position: relative;
-}
-
-@keyframes uni-table--loader {
-	0% {
-		transform: rotate(360deg);
-	}
-
-	10% {
-		border-left-color: transparent;
-	}
-
-	20% {
-		border-bottom-color: transparent;
-	}
-
-	30% {
-		border-right-color: transparent;
-	}
-
-	40% {
-		border-top-color: transparent;
-	}
-
-	50% {
-		transform: rotate(0deg);
-	}
-
-	60% {
-		border-top-color: transparent;
-	}
-
-	70% {
-		border-left-color: transparent;
-	}
-
-	80% {
-		border-bottom-color: transparent;
-	}
-
-	90% {
-		border-right-color: transparent;
-	}
-
-	100% {
-		transform: rotate(-360deg);
-	}
-}
-</style>

+ 0 - 29
uni_modules/uni-table/components/uni-tbody/uni-tbody.vue

xqd
@@ -1,29 +0,0 @@
-<template>
-	<!-- #ifdef H5 -->
-	<tbody>
-		<slot></slot>
-	</tbody>
-	<!-- #endif -->
-	<!-- #ifndef H5 -->
-	<view><slot></slot></view>
-	<!-- #endif -->
-</template>
-
-<script>
-export default {
-	name: 'uniBody',
-	options: {
-		virtualHost: true
-	},
-	data() {
-		return {
-			
-		}
-	},
-	created() {},
-	methods: {}
-}
-</script>
-
-<style>
-</style>

+ 0 - 90
uni_modules/uni-table/components/uni-td/uni-td.vue

xqd
@@ -1,90 +0,0 @@
-<template>
-	<!-- #ifdef H5 -->
-	<td class="uni-table-td" :rowspan="rowspan" :colspan="colspan" :class="{'table--border':border}" :style="{width:width + 'px','text-align':align}">
-		<slot></slot>
-	</td>
-	<!-- #endif -->
-	<!-- #ifndef H5 -->
-	<!-- :class="{'table--border':border}"  -->
-	<view class="uni-table-td" :class="{'table--border':border}" :style="{width:width + 'px','text-align':align}">
-		<slot></slot>
-	</view>
-	<!-- #endif -->
-	
-</template>
-
-<script>
-	/**
-	 * Td 单元格
-	 * @description 表格中的标准单元格组件
-	 * @tutorial https://ext.dcloud.net.cn/plugin?id=3270
-	 * @property {Number} 	align = [left|center|right]	单元格对齐方式
-	 */
-	export default {
-		name: 'uniTd',
-		options: {
-			virtualHost: true
-		},
-		props: {
-			width: {
-				type: [String, Number],
-				default: ''
-			},
-			align: {
-				type: String,
-				default: 'left'
-			},
-			rowspan: {
-				type: [Number,String],
-				default: 1
-			},
-			colspan: {
-					type: [Number,String],
-				default: 1
-			}
-		},
-		data() {
-			return {
-				border: false
-			};
-		},
-		created() {
-			this.root = this.getTable()
-			this.border = this.root.border
-		},
-		methods: {
-			/**
-			 * 获取父元素实例
-			 */
-			getTable() {
-				let parent = this.$parent;
-				let parentName = parent.$options.name;
-				while (parentName !== 'uniTable') {
-					parent = parent.$parent;
-					if (!parent) return false;
-					parentName = parent.$options.name;
-				}
-				return parent;
-			},
-		}
-	}
-</script>
-
-<style lang="scss">
-	$border-color:#EBEEF5;
-
-	.uni-table-td {
-		display: table-cell;
-		padding: 8px 10px;
-		font-size: 14px;
-		border-bottom: 1px $border-color solid;
-		font-weight: 400;
-		color: #606266;
-		line-height: 23px;
-		box-sizing: border-box;
-	}
-
-	.table--border {
-		border-right: 1px $border-color solid;
-	}
-</style>

+ 0 - 503
uni_modules/uni-table/components/uni-th/filter-dropdown.vue

xqd
@@ -1,503 +0,0 @@
-<template>
-	<view class="uni-filter-dropdown">
-		<view class="dropdown-btn" @click="onDropdown">
-			<view class="icon-select" :class="{active: canReset}" v-if="isSelect || isRange"></view>
-			<view class="icon-search" :class="{active: canReset}" v-if="isSearch">
-				<view class="icon-search-0"></view>
-				<view class="icon-search-1"></view>
-			</view>
-			<view class="icon-calendar" :class="{active: canReset}" v-if="isDate">
-				<view class="icon-calendar-0"></view>
-				<view class="icon-calendar-1"></view>
-			</view>
-		</view>
-		<view class="uni-dropdown-cover" v-if="isOpened" @click="handleClose"></view>
-		<view class="dropdown-popup dropdown-popup-right" v-if="isOpened" @click.stop>
-			<!-- select-->
-			<view v-if="isSelect" class="list">
-				<label class="flex-r a-i-c list-item" v-for="(item,index) in dataList" :key="index"
-					@click="onItemClick($event, index)">
-					<check-box class="check" :checked="item.checked" />
-					<view class="checklist-content">
-						<text class="checklist-text" :style="item.styleIconText">{{item[map.text]}}</text>
-					</view>
-				</label>
-			</view>
-			<view v-if="isSelect" class="flex-r opera-area">
-				<view class="flex-f btn btn-default" :class="{disable: !canReset}" @click="handleSelectReset">
-					{{resource.reset}}</view>
-				<view class="flex-f btn btn-submit" @click="handleSelectSubmit">{{resource.submit}}</view>
-			</view>
-			<!-- search -->
-			<view v-if="isSearch" class="search-area">
-				<input class="search-input" v-model="filterValue" />
-			</view>
-			<view v-if="isSearch" class="flex-r opera-area">
-				<view class="flex-f btn btn-submit" @click="handleSearchSubmit">{{resource.search}}</view>
-				<view class="flex-f btn btn-default" :class="{disable: !canReset}" @click="handleSearchReset">
-					{{resource.reset}}</view>
-			</view>
-			<!-- range -->
-			<view v-if="isRange">
-				<view class="input-label">{{resource.gt}}</view>
-				<input class="input" v-model="gtValue" />
-				<view class="input-label">{{resource.lt}}</view>
-				<input class="input" v-model="ltValue" />
-			</view>
-			<view v-if="isRange" class="flex-r opera-area">
-				<view class="flex-f btn btn-default" :class="{disable: !canReset}" @click="handleRangeReset">
-					{{resource.reset}}</view>
-				<view class="flex-f btn btn-submit" @click="handleRangeSubmit">{{resource.submit}}</view>
-			</view>
-			<!-- date -->
-			<view v-if="isDate">
-				<uni-datetime-picker ref="datetimepicker" :value="dateRange" type="datetimerange" return-type="timestamp" @change="datetimechange" @maskClick="timepickerclose">
-					<view></view>
-				</uni-datetime-picker>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import checkBox from '../uni-tr/table-checkbox.vue'
-
-	const resource = {
-		"reset": "重置",
-		"search": "搜索",
-		"submit": "确定",
-		"filter": "筛选",
-		"gt": "大于等于",
-		"lt": "小于等于",
-		"date": "日期范围"
-	}
-
-	const DropdownType = {
-		Select: "select",
-		Search: "search",
-		Range: "range",
-		Date: "date",
-		Timestamp: "timestamp"
-	}
-
-	export default {
-		name: 'FilterDropdown',
-		emits:['change'],
-		components: {
-			checkBox
-		},
-		options: {
-			virtualHost: true
-		},
-		props: {
-			filterType: {
-				type: String,
-				default: DropdownType.Select
-			},
-			filterData: {
-				type: Array,
-				default () {
-					return []
-				}
-			},
-			mode: {
-				type: String,
-				default: 'default'
-			},
-			map: {
-				type: Object,
-				default () {
-					return {
-						text: 'text',
-						value: 'value'
-					}
-				}
-			}
-		},
-		computed: {
-			canReset() {
-				if (this.isSearch) {
-					return this.filterValue.length > 0
-				}
-				if (this.isSelect) {
-					return this.checkedValues.length > 0
-				}
-				if (this.isRange) {
-					return (this.gtValue.length > 0 && this.ltValue.length > 0)
-				}
-				if (this.isDate) {
-					return this.dateSelect.length > 0
-				}
-				return false
-			},
-			isSelect() {
-				return this.filterType === DropdownType.Select
-			},
-			isSearch() {
-				return this.filterType === DropdownType.Search
-			},
-			isRange() {
-				return this.filterType === DropdownType.Range
-			},
-			isDate() {
-				return (this.filterType === DropdownType.Date || this.filterType === DropdownType.Timestamp)
-			}
-		},
-		watch: {
-			filterData(newVal) {
-				this._copyFilters()
-			},
-			indeterminate(newVal) {
-				this.isIndeterminate = newVal
-			}
-		},
-		data() {
-			return {
-				resource,
-				enabled: true,
-				isOpened: false,
-				dataList: [],
-				filterValue: '',
-				checkedValues: [],
-				gtValue: '',
-				ltValue: '',
-				dateRange: [],
-				dateSelect: []
-			};
-		},
-		created() {
-			this._copyFilters()
-		},
-		methods: {
-			_copyFilters() {
-				let dl = JSON.parse(JSON.stringify(this.filterData))
-				for (let i = 0; i < dl.length; i++) {
-					if (dl[i].checked === undefined) {
-						dl[i].checked = false
-					}
-				}
-				this.dataList = dl
-			},
-			openPopup() {
-				this.isOpened = true
-				if (this.isDate) {
-					this.$nextTick(() => {
-						if (!this.dateRange.length) {
-							this.resetDate()
-						}
-						this.$refs.datetimepicker.show()
-					})
-				}
-			},
-			closePopup() {
-				this.isOpened = false
-			},
-			handleClose(e) {
-				this.closePopup()
-			},
-			resetDate() {
-				let date = new Date()
-				let dateText = date.toISOString().split('T')[0]
-				this.dateRange = [dateText + ' 0:00:00', dateText + ' 23:59:59']
-			},
-			onDropdown(e) {
-				this.openPopup()
-			},
-			onItemClick(e, index) {
-				let items = this.dataList
-				let listItem = items[index]
-				if (listItem.checked === undefined) {
-					items[index].checked = true
-				} else {
-					items[index].checked = !listItem.checked
-				}
-
-				let checkvalues = []
-				for (let i = 0; i < items.length; i++) {
-					const item = items[i]
-					if (item.checked) {
-						checkvalues.push(item.value)
-					}
-				}
-				this.checkedValues = checkvalues
-			},
-			datetimechange(e) {
-				this.closePopup()
-				this.dateRange = e
-				this.dateSelect = e
-				this.$emit('change', {
-					filterType: this.filterType,
-					filter: e
-				})
-			},
-			timepickerclose(e) {
-				this.closePopup()
-			},
-			handleSelectSubmit() {
-				this.closePopup()
-				this.$emit('change', {
-					filterType: this.filterType,
-					filter: this.checkedValues
-				})
-			},
-			handleSelectReset() {
-				if (!this.canReset) {
-					return;
-				}
-				var items = this.dataList
-				for (let i = 0; i < items.length; i++) {
-					let item = items[i]
-					this.$set(item, 'checked', false)
-				}
-				this.checkedValues = []
-				this.handleSelectSubmit()
-			},
-			handleSearchSubmit() {
-				this.closePopup()
-				this.$emit('change', {
-					filterType: this.filterType,
-					filter: this.filterValue
-				})
-			},
-			handleSearchReset() {
-				if (!this.canReset) {
-					return;
-				}
-				this.filterValue = ''
-				this.handleSearchSubmit()
-			},
-			handleRangeSubmit(isReset) {
-				this.closePopup()
-				this.$emit('change', {
-					filterType: this.filterType,
-					filter: isReset === true ? [] : [parseInt(this.gtValue), parseInt(this.ltValue)]
-				})
-			},
-			handleRangeReset() {
-				if (!this.canReset) {
-					return;
-				}
-				this.gtValue = ''
-				this.ltValue = ''
-				this.handleRangeSubmit(true)
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.flex-r {
-		display: flex;
-		flex-direction: row;
-	}
-
-	.flex-f {
-		flex: 1;
-	}
-
-	.a-i-c {
-		align-items: center;
-	}
-
-	.j-c-c {
-		justify-content: center;
-	}
-
-	.icon-select {
-		width: 14px;
-		height: 16px;
-		border: solid 6px transparent;
-		border-top: solid 6px #ddd;
-		border-bottom: none;
-		background-color: #ddd;
-		background-clip: content-box;
-		box-sizing: border-box;
-	}
-
-	.icon-select.active {
-		background-color: #1890ff;
-		border-top-color: #1890ff;
-	}
-
-	.icon-search {
-		width: 12px;
-		height: 16px;
-		position: relative;
-	}
-
-	.icon-search-0 {
-		border: 2px solid #ddd;
-		border-radius: 8px;
-		width: 7px;
-		height: 7px;
-	}
-
-	.icon-search-1 {
-		position: absolute;
-		top: 8px;
-		right: 0;
-		width: 1px;
-		height: 7px;
-		background-color: #ddd;
-		transform: rotate(-45deg);
-	}
-
-	.icon-search.active .icon-search-0 {
-		border-color: #1890ff;
-	}
-
-	.icon-search.active .icon-search-1 {
-		background-color: #1890ff;
-	}
-
-	.icon-calendar {
-		color: #ddd;
-		width: 14px;
-		height: 16px;
-	}
-
-	.icon-calendar-0 {
-		height: 4px;
-		margin-top: 3px;
-		margin-bottom: 1px;
-		background-color: #ddd;
-		border-radius: 2px 2px 1px 1px;
-		position: relative;
-	}
-	.icon-calendar-0:before, .icon-calendar-0:after {
-		content: '';
-		position: absolute;
-		top: -3px;
-		width: 4px;
-		height: 3px;
-		border-radius: 1px;
-		background-color: #ddd;
-	}
-	.icon-calendar-0:before {
-		left: 2px;
-	}
-	.icon-calendar-0:after {
-		right: 2px;
-	}
-
-	.icon-calendar-1 {
-		height: 9px;
-		background-color: #ddd;
-		border-radius: 1px 1px 2px 2px;
-	}
-
-	.icon-calendar.active {
-		color: #1890ff;
-	}
-
-	.icon-calendar.active .icon-calendar-0,
-	.icon-calendar.active .icon-calendar-1,
-	.icon-calendar.active .icon-calendar-0:before,
-	.icon-calendar.active .icon-calendar-0:after {
-		background-color: #1890ff;
-	}
-
-	.uni-filter-dropdown {
-		position: relative;
-		font-weight: normal;
-	}
-
-	.dropdown-popup {
-		position: absolute;
-		top: 100%;
-		background-color: #fff;
-		box-shadow: 0 3px 6px -4px #0000001f, 0 6px 16px #00000014, 0 9px 28px 8px #0000000d;
-		min-width: 150px;
-		z-index: 1000;
-	}
-
-	.dropdown-popup-left {
-		left: 0;
-	}
-
-	.dropdown-popup-right {
-		right: 0;
-	}
-
-	.uni-dropdown-cover {
-		position: fixed;
-		left: 0;
-		top: 0;
-		right: 0;
-		bottom: 0;
-		background-color: transparent;
-		z-index: 100;
-	}
-
-	.list {
-		margin-top: 5px;
-		margin-bottom: 5px;
-	}
-
-	.list-item {
-		padding: 5px 10px;
-		text-align: left;
-	}
-
-	.list-item:hover {
-		background-color: #f0f0f0;
-	}
-
-	.check {
-		margin-right: 5px;
-	}
-
-	.search-area {
-		padding: 10px;
-	}
-
-	.search-input {
-		font-size: 12px;
-		border: 1px solid #f0f0f0;
-		border-radius: 3px;
-		padding: 2px 5px;
-		min-width: 150px;
-		text-align: left;
-	}
-
-	.input-label {
-		margin: 10px 10px 5px 10px;
-		text-align: left;
-	}
-
-	.input {
-		font-size: 12px;
-		border: 1px solid #f0f0f0;
-		border-radius: 3px;
-		margin: 10px;
-		padding: 2px 5px;
-		min-width: 150px;
-		text-align: left;
-	}
-
-	.opera-area {
-		cursor: default;
-		border-top: 1px solid #ddd;
-		padding: 5px;
-	}
-
-	.opera-area .btn {
-		font-size: 12px;
-		border-radius: 3px;
-		margin: 5px;
-		padding: 4px 4px;
-	}
-
-	.btn-default {
-		border: 1px solid #ddd;
-	}
-
-	.btn-default.disable {
-		border-color: transparent;
-	}
-
-	.btn-submit {
-		background-color: #1890ff;
-		color: #ffffff;
-	}
-</style>

+ 0 - 278
uni_modules/uni-table/components/uni-th/uni-th.vue

xqd
@@ -1,278 +0,0 @@
-<template>
-	<!-- #ifdef H5 -->
-	<th :rowspan="rowspan" :colspan="colspan" class="uni-table-th" :class="{ 'table--border': border }" :style="{ width: customWidth + 'px', 'text-align': align }">
-		<view class="uni-table-th-row">
-			<view class="uni-table-th-content" :style="{ 'justify-content': contentAlign }" @click="sort">
-				<slot></slot>
-				<view v-if="sortable" class="arrow-box">
-					<text class="arrow up" :class="{ active: ascending }" @click.stop="ascendingFn"></text>
-					<text class="arrow down" :class="{ active: descending }" @click.stop="descendingFn"></text>
-				</view>
-			</view>
-			<dropdown v-if="filterType || filterData.length" :filterData="filterData" :filterType="filterType" @change="ondropdown"></dropdown>
-		</view>
-	</th>
-	<!-- #endif -->
-	<!-- #ifndef H5 -->
-	<view class="uni-table-th" :class="{ 'table--border': border }" :style="{ width: customWidth + 'px', 'text-align': align }"><slot></slot></view>
-	<!-- #endif -->
-</template>
-
-<script>
-	// #ifdef H5
-	import dropdown from './filter-dropdown.vue'
-	// #endif
-/**
- * Th 表头
- * @description 表格内的表头单元格组件
- * @tutorial https://ext.dcloud.net.cn/plugin?id=3270
- * @property {Number | String} 	width 	单元格宽度(支持纯数字、携带单位px或rpx)
- * @property {Boolean} 	sortable 					是否启用排序
- * @property {Number} 	align = [left|center|right]	单元格对齐方式
- * @value left   	单元格文字左侧对齐
- * @value center	单元格文字居中
- * @value right		单元格文字右侧对齐
- * @property {Array}	filterData 筛选数据
- * @property {String}	filterType	[search|select] 筛选类型
- * @value search	关键字搜素
- * @value select	条件选择
- * @event {Function} sort-change 排序触发事件
- */
-export default {
-	name: 'uniTh',
-	options: {
-		virtualHost: true
-	},
-	components: {
-		// #ifdef H5
-		dropdown
-		// #endif
-	},
-	emits:['sort-change','filter-change'],
-	props: {
-		width: {
-			type: [String, Number],
-			default: ''
-		},
-		align: {
-			type: String,
-			default: 'left'
-		},
-		rowspan: {
-			type: [Number, String],
-			default: 1
-		},
-		colspan: {
-			type: [Number, String],
-			default: 1
-		},
-		sortable: {
-			type: Boolean,
-			default: false
-		},
-		filterType: {
-			type: String,
-			default: ""
-		},
-		filterData: {
-			type: Array,
-			default () {
-				return []
-			}
-		}
-	},
-	data() {
-		return {
-			border: false,
-			ascending: false,
-			descending: false
-		}
-	},
-	computed: {
-		// 根据props中的width属性 自动匹配当前th的宽度(px)
-		customWidth(){
-			if(typeof this.width === 'number'){
-				return this.width
-			} else if(typeof this.width === 'string') {
-				let regexHaveUnitPx = new RegExp(/^[1-9][0-9]*px$/g)
-				let regexHaveUnitRpx = new RegExp(/^[1-9][0-9]*rpx$/g)
-				let regexHaveNotUnit = new RegExp(/^[1-9][0-9]*$/g)
-				if (this.width.match(regexHaveUnitPx) !== null) { // 携带了 px
-					return this.width.replace('px', '')
-				} else if (this.width.match(regexHaveUnitRpx) !== null) { // 携带了 rpx
-					let numberRpx = Number(this.width.replace('rpx', ''))
-					let widthCoe = uni.getSystemInfoSync().screenWidth / 750
-					return Math.round(numberRpx * widthCoe)
-				} else if (this.width.match(regexHaveNotUnit) !== null) { // 未携带 rpx或px 的纯数字 String
-					return this.width
-				} else { // 不符合格式
-					return ''
-				}
-			} else {
-				return ''
-			}
-		},
-		contentAlign() {
-			let align = 'left'
-			switch (this.align) {
-				case 'left':
-					align = 'flex-start'
-					break
-				case 'center':
-					align = 'center'
-					break
-				case 'right':
-					align = 'flex-end'
-					break
-			}
-			return align
-		}
-	},
-	created() {
-		this.root = this.getTable('uniTable')
-		this.rootTr = this.getTable('uniTr')
-		this.rootTr.minWidthUpdate(this.customWidth ? this.customWidth : 140)
-		this.border = this.root.border
-		this.root.thChildren.push(this)
-	},
-	methods: {
-		sort() {
-			if (!this.sortable) return
-			this.clearOther()
-			if (!this.ascending && !this.descending) {
-				this.ascending = true
-				this.$emit('sort-change', { order: 'ascending' })
-				return
-			}
-			if (this.ascending && !this.descending) {
-				this.ascending = false
-				this.descending = true
-				this.$emit('sort-change', { order: 'descending' })
-				return
-			}
-
-			if (!this.ascending && this.descending) {
-				this.ascending = false
-				this.descending = false
-				this.$emit('sort-change', { order: null })
-			}
-		},
-		ascendingFn() {
-			this.clearOther()
-			this.ascending = !this.ascending
-			this.descending = false
-			this.$emit('sort-change', { order: this.ascending ? 'ascending' : null })
-		},
-		descendingFn() {
-			this.clearOther()
-			this.descending = !this.descending
-			this.ascending = false
-			this.$emit('sort-change', { order: this.descending ? 'descending' : null })
-		},
-		clearOther() {
-			this.root.thChildren.map(item => {
-				if (item !== this) {
-					item.ascending = false
-					item.descending = false
-				}
-				return item
-			})
-		},
-		ondropdown(e) {
-			this.$emit("filter-change", e)
-		},
-		/**
-		 * 获取父元素实例
-		 */
-		getTable(name) {
-			let parent = this.$parent
-			let parentName = parent.$options.name
-			while (parentName !== name) {
-				parent = parent.$parent
-				if (!parent) return false
-				parentName = parent.$options.name
-			}
-			return parent
-		}
-	}
-}
-</script>
-
-<style lang="scss">
-$border-color: #ebeef5;
-
-.uni-table-th {
-	padding: 12px 10px;
-	/* #ifndef APP-NVUE */
-	display: table-cell;
-	box-sizing: border-box;
-	/* #endif */
-	font-size: 14px;
-	font-weight: bold;
-	color: #909399;
-	border-bottom: 1px $border-color solid;
-}
-
-.uni-table-th-row {
-	/* #ifndef APP-NVUE */
-	display: flex;
-	/* #endif */
-	flex-direction: row;
-}
-
-.table--border {
-	border-right: 1px $border-color solid;
-}
-.uni-table-th-content {
-	display: flex;
-	align-items: center;
-	flex: 1;
-}
-.arrow-box {
-}
-.arrow {
-	display: block;
-	position: relative;
-	width: 10px;
-	height: 8px;
-	// border: 1px red solid;
-	left: 5px;
-	overflow: hidden;
-	cursor: pointer;
-}
-.down {
-	top: 3px;
-	::after {
-		content: '';
-		width: 8px;
-		height: 8px;
-		position: absolute;
-		left: 2px;
-		top: -5px;
-		transform: rotate(45deg);
-		background-color: #ccc;
-	}
-	&.active {
-		::after {
-			background-color: #007aff;
-		}
-	}
-}
-.up {
-	::after {
-		content: '';
-		width: 8px;
-		height: 8px;
-		position: absolute;
-		left: 2px;
-		top: 5px;
-		transform: rotate(45deg);
-		background-color: #ccc;
-	}
-	&.active {
-		::after {
-			background-color: #007aff;
-		}
-	}
-}
-</style>

+ 0 - 129
uni_modules/uni-table/components/uni-thead/uni-thead.vue

xqd
@@ -1,129 +0,0 @@
-<template>
-	<!-- #ifdef H5 -->
-	<thead class="uni-table-thead">
-		<tr class="uni-table-tr">
-			<th :rowspan="rowspan" colspan="1" class="checkbox" :class="{ 'tr-table--border': border }">
-				<table-checkbox :indeterminate="indeterminate" :checked="checked" @checkboxSelected="checkboxSelected"></table-checkbox>
-			</th>
-		</tr>
-		<slot></slot>
-	</thead>
-	<!-- #endif -->
-	<!-- #ifndef H5 -->
-	<view class="uni-table-thead"><slot></slot></view>
-	<!-- #endif -->
-</template>
-
-<script>
-import tableCheckbox from '../uni-tr/table-checkbox.vue'
-export default {
-	name: 'uniThead',
-	components: {
-		tableCheckbox
-	},
-	options: {
-		virtualHost: true
-	},
-	data() {
-		return {
-			border: false,
-			selection: false,
-			rowspan: 1,
-			indeterminate: false,
-			checked: false
-		}
-	},
-	created() {
-		this.root = this.getTable()
-		// #ifdef H5
-		this.root.theadChildren = this
-		// #endif
-		this.border = this.root.border
-		this.selection = this.root.type
-	},
-	methods: {
-		init(self) {
-			this.rowspan++
-		},
-		checkboxSelected(e) {
-			this.indeterminate = false
-			const backIndexData = this.root.backIndexData
-			const data = this.root.trChildren.filter(v => !v.disabled && v.keyValue)
-			if (backIndexData.length === data.length) {
-				this.checked = false
-				this.root.clearSelection()
-			} else {
-				this.checked = true
-				this.root.selectionAll()
-			}
-		},
-		/**
-		 * 获取父元素实例
-		 */
-		getTable(name = 'uniTable') {
-			let parent = this.$parent
-			let parentName = parent.$options.name
-			while (parentName !== name) {
-				parent = parent.$parent
-				if (!parent) return false
-				parentName = parent.$options.name
-			}
-			return parent
-		}
-	}
-}
-</script>
-
-<style lang="scss">
-$border-color: #ebeef5;
-
-.uni-table-thead {
-	display: table-header-group;
-}
-
-.uni-table-tr {
-	/* #ifndef APP-NVUE */
-	display: table-row;
-	transition: all 0.3s;
-	box-sizing: border-box;
-	/* #endif */
-	border: 1px red solid;
-	background-color: #fafafa;
-}
-
-.checkbox {
-	padding: 0 8px;
-	width: 26px;
-	padding-left: 12px;
-	/* #ifndef APP-NVUE */
-	display: table-cell;
-	vertical-align: middle;
-	/* #endif */
-	color: #333;
-	font-weight: 500;
-	border-bottom: 1px $border-color solid;
-	font-size: 14px;
-	// text-align: center;
-}
-
-.tr-table--border {
-	border-right: 1px $border-color solid;
-}
-
-/* #ifndef APP-NVUE */
-.uni-table-tr {
-	::v-deep .uni-table-th {
-		&.table--border:last-child {
-			// border-right: none;
-		}
-	}
-
-	::v-deep .uni-table-td {
-		&.table--border:last-child {
-			// border-right: none;
-		}
-	}
-}
-
-/* #endif */
-</style>

+ 0 - 179
uni_modules/uni-table/components/uni-tr/table-checkbox.vue

xqd
@@ -1,179 +0,0 @@
-<template>
-	<view class="uni-table-checkbox" @click="selected">
-		<view v-if="!indeterminate" class="checkbox__inner" :class="{'is-checked':isChecked,'is-disable':isDisabled}">
-			<view class="checkbox__inner-icon"></view>
-		</view>
-		<view v-else class="checkbox__inner checkbox--indeterminate">
-			<view class="checkbox__inner-icon"></view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: 'TableCheckbox',
-		emits:['checkboxSelected'],
-		props: {
-			indeterminate: {
-				type: Boolean,
-				default: false
-			},
-			checked: {
-				type: [Boolean,String],
-				default: false
-			},
-			disabled: {
-				type: Boolean,
-				default: false
-			},
-			index: {
-				type: Number,
-				default: -1
-			},
-			cellData: {
-				type: Object,
-				default () {
-					return {}
-				}
-			}
-		},
-		watch:{
-			checked(newVal){
-				if(typeof this.checked === 'boolean'){
-					this.isChecked = newVal
-				}else{
-					this.isChecked = true
-				}
-			},
-			indeterminate(newVal){
-				this.isIndeterminate = newVal
-			}
-		},
-		data() {
-			return {
-				isChecked: false,
-				isDisabled: false,
-				isIndeterminate:false
-			}
-		},
-		created() {
-			if(typeof this.checked === 'boolean'){
-				this.isChecked = this.checked
-			}
-			this.isDisabled = this.disabled
-		},
-		methods: {
-			selected() {
-				if (this.isDisabled) return
-				this.isIndeterminate = false
-				this.isChecked = !this.isChecked
-				this.$emit('checkboxSelected', {
-					checked: this.isChecked,
-					data: this.cellData
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	$checked-color: #007aff;
-	$border-color: #DCDFE6;
-	$disable:0.4;
-
-	.uni-table-checkbox {
-		display: flex;
-		flex-direction: row;
-		align-items: center;
-		justify-content: center;
-		position: relative;
-		margin: 5px 0;
-		cursor: pointer;
-
-		// 多选样式
-		.checkbox__inner {
-			/* #ifndef APP-NVUE */
-			flex-shrink: 0;
-			box-sizing: border-box;
-			/* #endif */
-			position: relative;
-			width: 16px;
-			height: 16px;
-			border: 1px solid $border-color;
-			border-radius: 2px;
-			background-color: #fff;
-			z-index: 1;
-
-			.checkbox__inner-icon {
-				position: absolute;
-				/* #ifdef APP-NVUE */
-				top: 2px;
-				/* #endif */
-				/* #ifndef APP-NVUE */
-				top: 2px;
-				/* #endif */
-				left: 5px;
-				height: 7px;
-				width: 3px;
-				border: 1px solid #fff;
-				border-left: 0;
-				border-top: 0;
-				opacity: 0;
-				transform-origin: center;
-				transform: rotate(45deg);
-				box-sizing: content-box;
-			}
-
-			&.checkbox--indeterminate {
-				border-color: $checked-color;
-				background-color: $checked-color;
-
-				.checkbox__inner-icon {
-					position: absolute;
-					opacity: 1;
-					transform: rotate(0deg);
-					height: 2px;
-					top: 0;
-					bottom: 0;
-					margin: auto;
-					left: 0px;
-					right: 0px;
-					bottom: 0;
-					width: auto;
-					border: none;
-					border-radius: 2px;
-					transform: scale(0.5);
-					background-color: #fff;
-				}
-			}
-			&:hover{
-				border-color: $checked-color;
-			}
-			// 禁用
-			&.is-disable {
-				/* #ifdef H5 */
-				cursor: not-allowed;
-				/* #endif */
-				background-color: #F2F6FC;
-				border-color: $border-color;
-			}
-
-			// 选中
-			&.is-checked {
-				border-color: $checked-color;
-				background-color: $checked-color;
-
-				.checkbox__inner-icon {
-					opacity: 1;
-					transform: rotate(45deg);
-				}
-
-				// 选中禁用
-				&.is-disable {
-					opacity: $disable;
-				}
-			}
-			
-		}
-	}
-</style>

+ 0 - 171
uni_modules/uni-table/components/uni-tr/uni-tr.vue

xqd
@@ -1,171 +0,0 @@
-<template>
-	<!-- #ifdef H5 -->
-	<tr class="uni-table-tr">
-		<th v-if="selection === 'selection' && ishead" class="checkbox" :class="{ 'tr-table--border': border }">
-			<table-checkbox :checked="checked" :indeterminate="indeterminate" :disabled="disabled" @checkboxSelected="checkboxSelected"></table-checkbox>
-		</th>
-		<slot></slot>
-		<!-- <uni-th class="th-fixed">123</uni-th> -->
-	</tr>
-	<!-- #endif -->
-	<!-- #ifndef H5 -->
-	<view class="uni-table-tr">
-		<view v-if="selection === 'selection' " class="checkbox" :class="{ 'tr-table--border': border }">
-			<table-checkbox :checked="checked" :indeterminate="indeterminate" :disabled="disabled" @checkboxSelected="checkboxSelected"></table-checkbox>
-		</view>
-		<slot></slot>
-	</view>
-	<!-- #endif -->
-</template>
-
-<script>
-	import tableCheckbox from './table-checkbox.vue'
-/**
- * Tr 表格行组件
- * @description 表格行组件 仅包含 th,td 组件
- * @tutorial https://ext.dcloud.net.cn/plugin?id=
- */
-export default {
-	name: 'uniTr',
-	components: { tableCheckbox },
-	props: {
-		disabled: {
-			type: Boolean,
-			default: false
-		},
-		keyValue: {
-			type: [String, Number],
-			default: ''
-		}
-	},
-	options: {
-		virtualHost: true
-	},
-	data() {
-		return {
-			value: false,
-			border: false,
-			selection: false,
-			widthThArr: [],
-			ishead: true,
-			checked: false,
-			indeterminate:false
-		}
-	},
-	created() {
-		this.root = this.getTable()
-		this.head = this.getTable('uniThead')
-		if (this.head) {
-			this.ishead = false
-			this.head.init(this)
-		}
-		this.border = this.root.border
-		this.selection = this.root.type
-		this.root.trChildren.push(this)
-		const rowData = this.root.data.find(v => v[this.root.rowKey] === this.keyValue)
-		if(rowData){
-			this.rowData = rowData
-		}
-		this.root.isNodata()
-	},
-	mounted() {
-		if (this.widthThArr.length > 0) {
-			const selectionWidth = this.selection === 'selection' ? 50 : 0
-			this.root.minWidth = this.widthThArr.reduce((a, b) => Number(a) + Number(b)) + selectionWidth
-		}
-	},
-	// #ifndef VUE3
-	destroyed() {
-		const index = this.root.trChildren.findIndex(i => i === this)
-		this.root.trChildren.splice(index, 1)
-		this.root.isNodata()
-	},
-	// #endif
-	// #ifdef VUE3
-	unmounted() {
-		const index = this.root.trChildren.findIndex(i => i === this)
-		this.root.trChildren.splice(index, 1)
-		this.root.isNodata()
-	},
-	// #endif
-	methods: {
-		minWidthUpdate(width) {
-			this.widthThArr.push(width)
-		},
-		// 选中
-		checkboxSelected(e) {
-			let rootData = this.root.data.find(v => v[this.root.rowKey] === this.keyValue)
-			this.checked = e.checked
-			this.root.check(rootData||this, e.checked,rootData? this.keyValue:null)
-		},
-		change(e) {
-			this.root.trChildren.forEach(item => {
-				if (item === this) {
-					this.root.check(this, e.detail.value.length > 0 ? true : false)
-				}
-			})
-		},
-		/**
-		 * 获取父元素实例
-		 */
-		getTable(name = 'uniTable') {
-			let parent = this.$parent
-			let parentName = parent.$options.name
-			while (parentName !== name) {
-				parent = parent.$parent
-				if (!parent) return false
-				parentName = parent.$options.name
-			}
-			return parent
-		}
-	}
-}
-</script>
-
-<style lang="scss">
-$border-color: #ebeef5;
-
-.uni-table-tr {
-	/* #ifndef APP-NVUE */
-	display: table-row;
-	transition: all 0.3s;
-	box-sizing: border-box;
-	/* #endif */
-}
-
-.checkbox {
-	padding: 0 8px;
-	width: 26px;
-	padding-left: 12px;
-	/* #ifndef APP-NVUE */
-	display: table-cell;
-	vertical-align: middle;
-	/* #endif */
-	color: #333;
-	font-weight: 500;
-	border-bottom: 1px $border-color solid;
-	font-size: 14px;
-	// text-align: center;
-}
-
-.tr-table--border {
-	border-right: 1px $border-color solid;
-}
-
-/* #ifndef APP-NVUE */
-.uni-table-tr {
-	::v-deep .uni-table-th {
-		&.table--border:last-child {
-			// border-right: none;
-		}
-	}
-
-	::v-deep .uni-table-td {
-		&.table--border:last-child {
-			// border-right: none;
-		}
-	}
-}
-
-/* #endif */
-</style>

+ 0 - 9
uni_modules/uni-table/i18n/en.json

xqd
@@ -1,9 +0,0 @@
-{
-	"filter-dropdown.reset": "Reset",
-	"filter-dropdown.search": "Search",
-	"filter-dropdown.submit": "Submit",
-	"filter-dropdown.filter": "Filter",
-	"filter-dropdown.gt": "Greater or equal to",
-	"filter-dropdown.lt": "Less than or equal to",
-	"filter-dropdown.date": "Date"
-}

+ 0 - 9
uni_modules/uni-table/i18n/es.json

xqd
@@ -1,9 +0,0 @@
-{
-	"filter-dropdown.reset": "Reiniciar",
-	"filter-dropdown.search": "Búsqueda",
-	"filter-dropdown.submit": "Entregar",
-	"filter-dropdown.filter": "Filtrar",
-	"filter-dropdown.gt": "Mayor o igual a",
-	"filter-dropdown.lt": "Menos que o igual a",
-	"filter-dropdown.date": "Fecha"
-}

+ 0 - 9
uni_modules/uni-table/i18n/fr.json

xqd
@@ -1,9 +0,0 @@
-{
-	"filter-dropdown.reset": "Réinitialiser",
-	"filter-dropdown.search": "Chercher",
-	"filter-dropdown.submit": "Soumettre",
-	"filter-dropdown.filter": "Filtre",
-	"filter-dropdown.gt": "Supérieur ou égal à",
-	"filter-dropdown.lt": "Inférieur ou égal à",
-	"filter-dropdown.date": "Date"
-}

+ 0 - 12
uni_modules/uni-table/i18n/index.js

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

+ 0 - 9
uni_modules/uni-table/i18n/zh-Hans.json

xqd
@@ -1,9 +0,0 @@
-{
-	"filter-dropdown.reset": "重置",
-	"filter-dropdown.search": "搜索",
-	"filter-dropdown.submit": "确定",
-	"filter-dropdown.filter": "筛选",
-	"filter-dropdown.gt": "大于等于",
-	"filter-dropdown.lt": "小于等于",
-	"filter-dropdown.date": "日期范围"
-}

+ 0 - 9
uni_modules/uni-table/i18n/zh-Hant.json

xqd
@@ -1,9 +0,0 @@
-{
-	"filter-dropdown.reset": "重置",
-	"filter-dropdown.search": "搜索",
-	"filter-dropdown.submit": "確定",
-	"filter-dropdown.filter": "篩選",
-	"filter-dropdown.gt": "大於等於",
-	"filter-dropdown.lt": "小於等於",
-	"filter-dropdown.date": "日期範圍"
-}

+ 0 - 86
uni_modules/uni-table/package.json

xqd
@@ -1,86 +0,0 @@
-{
-  "id": "uni-table",
-  "displayName": "uni-table 表格",
-  "version": "1.2.1",
-  "description": "表格组件,多用于展示多条结构类似的数据,如",
-  "keywords": [
-    "uni-ui",
-    "uniui",
-    "table",
-    "表格"
-],
-  "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","uni-datetime-picker"],
-    "encrypt": [],
-    "platforms": {
-      "cloud": {
-        "tcb": "y",
-        "aliyun": "y"
-      },
-      "client": {
-        "App": {
-          "app-vue": "y",
-          "app-nvue": "n"
-        },
-        "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",
-          "字节跳动": "n",
-          "QQ": "y"
-        },
-        "快应用": {
-          "华为": "n",
-          "联盟": "n"
-        },
-        "Vue": {
-            "vue2": "y",
-            "vue3": "y"
-        }
-      }
-    }
-  }
-}

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

xqd
@@ -1,13 +0,0 @@
-
-
-## Table 表单
-> 组件名:``uni-table``,代码块: `uTable`。
-
-用于展示多条结构类似的数据
-
-### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-table)
-#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 
-
-
-
-