cmy 2 سال پیش
والد
کامیت
d1fdd4ee58
66فایلهای تغییر یافته به همراه3551 افزوده شده و 4296 حذف شده
  1. 9 0
      api/game.js
  2. 0 122
      components/uni-badge/uni-badge.vue
  3. 0 182
      components/uni-countdown/uni-countdown.vue
  4. 0 188
      components/uni-countdown/uni-countdowns.vue
  5. 0 124
      components/uni-fav/uni-fav.vue
  6. 0 96
      components/uni-icons/icons.js
  7. 0 10
      components/uni-icons/uni-icons.vue
  8. 0 230
      components/uni-list-item/uni-list-item.vue
  9. 0 68
      components/uni-list/uni-list.vue
  10. 0 65
      components/uni-list/uni-refresh.vue
  11. 0 87
      components/uni-list/uni-refresh.wxs
  12. 0 194
      components/uni-load-more/uni-load-more.vue
  13. 0 396
      components/uni-notice-bar/uni-notice-bar.vue
  14. 0 263
      components/uni-popup/uni-popup-ori.vue
  15. 0 282
      components/uni-popup/uni-popup-share.vue
  16. 0 263
      components/uni-popup/uni-popup.vue
  17. 0 141
      components/uni-rate/uni-rate.vue
  18. 0 244
      components/uni-steps/uni-steps.vue
  19. 0 279
      components/uni-transition/uni-transition.vue
  20. 346 152
      pages/index/entertainment - 副本.vue
  21. 0 838
      pages/index/entertainment.vue
  22. 0 4
      pages/index/user.vue
  23. 0 4
      pages/user/withdrawal.vue
  24. 8 0
      uni_modules/cc-defineKeyboard/changelog.md
  25. 44 0
      uni_modules/cc-defineKeyboard/components/cc-defineKeyboard/cc-defineKeyboard.scss
  26. 115 0
      uni_modules/cc-defineKeyboard/components/cc-defineKeyboard/cc-defineKeyboard.vue
  27. 87 0
      uni_modules/cc-defineKeyboard/package.json
  28. 232 0
      uni_modules/cc-defineKeyboard/readme.md
  29. 29 0
      uni_modules/uni-number-box/changelog.md
  30. 221 0
      uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue
  31. 82 0
      uni_modules/uni-number-box/package.json
  32. 13 0
      uni_modules/uni-number-box/readme.md
  33. 68 0
      uni_modules/uni-popup/changelog.md
  34. 45 0
      uni_modules/uni-popup/components/uni-popup-dialog/keypress.js
  35. 80 48
      uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue
  36. 43 16
      uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue
  37. 187 0
      uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue
  38. 7 0
      uni_modules/uni-popup/components/uni-popup/i18n/en.json
  39. 8 0
      uni_modules/uni-popup/components/uni-popup/i18n/index.js
  40. 7 0
      uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json
  41. 7 0
      uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json
  42. 45 0
      uni_modules/uni-popup/components/uni-popup/keypress.js
  43. 26 0
      uni_modules/uni-popup/components/uni-popup/popup.js
  44. 473 0
      uni_modules/uni-popup/components/uni-popup/uni-popup.vue
  45. 87 0
      uni_modules/uni-popup/package.json
  46. 17 0
      uni_modules/uni-popup/readme.md
  47. 8 0
      uni_modules/uni-scss/changelog.md
  48. 1 0
      uni_modules/uni-scss/index.scss
  49. 82 0
      uni_modules/uni-scss/package.json
  50. 4 0
      uni_modules/uni-scss/readme.md
  51. 7 0
      uni_modules/uni-scss/styles/index.scss
  52. 3 0
      uni_modules/uni-scss/styles/setting/_border.scss
  53. 66 0
      uni_modules/uni-scss/styles/setting/_color.scss
  54. 55 0
      uni_modules/uni-scss/styles/setting/_radius.scss
  55. 56 0
      uni_modules/uni-scss/styles/setting/_space.scss
  56. 167 0
      uni_modules/uni-scss/styles/setting/_styles.scss
  57. 24 0
      uni_modules/uni-scss/styles/setting/_text.scss
  58. 146 0
      uni_modules/uni-scss/styles/setting/_variables.scss
  59. 19 0
      uni_modules/uni-scss/styles/tools/functions.scss
  60. 31 0
      uni_modules/uni-scss/theme.scss
  61. 62 0
      uni_modules/uni-scss/variables.scss
  62. 22 0
      uni_modules/uni-transition/changelog.md
  63. 131 0
      uni_modules/uni-transition/components/uni-transition/createAnimation.js
  64. 286 0
      uni_modules/uni-transition/components/uni-transition/uni-transition.vue
  65. 84 0
      uni_modules/uni-transition/package.json
  66. 11 0
      uni_modules/uni-transition/readme.md

+ 9 - 0
api/game.js

@@ -49,4 +49,13 @@ export  function gameBetList(data,type) {
 		method: 'get',
 		data
 	});
+}
+
+// 互娱  获取交易记录
+export  function gameBetIn(data,type) {
+	return request({
+		url: `/api/game/bet/${data.id}`,
+		method: 'post',
+		data
+	});
 }

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

@@ -1,122 +0,0 @@
-<template>
-	<text v-if="text" :class="inverted ? 'uni-badge--' + type + ' uni-badge--' + size + ' uni-badge--' + type + '-inverted' : 'uni-badge--' + type + ' uni-badge--' + size"
-	 class="uni-badge" :style="width" @click="onClick()">{{ text }}</text>
-</template>
-
-<script>
-	export default {
-		name: 'UniBadge',
-		props: {
-			type: {
-				type: String,
-				default: 'default'
-			},
-			inverted: {
-				type: Boolean,
-				default: false
-			},
-			text: {
-				type: [String,Number],
-				default: ''
-			},
-			size: {
-				// small.normal
-				type: String,
-				default: 'normal'
-			}
-		},
-		data() {
-			return {
-				width: `display: inline-block;width: ${String(this.text).length * 15 + 25}rpx`
-			};
-		},
-		methods: {
-			onClick() {
-				this.$emit('click');
-			}
-		}
-	};
-</script>
-
-<style lang="scss" scoped>
-	$bage-size: 12px;
-	$bage-small: scale(0.8);
-	$bage-height: 40rpx;
-
-	.uni-badge {
-		/* #ifndef APP-PLUS */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-		height: $bage-height;
-		line-height: $bage-height;
-		color: $uni-text-color;
-		border-radius: 100px;
-		background-color: $uni-bg-color-hover;
-		background-color: transparent;
-		text-align: center;
-		font-family: 'Helvetica Neue', Helvetica, sans-serif;
-		font-size: $bage-size;
-		padding: 0;
-	}
-
-	.uni-badge--inverted {
-		padding: 0 5px 0 0;
-		color: $uni-bg-color-hover;
-	}
-
-	.uni-badge--default {
-		color: $uni-text-color;
-		background-color: $uni-bg-color-hover;
-	}
-
-	.uni-badge--default-inverted {
-		color: $uni-text-color-grey;
-		background-color: transparent;
-	}
-
-	.uni-badge--primary {
-		color: $uni-text-color-inverse;
-		background-color: $uni-color-primary;
-	}
-
-	.uni-badge--primary-inverted {
-		color: $uni-color-primary;
-		background-color: transparent;
-	}
-
-	.uni-badge--success {
-		color: $uni-text-color-inverse;
-		background-color: $uni-color-success;
-	}
-
-	.uni-badge--success-inverted {
-		color: $uni-color-success;
-		background-color: transparent;
-	}
-
-	.uni-badge--warning {
-		color: $uni-text-color-inverse;
-		background-color: $uni-color-warning;
-	}
-
-	.uni-badge--warning-inverted {
-		color: $uni-color-warning;
-		background-color: transparent;
-	}
-
-	.uni-badge--error {
-		color: $uni-text-color-inverse;
-		background-color: $uni-color-error;
-	}
-
-	.uni-badge--error-inverted {
-		color: $uni-color-error;
-		background-color: transparent;
-	}
-
-	.uni-badge--small {
-		transform: $bage-small;
-		transform-origin: center center;
-	}
-</style>

+ 0 - 182
components/uni-countdown/uni-countdown.vue

@@ -1,182 +0,0 @@
-<template>
-	<view class="uni-countdown">
-		<text v-if="showDay" :style="{ borderColor: borderColor, color: color, backgroundColor: backgroundColor }" class="uni-countdown__number">{{ d }}</text>
-		<text v-if="showDay" :style="{ color: splitorColor }" class="uni-countdown__splitor">天</text>
-		<text :style="{ borderColor: borderColor, color: color, backgroundColor: backgroundColor }" class="uni-countdown__number">{{ h }}</text>
-		<text :style="{ color: splitorColor }" class="uni-countdown__splitor">{{ showColon ? ':' : '时' }}</text>
-		<text :style="{ borderColor: borderColor, color: color, backgroundColor: backgroundColor }" class="uni-countdown__number">{{ i }}</text>
-		<text :style="{ color: splitorColor }" class="uni-countdown__splitor">{{ showColon ? ':' : '分' }}</text>
-		<text :style="{ borderColor: borderColor, color: color, backgroundColor: backgroundColor }" class="uni-countdown__number">{{ s }}</text>
-		<text v-if="!showColon" :style="{ color: splitorColor }" class="uni-countdown__splitor">秒</text>
-	</view>
-</template>
-<script>
-	export default {
-		name: 'UniCountdown',
-		props: {
-			showDay: {
-				type: Boolean,
-				default: true
-			},
-			showColon: {
-				type: Boolean,
-				default: true
-			},
-			backgroundColor: {
-				type: String,
-				default: '#FFFFFF'
-			},
-			borderColor: {
-				type: String,
-				default: '#000000'
-			},
-			color: {
-				type: String,
-				default: '#000000'
-			},
-			splitorColor: {
-				type: String,
-				default: '#000000'
-			},
-			day:0,
-			hour:0,
-			minute:0,
-			second:0
-		},
-		data() {
-			return {
-				timer: null,
-				syncFlag: false,
-				d: '00',
-				h: '00',
-				i: '00',
-				s: '00',
-				leftTime: 0,
-				seconds: 0
-			}
-		},
-		watch: {
-			day(val) {
-				console.log(val,'day')
-				this.changeFlag()
-			},
-			hour(val) {
-				this.changeFlag()
-			},
-			minute(val) {
-				this.changeFlag()
-			},
-			second(val) {
-				this.changeFlag()
-			}
-		},
-		created: function(e) {
-			this.startData();
-		},
-		beforeDestroy() {
-			clearInterval(this.timer)
-		},
-		methods: {
-			toSeconds(day, hours, minutes, seconds) {
-				return day * 60 * 60 * 24 + hours * 60 * 60 + minutes * 60 + seconds
-			},
-			timeUp() {
-				clearInterval(this.timer)
-				this.$emit('timeup')
-			},
-			countDown() {
-				let seconds = this.seconds
-				let [day, hour, minute, second] = [0, 0, 0, 0]
-				if (seconds > 0) {
-					day = Math.floor(seconds / (60 * 60 * 24))
-					hour = Math.floor(seconds / (60 * 60)) - (day * 24)
-					minute = Math.floor(seconds / 60) - (day * 24 * 60) - (hour * 60)
-					second = Math.floor(seconds) - (day * 24 * 60 * 60) - (hour * 60 * 60) - (minute * 60)
-				} else {
-					this.timeUp()
-				}
-				hour = hour + (day*24)
-				if (day < 10) {
-					day = '0' + day
-				}
-				if (hour < 10) {
-					hour = '0' + hour
-				}
-				if (minute < 10) {
-					minute = '0' + minute
-				}
-				if (second < 10) {
-					second = '0' + second
-				}
-				this.d = day
-				this.h = hour
-				this.i = minute
-				this.s = second
-			},
-			startData() {
-				this.seconds = this.toSeconds(this.day, this.hour, this.minute, this.second)
-				if (this.seconds <= 0) {
-					return
-				}
-				this.countDown()
-				this.timer = setInterval(() => {
-					this.seconds--
-					if (this.seconds < 0) {
-						this.timeUp()
-						return
-					}
-					this.countDown()
-				}, 1000)
-			},
-			changeFlag() {
-				if (!this.syncFlag) {
-					this.seconds = this.toSeconds(this.day, this.hour, this.minute, this.second)
-					console.log(this.seconds)
-					this.startData();
-					this.syncFlag = true;
-				}
-			}
-		}
-	}
-</script>
-<style lang="scss" scoped>
-	@import '~@/uni.scss';
-	$countdown-height: 40rpx;
-	$countdown-width: 40rpx;
-
-	.uni-countdown {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-		justify-content: flex-start;
-		position: relative;
-		top: 5rpx;
-		left: 15rpx;
-	}
-
-	.uni-countdown__splitor {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		justify-content: center;
-		line-height: $countdown-height;
-		padding: 5rpx;
-		font-size: $uni-font-size-sm;
-	}
-
-	.uni-countdown__number {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		justify-content: center;
-		align-items: center;
-		width: $countdown-width;
-		height: $countdown-height;
-		line-height: $countdown-height;
-		// margin: 5rpx;
-		text-align: center;
-		font-size: $uni-font-size-sm;
-		border-radius: 8rpx;
-	}
-</style>

+ 0 - 188
components/uni-countdown/uni-countdowns.vue

@@ -1,188 +0,0 @@
-<template>
-	<view class="uni-countdown">
-		<text v-if="showDay" :style="{ borderColor: borderColor, color: color, backgroundColor: backgroundColor }" class="uni-countdown__number">{{ d }}</text>
-		<text v-if="showDay" :style="{ color: splitorColor }" class="uni-countdown__splitor">天</text>
-		<text :style="{ borderColor: borderColor, color: color, backgroundColor: backgroundColor }" class="uni-countdown__number">{{ h }}</text>
-		<text :style="{ color: splitorColor }" class="uni-countdown__splitor">{{ showColon ? ':' : '时' }}</text>
-		<text :style="{ borderColor: borderColor, color: color, backgroundColor: backgroundColor }" class="uni-countdown__number">{{ i }}</text>
-		<text :style="{ color: splitorColor }" class="uni-countdown__splitor">{{ showColon ? ':' : '分' }}</text>
-		<text :style="{ borderColor: borderColor, color: color, backgroundColor: backgroundColor }" class="uni-countdown__number">{{ s }}</text>
-		<text v-if="!showColon" :style="{ color: splitorColor }" class="uni-countdown__splitor">秒</text>
-	</view>
-</template>
-<script>
-	export default {
-		name: 'UniCountdown',
-		props: {
-			showDay: {
-				type: Boolean,
-				default: true
-			},
-			showColon: {
-				type: Boolean,
-				default: true
-			},
-			backgroundColor: {
-				type: String,
-				default: '#FFFFFF'
-			},
-			borderColor: {
-				type: String,
-				default: '#000000'
-			},
-			color: {
-				type: String,
-				default: '#000000'
-			},
-			splitorColor: {
-				type: String,
-				default: '#000000'
-			},
-			day: {
-				type: Number,
-				default: 0
-			},
-			hour: {
-				type: Number,
-				default: 0
-			},
-			minute: {
-				type: Number,
-				default: 0
-			},
-			second: {
-				type: Number,
-				default: 0
-			}
-		},
-		data() {
-			return {
-				timer: null,
-				syncFlag: false,
-				d: '00',
-				h: '00',
-				i: '00',
-				s: '00',
-				leftTime: 0,
-				seconds: 0
-			}
-		},
-		watch: {
-			day(val) {
-				this.changeFlag()
-			},
-			hour(val) {
-				this.changeFlag()
-			},
-			minute(val) {
-				this.changeFlag()
-			},
-			second(val) {
-				this.changeFlag()
-			}
-		},
-		created: function(e) {
-			this.startData();
-		},
-		beforeDestroy() {
-			clearInterval(this.timer)
-		},
-		methods: {
-			toSeconds(day, hours, minutes, seconds) {
-				return day * 60 * 60 * 24 + hours * 60 * 60 + minutes * 60 + seconds
-			},
-			timeUp() {
-				clearInterval(this.timer)
-				this.$emit('timeup')
-			},
-			countDown() {
-				let seconds = this.seconds
-				let [day, hour, minute, second] = [0, 0, 0, 0]
-				if (seconds > 0) {
-					day = Math.floor(seconds / (60 * 60 * 24))
-					hour = Math.floor(seconds / (60 * 60)) - (day * 24)
-					minute = Math.floor(seconds / 60) - (day * 24 * 60) - (hour * 60)
-					second = Math.floor(seconds) - (day * 24 * 60 * 60) - (hour * 60 * 60) - (minute * 60)
-				} else {
-					this.timeUp()
-				}
-				if (day < 10) {
-					day = '0' + day
-				}
-				if (hour < 10) {
-					hour = '0' + hour
-				}
-				if (minute < 10) {
-					minute = '0' + minute
-				}
-				if (second < 10) {
-					second = '0' + second
-				}
-				this.d = day
-				this.h = hour
-				this.i = minute
-				this.s = second
-			},
-			startData() {
-				this.seconds = this.toSeconds(this.day, this.hour, this.minute, this.second)
-				if (this.seconds <= 0) {
-					return
-				}
-				this.countDown()
-				this.timer = setInterval(() => {
-					this.seconds--
-					if (this.seconds < 0) {
-						this.timeUp()
-						return
-					}
-					this.countDown()
-				}, 1000)
-			},
-			changeFlag() {
-				if (!this.syncFlag) {
-					this.seconds = this.toSeconds(this.day, this.hour, this.minute, this.second)
-					this.startData();
-					this.syncFlag = true;
-				}
-			}
-		}
-	}
-</script>
-<style lang="scss" scoped>
-	@import '~@/uni.scss';
-	$countdown-height: 48rpx;
-	$countdown-width: 52rpx;
-
-	.uni-countdown {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-		justify-content: flex-start;
-		padding: 2rpx 0;
-	}
-
-	.uni-countdown__splitor {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		justify-content: center;
-		line-height: $countdown-height;
-		padding: 5rpx;
-		font-size: $uni-font-size-sm;
-	}
-
-	.uni-countdown__number {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		justify-content: center;
-		align-items: center;
-		width: $countdown-width;
-		height: $countdown-height;
-		line-height: $countdown-height;
-		margin: 5rpx;
-		text-align: center;
-		font-size: $uni-font-size-sm;
-	}
-</style>

+ 0 - 124
components/uni-fav/uni-fav.vue

@@ -1,124 +0,0 @@
-<template>
-	<view :class="[circle === true || circle === 'true' ? 'uni-fav--circle' : '']" :style="[{ backgroundColor: checked ? bgColorChecked : bgColor }]"
-	 @click="onClick" class="uni-fav">
-		<!-- #ifdef MP-ALIPAY -->
-		<view class="uni-fav-star" v-if="!checked && (star === true || star === 'true')">
-			<uni-icons :color="fgColor" :style="{color: checked ? fgColorChecked : fgColor}" size="14" type="star-filled" />
-		</view>
-		<!-- #endif -->
-		<!-- #ifndef MP-ALIPAY -->
-		<uni-icons :color="fgColor" :style="{color: checked ? fgColorChecked : fgColor}" class="uni-fav-star" size="14" type="star-filled"
-		 v-if="!checked && (star === true || star === 'true')" />
-		<!-- #endif -->
-		<text :style="{color: checked ? fgColorChecked : fgColor}" class="uni-fav-text">{{ checked ? contentText.contentFav : contentText.contentDefault }}</text>
-	</view>
-</template>
-
-<script>
-	import uniIcons from "../uni-icons/uni-icons.vue";
-	export default {
-		name: "UniFav",
-		components: {
-			uniIcons
-		},
-		props: {
-			star: {
-				type: [Boolean, String],
-				default: true
-			},
-			bgColor: {
-				type: String,
-				default: "#eeeeee"
-			},
-			fgColor: {
-				type: String,
-				default: "#666666"
-			},
-			bgColorChecked: {
-				type: String,
-				default: "#007aff"
-			},
-			fgColorChecked: {
-				type: String,
-				default: "#FFFFFF"
-			},
-			circle: {
-				type: [Boolean, String],
-				default: false
-			},
-			checked: {
-				type: Boolean,
-				default: false
-			},
-			contentText: {
-				type: Object,
-				default () {
-					return {
-						contentDefault: "收藏",
-						contentFav: "已收藏"
-					};
-				}
-			}
-		},
-		watch: {
-			checked() {
-				if (uni.report) {
-					if (this.checked) {
-						uni.report("收藏", "收藏");
-					} else {
-						uni.report("取消收藏", "取消收藏");
-					}
-				}
-			}
-		},
-		methods: {
-			onClick() {
-				this.$emit("click");
-			}
-		}
-	};
-</script>
-
-<style lang="scss" scoped>
-	$fav-height: 25px;
-
-	.uni-fav {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-		align-items: center;
-		justify-content: center;
-		width: 60px;
-		height: $fav-height;
-		line-height: $fav-height;
-		text-align: center;
-		border-radius: 3px;
-	}
-
-	.uni-fav--circle {
-		border-radius: 30px;
-	}
-
-	.uni-fav-star {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		height: $fav-height;
-		line-height: 24px;
-		margin-right: 3px;
-		align-items: center;
-		justify-content: center;
-	}
-
-	.uni-fav-text {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		height: $fav-height;
-		line-height: $fav-height;
-		align-items: center;
-		justify-content: center;
-		font-size: $uni-font-size-base;
-	}
-</style>

+ 0 - 96
components/uni-icons/icons.js

@@ -1,96 +0,0 @@
-export default {
-	'contact': '\ue100',
-	'person': '\ue101',
-	'personadd': '\ue102',
-	'contact-filled': '\ue130',
-	'person-filled': '\ue131',
-	'personadd-filled': '\ue132',
-	'phone': '\ue200',
-	'email': '\ue201',
-	'chatbubble': '\ue202',
-	'chatboxes': '\ue203',
-	'phone-filled': '\ue230',
-	'email-filled': '\ue231',
-	'chatbubble-filled': '\ue232',
-	'chatboxes-filled': '\ue233',
-	'weibo': '\ue260',
-	'weixin': '\ue261',
-	'pengyouquan': '\ue262',
-	'chat': '\ue263',
-	'qq': '\ue264',
-	'videocam': '\ue300',
-	'camera': '\ue301',
-	'mic': '\ue302',
-	'location': '\ue303',
-	'mic-filled': '\ue332',
-	'speech': '\ue332',
-	'location-filled': '\ue333',
-	'micoff': '\ue360',
-	'image': '\ue363',
-	'map': '\ue364',
-	'compose': '\ue400',
-	'trash': '\ue401',
-	'upload': '\ue402',
-	'download': '\ue403',
-	'close': '\ue404',
-	'redo': '\ue405',
-	'undo': '\ue406',
-	'refresh': '\ue407',
-	'star': '\ue408',
-	'plus': '\ue409',
-	'minus': '\ue410',
-	'circle': '\ue411',
-	'checkbox': '\ue411',
-	'close-filled': '\ue434',
-	'clear': '\ue434',
-	'refresh-filled': '\ue437',
-	'star-filled': '\ue438',
-	'plus-filled': '\ue439',
-	'minus-filled': '\ue440',
-	'circle-filled': '\ue441',
-	'checkbox-filled': '\ue442',
-	'closeempty': '\ue460',
-	'refreshempty': '\ue461',
-	'reload': '\ue462',
-	'starhalf': '\ue463',
-	'spinner': '\ue464',
-	'spinner-cycle': '\ue465',
-	'search': '\ue466',
-	'plusempty': '\ue468',
-	'forward': '\ue470',
-	'back': '\ue471',
-	'left-nav': '\ue471',
-	'checkmarkempty': '\ue472',
-	'home': '\ue500',
-	'navigate': '\ue501',
-	'gear': '\ue502',
-	'paperplane': '\ue503',
-	'info': '\ue504',
-	'help': '\ue505',
-	'locked': '\ue506',
-	'more': '\ue507',
-	'flag': '\ue508',
-	'home-filled': '\ue530',
-	'gear-filled': '\ue532',
-	'info-filled': '\ue534',
-	'help-filled': '\ue535',
-	'more-filled': '\ue537',
-	'settings': '\ue560',
-	'list': '\ue562',
-	'bars': '\ue563',
-	'loop': '\ue565',
-	'paperclip': '\ue567',
-	'eye': '\ue568',
-	'arrowup': '\ue580',
-	'arrowdown': '\ue581',
-	'arrowleft': '\ue582',
-	'arrowright': '\ue583',
-	'arrowthinup': '\ue584',
-	'arrowthindown': '\ue585',
-	'arrowthinleft': '\ue586',
-	'arrowthinright': '\ue587',
-	'pulldown': '\ue588',
-	'closefill': '\ue589',
-	'sound': '\ue590',
-	'scan': '\ue612'
-}

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 10
components/uni-icons/uni-icons.vue


+ 0 - 230
components/uni-list-item/uni-list-item.vue

@@ -1,230 +0,0 @@
-<template>
-	<!-- #ifdef APP-NVUE -->
-	<cell>
-	<!-- #endif -->
-	<view :class="disabled ? 'uni-list-item--disabled' : ''" :hover-class="disabled || showSwitch ? '' : 'uni-list-item--hover'"
-	 class="uni-list-item" @click="onClick">
-		<view class="uni-list-item__container" :class="{'uni-list-item--first':isFirstChild}">
-			<view v-if="thumb" class="uni-list-item__icon">
-				<image :src="thumb" mode="aspectFit" class="uni-list-item__icon-img" />
-			</view>
-			<view v-else-if="showExtraIcon" class="uni-list-item__icon">
-				<uni-icons :color="extraIcon.color" :size="extraIcon.size" :type="extraIcon.type" class="uni-icon-wrapper" />
-			</view>
-			<view class="uni-list-item__content">
-				<slot></slot>
-				<text class="uni-list-item__content-title">{{ title }}</text>
-				<text v-if="note" class="uni-list-item__content-note">{{ note }}</text>
-			</view>
-			<view class="uni-list-item__slot">
-				<slot name="right" ></slot>
-			</view>
-			<view v-if="showBadge || showArrow || showSwitch" class="uni-list-item__extra">
-				<uni-badge v-if="showBadge" :type="badgeType" :text="badgeText" />
-				<switch class="itemSwitch" v-if="showSwitch" :color="switchColor" :disabled="disabled" :checked="switchChecked" @change="onSwitchChange" />
-				<uni-icons v-if="showArrow" :size="20" class="uni-icon-wrapper" color="#bbb" type="arrowright" />
-			</view>
-		</view>
-	</view>
-	<!-- #ifdef APP-NVUE -->
-	</cell>
-	<!-- #endif -->
-</template>
-
-<script>
-	import uniIcons from '../uni-icons/uni-icons.vue'
-	import uniBadge from '../uni-badge/uni-badge.vue'
-	export default {
-		name: 'UniListItem',
-		components: {
-			uniIcons,
-			uniBadge
-		},
-		props: {
-			title: {
-				type: String,
-				default: ''
-			}, // 列表标题
-			note: {
-				type: String,
-				default: ''
-			}, // 列表描述
-			disabled: {
-				// 是否禁用
-				type: [Boolean, String],
-				default: false
-			},
-			showArrow: {
-				// 是否显示箭头
-				type: [Boolean, String],
-				default: true
-			},
-			showBadge: {
-				// 是否显示数字角标
-				type: [Boolean, String],
-				default: false
-			},
-			showSwitch: {
-				// 是否显示Switch
-				type: [Boolean, String],
-				default: false
-			},
-			switchChecked: {
-				// Switch是否被选中
-				type: [Boolean, String],
-				default: false
-			},
-			switchColor:{
-				type:String,
-				default:''
-			},
-			badgeText: {
-				// badge内容
-				type: String,
-				default: ''
-			},
-			badgeType: {
-				// badge类型
-				type: String,
-				default: 'success'
-			},
-			thumb: {
-				// 缩略图
-				type: String,
-				default: ''
-			},
-			showExtraIcon: {
-				// 是否显示扩展图标
-				type: [Boolean, String],
-				default: false
-			},
-			extraIcon: {
-				type: Object,
-				default () {
-					return {
-						type: 'contact',
-						color: '#000000',
-						size: 20
-					}
-				}
-			}
-		},
-		inject: ['list'],
-		data() {
-			return {
-				isFirstChild: false
-			}
-		},
-		mounted() {
-			if (!this.list.firstChildAppend) {
-				this.list.firstChildAppend = true
-				this.isFirstChild = true
-			}
-		},
-		methods: {
-			onClick() {
-				this.$emit('click')
-			},
-			onSwitchChange(e) {
-				this.$emit('switchChange', e.detail)
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	@import '~@/uni.scss';
-
-	$list-item-pd: $uni-spacing-col-lg $uni-spacing-row-lg;
-
-	.uni-list-item {
-		font-size: $uni-font-size-lg;
-		position: relative;
-		flex-direction: column;
-		justify-content: space-between;
-		padding-left: $uni-spacing-row-lg;
-	}
-
-	.uni-list-item--disabled {
-		opacity: 0.3;
-	}
-
-	.uni-list-item--hover {
-		background-color: $uni-bg-color-hover;
-	}
-
-	.uni-list-item__container {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-		padding: $list-item-pd;
-		padding-left: 0;
-		flex: 1;
-		position: relative;
-		justify-content: space-between;
-		align-items: center;
-		border-top-color: $uni-border-color;
-		border-top-style: solid;
-		border-top-width: 1px;
-	}
-
-	.uni-list-item--first {
-		border-top-width: 0px;
-	}
-
-	.uni-list-item__content {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex: 1;
-		overflow: hidden;
-		flex-direction: column;
-		color: #3b4144;
-
-	}
-
-	.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__icon {
-		margin-right: 18rpx;
-		flex-direction: row;
-		justify-content: center;
-		align-items: center;
-		display: flex;
-	}
-
-	.uni-list-item__icon-img {
-		height: $uni-img-size-base;
-		width: $uni-img-size-base;
-	}
-	// 修改switch默认大小
-	.itemSwitch{
-		transform: translateX(16rpx) scale(.84);
-	}
-	.uni-list-item__slot{
-		color: #909399;
-		font-size: 28rpx;
-	}
-</style>

+ 0 - 68
components/uni-list/uni-list.vue

@@ -1,68 +0,0 @@
-<template>
-	<!-- #ifndef APP-NVUE -->
-	<view class="uni-list">
-		<slot />
-	</view>
-	<!-- #endif -->
-	<!-- #ifdef APP-NVUE -->
-	<list class="uni-list" :enableBackToTop="enableBackToTop" loadmoreoffset="15" :scroll-y="scrollY" @loadmore="loadMore">
-		<slot />
-	</list>
-	<!-- #endif -->
-</template>
-
-<script>
-	export default {
-		name: 'UniList',
-		'mp-weixin': {
-			options: {
-				multipleSlots: false
-			}
-		},
-		props: {
-			enableBackToTop: {
-				type: [Boolean, String],
-				default: false
-			},
-			scrollY: {
-				type: [Boolean, String],
-				default: false
-			}
-		},
-		provide() {
-			return {
-				list: this
-			}
-		},
-		created() {
-			this.firstChildAppend = false
-		},
-		methods: {
-			loadMore(e) {
-				this.$emit("scrolltolower");
-			}
-		}
-	}
-</script>
-<style lang="scss" scoped>
-	.uni-list {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		background-color: $uni-bg-color;
-		position: relative;
-		flex-direction: column;
-		// border-bottom-color: $uni-border-color;
-		// border-bottom-style: solid;
-		// border-bottom-width: 1px;
-	}
-	/* #ifndef APP-NVUE */
-	.uni-list:before {
-		height: 0;
-	}
-	.uni-list:after {
-		height: 0;
-	}
-	/* #endif */
-
-</style>

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

@@ -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
components/uni-list/uni-refresh.wxs

@@ -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 - 194
components/uni-load-more/uni-load-more.vue

@@ -1,194 +0,0 @@
-<template>
-	<view class="uni-load-more">
-		<view class="uni-load-more__img" v-show="status === 'loading' && showIcon">
-			<view class="load1 load">
-				<view class="item" :style="{background:color}"></view>
-				<view class="item" :style="{background:color}"></view>
-				<view class="item" :style="{background:color}"></view>
-				<view class="item" :style="{background:color}"></view>
-			</view>
-			<view class="load2 load">
-				<view class="item" :style="{background:color}"></view>
-				<view class="item"  :style="{background:color}"></view>
-				<view class="item" :style="{background:color}"></view>
-				<view class="item" :style="{background:color}"></view>
-			</view>
-			<view class="load3 load">
-				<view class="item" :style="{background:color}"></view>
-				<view class="item" :style="{background:color}"></view>
-				<view class="item" :style="{background:color}"></view>
-				<view class="item" :style="{background:color}"></view>
-			</view>
-		</view>
-		<text class="uni-load-more__text" :style="{color:color}">{{status === 'more' ? contentText.contentdown : (status === 'loading' ? contentText.contentrefresh : contentText.contentnomore)}}</text>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: "uni-load-more",
-		props: {
-			status: {
-				//上拉的状态:more-loading前;loading-loading中;noMore-没有更多了
-				type: String,
-				default: 'more'
-			},
-			showIcon: {
-				type: Boolean,
-				default: true
-			},
-			color: {
-				type: String,
-				default: "#777777"
-			},
-			contentText: {
-				type: Object,
-				default () {
-					return {
-						contentdown: "上拉显示更多",
-						contentrefresh: "正在加载...",
-						contentnomore: "没有更多数据了"
-					};
-				}
-			}
-		},
-		data() {
-			return {}
-		}
-	}
-</script>
-
-<style>
-	@charset "UTF-8";
-
-	.uni-load-more {
-		display: flex;
-		flex-direction: row;
-		height: 80upx;
-		align-items: center;
-		justify-content: center
-	}
-
-	.uni-load-more__text {
-		font-size: 28upx;
-		color: #999
-	}
-
-	.uni-load-more__img {
-		height: 24px;
-		width: 24px;
-		margin-right: 10px
-	}
-
-	.uni-load-more__img>.load {
-		position: absolute
-	}
-
-	.uni-load-more__img>.load .item {
-		width: 6px;
-		height: 2px;
-		border-top-left-radius: 1px;
-		border-bottom-left-radius: 1px;
-		background: #999;
-		position: absolute;
-		opacity: .2;
-		transform-origin: 50%;
-		animation: load 1.56s ease infinite
-	}
-
-	.uni-load-more__img>.load .item:nth-child(1) {
-		transform: rotate(90deg);
-		top: 2px;
-		left: 9px
-	}
-
-	.uni-load-more__img>.load .item:nth-child(2) {
-		transform: rotate(180deg);
-		top: 11px;
-		right: 0
-	}
-
-	.uni-load-more__img>.load .item:nth-child(3) {
-		transform: rotate(270deg);
-		bottom: 2px;
-		left: 9px
-	}
-
-	.uni-load-more__img>.load .item:nth-child(4) {
-		top: 11px;
-		left: 0
-	}
-
-	.load1,
-	.load2,
-	.load3 {
-		height: 24px;
-		width: 24px
-	}
-
-	.load2 {
-		transform: rotate(30deg)
-	}
-
-	.load3 {
-		transform: rotate(60deg)
-	}
-
-	.load1 .item:nth-child(1) {
-		animation-delay: 0s
-	}
-
-	.load2 .item:nth-child(1) {
-		animation-delay: .13s
-	}
-
-	.load3 .item:nth-child(1) {
-		animation-delay: .26s
-	}
-
-	.load1 .item:nth-child(2) {
-		animation-delay: .39s
-	}
-
-	.load2 .item:nth-child(2) {
-		animation-delay: .52s
-	}
-
-	.load3 .item:nth-child(2) {
-		animation-delay: .65s
-	}
-
-	.load1 .item:nth-child(3) {
-		animation-delay: .78s
-	}
-
-	.load2 .item:nth-child(3) {
-		animation-delay: .91s
-	}
-
-	.load3 .item:nth-child(3) {
-		animation-delay: 1.04s
-	}
-
-	.load1 .item:nth-child(4) {
-		animation-delay: 1.17s
-	}
-
-	.load2 .item:nth-child(4) {
-		animation-delay: 1.3s
-	}
-
-	.load3 .item:nth-child(4) {
-		animation-delay: 1.43s
-	}
-
-	@-webkit-keyframes load {
-		0% {
-			opacity: 1
-		}
-
-		100% {
-			opacity: .2
-		}
-	}
-</style>

+ 0 - 396
components/uni-notice-bar/uni-notice-bar.vue

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

+ 0 - 263
components/uni-popup/uni-popup-ori.vue

@@ -1,263 +0,0 @@
-<template>
-	<view v-if="showPopup" class="uni-popup" @touchmove.stop.prevent="clear">
-		<uni-transition :mode-class="['fade']" :styles="maskClass" :duration="duration" :show="showTrans" @click="onTap" />
-		<uni-transition :mode-class="ani" :styles="transClass" :duration="duration" :show="showTrans" @click="onTap">
-			<view class="uni-popup__wrapper-box" @click.stop="clear">
-				<slot />
-			</view>
-		</uni-transition>
-	</view>
-</template>
-
-<script>
-	import uniTransition from '../uni-transition/uni-transition.vue'
-
-	/**
-	 * PopUp 弹出层
-	 * @description 弹出层组件,为了解决遮罩弹层的问题
-	 * @tutorial https://ext.dcloud.net.cn/plugin?id=329
-	 * @property {String} type = [top|center|bottom] 弹出方式
-	 * 	@value top 顶部弹出
-	 * 	@value center 中间弹出
-	 * 	@value bottom 底部弹出
-	 * @property {Boolean} animation = [ture|false] 是否开启动画
-	 * @property {Boolean} maskClick = [ture|false] 蒙版点击是否关闭弹窗
-	 * @event {Function} change 打开关闭弹窗触发,e={show: false}
-	 */
-
-	export default {
-		name: 'UniPopup',
-		components: {
-			uniTransition
-		},
-		props: {
-			// 开启动画
-			animation: {
-				type: Boolean,
-				default: true
-			},
-			// 弹出层类型,可选值,top: 顶部弹出层;bottom:底部弹出层;center:全屏弹出层
-			type: {
-				type: String,
-				default: 'center'
-			},
-			// maskClick
-			maskClick: {
-				type: Boolean,
-				default: true
-			}
-		},
-		data() {
-			return {
-				duration: 300,
-				ani: [],
-				showPopup: false,
-				showTrans: false,
-				maskClass: {
-					'position': 'fixed',
-					'bottom': 0,
-					'top': 0,
-					'left': 0,
-					'right': 0,
-					'backgroundColor': 'rgba(0, 0, 0, 0.4)'
-				},
-				transClass: {
-					'position': 'fixed',
-					'left': 0,
-					'right': 0,
-				}
-			}
-		},
-		watch: {
-			type: {
-				handler: function(newVal) {
-					switch (this.type) {
-						case 'top':
-							this.ani = ['slide-top']
-							this.transClass = {
-								'position': 'fixed',
-								'left': 0,
-								'right': 0,
-							}
-							break
-						case 'bottom':
-							this.ani = ['slide-bottom']
-							this.transClass = {
-								'position': 'fixed',
-								'left': 0,
-								'right': 0,
-								'bottom': 0
-							}
-							break
-						case 'center':
-							this.ani = ['zoom-out', 'fade']
-							this.transClass = {
-								'position': 'fixed',
-								/* #ifndef APP-NVUE */
-								'display': 'flex',
-								'flexDirection': 'column',
-								/* #endif */
-								'bottom': 0,
-								'left': 0,
-								'right': 0,
-								'top': 0,
-								'justifyContent': 'center',
-								'alignItems': 'center'
-							}
-
-							break
-					}
-				},
-				immediate: true
-			}
-		},
-		created() {
-			if (this.animation) {
-				this.duration = 300
-			} else {
-				this.duration = 0
-			}
-		},
-		methods: {
-			clear(e) {
-				// TODO nvue 取消冒泡
-				e.stopPropagation()
-			},
-			open() {
-				this.showPopup = true
-				this.$nextTick(() => {
-					clearTimeout(this.timer)
-					this.timer = setTimeout(() => {
-						this.showTrans = true
-					}, 50);
-				})
-				this.$emit('change', {
-					show: true
-				})
-			},
-			close(type) {
-				this.showTrans = false
-				this.$nextTick(() => {
-					clearTimeout(this.timer)
-					this.timer = setTimeout(() => {
-						this.$emit('change', {
-							show: false
-						})
-						this.showPopup = false
-					}, 300)
-				})
-			},
-			onTap() {
-				if (!this.maskClick) return
-				this.close()
-			}
-		}
-	}
-</script>
-<style lang="scss" scoped>
-	.uni-popup {
-		position: fixed;
-		/* #ifdef H5 */
-		top: var(--window-top);
-		/* #endif */
-		/* #ifndef H5 */
-		top: 0;
-		/* #endif */
-		bottom: 0;
-		left: 0;
-		right: 0;
-		/* #ifndef APP-NVUE */
-		z-index: 99;
-		/* #endif */
-	}
-
-	.uni-popup__mask {
-		position: absolute;
-		top: 0;
-		bottom: 0;
-		left: 0;
-		right: 0;
-		background-color: $uni-bg-color-mask;
-		opacity: 0;
-	}
-
-	.mask-ani {
-		transition-property: opacity;
-		transition-duration: 0.2s;
-	}
-
-	.uni-top-mask {
-		opacity: 1;
-	}
-
-	.uni-bottom-mask {
-		opacity: 1;
-	}
-
-	.uni-center-mask {
-		opacity: 1;
-	}
-
-	.uni-popup__wrapper {
-		/* #ifndef APP-NVUE */
-		display: block;
-		/* #endif */
-		position: absolute;
-	}
-
-	.top {
-		top: 0;
-		left: 0;
-		right: 0;
-		transform: translateY(-500px);
-	}
-
-	.bottom {
-		bottom: 0;
-		left: 0;
-		right: 0;
-		transform: translateY(500px);
-	}
-
-	.center {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		flex-direction: column;
-		/* #endif */
-		bottom: 0;
-		left: 0;
-		right: 0;
-		top: 0;
-		justify-content: center;
-		align-items: center;
-		transform: scale(1.2);
-		opacity: 0;
-	}
-
-	.uni-popup__wrapper-box {
-		/* #ifndef APP-NVUE */
-		display: block;
-		/* #endif */
-		position: relative;
-	}
-
-	.content-ani {
-		// transition: transform 0.3s;
-		transition-property: transform, opacity;
-		transition-duration: 0.2s;
-	}
-
-
-	.uni-top-content {
-		transform: translateY(0);
-	}
-
-	.uni-bottom-content {
-		transform: translateY(0);
-	}
-
-	.uni-center-content {
-		transform: scale(1);
-		opacity: 1;
-	}
-</style>

+ 0 - 282
components/uni-popup/uni-popup-share.vue

@@ -1,282 +0,0 @@
-<template>
-	<view>
-		<uni-popup-ori ref="showshare" type="bottom">
-			<view class="uni-share">
-				<text class="uni-share-title">分享到</text>
-				<view class="uni-share-content">
-					<view v-for="(item, index) in bottomData" :key="index" class="uni-share-content-box" @click="shareTo(item.name)">
-						<view class="uni-share-content-image"><image :src="item.icon" class="content-image" mode="widthFix" /></view>
-						<text class="uni-share-content-text">{{ item.text }}</text>
-					</view>
-				</view>
-				<text class="uni-share-btn" @click="cancel()">取消分享</text>
-			</view>
-		</uni-popup-ori>
-		<uni-popup-ori ref="showPast" type="center" class="popupPast">
-			<view class="backPop">
-				<view class="popPast">
-					<view class="popTitle">口令已复制</view>
-					<view class="popContent">
-						<view>{{ describe }}</view>
-					</view>
-					<view class="popBtn" @click="goWhere(1)" v-if="popType == 'wx'">
-						<!-- <image src="../../static/spend/wxin.png" mode="widthFix"></image> -->
-						<view>去微信粘贴给好友</view>
-					</view>
-					<view class="popBtn" @click="goWhere(2)" v-if="popType == 'timeline'">
-						<!-- <image src="../../static/spend/wechat.png" mode="widthFix"></image> -->
-						<view>粘贴到朋友圈</view>
-					</view>
-				</view>
-				<icon type="cancel" size="26" color="white" style="margin-top: 40rpx;" @click="cancelPo" />
-			</view>
-		</uni-popup-ori>
-	</view>
-</template>
-
-<script>
-import uniPopupOri from '@/components/uni-popup/uni-popup-ori.vue';
-import { mapState, mapMutations } from 'vuex';
-import { getActionPage } from '@/utils/loginUtils.js';
-export default {
-	name: 'SharePopup',
-	components: {
-		uniPopupOri
-	},
-	props: ['opt', 'type','option'],
-	data() {
-		return {
-			describe: '',
-			shareoption: '',
-			bottomData: [
-				{
-					text: '微信',
-					icon: '../../static/spend/wxin.png',
-					name: 'wx'
-				},
-				{
-					text: '朋友圈',
-					icon: '../../static/spend/wechat.png',
-					name: 'timeline'
-				}
-			],
-			popType: '',
-			uid: ''
-		};
-	},
-	computed: {
-		...mapState(['userInfo', 'baseURL'])
-	},
-	mounted() {},
-	methods: {
-		loadData() {
-			try {
-				let prePage = getActionPage();
-				var path = prePage.route;
-				this.uid = this.userInfo.uid;
-				//获取object转化成
-				var parm = '';
-				var i = 0;
-				var option = this.option; //其他页面传值
-				console.log(option,'option')
-				if(this.type == 4){
-					parm = parm + '?' + 'promo_code=' + option;
-				}else{
-					for (let item in option) {
-						//拼接参数
-						if (i == 0) {
-							parm = '?' + item + '=' + option[item];
-						} else {
-							parm = parm + '&' + item + '=' + option[item];
-						}
-						i++;
-					}
-				}
-				if(this.type == 4){
-					var url = 'pages/index/index' + parm;
-				}else{
-					var url = path + parm;
-				}
-				console.log(path,'path')
-				console.log(parm,'parm')
-				//用后台加密
-				//第一个参数是判断是不是我们的链接
-				//第二个参数是访问地址
-				//第三个参数是,类型,type:0商品,type=1拼团,type=2邀请注册,type=3邀请好友参团,type=4邀请好友助力
-				//第四个参数是share的id
-				console.log(option,'option')
-				if(this.type == 4){
-					this.describe = this.baseURL + '@' + url + '@' + this.type + '@' + this.uid + '@复制这段话进入美美赚,自动打开页面';
-				}else{
-					this.describe = this.baseURL + '@' + url + '@' + this.type + '@' + this.uid + '@复制这段话进入美美赚,自动打开页面';
-				}
-				console.log(this.describe);
-				let obj = this;
-				// #ifndef H5
-				uni.setClipboardData({
-					data: this.describe,
-					  success: function () {
-					        uni.hideToast();
-					    }
-				});
-				// #endif
-			} catch (e) {
-				console.log(e);
-				//TODO handle the exception
-			}
-		},
-		goWhere(type) {
-			this.$api.msg('复制成功');
-		},
-		cancelPo() {
-			this.$nextTick(() => {
-				this.$refs['showPast'].close();
-			});
-		},
-		shareTo(name) {
-			this.popType = name;
-			this.$nextTick(() => {
-				this.$refs.showPast.open();
-				this.$refs['showshare'].close();
-			});
-		},
-		cancel() {
-			this.$nextTick(() => {
-				this.$refs['showshare'].close();
-			});
-		},
-		open() {
-			this.$nextTick(() => {
-				this.$refs['showshare'].open();
-			});
-		}
-	}
-};
-</script>
-<style lang="scss" scoped>
-.backPop {
-	padding: 0rpx 25rpx;
-	display: flex;
-	flex-direction: column;
-	justify-content: center;
-	align-items: center;
-}
-.popupPast {
-	display: flex;
-	flex-direction: column;
-	justify-content: center;
-	align-items: center;
-	text-align: center;
-}
-.popPast {
-	display: flex;
-	flex-direction: column;
-	justify-content: center;
-	padding: 40rpx 30rpx;
-	width: 90%;
-	background-color: white;
-	border-radius: 18rpx;
-	align-items: center;
-	.popTitle {
-		color: #2f2f2f;
-		font-size: 32rpx;
-		font-weight: bold;
-		margin-bottom: 40rpx;
-	}
-	.popContent {
-		background-color: #f4f4f4;
-		padding: 30rpx 24rpx;
-		border-radius: 16rpx;
-		view {
-			font-size: 24rpx;
-			color: #939393;
-		}
-		margin-bottom: 40rpx;
-	}
-	.popBtn {
-		display: flex;
-		align-items: center;
-		padding: 20rpx 40rpx;
-		background-color: #04be02;
-		border-radius: 60rpx;
-		image {
-			width: 36rpx;
-		}
-		view {
-			color: white;
-			font-size: 36rpx;
-			margin-left: 10rpx;
-		}
-	}
-}
-/* 底部分享 */
-.uni-share {
-	/* #ifndef APP-NVUE */
-	display: flex;
-	flex-direction: column;
-	/* #endif */
-	background-color: #fff;
-}
-
-.uni-share-title {
-	line-height: 60rpx;
-	font-size: 24rpx;
-	padding: 15rpx 0;
-	text-align: center;
-}
-
-.uni-share-content {
-	/* #ifndef APP-NVUE */
-	display: flex;
-	/* #endif */
-	flex-direction: row;
-	flex-wrap: wrap;
-	justify-content: center;
-	padding: 15px;
-}
-
-.uni-share-content-box {
-	/* #ifndef APP-NVUE */
-	display: flex;
-	/* #endif */
-	flex-direction: column;
-	align-items: center;
-	width: 200rpx;
-}
-
-.uni-share-content-image {
-	/* #ifndef APP-NVUE */
-	display: flex;
-	/* #endif */
-	flex-direction: row;
-	justify-content: center;
-	align-items: center;
-	width: 60rpx;
-	height: 60rpx;
-	overflow: hidden;
-	border-radius: 10rpx;
-}
-
-.content-image {
-	width: 60rpx;
-	height: 60rpx;
-}
-
-.uni-share-content-text {
-	font-size: 26rpx;
-	color: #333;
-	padding-top: 5px;
-	padding-bottom: 10px;
-}
-
-.uni-share-btn {
-	height: 90rpx;
-	line-height: 90rpx;
-	font-size: 14px;
-	border-top-color: #f5f5f5;
-	border-top-width: 1px;
-	border-top-style: solid;
-	text-align: center;
-	color: #666;
-}
-</style>

+ 0 - 263
components/uni-popup/uni-popup.vue

@@ -1,263 +0,0 @@
-<template>
-	<view v-if="showPopup" class="uni-popup" @touchmove.stop.prevent="clear">
-		<uni-transition :mode-class="['fade']" :styles="maskClass" :duration="duration" :show="showTrans" @click="onTap" />
-		<uni-transition :mode-class="ani" :styles="transClass" :duration="duration" :show="showTrans" @click="onTap">
-			<view class="uni-popup__wrapper-box" @click.stop="clear">
-				<slot />
-			</view>
-		</uni-transition>
-	</view>
-</template>
-
-<script>
-	import uniTransition from '../uni-transition/uni-transition.vue'
-
-	/**
-	 * PopUp 弹出层
-	 * @description 弹出层组件,为了解决遮罩弹层的问题
-	 * @tutorial https://ext.dcloud.net.cn/plugin?id=329
-	 * @property {String} type = [top|center|bottom] 弹出方式
-	 * 	@value top 顶部弹出
-	 * 	@value center 中间弹出
-	 * 	@value bottom 底部弹出
-	 * @property {Boolean} animation = [ture|false] 是否开启动画
-	 * @property {Boolean} maskClick = [ture|false] 蒙版点击是否关闭弹窗
-	 * @event {Function} change 打开关闭弹窗触发,e={show: false}
-	 */
-
-	export default {
-		name: 'UniPopup',
-		components: {
-			uniTransition
-		},
-		props: {
-			// 开启动画
-			animation: {
-				type: Boolean,
-				default: true
-			},
-			// 弹出层类型,可选值,top: 顶部弹出层;bottom:底部弹出层;center:全屏弹出层
-			type: {
-				type: String,
-				default: 'center'
-			},
-			// maskClick
-			maskClick: {
-				type: Boolean,
-				default: true
-			}
-		},
-		data() {
-			return {
-				duration: 300,
-				ani: [],
-				showPopup: false,
-				showTrans: false,
-				maskClass: {
-					'position': 'fixed',
-					'bottom': 0,
-					'top': 0,
-					'left': 0,
-					'right': 0,
-					'backgroundColor': 'rgba(0, 0, 0, 0.4)'
-				},
-				transClass: {
-					'position': 'fixed',
-					'left': 0,
-					'right': 0,
-				}
-			}
-		},
-		watch: {
-			type: {
-				handler: function(newVal) {
-					switch (this.type) {
-						case 'top':
-							this.ani = ['slide-top']
-							this.transClass = {
-								'position': 'fixed',
-								'left': 0,
-								'right': 0,
-							}
-							break
-						case 'bottom':
-							this.ani = ['slide-bottom']
-							this.transClass = {
-								'position': 'fixed',
-								'left': 0,
-								'right': 0,
-								'bottom': 0
-							}
-							break
-						case 'center':
-							this.ani = ['zoom-out', 'fade']
-							this.transClass = {
-								'position': 'fixed',
-								/* #ifndef APP-NVUE */
-								'display': 'flex',
-								'flexDirection': 'column',
-								/* #endif */
-								'bottom': 0,
-								'left': 0,
-								'right': 0,
-								'top': 0,
-								'justifyContent': 'center',
-								'alignItems': 'center'
-							}
-
-							break
-					}
-				},
-				immediate: true
-			}
-		},
-		created() {
-			if (this.animation) {
-				this.duration = 300
-			} else {
-				this.duration = 0
-			}
-		},
-		methods: {
-			clear(e) {
-				// TODO nvue 取消冒泡
-				e.stopPropagation()
-			},
-			open() {
-				this.showPopup = true
-				this.$nextTick(() => {
-					clearTimeout(this.timer)
-					this.timer = setTimeout(() => {
-						this.showTrans = true
-					}, 50);
-				})
-				this.$emit('change', {
-					show: true
-				})
-			},
-			close(type) {
-				this.showTrans = false
-				this.$nextTick(() => {
-					clearTimeout(this.timer)
-					this.timer = setTimeout(() => {
-						this.$emit('change', {
-							show: false
-						})
-						this.showPopup = false
-					}, 300)
-				})
-			},
-			onTap() {
-				if (!this.maskClick) return
-				this.close()
-			}
-		}
-	}
-</script>
-<style lang="scss" scoped>
-	.uni-popup {
-		position: fixed;
-		/* #ifdef H5 */
-		top: var(--window-top);
-		/* #endif */
-		/* #ifndef H5 */
-		top: 0;
-		/* #endif */
-		bottom: 0;
-		left: 0;
-		right: 0;
-		/* #ifndef APP-NVUE */
-		z-index: 99;
-		/* #endif */
-	}
-
-	.uni-popup__mask {
-		position: absolute;
-		top: 0;
-		bottom: 0;
-		left: 0;
-		right: 0;
-		background-color: $uni-bg-color-mask;
-		opacity: 0;
-	}
-
-	.mask-ani {
-		transition-property: opacity;
-		transition-duration: 0.2s;
-	}
-
-	.uni-top-mask {
-		opacity: 1;
-	}
-
-	.uni-bottom-mask {
-		opacity: 1;
-	}
-
-	.uni-center-mask {
-		opacity: 1;
-	}
-
-	.uni-popup__wrapper {
-		/* #ifndef APP-NVUE */
-		display: block;
-		/* #endif */
-		position: absolute;
-	}
-
-	.top {
-		top: 0;
-		left: 0;
-		right: 0;
-		transform: translateY(-500px);
-	}
-
-	.bottom {
-		bottom: 0;
-		left: 0;
-		right: 0;
-		transform: translateY(500px);
-	}
-
-	.center {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		flex-direction: column;
-		/* #endif */
-		bottom: 0;
-		left: 0;
-		right: 0;
-		top: 0;
-		justify-content: center;
-		align-items: center;
-		transform: scale(1.2);
-		opacity: 0;
-	}
-
-	.uni-popup__wrapper-box {
-		/* #ifndef APP-NVUE */
-		display: block;
-		/* #endif */
-		position: relative;
-	}
-
-	.content-ani {
-		// transition: transform 0.3s;
-		transition-property: transform, opacity;
-		transition-duration: 0.2s;
-	}
-
-
-	.uni-top-content {
-		transform: translateY(0);
-	}
-
-	.uni-bottom-content {
-		transform: translateY(0);
-	}
-
-	.uni-center-content {
-		transform: scale(1);
-		opacity: 1;
-	}
-</style>

+ 0 - 141
components/uni-rate/uni-rate.vue

@@ -1,141 +0,0 @@
-<template>
-	<view class="uni-rate">
-		<view :key="index" :style="{ marginLeft: margin + 'px' }" @click="_onClick(index)" class="uni-rate__icon" v-for="(star, index) in stars">
-			<uni-icons :color="color" :size="size" :type="isFill ? 'star-filled' : 'star'" />
-			<!-- #ifdef APP-NVUE -->
-			<view :style="{ width: star.activeWitch.replace('%','')*size/100+'px'}" class="uni-rate__icon-on">
-				<uni-icons style="text-align: left;" :color="activeColor" :size="size" type="star-filled" />
-			</view>
-			<!-- #endif -->
-			<!-- #ifndef APP-NVUE -->
-			<view :style="{ width: star.activeWitch,top:-size/2+'px' }" class="uni-rate__icon-on">
-				<uni-icons :color="activeColor" :size="size" type="star-filled" />
-			</view>
-			<!-- #endif -->
-		</view>
-	</view>
-</template>
-
-<script>
-	import uniIcons from "../uni-icons/uni-icons.vue";
-	export default {
-		name: "UniRate",
-		components: {
-			uniIcons
-		},
-		props: {
-			isFill: {
-				// 星星的类型,是否镂空
-				type: [Boolean, String],
-				default: true
-			},
-			color: {
-				// 星星的颜色
-				type: String,
-				default: "#ececec"
-			},
-			activeColor: {
-				// 星星选中状态颜色
-				type: String,
-				default: "#ffca3e"
-			},
-			size: {
-				// 星星的大小
-				type: [Number, String],
-				default: 24
-			},
-			value: {
-				// 当前评分
-				type: [Number, String],
-				default: 0
-			},
-			max: {
-				// 最大评分
-				type: [Number, String],
-				default: 5
-			},
-			margin: {
-				// 星星的间距
-				type: [Number, String],
-				default: 0
-			},
-			disabled: {
-				// 是否可点击
-				type: [Boolean, String],
-				default: false
-			}
-		},
-		data() {
-			return {
-				valueSync: ""
-			};
-		},
-		computed: {
-			stars() {
-				const value = this.valueSync ? this.valueSync : 0;
-				const starList = [];
-				const floorValue = Math.floor(value);
-				const ceilValue = Math.ceil(value);
-				// console.log("ceilValue: " + ceilValue);
-				// console.log("floorValue: " + floorValue);
-				for (let i = 0; i < this.max; i++) {
-					if (floorValue > i) {
-						starList.push({
-							activeWitch: "100%"
-						});
-					} else if (ceilValue - 1 === i) {
-						starList.push({
-							activeWitch: (value - floorValue) * 100 + "%"
-						});
-					} else {
-						starList.push({
-							activeWitch: "0"
-						});
-					}
-				}
-				console.log("starList[4]: " + starList[4].activeWitch);
-				return starList;
-			}
-		},
-		created() {
-			this.valueSync = Number(this.value);
-		},
-		methods: {
-			_onClick(index) {
-				if (this.disabled) {
-					return;
-				}
-				this.valueSync = index + 1;
-				this.$emit("change", {
-					value: this.valueSync
-				});
-			}
-		}
-	};
-</script>
-
-<style lang="scss" scoped>
-	.uni-rate {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		line-height: 0;
-		font-size: 0;
-		flex-direction: row;
-	}
-
-	.uni-rate__icon {
-		position: relative;
-		line-height: 0;
-		font-size: 0;
-	}
-
-	.uni-rate__icon-on {
-		overflow: hidden;
-		position: absolute;
-		top: 0;
-		left: 0;
-		line-height: 1;
-		text-align: left;
-	}
-</style>

+ 0 - 244
components/uni-steps/uni-steps.vue

@@ -1,244 +0,0 @@
-<template>
-	<view class="uni-steps">
-		<view :class="[direction==='column'?'uni-steps__column':'uni-steps__row']">
-			<view :class="[direction==='column'?'uni-steps__column-text-container':'uni-steps__row-text-container']">
-				<view v-for="(item,index) in options" :key="index" :class="[direction==='column'?'uni-steps__column-text':'uni-steps__row-text']">
-					<text :style="{color:index<=active?activeColor:deactiveColor}" :class="[direction==='column'?'uni-steps__column-title':'uni-steps__row-title']">{{item.status}}</text>
-					<text :style="{color:index<=active?activeColor:deactiveColor}" :class="[direction==='column'?'uni-steps__column-desc':'uni-steps__row-desc']">{{item.context}}</text>
-					<text :style="{color:index<=active?activeColor:deactiveColor}" :class="[direction==='column'?'uni-steps__column-desc':'uni-steps__row-desc']">{{item.time}}</text>
-				</view>
-			</view>
-			<view :class="[direction==='column'?'uni-steps__column-container':'uni-steps__row-container']">
-				<view :class="[direction==='column'?'uni-steps__column-line-item':'uni-steps__row-line-item']" v-for="(item,index) in options"
-				 :key="index">
-					<view :class="[direction==='column'?'uni-steps__column-line':'uni-steps__row-line',direction==='column'?'uni-steps__column-line--before':'uni-steps__row-line--before']"
-					 :style="{backgroundColor:index<=active&&index!==0?activeColor:index===0?'transparent':deactiveColor}"></view>
-					<view :class="[direction==='column'?'uni-steps__column-check':'uni-steps__row-check']" v-if="index === active">
-						<uni-icons :color="activeColor" type="checkbox-filled" size="14"></uni-icons>
-					</view>
-					<view :class="[direction==='column'?'uni-steps__column-circle':'uni-steps__row-circle']" v-else :style="{backgroundColor:index<active?activeColor:deactiveColor}"></view>
-					<view :class="[direction==='column'?'uni-steps__column-line':'uni-steps__row-line',direction==='column'?'uni-steps__column-line--after':'uni-steps__row-line--after']"
-					 :style="{backgroundColor:index<active&&index!==options.length-1?activeColor:index===options.length-1?'transparent':deactiveColor}"></view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import uniIcons from '../uni-icons/uni-icons.vue'
-	export default {
-		name: 'UniSteps',
-		components: {
-			uniIcons
-		},
-		props: {
-			direction: {
-				// 排列方向 row column
-				type: String,
-				default: 'row'
-			},
-			activeColor: {
-				// 激活状态颜色
-				type: String,
-				default: '#1aad19'
-			},
-			deactiveColor: {
-				// 未激活状态颜色
-				type: String,
-				default: '#999999'
-			},
-			active: {
-				// 当前步骤
-				type: Number,
-				default: 0
-			},
-			options: {
-				type: Array,
-				default () {
-					return []
-				}
-			} // 数据
-		},
-		data() {
-			return {}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.uni-steps {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		width: 100%;
-		/* #endif */
-		/* #ifdef APP-NVUE */
-		flex: 1;
-		/* #endif */
-		flex-direction: column;
-	}
-
-	.uni-steps__row {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: column;
-	}
-
-	.uni-steps__column {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row-reverse;
-	}
-
-	.uni-steps__row-text-container {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-	}
-
-	.uni-steps__column-text-container {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: column;
-		flex: 1;
-	}
-
-	.uni-steps__row-text {
-		/* #ifndef APP-NVUE */
-		display: inline-flex;
-		/* #endif */
-		flex: 1;
-		flex-direction: column;
-	}
-
-	.uni-steps__column-text {
-		padding: 6px 0px;
-		border-bottom-style: solid;
-		border-bottom-width: 1px;
-		border-bottom-color: $uni-border-color;
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: column;
-	}
-
-	.uni-steps__row-title {
-		font-size: $uni-font-size-base;
-		line-height: 16px;
-		text-align: center;
-	}
-
-	.uni-steps__column-title {
-		font-size: $uni-font-size-base;
-		text-align: left;
-		line-height: 18px;
-	}
-
-	.uni-steps__row-desc {
-		font-size: 12px;
-		line-height: 14px;
-		text-align: center;
-	}
-
-	.uni-steps__column-desc {
-		font-size: $uni-font-size-sm;
-		text-align: left;
-		line-height: 18px;
-	}
-
-	.uni-steps__row-container {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-	}
-
-	.uni-steps__column-container {
-		/* #ifndef APP-NVUE */
-		display: inline-flex;
-		/* #endif */
-		width: 30px;
-		flex-direction: column;
-	}
-
-	.uni-steps__row-line-item {
-		/* #ifndef APP-NVUE */
-		display: inline-flex;
-		/* #endif */
-		flex-direction: row;
-		flex: 1;
-		height: 14px;
-		line-height: 14px;
-		align-items: center;
-		justify-content: center;
-	}
-
-	.uni-steps__column-line-item {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: column;
-		flex: 1;
-		align-items: center;
-		justify-content: center;
-	}
-
-	.uni-steps__row-line {
-		flex: 1;
-		height: 1px;
-		background-color: $uni-text-color-grey;
-	}
-
-	.uni-steps__column-line {
-		width: 1px;
-		background-color: $uni-text-color-grey;
-	}
-
-	.uni-steps__row-line--after {
-		transform: translateX(1px);
-	}
-
-	.uni-steps__column-line--after {
-		flex: 1;
-		transform: translate(0px, 1px);
-	}
-
-	.uni-steps__row-line--before {
-		transform: translateX(-1px);
-	}
-
-	.uni-steps__column-line--before {
-		height: 6px;
-		transform: translate(0px, -1px);
-	}
-
-	.uni-steps__row-circle {
-		width: 5px;
-		height: 5px;
-		border-radius: 100px;
-		background-color: $uni-text-color-grey;
-		margin: 0px 3px;
-	}
-
-	.uni-steps__column-circle {
-		width: 5px;
-		height: 5px;
-		border-radius: 100px;
-		background-color: $uni-text-color-grey;
-		margin: 4px 0px 5px 0px;
-	}
-
-	.uni-steps__row-check {
-		margin: 0px 6px;
-	}
-
-	.uni-steps__column-check {
-		height: 14px;
-		line-height: 14px;
-		margin: 2px 0px;
-	}
-</style>

+ 0 - 279
components/uni-transition/uni-transition.vue

@@ -1,279 +0,0 @@
-<template>
-	<view v-if="isShow" ref="ani" class="uni-transition" :class="[ani.in]" :style="'transform:' +transform+';'+stylesObject"
-	 @click="change">
-		 <slot></slot>
-	</view>
-</template>
-
-<script>
-	// #ifdef APP-NVUE
-	const animation = uni.requireNativePlugin('animation');
-	// #endif
-	/**
-	 * Transition 过渡动画
-	 * @description 简单过渡动画组件
-	 * @tutorial https://ext.dcloud.net.cn/plugin?id=985
-	 * @property {Boolean} show = [false|true] 控制组件显示或隐藏
-     * @property {Array} modeClass = [fade|slide-top|slide-right|slide-bottom|slide-left|zoom-in|zoom-out] 过渡动画类型
-     *  @value fade 渐隐渐出过渡
-     *  @value slide-top 由上至下过渡
-     *  @value slide-right 由右至左过渡
-     *  @value slide-bottom 由下至上过渡
-     *  @value slide-left 由左至右过渡
-     *  @value zoom-in 由小到大过渡
-     *  @value zoom-out 由大到小过渡
-	 * @property {Number} duration 过渡动画持续时间
-	 * @property {Object} styles 组件样式,同 css 样式,注意带’-‘连接符的属性需要使用小驼峰写法如:`backgroundColor:red`
-	 */
-	export default {
-		name: 'uniTransition',
-		props: {
-			show: {
-				type: Boolean,
-				default: false
-			},
-			modeClass: {
-				type: Array,
-				default () {
-					return []
-				}
-			},
-			duration: {
-				type: Number,
-				default: 300
-			},
-			styles: {
-				type: Object,
-				default () {
-					return {}
-				}
-			}
-		},
-		data() {
-			return {
-				isShow: false,
-				transform: '',
-				ani: { in: '',
-					active: ''
-				}
-			};
-		},
-		watch: {
-			show: {
-				handler(newVal) {
-					if (newVal) {
-						this.open()
-					} else {
-						this.close()
-					}
-				},
-				immediate: true
-			}
-		},
-		computed: {
-			stylesObject() {
-				let styles = {
-					...this.styles,
-					'transition-duration': this.duration / 1000 + 's'
-				}
-				let transfrom = ''
-				for (let i in styles) {
-					let line = this.toLine(i)
-					transfrom += line + ':' + styles[i] + ';'
-				}
-				return transfrom
-			}
-		},
-		created() {
-			// this.timer = null
-			// this.nextTick = (time = 50) => new Promise(resolve => {
-			// 	clearTimeout(this.timer)
-			// 	this.timer = setTimeout(resolve, time)
-			// 	return this.timer
-			// });
-		},
-		methods: {
-			change() {
-				this.$emit('click', {
-					detail: this.isShow
-				})
-			},
-			open() {
-				clearTimeout(this.timer)
-				this.isShow = true
-				this.transform = ''
-				this.ani.in = ''
-				for (let i in this.getTranfrom(false)) {
-					if (i === 'opacity') {
-						this.ani.in = 'fade-in'
-					} else {
-						this.transform += `${this.getTranfrom(false)[i]} `
-					}
-				}
-				this.$nextTick(() => {
-					setTimeout(() => {
-						this._animation(true)
-					}, 50)
-				})
-
-			},
-			close(type) {
-				clearTimeout(this.timer)
-				this._animation(false)
-			},
-			_animation(type) {
-				let styles = this.getTranfrom(type)
-				// #ifdef APP-NVUE
-				if(!this.$refs['ani']) return
-				animation.transition(this.$refs['ani'].ref, {
-					styles,
-					duration: this.duration, //ms
-					timingFunction: 'ease',
-					needLayout: false,
-					delay: 0 //ms
-				}, () => {
-					if (!type) {
-						this.isShow = false
-					}
-					this.$emit('change', {
-						detail: this.isShow
-					})
-				})
-				// #endif
-				// #ifndef APP-NVUE
-				this.transform = ''
-				for (let i in styles) {
-					if (i === 'opacity') {
-						this.ani.in = `fade-${type?'out':'in'}`
-					} else {
-						this.transform += `${styles[i]} `
-					}
-				}
-				this.timer = setTimeout(() => {
-					if (!type) {
-						this.isShow = false
-					}
-					this.$emit('change', {
-						detail: this.isShow
-					})
-
-				}, this.duration)
-				// #endif
-
-			},
-			getTranfrom(type) {
-				let styles = {
-					transform: ''
-				}
-				this.modeClass.forEach((mode) => {
-					switch (mode) {
-						case 'fade':
-							styles.opacity = type ? 1 : 0
-							break;
-						case 'slide-top':
-							styles.transform += `translateY(${type?'0':'-100%'}) `
-							break;
-						case 'slide-right':
-							styles.transform += `translateX(${type?'0':'100%'}) `
-							break;
-						case 'slide-bottom':
-							styles.transform += `translateY(${type?'0':'100%'}) `
-							break;
-						case 'slide-left':
-							styles.transform += `translateX(${type?'0':'-100%'}) `
-							break;
-						case 'zoom-in':
-							styles.transform += `scale(${type?1:0.8}) `
-							break;
-						case 'zoom-out':
-							styles.transform += `scale(${type?1:1.2}) `
-							break;
-					}
-				})
-				return styles
-			},
-			_modeClassArr(type) {
-				let mode = this.modeClass
-				if (typeof(mode) !== "string") {
-					let modestr = ''
-					mode.forEach((item) => {
-						modestr += (item + '-' + type + ',')
-					})
-					return modestr.substr(0, modestr.length - 1)
-				} else {
-					return mode + '-' + type
-				}
-			},
-			// getEl(el) {
-			// 	console.log(el || el.ref || null);
-			// 	return el || el.ref || null
-			// },
-			toLine(name) {
-				return name.replace(/([A-Z])/g, "-$1").toLowerCase();
-			}
-		}
-	}
-</script>
-
-<style>
-	.uni-transition {
-		transition-timing-function: ease;
-		transition-duration: 0.3s;
-		transition-property: transform, opacity;
-	}
-
-	.fade-in {
-		opacity: 0;
-	}
-
-	.fade-active {
-		opacity: 1;
-	}
-
-	.slide-top-in {
-		/* transition-property: transform, opacity; */
-		transform: translateY(-100%);
-	}
-
-	.slide-top-active {
-		transform: translateY(0);
-		/* opacity: 1; */
-	}
-
-	.slide-right-in {
-		transform: translateX(100%);
-	}
-
-	.slide-right-active {
-		transform: translateX(0);
-	}
-
-	.slide-bottom-in {
-		transform: translateY(100%);
-	}
-
-	.slide-bottom-active {
-		transform: translateY(0);
-	}
-
-	.slide-left-in {
-		transform: translateX(-100%);
-	}
-
-	.slide-left-active {
-		transform: translateX(0);
-		opacity: 1;
-	}
-
-	.zoom-in-in {
-		transform: scale(0.8);
-	}
-
-	.zoom-out-active {
-		transform: scale(1);
-	}
-
-	.zoom-out-in {
-		transform: scale(1.2);
-	}
-</style>

+ 346 - 152
pages/index/entertainment - 副本.vue

@@ -1,137 +1,175 @@
 <template>
 	<view class="all">
-		<view class="padding-t-30"></view>
-		<view class="tab">
-			<view class="flex">
-				<view class="tab-item " @click="changeTab(item,ind)" :class="{action:actionIndex==ind}"
-					v-for="(item,ind) in gameList">
-					{{item.name}}
-				</view>
-			</view>
-			<l-echart class="top" ref="chart"></l-echart>
-		</view>
-
-		<view class="center flex">
-			<!-- 左 -->
-			<view class="le">
-				<view class="tit flex-start">
-					<view class="ti1">{{$t('enter.u1')}}</view>
-					<view class="ti2">({{$t('enter.u2')}})</view>
-				</view>
-				<view class="he">
-					<view class="numbox flex-start">
-						<view class="he1 flex" @click="gameMoneyValue=it" v-for="it in arMoneyList">
-							<view class="wen">{{it}}</view>
-						</view>
+		<template v-if="!upOnBtnData.show">
+			<view class="padding-t-30"></view>
+			<view class="tab">
+				<view class="flex">
+					<view class="tab-item " @click="changeTab(item,ind)" :class="{action:actionIndex==ind}"
+						v-for="(item,ind) in gameList">
+						{{item.name}}
 					</view>
 				</view>
-				<view class="yi flex-start">
-					<image class="img" src="../../static/icon/le.png" mode=""></image>
-					<view class="wz padding-l-10">{{history.base.token}}</view>
-					<view class="qx padding-l-10" v-if="history.next.id">{{history.next.no}}</view>
-				</view>
-				<view class="shu">
-					0.064489
-				</view>
+				<l-echart class="top" ref="chart"></l-echart>
 			</view>
-			<!--右 -->
-			<view class="ri">
-				<view class="ti flex-center">
-					<view class="t1">{{$t('enter.u3')}}</view>
-					<view class="t2 padding-l-10">{{history.base.timebar}}</view>
-				</view>
 
-				<view class="dh">
-					<input class="input" type="number" v-model="gameMoneyValue">
-				</view>
-				<view class="btn">
-					<view class="bt flex">
-						<view class="btnItem btnle">
-							<image class="imag" src="../../static/icon/xia.png" mode=""></image>
-							<text class="xia">{{$t('enter.u4')}}</text>
-						</view>
-						<view class="btnItem btnri">
-							<image class="imag" src="../../static/icon/shang.png" mode=""></image>
-							<text class="xia">{{$t('enter.u6')}}</text>
-						</view>
+			<view class="center flex">
+				<!-- 左 -->
+				<view class="le">
+					<view class="tit flex-start">
+						<view class="ti1">{{$t('enter.u1')}}</view>
+						<view class="ti2">({{$t('enter.u2')}})</view>
 					</view>
-					<view class="bt flex">
-						<view class="btnItem btnle">
-							<view class="xia">{{$t('enter.u5')}}</view>
-						</view>
-						<view class="btnItem btnri">
-							<view class="xia">{{$t('enter.u7')}}</view>
+					<view class="he">
+						<view class="numbox flex-start">
+							<view class="he1 flex" @click="gameMoneyValue=it" v-for="it in arMoneyList">
+								<view class="wen">{{it}}</view>
+							</view>
 						</view>
 					</view>
+					<view class="yi flex-start">
+						<image class="img" src="../../static/icon/le.png" mode=""></image>
+						<view class="wz padding-l-10">{{history.base.token}}</view>
+						<view class="qx padding-l-10" v-if="history.next.id">{{history.next.no}}</view>
+					</view>
+					<view class="shu">
+						0.064489
+					</view>
 				</view>
+				<!--右 -->
+				<view class="ri">
+					<view class="ti flex-center">
+						<view class="t1">{{$t('enter.u3')}}</view>
+						<view class="t2 padding-l-10">{{history.base.timebar}}</view>
+					</view>
 
-				<view class="db flex">
-					<view class="jl">{{$t('enter.u8')}}</view>
-					<view class="sj">
-						<text v-if="time.H<10">0</text>
-						{{time.H}}
+					<view class="dh">
+						<input class="input" type="number" v-model="gameMoneyValue">
 					</view>
-					<view class="sj">
-						<text v-if="time.M<10">0</text>
-						{{time.M}}
+					<view class="btn">
+						<view class="bt flex">
+							<view class="btnItem btnle" @click="onbet(2)">
+								<image class="imag" src="../../static/icon/xia.png" mode=""></image>
+								<text class="xia">{{$t('enter.u4')}}</text>
+							</view>
+							<view class="btnItem btnri" @click="onbet(1)">
+								<image class="imag" src="../../static/icon/shang.png" mode=""></image>
+								<text class="xia">{{$t('enter.u6')}}</text>
+							</view>
+						</view>
+						<view class="bt flex">
+							<view class="btnItem btnle" @click="onbet(3)">
+								<view class="xia">{{$t('enter.u5')}}</view>
+							</view>
+							<view class="btnItem btnri" @click="onbet(4)">
+								<view class="xia">{{$t('enter.u7')}}</view>
+							</view>
+						</view>
 					</view>
-					<view class="sj">
-						<text v-if="time.S<10">0</text>
-						{{time.S}}
+
+					<view class="db flex">
+						<view class="jl">{{$t('enter.u8')}}</view>
+						<view class="sj">
+							<text v-if="time.H<10">0</text>
+							{{time.H}}
+						</view>
+						<view class="sj">
+							<text v-if="time.M<10">0</text>
+							{{time.M}}
+						</view>
+						<view class="sj">
+							<text v-if="time.S<10">0</text>
+							{{time.S}}
+						</view>
 					</view>
 				</view>
 			</view>
-		</view>
-		<view class="kb"></view>
-
-		<view class="last">
-			<view class="flex">
-				<text>{{$t('enter.u9')}}</text>
-				<view class="flex" @click="nav">
-					<text>{{$t('enter.u10')}}</text>
-					<image class="lb" src="../../static/icon/jt.png" mode=""></image>
+			<view class="kb"></view>
+
+			<view class="last">
+				<view class="flex">
+					<text>{{$t('enter.u9')}}</text>
+					<view class="flex" @click="nav">
+						<text>{{$t('enter.u10')}}</text>
+						<image class="lb" src="../../static/icon/jt.png" mode=""></image>
+					</view>
 				</view>
 			</view>
-		</view>
-
-		<view class="bg">
-			<view class="biaotou flex">
-				<view class="biwe">{{$t('enter.u11')}}</view>
-				<view class="biwe">{{$t('enter.u12')}}</view>
-				<view class="biwe">{{$t('enter.u13')}}</view>
-				<view class="biwe">{{$t('enter.u14')}}</view>
-			</view>
-			<view class="list flex" v-for="(item,ind) in betList.list" :key="ind">
-				<view class="biwe flex-start">
-					<view class="tr">{{history.base.token}}</view>
-					<view class="nametip">{{history.base.timebar}}</view>
-					<image class="zz" src="../../static/icon/shang.png" mode=""></image>
+
+			<view class="bg">
+				<view class="biaotou flex">
+					<view class="biwe">{{$t('enter.u11')}}</view>
+					<view class="biwe">{{$t('enter.u12')}}</view>
+					<view class="biwe">{{$t('enter.u13')}}</view>
+					<view class="biwe">{{$t('enter.u14')}}</view>
 				</view>
-				<view class="biwe">23.5000</view>
-				<view class="biwe">23.5000</view>
-				<view class="biwe flex">
-					<view class="list-buttom success margin-r-10">
-						{{$t('enter.u17')}}
+				<view class="list flex" v-for="(item,ind) in betList.list" :key="ind">
+					<view class="biwe flex-start">
+						<view class="tr">{{history.base.token}}</view>
+						<view class="nametip">{{history.base.timebar}}</view>
+						<image class="zz" src="../../static/icon/shang.png" mode=""></image>
 					</view>
-					<view class="list-buttom primary">
-						{{$t('enter.u18')}}
+					<view class="biwe">23.5000</view>
+					<view class="biwe">23.5000</view>
+					<view class="biwe flex">
+						<view class="list-buttom success margin-r-10">
+							{{$t('enter.u17')}}
+						</view>
+						<view class="list-buttom primary">
+							{{$t('enter.u18')}}
+						</view>
 					</view>
 				</view>
 			</view>
-		</view>
 
 
-		<view class="chz flex">
-			<view>
-				<view class="yue padding-b-10">{{$t('enter.u15')}}</view>
-				<view class="yes">{{userWallet}}U</view>
+			<view class="chz flex">
+				<view>
+					<view class="yue padding-b-10">{{$t('enter.u15')}}</view>
+					<view class="yes">{{userWallet}}U</view>
+				</view>
+				<view class="flex-start" @click="navC">
+					<view class="quc">{{$t('enter.u16')}}</view>
+					<image class="choz" src="../../static/icon/jt.png" mode=""></image>
+				</view>
 			</view>
-			<view class="flex-start" @click="navC">
-				<view class="quc">{{$t('enter.u16')}}</view>
-				<image class="choz" src="../../static/icon/jt.png" mode=""></image>
+			<taber tab='entertainment'></taber>
+		</template>
+		<template v-if="upOnBtnData.show">
+			<view class="page">
+
+				<view>
+					<view class="pay-title">
+						<text v-show="AffirmStatus === 1">请输入6位支付密码</text>
+						<text v-show="AffirmStatus === 2">请设置6位支付密码</text>
+						<text v-show="AffirmStatus === 3">请确认6位支付密码</text>
+					</view>
+					<view class="pay-password" @click="onPayUp">
+						<view class="list">
+							<text v-show="passwordArr.length >= 1">●</text>
+						</view>
+						<view class="list">
+							<text v-show="passwordArr.length >= 2">●</text>
+						</view>
+						<view class="list">
+							<text v-show="passwordArr.length >= 3">●</text>
+						</view>
+						<view class="list">
+							<text v-show="passwordArr.length >= 4">●</text>
+						</view>
+						<view class="list">
+							<text v-show="passwordArr.length >= 5">●</text>
+						</view>
+						<view class="list">
+							<text v-show="passwordArr.length >= 6">●</text>
+						</view>
+					</view>
+					<view class="hint">
+						<text>忘记支付密码?</text>
+					</view>
+				</view>
+				<cc-defineKeyboard ref="CodeKeyboard" passwrdType="pay" @KeyInfo="KeyInfo"></cc-defineKeyboard>
 			</view>
-		</view>
-		<taber tab='entertainment'></taber>
+		</template>
 	</view>
 </template>
 
@@ -144,7 +182,8 @@
 		getGameList,
 		test,
 		gameWallet,
-		gameBetList
+		gameBetList,
+		gameBetIn
 	} from "@/api/game.js";
 	import {
 		qianBao,
@@ -199,7 +238,16 @@
 					page: 1,
 					limit: 10,
 				},
-				userWallet: 0
+				userWallet: 0,
+				upOnBtnData: {
+					show: false,
+					type: ''
+				},
+				AffirmStatus: 1,
+				passwordArr: [],
+				oldPasswordArr: [],
+				newPasswordArr: [],
+				afPasswordArr: [],
 			};
 		},
 		onLoad() {
@@ -222,20 +270,56 @@
 				})
 				return
 			}
-			gameWallet().then((res) => {
-				this.userWallet = res.data.back.USDT.money.money
-			})
-			if (this.history.next.id) {
-				this.opTiem();
-			} else {
-				this.gameInit();
-			}
+			this.getUserWallet();
+
 		},
 		// 关闭循环
 		onHide() {
 			clearInterval(this.time.t)
 		},
 		methods: {
+			onbet(type) {
+				this.upOnBtnData.type = type;
+				this.upOnBtnData.show = true;
+				this.$refs.CodeKeyboard.show();
+			},
+
+			KeyInfo(val) {
+				if (val.index >= 6) {
+					return;
+				}
+				// 判断是否输入的是删除键
+				if (val.keyCode === 8) {
+					// 删除最后一位
+					this.passwordArr.splice(val.index + 1, 1)
+				}
+				// 判断是否输入的是.
+				else if (val.keyCode == 190) {
+					// 输入.无效
+				} else {
+					this.passwordArr.push(val.key);
+				}
+
+				uni.showModal({
+					title: '温馨提示',
+					content: '输入密码是 = ' + JSON.stringify(this.passwordArr)
+				})
+			},
+			// 参与压住
+			gameBetIn(type) {
+
+			},
+			// 获取用户余额信息
+			getUserWallet() {
+				gameWallet().then((res) => {
+					this.userWallet = res.data.back.USDT.money.money
+				})
+				if (this.history.next.id) {
+					this.opTiem();
+				} else {
+					this.gameInit();
+				}
+			},
 			// 开始倒计时
 			async opTiem() {
 				const that = this;
@@ -250,7 +334,6 @@
 							that.time.S = Math.floor(timenum / 1000 % 60)
 							that.time.M = Math.floor(timenum / 1000 / 60 % 60);
 							if (that.time.H == 0 && that.time.M == 0 && that.time.S == 0) {
-								console.log('进入');
 								clearInterval(that.time.t);
 								setTimeout(() => {
 									test();
@@ -307,8 +390,7 @@
 					limit: 10,
 					id: this.history.base.id
 				}).then((res) => {
-					this.betList.list
-					console.log(res);
+					this.betList.list = res.data.bet_log;
 				})
 			},
 			// 获取游戏K线信息
@@ -316,18 +398,21 @@
 				const that = this;
 				gameKline({
 					page: 1,
-					limit: 30
+					limit: 60
 				}, that.history.base.id).then((res) => {
-					console.log(res, 'res');
 					let list = res.data.list.reverse();
 					// x轴记录
 					let xarr = [];
 					// 打点数据
 					let linearr = [];
 					for (let i = 0; i < list.length; i++) {
-						const ll = list[i]
-						xarr.push(ll.ts)
-						linearr.push([+ll.o, +ll.c, +ll.l, +ll.h])
+						const ll = list[i];
+						const time = new Date(+ll.ts);
+						const addar = [+(+ll.o).toFixed(5), +(+ll.c).toFixed(5), +(+ll.l).toFixed(5), +(+ll.h)
+							.toFixed(5)
+						];
+						xarr.push(`${time.getHours()}:${time.getMinutes()}`)
+						linearr.push(addar)
 					}
 					that.$nextTick(() => {
 						that.initKline({
@@ -367,20 +452,28 @@
 					for (var j = 0; j < dayCount; j++) {
 						sum += data.linearr[i - j][1];
 					}
-					result.push(+(sum / dayCount).toFixed(3));
+					result.push(+(sum / dayCount).toFixed(5));
 				}
 				return result;
 			},
 
 			async initKline(data) {
 				const that = this;
-				const chart = await this.$refs.chart.init(echarts);
 				try {
+					const chart = await this.$refs.chart.init(echarts);
 					const upColor = '#00da3c';
 					const downColor = '#ec0000';
 					chart.setOption(
 						(this.option = {
 							animation: false,
+							legend: {
+								top: 10,
+								left: 10,
+								data: ['MA5', 'MA10', 'MA20'],
+								textStyle: {
+									color: '#999999'
+								}
+							},
 							tooltip: {
 								trigger: 'axis',
 								axisPointer: {
@@ -396,22 +489,26 @@
 									const obj = {
 										top: 10
 									};
-									obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 30;
+									obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 40;
 
-									console.log(obj, 'obj');
 									return obj;
 								}
 							},
+							dataZoom: [{
+								type: 'inside',
+								xAxisIndex: 0,
+								start: 50,
+								end: 100
+							}],
 							grid: [{
-								left: 0,
-								right: 0,
-								height: '80%',
-								top: 30
+								left: 10,
+								right: 55,
+								bottom: 20,
+								top: 45
 							}],
 							xAxis: [{
 								type: 'category',
 								data: data.xarr,
-								boundaryGap: false,
 								axisLine: {
 									onZero: false
 								},
@@ -426,32 +523,65 @@
 							}],
 							yAxis: [{
 								scale: true,
-								splitNumber: 2,
+								splitNumber: 4,
+								position: 'right',
 								axisTick: {
 									show: false
 								},
-								splitLine:{
-									lineStyle:{
-										color:['#FFF']
+								splitLine: {
+									show: false,
+									lineStyle: {
+										color: '#e3e3e3'
 									}
 								},
 								axisLabel: {
-									inside: true,
+									inside: false,
 									formatter: '{value}\n',
-									color:"#FFFFFF"
+									color: '#999999'
 								}
-							} ],
+							}],
 							series: [{
-								name: that.history.base.token + '-USDT',
-								type: 'candlestick',
-								data: data.linearr,
-								itemStyle: {
-									color: upColor,
-									color0: downColor,
-									borderColor: undefined,
-									borderColor0: undefined
-								}
-							}]
+									name: that.history.base.token + '-USDT',
+									type: 'candlestick',
+									data: data.linearr,
+									itemStyle: {
+										color: upColor,
+										color0: downColor,
+										borderColor: undefined,
+										borderColor0: undefined
+									}
+								},
+								{
+									name: "MA5",
+									smooth: true,
+									type: 'line',
+									data: that.calculateMA(5, data),
+									showSymbol: false,
+									lineStyle: {
+										width: 1
+									}
+								},
+								{
+									name: "MA10",
+									smooth: true,
+									type: 'line',
+									data: that.calculateMA(10, data),
+									showSymbol: false,
+									lineStyle: {
+										width: 1
+									}
+								},
+								{
+									name: "MA20",
+									smooth: true,
+									type: 'line',
+									data: that.calculateMA(20, data),
+									showSymbol: false,
+									lineStyle: {
+										width: 1
+									}
+								},
+							]
 						}),
 						true
 					)
@@ -487,6 +617,70 @@
 		padding-bottom: 30rpx;
 	}
 
+	$base: orangered; // 基础颜色
+
+	.page {
+		position: absolute;
+		left: 0;
+		top: 0;
+		width: 100%;
+		height: 100%;
+		background-color: #FFFFFF;
+
+		.pay-title {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			width: 100%;
+			height: 200rpx;
+
+			text {
+				font-size: 28rpx;
+				color: #555555;
+			}
+		}
+
+		.pay-password {
+			display: flex;
+			align-items: center;
+			width: 90%;
+			height: 80rpx;
+			margin: 20rpx auto;
+			border: 2rpx solid $base;
+
+			.list {
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				width: 16.666%;
+				height: 100%;
+				border-right: 2rpx solid #EEEEEE;
+
+				text {
+					font-size: 32rpx;
+				}
+			}
+
+			.list:nth-child(6) {
+				border-right: none;
+			}
+		}
+
+		.hint {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			width: 100%;
+			height: 100rpx;
+
+			text {
+				font-size: 28rpx;
+				color: $base;
+			}
+		}
+	}
+
+
 	.tab {
 		padding: 30rpx 20rpx;
 		margin: 0 30rpx;
@@ -506,7 +700,7 @@
 		}
 
 		.top {
-			height: 500rpx;
+			height: 530rpx;
 			width: 100%;
 		}
 	}

+ 0 - 838
pages/index/entertainment.vue

@@ -1,838 +0,0 @@
-<template>
-	<view class="all">
-		<view class="padding-t-30"></view>
-		<view class="tab">
-			<view class="flex">
-				<view class="tab-item " @click="changeTab(item,ind)" :class="{action:actionIndex==ind}"
-					v-for="(item,ind) in gameList">
-					{{item.name}}
-				</view>
-			</view>
-			<l-echart class="top" ref="chart"></l-echart>
-		</view>
-
-		<view class="center flex">
-			<!-- 左 -->
-			<view class="le">
-				<view class="tit flex-start">
-					<view class="ti1">{{$t('enter.u1')}}</view>
-					<view class="ti2">({{$t('enter.u2')}})</view>
-				</view>
-				<view class="he">
-					<view class="numbox flex-start">
-						<view class="he1 flex" @click="gameMoneyValue=it" v-for="it in arMoneyList">
-							<view class="wen">{{it}}</view>
-						</view>
-					</view>
-				</view>
-				<view class="yi flex-start">
-					<image class="img" src="../../static/icon/le.png" mode=""></image>
-					<view class="wz padding-l-10">{{history.base.token}}</view>
-					<view class="qx padding-l-10" v-if="history.next.id">{{history.next.no}}</view>
-				</view>
-				<view class="shu">
-					0.064489
-				</view>
-			</view>
-			<!--右 -->
-			<view class="ri">
-				<view class="ti flex-center">
-					<view class="t1">{{$t('enter.u3')}}</view>
-					<view class="t2 padding-l-10">{{history.base.timebar}}</view>
-				</view>
-
-				<view class="dh">
-					<input class="input" type="number" v-model="gameMoneyValue">
-				</view>
-				<view class="btn">
-					<view class="bt flex">
-						<view class="btnItem btnle">
-							<image class="imag" src="../../static/icon/xia.png" mode=""></image>
-							<text class="xia">{{$t('enter.u4')}}</text>
-						</view>
-						<view class="btnItem btnri">
-							<image class="imag" src="../../static/icon/shang.png" mode=""></image>
-							<text class="xia">{{$t('enter.u6')}}</text>
-						</view>
-					</view>
-					<view class="bt flex">
-						<view class="btnItem btnle">
-							<view class="xia">{{$t('enter.u5')}}</view>
-						</view>
-						<view class="btnItem btnri">
-							<view class="xia">{{$t('enter.u7')}}</view>
-						</view>
-					</view>
-				</view>
-
-				<view class="db flex">
-					<view class="jl">{{$t('enter.u8')}}</view>
-					<view class="sj">
-						<text v-if="time.H<10">0</text>
-						{{time.H}}
-					</view>
-					<view class="sj">
-						<text v-if="time.M<10">0</text>
-						{{time.M}}
-					</view>
-					<view class="sj">
-						<text v-if="time.S<10">0</text>
-						{{time.S}}
-					</view>
-				</view>
-			</view>
-		</view>
-		<view class="kb"></view>
-
-		<view class="last">
-			<view class="flex">
-				<text>{{$t('enter.u9')}}</text>
-				<view class="flex" @click="nav">
-					<text>{{$t('enter.u10')}}</text>
-					<image class="lb" src="../../static/icon/jt.png" mode=""></image>
-				</view>
-			</view>
-		</view>
-
-		<view class="bg">
-			<view class="biaotou flex">
-				<view class="biwe">{{$t('enter.u11')}}</view>
-				<view class="biwe">{{$t('enter.u12')}}</view>
-				<view class="biwe">{{$t('enter.u13')}}</view>
-				<view class="biwe">{{$t('enter.u14')}}</view>
-			</view>
-			<view class="list flex" v-for="(item,ind) in betList.list" :key="ind">
-				<view class="biwe flex-start">
-					<view class="tr">{{history.base.token}}</view>
-					<view class="nametip">{{history.base.timebar}}</view>
-					<image class="zz" src="../../static/icon/shang.png" mode=""></image>
-				</view>
-				<view class="biwe">23.5000</view>
-				<view class="biwe">23.5000</view>
-				<view class="biwe flex">
-					<view class="list-buttom success margin-r-10">
-						{{$t('enter.u17')}}
-					</view>
-					<view class="list-buttom primary">
-						{{$t('enter.u18')}}
-					</view>
-				</view>
-			</view>
-		</view>
-
-
-		<view class="chz flex">
-			<view>
-				<view class="yue padding-b-10">{{$t('enter.u15')}}</view>
-				<view class="yes">{{userWallet}}U</view>
-			</view>
-			<view class="flex-start" @click="navC">
-				<view class="quc">{{$t('enter.u16')}}</view>
-				<image class="choz" src="../../static/icon/jt.png" mode=""></image>
-			</view>
-		</view>
-		<taber tab='entertainment'></taber>
-	</view>
-</template>
-
-<script>
-	import LEchart from '@/uni_modules/lime-echart/components/l-echart/l-echart.vue';
-	import * as echarts from '@/uni_modules/lime-echart/static/echarts.min'
-	import {
-		getGame,
-		gameKline,
-		getGameList,
-		test,
-		gameWallet,
-		gameBetList
-	} from "@/api/game.js";
-	import {
-		qianBao,
-	} from "@/api/wallet.js";
-	import {
-		mapState,
-		mapMutations
-	} from 'vuex';
-	import {
-		saveUrl,
-		interceptor
-	} from '@/utils/loginUtils.js';
-	import taber from "@/components/footer/footer.vue";
-
-	export default {
-		components: {
-			taber,
-			LEchart
-		},
-		computed: {
-			...mapState("user", ["hasLogin"])
-		},
-		data() {
-			return {
-				arMoneyList: [
-					1, 5, 10, 20, 50, 100
-				],
-				gameMoneyValue: 0,
-				actionIndex: 0,
-				// 当前游戏列表
-				gameList: [],
-				// 游戏信息
-				history: {
-					list: [], //游戏进行记录
-					page: 1,
-					limit: 10,
-					// 基础数据
-					base: {},
-					next: {},
-					now: {}
-				},
-				time: {
-					H: 0,
-					M: 0,
-					S: 0,
-					// 保存倒计时对象
-					t: ''
-				},
-				// 游戏押注记录
-				betList: {
-					list: [], //游戏进行记录
-					page: 1,
-					limit: 10,
-				},
-				userWallet: 0,
-			};
-		},
-		onLoad() {
-
-		},
-		onShow() {
-			if (!this.hasLogin) {
-				uni.showModal({
-					title: "登陆",
-					content: '您未登录!是否马上登录?',
-					success: (e) => {
-						// 判断是否点击确认按钮
-						if (e.confirm) {
-							// 保存当前页面地址
-							saveUrl()
-							// 跳转页面
-							interceptor()
-						}
-					}
-				})
-				return
-			}
-			gameWallet().then((res) => {
-				this.userWallet = res.data.back.USDT.money.money
-			})
-			if (this.history.next.id) {
-				this.opTiem();
-			} else {
-				this.gameInit();
-			}
-		},
-		// 关闭循环
-		onHide() {
-			clearInterval(this.time.t)
-		},
-		methods: {
-			// 开始倒计时
-			async opTiem() {
-				const that = this;
-				try {
-					// 关闭循环
-					clearInterval(that.time.t);
-					if (that.history.base.id) {
-						that.time.t = setInterval(() => {
-							const da = (new Date()).getTime();
-							const timenum = that.history.next.open_time * 1000 - da;
-							that.time.H = Math.floor(timenum / 1000 / 60 / 60);
-							that.time.S = Math.floor(timenum / 1000 % 60)
-							that.time.M = Math.floor(timenum / 1000 / 60 % 60);
-							if (that.time.H == 0 && that.time.M == 0 && that.time.S == 0) {
-								clearInterval(that.time.t);
-								setTimeout(() => {
-									test();
-									setTimeout(() => {
-										this.gameDataInit(that.gameList[that.actionIndex].id)
-									}, 1000)
-								}, 3000)
-
-							}
-						}, 1000)
-					}
-				} catch (e) {
-					console.log(e, '定时');
-				}
-
-			},
-			changeTab(item, ind) {
-				if (ind != this.actionIndex) {
-					this.actionIndex = ind;
-					this.gameDataInit(item.id);
-				}
-			},
-			async gameInit() {
-				try {
-					await test();
-					// 获取游戏列表
-					await this.getGameList();
-					// 加载游戏数据
-					this.gameDataInit(this.history.next.id || this.gameList[0].id)
-
-				} catch (e) {
-					console.log(e, 'cuowu');
-				}
-			},
-			// 加载游戏列表
-			getGameList() {
-				return getGameList().then((res) => {
-					this.gameList = res.data.list;
-				})
-			},
-			// 加载基础游戏信息
-			async gameDataInit(id) {
-				// 获取基础信息
-				await this.getGame(id);
-				//获取K线
-				this.getGameKline();
-				// 获取游戏压住记录
-				this.gameBetList();
-			},
-			// 获取游戏压住记录
-			gameBetList() {
-				gameBetList({
-					page: 1,
-					limit: 10,
-					id: this.history.base.id
-				}).then((res) => {
-					this.betList.list = res.data.bet_log;
-				})
-			},
-			// 获取游戏K线信息
-			getGameKline() {
-				const that = this;
-				gameKline({
-					page: 1,
-					limit: 60
-				}, that.history.base.id).then((res) => {
-					let list = res.data.list.reverse();
-					// x轴记录
-					let xarr = [];
-					// 打点数据
-					let linearr = [];
-					for (let i = 0; i < list.length; i++) {
-						const ll = list[i];
-						const time = new Date(+ll.ts);
-						const addar = [+(+ll.o).toFixed(5), +(+ll.c).toFixed(5), +(+ll.l).toFixed(5), +(+ll.h)
-							.toFixed(5)
-						];
-						xarr.push(`${time.getHours()}:${time.getMinutes()}`)
-						linearr.push(addar)
-					}
-					that.$nextTick(() => {
-						that.initKline({
-							xarr,
-							linearr
-						})
-					})
-				})
-			},
-			// 获取当前项目信息
-			getGame(type) {
-				const that = this;
-				return getGame({
-					page: that.history.page,
-					limit: that.history.limit
-				}, type).then(({
-					data
-				}) => {
-					that.history.list = data.list || [];
-					that.history.base = data.game || {};
-					that.history.next = data.next_game || {};
-					that.history.now = data.now_game || {};
-					if (that.history.next) {
-						that.opTiem();
-					}
-				})
-			},
-			// 均值计算
-			calculateMA(dayCount, data) {
-				var result = [];
-				for (var i = 0, len = data.linearr.length; i < len; i++) {
-					if (i < dayCount) {
-						result.push('-');
-						continue;
-					}
-					var sum = 0;
-					for (var j = 0; j < dayCount; j++) {
-						sum += data.linearr[i - j][1];
-					}
-					result.push(+(sum / dayCount).toFixed(5));
-				}
-				return result;
-			},
-
-			async initKline(data) {
-				const that = this;
-				try {
-					const chart = await this.$refs.chart.init(echarts);
-					const upColor = '#00da3c';
-					const downColor = '#ec0000';
-					chart.setOption(
-						(this.option = {
-							animation: false,
-							legend: {
-								top: 10,
-								left: 10,
-								data: ['MA5', 'MA10', 'MA20'],
-								textStyle: {
-									color: '#999999'
-								}
-							},
-							tooltip: {
-								trigger: 'axis',
-								axisPointer: {
-									type: 'cross'
-								},
-								borderWidth: 1,
-								borderColor: '#ccc',
-								padding: 10,
-								textStyle: {
-									color: '#000'
-								},
-								position: function(pos, params, el, elRect, size) {
-									const obj = {
-										top: 10
-									};
-									obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 40;
-
-									return obj;
-								}
-							},
-							dataZoom: [{
-								type: 'inside',
-								xAxisIndex: 0,
-								start: 50,
-								end: 100
-							}],
-							grid: [{
-								left: 10,
-								right: 55,
-								bottom: 20,
-								top: 45
-							}],
-							xAxis: [{
-								type: 'category',
-								data: data.xarr,
-								axisLine: {
-									onZero: false
-								},
-								splitLine: {
-									show: false
-								},
-								min: 'dataMin',
-								max: 'dataMax',
-								axisPointer: {
-									z: 100
-								}
-							}],
-							yAxis: [{
-								scale: true,
-								splitNumber: 4,
-								position: 'right',
-								axisTick: {
-									show: false
-								},
-								splitLine: {
-									show: false,
-									lineStyle: {
-										color: '#e3e3e3'
-									}
-								},
-								axisLabel: {
-									inside: false,
-									formatter: '{value}\n',
-									color: '#999999'
-								}
-							}],
-							series: [{
-									name: that.history.base.token + '-USDT',
-									type: 'candlestick',
-									data: data.linearr,
-									itemStyle: {
-										color: upColor,
-										color0: downColor,
-										borderColor: undefined,
-										borderColor0: undefined
-									}
-								},
-								{
-									name: "MA5",
-									smooth: true,
-									type: 'line',
-									data: that.calculateMA(5, data),
-									showSymbol: false,
-									lineStyle: {
-										width: 1
-									}
-								},
-								{
-									name: "MA10",
-									smooth: true,
-									type: 'line',
-									data: that.calculateMA(10, data),
-									showSymbol: false,
-									lineStyle: {
-										width: 1
-									}
-								},
-								{
-									name: "MA20",
-									smooth: true,
-									type: 'line',
-									data: that.calculateMA(20, data),
-									showSymbol: false,
-									lineStyle: {
-										width: 1
-									}
-								},
-							]
-						}),
-						true
-					)
-
-				} catch (e) {
-					console.log(e, 'cuowu');
-					//TODO handle the exception
-				}
-
-			},
-
-			// 页面逻辑
-			nav() {
-				uni.navigateTo({
-					url: "/pages/history/history",
-				});
-			},
-			navC() {
-				uni.navigateTo({
-					url: "/pages/recharge/recharge",
-				});
-			},
-		},
-	};
-</script>
-
-<style lang="scss">
-	.all {
-		width: 750rpx;
-		/* height: 2500rpx; */
-		height: 100%;
-		padding-top: var(--status-bar-height);
-		padding-bottom: 30rpx;
-	}
-
-	.tab {
-		padding: 30rpx 20rpx;
-		margin: 0 30rpx;
-		background-color: #191A1F;
-		border-radius: 20px;
-
-		.tab-item {
-			color: #FFF;
-			font-size: $font-sm;
-			padding: 0 20rpx;
-			padding-bottom: 10rpx;
-
-			&.action {
-				color: #F5A944;
-				border-bottom: 1px solid #F5A944;
-			}
-		}
-
-		.top {
-			height: 530rpx;
-			width: 100%;
-		}
-	}
-
-	.center {
-		padding: 30rpx;
-		line-height: 1;
-		align-items: flex-start;
-
-		.le,
-		.ri {
-			width: 50%;
-		}
-
-		.le {
-			.tit {
-				font-weight: bold;
-
-				.ti1 {
-					font-size: 26rpx;
-					color: #ffffff;
-				}
-
-				.ti2 {
-					font-size: 22rpx;
-					padding-left: 10rpx;
-					color: #999999;
-				}
-			}
-
-			.he {
-				padding-top: 40rpx;
-
-				.numbox {
-					flex-wrap: wrap;
-
-					.he1 {
-						background: #fdaf41;
-						border-radius: 10rpx;
-						margin-bottom: 40rpx;
-						margin-right: 20rpx;
-						width: 84rpx;
-						height: 84rpx;
-						justify-content: center;
-
-						.wen {
-							font-size: 30rpx;
-							font-weight: bold;
-							color: #000000;
-						}
-					}
-				}
-			}
-
-			.yi {
-				color: #ffffff;
-				font-size: $font-base;
-
-				.img {
-					width: 41rpx;
-					height: 42rpx;
-				}
-
-				.wz {
-					font-weight: bold;
-				}
-			}
-
-			.shu {
-				padding-top: 10rpx;
-				font-size: 51rpx;
-				font-weight: bold;
-				color: #fdb242;
-			}
-
-		}
-
-		.ri {
-			.ti {
-				font-size: 26rpx;
-				font-weight: bold;
-
-				.t1 {
-					color: #ffffff;
-				}
-
-				.t2 {
-					color: #fdaf41;
-				}
-			}
-
-			.dh {
-				width: 100%;
-				padding: 20rpx 30rpx;
-				margin-top: 30rpx;
-				background: #efefef;
-				border-radius: 10rpx;
-
-				.te {
-					font-size: 44rpx;
-					font-weight: 800;
-					color: #000000;
-				}
-			}
-
-			.btn {
-				padding-top: 30rpx;
-
-				.bt {
-					padding-bottom: 10rpx;
-
-					.btnItem {
-						width: 49%;
-						height: 70rpx;
-						line-height: 70rpx;
-						text-align: center;
-
-						.imag {
-							width: 32rpx;
-							height: 20rpx;
-						}
-
-						.xia {
-							font-size: 28rpx;
-							font-weight: 800;
-							color: #ffffff;
-						}
-
-					}
-
-					.btnle {
-						border-radius: 50rpx 0 0 50rpx;
-						background-color: #df5660;
-
-					}
-
-					.btnri {
-						border-radius: 0 50rpx 50rpx 0;
-						background-color: #5bb786;
-					}
-				}
-			}
-
-			.db {
-				justify-content: flex-end;
-				padding-top: 30rpx;
-
-				.jl {
-					font-size: 24rpx;
-					font-weight: 400;
-					color: #999999;
-				}
-
-				.sj {
-					width: 40rpx;
-					height: 40rpx;
-					background: #bfbfbf;
-					border-radius: 3rpx;
-					text-align: center;
-					line-height: 40rpx;
-					margin-left: 10rpx;
-				}
-
-			}
-		}
-	}
-
-	.kb {
-		width: 750rpx;
-		height: 20rpx;
-		background-color: #191a1f;
-	}
-
-	.last {
-		padding: 30rpx;
-		line-height: 1;
-		font-size: 24rpx;
-		font-weight: 800;
-		color: #fff;
-
-		.lb {
-			width: 14rpx;
-			height: 20rpx;
-			margin-left: 10rpx;
-		}
-
-	}
-
-
-
-
-
-	.bg {
-		padding: 0 30rpx;
-		background-color: #000000;
-		color: #fff;
-		text-align: center;
-		font-size: 28rpx;
-		padding-bottom: 30rpx;
-
-		.biaotou {
-			font-weight: 800;
-			padding-bottom: 10rpx;
-		}
-
-		.biwe {
-			width: 25%;
-
-			.zz {
-				width: 22rpx;
-				height: 14rpx;
-				margin-left: 8rpx;
-			}
-
-			.nametip {
-				font-size: 18rpx;
-				color: #999999;
-				padding-left: 8rpx;
-			}
-		}
-
-		.biwe:nth-child(1) {
-			flex-shrink: 0;
-			text-align: left;
-			align-items: flex-end;
-		}
-
-		.biwe:nth-child(4) {
-			flex-shrink: 0;
-			width: 200rpx;
-		}
-
-		.list {
-			font-weight: bold;
-			padding: 20rpx 0;
-			border-bottom: 1px solid rgba(43, 42, 38, 0.52);
-		}
-
-		.list-buttom {
-			width: 100rpx;
-			border-radius: 30rpx;
-			font-size: 16rpx;
-			padding: 10rpx 0;
-
-			&.success {
-				background: #25b287;
-			}
-
-			&.primary {
-				background: #01ebf6;
-				color: #000000;
-			}
-		}
-	}
-
-	.chz {
-		background: #191a1f;
-		border-radius: 20rpx;
-		margin: 0 30rpx;
-		color: #ffffff;
-		font-weight: bold;
-		padding: 20rpx 30rpx;
-
-		.yue {
-			font-size: 28rpx;
-		}
-
-		.yes {
-			color: #fdaf41;
-		}
-
-		.quc {
-			font-size: 26rpx;
-			font-weight: 500;
-			color: #ffffff;
-		}
-
-		.choz {
-			width: 22rpx;
-			height: 14rpx;
-		}
-	}
-</style>

+ 0 - 4
pages/index/user.vue

@@ -119,8 +119,6 @@
 		mapState,
 		mapMutations
 	} from 'vuex';
-	import uniList from '@/components/uni-list/uni-list.vue';
-	import uniListItem from '@/components/uni-list-item/uni-list-item.vue';
 	import {
 		orderData,
 		getUserInfo,
@@ -137,8 +135,6 @@
 	export default {
 
 		components: {
-			// uniList,
-			// uniListItem,
 			taber
 		},
 		data() {

+ 0 - 4
pages/user/withdrawal.vue

@@ -141,14 +141,10 @@
 		mapState,
 		mapMutations
 	} from 'vuex';
-	import uniNoticeBar from '@/components/uni-notice-bar/uni-notice-bar.vue';
 	export default {
 		filters: {
 			getMoneyStyle
 		},
-		components: {
-			uniNoticeBar
-		},
 		computed: {
 			...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
 		},

+ 8 - 0
uni_modules/cc-defineKeyboard/changelog.md

@@ -0,0 +1,8 @@
+## 2.0(2023-08-03)
+修复小程序bug
+## 1.0.2(2023-06-21)
+组件优化 增加键盘高度
+## 1.0.1(2023-06-21)
+组件优化
+## 1.0.0(2023-06-21)
+组件初始化

+ 44 - 0
uni_modules/cc-defineKeyboard/components/cc-defineKeyboard/cc-defineKeyboard.scss

@@ -0,0 +1,44 @@
+.page-total{
+	position: fixed;
+	left: 0;
+	bottom: 0;
+	width: 100%;
+	background-color: #f6f6f6;
+	z-index: 99;
+}
+
+.key-list{
+	display: flex;
+	flex-wrap: wrap;
+	align-items: center;
+	padding: 1% 3%;
+	height: 90%;
+	margin-top: 20rpx;
+	.list{
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		width: 32%;
+		height: 92rpx;
+		background-color: #FFFFFF;
+		border-radius: 10rpx;
+		box-shadow: 0 0 10rpx rgba(0,0,0,0.1);
+		margin-right: 1.7%;
+		margin-bottom: 16rpx;
+		text{
+			font-size: 38rpx;
+			font-weight: bold;
+			color: #222222;
+		}
+	}
+	.list:nth-child(3n){
+		margin-right: 0;
+	}
+	.special{
+		background-color: #f6f6f6;
+		box-shadow: none;
+		text{
+			color: #959595;
+		}
+	}
+}

+ 115 - 0
uni_modules/cc-defineKeyboard/components/cc-defineKeyboard/cc-defineKeyboard.vue

@@ -0,0 +1,115 @@
+<template>
+	<view class="page-total" v-show="isShow">
+		<view class="key-list">
+			<view class="list" v-for="(item,index) in keyList" 
+			:class="{'special':item.keyCode==190||item.keyCode==8}"
+			@click="onKeyList(item,index)"
+			:key="item.keyCode">
+				<text>{{item.key}}</text>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				isShow: false,
+				keyList: [
+					{
+						key: 1,
+						en: '',
+						keyCode: 49,
+					},{
+						key: 2,
+						en: 'ABC',
+						keyCode: 50,
+					},{
+						key: 3,
+						en: 'ABC',
+						keyCode: 51,
+					},{
+						key: 4,
+						en: 'ABC',
+						keyCode: 52,
+					},{
+						key: 5,
+						en: 'ABC',
+						keyCode: 53,
+					},{
+						key: 6,
+						en: 'ABC',
+						keyCode: 54,
+					},{
+						key: 7,
+						en: 'ABC',
+						keyCode: 55,
+					},{
+						key: 8,
+						en: 'ABC',
+						keyCode: 56,
+					},{
+						key: 9,
+						en: 'ABC',
+						keyCode: 57,
+					},{
+						key: '.',
+						en: 'ABC',
+						keyCode: 190,
+					},{
+						key: 0,
+						en: 'ABC',
+						keyCode: 48,
+					},{
+						key: 'del',
+						en: 'DEL',
+						keyCode: 8,
+					},
+				],
+				keyIndex: -1,
+			};
+		},
+		props:{
+			passwrdType: {
+				type: String,
+				default: 'pay'
+			}
+		},
+		methods:{
+			show(){
+				this.isShow = true;
+			},
+			hide(){
+				this.isShow = false;
+			},
+			/**
+			 * 密码键盘按下
+			 * @param {Object} item
+			 * @param {Number} index
+			 */
+			onKeyList(item,index){
+				let KeyInfo = item;	
+				// 删除键
+				if(KeyInfo.keyCode === 8 && this.keyIndex > -1){
+					this.keyIndex--;
+				}
+				// 不是删除键
+				if(KeyInfo.keyCode != 8){
+					if(this.passwrdType == 'pay' && this.keyIndex >= 5){
+						console.log('支付键盘');
+						this.keyIndex = -1;
+						return;
+					}
+					this.keyIndex++;
+				}
+				KeyInfo.index = this.keyIndex;
+				this.$emit('KeyInfo',KeyInfo);
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	@import 'cc-defineKeyboard.scss';
+</style>

+ 87 - 0
uni_modules/cc-defineKeyboard/package.json

@@ -0,0 +1,87 @@
+{
+  "id": "cc-defineKeyboard",
+  "displayName": "自定义支付密码输入键盘Keyboard和支付设置输入框Input",
+  "version": "2.0",
+  "description": "自定义支付密码输入键盘Keyboard和支付设置输入框Input",
+  "keywords": [
+    "支付密码",
+    "键盘",
+    "",
+    "支付密码输入键盘",
+    "Keyboard",
+    "",
+    "自定义键盘"
+],
+  "repository": "",
+  "engines": {
+    "HBuilderX": "^3.7.0"
+  },
+  "dcloudext": {
+    "type": "component-vue",
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": ""
+  },
+  "uni_modules": {
+    "dependencies": [],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "Vue": {
+          "vue2": "y",
+          "vue3": "y"
+        },
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "y"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+          "QQ": "y",
+          "钉钉": "y",
+          "快手": "y",
+          "飞书": "y",
+          "京东": "y"
+        },
+        "快应用": {
+          "华为": "y",
+          "联盟": "y"
+        }
+      }
+    }
+  }
+}

+ 232 - 0
uni_modules/cc-defineKeyboard/readme.md

@@ -0,0 +1,232 @@
+# cc-defineKeyboard
+
+
+#### 使用方法 
+```使用方法	
+<!-- ref:唯一ref  passwrdType:密码样式pay keyInfo:密码输入监测事件 -->
+<cc-defineKeyboard ref="CodeKeyboard" passwrdType="pay" @KeyInfo="KeyInfo"></cc-defineKeyboard>
+						
+/** * 唤起键盘 */
+onPayUp() {
+	this.$refs.CodeKeyboard.show();
+},
+
+/*** 支付键盘回调* @param {Object} val */
+
+KeyInfo(val) {
+
+				if (val.index >= 6) {
+					return;
+				}
+				// 判断是否输入的是删除键
+				if (val.keyCode === 8) {
+					// 删除最后一位
+					this.passwordArr.splice(val.index + 1, 1)
+				}
+				// 判断是否输入的是.
+				else if (val.keyCode == 190) {
+					// 输入.无效
+				} else {
+					this.passwordArr.push(val.key);
+				}
+
+				uni.showModal({
+					title: '温馨提示',
+					content: '输入密码是 = ' + JSON.stringify(this.passwordArr)
+				})
+}
+
+
+```
+
+#### HTML代码实现部分
+```html
+
+<template>
+	<view class="page">
+		<view>
+			<view class="pay-title">
+				<text v-show="AffirmStatus === 1">请输入6位支付密码</text>
+				<text v-show="AffirmStatus === 2">请设置6位支付密码</text>
+				<text v-show="AffirmStatus === 3">请确认6位支付密码</text>
+			</view>
+			<view class="pay-password" @click="onPayUp">
+				<view class="list">
+					<text v-show="passwordArr.length >= 1">●</text>
+				</view>
+				<view class="list">
+					<text v-show="passwordArr.length >= 2">●</text>
+				</view>
+				<view class="list">
+					<text v-show="passwordArr.length >= 3">●</text>
+				</view>
+				<view class="list">
+					<text v-show="passwordArr.length >= 4">●</text>
+				</view>
+				<view class="list">
+					<text v-show="passwordArr.length >= 5">●</text>
+				</view>
+				<view class="list">
+					<text v-show="passwordArr.length >= 6">●</text>
+				</view>
+			</view>
+			<view class="hint">
+				<text>忘记支付密码?</text>
+			</view>
+		</view>
+		<!-- ref:唯一ref  passwrdType:密码样式pay keyInfo:密码输入返回事件 -->
+		<cc-defineKeyboard ref="CodeKeyboard" passwrdType="pay" @KeyInfo="KeyInfo"></cc-defineKeyboard>
+	
+	</view>
+</template>
+
+<script>
+	export default {
+		components: {
+
+		},
+		data() {
+			return {
+				AffirmStatus: 1,
+				passwordArr: [],
+				oldPasswordArr: [],
+				newPasswordArr: [],
+				afPasswordArr: [],
+			};
+		},
+		onLoad() {
+
+		},
+		methods: {
+			/**
+			 * 唤起键盘
+			 */
+			onPayUp() {
+				this.$refs.CodeKeyboard.show();
+			},
+			/**
+			 * 支付键盘回调
+			 * @param {Object} val
+			 */
+			KeyInfo(val) {
+
+
+				if (val.index >= 6) {
+					return;
+				}
+				// 判断是否输入的是删除键
+				if (val.keyCode === 8) {
+					// 删除最后一位
+					this.passwordArr.splice(val.index + 1, 1)
+				}
+				// 判断是否输入的是.
+				else if (val.keyCode == 190) {
+					// 输入.无效
+				} else {
+					this.passwordArr.push(val.key);
+				}
+
+				uni.showModal({
+					title: '温馨提示',
+					content: '输入密码是 = ' + JSON.stringify(this.passwordArr)
+				})
+
+
+				// 判断是否等于6
+				if (this.passwordArr.length === 6) {
+					this.passwordArr = [];
+					this.AffirmStatus = this.AffirmStatus + 1;
+				}
+				// 判断到哪一步了
+				if (this.AffirmStatus === 1) {
+					this.oldPasswordArr = this.passwordArr;
+				} else if (this.AffirmStatus === 2) {
+					this.newPasswordArr = this.passwordArr;
+				} else if (this.AffirmStatus === 3) {
+					this.afPasswordArr = this.passwordArr;
+				} else if (this.AffirmStatus === 4) {
+					console.log(this.oldPasswordArr.join(''));
+					console.log(this.newPasswordArr.join(''));
+					console.log(this.afPasswordArr.join(''));
+					uni.showToast({
+						title: '修改成功',
+						icon: 'none'
+					})
+					setTimeout(() => {
+						uni.navigateBack();
+					}, 2000)
+				}
+				this.$forceUpdate();
+			}
+
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	$base: orangered; // 基础颜色
+
+	.page {
+		position: absolute;
+		left: 0;
+		top: 0;
+		width: 100%;
+		height: 100%;
+		background-color: #FFFFFF;
+	}
+
+	.pay-title {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		width: 100%;
+		height: 200rpx;
+
+		text {
+			font-size: 28rpx;
+			color: #555555;
+		}
+	}
+
+	.pay-password {
+		display: flex;
+		align-items: center;
+		width: 90%;
+		height: 80rpx;
+		margin: 20rpx auto;
+		border: 2rpx solid $base;
+
+		.list {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			width: 16.666%;
+			height: 100%;
+			border-right: 2rpx solid #EEEEEE;
+
+			text {
+				font-size: 32rpx;
+			}
+		}
+
+		.list:nth-child(6) {
+			border-right: none;
+		}
+	}
+
+	.hint {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		width: 100%;
+		height: 100rpx;
+
+		text {
+			font-size: 28rpx;
+			color: $base;
+		}
+	}
+</style>
+
+
+```

+ 29 - 0
uni_modules/uni-number-box/changelog.md

@@ -0,0 +1,29 @@
+## 1.2.3(2023-05-23)
+更新示例工程
+## 1.2.2(2023-05-08)
+- 修复 change 事件执行顺序错误的问题
+## 1.2.1(2021-11-22)
+- 修复 vue3中某些scss变量无法找到的问题
+## 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-number-box](https://uniapp.dcloud.io/component/uniui/uni-number-box)
+## 1.1.2(2021-11-09) 
+- 新增 提供组件设计资源,组件样式调整
+## 1.1.1(2021-07-30)
+- 优化 vue3下事件警告的问题
+## 1.1.0(2021-07-13)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.0.7(2021-05-12)
+- 新增 组件示例地址
+## 1.0.6(2021-04-20)
+- 修复 uni-number-box 浮点数运算不精确的 bug
+- 修复 uni-number-box change 事件触发不正确的 bug
+- 新增 uni-number-box v-model 双向绑定
+## 1.0.5(2021-02-05)
+- 调整为uni_modules目录规范
+
+## 1.0.7(2021-02-05)
+- 调整为uni_modules目录规范
+- 新增 支持 v-model
+- 新增 支持 focus、blur 事件
+- 新增 支持 PC 端

+ 221 - 0
uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue

@@ -0,0 +1,221 @@
+<template>
+	<view class="uni-numbox">
+		<view @click="_calcValue('minus')" class="uni-numbox__minus uni-numbox-btns" :style="{background}">
+			<text class="uni-numbox--text" :class="{ 'uni-numbox--disabled': inputValue <= min || disabled }" :style="{color}">-</text>
+		</view>
+		<input :disabled="disabled" @focus="_onFocus" @blur="_onBlur" class="uni-numbox__value" type="number"
+			v-model="inputValue" :style="{background, color}" />
+		<view @click="_calcValue('plus')" class="uni-numbox__plus uni-numbox-btns" :style="{background}">
+			<text class="uni-numbox--text" :class="{ 'uni-numbox--disabled': inputValue >= max || disabled }" :style="{color}">+</text>
+		</view>
+	</view>
+</template>
+<script>
+	/**
+	 * NumberBox 数字输入框
+	 * @description 带加减按钮的数字输入框
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=31
+	 * @property {Number} value 输入框当前值
+	 * @property {Number} min 最小值
+	 * @property {Number} max 最大值
+	 * @property {Number} step 每次点击改变的间隔大小
+	 * @property {String} background 背景色
+	 * @property {String} color 字体颜色(前景色)
+	 * @property {Boolean} disabled = [true|false] 是否为禁用状态
+	 * @event {Function} change 输入框值改变时触发的事件,参数为输入框当前的 value
+	 * @event {Function} focus 输入框聚焦时触发的事件,参数为 event 对象
+	 * @event {Function} blur 输入框失焦时触发的事件,参数为 event 对象
+	 */
+
+	export default {
+		name: "UniNumberBox",
+		emits: ['change', 'input', 'update:modelValue', 'blur', 'focus'],
+		props: {
+			value: {
+				type: [Number, String],
+				default: 1
+			},
+			modelValue: {
+				type: [Number, String],
+				default: 1
+			},
+			min: {
+				type: Number,
+				default: 0
+			},
+			max: {
+				type: Number,
+				default: 100
+			},
+			step: {
+				type: Number,
+				default: 1
+			},
+			background: {
+				type: String,
+				default: '#f5f5f5'
+			},
+			color: {
+				type: String,
+				default: '#333'
+			},
+			disabled: {
+				type: Boolean,
+				default: false
+			}
+		},
+		data() {
+			return {
+				inputValue: 0
+			};
+		},
+		watch: {
+			value(val) {
+				this.inputValue = +val;
+			},
+			modelValue(val) {
+				this.inputValue = +val;
+			}
+		},
+		created() {
+			if (this.value === 1) {
+				this.inputValue = +this.modelValue;
+			}
+			if (this.modelValue === 1) {
+				this.inputValue = +this.value;
+			}
+		},
+		methods: {
+			_calcValue(type) {
+				if (this.disabled) {
+					return;
+				}
+				const scale = this._getDecimalScale();
+				let value = this.inputValue * scale;
+				let step = this.step * scale;
+				if (type === "minus") {
+					value -= step;
+					if (value < (this.min * scale)) {
+						return;
+					}
+					if (value > (this.max * scale)) {
+						value = this.max * scale
+					}
+				}
+
+				if (type === "plus") {
+					value += step;
+					if (value > (this.max * scale)) {
+						return;
+					}
+					if (value < (this.min * scale)) {
+						value = this.min * scale
+					}
+				}
+
+				this.inputValue = (value / scale).toFixed(String(scale).length - 1);
+				// TODO vue2 兼容
+				this.$emit("input", +this.inputValue);
+				// TODO vue3 兼容
+				this.$emit("update:modelValue", +this.inputValue);
+				this.$emit("change", +this.inputValue);
+			},
+			_getDecimalScale() {
+
+				let scale = 1;
+				// 浮点型
+				if (~~this.step !== this.step) {
+					scale = Math.pow(10, String(this.step).split(".")[1].length);
+				}
+				return scale;
+			},
+			_onBlur(event) {
+				this.$emit('blur', event)
+				let value = event.detail.value;
+				if (isNaN(value)) {
+					this.inputValue = this.min;
+					return;
+				}
+				value = +value;
+				if (value > this.max) {
+					value = this.max;
+				} else if (value < this.min) {
+					value = this.min;
+				}
+				const scale = this._getDecimalScale();
+				this.inputValue = value.toFixed(String(scale).length - 1);
+				this.$emit("input", +this.inputValue);
+				this.$emit("update:modelValue", +this.inputValue);
+				this.$emit("change", +this.inputValue);
+			},
+			_onFocus(event) {
+				this.$emit('focus', event)
+			}
+		}
+	};
+</script>
+<style lang="scss" >
+	$box-height: 26px;
+	$bg: #f5f5f5;
+	$br: 2px;
+	$color: #333;
+
+	.uni-numbox {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+	}
+
+	.uni-numbox-btns {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		align-items: center;
+		justify-content: center;
+		padding: 0 8px;
+		background-color: $bg;
+		/* #ifdef H5 */
+		cursor: pointer;
+		/* #endif */
+	}
+
+	.uni-numbox__value {
+		margin: 0 2px;
+		background-color: $bg;
+		width: 40px;
+		height: $box-height;
+		text-align: center;
+		font-size: 14px;
+		border-left-width: 0;
+		border-right-width: 0;
+		color: $color;
+	}
+
+	.uni-numbox__minus {
+		border-top-left-radius: $br;
+		border-bottom-left-radius: $br;
+	}
+
+	.uni-numbox__plus {
+		border-top-right-radius: $br;
+		border-bottom-right-radius: $br;
+	}
+
+	.uni-numbox--text {
+		// fix nvue
+		line-height: 20px;
+
+		font-size: 20px;
+		font-weight: 300;
+		color: $color;
+	}
+
+	.uni-numbox .uni-numbox--disabled {
+		color: #c0c0c0 !important;
+		/* #ifdef H5 */
+		cursor: not-allowed;
+		/* #endif */
+	}
+</style>

+ 82 - 0
uni_modules/uni-number-box/package.json

@@ -0,0 +1,82 @@
+{
+  "id": "uni-number-box",
+  "displayName": "uni-number-box 数字输入框",
+  "version": "1.2.3",
+  "description": "NumberBox 带加减按钮的数字输入框组件,用户可以控制每次点击增加的数值,支持小数。",
+  "keywords": [
+    "uni-ui",
+    "uniui",
+    "数字输入框"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": ""
+  },
+  "directories": {
+    "example": "../../temps/example_temps"
+  },
+"dcloudext": {
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+    "type": "component-vue"
+  },
+  "uni_modules": {
+    "dependencies": ["uni-scss"],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "y"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+          "QQ": "y"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        },
+        "Vue": {
+            "vue2": "y",
+            "vue3": "y"
+        }
+      }
+    }
+  }
+}

+ 13 - 0
uni_modules/uni-number-box/readme.md

@@ -0,0 +1,13 @@
+
+
+## NumberBox 数字输入框
+> **组件名:uni-number-box**
+> 代码块: `uNumberBox`
+
+
+带加减按钮的数字输入框。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-number-box)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 
+
+

+ 68 - 0
uni_modules/uni-popup/changelog.md

@@ -0,0 +1,68 @@
+## 1.8.3(2023-04-17)
+- 修复 uni-popup 重复打开时的 bug
+## 1.8.2(2023-02-02)
+- uni-popup-dialog 组件新增 inputType 属性
+## 1.8.1(2022-12-01)
+- 修复 nvue 下 v-show 报错
+## 1.8.0(2022-11-29)
+- 优化 主题样式
+## 1.7.9(2022-04-02)
+- 修复 弹出层内部无法滚动的bug
+## 1.7.8(2022-03-28)
+- 修复 小程序中高度错误的bug
+## 1.7.7(2022-03-17)
+- 修复 快速调用open出现问题的Bug
+## 1.7.6(2022-02-14)
+- 修复 safeArea 属性不能设置为false的bug
+## 1.7.5(2022-01-19)
+- 修复 isMaskClick 失效的bug
+## 1.7.4(2022-01-19)
+- 新增 cancelText \ confirmText 属性 ,可自定义文本
+- 新增 maskBackgroundColor 属性 ,可以修改蒙版颜色
+- 优化 maskClick属性 更新为 isMaskClick ,解决微信小程序警告的问题
+## 1.7.3(2022-01-13)
+- 修复 设置 safeArea 属性不生效的bug
+## 1.7.2(2021-11-26)
+- 优化 组件示例
+## 1.7.1(2021-11-26)
+- 修复 vuedoc 文字错误
+## 1.7.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-popup](https://uniapp.dcloud.io/component/uniui/uni-popup)
+## 1.6.2(2021-08-24)
+- 新增 支持国际化
+## 1.6.1(2021-07-30)
+- 优化 vue3下事件警告的问题
+## 1.6.0(2021-07-13)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.5.0(2021-06-23)
+- 新增 mask-click 遮罩层点击事件
+## 1.4.5(2021-06-22)
+- 修复 nvue 平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug
+## 1.4.4(2021-06-18)
+- 修复 H5平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug
+## 1.4.3(2021-06-08)
+- 修复 错误的 watch 字段
+- 修复 safeArea 属性不生效的问题
+- 修复 点击内容,再点击遮罩无法关闭的Bug
+## 1.4.2(2021-05-12)
+- 新增 组件示例地址
+## 1.4.1(2021-04-29)
+- 修复 组件内放置 input 、textarea 组件,无法聚焦的问题
+## 1.4.0 (2021-04-29)
+- 新增 type 属性的 left\right 值,支持左右弹出
+- 新增 open(String:type) 方法参数 ,可以省略 type 属性 ,直接传入类型打开指定弹窗
+- 新增 backgroundColor 属性,可定义主窗口背景色,默认不显示背景色
+- 新增 safeArea 属性,是否适配底部安全区
+- 修复 App\h5\微信小程序底部安全区占位不对的Bug
+- 修复 App 端弹出等待的Bug
+- 优化 提升低配设备性能,优化动画卡顿问题
+- 优化 更简单的组件自定义方式
+## 1.2.9(2021-02-05)
+- 优化 组件引用关系,通过uni_modules引用组件
+## 1.2.8(2021-02-05)
+- 调整为uni_modules目录规范
+## 1.2.7(2021-02-05)
+- 调整为uni_modules目录规范
+- 新增 支持 PC 端
+- 新增 uni-popup-message 、uni-popup-dialog扩展组件支持 PC 端

+ 45 - 0
uni_modules/uni-popup/components/uni-popup-dialog/keypress.js

@@ -0,0 +1,45 @@
+// #ifdef H5
+export default {
+  name: 'Keypress',
+  props: {
+    disable: {
+      type: Boolean,
+      default: false
+    }
+  },
+  mounted () {
+    const keyNames = {
+      esc: ['Esc', 'Escape'],
+      tab: 'Tab',
+      enter: 'Enter',
+      space: [' ', 'Spacebar'],
+      up: ['Up', 'ArrowUp'],
+      left: ['Left', 'ArrowLeft'],
+      right: ['Right', 'ArrowRight'],
+      down: ['Down', 'ArrowDown'],
+      delete: ['Backspace', 'Delete', 'Del']
+    }
+    const listener = ($event) => {
+      if (this.disable) {
+        return
+      }
+      const keyName = Object.keys(keyNames).find(key => {
+        const keyName = $event.key
+        const value = keyNames[key]
+        return value === keyName || (Array.isArray(value) && value.includes(keyName))
+      })
+      if (keyName) {
+        // 避免和其他按键事件冲突
+        setTimeout(() => {
+          this.$emit(keyName, {})
+        }, 0)
+      }
+    }
+    document.addEventListener('keyup', listener)
+    this.$once('hook:beforeDestroy', () => {
+      document.removeEventListener('keyup', listener)
+    })
+  },
+	render: () => {}
+}
+// #endif

+ 80 - 48
components/uni-popup/uni-popup-dialog.vue → uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue

@@ -1,18 +1,24 @@
 <template>
 	<view class="uni-popup-dialog">
 		<view class="uni-dialog-title">
-			<text class="uni-dialog-title-text" :class="['uni-popup__'+dialogType]">{{title}}</text>
+			<text class="uni-dialog-title-text" :class="['uni-popup__'+dialogType]">{{titleText}}</text>
 		</view>
-		<view class="uni-dialog-content">
-			<text class="uni-dialog-content-text" v-if="mode === 'base'">{{content}}</text>
-			<input v-else class="uni-dialog-input" v-model="val" type="text" :placeholder="placeholder" :focus="focus" >
+		<view v-if="mode === 'base'" class="uni-dialog-content">
+			<slot>
+				<text class="uni-dialog-content-text">{{content}}</text>
+			</slot>
+		</view>
+		<view v-else class="uni-dialog-content">
+			<slot>
+				<input class="uni-dialog-input" v-model="val" :type="inputType" :placeholder="placeholderText" :focus="focus" >
+			</slot>
 		</view>
 		<view class="uni-dialog-button-group">
-			<view class="uni-dialog-button" @click="close">
-				<text class="uni-dialog-button-text">取消</text>
+			<view class="uni-dialog-button" @click="closeDialog">
+				<text class="uni-dialog-button-text">{{closeText}}</text>
 			</view>
 			<view class="uni-dialog-button uni-border-left" @click="onOk">
-				<text class="uni-dialog-button-text uni-button-color">确定</text>
+				<text class="uni-dialog-button-text uni-button-color">{{okText}}</text>
 			</view>
 		</view>
 
@@ -20,6 +26,12 @@
 </template>
 
 <script>
+	import popup from '../uni-popup/popup.js'
+	import {
+	initVueI18n
+	} from '@dcloudio/uni-i18n'
+	import messages from '../uni-popup/i18n/index.js'
+	const {	t } = initVueI18n(messages)
 	/**
 	 * PopUp 弹出层-对话框样式
 	 * @description 弹出层-对话框样式
@@ -42,49 +54,48 @@
 
 	export default {
 		name: "uniPopupDialog",
+		mixins: [popup],
+		emits:['confirm','close'],
 		props: {
+			inputType:{
+				type: String,
+				default: 'text'
+			},
 			value: {
 				type: [String, Number],
 				default: ''
 			},
 			placeholder: {
 				type: [String, Number],
-				default: '请输入内容'
+				default: ''
 			},
-			/**
-			 * 对话框主题 success/warning/info/error	  默认 success
-			 */
 			type: {
 				type: String,
 				default: 'error'
 			},
-			/**
-			 * 对话框模式 base/input
-			 */
 			mode: {
 				type: String,
 				default: 'base'
 			},
-			/**
-			 * 对话框标题
-			 */
 			title: {
 				type: String,
-				default: '提示'
+				default: ''
 			},
-			/**
-			 * 对话框内容
-			 */
 			content: {
 				type: String,
 				default: ''
 			},
-			/**
-			 * 拦截取消事件 ,如果拦截取消事件,必须监听close事件,执行 done()
-			 */
 			beforeClose: {
 				type: Boolean,
 				default: false
+			},
+			cancelText:{
+				type: String,
+				default: ''
+			},
+			confirmText:{
+				type: String,
+				default: ''
 			}
 		},
 		data() {
@@ -94,7 +105,20 @@
 				val: ""
 			}
 		},
-		inject: ['popup'],
+		computed: {
+			okText() {
+				return this.confirmText || t("uni-popup.ok")
+			},
+			closeText() {
+				return this.cancelText || t("uni-popup.cancel")
+			},
+			placeholderText() {
+				return this.placeholder || t("uni-popup.placeholder")
+			},
+			titleText() {
+				return this.title || t("uni-popup.title")
+			}
+		},
 		watch: {
 			type(val) {
 				this.dialogType = val
@@ -110,7 +134,8 @@
 		},
 		created() {
 			// 对话框遮罩不可点击
-			this.popup.mkclick = false
+			this.popup.disableMask()
+			// this.popup.closeMask()
 			if (this.mode === 'input') {
 				this.dialogType = 'info'
 				this.val = this.value
@@ -126,31 +151,33 @@
 			 * 点击确认按钮
 			 */
 			onOk() {
-				this.$emit('confirm', () => {
-					this.popup.close()
-					if (this.mode === 'input') this.val = this.value
-				}, this.mode === 'input' ? this.val : '')
+				if (this.mode === 'input'){
+					this.$emit('confirm', this.val)
+				}else{
+					this.$emit('confirm')
+				}
+				if(this.beforeClose) return
+				this.popup.close()
 			},
 			/**
 			 * 点击取消按钮
 			 */
-			close() {
-				if (this.beforeClose) {
-					this.$emit('close', () => {
-						this.popup.close()
-					})
-					return
-				}
+			closeDialog() {
+				this.$emit('close')
+				if(this.beforeClose) return
+				this.popup.close()
+			},
+			close(){
 				this.popup.close()
 			}
 		}
 	}
 </script>
 
-<style lang="scss" scoped>
+<style lang="scss" >
 	.uni-popup-dialog {
 		width: 300px;
-		border-radius: 15px;
+		border-radius: 11px;
 		background-color: #fff;
 	}
 
@@ -160,8 +187,7 @@
 		/* #endif */
 		flex-direction: row;
 		justify-content: center;
-		padding-top: 15px;
-		padding-bottom: 5px;
+		padding-top: 25px;
 	}
 
 	.uni-dialog-title-text {
@@ -176,12 +202,12 @@
 		flex-direction: row;
 		justify-content: center;
 		align-items: center;
-		padding: 5px 15px 15px 15px;
+		padding: 20px;
 	}
 
 	.uni-dialog-content-text {
 		font-size: 14px;
-		color: #6e6e6e;
+		color: #6C6C6C;
 	}
 
 	.uni-dialog-button-group {
@@ -213,28 +239,34 @@
 	}
 
 	.uni-dialog-button-text {
-		font-size: 14px;
+		font-size: 16px;
+		color: #333;
 	}
 
 	.uni-button-color {
-		color: $uni-color-primary;
+		color: #007aff;
 	}
 
 	.uni-dialog-input {
 		flex: 1;
 		font-size: 14px;
+		border: 1px #eee solid;
+		height: 40px;
+		padding: 0 10px;
+		border-radius: 5px;
+		color: #555;
 	}
 
 	.uni-popup__success {
-		color: $uni-color-success;
+		color: #4cd964;
 	}
 
 	.uni-popup__warn {
-		color: $uni-color-warning;
+		color: #f0ad4e;
 	}
 
 	.uni-popup__error {
-		color: $uni-color-error;
+		color: #dd524d;
 	}
 
 	.uni-popup__info {

+ 43 - 16
components/uni-popup/uni-popup-message.vue → uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue

@@ -1,11 +1,15 @@
 <template>
-	<view class="uni-popup-message" :class="'uni-popup__'+[type]">
-		<text class="uni-popup-message-text" :class="'uni-popup__'+[type]+'-text'">{{message}}</text>
+	<view class="uni-popup-message">
+		<view class="uni-popup-message__box fixforpc-width" :class="'uni-popup__'+type">
+			<slot>
+				<text class="uni-popup-message-text" :class="'uni-popup__'+type+'-text'">{{message}}</text>
+			</slot>
+		</view>
 	</view>
 </template>
 
 <script>
-	
+	import popup from '../uni-popup/popup.js'
 	/**
 	 * PopUp 弹出层-消息提示
 	 * @description 弹出层-消息提示
@@ -18,9 +22,10 @@
 	 * @property {String} message 消息提示文字
 	 * @property {String} duration 显示时间,设置为 0 则不会自动关闭
 	 */
-	
+
 	export default {
-		name: 'UniPopupMessage',
+		name: 'uniPopupMessage',
+		mixins:[popup],
 		props: {
 			/**
 			 * 主题 success/warning/info/error	  默认 success
@@ -42,41 +47,63 @@
 			duration: {
 				type: Number,
 				default: 3000
+			},
+			maskShow:{
+				type:Boolean,
+				default:false
 			}
 		},
-		inject: ['popup'],
 		data() {
 			return {}
 		},
 		created() {
-			this.popup.childrenMsg = this
+			this.popup.maskShow = this.maskShow
+			this.popup.messageChild = this
 		},
 		methods: {
-			open() {
-				if (this.duration === 0) return
-				clearTimeout(this.popuptimer)
-				this.popuptimer = setTimeout(() => {
+			timerClose(){
+				if(this.duration === 0) return
+				clearTimeout(this.timer) 
+				this.timer = setTimeout(()=>{
 					this.popup.close()
-				}, this.duration)
-			},
-			close() {
-				clearTimeout(this.popuptimer)
+				},this.duration)
 			}
 		}
 	}
 </script>
-<style lang="scss" scoped>
+<style lang="scss" >
 	.uni-popup-message {
 		/* #ifndef APP-NVUE */
 		display: flex;
 		/* #endif */
 		flex-direction: row;
+		justify-content: center;
+	}
+
+	.uni-popup-message__box {
 		background-color: #e1f3d8;
 		padding: 10px 15px;
 		border-color: #eee;
 		border-style: solid;
 		border-width: 1px;
+		flex: 1;
 	}
+
+	@media screen and (min-width: 500px) {
+		.fixforpc-width {
+			margin-top: 20px;
+			border-radius: 4px;
+			flex: none;
+			min-width: 380px;
+			/* #ifndef APP-NVUE */
+			max-width: 50%;
+			/* #endif */
+			/* #ifdef APP-NVUE */
+			max-width: 500px;
+			/* #endif */
+		}
+	}
+
 	.uni-popup-message-text {
 		font-size: 14px;
 		padding: 0;

+ 187 - 0
uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue

@@ -0,0 +1,187 @@
+<template>
+	<view class="uni-popup-share">
+		<view class="uni-share-title"><text class="uni-share-title-text">{{shareTitleText}}</text></view>
+		<view class="uni-share-content">
+			<view class="uni-share-content-box">
+				<view class="uni-share-content-item" v-for="(item,index) in bottomData" :key="index" @click.stop="select(item,index)">
+					<image class="uni-share-image" :src="item.icon" mode="aspectFill"></image>
+					<text class="uni-share-text">{{item.text}}</text>
+				</view>
+
+			</view>
+		</view>
+		<view class="uni-share-button-box">
+			<button class="uni-share-button" @click="close">{{cancelText}}</button>
+		</view>
+	</view>
+</template>
+
+<script>
+	import popup from '../uni-popup/popup.js'
+	import {
+	initVueI18n
+	} from '@dcloudio/uni-i18n'
+	import messages from '../uni-popup/i18n/index.js'
+	const {	t	} = initVueI18n(messages)
+	export default {
+		name: 'UniPopupShare',
+		mixins:[popup],
+		emits:['select'],
+		props: {
+			title: {
+				type: String,
+				default: ''
+			},
+			beforeClose: {
+				type: Boolean,
+				default: false
+			}
+		},
+		data() {
+			return {
+				bottomData: [{
+						text: '微信',
+						icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/c2b17470-50be-11eb-b680-7980c8a877b8.png',
+						name: 'wx'
+					},
+					{
+						text: '支付宝',
+						icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/d684ae40-50be-11eb-8ff1-d5dcf8779628.png',
+						name: 'wx'
+					},
+					{
+						text: 'QQ',
+						icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/e7a79520-50be-11eb-b997-9918a5dda011.png',
+						name: 'qq'
+					},
+					{
+						text: '新浪',
+						icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/0dacdbe0-50bf-11eb-8ff1-d5dcf8779628.png',
+						name: 'sina'
+					},
+					// {
+					// 	text: '百度',
+					// 	icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/1ec6e920-50bf-11eb-8a36-ebb87efcf8c0.png',
+					// 	name: 'copy'
+					// },
+					// {
+					// 	text: '其他',
+					// 	icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/2e0fdfe0-50bf-11eb-b997-9918a5dda011.png',
+					// 	name: 'more'
+					// }
+				]
+			}
+		},
+		created() {},
+		computed: {
+			cancelText() {
+				return t("uni-popup.cancel")
+			},
+		shareTitleText() {
+				return this.title || t("uni-popup.shareTitle")
+			}
+		},
+		methods: {
+			/**
+			 * 选择内容
+			 */
+			select(item, index) {
+				this.$emit('select', {
+					item,
+					index
+				})
+				this.close()
+
+			},
+			/**
+			 * 关闭窗口
+			 */
+			close() {
+				if(this.beforeClose) return
+				this.popup.close()
+			}
+		}
+	}
+</script>
+<style lang="scss" >
+	.uni-popup-share {
+		background-color: #fff;
+		border-top-left-radius: 11px;
+		border-top-right-radius: 11px;
+	}
+	.uni-share-title {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		align-items: center;
+		justify-content: center;
+		height: 40px;
+	}
+	.uni-share-title-text {
+		font-size: 14px;
+		color: #666;
+	}
+	.uni-share-content {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		justify-content: center;
+		padding-top: 10px;
+	}
+
+	.uni-share-content-box {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		flex-wrap: wrap;
+		width: 360px;
+	}
+
+	.uni-share-content-item {
+		width: 90px;
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: column;
+		justify-content: center;
+		padding: 10px 0;
+		align-items: center;
+	}
+
+	.uni-share-content-item:active {
+		background-color: #f5f5f5;
+	}
+
+	.uni-share-image {
+		width: 30px;
+		height: 30px;
+	}
+
+	.uni-share-text {
+		margin-top: 10px;
+		font-size: 14px;
+		color: #3B4144;
+	}
+
+	.uni-share-button-box {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		padding: 10px 15px;
+	}
+
+	.uni-share-button {
+		flex: 1;
+		border-radius: 50px;
+		color: #666;
+		font-size: 16px;
+	}
+
+	.uni-share-button::after {
+		border-radius: 50px;
+	}
+</style>

+ 7 - 0
uni_modules/uni-popup/components/uni-popup/i18n/en.json

@@ -0,0 +1,7 @@
+{
+	"uni-popup.cancel": "cancel",
+	"uni-popup.ok": "ok",
+	"uni-popup.placeholder": "pleace enter",
+	"uni-popup.title": "Hint",
+	"uni-popup.shareTitle": "Share to"
+}

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

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

+ 7 - 0
uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json

@@ -0,0 +1,7 @@
+{
+	"uni-popup.cancel": "取消",
+	"uni-popup.ok": "确定",
+	"uni-popup.placeholder": "请输入",
+		"uni-popup.title": "提示",
+		"uni-popup.shareTitle": "分享到"
+}

+ 7 - 0
uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json

@@ -0,0 +1,7 @@
+{
+	"uni-popup.cancel": "取消",
+	"uni-popup.ok": "確定",
+	"uni-popup.placeholder": "請輸入",
+	"uni-popup.title": "提示",
+	"uni-popup.shareTitle": "分享到"
+}

+ 45 - 0
uni_modules/uni-popup/components/uni-popup/keypress.js

@@ -0,0 +1,45 @@
+// #ifdef H5
+export default {
+  name: 'Keypress',
+  props: {
+    disable: {
+      type: Boolean,
+      default: false
+    }
+  },
+  mounted () {
+    const keyNames = {
+      esc: ['Esc', 'Escape'],
+      tab: 'Tab',
+      enter: 'Enter',
+      space: [' ', 'Spacebar'],
+      up: ['Up', 'ArrowUp'],
+      left: ['Left', 'ArrowLeft'],
+      right: ['Right', 'ArrowRight'],
+      down: ['Down', 'ArrowDown'],
+      delete: ['Backspace', 'Delete', 'Del']
+    }
+    const listener = ($event) => {
+      if (this.disable) {
+        return
+      }
+      const keyName = Object.keys(keyNames).find(key => {
+        const keyName = $event.key
+        const value = keyNames[key]
+        return value === keyName || (Array.isArray(value) && value.includes(keyName))
+      })
+      if (keyName) {
+        // 避免和其他按键事件冲突
+        setTimeout(() => {
+          this.$emit(keyName, {})
+        }, 0)
+      }
+    }
+    document.addEventListener('keyup', listener)
+    // this.$once('hook:beforeDestroy', () => {
+    //   document.removeEventListener('keyup', listener)
+    // })
+  },
+	render: () => {}
+}
+// #endif

+ 26 - 0
uni_modules/uni-popup/components/uni-popup/popup.js

@@ -0,0 +1,26 @@
+
+export default {
+	data() {
+		return {
+			
+		}
+	},
+	created(){
+		this.popup = this.getParent()
+	},
+	methods:{
+		/**
+		 * 获取父元素实例
+		 */
+		getParent(name = 'uniPopup') {
+			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;
+		},
+	}
+}

+ 473 - 0
uni_modules/uni-popup/components/uni-popup/uni-popup.vue

@@ -0,0 +1,473 @@
+<template>
+	<view v-if="showPopup" class="uni-popup" :class="[popupstyle, isDesktop ? 'fixforpc-z-index' : '']">
+		<view @touchstart="touchstart">
+			<uni-transition key="1" v-if="maskShow" name="mask" mode-class="fade" :styles="maskClass"
+				:duration="duration" :show="showTrans" @click="onTap" />
+			<uni-transition key="2" :mode-class="ani" name="content" :styles="transClass" :duration="duration"
+				:show="showTrans" @click="onTap">
+				<view class="uni-popup__wrapper" :style="{ backgroundColor: bg }" :class="[popupstyle]" @click="clear">
+					<slot />
+				</view>
+			</uni-transition>
+		</view>
+		<!-- #ifdef H5 -->
+		<keypress v-if="maskShow" @esc="onTap" />
+		<!-- #endif -->
+	</view>
+</template>
+
+<script>
+	// #ifdef H5
+	import keypress from './keypress.js'
+	// #endif
+
+	/**
+	 * PopUp 弹出层
+	 * @description 弹出层组件,为了解决遮罩弹层的问题
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=329
+	 * @property {String} type = [top|center|bottom|left|right|message|dialog|share] 弹出方式
+	 * 	@value top 顶部弹出
+	 * 	@value center 中间弹出
+	 * 	@value bottom 底部弹出
+	 * 	@value left		左侧弹出
+	 * 	@value right  右侧弹出
+	 * 	@value message 消息提示
+	 * 	@value dialog 对话框
+	 * 	@value share 底部分享示例
+	 * @property {Boolean} animation = [true|false] 是否开启动画
+	 * @property {Boolean} maskClick = [true|false] 蒙版点击是否关闭弹窗(废弃)
+	 * @property {Boolean} isMaskClick = [true|false] 蒙版点击是否关闭弹窗
+	 * @property {String}  backgroundColor 主窗口背景色
+	 * @property {String}  maskBackgroundColor 蒙版颜色
+	 * @property {Boolean} safeArea		   是否适配底部安全区
+	 * @event {Function} change 打开关闭弹窗触发,e={show: false}
+	 * @event {Function} maskClick 点击遮罩触发
+	 */
+
+	export default {
+		name: 'uniPopup',
+		components: {
+			// #ifdef H5
+			keypress
+			// #endif
+		},
+		emits: ['change', 'maskClick'],
+		props: {
+			// 开启动画
+			animation: {
+				type: Boolean,
+				default: true
+			},
+			// 弹出层类型,可选值,top: 顶部弹出层;bottom:底部弹出层;center:全屏弹出层
+			// message: 消息提示 ; dialog : 对话框
+			type: {
+				type: String,
+				default: 'center'
+			},
+			// maskClick
+			isMaskClick: {
+				type: Boolean,
+				default: null
+			},
+			// TODO 2 个版本后废弃属性 ,使用 isMaskClick
+			maskClick: {
+				type: Boolean,
+				default: null
+			},
+			backgroundColor: {
+				type: String,
+				default: 'none'
+			},
+			safeArea: {
+				type: Boolean,
+				default: true
+			},
+			maskBackgroundColor: {
+				type: String,
+				default: 'rgba(0, 0, 0, 0.4)'
+			},
+		},
+
+		watch: {
+			/**
+			 * 监听type类型
+			 */
+			type: {
+				handler: function(type) {
+					if (!this.config[type]) return
+					this[this.config[type]](true)
+				},
+				immediate: true
+			},
+			isDesktop: {
+				handler: function(newVal) {
+					if (!this.config[newVal]) return
+					this[this.config[this.type]](true)
+				},
+				immediate: true
+			},
+			/**
+			 * 监听遮罩是否可点击
+			 * @param {Object} val
+			 */
+			maskClick: {
+				handler: function(val) {
+					this.mkclick = val
+				},
+				immediate: true
+			},
+			isMaskClick: {
+				handler: function(val) {
+					this.mkclick = val
+				},
+				immediate: true
+			},
+			// H5 下禁止底部滚动
+			showPopup(show) {
+				// #ifdef H5
+				// fix by mehaotian 处理 h5 滚动穿透的问题
+				document.getElementsByTagName('body')[0].style.overflow = show ? 'hidden' : 'visible'
+				// #endif
+			}
+		},
+		data() {
+			return {
+				duration: 300,
+				ani: [],
+				showPopup: false,
+				showTrans: false,
+				popupWidth: 0,
+				popupHeight: 0,
+				config: {
+					top: 'top',
+					bottom: 'bottom',
+					center: 'center',
+					left: 'left',
+					right: 'right',
+					message: 'top',
+					dialog: 'center',
+					share: 'bottom'
+				},
+				maskClass: {
+					position: 'fixed',
+					bottom: 0,
+					top: 0,
+					left: 0,
+					right: 0,
+					backgroundColor: 'rgba(0, 0, 0, 0.4)'
+				},
+				transClass: {
+					position: 'fixed',
+					left: 0,
+					right: 0
+				},
+				maskShow: true,
+				mkclick: true,
+				popupstyle: this.isDesktop ? 'fixforpc-top' : 'top'
+			}
+		},
+		computed: {
+			isDesktop() {
+				return this.popupWidth >= 500 && this.popupHeight >= 500
+			},
+			bg() {
+				if (this.backgroundColor === '' || this.backgroundColor === 'none') {
+					return 'transparent'
+				}
+				return this.backgroundColor
+			}
+		},
+		mounted() {
+			const fixSize = () => {
+				const {
+					windowWidth,
+					windowHeight,
+					windowTop,
+					safeArea,
+					screenHeight,
+					safeAreaInsets
+				} = uni.getSystemInfoSync()
+				this.popupWidth = windowWidth
+				this.popupHeight = windowHeight + (windowTop || 0)
+				// TODO fix by mehaotian 是否适配底部安全区 ,目前微信ios 、和 app ios 计算有差异,需要框架修复
+				if (safeArea && this.safeArea) {
+					// #ifdef MP-WEIXIN
+					this.safeAreaInsets = screenHeight - safeArea.bottom
+					// #endif
+					// #ifndef MP-WEIXIN
+					this.safeAreaInsets = safeAreaInsets.bottom
+					// #endif
+				} else {
+					this.safeAreaInsets = 0
+				}
+			}
+			fixSize()
+			// #ifdef H5
+			// window.addEventListener('resize', fixSize)
+			// this.$once('hook:beforeDestroy', () => {
+			// 	window.removeEventListener('resize', fixSize)
+			// })
+			// #endif
+		},
+		// #ifndef VUE3
+		// TODO vue2
+		destroyed() {
+			this.setH5Visible()
+		},
+		// #endif
+		// #ifdef VUE3
+		// TODO vue3
+		unmounted() {
+			this.setH5Visible()
+		},
+		// #endif
+		created() {
+			// this.mkclick =  this.isMaskClick || this.maskClick
+			if (this.isMaskClick === null && this.maskClick === null) {
+				this.mkclick = true
+			} else {
+				this.mkclick = this.isMaskClick !== null ? this.isMaskClick : this.maskClick
+			}
+			if (this.animation) {
+				this.duration = 300
+			} else {
+				this.duration = 0
+			}
+			// TODO 处理 message 组件生命周期异常的问题
+			this.messageChild = null
+			// TODO 解决头条冒泡的问题
+			this.clearPropagation = false
+			this.maskClass.backgroundColor = this.maskBackgroundColor
+		},
+		methods: {
+			setH5Visible() {
+				// #ifdef H5
+				// fix by mehaotian 处理 h5 滚动穿透的问题
+				document.getElementsByTagName('body')[0].style.overflow = 'visible'
+				// #endif
+			},
+			/**
+			 * 公用方法,不显示遮罩层
+			 */
+			closeMask() {
+				this.maskShow = false
+			},
+			/**
+			 * 公用方法,遮罩层禁止点击
+			 */
+			disableMask() {
+				this.mkclick = false
+			},
+			// TODO nvue 取消冒泡
+			clear(e) {
+				// #ifndef APP-NVUE
+				e.stopPropagation()
+				// #endif
+				this.clearPropagation = true
+			},
+
+			open(direction) {
+				// fix by mehaotian 处理快速打开关闭的情况
+				if (this.showPopup) {
+					return
+				}
+				let innerType = ['top', 'center', 'bottom', 'left', 'right', 'message', 'dialog', 'share']
+				if (!(direction && innerType.indexOf(direction) !== -1)) {
+					direction = this.type
+				}
+				if (!this.config[direction]) {
+					console.error('缺少类型:', direction)
+					return
+				}
+				this[this.config[direction]]()
+				this.$emit('change', {
+					show: true,
+					type: direction
+				})
+			},
+			close(type) {
+				this.showTrans = false
+				this.$emit('change', {
+					show: false,
+					type: this.type
+				})
+				clearTimeout(this.timer)
+				// // 自定义关闭事件
+				// this.customOpen && this.customClose()
+				this.timer = setTimeout(() => {
+					this.showPopup = false
+				}, 300)
+			},
+			// TODO 处理冒泡事件,头条的冒泡事件有问题 ,先这样兼容
+			touchstart() {
+				this.clearPropagation = false
+			},
+
+			onTap() {
+				if (this.clearPropagation) {
+					// fix by mehaotian 兼容 nvue
+					this.clearPropagation = false
+					return
+				}
+				this.$emit('maskClick')
+				if (!this.mkclick) return
+				this.close()
+			},
+			/**
+			 * 顶部弹出样式处理
+			 */
+			top(type) {
+				this.popupstyle = this.isDesktop ? 'fixforpc-top' : 'top'
+				this.ani = ['slide-top']
+				this.transClass = {
+					position: 'fixed',
+					left: 0,
+					right: 0,
+					backgroundColor: this.bg
+				}
+				// TODO 兼容 type 属性 ,后续会废弃
+				if (type) return
+				this.showPopup = true
+				this.showTrans = true
+				this.$nextTick(() => {
+					if (this.messageChild && this.type === 'message') {
+						this.messageChild.timerClose()
+					}
+				})
+			},
+			/**
+			 * 底部弹出样式处理
+			 */
+			bottom(type) {
+				this.popupstyle = 'bottom'
+				this.ani = ['slide-bottom']
+				this.transClass = {
+					position: 'fixed',
+					left: 0,
+					right: 0,
+					bottom: 0,
+					paddingBottom: this.safeAreaInsets + 'px',
+					backgroundColor: this.bg
+				}
+				// TODO 兼容 type 属性 ,后续会废弃
+				if (type) return
+				this.showPopup = true
+				this.showTrans = true
+			},
+			/**
+			 * 中间弹出样式处理
+			 */
+			center(type) {
+				this.popupstyle = 'center'
+				this.ani = ['zoom-out', 'fade']
+				this.transClass = {
+					position: 'fixed',
+					/* #ifndef APP-NVUE */
+					display: 'flex',
+					flexDirection: 'column',
+					/* #endif */
+					bottom: 0,
+					left: 0,
+					right: 0,
+					top: 0,
+					justifyContent: 'center',
+					alignItems: 'center'
+				}
+				// TODO 兼容 type 属性 ,后续会废弃
+				if (type) return
+				this.showPopup = true
+				this.showTrans = true
+			},
+			left(type) {
+				this.popupstyle = 'left'
+				this.ani = ['slide-left']
+				this.transClass = {
+					position: 'fixed',
+					left: 0,
+					bottom: 0,
+					top: 0,
+					backgroundColor: this.bg,
+					/* #ifndef APP-NVUE */
+					display: 'flex',
+					flexDirection: 'column'
+					/* #endif */
+				}
+				// TODO 兼容 type 属性 ,后续会废弃
+				if (type) return
+				this.showPopup = true
+				this.showTrans = true
+			},
+			right(type) {
+				this.popupstyle = 'right'
+				this.ani = ['slide-right']
+				this.transClass = {
+					position: 'fixed',
+					bottom: 0,
+					right: 0,
+					top: 0,
+					backgroundColor: this.bg,
+					/* #ifndef APP-NVUE */
+					display: 'flex',
+					flexDirection: 'column'
+					/* #endif */
+				}
+				// TODO 兼容 type 属性 ,后续会废弃
+				if (type) return
+				this.showPopup = true
+				this.showTrans = true
+			}
+		}
+	}
+</script>
+<style lang="scss">
+	.uni-popup {
+		position: fixed;
+		/* #ifndef APP-NVUE */
+		z-index: 99;
+
+		/* #endif */
+		&.top,
+		&.left,
+		&.right {
+			/* #ifdef H5 */
+			top: var(--window-top);
+			/* #endif */
+			/* #ifndef H5 */
+			top: 0;
+			/* #endif */
+		}
+
+		.uni-popup__wrapper {
+			/* #ifndef APP-NVUE */
+			display: block;
+			/* #endif */
+			position: relative;
+
+			/* iphonex 等安全区设置,底部安全区适配 */
+			/* #ifndef APP-NVUE */
+			// padding-bottom: constant(safe-area-inset-bottom);
+			// padding-bottom: env(safe-area-inset-bottom);
+			/* #endif */
+			&.left,
+			&.right {
+				/* #ifdef H5 */
+				padding-top: var(--window-top);
+				/* #endif */
+				/* #ifndef H5 */
+				padding-top: 0;
+				/* #endif */
+				flex: 1;
+			}
+		}
+	}
+
+	.fixforpc-z-index {
+		/* #ifndef APP-NVUE */
+		z-index: 999;
+		/* #endif */
+	}
+
+	.fixforpc-top {
+		top: 0;
+	}
+</style>

+ 87 - 0
uni_modules/uni-popup/package.json

@@ -0,0 +1,87 @@
+{
+	"id": "uni-popup",
+	"displayName": "uni-popup 弹出层",
+	"version": "1.8.3",
+	"description": " Popup 组件,提供常用的弹层",
+	"keywords": [
+        "uni-ui",
+        "弹出层",
+        "弹窗",
+        "popup",
+        "弹框"
+    ],
+	"repository": "https://github.com/dcloudio/uni-ui",
+	"engines": {
+		"HBuilderX": ""
+	},
+	"directories": {
+		"example": "../../temps/example_temps"
+	},
+    "dcloudext": {
+        "sale": {
+			"regular": {
+				"price": "0.00"
+			},
+			"sourcecode": {
+				"price": "0.00"
+			}
+		},
+		"contact": {
+			"qq": ""
+		},
+		"declaration": {
+			"ads": "无",
+			"data": "无",
+			"permissions": "无"
+		},
+        "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+        "type": "component-vue"
+	},
+	"uni_modules": {
+		"dependencies": [
+			"uni-scss",
+			"uni-transition"
+		],
+		"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"
+                }
+			}
+		}
+	}
+}

+ 17 - 0
uni_modules/uni-popup/readme.md

@@ -0,0 +1,17 @@
+
+
+## Popup 弹出层
+> **组件名:uni-popup**
+> 代码块: `uPopup`
+> 关联组件:`uni-transition`
+
+
+弹出层组件,在应用中弹出一个消息提示窗口、提示框等
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-popup)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 
+
+
+
+
+

+ 8 - 0
uni_modules/uni-scss/changelog.md

@@ -0,0 +1,8 @@
+## 1.0.3(2022-01-21)
+- 优化 组件示例
+## 1.0.2(2021-11-22)
+- 修复 / 符号在 vue 不同版本兼容问题引起的报错问题
+## 1.0.1(2021-11-22)
+- 修复 vue3中scss语法兼容问题
+## 1.0.0(2021-11-18)
+- init

+ 1 - 0
uni_modules/uni-scss/index.scss

@@ -0,0 +1 @@
+@import './styles/index.scss';

+ 82 - 0
uni_modules/uni-scss/package.json

@@ -0,0 +1,82 @@
+{
+  "id": "uni-scss",
+  "displayName": "uni-scss 辅助样式",
+  "version": "1.0.3",
+  "description": "uni-sass是uni-ui提供的一套全局样式 ,通过一些简单的类名和sass变量,实现简单的页面布局操作,比如颜色、边距、圆角等。",
+  "keywords": [
+    "uni-scss",
+    "uni-ui",
+    "辅助样式"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": "^3.1.0"
+  },
+  "dcloudext": {
+    "category": [
+        "JS SDK",
+        "通用 SDK"
+    ],
+    "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": [],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "u"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+          "QQ": "y"
+        },
+        "快应用": {
+          "华为": "n",
+          "联盟": "n"
+        },
+        "Vue": {
+            "vue2": "y",
+            "vue3": "y"
+        }
+      }
+    }
+  }
+}

+ 4 - 0
uni_modules/uni-scss/readme.md

@@ -0,0 +1,4 @@
+`uni-sass` 是 `uni-ui`提供的一套全局样式 ,通过一些简单的类名和`sass`变量,实现简单的页面布局操作,比如颜色、边距、圆角等。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-sass)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 

+ 7 - 0
uni_modules/uni-scss/styles/index.scss

@@ -0,0 +1,7 @@
+@import './setting/_variables.scss';
+@import './setting/_border.scss';
+@import './setting/_color.scss';
+@import './setting/_space.scss';
+@import './setting/_radius.scss';
+@import './setting/_text.scss';
+@import './setting/_styles.scss';

+ 3 - 0
uni_modules/uni-scss/styles/setting/_border.scss

@@ -0,0 +1,3 @@
+.uni-border {
+	border: 1px $uni-border-1 solid;
+}

+ 66 - 0
uni_modules/uni-scss/styles/setting/_color.scss

@@ -0,0 +1,66 @@
+
+// TODO 暂时不需要 class ,需要用户使用变量实现 ,如果使用类名其实并不推荐
+// @mixin get-styles($k,$c) {
+// 	@if $k == size or $k == weight{
+// 		font-#{$k}:#{$c}
+// 	}@else{
+// 		#{$k}:#{$c}
+// 	}
+// }
+$uni-ui-color:(
+	// 主色
+	primary: $uni-primary,
+	primary-disable: $uni-primary-disable,
+	primary-light: $uni-primary-light,
+	// 辅助色
+	success: $uni-success,
+	success-disable: $uni-success-disable,
+	success-light: $uni-success-light,
+	warning: $uni-warning,
+	warning-disable: $uni-warning-disable,
+	warning-light: $uni-warning-light,
+	error: $uni-error,
+	error-disable: $uni-error-disable,
+	error-light: $uni-error-light,
+	info: $uni-info,
+	info-disable: $uni-info-disable,
+	info-light: $uni-info-light,
+	// 中性色
+	main-color: $uni-main-color,
+	base-color: $uni-base-color,
+	secondary-color: $uni-secondary-color,
+	extra-color: $uni-extra-color,
+	// 背景色
+	bg-color: $uni-bg-color,
+	// 边框颜色
+	border-1: $uni-border-1,
+	border-2: $uni-border-2,
+	border-3: $uni-border-3,
+	border-4: $uni-border-4,
+	// 黑色
+	black:$uni-black,
+	// 白色
+	white:$uni-white,
+	// 透明
+	transparent:$uni-transparent
+) !default;
+@each $key, $child in $uni-ui-color {
+	.uni-#{"" + $key} {
+		color: $child;
+	}
+	.uni-#{"" + $key}-bg {
+		background-color: $child;
+	}
+}
+.uni-shadow-sm {
+	box-shadow: $uni-shadow-sm;
+}
+.uni-shadow-base {
+	box-shadow: $uni-shadow-base;
+}
+.uni-shadow-lg {
+	box-shadow: $uni-shadow-lg;
+}
+.uni-mask {
+	background-color:$uni-mask;
+}

+ 55 - 0
uni_modules/uni-scss/styles/setting/_radius.scss

@@ -0,0 +1,55 @@
+@mixin radius($r,$d:null ,$important: false){
+  $radius-value:map-get($uni-radius, $r) if($important, !important, null);
+  // Key exists within the $uni-radius variable
+  @if (map-has-key($uni-radius, $r) and  $d){
+		@if $d == t {
+				border-top-left-radius:$radius-value;
+				border-top-right-radius:$radius-value;
+		}@else if $d == r {
+				border-top-right-radius:$radius-value;
+				border-bottom-right-radius:$radius-value;
+		}@else if $d == b {
+				border-bottom-left-radius:$radius-value;
+				border-bottom-right-radius:$radius-value;
+		}@else if $d == l {
+				border-top-left-radius:$radius-value;
+				border-bottom-left-radius:$radius-value;
+		}@else if $d == tl {
+				border-top-left-radius:$radius-value;
+		}@else if $d == tr {
+				border-top-right-radius:$radius-value;
+		}@else if $d == br {
+				border-bottom-right-radius:$radius-value;
+		}@else if $d == bl {
+				border-bottom-left-radius:$radius-value;
+		}
+  }@else{
+		border-radius:$radius-value;
+  }
+}
+
+@each $key, $child in $uni-radius {
+	@if($key){
+		.uni-radius-#{"" + $key} {
+				@include radius($key)
+		}
+	}@else{
+		.uni-radius {
+				@include radius($key)
+		}
+	}
+}
+
+@each $direction in t, r, b, l,tl, tr, br, bl {
+	@each $key, $child in $uni-radius {
+		@if($key){
+			.uni-radius-#{"" + $direction}-#{"" + $key} {
+				@include radius($key,$direction,false)
+			}
+		}@else{
+			.uni-radius-#{$direction} {
+				@include radius($key,$direction,false)
+			}
+		}
+	}
+}

+ 56 - 0
uni_modules/uni-scss/styles/setting/_space.scss

@@ -0,0 +1,56 @@
+
+@mixin fn($space,$direction,$size,$n) {
+	@if $n {
+		#{$space}-#{$direction}: #{$size*$uni-space-root}px
+	} @else {
+		 #{$space}-#{$direction}: #{-$size*$uni-space-root}px
+	}
+}
+@mixin get-styles($direction,$i,$space,$n){
+	@if $direction == t {
+		@include fn($space, top,$i,$n);
+	} 
+	@if $direction == r {
+		@include fn($space, right,$i,$n);
+	} 
+	@if $direction == b {
+		@include fn($space, bottom,$i,$n);
+	} 
+	@if $direction == l {
+	 @include fn($space, left,$i,$n);
+	} 
+	@if $direction == x {
+		@include fn($space, left,$i,$n);
+		@include fn($space, right,$i,$n);
+	} 
+	@if $direction == y {
+		@include fn($space, top,$i,$n);
+		@include fn($space, bottom,$i,$n);
+	} 
+	@if $direction == a {
+		@if $n {
+			#{$space}:#{$i*$uni-space-root}px;
+		} @else {
+			#{$space}:#{-$i*$uni-space-root}px;
+		}
+	} 
+}
+
+@each $orientation in m,p {
+	$space: margin;
+	@if $orientation == m {
+		$space: margin;
+	} @else {
+		$space: padding;
+	}
+	@for $i from 0 through 16 {
+		@each $direction in t, r, b, l, x, y, a {
+			.uni-#{$orientation}#{$direction}-#{$i} { 
+				@include  get-styles($direction,$i,$space,true);
+			} 
+			.uni-#{$orientation}#{$direction}-n#{$i} { 
+				@include  get-styles($direction,$i,$space,false);
+			}
+		}
+	}
+}

+ 167 - 0
uni_modules/uni-scss/styles/setting/_styles.scss

@@ -0,0 +1,167 @@
+/* #ifndef APP-NVUE */
+
+$-color-white:#fff;
+$-color-black:#000;
+@mixin base-style($color) {
+	color: #fff;
+	background-color: $color;
+	border-color: mix($-color-black, $color, 8%);
+	&:not([hover-class]):active {
+		background: mix($-color-black, $color, 10%);
+		border-color: mix($-color-black, $color, 20%);
+		color: $-color-white;
+		outline: none;
+	}
+}
+@mixin is-color($color) {
+	@include base-style($color);
+	&[loading] {
+		@include base-style($color);
+		&::before {
+			margin-right:5px;
+		}
+	}
+	&[disabled] {
+	  &,
+		&[loading],
+	  &:not([hover-class]):active {
+	    color: $-color-white;
+			border-color: mix(darken($color,10%), $-color-white);
+	    background-color: mix($color, $-color-white);
+	  }
+	}
+
+}
+@mixin base-plain-style($color) {
+	color:$color;
+	background-color: mix($-color-white, $color, 90%);
+	border-color: mix($-color-white, $color, 70%);
+	&:not([hover-class]):active {
+	  background: mix($-color-white, $color, 80%);
+	  color: $color;
+	  outline: none;
+		border-color: mix($-color-white, $color, 50%);
+	}
+}
+@mixin is-plain($color){
+	&[plain] {
+		@include base-plain-style($color);
+		&[loading] {
+			@include base-plain-style($color);
+			&::before {
+				margin-right:5px;
+			}
+		}
+		&[disabled] {
+		  &,
+		  &:active {
+		    color: mix($-color-white, $color, 40%);
+		    background-color: mix($-color-white, $color, 90%);
+				border-color: mix($-color-white, $color, 80%);
+		  }
+		}
+	}
+}
+
+
+.uni-btn {
+	margin: 5px;
+	color: #393939;
+	border:1px solid #ccc;
+	font-size: 16px;
+	font-weight: 200;
+	background-color: #F9F9F9;
+	// TODO 暂时处理边框隐藏一边的问题
+	overflow: visible;
+	&::after{
+		border: none;
+	}
+
+	&:not([type]),&[type=default] {
+		color: #999;
+		&[loading] {
+			background: none;
+			&::before {
+				margin-right:5px;
+			}
+		}
+
+
+
+		&[disabled]{
+			color: mix($-color-white, #999, 60%);
+		  &,
+			&[loading],
+		  &:active {
+				color: mix($-color-white, #999, 60%);
+		    background-color: mix($-color-white,$-color-black , 98%);
+				border-color: mix($-color-white,  #999, 85%);
+		  }
+		}
+
+		&[plain] {
+			color: #999;
+			background: none;
+			border-color: $uni-border-1;
+			&:not([hover-class]):active {
+				background: none;
+			  color: mix($-color-white, $-color-black, 80%);
+				border-color: mix($-color-white, $-color-black, 90%);
+			  outline: none;
+			}
+			&[disabled]{
+			  &,
+				&[loading],
+			  &:active {
+			    background: none;
+					color: mix($-color-white, #999, 60%);
+					border-color: mix($-color-white,  #999, 85%);
+			  }
+			}
+		}
+	}
+
+	&:not([hover-class]):active {
+	  color: mix($-color-white, $-color-black, 50%);
+	}
+
+	&[size=mini] {
+		font-size: 16px;
+		font-weight: 200;
+		border-radius: 8px;
+	}
+
+
+
+	&.uni-btn-small {
+		font-size: 14px;
+	}
+	&.uni-btn-mini {
+		font-size: 12px;
+	}
+
+	&.uni-btn-radius {
+		border-radius: 999px;
+	}
+	&[type=primary] {
+		@include is-color($uni-primary);
+		@include is-plain($uni-primary)
+	}
+	&[type=success] {
+		@include is-color($uni-success);
+		@include is-plain($uni-success)
+	}
+	&[type=error] {
+		@include is-color($uni-error);
+		@include is-plain($uni-error)
+	}
+	&[type=warning] {
+		@include is-color($uni-warning);
+		@include is-plain($uni-warning)
+	}
+	&[type=info] {
+		@include is-color($uni-info);
+		@include is-plain($uni-info)
+	}
+}
+/* #endif */

+ 24 - 0
uni_modules/uni-scss/styles/setting/_text.scss

@@ -0,0 +1,24 @@
+@mixin get-styles($k,$c) {
+	@if $k == size or $k == weight{
+		font-#{$k}:#{$c}
+	}@else{
+		#{$k}:#{$c}
+	}
+}
+
+@each $key, $child in $uni-headings {
+	/* #ifndef APP-NVUE */
+	.uni-#{$key} {
+		@each $k, $c in $child {
+			@include get-styles($k,$c)
+		}
+	}
+	/* #endif */
+	/* #ifdef APP-NVUE */
+	.container .uni-#{$key} {
+		@each $k, $c in $child {
+			@include get-styles($k,$c)
+		}
+	}
+	/* #endif */
+}

+ 146 - 0
uni_modules/uni-scss/styles/setting/_variables.scss

@@ -0,0 +1,146 @@
+// @use "sass:math";
+@import  '../tools/functions.scss';
+// 间距基础倍数
+$uni-space-root: 2 !default;
+// 边框半径默认值
+$uni-radius-root:5px !default;
+$uni-radius: () !default;
+// 边框半径断点
+$uni-radius: map-deep-merge(
+  (
+    0: 0,
+		// TODO 当前版本暂时不支持 sm 属性
+    // 'sm': math.div($uni-radius-root, 2),
+    null: $uni-radius-root,
+    'lg': $uni-radius-root * 2,
+    'xl': $uni-radius-root * 6,
+    'pill': 9999px,
+    'circle': 50%
+  ),
+  $uni-radius
+);
+// 字体家族
+$body-font-family: 'Roboto', sans-serif !default;
+// 文本
+$heading-font-family: $body-font-family !default;
+$uni-headings: () !default;
+$letterSpacing: -0.01562em;
+$uni-headings: map-deep-merge(
+  (
+    'h1': (
+      size: 32px,
+			weight: 300,
+			line-height: 50px,
+			// letter-spacing:-0.01562em
+    ),
+    'h2': (
+      size: 28px,
+      weight: 300,
+      line-height: 40px,
+      // letter-spacing: -0.00833em
+    ),
+    'h3': (
+      size: 24px,
+      weight: 400,
+      line-height: 32px,
+      // letter-spacing: normal
+    ),
+    'h4': (
+      size: 20px,
+      weight: 400,
+      line-height: 30px,
+      // letter-spacing: 0.00735em
+    ),
+    'h5': (
+      size: 16px,
+      weight: 400,
+      line-height: 24px,
+      // letter-spacing: normal
+    ),
+    'h6': (
+      size: 14px,
+      weight: 500,
+      line-height: 18px,
+      // letter-spacing: 0.0125em
+    ),
+    'subtitle': (
+      size: 12px,
+      weight: 400,
+      line-height: 20px,
+      // letter-spacing: 0.00937em
+    ),
+    'body': (
+      font-size: 14px,
+			font-weight: 400,
+			line-height: 22px,
+			// letter-spacing: 0.03125em
+    ),
+    'caption': (
+      'size': 12px,
+      'weight': 400,
+      'line-height': 20px,
+      // 'letter-spacing': 0.03333em,
+      // 'text-transform': false
+    )
+  ),
+  $uni-headings
+);
+
+
+
+// 主色
+$uni-primary: #2979ff !default;
+$uni-primary-disable:lighten($uni-primary,20%) !default;
+$uni-primary-light: lighten($uni-primary,25%) !default;
+
+// 辅助色
+// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。
+$uni-success: #18bc37 !default;
+$uni-success-disable:lighten($uni-success,20%) !default;
+$uni-success-light: lighten($uni-success,25%) !default;
+
+$uni-warning: #f3a73f !default;
+$uni-warning-disable:lighten($uni-warning,20%) !default;
+$uni-warning-light: lighten($uni-warning,25%) !default;
+
+$uni-error: #e43d33 !default;
+$uni-error-disable:lighten($uni-error,20%) !default;
+$uni-error-light: lighten($uni-error,25%) !default;
+
+$uni-info: #8f939c !default;
+$uni-info-disable:lighten($uni-info,20%) !default;
+$uni-info-light: lighten($uni-info,25%) !default;
+
+// 中性色
+// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。
+$uni-main-color: #3a3a3a !default; 			// 主要文字
+$uni-base-color: #6a6a6a !default;			// 常规文字
+$uni-secondary-color: #909399 !default;	// 次要文字
+$uni-extra-color: #c7c7c7 !default;			// 辅助说明
+
+// 边框颜色
+$uni-border-1: #F0F0F0 !default;
+$uni-border-2: #EDEDED !default;
+$uni-border-3: #DCDCDC !default;
+$uni-border-4: #B9B9B9 !default;
+
+// 常规色
+$uni-black: #000000 !default;
+$uni-white: #ffffff !default;
+$uni-transparent: rgba($color: #000000, $alpha: 0) !default;
+
+// 背景色
+$uni-bg-color: #f7f7f7 !default;
+
+/* 水平间距 */
+$uni-spacing-sm: 8px !default;
+$uni-spacing-base: 15px !default;
+$uni-spacing-lg: 30px !default;
+
+// 阴影
+$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5) !default;
+$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2) !default;
+$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5) !default;
+
+// 蒙版
+$uni-mask: rgba($color: #000000, $alpha: 0.4) !default;

+ 19 - 0
uni_modules/uni-scss/styles/tools/functions.scss

@@ -0,0 +1,19 @@
+// 合并 map
+@function map-deep-merge($parent-map, $child-map){
+	$result: $parent-map;
+	@each $key, $child in $child-map {
+		$parent-has-key: map-has-key($result, $key);
+		$parent-value: map-get($result, $key);
+		$parent-type: type-of($parent-value);
+		$child-type: type-of($child);
+		$parent-is-map: $parent-type == map;
+		$child-is-map: $child-type == map;
+			
+		@if (not $parent-has-key) or ($parent-type != $child-type) or (not ($parent-is-map and $child-is-map)){
+			$result: map-merge($result, ( $key: $child ));
+		}@else {
+			$result: map-merge($result, ( $key: map-deep-merge($parent-value, $child) ));
+		}
+	}
+	@return $result;
+};

+ 31 - 0
uni_modules/uni-scss/theme.scss

@@ -0,0 +1,31 @@
+// 间距基础倍数
+$uni-space-root: 2;
+// 边框半径默认值
+$uni-radius-root:5px;
+// 主色
+$uni-primary: #2979ff;
+// 辅助色
+$uni-success: #4cd964;
+// 警告色
+$uni-warning: #f0ad4e;
+// 错误色
+$uni-error: #dd524d;
+// 描述色
+$uni-info: #909399;
+// 中性色
+$uni-main-color: #303133;
+$uni-base-color: #606266;
+$uni-secondary-color: #909399;
+$uni-extra-color: #C0C4CC;
+// 背景色
+$uni-bg-color: #f5f5f5;
+// 边框颜色
+$uni-border-1: #DCDFE6;
+$uni-border-2: #E4E7ED;
+$uni-border-3: #EBEEF5;
+$uni-border-4: #F2F6FC;
+
+// 常规色
+$uni-black: #000000;
+$uni-white: #ffffff;
+$uni-transparent: rgba($color: #000000, $alpha: 0);

+ 62 - 0
uni_modules/uni-scss/variables.scss

@@ -0,0 +1,62 @@
+@import './styles/setting/_variables.scss';
+// 间距基础倍数
+$uni-space-root: 2;
+// 边框半径默认值
+$uni-radius-root:5px;
+
+// 主色
+$uni-primary: #2979ff;
+$uni-primary-disable:mix(#fff,$uni-primary,50%);
+$uni-primary-light: mix(#fff,$uni-primary,80%);
+
+// 辅助色
+// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。
+$uni-success: #18bc37;
+$uni-success-disable:mix(#fff,$uni-success,50%);
+$uni-success-light: mix(#fff,$uni-success,80%);
+
+$uni-warning: #f3a73f;
+$uni-warning-disable:mix(#fff,$uni-warning,50%);
+$uni-warning-light: mix(#fff,$uni-warning,80%);
+
+$uni-error: #e43d33;
+$uni-error-disable:mix(#fff,$uni-error,50%);
+$uni-error-light: mix(#fff,$uni-error,80%);
+
+$uni-info: #8f939c;
+$uni-info-disable:mix(#fff,$uni-info,50%);
+$uni-info-light: mix(#fff,$uni-info,80%);
+
+// 中性色
+// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。
+$uni-main-color: #3a3a3a; 			// 主要文字
+$uni-base-color: #6a6a6a;			// 常规文字
+$uni-secondary-color: #909399;	// 次要文字
+$uni-extra-color: #c7c7c7;			// 辅助说明
+
+// 边框颜色
+$uni-border-1: #F0F0F0;
+$uni-border-2: #EDEDED;
+$uni-border-3: #DCDCDC;
+$uni-border-4: #B9B9B9;
+
+// 常规色
+$uni-black: #000000;
+$uni-white: #ffffff;
+$uni-transparent: rgba($color: #000000, $alpha: 0);
+
+// 背景色
+$uni-bg-color: #f7f7f7;
+
+/* 水平间距 */
+$uni-spacing-sm: 8px;
+$uni-spacing-base: 15px;
+$uni-spacing-lg: 30px;
+
+// 阴影
+$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5);
+$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2);
+$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5);
+
+// 蒙版
+$uni-mask: rgba($color: #000000, $alpha: 0.4);

+ 22 - 0
uni_modules/uni-transition/changelog.md

@@ -0,0 +1,22 @@
+## 1.3.2(2023-05-04)
+- 修复 NVUE 平台报错的问题
+## 1.3.1(2021-11-23)
+- 修复 init 方法初始化问题
+## 1.3.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-transition](https://uniapp.dcloud.io/component/uniui/uni-transition)
+## 1.2.1(2021-09-27)
+- 修复 init 方法不生效的 Bug
+## 1.2.0(2021-07-30)
+- 组件兼容 vue3,如何创建 vue3 项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.1(2021-05-12)
+- 新增 示例地址
+- 修复 示例项目缺少组件的 Bug
+## 1.1.0(2021-04-22)
+- 新增 通过方法自定义动画
+- 新增 custom-class 非 NVUE 平台支持自定义 class 定制样式
+- 优化 动画触发逻辑,使动画更流畅
+- 优化 支持单独的动画类型
+- 优化 文档示例
+## 1.0.2(2021-02-05)
+- 调整为 uni_modules 目录规范

+ 131 - 0
uni_modules/uni-transition/components/uni-transition/createAnimation.js

@@ -0,0 +1,131 @@
+// const defaultOption = {
+// 	duration: 300,
+// 	timingFunction: 'linear',
+// 	delay: 0,
+// 	transformOrigin: '50% 50% 0'
+// }
+// #ifdef APP-NVUE
+const nvueAnimation = uni.requireNativePlugin('animation')
+// #endif
+class MPAnimation {
+	constructor(options, _this) {
+		this.options = options
+		// 在iOS10+QQ小程序平台下,传给原生的对象一定是个普通对象而不是Proxy对象,否则会报parameter should be Object instead of ProxyObject的错误
+		this.animation = uni.createAnimation({
+			...options
+		})
+		this.currentStepAnimates = {}
+		this.next = 0
+		this.$ = _this
+
+	}
+
+	_nvuePushAnimates(type, args) {
+		let aniObj = this.currentStepAnimates[this.next]
+		let styles = {}
+		if (!aniObj) {
+			styles = {
+				styles: {},
+				config: {}
+			}
+		} else {
+			styles = aniObj
+		}
+		if (animateTypes1.includes(type)) {
+			if (!styles.styles.transform) {
+				styles.styles.transform = ''
+			}
+			let unit = ''
+			if(type === 'rotate'){
+				unit = 'deg'
+			}
+			styles.styles.transform += `${type}(${args+unit}) `
+		} else {
+			styles.styles[type] = `${args}`
+		}
+		this.currentStepAnimates[this.next] = styles
+	}
+	_animateRun(styles = {}, config = {}) {
+		let ref = this.$.$refs['ani'].ref
+		if (!ref) return
+		return new Promise((resolve, reject) => {
+			nvueAnimation.transition(ref, {
+				styles,
+				...config
+			}, res => {
+				resolve()
+			})
+		})
+	}
+
+	_nvueNextAnimate(animates, step = 0, fn) {
+		let obj = animates[step]
+		if (obj) {
+			let {
+				styles,
+				config
+			} = obj
+			this._animateRun(styles, config).then(() => {
+				step += 1
+				this._nvueNextAnimate(animates, step, fn)
+			})
+		} else {
+			this.currentStepAnimates = {}
+			typeof fn === 'function' && fn()
+			this.isEnd = true
+		}
+	}
+
+	step(config = {}) {
+		// #ifndef APP-NVUE
+		this.animation.step(config)
+		// #endif
+		// #ifdef APP-NVUE
+		this.currentStepAnimates[this.next].config = Object.assign({}, this.options, config)
+		this.currentStepAnimates[this.next].styles.transformOrigin = this.currentStepAnimates[this.next].config.transformOrigin
+		this.next++
+		// #endif
+		return this
+	}
+
+	run(fn) {
+		// #ifndef APP-NVUE
+		this.$.animationData = this.animation.export()
+		this.$.timer = setTimeout(() => {
+			typeof fn === 'function' && fn()
+		}, this.$.durationTime)
+		// #endif
+		// #ifdef APP-NVUE
+		this.isEnd = false
+		let ref = this.$.$refs['ani'] && this.$.$refs['ani'].ref
+		if(!ref) return
+		this._nvueNextAnimate(this.currentStepAnimates, 0, fn)
+		this.next = 0
+		// #endif
+	}
+}
+
+
+const animateTypes1 = ['matrix', 'matrix3d', 'rotate', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scale3d',
+	'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'translate', 'translate3d', 'translateX', 'translateY',
+	'translateZ'
+]
+const animateTypes2 = ['opacity', 'backgroundColor']
+const animateTypes3 = ['width', 'height', 'left', 'right', 'top', 'bottom']
+animateTypes1.concat(animateTypes2, animateTypes3).forEach(type => {
+	MPAnimation.prototype[type] = function(...args) {
+		// #ifndef APP-NVUE
+		this.animation[type](...args)
+		// #endif
+		// #ifdef APP-NVUE
+		this._nvuePushAnimates(type, args)
+		// #endif
+		return this
+	}
+})
+
+export function createAnimation(option, _this) {
+	if(!_this) return
+	clearTimeout(_this.timer)
+	return new MPAnimation(option, _this)
+}

+ 286 - 0
uni_modules/uni-transition/components/uni-transition/uni-transition.vue

@@ -0,0 +1,286 @@
+<template>
+  <!-- #ifndef APP-NVUE -->
+  <view v-show="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick"><slot></slot></view>
+  <!-- #endif -->
+  <!-- #ifdef APP-NVUE -->
+  <view v-if="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick"><slot></slot></view>
+  <!-- #endif -->
+</template>
+
+<script>
+import { createAnimation } from './createAnimation'
+
+/**
+ * Transition 过渡动画
+ * @description 简单过渡动画组件
+ * @tutorial https://ext.dcloud.net.cn/plugin?id=985
+ * @property {Boolean} show = [false|true] 控制组件显示或隐藏
+ * @property {Array|String} modeClass = [fade|slide-top|slide-right|slide-bottom|slide-left|zoom-in|zoom-out] 过渡动画类型
+ *  @value fade 渐隐渐出过渡
+ *  @value slide-top 由上至下过渡
+ *  @value slide-right 由右至左过渡
+ *  @value slide-bottom 由下至上过渡
+ *  @value slide-left 由左至右过渡
+ *  @value zoom-in 由小到大过渡
+ *  @value zoom-out 由大到小过渡
+ * @property {Number} duration 过渡动画持续时间
+ * @property {Object} styles 组件样式,同 css 样式,注意带’-‘连接符的属性需要使用小驼峰写法如:`backgroundColor:red`
+ */
+export default {
+	name: 'uniTransition',
+	emits:['click','change'],
+	props: {
+		show: {
+			type: Boolean,
+			default: false
+		},
+		modeClass: {
+			type: [Array, String],
+			default() {
+				return 'fade'
+			}
+		},
+		duration: {
+			type: Number,
+			default: 300
+		},
+		styles: {
+			type: Object,
+			default() {
+				return {}
+			}
+		},
+		customClass:{
+			type: String,
+			default: ''
+		},
+		onceRender:{
+			type:Boolean,
+			default:false
+		},
+	},
+	data() {
+		return {
+			isShow: false,
+			transform: '',
+			opacity: 1,
+			animationData: {},
+			durationTime: 300,
+			config: {}
+		}
+	},
+	watch: {
+		show: {
+			handler(newVal) {
+				if (newVal) {
+					this.open()
+				} else {
+					// 避免上来就执行 close,导致动画错乱
+					if (this.isShow) {
+						this.close()
+					}
+				}
+			},
+			immediate: true
+		}
+	},
+	computed: {
+		// 生成样式数据
+		stylesObject() {
+			let styles = {
+				...this.styles,
+				'transition-duration': this.duration / 1000 + 's'
+			}
+			let transform = ''
+			for (let i in styles) {
+				let line = this.toLine(i)
+				transform += line + ':' + styles[i] + ';'
+			}
+			return transform
+		},
+		// 初始化动画条件
+		transformStyles() {
+			return 'transform:' + this.transform + ';' + 'opacity:' + this.opacity + ';' + this.stylesObject
+		}
+	},
+	created() {
+		// 动画默认配置
+		this.config = {
+			duration: this.duration,
+			timingFunction: 'ease',
+			transformOrigin: '50% 50%',
+			delay: 0
+		}
+		this.durationTime = this.duration
+	},
+	methods: {
+		/**
+		 *  ref 触发 初始化动画
+		 */
+		init(obj = {}) {
+			if (obj.duration) {
+				this.durationTime = obj.duration
+			}
+			this.animation = createAnimation(Object.assign(this.config, obj),this)
+		},
+		/**
+		 * 点击组件触发回调
+		 */
+		onClick() {
+			this.$emit('click', {
+				detail: this.isShow
+			})
+		},
+		/**
+		 * ref 触发 动画分组
+		 * @param {Object} obj
+		 */
+		step(obj, config = {}) {
+			if (!this.animation) return
+			for (let i in obj) {
+				try {
+					if(typeof obj[i] === 'object'){
+						this.animation[i](...obj[i])
+					}else{
+						this.animation[i](obj[i])
+					}
+				} catch (e) {
+					console.error(`方法 ${i} 不存在`)
+				}
+			}
+			this.animation.step(config)
+			return this
+		},
+		/**
+		 *  ref 触发 执行动画
+		 */
+		run(fn) {
+			if (!this.animation) return
+			this.animation.run(fn)
+		},
+		// 开始过度动画
+		open() {
+			clearTimeout(this.timer)
+			this.transform = ''
+			this.isShow = true
+			let { opacity, transform } = this.styleInit(false)
+			if (typeof opacity !== 'undefined') {
+				this.opacity = opacity
+			}
+			this.transform = transform
+			// 确保动态样式已经生效后,执行动画,如果不加 nextTick ,会导致 wx 动画执行异常
+			this.$nextTick(() => {
+				// TODO 定时器保证动画完全执行,目前有些问题,后面会取消定时器
+				this.timer = setTimeout(() => {
+					this.animation = createAnimation(this.config, this)
+					this.tranfromInit(false).step()
+					this.animation.run()
+					this.$emit('change', {
+						detail: this.isShow
+					})
+				}, 20)
+			})
+		},
+		// 关闭过度动画
+		close(type) {
+			if (!this.animation) return
+			this.tranfromInit(true)
+				.step()
+				.run(() => {
+					this.isShow = false
+					this.animationData = null
+					this.animation = null
+					let { opacity, transform } = this.styleInit(false)
+					this.opacity = opacity || 1
+					this.transform = transform
+					this.$emit('change', {
+						detail: this.isShow
+					})
+				})
+		},
+		// 处理动画开始前的默认样式
+		styleInit(type) {
+			let styles = {
+				transform: ''
+			}
+			let buildStyle = (type, mode) => {
+				if (mode === 'fade') {
+					styles.opacity = this.animationType(type)[mode]
+				} else {
+					styles.transform += this.animationType(type)[mode] + ' '
+				}
+			}
+			if (typeof this.modeClass === 'string') {
+				buildStyle(type, this.modeClass)
+			} else {
+				this.modeClass.forEach(mode => {
+					buildStyle(type, mode)
+				})
+			}
+			return styles
+		},
+		// 处理内置组合动画
+		tranfromInit(type) {
+			let buildTranfrom = (type, mode) => {
+				let aniNum = null
+				if (mode === 'fade') {
+					aniNum = type ? 0 : 1
+				} else {
+					aniNum = type ? '-100%' : '0'
+					if (mode === 'zoom-in') {
+						aniNum = type ? 0.8 : 1
+					}
+					if (mode === 'zoom-out') {
+						aniNum = type ? 1.2 : 1
+					}
+					if (mode === 'slide-right') {
+						aniNum = type ? '100%' : '0'
+					}
+					if (mode === 'slide-bottom') {
+						aniNum = type ? '100%' : '0'
+					}
+				}
+				this.animation[this.animationMode()[mode]](aniNum)
+			}
+			if (typeof this.modeClass === 'string') {
+				buildTranfrom(type, this.modeClass)
+			} else {
+				this.modeClass.forEach(mode => {
+					buildTranfrom(type, mode)
+				})
+			}
+
+			return this.animation
+		},
+		animationType(type) {
+			return {
+				fade: type ? 1 : 0,
+				'slide-top': `translateY(${type ? '0' : '-100%'})`,
+				'slide-right': `translateX(${type ? '0' : '100%'})`,
+				'slide-bottom': `translateY(${type ? '0' : '100%'})`,
+				'slide-left': `translateX(${type ? '0' : '-100%'})`,
+				'zoom-in': `scaleX(${type ? 1 : 0.8}) scaleY(${type ? 1 : 0.8})`,
+				'zoom-out': `scaleX(${type ? 1 : 1.2}) scaleY(${type ? 1 : 1.2})`
+			}
+		},
+		// 内置动画类型与实际动画对应字典
+		animationMode() {
+			return {
+				fade: 'opacity',
+				'slide-top': 'translateY',
+				'slide-right': 'translateX',
+				'slide-bottom': 'translateY',
+				'slide-left': 'translateX',
+				'zoom-in': 'scale',
+				'zoom-out': 'scale'
+			}
+		},
+		// 驼峰转中横线
+		toLine(name) {
+			return name.replace(/([A-Z])/g, '-$1').toLowerCase()
+		}
+	}
+}
+</script>
+
+<style></style>

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

@@ -0,0 +1,84 @@
+{
+  "id": "uni-transition",
+  "displayName": "uni-transition 过渡动画",
+  "version": "1.3.2",
+  "description": "元素的简单过渡动画",
+  "keywords": [
+    "uni-ui",
+    "uniui",
+    "动画",
+    "过渡",
+    "过渡动画"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": ""
+  },
+  "directories": {
+    "example": "../../temps/example_temps"
+  },
+"dcloudext": {
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+    "type": "component-vue"
+  },
+  "uni_modules": {
+    "dependencies": ["uni-scss"],
+    "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"
+        }
+      }
+    }
+  }
+}

+ 11 - 0
uni_modules/uni-transition/readme.md

@@ -0,0 +1,11 @@
+
+
+## Transition 过渡动画
+> **组件名:uni-transition**
+> 代码块: `uTransition`
+
+
+元素过渡动画
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-transition)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است