cmy 4 meses atrás
pai
commit
165beca0ff
100 arquivos alterados com 7815 adições e 8404 exclusões
  1. 283 241
      App.vue
  2. 22 0
      api/login.js
  3. 3 3
      api/order.js
  4. 1 0
      api/wx.js
  5. 152 0
      components/codeImage.vue
  6. 0 226
      components/upload-images.vue
  7. 2218 96
      hybrid/html/yhxy.html
  8. 0 1
      index.html
  9. 204 0
      libs/zww-md5/w_md5.js
  10. 9 9
      manifest.json
  11. 6 0
      package-lock.json
  12. 23 7
      pages.json
  13. 180 156
      pages/collection/bank.vue
  14. 62 29
      pages/collection/wx.vue
  15. 65 32
      pages/collection/zfb.vue
  16. 11 11
      pages/hall/halllist.vue
  17. 571 454
      pages/hall/hallpay.vue
  18. 116 63
      pages/index/index.vue
  19. 178 154
      pages/money/moneyPwd.vue
  20. 2 2
      pages/money/qdwallet.vue
  21. 23 10
      pages/money/qudou.vue
  22. 1 1
      pages/money/quick.vue
  23. 3 0
      pages/money/wallet.vue
  24. 16 6
      pages/navigation/index.vue
  25. 4 1
      pages/navigation/main.vue
  26. 1 1
      pages/order/createOrder.vue
  27. 35 8
      pages/order/evaluate.vue
  28. 13 4
      pages/order/order.vue
  29. 7 2
      pages/order/order1.vue
  30. 56 6
      pages/product/product.vue
  31. 267 229
      pages/public/forget.vue
  32. 4 5
      pages/public/login.vue
  33. 31 20
      pages/public/register.vue
  34. 1 0
      pages/public/wxLogin.vue
  35. 3 1
      pages/redirect/redirect.vue
  36. 139 122
      pages/set/password.vue
  37. 22 22
      pages/set/phone.vue
  38. 1 0
      pages/set/set.vue
  39. 41 25
      pages/set/userinfo.vue
  40. 16 16
      pages/store/shopDetail.vue
  41. 10 8
      pages/store/store.vue
  42. 2796 0
      pages/user/about.vue
  43. 32 5
      pages/user/approve.vue
  44. 32 4
      pages/user/gzsq.vue
  45. 13 6
      pages/user/myAppointment.vue
  46. 3 3
      pages/user/myfans.vue
  47. 21 1
      pages/user/mygs.vue
  48. 18 5
      pages/user/myproduct.vue
  49. 15 9
      pages/user/mytihuo.vue
  50. 13 1
      pages/user/shareQrCode.vue
  51. 35 7
      pages/user/user.vue
  52. BIN
      static/img/news.png
  53. 15 6
      store/index.js
  54. 22 0
      store/model/md5.js
  55. 0 21
      uni_modules/uview-ui/LICENSE
  56. 0 66
      uni_modules/uview-ui/README.md
  57. 0 374
      uni_modules/uview-ui/changelog.md
  58. 0 78
      uni_modules/uview-ui/components/u--form/u--form.vue
  59. 0 47
      uni_modules/uview-ui/components/u--image/u--image.vue
  60. 0 73
      uni_modules/uview-ui/components/u--input/u--input.vue
  61. 0 44
      uni_modules/uview-ui/components/u--text/u--text.vue
  62. 0 48
      uni_modules/uview-ui/components/u--textarea/u--textarea.vue
  63. 0 54
      uni_modules/uview-ui/components/u-action-sheet/props.js
  64. 0 278
      uni_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue
  65. 0 59
      uni_modules/uview-ui/components/u-album/props.js
  66. 0 259
      uni_modules/uview-ui/components/u-album/u-album.vue
  67. 0 44
      uni_modules/uview-ui/components/u-alert/props.js
  68. 0 243
      uni_modules/uview-ui/components/u-alert/u-alert.vue
  69. 0 52
      uni_modules/uview-ui/components/u-avatar-group/props.js
  70. 0 103
      uni_modules/uview-ui/components/u-avatar-group/u-avatar-group.vue
  71. 0 78
      uni_modules/uview-ui/components/u-avatar/props.js
  72. 0 58
      uni_modules/uview-ui/components/u-avatar/u-avatar.vue
  73. 0 54
      uni_modules/uview-ui/components/u-back-top/props.js
  74. 0 129
      uni_modules/uview-ui/components/u-back-top/u-back-top.vue
  75. 0 72
      uni_modules/uview-ui/components/u-badge/props.js
  76. 0 171
      uni_modules/uview-ui/components/u-badge/u-badge.vue
  77. 0 46
      uni_modules/uview-ui/components/u-button/nvue.scss
  78. 0 161
      uni_modules/uview-ui/components/u-button/props.js
  79. 0 495
      uni_modules/uview-ui/components/u-button/u-button.vue
  80. 0 80
      uni_modules/uview-ui/components/u-button/vue.scss
  81. 0 99
      uni_modules/uview-ui/components/u-calendar/header.vue
  82. 0 579
      uni_modules/uview-ui/components/u-calendar/month.vue
  83. 0 144
      uni_modules/uview-ui/components/u-calendar/props.js
  84. 0 384
      uni_modules/uview-ui/components/u-calendar/u-calendar.vue
  85. 0 85
      uni_modules/uview-ui/components/u-calendar/util.js
  86. 0 14
      uni_modules/uview-ui/components/u-car-keyboard/props.js
  87. 0 311
      uni_modules/uview-ui/components/u-car-keyboard/u-car-keyboard.vue
  88. 0 14
      uni_modules/uview-ui/components/u-cell-group/props.js
  89. 0 61
      uni_modules/uview-ui/components/u-cell-group/u-cell-group.vue
  90. 0 110
      uni_modules/uview-ui/components/u-cell/props.js
  91. 0 229
      uni_modules/uview-ui/components/u-cell/u-cell.vue
  92. 0 82
      uni_modules/uview-ui/components/u-checkbox-group/props.js
  93. 0 103
      uni_modules/uview-ui/components/u-checkbox-group/u-checkbox-group.vue
  94. 0 69
      uni_modules/uview-ui/components/u-checkbox/props.js
  95. 0 344
      uni_modules/uview-ui/components/u-checkbox/u-checkbox.vue
  96. 0 8
      uni_modules/uview-ui/components/u-circle-progress/props.js
  97. 0 198
      uni_modules/uview-ui/components/u-circle-progress/u-circle-progress.vue
  98. 0 79
      uni_modules/uview-ui/components/u-code-input/props.js
  99. 0 252
      uni_modules/uview-ui/components/u-code-input/u-code-input.vue
  100. 0 34
      uni_modules/uview-ui/components/u-code/props.js

+ 283 - 241
App.vue

@@ -1,264 +1,306 @@
 <script>
-/**
- * vuex管理登陆状态,具体可以参考官方登陆模板示例
- */
-import { mapMutations } from 'vuex';
-// #ifdef H5
-import { weixindata, setRouter } from './utils/wxAuthorized';
-// #endif
-// #ifdef APP-PLUS
-import { getUpApp } from './utils/upApp.js';
-// #endif
-export default {
-	data() {
-		return {
-			/* 保存微信信息 */
-			appData: {}
-		};
-	},
-	methods: {
-		...mapMutations('user', ['setUserInfo', 'login', 'hasLogin'])
-	},
-	onLaunch: function(urlObj) {
-		let obj = this;
-		// 加载缓存中的用户信息
-		let userInfo = uni.getStorageSync('userInfo') || '';
-		// 判断是否拥有用户信息
-		if (userInfo.uid) {
-			//更新登陆状态
-			uni.getStorage({
-				key: 'userInfo',
-				success: res => {
-					obj.setUserInfo(res.data);
-					obj.login(res.data);
+	/**
+	 * vuex管理登陆状态,具体可以参考官方登陆模板示例
+	 */
+	import {
+		mapMutations
+	} from 'vuex';
+	// #ifdef H5
+	import {
+		weixindata,
+		setRouter
+	} from './utils/wxAuthorized';
+	// #endif
+	// #ifdef APP-PLUS
+	import {
+		getUpApp
+	} from './utils/upApp.js';
+	// #endif
+	export default {
+		data() {
+			return {
+				/* 保存微信信息 */
+				appData: {
+
 				}
-			});
-		}
-		// #ifdef H5
-		// 保存路由对象
-		setRouter(this.$router);
-		//判断是否已经缓存浏览器
-		let bool = uni.getStorageSync('weichatBrowser') || '';
-		if (bool === '') {
-			//判断是否为微信浏览
-			bool = navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger';
-			// 保存当前是否为微信内核浏览器
-			uni.setStorageSync('weichatBrowser', bool);
-		}
-		if (bool) {
-			// 加载微信信息
-			weixindata();
-		}
-		// #endif
-		// #ifdef APP-PLUS
-		// 判断是否升级
-		getUpApp();
-		// 获取当前运行系统
-		let system = uni.getStorageSync('platform') || '';
-		if (!system) {
-			uni.setStorage({
-				key: 'platform',
-				data: uni.getSystemInfoSync().platform
-			});
+			};
+		},
+		methods: {
+			...mapMutations('user', ['setUserInfo', 'login', 'hasLogin'])
+		},
+		onLaunch: function(urlObj) {
+			let obj = this;
+			// 加载缓存中的用户信息
+			let userInfo = uni.getStorageSync('userInfo') || '';
+			// 判断是否拥有用户信息
+			if (userInfo.uid) {
+				//更新登陆状态
+				uni.getStorage({
+					key: 'userInfo',
+					success: res => {
+						obj.setUserInfo(res.data);
+						obj.login(res.data);
+					}
+				});
+			}
+			// #ifdef H5
+			// 保存路由对象
+			setRouter(this.$router);
+			//判断是否已经缓存浏览器
+			let bool = uni.getStorageSync('weichatBrowser') || '';
+			if (bool === '') {
+				//判断是否为微信浏览
+				bool = navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger';
+				// 保存当前是否为微信内核浏览器
+				uni.setStorageSync('weichatBrowser', bool);
+			}
+			if (bool) {
+				// 加载微信信息
+				weixindata();
+			}
+			// #endif
+			// #ifdef APP-PLUS
+			// 判断是否升级
+			getUpApp();
+			// 获取当前运行系统
+			let system = uni.getStorageSync('platform') || '';
+			if (!system) {
+				uni.setStorage({
+					key: 'platform',
+					data: uni.getSystemInfoSync().platform
+				});
+			}
+			// #endif
+		},
+		onShow: function() {
+			// 加载拦截
+			// console.log('App Show');
+		},
+		onHide: function() {
+			// console.log('App Hide');
 		}
-		// #endif
-	},
-	onShow: function() {
-		// 加载拦截
-		// console.log('App Show');
-	},
-	onHide: function() {
-		// console.log('App Hide');
-	}
-};
+	};
 </script>
 
 <style lang="scss">
-/*全局公共样式和字体图标*/
-@import '/static/css/cmy.css';
-@import "uview-ui/index.scss";
-view,
-scroll-view,
-swiper,
-swiper-item,
-cover-view,
-cover-image,
-icon,
-text,
-rich-text,
-progress,
-button,
-checkbox,
-form,
-input,
-label,
-radio,
-slider,
-switch,
-textarea,
-navigator,
-audio,
-camera,
-image,
-video {
-	box-sizing: border-box;
-}
-/* 骨架屏替代方案 */
-.Skeleton {
-	background: #f3f3f3;
-	padding: 20rpx 0;
-	border-radius: 8rpx;
-}
-
-/* 图片载入替代方案 */
-.image-wrapper {
-	font-size: 0;
-	background: #f3f3f3;
-	border-radius: 4px;
-	image {
-		width: 100%;
-		height: 100%;
-		transition: 0.6s;
-		opacity: 0;
-		&.loaded {
-			opacity: 1;
+	/*全局公共样式和字体图标*/
+	@import '/static/css/cmy.css';
+	@import "uview-ui/index.scss";
+
+	view,
+	scroll-view,
+	swiper,
+	swiper-item,
+	cover-view,
+	cover-image,
+	icon,
+	text,
+	rich-text,
+	progress,
+	button,
+	checkbox,
+	form,
+	input,
+	label,
+	radio,
+	slider,
+	switch,
+	textarea,
+	navigator,
+	audio,
+	camera,
+	image,
+	video {
+		box-sizing: border-box;
+	}
+
+	/* 骨架屏替代方案 */
+	.Skeleton {
+		background: #f3f3f3;
+		padding: 20rpx 0;
+		border-radius: 8rpx;
+	}
+
+	/* 图片载入替代方案 */
+	.image-wrapper {
+		font-size: 0;
+		background: #f3f3f3;
+		border-radius: 4px;
+
+		image {
+			width: 100%;
+			height: 100%;
+			transition: 0.6s;
+			opacity: 0;
+
+			&.loaded {
+				opacity: 1;
+			}
 		}
 	}
-}
-
-// 设置富文本中图片最大宽度
-uni-rich-text img {
-	max-width: 100% !important;
-}
-/*边框*/
-.b-b:after,
-.b-t:after {
-	position: absolute;
-	z-index: 3;
-	left: 0;
-	right: 0;
-	height: 0;
-	content: '';
-	transform: scaleY(0.5);
-	border-bottom: 1px solid $border-color-base;
-}
-
-.b-b:after {
-	bottom: 0;
-}
-
-.b-t:after {
-	top: 0;
-}
-
-/* button样式改写 */
-uni-button,
-button {
-	height: 80rpx;
-	line-height: 80rpx;
-	font-size: $font-lg + 2rpx;
-	font-weight: normal;
-
-	&.no-border:before,
-	&.no-border:after {
-		border: 0;
+
+	// 设置富文本中图片最大宽度
+	uni-rich-text img {
+		max-width: 100% !important;
+	}
+
+	/*边框*/
+	.b-b:after,
+	.b-t:after {
+		position: absolute;
+		z-index: 3;
+		left: 0;
+		right: 0;
+		height: 0;
+		content: '';
+		transform: scaleY(0.5);
+		border-bottom: 1px solid $border-color-base;
+	}
+
+	.b-b:after {
+		bottom: 0;
+	}
+
+	.b-t:after {
+		top: 0;
+	}
+
+	/* button样式改写 */
+	uni-button,
+	button {
+		height: 80rpx;
+		line-height: 80rpx;
+		font-size: $font-lg + 2rpx;
+		font-weight: normal;
+
+		&.no-border:before,
+		&.no-border:after {
+			border: 0;
+		}
 	}
-}
-
-uni-button[type='default'],
-button[type='default'] {
-	color: $font-color-dark;
-}
-
-/* input 样式 */
-.input-placeholder {
-	color: #999999;
-}
-
-.placeholder {
-	color: #999999;
-}
-// 边距样式
-@for $i from 1 to 4 {
-	.margin-l-#{$i * 10} {
-		margin-left: $i * 10rpx !important;
+
+	uni-button[type='default'],
+	button[type='default'] {
+		color: $font-color-dark;
 	}
-	.margin-r-#{$i * 10} {
-		margin-right: $i * 10rpx !important;
+
+	/* input 样式 */
+	.input-placeholder {
+		color: #999999;
 	}
-	.margin-t-#{$i * 10} {
-		margin-top: $i * 10rpx !important;
+
+	.placeholder {
+		color: #999999;
 	}
-	.margin-b-#{$i * 10} {
-		margin-bottom: $i * 10rpx !important;
+
+	// 边距样式
+	@for $i from 1 to 4 {
+		.margin-l-#{$i * 10} {
+			margin-left: $i * 10rpx !important;
+		}
+
+		.margin-r-#{$i * 10} {
+			margin-right: $i * 10rpx !important;
+		}
+
+		.margin-t-#{$i * 10} {
+			margin-top: $i * 10rpx !important;
+		}
+
+		.margin-b-#{$i * 10} {
+			margin-bottom: $i * 10rpx !important;
+		}
+
+		.margin-#{$i * 10} {
+			margin: $i * 10rpx !important;
+		}
+
+		.margin-v-#{$i * 10} {
+			margin-top: $i * 10rpx !important;
+			margin-bottom: $i * 10rpx !important;
+		}
+
+		.margin-c-#{$i * 10} {
+			margin-left: $i * 10rpx !important;
+			margin-right: $i * 10rpx !important;
+		}
+
+		.padding-l-#{$i * 10} {
+			padding-left: $i * 10rpx !important;
+		}
+
+		.padding-r-#{$i * 10} {
+			padding-right: $i * 10rpx !important;
+		}
+
+		.padding-t-#{$i * 10} {
+			padding-top: $i * 10rpx !important;
+		}
+
+		.padding-b-#{$i * 10} {
+			padding-bottom: $i * 10rpx !important;
+		}
+
+		.padding-#{$i * 10} {
+			padding: $i * 10rpx !important;
+		}
+
+		.padding-v-#{$i * 10} {
+			padding-top: $i * 10rpx !important;
+			padding-bottom: $i * 10rpx !important;
+		}
+
+		.padding-c-#{$i * 10} {
+			padding-left: $i * 10rpx !important;
+			padding-right: $i * 10rpx !important;
+		}
 	}
-	.margin-#{$i * 10} {
-		margin: $i * 10rpx !important;
+
+	// 字体大小
+	.font-size-sm {
+		font-size: $font-sm;
 	}
-	.margin-v-#{$i * 10} {
-		margin-top: $i * 10rpx !important;
-		margin-bottom: $i * 10rpx !important;
+
+	.font-size-base {
+		font-size: $font-base;
 	}
-	.margin-c-#{$i * 10} {
-		margin-left: $i * 10rpx !important;
-		margin-right: $i * 10rpx !important;
+
+	.font-size-lg {
+		font-size: $font-lg;
 	}
-	.padding-l-#{$i * 10} {
-		padding-left: $i * 10rpx !important;
+
+	// 字体颜色
+	.font-color-yellow {
+		color: $color-yellow;
 	}
-	.padding-r-#{$i * 10} {
-		padding-right: $i * 10rpx !important;
+
+	.font-color-gray {
+		color: $color-gray;
 	}
-	.padding-t-#{$i * 10} {
-		padding-top: $i * 10rpx !important;
+
+	.font-color-red {
+		color: $color-red;
 	}
-	.padding-b-#{$i * 10} {
-		padding-bottom: $i * 10rpx !important;
+
+	// 边框颜色
+	.border-color-yellow {
+		border: 1rpx solid $color-yellow;
 	}
-	.padding-#{$i * 10} {
-		padding: $i * 10rpx !important;
+
+	// 修改默认背景颜色
+	uni-page-wrapper {
+		background-color: $page-color-base;
 	}
-	.padding-v-#{$i * 10} {
-		padding-top: $i * 10rpx !important;
-		padding-bottom: $i * 10rpx !important;
+
+	page {
+		background-color: $page-color-base;
+		// 设置默认字体
+		font-family: PingFang SC, STHeitiSC-Light, Helvetica-Light, arial, sans-serif, Droid Sans Fallback;
 	}
-	.padding-c-#{$i * 10} {
-		padding-left: $i * 10rpx !important;
-		padding-right: $i * 10rpx !important;
+
+	.alertprogress {
+		background-color: #FFF;
+		border-radius: 10rpx;
+		padding: 30rpx 50rpx;
 	}
-}
-// 字体大小
-.font-size-sm {
-	font-size: $font-sm;
-}
-.font-size-base {
-	font-size: $font-base;
-}
-.font-size-lg {
-	font-size: $font-lg;
-}
-// 字体颜色
-.font-color-yellow {
-	color: $color-yellow;
-}
-.font-color-gray {
-	color: $color-gray;
-}
-.font-color-red {
-	color: $color-red;
-}
-// 边框颜色
-.border-color-yellow {
-	border: 1rpx solid $color-yellow;
-}
-
-// 修改默认背景颜色
-uni-page-wrapper {
-	background-color: $page-color-base;
-}
-page {
-	background-color: $page-color-base;
-	// 设置默认字体
-	font-family: PingFang SC, STHeitiSC-Light, Helvetica-Light, arial, sans-serif, Droid Sans Fallback;
-}
-</style>
+</style>

+ 22 - 0
api/login.js

@@ -26,6 +26,28 @@ export function verify(data) {
 		data
 	});
 }
+// 图形验证码
+export function sms_captcha(data) {
+	// type=register为注册
+	// type=login为登录
+	return request({
+		url: '/api/sms_captcha',
+		method: 'get',
+		data
+	});
+}
+
+// 获取图片验证码key
+export function verify_code(data) {
+	// type=register为注册
+	// type=login为登录
+	return request({
+		url: '/api/verify_code',
+		method: 'get',
+		data
+	});
+}
+
 
 // 获取用户信息
 export function getUserInfo(data) {

+ 3 - 3
api/order.js

@@ -52,12 +52,12 @@ export function express_query(data) {
 	});
 }
 //上传图片
-export function upload(data) {
-	return upFilse({
+export function upload(data, successCallback, errorCallback, sizeCallback,Progress) {
+	upFilse({
 		url: '/api/upload/image',
 		method: 'post',
 		data
-	});
+	}, successCallback, errorCallback, sizeCallback,Progress);
 }
 // 订单列表
 export function orderList(data) {

+ 1 - 0
api/wx.js

@@ -10,6 +10,7 @@ export function share(data) {
 }
 //微信配置
 export function wechatConfig(data) {
+	console.log(data)
 	return request({
 		url: '/api/wechat/config',
 		method: 'get',

+ 152 - 0
components/codeImage.vue

@@ -0,0 +1,152 @@
+<template>
+	<u-popup v-model="show" mode="center" closeable @close='close' border-radius='20'>
+		<view class="content">
+			<view class="title">
+				图片验证
+			</view>
+			<view class="loading" v-show="loadImage=='ok'" @click="getImage()">
+				<image class="codeImg" @load="loadImage='ok'" @error="loadImage='err'" :src="image" mode="scaleToFill">
+				</image>
+			</view>
+			<view class="loading" v-if="loadImage=='loading'">
+				加载中...
+			</view>
+			<view class="loading" v-if="loadImage=='err'" @click="getImage()">
+				加载失败点击刷新
+			</view>
+			<input class="codeInput" type="text" v-model="code" placeholder="请输入图片中的验证内容" />
+			<view class="flex">
+				<u-button class="buttom" size='medium' @click="getImage()">刷新</u-button>
+				<u-button class="buttom" size='medium' type="primary" @click="openVerify">确定</u-button>
+			</view>
+		</view>
+	</u-popup>
+</template>
+
+<script>
+	import {
+		verify_code,
+		verify
+	} from '@/api/login.js';
+	import {
+		mapState,
+		mapMutations
+	} from 'vuex';
+	export default {
+		props: {
+			show: {
+				type: Boolean,
+				default: false,
+			},
+			phone: {
+				type: Number|String,
+				default: '',
+			},
+			loginType: {
+				type: String,
+				default: '',
+			}
+		},
+
+		data() {
+			return {
+				code: '',
+				image: '',
+				loadImage: "loading",
+				key: '',
+			}
+		},
+		computed: {
+			...mapState(['baseURL'])
+		},
+		methods: {
+			close() {
+				this.$emit("close")
+			},
+			async getImage() {
+				try {
+					this.loadImage = "loading";
+					let {
+						data: {
+							key
+						}
+					} = await verify_code();
+					this.key = key;
+					this.image = `${this.baseURL}/api/sms_captcha?key=${key}&time=${(new Date()).getTime()}`;
+
+				} catch (e) {
+					console.log(e, "err")
+					//TODO handle the exception
+				}
+			},
+			openVerify() {
+				const obj = this;
+				if(!obj.code){
+					uni.showToast({
+						title:"请输入图片中的内容"
+					})
+				}
+				verify({
+						key: obj.key,
+						phone: obj.phone,
+						type: obj.loginType,
+						code:obj.code
+					})
+					.then(({
+						data
+					}) => {
+						console.log(data, 'data')
+						uni.showToast({
+							title: '验证码已发送',
+							duration: 2000,
+							position: 'top',
+							icon: 'none'
+						});
+						obj.close();
+						obj.$emit("openCode")
+					})
+					.catch(err => {
+						obj.code="";
+						uni.showToast({
+							title: err.msg,
+							icon:"error"
+						});
+						obj.getImage();
+						console.log(err, 'err');
+					});
+			}
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	.content {
+		padding: 30rpx;
+
+		.codeImg {
+			width: 100%;
+			height: 130rpx;
+		}
+
+		.loading {
+			margin-top: 30rpx;
+			background-color: #e3e3e3;
+			border-radius: 10rpx;
+			overflow: hidden;
+			text-align: center;
+			line-height: 130rpx;
+			width: 660rpx;
+			height: 130rpx;
+			color: #999999;
+		}
+	}
+
+	.codeInput {
+		width: 100%;
+		height: 60rpx;
+		padding-bottom: 30rpx;
+		border-bottom: 1px solid #e3e3e3;
+		margin-top: 50rpx;
+		margin-bottom: 50rpx;
+	}
+</style>

+ 0 - 226
components/upload-images.vue

@@ -1,226 +0,0 @@
-<template>
-	<view class="upload-content">
-		<block v-for="(item, index) in imageList" :key="index">
-			<view class="upload-item">
-				<image class="upload-img" :src="item.filePath" mode="aspectFill" @click="previewImage(index)"></image>
-				<image class="upload-del-btn" 
-					@click="delImage(index)" 
-					src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RjNBODgzQjUwNDM5MTFFOUJDMjlGN0UwRTJGMjVCNjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RjNBODgzQjYwNDM5MTFFOUJDMjlGN0UwRTJGMjVCNjQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGM0E4ODNCMzA0MzkxMUU5QkMyOUY3RTBFMkYyNUI2NCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGM0E4ODNCNDA0MzkxMUU5QkMyOUY3RTBFMkYyNUI2NCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PuYQTIAAAAHNSURBVHjazJgxasMwFIbjnsD4BDmCLxDQDZrNQ5bcILlBvXvpDRLIWmiHFkyH2t0LyVbwEkPpbE/eYlUCGYQax096UuIffkIgij7ryU/vyZuYy2e+Z56K70R8lsJcOfPn5AriMCvmZ2YKdMW8EQ/hRA9iEorwXlpZtObMRySQ6kysvrFWloHUEIcmUBuHUDLccmxQskErt7wyVLdy00tQ4Q2g5De2V9kNwWjffiNDA33f/42i6E13Qj5uNptlwJD+SyODuaqqqi/KVBTFOxSKA7VtW/NxSZI8AcbE2nuraZpvKgSBk6G4drsdBOwogz1CwAghH/JEl+BUKJ1VltPHHjoIAoeE4l53YFqb+RKcBSgqyqXhtxEKZwkKB3YOThYCqjPuCDoHZwGK3mGLtdPp5LmqTI1Dqe4p26EkNqA4iE6eg2z+iQ0okyQMATvYgLIIt9Y6knTyFBIudHqIq3BpmkL60VJ9O0sXZY8MBwSLtdNGEAQ/i8XiVXcz83EcEPDbuq/fzMdYWt+6GTmMsX2rh9q3TtsxNrzXhKt1rwg6rR1Dhdjqo7QMlWOvoWTF4imxQMRF7eaL8L5ohmwrLgDB8pCQc8DlcG7y538CDABJNGPqfaJgfgAAAABJRU5ErkJggg==" 
-					mode="scaleToFill">
-				</image>
-				<view class="upload-progress" v-if="item.progress < 100">{{item.progress}}%</view>
-			</view>
-		</block>
-		<view class="upload-add-btn" v-if="rduLength > 0" @click="chooseImage"></view>
-	</view>
-</template>
-
-<script>
-export default {
-	data() {
-		return {
-			imageList: []
-		};
-	},
-	props: {
-		url: {
-			type: String,
-			value: '' //上传接口地址
-		},
-		count: {
-			type: Number,
-			value: 4 //单次可选择的图片数量
-		},
-		length: {
-			type: Number,
-			value: 50 //可上传总数量
-		}
-	},
-	computed: {
-		rduLength(){
-			return this.length - this.imageList.length;
-		}
-	},
-	methods: {
-		//选择图片
-		chooseImage: function(){
-			uni.chooseImage({
-				count: this.rduLength < this.count ? this.rduLength : this.count, //最多可以选择的图片张数,默认9
-				sizeType: ['original', 'compressed'], //original 原图,compressed 压缩图,默认二者都有
-				sourceType: ['album'], //album 从相册选图,camera 使用相机,默认二者都有
-				success: (res)=> {
-					const images = res.tempFilePaths;
-					this.uploadFiles(images);
-				}
-			});
-		},
-		//上传图片
-		async uploadFiles(images){
-			this.imageList.push({
-				filePath: images[0],
-				progress: 0
-			});
-			uni.showLoading({
-				title: '请稍后..',
-				mask: true,
-			})
-			try{
-				const uploadUrl = await this.uploadImage(images[0]);
-			}catch(err){
-				console.log(err);
-				return;
-			}
-			
-			if(uploadUrl !== false){
-				images.splice(0, 1);
-				this.imageList[this.imageList.length - 1].src = uploadUrl;
-
-				//判断是否需要继续上传
-				if(images.length > 0 && this.rduLength > 0){
-					this.uploadFiles(images);
-				}else{
-					uni.hideLoading();
-				}
-			}else{
-				//上传失败处理
-				this.imageList.pop();
-				uni.hideLoading();
-				uni.showToast({
-					title: '上传中出现问题,已终止上传',
-					icon: 'none',
-					mask: true,
-					duration: 2000
-				});
-			}
-		},
-		uploadImage: function(file){
-			return new Promise((resolve, reject)=> {
-				//发送给后端的附加参数
-				const formData = {
-					thumb_mode: 1,  
-				};
-				this.uploadTask = uni.uploadFile({
-					url: this.url, 
-					filePath: file,
-					name: 'file',
-					formData: formData,
-					success(uploadFileResult){
-						const uploadFileRes = JSON.parse(uploadFileResult.data) || {};
-						if(uploadFileRes.status === 1 && uploadFileRes.data){
-							resolve(uploadFileRes.data);
-						}else{
-							reject('接口返回错误');
-						}
-					}, 
-					fail(){
-						reject('网络链接错误');
-					}
-				});
-				//上传进度
-				this.uploadTask.onProgressUpdate((progressRes)=> {
-					this.imageList[this.imageList.length - 1].progress = progressRes.progress;
-				});
-			});
-		},
-		//删除图片
-		delImage: function(index){
-			uni.showModal({
-				content: '确定要放弃这张图片么?',
-				success: (confirmRes)=> {
-					if (confirmRes.confirm) {
-						this.imageList.splice(index, 1);
-					} 
-				}
-			});
-		},
-		//预览图片
-		previewImage: function(index){
-			const urls = [];
-			this.imageList.forEach((item)=> {
-				urls.push(item.filePath);
-			})
-			uni.previewImage({
-				current: urls[index],
-				urls: urls,
-				indicator: "number"
-			})
-		}
-	}
-}
-</script>
-
-<style lang="scss">
-	.upload-content{
-		padding:24upx 0 0 28upx;
-		background-color: #fff;
-		overflow:hidden;
-	}
-	.upload-item{
-		position: relative;
-		float:left;
-		width:150upx;
-		height:150upx;
-		margin-right:30upx;
-		margin-bottom:30upx;
-		&:nth-child(4n){
-			margin-right:0;
-		}
-		.upload-img{
-			width:100%;
-			height:100%;
-			border-radius:8upx;
-		}
-		.upload-del-btn{
-			position: absolute;
-			right:-16upx;
-			top:-14upx;
-			width:36upx;
-			height:36upx;
-			border: 4upx solid #fff;
-			border-radius: 100px;
-		}
-		.upload-progress{
-			position: absolute;
-			left:0;
-			top:0;
-			display:flex;
-			align-items:center;
-			justify-content: center;
-			width:100%;
-			height:100%;
-			background-color: rgba(0,0,0,.4);
-			color:#fff;
-			font-size:24upx;
-			border-radius:8upx;
-		}
-	}
-	.upload-add-btn {
-		position: relative;
-		float:left;
-		width: 150upx;
-		height: 150upx;
-		z-index: 99;
-		border-radius:8upx;
-		background:#f9f9f9;
-		&:before,
-		&:after {
-			content: " ";
-			position: absolute;
-			top: 50%;
-			left: 50%;
-			-webkit-transform: translate(-50%, -50%);
-			transform: translate(-50%, -50%);
-			width: 4upx;
-			height: 60upx;
-			background-color: #d6d6d6;
-		}
-		&:after {
-			width: 60upx;
-			height: 4upx;
-		}
-		&:active {
-			background-color: #f7f7f7;
-		}
-	}
-
-</style>

Diferenças do arquivo suprimidas por serem muito extensas
+ 2218 - 96
hybrid/html/yhxy.html


+ 0 - 1
index.html

@@ -12,7 +12,6 @@
 		</script>
 		<!-- <script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> -->
 		<script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js"></script>
-		<!-- 实名认证 -->
 		<script type="text/javascript" src="https://cn-shanghai-aliyun-cloudauth.oss-cn-shanghai.aliyuncs.com/web_sdk_js/jsvm_all.js" ></script>
 		<script>
 			var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'))

+ 204 - 0
libs/zww-md5/w_md5.js

@@ -0,0 +1,204 @@
+let w_md5 = {}
+function hex_md5(string,bit) {
+    function md5_RotateLeft(lValue, iShiftBits) {
+        return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
+    }
+    function md5_AddUnsigned(lX, lY) {
+        var lX4, lY4, lX8, lY8, lResult;
+        lX8 = (lX & 0x80000000);
+        lY8 = (lY & 0x80000000);
+        lX4 = (lX & 0x40000000);
+        lY4 = (lY & 0x40000000);
+        lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
+        if (lX4 & lY4) {
+            return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
+        }
+        if (lX4 | lY4) {
+            if (lResult & 0x40000000) {
+                return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
+            } else {
+                return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
+            }
+        } else {
+            return (lResult ^ lX8 ^ lY8);
+        }
+    }
+    function md5_F(x, y, z) {
+        return (x & y) | ((~x) & z);
+    }
+    function md5_G(x, y, z) {
+        return (x & z) | (y & (~z));
+    }
+    function md5_H(x, y, z) {
+        return (x ^ y ^ z);
+    }
+    function md5_I(x, y, z) {
+        return (y ^ (x | (~z)));
+    }
+    function md5_FF(a, b, c, d, x, s, ac) {
+        a = md5_AddUnsigned(a, md5_AddUnsigned(md5_AddUnsigned(md5_F(b, c, d), x), ac));
+        return md5_AddUnsigned(md5_RotateLeft(a, s), b);
+    };
+    function md5_GG(a, b, c, d, x, s, ac) {
+        a = md5_AddUnsigned(a, md5_AddUnsigned(md5_AddUnsigned(md5_G(b, c, d), x), ac));
+        return md5_AddUnsigned(md5_RotateLeft(a, s), b);
+    };
+    function md5_HH(a, b, c, d, x, s, ac) {
+        a = md5_AddUnsigned(a, md5_AddUnsigned(md5_AddUnsigned(md5_H(b, c, d), x), ac));
+        return md5_AddUnsigned(md5_RotateLeft(a, s), b);
+    };
+    function md5_II(a, b, c, d, x, s, ac) {
+        a = md5_AddUnsigned(a, md5_AddUnsigned(md5_AddUnsigned(md5_I(b, c, d), x), ac));
+        return md5_AddUnsigned(md5_RotateLeft(a, s), b);
+    };
+    function md5_ConvertToWordArray(string) {
+        var lWordCount;
+        var lMessageLength = string.length;
+        var lNumberOfWords_temp1 = lMessageLength + 8;
+        var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;
+        var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;
+        var lWordArray = Array(lNumberOfWords - 1);
+        var lBytePosition = 0;
+        var lByteCount = 0;
+        while (lByteCount < lMessageLength) {
+            lWordCount = (lByteCount - (lByteCount % 4)) / 4;
+            lBytePosition = (lByteCount % 4) * 8;
+            lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition));
+            lByteCount++;
+        }
+        lWordCount = (lByteCount - (lByteCount % 4)) / 4;
+        lBytePosition = (lByteCount % 4) * 8;
+        lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
+        lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
+        lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
+        return lWordArray;
+    };
+    function md5_WordToHex(lValue) {
+        var WordToHexValue = "", WordToHexValue_temp = "", lByte, lCount;
+        for (lCount = 0; lCount <= 3; lCount++) {
+            lByte = (lValue >>> (lCount * 8)) & 255;
+            WordToHexValue_temp = "0" + lByte.toString(16);
+            WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2);
+        }
+        return WordToHexValue;
+    };
+    function md5_Utf8Encode(string) {
+        string = string.replace(/\r\n/g, "\n");
+        var utftext = "";
+        for (var n = 0; n < string.length; n++) {
+            var c = string.charCodeAt(n);
+            if (c < 128) {
+                utftext += String.fromCharCode(c);
+            } else if ((c > 127) && (c < 2048)) {
+                utftext += String.fromCharCode((c >> 6) | 192);
+                utftext += String.fromCharCode((c & 63) | 128);
+            } else {
+                utftext += String.fromCharCode((c >> 12) | 224);
+                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
+                utftext += String.fromCharCode((c & 63) | 128);
+            }
+        }
+        return utftext;
+    };
+    var x = Array();
+    var k, AA, BB, CC, DD, a, b, c, d;
+    var S11 = 7, S12 = 12, S13 = 17, S14 = 22;
+    var S21 = 5, S22 = 9, S23 = 14, S24 = 20;
+    var S31 = 4, S32 = 11, S33 = 16, S34 = 23;
+    var S41 = 6, S42 = 10, S43 = 15, S44 = 21;
+    string = md5_Utf8Encode(string);
+    x = md5_ConvertToWordArray(string);
+    a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
+    for (k = 0; k < x.length; k += 16) {
+        AA = a; BB = b; CC = c; DD = d;
+        a = md5_FF(a, b, c, d, x[k + 0], S11, 0xD76AA478);
+        d = md5_FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756);
+        c = md5_FF(c, d, a, b, x[k + 2], S13, 0x242070DB);
+        b = md5_FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE);
+        a = md5_FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF);
+        d = md5_FF(d, a, b, c, x[k + 5], S12, 0x4787C62A);
+        c = md5_FF(c, d, a, b, x[k + 6], S13, 0xA8304613);
+        b = md5_FF(b, c, d, a, x[k + 7], S14, 0xFD469501);
+        a = md5_FF(a, b, c, d, x[k + 8], S11, 0x698098D8);
+        d = md5_FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF);
+        c = md5_FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1);
+        b = md5_FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE);
+        a = md5_FF(a, b, c, d, x[k + 12], S11, 0x6B901122);
+        d = md5_FF(d, a, b, c, x[k + 13], S12, 0xFD987193);
+        c = md5_FF(c, d, a, b, x[k + 14], S13, 0xA679438E);
+        b = md5_FF(b, c, d, a, x[k + 15], S14, 0x49B40821);
+        a = md5_GG(a, b, c, d, x[k + 1], S21, 0xF61E2562);
+        d = md5_GG(d, a, b, c, x[k + 6], S22, 0xC040B340);
+        c = md5_GG(c, d, a, b, x[k + 11], S23, 0x265E5A51);
+        b = md5_GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA);
+        a = md5_GG(a, b, c, d, x[k + 5], S21, 0xD62F105D);
+        d = md5_GG(d, a, b, c, x[k + 10], S22, 0x2441453);
+        c = md5_GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681);
+        b = md5_GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8);
+        a = md5_GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6);
+        d = md5_GG(d, a, b, c, x[k + 14], S22, 0xC33707D6);
+        c = md5_GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87);
+        b = md5_GG(b, c, d, a, x[k + 8], S24, 0x455A14ED);
+        a = md5_GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905);
+        d = md5_GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8);
+        c = md5_GG(c, d, a, b, x[k + 7], S23, 0x676F02D9);
+        b = md5_GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A);
+        a = md5_HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942);
+        d = md5_HH(d, a, b, c, x[k + 8], S32, 0x8771F681);
+        c = md5_HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122);
+        b = md5_HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C);
+        a = md5_HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44);
+        d = md5_HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9);
+        c = md5_HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60);
+        b = md5_HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70);
+        a = md5_HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6);
+        d = md5_HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA);
+        c = md5_HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085);
+        b = md5_HH(b, c, d, a, x[k + 6], S34, 0x4881D05);
+        a = md5_HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039);
+        d = md5_HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5);
+        c = md5_HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8);
+        b = md5_HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665);
+        a = md5_II(a, b, c, d, x[k + 0], S41, 0xF4292244);
+        d = md5_II(d, a, b, c, x[k + 7], S42, 0x432AFF97);
+        c = md5_II(c, d, a, b, x[k + 14], S43, 0xAB9423A7);
+        b = md5_II(b, c, d, a, x[k + 5], S44, 0xFC93A039);
+        a = md5_II(a, b, c, d, x[k + 12], S41, 0x655B59C3);
+        d = md5_II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92);
+        c = md5_II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D);
+        b = md5_II(b, c, d, a, x[k + 1], S44, 0x85845DD1);
+        a = md5_II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F);
+        d = md5_II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0);
+        c = md5_II(c, d, a, b, x[k + 6], S43, 0xA3014314);
+        b = md5_II(b, c, d, a, x[k + 13], S44, 0x4E0811A1);
+        a = md5_II(a, b, c, d, x[k + 4], S41, 0xF7537E82);
+        d = md5_II(d, a, b, c, x[k + 11], S42, 0xBD3AF235);
+        c = md5_II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB);
+        b = md5_II(b, c, d, a, x[k + 9], S44, 0xEB86D391);
+        a = md5_AddUnsigned(a, AA);
+        b = md5_AddUnsigned(b, BB);
+        c = md5_AddUnsigned(c, CC);
+        d = md5_AddUnsigned(d, DD);
+    }
+    if(bit==32){
+        return (md5_WordToHex(a) + md5_WordToHex(b) + md5_WordToHex(c) + md5_WordToHex(d)).toLowerCase();
+    }
+    return (md5_WordToHex(b) + md5_WordToHex(c)).toLowerCase();
+}
+//16位小写
+w_md5.hex_md5_16 = function (string) { 
+	return hex_md5(string,16); 
+}
+//16位大写
+w_md5.hex_md5_16Upper = function (string) { 
+	return  hex_md5(string,16).toUpperCase(); 
+}
+//32位小写
+w_md5.hex_md5_32 = function (string) { 
+	return hex_md5(string,32); 
+}
+//32位大写
+w_md5.hex_md5_32Upper = function (string) { 
+	return hex_md5(string,32).toUpperCase(); 
+}
+export default w_md5

+ 9 - 9
manifest.json

@@ -1,9 +1,9 @@
 {
     "name" : "易趣CBB",
-    "appid" : "__UNI__E7017D0",
+    "appid" : "__UNI__9B5C2CB",
     "description" : "",
-    "versionName" : "1.6.4",
-    "versionCode" : 164,
+    "versionName" : "1.9.2",
+    "versionCode" : 192,
     "transformPx" : false,
     "app-plus" : {
         /* 5+App特有相关 */
@@ -16,9 +16,7 @@
         },
         "modules" : {
             "VideoPlayer" : {},
-            "Camera" : {},
-            "Geolocation" : {},
-            "Maps" : {}
+            "Camera" : {}
         },
         /* 模块配置 */
         "distribute" : {
@@ -29,11 +27,13 @@
                     "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
                     "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
                     "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
-                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>"
+                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />"
                 ],
                 "abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ],
                 "targetSdkVersion" : 30,
-                "minSdkVersion" : 30
+                "minSdkVersion" : "",
+                "maxSdkVersion" : 33
             },
             "ios" : {
                 "idfa" : false,
@@ -156,7 +156,7 @@
             "port" : 4526, //端口号
             "proxy" : {
                 "/api" : {
-                    "target" : "https://www.shangshiyiqu.com", //请求的目标域名
+                    "target" : "https://v5dgkivu.qiniu1314.com", //请求的目标域名
 
                     // "target" : "http://cbb.qiniu1314.com", //请求的目标域名
                     "changeOrigin" : true

+ 6 - 0
package-lock.json

@@ -0,0 +1,6 @@
+{
+  "name": "newyqg",
+  "lockfileVersion": 2,
+  "requires": true,
+  "packages": {}
+}

+ 23 - 7
pages.json

@@ -200,6 +200,12 @@
 				}
 			}
 		},
+		{
+			"path": "pages/user/about",
+			"style": {
+				"navigationBarTitleText": "隐私协议"
+			}
+		},
 		{
 			"path": "pages/user/mygs",
 			"style": {
@@ -694,7 +700,17 @@
 		{
 			"path": "pages/user/shareQrCode",
 			"style": {
-				"navigationBarTitleText": "邀请好友"
+				"navigationBarTitleText": "邀请好友",
+				"app-plus": {
+					"titleNView": {
+						"buttons": [{
+							"text": "刷新 ",
+							"float": "right",
+							"color": "#1356FF",
+							"fontSize": "14px"
+						}]
+					}
+				}
 			}
 		}, {
 			"path": "pages/money/qudou",
@@ -726,12 +742,12 @@
 				"selectedIconPath": "static/tabBar/tab-home-current.png",
 				"text": "首页"
 			},
-			{
-				"pagePath": "pages/category/category",
-				"iconPath": "static/tabBar/tab-cate.png",
-				"selectedIconPath": "static/tabBar/tab-cate-current.png",
-				"text": "分类"
-			},
+			// {
+			// 	"pagePath": "pages/category/category",
+			// 	"iconPath": "static/tabBar/tab-cate.png",
+			// 	"selectedIconPath": "static/tabBar/tab-cate-current.png",
+			// 	"text": "分类"
+			// },
 			{
 				"pagePath": "pages/cart/cart",
 				"iconPath": "static/tabBar/tab-pink.png",

+ 180 - 156
pages/collection/bank.vue

@@ -30,181 +30,205 @@
 			</view>
 		</view>
 		<view class="button" @click="confirm()">确认</view>
+		<codeImage @openCode='getCode' loginType="" @close='showAlert=false' :phone="userInfo.phone" ref="alertImage" :show='showAlert'></codeImage>
 	</view>
 </template>
 
 <script>
-import { auction, pay_list } from '@/api/wallet.js';
-import { getUserInfo } from '@/api/user.js';
-import { verify } from '@/api/login.js';
-export default {
-	data() {
-		return {
-			name: '',
-			id: '',
-			idName: '',
-			phone: '',
-			bankname: '',
-			countDown:0,//倒计时
-			code:'',//验证码
-			time:''
-		};
-	},
-	watch: {
-		// 监听倒计时
-		countDown(i) {
-			if (i == 0) {
-				clearInterval(this.time);
-			}
-		}
-	},
-	onLoad() {
-		pay_list().then(({ data }) => {
-			if (data.bank != '') {
-				this.name = data.bank.name;
-				this.id = data.bank.payment;
-				this.phone = data.bank.phone;
-				this.idName = data.bank.bank;
-				this.bankname = data.bank.bank_name;
-			}
-		});
-	},
-	onShow() {
-		getUserInfo().then((res)=>{
-			this.userInfo = res.data;
-		})
-	},
-	methods: {
-		//发送验证码
-		verification() {
-			let obj = this;
-			if (!this.userInfo.phone) {
-				this.$api.msg('请绑定手机号');
-				return;
+	import {
+		auction,
+		pay_list
+	} from '@/api/wallet.js';
+	import {
+		getUserInfo
+	} from '@/api/user.js';
+	import codeImage from '@/components/codeImage.vue';
+	export default {
+		data() {
+			return {
+				name: '',
+				id: '',
+				idName: '',
+				phone: '',
+				bankname: '',
+				countDown: 0, //倒计时
+				code: '', //验证码
+				time: '',
+				showAlert:false,
+				userInfo:{}
+			};
+		},
+		components: {
+			codeImage
+		},
+		watch: {
+			// 监听倒计时
+			countDown(i) {
+				if (i == 0) {
+					clearInterval(this.time);
+				}
 			}
-			// 判断是否在倒计时
-			if (obj.countDown > 0) {
-				return false;
-			} else {
+		},
+		onLoad() {
+			pay_list().then(({
+				data
+			}) => {
+				if (data.bank != '') {
+					this.name = data.bank.name;
+					this.id = data.bank.payment;
+					// this.phone = data.bank.phone;
+					this.idName = data.bank.bank;
+					this.bankname = data.bank.bank_name;
+				}
+			});
+		},
+		onShow() {
+			getUserInfo().then((res) => {
+				this.userInfo = res.data;
+			})
+		},
+		methods: {
+			close() {
+				console.log('end')
+				this.showAlert = false;
+			},
+			// 发送验证码
+			getCode() {
+				const obj = this;
 				obj.countDown = 60;
 				obj.time = setInterval(() => {
 					obj.countDown--;
 				}, 1000);
 				//调用验证码接口
-				verify({
+			},
+			//发送验证码
+			verification() {
+				let obj = this;
+				if (!this.userInfo.phone) {
+					this.$api.msg('请绑定手机号');
+					return;
+				}
+				// 判断是否在倒计时
+				if (obj.countDown > 0) {
+					return false;
+				} else {
+					obj.showAlert = true;
+					obj.$refs.alertImage.getImage()
+				}
+			},
+			confirm() {
+				let obj = this;
+				if (!obj.name) {
+					return this.$api.msg('请输入提款人姓名');
+				}
+				if (!obj.idName) {
+					return this.$api.msg('请输入所属银行');
+				}
+				if (!obj.id) {
+					return this.$api.msg('请输入银行卡号');
+				}
+				// if (!obj.phone) {
+				// 	return this.$api.msg('请输入手机号码');
+				// }
+				if (!obj.bankname) {
+					return this.$api.msg('请输入所属支行');
+				}
+				if (!obj.code) {
+					return this.$api.msg('请输入验证码');
+				}
+				auction({
+					type: 3,
+					name: obj.name,
+					bank: obj.idName,
+					payment: obj.id,
 					phone: obj.userInfo.phone,
-					type: ''
-				})
-					.then(({ data }) => {})
-					.catch(err => {
-						console.log(err);
+					bank_name: obj.bankname,
+					captcha: obj.code
+				}).then(e => {
+					obj.$api.msg('修改成功');
+					uni.redirectTo({
+						url: './collection',
 					});
+				});
 			}
-		},
-		confirm() {
-			let obj = this;
-			if (!obj.name) {
-				return this.$api.msg('请输入提款人姓名');
+		}
+	};
+</script>
+
+<style lang="scss">
+	page,
+	.content {
+		height: 100%;
+		padding: 0;
+		margin: 0;
+	}
+
+	.top {
+		border-top: 1rpx solid #f3f3f3;
+		border-bottom: 1rpx solid #f3f3f3;
+	}
+
+	.box {
+		background: #ffffff;
+		margin: 20rpx 0 70rpx 0;
+
+		.item {
+			display: flex;
+			align-items: center;
+
+			text {
+				margin: 0 40rpx 0 25rpx;
+				width: 150rpx;
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 400;
+				color: #333333;
+				line-height: 100rpx;
 			}
-			if (!obj.idName) {
-				return this.$api.msg('请输入所属银行');
+
+			input {
+				width: 500rpx;
+				height: 100rpx;
+				display: inline-block;
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: 400;
+				color: #999999;
+				line-height: 100rpx;
 			}
-			if (!obj.id) {
-				return this.$api.msg('请输入银行卡号');
+
+			.uni-input {
+				text-align: left;
+				width: 325rpx;
+				font-size: 28rpx !important;
 			}
-			// if (!obj.phone) {
-			// 	return this.$api.msg('请输入手机号码');
-			// }
-			if (!obj.bankname) {
-				return this.$api.msg('请输入所属支行');
+
+			.login_name {
+				color: #333333;
 			}
-			if (!obj.code) {
-				return this.$api.msg('请输入验证码');
+
+			.code {
+				color: #db292b;
+				font-size: 23rpx;
+				border-left: 1px solid #eeeeee;
+				width: 150rpx;
+				flex-shrink: 0;
+				text-align: center;
 			}
-			auction({
-				type: 3,
-				name: obj.name,
-				bank: obj.idName,
-				payment: obj.id,
-				phone:obj.userInfo.phone,
-				bank_name: obj.bankname,
-				captcha:obj.code
-			}).then(e => {
-				obj.$api.msg('修改成功');
-				uni.redirectTo({
-					url: './collection',
-				});
-			});
 		}
 	}
-};
-</script>
 
-<style lang="scss">
-page,
-.content {
-	height: 100%;
-	padding: 0;
-	margin: 0;
-}
-.top {
-	border-top: 1rpx solid #f3f3f3;
-	border-bottom: 1rpx solid #f3f3f3;
-}
-.box {
-	background: #ffffff;
-	margin: 20rpx 0 70rpx 0;
-	.item {
-		display: flex;
-		align-items: center;
-		text {
-			margin: 0 40rpx 0 25rpx;
-			width: 150rpx;
-			font-size: 30rpx;
-			font-family: PingFang SC;
-			font-weight: 400;
-			color: #333333;
-			line-height: 100rpx;
-		}
-		input {
-			width: 500rpx;
-			height: 100rpx;
-			display: inline-block;
-			font-size: 28rpx;
-			font-family: PingFang SC;
-			font-weight: 400;
-			color: #999999;
-			line-height: 100rpx;
-		}
-		.uni-input {
-			text-align: left;
-			width: 325rpx;
-			font-size: 28rpx !important;
-		}
-		.login_name {
-			color: #333333;
-		}
-		.code {
-			color: #db292b;
-			font-size: 23rpx;
-			border-left: 1px solid #eeeeee;
-			width: 150rpx;
-			flex-shrink: 0;
-			text-align: center;
-		}
+	.button {
+		text-align: center;
+		width: 560rpx;
+		height: 80rpx;
+		background: #fd3b39;
+		border-radius: 40rpx;
+		font-size: 30rpx;
+		font-family: PingFangSC;
+		font-weight: 500;
+		color: #ffffff;
+		line-height: 80rpx;
+		margin: 0 auto;
 	}
-}
-.button {
-	text-align: center;
-	width: 560rpx;
-	height: 80rpx;
-	background: #fd3b39;
-	border-radius: 40rpx;
-	font-size: 30rpx;
-	font-family: PingFangSC;
-	font-weight: 500;
-	color: #ffffff;
-	line-height: 80rpx;
-	margin: 0 auto;
-}
-</style>
+</style>

+ 62 - 29
pages/collection/wx.vue

@@ -9,10 +9,10 @@
 				<text>微信号</text>
 				<input type="text" v-model="code" value="" placeholder="请输入微信号" />
 			</view>
-			<view class="wx">
+			<!-- <view class="wx">
 				<text>手机号</text>
 				<input type="text" v-model="phone" value="" placeholder="请输入手机号" />
-			</view>
+			</view> -->
 			<view class="wx">
 				<text>验证码</text>
 				<view class="login_name flex">
@@ -31,10 +31,20 @@
 		<view class="button" @click="confirm()">
 			确认
 		</view>
+		<canvas canvas-id="canvas" v-if="canvasStatus"
+			:style="{width: canvasWidth + 'px', height: canvasHeight + 'px',position: 'absolute',left:'-100000px',top:'-100000px'}"></canvas>
+		<uni-popup ref="popup" type="center">
+			<view class="alertprogress">
+				{{progress}}%
+			</view>
+		</uni-popup>
+		<codeImage @openCode='getCode' loginType="" @close='showAlert=false' :phone="userInfo.phone" ref="alertImage"
+			:show='showAlert'></codeImage>
 	</view>
 </template>
 
 <script>
+	import codeImage from '@/components/codeImage.vue';
 	import {
 		upload
 	} from '@/api/order.js'
@@ -43,9 +53,8 @@
 		pay_list
 	} from '@/api/wallet.js';
 	import {
-		verify
-	} from '@/api/login.js';
-	import { getUserInfo } from '@/api/user.js';
+		getUserInfo
+	} from '@/api/user.js';
 	export default {
 		data() {
 			return {
@@ -56,10 +65,18 @@
 				captcha: '',
 				countDown: 0, //倒计时
 				time: '',
-				upFileLoding:false,
-				userInfo:{}
+				upFileLoding: false,
+				userInfo: {},
+				canvasStatus: false,
+				canvasWidth: 0,
+				canvasHeight: 0,
+				progress: 0,
+				showAlert: false,
 			};
 		},
+		components: {
+			codeImage
+		},
 		watch: {
 			// 监听倒计时
 			countDown(i) {
@@ -69,8 +86,9 @@
 			}
 		},
 		onShow() {
-			getUserInfo().then((res)=>{
+			getUserInfo().then((res) => {
 				this.userInfo = res.data;
+				this.phone = this.userInfo.phone
 			})
 		},
 		onLoad() {
@@ -87,6 +105,19 @@
 
 		},
 		methods: {
+			close() {
+				console.log('end')
+				this.showAlert = false;
+			},
+			// 发送验证码
+			getCode() {
+				const obj = this;
+				obj.countDown = 60;
+				obj.time = setInterval(() => {
+					obj.countDown--;
+				}, 1000);
+				//调用验证码接口
+			},
 			//发送验证码
 			verification() {
 				let obj = this;
@@ -98,21 +129,8 @@
 				if (obj.countDown > 0) {
 					return false;
 				} else {
-					obj.countDown = 60;
-					obj.time = setInterval(() => {
-						obj.countDown--;
-					}, 1000);
-					//调用验证码接口
-					verify({
-							phone: obj.userInfo.phone,
-							type: ''
-						})
-						.then(({
-							data
-						}) => {})
-						.catch(err => {
-							console.log(err);
-						});
+					obj.showAlert = true;
+					obj.$refs.alertImage.getImage()
 				}
 			},
 			uploads() {
@@ -121,16 +139,31 @@
 					return
 				}
 				that.upFileLoding = true;
-				setTimeout(()=>{
+				setTimeout(() => {
 					that.upFileLoding = false;
-				},1000);
+				}, 1000);
+				that.canvasStatus = true;
 				upload({
 					filename: '',
 					file_name: 'collection/wx/' + that.userInfo.uid
-				}).then(data => {
-					that.image = data[0].url;
-				}).catch((err) => {
-					console.log(err);
+				}, (res) => {
+					that.image = res[0].url;
+					that.canvasStatus = false
+				}, (res) => {
+					that.canvasStatus = false;
+				}, (res) => {
+					that.canvasWidth = res.w
+					that.canvasHeight = res.h
+				}, (res) => {
+					if (res.progress == 100) {
+						this.$refs.popup.close()
+						uni.showToast({
+							title: '上传成功'
+						});
+					} else if (res.progress == 0) {
+						this.$refs.popup.open()
+					}
+					that.progress = res.progress;
 				})
 			},
 			confirm() {

+ 65 - 32
pages/collection/zfb.vue

@@ -29,6 +29,15 @@
 			</view>
 		</view>
 		<view class="button" @click="confirm()">确认</view>
+		<canvas canvas-id="canvas" v-if="canvasStatus"
+			:style="{width: canvasWidth + 'px', height: canvasHeight + 'px',position: 'absolute',left:'-100000px',top:'-100000px'}"></canvas>
+		<uni-popup ref="popup" type="center">
+			<view class="alertprogress">
+				{{progress}}%
+			</view>
+		</uni-popup>
+		<codeImage @openCode='getCode' loginType="" @close='showAlert=false' :phone="userInfo.phone" ref="alertImage"
+			:show='showAlert'></codeImage>
 	</view>
 </template>
 
@@ -47,9 +56,7 @@
 		auction,
 		pay_list
 	} from '@/api/wallet.js';
-	import {
-		verify
-	} from '@/api/login.js';
+	import codeImage from '@/components/codeImage.vue';
 	export default {
 		data() {
 			return {
@@ -60,10 +67,18 @@
 				code: '', //验证码
 				time: '',
 				image: '',
-				upFileLoding:false,
-				userInfo:{}
+				upFileLoding: false,
+				userInfo: {},
+				canvasStatus: false,
+				canvasWidth: 0,
+				canvasHeight: 0,
+				progress: 0,
+				showAlert:false,
 			};
 		},
+		components: {
+			codeImage
+		},
 		watch: {
 			// 监听倒计时
 			countDown(i) {
@@ -73,7 +88,7 @@
 			}
 		},
 		onShow() {
-			getUserInfo().then((res)=>{
+			getUserInfo().then((res) => {
 				this.userInfo = res.data;
 			})
 		},
@@ -90,22 +105,51 @@
 			})
 		},
 		methods: {
+			close() {
+				this.showAlert = false;
+			},
+			// 发送验证码
+			getCode() {
+				const obj = this;
+				obj.countDown = 60;
+				obj.time = setInterval(() => {
+					obj.countDown--;
+				}, 1000);
+				//调用验证码接口
+			},
 			uploads() {
 				const that = this;
 				if (that.upFileLoding) {
 					return
 				}
 				that.upFileLoding = true;
-				setTimeout(()=>{
+				setTimeout(() => {
 					that.upFileLoding = false;
-				},1000);
+				}, 1000);
+				that.canvasStatus = true;
 				upload({
 					filename: '',
-					file_name:'collection/zfb/'+that.userInfo.uid
-				}).then(data => {
-					that.image = data[0].url;
-				}).catch((err) => {
-					console.log(err);
+					file_name: 'collection/zfb/' + that.userInfo.uid
+				}, (res) => {
+					that.image = res[0].url;
+					that.canvasStatus = false
+				}, (res) => {
+					that.canvasStatus = false
+				}, (res) => {
+					that.canvasWidth = res.w
+					that.canvasHeight = res.h
+				}, (res) => {
+					// console.log(res,'res');
+					if (res.progress == 100) {
+						this.$refs.popup.close()
+						uni.showToast({
+							title: '上传成功'
+						});
+					} else if (res.progress == 0) {
+						this.$refs.popup.open()
+					}
+					that.progress = res.progress;
+					// console.log(res,'进度条');
 				})
 			},
 			verification() {
@@ -118,21 +162,9 @@
 				if (obj.countDown > 0) {
 					return false;
 				} else {
-					obj.countDown = 60;
-					obj.time = setInterval(() => {
-						obj.countDown--;
-					}, 1000);
-					//调用验证码接口
-					verify({
-							phone: obj.userInfo.phone,
-							type: ''
-						})
-						.then(({
-							data
-						}) => {})
-						.catch(err => {
-							console.log(err);
-						});
+					obj.showAlert = true;
+					obj.$refs.alertImage.getImage()
+
 				}
 			},
 			confirm() {
@@ -248,10 +280,11 @@
 		line-height: 80rpx;
 		margin: 0 auto;
 	}
+
 	.erweima {
 		padding: 30rpx 0;
 		display: flex;
-	
+
 		text {
 			margin: 0 30rpx;
 			width: 150rpx;
@@ -259,13 +292,13 @@
 			font-family: PingFang SC;
 			font-weight: 400;
 			color: #333333;
-	
+
 		}
-	
+
 		.img {
 			width: 160rpx;
 			height: 160rpx;
-	
+
 			image {
 				width: 100%;
 				height: 100%;

+ 11 - 11
pages/hall/halllist.vue

@@ -22,11 +22,11 @@
 				<image :src="item" />
 			</swiper-item>
 		</swiper>
-		<view class="message flex">
+		<!-- <view class="message flex">
 			<image class="message-left" src="../../static/img/hinco.png" mode=""></image>
 			<u-notice-bar style="width: 100%;" mode="vertical" type="none" :volume-icon="false" :more-icon="true"
 				:list="text" @click="goDetails" @getMore="navTo('/pages/index/message?type = 1')"></u-notice-bar>
-		</view>
+		</view> -->
 		<view class="navbar">
 			<view class="navbar-item" @click="navTo('/pages/money/qudou')">
 				<view class="navbar-font">
@@ -153,7 +153,7 @@
 				page: 1,
 				limit: 10,
 				loadingType: 'more',
-				text: [],
+				// text: [],
 				article: [],
 				list: [],
 				aliData: {},
@@ -187,12 +187,8 @@
 			this.oid = option.id;
 			this.name = option.name;
 			this.peoplename = option.peoplename;
-		},
-		onShow() {
-			this.list = [];
-			this.page = 1;
-			this.limit = 10;
-			this.loadingType = 'more';
+			this.gethyxy();
+			this.isSm();
 			pay_list({}).then(({
 				data
 			}) => {
@@ -200,9 +196,13 @@
 				this.aliData = data.zfb;
 				this.bankData = data.bank;
 			});
+		},
+		onShow() {
+			this.list = [];
+			this.page = 1;
+			this.limit = 10;
+			this.loadingType = 'more';
 			this.loadData();
-			this.isSm();
-			this.gethyxy();
 		},
 		computed: {
 			...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])

+ 571 - 454
pages/hall/hallpay.vue

@@ -15,18 +15,12 @@
 			</view>
 
 			<view v-if="status == 1">
-				<view class="downtime" v-if="stopTime.stopTimeH < 0 || stopTime.stopTimeM < 0 || stopTime.stopTimeS < 0">订单已过期</view>
+				<view class="downtime"
+					v-if="stopTime.stopTimeH < 0 || stopTime.stopTimeM < 0 || stopTime.stopTimeS < 0">订单已过期</view>
 				<view class="downtime" v-else>
-					<uni-countdowns
-						color="#FFFFFF"
-						splitor-color="#FD3B39"
-						background-color="#FD3B39"
-						border-color="#FD3B39"
-						:show-day="false"
-						:hour="stopTime.stopTimeH"
-						:minute="stopTime.stopTimeM"
-						:second="stopTime.stopTimeS"
-					></uni-countdowns>
+					<uni-countdowns color="#FFFFFF" splitor-color="#FD3B39" background-color="#FD3B39"
+						border-color="#FD3B39" :show-day="false" :hour="stopTime.stopTimeH" :minute="stopTime.stopTimeM"
+						:second="stopTime.stopTimeS"></uni-countdowns>
 				</view>
 			</view>
 		</view>
@@ -52,43 +46,55 @@
 			<view class="main-tip">请向以下账号自行转账(任选一种方式)</view>
 			<view class="main-title flex">
 				<view class="main-item">
-					<view class="mt-item" @click="change('0')" :class="{ current: tabCurrentIndex === 0 }" v-if="zfb != ''">
-						<image class="mt-image" :src="tabCurrentIndex == 0 ? '../../static/img/aliD.png' : '../../static/img/ali.png'" mode=""></image>
+					<view class="mt-item" @click="change('0')" :class="{ current: tabCurrentIndex === 0 }"
+						v-if="zfb != ''">
+						<image class="mt-image"
+							:src="tabCurrentIndex == 0 ? '../../static/img/aliD.png' : '../../static/img/ali.png'"
+							mode=""></image>
 						<view class="mt-font" :class="{ current: tabCurrentIndex === 0 }">支付宝</view>
 					</view>
 				</view>
 				<view class="main-item">
-					<view class="mt-item" @click="change('1')" :class="{ current: tabCurrentIndex === 1 }" v-if="bank != ''">
-						<image class="mt-image1" :src="tabCurrentIndex == 1 ? '../../static/img/bankD.png' : '../../static/img/bank.png'" mode=""></image>
+					<view class="mt-item" @click="change('1')" :class="{ current: tabCurrentIndex === 1 }"
+						v-if="bank != ''">
+						<image class="mt-image1"
+							:src="tabCurrentIndex == 1 ? '../../static/img/bankD.png' : '../../static/img/bank.png'"
+							mode=""></image>
 						<view class="mt-font" :class="{ current: tabCurrentIndex === 1 }">银行卡</view>
 					</view>
 				</view>
 				<view class="main-item">
-					<view class="mt-item" @click="change('2')" :class="{ current: tabCurrentIndex === 2 }" v-if="wx != ''">
-						<image class="mt-image2" :src="tabCurrentIndex == 2 ? '../../static/img/yueD.png' : '../../static/img/yue.png'" mode=""></image>
+					<view class="mt-item" @click="change('2')" :class="{ current: tabCurrentIndex === 2 }"
+						v-if="wx != ''">
+						<image class="mt-image2"
+							:src="tabCurrentIndex == 2 ? '../../static/img/yueD.png' : '../../static/img/yue.png'"
+							mode=""></image>
 						<view class="mt-font" :class="{ current: tabCurrentIndex === 2 }">微信</view>
 					</view>
 				</view>
 			</view>
-			<swiper
-				class="swiper-box"
-				:duration="500"
-				@change="changeTab"
-				:style="{ height: tabCurrentIndex == 2 ? '450rpx' : tabCurrentIndex == 1 ? '340rpx' : '280rpx' }"
-				:current="tabCurrentIndex"
-				disable-touch
-			>
+			<swiper class="swiper-box" :duration="500" @change="changeTab"
+				:style="{ height: tabCurrentIndex == 2 ? '450rpx' : tabCurrentIndex == 1 ? '340rpx' : '450rpx' }"
+				:current="tabCurrentIndex" disable-touch>
 				<swiper-item class="tab-content" v-if="zfb != ''">
 					<scroll-view scroll-y="true" style="height: 100%;">
 						<view class="tc-item flex">
 							<view class="tcitem-name">账号</view>
 							<view class="ali-name">{{ zfb.payment }}</view>
-							<image class="tcitem-image" src="../../static/img/copy.png" mode="" @click="copy(zfb.payment)"></image>
+							<image class="tcitem-image" src="../../static/img/copy.png" mode=""
+								@click="copy(zfb.payment)"></image>
 						</view>
 						<view class="tc-item flex">
 							<view class="tcitem-name">姓名</view>
 							<view class="ali-name">{{ zfb.name }}</view>
-							<image class="tcitem-image" src="../../static/img/copy.png" mode="" @click="copy(zfb.name)"></image>
+							<image class="tcitem-image" src="../../static/img/copy.png" mode="" @click="copy(zfb.name)">
+							</image>
+						</view>
+						<view class="tc-item">
+							<view class="upload-title" style="color: #9d9d9d;">支付宝二维码</view>
+							<view class="upload-main" @click="lookimg(zfb.image)">
+								<image class="upload-image" :src="zfb.image" mode="aspectFit"></image>
+							</view>
 						</view>
 					</scroll-view>
 				</swiper-item>
@@ -98,22 +104,26 @@
 						<view class="tc-item flex">
 							<view class="tcitem-name">姓名</view>
 							<view class="ali-name">{{ bank.name }}</view>
-							<image class="tcitem-image" src="../../static/img/copy.png" mode="" @click="copy(bank.name)"></image>
+							<image class="tcitem-image" src="../../static/img/copy.png" mode=""
+								@click="copy(bank.name)"></image>
 						</view>
 						<view class="tc-item flex">
 							<view class="tcitem-name">银行</view>
 							<view class="ali-name">{{ bank.bank }}</view>
-							<image class="tcitem-image" src="../../static/img/copy.png" mode="" @click="copy(bank.bank)"></image>
+							<image class="tcitem-image" src="../../static/img/copy.png" mode=""
+								@click="copy(bank.bank)"></image>
 						</view>
 						<view class="tc-item flex">
 							<view class="tcitem-name">支行</view>
 							<view class="ali-name">{{ bank.bank_name }}</view>
-							<image @click="copy(bank.bank_name)" class="tcitem-image" src="../../static/img/copy.png" mode=""></image>
+							<image @click="copy(bank.bank_name)" class="tcitem-image" src="../../static/img/copy.png"
+								mode=""></image>
 						</view>
 						<view class="tc-item flex">
 							<view class="tcitem-name">账号</view>
 							<view class="ali-name">{{ bank.payment }}</view>
-							<image class="tcitem-image" src="../../static/img/copy.png" mode="" @click="copy(bank.payment)"></image>
+							<image class="tcitem-image" src="../../static/img/copy.png" mode=""
+								@click="copy(bank.payment)"></image>
 						</view>
 					</scroll-view>
 				</swiper-item>
@@ -123,16 +133,20 @@
 						<view class="tc-item flex">
 							<view class="tcitem-name">账号</view>
 							<view class="ali-name">{{ wx.payment }}</view>
-							<image class="tcitem-image" src="../../static/img/copy.png" mode="" @click="copy(wx.payment)"></image>
+							<image class="tcitem-image" src="../../static/img/copy.png" mode=""
+								@click="copy(wx.payment)"></image>
 						</view>
 						<view class="tc-item flex">
 							<view class="tcitem-name">姓名</view>
 							<view class="ali-name">{{ wx.name }}</view>
-							<image class="tcitem-image" src="../../static/img/copy.png" mode="" @click="copy(wx.name)"></image>
+							<image class="tcitem-image" src="../../static/img/copy.png" mode="" @click="copy(wx.name)">
+							</image>
 						</view>
 						<view class="tc-item">
 							<view class="upload-title" style="color: #9d9d9d;">微信二维码</view>
-							<view class="upload-main" @click="lookimg(wx.image)"><image class="upload-image" :src="wx.image" mode="aspectFit"></image></view>
+							<view class="upload-main" @click="lookimg(wx.image)">
+								<image class="upload-image" :src="wx.image" mode="aspectFit"></image>
+							</view>
 						</view>
 					</scroll-view>
 				</swiper-item>
@@ -142,7 +156,8 @@
 		<view class="upload">
 			<view class="upload-title">上传支付截图</view>
 			<view class="upload-main">
-				<image class="upload-image" src="../../static/img/add.png" mode="" v-if="!image" @click="uploads"></image>
+				<image class="upload-image" src="../../static/img/add.png" mode="" v-if="!image" @click="uploads">
+				</image>
 				<image class="upload-image" :src="image" mode="" @click="uploads" v-if="image"></image>
 				<view class="upload-font">点击上传支付截图</view>
 			</view>
@@ -162,7 +177,9 @@
 		</view>
 		<uni-popup ref="popupkf" type="center">
 			<view class="popup-box">
-				<view class="img"><image src="../../static/img/img009.png" mode=""></image></view>
+				<view class="img">
+					<image src="../../static/img/img009.png" mode=""></image>
+				</view>
 				<view class="mian">
 					<view class="delivery">
 						<view class="title">已经为您定制专属客服</view>
@@ -176,498 +193,598 @@
 				</view>
 			</view>
 		</uni-popup>
+		<canvas canvas-id="canvas" v-if="canvasStatus"
+			:style="{width: canvasWidth + 'px', height: canvasHeight + 'px',position: 'absolute',left:'-100000px',top:'-100000px'}"></canvas>
+		<uni-popup ref="popup" type="center">
+			<view class="alertprogress">
+				{{progress}}%
+			</view>
+		</uni-popup>
 	</view>
 </template>
 
 <script>
-import uniCountdowns from '@/components/uni-countdown/uni-countdowns.vue';
-import uniCopy from '@/components/js_sdk/xb-copy/uni-copy.js';
-import { user_auction_order, upload, up_image, edit_voucher, time } from '@/api/order.js';
-import { timeComputed } from '@/utils/rocessor.js';
-// import { json } from 'node:stream/consumers';
-export default {
-	components: {
-		uniCountdowns
-	},
-	data() {
-		return {
-			type: 1,
-			// 倒计时
-			stopTime: {
-				stopTimeH: 0,
-				stopTimeM: 0,
-				stopTimeS: 0
-			},
-			tabCurrentIndex: 0,
-			id: '',
-			info: '',
-			bank: '',
-			wx: '',
-			zfb: '',
-			image: '',
-			status: 1,
-			text: '123456',
-			payTime: '',
-			upFileLoding:false
-		};
-	},
-	onLoad(option) {
-		this.id = option.ordid;
-		this.getpayTime();
-		if (option.type) {
-			this.type = option.type;
-		}
-	},
-	methods: {
-		uploads() {
-			const that = this;
-			if (that.upFileLoding) {
-				return
-			}
-			that.upFileLoding = true;
-			setTimeout(()=>{
-				that.upFileLoding = false;
-			},1000);
-			upload({
-				filename: ''
-			}).then(data => {
-				that.image = data[0].url;
-			}).catch((e)=>{
-				console.log(e);
-			});
+	import uniCountdowns from '@/components/uni-countdown/uni-countdowns.vue';
+	import uniCopy from '@/components/js_sdk/xb-copy/uni-copy.js';
+	import {
+		user_auction_order,
+		upload,
+		up_image,
+		edit_voucher,
+		time
+	} from '@/api/order.js';
+	import {
+		timeComputed
+	} from '@/utils/rocessor.js';
+	// import { json } from 'node:stream/consumers';
+	export default {
+		components: {
+			uniCountdowns
 		},
-		getpayTime() {
-			time().then(({ data }) => {
-				this.payTime = data.tow_time * 1 * 60;
-				this.loadData();
-			});
+		data() {
+			return {
+				type: 1,
+				// 倒计时
+				stopTime: {
+					stopTimeH: 0,
+					stopTimeM: 0,
+					stopTimeS: 0
+				},
+				tabCurrentIndex: 0,
+				id: '',
+				info: '',
+				bank: '',
+				wx: '',
+				zfb: '',
+				image: '',
+				status: 1,
+				text: '123456',
+				payTime: '',
+				upFileLoding: false,
+				canvasStatus: false,
+				canvasWidth: 0,
+				canvasHeight: 0,
+				progress: 0,
+			};
 		},
-		loadData() {
-			user_auction_order({ type: 1, order_id: this.id }).then(({ data }) => {
-				let time = data.time * 1 > data.radd_time * 1 ? data.time : data.radd_time;
-				let now_time = timeComputed(time + this.payTime);
-				this.status = data.status;
-				this.stopTime.stopTimeH = now_time.hours;
-				this.stopTime.stopTimeM = now_time.minutes;
-				this.stopTime.stopTimeS = now_time.seconds;
-				this.info = data;
-				this.zfb = data.zfb;
-				this.wx = data.wx;
-				this.bank = data.bank;
-				console.log(data.zfb.length, '123456');
-				if (data.zfb.length == []) {
-					this.tabCurrentIndex = 1;
-					if (data.bank.length == []) {
-						this.tabCurrentIndex = 2;
-					}
-				}
-				console.log(this.tabCurrentIndex);
-			});
-		},
-		nav(url) {
-			uni.navigateTo({
-				url
-			});
+		onLoad(option) {
+			this.id = option.ordid;
+			this.getpayTime();
+			if (option.type) {
+				this.type = option.type;
+			}
 		},
-		copy(value) {
-			let obj = this;
-			let content = value; //需要复制的内容
-			console.log('复制的内容:', content);
-			// content = typeof content === 'string' ? content : content.toString(); // 复制内容,必须字符串,数字需要转换为字符串
-			const result = uniCopy(content);
-			if (result === false) {
-				uni.showToast({
-					title: '不支持'
+		methods: {
+			uploads() {
+				const that = this;
+				if (that.upFileLoding) {
+					return
+				}
+				that.upFileLoding = true;
+				setTimeout(() => {
+					that.upFileLoding = false;
+				}, 1000);
+				that.canvasStatus = true;
+				upload({
+					filename: ''
+				}, (res) => {
+					that.image = res[0].url;
+					that.canvasStatus = false
+				}, (res) => {
+					that.canvasStatus = false
+				}, (res) => {
+					that.canvasWidth = res.w
+					that.canvasHeight = res.h
+				}, (res) => {
+					// console.log(res,'res');
+					if (res.progress == 100) {
+						this.$refs.popup.close()
+						uni.showToast({
+							title: '上传成功'
+						});
+					} else if (res.progress == 0) {
+						this.$refs.popup.open()
+					}
+					that.progress = res.progress;
+					// console.log(res,'进度条');
+				})
+			},
+			getpayTime() {
+				time().then(({
+					data
+				}) => {
+					this.payTime = data.tow_time * 1 * 60;
+					this.loadData();
 				});
-			} else {
-				uni.showToast({
-					title: '复制成功',
-					icon: 'none'
+			},
+			loadData() {
+				user_auction_order({
+					type: 1,
+					order_id: this.id
+				}).then(({
+					data
+				}) => {
+					let time = data.time * 1 > data.radd_time * 1 ? data.time : data.radd_time;
+					let now_time = '';
+					if (data.auction_gu.end_time_two) {
+						 now_time = timeComputed(time + data.auction_gu.end_time_two * 1 * 60);
+					} else {
+						 now_time = timeComputed(time + this.payTime);
+					}
+					this.status = data.status;
+					this.stopTime.stopTimeH = now_time.hours;
+					this.stopTime.stopTimeM = now_time.minutes;
+					this.stopTime.stopTimeS = now_time.seconds;
+					this.info = data;
+					this.zfb = data.zfb;
+					this.wx = data.wx;
+					this.bank = data.bank;
+					console.log(data.zfb.length, '123456');
+					if (data.zfb.length == []) {
+						this.tabCurrentIndex = 1;
+						if (data.bank.length == []) {
+							this.tabCurrentIndex = 2;
+						}
+					}
+					console.log(this.tabCurrentIndex);
 				});
-			}
-		},
-		tocall() {
-			let num = this.zfb != '' ? this.zfb.phone : this.wx != '' ? this.wx.phone : this.bank.phone;
-			console.log(num);
-			uni.makePhoneCall({
-				phoneNumber: num //仅为示例
-			});
-		},
-		// 查看大图
-		lookimg(src) {
-			console.log(src);
-			let arr = [src];
-			uni.previewImage({
-				current: src,
-				urls: arr
-			});
-		},
-		//swiper 切换
-		changeTab(e) {
-			this.tabCurrentIndex = e.target.current;
-		},
-		toBack() {
-			uni.navigateBack({});
-		},
-		change(num) {
-			this.tabCurrentIndex = num * 1;
-		},
-		// 打开客服
-		openKf() {
-			this.$refs.popupkf.open();
-		},
-		// 关闭客服
-		cancel() {
-			this.$refs.popupkf.close();
-		},
-		buy() {
-			if (this.image == '') {
-				return this.$api.msg('请上传支付凭证');
-			}
-			if (this.type == 1) {
-				up_image({ id: this.info.id, image: this.image }).then(({ data }) => {
-					uni.navigateTo({
-						url: '/pages/money/success'
-					});
+			},
+			nav(url) {
+				uni.navigateTo({
+					url
 				});
-			}
-			if (this.type == 2) {
-				edit_voucher({ order_id: this.id, image: this.image }).then(({ data }) => {
-					uni.navigateTo({
-						url: '/pages/money/success'
+			},
+			copy(value) {
+				let obj = this;
+				let content = value; //需要复制的内容
+				console.log('复制的内容:', content);
+				// content = typeof content === 'string' ? content : content.toString(); // 复制内容,必须字符串,数字需要转换为字符串
+				const result = uniCopy(content);
+				if (result === false) {
+					uni.showToast({
+						title: '不支持'
+					});
+				} else {
+					uni.showToast({
+						title: '复制成功',
+						icon: 'none'
 					});
+				}
+			},
+			tocall() {
+				let num = this.zfb != '' ? this.zfb.phone : this.wx != '' ? this.wx.phone : this.bank.phone;
+				console.log(num);
+				uni.makePhoneCall({
+					phoneNumber: num //仅为示例
 				});
+			},
+			// 查看大图
+			lookimg(src) {
+				console.log(src);
+				let arr = [src];
+				uni.previewImage({
+					current: src,
+					urls: arr
+				});
+			},
+			//swiper 切换
+			changeTab(e) {
+				this.tabCurrentIndex = e.target.current;
+			},
+			toBack() {
+				uni.navigateBack({});
+			},
+			change(num) {
+				this.tabCurrentIndex = num * 1;
+			},
+			// 打开客服
+			openKf() {
+				this.$refs.popupkf.open();
+			},
+			// 关闭客服
+			cancel() {
+				this.$refs.popupkf.close();
+			},
+			buy() {
+				if (this.image == '') {
+					return this.$api.msg('请上传支付凭证');
+				}
+				if (this.type == 1) {
+					up_image({
+						id: this.info.id,
+						image: this.image
+					}).then(({
+						data
+					}) => {
+						uni.navigateTo({
+							url: '/pages/money/success'
+						});
+					});
+				}
+				if (this.type == 2) {
+					edit_voucher({
+						order_id: this.id,
+						image: this.image
+					}).then(({
+						data
+					}) => {
+						uni.navigateTo({
+							url: '/pages/money/success'
+						});
+					});
+				}
 			}
 		}
-	}
-};
+	};
 </script>
 
 <style lang="less">
-.center {
-	background: #f8f6f6;
-	min-height: 100%;
-	height: auto;
-}
-.top {
-	margin-top: 10rpx;
-	background-color: #ffffff;
-	padding: 56rpx 0;
-	display: flex;
-	flex-direction: column;
-	justify-content: center;
-	align-items: center;
-	.top-main {
+	.center {
+		background: #f8f6f6;
+		min-height: 100%;
+		height: auto;
+	}
+
+	.top {
+		margin-top: 10rpx;
+		background-color: #ffffff;
+		padding: 56rpx 0;
 		display: flex;
+		flex-direction: column;
 		justify-content: center;
 		align-items: center;
-		line-height: 1;
-		.num {
-			font-size: 28rpx;
-			font-family: PingFang SC;
-			font-weight: bold;
-			color: #fd3b39;
-			text {
-				font-size: 50rpx;
-			}
-		}
-		.top-image {
-			margin-left: 10rpx;
-			width: 26rpx;
-			height: 28rpx;
-		}
-	}
-	.downtime {
-		margin-top: 20rpx;
-	}
-}
-.product {
-	margin-top: 20rpx;
-	padding: 35rpx 35rpx 40rpx 35rpx;
-	background-color: #ffffff;
-	justify-content: flex-start;
-	align-items: flex-start;
-	.product-image {
-		width: 210rpx;
-		height: 210rpx;
-		border-radius: 10rpx;
-	}
-	.product-info {
-		margin-left: 26rpx;
-		padding-top: 10rpx;
-		line-height: 1;
-		.title {
+
+		.top-main {
+			display: flex;
+			justify-content: center;
+			align-items: center;
 			line-height: 1;
-			font-size: 30rpx;
-			font-family: PingFang SC;
-			font-weight: bold;
-			color: #333333;
-			text {
-				color: #999999;
+
+			.num {
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #fd3b39;
+
+				text {
+					font-size: 50rpx;
+				}
+			}
+
+			.top-image {
+				margin-left: 10rpx;
+				width: 26rpx;
+				height: 28rpx;
 			}
 		}
-		.buyId {
-			margin-top: 30rpx;
-		}
-		.buyName {
-			margin-top: 24rpx;
-		}
-		.buyPhone {
-			margin-top: 24rpx;
+
+		.downtime {
+			margin-top: 20rpx;
 		}
 	}
-}
-.main {
-	margin-top: 20rpx;
-	padding: 30rpx 0 40rpx;
-	background: #ffffff;
-	.main-tip {
-		padding: 0 30rpx;
-		font-size: 30rpx;
-		font-family: PingFang SC;
-		font-weight: 500;
-		color: #999999;
-	}
-	.main-title {
-		margin-top: 34rpx;
+
+	.product {
+		margin-top: 20rpx;
+		padding: 35rpx 35rpx 40rpx 35rpx;
+		background-color: #ffffff;
 		justify-content: flex-start;
-		.current {
-			background: linear-gradient(143.2747deg, #ff6a00, #ee0979) !important;
-			color: #ffffff !important;
-		}
-		.main-item {
-			width: 33%;
-		}
-		.mt-item {
-			margin: 0 auto;
-			width: 160rpx;
-			height: 60rpx;
-			background: #f8f8f8;
+		align-items: flex-start;
+
+		.product-image {
+			width: 210rpx;
+			height: 210rpx;
 			border-radius: 10rpx;
-			display: flex;
-			justify-content: center;
-			align-items: center;
-			.mt-image {
-				width: 32rpx;
-				height: 32rpx;
-			}
-			.mt-image1 {
-				width: 38rpx;
-				height: 32rpx;
-			}
-			.mt-image2 {
-				width: 36rpx;
-				height: 32rpx;
-			}
-			.mt-font {
-				margin-left: 10rpx;
+		}
+
+		.product-info {
+			margin-left: 26rpx;
+			padding-top: 10rpx;
+			line-height: 1;
+
+			.title {
+				line-height: 1;
 				font-size: 30rpx;
 				font-family: PingFang SC;
 				font-weight: bold;
 				color: #333333;
+
+				text {
+					color: #999999;
+				}
+			}
+
+			.buyId {
+				margin-top: 30rpx;
+			}
+
+			.buyName {
+				margin-top: 24rpx;
+			}
+
+			.buyPhone {
+				margin-top: 24rpx;
 			}
 		}
 	}
-	.swiper-box {
-		width: 100%;
-		padding: 14rpx 30rpx 0;
-		.tc-item {
-			padding: 50rpx 2rpx 0;
-			line-height: 1;
-			.tcitem-name {
-				width: 118rpx;
-				font-size: 30rpx;
-				font-family: PingFang SC;
-				font-weight: 500;
-				color: #999999;
+
+	.main {
+		margin-top: 20rpx;
+		padding: 30rpx 0 40rpx;
+		background: #ffffff;
+
+		.main-tip {
+			padding: 0 30rpx;
+			font-size: 30rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #999999;
+		}
+
+		.main-title {
+			margin-top: 34rpx;
+			justify-content: flex-start;
+
+			.current {
+				background: linear-gradient(143.2747deg, #ff6a00, #ee0979) !important;
+				color: #ffffff !important;
 			}
-			.ali-name {
-				width: 380rpx;
-				font-size: 30rpx;
-				font-family: PingFang SC;
-				font-weight: 500;
-				color: #333333;
+
+			.main-item {
+				width: 33%;
 			}
-			.tcitem-image {
-				width: 26rpx;
-				height: 28rpx;
+
+			.mt-item {
+				margin: 0 auto;
+				width: 160rpx;
+				height: 60rpx;
+				background: #f8f8f8;
+				border-radius: 10rpx;
+				display: flex;
+				justify-content: center;
+				align-items: center;
+
+				.mt-image {
+					width: 32rpx;
+					height: 32rpx;
+				}
+
+				.mt-image1 {
+					width: 38rpx;
+					height: 32rpx;
+				}
+
+				.mt-image2 {
+					width: 36rpx;
+					height: 32rpx;
+				}
+
+				.mt-font {
+					margin-left: 10rpx;
+					font-size: 30rpx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #333333;
+				}
+			}
+		}
+
+		.swiper-box {
+			width: 100%;
+			padding: 14rpx 30rpx 0;
+
+			.tc-item {
+				padding: 50rpx 2rpx 0;
+				line-height: 1;
+
+				.tcitem-name {
+					width: 118rpx;
+					font-size: 30rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+				}
+
+				.ali-name {
+					width: 380rpx;
+					font-size: 30rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+				}
+
+				.tcitem-image {
+					width: 26rpx;
+					height: 28rpx;
+				}
 			}
 		}
 	}
-}
-.upload-image {
-	width: 160rpx;
-	height: 160rpx;
-	border-radius: 10rpx;
-}
-.upload-title {
-	font-size: 30rpx;
-	font-family: PingFang SC;
-	font-weight: bold;
-	color: #333333;
-}
-.upload-main {
-	padding-top: 32rpx;
-	display: flex;
-	justify-content: center;
-	align-items: center;
-	flex-direction: column;
-	.upload-font {
-		margin-top: 24rpx;
+
+	.upload-image {
+		width: 160rpx;
+		height: 160rpx;
+		border-radius: 10rpx;
+	}
+
+	.upload-title {
 		font-size: 30rpx;
 		font-family: PingFang SC;
 		font-weight: bold;
 		color: #333333;
 	}
-}
-.upload {
-	margin-top: 20rpx;
-	padding: 34rpx 30rpx 40rpx 30rpx;
-	background: #ffffff;
-}
-.bottom {
-	position: fixed;
-	bottom: 0;
-	background: #ffffff;
-	width: 750rpx;
-	height: 146rpx;
-	justify-content: flex-start;
-	.bottom-item {
-		margin-left: 30rpx;
+
+	.upload-main {
+		padding-top: 32rpx;
 		display: flex;
-		flex-direction: column;
+		justify-content: center;
 		align-items: center;
-		.bi-image {
-			width: 38rpx;
-			height: 34rpx;
-		}
-		.bottom-font {
-			margin-top: 14rpx;
-			font-size: 24rpx;
-			font-family: PingFang SC;
-			font-weight: bold;
-			color: #333333;
-		}
-		.bottom-num {
-			line-height: 1;
-			font-size: 24rpx;
+		flex-direction: column;
+
+		.upload-font {
+			margin-top: 24rpx;
+			font-size: 30rpx;
 			font-family: PingFang SC;
 			font-weight: bold;
 			color: #333333;
 		}
 	}
-	.shu {
-		margin-left: 20rpx;
-		width: 2px;
-		height: 74rpx;
-		background: #c0bfc0;
-	}
-	.btn {
-		margin-left: 20rpx;
-		width: 430rpx;
-		height: 80rpx;
-		background: #fd3b39;
-		border-radius: 20rpx;
-		text-align: center;
-		font-size: 34rpx;
-		font-family: PingFang SC;
-		font-weight: bold;
-		color: #ffffff;
-		line-height: 80rpx;
-	}
-}
-// 文章页底部高度撑开
-.contentBottomHeight {
-	height: 150rpx;
-}
-.popup-box {
-	width: 522rpx;
-	height: 605rpx;
-	background-color: #ffffff;
-	border-radius: 20rpx;
-	position: relative;
-
-	.img {
-		position: relative;
-		top: -56rpx;
-		left: 0;
-		width: 522rpx;
-		height: 132rpx;
-		display: flex;
-		justify-content: center;
 
-		image {
-			border-radius: 20rpx 20rpx 0 0;
-			width: 450rpx;
-			height: 132rpx;
-		}
+	.upload {
+		margin-top: 20rpx;
+		padding: 34rpx 30rpx 40rpx 30rpx;
+		background: #ffffff;
 	}
 
-	.mian {
-		margin-top: -44rpx;
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		// padding: 32rpx 32rpx;
-		background-color: #ffffff;
-		border-radius: 0 0 20rpx 20rpx;
-		text-align: center;
+	.bottom {
+		position: fixed;
+		bottom: 0;
+		background: #ffffff;
+		width: 750rpx;
+		height: 146rpx;
+		justify-content: flex-start;
 
-		.delivery {
-			font-size: 40rpx;
-			color: #333333;
+		.bottom-item {
+			margin-left: 30rpx;
 			display: flex;
-			align-items: center;
 			flex-direction: column;
+			align-items: center;
 
-			.title {
+			.bi-image {
+				width: 38rpx;
+				height: 34rpx;
 			}
 
-			image {
-				margin-top: 48rpx;
-				width: 172rpx;
-				height: 160rpx;
+			.bottom-font {
+				margin-top: 14rpx;
+				font-size: 24rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #333333;
+			}
+
+			.bottom-num {
+				line-height: 1;
+				font-size: 24rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #333333;
 			}
 		}
 
-		.nocancel {
-			font-size: 32rpx;
-			color: #333333;
-			margin-top: 14rpx;
+		.shu {
+			margin-left: 20rpx;
+			width: 2px;
+			height: 74rpx;
+			background: #c0bfc0;
+		}
+
+		.btn {
+			margin-left: 20rpx;
+			width: 430rpx;
+			height: 80rpx;
+			background: #fd3b39;
+			border-radius: 20rpx;
+			text-align: center;
+			font-size: 34rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #ffffff;
+			line-height: 80rpx;
+		}
+	}
+
+	// 文章页底部高度撑开
+	.contentBottomHeight {
+		height: 150rpx;
+	}
+
+	.popup-box {
+		width: 522rpx;
+		height: 605rpx;
+		background-color: #ffffff;
+		border-radius: 20rpx;
+		position: relative;
+
+		.img {
+			position: relative;
+			top: -56rpx;
+			left: 0;
+			width: 522rpx;
+			height: 132rpx;
+			display: flex;
+			justify-content: center;
+
+			image {
+				border-radius: 20rpx 20rpx 0 0;
+				width: 450rpx;
+				height: 132rpx;
+			}
 		}
 
-		.comfirm-box {
-			margin-top: 52rpx;
+		.mian {
+			margin-top: -44rpx;
 			display: flex;
-			// margin-bottom: 32rpx;
+			flex-direction: column;
+			align-items: center;
+			// padding: 32rpx 32rpx;
+			background-color: #ffffff;
+			border-radius: 0 0 20rpx 20rpx;
+			text-align: center;
 
-			// justify-content: space-around;
-			.cancel {
+			.delivery {
+				font-size: 40rpx;
+				color: #333333;
 				display: flex;
 				align-items: center;
-				justify-content: center;
-				width: 197rpx;
-				height: 74rpx;
-				border: 1px solid #dcc786;
-				border-radius: 38rpx;
+				flex-direction: column;
+
+				.title {}
+
+				image {
+					margin-top: 48rpx;
+					width: 172rpx;
+					height: 160rpx;
+				}
+			}
 
+			.nocancel {
 				font-size: 32rpx;
-				color: #605128;
+				color: #333333;
+				margin-top: 14rpx;
 			}
 
-			.comfirm {
-				margin-left: 32rpx;
+			.comfirm-box {
+				margin-top: 52rpx;
 				display: flex;
-				align-items: center;
-				justify-content: center;
-				width: 197rpx;
-				height: 74rpx;
-				background: linear-gradient(-90deg, #d1ba77 0%, #f7e8ad 100%);
-				border-radius: 38px;
-				font-size: 32rpx;
-				color: #605128;
+				// margin-bottom: 32rpx;
+
+				// justify-content: space-around;
+				.cancel {
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					width: 197rpx;
+					height: 74rpx;
+					border: 1px solid #dcc786;
+					border-radius: 38rpx;
+
+					font-size: 32rpx;
+					color: #605128;
+				}
+
+				.comfirm {
+					margin-left: 32rpx;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					width: 197rpx;
+					height: 74rpx;
+					background: linear-gradient(-90deg, #d1ba77 0%, #f7e8ad 100%);
+					border-radius: 38px;
+					font-size: 32rpx;
+					color: #605128;
+				}
 			}
 		}
 	}
-}
-</style>
+</style>

+ 116 - 63
pages/index/index.vue

@@ -19,10 +19,10 @@
 		<swiper class="carousel" autoplay="true" duration="400" interval="5000" @change="swiperChange">
 			<swiper-item v-for="(item, index) in carouselList" :key="index" class="carousel-item"
 				@click="bannerNavToUrl(item)">
-				<image :src="item.pic" />
+				<image :src="item.pic" @error="imgerror($event,item)"  mode="scaleToFill" />
 			</swiper-item>
 		</swiper>
-		<view class="tongz flex">
+		<view class="tongz flex"  v-if="isShowIllegality">
 			<view>
 				<view class="tongz-bg">
 					<image src="../../static/img/tongz-bg.png" mode=""></image>
@@ -36,18 +36,21 @@
 			</view>
 		</view>
 		<view class="navbar flex">
-			<view class="navbar-item"
-				@click="nav('/pages/index/message?type=7')">
-				<image class="nitem-image" src="http://shop.yiqushangshi.com/uploads/attach/2022/07/20220711/0b6c4e066508fcd18abf124c933df88f.png" mode=""></image>
+			<view class="navbar-item" @click="nav('/pages/index/message?type=7')">
+				<image class="nitem-image"
+					src="../../static/img/news.png"
+					mode=""></image>
 				<view class="nitem-font">最新资讯</view>
 			</view>
-			<view class="navbar-item" v-for="(item, index) in navbarList[0].children"
-				@click="nav('/pages/product/list?tid=' + item.id)">
-				<image class="nitem-image" :src="item.pic" mode=""></image>
-				<view class="nitem-font">{{ item.cate_name }}</view>
-			</view>
+			<template  v-if="navbarList.length>0" >
+				<view class="navbar-item" v-for="(item, index) in navbarList[0].children"
+					@click="nav('/pages/product/list?tid=' + item.id)">
+					<image class="nitem-image" :src="item.pic" mode=""></image>
+					<view class="nitem-font">{{ item.cate_name }}</view>
+				</view>
+			</template>
 		</view>
-		<view class="shingle" v-if="list.name">
+		<view class="shingle" v-if="list.name &&isShowIllegality">
 			<view class="shingle-top flex">
 				<view class="shingle-title">CBB潮贝抢货通道</view>
 				<view class="shingle-btn" @click="nav('/pages/hall/hall')">
@@ -94,44 +97,48 @@
 			</view>
 		</view>
 		<!-- <view class="shop" @click="nav('/pages/store/store')"> -->
-			<!-- <view class="shop-title">
+		<!-- <view class="shop-title">
 				<image class="shop-title-icon" src="../../static/icon/index1.png" mode=""></image>
 				<view class="shop-title-font">本地生活</view>
 			</view> -->
-			<!-- #ifndef APP-PLUS -->
-			<!-- <view class="shop-main">
+		<!-- #ifndef APP-PLUS -->
+		<!-- <view class="shop-main">
 				<image src="http://yiqugo.oss-cn-hangzhou.aliyuncs.com/59b8e202304061437149756.png" mode=""></image>
 			</view> -->
-			<!-- #endif -->
-			<!-- #ifdef APP-PLUS -->
-			<!-- <view class="shop-main">
+		<!-- #endif -->
+		<!-- #ifdef APP-PLUS -->
+		<!-- <view class="shop-main">
 				<image src="../../static/img/index-shop.png" mode=""></image>
 			</view> -->
-			<!-- #endif -->
+		<!-- #endif -->
 		<!-- </view> -->
-		<view class="product" v-for="(item, index) in navbarList[0].children">
-			<view class="seckill-title flex">
-				<view class="seckill-left flex">
-					<view class="seckill-font">{{ item.cate_name }}</view>
-				</view>
-				<view class="seckill-right" @click="nav('/pages/product/list?tid=' + item.id)">
-					<view class="seckill-rfont">更多</view>
-					<image class="seckill-back" src="../../static/img/back.png" mode=""></image>
-				</view>
-			</view>
-			<view class="priduct-main">
-				<view class="priduct-item" v-for="itm in item.product" :key="itm.id" @click="navToDetailPage(itm)">
-					<view class="priduct-main-image">
-						<image :src="itm.image" mode="scaleToFill"></image>
+		<template  v-if="navbarList.length>0" >
+			<view class="product" v-for="(item, index) in navbarList[0].children">
+				<view class="seckill-title flex">
+					<view class="seckill-left flex">
+						<view class="seckill-font">{{ item.cate_name }}</view>
 					</view>
-					<view class="priduct-main-name clamp margin-c-20">{{ itm.store_name }}</view>
-					<view class="priduct-main-price">
-						<view class="price" v-if="item.integral != 0">¥{{ itm.price * 1 }} + {{ itm.integral }}趣豆</view>
-						<view class="price" v-else>¥{{ itm.price }}</view>
+					<view class="seckill-right" @click="nav('/pages/product/list?tid=' + item.id)">
+						<view class="seckill-rfont">更多</view>
+						<image class="seckill-back" src="../../static/img/back.png" mode=""></image>
+					</view>
+				</view>
+				<view class="priduct-main">
+					<view class="priduct-item" v-for="itm in item.product" :key="itm.id" @click="navToDetailPage(itm)">
+						<view class="priduct-main-image">
+							<image :src="itm.image" mode="scaleToFill"></image>
+						</view>
+						<view class="priduct-main-name clamp margin-c-20">{{ itm.store_name }}</view>
+						<view class="priduct-main-price">
+							<!-- <view class="price" v-if="item.integral != 0">¥{{ itm.price * 1 }} + {{ itm.integral }}趣豆</view> -->
+							<view class="price" v-if="item.integral != 0">参考价¥{{ itm.price * 1 }}</view>
+							<view class="price" v-else>¥{{ itm.price }}</view>
+						</view>
 					</view>
 				</view>
 			</view>
-		</view>
+		</template>
+		
 		<u-tabbar activeColor="#f42b4e" v-model="current" :list="tabbar"></u-tabbar>
 	</view>
 </template>
@@ -163,11 +170,19 @@
 		mapState,
 		mapMutations
 	} from 'vuex';
+	import {
+		saveUrl,
+		interceptor
+	} from '@/utils/loginUtils.js';
 	export default {
 		components: {
 			seckill,
 			uniCountdowns
 		},
+		computed: {
+			...mapState(["isShowIllegality"]),
+			...mapState('user', ['hasLogin'])
+		},
 		data() {
 			return {
 				current: 0,
@@ -183,9 +198,7 @@
 				article: [],
 				list: {},
 				stop: [],
-				navbarList: [{
-					child: []
-				}]
+				navbarList: [],
 			};
 		},
 		onPullDownRefresh() {
@@ -196,44 +209,65 @@
 				uni.stopPullDownRefresh();
 			}, 1000);
 		},
-		onShow() {
-			this.loadData();
+		onLoad() {
 			this.getnavbar();
-			this.getaddress();
+			this.loadData();
+		},
+		onShow() {
+			if(this.hasLogin){
+				this.getauction_gu();
+			}else{
+				uni.showModal({
+					title: '提示',
+					content: '您未登录是否立即登录',
+					cancelText: '取消',
+					confirmText: '登录',
+					success: res => {
+						if(res.confirm){
+							saveUrl()
+							interceptor()
+						}
+					},
+					fail: () => {},
+					complete: () => {}
+				});
+			}
 		},
 		methods: {
 			...mapMutations(['setLat', 'setLon', 'setChoose']),
+			// 图片加载错误重新加载
+			imgerror(data,item){
+				setTimeout(()=>{
+				item.pic = item.pic+`?time=${(new Date).getTime()}`
+				},1000)
+			},
 			getnavbar() {
 				let obj = this;
 				getCategoryList({})
 					.then(({
 						data
 					}) => {
-						data[0].children.forEach(e => {
-							getProducts({
-								page: 1,
-								limit: 2,
-								sid: e.id
-							}).then(info => {
-								obj.$set(e, 'product', info.data);
+						console.log('123123123123');
+						console.log(data, '123456');
+						if (data.length > 0) {
+							data[0].children.forEach(e => {
+								getProducts({
+									page: 1,
+									limit: 2,
+									sid: e.id
+								}).then(info => {
+									obj.$set(e, 'product', info.data);
+								});
 							});
-						});
+						}
 						this.navbarList = data;
-						console.log(data, '123456');
+						// console.log(this.navbarList,'this.navbarList');
 					})
 					.catch(err => {
 						console.log(err);
 					});
 			},
-			loadData() {
-				article({}, 1).then(({
-					data
-				}) => {
-					data.forEach(e => {
-						this.text.push(e.synopsis);
-					});
-					this.article = data;
-				});
+			getauction_gu(){
 				auction_gu({
 						pages: 1,
 						limit: 1
@@ -241,18 +275,31 @@
 					.then(({
 						data
 					}) => {
-						this.list = data[0];
+						console.log(data,'获取数据');
+						this.list = data[0]||[];
 					})
 					.catch(e => {
 						console.log(e);
 					});
+			},
+			loadData() {
+				article({}, 1).then(({
+					data
+				}) => {
+					data.forEach(e => {
+						this.text.push(e.synopsis);
+					});
+					this.article = data;
+				});
 				loadIndexs({})
 					.then(({
 						data
 					}) => {
 						let goods = data.info;
 						this.dataList = goods.bastList; //精品推荐
-						this.carouselList = data.banner;
+						this.carouselList = data.banner.map((re)=>{
+							return re
+						});
 					})
 					.catch(e => {});
 			},
@@ -312,6 +359,12 @@
 			},
 			getaddress() {
 				console.log('dizhi+++++++++++');
+				let obj = this;
+				// #ifndef APP
+				obj.getaddressFunction();
+				// #endif
+			},
+			getaddressFunction() {
 				let obj = this;
 				uni.getLocation({
 					type: 'wgs84',

+ 178 - 154
pages/money/moneyPwd.vue

@@ -11,185 +11,209 @@
 		</view>
 		<view class="row b-b">
 			<text class="tit">新密码</text>
-			<input class="input" v-model="password" type="password" placeholder="请填写6位新密码" placeholder-class="placeholder" />
+			<input class="input" v-model="password" type="password" placeholder="请填写6位新密码"
+				placeholder-class="placeholder" />
 		</view>
 		<view class="row b-b">
 			<text class="tit">再次输入</text>
-			<input class="input" v-model="yzpassword" type="password" placeholder="请重新填写6位新密码" placeholder-class="placeholder" />
+			<input class="input" v-model="yzpassword" type="password" placeholder="请重新填写6位新密码"
+				placeholder-class="placeholder" />
 		</view>
 		<button class="add-btn" :class="{ 'bg-gray': loding }" @click="loding ? '' : confirm()">提交</button>
+		<codeImage @openCode='getCode' loginType="" @close='showAlert=false' :phone="account" ref="alertImage" :show='showAlert'></codeImage>
 	</view>
 </template>
 
 <script>
-import { verify } from '@/api/login.js';
-import { mapState } from 'vuex';
-import { is_pas, transaction } from '@/api/set.js';
-export default {
-	data() {
-		return {
-			type: 1,
-			time: '', //保存倒计时对象
-			countDown: 0, //倒计时
-			account: '', //手机号
-			captcha: '', //验证码
-			password: '', //新密码
-			yzpassword: '', //重复输入
-			loding: false //是否载入中
-		};
-	},
-	computed: {
-		...mapState('user', ['userInfo'])
-	},
-	onLoad() {
-		is_pas().then(({ data }) => {
-			console.log();
-			if (data.status != 0) {
-				this.type = 2;
-			}
-		});
-	},
-	watch: {
-		// 监听倒计时
-		countDown(i) {
-			if (i == 0) {
-				clearInterval(this.time);
-			}
-		}
-	},
-	methods: {
-		verification() {
-			let obj = this;
-			if (this.account == '') {
-				this.$api.msg('请输入电话号码');
-				return;
-			}
-			if (!/(^1[2|3|4|5|7|8|9][0-9]{9}$)/.test(this.account)) {
-				this.$api.msg('请输入正确的手机号');
-				return;
+	import {
+		mapState
+	} from 'vuex';
+	import {
+		is_pas,
+		transaction
+	} from '@/api/set.js';
+	import codeImage from '@/components/codeImage.vue';
+	export default {
+		data() {
+			return {
+				type: 1,
+				time: '', //保存倒计时对象
+				countDown: 0, //倒计时
+				account: '', //手机号
+				captcha: '', //验证码
+				password: '', //新密码
+				yzpassword: '', //重复输入
+				loding: false, //是否载入中
+				showAlert: false,
+			};
+		},
+		components: {
+			codeImage
+		},
+		computed: {
+			...mapState('user', ['userInfo'])
+		},
+		onLoad() {
+			is_pas().then(({
+				data
+			}) => {
+				console.log();
+				if (data.status != 0) {
+					this.type = 2;
+				}
+			});
+		},
+		watch: {
+			// 监听倒计时
+			countDown(i) {
+				if (i == 0) {
+					clearInterval(this.time);
+				}
 			}
-			// 判断是否在倒计时
-			if (obj.countDown > 0) {
-				return false;
-			} else {
+		},
+		methods: {
+			close() {
+				console.log('end')
+				this.showAlert = false;
+			},
+			// 发送验证码
+			getCode() {
+				const obj = this;
 				obj.countDown = 60;
 				obj.time = setInterval(() => {
 					obj.countDown--;
 				}, 1000);
 				//调用验证码接口
-				verify({
-					phone: obj.account,
-					type: 'login'
-				})
-					.then(({ data }) => {})
+			},
+			verification() {
+				let obj = this;
+				if (this.account == '') {
+					this.$api.msg('请输入电话号码');
+					return;
+				}
+				if (!/(^1[2|3|4|5|7|8|9][0-9]{9}$)/.test(this.account)) {
+					this.$api.msg('请输入正确的手机号');
+					return;
+				}
+				// 判断是否在倒计时
+				if (obj.countDown > 0) {
+					return false;
+				} else {
+					obj.showAlert = true;
+					obj.$refs.alertImage.getImage()
+				}
+			},
+			confirm(e) {
+				const reg = /^[0-9]{6}$/;
+				console.log(this.yzpassword);
+				if (!reg.test(this.yzpassword)) {
+					uni.showModal({
+						title: '错误',
+						content: '请输入6位数字支付密码',
+						showCancel: false
+					});
+					return false;
+				}
+				if (this.yzpassword != this.password) {
+					uni.showModal({
+						title: '错误',
+						content: '密码不一致请重新输入',
+						showCancel: false
+					});
+					return false;
+				}
+				this.loding = true;
+				transaction({
+						type: this.type,
+						payment: this.password,
+						account: this.account,
+						captcha: this.captcha
+					})
+					.then(({
+						data
+					}) => {
+						this.loding = false;
+						uni.showModal({
+							title: '提示',
+							content: '修改成功',
+							showCancel: false,
+							confirmText: '返回个人中心',
+							success: res => {
+								uni.switchTab({
+									url: '/pages/user/user'
+								});
+							}
+						});
+					})
 					.catch(err => {
+						this.loding = false;
 						console.log(err);
 					});
 			}
-		},
-		confirm(e) {
-			const reg = /^[0-9]{6}$/;
-			console.log(this.yzpassword);
-			if (!reg.test(this.yzpassword)) {
-				uni.showModal({
-					title: '错误',
-					content: '请输入6位数字支付密码',
-					showCancel: false
-				});
-				return false;
-			}
-			if (this.yzpassword != this.password) {
-				uni.showModal({
-					title: '错误',
-					content: '密码不一致请重新输入',
-					showCancel: false
-				});
-				return false;
-			}
-			this.loding = true;
-			transaction({
-				type: this.type,
-				payment: this.password,
-				account: this.account,
-				captcha: this.captcha
-			})
-				.then(({ data }) => {
-					this.loding = false;
-					uni.showModal({
-						title: '提示',
-						content: '修改成功',
-						showCancel: false,
-						confirmText: '返回个人中心',
-						success: res => {
-							uni.switchTab({
-								url: '/pages/user/user'
-							});
-						}
-					});
-				})
-				.catch(err => {
-					this.loding = false;
-					console.log(err);
-				});
 		}
-	}
-};
+	};
 </script>
 
 <style lang="scss">
-page {
-	background: $page-color-base;
-}
-.container {
-	padding-top: 30rpx;
-}
-.row {
-	display: flex;
-	align-items: center;
-	position: relative;
-	padding: 0 30rpx;
-	height: 110rpx;
-	background: #fff;
+	page {
+		background: $page-color-base;
+	}
 
-	.tit {
-		flex-shrink: 0;
-		width: 120rpx;
-		font-size: 30rpx;
-		color: $font-color-dark;
+	.container {
+		padding-top: 30rpx;
+	}
+
+	.row {
+		display: flex;
+		align-items: center;
+		position: relative;
+		padding: 0 30rpx;
+		height: 110rpx;
+		background: #fff;
+
+		.tit {
+			flex-shrink: 0;
+			width: 120rpx;
+			font-size: 30rpx;
+			color: $font-color-dark;
+		}
+
+		.input {
+			flex: 1;
+			font-size: 30rpx;
+			color: $font-color-dark;
+		}
+
+		.iconlocation {
+			font-size: 36rpx;
+			color: $font-color-light;
+		}
 	}
-	.input {
-		flex: 1;
-		font-size: 30rpx;
-		color: $font-color-dark;
+
+	.add-btn {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		width: 690rpx;
+		height: 80rpx;
+		margin: 60rpx auto;
+		font-size: $font-lg;
+		color: #fff;
+		background: #dc262b;
+		border-radius: 10rpx;
+		// box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4);
 	}
-	.iconlocation {
-		font-size: 36rpx;
-		color: $font-color-light;
+
+	.bg-gray {
+		background-color: $color-gray;
 	}
-}
-.add-btn {
-	display: flex;
-	align-items: center;
-	justify-content: center;
-	width: 690rpx;
-	height: 80rpx;
-	margin: 60rpx auto;
-	font-size: $font-lg;
-	color: #fff;
-	background: #dc262b;
-	border-radius: 10rpx;
-	// box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4);
-}
 
-.bg-gray {
-	background-color: $color-gray;
-}
-.code {
-	color: #dc262b;
-	font-size: 23rpx;
-	border-left: 1px solid #eeeeee;
-	width: 150rpx;
-	flex-shrink: 0;
-	text-align: center;
-}
-</style>
+	.code {
+		color: #dc262b;
+		font-size: 23rpx;
+		border-left: 1px solid #eeeeee;
+		width: 150rpx;
+		flex-shrink: 0;
+		text-align: center;
+	}
+</style>

+ 2 - 2
pages/money/qdwallet.vue

@@ -24,7 +24,7 @@
 				<!-- <text class="tit">¥</text> -->
 				<input class="input" type="number" v-model="withdrawal" placeholder="转入金额"
 					placeholder-class="placeholder" />
-				<view class="buttom" @click="withdrawal = userInfo.integral">全部转账</view>
+				<!-- <view class="buttom" @click="withdrawal = userInfo.integral">全部转账</view> -->
 			</view>
 		</view>
 
@@ -67,7 +67,7 @@
 			// #ifdef H5
 			this.weichatBsrowser = uni.getStorageSync('weichatBrowser');
 			// #endif
-			this.dataUp();
+			// this.dataUp();
 			if (options.type) {
 				this.type = options.type;
 				console.log(this.type);

+ 23 - 10
pages/money/qudou.vue

@@ -89,7 +89,7 @@
 							</view>
 						</view>
 					</view>
-					<!-- <uni-load-more :status="tabItem.loadingType" v-if="!(tabItem.orderList.length == 0 && tabItem.loaded)"></uni-load-more> -->
+					<uni-load-more :status="tabItem.loadingType" v-if="!(tabItem.orderList.length == 0 && tabItem.loaded)"></uni-load-more>
 				</scroll-view>
 			</swiper-item>
 		</swiper>
@@ -138,13 +138,14 @@
 				tabCurrentIndex: 0,
 				orderStatusSum: 0,
 				recharge: 0,
-				navList: [{
+				navList: [
+					{
 						state: 0,
 						text: '收入',
 						loadingType: 'more',
 						orderList: [],
 						page: 1, //当前页数
-						limit: 1000, //每次信息条数
+						limit: 10, //每次信息条数
 						loaded: false
 					},
 					{
@@ -153,17 +154,19 @@
 						loadingType: 'more',
 						orderList: [],
 						page: 1, //当前页数
-						limit: 1000, //每次信息条数
+						limit: 10, //每次信息条数
 						loaded: false
 					}
 				],
 				money: ''
 			};
 		},
-		onLoad(options) {},
+		onLoad(options) {
+			
+		},
 		onShow() {
 			this.loadData();
-			this.loadBaseData();
+			// this.loadBaseData();
 		},
 		methods: {
 			...mapMutations('user', ['setUserInfo', 'setOrderInfo']),
@@ -200,13 +203,13 @@
 					//tab切换只有第一次需要加载数据
 					return;
 				}
-				if (navItem.loadingType === 'loading') {
+				if (navItem.loadingType === 'loading'||navItem.loadingType == 'nomore') {
 					//防止重复加载
 					return;
 				}
 				// 修改当前对象状态为加载中
 				navItem.loadingType = 'loading';
-
+				console.log(navItem.page,navItem.limit)
 				integrallist({
 						page: navItem.page,
 						limit: navItem.limit
@@ -216,12 +219,22 @@
 					}) => {
 						// obj.recharge = data.income;
 						// obj.orderStatusSum = data.expend;
+						let bool = false;
 						if (state == 0) {
-							navItem.orderList = data.zj;
+							navItem.orderList =navItem.orderList.concat(data.zj);
+							bool = data.zj.length==navItem.limit?true:false
 						}
 						if (state == 1) {
-							navItem.orderList = data.kc;
+							navItem.orderList =navItem.orderList.concat(data.kc) ;
+							bool = data.kc.length==navItem.limit?true:false
+						}
+						if(bool){
+							navItem.page++;
+							navItem.loadingType = 'more';
+						}else{
+							navItem.loadingType = 'nomore';
 						}
+						
 					})
 					.catch(e => {
 						console.log(e);

+ 1 - 1
pages/money/quick.vue

@@ -87,7 +87,7 @@
 			};
 		},
 		onLoad(options) {
-			this.dataUp();
+			// this.dataUp();
 			// 加载文票比例
 			this.getTicket();
 		},

+ 3 - 0
pages/money/wallet.vue

@@ -88,6 +88,9 @@ export default {
 		// 提交
 		confirm() {
 			let obj = this;
+			if(obj.loding){
+				return 
+			}
 			obj.loding = true;
 			if (obj.withdrawal < 10) {
 				obj.loding = false;

+ 16 - 6
pages/navigation/index.vue

@@ -13,7 +13,7 @@
 		<swiper class="carousel" autoplay="true" duration="400" interval="5000" @change="swiperChange">
 			<swiper-item v-for="(item, index) in carouselList" :key="index" class="carousel-item"
 				@click="bannerNavToUrl(item)">
-				<image :src="item.pic" />
+				<image :src="item.pic" mode="scaleToFill" @error="imgerror($event,item)" />
 			</swiper-item>
 		</swiper>
 		<view class="tongz flex">
@@ -29,15 +29,16 @@
 				</view>
 			</view>
 		</view>
+		
 		<view class="navbar">
 			<view class="nav-item" @click="nav('/pages/index/index')">
 				<image class="nav-img" src="../../static/img/newbanner.png" mode=""></image>
 			</view>
-			<view v-if="changeState" class="nav-item" @click="nav('/pages/navigation/main')">
+			<view v-if="isShowIllegality" class="nav-item" @click="nav('/pages/navigation/main')">
 				<image class="nav-img" src="../../static/img/oldbanner.png" mode=""></image>
 			</view>
 		</view>
-		<view class="box margin-t-30 flex">
+		<view class="box margin-t-30 flex" v-if="isShowIllegality">
 			<view class="leftbox flex">
 				<view class="flex-center">
 					<view class="title">
@@ -107,12 +108,21 @@
 			};
 		},
 		onShow() {
+		},
+		onLoad() {
 			this.loadData();
-			this.getTicket()
+			// this.getTicket();
+		},
+		computed: {
+			...mapState(["isShowIllegality"])
 		},
-		onLoad() {},
 		methods: {
 			...mapMutations(['setLat', 'setLon', 'setChoose','changeState']),
+			imgerror(data,item){
+				setTimeout(()=>{
+				item.pic = item.pic+`?time=${(new Date).getTime()}`
+				},1000)
+			},
 			goDetails(e) {
 				uni.navigateTo({
 					url: '/pages/index/messageInfo?id=' + this.article[e].id
@@ -123,7 +133,7 @@
 					.then(
 						(res) => {
 							console.log(res);
-							this.ticketBase = res.data.v;
+							this.ticketBase = res.data.v||{};
 							this.ticketBase.CurrentGains = +this.ticketBase.CurrentGains
 						}
 					).catch(

+ 4 - 1
pages/navigation/main.vue

@@ -176,10 +176,13 @@
 					});
 			},
 			getorder() {
+				if(this.timers){
+					clearTimeout(this.timers);
+				}
 				order_info({}).then(({
 					data
 				}) => {
-					this.timers = setTimeout(this.getorder, 1000);
+					// this.timers = setTimeout(this.getorder, 1000);
 					this.now_jjfh = data.sum;
 					this.now_num = data.every_piece;
 					this.my_num = data.user_piece;

+ 1 - 1
pages/order/createOrder.vue

@@ -375,7 +375,7 @@
 					// 计算金额
 					this.payMoneyNub();
 					// 加载优惠券
-					obj.couponsOrder(data.priceGroup.totalPrice);
+					// obj.couponsOrder(data.priceGroup.totalPrice);
 				});
 			},
 			// 购买数量变化

+ 35 - 8
pages/order/evaluate.vue

@@ -41,6 +41,13 @@
 			</view>
 		</view>
 		<view @click.stop="submit" class="address-box submit-box"><text class="submit-btn">提交评论</text></view>
+		<canvas canvas-id="canvas" v-if="canvasStatus"
+			:style="{width: canvasWidth + 'px', height: canvasHeight + 'px',position: 'absolute',left:'-100000px',top:'-100000px'}"></canvas>
+		<uni-popup ref="popup" type="center">
+			<view class="alertprogress">
+			{{progress}}%
+			</view>
+		</uni-popup>
 	</view>
 </template>
 
@@ -63,7 +70,11 @@ export default {
 			rateValue1: '', //商品质量
 			rateValue2: '', //服务态度
 			imgCount: 6 ,//最多支持9张上传,可以修改
-			upFileLoding:false
+			upFileLoding:false,
+			canvasStatus: false,
+			canvasWidth:0,
+			canvasHeight:0,
+			progress:0,
 		};
 	},
 	onLoad(option) {
@@ -110,15 +121,31 @@ export default {
 				});
 				return;
 			}
+			that.canvasStatus = true;
 			upload({
-				file: ''
+				filename: ''
+			}, (res) => {
+				that.imgList = [...that.imgList, ...res];
+				that.imgCount = 10 - that.imgList.length;
+				that.canvasStatus = false
+			}, (res) => {
+				that.canvasStatus = false
+			}, (res) => {
+				that.canvasWidth = res.w
+				that.canvasHeight = res.h
+			},(res)=>{
+				// console.log(res,'res');
+				if(res.progress==100){
+					this.$refs.popup.close()
+					uni.showToast({
+						title: '上传成功'
+					});
+				}else if(res.progress==0){
+					this.$refs.popup.open()
+				}
+				that.progress = res.progress;
+				// console.log(res,'进度条');
 			})
-				.then(e => {
-					that.imgList = [...that.imgList, ...e];
-					that.imgCount = 10 - that.imgList.length;
-				}).catch((err) => {
-					console.log(err);
-				})
 		},
 		//提交评论
 		submit(e) {

+ 13 - 4
pages/order/order.vue

@@ -43,7 +43,7 @@
 						</view>
 
 						<view class="goods-box-single">
-							<image class="goods-img" :src="item.image" mode="aspectFill"></image>
+							<image class="goods-img" :src="item.image" mode="scaleToFill" @error="imgerror($event,item)"></image>
 							<view class="right">
 								<text class="title clamp">{{ item.name }}</text>
 								<text class="attr-box">x1</text>
@@ -85,7 +85,7 @@
 							<text class="state" :style="{ color: item.stateTipColor }">{{ item.stateTip }}</text>
 						</view>
 						<view class="goods-box-single">
-							<image class="goods-img" :src="item.image" mode="scaleToFill"></image>
+							<image class="goods-img" :src="item.image" mode="scaleToFill" @error="imgerror($event,item)"></image>
 							<view class="right">
 								<view class="flex-start">
 									<text class="title clamp">{{ item.name }}</text>
@@ -104,7 +104,7 @@
 						<view class="buy-box">
 							<view class="buy-info" v-if="item.tabItem != 0 && item.status">
 								<view class="font">买家:</view>
-								<image v-if="item.avatar" class="avter" :src="item.avatar" mode=""></image>
+								<image v-if="item.avatar" class="avter" :src="item.avatar" mode="scaleToFill" @error="imgerror($event,item,'avatar')"></image>
 								<view class="buy-name">{{ item.nickname }}</view>
 								<view class="phone">{{ item.phone }}</view>
 							</view>
@@ -123,7 +123,7 @@
 						<view class="upimg" v-if="item.status == 2 || item.status == 3">
 							<view class="up-tit">打款凭证:</view>
 							<view class="img-wrap" v-if="item.upload_image" @click="lookimg(item.upload_image)">
-								<image :src="item.upload_image" mode=""></image>
+								<image :src="item.upload_image" mode="scaleToFill" @error="imgerror($event,item,'upload_image')"></image>
 							</view>
 							<view class="" style="color: #0F253A;font-weight: bold;font-size: 26rpx;" v-else>买家未上传支付凭证
 							</view>
@@ -312,6 +312,15 @@
 			});
 		},
 		methods: {
+			imgerror(data,item,type=false){
+				setTimeout(()=>{
+					if(!type){
+						item.image = item.image+`?time=${(new Date).getTime()}`
+					}else{
+						item[type] = item[type]+`?time=${(new Date).getTime()}`
+					}
+				},1000)
+			},
 			//顶部tab点击
 			tabClick(index, type) {
 				if (type == 0) {

+ 7 - 2
pages/order/order1.vue

@@ -20,7 +20,7 @@
 
 						<scroll-view v-if="item.cartInfo.length > 1" class="goods-box" scroll-x>
 							<view v-for="(goodsItem, goodsIndex) in item.cartInfo" :key="goodsIndex" class="goods-item">
-								<image class="goods-img" :src="goodsItem.productInfo.image" mode="aspectFill"></image>
+								<image class="goods-img" :src="goodsItem.productInfo.image" mode="scaleToFill"  @error="imgerror($event,goodsItem)"></image>
 							</view>
 						</scroll-view>
 						<!-- <view v-if="item.cartInfo.length === 1" class="goods-box-single" v-for="(goodsItem, goodsIndex) in item.cartInfo" :key="goodsIndex">
@@ -32,7 +32,7 @@
 							</view>
 						</view> -->
 						<view class="goods-box-single" v-for="(goodsItem, goodsIndex) in item.cartInfo" :key="goodsIndex">
-							<image class="goods-img" :src="goodsItem.productInfo.image" mode="scaleToFill"></image>
+							<image class="goods-img" :src="goodsItem.productInfo.image" mode="scaleToFill" @error="imgerror($event,goodsItem)"></image>
 							<view class="right">
 								<view class="flex-start">
 									<text class="title clamp">{{ goodsItem.productInfo.store_name }}</text>
@@ -157,6 +157,11 @@ export default {
 	},
 	// #endif
 	methods: {
+		imgerror(data,item){
+			setTimeout(()=>{
+			item.productInfo.image = item.productInfo.image+`?time=${(new Date).getTime()}`
+			},1000)
+		},
 		// 转换金额为数字
 		moneyNum(value) {
 			return +value;

+ 56 - 6
pages/product/product.vue

@@ -30,6 +30,7 @@
 		<view class="introduce-section">
 			<text class="title" v-if="goodsType == 1">{{ goodsObjact.title }}</text>
 			<view class="price-box" v-if="goodsType == 0">
+				参考价
 				<text class="price-tip">¥</text>
 				<text class="price">
 					{{ goodsObjact.price }}
@@ -95,7 +96,7 @@
 			</view>
 		</view>
 		<!-- 底部操作菜单 -->
-		<view class="page-bottom" v-if="goodsType == 0">
+		<view class="page-bottom" v-if="goodsType == 0&&isShowIllegality">
 			<!-- <navigator url="/pages/index/index" open-type="switchTab" class="p-b-btn">
 				<text class="iconfont iconhome"></text>
 				<text>首页</text>
@@ -111,7 +112,8 @@
 
 			<view class="action-btn-group">
 				<!-- <button type="primary" class=" action-btn no-border buy-now-btn" @click="toggleSpec(2)">加入购物车</button> -->
-				<button type="primary" class=" action-btn no-border  add-cart-btn" @click="toggleSpec(1)">立即购买</button>
+				<!-- <button type="primary" class=" action-btn no-border  add-cart-btn" @click="toggleSpec(1)">立即购买</button> -->
+				<button type="primary" class=" action-btn no-border  add-cart-btn" @click="callPhone()">询价</button>
 			</view>
 			<!-- <view class="action-btn-group">
 				<button type="primary" class=" action-btn no-border  add-cart-btn" style="width: 750rpx;" @click="toggleSpec(1)">立即购买</button>
@@ -180,6 +182,9 @@
 	// import share from '@/components/share';
 	import uniNumberBox from '@/components/uni-number-box.vue';
 	import uniCountdown from '@/components/uni-countdown/uni-countdown.vue';
+	import {
+		mapState
+	} from 'vuex';
 	import {
 		goodsDetail,
 		cartAdd,
@@ -196,9 +201,6 @@
 		weixindata,
 		shareLoad
 	} from '@/utils/wxAuthorized';
-	import {
-		mapState
-	} from 'vuex';
 	import weixinObj from '@/plugin/jweixin-module/index.js';
 	// #endif
 	export default {
@@ -364,10 +366,58 @@
 		computed: {
 			// #ifdef H5
 			...mapState(['weichatObj', 'baseURL', 'urlFile']),
-			...mapState('user', ['userInfo'])
+			...mapState('user', ['userInfo']),
 			// #endif
+			...mapState(["isShowIllegality"])
 		},
 		methods: {
+			// 拨打电话
+			callPhone(){
+				console.log
+				// #ifndef APP
+				uni.makePhoneCall(
+					{
+						phoneNumber:"18967672398",
+						fail(e) {
+							console.log(e)
+						}
+					}
+				)
+				// #endif
+				// #ifdef APP
+				if(uni.getSystemInfoSync().platform=='android'){
+					uni.showModal({
+						title: '申请拨打电话权限',
+						content: '是否允许App拨打电话?',
+						cancelText: '拒绝',
+						confirmText: '允许',
+						success: res => {
+							if(res.confirm){
+								uni.makePhoneCall(
+									{
+										phoneNumber:"18967672398",
+										fail(e) {
+											console.log(e)
+										}
+									}
+								)
+							}
+						},
+						fail: () => {},
+						complete: () => {}
+					});
+				}else{
+					uni.makePhoneCall(
+						{
+							phoneNumber:"18967672398",
+							fail(e) {
+								console.log(e)
+							}
+						}
+					)
+				}
+				// #endif
+			},
 			navTo(url) {
 				uni.navigateTo({
 					url

+ 267 - 229
pages/public/forget.vue

@@ -2,284 +2,322 @@
 	<view class="container">
 		<view class="container_text">
 			<image class="banner-img" src="/static/img/img01.png" mode="scaleToFill"></image>
-			<view class="title-img"><image class="title-image" src="../../static/img/login-title.png" mode=""></image></view>
+			<view class="title-img">
+				<image class="title-image" src="../../static/img/login-title.png" mode=""></image>
+			</view>
 		</view>
 		<view class="loginTitle"><text>修改密码</text></view>
 		<view class="login_text">
 			<view class="login_input flex_item">
-				<view class="login_img"><image class="phone" src="/static/icon/img03.png"></image></view>
-				<view class="login_name"><input class="uni-input" type="text" v-model="phone" focus placeholder="请输入手机" /></view>
+				<view class="login_img">
+					<image mode="widthFix" class="phone" src="../../static/icon/login_name.png"></image>
+				</view>
+				<view class="login_name"><input class="uni-input" type="text" v-model="phone" focus
+						placeholder="请输入手机" /></view>
 			</view>
 			<view class="login_input flex_item">
-				<view class="login_img"><image src="/static/icon/img04.png"></image></view>
-				<view class="login_name"><input class="uni-input" type="password" v-model="password" focus placeholder=" 请输入新的不少于6位的密码" /></view>
+				<view class="login_img">
+					<image mode="widthFix" src="../../static/icon/login_pw.png"></image>
+				</view>
+				<view class="login_name"><input class="uni-input" type="password" v-model="password" focus
+						placeholder=" 请输入新的不少于6位的密码" /></view>
 			</view>
 			<view class="login_input flex_item">
-				<view class="login_img"><image src="/static/icon/img04.png"></image></view>
-				<view class="login_name"><input class="uni-input" type="password" v-model="password2" focus placeholder="请重复输入新密码" /></view>
+				<view class="login_img">
+					<image mode="widthFix" src="../../static/icon/login_pw.png"></image>
+				</view>
+				<view class="login_name"><input class="uni-input" type="password" v-model="password2" focus
+						placeholder="请重复输入新密码" /></view>
 			</view>
 			<view class="login_input flex">
-				<view class="login_img"><image class="codeimg" src="/static/icon/img06.png"></image></view>
+				<view class="login_img">
+					<image class="codeimg" mode="widthFix" src="../../static/icon/login_pw2.png"></image>
+				</view>
 				<view class="login_name flex">
 					<input class="uni-input width" v-model="code" type="number" focus placeholder="请输入验证码" />
-					<view class="code" @click="verification">{{ countDown == 0 ? '发送验证码' : countDown }}</view>
+					<view class="code" @click="verification">{{ countDown == 0 ? '发送验证码' : countDown }}
+					</view>
 				</view>
 			</view>
 			<view class="uni-button uni-button-green" @click="updatalogin">确认修改</view>
 		</view>
+		<codeImage @openCode='getCode' loginType="login" :phone="phone"  @close='showAlert=false' ref="alertImage" :show='showAlert'></codeImage>
 	</view>
 </template>
 <script>
-import { registerReset } from '@/api/set.js';
-import { verify } from '@/api/login.js';
-export default {
-	data() {
-		return {
-			phone: '', //用户
-			code: '', //验证码
-			password2: '',
-			password: '',
-			time: '', //保存倒计时对象
-			countDown: 0 //倒计时
-		};
-	},
-	onLoad() {},
-	watch: {
-		// 监听倒计时
-		countDown(i) {
-			if (i == 0) {
-				clearInterval(this.time);
-			}
-		}
-	},
-	methods: {
-		updatalogin() {
-			let obj = this;
-			if (obj.phone == '') {
-				obj.$api.msg('请输入手机');
-				return;
-			}
-			if (this.phone.length!=11) {
-				obj.$api.msg('请输入正确的手机');
-				return;
-			}
-			if (obj.password == '') {
-				obj.$api.msg('请输入密码');
-				return;
-			}
-			if (obj.password2 == '') {
-				obj.$api.msg('请再次输入密码');
-				return;
-			}
-			if (obj.password2 != obj.password) {
-				obj.$api.msg('两次密码不正确');
-				return;
-			}
-			if (obj.code == '') {
-				obj.$api.msg('请输入验证码');
-				return;
-			}
-			registerReset({
-				account: obj.phone, //账号
-				password: obj.password,
-				password2: obj.password2,
-				type: 1,
-				captcha: obj.code
-			})
-				.then(function(e) {
-					obj.$api.msg(e.msg);
-					uni.navigateTo({
-						url: '/pages/public/login'
-					});
-				})
-				.catch(e => {
-					console.log(e);
-				});
+	import {
+		registerReset
+	} from '@/api/set.js';
+	import codeImage from '@/components/codeImage.vue';
+	export default {
+		components: {
+			codeImage
 		},
-		//发送验证码
-		verification() {
-			let obj = this;
-			if (this.phone == '') {
-				this.$api.msg('请输入邮箱号码');
-				return;
-			}
-			if (!/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test(obj.phone) && !/(^1[3|4|5|6|7|8|9][0-9]{9}$)/.test(this.phone)) {
-				obj.$api.msg('请输入正确的邮箱或手机');
-				return;
+		data() {
+			return {
+				phone: '', //用户
+				code: '', //验证码
+				password2: '',
+				password: '',
+				time: '', //保存倒计时对象
+				countDown: 0, //倒计时
+				showAlert: false,
+			};
+		},
+		onLoad() {},
+		watch: {
+			// 监听倒计时
+			countDown(i) {
+				if (i == 0) {
+					clearInterval(this.time);
+				}
 			}
-			// 判断是否在倒计时
-			if (obj.countDown > 0) {
-				return false;
-			} else {
+		},
+		methods: {
+			close() {
+				console.log('end')
+				this.showAlert = false;
+			},
+			updatalogin() {
+				let obj = this;
+				if (obj.phone == '') {
+					obj.$api.msg('请输入手机');
+					return;
+				}
+				if (this.phone.length != 11) {
+					obj.$api.msg('请输入正确的手机');
+					return;
+				}
+				if (obj.password == '') {
+					obj.$api.msg('请输入密码');
+					return;
+				}
+				if (obj.password2 == '') {
+					obj.$api.msg('请再次输入密码');
+					return;
+				}
+				if (obj.password2 != obj.password) {
+					obj.$api.msg('两次密码不正确');
+					return;
+				}
+				if (obj.code == '') {
+					obj.$api.msg('请输入验证码');
+					return;
+				}
+				registerReset({
+						account: obj.phone, //账号
+						password: obj.password,
+						password2: obj.password2,
+						type: 1,
+						captcha: obj.code
+					})
+					.then(function(e) {
+						obj.$api.msg(e.msg);
+						setTimeout(() => {
+							uni.navigateTo({
+								url: '/pages/public/login'
+							})
+						},500);
+					})
+					.catch(e => {
+						console.log(e);
+					});
+			},
+			// 发送验证码
+			getCode() {
+				const obj = this;
 				obj.countDown = 60;
 				obj.time = setInterval(() => {
 					obj.countDown--;
 				}, 1000);
 				//调用验证码接口
-				verify({
-					phone: obj.phone,
-					type: 'login'
-				})
-					.then(({ data }) => {
-						uni.showToast({
-							title: '验证码已发送',
-							duration: 2000,
-							position: 'top',
-							icon: 'none'
-						});
-					})
-					.catch(err => {
-						console.log(err);
-					});
+			},
+			//发送验证码
+			verification() {
+				let obj = this;
+				if (this.phone == '') {
+					this.$api.msg('请输入邮箱号码');
+					return;
+				}
+				if (!/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test(obj.phone) && !
+					/(^1[3|4|5|6|7|8|9][0-9]{9}$)/.test(this.phone)) {
+					obj.$api.msg('请输入正确的邮箱或手机');
+					return;
+				}
+				// 判断是否在倒计时
+				if (obj.countDown > 0) {
+					return false;
+				} else {
+					obj.showAlert = true;
+					obj.$refs.alertImage.getImage()
+				}
 			}
 		}
-	}
-};
+	};
 </script>
 
 <style lang="scss">
-page {
-	min-height: 100%;
-	background-color: #ffffff;
-	.container {
-		width: 100%;
+	page {
+		min-height: 100%;
+		background-color: #ffffff;
+
+		.container {
+			width: 100%;
+		}
 	}
-}
-.container_text {
-	position: relative;
-	width: 100%;
-	height: 500rpx;
-	top: 0rpx;
-	.banner-img {
+
+	.container_text {
+		position: relative;
 		width: 100%;
-		height: 100%;
-	}
-	.title-img {
-		position: absolute;
-		left: 50%;
-		top: 100rpx;
-		margin-left: -130rpx;
-		width: 260rpx;
-		height: 156rpx;
-		.title-image {
+		height: 500rpx;
+		top: 0rpx;
+
+		.banner-img {
+			width: 100%;
+			height: 100%;
+		}
+
+		.title-img {
+			position: absolute;
+			left: 50%;
+			top: 100rpx;
+			margin-left: -130rpx;
 			width: 260rpx;
 			height: 156rpx;
+
+			.title-image {
+				width: 260rpx;
+				height: 156rpx;
+			}
 		}
 	}
-}
-.loginTitle {
-	position: absolute;
-	top: 270rpx;
-	width: 100%;
-	text-align: center;
-	color: white;
-	font-size: 40rpx;
-}
-.phone {
-	height: 43rpx !important;
-	width: 27rpx !important;
-}
-.codeimg {
-	height: 39rpx !important;
-	width: 31rpx !important;
-}
-.login_text {
-	margin: -100rpx 0 0;
-	position: relative;
-	padding: 100rpx 102rpx;
-	background-color: #ffffff;
-	border-top-left-radius: 40rpx;
-	border-top-right-radius: 40rpx;
-	.login_input {
-		border-bottom: 1px solid #f0f0f0;
-		margin-bottom: 65rpx;
-		.login_img image {
-			height: 36rpx;
-			width: 30rpx;
-			margin-right: 20rpx;
+
+	.loginTitle {
+		position: absolute;
+		top: 270rpx;
+		width: 100%;
+		text-align: center;
+		color: white;
+		font-size: 40rpx;
+	}
+
+	.phone {
+		width: 30rpx !important;
+	}
+
+	.codeimg {
+		width: 25rpx !important;
+	}
+
+	.login_text {
+		margin: -100rpx 0 0;
+		position: relative;
+		padding: 100rpx 102rpx;
+		background-color: #ffffff;
+		border-top-left-radius: 40rpx;
+		border-top-right-radius: 40rpx;
+
+		.login_input {
+			border-bottom: 1px solid #f0f0f0;
+			margin-bottom: 65rpx;
+
+			.login_img image {
+				width: 30rpx;
+				margin-right: 20rpx;
+			}
+
+			.uni-input {
+				text-align: left;
+				font-size: 28rpx !important;
+				flex-grow: 1;
+			}
+
+			.login_name {
+				color: #333333;
+				flex-grow: 1;
+			}
 		}
-		.uni-input {
-			text-align: left;
-			width: 470rpx;
-			font-size: 28rpx !important;
+
+		.other {
+			margin-top: 60rpx;
+
+			.fenge {
+				width: 30%;
+				height: 2rpx;
+				background-color: #eeeeee;
+			}
+
+			.qita {
+				font-size: 28rpx;
+				color: #999999;
+			}
 		}
-		.login_name {
-			color: #333333;
+
+		.weixin {
+			width: 75rpx;
+			height: 75rpx;
+			margin: 25rpx auto;
 		}
-	}
 
-	.other {
-		margin-top: 60rpx;
-		.fenge {
-			width: 30%;
-			height: 2rpx;
-			background-color: #eeeeee;
+		.weixin image {
+			width: 100%;
+			height: 100%;
 		}
-		.qita {
+
+		.weixin_text {
+			text-align: center;
 			font-size: 28rpx;
 			color: #999999;
 		}
+
+		.forget {
+			font-size: 28rpx;
+			width: 100%;
+			text-align: right;
+			color: #999999;
+		}
+
+		.uni-button-green {
+			text-align: center;
+			color: #ffffff;
+			background-color: #db292b;
+			margin: 40rpx 10rpx;
+			border-radius: 50rpx;
+		}
+
+		.uni-button-green-plain {
+			border: 1px solid #db292b;
+			margin: 40rpx 10rpx;
+			border-radius: 50rpx;
+			color: #db292b;
+			background-color: #ffffff;
+		}
+
+		.uni-button {
+			height: 85rpx;
+			line-height: 85rpx;
+		}
 	}
-	.weixin {
-		width: 75rpx;
-		height: 75rpx;
-		margin: 25rpx auto;
-	}
-	.weixin image {
-		width: 100%;
-		height: 100%;
-	}
-	.weixin_text {
+
+	.code {
+		color: #db292b;
+		font-size: 23rpx;
+		border-left: 1px solid #eeeeee;
+		width: 150rpx;
+		flex-shrink: 0;
 		text-align: center;
-		font-size: 28rpx;
-		color: #999999;
 	}
-	.forget {
-		font-size: 28rpx;
-		width: 100%;
-		text-align: right;
-		color: #999999;
+
+	.width {
+		width: 325rpx !important;
 	}
 
-	.uni-button-green {
-		text-align: center;
+	.login {
+		background: #db292b;
+		margin-top: 96rpx;
 		color: #ffffff;
-		background-color: #db292b;
-		margin: 40rpx 10rpx;
-		border-radius: 50rpx;
-	}
-	.uni-button-green-plain {
-		border: 1px solid #db292b;
-		margin: 40rpx 10rpx;
-		border-radius: 50rpx;
-		color: #db292b;
-		background-color: #ffffff;
-	}
-	.uni-button {
-		height: 85rpx;
-		line-height: 85rpx;
+		text-align: center;
+		padding: 26rpx 0rpx;
+		border-radius: 20rpx;
 	}
-}
-
-.code {
-	color: #db292b;
-	font-size: 23rpx;
-	border-left: 1px solid #eeeeee;
-	width: 150rpx;
-	flex-shrink: 0;
-	text-align: center;
-}
-
-.width {
-	width: 325rpx !important;
-}
-
-.login {
-	background: #db292b;
-	margin-top: 96rpx;
-	color: #ffffff;
-	text-align: center;
-	padding: 26rpx 0rpx;
-	border-radius: 20rpx;
-}
-</style>
+</style>

+ 4 - 5
pages/public/login.vue

@@ -10,14 +10,14 @@
 		<view class="login_text">
 			<view class="login_input flex">
 				<view class="login_img">
-					<image src="/static/icon/login_name.png" mode="heightFix"></image>
+					<image src="../../static/icon/login_name.png" mode="heightFix"></image>
 				</view>
 				<view class="login_name"><input class="uni-input" v-model="username" focus placeholder="请输入手机号" />
 				</view>
 			</view>
 			<view class="login_input flex">
 				<view class="login_img">
-					<image src="/static/icon/login_pw.png" mode="heightFix"></image>
+					<image src="../../static/icon/login_pw.png" mode="heightFix"></image>
 				</view>
 				<view class="login_name"><input class="uni-input" type="password" v-model="passward" focus
 						placeholder="请输入密码" /></view>
@@ -101,6 +101,7 @@
 				uni.login({
 					provider: type,
 					success(e) {
+						obj.login();
 						uni.getUserInfo({
 							provider: type,
 							success(es) {
@@ -109,7 +110,6 @@
 										.then(e => {
 											uni.setStorageSync('token', e.data.token);
 											getUserInfo({}).then(e => {
-												obj.login();
 												// 保存返回用户数据
 												obj.setUserInfo(e.data);
 												//成功跳转首页
@@ -136,7 +136,6 @@
 											console.log(e, 'token');
 											uni.setStorageSync('token', e.data.token);
 											getUserInfo({}).then(e => {
-												obj.login();
 												// 保存返回用户数据
 												obj.setUserInfo(e.data);
 												//成功跳转首页
@@ -197,12 +196,12 @@
 						password: obj.passward
 					})
 					.then(function(e) {
+						obj.login();
 						console.log(e.data.token, '123456');
 						uni.setStorageSync('token', e.data.token);
 						// obj.$store.commit('hasLogin', true);
 						getUserInfo({}).then(e => {
 							obj.logining = false;
-							obj.login();
 							// 保存返回用户数据
 							obj.setUserInfo(e.data);
 							// let ur = uni.getStorageSync('present')|| '/pages/index/index';

+ 31 - 20
pages/public/register.vue

@@ -9,7 +9,7 @@
 					<!-- <image src="/static/icon/img03.png" mode="heightFix"></image> -->
 					+86
 				</view>
-				<view class="login_name"><input class="uni-input" v-model="phone" focus placeholder="请输入手机号" /></view>
+				<view class="login_name"><input class="uni-input" v-model="phone" type="number" focus placeholder="请输入手机号" /></view>
 			</view>
 			<view class="login_input flex">
 				<view class="login_img">
@@ -35,7 +35,7 @@
 						placeholder="请重复输入密码" /></view>
 			</view>
 
-			<view class="login_input flex">
+			<view class="login_input flex"  v-if="isShowIllegality">
 				<view class="login_img">
 					<image src="/static/icon/login_name.png" mode="heightFix"></image>
 				</view>
@@ -46,13 +46,17 @@
 			<view><button class="uni-button uni-button-green uni-button-green-plain" type="green" plain="true"
 					hover-class="none" @click="login">返回登录</button></view>
 		</view>
+		<codeImage @openCode='getCode' loginType="register" @close='showAlert=false' :phone="phone" ref="alertImage" :show='showAlert'></codeImage>
 	</view>
 </template>
 <script>
 	import {
 		register,
-		verify
 	} from '@/api/login.js';
+	import {
+		mapState
+	} from 'vuex';
+	import codeImage from '@/components/codeImage.vue';
 	export default {
 		data() {
 			return {
@@ -62,9 +66,16 @@
 				invitation: '', //邀请码
 				code: '', //验证码
 				time: '', //保存倒计时对象
-				countDown: 0 //倒计时
+				countDown: 0 ,//倒计时
+				showAlert:false,
 			};
 		},
+		computed: {
+			...mapState(["isShowIllegality"])
+		},
+		components: {
+			codeImage
+		},
 		onLoad(options) {
 			// 获取扫码邀请人id
 			this.invitation = uni.getStorageSync('spread') || '';
@@ -81,6 +92,19 @@
 			}
 		},
 		methods: {
+			close() {
+				console.log('end')
+				this.showAlert = false;
+			},
+			// 发送验证码
+			getCode() {
+				const obj = this;
+				obj.countDown = 60;
+				obj.time = setInterval(() => {
+					obj.countDown--;
+				}, 1000);
+				//调用验证码接口
+			},
 			// 注册
 			register() {
 				let obj = this;
@@ -116,7 +140,7 @@
 					account: obj.phone, //账号
 					captcha: obj.code, //验证码
 					password: obj.password, //密码
-					spread: this.invitation //上级推广人
+					spread: obj.invitation //上级推广人
 				}).then(function(e) {
 					uni.showToast({
 						title: '注册成功',
@@ -146,21 +170,8 @@
 				if (obj.countDown > 0) {
 					return false;
 				} else {
-					obj.countDown = 60;
-					obj.time = setInterval(() => {
-						obj.countDown--;
-					}, 1000);
-					//调用验证码接口
-					verify({
-							phone: obj.phone,
-							type: 'register'
-						})
-						.then(({
-							data
-						}) => {})
-						.catch(err => {
-							console.log(err);
-						});
+					obj.showAlert = true;
+					obj.$refs.alertImage.getImage()
 				}
 			},
 			login() {

+ 1 - 0
pages/public/wxLogin.vue

@@ -47,6 +47,7 @@ export default {
 	methods: {
 		loadData() {
 			// #ifdef H5
+			console.log('1111')
 			loginWinxin();
 			// #endif
 		},

+ 3 - 1
pages/redirect/redirect.vue

@@ -32,6 +32,9 @@ export default {
 			let url = window.location.href;
 			let code = url.match(/code=([0-9]|[a-z]|[A-Z])*/g)[0].replace('code=', '');
 			let spread = uni.getStorageSync('spread') || '';
+			if(code){
+				obj.login();
+			}
 			wechatAuth({
 				code: code,
 				spread: spread
@@ -100,7 +103,6 @@ export default {
 			console.log('获取用户信息');
 			getUserInfo({})
 				.then(e => {
-					obj.login();
 					// 保存返回用户数据
 					obj.setUserInfo(e.data);
 					let ur = uni.getStorageSync('present') || '/pages/index/index';

+ 139 - 122
pages/set/password.vue

@@ -11,151 +11,168 @@
 		</view>
 		<view class="row b-b">
 			<text class="tit">新密码</text>
-			<input class="input" v-model="password" type="password" placeholder="请填写新密码" placeholder-class="placeholder" />
+			<input class="input" v-model="password" type="password" placeholder="请填写新密码"
+				placeholder-class="placeholder" />
 		</view>
 		<button class="add-btn" :class="{'bg-gray':loding}" @click="loding?'':confirm()">提交</button>
+		<codeImage @openCode='getCode' loginType="" @close='showAlert=false' :phone="account" ref="alertImage"
+			:show='showAlert'></codeImage>
 	</view>
 </template>
 
 <script>
-import { verify } from '@/api/login.js';
-import { mapState } from 'vuex';
-import { registerReset } from '@/api/set.js';
-export default {
-	data() {
-		return {
-			time: '', //保存倒计时对象
-			countDown: 0, //倒计时
-			account: '', //手机号
-			captcha: '', //验证码
-			password: '' ,//新密码
-			loding:false,//是否载入中
-		};
-	},
-	computed: {
-		...mapState(['userInfo'])
-	},
-	onLoad() {
-		if(this.userInfo.phone == null){
-			this.account = '';
-		}else{
-			this.account = this.userInfo.phone;
-			this.show = false;
-		}
-	},
-	watch: {
-		// 监听倒计时
-		countDown(i) {
-			if (i == 0) {
-				clearInterval(this.time);
-			}
-		}
-	},
-	methods: {
-		//发送验证码
-		verification() {
-			let obj = this;
-			if (this.account == '') {
-				this.$api.msg('请输入电话号码');
-				return;
+	import {
+		mapState
+	} from 'vuex';
+	import {
+		registerReset
+	} from '@/api/set.js';
+	import codeImage from '@/components/codeImage.vue';
+	export default {
+		data() {
+			return {
+				time: '', //保存倒计时对象
+				countDown: 0, //倒计时
+				account: '', //手机号
+				captcha: '', //验证码
+				password: '', //新密码
+				loding: false, //是否载入中
+				showAlert: false,
+			};
+		},
+		computed: {
+			...mapState(['userInfo'])
+		},
+		onLoad() {
+			if (this.userInfo.phone == null) {
+				this.account = '';
+			} else {
+				this.account = this.userInfo.phone;
+				this.show = false;
 			}
-			if (!/(^1[3|4|5|7|8][0-9]{9}$)/.test(this.account)) {
-				this.$api.msg('请输入正确的手机号');
-				return;
+		},
+		watch: {
+			// 监听倒计时
+			countDown(i) {
+				if (i == 0) {
+					clearInterval(this.time);
+				}
 			}
-			// 判断是否在倒计时
-			if (obj.countDown > 0) {
-				return false;
-			} else {
+		},
+		methods: {
+			close() {
+				this.showAlert = false;
+			},
+			// 发送验证码
+			getCode() {
+				const obj = this;
 				obj.countDown = 60;
 				obj.time = setInterval(() => {
 					obj.countDown--;
 				}, 1000);
 				//调用验证码接口
-				verify({
-					phone: obj.account,
-					type: ''
-				})
-					.then(({ data }) => {})
+			},
+			//发送验证码
+			verification() {
+				let obj = this;
+				if (this.account == '') {
+					this.$api.msg('请输入电话号码');
+					return;
+				}
+				if (!/(^1[3|4|5|7|8][0-9]{9}$)/.test(this.account)) {
+					this.$api.msg('请输入正确的手机号');
+					return;
+				}
+				// 判断是否在倒计时
+				if (obj.countDown > 0) {
+					return false;
+				} else {
+					obj.showAlert = true;
+					obj.$refs.alertImage.getImage()
+				}
+			},
+			confirm(e) {
+				this.loding = true;
+				registerReset({
+						account: this.account,
+						captcha: this.captcha,
+						password: this.password,
+					})
+					.then(({
+						data
+					}) => {
+						this.loding = false;
+						this.$api.msg('修改成功');
+					})
 					.catch(err => {
+						this.loding = false;
 						console.log(err);
 					});
 			}
-		},
-		confirm(e) {
-			this.loding = true;
-			registerReset({
-				account: this.account,
-				captcha: this.captcha,
-				password: this.password,
-			})
-				.then(({ data }) => {
-					this.loding = false;
-					this.$api.msg('修改成功');
-				})
-				.catch(err => {
-					this.loding = false;
-					console.log(err);
-				});
 		}
-	}
-};
+	};
 </script>
 
 <style lang="scss">
-page {
-	background: $page-color-base;
-}
-.container {
-	padding-top: 30rpx;
-}
-.row {
-	display: flex;
-	align-items: center;
-	position: relative;
-	padding: 0 30rpx;
-	height: 110rpx;
-	background: #fff;
+	page {
+		background: $page-color-base;
+	}
 
-	.tit {
-		flex-shrink: 0;
-		width: 120rpx;
-		font-size: 30rpx;
-		color: $font-color-dark;
+	.container {
+		padding-top: 30rpx;
 	}
-	.input {
-		flex: 1;
-		font-size: 30rpx;
-		color: $font-color-dark;
+
+	.row {
+		display: flex;
+		align-items: center;
+		position: relative;
+		padding: 0 30rpx;
+		height: 110rpx;
+		background: #fff;
+
+		.tit {
+			flex-shrink: 0;
+			width: 120rpx;
+			font-size: 30rpx;
+			color: $font-color-dark;
+		}
+
+		.input {
+			flex: 1;
+			font-size: 30rpx;
+			color: $font-color-dark;
+		}
+
+		.iconlocation {
+			font-size: 36rpx;
+			color: $font-color-light;
+		}
+	}
+
+	.add-btn {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		width: 690rpx;
+		height: 80rpx;
+		margin: 60rpx auto;
+		font-size: $font-lg;
+		color: #fff;
+		background-color: $base-color;
+		border-radius: 10rpx;
+		// box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4);
 	}
-	.iconlocation {
-		font-size: 36rpx;
-		color: $font-color-light;
+
+	.bg-gray {
+		background-color: $color-gray;
 	}
-}
-.add-btn {
-	display: flex;
-	align-items: center;
-	justify-content: center;
-	width: 690rpx;
-	height: 80rpx;
-	margin: 60rpx auto;
-	font-size: $font-lg;
-	color: #fff;
-	background-color: $base-color;
-	border-radius: 10rpx;
-	// box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4);
-}
 
-.bg-gray{
-	background-color: $color-gray;
-}
-.code {
-	color: #5dbc7c;
-	font-size: 23rpx;
-	border-left: 1px solid #eeeeee;
-	width: 150rpx;
-	flex-shrink: 0;
-	text-align: center;
-}
-</style>
+	.code {
+		color: #5dbc7c;
+		font-size: 23rpx;
+		border-left: 1px solid #eeeeee;
+		width: 150rpx;
+		flex-shrink: 0;
+		text-align: center;
+	}
+</style>

+ 22 - 22
pages/set/phone.vue

@@ -13,13 +13,11 @@
 			</view>
 			<button class="add-btn" :class="{ 'bg-gray': loding }" @click="loding ? '' : confirm()">提交</button>
 		</view>
+		<codeImage @openCode='getCode' loginType="BDING_CODE" @close='showAlert=false' :phone="account" ref="alertImage" :show='showAlert'></codeImage>
 	</view>
 </template>
 
 <script>
-	import {
-		verify
-	} from '@/api/login.js';
 	import {
 		mapState
 	} from 'vuex';
@@ -30,6 +28,7 @@
 	import {
 		getUserInfo
 	} from '@/api/user.js';
+	import codeImage from '@/components/codeImage.vue';
 	export default {
 		data() {
 			return {
@@ -39,7 +38,8 @@
 				account: '', //手机号
 				captcha: '', //验证码
 				password: '', //新密码
-				loding: false //是否载入中
+				loding: false ,//是否载入中
+				showAlert:false,
 			};
 		},
 		watch: {
@@ -53,6 +53,9 @@
 		computed: {
 			...mapState('user', ['userInfo'])
 		},
+		components: {
+			codeImage
+		},
 		onLoad() {
 			console.log(this.userInfo, '123456');
 			if (!this.userInfo.phone) {
@@ -63,6 +66,19 @@
 			}
 		},
 		methods: {
+			close() {
+				console.log('end')
+				this.showAlert = false;
+			},
+			// 发送验证码
+			getCode() {
+				const obj = this;
+				obj.countDown = 60;
+				obj.time = setInterval(() => {
+					obj.countDown--;
+				}, 1000);
+				//调用验证码接口
+			},
 			//发送验证码
 			verification() {
 				let obj = this;
@@ -78,23 +94,8 @@
 				if (obj.countDown > 0) {
 					return false;
 				} else {
-					obj.countDown = 60;
-					obj.time = setInterval(() => {
-						obj.countDown--;
-					}, 1000);
-					//调用验证码接口
-					verify({
-							phone: obj.account,
-							type: 'BDING_CODE'
-						})
-						.then(({
-							data
-						}) => {
-							
-						})
-						.catch(err => {
-							console.log(err);
-						});
+					obj.showAlert = true;
+					obj.$refs.alertImage.getImage()
 				}
 			},
 			confirm(e) {
@@ -158,7 +159,6 @@
 								showCancel: false,
 							});
 						}
-						console.log(err);
 					});
 			}
 		}

+ 1 - 0
pages/set/set.vue

@@ -5,6 +5,7 @@
 			<uni-list-item title="收货地址" @click="navTo('/pages/set/address')"></uni-list-item>
 			<uni-list-item title="交易密码" @click="navTo('/pages/money/moneyPwd')"></uni-list-item>
 			<uni-list-item title="修改登录密码" @click="navTo('/pages/public/forget')"></uni-list-item>
+			<uni-list-item title="隐私协议" @click="navTo('/pages/user/about')"></uni-list-item>
 			<uni-list-item title="注销账户" @click="detailPhone()"></uni-list-item>
 		</uni-list>
 		<view class="list-cell log-out-btn" @click="toLogout"><text class="cell-tit">退出登录</text></view>

+ 41 - 25
pages/set/userinfo.vue

@@ -20,6 +20,13 @@
 			<input class="input" type="text" disabled="true" v-model="userInfo.phone" placeholder-class="placeholder" />
 		</view>
 		<view class="add-btn" @click="confirm">提交</view>
+		<canvas canvas-id="canvas" v-if="canvasStatus"
+			:style="{width: canvasWidth + 'px', height: canvasHeight + 'px',position: 'absolute',left:'-100000px',top:'-100000px'}"></canvas>
+		<uni-popup ref="popup" type="center">
+			<view class="alertprogress">
+			{{progress}}%
+			</view>
+		</uni-popup>
 	</view>
 </template>
 
@@ -42,6 +49,10 @@
 				show: false,
 				password: '',
 				upFileLoding: false,
+				canvasStatus: false,
+				canvasWidth:0,
+				canvasHeight:0,
+				progress:0,
 			}
 		},
 		onLoad() {
@@ -55,32 +66,37 @@
 			...mapMutations('user', ['logout']),
 			imgsub() {
 				const that = this;
-				uni.showModal({
-					title: '访问相册权限申请',
-					content: '是否允许访问相册上传头像?',
-					cancelText: '拒绝',
-					confirmText: '允许',
-					success: res => {
-						if (res.confirm) {
-							if (that.upFileLoding) {
-								return
-							}
-							that.upFileLoding = true;
-							setTimeout(() => {
-								that.upFileLoding = false;
-							}, 1000);
-							upload({
-								filename: ''
-							}).then(data => {
-								this.userInfo.avatar = data[0].url;
-							}).catch((err) => {
-								console.log(err);
-							})
+					if (that.upFileLoding) {
+						return
+					}
+					that.upFileLoding = true;
+					that.canvasStatus = true;
+					setTimeout(() => {
+						that.upFileLoding = false;
+					}, 1000);
+					upload({
+						filename: ''
+					}, (res) => {
+						that.userInfo.avatar = res[0].url;
+						that.canvasStatus = false
+					}, (res) => {
+						that.canvasStatus = false
+					}, (res) => {
+						that.canvasWidth = res.w
+						that.canvasHeight = res.h
+					},(res)=>{
+						// console.log(res,'res');
+						if(res.progress==100){
+							this.$refs.popup.close()
+							uni.showToast({
+								title: '上传成功'
+							});
+						}else if(res.progress==0){
+							this.$refs.popup.open()
 						}
-					},
-					fail: () => {},
-					complete: () => {}
-				});
+						that.progress = res.progress;
+						// console.log(res,'进度条');
+					})
 			},
 			confirm() {
 				userEdit({

+ 16 - 16
pages/store/shopDetail.vue

@@ -357,22 +357,22 @@
 
 				let obj = this;
 				//  #ifndef H5
-				uni.getLocation({
-					type: 'gcj02',
-					success: res => {
-						console.log(res, 123456);
-						obj.setLat(res.latitude);
-						obj.setLon(res.longitude);
-
-						obj.getStoreDetail();
-					},
-					fail: err => {
-						console.log(err, 'shi+++++++++++++++');
-						openMap().then(e => {
-							this.getaddress();
-						});
-					}
-				});
+				// uni.getLocation({
+				// 	type: 'gcj02',
+				// 	success: res => {
+				// 		console.log(res, 123456);
+				// 		obj.setLat(res.latitude);
+				// 		obj.setLon(res.longitude);
+
+				// 		obj.getStoreDetail();
+				// 	},
+				// 	fail: err => {
+				// 		console.log(err, 'shi+++++++++++++++');
+				// 		openMap().then(e => {
+				// 			this.getaddress();
+				// 		});
+				// 	}
+				// });
 				// #endif
 
 				// #ifdef H5

+ 10 - 8
pages/store/store.vue

@@ -366,14 +366,14 @@
 						console.log(err, '报错');
 					});
 			},
-			getLocation() {
-				uni.getLocation({
-					type: 'gcj02',
-					success(e) {
-						console.log(e, 'dingwei');
-					}
-				});
-			},
+			// getLocation() {
+			// 	uni.getLocation({
+			// 		type: 'gcj02',
+			// 		success(e) {
+			// 			console.log(e, 'dingwei');
+			// 		}
+			// 	});
+			// },
 			navto(url) {
 				uni.navigateTo({
 					url,
@@ -387,6 +387,7 @@
 			getaddress() {
 				console.log('dizhi+++++++++++');
 				let obj = this;
+				// #ifndef APP
 				uni.getLocation({
 					type: 'wgs84',
 					success: res => {
@@ -412,6 +413,7 @@
 						});
 					}
 				});
+				// #endif
 			},
 			wgs84Togcj02(lng, lat) {
 				if (this.out_of_china(lng, lat)) {

+ 2796 - 0
pages/user/about.vue

@@ -1,4 +1,2800 @@
 <template>
+	<view style="padding: 30rpx;">
+		<h3>
+			<b>《</b><b>易趣CBB</b><b>隐私政策》</b><b></b>
+		</h3>
+		<p class="p">
+			<b>生效时间:</b><span>【</span><b>2023-</b><b><span>11</span></b><b>-</b><b><span>1</span></b><span>】</span>
+		</p>
+		<p class="p">
+			更新时间:【<b>202</b><b><span>3</span></b><b>-</b><b>11-20</b>】
+		</p>
+		<h4>
+			<b>提示条款</b><b></b>
+		</h4>
+		<p class="p">
+			在使用【易趣CBB<span>】各项产品或服务前,请您务必仔细阅读并透彻理解本政策,特别是以粗体</span>/粗体下划线标识的条款,您应重点阅读,在确认充分理解并同意后再开始使用。如对本政策内容有任何疑问、意见或建议,您可通过【易趣CBB】提供的各种联系方式与我们联系。
+		</p>
+		<p class="p">
+			您的信任对我们非常重要,我们深知个人信息对您的重要性,我们将按法律法规要求,采取相应安全保护措施,尽力保护您的个人信息安全可控。鉴于此,【易趣CBB<span>】服务提供者(或简称</span><span>“我们”或“【</span>易趣CBB<span>】</span><span>”)制定本《隐私政策》(下称“本政策
+				/本隐私政策”)并提醒您:本政策适用于【</span>易趣CBB】提供的所有产品和服务及我们的关联公司的产品或服务(如【易趣CBB】小程序),您可使用【易趣CBB】平台帐号登录上述产品或服务,如上述产品或服务未设独立隐私政策的,则本政策同样适用于该部分产品或服务。
+		</p>
+		<p class="p">
+			需要特别说明的是,本政策不适用于其他第三方向您提供的服务,也不适用于【易趣CBB】中已另行独立设置隐私政策的产品或服务。
+		</p>
+		<h4>
+			<b><span>第一部分</span>&nbsp;定义</b><b></b>
+		</h4>
+		<p class="p">
+			【<span>易趣CBB</span>】服务提供者:【<span>杭州尚视拍卖有限公司</span>】&nbsp;
+		</p>
+		<p class="p">
+			<b><span
+					style="color:#E53333 !important;">个人信息:指以电子或者其他方式记录的能够单独或者与其他信息结合识别特定自然人身份或者反映特定自然人活动情况的各种信息。</span></b><b></b>
+		</p>
+		<p class="p">
+			<b><span style="color:#E53333;">个人敏感信息:指包括身份证件号码、个人生物识别信息、银行账号、财产信息、行踪轨迹、交易信息、</span><span
+					style="color:#E53333;">14岁以下(含)儿童信息个人信息(我们将在本隐私政策中对具体个人敏感信息以粗体进行显著标识)。</span></b><b></b>
+		</p>
+		<p class="p">
+			<b><span style="color:#E53333;">个人信息删除:指在实现日常业务功能所涉及的系统中去除个人信息的行为,使其保持不可被检索、访问的状态。</span></b><b></b>
+		</p>
+		<p class="p">
+			<b><span style="color:#E53333;">儿童:指不满十四周岁的未成年人。</span></b><b></b>
+		</p>
+		<p class="p">
+			<b><span style="color:#E53333;">除另有约定外,本政策所用定义与【</span></b><b><span
+					style="color:#E53333;">易趣CBB</span></b><b><span
+					style="color:#E53333;">】平台用户协议中的定义具有相同的涵义。</span></b><b></b>
+		</p>
+		<h4>
+			<b><span>第二部分</span>&nbsp;隐私政策</b><b></b>
+		</h4>
+		<p class="p">
+			本隐私政策部分将帮助您了解以下内容:
+		</p>
+		<p class="p">
+			一、我们如何收集和使用您的信息
+		</p>
+		<p class="p">
+			<span>二、我们如何使用</span>Cookie
+		</p>
+		<p class="p">
+			三、我们如何共享、转让、公开披露您的信息
+		</p>
+		<p class="p">
+			四、我们如何存储您的信息
+		</p>
+		<p class="p">
+			五、我们如何保护您的信息
+		</p>
+		<p class="p">
+			六、您如何管理您的信息
+		</p>
+		<p class="p">
+			七、我们如何处理未成年人的信息
+		</p>
+		<p class="p">
+			八、您的信息如何在全球范围转移
+		</p>
+		<p class="p">
+			九、本隐私政策如何更新
+		</p>
+		<p class="p">
+			十、如何联系我们
+		</p>
+		<h4>
+			<b>一、我们如何收集和使用您的信息</b><b></b>
+		</h4>
+		<p class="p">
+			<span>在您使用我们的产品及</span>/或服务时,我们需要/可能需要收集和使用的您的个人信息包括如下两种:
+		</p>
+		<p class="p">
+			1、为实现向您提供我们产品及/或服务的基本功能,我们将按照《网络安全法》的规定收集、使用您的个人信息。如您拒绝提供相应信息,您将无法正常使用我们的产品及/或服务,但不影响您浏览我们的网页及客户端页面;
+		</p>
+		<p class="p">
+			2、为实现向您提供我们产品及/或服务的附加功能,您可选择授权我们收集、使用您的个人敏感信息。如您拒绝提供,您将无法正常使用相关附加功能或无法达到我们拟达到的功能效果,但并不会影响您正常使用我们产品及/或服务的基本功能。
+		</p>
+		<p class="p">
+			您理解并同意:
+		</p>
+		<p class="p">
+			1、我们致力于打造多样的产品和服务以满足您的需求。因我们向您提供的产品和服务种类众多,且不同用户选择使用的具体产品/服务范围存在差异,因此基本/附加功能及收集使用的个人信息类型、范围会有所区别,请以具体的产品/服务功能为准;
+		</p>
+		<p class="p">
+			2、为给您带来更好的产品和服务体验,我们在持续努力改进我们的技术,随之我们可能会不时推出新的或优化后的功能,可能需要重新收集、使用您的个人信息或变更个人信息使用目的或方式。对此,我们将通过更新本政策、弹窗、页面提示方式另行向您说明对应信息的收集目的、范围及使用方式,并征求您的明示同意。在此过程中,如果您有任何疑问、意见或建议的,您可通过【易趣CBB】提供的各种联系方式与我们联系,我们会尽快为您作出解答。
+		</p>
+		<p class="p">
+			我们会为实现本政策下述的各项功能,收集和使用您的个人信息:
+		</p>
+		<p class="p">
+			<span>(一)</span>&nbsp;帮助您成为我们的会员
+		</p>
+		<p class="p">
+			1、基础会员服务
+		</p>
+		<p class="p">
+			注册成为会员并使用我们的会员服务,您需要提供手机号码、拟使用的会员名和密码用于创建【易趣CBB】平台账户。如果您仅需使用浏览、搜索服务,您不需要注册成为我们的会员及提供上述信息。
+		</p>
+		<p class="p">
+			在您登录帐户时,我们可能会根据您提供的上述信息校验您的会员身份,确保我们是在为您本人提供服务。若存在依法需确定您会员身份的场景(包括依法为您扣缴税费、行政执法或司法诉讼中相关主体认定等)时,您授权我们可获取您对应支付账户的相关认证信息用于上述目的。
+		</p>
+		<p class="p">
+			我们会根据您的会员账户使用情况为您提供相应会员所对应的基本权益。
+		</p>
+		<p class="p">
+			2、附加会员服务
+		</p>
+		<p class="p">
+			如果您选择提供真实姓名、性别、出生年月日、居住地个人信息,我们可以为您提供更加的会员服务。为保证交易辨识度,您的帐户昵称、头像将公开显示。
+		</p>
+		<p class="p">
+			授权登录:经您同意后我们向第三方共享您的账户信息(如微信,我们可能会共享您的头像、昵称),使您可以便捷地以【易趣CBB】平台帐户实现第三方平台的注册或登录。此外,我们可能会根据您的授权从第三方处获取您的第三方账户信息,并与您的【易趣CBB<span>】平台账户进行绑定,使您可通过第三方账户直接登录、使用我们的产品及</span>/或服务。我们将在您授权同意的范围内使用您的相关信息。
+		</p>
+		<p class="p">
+			提现功能:经您同意后,我们将取得您的真实姓名、手机号码信息,与您已有的支付宝帐号进行实名匹配验证;验证通过后,您可以将【易趣CBB】中的费用提现至您的支付宝中。
+		</p>
+		<p class="p">
+			<span>其他会员角色服务:如果您申请注册成为卖家、服务商或其他存在额外身份认证要求的会员角色,您应当向我们提供身份信息及</span>/或企业相关信息,或授权我们自其他处获取您对应账户的上述相关认证信息,用于您身份及特殊会员角色获取资格的核验、登记、公示及其他我们明确告知的目的。
+		</p>
+		<p class="p">
+			3、账户信息展示:如果您已拥有【易趣CBB】平台账户,我们可能会在【易趣CBB】平台服务中显示您的上述个人信息(实人认证仅显示认证是否通过的结果),以及您在【易趣CBB】平台上或与【易趣CBB】平台账户相关联的产品和服务中执行的操作(您可通过【易趣CBB】平台账户在我们提供的手机【易趣CBB<span>】入口或其他产品</span>/服务入口使用我们及/或关联公司提供的产品或服务),包括通过【易趣CBB】平台账户集中展示您的个人资料、优惠权益、交易订单。我们会尊重您对【易趣CBB】平台服务和【易趣CBB】平台账户设置所做的选择。
+		</p>
+		<p class="p">
+			<span>(二)</span>&nbsp;为您提供商品或服务信息展示
+		</p>
+		<p class="p">
+			<span>服务日志信息:当您使用我们的网站或客户端提供的产品或服务时,我们会自动收集您对我们服务的详细使用情况,作为服务日志保存,包括浏览、点击查看、搜索查询、收藏、添加至购物车、交易、售后、关注分享信息、发布信息,以及</span>IP地址、浏览器类型、电信运营商、使用语言、访问日期和时间。
+		</p>
+		<p class="p">
+			请注意,单独的设备信息、服务日志信息是无法识别特定自然人身份的信息。如果我们将这类非个人信息与其他信息结合用于识别特定自然人身份,或者将其与个人信息结合使用,则在结合使用期间,这类非个人信息将被视为个人信息,除取得您授权或法律法规另有规定外,我们会将这类信息做匿名化、去标识化处理。
+		</p>
+		<p class="p">
+			<span>(三)</span>&nbsp;为您提供收藏、加购、关注与分享功能
+		</p>
+		<p class="p">
+			<span>在您浏览我们客户端的过程中,您可以选择对的商品及</span>/或服务进行收藏、添加至购物车、与您的商家/品牌建立关注关系、通过我们提供的功能组件向其他第三方分享信息。在您使用上述功能的过程中,我们会收集包括您的收藏及添加购物车的记录、关注关系、分享历史在内的服务日志信息用于实现上述功能及其他我们明确告知的目的。
+		</p>
+		<p class="p">
+			(四)帮助您完成下单及订单管理
+		</p>
+		<p class="p">
+			<span>当您在我们的产品及</span>/或服务中订购具体商品及/或服务时,我们会通过系统为您生成购买该商品及/或服务的订单。在下单过程中,您需至少提供您的收货人姓名、收货地址、收货人联系电话,同时该订单中会载明您所购买的商品及/或服务信息、具体订单号、订单创建时间、您应支付的金额,我们收集这些信息是为了帮助您顺利完成交易、保障您的交易安全、查询订单信息、提供客服与售后服务及其他我们明确告知的目的。
+		</p>
+		<p class="p">
+			您可以通过【易趣CBB<span>】为其他人订购商品及</span>/或服务,您需要提供该实际订购人的前述个人信息,若其中涉及儿童个人信息的,您需在提供前征得对应儿童监护人的同意。
+		</p>
+		<p class="p">
+			为便于您了解查询订单信息并对订单信息进行管理,我们会收集您在使用我们服务过程中产生的订单信息用于向您展示及便于您对订单进行管理。
+		</p>
+		<p class="p">
+			<span>您可额外填写</span>/选择包括其他联系电话、收货时间在内的更多附加信息以确保商品或服务的准确送达。
+		</p>
+		<p class="p">
+			<span>(五)</span>&nbsp;帮助您完成支付
+		</p>
+		<p class="p">
+			为完成订单支付,您需要提供支付账户并选择付款方式,我们会将您的【易趣CBB】平台账户会员名、对应的支付账户会员名、订单支付相关信息及其他反洗钱法律要求的必要信息与第三方支付公司共享。如您选择由其他金融机构为您提供支付服务的,我们或我们的关联公司、合作伙伴还会将您的包括银行卡号、有效期在内的银行卡支付必要信息与您选择的相应金融机构共享。
+		</p>
+		<p class="p">
+			<span>您可以请求其他人为您付款,那么您需要提供代付人的支付账户及</span>/或手机号码。
+		</p>
+		<p class="p">
+			为使我们及时获悉并确认您的支付进度及状态,为您提供售后与争议解决服务,您同意我们可自您所选择的交易对象、支付公司或您选择的其他金融机构处收集与支付进度相关信息。
+		</p>
+		<p class="p">
+			<span>(六)</span>&nbsp;帮助向您完成商品或服务的交付
+		</p>
+		<p class="p">
+			<span>为保证您购买的商品及</span>/或服务能够顺利、安全、准确送达,我们会向为【易趣CBB<span>】平台提供物流信息系统和技术服务的物流配送公司披露订单相关配送信息,并由其根据商品及</span>/或服务提供主体的指定向相应的物流配送主体同步相关配送信息。您知晓并同意相应物流配送主体不可避免地获知及使用您的配送信息,用于完成交付目的。
+		</p>
+		<p class="p">
+			为使我们及时获悉并确认交付进度及状态,向您提供售后与争议解决服务,您同意我们可自物流相关服务主体处收集与交付进度相关信息。
+		</p>
+		<p class="p">
+			<span>(七)</span>&nbsp;客服及争议处理
+		</p>
+		<p class="p">
+			当您与我们联系或提出售中售后、争议纠纷处理申请时,为了保障您的账户及系统安全,我们需要您提供必要的个人信息以核验您的会员身份。
+		</p>
+		<p class="p">
+			<span>为便于与您联系、尽快帮助您解决问题或记录相关问题的处理方案及结果,我们可能会保存您与我们的通信</span>/通话记录及相关内容(包括账号信息、订单信息、您为了证明相关事实提供的其他信息,或您留下的联系方式信息),如果您针对具体订单进行咨询、投诉或提供建议的,我们会使用您的账号信息和订单信息。
+		</p>
+		<p class="p">
+			<span>(八)</span>&nbsp;为您提供安全保障
+		</p>
+		<p class="p">
+			为提高您使用我们及我们关联公司、合作伙伴提供服务的安全性,保护您或其他用户或公众的人身财产安全免遭侵害,更好地预防钓鱼网站、欺诈、网络漏洞、计算机病毒、网络攻击、网络侵入安全风险,更准确地识别违反法律法规或【易趣CBB】相关协议规则的情况,我们可能使用或整合您的会员信息、交易信息、设备信息、服务日志信息以及我们关联公司、合作伙伴取得您授权或依据法律共享的信息,来综合判断您账户及交易风险、进行身份验证、检测及防范安全事件,并依法采取必要的记录、审计、分析、处置措施。
+		</p>
+		<p class="p">
+			(九)为您提供其他附加服务
+		</p>
+		<p class="p">
+			<span>为向您提供更便捷、更优质的产品及</span>/或服务,努力提升您的体验,我们在向您提供的以下附加服务中可能会收集、缓存和使用您的个人信息。如果您不提供这些信息,不会影响您使用【易趣CBB】的浏览、搜索基本服务,但您可能无法获得这些附加服务给您带来的用户体验。这些附加服务包括:
+		</p>
+		<p class="p">
+			1、基于相机/摄像头的附加服务:您可在开启相机(摄像头)权限后使用该功能。即使您已同意开启相机(摄像头)权限,我们也仅会在您主动点击相应图标或录制视频时通过相机获取照片信息。。
+		</p>
+		<p class="p">
+			2、基于读取、写入外置存储卡的附加服务:您可以在开启存储权限后,使用该功能上传您的照片/图片/视频,以实现发表评论/分享或与客服沟通提供证明等功能。
+		</p>
+		<p class="p">
+			3.基于读取手机状态和身份信息的附加服务:我们将在您开启权限后收集您的IMEI、MSI、设备MAC地址、软件列表、设备序列号、android ID,根据您的设备确认您的账户安全,实现安全风控。
+		</p>
+		<p class="p">
+			4、基于查看WLAN连接的附加功能:查看wifi连接状态,确保网络可靠性以及大流量场景下提示用户流量使用。
+		</p>
+		<p class="p">
+			5、基于检索正在运行应用的附加功能:此功能可以使您在浏览【易趣CBB<span>】商品、服务时跳转到第三方</span>APP的指定页面。
+		</p>
+		<p class="p">
+			6、基于相册(图片库/视频库)的图片/视频访问及上传、外部存储、缓存、发布音视频功能的附加服务:您可在开启相册权限后使用该功能上传您的照片/图片/视频,发表评论/分享、拍照购物或与客服沟通提供证明等功能。我们可能会通过您所上传的照片/图片来识别您需要购买的商品或服务,或使用包含您所上传照片或图片的评论信息。您如果拒绝授权提供,将无法使用此功能,但不影响您正常使用【易趣CBB】的其他功能。
+		</p>
+		<p class="p">
+			7、基于麦克风的语音技术相关附加服务:您可在开启麦克风权限后使用麦克风实现语音购物功能,或与客服联系或与客服机器人实现语音交互,在这些功能中我们会收集您的录音内容以识别您的购物需求,或响应您的客服及争议处理等需求。请您知晓,即使您已同意开启麦克风权限,我们也仅会在您主动点击客户端内麦克风图标或录制视频时通过麦克风获取语音信息。
+		</p>
+		<p class="p">
+			8、基于安装应用的附加服务:平台会定期更新应用的客户端,您可以在更新的时候,打开APP直接进行新版本的更新安装及使用。
+		</p>
+		<p class="p">
+			9、基于应用程序获得当前运行任务的信息的附加服务:平台在统计APP数据的情况下,会对APP的页面进行判断。
+		</p>
+		<p class="p">
+			10、基于保持APP在唤醒状态下的附加服务:您在本应用观看视频的情况下,需要保持应用为唤醒的状态。
+		</p>
+		<p class="p">
+			<span>您理解并同意,上述附加服务可能需要您在您的设备中开启您的位置信息</span>&nbsp;(地理位置)、摄像头(相机)、相册(图片库)、麦克风(语音)及/或日历、外部存储的访问权限,以实现这些权限所涉及信息的收集和使用。请您注意,您开启任一权限即代表您授权我们可以收集和使用相关个人信息来为您提供对应服务,您一旦关闭任一权限即代表您取消了授权,我们将不再基于对应权限继续收集和使用相关个人信息,也无法为您提供该权限所对应的服务。但是,您关闭权限的决定不会影响此前基于您的授权所进行的信息收集及使用。
+		</p>
+		<p class="p">
+			(十)其他
+		</p>
+		<p class="p">
+			1、若你提供的信息中含有其他用户的个人信息,在向【易趣CBB】提供这些个人信息之前,您需确保您已经取得合法的授权。若其中涉及儿童个人信息的,您需在发布前取得对应儿童监护人的同意,前述情形下监护人有权通过本政策第十条的途径联系我们,要求更正或删除涉及儿童个人信息的内容。
+		</p>
+		<p class="p">
+			2、若我们将信息用于本政策未载明的其他用途,或者将基于特定目的收集而来的信息用于其他目的,或者我们主动从第三方处获取您的个人信息,均会事先获得您的同意。
+		</p>
+		<p class="p">
+			若我们从第三方处间接获取您的信息的,我们会在收集前明确以书面形式要求该第三方在已依法取得您同意后收集个人信息,并向您告知共享的信息内容,且涉及敏感信息的在提供给我们使用前需经过您的明确确认,要求第三方对个人信息来源的合法性和合规性作出承诺,如第三方有违反行为的,我们会明确要求对方承担相应法律责任;同时,我们对个人信息会进行安全加固(包括敏感信息报备、敏感信息加密存储、访问权限控制)。我们会使用不低于我们对自身用户个人信息同等的保护手段与措施对间接获取的个人信息进行保护。
+		</p>
+		<p class="p">
+			3、征得授权同意的例外
+		</p>
+		<p class="p">
+			<span>您充分理解并同意,我们在以下情况下收集、使用您的个人信息无需您的授权同意,且我们可能不会响应您提出的更正</span>/修改、删除、注销、撤回同意、索取信息的请求:
+		</p>
+		<p class="p">
+			<span>(</span>1)与国家安全、国防安全有关的;
+		</p>
+		<p class="p">
+			<span>(</span>2)与公共安全、公共卫生、重大公共利益有关的;
+		</p>
+		<p class="p">
+			<span>(</span>3)与犯罪侦查、起诉、审判和判决执行等司法或行政执法有关的;
+		</p>
+		<p class="p">
+			<span>(</span>4)出于维护您或其他个人的生命、财产相关的重大合法权益但又很难得到本人同意的;
+		</p>
+		<p class="p">
+			<span>(</span>5)您自行向社会公众公开的个人信息;
+		</p>
+		<p class="p">
+			<span>(</span>6)从合法公开披露的信息中收集个人信息的,如合法的新闻报道、政府信息公开等渠道。
+		</p>
+		<p class="p">
+			<span>(</span>7)根据与您签订和履行相关协议或其他书面文件所必需的;
+		</p>
+		<p class="p">
+			<span>(</span>8)用于维护所提供的产品及/或服务的安全稳定运行所必需的,例如发现、处置产品及/或服务的故障;
+		</p>
+		<p class="p">
+			<span>(</span>9)为合法的新闻报道所必需的;
+		</p>
+		<p class="p">
+			<span>(</span>10)学术研究机构基于公共利益开展统计或学术研究所必要,且对外提供学术研究或描述的结果时,对结果中所包含的个人信息进行去标识化处理的;
+		</p>
+		<p class="p">
+			<span>(</span>11)法律法规规定的其他情形。
+		</p>
+		<p class="p">
+			请知悉,根据适用的法律,若我们对个人信息采取技术措施和其他必要措施进行处理,使得数据接收方无法重新识别特定个人且不能复原,或我们可能会对收集的信息进行去标识化地研究、统计分析和预测,用于改善【易趣CBB】的内容和布局,为商业决策提供产品或服务支撑,以及改进我们的产品和服务(包括使用匿名数据进行机器学习或模型算法训练),则此类处理后数据的使用无需另行向您通知并征得您的同意。
+		</p>
+		<p class="p">
+			4、如我们停止运营【易趣CBB】产品或服务,我们将及时停止继续收集您个人信息的活动,将停止运营的通知以逐一送达或公告的形式通知您,并对我们所持有的与已关停业务相关的个人信息进行删除或匿名化处理。涉及儿童个人信息的,我们会并将停止运营的通知及时告知儿童监护人。
+		</p>
+		<p class="p">
+			5、自启动和关联启动说明
+		</p>
+		<p class="p">
+			1)、为确保本应用处于关闭或后台运行状态下可正常接收到客户端的<span>的信息,本应用须使用</span>(自启动)能力,将存在一定频率通过系统发送广播唤醒本应用自启动或关联启动行为,是因实现功能及服务所必要的。
+		</p>
+		<p class="p">
+			2)、当您打开内容类的消息,在征得您的明确同意后,会跳转打开相关内容。在未征得
+		</p>
+		<p class="p">
+			您同意的情况下,则不会有自启动或关联启动。
+		</p>
+		<p class="p">
+			3)、当您打开本App内部下载的文件后,会关联启动第三方App
+		</p>
+		<h4>
+			<b><span>二、</span><a name="_Hlk149311760"></a></b><b></b>
+		</h4>
+		<h4>
+			<b>三</b><b>、我们如何共享、转让、公开披露您的信息</b><b></b>
+		</h4>
+		<p class="p">
+			(一)共享
+		</p>
+		<p class="p">
+			我们不会与【易趣CBB】服务提供者以外的公司、组织和个人共享您的个人信息,但以下情况除外:
+		</p>
+		<p class="p">
+			1、在法定情形下的共享:我们可能会根据法律法规规定、诉讼、争议解决需要,或按行政、司法机关依法提出的要求,对外共享您的个人信息。
+		</p>
+		<p class="p">
+			2、在获取明确同意的情况下共享:获得您的明确同意后,我们会与其他方共享您的个人信息。
+		</p>
+		<h4>
+			<b>3、在您主动选择情况下共享:您通过【</b><b>易趣CBB</b><b>】平台购买商品或服务,我们会根据您的选择,将您的订单信息中与交易有关的必要信息共享给相关商品或服务的提供者,以实现您的交易及售后服务需求。</b><b>我们如何使用</b><b>Cookie</b><b></b>
+		</h4>
+		<p class="p">
+			Cookie通常包含标识符、站点名称以及一些号码和字符。借助Cookie,我们能够存储您的账户信息、商品记录、订单记录、商品的数据。
+		</p>
+		<p class="p">
+			若您不同意我们在您的移动设备上存储Cookie的小数据文件,您可停止使用【易趣CBB】。
+		</p>
+		<p class="p">
+			我们如何使用&nbsp;Cookie&nbsp;和同类技术
+		</p>
+		<p class="p">
+			(一)Cookie
+		</p>
+		<p class="p">
+			为确保网站正常运转,我们会在您的计算机或移动设备上存储名为&nbsp;Cookie 的小数据文件。Cookie
+			通常包含标识符、站点名称以及一些号码和字符。借助于&nbsp;Cookie,网站能够存储您的的或购物篮内的商品等数据。
+		</p>
+		<p class="p">
+			我们不会将&nbsp;Cookie
+			用于本政策所述目的之外的任何用途。您可根据自己的管理或删除&nbsp;Cookie。您可以清除计算机上保存的所有&nbsp;Cookie,大部分网络浏览器都设有阻止&nbsp;Cookie
+			的功能。但如果您这么做,则需要在每一次访问我们的网站时亲自更改用户设置。如需详细了解如何更改浏览器设置,请访问以下链接:、、、和&nbsp;。
+		</p>
+		<p class="p">
+			(二)关于SDK、IMEI、MAC的使用
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			14
+		</p>
+		<p class="p">
+			为向您提供更便捷、更优质的产品及/或服务,努力提升您的体验,我们会收集您的设备型号、操作系统、唯一设备标识符、登录IP地址、操作日志、MAC地址、应用程序列表信息。我们在向您提供的以下附加服务中可能会收集和使用您的个人信息。如果您不提供这些信息,不会影响您使用我们平台的浏览、搜索、购买等基本服务,但您可能无法获得这些附加服务给您带来的用户体验。这些附加服务包括:
+		</p>
+		<p class="p">
+			收集IMEI与MAC地址&nbsp;--目的:能更快定位用户反馈的关于可能由手机型号导致的相关兼容性问题,开展问题分析与研究,改善我们的产品与服务。
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			talkingdata -- 目的:用于应用内统计分析;方式:APP内代码部署;范围:仅用于APP内行为,帮助收集、处理、分析一方数据,可视化运营指标,帮助产品设计及改进。
+		</p>
+		<p class="p">
+			友盟+ -- 目的:用于应用内数据分析与业务增长闭环运营工具;方式:APP内代码部署;范围:帮助稳定性,卡顿错误类型上报,提供行为日志,快速还原错误现场,助力APP稳定性优化。
+		</p>
+		<p class="p">
+			腾讯QQ浏览器X5的内核服务&nbsp;--
+			目的:主要用于在线浏览word文档,excell文档,pdf文档及图片等;方式:APP内加载;范围:仅限于在APP内打开word文档,excell文档,pdf文档及图片等时。
+		</p>
+		<p class="p">
+			apicloud -- APP采用混合模式开发,基于APICloud框架编译打包生成安装包。(该开发平台底层框架包含位置服务,用于用户地区分布统计,记录APP内各地区使用人数)。
+		</p>
+		<p class="p">
+			极光、小米、华为&nbsp;-- 用于站内信,为用户提供信息接收功能,以便用户及时最新了解最新信息。
+		</p>
+		<p class="p">
+			【Android版】
+		</p>
+		<p class="p">
+			wxPayPlus --目的:用于为用户提供支付功能,以便用户内购购买。
+		</p>
+		<p class="p">
+			wxPlus&nbsp;-- 目的:可用于实现微信账号登录,分享内容到朋友圈或好友、收藏等功能;轻松、高效集成微信功能到自己的&nbsp;app 内。使自己的&nbsp;app 和微信实现无缝链接。
+		</p>
+		<p class="p">
+			aliPayPlus --目的:&nbsp;用于为用户提供支付功能,以便用户内购购买。
+		</p>
+		<p class="p">
+			【ios+&nbsp;Android版】
+		</p>
+		<p class="p">
+			clSDKShanYanSDKModule --目的:闪验一键登录,手机号、主要用于登录注册账号使用,及接收运营商验证码.
+		</p>
+		<p class="p">
+			huaweiPush--目的:&nbsp;用于用户接收通知和透传消息功能。
+		</p>
+		<p class="p">
+			shareAction--目的:&nbsp;用于用户通过该功能能够分享一些最常见的文本,图片信息等
+		</p>
+		<p class="p">
+			clipBoard--目的:用户可以通过此功能对自己的信息内容剪切、复制、相关操作。
+		</p>
+		<p class="p">
+			QQPlus—目的:用于用户通过该功能能够分享一些最常见的文本,图片信息等。
+		</p>
+		<p class="p">
+			fs —目的:通过此模块对文件或文件夹进行创建、删除、读取、写入等相关操作。
+		</p>
+		<p class="p">
+			downloadManager--目的:所有的下载进程进行管理,用户可以通过界面来查看下载进度等信息,同时还提供压缩包解压、快速查看下载完成文件等功能
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			【软件安装列表敏感信息行为】
+		</p>
+		<p class="p">
+			在您登录账号时勾选用户协议与隐私政策登录成功之后才会获取信息给您带来最优的用户体验,未登录之前不会获取信息
+		</p>
+		<p class="p">
+			您理解并同意的同时请您注意,开启权限即代表您授权我们可以收集和使用相关个人信息来为您提供对应服务,您一旦关闭任一权限即代表您取消了授权,我们将不再基于对应权限继续收集和使用相关个人信息,也无法为您提供该权限所对应的服务。但是,您关闭权限的决定不会影响此前基于您的授权所进行的信息收集及使用。
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<a
+				name="_Hlk149311835"></a>4、与关联公司间共享:为便于我们基于【易趣CBB】平台账户向您提供产品和服务,您可能的信息,识别会员账号异常,保护【易趣CBB<span>】关联公司或其他用户或公众的人身财产安全免遭侵害,您的个人信息可能会与我们的关联公司和</span>/或其指定的服务提供商共享。我们只会共享必要的个人信息,且受本隐私政策中所声明目的的约束,如果我们共享您的个人敏感信息或关联公司改变个人信息的使用及处理目的,将再次征求您的授权同意。
+		</p>
+		<p class="p">
+			5、与授权合作伙伴共享:我们可能委托授权合作伙伴为您提供某些服务或代表我们履行职能,我们仅会出于本隐私政策声明的合法、正当、必要、特定、明确的目的共享您的信息,授权合作伙伴只能接触到其履行职责所需信息,且不得将此信息用于其他任何目的。对于涉及儿童个人信息的,我们不允许合作伙伴进行转委托。
+		</p>
+		<p class="p">
+			目前,我们的授权合作伙伴包括以下类型:
+		</p>
+		<p class="p">
+			<span>(</span>1)广告、分析服务类的授权合作伙伴。我们会委托这些合作伙伴处理与广告覆盖面和有效性相关的信息,但不会提供您的个人身份信息,或者我们将这些信息进行去标识化处理,以便它不会识别您个人。这类合作伙伴可能将上述信息与他们合法获取的其他数据相结合,以执行我们委托的广告服务或决策建议,帮助其在不识别您个人身份的前提下提升广告有效触达率。
+		</p>
+		<p class="p">
+			<span>(</span>2)供应商、服务提供商和其他合作伙伴。我们将信息发送给支持我们业务的供应商、服务提供商和其他合作伙伴,这些支持包括受我们委托提供的技术基础设施服务、分析我们服务的使用方式、衡量广告和服务的有效性、提供客户服务、支付便利或进行学术研究和调查,这些信息难以与您的身份信息相关联,这些信息将帮助我们分析、衡量广告和相关服务的有效性。
+		</p>
+		<p class="p">
+			<span>为保障我们客户端的稳定运行、功能实现,使您能够使用和享受更多的服务及功能,我们的应用中会嵌入授权合作伙伴的</span>SDK。我们会对授权合作伙伴获取有关信息的应用程序接口(API)、软件工具开发包(SDK)进行严格的安全检测,并与授权合作伙伴约定严格的数据保护措施,令其按照本政策以及其他任何相关的保密和安全措施来处理个人信息。
+		</p>
+		<p class="p">
+			具体如下:
+		</p>
+		<p class="p">
+			<b>SDK简称:友盟统计分析 SDK</b><b>&nbsp;&nbsp;</b><span>友盟</span>+
+		</p>
+		<p class="p">
+			合作方:友盟同欣(北京)科技有限公司
+		</p>
+		<p class="p">
+			合作目的:提供统计分析服务,并通过地理位置校准报表数据准确性,提供基础反作弊能力。
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传输个人信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:采集设备标识符</span>(IMEI/Mac/android ID/IDFA/OPENUDID/GUID、SIM 卡 IMSI 信息)、位置信息
+		</p>
+		<p class="p">
+			<span>隐私政策:</span>&nbsp;<a
+				href="https://www.umeng.com/page/policy?spm=a211eg.10560647.0.0.547034dcafEUZJ"><u>https://www.umeng.com/page/policy?spm=a211eg.10560647.0.0.547034dcafEUZJ</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:友盟应用性能监控SDK</b>
+		</p>
+		<p class="p">
+			合作方:友盟同欣(北京)科技有限公司
+		</p>
+		<p class="p">
+			合作目的:提供设备应用性能监控服务,通过采集位置信息提供反作弊服务,剔除作弊设备,排查应用性能崩溃原因。
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传输个人信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:采集设备标识符</span>(IMEI/Mac/android ID/IDFA/OPENUDID/GUID、SIM 卡 IMSI 信息)、位置信息
+		</p>
+		<p class="p">
+			<span>隐私政策:</span>&nbsp;<a
+				href="https://www.umeng.com/page/policy?spm=a211eg.10560647.0.0.547034dcafEUZJ"><u>https://www.umeng.com/page/policy?spm=a211eg.10560647.0.0.547034dcafEUZJ</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:友盟社会化分享SDK</b>
+		</p>
+		<p class="p">
+			合作方:友盟同欣(北京)科技有限公司
+		</p>
+		<p class="p">
+			合作目的:向目标设备分享消息
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传输个人信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:采集设备标识符</span>(IMEI/Mac/android ID/IDFA/OPENUDID/GUID、SIM 卡 IMSI 信息)、位置信息
+		</p>
+		<p class="p">
+			<span>隐私政策:</span>&nbsp;<a
+				href="https://www.umeng.com/page/policy?spm=a211eg.10560647.0.0.547034dcafEUZJ"><u>https://www.umeng.com/page/policy?spm=a211eg.10560647.0.0.547034dcafEUZJ</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:友盟智能认证 SDK</b>
+		</p>
+		<p class="p">
+			合作方:友盟同欣(北京)科技有限公司
+		</p>
+		<p class="p">
+			合作目的:用于提供手机号码一键登录服务。采集地理位置甄别分享通道,提供反作弊服务。
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传输个人信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:采集设备标识符</span>(IMEI/Mac/android ID/IDFA/OPENUDID/GUID、SIM 卡 IMSI 信息)以及手机号码
+		</p>
+		<p class="p">
+			隐私政策:<a
+				href="https://www.umeng.com/page/policy?spm=a211eg.10560647.0.0.547034dcafEUZJ"><u>https://www.umeng.com/page/policy?spm=a211eg.10560647.0.0.547034dcafEUZJ</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:广州展淘SDK</b>
+		</p>
+		<p class="p" align="justify" style="text-align:justify;">
+			<b><span>为了实现第三方登录、分享功能,我们使用了广州展淘(</span><span>MobTech)的ShareSDK产品,此产品的隐私策略条款为</span></b><a
+				href="http://www.mob.com/about/policy"><u><span>【</span><span>ShareSDK隐私条款https://www.mob.com/about/policy】</span></u></a>
+		</p>
+		<p class="p" align="justify" style="text-align:justify;">
+			<b>&nbsp;</b>
+		</p>
+		<p class="p" align="justify" style="text-align:justify;">
+			<b>SDK简称:创蓝闪验SDK</b>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			创蓝闪验集成三网运营商一键登录+本机号码认证,给用户带来3秒完成注册的快感,有效提升注册流程转换率,覆盖全国99.99%号码,价格优惠,稳定可靠(https://shanyan.253.com/)
+		</p>
+		<p class="p">
+			<span>隐私政策:</span>https://shanyan.253.com/document/details?cid=91&amp;lid=639&amp;pc=28&amp;pn=%25E9%2597%25AA%25E9%25AA%258CSDK
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:中国移动号码认证SDK</b>
+		</p>
+		<p class="p">
+			合作方:中国移动
+		</p>
+		<p class="p">
+			合作方类型:免密号码友盟合作方
+		</p>
+		<p class="p">
+			合作目的:提供移动端设备移动手机号免密号码验证服务
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传个人信息、设备信息
+		</p>
+		<p class="p">
+			个人信息收集范围:当前手机号的掩码
+		</p>
+		<p class="p">
+			隐私政策:<a
+				href="https://wap.cmpassport.com/resources/html/contract.html"><u>https://wap.cmpassport.com/resources/html/contract.html</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:中国联通号码认证SDK</b>
+		</p>
+		<p class="p">
+			合作方:中国联通
+		</p>
+		<p class="p">
+			合作方类型:免密号码友盟合作方
+		</p>
+		<p class="p">
+			合作目的:提供移动端设备联通手机号免密号码验证服务
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传个人信息、设备信息
+		</p>
+		<p class="p">
+			个人信息收集范围:当前手机号的掩码
+		</p>
+		<p class="p">
+			隐私政策:<a
+				href="https://saas.wostore.cn/solution.html?param=1&amp;num=3"><u>https://saas.wostore.cn/solution.html?param=1&amp;num=3</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:中国电信号码认证SDK</b>
+		</p>
+		<p class="p">
+			合作方:中国电信
+		</p>
+		<p class="p">
+			合作方类型:免密号码友盟合作方
+		</p>
+		<p class="p">
+			合作目的:提供移动端设备电信手机号免密号码验证服务
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传个人信息、设备信息
+		</p>
+		<p class="p">
+			个人信息收集范围:当前手机号的掩码
+		</p>
+		<p class="p">
+			隐私政策:<a
+				href="https://e.189.cn/sdk/agreement/content.do?type=main&amp;appKey=&amp;hidetop=true&amp;returnUrl="><u>https://e.189.cn/sdk/agreement/content.do?type=main&amp;appKey=&amp;hidetop=true&amp;returnUrl=</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK 名称:腾讯互联SDK</b>
+		</p>
+		<p class="p">
+			合作方:腾讯科技(深圳)有限公司
+		</p>
+		<p class="p">
+			<span>合作目的:</span>QQ分享
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传个人信息、设备信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:查看</span>WLAN连接;粗略定位;精确定位;读取外置存储卡;读取手机状态身份;写入外置存储卡;后台访问地理位置
+		</p>
+		<p class="p">
+			隐私政策:<a
+				href="https://wiki.connect.qq.com/qq%E4%BA%92%E8%81%94sdk%E9%9A%90%E7%A7%81%E4%BF%9D%E6%8A%A4%E5%A3%B0%E6%98%8E"><u>https://wiki.connect.qq.com/qq互联sdk隐私保护声明</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<span>腾讯</span>Bugly SDK:为了向用户提供性能更稳定的服务,本应用集成了腾讯Bugly SDK,用于监测软件异常崩溃情况,腾讯Bugly
+			SDK需要收集的相关设备信息主要包括:日志信息(包括:第三方开发者自定义日志、Logcat 日志以及APP
+			崩溃堆栈信息)、设备品牌型号、“获取运行中进程信息”等。以便快速发现使用过程中出现的问题,并根据相关信息快速定位和解决问题,便于APP及时优化。https://privacy.qq.com/document/preview/fc748b3d96224fdb825ea79e132c1a56
+		</p>
+		<p class="p">
+			&nbsp;腾讯x5浏览器sdk是内核,腾讯浏览服务,依<span>托</span><span>X5内核强大的能力,
+				致租前力于提供优化移动端浏览体验的整套解决方案。腾讯浏览服务SDK有最新版本发布,腾讯浏览服务是致力于优化移动端webview体验的庆拍整套解决方案。该方案由SDK、手机QQ浏览器X5内核和X5云端服务组成,解决移动端webview使用过程中出现的一切问题,优化用户的浏览体验。同时,腾讯还将持续提供后续的更新和优化,为开发者提供弊差清最新最优秀的功能和服务。其中,SDK是通过共享使用用户手机上微信、手机QQ、空间等软件已经下载好的X5内核,低成本实现对系统webview的替代。该SDK大小只有200+K,接入时仅需修改几行代码。</span>
+		</p>
+		<p class="p">
+			<b>SDK 名称:微信openSDK</b>
+		</p>
+		<p class="p">
+			合作方:腾讯科技(深圳)有限公司
+		</p>
+		<p class="p">
+			<span>合作目的:提供微信</span>APP第三方登录分享服务和第三方支付服务
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传输个人信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:设备</span>MAC地址、唯一设备标识码、位置信息、应用列表
+		</p>
+		<p class="p">
+			隐私政策:<a
+				href="https://open.weixin.qq.com/cgi-bin/frame?t=news/protocol_developer_tmpl"><u>https://open.weixin.qq.com/cgi-bin/frame?t=news/protocol_developer_tmpl</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK 名称:支付宝SDK</b>
+		</p>
+		<p class="p">
+			合作方:蚂蚁金服网络技术有限公司
+		</p>
+		<p class="p">
+			<span>合作目的:使用支付宝授权在</span>app内进行商品支付
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传个人信息、设备信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:系统运营信息、网络状态信息、</span>iOS广告标识符(IDFA)、MAC地址、国际移动设备识别码(IMEI)、匿名设备标识符(OAID)、国际移动用户识别码(IMSI)、应用列表信息、基站信息、社交平台OpenID、地理位置
+		</p>
+		<p class="p">
+			隐私政策:<a href="https://opendocs.alipay.com/apis/01g6qm"><u>https://opendocs.alipay.com/apis/01g6qm</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK 名称:高德地图定位SDK</b>
+		</p>
+		<p class="p">
+			合作方:高德软件有限公司
+		</p>
+		<p class="p">
+			合作目的:加油站导航服务,支持美团外卖优惠的定位服务
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传个人信息、设备信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:查看</span>WLAN连接;粗略定位;精确定位;读取外置存储卡;读取手机状态身份;写入外置存储卡;后台访问地理位置
+		</p>
+		<p class="p">
+			隐私政策:<a
+				href="https://lbs.amap.com/home/agreement/data-security"><u>https://lbs.amap.com/home/agreement/data-security</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:美洽SDK</b>
+		</p>
+		<p class="p">
+			合作方:成都美洽网络科技有限公司
+		</p>
+		<p class="p">
+			<span>合作目的:美洽科技可能会将以上信息进行关联,以便能在不同设备上为用户提供一致的服务。进行</span>app内部的在线沟通
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传个人信息、设备信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:</span>SDK收集数据的类型:采集常用设备信息(如IMEI/IMSI、SIM卡序列号/MAC地址、android_id)、网络信息以及地理位置信息,用于用户登录账户和支付过程中的安全风控
+		</p>
+		<p class="p">
+			隐私政策:<a href="https://meiqia.com/privacy-clause"><u>https://meiqia.com/privacy-clause</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:</b>com.geetest(极验;无感本机认证)SDK
+		</p>
+		<p class="p">
+			<span>合作方:武汉极意网络科技有限公司</span>
+		</p>
+		<p class="p">
+			<span>合作目的:获取您的极验账号</span>
+		</p>
+		<p class="p">
+			<span>运用极验安全矩阵,协助您解决复杂多变的安全形势</span>
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:</span>
+		</p>
+		<p class="p">
+			<span>极验短信服务提供短信验证码、通知短信和营销推广短信服务,三网合一、秒级送达,助力企业高效触达手机用户</span>
+		</p>
+		<p class="p">
+			<a href="http://www.geetest.com/register"><span>注册开通</span></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:</span>&nbsp;SDK&nbsp;提供给集成 Android 原生客户端开发的开发者使用。 DeepKonw 为极验业务安全服务的基础感知构件,主要用于采集客户端的相关安全信息
+		</p>
+		<p class="p">
+			.隐私政策:https://www.geetest.com/Private
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>&nbsp;</b>
+		</p>
+		<p class="p">
+			http://www.geetest.com/
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:腾讯x5浏览器内核 &nbsp;</b>
+		</p>
+		<p class="p">
+			<span>合作方:深圳市腾讯计算机系统有限公司</span>&nbsp;&nbsp;
+		</p>
+		<p class="p">
+			合作目的:移动浏览场景体验优化
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传个人信息、设备信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:常用设备信息(如</span>IMEI/IMSI、SIM卡序列号/MAC地址、android_id)、设备制造商、网络类型、网络状态、手机操作系统、屏幕尺寸、ip地址
+		</p>
+		<p class="p">
+			隐私政策:<a
+				href="file://C:/Users/Administrator/Documents/WeChat%20Files/wxid_l76xaqhs7t5612/FileStorage/File/2024-01/%E9%9A%90%E7%A7%81%E6%94%BF%E7%AD%96(1).doc#5"><u>https://x5.tencent.com/tbs/guide/develop.html#5</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:Zxing 二维码扫描 SDK</b>
+		</p>
+		<p class="p">
+			合作方:开源个人开发者
+		</p>
+		<p class="p">
+			<span>合作目的:在用户授权</span>APP使用相机和相册的使用权限条件下,提供二维码识别功能和二维码生成功能
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK
+		</p>
+		<p class="p">
+			个人信息收集范围:不收集个人信息
+		</p>
+		<p class="p">
+			隐私政策:个人开发者没有隐私协议
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:统一SDK</b>
+		</p>
+		<p class="p">
+			合作方:移动安全联盟
+		</p>
+		<p class="p">
+			合作目的:获取设备唯一标识符
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:</span>UDID、OAID、VAID、AAID
+		</p>
+		<p class="p">
+			隐私协议:<a href="http://msa-alliance.cn/col.jsp?id=120"><u>http://msa-alliance.cn/col.jsp?id=120</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:京东联盟SDK</b>
+		</p>
+		<p class="p">
+			合作方:北京京东叁佰陆度电子商务有限公司
+		</p>
+		<p class="p">
+			合作方类型:社交服务合作方、京东数据提供方
+		</p>
+		<p class="p">
+			<span>合作目的:提供丰富的</span>SDK组件和京东商品数据API接口
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传输个人信息,对接第三方接口,接口传输个人信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:常用设备信息(如</span>IMEI/IMSI、SIM卡序列号/MAC地址、android_id)、位置信息、应用列表
+		</p>
+		<p class="p">
+			隐私政策:<a
+				href="https://kepler.jd.com/console/docCenterCatalog/docContent?channelId=55"><u>https://kepler.jd.com/console/docCenterCatalog/docContent?channelId=55</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:MobTech PushSDK</b>
+		</p>
+		<p class="p">
+			合作方:上海游昆信息技术有限公司
+		</p>
+		<p class="p">
+			合作目的:为了实现消息功能
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传输个人信息,对接第三方接口,接口传输个人信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:系统运营信息、网络状态信息、</span>iOS广告标识符(IDFA)、MAC地址、国际移动设备识别码(IMEI)、匿名设备标识符(OAID)、国际移动用户识别码(IMSI)、应用列表信息、基站信息、社交平台OpenID
+			、地理位置
+		</p>
+		<p class="p">
+			隐私政策:<a href="https://www.mob.com/about/policy"><u>https://www.mob.com/about/policy</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:MobTech MobLinkSDK</b>
+		</p>
+		<p class="p">
+			合作方:上海游昆信息技术有限公司
+		</p>
+		<p class="p">
+			合作目的:为了提供场景还原功能
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传输个人信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:系统运营信息、网络状态信息、</span>MAC地址、国际移动设备识别码(IMEI)、匿名设备标识符(OAID)、国际移动用户识别码(IMSI)、应用列表信息、基站信息、社交平台OpenID
+			、地理位置
+		</p>
+		<p class="p">
+			隐私政策:<a href="https://www.mob.com/about/policy"><u>https://www.mob.com/about/policy</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:小满游戏SDK</b>
+		</p>
+		<p class="p">
+			合作方:杭州小满科技信息有限公司
+		</p>
+		<p class="p">
+			<span>合作方类型</span>:效果广告服务合作方
+		</p>
+		<p class="p">
+			合作目的:提供商业化效果广告投放资源
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传输个人信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:设备</span>MAC地址、唯一设备标识码、位置信息
+		</p>
+		<p class="p">
+			隐私政策:<a
+				href="file://C:/Users/Administrator/Documents/WeChat%20Files/wxid_l76xaqhs7t5612/FileStorage/File/2024-01/%E9%9A%90%E7%A7%81%E6%94%BF%E7%AD%96(1).doc#/cooperation"><u>https://www.hixiaoman.com/#/cooperation</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:百度地图SDK</b>
+		</p>
+		<p class="p">
+			合作方:百度在线网络技术(北京)有限公司
+		</p>
+		<p class="p">
+			合作方类型:定位位置服务合作方
+		</p>
+		<p class="p">
+			合作目的:提供用户位置服务,帮助用户在发布信息时定位位置
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传输个人信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:设备</span>MAC地址、唯一设备标识码、位置信息、Wi-Fi地址
+		</p>
+		<p class="p">
+			隐私政策:<a
+				href="http://lbsyun.baidu.com/indoor/indoormap/agree"><u>http://lbsyun.baidu.com/indoor/indoormap/agree</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:阿里百川SDK</b>
+		</p>
+		<p class="p">
+			合作方:阿里巴巴(中国)网络技术有限公司
+		</p>
+		<p class="p">
+			合作方类型:社交服务合作方、淘宝数据提供方
+		</p>
+		<p class="p">
+			<span>合作目的:提供淘宝授权服务;提供丰富的</span>SDK组件和淘宝商品数据API接口
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传输个人信,对接第三方接口,接口传输个人信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:设备型号、操作系统版本、设备设置、</span>MAC地址及IMEI、IDFA、OAID等设备标识符、设备环境、移动应用列表等软硬件特征信息)、设备所在位置相关信息(包括您授权的GPS位置以及WLAN接入点、蓝牙和基站等传感器信息)。
+		</p>
+		<p class="p">
+			隐私政策:<a
+				href="https://baichuan.taobao.com/xieyi.htm?spm=0.0.0.0"><u>https://baichuan.taobao.com/xieyi.htm?spm=0.0.0.0</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:小米手机通道SDK</b>
+		</p>
+		<p class="p">
+			合作方:小米科技有限责任公司
+		</p>
+		<p class="p">
+			合作方类型:消息服务合作方
+		</p>
+		<p class="p">
+			合作目的:提供小米设备消息服务
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传输个人信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:设备</span>MAC地址、唯一设备标识码、位置信息、应用列表
+		</p>
+		<p class="p">
+			隐私政策:<a
+				href="https://dev.mi.com/console/doc/detail?pId=1698"><u>https://dev.mi.com/console/doc/detail?pId=1698</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:魅族手机通道SDK</b>
+		</p>
+		<p class="p">
+			合作方:珠海市魅族科技有限公司
+		</p>
+		<p class="p">
+			合作方类型:消息服务合作方
+		</p>
+		<p class="p">
+			合作目的:提供魅族设备消息服务
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传输个人信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:设备</span>MAC地址、唯一设备标识码、位置信息、应用列表
+		</p>
+		<p class="p">
+			隐私政策:<a
+				href="http://open-wiki.flyme.cn/index.php?title=%E5%BC%80%E5%8F%91%E8%80%85%E5%8D%8F%E8%AE%AE"><u>http://open-wiki.flyme.cn/index.php?title=%E5%BC%80%E5%8F%91%E8%80%85%E5%8D%8F%E8%AE%AE</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:OPPO手机通道SDK</b>
+		</p>
+		<p class="p">
+			合作方:广东步步高电子工业有限公司
+		</p>
+		<p class="p">
+			合作方类型:消息服务合作方
+		</p>
+		<p class="p">
+			<span>合作目的:提供</span>OPPO设备消息服务
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传输个人信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:设备</span>MAC地址、唯一设备标识码、位置信息、应用列表
+		</p>
+		<p class="p">
+			隐私政策:<a
+				href="file://C:/Users/Administrator/Documents/WeChat%20Files/wxid_l76xaqhs7t5612/FileStorage/File/2024-01/%E9%9A%90%E7%A7%81%E6%94%BF%E7%AD%96(1).doc#id=10194"><u>https://open.oppomobile.com/wiki/doc#id=10194</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:vivo手机通道SDK</b>
+		</p>
+		<p class="p">
+			合作方:维沃移动通信有限公司
+		</p>
+		<p class="p">
+			合作方类型:消息服务合作方
+		</p>
+		<p class="p">
+			<span>合作目的:提供</span>vivo设备消息服务
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传输个人信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:设备</span>MAC地址、唯一设备标识码、位置信息、应用列表
+		</p>
+		<p class="p">
+			隐私政策:<a
+				href="file://C:/Users/Administrator/Documents/WeChat%20Files/wxid_l76xaqhs7t5612/FileStorage/File/2024-01/%E9%9A%90%E7%A7%81%E6%94%BF%E7%AD%96(1).doc#w1-08512613"><u>https://dev.vivo.com.cn/documentCenter/doc/366#w1-08512613</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:华为、荣耀手机通道SDK</b>
+		</p>
+		<p class="p">
+			合作方:华为技术有限公司
+		</p>
+		<p class="p">
+			合作方类型:消息服务合作方
+		</p>
+		<p class="p">
+			合作目的:提供华为、荣耀设备消息服务
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传输个人信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:设备</span>MAC地址、唯一设备标识码、位置信息、应用列表
+		</p>
+		<p class="p">
+			隐私政策:<a
+				href="https://consumer.huawei.com/cn/privacy/privacy-policy"><u>https://consumer.huawei.com/cn/privacy/privacy-policy</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:Exoplayer 视频播放SDK</b>
+		</p>
+		<p class="p">
+			合作方:开源项目
+		</p>
+		<p class="p">
+			合作方类型:视频播放
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK
+		</p>
+		<p class="p">
+			个人信息收集范围:不收集个人信息
+		</p>
+		<p class="p">
+			项目地址:<a href="https://github.com/google/ExoPlayer/"><u>https://github.com/google/ExoPlayer/</u></a>
+		</p>
+		<p class="p">
+			隐私政策:开源项目没有隐私协议
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:Gson SDK</b>
+		</p>
+		<p class="p">
+			合作方:开源项目
+		</p>
+		<p class="p">
+			合作方类型:数据解析
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK
+		</p>
+		<p class="p">
+			个人信息收集范围:不收集个人信息
+		</p>
+		<p class="p">
+			项目地址:<a href="https://github.com/google/gson/"><u>https://github.com/google/gson/</u></a>
+		</p>
+		<p class="p">
+			隐私政策:开源项目没有隐私协议
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:谷歌广告SDK</b>
+		</p>
+		<p class="p">
+			<span>合作方:</span>Google
+		</p>
+		<p class="p">
+			合作方类型:广告
+		</p>
+		<p class="p">
+			<span>合作目的:用于</span>&nbsp;帮助库检索广告 ID 和相关信息
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传输个人信,对接第三方接口,接口传输个人信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:广告</span>id
+		</p>
+		<p class="p">
+			隐私政策:<a href="https://policies.google.com/privacy"><u>https://policies.google.com/privacy/</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:OkHttp 网络请求SDK</b>
+		</p>
+		<p class="p">
+			合作方:开源
+		</p>
+		<p class="p">
+			合作目的:提供网络请求服务
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:</span>ip
+		</p>
+		<p class="p">
+			隐私政策:无
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:广点通SDK</b><b>&nbsp;</b><span>腾讯广告</span>]<span>SDK &nbsp;</span>
+		</p>
+		<p class="p">
+			所属公司名称:腾讯科技有限公司
+		</p>
+		<p class="p">
+			SDK 收集数据的类型:查看WLAN连接;粗略定位;精确定位;读取外置存储卡;读取手机状态身份;写入外置存储卡;检索正在运行的应用;后台访问地理位置
+		</p>
+		<p class="p">
+			用途:广告业务
+		</p>
+		<p class="p">
+			隐私政策:<a
+				href="https://wiki.open.qq.com/index.php?title=%E8%85%BE%E8%AE%AF%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0%E5%BC%80%E5%8F%91%E8%80%85%E5%8D%8F%E8%AE%AE"><u>https://wiki.open.qq.com/index.php?title=腾讯开放平台开发者协议</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:穿山甲SDK</b>
+		</p>
+		<p class="p">
+			所属公司名称:北京巨量引擎网络技术有限公司
+		</p>
+		<p class="p">
+			合作目的:提供商业化效果广告投放资源
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传输个人信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:设备</span>MAC地址、唯一设备标识码、位置信息
+		</p>
+		<p class="p">
+			隐私政策:<a href="https://www.pangle.cn/"><u>https://www.pangle.cn</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:快手联盟SDK</b>
+		</p>
+		<p class="p">
+			所属公司名称:北京华艺汇龙网络科技有限公司
+		</p>
+		<p class="p">
+			合作目的:提供商业化效果广告投放资源
+		</p>
+		<p class="p">
+			合作方类型:效果广告服务合作方
+		</p>
+		<p class="p">
+			<span>个人信息收集方式:嵌入第三方</span>SDK,SDK收集传输个人信息
+		</p>
+		<p class="p">
+			<span>个人信息收集范围:设备信息</span>(包括设备型号、操作系统版本、设备设置、唯一设备标识符、网络设备硬件地址MAC等软硬件特征信息),设备所在位置相关信息(包括IP地址、GPS位置以及能够提供相关信息的WLAN接入点)
+		</p>
+		<p class="p">
+			隐私政策:<a
+				href="https://www.kuaishou.com/about/policy?tab=privacy"><u>https://www.kuaishou.com/about/policy?tab=privacy</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:uni小程序sdk</b>
+		</p>
+		<p class="p">
+			<span>所属公司:数字天堂</span>(北京)网络技术有限公司
+		</p>
+		<p class="p">
+			SDK收集数据的类型:查看WLAN链接
+		</p>
+		<p class="p">
+			<span>用途:</span>App里面对接小程序,直接拉起打开小程序
+		</p>
+		<p class="p">
+			<span>隐私政策链接:</span>&nbsp;<a
+				href="https://ask.dcloud.net.cn/article/35623"><u>https://ask.dcloud.net.cn/article/35623</u></a>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<b>SDK简称:极光sdk</b>
+		</p>
+		<p class="p">
+			所属公司:深圳市和讯华谷信息技术有限公司
+		</p>
+		<p class="p">
+			SDK收集数据的类型:收集用户个人信息
+		</p>
+		<p class="p">
+			用途:收集、使用、存储、共享、转让您和/或您的终端用户的个人信息的目的、方式、范围和信息安全保护措施
+		</p>
+		<p class="p">
+			<span>隐私政策链接:</span>&nbsp;https://www.jiguang.cn/license/privacy
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="MsoNormal">
+			SDK名称:腾讯浏览服务
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.tencent.tbs
+		</p>
+		<p class="MsoNormal">
+			SDK厂家
+		</p>
+		<p class="MsoNormal">
+			<br>
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:深圳市腾讯计算机系统有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK类型:框架-浏览器内核
+		</p>
+		<p class="MsoNormal">
+			SDK描述腾讯浏览服务(TBS,Tencent Browsing
+			Service)整合腾讯底层浏览技术和腾讯平台资源及能力,提供整体浏览服务解决方案。腾讯浏览服务面向应用开发商和广大开发者,提供浏览增强,内容框架,广告体系,H5游戏分发,大数据等服务,能够帮助应用开发商大幅改善应用体验,有效提升开发,运营,商业化的效率。
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>https://x5.tencent.com/tbs/sdk.html
+		</p>
+		<p class="p">
+			<br>
+		</p>
+		<p class="MsoNormal">
+			SDK名称:腾讯Hippy
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.tencent.mtt
+		</p>
+		<p class="MsoNormal">
+			<br>
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:深圳市腾讯计算机系统有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK类型:框架-开发工具
+		</p>
+		<p class="MsoNormal">
+			SDK描述:Hippy 是一个新生的跨端开发框架,目标是使开发者可以只写一套代码就直接运行于多个平台(iOS、Android 和 Web等)。Hippy 的设计是面向传统 Web 开发者的,特别是之前有过 React
+			和 Vue 开发经验的开发者用起来会更为顺手,Hippy 致力于让前端开发跨端 App 更加容易。
+		</p>
+		<p class="MsoNormal">
+			官方网站:<a
+				href="file://C:/Users/Administrator/Documents/WeChat%20Files/wxid_l76xaqhs7t5612/FileStorage/File/2024-01/%E9%9A%90%E7%A7%81%E6%94%BF%E7%AD%96(1).doc#/"><u>https://hippyjs.org/#/</u></a>
+		</p>
+		<p class="MsoNormal">
+			<br>
+		</p>
+		<p class="MsoNormal">
+			SDK名称:uinMPsdk
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>io.dcloud
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:DCloud 数字天堂(北京)网络技术有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK类型:框架-开发工具
+		</p>
+		<p class="MsoNormal">
+			SDK描述:uni小程序SDK,是为原生App打造的可运行基于 uni-app 开发的小程序前端项目的框架,从而帮助原生App快速获取小程序的能力
+		</p>
+		<p class="MsoNormal">
+			官方网站:<a href="https://nativesupport.dcloud.net.cn/"><u>https://nativesupport.dcloud.net.cn/</u></a>
+		</p>
+		<p class="MsoNormal">
+			<br>
+		</p>
+		<p class="MsoNormal">
+			SDK名称:巨量引擎数据上报
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.bytedance
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:北京巨量引擎网络技术有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK类型:统计分析
+		</p>
+		<p class="MsoNormal">
+			SDK描述:SDK目前采用event、params的方式收集客户端日志,和后端数据分析平台(数说)打通,具有统计日活、使用时长、留存行为分析等方面的能力。接入我方的SDK必须上报的数据有:激活、游戏时长、注册、支付等。上报的事件越多,定位人群越准确,越有利于投放。
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>https://ad.oceanengine.com/openapi/doc/index.html?id=570
+		</p>
+		<p class="MsoNormal">
+			<br>
+		</p>
+		<p class="MsoNormal">
+			SDK名称:glide
+		</p>
+		<p class="MsoNormal">
+			<span>包名</span>:com.bumptech
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:bumptech_个人
+		</p>
+		<p class="MsoNormal">
+			SDK类型:基础功能-UI
+		</p>
+		<p class="MsoNormal">
+			SDK描述:Glide是一个快速高效的Android图片加载库,注重于平滑的滚动
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站</span>:https://github.com/bumptech/glide/releases
+		</p>
+		<p class="MsoNormal">
+			SDK名称:xUtils3
+		</p>
+		<p class="MsoNormal">
+			<span>包名</span>:org.xutils
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:wyouflf
+		</p>
+		<p class="MsoNormal">
+			SDK类型:基础功能-图像处理
+		</p>
+		<p class="MsoNormal">
+			SDK描述:Android Orm,位图,http,视图注入
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站</span>:https://github.com/wyouflf/xUtils3
+		</p>
+		<p class="MsoNormal">
+			SDK名称:SoLoader
+		</p>
+		<p class="MsoNormal">
+			<span>包名</span>:com.facebook.soloader
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:facebook
+		</p>
+		<p class="MsoNormal">
+			SDK类型:基础功能-数据解析
+		</p>
+		<p class="MsoNormal">
+			SDK描述:适用于Android的本机代码加载器
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站</span>:https://github.com/facebook/SoLoader
+		</p>
+		<p class="MsoNormal">
+			SDK名称:yanxuan-weex-demo
+		</p>
+		<p class="MsoNormal">
+			<span>包名</span>:com.taobao.weex
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:zwwill
+		</p>
+		<p class="MsoNormal">
+			SDK类型:社交分享
+		</p>
+		<p class="MsoNormal">
+			SDK描述:High quality pure Weex demo / 网易严选 App
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站</span>:https://github.com/zwwill/yanxuan-weex-demo
+		</p>
+		<p class="MsoNormal">
+			SDK名称:腾讯Bugly
+		</p>
+		<p class="MsoNormal">
+			<span>包名</span>:com.tencent.bugly
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:深圳市腾讯计算机系统有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK类型:APP异常、性能分析
+		</p>
+		<p class="MsoNormal">
+			SDK描述:腾讯bugly统计分析SDK,为移动开发者提供专业的异常上报和运营统计,帮助开发者快速发现并解决异常,同时掌握产品运营动态,及时跟进用户反馈。
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>https://bugly.qq.com/v2/index
+		</p>
+		<p class="MsoNormal">
+			SDK名称:AndroidChromium
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>org.chromium
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:JackyAndroid
+		</p>
+		<p class="MsoNormal">
+			SDK类型:基础功能-网络服务
+		</p>
+		<p class="MsoNormal">
+			SDK描述:chrome开放项目中的android版本的chrome浏览器
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>https://github.com/JackyAndroid/AndroidChromium
+		</p>
+		<p class="MsoNormal">
+			SDK名称:danikula
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.danikula
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:DANIKULA
+		</p>
+		<p class="MsoNormal">
+			SDK类型:音视频
+		</p>
+		<p class="MsoNormal">
+			SDK描述:Cache support for any video player with help of single line
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>http://danikula.com/
+		</p>
+		<p class="MsoNormal">
+			SDK名称:oaid-sdk
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.bun
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:移动安全联盟
+		</p>
+		<p class="MsoNormal">
+			SDK类型:安全风控
+		</p>
+		<p class="MsoNormal">
+			SDK描述:获取android系统的oaid当前最新的msa_mdid_1.0.13
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>http://www.msa-alliance.cn/
+		</p>
+		<p class="MsoNormal">
+			SDK名称:高德地图sdk
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.autonavi.extra
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:高德软件有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK类型:地图位置服务
+		</p>
+		<p class="MsoNormal">
+			SDK描述:高德开放平台提供2D、3D、卫星多种地图形式供开发者选择,无论基于哪种平台,都可以通过高德开放平台提供的API和SDK,轻松的完成地图的构建工作
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>https://lbs.amap.com/
+		</p>
+		<p class="MsoNormal">
+			SDK名称:AutoNaviMapView-Base
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.autonavi.base
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:dingping1010
+		</p>
+		<p class="MsoNormal">
+			SDK类型:地图位置服务
+		</p>
+		<p class="MsoNormal">
+			SDK描述:高德地图的基础运用
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>https://github.com/dingping1010/AutoNaviMapView-Base
+		</p>
+		<p class="MsoNormal">
+			SDK名称:高德定位SDK
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.autonavi.amap
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:高德软件有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK类型:地图位置服务
+		</p>
+		<p class="MsoNormal">
+			SDK描述:100059
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>https://lbs.amap.com/api/android-sdk/summary/
+		</p>
+		<p class="MsoNormal">
+			SDK名称:移动安全联盟SDK
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.asus
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:中国信息通信研究院
+		</p>
+		<p class="MsoNormal">
+			SDK类型:安全风控
+		</p>
+		<p class="MsoNormal">
+			SDK描述:移动安全联盟(Mobile Security
+			Alliance,简称MSA)于2017年12月4日成立,由中国信息通信研究院联合终端生产企业、安全企业、高等院校、研究机构、互联网企业以及芯片企业、方案企业等产业链中各个环节的重要机构共同发起。
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>http://msa-alliance.cn/
+		</p>
+		<p class="MsoNormal">
+			SDK名称:支付宝支付
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.alipay.security
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:蚂蚁金融服务集团
+		</p>
+		<p class="MsoNormal">
+			SDK类型:支付
+		</p>
+		<p class="MsoNormal">
+			SDK描述:iOS、Android应用嵌入APP支付SDK,用户支付时唤起支付宝完成支付。
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>https://docs.open.alipay.com/204/105051/
+		</p>
+		<p class="MsoNormal">
+			SDK名称:deviceidservice
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.samsung.android
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:samsung
+		</p>
+		<p class="MsoNormal">
+			SDK类型:安全风控
+		</p>
+		<p class="MsoNormal">
+			SDK描述:samsung--一个简单的库,提供生成“设备ID”的功能,可用于唯一标识计算机
+		</p>
+		<p class="MsoNormal">
+			官方网站
+		</p>
+		<p class="MsoNormal">
+			SDK名称:优量汇
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.qq.e
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:深圳市腾讯计算机系统有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK类型:广告
+		</p>
+		<p class="MsoNormal">
+			SDK描述:为移动开发者提供增长和变现一体化的商业解决方案
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>https://e.qq.com/dev/index.html
+		</p>
+		<p class="MsoNormal">
+			SDK名称:腾讯企业收付平台&nbsp;CPDP
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.pay
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:深圳市腾讯计算机系统有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK类型:支付
+		</p>
+		<p class="MsoNormal">
+			SDK描述:企业收付平台(企业钱包)联合多家合作银行,提供收单渠道、伞型账簿及跨行清结算等金融服务能力,结合腾讯自身计费优势,提供全套基于合作银行的企业钱包服务,满足聚合收单、智慧分账、薪金发放、对账清算等场景需求。&nbsp;企业收付平台发布全新产品——微记云,为灵活用工行业的平台、服务商及灵活就业者提供一站式解决方案,提供客户管理、签约管理、结算管理、发票管理、完税凭证、记账管理等一系列技术服务,即插即用,降本增效。
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>https://cloud.tencent.com/product/midas
+		</p>
+		<p class="MsoNormal">
+			SDK名称:网易云捕
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.netease.nis
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:网易(杭州)网络有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK类型:APP异常、性能分析
+		</p>
+		<p class="MsoNormal">
+			SDK描述:关注APP质量,影响用户APP质量问题,一网打尽;面向移动开发者提供专业的崩溃监控、崩溃卡顿分析等质量跟踪服务
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>http://crash.163.com/#dumply/downloadSDK
+		</p>
+		<p class="MsoNormal">
+			SDK名称:魅族集成SDK
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.meizu
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:珠海市魅族通讯设备有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK描述:全安卓消息、一次集成所有厂商&nbsp;pushsdk集成服务通过对各厂商的接口进行统一封装,加上自有的长连接服务,实现一次集成,全安卓消息。
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>http://open-wiki.flyme.cn/doc-wiki/index#id?58
+		</p>
+		<p class="MsoNormal">
+			SDK名称:KOOM
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.kwai
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:KwaiAppTeam
+		</p>
+		<p class="MsoNormal">
+			SDK类型:APP异常、性能分析
+		</p>
+		<p class="MsoNormal">
+			SDK描述:KOOM创建了一个移动高性能在线内存监视解决方案,该解决方案在检测到OOM相关问题时提供详细的报告,并解决了Kwai应用程序中的大量OOM问题
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>https://github.com/KwaiAppTeam/KOOM
+		</p>
+		<p class="MsoNormal">
+			SDK名称:融云&nbsp;SDK
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>io.rong
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:北京云中融信网络科技有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK类型:音视频
+		</p>
+		<p class="MsoNormal">
+			SDK描述:融云提供稳定的实时音视频通信能力,支持二人、多人音视频、千人会议、会议控制、多方实时互动白板和高清屏幕共享、美颜等功能&nbsp;满足多方异地实时在线交流需求,适用于各种实时音视频场景
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>https://docs.rongcloud.cn/rtc/callkit/android/introduction/
+		</p>
+		<p class="MsoNormal">
+			SDK名称:MobiPerf
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>mobi
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:Mobiperf
+		</p>
+		<p class="MsoNormal">
+			SDK类型:APP异常、性能分析
+		</p>
+		<p class="MsoNormal">
+			SDK描述:这是一个开发用于收集&nbsp;移动网络测量结果的移动应用程序和服务的项目
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>https://github.com/Mobiperf/MobiPerf
+		</p>
+		<p class="MsoNormal">
+			SDK名称:bilibili/ijkplayer
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>tv
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:bilibili
+		</p>
+		<p class="MsoNormal">
+			SDK类型:音视频
+		</p>
+		<p class="MsoNormal">
+			SDK描述:bilibili/ijkplayer, Android video player based on FFmpeg n3.4, with MediaCodec, VideoToolbox support.
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>https://github.com/bilibili/ijkplayer
+		</p>
+		<p class="MsoNormal">
+			SDK名称:微博API
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.weibo
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:北京新浪互联信息服务有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK类型:社交分享
+		</p>
+		<p class="MsoNormal">
+			SDK描述:微博开放平台为移动应用开发者提供了简便的开发框架,多平台、多终端的SDK,将帮助你将微博的功能集成在你的应用或WAP站中
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>https://open.weibo.com/wiki/%E9%A6%96%E9%A1%B5
+		</p>
+		<p class="MsoNormal">
+			SDK名称:腾讯开放平台SDK
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.tencent.connect
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:深圳市腾讯计算机系统有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK类型:登录认证
+		</p>
+		<p class="MsoNormal">
+			SDK描述:腾讯开放平台sdk包,辅助开发者快速接入QQ登录、支付、社交渠道等功能。
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>https://wikinew.open.qq.com/#/iwiki/864512506
+		</p>
+		<p class="MsoNormal">
+			SDK名称:移动分析
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.tencent.stat
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:深圳市腾讯计算机系统有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK类型:统计分析
+		</p>
+		<p class="MsoNormal">
+			keSDK厂家:深圳市腾讯计算机系统有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK类型:社交分享
+		</p>
+		<p class="MsoNormal">
+			SDK描述:接入微信开放平台,让你的移动应用支持微信分享、微信收藏和微信支付。
+		</p>
+		<p class="MsoNormal">
+			官方网站
+		</p>
+		<p class="MsoNormal">
+			https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/Android.html
+		</p>
+		<p class="MsoNormal">
+			SDK名称:阿里云数据分析&nbsp;com.aliyun(阿里云;阿里push;阿里的;mPaaS)<b></b>
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.ta.utdid2
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:阿里云计算有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK类型:统计分析
+		</p>
+		<p class="MsoNormal">
+			SDK描述:数据管理DMS数据分析功能可以实现一键创建实时同步的数据仓库,数据可在秒级的延迟下,同步至AnalyticDB
+			MySQL版数据库中,帮助您更实时、准确地掌握业务情况,以便更好地进行业务分析和决策,提升业务效果。本文介绍如何在数据管理DMS中使用数据分析功能。
+		</p>
+		<p class="MsoNormal">
+			官方网站
+		</p>
+		<p class="MsoNormal">
+			https://help.aliyun.com/document_detail/204932.html?spm=5176.21213303.J_6704733920.7.5ffe53c9kZSARd&amp;scm=20140722.S_help%40%40%E6%96%87%E6%A1%A3%40%40204932.S_0%2Bos0.ID_204932-RL_%E6%95%B0%E6%8D%AE%E5
+		</p>
+		<p class="MsoNormal">
+			SDK名称:新浪微博
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.sina.weibo
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:北京微梦创科网络技术有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK类型:社交分享
+		</p>
+		<p class="MsoNormal">
+			SDK描述:新浪微博平台SDK, 为第三方应用提供了简单易用的微博API调用服务,使第三方客户端无需了解复杂的验证机制即可进行授权登陆,并提供微博分享功能,可直接通过微博官方客户端分享微博。
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>https://open.weibo.com/wiki/SDK
+		</p>
+		<p class="MsoNormal">
+			SDK名称:jzvd
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>cn.jzvd
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:github
+		</p>
+		<p class="MsoNormal">
+			SDK类型:音视频
+		</p>
+		<p class="MsoNormal">
+			SDK描述:高度自定义的安卓视频框架继承JzvdStd实现自己的播放器
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>https://github.com/Jzvd/JZVideo
+		</p>
+		<p class="MsoNormal">
+			SDK名称:极光
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>cn.jpush
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:深圳市和讯华谷信息技术有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK描述:极光,快速集成,轻松提升用户粘性,为你的移动应用加油。
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>https://www.jiguang.cn/push
+		</p>
+		<p class="MsoNormal">
+			SDK名称:极光统计
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>cn.jiguang.analytics
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:深圳市和讯华谷信息技术有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK类型:统计分析
+		</p>
+		<p class="MsoNormal">
+			SDK描述:趋势图了解每天的数据变化,轻松定位数据凹点排名图多维度对比排名,了解用户的真正爱好数据详情详细的数据记录,帮您解决每一个疑惑
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>https://www.jiguang.cn/analytics
+		</p>
+		<p class="MsoNormal">
+			SDK名称:阿里云云安全中心
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.alipay.mobilesecuritysdk
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:阿里云计算有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK类型:安全风控
+		</p>
+		<p class="MsoNormal">
+			SDK描述:云安全中心是一个实时识别、分析、预警安全威胁的统一安全管理系统,通过防勒索、防病毒、防篡改、合规检查等安全能力,实现威胁检测、告警响应、攻击溯源的自动化安全运营闭环,保护您的云上资产和本地服务器安全,并满足监管合规要求。
+		</p>
+		<p class="MsoNormal">
+			官方网站
+		</p>
+		<p class="MsoNormal">
+			https://help.aliyun.com/product/28498.html?spm=5176.7946181.J_5253785160.5.652742c59NHV8b
+		</p>
+		<p class="MsoNormal">
+			SDK名称:科大讯飞语音SDK
+		</p>
+		<p class="MsoNormal">
+			<span>包名</span>:com.iflytek.cloud
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:安徽科大讯飞信息科技股份有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK类型:音视频
+		</p>
+		<p class="MsoNormal">
+			SDK描述:讯飞开放平台是科大讯飞旗下人工智能开放平台,全面开放业界领先的语音合成、语音识别、语音唤醒、人脸识别、麦克风阵列等10多项核心能力,支持“云+端”全环境应用,提供一站式人工智能解决方案。目前,讯飞开放平台主要应用场景包括:移动应用、智能家居、可穿戴设备、机器人等领域,同时已吸引QQ、高德、滴滴打车、新浪微博、优必选、暴风魔镜等在内15万多合作伙伴加盟,覆盖终端用户超过8亿。
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站</span>:https://www.xfyun.cn/
+		</p>
+		<p class="MsoNormal">
+			SDK名称:语音听写
+		</p>
+		<p class="MsoNormal">
+			<span>包名</span>:com.iflytek.msc
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:科大讯飞股份有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK类型:语音
+		</p>
+		<p class="MsoNormal">
+			SDK描述:语音听写流式接口,用于1分钟内的即时语音转文字技术,支持实时返回识别结果,达到一边上传音频一边获得识别文本的效果。
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站</span>:https://www.xfyun.cn/sdk/dispatcher
+		</p>
+		<p class="MsoNormal">
+			SDK名称:ShareLoginPay
+		</p>
+		<p class="MsoNormal">
+			<span>包名</span>:com.iflytek.thirdparty
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:BoBoMEe
+		</p>
+		<p class="MsoNormal">
+			SDK类型:登录认证
+		</p>
+		<p class="MsoNormal">
+			SDK描述:第三方登录,共享和支付库
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站</span>:https://github.com/BoBoMEe/ShareLoginPay
+		</p>
+		<p class="MsoNormal">
+			<br>
+		</p>
+		<p class="MsoNormal">
+			SDK名称:讯飞广告
+		</p>
+		<p class="MsoNormal">
+			<span>包名</span>:com.iflytek.voiceads
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:科大讯飞
+		</p>
+		<p class="MsoNormal">
+			SDK类型:广告
+		</p>
+		<p class="MsoNormal">
+			SDK描述:讯飞A.I.营销云,一站式营销自动化服务平台。
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站</span>:https://www.voiceads.cn/
+		</p>
+		<p class="MsoNormal">
+			<br>
+		</p>
+		<p class="MsoNormal">
+			SDK名称:华为HMS
+		</p>
+		<p class="MsoNormal">
+			<span>包名</span>:com.huawei
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:华为技术有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK描述:华为移动服务(Huawei Mobile Services,缩写HMS)是华为云服务开放能力的合集,开发者只需集成HMS SDK即可使用华为的多个开放能力,包括华为帐号、应用内支付、消息、好友关系等能力。
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站</span>https://developer.huawei.com/consumer/cn/doc/development/HMS-Library/account-preparation
+		</p>
+		<p class="MsoNormal">
+			<br>
+		</p>
+		<p class="MsoNormal">
+			SDK名称:OPPO PUSH 客户端SDK
+		</p>
+		<p class="MsoNormal">
+			<span>包名</span>:com.heytap
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:广东欧珀移动通信有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK描述:OPPO
+			PUSH是OPPO公司向开发者提供的消息服务,通过服务端端与OS端建立的一条稳定、可靠的长连接通道,向OPPO手机系统(ColorOS)上的App应用客户端实时消息的服务。通过消息服务,可有效的提升开发者应用的活跃和留存,改善产品体验。
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站</span>:https://push.oppo.com/
+		</p>
+		<p class="MsoNormal">
+			<br>
+		</p>
+		<p class="MsoNormal">
+			SDK名称:ThirdPartyLoginDemo
+		</p>
+		<p class="MsoNormal">
+			<span>包名</span>:com.google.thirdparty
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:MobClub
+		</p>
+		<p class="MsoNormal">
+			SDK类型:社交分享
+		</p>
+		<p class="MsoNormal">
+			SDK描述:ShareSDK是一种社会化分享组件,为iOS、Android、WP8 的APP提供社会化功能,集成了一些常用的类库和接口,缩短开发者的开发时间,还有社会化统计分析管理后台
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站</span>:https://github.com/MobClub/ThirdPartyLoginDemo
+		</p>
+		<p class="MsoNormal">
+			<br>
+		</p>
+		<p class="MsoNormal">
+			应用获取剪切板
+		</p>
+		<p class="MsoNormal">
+			[io.codeinstall.a.a.a(Unknown Source:24),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;io.codeinstall.a.a.c(Unknown Source:24),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;io.codeinstall.a.a.(Unknown Source:186),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;com.project.codeinstallsdk.CodeInstall.init(Unknown Source:35),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;com.rujiao.client.App.initAll(App.kt:183),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;com.rujiao.client.ui.activity.SplashActivity.initData$lambda-0(SplashActivity.kt:90),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;com.rujiao.client.ui.activity.SplashActivity.lambda$tIXw3XGRv9Knd3ZfcYqub4aIBxk(Unknown Source:0),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;com.rujiao.client.ui.activity.-$$Lambda$SplashActivity$tIXw3XGRv9Knd3ZfcYqub4aIBxk.onConfirm(Unknown
+			Source:2),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;com.rujiao.client.widget.MyDialog.showDialogYsxy$lambda-9(MyDialog.kt:322),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;com.rujiao.client.widget.MyDialog.lambda$0jtbFpy8YA4jU9D2Wx94dVG__U4(Unknown Source:0),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;com.rujiao.client.widget.-$$Lambda$MyDialog$0jtbFpy8YA4jU9D2Wx94dVG__U4.onClick(Unknown Source:4)
+		</p>
+		<p class="MsoNormal">
+			&nbsp;SDK名称:网易;网易IM;网易云信&nbsp;
+		</p>
+		<p class="MsoNormal">
+			<span>包名:</span>com.netease&nbsp;
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:用户在网易数帆社区进行知识和技术交流互动&nbsp;
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站:</span>http://gb.corp.163.com/gb/legal.html&nbsp;
+		</p>
+		<p class="MsoNormal">
+			<br>
+		</p>
+		<p class="MsoNormal">
+			&nbsp;SDK简称:七牛 SDK
+		</p>
+		<p class="MsoNormal">
+			所属公司:上海七牛信息技术有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK收集数据的类型:向第三方开发者和其终端用户说明我们如何处理个人信息
+		</p>
+		<p class="MsoNormal">
+			<span>用途:处理包括</span><span>“收集、存储、使用、加工、传输、提供、公开等”隐私政策链</span>
+		</p>
+		<p class="MsoNormal">
+			<span>隐私政策链接:</span>&nbsp;<a
+				href="https://www.jiguang.cn/license/privacy">https://www.jiguang.cn/license/privacy</a>
+		</p>
+		<h1 align="justify" style="text-align:justify;">
+			SDK简称:网易易盾;移动安全联盟;MSA
+		</h1>
+		<p class="MsoNormal">
+			所属公司:杭州网易智企科技有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK收集数据的类型:易易盾提供网易易盾sdk相关知识和产品介绍,帮助您理解关于网易易盾sdk的相关问题,更好更快速的解决问题
+		</p>
+		<p class="MsoNormal">
+			<br>
+		</p>
+		<p class="MsoNormal">
+			隐私政策链接:<span>https://dun.163.com/clause/privacy</span>
+		</p>
+		<p class="MsoNormal">
+			SDK名称:com.geetest(极验)
+		</p>
+		<p class="MsoNormal">
+			<br>
+		</p>
+		<p class="MsoNormal">
+			SDK厂家:武汉极意网络科技有限公司
+		</p>
+		<p class="MsoNormal">
+			SDK类型:短信验证
+		</p>
+		<p class="MsoNormal">
+			SDK描述:极验短信服务提供短信验证码、通知短信和营销推广短信服务,三网合一、秒级送达,助力企业高效触达手机用
+		</p>
+		<p class="MsoNormal">
+			<span>官方网站</span>:http://www.geetest.com/
+		</p>
+		<p class="MsoNormal">
+			隐私政策:<a href="http://www.geetest.com/Private"><u>http://www.geetest.com/Private</u></a>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">SDK</span><span style="color:#E53333;">简称:</span><span
+				style="color:#E53333;"><span>co</span></span><span style="color:#E53333;"><span
+					style="background-color:#FFFFFF;">m.getui</span>(</span><span style="color:#E53333;">个推</span><span
+				style="color:#E53333;">;</span><span style="color:#E53333;">个数应用统计</span><span
+				style="color:#E53333;">;</span><span style="color:#E53333;">个像</span><span style="color:#E53333;">),
+				com.g.gysdk(</span><span style="color:#E53333;">个推</span><span
+				style="color:#E53333;">)com.igexin.sdk(</span><span style="color:#E53333;">个推</span><span
+				style="color:#E53333;">;</span><span style="color:#E53333;">个推</span><span
+				style="color:#E53333;">1</span><span style="color:#E53333;">合作方: 每日互动股份有限公司</span><span
+				style="color:#E53333;">合作目的:提供消息</span><span style="color:#E53333;">1</span><span
+				style="color:#E53333;">解决方案</span><span style="color:#E53333;">个人信息收集方式:嵌入第三方</span><span
+				style="color:#E53333;">SDK</span><span style="color:#E53333;">,</span><span
+				style="color:#E53333;">SDK1</span><span style="color:#E53333;">传消息、设备信息</span><span
+				style="color:#E53333;">&nbsp;SDK</span><span style="color:#E53333;">简称:七牛 </span><span
+				style="color:#E53333;">SDK</span><span style="color:#E53333;">所属公司:上海七牛信息技术有限公司</span><span
+				style="color:#E53333;">SDK</span><span
+				style="color:#E53333;">收集数据的类型:向第三方开发者和其终端用户说明我们如何处理个人信息</span><span
+				style="color:#E53333;">用途:处理包括</span><span style="color:#E53333;">“</span><span
+				style="color:#E53333;">收集、存储、使用、加工、传输、提供、公开等</span><span style="color:#E53333;">”</span><span
+				style="color:#E53333;">隐私政策链</span><span style="color:#E53333;">隐私政策链接:</span><span
+				style="color:#E53333;">&nbsp;https://www.jiguang.cn/license/privacy</span><span
+				style="color:#E53333;">隐私政策:</span><span style="color:#E53333;">https://docs.getui.com/privacy/</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">包名:com.alipay.security</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">应用内集成的</span><span
+				style="color:#E53333;">[个推、个验、个像]SDK获取将获取“BSSID”“SN”个人信息行为以及使用目的:</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">SDK名称 SDK厂商 合作目的 收集个人信息字段及用途 SDK隐私政策链接</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">个推消息的</span><span style="color:#E53333;">SDK</span><span
+				style="color:#E53333;"> 每日互动股份有限公司 </span><span style="color:#E53333;">为</span><span
+				style="color:#E53333;">App用户提供消息的技术服务</span> <span style="color:#E53333;">(</span><span
+				style="color:#E53333;">1)设备信息:设备识别码(详见“隐私政策”)、设备平台、设备厂商用于生成唯一的的目标ID(CID)和设备ID(GID),以此保证消息的的准确下发和消息设备的准确识别。设备品牌、设备型号及系统版本用于优化通道资源的有效性,提升消息的的到达率和稳定性。此外,为确保CID的唯一性、提升消息的稳定性和准确性,还需您授权存储权限(WRITE_EXTERNAL_STORAGE、READ_EXTERNAL_STORAGE)和设备权限(READ_PHONE_STATE)。</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">(</span><span
+				style="color:#E53333;">2)应用列表信息:我们采用合并链路技术进行技术的,当一个设备有多个APP的的链路同时活跃时,我们会随机合并成一条链路,以达到为用户省电省流量的目的,因此需获得应用列表信息;同时我们提供智能的功能,通过该信息的更符合您用户需要的的内容,减少无用的信息对您用户的打扰,您可以选择开启或关闭这项服务,但是关闭这项服务会导致电量和流量消耗加大。</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">(</span><span
+				style="color:#E53333;">3)网络信息以及位置相关信息:为了最大程度保持网络连接的稳定性,建立长链接,我们需要了解设备的网络状态和变化,从而实现稳定连续的的服务。我们提供应景的功能,位置相关信息将有助于我们为您提供线下场景的精细化的,可以为您的更符合您用户需要的的内容,减少无用的消息对您用户的打扰。</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">(</span><span
+				style="color:#E53333;">4)为了保障您收到消息的及时性,在您使用消息的服务时,您可以授权我们进行链路调节,相互促活被关闭的SDK的进程,从而保障的消息的有效触达。</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">为保障我们的服务的稳定运行、功能实现,使您能够使用和享受更多的功能及服务,我们的服务中会接入由合作方提供的软件开发工具包(</span><span
+				style="color:#E53333;">SDK)、应用程序接口(API)[1] 。我们会对合作方获取信息的软件开发工具包(SDK)、应用程序接口(API)[2]
+				进行严格的安全检测,并与合作方约定严格的数据保护措施,令其按照本政策以及其他任何相关的保密和安全措施来处理个人信息。我们接入合作方详情如下,我们建议您阅读相关的隐私政策:</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">SDK名称:卓信ID</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">涉及信息:设备弱特征(不具备唯一性和稳定性的特征)</span><span
+				style="color:#E53333;">:设备信息(设备制造商、设备型号、设备系统信息)、设备网络信息(设备联网方式和状态信息)、设备环境信息(屏幕亮度、电池状态及所在国家、设备应用信息(设备常见应用的版本等安装信息)</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">使用目的:提供设备标识与安全风控服务</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">合作方主体:中国信息通信研究院</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">收集方式:</span><span style="color:#E53333;">SDK收集</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">合作方官网链接:</span><span style="color:#E53333;">https://zxid.caict.ac.cn</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">合作方隐私政策链接:</span><span
+				style="color:#E53333;">https://zxid.caict.ac.cn/privacy</span><span style="color:#E53333;">
+				https://docs.getui.com/privacy</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">个推用户运营</span><span style="color:#E53333;">SDK</span><span
+				style="color:#E53333;"> 每日互动股份有限公司 对数据进行多维度多指标统计分析、形成用户画像,进一步了解用户需求,帮助进行广告和相关服务的决策和建议,提升广告有效触达率。
+			</span><span style="color:#E53333;">(</span><span
+				style="color:#E53333;">1)设备信息:设备识别码(详见“隐私政策”)将被用于生成唯一的用户标识,即GTCID。GTCID将被用于数据去重和不同维度的数据统计,可应用于广告流量分发等场景。设备平台、设备厂商及品牌、设备型号及系统版本、设备序列号有助于我们帮助您生成更丰富的画像,如分析不同用户的广告效果,并根据不同设备信息进行对应的适配,从而提供准确的产品服务。</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">(</span><span
+				style="color:#E53333;">2)应用相关信息:包括但不限于应用列表、渠道、时间戳、页面唯一标识、用户打点事件,这些信息有助于我们帮助您了解您的用户的兴趣爱好,实现多维的统计分析,从而展示更符合您用户需求的内容,如帮助您进行广告相关服务的决策,减少非必要信息对您的用户的打扰。</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">(</span><span
+				style="color:#E53333;">3)网络信息及位置相关信息:网络信息有助于我们帮助您判定网络状态,从而提供如仅在wifi下预加载内容的服务,如广告预加载,减少移动流量的损耗;位置信息有助于我们帮助您提供更符合您的用户的内容和服务。</span><span
+				style="color:#E53333;"> https://docs.getui.com/privacy</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">个验认证</span><span style="color:#E53333;">SDK</span><span style="color:#E53333;">
+				每日互动股份有限公司 </span><span style="color:#E53333;">为</span><span style="color:#E53333;">App提供风控和认证服务</span>
+			<span style="color:#E53333;">(</span><span
+				style="color:#E53333;">1)设备信息和手机号码:设备识别码(详见“隐私政策”)和去标识化的手机号码将被用于生成唯一的客户端ID,即GYUID;设备平台、设备厂商、设备品牌、设备型号及系统版本、设备序列号和去标识化的手机号码有助于我们识别唯一用户,保证一键认证的有效识别,快速响应。以提供高效、稳定、流畅的一键认证服务,这会提升我们的反欺诈能力。</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">(</span><span
+				style="color:#E53333;">2)应用列表信息、网络信息、以及位置相关信息:我们通过上述信息分析当前设备的风险等级,可有效识别各种作弊行为,有效识别风险设备,可用于评估渠道质量,识别恶</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">使用</span><span style="color:#E53333;">SDK名称:高德开放平台定位SDK</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">第三方名称:高德软件有限公司</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">使用目的:为了向用户提供定位服务(请根据您产品的实际应用场景填写使用目的)</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">收集个人信息:位置信息(经纬度、精确位置、粗略位置)【通过</span><span
+				style="color:#E53333;">IP&nbsp;地址、GNSS信息、WiFi状态、WiFi参数、WiFi列表、SSID、BSSID、基站信息、信号强度的信息、蓝牙信息、传感器信息(矢量、加速度、压力)、设备信号强度信息获取、外部储存目录】、设备标识信息(IMEI、IDFA、IDFV、Android&nbsp;ID、MEID、MAC地址、OAID、IMSI、ICCID、硬件序列号)、当前应用信息(应用名、应用版本号)、设备参数及系统信息(系统属性、设备型号、操作系统、运营商信息)。</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">隐私权政策链接:</span><a href="https://lbs.amap.com/pages/privacy/"><u><span
+						style="color:#E53333;">https://lbs.amap.com/pages/privacy/</span></u></a>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">(基于不同的设备和系统(安卓</span><span
+				style="color:#E53333;">/iOS)及系统版本,以及开发者在集成、使用我们SDK产品时决定的权限,收集的设备信息会有所不同,因此开发者应对实际收集的个人信息向用户进行说明。)</span>
+		</p>
+		<p class="MsoNormal">
+			<span style="color:#E53333;">&nbsp;</span>
+		</p>
+		<p class="MsoNormal">
+			<span>在您使用</span>App<span>时,会获取方向传感器、陀螺仪设备传感器信息,用于鉴别您是否为真实用户。在您使用录像照相相关功能时,会获取加速度设备传感器信息,用于获取拍摄手机角度</span>
+		</p>
+		<p class="MsoNormal">
+			<br>
+		</p>
+		<p class="MsoNormal">
+			<br>
+		</p>
+		<p class="MsoNormal">
+			应用获取陀螺仪传感器
+		</p>
+		<p class="MsoNormal">
+			<br>
+		</p>
+		<p class="MsoNormal">
+			[android.hardware.SensorManager.registerListener(SensorManager.java:823),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;org.chromium.device.sensors.PlatformSensor.startSensor(HwWebview-11.1.5.315.3337:18),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;android.os.MessageQueue.nativePollOnce(Native Method),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;android.os.MessageQueue.next(MessageQueue.java:374),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;android.os.Looper.loop(Looper.java:185),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;android.app.ActivityThread.main(ActivityThread.java:9016),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;java.lang.reflect.Method.invoke(Native Method),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:614),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1129)]
+		</p>
+		<p class="MsoNormal">
+			应用获取加速度传感器
+		</p>
+		<p class="MsoNormal">
+			<br>
+		</p>
+		<p class="MsoNormal">
+			[android.hardware.SensorManager.registerListener(SensorManager.java:823),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;org.chromium.device.sensors.PlatformSensor.startSensor(HwWebview-11.1.5.315.3337:18),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;android.os.MessageQueue.nativePollOnce(Native Method),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;android.os.MessageQueue.next(MessageQueue.java:374),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;android.os.Looper.loop(Looper.java:185),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;android.app.ActivityThread.main(ActivityThread.java:9016),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;java.lang.reflect.Method.invoke(Native Method),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:614),
+		</p>
+		<p class="MsoNormal">
+			&nbsp;com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1129)]
+		</p>
+		<p class="MsoNormal">
+			<br>
+		</p>
+		<p class="p">
+			(二)转让
+		</p>
+		<p class="p">
+			我们不会将您的个人信息转让给任何公司、组织和个人,但以下情况除外:
+		</p>
+		<p class="p">
+			1、在获取明确同意的情况下转让:获得您的明确同意后,我们会向其他方转让您的个人信息;
+		</p>
+		<p class="p">
+			2、在【易趣CBB】服务提供者发生合并、收购或破产清算情形,或其他涉及合并、收购或破产清算情形时,如涉及到个人信息转让,我们会要求新的持有您个人信息的公司、组织继续受本政策的约束,否则我们将要求该公司、组织和个人重新向您征求授权同意。
+		</p>
+		<p class="p">
+			(三)公开披露
+		</p>
+		<p class="p">
+			我们仅会在以下情况下,公开披露您的个人信息:
+		</p>
+		<p class="p">
+			1、获得您明确同意或基于您的主动选择,我们可能会公开披露您的个人信息;
+		</p>
+		<p class="p">
+			2、如果我们确定您出现违反法律法规或严重违反【易趣CBB】平台相关协议及规则的情况,或为保护【易趣CBB】平台用户或公众的人身财产安全免遭侵害,我们可能依据法律法规或征得您同意的情况下披露关于您的个人信息,包括相关违规行为以及【易趣CBB】平台已对您采取的措施。
+		</p>
+		<p class="p">
+			(四)共享、转让、公开披露个人信息时事先征得授权同意的例外
+		</p>
+		<p class="p">
+			以下情形中,共享、转让、公开披露您的个人信息无需事先征得您的授权同意:
+		</p>
+		<p class="p">
+			1、与国家安全、国防安全有关的;
+		</p>
+		<p class="p">
+			2、与公共安全、公共卫生、重大公共利益有关的;
+		</p>
+		<p class="p">
+			3、与犯罪侦查、起诉、审判和判决执行等司法或行政执法有关的;
+		</p>
+		<p class="p">
+			4、出于维护您或其他个人的生命、财产相关的重大合法权益但又很难得到本人同意的;
+		</p>
+		<p class="p">
+			5、您自行向社会公众公开的个人信息;
+		</p>
+		<p class="p">
+			6、从合法公开披露的信息中收集个人信息的,如合法的新闻报道、政府信息公开。
+		</p>
+		<p class="p">
+			请知悉,根据适用的法律,若我们对个人信息采取技术措施和其他必要措施进行处理,使得数据接收方无法重新识别特定个人且不能复原,则此类处理后数据的共享、转让、公开披露无需另行向您通知并征得您的同意。
+		</p>
+		<h4>
+			<b>四、我们如何存储您的信息</b><b></b>
+		</h4>
+		<p class="p">
+			(一)存储地点
+		</p>
+		<p class="p">
+			我们在中华人民共和国境内运营中收集和产生的个人信息,将存储在中国境内。以下情形下,我们会在履行了法律规定的义务后,向境外实体提供您的个人信息:
+		</p>
+		<p class="p">
+			1、适用的法律有明确规定;
+		</p>
+		<p class="p">
+			2、获得您的明确授权;
+		</p>
+		<p class="p">
+			3、您通过互联网进行跨境交易等个人主动行为。
+		</p>
+		<p class="p">
+			针对以上情形,我们会通过合同等形式确保以不低于本政策规定的程度保护您的个人信息。
+		</p>
+		<p class="p">
+			(二)存储期限
+		</p>
+		<p class="p">
+			我们会采取合理可行的措施,尽力避免收集和处理无关的个人信息。我们只会在达成本政策所述目的所需的期限内保留您的个人信息,除非法律有强制的留存要求,例如《中华人民共和国电子商务法》要求商品和服务信息、交易信息保存时间自交易完成之日起不少于三年。我们判断个人信息的存储期限主要参考以下标准并以其中较长者为准:
+		</p>
+		<p class="p">
+			1、完成与您相关的交易目的、维护相应交易及业务记录,以应对您可能的查询或投诉;
+		</p>
+		<p class="p">
+			2、保证我们为您提供服务的安全和质量;
+		</p>
+		<p class="p">
+			3、您是否同意更长的留存期间;
+		</p>
+		<p class="p">
+			4、是否存在保留期限的其他特别约定。
+		</p>
+		<p class="p">
+			<span>在超出保留期间后,我们会在</span>15天内根据适用法律的要求删除您的个人信息,或使其匿名化处理。此外,在注销账户后,我们将在15天内停止为您提供产品和服务,并根据您的要求,删除您的个人信息或匿名化处理,法律法规另有规定的除外。
+		</p>
+		<h4>
+			<b>五、我们如何保护您的信息</b><b></b>
+		</h4>
+		<p class="p">
+			<span>(一)我们已采取符合业界标准、合理可行的安全防护措施保护您的信息,防止个人信息遭到未经授权访问、公开披露、使用、修改、损坏或丢失。例如,在您的浏览器与服务器之间交换数据时受</span>&nbsp;SSL协议加密保护;我们同时对【易趣CBB<span>】网站提供</span>HTTPS协议安全浏览方式;我们会使用加密技术提高个人信息的安全性;我们会使用受信赖的保护机制防止个人信息遭到恶意攻击;我们会部署访问控制机制,尽力确保只有授权人员才可访问个人信息;以及我们会举办安全和隐私保护培训课程,加强员工对于保护个人信息重要性的认识。
+		</p>
+		<p class="p">
+			我们指定了专人负责儿童个人信息的保护,严格设定信息访问权限,对可能接触到儿童个人信息的工作人员采取最小够用授权原则,并采取技术措施对工作人员处理儿童个人信息的行为进行记录和管控,避免违法复制、下载儿童个人信息。
+		</p>
+		<p class="p">
+			(二)我们会采取合理可行的措施,尽力避免收集无关的个人信息。我们只会在达成本政策所述目的所需的期限内保留您的个人信息,除非法律有强制的存留要求,例如《中华人民共和国电子商务法》要求商品和服务信息、交易信息保存时间自交易完成之日起不少于三年。而我们判断前述期限的标准包括:
+		</p>
+		<p class="p">
+			1、完成与您相关的交易目的、维护相应交易及业务记录、应对您可能的查询或投诉;
+		</p>
+		<p class="p">
+			2、保证我们为您提供服务的安全和质量;
+		</p>
+		<p class="p">
+			3、您是否同意更长的留存期间;
+		</p>
+		<p class="p">
+			4、是否存在保留期限的其他特别约定。
+		</p>
+		<p class="p">
+			在您的个人信息超出保留期间后,我们会根据适用法律的要求删除您的个人信息,或使其匿名化处理。
+		</p>
+		<p class="p">
+			(三)互联网并非绝对安全的环境,使用【易趣CBB】平台服务时,我们强烈建议您不要使用非【易趣CBB】平台的通信方式发送您的信息。您可以通过我们的服务建立联系和相互分享。当您通过我们的服务创建交流、交易或分享时,您可以自主选择沟通、交易或分享的对象,作为能够看到您的交易内容、联络方式、交流信息或分享内容相关信息的第三方。
+		</p>
+		<p class="p">
+			在使用【易趣CBB】服务进行网上交易时,您不可避免地要向交易对方或潜在的交易对方披露自己的个人信息,如联络方式或联系地址。请您妥善保护自己的个人信息,仅在必要的情形下向他人提供。如您发现自己的个人信息尤其是您的账户或密码发生泄露,请您立即联络【易趣CBB】客服,以便我们根据您的申请采取相应措施。
+		</p>
+		<p class="p">
+			请注意,您在使用我们服务时自愿共享甚至公开分享的信息,可能会涉及您或他人的个人信息甚至个人敏感信息。请您更加谨慎地考虑,是否在使用我们的服务时共享甚至公开分享相关信息。
+		</p>
+		<p class="p">
+			请使用复杂密码,协助我们保证您的账号安全。我们将尽力保障您发送给我们的任何信息的安全性。如果我们的物理、技术或管理防护设施遭到破坏,导致信息被非授权访问、公开披露、篡改或毁坏,导致您的合法权益受损,我们将承担相应的法律责任。
+		</p>
+		<p class="p">
+			(四)我们将不定期更新并公开安全风险、个人信息安全影响有关内容,您可通过【易趣CBB】公告方式获得。
+		</p>
+		<p class="p">
+			(五)在不幸发生个人信息安全事件后,我们将按照法律法规的要求向您告知:安全事件的基本情况和可能的影响、我们已采取或将要采取的处置措施、您可自主防范和降低风险的建议、对您的补救措施。事件相关情况我们将以邮件、信函、电话、的通知的方式告知您,难以逐一告知个人信息主体时,我们会采取合理、有效的方式发布公告。
+		</p>
+		<p class="p">
+			<span>在不幸发生儿童个人信息安全事件后,我们将按照法律法规的要求,及时向儿童及其监护人告知:安全事件的基本情况和可能的影响、我们已采取或将要采取的处置措施、儿童及其监护人可自主防范和降低风险的建议、对儿童及其监护人的补救措施。我们将及时将事件相关情况以</span>APP的<span>通知、发送邮件</span>/短消息告知儿童及其监护人。难以逐一告知时,我们会采取合理、有效的方式发布相关警示信息。同时,我们还将按照监管部门要求,主动上报儿童个人信息安全事件的处置情况。若儿童及其监护人的合法权益受损,我们将依法承担相应的法律责任。同时,我们还将按照监管部门要求,上报个人信息安全事件的处置情况。
+		</p>
+		<h4>
+			<b>六、您如何管理您的信息</b><b></b>
+		</h4>
+		<p class="p">
+			您可以通过以下方式访问及管理您的信息:
+		</p>
+		<p class="p">
+			(一)查询、更正和补充您的信息
+		</p>
+		<p class="p">
+			您有权查询、更正或补充您的信息。您可以通过以下方式自行进行:
+		</p>
+		<p class="p">
+			1、登录手机【易趣CBB<span>】客户端,进入</span><span>“我的”页面,点击页面右上方设置的图标查询、更正个人资料及个人账户相关信息;</span>
+		</p>
+		<p class="p">
+			(二)删除您的信息
+		</p>
+		<p class="p">
+			<span>您可以通过</span><span>“(一)查询、更正和补充您的信息”中列明的方式注销您的部分信息。</span>
+		</p>
+		<p class="p">
+			在以下情形中,您可以向我们提出删除个人信息的请求:
+		</p>
+		<p class="p">
+			1、如果我们处理个人信息的行为违反法律法规;
+		</p>
+		<p class="p">
+			2、如果我们收集、使用您的个人信息,却未征得您的明确同意;
+		</p>
+		<p class="p">
+			3、如果我们处理个人信息的行为严重违反了与您的约定;
+		</p>
+		<p class="p">
+			4、如果您不再使用我们的产品或服务,或您主动注销了账号;
+		</p>
+		<p class="p">
+			5、如果我们永久不再为您提供产品或服务。
+		</p>
+		<p class="p">
+			若我们决定响应您的删除请求,我们还将同时尽可能通知从我们处获得您的个人信息的主体,并要求其及时删除(除非法律法规另有规定,或这些主体已独立获得您的授权)。
+		</p>
+		<p class="p">
+			当您或我们协助您删除相关信息后,因为适用的法律和安全技术,我们可能无法立即从备份系统中删除相应的信息,我们将安全地存储您的个人信息并将其与任何进一步处理隔离,直到备份可以清除或实现匿名。
+		</p>
+		<p class="p">
+			(三)改变您授权同意的范围
+		</p>
+		<p class="p">
+			如果您不再选择将您的个人信息提供给我们或拒绝使用我们提供的部分服务,您可以通过设置您的智能移动设备关闭您授权给【易趣CBB<span>】的部分权限。以华为手机为例:通过手机中的</span><span>“设置--隐私--权限管理”,选择关闭部分或全部您已授权给我们的权限。</span>
+		</p>
+		<p class="p">
+			当您收回同意后,我们将不再处理相应的个人信息。但您收回同意的决定,不会影响此前基于您的授权而开展的个人信息处理。
+		</p>
+		<p class="p">
+			<span style="color:#E53333;">(四)注销您的账户</span>
+		</p>
+		<p class="p">
+			<span style="color:#E53333;">您可以通过以下方式申请注销您的账户:</span>
+		</p>
+		<p class="p">
+			<span style="color:#E53333;">1、进入【易趣CBB</span><span style="color:#E53333;">】手机客户端,选择</span><span
+				style="color:#E53333;">“我的--设置--注销</span><span style="color:#E53333;">账号”,您可以注销您的账户。</span>
+		</p>
+		<p class="p">
+			<span style="color:#E53333;">在您主动注销账户之后,我们将停止为您提供商品或服务,并根据适用法律的要求删除您的个人信息,或使其匿名化处理。</span>
+		</p>
+		<p class="p">
+			(五)约束信息系统自动决策
+		</p>
+		<p class="p">
+			在某些业务功能中,我们可能仅依据信息系统、算法在内的非人工自动决策机制做出决定。如果这些决定显著影响您的合法权益,您有权要求我们做出解释,我们也将在不侵害【易趣CBB】商业秘密或其他用户权益、社会公共利益的前提下提供申诉方法。
+		</p>
+		<p class="p">
+			(六)响应您的上述请求
+		</p>
+		<p class="p">
+			为保障安全,您可能需要提供书面请求,或以其他方式证明您的身份。我们可能会先要求您验证自己的身份,然后再处理您的请求。
+		</p>
+		<p class="p">
+			<span>我们将在</span>15天内做出答复。如您不满意,还可以通过【易趣CBB】客服发起投诉。
+		</p>
+		<p class="p">
+			对于您合理的请求,我们原则上不收取费用,但对多次重复、超出合理限度的请求,我们将酌情收取一定费用。对于与您的身份不直接关联的信息、无端重复信息,或者需要过多技术手段(例如,需要开发新系统或从根本上改变现行惯例)、给他人合法权益带来风险或者不切实际的请求,我们可能会予以拒绝。
+		</p>
+		<p class="p">
+			在以下情形中,按照法律法规要求,我们将无法响应您的请求:
+		</p>
+		<p class="p">
+			1、与国家安全、国防安全有关的;
+		</p>
+		<p class="p">
+			2、与公共安全、公共卫生、重大公共利益有关的;
+		</p>
+		<p class="p">
+			3、与犯罪侦查、起诉、审判和执行判决有关的;
+		</p>
+		<p class="p">
+			4、有充分证据表明个人信息主体存在主观恶意或滥用权利的;
+		</p>
+		<p class="p">
+			5、响应您的请求将导致您或其他个人、组织的合法权益受到严重损害的;
+		</p>
+		<p class="p">
+			6、涉及商业秘密的。
+		</p>
+		<h4>
+			<b><span style="color:#E53333;">七、我们如何处理未成年人的信息</span></b><b></b>
+		</h4>
+		<p class="p">
+			<span
+				style="color:#E53333;">在电子商务活动中我们推定您具有相应的民事行为能力。如您为未成年人,我们要求您请您的父母或其他监护人仔细阅读本隐私政策,并在征得您的父母或其他监护人同意的前提下使用我们的服务或向我们提供信息。</span>
+		</p>
+		<p class="p">
+			<span
+				style="color:#E53333;">如果我们识别出您是儿童用户的,请您告知我们您的监护人信息,我们将通知您的监护人并要求您的监护人同意儿童个人信息收集使用规则。对于经父母或其他监护人同意使用我们的产品或服务而收集儿童个人信息的情况,我们只会在法律法规允许、父母或其他监护人明确同意或者保护儿童所必要的情况下使用、共享、转让或披露此信息。</span>
+		</p>
+		<p class="p">
+			<span
+				style="color:#E53333;">若您是儿童的父母或其他监护人,请您关注您监护的儿童是否是在取得您的授权同意之后使用我们的服务的。如您对您所监护的儿童的个人信息有疑问,请通过第九节中的联系方式与我们联系。</span>
+		</p>
+		<h4>
+			<b>八、您的信息如何在全球范围转移</b><b></b>
+		</h4>
+		<p class="p">
+			我们在中华人民共和国境内运营中收集和产生的个人信息,存储在中国境内,以下情形除外:
+		</p>
+		<p class="p">
+			1、适用的法律有明确规定;
+		</p>
+		<p class="p">
+			2、获得您的明确授权;
+		</p>
+		<p class="p">
+			3、您通过互联网进行跨境交易的个人主动行为。
+		</p>
+		<p class="p">
+			针对以上情形,我们会确保依据本隐私政策对您的个人信息提供足够的保护。
+		</p>
+		<h4>
+			<b>九、本隐私政策如何更新</b><b></b>
+		</h4>
+		<p class="p">
+			我们的隐私政策可能变更。
+		</p>
+		<p class="p">
+			<span>未经您明确同意,我们不会限制您按照本隐私政策所应享有的权利。我们会在</span>App上发布对隐私政策的更新。
+		</p>
+		<p class="p">
+			对于重大变更,我们还会提供更为显著的通知(包括我们会通过【易趣CBB】公示的方式进行通知甚至向您提供弹窗提示)。
+		</p>
+		<p class="p">
+			本政策所指的重大变更包括但不限于:
+		</p>
+		<p class="p">
+			1、我们的服务模式发生重大变化。如处理个人信息的目的、处理的个人信息类型、个人信息的使用方式;
+		</p>
+		<p class="p">
+			2、我们在控制权方面发生重大变化。如并购重组引起的信息控制者变更;
+		</p>
+		<p class="p">
+			3、个人信息共享、转让或公开披露的主要对象发生变化;
+		</p>
+		<p class="p">
+			4、您参与个人信息处理方面的权利及其行使方式发生重大变化;
+		</p>
+		<p class="p">
+			5、我们负责处理个人信息安全的责任部门、联络方式及投诉渠道发生变化;
+		</p>
+		<p class="p">
+			6、个人信息安全影响评估报告表明存在高风险。
+		</p>
+		<h4>
+			<b>&nbsp;</b><b></b>
+		</h4>
+		<h4>
+			<b>十</b><b>、如何联系我们</b><b></b>
+		</h4>
+		<p class="p">
+			<span>您可以通过以下方式与我们联系,我们将在</span>15天内回复您的请求:
+		</p>
+		<p class="p">
+			1、如对本政策内容、儿童个人信息有任何疑问、意见或建议,您可通过【易趣CBB】客服邮箱:【ssjt202205@163.com】与我们联系。
+		</p>
+		<p class="p">
+			2、如发现个人信息被泄露,您可以联系我们的客服人员进行投诉举报;
+		</p>
+		<p class="p">
+			如果您对我们的回复不满意,特别是您认为我们的个人信息处理行为损害了您的合法权益,您还可以通过向被告住所地有管辖权的法院提起诉讼来寻求解决方案。
+		</p>
+		<p class="MsoNormal">
+			<br>
+		</p>
+	</view>
 </template>
 
 <script>

+ 32 - 5
pages/user/approve.vue

@@ -24,6 +24,13 @@
 				已提交资料请等待审核结果
 			</text>
 		</view>
+		<canvas canvas-id="canvas" v-if="canvasStatus"
+			:style="{width: canvasWidth + 'px', height: canvasHeight + 'px',position: 'absolute',left:'-100000px',top:'-100000px'}"></canvas>
+		<uni-popup ref="popup" type="center">
+			<view class="alertprogress">
+			{{progress}}%
+			</view>
+		</uni-popup>
 	</view>
 </template>
 
@@ -58,7 +65,10 @@
 				upFileLoding: false, //防止上传图片时多次重复点击
 				upDataLoding: false, //判断是否上传过数据
 				renus: false, //判断是否已经通过实名认证
-
+				canvasStatus: false,
+				canvasWidth:0,
+				canvasHeight:0,
+				progress:0,
 			};
 		},
 		onLoad(option) {
@@ -212,12 +222,29 @@
 				setTimeout(() => {
 					that.upFileLoding = false;
 				}, 1000);
+				that.canvasStatus = true;
 				upload({
 					filename: ''
-				}).then(data => {
-					this.form.img = data[0].url;
-				}).catch((err) => {
-					console.log(err);
+				}, (res) => {
+					this.form.img = res[0].url;
+					that.canvasStatus = false
+				}, (res) => {
+					that.canvasStatus = false
+				}, (res) => {
+					that.canvasWidth = res.w
+					that.canvasHeight = res.h
+				},(res)=>{
+					// console.log(res,'res');
+					if(res.progress==100){
+						this.$refs.popup.close()
+						uni.showToast({
+							title: '上传成功'
+						});
+					}else if(res.progress==0){
+						this.$refs.popup.open()
+					}
+					that.progress = res.progress;
+					// console.log(res,'进度条');
 				})
 			},
 			ToIndex() {

+ 32 - 4
pages/user/gzsq.vue

@@ -56,6 +56,13 @@
 		<view class="sq-btn" @click="subSq()">
 			提交申请
 		</view>
+		<canvas canvas-id="canvas" v-if="canvasStatus"
+			:style="{width: canvasWidth + 'px', height: canvasHeight + 'px',position: 'absolute',left:'-100000px',top:'-100000px'}"></canvas>
+		<uni-popup ref="popup" type="center">
+			<view class="alertprogress">
+			{{progress}}%
+			</view>
+		</uni-popup>
 	</view>
 </template>
 
@@ -76,6 +83,10 @@
 				yyzz:'',//营业执照
 				imageshop:'',//门店照片
 				upFileLoding:false,
+				canvasStatus: false,
+				canvasWidth:0,
+				canvasHeight:0,
+				progress:0,
 			}
 		},
 		methods: {
@@ -124,12 +135,29 @@
 				setTimeout(()=>{
 					that.upFileLoding = false;
 				},1000);
+				that.canvasStatus = true;
 				upload({
 					filename: ''
-				}).then(data => {
-					that[type] = data[0].url;
-				}).catch((err) => {
-					console.log(err);
+				}, (res) => {
+					that[type] = res[0].url;
+					that.canvasStatus = false
+				}, (res) => {
+					that.canvasStatus = false
+				}, (res) => {
+					that.canvasWidth = res.w
+					that.canvasHeight = res.h
+				},(res)=>{
+					// console.log(res,'res');
+					if(res.progress==100){
+						this.$refs.popup.close()
+						uni.showToast({
+							title: '上传成功'
+						});
+					}else if(res.progress==0){
+						this.$refs.popup.open()
+					}
+					that.progress = res.progress;
+					// console.log(res,'进度条');
 				})
 			}
 		}

+ 13 - 6
pages/user/myAppointment.vue

@@ -54,12 +54,12 @@
 								</view>
 							</view>
 							<view class="money">
-								<view>{{ (item.pm == 0 ? '-' : '+') + item.number }}</view>
-								<view v-if="item.status == 0" class="status">待发放</view>
+								<view :class="{status:item.status == 0}">{{ (item.pm == 0 ? '-' : '+') + item.number }} {{item.status == 0?"待发放":''}} </view>
+								<view v-if="item.status != 0" class="status font-size-sm">余额:{{item.balance}}</view>
 							</view>
 						</view>
 					</view>
-					<!-- <uni-load-more :status="tabItem.loadingType" v-if="!(tabItem.orderList.length == 0 && tabItem.loaded)"></uni-load-more> -->
+					<uni-load-more :status="tabItem.loadingType" v-if="!(tabItem.orderList.length == 0 && tabItem.loaded)"></uni-load-more>
 				</scroll-view>
 			</swiper-item>
 		</swiper>
@@ -117,7 +117,7 @@
 					loadingType: 'more',
 					orderList: [],
 					page: 1, //当前页数
-					limit: 1000, //每次信息条数
+					limit: 10, //每次信息条数
 					loaded: false
 				}],
 				money: ''
@@ -150,7 +150,7 @@
 					//tab切换只有第一次需要加载数据
 					return;
 				}
-				if (navItem.loadingType === 'loading') {
+				if (navItem.loadingType === 'loading'||navItem.loadingType === 'nomore') {
 					//防止重复加载
 					return;
 				}
@@ -166,7 +166,14 @@
 					}) => {
 						obj.recharge = data.sr;
 						obj.orderStatusSum = data.zc;
-						navItem.orderList = data.data;
+						navItem.orderList =navItem.orderList.concat( data.data)
+						if(data.data.length==navItem.limit){
+							navItem.page++;
+							navItem.loadingType = 'more';
+						}else{
+							console.log('nomore')
+							navItem.loadingType = 'nomore';
+						}
 					})
 					.catch(e => {
 						console.log(e);

+ 3 - 3
pages/user/myfans.vue

@@ -94,9 +94,9 @@
 					const query = uni.createSelectorQuery();
 					query.select('.swiper-box').boundingClientRect();
 					query.exec(function(res) {
-						console.log(res, 'ddddddddddddd');
+						// console.log(res, 'ddddddddddddd');
 						_this.height = resu.windowHeight - res[0].top + 'px';
-						console.log('打印页面的剩余高度', _this.height);
+						// console.log('打印页面的剩余高度', _this.height);
 					});
 				},
 				fail: res => {}
@@ -108,7 +108,7 @@
 				if (obj.loadingType == 'loading' || obj.loadingType == 'noMore') {
 					return
 				}
-
+				obj.loadingType = 'loading' 
 				getMyfans({
 					page: obj.page,
 					limit: obj.limit

+ 21 - 1
pages/user/mygs.vue

@@ -12,7 +12,7 @@
 				<view>总收益</view>
 			</view>
 		</view>
-		<scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData">
+		<scroll-view :style="{ height: maxheight }" class="list-scroll-content" scroll-y @scrolltolower="loadData">
 			<!-- 空白页 -->
 			<empty v-if="orderList.length === 0"></empty>
 
@@ -67,6 +67,7 @@ export default {
 	},
 	data() {
 		return {
+			maxheight:'',
 			loadingType: 'more',
 			orderList: [],
 			page: 1, //当前页数
@@ -78,6 +79,19 @@ export default {
 			return +value;
 		}
 	},
+	onReady() {
+		const that = this;
+		uni.getSystemInfo({
+			success: resu => {
+				const query = uni.createSelectorQuery();
+				query.select('.list-scroll-content').boundingClientRect();
+				query.exec(function(res) {
+					that.maxheight = resu.windowHeight - res[0].top + 'px';
+				});
+			},
+			fail: res => {}
+		});
+	},
 	onShow() {
 		this.loadData();
 	},
@@ -99,6 +113,12 @@ export default {
 		//获取收入支出信息
 		async loadData(source) {
 			let obj = this;
+			if (obj.loadingType === 'loading'||obj.loadingType === 'nomore') {
+				//防止重复加载
+				return;
+			}
+			// 修改当前对象状态为加载中
+			obj.loadingType = 'loading';
 			seller({
 				type: 3,
 				page: obj.page,

+ 18 - 5
pages/user/myproduct.vue

@@ -39,11 +39,13 @@ export default {
 		this.loadData();
 	},
 	onReachBottom(){
+		console.log('22222')
 		this.loadData();
 	},
 	methods: {
 		loadData() {
 			const obj = this;
+			console.log(obj.loadingType,obj.loadingType,'33')
 			if (obj.loadingType == 'nomore' || obj.loadingType == 'loading') {
 				return;
 			}
@@ -56,13 +58,24 @@ export default {
 				data.forEach(e => {
 					e.g_time = getTime(e.add_time);
 				});
-				obj.list = data;
-				if (data.length != obj.limit) {
-					obj.loadingType == 'noMore';
+				obj.list = obj.list.concat(data);
+				// console.log(navItem.orderList);
+				obj.page++;
+				if (data.length == obj.limit) {
+					//判断是否还有数据, 有改为 more, 没有改为noMore
+					obj.loadingType = 'more';
+					return;
 				} else {
-					obj.page++;
-					obj.loadingType == 'more';
+					//判断是否还有数据, 有改为 more, 没有改为noMore
+					obj.loadingType = 'nomore';
 				}
+				// obj.list = data;
+				// if (data.length != obj.limit) {
+				// 	obj.loadingType == 'noMore';
+				// } else {
+				// 	obj.page++;
+				// 	obj.loadingType == 'more';
+				// }
 			});
 		}
 	}

+ 15 - 9
pages/user/mytihuo.vue

@@ -85,7 +85,7 @@
 							</view>
 						</view>
 					</view>
-					<!-- <uni-load-more :status="tabItem.loadingType" v-if="!(tabItem.orderList.length == 0 && tabItem.loaded)"></uni-load-more> -->
+					<uni-load-more :status="tabItem.loadingType" v-if="!(tabItem.orderList.length == 0 && tabItem.loaded)"></uni-load-more>
 				</scroll-view>
 			</swiper-item>
 		</swiper>
@@ -144,7 +144,7 @@
 						loadingType: 'more',
 						orderList: [],
 						page: 1, //当前页数
-						limit: 1000, //每次信息条数
+						limit: 10, //每次信息条数
 						loaded: false
 					},
 					{
@@ -153,7 +153,7 @@
 						loadingType: 'more',
 						orderList: [],
 						page: 1, //当前页数
-						limit: 1000, //每次信息条数
+						limit: 10, //每次信息条数
 						loaded: false
 					}
 				],
@@ -199,12 +199,12 @@
 				let index = this.tabCurrentIndex;
 				let navItem = this.navList[index];
 				let state = navItem.state;
-				console.log(source, 'iwiwiwiwi');
+				// console.log(source, 'iwiwiwiwi');
 				if (source === 'tabChange' && navItem.loaded === true) {
 					//tab切换只有第一次需要加载数据
 					return;
 				}
-				if (navItem.loadingType === 'loading') {
+				if (navItem.loadingType === 'loading'||navItem.loadingType === 'nomore') {
 					//防止重复加载
 					return;
 				}
@@ -218,13 +218,19 @@
 					.then(({
 						data
 					}) => {
-						// obj.recharge = data.income;
-						// obj.orderStatusSum = data.expend;
+						let arr = []
 						if (state == 0) {
-							navItem.orderList = data.zj;
+							arr= data.zj;
 						}
 						if (state == 1) {
-							navItem.orderList = data.kc;
+							arr = data.kc;
+						}
+						navItem.orderList =navItem.orderList.concat(arr)
+						if(arr.length==navItem.limit){
+							navItem.page++;
+							navItem.loadingType = 'more';
+						}else{
+							navItem.loadingType = 'nomore';
 						}
 					})
 					.catch(e => {

+ 13 - 1
pages/user/shareQrCode.vue

@@ -1,6 +1,6 @@
 <template>
 	<view class="container">
-		<image @longtap="bc_code" class="backImg" :src="backImg"></image>
+		<image @longtap="bc_code" class="backImg" @error="imgerror" :src="imageIs"></image>
 		<view class="tki-qrcode"><canvas @longtap="bc_code" canvas-id="qrcode" /></view>
 	</view>
 </template>
@@ -15,6 +15,7 @@
 			return {
 				url: '',
 				backImg: '',
+				imageIs:'',
 				userInfo: '',
 				iswei: 1
 			};
@@ -31,7 +32,17 @@
 				}
 			}
 		},
+		onNavigationBarButtonTap(res) {
+			this.spread();
+		},
 		methods: {
+			// 图片重载
+			imgerror(){
+				const that = this;
+				setTimeout(()=>{
+				that.imageIs = that.backImg+`?time=${(new Date).getTime()}`
+				},300)
+			},
 			spread() {
 				uni.showLoading({
 					title: '加载中'
@@ -68,6 +79,7 @@
 					//#ifdef APP-PLUS
 					obj.backImg = data[0].wap_poster;
 					//#endif
+					obj.imageIs = obj.backImg+`?time=${(new Date).getTime()}`
 					uni.hideLoading();
 				});
 			},

+ 35 - 7
pages/user/user.vue

@@ -23,7 +23,7 @@
 					<view class="vip-title">{{ userInfo.level_name }}</view>
 				</view>
 			</view>
-			<view class="sy-box flex">
+			<view class="sy-box flex" v-if="isShowIllegality" >
 				<view class="sy-item" @click="navTo('/pages/user/mygs')">
 					<view class="sy-item-val">{{ userInfo.profit > 0 ? userInfo.profit : '0' }}</view>
 					<view class="sy-item-name">我的收益</view>
@@ -54,7 +54,7 @@
 			</view>
 			<view class="qd-btn" :class="{ qded: qded }" @click="qded ? '' : goQd()">{{ qded ? '已签到' : '立即签到' }}</view>
 		</view> -->
-		<view class="tool-box flex">
+		<view class="tool-box flex"  v-if="isShowIllegality">
 			<view class="tool-item flex" v-for="itemt in toolList" :key="itemt.id" @click="useTool(itemt)"
 				v-if="itemt.id != 't7' || userInfo.staff">
 				<view class="tool-item-img">
@@ -77,9 +77,12 @@
 			<uni-list-item class="item" title="绑定手机" @click="navTo('/pages/set/phone')"
 				thumb="/static/icon/user_bind.png"></uni-list-item>
 			<!-- #endif -->
-			<!-- <uni-list-item title="关于我们" @click="navTo('/pages/user/about')" thumb="/static/icon/img09.png"></uni-list-item> -->
+			<!-- <uni-list-item class="item" title="关于我们" @click="navTo('/pages/user/about')" thumb="/static/icon/img09.png"></uni-list-item> -->
 		</uni-list>
 		<view class="page-btm" style="padding-top: 20rpx;">©2022 杭州尚视拍卖有限公司 版权所有</view>
+		<!-- #ifdef APP -->
+		<view class="page-btm" >APP版本号{{wgtinfo.version}},最新版本号{{appversion}}</view>
+		<!-- #endif -->
 		<view class="page-btm" style="padding-bottom: 10rpx;">浙ICP备2022017146号-2</view>
 		<uni-popup ref="popupkf" type="center">
 			<view class="popup-box">
@@ -91,7 +94,7 @@
 						<view class="title">已经为您定制专属客服</view>
 						<image src="../../static/img/img010.png" mode=""></image>
 					</view>
-					<view class="nocancel">客服VX:{{ text }}</view>
+					<view class="nocancel">客服电话:{{ text }}</view>
 					<view class="comfirm-box">
 						<view class="cancel" @click="cancel">取消</view>
 						<view class="comfirm" @click="comfirm(text)">复制微信</view>
@@ -144,6 +147,11 @@
 		saveUrl,
 		interceptor
 	} from '@/utils/loginUtils.js';
+	// #ifdef APP-PLUS
+	import {
+		getUpApp
+	} from '@/utils/upApp.js';
+	// #endif
 	let startY = 0,
 		moveY = 0,
 		pageAtTop = true;
@@ -154,6 +162,11 @@
 		},
 		data() {
 			return {
+				// #ifdef APP
+				wgtinfo:{
+					version:'1.0.0'
+				},//版本信息
+				// #endif
 				sm: 0, //是否已实名认证
 				money: '', //保存当前月份
 				year: '', //保存当前年份
@@ -161,7 +174,7 @@
 				current: 4,
 				tabbar: tabbar1,
 				qded: false, //是否已签到
-				text: 'qjr3355', //客服微信
+				text: '18967672398', //客服微信
 				actionDay: 0, //连续签到天数
 				sum_integral: 0, //累计获得积分
 				today_integral: '', //签到获得的数值
@@ -210,6 +223,7 @@
 						img: '../../static/icon/tool-5.png',
 						path: '/pages/user/myproduct'
 					},
+					// #ifndef APP
 					{
 						id: 't6',
 						name: '馆长申请',
@@ -218,6 +232,7 @@
 						img: '../../static/icon/tool-6.png',
 						path: '/pages/user/gzsq'
 					},
+					// #endif
 					{
 						id: 't7',
 						name: '我的金豆',
@@ -238,8 +253,14 @@
 				// this.getData();
 				// this.isSm();
 			}
+			// #ifdef APP
+			if(this.appversion!==this.wgtinfo.version){
+				getUpApp();
+			}
+			// #endif
 		},
 		onReady() {
+			const that = this;
 			// 初始化获取页面宽度
 			uni.createSelectorQuery()
 				.select('.container')
@@ -254,9 +275,15 @@
 					}
 				)
 				.exec();
+			// #ifdef APP
+			plus.runtime.getProperty(plus.runtime.appid, function(wgtinfo) {
+				that.wgtinfo = wgtinfo;
+			});
+			// #endif
 		},
 		computed: {
-			...mapState('user', ['userInfo', 'orderInfo', 'hasLogin'])
+			...mapState('user', ['userInfo', 'orderInfo', 'hasLogin']),
+			...mapState(["isShowIllegality","appversion"])
 		},
 		methods: {
 			...mapMutations('user', ['setUserInfo', 'setOrderInfo']),
@@ -955,7 +982,8 @@
 		z-index: 10;
 		position: relative;
 		.tool-item {
-			width: 20%;
+			// width: 20%;
+			flex-grow: 1;
 			height: 120rpx;
 			flex-shrink: 0;
 			flex-direction: column;

BIN
static/img/news.png


+ 15 - 6
store/index.js

@@ -1,19 +1,20 @@
 import Vue from 'vue'
 import Vuex from 'vuex'
 import user from './model/user'
+import md5 from './model/md5'
 Vue.use(Vuex)
-
 const store = new Vuex.Store({
 	namespaced: true,
 	state: {
 		// #ifdef H5
-		baseURL:window.location.protocol + "//" + window.location.host,//请求地址配置 
+		baseURL: 'https://v5dgkivu.qiniu1314.com', //正式地址配置
+		// baseURL: 'https://cbbshop.qiniu1314.com', //根目录下
+		// baseURL:window.location.protocol + "//" + window.location.host,//请求地址配置 
 		// #endif
 		// #ifndef H5
-		// baseURL:'http://cbb.qiniu1314.com',//测试地址配置
-		baseURL: 'https://www.shangshiyiqu.com', //正式地址配置
+		baseURL: 'https://v5dgkivu.qiniu1314.com', //正式地址配置
 		// #endif
-		urlFile: '/index', //项目部署所在文件夹
+		urlFile: '/index/', //项目部署所在文件夹,修改后需同步修改manifest.json文件中的配置
 		userInfo: {}, //登录信息
 		loginInterceptor: false, //是否打开强制登录
 		isbuy: false, //是否进入购买时间
@@ -26,12 +27,18 @@ const store = new Vuex.Store({
 		longitude: '',
 		// #ifdef APP-PLUS
 		isShowIllegality:false,//不显示ios审核不允许的功能
+		appversion:"1.0.0",
 		// #endif
 		// #ifndef APP-PLUS
 		isShowIllegality:true,//允许显示隐藏信息
 		// #endif
 	},
 	mutations: {
+		// #ifdef APP-PLUS
+		setappversion(state, provider){
+			state.appversion = provider
+		},
+		// #endif
 		setLat(state, provider) {
 			state.latitude = provider
 		},
@@ -64,11 +71,13 @@ const store = new Vuex.Store({
 		},
 		// 修改显示隐藏ios审核不允许显示的功能
 		changeState(state, provider){
+			console.log(provider,'provider');
 			state.isShowIllegality = provider;
 		}
 	},
 	modules: {
-		user
+		user,
+		md5
 	},
 	actions: {}
 })

+ 22 - 0
store/model/md5.js

@@ -0,0 +1,22 @@
+var timestamp = Date.now();
+ 
+// 将时间戳转换成10位数的时间戳(秒级)
+var tenDigitTimestamp = Math.floor(timestamp / 1000);
+ 
+console.log(tenDigitTimestamp); // 输出10位数的时间戳
+let state = {
+	Timestamp: tenDigitTimestamp, //过期时间
+	AUTH_TOKEN:"e4c548d3a78b0e0247be267f1a8359cd"//鉴权秘钥
+}
+
+let mutations = {
+}
+let getters = {
+}
+
+export default {
+	namespaced: true,
+	state,
+	mutations,
+	getters
+}

+ 0 - 21
uni_modules/uview-ui/LICENSE

@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2023 www.uviewui.com
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.

+ 0 - 66
uni_modules/uview-ui/README.md

@@ -1,66 +0,0 @@
-<p align="center">
-    <img alt="logo" src="https://uviewui.com/common/logo.png" width="120" height="120" style="margin-bottom: 10px;">
-</p>
-<h3 align="center" style="margin: 30px 0 30px;font-weight: bold;font-size:40px;">uView 2.0</h3>
-<h3 align="center">多平台快速开发的UI框架</h3>
-
-[![stars](https://img.shields.io/github/stars/umicro/uView2.0?style=flat-square&logo=GitHub)](https://github.com/umicro/uView2.0)
-[![forks](https://img.shields.io/github/forks/umicro/uView2.0?style=flat-square&logo=GitHub)](https://github.com/umicro/uView2.0)
-[![issues](https://img.shields.io/github/issues/umicro/uView2.0?style=flat-square&logo=GitHub)](https://github.com/umicro/uView2.0/issues)
-[![Website](https://img.shields.io/badge/uView-up-blue?style=flat-square)](https://uviewui.com)
-[![release](https://img.shields.io/github/v/release/umicro/uView2.0?style=flat-square)](https://gitee.com/umicro/uView2.0/releases)
-[![license](https://img.shields.io/github/license/umicro/uView2.0?style=flat-square)](https://en.wikipedia.org/wiki/MIT_License)
-
-## 说明
-
-uView UI,是[uni-app](https://uniapp.dcloud.io/)全面兼容nvue的uni-app生态框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水
-
-## [官方文档:https://uviewui.com](https://uviewui.com)
-
-
-## 预览
-
-您可以通过**微信**扫码,查看最佳的演示效果。
-<br>
-<br>
-<img src="https://uviewui.com/common/weixin_mini_qrcode.png" width="220" height="220" >
-
-
-## 链接
-
-- [官方文档](https://www.uviewui.com/)
-- [更新日志](https://www.uviewui.com/components/changelog.html)
-- [升级指南](https://www.uviewui.com/components/changeGuide.html)
-- [关于我们](https://www.uviewui.com/cooperation/about.html)
-
-## 交流反馈
-
-欢迎加入我们的QQ群交流反馈:[点此跳转](https://www.uviewui.com/components/addQQGroup.html)
-
-## 关于PR
-
-> 我们非常乐意接受各位的优质PR,但在此之前我希望您了解uView2.0是一个需要兼容多个平台的(小程序、h5、ios app、android app)包括nvue页面、vue页面。
-> 所以希望在您修复bug并提交之前尽可能的去这些平台测试一下兼容性。最好能携带测试截图以方便审核。非常感谢!
-
-## 安装
-
-#### **uni-app插件市场链接** —— [https://ext.dcloud.net.cn/plugin?id=1593](https://ext.dcloud.net.cn/plugin?id=1593)
-
-请通过[官网安装文档](https://www.uviewui.com/components/install.html)了解更详细的内容
-
-## 快速上手
-
-请通过[快速上手](https://uviewui.com/components/quickstart.html)了解更详细的内容
-
-## 使用方法
-配置easycom规则后,自动按需引入,无需`import`组件,直接引用即可。
-
-```html
-<template>
-	<u-button text="按钮"></u-button>
-</template>
-```
-
-## 版权信息
-uView遵循[MIT](https://en.wikipedia.org/wiki/MIT_License)开源协议,意味着您无需支付任何费用,也无需授权,即可将uView应用到您的产品中。
-

+ 0 - 374
uni_modules/uview-ui/changelog.md

@@ -1,374 +0,0 @@
-## 2.0.37(2024-03-17)
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. 修复表单校验`trigger`触发器参数无效问题
-2. 修复`u-input`组件的`password`属性在动态切换为`false`时失效的问题
-3. 添加微信小程序用户同意隐私协议事件回调
-4. 修复支付宝小程序picker样式问题
-5. `u-modal`添加`duration`字段控制动画过度时间
-6. 修复`picker` `lastIndex`异常导致的`column`异常问题
-7. `tabs`增加长按事件支持
-8. 修复`u-avatar` `square`属性在小程序`open-data`下无效问题
-9. 其他一些修复
-## 2.0.36(2023-03-27)
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. 重构`deepClone` & `deepMerge`方法
-2. 其他优化
-## 2.0.34(2022-09-24)
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. `u-input`、`u-textarea`增加`ignoreCompositionEvent`属性
-2. 修复`route`方法调用可能报错的问题
-3. 修复`u-no-network`组件`z-index`无效的问题
-4. 修复`textarea`组件在h5上confirmType=""报错的问题
-5. `u-rate`适配`nvue`
-6. 优化验证手机号码的正则表达式(根据工信部发布的《电信网编号计划(2017年版)》进行修改。)
-7. `form-item`添加`labelPosition`属性
-8. `u-calendar`修复`maxDate`设置为当前日期,并且当前时间大于08:00时无法显示日期列表的问题 (#724)
-9. `u-radio`增加一个默认插槽用于自定义修改label内容 (#680)
-10. 修复`timeFormat`函数在safari重的兼容性问题 (#664)
-## 2.0.33(2022-06-17)
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. 修复`loadmore`组件`lineColor`类型错误问题
-2. 修复`u-parse`组件`imgtap`、`linktap`不生效问题
-## 2.0.32(2022-06-16)
-# uView2.0重磅发布,利剑出鞘,一统江湖
-1. `u-loadmore`新增自定义颜色、虚/实线
-2. 修复`u-swiper-action`组件部分平台不能上下滑动的问题
-3. 修复`u-list`回弹问题
-4. 修复`notice-bar`组件动画在低端安卓机可能会抖动的问题
-5. `u-loading-page`添加控制图标大小的属性`iconSize`
-6. 修复`u-tooltip`组件`color`参数不生效的问题
-7. 修复`u--input`组件使用`blur`事件输出为`undefined`的bug
-8. `u-code-input`组件新增键盘弹起时,是否自动上推页面参数`adjustPosition`
-9. 修复`image`组件`load`事件无回调对象问题
-10. 修复`button`组件`loadingSize`设置无效问题
-10. 其他修复
-## 2.0.31(2022-04-19)
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. 修复`upload`在`vue`页面上传成功后没有成功标志的问题
-2. 解决演示项目中微信小程序模拟上传图片一直出于上传中问题
-3. 修复`u-code-input`组件在`nvue`页面编译到`app`平台上光标异常问题(`app`去除此功能)
-4. 修复`actionSheet`组件标题关闭按钮点击事件名称错误的问题
-5. 其他修复
-## 2.0.30(2022-04-04)
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. `u-rate`增加`readonly`属性
-2. `tabs`滑块支持设置背景图片
-3. 修复`u-subsection` `mode`为`subsection`时,滑块样式不正确的问题
-4. `u-code-input`添加光标效果动画
-5. 修复`popup`的`open`事件不触发
-6. 修复`u-flex-column`无效的问题
-7. 修复`u-datetime-picker`索引在特定场合异常问题
-8. 修复`u-datetime-picker`最小时间字符串模板错误问题
-9. `u-swiper`添加`m3u8`验证
-10. `u-swiper`修改判断image和video逻辑
-11. 修复`swiper`无法使用本地图片问题,增加`type`参数
-12. 修复`u-row-notice`格式错误问题
-13. 修复`u-switch`组件当`unit`为`rpx`时,`nodeStyle`消失的问题
-14. 修复`datetime-picker`组件`showToolbar`与`visibleItemCount`属性无效的问题
-15. 修复`upload`组件条件编译位置判断错误,导致`previewImage`属性设置为`false`时,整个组件都会被隐藏的问题
-16. 修复`u-checkbox-group`设置`shape`属性无效的问题
-17. 修复`u-upload`的`capture`传入字符串的时候不生效的问题
-18. 修复`u-action-sheet`组件,关闭事件逻辑错误的问题
-19. 修复`u-list`触顶事件的触发错误的问题
-20. 修复`u-text`只有手机号可拨打的问题
-21. 修复`u-textarea`不能换行的问题
-22. 其他修复
-## 2.0.29(2022-03-13)
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. 修复`u--text`组件设置`decoration`属性未生效的问题
-2. 修复`u-datetime-picker`使用`formatter`后返回值不正确
-3. 修复`u-datetime-picker` `intercept` 可能为undefined
-4. 修复已设置单位 uni..config.unit = 'rpx'时,线型指示器 `transform` 的位置翻倍,导致指示器超出宽度
-5. 修复mixin中bem方法生成的类名在支付宝和字节小程序中失效
-6. 修复默认值传值为空的时候,打开`u-datetime-picker`报错,不能选中第一列时间的bug
-7. 修复`u-datetime-picker`使用`formatter`后返回值不正确
-8. 修复`u-image`组件`loading`无效果的问题
-9. 修复`config.unit`属性设为`rpx`时,导航栏占用高度不足导致塌陷的问题
-10. 修复`u-datetime-picker`组件`itemHeight`无效问题
-11. 其他修复
-## 2.0.28(2022-02-22)
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. search组件新增searchIconSize属性
-2. 兼容Safari/Webkit中传入时间格式如2022-02-17 12:00:56
-3. 修复text value.js 判断日期出format错误问题
-4. priceFormat格式化金额出现精度错误
-5. priceFormat在部分情况下出现精度损失问题
-6. 优化表单rules提示
-7. 修复avatar组件src为空时,展示状态不对
-8. 其他修复
-## 2.0.27(2022-01-28)
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1.样式修复
-## 2.0.26(2022-01-28)
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1.样式修复
-## 2.0.25(2022-01-27)
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. 修复text组件mode=price时,可能会导致精度错误的问题
-2. 添加$u.setConfig()方法,可设置uView内置的config, props, zIndex, color属性,详见:[修改uView内置配置方案](https://uviewui.com/components/setting.html#%E9%BB%98%E8%AE%A4%E5%8D%95%E4%BD%8D%E9%85%8D%E7%BD%AE)
-3. 优化form组件在errorType=toast时,如果输入错误页面会有抖动的问题
-4. 修复$u.addUnit()对配置默认单位可能无效的问题
-## 2.0.24(2022-01-25)
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. 修复swiper在current指定非0时缩放有误
-2. 修复u-icon添加stop属性的时候报错
-3. 优化遗留的通过正则判断rpx单位的问题
-4. 优化Layout布局 vue使用gutter时,会超出固定区域
-5. 优化search组件高度单位问题(rpx -> px)
-6. 修复u-image slot 加载和错误的图片失去了高度
-7. 修复u-index-list中footer插槽与header插槽存在性判断错误
-8. 修复部分机型下u-popup关闭时会闪烁
-9. 修复u-image在nvue-app下失去宽高
-10. 修复u-popup运行报错
-11. 修复u-tooltip报错
-12. 修复box-sizing在app下的警告
-13. 修复u-navbar在小程序中报运行时错误
-14. 其他修复
-## 2.0.23(2022-01-24)
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. 修复image组件在hx3.3.9的nvue下可能会显示异常的问题
-2. 修复col组件gutter参数带rpx单位处理不正确的问题
-3. 修复text组件单行时无法显示省略号的问题
-4. navbar添加titleStyle参数
-5. 升级到hx3.3.9可消除nvue下控制台样式警告的问题
-## 2.0.22(2022-01-19)
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. $u.page()方法优化,避免在特殊场景可能报错的问题
-2. picker组件添加immediateChange参数
-3. 新增$u.pages()方法
-## 2.0.21(2022-01-19)
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. 优化:form组件在用户设置rules的时候提示用户model必传
-2. 优化遗留的通过正则判断rpx单位的问题
-3. 修复微信小程序环境中tabbar组件开启safeAreaInsetBottom属性后,placeholder高度填充不正确
-4. 修复swiper在current指定非0时缩放有误
-5. 修复u-icon添加stop属性的时候报错
-6. 修复upload组件在accept=all的时候没有作用
-7. 修复在text组件mode为phone时call属性无效的问题
-8. 处理u-form clearValidate方法
-9. 其他修复
-## 2.0.20(2022-01-14)
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. 修复calendar默认会选择一个日期,如果直接点确定的话,无法取到值的问题
-2. 修复Slider缺少disabled props 还有注释
-3. 修复u-notice-bar点击事件无法拿到index索引值的问题
-4. 修复u-collapse-item在vue文件下,app端自定义插槽不生效的问题
-5. 优化头像为空时显示默认头像 
-6. 修复图片地址赋值后判断加载状态为完成问题
-7. 修复日历滚动到默认日期月份区域
-8. search组件暴露点击左边icon事件
-9. 修复u-form clearValidate方法不生效
-10. upload h5端增加返回文件参数(文件的name参数)
-11. 处理upload选择文件后url为blob类型无法预览的问题
-12. u-code-input 修复输入框没有往左移出一半屏幕
-13. 修复Upload上传 disabled为true时,控制台报hoverClass类型错误
-14. 临时处理ios app下grid点击坍塌问题
-15. 其他修复
-## 2.0.19(2021-12-29)
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. 优化微信小程序包体积可在微信中预览,请升级HbuilderX3.3.4,同时在“运行->运行到小程序模拟器”中勾选“运行时是否压缩代码”
-2. 优化微信小程序setData性能,处理某些方法如$u.route()无法在模板中使用的问题
-3. navbar添加autoBack参数
-4. 允许avatar组件的事件冒泡
-5. 修复cell组件报错问题
-6. 其他修复
-## 2.0.18(2021-12-28)
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. 修复app端编译报错问题
-2. 重新处理微信小程序端setData过大的性能问题
-3. 修复边框问题
-4. 修复最大最小月份不大于0则没有数据出现的问题
-5. 修复SwipeAction微信小程序端无法上下滑动问题
-6. 修复input的placeholder在小程序端默认显示为true问题
-7. 修复divider组件click事件无效问题
-8. 修复u-code-input maxlength 属性值为 String 类型时显示异常
-9. 修复当 grid只有 1到2时 在小程序端algin设置无效的问题
-10. 处理form-item的label为top时,取消错误提示的左边距
-11. 其他修复
-## 2.0.17(2021-12-26)
-## uView正在参与开源中国的“年度最佳项目”评选,之前投过票的现在也可以投票,恳请同学们投一票,[点此帮助uView](https://www.oschina.net/project/top_cn_2021/?id=583)
-
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. 解决HBuilderX3.3.3.20211225版本导致的样式问题
-2. calendar日历添加monthNum参数
-3. navbar添加center slot
-## 2.0.16(2021-12-25)
-## uView正在参与开源中国的“年度最佳项目”评选,之前投过票的现在也可以投票,恳请同学们投一票,[点此帮助uView](https://www.oschina.net/project/top_cn_2021/?id=583)
-
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. 解决微信小程序setData性能问题
-2. 修复count-down组件change事件不触发问题
-## 2.0.15(2021-12-21)
-## uView正在参与开源中国的“年度最佳项目”评选,之前投过票的现在也可以投票,恳请同学们投一票,[点此帮助uView](https://www.oschina.net/project/top_cn_2021/?id=583)
-
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. 修复Cell单元格titleWidth无效
-2. 修复cheakbox组件ischecked不更新
-3. 修复keyboard是否显示"."按键默认值问题
-4. 修复number-keyboard是否显示键盘的"."符号问题
-5. 修复Input输入框 readonly无效
-6. 修复u-avatar 导致打包app、H5时候报错问题
-7. 修复Upload上传deletable无效
-8. 修复upload当设置maxSize时无效的问题
-9. 修复tabs lineWidth传入带单位的字符串的时候偏移量计算错误问题
-10. 修复rate组件在有padding的view内,显示的星星位置和可触摸区域不匹配,无法正常选中星星
-## 2.0.13(2021-12-14)
-## [点击加群交流反馈:364463526](https://jq.qq.com/?_chanwv=1027&k=mCxS3TGY)
-
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. 修复配置默认单位为rpx可能会导致自定义导航栏高度异常的问题
-## 2.0.12(2021-12-14)
-## [点击加群交流反馈:364463526](https://jq.qq.com/?_chanwv=1027&k=mCxS3TGY)
-
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. 修复tabs组件在vue环境下划线消失的问题
-2. 修复upload组件在安卓小程序无法选择视频的问题
-3. 添加uni.$u.config.unit配置,用于配置参数默认单位,详见:[默认单位配置](https://www.uviewui.com/components/setting.html#%E9%BB%98%E8%AE%A4%E5%8D%95%E4%BD%8D%E9%85%8D%E7%BD%AE)
-4. 修复textarea组件在没绑定v-model时,字符统计不生效问题
-5. 修复nvue下控制是否出现滚动条失效问题
-## 2.0.11(2021-12-13)
-## [点击加群交流反馈:364463526](https://jq.qq.com/?_chanwv=1027&k=mCxS3TGY)
-
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. text组件align参数无效的问题
-2. subsection组件添加keyName参数
-3. upload组件无法判断[Object file]类型的问题
-4. 处理notify层级过低问题
-5. codeInput组件添加disabledDot参数
-6. 处理actionSheet组件round参数无效的问题
-7. calendar组件添加round参数用于控制圆角值
-8. 处理swipeAction组件在vue环境下默认被打开的问题
-9. button组件的throttleTime节流参数无效的问题
-10. 解决u-notify手动关闭方法close()无效的问题
-11. input组件readonly不生效问题
-12. tag组件type参数为info不生效问题
-## 2.0.10(2021-12-08)
-## [点击加群交流反馈:364463526](https://jq.qq.com/?_chanwv=1027&k=mCxS3TGY)
-
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. 修复button sendMessagePath属性不生效
-2. 修复DatetimePicker选择器title无效
-3. 修复u-toast设置loading=true不生效
-4. 修复u-text金额模式传0报错
-5. 修复u-toast组件的icon属性配置不生效
-6. button的icon在特殊场景下的颜色优化
-7. IndexList优化,增加#
-## 2.0.9(2021-12-01)
-## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
-
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. 优化swiper的height支持100%值(仅vue有效),修复嵌入视频时click事件无法触发的问题
-2. 优化tabs组件对list值为空的判断,或者动态变化list时重新计算相关尺寸的问题
-3. 优化datetime-picker组件逻辑,让其后续打开的默认值为上一次的选中值,需要通过v-model绑定值才有效
-4. 修复upload内嵌在其他组件中,选择图片可能不会换行的问题
-## 2.0.8(2021-12-01)
-## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
-
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. 修复toast的position参数无效问题
-2. 处理input在ios nvue上无法获得焦点的问题
-3. avatar-group组件添加extraValue参数,让剩余展示数量可手动控制
-4. tabs组件添加keyName参数用于配置从对象中读取的键名
-5. 处理text组件名字脱敏默认配置无效的问题
-6. 处理picker组件item文本太长换行问题
-## 2.0.7(2021-11-30)
-## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
-
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. 修复radio和checkbox动态改变v-model无效的问题。
-2. 优化form规则validator在微信小程序用法
-3. 修复backtop组件mode参数在微信小程序无效的问题
-4. 处理Album的previewFullImage属性无效的问题
-5. 处理u-datetime-picker组件mode='time'在选择改变时间时,控制台报错的问题
-## 2.0.6(2021-11-27)
-## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
-
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. 处理tag组件在vue下边框无效的问题。
-2. 处理popup组件圆角参数可能无效的问题。
-3. 处理tabs组件lineColor参数可能无效的问题。
-4. propgress组件在值很小时,显示异常的问题。
-## 2.0.5(2021-11-25)
-## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
-
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. calendar在vue下显示异常问题。 
-2. form组件labelPosition和errorType参数无效的问题
-3. input组件inputAlign无效的问题
-4. 其他一些修复
-## 2.0.4(2021-11-23)
-## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
-
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-0. input组件缺失@confirm事件,以及subfix和prefix无效问题
-1. component.scss文件样式在vue下干扰全局布局问题
-2. 修复subsection在vue环境下表现异常的问题
-3. tag组件的bgColor等参数无效的问题
-4. upload组件不换行的问题
-5. 其他的一些修复处理
-## 2.0.3(2021-11-16)
-## [点击加群交流反馈:1129077272](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
-
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. uView2.0已实现全面兼容nvue
-2. uView2.0对1.x进行了架构重构,细节和性能都有极大提升
-3. 目前uView2.0为公测阶段,相关细节可能会有变动
-4. 我们写了一份与1.x的对比指南,详见[对比1.x](https://www.uviewui.com/components/diff1.x.html)
-5. 处理modal的confirm回调事件拼写错误问题
-6. 处理input组件@input事件参数错误问题
-7. 其他一些修复
-## 2.0.2(2021-11-16)
-## [点击加群交流反馈:1129077272](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
-
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. uView2.0已实现全面兼容nvue
-2. uView2.0对1.x进行了架构重构,细节和性能都有极大提升
-3. 目前uView2.0为公测阶段,相关细节可能会有变动
-4. 我们写了一份与1.x的对比指南,详见[对比1.x](https://www.uviewui.com/components/diff1.x.html)
-5. 修复input组件formatter参数缺失问题
-6. 优化loading-icon组件的scss写法问题,防止不兼容新版本scss
-## 2.0.0(2020-11-15)
-## [点击加群交流反馈:1129077272](https://jq.qq.com/?_wv=1027&k=KnbeceDU)
-
-# uView2.0重磅发布,利剑出鞘,一统江湖
-
-1. uView2.0已实现全面兼容nvue
-2. uView2.0对1.x进行了架构重构,细节和性能都有极大提升
-3. 目前uView2.0为公测阶段,相关细节可能会有变动
-4. 我们写了一份与1.x的对比指南,详见[对比1.x](https://www.uviewui.com/components/diff1.x.html)
-5. 修复input组件formatter参数缺失问题
-
-

+ 0 - 78
uni_modules/uview-ui/components/u--form/u--form.vue

@@ -1,78 +0,0 @@
-<template>
-	<uvForm
-		ref="uForm"
-		:model="model"
-		:rules="rules"
-		:errorType="errorType"
-		:borderBottom="borderBottom"
-		:labelPosition="labelPosition"
-		:labelWidth="labelWidth"
-		:labelAlign="labelAlign"
-		:labelStyle="labelStyle"
-		:customStyle="customStyle"
-	>
-		<slot />
-	</uvForm>
-</template>
-
-<script>
-	/**
-	 * 此组件存在的理由是,在nvue下,u-form被uni-app官方占用了,u-form在nvue中相当于form组件
-	 * 所以在nvue下,取名为u--form,内部其实还是u-form.vue,只不过做一层中转
-	 */
-	import uvForm from '../u-form/u-form.vue';
-	import props from '../u-form/props.js'
-	export default {
-		// #ifdef MP-WEIXIN
-		name: 'u-form',
-		// #endif
-		// #ifndef MP-WEIXIN
-		name: 'u--form',
-		// #endif
-		mixins: [uni.$u.mpMixin, props, uni.$u.mixin],
-		components: {
-			uvForm
-		},
-		created() {
-			this.children = []
-		},
-		methods: {
-			// 手动设置校验的规则,如果规则中有函数的话,微信小程序中会过滤掉,所以只能手动调用设置规则
-			setRules(rules) {
-				this.$refs.uForm.setRules(rules)
-			},
-			validate() {
-				/**
-				 * 在微信小程序中,通过this.$parent拿到的父组件是u--form,而不是其内嵌的u-form
-				 * 导致在u-form组件中,拿不到对应的children数组,从而校验无效,所以这里每次调用u-form组件中的
-				 * 对应方法的时候,在小程序中都先将u--form的children赋值给u-form中的children
-				 */
-				// #ifdef MP-WEIXIN
-				this.setMpData()
-				// #endif
-				return this.$refs.uForm.validate()
-			},
-			validateField(value, callback, event) {
-				// #ifdef MP-WEIXIN
-				this.setMpData()
-				// #endif
-				return this.$refs.uForm.validateField(value, callback, event)
-			},
-			resetFields() {
-				// #ifdef MP-WEIXIN
-				this.setMpData()
-				// #endif
-				return this.$refs.uForm.resetFields()
-			},
-			clearValidate(props) {
-				// #ifdef MP-WEIXIN
-				this.setMpData()
-				// #endif
-				return this.$refs.uForm.clearValidate(props)
-			},
-			setMpData() {
-				this.$refs.uForm.children = this.children
-			}
-		},
-	}
-</script>

+ 0 - 47
uni_modules/uview-ui/components/u--image/u--image.vue

@@ -1,47 +0,0 @@
-<template>
-	<uvImage 
-		:src="src"
-		:mode="mode"
-		:width="width"
-		:height="height"
-		:shape="shape"
-		:radius="radius"
-		:lazyLoad="lazyLoad"
-		:showMenuByLongpress="showMenuByLongpress"
-		:loadingIcon="loadingIcon"
-		:errorIcon="errorIcon"
-		:showLoading="showLoading"
-		:showError="showError"
-		:fade="fade"
-		:webp="webp"
-		:duration="duration"
-		:bgColor="bgColor"
-		:customStyle="customStyle"
-		@click="$emit('click')"
-		@error="$emit('error')"
-		@load="$emit('load')"
-	>
-		<template v-slot:loading>
-			<slot name="loading"></slot>
-		</template>
-		<template v-slot:error>
-			<slot name="error"></slot>
-		</template>
-	</uvImage>
-</template>
-
-<script>
-	/**
-	 * 此组件存在的理由是,在nvue下,u-image被uni-app官方占用了,u-image在nvue中相当于image组件
-	 * 所以在nvue下,取名为u--image,内部其实还是u-iamge.vue,只不过做一层中转
-	 */
-	import uvImage from '../u-image/u-image.vue';
-	import props from '../u-image/props.js';
-	export default {
-		name: 'u--image',
-		mixins: [uni.$u.mpMixin, props, uni.$u.mixin],
-		components: {
-			uvImage
-		},
-	}
-</script>

+ 0 - 73
uni_modules/uview-ui/components/u--input/u--input.vue

@@ -1,73 +0,0 @@
-<template>
-	<uvInput 
-		:value="value"
-		:type="type"
-		:fixed="fixed"
-		:disabled="disabled"
-		:disabledColor="disabledColor"
-		:clearable="clearable"
-		:password="password"
-		:maxlength="maxlength"
-		:placeholder="placeholder"
-		:placeholderClass="placeholderClass"
-		:placeholderStyle="placeholderStyle"
-		:showWordLimit="showWordLimit"
-		:confirmType="confirmType"
-		:confirmHold="confirmHold"
-		:holdKeyboard="holdKeyboard"
-		:focus="focus"
-		:autoBlur="autoBlur"
-		:disableDefaultPadding="disableDefaultPadding"
-		:cursor="cursor"
-		:cursorSpacing="cursorSpacing"
-		:selectionStart="selectionStart"
-		:selectionEnd="selectionEnd"
-		:adjustPosition="adjustPosition"
-		:inputAlign="inputAlign"
-		:fontSize="fontSize"
-		:color="color"
-		:prefixIcon="prefixIcon"
-		:suffixIcon="suffixIcon"
-		:suffixIconStyle="suffixIconStyle"
-		:prefixIconStyle="prefixIconStyle"
-		:border="border"
-		:readonly="readonly"
-		:shape="shape"
-		:customStyle="customStyle"
-		:formatter="formatter"
-		:ignoreCompositionEvent="ignoreCompositionEvent"
-		@focus="$emit('focus')"
-		@blur="e => $emit('blur', e)"
-		@keyboardheightchange="$emit('keyboardheightchange')"
-		@change="e => $emit('change', e)"
-		@input="e => $emit('input', e)"
-		@confirm="e => $emit('confirm', e)"
-		@clear="$emit('clear')"
-		@click="$emit('click')"
-	>
-		<!-- #ifdef MP -->
-		<slot name="prefix"></slot>
-		<slot name="suffix"></slot>
-		<!-- #endif -->
-		<!-- #ifndef MP -->
-		<slot name="prefix" slot="prefix"></slot>
-		<slot name="suffix" slot="suffix"></slot>
-		<!-- #endif -->
-	</uvInput>
-</template>
-
-<script>
-	/**
-	 * 此组件存在的理由是,在nvue下,u-input被uni-app官方占用了,u-input在nvue中相当于input组件
-	 * 所以在nvue下,取名为u--input,内部其实还是u-input.vue,只不过做一层中转
-	 */
-	import uvInput from '../u-input/u-input.vue';
-	import props from '../u-input/props.js'
-	export default {
-		name: 'u--input',
-		mixins: [uni.$u.mpMixin, props, uni.$u.mixin],
-		components: {
-			uvInput
-		},
-	}
-</script>

+ 0 - 44
uni_modules/uview-ui/components/u--text/u--text.vue

@@ -1,44 +0,0 @@
-<template>
-    <uvText
-        :type="type"
-        :show="show"
-        :text="text"
-        :prefixIcon="prefixIcon"
-        :suffixIcon="suffixIcon"
-        :mode="mode"
-        :href="href"
-        :format="format"
-        :call="call"
-        :openType="openType"
-        :bold="bold"
-        :block="block"
-        :lines="lines"
-        :color="color"
-		:decoration="decoration"
-        :size="size"
-        :iconStyle="iconStyle"
-        :margin="margin"
-        :lineHeight="lineHeight"
-        :align="align"
-        :wordWrap="wordWrap"
-        :customStyle="customStyle"
-        @click="$emit('click')"
-    ></uvText>
-</template>
-
-<script>
-/**
- * 此组件存在的理由是,在nvue下,u-text被uni-app官方占用了,u-text在nvue中相当于input组件
- * 所以在nvue下,取名为u--input,内部其实还是u-text.vue,只不过做一层中转
- * 不使用v-bind="$attrs",而是分开独立写传参,是因为微信小程序不支持此写法
- */
-import uvText from "../u-text/u-text.vue";
-import props from "../u-text/props.js";
-export default {
-    name: "u--text",
-    mixins: [uni.$u.mpMixin, props, uni.$u.mixin],
-    components: {
-        uvText,
-    },
-};
-</script>

+ 0 - 48
uni_modules/uview-ui/components/u--textarea/u--textarea.vue

@@ -1,48 +0,0 @@
-<template>
-	<uvTextarea
-		:value="value"
-		:placeholder="placeholder"
-		:height="height"
-		:confirmType="confirmType"
-		:disabled="disabled"
-		:count="count"
-		:focus="focus"
-		:autoHeight="autoHeight"
-		:fixed="fixed"
-		:cursorSpacing="cursorSpacing"
-		:cursor="cursor"
-		:showConfirmBar="showConfirmBar"
-		:selectionStart="selectionStart"
-		:selectionEnd="selectionEnd"
-		:adjustPosition="adjustPosition"
-		:disableDefaultPadding="disableDefaultPadding"
-		:holdKeyboard="holdKeyboard"
-		:maxlength="maxlength"
-		:border="border"
-		:customStyle="customStyle"
-		:formatter="formatter"
-		:ignoreCompositionEvent="ignoreCompositionEvent"
-		@focus="e => $emit('focus')"
-		@blur="e => $emit('blur')"
-		@linechange="e => $emit('linechange', e)"
-		@confirm="e => $emit('confirm')"
-		@input="e => $emit('input', e)"
-		@keyboardheightchange="e => $emit('keyboardheightchange')"
-	></uvTextarea>
-</template>
-
-<script>
-	/**
-	 * 此组件存在的理由是,在nvue下,u--textarea被uni-app官方占用了,u-textarea在nvue中相当于textarea组件
-	 * 所以在nvue下,取名为u--textarea,内部其实还是u-textarea.vue,只不过做一层中转
-	 */
-	import uvTextarea from '../u-textarea/u-textarea.vue';
-	import props from '../u-textarea/props.js'
-	export default {
-		name: 'u--textarea',
-		mixins: [uni.$u.mpMixin, props, uni.$u.mixin],
-		components: {
-			uvTextarea
-		},
-	}
-</script>

+ 0 - 54
uni_modules/uview-ui/components/u-action-sheet/props.js

@@ -1,54 +0,0 @@
-export default {
-    props: {
-        // 操作菜单是否展示 (默认false)
-        show: {
-            type: Boolean,
-            default: uni.$u.props.actionSheet.show
-        },
-        // 标题
-        title: {
-            type: String,
-            default: uni.$u.props.actionSheet.title
-        },
-        // 选项上方的描述信息
-        description: {
-            type: String,
-            default: uni.$u.props.actionSheet.description
-        },
-        // 数据
-        actions: {
-            type: Array,
-            default: uni.$u.props.actionSheet.actions
-        },
-        // 取消按钮的文字,不为空时显示按钮
-        cancelText: {
-            type: String,
-            default: uni.$u.props.actionSheet.cancelText
-        },
-        // 点击某个菜单项时是否关闭弹窗
-        closeOnClickAction: {
-            type: Boolean,
-            default: uni.$u.props.actionSheet.closeOnClickAction
-        },
-        // 处理底部安全区(默认true)
-        safeAreaInsetBottom: {
-            type: Boolean,
-            default: uni.$u.props.actionSheet.safeAreaInsetBottom
-        },
-        // 小程序的打开方式
-        openType: {
-            type: String,
-            default: uni.$u.props.actionSheet.openType
-        },
-        // 点击遮罩是否允许关闭 (默认true)
-        closeOnClickOverlay: {
-            type: Boolean,
-            default: uni.$u.props.actionSheet.closeOnClickOverlay
-        },
-        // 圆角值
-        round: {
-            type: [Boolean, String, Number],
-            default: uni.$u.props.actionSheet.round
-        }
-    }
-}

+ 0 - 278
uni_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue

@@ -1,278 +0,0 @@
-
-<template>
-	<u-popup
-	    :show="show"
-	    mode="bottom"
-	    @close="closeHandler"
-	    :safeAreaInsetBottom="safeAreaInsetBottom"
-	    :round="round"
-	>
-		<view class="u-action-sheet">
-			<view
-			    class="u-action-sheet__header"
-			    v-if="title"
-			>
-				<text class="u-action-sheet__header__title u-line-1">{{title}}</text>
-				<view
-				    class="u-action-sheet__header__icon-wrap"
-				    @tap.stop="cancel"
-				>
-					<u-icon
-					    name="close"
-					    size="17"
-					    color="#c8c9cc"
-					    bold
-					></u-icon>
-				</view>
-			</view>
-			<text
-			    class="u-action-sheet__description"
-				:style="[{
-					marginTop: `${title && description ? 0 : '18px'}`
-				}]"
-			    v-if="description"
-			>{{description}}</text>
-			<slot>
-				<u-line v-if="description"></u-line>
-				<view class="u-action-sheet__item-wrap">
-					<template v-for="(item, index) in actions">
-						<!-- #ifdef MP -->
-						<button
-						    :key="index"
-						    class="u-reset-button"
-						    :openType="item.openType"
-						    @getuserinfo="onGetUserInfo"
-						    @contact="onContact"
-						    @getphonenumber="onGetPhoneNumber"
-						    @error="onError"
-						    @launchapp="onLaunchApp"
-						    @opensetting="onOpenSetting"
-						    :lang="lang"
-						    :session-from="sessionFrom"
-						    :send-message-title="sendMessageTitle"
-						    :send-message-path="sendMessagePath"
-						    :send-message-img="sendMessageImg"
-						    :show-message-card="showMessageCard"
-						    :app-parameter="appParameter"
-						    @tap="selectHandler(index)"
-						    :hover-class="!item.disabled && !item.loading ? 'u-action-sheet--hover' : ''"
-						>
-							<!-- #endif -->
-							<view
-							    class="u-action-sheet__item-wrap__item"
-							    @tap.stop="selectHandler(index)"
-							    :hover-class="!item.disabled && !item.loading ? 'u-action-sheet--hover' : ''"
-							    :hover-stay-time="150"
-							>
-								<template v-if="!item.loading">
-									<text
-									    class="u-action-sheet__item-wrap__item__name"
-									    :style="[itemStyle(index)]"
-									>{{ item.name }}</text>
-									<text
-									    v-if="item.subname"
-									    class="u-action-sheet__item-wrap__item__subname"
-									>{{ item.subname }}</text>
-								</template>
-								<u-loading-icon
-								    v-else
-								    custom-class="van-action-sheet__loading"
-								    size="18"
-								    mode="circle"
-								/>
-							</view>
-							<!-- #ifdef MP -->
-						</button>
-						<!-- #endif -->
-						<u-line v-if="index !== actions.length - 1"></u-line>
-					</template>
-				</view>
-			</slot>
-			<u-gap
-			    bgColor="#eaeaec"
-			    height="6"
-			    v-if="cancelText"
-			></u-gap>
-			<view hover-class="u-action-sheet--hover">
-				<text
-				    @touchmove.stop.prevent
-				    :hover-stay-time="150"
-				    v-if="cancelText"
-				    class="u-action-sheet__cancel-text"
-				    @tap="cancel"
-				>{{cancelText}}</text>
-			</view>
-		</view>
-	</u-popup>
-</template>
-
-<script>
-	import openType from '../../libs/mixin/openType'
-	import button from '../../libs/mixin/button'
-	import props from './props.js';
-	/**
-	 * ActionSheet 操作菜单
-	 * @description 本组件用于从底部弹出一个操作菜单,供用户选择并返回结果。本组件功能类似于uni的uni.showActionSheetAPI,配置更加灵活,所有平台都表现一致。
-	 * @tutorial https://www.uviewui.com/components/actionSheet.html
-	 * 
-	 * @property {Boolean}			show				操作菜单是否展示 (默认 false )
-	 * @property {String}			title				操作菜单标题
-	 * @property {String}			description			选项上方的描述信息
-	 * @property {Array<Object>}	actions				按钮的文字数组,见官方文档示例
-	 * @property {String}			cancelText			取消按钮的提示文字,不为空时显示按钮
-	 * @property {Boolean}			closeOnClickAction	点击某个菜单项时是否关闭弹窗 (默认 true )
-	 * @property {Boolean}			safeAreaInsetBottom	处理底部安全区 (默认 true )
-	 * @property {String}			openType			小程序的打开方式 (contact | launchApp | getUserInfo | openSetting |getPhoneNumber |error )
-	 * @property {Boolean}			closeOnClickOverlay	点击遮罩是否允许关闭  (默认 true )
-	 * @property {Number|String}	round				圆角值,默认无圆角  (默认 0 )
-	 * @property {String}			lang				指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文
-	 * @property {String}			sessionFrom			会话来源,openType="contact"时有效
-	 * @property {String}			sendMessageTitle	会话内消息卡片标题,openType="contact"时有效
-	 * @property {String}			sendMessagePath		会话内消息卡片点击跳转小程序路径,openType="contact"时有效
-	 * @property {String}			sendMessageImg		会话内消息卡片图片,openType="contact"时有效
-	 * @property {Boolean}			showMessageCard		是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示,用户点击后可以快速发送小程序消息,openType="contact"时有效 (默认 false )
-	 * @property {String}			appParameter		打开 APP 时,向 APP 传递的参数,openType=launchApp 时有效
-	 * 
-	 * @event {Function} select			点击ActionSheet列表项时触发 
-	 * @event {Function} close			点击取消按钮时触发
-	 * @event {Function} getuserinfo	用户点击该按钮时,会返回获取到的用户信息,回调的 detail 数据与 wx.getUserInfo 返回的一致,openType="getUserInfo"时有效
-	 * @event {Function} contact		客服消息回调,openType="contact"时有效
-	 * @event {Function} getphonenumber	获取用户手机号回调,openType="getPhoneNumber"时有效
-	 * @event {Function} error			当使用开放能力时,发生错误的回调,openType="error"时有效
-	 * @event {Function} launchapp		打开 APP 成功的回调,openType="launchApp"时有效
-	 * @event {Function} opensetting	在打开授权设置页后回调,openType="openSetting"时有效
-	 * @example <u-action-sheet :actions="list" :title="title" :show="show"></u-action-sheet>
-	 */
-	export default {
-		name: "u-action-sheet",
-		// 一些props参数和methods方法,通过mixin混入,因为其他文件也会用到
-		mixins: [openType, button, uni.$u.mixin, props],
-		data() {
-			return {
-
-			}
-		},
-		computed: {
-			// 操作项目的样式
-			itemStyle() {
-				return (index) => {
-					let style = {};
-					if (this.actions[index].color) style.color = this.actions[index].color
-					if (this.actions[index].fontSize) style.fontSize = uni.$u.addUnit(this.actions[index].fontSize)
-					// 选项被禁用的样式
-					if (this.actions[index].disabled) style.color = '#c0c4cc'
-					return style;
-				}
-			},
-		},
-		methods: {
-			closeHandler() {
-				// 允许点击遮罩关闭时,才发出close事件
-				if(this.closeOnClickOverlay) {
-					this.$emit('close')
-				}
-			},
-			// 点击取消按钮
-			cancel() {
-				this.$emit('close')
-			},
-			selectHandler(index) {
-				const item = this.actions[index]
-				if (item && !item.disabled && !item.loading) {
-					this.$emit('select', item)
-					if (this.closeOnClickAction) {
-						this.$emit('close')
-					}
-				}
-			},
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	@import "../../libs/css/components.scss";
-	$u-action-sheet-reset-button-width:100% !default;
-	$u-action-sheet-title-font-size: 16px !default;
-	$u-action-sheet-title-padding: 12px 30px !default;
-	$u-action-sheet-title-color: $u-main-color !default;
-	$u-action-sheet-header-icon-wrap-right:15px !default;
-	$u-action-sheet-header-icon-wrap-top:15px !default;
-	$u-action-sheet-description-font-size:13px !default;
-	$u-action-sheet-description-color:14px !default;
-	$u-action-sheet-description-margin: 18px 15px !default;
-	$u-action-sheet-item-wrap-item-padding:15px !default;
-	$u-action-sheet-item-wrap-name-font-size:16px !default;
-	$u-action-sheet-item-wrap-subname-font-size:13px !default;
-	$u-action-sheet-item-wrap-subname-color: #c0c4cc !default;
-	$u-action-sheet-item-wrap-subname-margin-top:10px !default;
-	$u-action-sheet-cancel-text-font-size:16px !default;
-	$u-action-sheet-cancel-text-color:$u-content-color !default;
-	$u-action-sheet-cancel-text-font-size:15px !default;
-	$u-action-sheet-cancel-text-hover-background-color:rgb(242, 243, 245) !default;
-
-	.u-reset-button {
-		width: $u-action-sheet-reset-button-width;
-	}
-
-	.u-action-sheet {
-		text-align: center;
-		&__header {
-			position: relative;
-			padding: $u-action-sheet-title-padding;
-			&__title {
-				font-size: $u-action-sheet-title-font-size;
-				color: $u-action-sheet-title-color;
-				font-weight: bold;
-				text-align: center;
-			}
-
-			&__icon-wrap {
-				position: absolute;
-				right: $u-action-sheet-header-icon-wrap-right;
-				top: $u-action-sheet-header-icon-wrap-top;
-			}
-		}
-
-		&__description {
-			font-size: $u-action-sheet-description-font-size;
-			color: $u-tips-color;
-			margin: $u-action-sheet-description-margin;
-			text-align: center;
-		}
-
-		&__item-wrap {
-
-			&__item {
-				padding: $u-action-sheet-item-wrap-item-padding;
-				@include flex;
-				align-items: center;
-				justify-content: center;
-				flex-direction: column;
-
-				&__name {
-					font-size: $u-action-sheet-item-wrap-name-font-size;
-					color: $u-main-color;
-					text-align: center;
-				}
-
-				&__subname {
-					font-size: $u-action-sheet-item-wrap-subname-font-size;
-					color: $u-action-sheet-item-wrap-subname-color;
-					margin-top: $u-action-sheet-item-wrap-subname-margin-top;
-					text-align: center;
-				}
-			}
-		}
-
-		&__cancel-text {
-			font-size: $u-action-sheet-cancel-text-font-size;
-			color: $u-action-sheet-cancel-text-color;
-			text-align: center;
-			padding: $u-action-sheet-cancel-text-font-size;
-		}
-
-		&--hover {
-			background-color: $u-action-sheet-cancel-text-hover-background-color;
-		}
-	}
-</style>

+ 0 - 59
uni_modules/uview-ui/components/u-album/props.js

@@ -1,59 +0,0 @@
-export default {
-    props: {
-        // 图片地址,Array<String>|Array<Object>形式
-        urls: {
-            type: Array,
-            default: uni.$u.props.album.urls
-        },
-        // 指定从数组的对象元素中读取哪个属性作为图片地址
-        keyName: {
-            type: String,
-            default: uni.$u.props.album.keyName
-        },
-        // 单图时,图片长边的长度
-        singleSize: {
-            type: [String, Number],
-            default: uni.$u.props.album.singleSize
-        },
-        // 多图时,图片边长
-        multipleSize: {
-            type: [String, Number],
-            default: uni.$u.props.album.multipleSize
-        },
-        // 多图时,图片水平和垂直之间的间隔
-        space: {
-            type: [String, Number],
-            default: uni.$u.props.album.space
-        },
-        // 单图时,图片缩放裁剪的模式
-        singleMode: {
-            type: String,
-            default: uni.$u.props.album.singleMode
-        },
-        // 多图时,图片缩放裁剪的模式
-        multipleMode: {
-            type: String,
-            default: uni.$u.props.album.multipleMode
-        },
-        // 最多展示的图片数量,超出时最后一个位置将会显示剩余图片数量
-        maxCount: {
-            type: [String, Number],
-            default: uni.$u.props.album.maxCount
-        },
-        // 是否可以预览图片
-        previewFullImage: {
-            type: Boolean,
-            default: uni.$u.props.album.previewFullImage
-        },
-        // 每行展示图片数量,如设置,singleSize和multipleSize将会无效
-        rowCount: {
-            type: [String, Number],
-            default: uni.$u.props.album.rowCount
-        },
-        // 超出maxCount时是否显示查看更多的提示
-        showMore: {
-            type: Boolean,
-            default: uni.$u.props.album.showMore
-        }
-    }
-}

+ 0 - 259
uni_modules/uview-ui/components/u-album/u-album.vue

@@ -1,259 +0,0 @@
-<template>
-    <view class="u-album">
-        <view
-            class="u-album__row"
-            ref="u-album__row"
-            v-for="(arr, index) in showUrls"
-            :forComputedUse="albumWidth"
-            :key="index"
-        >
-            <view
-                class="u-album__row__wrapper"
-                v-for="(item, index1) in arr"
-                :key="index1"
-                :style="[imageStyle(index + 1, index1 + 1)]"
-                @tap="previewFullImage ? onPreviewTap(getSrc(item)) : ''"
-            >
-                <image
-                    :src="getSrc(item)"
-                    :mode="
-                        urls.length === 1
-                            ? imageHeight > 0
-                                ? singleMode
-                                : 'widthFix'
-                            : multipleMode
-                    "
-                    :style="[
-                        {
-                            width: imageWidth,
-                            height: imageHeight
-                        }
-                    ]"
-                ></image>
-                <view
-                    v-if="
-                        showMore &&
-                        urls.length > rowCount * showUrls.length &&
-                        index === showUrls.length - 1 &&
-                        index1 === showUrls[showUrls.length - 1].length - 1
-                    "
-                    class="u-album__row__wrapper__text"
-                >
-                    <u--text
-                        :text="`+${urls.length - maxCount}`"
-                        color="#fff"
-                        :size="multipleSize * 0.3"
-                        align="center"
-                        customStyle="justify-content: center"
-                    ></u--text>
-                </view>
-            </view>
-        </view>
-    </view>
-</template>
-
-<script>
-import props from './props.js'
-// #ifdef APP-NVUE
-// 由于weex为阿里的KPI业绩考核的产物,所以不支持百分比单位,这里需要通过dom查询组件的宽度
-const dom = uni.requireNativePlugin('dom')
-// #endif
-
-/**
- * Album 相册
- * @description 本组件提供一个类似相册的功能,让开发者开发起来更加得心应手。减少重复的模板代码
- * @tutorial https://www.uviewui.com/components/album.html
- *
- * @property {Array}           urls             图片地址列表 Array<String>|Array<Object>形式
- * @property {String}          keyName          指定从数组的对象元素中读取哪个属性作为图片地址
- * @property {String | Number} singleSize       单图时,图片长边的长度  (默认 180 )
- * @property {String | Number} multipleSize     多图时,图片边长 (默认 70 )
- * @property {String | Number} space            多图时,图片水平和垂直之间的间隔 (默认 6 )
- * @property {String}          singleMode       单图时,图片缩放裁剪的模式 (默认 'scaleToFill' )
- * @property {String}          multipleMode     多图时,图片缩放裁剪的模式 (默认 'aspectFill' )
- * @property {String | Number} maxCount         取消按钮的提示文字 (默认 9 )
- * @property {Boolean}         previewFullImage 是否可以预览图片 (默认 true )
- * @property {String | Number} rowCount         每行展示图片数量,如设置,singleSize和multipleSize将会无效	(默认 3 )
- * @property {Boolean}         showMore         超出maxCount时是否显示查看更多的提示 (默认 true )
- *
- * @event    {Function}        albumWidth       某些特殊的情况下,需要让文字与相册的宽度相等,这里事件的形式对外发送  (回调参数 width )
- * @example <u-album :urls="urls2" @albumWidth="width => albumWidth = width" multipleSize="68" ></u-album>
- */
-export default {
-    name: 'u-album',
-    mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
-    data() {
-        return {
-            // 单图的宽度
-            singleWidth: 0,
-            // 单图的高度
-            singleHeight: 0,
-            // 单图时,如果无法获取图片的尺寸信息,让图片宽度默认为容器的一定百分比
-            singlePercent: 0.6
-        }
-    },
-    watch: {
-        urls: {
-            immediate: true,
-            handler(newVal) {
-                if (newVal.length === 1) {
-                    this.getImageRect()
-                }
-            }
-        }
-    },
-    computed: {
-        imageStyle() {
-            return (index1, index2) => {
-                const { space, rowCount, multipleSize, urls } = this,
-                    { addUnit, addStyle } = uni.$u,
-                    rowLen = this.showUrls.length,
-                    allLen = this.urls.length
-                const style = {
-                    marginRight: addUnit(space),
-                    marginBottom: addUnit(space)
-                }
-                // 如果为最后一行,则每个图片都无需下边框
-                if (index1 === rowLen) style.marginBottom = 0
-                // 每行的最右边一张和总长度的最后一张无需右边框
-                if (
-                    index2 === rowCount ||
-                    (index1 === rowLen &&
-                        index2 === this.showUrls[index1 - 1].length)
-                )
-                    style.marginRight = 0
-                return style
-            }
-        },
-        // 将数组划分为二维数组
-        showUrls() {
-            const arr = []
-            this.urls.map((item, index) => {
-                // 限制最大展示数量
-                if (index + 1 <= this.maxCount) {
-                    // 计算该元素为第几个素组内
-                    const itemIndex = Math.floor(index / this.rowCount)
-                    // 判断对应的索引是否存在
-                    if (!arr[itemIndex]) {
-                        arr[itemIndex] = []
-                    }
-                    arr[itemIndex].push(item)
-                }
-            })
-            return arr
-        },
-        imageWidth() {
-            return uni.$u.addUnit(
-                this.urls.length === 1 ? this.singleWidth : this.multipleSize
-            )
-        },
-        imageHeight() {
-            return uni.$u.addUnit(
-                this.urls.length === 1 ? this.singleHeight : this.multipleSize
-            )
-        },
-        // 此变量无实际用途,仅仅是为了利用computed特性,让其在urls长度等变化时,重新计算图片的宽度
-        // 因为用户在某些特殊的情况下,需要让文字与相册的宽度相等,所以这里事件的形式对外发送
-        albumWidth() {
-            let width = 0
-            if (this.urls.length === 1) {
-                width = this.singleWidth
-            } else {
-                width =
-                    this.showUrls[0].length * this.multipleSize +
-                    this.space * (this.showUrls[0].length - 1)
-            }
-            this.$emit('albumWidth', width)
-            return width
-        }
-    },
-    methods: {
-        // 预览图片
-        onPreviewTap(url) {
-            const urls = this.urls.map((item) => {
-                return this.getSrc(item)
-            })
-            uni.previewImage({
-                current: url,
-                urls
-            })
-        },
-        // 获取图片的路径
-        getSrc(item) {
-            return uni.$u.test.object(item)
-                ? (this.keyName && item[this.keyName]) || item.src
-                : item
-        },
-        // 单图时,获取图片的尺寸
-        // 在小程序中,需要将网络图片的的域名添加到小程序的download域名才可能获取尺寸
-        // 在没有添加的情况下,让单图宽度默认为盒子的一定宽度(singlePercent)
-        getImageRect() {
-            const src = this.getSrc(this.urls[0])
-            uni.getImageInfo({
-                src,
-                success: (res) => {
-                    // 判断图片横向还是竖向展示方式
-                    const isHorizotal = res.width >= res.height
-                    this.singleWidth = isHorizotal
-                        ? this.singleSize
-                        : (res.width / res.height) * this.singleSize
-                    this.singleHeight = !isHorizotal
-                        ? this.singleSize
-                        : (res.height / res.width) * this.singleWidth
-                },
-                fail: () => {
-                    this.getComponentWidth()
-                }
-            })
-        },
-        // 获取组件的宽度
-        async getComponentWidth() {
-            // 延时一定时间,以获取dom尺寸
-            await uni.$u.sleep(30)
-            // #ifndef APP-NVUE
-            this.$uGetRect('.u-album__row').then((size) => {
-                this.singleWidth = size.width * this.singlePercent
-            })
-            // #endif
-
-            // #ifdef APP-NVUE
-            // 这里ref="u-album__row"所在的标签为通过for循环出来,导致this.$refs['u-album__row']是一个数组
-            const ref = this.$refs['u-album__row'][0]
-            ref &&
-                dom.getComponentRect(ref, (res) => {
-                    this.singleWidth = res.size.width * this.singlePercent
-                })
-            // #endif
-        }
-    }
-}
-</script>
-
-<style lang="scss" scoped>
-@import '../../libs/css/components.scss';
-
-.u-album {
-    @include flex(column);
-
-    &__row {
-        @include flex(row);
-        flex-wrap: wrap;
-
-        &__wrapper {
-            position: relative;
-
-            &__text {
-                position: absolute;
-                top: 0;
-                left: 0;
-                right: 0;
-                bottom: 0;
-                background-color: rgba(0, 0, 0, 0.3);
-                @include flex(row);
-                justify-content: center;
-                align-items: center;
-            }
-        }
-    }
-}
-</style>

+ 0 - 44
uni_modules/uview-ui/components/u-alert/props.js

@@ -1,44 +0,0 @@
-export default {
-    props: {
-        // 显示文字
-        title: {
-            type: String,
-            default: uni.$u.props.alert.title
-        },
-        // 主题,success/warning/info/error
-        type: {
-            type: String,
-            default: uni.$u.props.alert.type
-        },
-        // 辅助性文字
-        description: {
-            type: String,
-            default: uni.$u.props.alert.description
-        },
-        // 是否可关闭
-        closable: {
-            type: Boolean,
-            default: uni.$u.props.alert.closable
-        },
-        // 是否显示图标
-        showIcon: {
-            type: Boolean,
-            default: uni.$u.props.alert.showIcon
-        },
-        // 浅或深色调,light-浅色,dark-深色
-        effect: {
-            type: String,
-            default: uni.$u.props.alert.effect
-        },
-        // 文字是否居中
-        center: {
-            type: Boolean,
-            default: uni.$u.props.alert.center
-        },
-        // 字体大小
-        fontSize: {
-            type: [String, Number],
-            default: uni.$u.props.alert.fontSize
-        }
-    }
-}

+ 0 - 243
uni_modules/uview-ui/components/u-alert/u-alert.vue

@@ -1,243 +0,0 @@
-<template>
-	<u-transition
-	    mode="fade"
-	    :show="show"
-	>
-		<view
-		    class="u-alert"
-		    :class="[`u-alert--${type}--${effect}`]"
-		    @tap.stop="clickHandler"
-		    :style="[$u.addStyle(customStyle)]"
-		>
-			<view
-			    class="u-alert__icon"
-			    v-if="showIcon"
-			>
-				<u-icon
-				    :name="iconName"
-				    size="18"
-				    :color="iconColor"
-				></u-icon>
-			</view>
-			<view
-			    class="u-alert__content"
-			    :style="[{
-					paddingRight: closable ? '20px' : 0
-				}]"
-			>
-				<text
-				    class="u-alert__content__title"
-				    v-if="title"
-					:style="[{
-						fontSize: $u.addUnit(fontSize),
-						textAlign: center ? 'center' : 'left'
-					}]"
-				    :class="[effect === 'dark' ? 'u-alert__text--dark' : `u-alert__text--${type}--light`]"
-				>{{ title }}</text>
-				<text
-				    class="u-alert__content__desc"
-					v-if="description"
-					:style="[{
-						fontSize: $u.addUnit(fontSize),
-						textAlign: center ? 'center' : 'left'
-					}]"
-				    :class="[effect === 'dark' ? 'u-alert__text--dark' : `u-alert__text--${type}--light`]"
-				>{{ description }}</text>
-			</view>
-			<view
-			    class="u-alert__close"
-			    v-if="closable"
-			    @tap.stop="closeHandler"
-			>
-				<u-icon
-				    name="close"
-				    :color="iconColor"
-				    size="15"
-				></u-icon>
-			</view>
-		</view>
-	</u-transition>
-</template>
-
-<script>
-	import props from './props.js';
-	/**
-	 * Alert  警告提示
-	 * @description 警告提示,展现需要关注的信息。
-	 * @tutorial https://www.uviewui.com/components/alertTips.html
-	 * 
-	 * @property {String}			title       显示的文字 
-	 * @property {String}			type        使用预设的颜色  (默认 'warning' )
-	 * @property {String}			description 辅助性文字,颜色比title浅一点,字号也小一点,可选  
-	 * @property {Boolean}			closable    关闭按钮(默认为叉号icon图标)  (默认 false )
-	 * @property {Boolean}			showIcon    是否显示左边的辅助图标   ( 默认 false )
-	 * @property {String}			effect      多图时,图片缩放裁剪的模式  (默认 'light' )
-	 * @property {Boolean}			center		文字是否居中  (默认 false )
-	 * @property {String | Number}	fontSize    字体大小  (默认 14 )
-	 * @property {Object}			customStyle	定义需要用到的外部样式
-	 * @event    {Function}        click       点击组件时触发
-	 * @example  <u-alert :title="title"  type = "warning" :closable="closable" :description = "description"></u-alert>
-	 */
-	export default {
-		name: 'u-alert',
-		mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
-		data() {
-			return {
-				show: true
-			}
-		},
-		computed: {
-			iconColor() {
-				return this.effect === 'light' ? this.type : '#fff'
-			},
-			// 不同主题对应不同的图标
-			iconName() {
-				switch (this.type) {
-					case 'success':
-						return 'checkmark-circle-fill';
-						break;
-					case 'error':
-						return 'close-circle-fill';
-						break;
-					case 'warning':
-						return 'error-circle-fill';
-						break;
-					case 'info':
-						return 'info-circle-fill';
-						break;
-					case 'primary':
-						return 'more-circle-fill';
-						break;
-					default: 
-						return 'error-circle-fill';
-				}
-			}
-		},
-		methods: {
-			// 点击内容
-			clickHandler() {
-				this.$emit('click')
-			},
-			// 点击关闭按钮
-			closeHandler() {
-				this.show = false
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	@import "../../libs/css/components.scss";
-
-	.u-alert {
-		position: relative;
-		background-color: $u-primary;
-		padding: 8px 10px;
-		@include flex(row);
-		align-items: center;
-		border-top-left-radius: 4px;
-		border-top-right-radius: 4px;
-		border-bottom-left-radius: 4px;
-		border-bottom-right-radius: 4px;
-
-		&--primary--dark {
-			background-color: $u-primary;
-		}
-
-		&--primary--light {
-			background-color: #ecf5ff;
-		}
-
-		&--error--dark {
-			background-color: $u-error;
-		}
-
-		&--error--light {
-			background-color: #FEF0F0;
-		}
-
-		&--success--dark {
-			background-color: $u-success;
-		}
-
-		&--success--light {
-			background-color: #f5fff0;
-		}
-
-		&--warning--dark {
-			background-color: $u-warning;
-		}
-
-		&--warning--light {
-			background-color: #FDF6EC;
-		}
-
-		&--info--dark {
-			background-color: $u-info;
-		}
-
-		&--info--light {
-			background-color: #f4f4f5;
-		}
-
-		&__icon {
-			margin-right: 5px;
-		}
-
-		&__content {
-			@include flex(column);
-			flex: 1;
-
-			&__title {
-				color: $u-main-color;
-				font-size: 14px;
-				font-weight: bold;
-				color: #fff;
-				margin-bottom: 2px;
-			}
-
-			&__desc {
-				color: $u-main-color;
-				font-size: 14px;
-				flex-wrap: wrap;
-				color: #fff;
-			}
-		}
-
-		&__title--dark,
-		&__desc--dark {
-			color: #FFFFFF;
-		}
-
-		&__text--primary--light,
-		&__text--primary--light {
-			color: $u-primary;
-		}
-
-		&__text--success--light,
-		&__text--success--light {
-			color: $u-success;
-		}
-
-		&__text--warning--light,
-		&__text--warning--light {
-			color: $u-warning;
-		}
-
-		&__text--error--light,
-		&__text--error--light {
-			color: $u-error;
-		}
-
-		&__text--info--light,
-		&__text--info--light {
-			color: $u-info;
-		}
-
-		&__close {
-			position: absolute;
-			top: 11px;
-			right: 10px;
-		}
-	}
-</style>

+ 0 - 52
uni_modules/uview-ui/components/u-avatar-group/props.js

@@ -1,52 +0,0 @@
-export default {
-    props: {
-        // 头像图片组
-        urls: {
-            type: Array,
-            default: uni.$u.props.avatarGroup.urls
-        },
-        // 最多展示的头像数量
-        maxCount: {
-            type: [String, Number],
-            default: uni.$u.props.avatarGroup.maxCount
-        },
-        // 头像形状
-        shape: {
-            type: String,
-            default: uni.$u.props.avatarGroup.shape
-        },
-        // 图片裁剪模式
-        mode: {
-            type: String,
-            default: uni.$u.props.avatarGroup.mode
-        },
-        // 超出maxCount时是否显示查看更多的提示
-        showMore: {
-            type: Boolean,
-            default: uni.$u.props.avatarGroup.showMore
-        },
-        // 头像大小
-        size: {
-            type: [String, Number],
-            default: uni.$u.props.avatarGroup.size
-        },
-        // 指定从数组的对象元素中读取哪个属性作为图片地址
-        keyName: {
-            type: String,
-            default: uni.$u.props.avatarGroup.keyName
-        },
-		// 头像之间的遮挡比例
-        gap: {
-            type: [String, Number],
-            validator(value) {
-                return value >= 0 && value <= 1
-            },
-            default: uni.$u.props.avatarGroup.gap
-        },
-		// 需额外显示的值
-		extraValue: {
-			type: [Number, String],
-			default: uni.$u.props.avatarGroup.extraValue
-		}
-    }
-}

+ 0 - 103
uni_modules/uview-ui/components/u-avatar-group/u-avatar-group.vue

@@ -1,103 +0,0 @@
-<template>
-	<view class="u-avatar-group">
-		<view
-		    class="u-avatar-group__item"
-		    v-for="(item, index) in showUrl"
-		    :key="index"
-		    :style="{
-				marginLeft: index === 0 ? 0 : $u.addUnit(-size * gap)
-			}"
-		>
-			<u-avatar
-			    :size="size"
-			    :shape="shape"
-			    :mode="mode"
-			    :src="$u.test.object(item) ? keyName && item[keyName] || item.url : item"
-			></u-avatar>
-			<view
-			    class="u-avatar-group__item__show-more"
-			    v-if="showMore && index === showUrl.length - 1 && (urls.length > maxCount || extraValue > 0)"
-				@tap="clickHandler"
-			>
-				<u--text
-				    color="#ffffff"
-				    :size="size * 0.4"
-				    :text="`+${extraValue || urls.length - showUrl.length}`"
-					align="center"
-					customStyle="justify-content: center"
-				></u--text>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import props from './props.js';
-	/**
-	 * AvatarGroup  头像组
-	 * @description 本组件一般用于展示头像的地方,如个人中心,或者评论列表页的用户头像展示等场所。
-	 * @tutorial https://www.uviewui.com/components/avatar.html
-	 * 
-	 * @property {Array}           urls     头像图片组 (默认 [] )
-	 * @property {String | Number} maxCount 最多展示的头像数量 ( 默认 5 )
-	 * @property {String}          shape    头像形状( 'circle' (默认) | 'square' )
-	 * @property {String}          mode     图片裁剪模式(默认 'scaleToFill' )
-	 * @property {Boolean}         showMore 超出maxCount时是否显示查看更多的提示 (默认 true )
-	 * @property {String | Number} size      头像大小 (默认 40 )
-	 * @property {String}          keyName  指定从数组的对象元素中读取哪个属性作为图片地址 
-	 * @property {String | Number} gap      头像之间的遮挡比例(0.4代表遮挡40%)  (默认 0.5 )
-	 * @property {String | Number} extraValue  需额外显示的值
-	 * @event    {Function}        showMore 头像组更多点击
-	 * @example  <u-avatar-group:urls="urls" size="35" gap="0.4" ></u-avatar-group:urls=>
-	 */
-	export default {
-		name: 'u-avatar-group',
-		mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
-		data() {
-			return {
-
-			}
-		},
-		computed: {
-			showUrl() {
-				return this.urls.slice(0, this.maxCount)
-			}
-		},
-		methods: {
-			clickHandler() {
-				this.$emit('showMore')
-			}
-		},
-	}
-</script>
-
-<style lang="scss" scoped>
-	@import "../../libs/css/components.scss";
-
-	.u-avatar-group {
-		@include flex;
-
-		&__item {
-			margin-left: -10px;
-			position: relative;
-
-			&--no-indent {
-				// 如果你想质疑作者不会使用:first-child,说明你太年轻,因为nvue不支持
-				margin-left: 0;
-			}
-
-			&__show-more {
-				position: absolute;
-				top: 0;
-				bottom: 0;
-				left: 0;
-				right: 0;
-				background-color: rgba(0, 0, 0, 0.3);
-				@include flex;
-				align-items: center;
-				justify-content: center;
-				border-radius: 100px;
-			}
-		}
-	}
-</style>

+ 0 - 78
uni_modules/uview-ui/components/u-avatar/props.js

@@ -1,78 +0,0 @@
-export default {
-    props: {
-        // 头像图片路径(不能为相对路径)
-        src: {
-            type: String,
-            default: uni.$u.props.avatar.src
-        },
-        // 头像形状,circle-圆形,square-方形
-        shape: {
-            type: String,
-            default: uni.$u.props.avatar.shape
-        },
-        // 头像尺寸
-        size: {
-            type: [String, Number],
-            default: uni.$u.props.avatar.size
-        },
-        // 裁剪模式
-        mode: {
-            type: String,
-            default: uni.$u.props.avatar.mode
-        },
-        // 显示的文字
-        text: {
-            type: String,
-            default: uni.$u.props.avatar.text
-        },
-        // 背景色
-        bgColor: {
-            type: String,
-            default: uni.$u.props.avatar.bgColor
-        },
-        // 文字颜色
-        color: {
-            type: String,
-            default: uni.$u.props.avatar.color
-        },
-        // 文字大小
-        fontSize: {
-            type: [String, Number],
-            default: uni.$u.props.avatar.fontSize
-        },
-        // 显示的图标
-        icon: {
-            type: String,
-            default: uni.$u.props.avatar.icon
-        },
-        // 显示小程序头像,只对百度,微信,QQ小程序有效
-        mpAvatar: {
-            type: Boolean,
-            default: uni.$u.props.avatar.mpAvatar
-        },
-        // 是否使用随机背景色
-        randomBgColor: {
-            type: Boolean,
-            default: uni.$u.props.avatar.randomBgColor
-        },
-        // 加载失败的默认头像(组件有内置默认图片)
-        defaultUrl: {
-            type: String,
-            default: uni.$u.props.avatar.defaultUrl
-        },
-        // 如果配置了randomBgColor为true,且配置了此值,则从默认的背景色数组中取出对应索引的颜色值,取值0-19之间
-        colorIndex: {
-            type: [String, Number],
-            // 校验参数规则,索引在0-19之间
-            validator(n) {
-                return uni.$u.test.range(n, [0, 19]) || n === ''
-            },
-            default: uni.$u.props.avatar.colorIndex
-        },
-        // 组件标识符
-        name: {
-            type: String,
-            default: uni.$u.props.avatar.name
-        }
-    }
-}

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 58
uni_modules/uview-ui/components/u-avatar/u-avatar.vue


+ 0 - 54
uni_modules/uview-ui/components/u-back-top/props.js

@@ -1,54 +0,0 @@
-export default {
-    props: {
-        // 返回顶部的形状,circle-圆形,square-方形
-        mode: {
-            type: String,
-            default: uni.$u.props.backtop.mode
-        },
-        // 自定义图标
-        icon: {
-            type: String,
-            default: uni.$u.props.backtop.icon
-        },
-        // 提示文字
-        text: {
-            type: String,
-            default: uni.$u.props.backtop.text
-        },
-        // 返回顶部滚动时间
-        duration: {
-            type: [String, Number],
-            default: uni.$u.props.backtop.duration
-        },
-        // 滚动距离
-        scrollTop: {
-            type: [String, Number],
-            default: uni.$u.props.backtop.scrollTop
-        },
-        // 距离顶部多少距离显示,单位px
-        top: {
-            type: [String, Number],
-            default: uni.$u.props.backtop.top
-        },
-        // 返回顶部按钮到底部的距离,单位px
-        bottom: {
-            type: [String, Number],
-            default: uni.$u.props.backtop.bottom
-        },
-        // 返回顶部按钮到右边的距离,单位px
-        right: {
-            type: [String, Number],
-            default: uni.$u.props.backtop.right
-        },
-        // 层级
-        zIndex: {
-            type: [String, Number],
-            default: uni.$u.props.backtop.zIndex
-        },
-        // 图标的样式,对象形式
-        iconStyle: {
-            type: Object,
-            default: uni.$u.props.backtop.iconStyle
-        }
-    }
-}

+ 0 - 129
uni_modules/uview-ui/components/u-back-top/u-back-top.vue

@@ -1,129 +0,0 @@
-<template>
-	<u-transition
-	    mode="fade"
-	    :customStyle="backTopStyle"
-	    :show="show"
-	>
-		<view
-		    class="u-back-top"
-			:style="[contentStyle]"
-		    v-if="!$slots.default && !$slots.$default"
-			@click="backToTop"
-		>
-			<u-icon
-			    :name="icon"
-			    :custom-style="iconStyle"
-			></u-icon>
-			<text
-			    v-if="text"
-			    class="u-back-top__text"
-			>{{text}}</text>
-		</view>
-		<slot v-else />
-	</u-transition>
-</template>
-
-<script>
-	import props from './props.js';
-	// #ifdef APP-NVUE
-	const dom = weex.requireModule('dom')
-	// #endif
-	/**
-	 * backTop 返回顶部
-	 * @description 本组件一个用于长页面,滑动一定距离后,出现返回顶部按钮,方便快速返回顶部的场景。
-	 * @tutorial https://uviewui.com/components/backTop.html
-	 * 
-	 * @property {String}			mode  		返回顶部的形状,circle-圆形,square-方形 (默认 'circle' )
-	 * @property {String} 			icon 		自定义图标 (默认 'arrow-upward' ) 见官方文档示例
-	 * @property {String} 			text 		提示文字 
-	 * @property {String | Number}  duration	返回顶部滚动时间 (默认 100)
-	 * @property {String | Number}  scrollTop	滚动距离 (默认 0 )
-	 * @property {String | Number}  top  		距离顶部多少距离显示,单位px (默认 400 )
-	 * @property {String | Number}  bottom  	返回顶部按钮到底部的距离,单位px (默认 100 )
-	 * @property {String | Number}  right  		返回顶部按钮到右边的距离,单位px (默认 20 )
-	 * @property {String | Number}  zIndex 		层级   (默认 9 )
-	 * @property {Object<Object>}  	iconStyle 	图标的样式,对象形式   (默认 {color: '#909399',fontSize: '19px'})
-	 * @property {Object}			customStyle	定义需要用到的外部样式
-	 * 
-	 * @example <u-back-top :scrollTop="scrollTop"></u-back-top>
-	 */
-	export default {
-		name: 'u-back-top',
-		mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
-		computed: {
-			backTopStyle() {
-				// 动画组件样式
-				const style = {
-					bottom: uni.$u.addUnit(this.bottom),
-					right: uni.$u.addUnit(this.right),
-					width: '40px',
-					height: '40px',
-					position: 'fixed',
-					zIndex: 10,
-				}
-				return style
-			},
-			show() {
-				return uni.$u.getPx(this.scrollTop) > uni.$u.getPx(this.top)
-			},
-			contentStyle() {
-				const style = {}
-				let radius = 0
-				// 是否圆形
-				if(this.mode === 'circle') {
-					radius = '100px'
-				} else {
-					radius = '4px'
-				}
-				// 为了兼容安卓nvue,只能这么分开写
-				style.borderTopLeftRadius = radius
-				style.borderTopRightRadius = radius
-				style.borderBottomLeftRadius = radius
-				style.borderBottomRightRadius = radius
-				return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle))
-			}
-		},
-		methods: {
-			backToTop() {
-				// #ifdef APP-NVUE
-				if (!this.$parent.$refs['u-back-top']) {
-					uni.$u.error(`nvue页面需要给页面最外层元素设置"ref='u-back-top'`)
-				}
-				dom.scrollToElement(this.$parent.$refs['u-back-top'], {
-					offset: 0
-				})
-				// #endif
-				
-				// #ifndef APP-NVUE
-				uni.pageScrollTo({
-					scrollTop: 0,
-					duration: this.duration
-				});
-				// #endif
-				this.$emit('click')
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	@import '../../libs/css/components.scss';
-     $u-back-top-flex:1 !default;
-     $u-back-top-height:100% !default;
-     $u-back-top-background-color:#E1E1E1 !default;
-     $u-back-top-tips-font-size:12px !default;
-	.u-back-top {
-		@include flex;
-		flex-direction: column;
-		align-items: center;
-		flex:$u-back-top-flex;
-		height: $u-back-top-height;
-		justify-content: center;
-		background-color: $u-back-top-background-color;
-
-		&__tips {
-			font-size:$u-back-top-tips-font-size;
-			transform: scale(0.8);
-		}
-	}
-</style>

+ 0 - 72
uni_modules/uview-ui/components/u-badge/props.js

@@ -1,72 +0,0 @@
-export default {
-    props: {
-        // 是否显示圆点
-        isDot: {
-            type: Boolean,
-            default: uni.$u.props.badge.isDot
-        },
-        // 显示的内容
-        value: {
-            type: [Number, String],
-            default: uni.$u.props.badge.value
-        },
-        // 是否显示
-        show: {
-            type: Boolean,
-            default: uni.$u.props.badge.show
-        },
-        // 最大值,超过最大值会显示 '{max}+'
-        max: {
-            type: [Number, String],
-            default: uni.$u.props.badge.max
-        },
-        // 主题类型,error|warning|success|primary
-        type: {
-            type: String,
-            default: uni.$u.props.badge.type
-        },
-        // 当数值为 0 时,是否展示 Badge
-        showZero: {
-            type: Boolean,
-            default: uni.$u.props.badge.showZero
-        },
-        // 背景颜色,优先级比type高,如设置,type参数会失效
-        bgColor: {
-            type: [String, null],
-            default: uni.$u.props.badge.bgColor
-        },
-        // 字体颜色
-        color: {
-            type: [String, null],
-            default: uni.$u.props.badge.color
-        },
-        // 徽标形状,circle-四角均为圆角,horn-左下角为直角
-        shape: {
-            type: String,
-            default: uni.$u.props.badge.shape
-        },
-        // 设置数字的显示方式,overflow|ellipsis|limit
-        // overflow会根据max字段判断,超出显示`${max}+`
-        // ellipsis会根据max判断,超出显示`${max}...`
-        // limit会依据1000作为判断条件,超出1000,显示`${value/1000}K`,比如2.2k、3.34w,最多保留2位小数
-        numberType: {
-            type: String,
-            default: uni.$u.props.badge.numberType
-        },
-        // 设置badge的位置偏移,格式为 [x, y],也即设置的为top和right的值,absolute为true时有效
-        offset: {
-            type: Array,
-            default: uni.$u.props.badge.offset
-        },
-        // 是否反转背景和字体颜色
-        inverted: {
-            type: Boolean,
-            default: uni.$u.props.badge.inverted
-        },
-        // 是否绝对定位
-        absolute: {
-            type: Boolean,
-            default: uni.$u.props.badge.absolute
-        }
-    }
-}

+ 0 - 171
uni_modules/uview-ui/components/u-badge/u-badge.vue

@@ -1,171 +0,0 @@
-<template>
-	<text
-		v-if="show && ((Number(value) === 0 ? showZero : true) || isDot)"
-		:class="[isDot ? 'u-badge--dot' : 'u-badge--not-dot', inverted && 'u-badge--inverted', shape === 'horn' && 'u-badge--horn', `u-badge--${type}${inverted ? '--inverted' : ''}`]"
-		:style="[$u.addStyle(customStyle), badgeStyle]"
-		class="u-badge"
-	>{{ isDot ? '' :showValue }}</text>
-</template>
-
-<script>
-	import props from './props.js';
-	/**
-	 * badge 徽标数
-	 * @description 该组件一般用于图标右上角显示未读的消息数量,提示用户点击,有圆点和圆包含文字两种形式。
-	 * @tutorial https://uviewui.com/components/badge.html
-	 * 
-	 * @property {Boolean} 			isDot 		是否显示圆点 (默认 false )
-	 * @property {String | Number} 	value 		显示的内容
-	 * @property {Boolean} 			show 		是否显示 (默认 true )
-	 * @property {String | Number} 	max 		最大值,超过最大值会显示 '{max}+'  (默认999)
-	 * @property {String} 			type 		主题类型,error|warning|success|primary (默认 'error' )
-	 * @property {Boolean} 			showZero	当数值为 0 时,是否展示 Badge (默认 false )
-	 * @property {String} 			bgColor 	背景颜色,优先级比type高,如设置,type参数会失效
-	 * @property {String} 			color 		字体颜色 (默认 '#ffffff' )
-	 * @property {String} 			shape 		徽标形状,circle-四角均为圆角,horn-左下角为直角 (默认 'circle' )
-	 * @property {String} 			numberType	设置数字的显示方式,overflow|ellipsis|limit  (默认 'overflow' )
-	 * @property {Array}} 			offset		设置badge的位置偏移,格式为 [x, y],也即设置的为top和right的值,absolute为true时有效
-	 * @property {Boolean} 			inverted	是否反转背景和字体颜色(默认 false )
-	 * @property {Boolean} 			absolute	是否绝对定位(默认 false )
-	 * @property {Object}			customStyle	定义需要用到的外部样式
-	 * @example <u-badge :type="type" :count="count"></u-badge>
-	 */
-	export default {
-		name: 'u-badge',
-		mixins: [uni.$u.mpMixin, props, uni.$u.mixin],
-		computed: {
-			// 是否将badge中心与父组件右上角重合
-			boxStyle() {
-				let style = {};
-				return style;
-			},
-			// 整个组件的样式
-			badgeStyle() {
-				const style = {}
-				if(this.color) {
-					style.color = this.color
-				}
-				if (this.bgColor && !this.inverted) {
-					style.backgroundColor = this.bgColor
-				}
-				if (this.absolute) {
-					style.position = 'absolute'
-					// 如果有设置offset参数
-					if(this.offset.length) {
-						// top和right分为为offset的第一个和第二个值,如果没有第二个值,则right等于top
-						const top = this.offset[0]
-						const right = this.offset[1] || top
-						style.top = uni.$u.addUnit(top)
-						style.right = uni.$u.addUnit(right)
-					}
-				}
-				return style
-			},
-			showValue() {
-				switch (this.numberType) {
-					case "overflow":
-						return Number(this.value) > Number(this.max) ? this.max + "+" : this.value
-						break;
-					case "ellipsis":
-						return Number(this.value) > Number(this.max) ? "..." : this.value
-						break;
-					case "limit":
-						return Number(this.value) > 999 ? Number(this.value) >= 9999 ?
-							Math.floor(this.value / 1e4 * 100) / 100 + "w" : Math.floor(this.value /
-								1e3 * 100) / 100 + "k" : this.value
-						break;
-					default:
-						return Number(this.value)
-				}
-			},
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	@import "../../libs/css/components.scss";
-
-	$u-badge-primary: $u-primary !default;
-	$u-badge-error: $u-error !default;
-	$u-badge-success: $u-success !default;
-	$u-badge-info: $u-info !default;
-	$u-badge-warning: $u-warning !default;
-	$u-badge-dot-radius: 100px !default;
-	$u-badge-dot-size: 8px !default;
-	$u-badge-dot-right: 4px !default;
-	$u-badge-dot-top: 0 !default;
-	$u-badge-text-font-size: 11px !default;
-	$u-badge-text-right: 10px !default;
-	$u-badge-text-padding: 2px 5px !default;
-	$u-badge-text-align: center !default;
-	$u-badge-text-color: #FFFFFF !default;
-
-	.u-badge {
-		border-top-right-radius: $u-badge-dot-radius;
-		border-top-left-radius: $u-badge-dot-radius;
-		border-bottom-left-radius: $u-badge-dot-radius;
-		border-bottom-right-radius: $u-badge-dot-radius;
-		@include flex;
-		line-height: $u-badge-text-font-size;
-		text-align: $u-badge-text-align;
-		font-size: $u-badge-text-font-size;
-		color: $u-badge-text-color;
-
-		&--dot {
-			height: $u-badge-dot-size;
-			width: $u-badge-dot-size;
-		}
-		
-		&--inverted {
-			font-size: 13px;
-		}
-		
-		&--not-dot {
-			padding: $u-badge-text-padding;
-		}
-
-		&--horn {
-			border-bottom-left-radius: 0;
-		}
-
-		&--primary {
-			background-color: $u-badge-primary;
-		}
-		
-		&--primary--inverted {
-			color: $u-badge-primary;
-		}
-
-		&--error {
-			background-color: $u-badge-error;
-		}
-		
-		&--error--inverted {
-			color: $u-badge-error;
-		}
-
-		&--success {
-			background-color: $u-badge-success;
-		}
-		
-		&--success--inverted {
-			color: $u-badge-success;
-		}
-
-		&--info {
-			background-color: $u-badge-info;
-		}
-		
-		&--info--inverted {
-			color: $u-badge-info;
-		}
-
-		&--warning {
-			background-color: $u-badge-warning;
-		}
-		
-		&--warning--inverted {
-			color: $u-badge-warning;
-		}
-	}
-</style>

+ 0 - 46
uni_modules/uview-ui/components/u-button/nvue.scss

@@ -1,46 +0,0 @@
-$u-button-active-opacity:0.75 !default;
-$u-button-loading-text-margin-left:4px !default;
-$u-button-text-color: #FFFFFF !default;
-$u-button-text-plain-error-color:$u-error !default;
-$u-button-text-plain-warning-color:$u-warning !default;
-$u-button-text-plain-success-color:$u-success !default;
-$u-button-text-plain-info-color:$u-info !default;
-$u-button-text-plain-primary-color:$u-primary !default;
-.u-button {
-	&--active {
-		opacity: $u-button-active-opacity;
-	}
-	
-	&--active--plain {
-		background-color: rgb(217, 217, 217);
-	}
-	
-	&__loading-text {
-		margin-left:$u-button-loading-text-margin-left;
-	}
-	
-	&__text,
-	&__loading-text {
-		color:$u-button-text-color;
-	}
-	
-	&__text--plain--error {
-		color:$u-button-text-plain-error-color;
-	}
-	
-	&__text--plain--warning {
-		color:$u-button-text-plain-warning-color;
-	}
-	
-	&__text--plain--success{
-		color:$u-button-text-plain-success-color;
-	}
-	
-	&__text--plain--info {
-		color:$u-button-text-plain-info-color;
-	}
-	
-	&__text--plain--primary {
-		color:$u-button-text-plain-primary-color;
-	}
-}

+ 0 - 161
uni_modules/uview-ui/components/u-button/props.js

@@ -1,161 +0,0 @@
-/*
- * @Author       : LQ
- * @Description  :
- * @version      : 1.0
- * @Date         : 2021-08-16 10:04:04
- * @LastAuthor   : LQ
- * @lastTime     : 2021-08-16 10:04:24
- * @FilePath     : /u-view2.0/uview-ui/components/u-button/props.js
- */
-export default {
-    props: {
-        // 是否细边框
-        hairline: {
-            type: Boolean,
-            default: uni.$u.props.button.hairline
-        },
-        // 按钮的预置样式,info,primary,error,warning,success
-        type: {
-            type: String,
-            default: uni.$u.props.button.type
-        },
-        // 按钮尺寸,large,normal,small,mini
-        size: {
-            type: String,
-            default: uni.$u.props.button.size
-        },
-        // 按钮形状,circle(两边为半圆),square(带圆角)
-        shape: {
-            type: String,
-            default: uni.$u.props.button.shape
-        },
-        // 按钮是否镂空
-        plain: {
-            type: Boolean,
-            default: uni.$u.props.button.plain
-        },
-        // 是否禁止状态
-        disabled: {
-            type: Boolean,
-            default: uni.$u.props.button.disabled
-        },
-        // 是否加载中
-        loading: {
-            type: Boolean,
-            default: uni.$u.props.button.loading
-        },
-        // 加载中提示文字
-        loadingText: {
-            type: [String, Number],
-            default: uni.$u.props.button.loadingText
-        },
-        // 加载状态图标类型
-        loadingMode: {
-            type: String,
-            default: uni.$u.props.button.loadingMode
-        },
-        // 加载图标大小
-        loadingSize: {
-            type: [String, Number],
-            default: uni.$u.props.button.loadingSize
-        },
-        // 开放能力,具体请看uniapp稳定关于button组件部分说明
-        // https://uniapp.dcloud.io/component/button
-        openType: {
-            type: String,
-            default: uni.$u.props.button.openType
-        },
-        // 用于 <form> 组件,点击分别会触发 <form> 组件的 submit/reset 事件
-        // 取值为submit(提交表单),reset(重置表单)
-        formType: {
-            type: String,
-            default: uni.$u.props.button.formType
-        },
-        // 打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效
-        // 只微信小程序、QQ小程序有效
-        appParameter: {
-            type: String,
-            default: uni.$u.props.button.appParameter
-        },
-        // 指定是否阻止本节点的祖先节点出现点击态,微信小程序有效
-        hoverStopPropagation: {
-            type: Boolean,
-            default: uni.$u.props.button.hoverStopPropagation
-        },
-        // 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。只微信小程序有效
-        lang: {
-            type: String,
-            default: uni.$u.props.button.lang
-        },
-        // 会话来源,open-type="contact"时有效。只微信小程序有效
-        sessionFrom: {
-            type: String,
-            default: uni.$u.props.button.sessionFrom
-        },
-        // 会话内消息卡片标题,open-type="contact"时有效
-        // 默认当前标题,只微信小程序有效
-        sendMessageTitle: {
-            type: String,
-            default: uni.$u.props.button.sendMessageTitle
-        },
-        // 会话内消息卡片点击跳转小程序路径,open-type="contact"时有效
-        // 默认当前分享路径,只微信小程序有效
-        sendMessagePath: {
-            type: String,
-            default: uni.$u.props.button.sendMessagePath
-        },
-        // 会话内消息卡片图片,open-type="contact"时有效
-        // 默认当前页面截图,只微信小程序有效
-        sendMessageImg: {
-            type: String,
-            default: uni.$u.props.button.sendMessageImg
-        },
-        // 是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示,
-        // 用户点击后可以快速发送小程序消息,open-type="contact"时有效
-        showMessageCard: {
-            type: Boolean,
-            default: uni.$u.props.button.showMessageCard
-        },
-        // 额外传参参数,用于小程序的data-xxx属性,通过target.dataset.name获取
-        dataName: {
-            type: String,
-            default: uni.$u.props.button.dataName
-        },
-        // 节流,一定时间内只能触发一次
-        throttleTime: {
-            type: [String, Number],
-            default: uni.$u.props.button.throttleTime
-        },
-        // 按住后多久出现点击态,单位毫秒
-        hoverStartTime: {
-            type: [String, Number],
-            default: uni.$u.props.button.hoverStartTime
-        },
-        // 手指松开后点击态保留时间,单位毫秒
-        hoverStayTime: {
-            type: [String, Number],
-            default: uni.$u.props.button.hoverStayTime
-        },
-        // 按钮文字,之所以通过props传入,是因为slot传入的话
-        // nvue中无法控制文字的样式
-        text: {
-            type: [String, Number],
-            default: uni.$u.props.button.text
-        },
-        // 按钮图标
-        icon: {
-            type: String,
-            default: uni.$u.props.button.icon
-        },
-        // 按钮图标
-        iconColor: {
-            type: String,
-            default: uni.$u.props.button.icon
-        },
-        // 按钮颜色,支持传入linear-gradient渐变色
-        color: {
-            type: String,
-            default: uni.$u.props.button.color
-        }
-    }
-}

+ 0 - 495
uni_modules/uview-ui/components/u-button/u-button.vue

@@ -1,495 +0,0 @@
-<template>
-    <!-- #ifndef APP-NVUE -->
-    <button
-        :hover-start-time="Number(hoverStartTime)"
-        :hover-stay-time="Number(hoverStayTime)"
-        :form-type="formType"
-        :open-type="openType"
-        :app-parameter="appParameter"
-        :hover-stop-propagation="hoverStopPropagation"
-        :send-message-title="sendMessageTitle"
-        :send-message-path="sendMessagePath"
-        :lang="lang"
-        :data-name="dataName"
-        :session-from="sessionFrom"
-        :send-message-img="sendMessageImg"
-        :show-message-card="showMessageCard"
-        @getphonenumber="getphonenumber"
-        @getuserinfo="getuserinfo"
-        @error="error"
-        @opensetting="opensetting"
-        @launchapp="launchapp"
-        @agreeprivacyauthorization="agreeprivacyauthorization"
-        :hover-class="!disabled && !loading ? 'u-button--active' : ''"
-        class="u-button u-reset-button"
-        :style="[baseColor, $u.addStyle(customStyle)]"
-        @tap="clickHandler"
-        :class="bemClass"
-    >
-        <template v-if="loading">
-            <u-loading-icon
-                :mode="loadingMode"
-                :size="loadingSize * 1.15"
-                :color="loadingColor"
-            ></u-loading-icon>
-            <text
-                class="u-button__loading-text"
-                :style="[{ fontSize: textSize + 'px' }]"
-                >{{ loadingText || text }}</text
-            >
-        </template>
-        <template v-else>
-            <u-icon
-                v-if="icon"
-                :name="icon"
-                :color="iconColorCom"
-                :size="textSize * 1.35"
-                :customStyle="{ marginRight: '2px' }"
-            ></u-icon>
-            <slot>
-                <text
-                    class="u-button__text"
-                    :style="[{ fontSize: textSize + 'px' }]"
-                    >{{ text }}</text
-                >
-            </slot>
-        </template>
-    </button>
-    <!-- #endif -->
-
-    <!-- #ifdef APP-NVUE -->
-    <view
-        :hover-start-time="Number(hoverStartTime)"
-        :hover-stay-time="Number(hoverStayTime)"
-        class="u-button"
-        :hover-class="
-            !disabled && !loading && !color && (plain || type === 'info')
-                ? 'u-button--active--plain'
-                : !disabled && !loading && !plain
-                ? 'u-button--active'
-                : ''
-        "
-        @tap="clickHandler"
-        :class="bemClass"
-        :style="[baseColor, $u.addStyle(customStyle)]"
-    >
-        <template v-if="loading">
-            <u-loading-icon
-                :mode="loadingMode"
-                :size="loadingSize * 1.15"
-                :color="loadingColor"
-            ></u-loading-icon>
-            <text
-                class="u-button__loading-text"
-                :style="[nvueTextStyle]"
-                :class="[plain && `u-button__text--plain--${type}`]"
-                >{{ loadingText || text }}</text
-            >
-        </template>
-        <template v-else>
-            <u-icon
-                v-if="icon"
-                :name="icon"
-                :color="iconColorCom"
-                :size="textSize * 1.35"
-            ></u-icon>
-            <text
-                class="u-button__text"
-                :style="[
-                    {
-                        marginLeft: icon ? '2px' : 0,
-                    },
-                    nvueTextStyle,
-                ]"
-                :class="[plain && `u-button__text--plain--${type}`]"
-                >{{ text }}</text
-            >
-        </template>
-    </view>
-    <!-- #endif -->
-</template>
-
-<script>
-import button from "../../libs/mixin/button.js";
-import openType from "../../libs/mixin/openType.js";
-import props from "./props.js";
-/**
- * button 按钮
- * @description Button 按钮
- * @tutorial https://www.uviewui.com/components/button.html
- *
- * @property {Boolean}			hairline				是否显示按钮的细边框 (默认 true )
- * @property {String}			type					按钮的预置样式,info,primary,error,warning,success (默认 'info' )
- * @property {String}			size					按钮尺寸,large,normal,mini (默认 normal)
- * @property {String}			shape					按钮形状,circle(两边为半圆),square(带圆角) (默认 'square' )
- * @property {Boolean}			plain					按钮是否镂空,背景色透明 (默认 false)
- * @property {Boolean}			disabled				是否禁用 (默认 false)
- * @property {Boolean}			loading					按钮名称前是否带 loading 图标(App-nvue 平台,在 ios 上为雪花,Android上为圆圈) (默认 false)
- * @property {String | Number}	loadingText				加载中提示文字
- * @property {String}			loadingMode				加载状态图标类型 (默认 'spinner' )
- * @property {String | Number}	loadingSize				加载图标大小 (默认 15 )
- * @property {String}			openType				开放能力,具体请看uniapp稳定关于button组件部分说明
- * @property {String}			formType				用于 <form> 组件,点击分别会触发 <form> 组件的 submit/reset 事件
- * @property {String}			appParameter			打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效 (注:只微信小程序、QQ小程序有效)
- * @property {Boolean}			hoverStopPropagation	指定是否阻止本节点的祖先节点出现点击态,微信小程序有效(默认 true )
- * @property {String}			lang					指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文(默认 en )
- * @property {String}			sessionFrom				会话来源,openType="contact"时有效
- * @property {String}			sendMessageTitle		会话内消息卡片标题,openType="contact"时有效
- * @property {String}			sendMessagePath			会话内消息卡片点击跳转小程序路径,openType="contact"时有效
- * @property {String}			sendMessageImg			会话内消息卡片图片,openType="contact"时有效
- * @property {Boolean}			showMessageCard			是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示,用户点击后可以快速发送小程序消息,openType="contact"时有效(默认false)
- * @property {String}			dataName				额外传参参数,用于小程序的data-xxx属性,通过target.dataset.name获取
- * @property {String | Number}	throttleTime			节流,一定时间内只能触发一次 (默认 0 )
- * @property {String | Number}	hoverStartTime			按住后多久出现点击态,单位毫秒 (默认 0 )
- * @property {String | Number}	hoverStayTime			手指松开后点击态保留时间,单位毫秒 (默认 200 )
- * @property {String | Number}	text					按钮文字,之所以通过props传入,是因为slot传入的话(注:nvue中无法控制文字的样式)
- * @property {String}			icon					按钮图标
- * @property {String}			iconColor				按钮图标颜色
- * @property {String}			color					按钮颜色,支持传入linear-gradient渐变色
- * @property {Object}			customStyle				定义需要用到的外部样式
- *
- * @event {Function}	click			非禁止并且非加载中,才能点击
- * @event {Function}	getphonenumber	open-type="getPhoneNumber"时有效
- * @event {Function}	getuserinfo		用户点击该按钮时,会返回获取到的用户信息,从返回参数的detail中获取到的值同uni.getUserInfo
- * @event {Function}	error			当使用开放能力时,发生错误的回调
- * @event {Function}	opensetting		在打开授权设置页并关闭后回调
- * @event {Function}	launchapp		打开 APP 成功的回调
- * @event {Function}	agreeprivacyauthorization	用户同意隐私协议事件回调
- * @example <u-button>月落</u-button>
- */
-export default {
-    name: "u-button",
-    // #ifdef MP
-    mixins: [uni.$u.mpMixin, uni.$u.mixin, button, openType, props],
-    // #endif
-    // #ifndef MP
-    mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
-    // #endif
-    data() {
-        return {};
-    },
-    computed: {
-        // 生成bem风格的类名
-        bemClass() {
-            // this.bem为一个computed变量,在mixin中
-            if (!this.color) {
-                return this.bem(
-                    "button",
-                    ["type", "shape", "size"],
-                    ["disabled", "plain", "hairline"]
-                );
-            } else {
-                // 由于nvue的原因,在有color参数时,不需要传入type,否则会生成type相关的类型,影响最终的样式
-                return this.bem(
-                    "button",
-                    ["shape", "size"],
-                    ["disabled", "plain", "hairline"]
-                );
-            }
-        },
-        loadingColor() {
-            if (this.plain) {
-                // 如果有设置color值,则用color值,否则使用type主题颜色
-                return this.color
-                    ? this.color
-                    : uni.$u.config.color[`u-${this.type}`];
-            }
-            if (this.type === "info") {
-                return "#c9c9c9";
-            }
-            return "rgb(200, 200, 200)";
-        },
-        iconColorCom() {
-            // 如果是镂空状态,设置了color就用color值,否则使用主题颜色,
-            // u-icon的color能接受一个主题颜色的值
-			if (this.iconColor) return this.iconColor;
-			if (this.plain) {
-                return this.color ? this.color : this.type;
-            } else {
-                return this.type === "info" ? "#000000" : "#ffffff";
-            }
-        },
-        baseColor() {
-            let style = {};
-            if (this.color) {
-                // 针对自定义了color颜色的情况,镂空状态下,就是用自定义的颜色
-                style.color = this.plain ? this.color : "white";
-                if (!this.plain) {
-                    // 非镂空,背景色使用自定义的颜色
-                    style["background-color"] = this.color;
-                }
-                if (this.color.indexOf("gradient") !== -1) {
-                    // 如果自定义的颜色为渐变色,不显示边框,以及通过backgroundImage设置渐变色
-                    // weex文档说明可以写borderWidth的形式,为什么这里需要分开写?
-                    // 因为weex是阿里巴巴为了部门业绩考核而做的你懂的东西,所以需要这么写才有效
-                    style.borderTopWidth = 0;
-                    style.borderRightWidth = 0;
-                    style.borderBottomWidth = 0;
-                    style.borderLeftWidth = 0;
-                    if (!this.plain) {
-                        style.backgroundImage = this.color;
-                    }
-                } else {
-                    // 非渐变色,则设置边框相关的属性
-                    style.borderColor = this.color;
-                    style.borderWidth = "1px";
-                    style.borderStyle = "solid";
-                }
-            }
-            return style;
-        },
-        // nvue版本按钮的字体不会继承父组件的颜色,需要对每一个text组件进行单独的设置
-        nvueTextStyle() {
-            let style = {};
-            // 针对自定义了color颜色的情况,镂空状态下,就是用自定义的颜色
-            if (this.type === "info") {
-                style.color = "#323233";
-            }
-            if (this.color) {
-                style.color = this.plain ? this.color : "white";
-            }
-            style.fontSize = this.textSize + "px";
-            return style;
-        },
-        // 字体大小
-        textSize() {
-            let fontSize = 14,
-                { size } = this;
-            if (size === "large") fontSize = 16;
-            if (size === "normal") fontSize = 14;
-            if (size === "small") fontSize = 12;
-            if (size === "mini") fontSize = 10;
-            return fontSize;
-        },
-    },
-    methods: {
-        clickHandler() {
-            // 非禁止并且非加载中,才能点击
-            if (!this.disabled && !this.loading) {
-				// 进行节流控制,每this.throttle毫秒内,只在开始处执行
-				uni.$u.throttle(() => {
-					this.$emit("click");
-				}, this.throttleTime);
-            }
-        },
-        // 下面为对接uniapp官方按钮开放能力事件回调的对接
-        getphonenumber(res) {
-            this.$emit("getphonenumber", res);
-        },
-        getuserinfo(res) {
-            this.$emit("getuserinfo", res);
-        },
-        error(res) {
-            this.$emit("error", res);
-        },
-        opensetting(res) {
-            this.$emit("opensetting", res);
-        },
-        launchapp(res) {
-            this.$emit("launchapp", res);
-        },
-        agreeprivacyauthorization(res) {
-            this.$emit("agreeprivacyauthorization", res);
-        },
-    },
-};
-</script>
-
-<style lang="scss" scoped>
-@import "../../libs/css/components.scss";
-
-/* #ifndef APP-NVUE */
-@import "./vue.scss";
-/* #endif */
-
-/* #ifdef APP-NVUE */
-@import "./nvue.scss";
-/* #endif */
-
-$u-button-u-button-height: 40px !default;
-$u-button-text-font-size: 15px !default;
-$u-button-loading-text-font-size: 15px !default;
-$u-button-loading-text-margin-left: 4px !default;
-$u-button-large-width: 100% !default;
-$u-button-large-height: 50px !default;
-$u-button-normal-padding: 0 12px !default;
-$u-button-large-padding: 0 15px !default;
-$u-button-normal-font-size: 14px !default;
-$u-button-small-min-width: 60px !default;
-$u-button-small-height: 30px !default;
-$u-button-small-padding: 0px 8px !default;
-$u-button-mini-padding: 0px 8px !default;
-$u-button-small-font-size: 12px !default;
-$u-button-mini-height: 22px !default;
-$u-button-mini-font-size: 10px !default;
-$u-button-mini-min-width: 50px !default;
-$u-button-disabled-opacity: 0.5 !default;
-$u-button-info-color: #323233 !default;
-$u-button-info-background-color: #fff !default;
-$u-button-info-border-color: #ebedf0 !default;
-$u-button-info-border-width: 1px !default;
-$u-button-info-border-style: solid !default;
-$u-button-success-color: #fff !default;
-$u-button-success-background-color: $u-success !default;
-$u-button-success-border-color: $u-button-success-background-color !default;
-$u-button-success-border-width: 1px !default;
-$u-button-success-border-style: solid !default;
-$u-button-primary-color: #fff !default;
-$u-button-primary-background-color: $u-primary !default;
-$u-button-primary-border-color: $u-button-primary-background-color !default;
-$u-button-primary-border-width: 1px !default;
-$u-button-primary-border-style: solid !default;
-$u-button-error-color: #fff !default;
-$u-button-error-background-color: $u-error !default;
-$u-button-error-border-color: $u-button-error-background-color !default;
-$u-button-error-border-width: 1px !default;
-$u-button-error-border-style: solid !default;
-$u-button-warning-color: #fff !default;
-$u-button-warning-background-color: $u-warning !default;
-$u-button-warning-border-color: $u-button-warning-background-color !default;
-$u-button-warning-border-width: 1px !default;
-$u-button-warning-border-style: solid !default;
-$u-button-block-width: 100% !default;
-$u-button-circle-border-top-right-radius: 100px !default;
-$u-button-circle-border-top-left-radius: 100px !default;
-$u-button-circle-border-bottom-left-radius: 100px !default;
-$u-button-circle-border-bottom-right-radius: 100px !default;
-$u-button-square-border-top-right-radius: 3px !default;
-$u-button-square-border-top-left-radius: 3px !default;
-$u-button-square-border-bottom-left-radius: 3px !default;
-$u-button-square-border-bottom-right-radius: 3px !default;
-$u-button-icon-min-width: 1em !default;
-$u-button-plain-background-color: #fff !default;
-$u-button-hairline-border-width: 0.5px !default;
-
-.u-button {
-    height: $u-button-u-button-height;
-    position: relative;
-    align-items: center;
-    justify-content: center;
-    @include flex;
-    /* #ifndef APP-NVUE */
-    box-sizing: border-box;
-    /* #endif */
-    flex-direction: row;
-
-    &__text {
-        font-size: $u-button-text-font-size;
-    }
-
-    &__loading-text {
-        font-size: $u-button-loading-text-font-size;
-        margin-left: $u-button-loading-text-margin-left;
-    }
-
-    &--large {
-        /* #ifndef APP-NVUE */
-        width: $u-button-large-width;
-        /* #endif */
-        height: $u-button-large-height;
-        padding: $u-button-large-padding;
-    }
-
-    &--normal {
-        padding: $u-button-normal-padding;
-        font-size: $u-button-normal-font-size;
-    }
-
-    &--small {
-        /* #ifndef APP-NVUE */
-        min-width: $u-button-small-min-width;
-        /* #endif */
-        height: $u-button-small-height;
-        padding: $u-button-small-padding;
-        font-size: $u-button-small-font-size;
-    }
-
-    &--mini {
-        height: $u-button-mini-height;
-        font-size: $u-button-mini-font-size;
-        /* #ifndef APP-NVUE */
-        min-width: $u-button-mini-min-width;
-        /* #endif */
-        padding: $u-button-mini-padding;
-    }
-
-    &--disabled {
-        opacity: $u-button-disabled-opacity;
-    }
-
-    &--info {
-        color: $u-button-info-color;
-        background-color: $u-button-info-background-color;
-        border-color: $u-button-info-border-color;
-        border-width: $u-button-info-border-width;
-        border-style: $u-button-info-border-style;
-    }
-
-    &--success {
-        color: $u-button-success-color;
-        background-color: $u-button-success-background-color;
-        border-color: $u-button-success-border-color;
-        border-width: $u-button-success-border-width;
-        border-style: $u-button-success-border-style;
-    }
-
-    &--primary {
-        color: $u-button-primary-color;
-        background-color: $u-button-primary-background-color;
-        border-color: $u-button-primary-border-color;
-        border-width: $u-button-primary-border-width;
-        border-style: $u-button-primary-border-style;
-    }
-
-    &--error {
-        color: $u-button-error-color;
-        background-color: $u-button-error-background-color;
-        border-color: $u-button-error-border-color;
-        border-width: $u-button-error-border-width;
-        border-style: $u-button-error-border-style;
-    }
-
-    &--warning {
-        color: $u-button-warning-color;
-        background-color: $u-button-warning-background-color;
-        border-color: $u-button-warning-border-color;
-        border-width: $u-button-warning-border-width;
-        border-style: $u-button-warning-border-style;
-    }
-
-    &--block {
-        @include flex;
-        width: $u-button-block-width;
-    }
-
-    &--circle {
-        border-top-right-radius: $u-button-circle-border-top-right-radius;
-        border-top-left-radius: $u-button-circle-border-top-left-radius;
-        border-bottom-left-radius: $u-button-circle-border-bottom-left-radius;
-        border-bottom-right-radius: $u-button-circle-border-bottom-right-radius;
-    }
-
-    &--square {
-        border-bottom-left-radius: $u-button-square-border-top-right-radius;
-        border-bottom-right-radius: $u-button-square-border-top-left-radius;
-        border-top-left-radius: $u-button-square-border-bottom-left-radius;
-        border-top-right-radius: $u-button-square-border-bottom-right-radius;
-    }
-
-    &__icon {
-        /* #ifndef APP-NVUE */
-        min-width: $u-button-icon-min-width;
-        line-height: inherit !important;
-        vertical-align: top;
-        /* #endif */
-    }
-
-    &--plain {
-        background-color: $u-button-plain-background-color;
-    }
-
-    &--hairline {
-        border-width: $u-button-hairline-border-width !important;
-    }
-}
-</style>

+ 0 - 80
uni_modules/uview-ui/components/u-button/vue.scss

@@ -1,80 +0,0 @@
-// nvue下hover-class无效
-$u-button-before-top:50% !default;
-$u-button-before-left:50% !default;
-$u-button-before-width:100% !default;
-$u-button-before-height:100% !default;
-$u-button-before-transform:translate(-50%, -50%) !default;
-$u-button-before-opacity:0 !default;
-$u-button-before-background-color:#000 !default;
-$u-button-before-border-color:#000 !default;
-$u-button-active-before-opacity:.15 !default;
-$u-button-icon-margin-left:4px !default;
-$u-button-plain-u-button-info-color:$u-info;
-$u-button-plain-u-button-success-color:$u-success;
-$u-button-plain-u-button-error-color:$u-error;
-$u-button-plain-u-button-warning-color:$u-error;
-
-.u-button {
-	width: 100%;
-	
-	&__text {
-		white-space: nowrap;
-		line-height: 1;
-	}
-	
-	&:before {
-		position: absolute;
-		top:$u-button-before-top;
-		left:$u-button-before-left;
-		width:$u-button-before-width;
-		height:$u-button-before-height;
-		border: inherit;
-		border-radius: inherit;
-		transform:$u-button-before-transform;
-		opacity:$u-button-before-opacity;
-		content: " ";
-		background-color:$u-button-before-background-color;
-		border-color:$u-button-before-border-color;
-	}
-	
-	&--active {
-		&:before {
-			opacity: .15
-		}
-	}
-	
-	&__icon+&__text:not(:empty),
-	&__loading-text {
-		margin-left:$u-button-icon-margin-left;
-	}
-	
-	&--plain {
-		&.u-button--primary {
-			color: $u-primary;
-		}
-	}
-	
-	&--plain {
-		&.u-button--info {
-			color:$u-button-plain-u-button-info-color;
-		}
-	}
-	
-	&--plain {
-		&.u-button--success {
-			color:$u-button-plain-u-button-success-color;
-		}
-	}
-	
-	&--plain {
-		&.u-button--error {
-			color:$u-button-plain-u-button-error-color;
-		}
-	}
-	
-	&--plain {
-		&.u-button--warning {
-			color:$u-button-plain-u-button-warning-color;
-		}
-	}
-}

+ 0 - 99
uni_modules/uview-ui/components/u-calendar/header.vue

@@ -1,99 +0,0 @@
-<template>
-	<view class="u-calendar-header u-border-bottom">
-		<text
-			class="u-calendar-header__title"
-			v-if="showTitle"
-		>{{ title }}</text>
-		<text
-			class="u-calendar-header__subtitle"
-			v-if="showSubtitle"
-		>{{ subtitle }}</text>
-		<view class="u-calendar-header__weekdays">
-			<text class="u-calendar-header__weekdays__weekday">一</text>
-			<text class="u-calendar-header__weekdays__weekday">二</text>
-			<text class="u-calendar-header__weekdays__weekday">三</text>
-			<text class="u-calendar-header__weekdays__weekday">四</text>
-			<text class="u-calendar-header__weekdays__weekday">五</text>
-			<text class="u-calendar-header__weekdays__weekday">六</text>
-			<text class="u-calendar-header__weekdays__weekday">日</text>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: 'u-calendar-header',
-		mixins: [uni.$u.mpMixin, uni.$u.mixin],
-		props: {
-			// 标题
-			title: {
-				type: String,
-				default: ''
-			},
-			// 副标题
-			subtitle: {
-				type: String,
-				default: ''
-			},
-			// 是否显示标题
-			showTitle: {
-				type: Boolean,
-				default: true
-			},
-			// 是否显示副标题
-			showSubtitle: {
-				type: Boolean,
-				default: true
-			},
-		},
-		data() {
-			return {
-
-			}
-		},
-		methods: {
-			name() {
-
-			}
-		},
-	}
-</script>
-
-<style lang="scss" scoped>
-	@import "../../libs/css/components.scss";
-
-	.u-calendar-header {
-		padding-bottom: 4px;
-
-		&__title {
-			font-size: 16px;
-			color: $u-main-color;
-			text-align: center;
-			height: 42px;
-			line-height: 42px;
-			font-weight: bold;
-		}
-
-		&__subtitle {
-			font-size: 14px;
-			color: $u-main-color;
-			height: 40px;
-			text-align: center;
-			line-height: 40px;
-			font-weight: bold;
-		}
-
-		&__weekdays {
-			@include flex;
-			justify-content: space-between;
-
-			&__weekday {
-				font-size: 13px;
-				color: $u-main-color;
-				line-height: 30px;
-				flex: 1;
-				text-align: center;
-			}
-		}
-	}
-</style>

+ 0 - 579
uni_modules/uview-ui/components/u-calendar/month.vue

@@ -1,579 +0,0 @@
-<template>
-	<view class="u-calendar-month-wrapper" ref="u-calendar-month-wrapper">
-		<view v-for="(item, index) in months" :key="index" :class="[`u-calendar-month-${index}`]"
-			:ref="`u-calendar-month-${index}`" :id="`month-${index}`">
-			<text v-if="index !== 0" class="u-calendar-month__title">{{ item.year }}年{{ item.month }}月</text>
-			<view class="u-calendar-month__days">
-				<view v-if="showMark" class="u-calendar-month__days__month-mark-wrapper">
-					<text class="u-calendar-month__days__month-mark-wrapper__text">{{ item.month }}</text>
-				</view>
-				<view class="u-calendar-month__days__day" v-for="(item1, index1) in item.date" :key="index1"
-					:style="[dayStyle(index, index1, item1)]" @tap="clickHandler(index, index1, item1)"
-					:class="[item1.selected && 'u-calendar-month__days__day__select--selected']">
-					<view class="u-calendar-month__days__day__select" :style="[daySelectStyle(index, index1, item1)]">
-						<text class="u-calendar-month__days__day__select__info"
-							:class="[item1.disabled && 'u-calendar-month__days__day__select__info--disabled']"
-							:style="[textStyle(item1)]">{{ item1.day }}</text>
-						<text v-if="getBottomInfo(index, index1, item1)"
-							class="u-calendar-month__days__day__select__buttom-info"
-							:class="[item1.disabled && 'u-calendar-month__days__day__select__buttom-info--disabled']"
-							:style="[textStyle(item1)]">{{ getBottomInfo(index, index1, item1) }}</text>
-						<text v-if="item1.dot" class="u-calendar-month__days__day__select__dot"></text>
-					</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	// #ifdef APP-NVUE
-	// 由于nvue不支持百分比单位,需要查询宽度来计算每个日期的宽度
-	const dom = uni.requireNativePlugin('dom')
-	// #endif
-	import dayjs from '../../libs/util/dayjs.js';
-	export default {
-		name: 'u-calendar-month',
-		mixins: [uni.$u.mpMixin, uni.$u.mixin],
-		props: {
-			// 是否显示月份背景色
-			showMark: {
-				type: Boolean,
-				default: true
-			},
-			// 主题色,对底部按钮和选中日期有效
-			color: {
-				type: String,
-				default: '#3c9cff'
-			},
-			// 月份数据
-			months: {
-				type: Array,
-				default: () => []
-			},
-			// 日期选择类型
-			mode: {
-				type: String,
-				default: 'single'
-			},
-			// 日期行高
-			rowHeight: {
-				type: [String, Number],
-				default: 58
-			},
-			// mode=multiple时,最多可选多少个日期
-			maxCount: {
-				type: [String, Number],
-				default: Infinity
-			},
-			// mode=range时,第一个日期底部的提示文字
-			startText: {
-				type: String,
-				default: '开始'
-			},
-			// mode=range时,最后一个日期底部的提示文字
-			endText: {
-				type: String,
-				default: '结束'
-			},
-			// 默认选中的日期,mode为multiple或range是必须为数组格式
-			defaultDate: {
-				type: [Array, String, Date],
-				default: null
-			},
-			// 最小的可选日期
-			minDate: {
-				type: [String, Number],
-				default: 0
-			},
-			// 最大可选日期
-			maxDate: {
-				type: [String, Number],
-				default: 0
-			},
-			// 如果没有设置maxDate,则往后推多少个月
-			maxMonth: {
-				type: [String, Number],
-				default: 2
-			},
-			// 是否为只读状态,只读状态下禁止选择日期
-			readonly: {
-				type: Boolean,
-				default: uni.$u.props.calendar.readonly
-			},
-			// 日期区间最多可选天数,默认无限制,mode = range时有效
-			maxRange: {
-				type: [Number, String],
-				default: Infinity
-			},
-			// 范围选择超过最多可选天数时的提示文案,mode = range时有效
-			rangePrompt: {
-				type: String,
-				default: ''
-			},
-			// 范围选择超过最多可选天数时,是否展示提示文案,mode = range时有效
-			showRangePrompt: {
-				type: Boolean,
-				default: true
-			},
-			// 是否允许日期范围的起止时间为同一天,mode = range时有效
-			allowSameDay: {
-				type: Boolean,
-				default: false
-			}
-		},
-		data() {
-			return {
-				// 每个日期的宽度
-				width: 0,
-				// 当前选中的日期item
-				item: {},
-				selected: []
-			}
-		},
-		watch: {
-			selectedChange: {
-				immediate: true,
-				handler(n) {
-					this.setDefaultDate()
-				}
-			}
-		},
-		computed: {
-			// 多个条件的变化,会引起选中日期的变化,这里统一管理监听
-			selectedChange() {
-				return [this.minDate, this.maxDate, this.defaultDate]
-			},
-			dayStyle(index1, index2, item) {
-				return (index1, index2, item) => {
-					const style = {}
-					let week = item.week
-					// 不进行四舍五入的形式保留2位小数
-					const dayWidth = Number(parseFloat(this.width / 7).toFixed(3).slice(0, -1))
-					// 得出每个日期的宽度
-					// #ifdef APP-NVUE
-					style.width = uni.$u.addUnit(dayWidth)
-					// #endif
-					style.height = uni.$u.addUnit(this.rowHeight)
-					if (index2 === 0) {
-						// 获取当前为星期几,如果为0,则为星期天,减一为每月第一天时,需要向左偏移的item个数
-						week = (week === 0 ? 7 : week) - 1
-						style.marginLeft = uni.$u.addUnit(week * dayWidth)
-					}
-					if (this.mode === 'range') {
-						// 之所以需要这么写,是因为DCloud公司的iOS客户端的开发者能力有限导致的bug
-						style.paddingLeft = 0
-						style.paddingRight = 0
-						style.paddingBottom = 0
-						style.paddingTop = 0
-					}
-					return style
-				}
-			},
-			daySelectStyle() {
-				return (index1, index2, item) => {
-					let date = dayjs(item.date).format("YYYY-MM-DD"),
-						style = {}
-					// 判断date是否在selected数组中,因为月份可能会需要补0,所以使用dateSame判断,而不用数组的includes判断
-					if (this.selected.some(item => this.dateSame(item, date))) {
-						style.backgroundColor = this.color
-					}
-					if (this.mode === 'single') {
-						if (date === this.selected[0]) {
-							// 因为需要对nvue的兼容,只能这么写,无法缩写,也无法通过类名控制等等
-							style.borderTopLeftRadius = '3px'
-							style.borderBottomLeftRadius = '3px'
-							style.borderTopRightRadius = '3px'
-							style.borderBottomRightRadius = '3px'
-						}
-					} else if (this.mode === 'range') {
-						if (this.selected.length >= 2) {
-							const len = this.selected.length - 1
-							// 第一个日期设置左上角和左下角的圆角
-							if (this.dateSame(date, this.selected[0])) {
-								style.borderTopLeftRadius = '3px'
-								style.borderBottomLeftRadius = '3px'
-							}
-							// 最后一个日期设置右上角和右下角的圆角
-							if (this.dateSame(date, this.selected[len])) {
-								style.borderTopRightRadius = '3px'
-								style.borderBottomRightRadius = '3px'
-							}
-							// 处于第一和最后一个之间的日期,背景色设置为浅色,通过将对应颜色进行等分,再取其尾部的颜色值
-							if (dayjs(date).isAfter(dayjs(this.selected[0])) && dayjs(date).isBefore(dayjs(this
-									.selected[len]))) {
-								style.backgroundColor = uni.$u.colorGradient(this.color, '#ffffff', 100)[90]
-								// 增加一个透明度,让范围区间的背景色也能看到底部的mark水印字符
-								style.opacity = 0.7
-							}
-						} else if (this.selected.length === 1) {
-							// 之所以需要这么写,是因为DCloud公司的iOS客户端的开发者能力有限导致的bug
-							// 进行还原操作,否则在nvue的iOS,uni-app有bug,会导致诡异的表现
-							style.borderTopLeftRadius = '3px'
-							style.borderBottomLeftRadius = '3px'
-						}
-					} else {
-						if (this.selected.some(item => this.dateSame(item, date))) {
-							style.borderTopLeftRadius = '3px'
-							style.borderBottomLeftRadius = '3px'
-							style.borderTopRightRadius = '3px'
-							style.borderBottomRightRadius = '3px'
-						}
-					}
-					return style
-				}
-			},
-			// 某个日期是否被选中
-			textStyle() {
-				return (item) => {
-					const date = dayjs(item.date).format("YYYY-MM-DD"),
-						style = {}
-					// 选中的日期,提示文字设置白色
-					if (this.selected.some(item => this.dateSame(item, date))) {
-						style.color = '#ffffff'
-					}
-					if (this.mode === 'range') {
-						const len = this.selected.length - 1
-						// 如果是范围选择模式,第一个和最后一个之间的日期,文字颜色设置为高亮的主题色
-						if (dayjs(date).isAfter(dayjs(this.selected[0])) && dayjs(date).isBefore(dayjs(this
-								.selected[len]))) {
-							style.color = this.color
-						}
-					}
-					return style
-				}
-			},
-			// 获取底部的提示文字
-			getBottomInfo() {
-				return (index1, index2, item) => {
-					const date = dayjs(item.date).format("YYYY-MM-DD")
-					const bottomInfo = item.bottomInfo
-					// 当为日期范围模式时,且选择的日期个数大于0时
-					if (this.mode === 'range' && this.selected.length > 0) {
-						if (this.selected.length === 1) {
-							// 选择了一个日期时,如果当前日期为数组中的第一个日期,则显示底部文字为“开始”
-							if (this.dateSame(date, this.selected[0])) return this.startText
-							else return bottomInfo
-						} else {
-							const len = this.selected.length - 1
-							// 如果数组中的日期大于2个时,第一个和最后一个显示为开始和结束日期
-							if (this.dateSame(date, this.selected[0]) && this.dateSame(date, this.selected[1]) &&
-								len === 1) {
-								// 如果长度为2,且第一个等于第二个日期,则提示语放在同一个item中
-								return `${this.startText}/${this.endText}`
-							} else if (this.dateSame(date, this.selected[0])) {
-								return this.startText
-							} else if (this.dateSame(date, this.selected[len])) {
-								return this.endText
-							} else {
-								return bottomInfo
-							}
-						}
-					} else {
-						return bottomInfo
-					}
-				}
-			}
-		},
-		mounted() {
-			this.init()
-		},
-		methods: {
-			init() {
-				// 初始化默认选中
-				this.$emit('monthSelected', this.selected)
-				this.$nextTick(() => {
-					// 这里需要另一个延时,因为获取宽度后,会进行月份数据渲染,只有渲染完成之后,才有真正的高度
-					// 因为nvue下,$nextTick并不是100%可靠的
-					uni.$u.sleep(10).then(() => {
-						this.getWrapperWidth()
-						this.getMonthRect()
-					})
-				})
-			},
-			// 判断两个日期是否相等
-			dateSame(date1, date2) {
-				return dayjs(date1).isSame(dayjs(date2))
-			},
-			// 获取月份数据区域的宽度,因为nvue不支持百分比,所以无法通过css设置每个日期item的宽度
-			getWrapperWidth() {
-				// #ifdef APP-NVUE
-				dom.getComponentRect(this.$refs['u-calendar-month-wrapper'], res => {
-					this.width = res.size.width
-				})
-				// #endif
-				// #ifndef APP-NVUE
-				this.$uGetRect('.u-calendar-month-wrapper').then(size => {
-					this.width = size.width
-				})
-				// #endif
-			},
-			getMonthRect() {
-				// 获取每个月份数据的尺寸,用于父组件在scroll-view滚动事件中,监听当前滚动到了第几个月份
-				const promiseAllArr = this.months.map((item, index) => this.getMonthRectByPromise(
-					`u-calendar-month-${index}`))
-				// 一次性返回
-				Promise.all(promiseAllArr).then(
-					sizes => {
-						let height = 1
-						const topArr = []
-						for (let i = 0; i < this.months.length; i++) {
-							// 添加到months数组中,供scroll-view滚动事件中,判断当前滚动到哪个月份
-							topArr[i] = height
-							height += sizes[i].height
-						}
-						// 由于微信下,无法通过this.months[i].top的形式(引用类型)去修改父组件的month的top值,所以使用事件形式对外发出
-						this.$emit('updateMonthTop', topArr)
-					})
-			},
-			// 获取每个月份区域的尺寸
-			getMonthRectByPromise(el) {
-				// #ifndef APP-NVUE
-				// $uGetRect为uView自带的节点查询简化方法,详见文档介绍:https://www.uviewui.com/js/getRect.html
-				// 组件内部一般用this.$uGetRect,对外的为uni.$u.getRect,二者功能一致,名称不同
-				return new Promise(resolve => {
-					this.$uGetRect(`.${el}`).then(size => {
-						resolve(size)
-					})
-				})
-				// #endif
-
-				// #ifdef APP-NVUE
-				// nvue下,使用dom模块查询元素高度
-				// 返回一个promise,让调用此方法的主体能使用then回调
-				return new Promise(resolve => {
-					dom.getComponentRect(this.$refs[el][0], res => {
-						resolve(res.size)
-					})
-				})
-				// #endif
-			},
-			// 点击某一个日期
-			clickHandler(index1, index2, item) {
-				if (this.readonly) {
-					return;
-				}
-				this.item = item
-				const date = dayjs(item.date).format("YYYY-MM-DD")
-				if (item.disabled) return
-				// 对上一次选择的日期数组进行深度克隆
-				let selected = uni.$u.deepClone(this.selected)
-				if (this.mode === 'single') {
-					// 单选情况下,让数组中的元素为当前点击的日期
-					selected = [date]
-				} else if (this.mode === 'multiple') {
-					if (selected.some(item => this.dateSame(item, date))) {
-						// 如果点击的日期已在数组中,则进行移除操作,也就是达到反选的效果
-						const itemIndex = selected.findIndex(item => item === date)
-						selected.splice(itemIndex, 1)
-					} else {
-						// 如果点击的日期不在数组中,且已有的长度小于总可选长度时,则添加到数组中去
-						if (selected.length < this.maxCount) selected.push(date)
-					}
-				} else {
-					// 选择区间形式
-					if (selected.length === 0 || selected.length >= 2) {
-						// 如果原来就为0或者大于2的长度,则当前点击的日期,就是开始日期
-						selected = [date]
-					} else if (selected.length === 1) {
-						// 如果已经选择了开始日期
-						const existsDate = selected[0]
-						// 如果当前选择的日期小于上一次选择的日期,则当前的日期定为开始日期
-						if (dayjs(date).isBefore(existsDate)) {
-							selected = [date]
-						} else if (dayjs(date).isAfter(existsDate)) {
-							// 当前日期减去最大可选的日期天数,如果大于起始时间,则进行提示
-							if(dayjs(dayjs(date).subtract(this.maxRange, 'day')).isAfter(dayjs(selected[0])) && this.showRangePrompt) {
-								if(this.rangePrompt) {
-									uni.$u.toast(this.rangePrompt)
-								} else {
-									uni.$u.toast(`选择天数不能超过 ${this.maxRange} 天`)
-								}
-								return
-							}
-							// 如果当前日期大于已有日期,将当前的添加到数组尾部
-							selected.push(date)
-							const startDate = selected[0]
-							const endDate = selected[1]
-							const arr = []
-							let i = 0
-							do {
-								// 将开始和结束日期之间的日期添加到数组中
-								arr.push(dayjs(startDate).add(i, 'day').format("YYYY-MM-DD"))
-								i++
-								// 累加的日期小于结束日期时,继续下一次的循环
-							} while (dayjs(startDate).add(i, 'day').isBefore(dayjs(endDate)))
-							// 为了一次性修改数组,避免computed中多次触发,这里才用arr变量一次性赋值的方式,同时将最后一个日期添加近来
-							arr.push(endDate)
-							selected = arr
-						} else {
-							// 选择区间时,只有一个日期的情况下,且不允许选择起止为同一天的话,不允许选择自己
-							if (selected[0] === date && !this.allowSameDay) return
-							selected.push(date)
-						}
-					}
-				}
-				this.setSelected(selected)
-			},
-			// 设置默认日期
-			setDefaultDate() {
-				if (!this.defaultDate) {
-					// 如果没有设置默认日期,则将当天日期设置为默认选中的日期
-					const selected = [dayjs().format("YYYY-MM-DD")]
-					return this.setSelected(selected, false)
-				}
-				let defaultDate = []
-				const minDate = this.minDate || dayjs().format("YYYY-MM-DD")
-				const maxDate = this.maxDate || dayjs(minDate).add(this.maxMonth - 1, 'month').format("YYYY-MM-DD")
-				if (this.mode === 'single') {
-					// 单选模式,可以是字符串或数组,Date对象等
-					if (!uni.$u.test.array(this.defaultDate)) {
-						defaultDate = [dayjs(this.defaultDate).format("YYYY-MM-DD")]
-					} else {
-						defaultDate = [this.defaultDate[0]]
-					}
-				} else {
-					// 如果为非数组,则不执行
-					if (!uni.$u.test.array(this.defaultDate)) return
-					defaultDate = this.defaultDate
-				}
-				// 过滤用户传递的默认数组,取出只在可允许最大值与最小值之间的元素
-				defaultDate = defaultDate.filter(item => {
-					return dayjs(item).isAfter(dayjs(minDate).subtract(1, 'day')) && dayjs(item).isBefore(dayjs(
-						maxDate).add(1, 'day'))
-				})
-				this.setSelected(defaultDate, false)
-			},
-			setSelected(selected, event = true) {
-				this.selected = selected
-				event && this.$emit('monthSelected', this.selected)
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	@import "../../libs/css/components.scss";
-
-	.u-calendar-month-wrapper {
-		margin-top: 4px;
-	}
-
-	.u-calendar-month {
-
-		&__title {
-			font-size: 14px;
-			line-height: 42px;
-			height: 42px;
-			color: $u-main-color;
-			text-align: center;
-			font-weight: bold;
-		}
-
-		&__days {
-			position: relative;
-			@include flex;
-			flex-wrap: wrap;
-
-			&__month-mark-wrapper {
-				position: absolute;
-				top: 0;
-				bottom: 0;
-				left: 0;
-				right: 0;
-				@include flex;
-				justify-content: center;
-				align-items: center;
-
-				&__text {
-					font-size: 155px;
-					color: rgba(231, 232, 234, 0.83);
-				}
-			}
-
-			&__day {
-				@include flex;
-				padding: 2px;
-				/* #ifndef APP-NVUE */
-				// vue下使用css进行宽度计算,因为某些安卓机会无法进行js获取父元素宽度进行计算得出,会有偏移
-				width: calc(100% / 7);
-				box-sizing: border-box;
-				/* #endif */
-
-				&__select {
-					flex: 1;
-					@include flex;
-					align-items: center;
-					justify-content: center;
-					position: relative;
-
-					&__dot {
-						width: 7px;
-						height: 7px;
-						border-radius: 100px;
-						background-color: $u-error;
-						position: absolute;
-						top: 12px;
-						right: 7px;
-					}
-
-					&__buttom-info {
-						color: $u-content-color;
-						text-align: center;
-						position: absolute;
-						bottom: 5px;
-						font-size: 10px;
-						text-align: center;
-						left: 0;
-						right: 0;
-
-						&--selected {
-							color: #ffffff;
-						}
-
-						&--disabled {
-							color: #cacbcd;
-						}
-					}
-
-					&__info {
-						text-align: center;
-						font-size: 16px;
-
-						&--selected {
-							color: #ffffff;
-						}
-
-						&--disabled {
-							color: #cacbcd;
-						}
-					}
-
-					&--selected {
-						background-color: $u-primary;
-						@include flex;
-						justify-content: center;
-						align-items: center;
-						flex: 1;
-						border-radius: 3px;
-					}
-
-					&--range-selected {
-						opacity: 0.3;
-						border-radius: 0;
-					}
-
-					&--range-start-selected {
-						border-top-right-radius: 0;
-						border-bottom-right-radius: 0;
-					}
-
-					&--range-end-selected {
-						border-top-left-radius: 0;
-						border-bottom-left-radius: 0;
-					}
-				}
-			}
-		}
-	}
-</style>

+ 0 - 144
uni_modules/uview-ui/components/u-calendar/props.js

@@ -1,144 +0,0 @@
-export default {
-    props: {
-        // 日历顶部标题
-        title: {
-            type: String,
-            default: uni.$u.props.calendar.title
-        },
-        // 是否显示标题
-        showTitle: {
-            type: Boolean,
-            default: uni.$u.props.calendar.showTitle
-        },
-        // 是否显示副标题
-        showSubtitle: {
-            type: Boolean,
-            default: uni.$u.props.calendar.showSubtitle
-        },
-        // 日期类型选择,single-选择单个日期,multiple-可以选择多个日期,range-选择日期范围
-        mode: {
-            type: String,
-            default: uni.$u.props.calendar.mode
-        },
-        // mode=range时,第一个日期底部的提示文字
-        startText: {
-            type: String,
-            default: uni.$u.props.calendar.startText
-        },
-        // mode=range时,最后一个日期底部的提示文字
-        endText: {
-            type: String,
-            default: uni.$u.props.calendar.endText
-        },
-        // 自定义列表
-        customList: {
-            type: Array,
-            default: uni.$u.props.calendar.customList
-        },
-        // 主题色,对底部按钮和选中日期有效
-        color: {
-            type: String,
-            default: uni.$u.props.calendar.color
-        },
-        // 最小的可选日期
-        minDate: {
-            type: [String, Number],
-            default: uni.$u.props.calendar.minDate
-        },
-        // 最大可选日期
-        maxDate: {
-            type: [String, Number],
-            default: uni.$u.props.calendar.maxDate
-        },
-        // 默认选中的日期,mode为multiple或range是必须为数组格式
-        defaultDate: {
-            type: [Array, String, Date, null],
-            default: uni.$u.props.calendar.defaultDate
-        },
-        // mode=multiple时,最多可选多少个日期
-        maxCount: {
-            type: [String, Number],
-            default: uni.$u.props.calendar.maxCount
-        },
-        // 日期行高
-        rowHeight: {
-            type: [String, Number],
-            default: uni.$u.props.calendar.rowHeight
-        },
-        // 日期格式化函数
-        formatter: {
-            type: [Function, null],
-            default: uni.$u.props.calendar.formatter
-        },
-        // 是否显示农历
-        showLunar: {
-            type: Boolean,
-            default: uni.$u.props.calendar.showLunar
-        },
-        // 是否显示月份背景色
-        showMark: {
-            type: Boolean,
-            default: uni.$u.props.calendar.showMark
-        },
-        // 确定按钮的文字
-        confirmText: {
-            type: String,
-            default: uni.$u.props.calendar.confirmText
-        },
-        // 确认按钮处于禁用状态时的文字
-        confirmDisabledText: {
-            type: String,
-            default: uni.$u.props.calendar.confirmDisabledText
-        },
-        // 是否显示日历弹窗
-        show: {
-            type: Boolean,
-            default: uni.$u.props.calendar.show
-        },
-        // 是否允许点击遮罩关闭日历
-        closeOnClickOverlay: {
-            type: Boolean,
-            default: uni.$u.props.calendar.closeOnClickOverlay
-        },
-        // 是否为只读状态,只读状态下禁止选择日期
-        readonly: {
-            type: Boolean,
-            default: uni.$u.props.calendar.readonly
-        },
-        // 	是否展示确认按钮
-        showConfirm: {
-            type: Boolean,
-            default: uni.$u.props.calendar.showConfirm
-        },
-        // 日期区间最多可选天数,默认无限制,mode = range时有效
-        maxRange: {
-            type: [Number, String],
-            default: uni.$u.props.calendar.maxRange
-        },
-        // 范围选择超过最多可选天数时的提示文案,mode = range时有效
-        rangePrompt: {
-            type: String,
-            default: uni.$u.props.calendar.rangePrompt
-        },
-        // 范围选择超过最多可选天数时,是否展示提示文案,mode = range时有效
-        showRangePrompt: {
-            type: Boolean,
-            default: uni.$u.props.calendar.showRangePrompt
-        },
-        // 是否允许日期范围的起止时间为同一天,mode = range时有效
-        allowSameDay: {
-            type: Boolean,
-            default: uni.$u.props.calendar.allowSameDay
-        },
-		// 圆角值
-		round: {
-		    type: [Boolean, String, Number],
-		    default: uni.$u.props.calendar.round
-		},
-		// 最多展示月份数量
-		monthNum: {
-			type: [Number, String],
-			default: 3
-		}	
-    }
-}

+ 0 - 384
uni_modules/uview-ui/components/u-calendar/u-calendar.vue

@@ -1,384 +0,0 @@
-<template>
-	<u-popup
-		:show="show"
-		mode="bottom"
-		closeable
-		@close="close"
-		:round="round"
-		:closeOnClickOverlay="closeOnClickOverlay"
-	>
-		<view class="u-calendar">
-			<uHeader
-				:title="title"
-				:subtitle="subtitle"
-				:showSubtitle="showSubtitle"
-				:showTitle="showTitle"
-			></uHeader>
-			<scroll-view
-				:style="{
-                    height: $u.addUnit(listHeight)
-                }"
-				scroll-y
-				@scroll="onScroll"
-				:scroll-top="scrollTop"
-				:scrollIntoView="scrollIntoView"
-			>
-				<uMonth
-					:color="color"
-					:rowHeight="rowHeight"
-					:showMark="showMark"
-					:months="months"
-					:mode="mode"
-					:maxCount="maxCount"
-					:startText="startText"
-					:endText="endText"
-					:defaultDate="defaultDate"
-					:minDate="innerMinDate"
-					:maxDate="innerMaxDate"
-					:maxMonth="monthNum"
-					:readonly="readonly"
-					:maxRange="maxRange"
-					:rangePrompt="rangePrompt"
-					:showRangePrompt="showRangePrompt"
-					:allowSameDay="allowSameDay"
-					ref="month"
-					@monthSelected="monthSelected"
-					@updateMonthTop="updateMonthTop"
-				></uMonth>
-			</scroll-view>
-			<slot name="footer" v-if="showConfirm">
-				<view class="u-calendar__confirm">
-					<u-button
-						shape="circle"
-						:text="
-                            buttonDisabled ? confirmDisabledText : confirmText
-                        "
-						:color="color"
-						@click="confirm"
-						:disabled="buttonDisabled"
-					></u-button>
-				</view>
-			</slot>
-		</view>
-	</u-popup>
-</template>
-
-<script>
-import uHeader from './header.vue'
-import uMonth from './month.vue'
-import props from './props.js'
-import util from './util.js'
-import dayjs from '../../libs/util/dayjs.js'
-import Calendar from '../../libs/util/calendar.js'
-/**
- * Calendar 日历
- * @description  此组件用于单个选择日期,范围选择日期等,日历被包裹在底部弹起的容器中.
- * @tutorial https://www.uviewui.com/components/calendar.html
- *
- * @property {String}				title				标题内容 (默认 日期选择 )
- * @property {Boolean}				showTitle			是否显示标题  (默认 true )
- * @property {Boolean}				showSubtitle		是否显示副标题	(默认 true )
- * @property {String}				mode				日期类型选择  single-选择单个日期,multiple-可以选择多个日期,range-选择日期范围 ( 默认 'single' )
- * @property {String}				startText			mode=range时,第一个日期底部的提示文字  (默认 '开始' )
- * @property {String}				endText				mode=range时,最后一个日期底部的提示文字 (默认 '结束' )
- * @property {Array}				customList			自定义列表
- * @property {String}				color				主题色,对底部按钮和选中日期有效  (默认 ‘#3c9cff' )
- * @property {String | Number}		minDate				最小的可选日期	 (默认 0 )
- * @property {String | Number}		maxDate				最大可选日期  (默认 0 )
- * @property {Array | String| Date}	defaultDate			默认选中的日期,mode为multiple或range是必须为数组格式
- * @property {String | Number}		maxCount			mode=multiple时,最多可选多少个日期  (默认 	Number.MAX_SAFE_INTEGER  )
- * @property {String | Number}		rowHeight			日期行高 (默认 56 )
- * @property {Function}				formatter			日期格式化函数
- * @property {Boolean}				showLunar			是否显示农历  (默认 false )
- * @property {Boolean}				showMark			是否显示月份背景色 (默认 true )
- * @property {String}				confirmText			确定按钮的文字 (默认 '确定' )
- * @property {String}				confirmDisabledText	确认按钮处于禁用状态时的文字 (默认 '确定' )
- * @property {Boolean}				show				是否显示日历弹窗 (默认 false )
- * @property {Boolean}				closeOnClickOverlay	是否允许点击遮罩关闭日历 (默认 false )
- * @property {Boolean}				readonly	        是否为只读状态,只读状态下禁止选择日期 (默认 false )
- * @property {String | Number}		maxRange	        日期区间最多可选天数,默认无限制,mode = range时有效
- * @property {String}				rangePrompt	        范围选择超过最多可选天数时的提示文案,mode = range时有效
- * @property {Boolean}				showRangePrompt	    范围选择超过最多可选天数时,是否展示提示文案,mode = range时有效 (默认 true )
- * @property {Boolean}				allowSameDay	    是否允许日期范围的起止时间为同一天,mode = range时有效 (默认 false )
- * @property {Number|String}	    round				圆角值,默认无圆角  (默认 0 )
- * @property {Number|String}	    monthNum			最多展示的月份数量  (默认 3 )
- *
- * @event {Function()} confirm 		点击确定按钮时触发		选择日期相关的返回参数
- * @event {Function()} close 		日历关闭时触发			可定义页面关闭时的回调事件
- * @example <u-calendar  :defaultDate="defaultDateMultiple" :show="show" mode="multiple" @confirm="confirm">
-	</u-calendar>
- * */
-export default {
-	name: 'u-calendar',
-	mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
-	components: {
-		uHeader,
-		uMonth
-	},
-	data() {
-		return {
-			// 需要显示的月份的数组
-			months: [],
-			// 在月份滚动区域中,当前视图中月份的index索引
-			monthIndex: 0,
-			// 月份滚动区域的高度
-			listHeight: 0,
-			// month组件中选择的日期数组
-			selected: [],
-			scrollIntoView: '',
-			scrollTop:0,
-			// 过滤处理方法
-			innerFormatter: (value) => value
-		}
-	},
-	watch: {
-		selectedChange: {
-			immediate: true,
-			handler(n) {
-				this.setMonth()
-			}
-		},
-		// 打开弹窗时,设置月份数据
-		show: {
-			immediate: true,
-			handler(n) {
-				this.setMonth()
-			}
-		}
-	},
-	computed: {
-		// 由于maxDate和minDate可以为字符串(2021-10-10),或者数值(时间戳),但是dayjs如果接受字符串形式的时间戳会有问题,这里进行处理
-		innerMaxDate() {
-			return uni.$u.test.number(this.maxDate)
-				? Number(this.maxDate)
-				: this.maxDate
-		},
-		innerMinDate() {
-			return uni.$u.test.number(this.minDate)
-				? Number(this.minDate)
-				: this.minDate
-		},
-		// 多个条件的变化,会引起选中日期的变化,这里统一管理监听
-		selectedChange() {
-			return [this.innerMinDate, this.innerMaxDate, this.defaultDate]
-		},
-		subtitle() {
-			// 初始化时,this.months为空数组,所以需要特别判断处理
-			if (this.months.length) {
-				return `${this.months[this.monthIndex].year}年${
-					this.months[this.monthIndex].month
-				}月`
-			} else {
-				return ''
-			}
-		},
-		buttonDisabled() {
-			// 如果为range类型,且选择的日期个数不足1个时,让底部的按钮出于disabled状态
-			if (this.mode === 'range') {
-				if (this.selected.length <= 1) {
-					return true
-				} else {
-					return false
-				}
-			} else {
-				return false
-			}
-		}
-	},
-	mounted() {
-		this.start = Date.now()
-		this.init()
-	},
-	methods: {
-		// 在微信小程序中,不支持将函数当做props参数,故只能通过ref形式调用
-		setFormatter(e) {
-			this.innerFormatter = e
-		},
-		// month组件内部选择日期后,通过事件通知给父组件
-		monthSelected(e) {
-			this.selected = e
-			if (!this.showConfirm) {
-				// 在不需要确认按钮的情况下,如果为单选,或者范围多选且已选长度大于2,则直接进行返还
-				if (
-					this.mode === 'multiple' ||
-					this.mode === 'single' ||
-					(this.mode === 'range' && this.selected.length >= 2)
-				) {
-					this.$emit('confirm', this.selected)
-				}
-			}
-		},
-		init() {
-			// 校验maxDate,不能小于minDate
-			if (
-				this.innerMaxDate &&
-				this.innerMinDate &&
-				new Date(this.innerMaxDate).getTime() < new Date(this.innerMinDate).getTime()
-			) {
-				return uni.$u.error('maxDate不能小于minDate')
-			}
-			// 滚动区域的高度
-			this.listHeight = this.rowHeight * 5 + 30
-			this.setMonth()
-		},
-		close() {
-			this.$emit('close')
-		},
-		// 点击确定按钮
-		confirm() {
-			if (!this.buttonDisabled) {
-				this.$emit('confirm', this.selected)
-			}
-		},
-		// 获得两个日期之间的月份数
-		getMonths(minDate, maxDate) {
-			const minYear = dayjs(minDate).year()
-			const minMonth = dayjs(minDate).month() + 1
-			const maxYear = dayjs(maxDate).year()
-			const maxMonth = dayjs(maxDate).month() + 1
-			return (maxYear - minYear) * 12 + (maxMonth - minMonth) + 1
-		},
-		// 设置月份数据
-		setMonth() {
-			// 最小日期的毫秒数
-			const minDate = this.innerMinDate || dayjs().valueOf()
-			// 如果没有指定最大日期,则往后推3个月
-			const maxDate =
-				this.innerMaxDate ||
-				dayjs(minDate)
-					.add(this.monthNum - 1, 'month')
-					.valueOf()
-			// 最大最小月份之间的共有多少个月份,
-			const months = uni.$u.range(
-				1,
-				this.monthNum,
-				this.getMonths(minDate, maxDate)
-			)
-			// 先清空数组
-			this.months = []
-			for (let i = 0; i < months; i++) {
-				this.months.push({
-					date: new Array(
-						dayjs(minDate).add(i, 'month').daysInMonth()
-					)
-						.fill(1)
-						.map((item, index) => {
-							// 日期,取值1-31
-							let day = index + 1
-							// 星期,0-6,0为周日
-							const week = dayjs(minDate)
-								.add(i, 'month')
-								.date(day)
-								.day()
-							const date = dayjs(minDate)
-								.add(i, 'month')
-								.date(day)
-								.format('YYYY-MM-DD')
-							let bottomInfo = ''
-							if (this.showLunar) {
-								// 将日期转为农历格式
-								const lunar = Calendar.solar2lunar(
-									dayjs(date).year(),
-									dayjs(date).month() + 1,
-									dayjs(date).date()
-								)
-								bottomInfo = lunar.IDayCn
-							}
-							let config = {
-								day,
-								week,
-								// 小于最小允许的日期,或者大于最大的日期,则设置为disabled状态
-								disabled:
-									dayjs(date).isBefore(
-										dayjs(minDate).format('YYYY-MM-DD')
-									) ||
-									dayjs(date).isAfter(
-										dayjs(maxDate).format('YYYY-MM-DD')
-									),
-								// 返回一个日期对象,供外部的formatter获取当前日期的年月日等信息,进行加工处理
-								date: new Date(date),
-								bottomInfo,
-								dot: false,
-								month:
-									dayjs(minDate).add(i, 'month').month() + 1
-							}
-							const formatter =
-								this.formatter || this.innerFormatter
-							return formatter(config)
-						}),
-					// 当前所属的月份
-					month: dayjs(minDate).add(i, 'month').month() + 1,
-					// 当前年份
-					year: dayjs(minDate).add(i, 'month').year()
-				})
-			}
-
-		},
-		// 滚动到默认设置的月份
-		scrollIntoDefaultMonth(selected) {
-			// 查询默认日期在可选列表的下标
-			const _index = this.months.findIndex(({
-				  year,
-				  month
-			  }) => {
-				month = uni.$u.padZero(month)
-				return `${year}-${month}` === selected
-			})
-			if (_index !== -1) {
-				// #ifndef MP-WEIXIN
-				this.$nextTick(() => {
-					this.scrollIntoView = `month-${_index}`
-				})
-				// #endif
-				// #ifdef MP-WEIXIN
-				this.scrollTop = this.months[_index].top || 0;
-				// #endif
-			}
-		},
-		// scroll-view滚动监听
-		onScroll(event) {
-			// 不允许小于0的滚动值,如果scroll-view到顶了,继续下拉,会出现负数值
-			const scrollTop = Math.max(0, event.detail.scrollTop)
-			// 将当前滚动条数值,除以滚动区域的高度,可以得出当前滚动到了哪一个月份的索引
-			for (let i = 0; i < this.months.length; i++) {
-				if (scrollTop >= (this.months[i].top || this.listHeight)) {
-					this.monthIndex = i
-				}
-			}
-		},
-		// 更新月份的top值
-		updateMonthTop(topArr = []) {
-			// 设置对应月份的top值,用于onScroll方法更新月份
-			topArr.map((item, index) => {
-				this.months[index].top = item
-			})
-
-			// 获取默认日期的下标
-			if (!this.defaultDate) {
-				// 如果没有设置默认日期,则将当天日期设置为默认选中的日期
-				const selected = dayjs().format("YYYY-MM")
-				this.scrollIntoDefaultMonth(selected)
-				return
-			}
-			let selected = dayjs().format("YYYY-MM");
-			// 单选模式,可以是字符串或数组,Date对象等
-			if (!uni.$u.test.array(this.defaultDate)) {
-				selected = dayjs(this.defaultDate).format("YYYY-MM")
-			} else {
-				selected = dayjs(this.defaultDate[0]).format("YYYY-MM");
-			}
-			this.scrollIntoDefaultMonth(selected)
-		}
-	}
-}
-</script>
-
-<style lang="scss" scoped>
-@import '../../libs/css/components.scss';
-
-.u-calendar {
-	&__confirm {
-		padding: 7px 18px;
-	}
-}
-</style>

+ 0 - 85
uni_modules/uview-ui/components/u-calendar/util.js

@@ -1,85 +0,0 @@
-export default {
-    methods: {
-        // 设置月份数据
-        setMonth() {
-            // 月初是周几
-            const day = dayjs(this.date).date(1).day()
-            const start = day == 0 ? 6 : day - 1
-
-            // 本月天数
-            const days = dayjs(this.date).endOf('month').format('D')
-
-            // 上个月天数
-            const prevDays = dayjs(this.date).endOf('month').subtract(1, 'month').format('D')
-
-            // 日期数据
-            const arr = []
-            // 清空表格
-            this.month = []
-
-            // 添加上月数据
-            arr.push(
-                ...new Array(start).fill(1).map((e, i) => {
-                    const day = prevDays - start + i + 1
-
-                    return {
-                        value: day,
-                        disabled: true,
-                        date: dayjs(this.date).subtract(1, 'month').date(day).format('YYYY-MM-DD')
-                    }
-                })
-            )
-
-            // 添加本月数据
-            arr.push(
-                ...new Array(days - 0).fill(1).map((e, i) => {
-                    const day = i + 1
-
-                    return {
-                        value: day,
-                        date: dayjs(this.date).date(day).format('YYYY-MM-DD')
-                    }
-                })
-            )
-
-            // 添加下个月
-            arr.push(
-                ...new Array(42 - days - start).fill(1).map((e, i) => {
-                    const day = i + 1
-
-                    return {
-                        value: day,
-                        disabled: true,
-                        date: dayjs(this.date).add(1, 'month').date(day).format('YYYY-MM-DD')
-                    }
-                })
-            )
-
-            // 分割数组
-            for (let n = 0; n < arr.length; n += 7) {
-                this.month.push(
-                    arr.slice(n, n + 7).map((e, i) => {
-                        e.index = i + n
-
-                        // 自定义信息
-                        const custom = this.customList.find((c) => c.date == e.date)
-
-                        // 农历
-                        if (this.lunar) {
-                            const {
-                                IDayCn,
-                                IMonthCn
-                            } = this.getLunar(e.date)
-                            e.lunar = IDayCn == '初一' ? IMonthCn : IDayCn
-                        }
-
-                        return {
-                            ...e,
-                            ...custom
-                        }
-                    })
-                )
-            }
-        }
-    }
-}

+ 0 - 14
uni_modules/uview-ui/components/u-car-keyboard/props.js

@@ -1,14 +0,0 @@
-export default {
-    props: {
-        // 是否打乱键盘按键的顺序
-        random: {
-            type: Boolean,
-            default: false
-        },
-        // 输入一个中文后,是否自动切换到英文
-        autoChange: {
-            type: Boolean,
-            default: false
-        }
-    }
-}

+ 0 - 311
uni_modules/uview-ui/components/u-car-keyboard/u-car-keyboard.vue

@@ -1,311 +0,0 @@
-<template>
-	<view
-		class="u-keyboard"
-		@touchmove.stop.prevent="noop"
-	>
-		<view
-			v-for="(group, i) in abc ? engKeyBoardList : areaList"
-			:key="i"
-			class="u-keyboard__button"
-			:index="i"
-			:class="[i + 1 === 4 && 'u-keyboard__button--center']"
-		>
-			<view
-				v-if="i === 3"
-				class="u-keyboard__button__inner-wrapper"
-			>
-				<view
-					class="u-keyboard__button__inner-wrapper__left"
-					hover-class="u-hover-class"
-					:hover-stay-time="200"
-					@tap="changeCarInputMode"
-				>
-					<text
-						class="u-keyboard__button__inner-wrapper__left__lang"
-						:class="[!abc && 'u-keyboard__button__inner-wrapper__left__lang--active']"
-					>中</text>
-					<text class="u-keyboard__button__inner-wrapper__left__line">/</text>
-					<text
-						class="u-keyboard__button__inner-wrapper__left__lang"
-						:class="[abc && 'u-keyboard__button__inner-wrapper__left__lang--active']"
-					>英</text>
-				</view>
-			</view>
-			<view
-				class="u-keyboard__button__inner-wrapper"
-				v-for="(item, j) in group"
-				:key="j"
-			>
-				<view
-					class="u-keyboard__button__inner-wrapper__inner"
-					:hover-stay-time="200"
-					@tap="carInputClick(i, j)"
-					hover-class="u-hover-class"
-				>
-					<text class="u-keyboard__button__inner-wrapper__inner__text">{{ item }}</text>
-				</view>
-			</view>
-			<view
-				v-if="i === 3"
-				@touchstart="backspaceClick"
-				@touchend="clearTimer"
-				class="u-keyboard__button__inner-wrapper"
-			>
-				<view
-					class="u-keyboard__button__inner-wrapper__right"
-					hover-class="u-hover-class"
-					:hover-stay-time="200"
-				>
-					<u-icon
-						size="28"
-						name="backspace"
-						color="#303133"
-					></u-icon>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import props from './props.js';
-	/**
-	 * keyboard 键盘组件
-	 * @description 此为uView自定义的键盘面板,内含了数字键盘,车牌号键,身份证号键盘3种模式,都有可以打乱按键顺序的选项。
-	 * @tutorial https://uviewui.com/components/keyboard.html
-	 * @property {Boolean} random 是否打乱键盘的顺序
-	 * @event {Function} change 点击键盘触发
-	 * @event {Function} backspace 点击退格键触发
-	 * @example <u-keyboard ref="uKeyboard" mode="car" v-model="show"></u-keyboard>
-	 */
-	export default {
-		name: "u-keyboard",
-		mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
-		data() {
-			return {
-				// 车牌输入时,abc=true为输入车牌号码,bac=false为输入省份中文简称
-				abc: false
-			};
-		},
-		computed: {
-			areaList() {
-				let data = [
-					'京',
-					'沪',
-					'粤',
-					'津',
-					'冀',
-					'豫',
-					'云',
-					'辽',
-					'黑',
-					'湘',
-					'皖',
-					'鲁',
-					'苏',
-					'浙',
-					'赣',
-					'鄂',
-					'桂',
-					'甘',
-					'晋',
-					'陕',
-					'蒙',
-					'吉',
-					'闽',
-					'贵',
-					'渝',
-					'川',
-					'青',
-					'琼',
-					'宁',
-					'挂',
-					'藏',
-					'港',
-					'澳',
-					'新',
-					'使',
-					'学'
-				];
-				let tmp = [];
-				// 打乱顺序
-				if (this.random) data = uni.$u.randomArray(data);
-				// 切割成二维数组
-				tmp[0] = data.slice(0, 10);
-				tmp[1] = data.slice(10, 20);
-				tmp[2] = data.slice(20, 30);
-				tmp[3] = data.slice(30, 36);
-				return tmp;
-			},
-			engKeyBoardList() {
-				let data = [
-					1,
-					2,
-					3,
-					4,
-					5,
-					6,
-					7,
-					8,
-					9,
-					0,
-					'Q',
-					'W',
-					'E',
-					'R',
-					'T',
-					'Y',
-					'U',
-					'I',
-					'O',
-					'P',
-					'A',
-					'S',
-					'D',
-					'F',
-					'G',
-					'H',
-					'J',
-					'K',
-					'L',
-					'Z',
-					'X',
-					'C',
-					'V',
-					'B',
-					'N',
-					'M'
-				];
-				let tmp = [];
-				if (this.random) data = uni.$u.randomArray(data);
-				tmp[0] = data.slice(0, 10);
-				tmp[1] = data.slice(10, 20);
-				tmp[2] = data.slice(20, 30);
-				tmp[3] = data.slice(30, 36);
-				return tmp;
-			}
-		},
-		methods: {
-			// 点击键盘按钮
-			carInputClick(i, j) {
-				let value = '';
-				// 不同模式,获取不同数组的值
-				if (this.abc) value = this.engKeyBoardList[i][j];
-				else value = this.areaList[i][j];
-				// 如果允许自动切换,则将中文状态切换为英文
-				if (!this.abc && this.autoChange) uni.$u.sleep(200).then(() => this.abc = true)
-				this.$emit('change', value);
-			},
-			// 修改汽车牌键盘的输入模式,中文|英文
-			changeCarInputMode() {
-				this.abc = !this.abc;
-			},
-			// 点击退格键
-			backspaceClick() {
-				this.$emit('backspace');
-				clearInterval(this.timer); //再次清空定时器,防止重复注册定时器
-				this.timer = null;
-				this.timer = setInterval(() => {
-					this.$emit('backspace');
-				}, 250);
-			},
-			clearTimer() {
-				clearInterval(this.timer);
-				this.timer = null;
-			},
-		}
-	};
-</script>
-
-<style lang="scss" scoped>
-	@import "../../libs/css/components.scss";
-	$u-car-keyboard-background-color: rgb(224, 228, 230) !default;
-	$u-car-keyboard-padding:6px 0 6px !default;
-	$u-car-keyboard-button-inner-width:64rpx !default;
-	$u-car-keyboard-button-inner-background-color:#FFFFFF !default;
-	$u-car-keyboard-button-height:80rpx !default;
-	$u-car-keyboard-button-inner-box-shadow:0 1px 0px #999992 !default;
-	$u-car-keyboard-button-border-radius:4px !default;
-	$u-car-keyboard-button-inner-margin:8rpx 5rpx !default;
-	$u-car-keyboard-button-text-font-size:16px !default;
-	$u-car-keyboard-button-text-color:$u-main-color !default;
-	$u-car-keyboard-center-inner-margin: 0 4rpx !default;
-	$u-car-keyboard-special-button-width:134rpx !default;
-	$u-car-keyboard-lang-font-size:16px !default;
-	$u-car-keyboard-lang-color:$u-main-color !default;
-	$u-car-keyboard-active-color:$u-primary !default;
-	$u-car-keyboard-line-font-size:15px !default;
-	$u-car-keyboard-line-color:$u-main-color !default;
-	$u-car-keyboard-line-margin:0 1px !default;
-	$u-car-keyboard-u-hover-class-background-color:#BBBCC6 !default;
-
-	.u-keyboard {
-		@include flex(column);
-		justify-content: space-around;
-		background-color: $u-car-keyboard-background-color;
-		align-items: stretch;
-		padding: $u-car-keyboard-padding;
-
-		&__button {
-			@include flex;
-			justify-content: center;
-			flex: 1;
-			/* #ifndef APP-NVUE */
-			/* #endif */
-
-			&__inner-wrapper {
-				box-shadow: $u-car-keyboard-button-inner-box-shadow;
-				margin: $u-car-keyboard-button-inner-margin;
-				border-radius: $u-car-keyboard-button-border-radius;
-
-				&__inner {
-					@include flex;
-					justify-content: center;
-					align-items: center;
-					width: $u-car-keyboard-button-inner-width;
-					background-color: $u-car-keyboard-button-inner-background-color;
-					height: $u-car-keyboard-button-height;
-					border-radius: $u-car-keyboard-button-border-radius;
-
-					&__text {
-						font-size: $u-car-keyboard-button-text-font-size;
-						color: $u-car-keyboard-button-text-color;
-					}
-				}
-
-				&__left,
-				&__right {
-					border-radius: $u-car-keyboard-button-border-radius;
-					width: $u-car-keyboard-special-button-width;
-					height: $u-car-keyboard-button-height;
-					background-color: $u-car-keyboard-u-hover-class-background-color;
-					@include flex;
-					justify-content: center;
-					align-items: center;
-					box-shadow: $u-car-keyboard-button-inner-box-shadow;
-				}
-
-				&__left {
-					&__line {
-						font-size: $u-car-keyboard-line-font-size;
-						color: $u-car-keyboard-line-color;
-						margin: $u-car-keyboard-line-margin;
-					}
-
-					&__lang {
-						font-size: $u-car-keyboard-lang-font-size;
-						color: $u-car-keyboard-lang-color;
-
-						&--active {
-							color: $u-car-keyboard-active-color;
-						}
-					}
-				}
-			}
-		}
-	}
-
-	.u-hover-class {
-		background-color: $u-car-keyboard-u-hover-class-background-color;
-	}
-</style>

+ 0 - 14
uni_modules/uview-ui/components/u-cell-group/props.js

@@ -1,14 +0,0 @@
-export default {
-    props: {
-        // 分组标题
-        title: {
-            type: String,
-            default: uni.$u.props.cellGroup.title
-        },
-        // 是否显示外边框
-        border: {
-            type: Boolean,
-            default: uni.$u.props.cellGroup.border
-        }
-    }
-}

+ 0 - 61
uni_modules/uview-ui/components/u-cell-group/u-cell-group.vue

@@ -1,61 +0,0 @@
-<template>
-    <view :style="[$u.addStyle(customStyle)]" :class="[customClass]" class="u-cell-group">
-        <view v-if="title" class="u-cell-group__title">
-            <slot name="title">
-				<text class="u-cell-group__title__text">{{ title }}</text>
-			</slot>
-        </view>
-        <view class="u-cell-group__wrapper">
-			<u-line v-if="border"></u-line>
-            <slot />
-        </view>
-    </view>
-</template>
-
-<script>
-	import props from './props.js';
-	/**
-	 * cellGroup  单元格
-	 * @description cell单元格一般用于一组列表的情况,比如个人中心页,设置页等。
-	 * @tutorial https://uviewui.com/components/cell.html
-	 * 
-	 * @property {String}	title		分组标题
-	 * @property {Boolean}	border		是否显示外边框 (默认 true )
-	 * @property {Object}	customStyle	定义需要用到的外部样式
-	 * 
-	 * @event {Function} click 	点击cell列表时触发
-	 * @example <u-cell-group title="设置喜好">
-	 */
-	export default {
-		name: 'u-cell-group',
-		mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
-	}
-</script>
-
-<style lang="scss" scoped>
-	@import "../../libs/css/components.scss";
-	
-	$u-cell-group-title-padding: 16px 16px 8px !default;
-	$u-cell-group-title-font-size: 15px !default;
-	$u-cell-group-title-line-height: 16px !default;
-	$u-cell-group-title-color: $u-main-color !default;
-
-    .u-cell-group {
-		flex: 1;
-		
-        &__title {
-            padding: $u-cell-group-title-padding;
-
-            &__text {
-                font-size: $u-cell-group-title-font-size;
-                line-height: $u-cell-group-title-line-height;
-                color: $u-cell-group-title-color;
-            }
-        }
-		
-		&__wrapper {
-			position: relative;
-		}
-    }
-</style>
-

+ 0 - 110
uni_modules/uview-ui/components/u-cell/props.js

@@ -1,110 +0,0 @@
-export default {
-    props: {
-        // 标题
-        title: {
-            type: [String, Number],
-            default: uni.$u.props.cell.title
-        },
-        // 标题下方的描述信息
-        label: {
-            type: [String, Number],
-            default: uni.$u.props.cell.label
-        },
-        // 右侧的内容
-        value: {
-            type: [String, Number],
-            default: uni.$u.props.cell.value
-        },
-        // 左侧图标名称,或者图片链接(本地文件建议使用绝对地址)
-        icon: {
-            type: String,
-            default: uni.$u.props.cell.icon
-        },
-        // 是否禁用cell
-        disabled: {
-            type: Boolean,
-            default: uni.$u.props.cell.disabled
-        },
-        // 是否显示下边框
-        border: {
-            type: Boolean,
-            default: uni.$u.props.cell.border
-        },
-        // 内容是否垂直居中(主要是针对右侧的value部分)
-        center: {
-            type: Boolean,
-            default: uni.$u.props.cell.center
-        },
-        // 点击后跳转的URL地址
-        url: {
-            type: String,
-            default: uni.$u.props.cell.url
-        },
-        // 链接跳转的方式,内部使用的是uView封装的route方法,可能会进行拦截操作
-        linkType: {
-            type: String,
-            default: uni.$u.props.cell.linkType
-        },
-        // 是否开启点击反馈(表现为点击时加上灰色背景)
-        clickable: {
-            type: Boolean,
-            default: uni.$u.props.cell.clickable
-        },
-        // 是否展示右侧箭头并开启点击反馈
-        isLink: {
-            type: Boolean,
-            default: uni.$u.props.cell.isLink
-        },
-        // 是否显示表单状态下的必填星号(此组件可能会内嵌入input组件)
-        required: {
-            type: Boolean,
-            default: uni.$u.props.cell.required
-        },
-        // 右侧的图标箭头
-        rightIcon: {
-            type: String,
-            default: uni.$u.props.cell.rightIcon
-        },
-        // 右侧箭头的方向,可选值为:left,up,down
-        arrowDirection: {
-            type: String,
-            default: uni.$u.props.cell.arrowDirection
-        },
-        // 左侧图标样式
-        iconStyle: {
-            type: [Object, String],
-            default: () => {
-				return uni.$u.props.cell.iconStyle
-			}
-        },
-        // 右侧箭头图标的样式
-        rightIconStyle: {
-            type: [Object, String],
-            default: () => {
-				return uni.$u.props.cell.rightIconStyle
-			}
-        },
-        // 标题的样式
-        titleStyle: {
-            type: [Object, String],
-			default: () => {
-				return uni.$u.props.cell.titleStyle
-			}
-        },
-        // 单位元的大小,可选值为large
-        size: {
-            type: String,
-            default: uni.$u.props.cell.size
-        },
-        // 点击cell是否阻止事件传播
-        stop: {
-            type: Boolean,
-            default: uni.$u.props.cell.stop
-        },
-        // 标识符,cell被点击时返回
-        name: {
-            type: [Number, String],
-            default: uni.$u.props.cell.name
-        }
-    }
-}

+ 0 - 229
uni_modules/uview-ui/components/u-cell/u-cell.vue

@@ -1,229 +0,0 @@
-<template>
-	<view class="u-cell" :class="[customClass]" :style="[$u.addStyle(customStyle)]"
-		:hover-class="(!disabled && (clickable || isLink)) ? 'u-cell--clickable' : ''" :hover-stay-time="250"
-		@tap="clickHandler">
-		<view class="u-cell__body" :class="[ center && 'u-cell--center', size === 'large' && 'u-cell__body--large']">
-			<view class="u-cell__body__content">
-				<view class="u-cell__left-icon-wrap" v-if="$slots.icon || icon">
-					<slot name="icon" v-if="$slots.icon">
-					</slot>
-					<u-icon v-else :name="icon" :custom-style="iconStyle" :size="size === 'large' ? 22 : 18"></u-icon>
-				</view>
-				<view class="u-cell__title">
-					<slot name="title">
-						<text v-if="title" class="u-cell__title-text" :style="[titleTextStyle]"
-							:class="[disabled && 'u-cell--disabled', size === 'large' && 'u-cell__title-text--large']">{{ title }}</text>
-					</slot>
-					<slot name="label">
-						<text class="u-cell__label" v-if="label"
-							:class="[disabled && 'u-cell--disabled', size === 'large' && 'u-cell__label--large']">{{ label }}</text>
-					</slot>
-				</view>
-			</view>
-			<slot name="value">
-				<text class="u-cell__value"
-					:class="[disabled && 'u-cell--disabled', size === 'large' && 'u-cell__value--large']"
-					v-if="!$u.test.empty(value)">{{ value }}</text>
-			</slot>
-			<view class="u-cell__right-icon-wrap" v-if="$slots['right-icon'] || isLink"
-				:class="[`u-cell__right-icon-wrap--${arrowDirection}`]">
-				<slot name="right-icon" v-if="$slots['right-icon']">
-				</slot>
-				<u-icon v-else :name="rightIcon" :custom-style="rightIconStyle" :color="disabled ? '#c8c9cc' : 'info'"
-					:size="size === 'large' ? 18 : 16"></u-icon>
-			</view>
-		</view>
-		<u-line v-if="border"></u-line>
-	</view>
-</template>
-
-<script>
-	import props from './props.js';
-	/**
-	 * cell  单元格
-	 * @description cell单元格一般用于一组列表的情况,比如个人中心页,设置页等。
-	 * @tutorial https://uviewui.com/components/cell.html
-	 * @property {String | Number}	title			标题
-	 * @property {String | Number}	label			标题下方的描述信息
-	 * @property {String | Number}	value			右侧的内容
-	 * @property {String}			icon			左侧图标名称,或者图片链接(本地文件建议使用绝对地址)
-	 * @property {Boolean}			disabled		是否禁用cell	
-	 * @property {Boolean}			border			是否显示下边框 (默认 true )
-	 * @property {Boolean}			center			内容是否垂直居中(主要是针对右侧的value部分) (默认 false )
-	 * @property {String}			url				点击后跳转的URL地址
-	 * @property {String}			linkType		链接跳转的方式,内部使用的是uView封装的route方法,可能会进行拦截操作 (默认 'navigateTo' )
-	 * @property {Boolean}			clickable		是否开启点击反馈(表现为点击时加上灰色背景) (默认 false ) 
-	 * @property {Boolean}			isLink			是否展示右侧箭头并开启点击反馈 (默认 false )
-	 * @property {Boolean}			required		是否显示表单状态下的必填星号(此组件可能会内嵌入input组件) (默认 false )
-	 * @property {String}			rightIcon		右侧的图标箭头 (默认 'arrow-right')
-	 * @property {String}			arrowDirection	右侧箭头的方向,可选值为:left,up,down
-	 * @property {Object | String}			rightIconStyle	右侧箭头图标的样式
-	 * @property {Object | String}			titleStyle		标题的样式
-	 * @property {Object | String}			iconStyle		左侧图标样式
-	 * @property {String}			size			单位元的大小,可选值为 large,normal,mini 
-	 * @property {Boolean}			stop			点击cell是否阻止事件传播 (默认 true )
-	 * @property {Object}			customStyle		定义需要用到的外部样式
-	 * 
-	 * @event {Function}			click			点击cell列表时触发
-	 * @example 该组件需要搭配cell-group组件使用,见官方文档示例
-	 */
-	export default {
-		name: 'u-cell',
-		data() {
-			return {
-
-			}
-		},
-		mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
-		computed: {
-			titleTextStyle() {
-				return uni.$u.addStyle(this.titleStyle)
-			}
-		},
-		methods: {
-			// 点击cell
-			clickHandler(e) {
-				if (this.disabled) return
-				this.$emit('click', {
-					name: this.name
-				})
-				// 如果配置了url(此props参数通过mixin引入)参数,跳转页面
-				this.openPage()
-				// 是否阻止事件传播
-				this.stop && this.preventEvent(e)
-			},
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	@import "../../libs/css/components.scss";
-
-	$u-cell-padding: 10px 15px !default;
-	$u-cell-font-size: 15px !default;
-	$u-cell-line-height: 24px !default;
-	$u-cell-color: $u-main-color !default;
-	$u-cell-icon-size: 16px !default;
-	$u-cell-title-font-size: 15px !default;
-	$u-cell-title-line-height: 22px !default;
-	$u-cell-title-color: $u-main-color !default;
-	$u-cell-label-font-size: 12px !default;
-	$u-cell-label-color: $u-tips-color !default;
-	$u-cell-label-line-height: 18px !default;
-	$u-cell-value-font-size: 14px !default;
-	$u-cell-value-color: $u-content-color !default;
-	$u-cell-clickable-color: $u-bg-color !default;
-	$u-cell-disabled-color: #c8c9cc !default;
-	$u-cell-padding-top-large: 13px !default;
-	$u-cell-padding-bottom-large: 13px !default;
-	$u-cell-value-font-size-large: 15px !default;
-	$u-cell-label-font-size-large: 14px !default;
-	$u-cell-title-font-size-large: 16px !default;
-	$u-cell-left-icon-wrap-margin-right: 4px !default;
-	$u-cell-right-icon-wrap-margin-left: 4px !default;
-	$u-cell-title-flex:1 !default;
-	$u-cell-label-margin-top:5px !default;
-
-
-	.u-cell {
-		&__body {
-			@include flex();
-			/* #ifndef APP-NVUE */
-			box-sizing: border-box;
-			/* #endif */
-			padding: $u-cell-padding;
-			font-size: $u-cell-font-size;
-			color: $u-cell-color;
-			// line-height: $u-cell-line-height;
-			align-items: center;
-
-			&__content {
-				@include flex(row);
-				align-items: center;
-				flex: 1;
-			}
-
-			&--large {
-				padding-top: $u-cell-padding-top-large;
-				padding-bottom: $u-cell-padding-bottom-large;
-			}
-		}
-
-		&__left-icon-wrap,
-		&__right-icon-wrap {
-			@include flex();
-			align-items: center;
-			// height: $u-cell-line-height;
-			font-size: $u-cell-icon-size;
-		}
-
-		&__left-icon-wrap {
-			margin-right: $u-cell-left-icon-wrap-margin-right;
-		}
-
-		&__right-icon-wrap {
-			margin-left: $u-cell-right-icon-wrap-margin-left;
-			transition: transform 0.3s;
-
-			&--up {
-				transform: rotate(-90deg);
-			}
-
-			&--down {
-				transform: rotate(90deg);
-			}
-		}
-
-		&__title {
-			flex: $u-cell-title-flex;
-
-			&-text {
-				font-size: $u-cell-title-font-size;
-				line-height: $u-cell-title-line-height;
-				color: $u-cell-title-color;
-
-				&--large {
-					font-size: $u-cell-title-font-size-large;
-				}
-			}
-
-		}
-
-		&__label {
-			margin-top: $u-cell-label-margin-top;
-			font-size: $u-cell-label-font-size;
-			color: $u-cell-label-color;
-			line-height: $u-cell-label-line-height;
-
-			&--large {
-				font-size: $u-cell-label-font-size-large;
-			}
-		}
-
-		&__value {
-			text-align: right;
-			font-size: $u-cell-value-font-size;
-			line-height: $u-cell-line-height;
-			color: $u-cell-value-color;
-
-			&--large {
-				font-size: $u-cell-value-font-size-large;
-			}
-		}
-
-		&--clickable {
-			background-color: $u-cell-clickable-color;
-		}
-
-		&--disabled {
-			color: $u-cell-disabled-color;
-			/* #ifndef APP-NVUE */
-			cursor: not-allowed;
-			/* #endif */
-		}
-
-		&--center {
-			align-items: center;
-		}
-	}
-</style>

+ 0 - 82
uni_modules/uview-ui/components/u-checkbox-group/props.js

@@ -1,82 +0,0 @@
-export default {
-    props: {
-        // 标识符
-        name: {
-            type: String,
-            default: uni.$u.props.checkboxGroup.name
-        },
-        // 绑定的值
-        value: {
-            type: Array,
-            default: uni.$u.props.checkboxGroup.value
-        },
-        // 形状,circle-圆形,square-方形
-        shape: {
-            type: String,
-            default: uni.$u.props.checkboxGroup.shape
-        },
-        // 是否禁用全部checkbox
-        disabled: {
-            type: Boolean,
-            default: uni.$u.props.checkboxGroup.disabled
-        },
-
-        // 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值
-        activeColor: {
-            type: String,
-            default: uni.$u.props.checkboxGroup.activeColor
-        },
-        // 未选中的颜色
-        inactiveColor: {
-            type: String,
-            default: uni.$u.props.checkboxGroup.inactiveColor
-        },
-
-        // 整个组件的尺寸,默认px
-        size: {
-            type: [String, Number],
-            default: uni.$u.props.checkboxGroup.size
-        },
-        // 布局方式,row-横向,column-纵向
-        placement: {
-            type: String,
-            default: uni.$u.props.checkboxGroup.placement
-        },
-        // label的字体大小,px单位
-        labelSize: {
-            type: [String, Number],
-            default: uni.$u.props.checkboxGroup.labelSize
-        },
-        // label的字体颜色
-        labelColor: {
-            type: [String],
-            default: uni.$u.props.checkboxGroup.labelColor
-        },
-        // 是否禁止点击文本操作
-        labelDisabled: {
-            type: Boolean,
-            default: uni.$u.props.checkboxGroup.labelDisabled
-        },
-        // 图标颜色
-        iconColor: {
-            type: String,
-            default: uni.$u.props.checkboxGroup.iconColor
-        },
-        // 图标的大小,单位px
-        iconSize: {
-            type: [String, Number],
-            default: uni.$u.props.checkboxGroup.iconSize
-        },
-        // 勾选图标的对齐方式,left-左边,right-右边
-        iconPlacement: {
-            type: String,
-            default: uni.$u.props.checkboxGroup.iconPlacement
-        },
-        // 竖向配列时,是否显示下划线
-        borderBottom: {
-            type: Boolean,
-            default: uni.$u.props.checkboxGroup.borderBottom
-        }
-
-    }
-}

+ 0 - 103
uni_modules/uview-ui/components/u-checkbox-group/u-checkbox-group.vue

@@ -1,103 +0,0 @@
-<template>
-	<view
-	    class="u-checkbox-group"
-	    :class="bemClass"
-	>
-		<slot></slot>
-	</view>
-</template>
-
-<script>
-	import props from './props.js';
-	/**
-	 * checkboxGroup 复选框组
-	 * @description 复选框组件一般用于需要多个选择的场景,该组件功能完整,使用方便
-	 * @tutorial https://www.uviewui.com/components/checkbox.html
-	 * @property {String}			name			标识符 
-	 * @property {Array}			value			绑定的值
-	 * @property {String}			shape			形状,circle-圆形,square-方形 (默认 'square' )
-	 * @property {Boolean}			disabled		是否禁用全部checkbox (默认 false )
-	 * @property {String}			activeColor		选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值 (默认 '#2979ff' )
-	 * @property {String}			inactiveColor	未选中的颜色 (默认 '#c8c9cc' )
-	 * @property {String | Number}	size			整个组件的尺寸 单位px (默认 18 )
-	 * @property {String}			placement		布局方式,row-横向,column-纵向 (默认 'row' )
-	 * @property {String | Number}	labelSize		label的字体大小,px单位  (默认 14 )
-	 * @property {String}			labelColor		label的字体颜色 (默认 '#303133' )
-	 * @property {Boolean}			labelDisabled	是否禁止点击文本操作 (默认 false )
-	 * @property {String}			iconColor		图标颜色 (默认 '#ffffff' )
-	 * @property {String | Number}	iconSize		图标的大小,单位px (默认 12 )
-	 * @property {String}			iconPlacement	勾选图标的对齐方式,left-左边,right-右边  (默认 'left' )
-	 * @property {Boolean}			borderBottom	placement为row时,是否显示下边框 (默认 false )
-	 * @event {Function}	change	任一个checkbox状态发生变化时触发,回调为一个对象
-	 * @event {Function}	input	修改通过v-model绑定的值时触发,回调为一个对象
-	 * @example <u-checkbox-group></u-checkbox-group>
-	 */
-	export default {
-		name: 'u-checkbox-group',
-		mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
-		computed: {
-			// 这里computed的变量,都是子组件u-checkbox需要用到的,由于头条小程序的兼容性差异,子组件无法实时监听父组件参数的变化
-			// 所以需要手动通知子组件,这里返回一个parentData变量,供watch监听,在其中去通知每一个子组件重新从父组件(u-checkbox-group)
-			// 拉取父组件新的变化后的参数
-			parentData() {
-				return [this.value, this.disabled, this.inactiveColor, this.activeColor, this.size, this.labelDisabled, this.shape,
-					this.iconSize, this.borderBottom, this.placement
-				]
-			},
-			bemClass() {
-				// this.bem为一个computed变量,在mixin中
-				return this.bem('checkbox-group', ['placement'])
-			},
-		},
-		watch: {
-			// 当父组件需要子组件需要共享的参数发生了变化,手动通知子组件
-			parentData() {
-				if (this.children.length) {
-					this.children.map(child => {
-						// 判断子组件(u-checkbox)如果有init方法的话,就就执行(执行的结果是子组件重新从父组件拉取了最新的值)
-						typeof(child.init) === 'function' && child.init()
-					})
-				}
-			},
-		},
-		data() {
-			return {
-
-			}
-		},
-		created() {
-			this.children = []
-		},
-		methods: {
-			// 将其他的checkbox设置为未选中的状态
-			unCheckedOther(childInstance) {
-				const values = []
-				this.children.map(child => {
-					// 将被选中的checkbox,放到数组中返回
-					if (child.isChecked) {
-						values.push(child.name)
-					}
-				})
-				// 发出事件
-				this.$emit('change', values)
-				// 修改通过v-model绑定的值
-				this.$emit('input', values)
-			},
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	@import "../../libs/css/components.scss";
-
-	.u-checkbox-group {
-
-		&--row {
-			@include flex;
-		}
-
-		&--column {
-			@include flex(column);
-		}
-	}
-</style>

+ 0 - 69
uni_modules/uview-ui/components/u-checkbox/props.js

@@ -1,69 +0,0 @@
-export default {
-    props: {
-        // checkbox的名称
-        name: {
-            type: [String, Number, Boolean],
-            default: uni.$u.props.checkbox.name
-        },
-        // 形状,square为方形,circle为圆型
-        shape: {
-            type: String,
-            default: uni.$u.props.checkbox.shape
-        },
-        // 整体的大小
-        size: {
-            type: [String, Number],
-            default: uni.$u.props.checkbox.size
-        },
-        // 是否默认选中
-        checked: {
-            type: Boolean,
-            default: uni.$u.props.checkbox.checked
-        },
-        // 是否禁用
-        disabled: {
-            type: [String, Boolean],
-            default: uni.$u.props.checkbox.disabled
-        },
-        // 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值
-        activeColor: {
-            type: String,
-            default: uni.$u.props.checkbox.activeColor
-        },
-        // 未选中的颜色
-        inactiveColor: {
-            type: String,
-            default: uni.$u.props.checkbox.inactiveColor
-        },
-        // 图标的大小,单位px
-        iconSize: {
-            type: [String, Number],
-            default: uni.$u.props.checkbox.iconSize
-        },
-        // 图标颜色
-        iconColor: {
-            type: String,
-            default: uni.$u.props.checkbox.iconColor
-        },
-        // label提示文字,因为nvue下,直接slot进来的文字,由于特殊的结构,无法修改样式
-        label: {
-            type: [String, Number],
-            default: uni.$u.props.checkbox.label
-        },
-        // label的字体大小,px单位
-        labelSize: {
-            type: [String, Number],
-            default: uni.$u.props.checkbox.labelSize
-        },
-        // label的颜色
-        labelColor: {
-            type: String,
-            default: uni.$u.props.checkbox.labelColor
-        },
-        // 是否禁止点击提示语选中复选框
-        labelDisabled: {
-            type: [String, Boolean],
-            default: uni.$u.props.checkbox.labelDisabled
-        }
-    }
-}

+ 0 - 344
uni_modules/uview-ui/components/u-checkbox/u-checkbox.vue

@@ -1,344 +0,0 @@
-<template>
-	<view
-	    class="u-checkbox"
-	    :style="[checkboxStyle]"
-	    @tap.stop="wrapperClickHandler"
-	    :class="[`u-checkbox-label--${parentData.iconPlacement}`, parentData.borderBottom && parentData.placement === 'column' && 'u-border-bottom']"
-	>
-		<view
-		    class="u-checkbox__icon-wrap"
-		    @tap.stop="iconClickHandler"
-		    :class="iconClasses"
-		    :style="[iconWrapStyle]"
-		>
-			<slot name="icon">
-				<u-icon
-				    class="u-checkbox__icon-wrap__icon"
-				    name="checkbox-mark"
-				    :size="elIconSize"
-				    :color="elIconColor"
-				/>
-			</slot>
-		</view>
-		<text
-		    @tap.stop="labelClickHandler"
-		    :style="{
-				color: elDisabled ? elInactiveColor : elLabelColor,
-				fontSize: elLabelSize,
-				lineHeight: elLabelSize
-			}"
-		>{{label}}</text>
-	</view>
-</template>
-
-<script>
-	import props from './props.js';
-	/**
-	 * checkbox  复选框
-	 * @description 复选框组件一般用于需要多个选择的场景,该组件功能完整,使用方便
-	 * @tutorial https://uviewui.com/components/checkbox.html
-	 * @property {String | Number | Boolean}	name			checkbox组件的标示符
-	 * @property {String}						shape			形状,square为方形,circle为圆型
-	 * @property {String | Number}				size			整体的大小
-	 * @property {Boolean}						checked			是否默认选中
-	 * @property {String | Boolean}				disabled		是否禁用
-	 * @property {String}						activeColor		选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值
-	 * @property {String}						inactiveColor	未选中的颜色
-	 * @property {String | Number}				iconSize		图标的大小,单位px
-	 * @property {String}						iconColor		图标颜色
-	 * @property {String | Number}				label			label提示文字,因为nvue下,直接slot进来的文字,由于特殊的结构,无法修改样式
-	 * @property {String}						labelColor 		label的颜色
-	 * @property {String | Number}				labelSize		label的字体大小,px单位
-	 * @property {String | Boolean}				labelDisabled	是否禁止点击提示语选中复选框
-	 * @property {Object}						customStyle		定义需要用到的外部样式
-	 * 
-	 * @event {Function}	change	任一个checkbox状态发生变化时触发,回调为一个对象
-	 * @example <u-checkbox v-model="checked" :disabled="false">天涯</u-checkbox>
-	 */
-	export default {
-		name: "u-checkbox",
-		mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
-		data() {
-			return {
-				isChecked: false,
-				// 父组件的默认值,因为头条小程序不支持在computed中使用this.parent.shape的形式
-				// 故只能使用如此方法
-				parentData: {
-					iconSize: 12,
-					labelDisabled: null,
-					disabled: null,
-					shape: 'square',
-					activeColor: null,
-					inactiveColor: null,
-					size: 18,
-					value: null,
-					iconColor: null,
-					placement: 'row',
-					borderBottom: false,
-					iconPlacement: 'left'
-				}
-			}
-		},
-		computed: {
-			// 是否禁用,如果父组件u-raios-group禁用的话,将会忽略子组件的配置
-			elDisabled() {
-				return this.disabled !== '' ? this.disabled : this.parentData.disabled !== null ? this.parentData.disabled : false;
-			},
-			// 是否禁用label点击
-			elLabelDisabled() {
-				return this.labelDisabled !== '' ? this.labelDisabled : this.parentData.labelDisabled !== null ? this.parentData.labelDisabled :
-					false;
-			},
-			// 组件尺寸,对应size的值,默认值为21px
-			elSize() {
-				return this.size ? this.size : (this.parentData.size ? this.parentData.size : 21);
-			},
-			// 组件的勾选图标的尺寸,默认12px
-			elIconSize() {
-				return this.iconSize ? this.iconSize : (this.parentData.iconSize ? this.parentData.iconSize : 12);
-			},
-			// 组件选中激活时的颜色
-			elActiveColor() {
-				return this.activeColor ? this.activeColor : (this.parentData.activeColor ? this.parentData.activeColor : '#2979ff');
-			},
-			// 组件选未中激活时的颜色
-			elInactiveColor() {
-				return this.inactiveColor ? this.inactiveColor : (this.parentData.inactiveColor ? this.parentData.inactiveColor :
-					'#c8c9cc');
-			},
-			// label的颜色
-			elLabelColor() {
-				return this.labelColor ? this.labelColor : (this.parentData.labelColor ? this.parentData.labelColor : '#606266')
-			},
-			// 组件的形状
-			elShape() {
-				return this.shape ? this.shape : (this.parentData.shape ? this.parentData.shape : 'circle');
-			},
-			// label大小
-			elLabelSize() {
-				return uni.$u.addUnit(this.labelSize ? this.labelSize : (this.parentData.labelSize ? this.parentData.labelSize :
-					'15'))
-			},
-			elIconColor() {
-				const iconColor = this.iconColor ? this.iconColor : (this.parentData.iconColor ? this.parentData.iconColor :
-					'#ffffff');
-				// 图标的颜色
-				if (this.elDisabled) {
-					// disabled状态下,已勾选的checkbox图标改为elInactiveColor
-					return this.isChecked ? this.elInactiveColor : 'transparent'
-				} else {
-					return this.isChecked ? iconColor : 'transparent'
-				}
-			},
-			iconClasses() {
-				let classes = []
-				// 组件的形状
-				classes.push('u-checkbox__icon-wrap--' + this.elShape)
-				if (this.elDisabled) {
-					classes.push('u-checkbox__icon-wrap--disabled')
-				}
-				if (this.isChecked && this.elDisabled) {
-					classes.push('u-checkbox__icon-wrap--disabled--checked')
-				}
-				// 支付宝,头条小程序无法动态绑定一个数组类名,否则解析出来的结果会带有",",而导致失效
-				// #ifdef MP-ALIPAY || MP-TOUTIAO
-				classes = classes.join(' ')
-				// #endif
-				return classes
-			},
-			iconWrapStyle() {
-				// checkbox的整体样式
-				const style = {}
-				style.backgroundColor = this.isChecked && !this.elDisabled ? this.elActiveColor : '#ffffff'
-				style.borderColor = this.isChecked && !this.elDisabled ? this.elActiveColor : this.elInactiveColor
-				style.width = uni.$u.addUnit(this.elSize)
-				style.height = uni.$u.addUnit(this.elSize)
-				// 如果是图标在右边的话,移除它的右边距
-				if (this.parentData.iconPlacement === 'right') {
-					style.marginRight = 0
-				}
-				return style
-			},
-			checkboxStyle() {
-				const style = {}
-				if (this.parentData.borderBottom && this.parentData.placement === 'row') {
-					uni.$u.error('检测到您将borderBottom设置为true,需要同时将u-checkbox-group的placement设置为column才有效')
-				}
-				// 当父组件设置了显示下边框并且排列形式为纵向时,给内容和边框之间加上一定间隔
-				if (this.parentData.borderBottom && this.parentData.placement === 'column') {
-					style.paddingBottom = '8px'
-				}
-				return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle))
-			}
-		},
-		mounted() {
-			this.init()
-		},
-		methods: {
-			init() {
-				// 支付宝小程序不支持provide/inject,所以使用这个方法获取整个父组件,在created定义,避免循环引用
-				this.updateParentData()
-				if (!this.parent) {
-					uni.$u.error('u-checkbox必须搭配u-checkbox-group组件使用')
-				}
-				// 设置初始化时,是否默认选中的状态,父组件u-checkbox-group的value可能是array,所以额外判断
-				if (this.checked) {
-					this.isChecked = true
-				} else if (uni.$u.test.array(this.parentData.value)) {
-					// 查找数组是是否存在this.name元素值
-					this.isChecked = this.parentData.value.some(item => {
-						return item === this.name
-					})
-				}
-			},
-			updateParentData() {
-				this.getParentData('u-checkbox-group')
-			},
-			// 横向两端排列时,点击组件即可触发选中事件
-			wrapperClickHandler(e) {
-				this.parentData.iconPlacement === 'right' && this.iconClickHandler(e)
-			},
-			// 点击图标
-			iconClickHandler(e) {
-				this.preventEvent(e)
-				// 如果整体被禁用,不允许被点击
-				if (!this.elDisabled) {
-					this.setRadioCheckedStatus()
-				}
-			},
-			// 点击label
-			labelClickHandler(e) {
-				this.preventEvent(e)
-				// 如果按钮整体被禁用或者label被禁用,则不允许点击文字修改状态
-				if (!this.elLabelDisabled && !this.elDisabled) {
-					this.setRadioCheckedStatus()
-				}
-			},
-			emitEvent() {
-				this.$emit('change', this.isChecked)
-				// 尝试调用u-form的验证方法,进行一定延迟,否则微信小程序更新可能会不及时
-				this.$nextTick(() => {
-					uni.$u.formValidate(this, 'change')
-				})
-			},
-			// 改变组件选中状态
-			// 这里的改变的依据是,更改本组件的checked值为true,同时通过父组件遍历所有u-checkbox实例
-			// 将本组件外的其他u-checkbox的checked都设置为false(都被取消选中状态),因而只剩下一个为选中状态
-			setRadioCheckedStatus() {
-				// 将本组件标记为与原来相反的状态
-				this.isChecked = !this.isChecked
-				this.emitEvent()
-				typeof this.parent.unCheckedOther === 'function' && this.parent.unCheckedOther(this)
-			}
-		},
-		watch:{
-			checked(){
-				this.isChecked = this.checked
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	@import "../../libs/css/components.scss";
-	$u-checkbox-icon-wrap-margin-right:6px !default;
-	$u-checkbox-icon-wrap-font-size:6px !default;
-	$u-checkbox-icon-wrap-border-width:1px !default;
-	$u-checkbox-icon-wrap-border-color:#c8c9cc !default;
-	$u-checkbox-icon-wrap-icon-line-height:0 !default;
-	$u-checkbox-icon-wrap-circle-border-radius:100% !default;
-	$u-checkbox-icon-wrap-square-border-radius:3px !default;
-	$u-checkbox-icon-wrap-checked-color:#fff !default;
-	$u-checkbox-icon-wrap-checked-background-color:red !default;
-	$u-checkbox-icon-wrap-checked-border-color:#2979ff !default;
-	$u-checkbox-icon-wrap-disabled-background-color:#ebedf0 !default;
-	$u-checkbox-icon-wrap-disabled-checked-color:#c8c9cc !default;
-	$u-checkbox-label-margin-left:5px !default;
-	$u-checkbox-label-margin-right:12px !default;
-	$u-checkbox-label-color:$u-content-color !default;
-	$u-checkbox-label-font-size:15px !default;
-	$u-checkbox-label-disabled-color:#c8c9cc !default;
-
-	.u-checkbox {
-		/* #ifndef APP-NVUE */
-		@include flex(row);
-		/* #endif */
-		overflow: hidden;
-		flex-direction: row;
-		align-items: center;
-
-		&-label--left {
-			flex-direction: row
-		}
-
-		&-label--right {
-			flex-direction: row-reverse;
-			justify-content: space-between
-		}
-
-		&__icon-wrap {
-			/* #ifndef APP-NVUE */
-			box-sizing: border-box;
-			// nvue下,border-color过渡有问题
-			transition-property: border-color, background-color, color;
-			transition-duration: 0.2s;
-			/* #endif */
-			color: $u-content-color;
-			@include flex;
-			align-items: center;
-			justify-content: center;
-			color: transparent;
-			text-align: center;
-			margin-right: $u-checkbox-icon-wrap-margin-right;
-
-			font-size: $u-checkbox-icon-wrap-font-size;
-			border-width: $u-checkbox-icon-wrap-border-width;
-			border-color: $u-checkbox-icon-wrap-border-color;
-			border-style: solid;
-
-			/* #ifdef MP-TOUTIAO */
-			// 头条小程序兼容性问题,需要设置行高为0,否则图标偏下
-			&__icon {
-				line-height: $u-checkbox-icon-wrap-icon-line-height;
-			}
-
-			/* #endif */
-
-			&--circle {
-				border-radius: $u-checkbox-icon-wrap-circle-border-radius;
-			}
-
-			&--square {
-				border-radius: $u-checkbox-icon-wrap-square-border-radius;
-			}
-
-			&--checked {
-				color: $u-checkbox-icon-wrap-checked-color;
-				background-color: $u-checkbox-icon-wrap-checked-background-color;
-				border-color: $u-checkbox-icon-wrap-checked-border-color;
-			}
-
-			&--disabled {
-				background-color: $u-checkbox-icon-wrap-disabled-background-color !important;
-			}
-
-			&--disabled--checked {
-				color: $u-checkbox-icon-wrap-disabled-checked-color !important;
-			}
-		}
-
-		&__label {
-			/* #ifndef APP-NVUE */
-			word-wrap: break-word;
-			/* #endif */
-			margin-left: $u-checkbox-label-margin-left;
-			margin-right: $u-checkbox-label-margin-right;
-			color: $u-checkbox-label-color;
-			font-size: $u-checkbox-label-font-size;
-
-			&--disabled {
-				color: $u-checkbox-label-disabled-color;
-			}
-		}
-	}
-</style>

+ 0 - 8
uni_modules/uview-ui/components/u-circle-progress/props.js

@@ -1,8 +0,0 @@
-export default {
-    props: {
-        percentage: {
-            type: [String, Number],
-            default: uni.$u.props.circleProgress.percentage
-        }
-    }
-}

+ 0 - 198
uni_modules/uview-ui/components/u-circle-progress/u-circle-progress.vue

@@ -1,198 +0,0 @@
-<template>
-	<view class="u-circle-progress">
-		<view class="u-circle-progress__left">
-			<view
-			    class="u-circle-progress__left__circle"
-			    :style="[leftSyle]"
-			    ref="left-circle"
-			>
-
-			</view>
-		</view>
-		<view
-		    class="u-circle-progress__right"
-		>
-			<view
-			    class="u-circle-progress__right__circle"
-			    ref="right-circle"
-				:style="[rightSyle]"
-			>
-
-			</view>
-		</view>
-		<view class="u-circle-progress__circle">
-
-		</view>
-	</view>
-</template>
-
-<script>
-	import props from './props.js';
-	// #ifdef APP-NVUE
-	const animation = uni.requireNativePlugin('animation')
-	// #endif
-	/**
-	 * CircleProgress 圆形进度条 TODO: 待完善 
-	 * @description 展示操作或任务的当前进度,比如上传文件,是一个圆形的进度环。
-	 * @tutorial https://www.uviewui.com/components/circleProgress.html
-	 * @property {String | Number}	percentage	圆环进度百分比值,为数值类型,0-100 (默认 30 )
-	 * @example
-	 */
-	export default {
-		name: 'u-circle-progress',
-		mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
-		data() {
-			return {
-				leftBorderColor: 'rgb(200, 200, 200)',
-				rightBorderColor: 'rgb(200, 200, 200)',
-			}
-		},
-		computed: {
-			leftSyle() {
-				const style = {}
-				style.borderTopColor = this.leftBorderColor
-				style.borderRightColor = this.leftBorderColor
-				return style
-			},
-			rightSyle() {
-				const style = {}
-				style.borderLeftColor = this.rightBorderColor
-				style.borderBottomColor = this.rightBorderColor
-				return style
-			}
-		},
-		mounted() {
-			uni.$u.sleep().then(() => {
-				this.rightBorderColor = 'rgb(66, 185, 131)'
-				// this.init()
-			})
-		},
-		methods: {
-			init() {
-				animation.transition(this.$refs['right-circle'].ref, {
-					styles: {
-						transform: 'rotate(45deg)',
-						transformOrigin: 'center center'
-					},
-				}, () => {
-					this.rightBorderColor = 'rgb(66, 185, 131)'
-					// animation.transition(this.$refs['right-circle'].ref, {
-					// 	styles: {
-					// 		transform: 'rotate(225deg)',
-					// 		transformOrigin: 'center center'
-					// 	},
-					// 	duration: 3000,
-					// }, () => {
-					// 	animation.transition(this.$refs['left-circle'].ref, {
-					// 		styles: {
-					// 			transform: 'rotate(45deg)',
-					// 			transformOrigin: 'center center'
-					// 		},
-					// 	}, () => {
-					// 		this.leftBorderColor = 'rgb(66, 185, 131)'
-					// 		animation.transition(this.$refs['left-circle'].ref, {
-					// 			styles: {
-					// 				transform: 'rotate(225deg)',
-					// 				transformOrigin: 'center center'
-					// 			},
-					// 			duration: 1500,
-					// 		}, () => {
-
-					// 		})
-					// 	})
-					// })
-				})
-
-			}
-		},
-	}
-</script>
-
-<style lang="scss" scoped>
-	@import "../../libs/css/components.scss";
-
-	.u-circle-progress {
-		@include flex(row);
-		position: relative;
-		border-radius: 100px;
-		height: 100px;
-		width: 100px;
-		// transform: rotate(0deg);
-		// background-color: rgb(66, 185, 131);
-		background-color: rgb(200, 200, 200);
-		overflow: hidden;
-		justify-content: space-between;
-
-		&__circle {
-			border-radius: 100px;
-			height: 90px;
-			width: 90px;
-			transform: translate(-50%, -50%);
-			background-color: rgb(255, 255, 255);
-			left: 50px;
-			top: 50px;
-			position: absolute;
-		}
-
-		&__left {
-			position: absolute;
-			left: 0;
-			width: 50px;
-			height: 100px;
-			overflow: hidden;
-			box-sizing: border-box;
-			// background-color: rgb(66, 185, 131);
-			// background-color: rgb(200, 200, 200);
-			// transform-origin: left center;
-
-			&__circle {
-				box-sizing: border-box;
-				// background-color: red;
-				border-left-color: transparent;
-				border-bottom-color: transparent;
-				border-top-left-radius: 50px;
-				border-top-right-radius: 50px;
-				border-bottom-right-radius: 50px;
-				// border-left-color: rgb(66, 185, 131);
-				// border-bottom-color: rgb(66, 185, 131);
-				border-top-color: rgb(66, 185, 131);
-				border-right-color: rgb(66, 185, 131);
-				border-width: 5px;
-				width: 100px;
-				height: 100px;
-				transform: rotate(225deg);
-				// border-radius: 100px;
-			}
-		}
-
-		&__right {
-			position: absolute;
-			right: 0;
-			width: 50px;
-			height: 100px;
-			overflow: hidden;
-
-			&__circle {
-				position: absolute;
-				right: 0;
-				box-sizing: border-box;
-				// background-color: red;
-				border-top-color: transparent;
-				border-right-color: transparent;
-				border-top-left-radius: 50px;
-				border-bottom-left-radius: 50px;
-				border-bottom-right-radius: 50px;
-				// border-left-color: rgb(66, 185, 131);
-				// border-bottom-color: rgb(66, 185, 131);
-				border-left-color: rgb(200, 200, 200);
-				border-bottom-color: rgb(200, 200, 200);
-				border-width: 5px;
-				width: 100px;
-				height: 100px;
-				transform: rotate(45deg);
-				transform-origin: center center;
-				// border-radius: 100px;
-			}
-		}
-	}
-</style>

+ 0 - 79
uni_modules/uview-ui/components/u-code-input/props.js

@@ -1,79 +0,0 @@
-export default {
-    props: {
-		// 键盘弹起时,是否自动上推页面
-		adjustPosition: {
-			type: Boolean,
-            default: uni.$u.props.codeInput.adjustPosition
-		},
-        // 最大输入长度
-        maxlength: {
-            type: [String, Number],
-            default: uni.$u.props.codeInput.maxlength
-        },
-        // 是否用圆点填充
-        dot: {
-            type: Boolean,
-            default: uni.$u.props.codeInput.dot
-        },
-        // 显示模式,box-盒子模式,line-底部横线模式
-        mode: {
-            type: String,
-            default: uni.$u.props.codeInput.mode
-        },
-        // 是否细边框
-        hairline: {
-            type: Boolean,
-            default: uni.$u.props.codeInput.hairline
-        },
-        // 字符间的距离
-        space: {
-            type: [String, Number],
-            default: uni.$u.props.codeInput.space
-        },
-        // 预置值
-        value: {
-            type: [String, Number],
-            default: uni.$u.props.codeInput.value
-        },
-        // 是否自动获取焦点
-        focus: {
-            type: Boolean,
-            default: uni.$u.props.codeInput.focus
-        },
-        // 字体是否加粗
-        bold: {
-            type: Boolean,
-            default: uni.$u.props.codeInput.bold
-        },
-        // 字体颜色
-        color: {
-            type: String,
-            default: uni.$u.props.codeInput.color
-        },
-        // 字体大小
-        fontSize: {
-            type: [String, Number],
-            default: uni.$u.props.codeInput.fontSize
-        },
-        // 输入框的大小,宽等于高
-        size: {
-            type: [String, Number],
-            default: uni.$u.props.codeInput.size
-        },
-        // 是否隐藏原生键盘,如果想用自定义键盘的话,需设置此参数为true
-        disabledKeyboard: {
-            type: Boolean,
-            default: uni.$u.props.codeInput.disabledKeyboard
-        },
-        // 边框和线条颜色
-        borderColor: {
-            type: String,
-            default: uni.$u.props.codeInput.borderColor
-        },
-		// 是否禁止输入"."符号
-		disabledDot: {
-			type: Boolean,
-			default: uni.$u.props.codeInput.disabledDot
-		}
-    }
-}

+ 0 - 252
uni_modules/uview-ui/components/u-code-input/u-code-input.vue

@@ -1,252 +0,0 @@
-<template>
-	<view class="u-code-input">
-		<view
-			class="u-code-input__item"
-			:style="[itemStyle(index)]"
-			v-for="(item, index) in codeLength"
-			:key="index"
-		>
-			<view
-				class="u-code-input__item__dot"
-				v-if="dot && codeArray.length > index"
-			></view>
-			<text
-				v-else
-				:style="{
-					fontSize: $u.addUnit(fontSize),
-					fontWeight: bold ? 'bold' : 'normal',
-					color: color
-				}"
-			>{{codeArray[index]}}</text>
-			<view
-				class="u-code-input__item__line"
-				v-if="mode === 'line'"
-				:style="[lineStyle]"
-			></view>
-			<!-- #ifndef APP-PLUS -->
-			<view v-if="isFocus && codeArray.length === index" :style="{backgroundColor: color}" class="u-code-input__item__cursor"></view>
-			<!-- #endif -->
-		</view>
-		<input
-			:disabled="disabledKeyboard"
-			type="number"
-			:focus="focus"
-			:value="inputValue"
-			:maxlength="maxlength"
-			:adjustPosition="adjustPosition"
-			class="u-code-input__input"
-			@input="inputHandler"
-			:style="{
-				height: $u.addUnit(size) 
-			}"
-			@focus="isFocus = true"
-			@blur="isFocus = false"
-		/>
-	</view>
-</template>
-
-<script>
-	import props from './props.js';
-	/**
-	 * CodeInput 验证码输入
-	 * @description 该组件一般用于验证用户短信验证码的场景,也可以结合uView的键盘组件使用
-	 * @tutorial https://www.uviewui.com/components/codeInput.html
-	 * @property {String | Number}	maxlength			最大输入长度 (默认 6 )
-	 * @property {Boolean}			dot					是否用圆点填充 (默认 false )
-	 * @property {String}			mode				显示模式,box-盒子模式,line-底部横线模式 (默认 'box' )
-	 * @property {Boolean}			hairline			是否细边框 (默认 false )
-	 * @property {String | Number}	space				字符间的距离 (默认 10 )
-	 * @property {String | Number}	value				预置值
-	 * @property {Boolean}			focus				是否自动获取焦点 (默认 false )
-	 * @property {Boolean}			bold				字体和输入横线是否加粗 (默认 false )
-	 * @property {String}			color				字体颜色 (默认 '#606266' )
-	 * @property {String | Number}	fontSize			字体大小,单位px (默认 18 )
-	 * @property {String | Number}	size				输入框的大小,宽等于高 (默认 35 )
-	 * @property {Boolean}			disabledKeyboard	是否隐藏原生键盘,如果想用自定义键盘的话,需设置此参数为true (默认 false )
-	 * @property {String}			borderColor			边框和线条颜色 (默认 '#c9cacc' )
-	 * @property {Boolean}			disabledDot			是否禁止输入"."符号 (默认 true )
-	 * 
-	 * @event {Function}	change	输入内容发生改变时触发,具体见上方说明			value:当前输入的值
-	 * @event {Function}	finish	输入字符个数达maxlength值时触发,见上方说明	value:当前输入的值
-	 * @example	<u-code-input v-model="value4" :focus="true"></u-code-input>
-	 */
-	export default {
-		name: 'u-code-input',
-		mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
-		data() {
-			return {
-				inputValue: '',
-				isFocus: this.focus
-			}
-		},
-		watch: {
-			value: {
-				immediate: true,
-				handler(val) {
-					// 转为字符串,超出部分截掉
-					this.inputValue = String(val).substring(0, this.maxlength)
-				}
-			},
-		},
-		computed: {
-			// 根据长度,循环输入框的个数,因为头条小程序数值不能用于v-for
-			codeLength() {
-				return new Array(Number(this.maxlength))
-			},
-			// 循环item的样式
-			itemStyle() {
-				return index => {
-					const addUnit = uni.$u.addUnit
-					const style = {
-						width: addUnit(this.size),
-						height: addUnit(this.size)
-					}
-					// 盒子模式下,需要额外进行处理
-					if (this.mode === 'box') {
-						// 设置盒子的边框,如果是细边框,则设置为0.5px宽度
-						style.border = `${this.hairline ? 0.5 : 1}px solid ${this.borderColor}`
-						// 如果盒子间距为0的话
-						if (uni.$u.getPx(this.space) === 0) {
-							// 给第一和最后一个盒子设置圆角
-							if (index === 0) {
-								style.borderTopLeftRadius = '3px'
-								style.borderBottomLeftRadius = '3px'
-							}
-							if (index === this.codeLength.length - 1) {
-								style.borderTopRightRadius = '3px'
-								style.borderBottomRightRadius = '3px'
-							}
-							// 最后一个盒子的右边框需要保留
-							if (index !== this.codeLength.length - 1) {
-								style.borderRight = 'none'
-							}
-						}
-					}
-					if (index !== this.codeLength.length - 1) {
-						// 设置验证码字符之间的距离,通过margin-right设置,最后一个字符,无需右边框
-						style.marginRight = addUnit(this.space)
-					} else {
-						// 最后一个盒子的有边框需要保留
-						style.marginRight = 0
-					}
-
-					return style
-				}
-			},
-			// 将输入的值,转为数组,给item历遍时,根据当前的索引显示数组的元素
-			codeArray() {
-				return String(this.inputValue).split('')
-			},
-			// 下划线模式下,横线的样式
-			lineStyle() {
-				const style = {}
-				style.height = this.hairline ? '2px' : '4px'
-				style.width = uni.$u.addUnit(this.size)
-				// 线条模式下,背景色即为边框颜色
-				style.backgroundColor = this.borderColor
-				return style
-			}
-		},
-		methods: {
-			// 监听输入框的值发生变化
-			inputHandler(e) {
-				const value = e.detail.value
-				this.inputValue = value
-				// 是否允许输入“.”符号
-				if(this.disabledDot) {
-					this.$nextTick(() => {
-						this.inputValue = value.replace('.', '')
-					})
-				}
-				// 未达到maxlength之前,发送change事件,达到后发送finish事件
-				this.$emit('change', value)
-				// 修改通过v-model双向绑定的值
-				this.$emit('input', value)
-				// 达到用户指定输入长度时,发出完成事件
-				if (String(value).length >= Number(this.maxlength)) {
-					this.$emit('finish', value)
-				}
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	@import "../../libs/css/components.scss";
-	$u-code-input-cursor-width: 1px;
-	$u-code-input-cursor-height: 40%;
-	$u-code-input-cursor-animation-duration: 1s;
-	$u-code-input-cursor-animation-name: u-cursor-flicker;
-
-	.u-code-input {
-		@include flex;
-		position: relative;
-		overflow: hidden;
-
-		&__item {
-			@include flex;
-			justify-content: center;
-			align-items: center;
-			position: relative;
-
-			&__text {
-				font-size: 15px;
-				color: $u-content-color;
-			}
-
-			&__dot {
-				width: 7px;
-				height: 7px;
-				border-radius: 100px;
-				background-color: $u-content-color;
-			}
-
-			&__line {
-				position: absolute;
-				bottom: 0;
-				height: 4px;
-				border-radius: 100px;
-				width: 40px;
-				background-color: $u-content-color;
-			}
-			/* #ifndef APP-PLUS */
-			&__cursor {
-				position: absolute;
-				top: 50%;
-				left: 50%;
-				transform: translate(-50%,-50%);
-				width: $u-code-input-cursor-width;
-				height: $u-code-input-cursor-height;
-				animation: $u-code-input-cursor-animation-duration u-cursor-flicker infinite;
-			}
-			/* #endif */
-			
-		}
-
-		&__input {
-			// 之所以需要input输入框,是因为有它才能唤起键盘
-			// 这里将它设置为两倍的屏幕宽度,再将左边的一半移出屏幕,为了不让用户看到输入的内容
-			position: absolute;
-			left: -750rpx;
-			width: 1500rpx;
-			top: 0;
-			background-color: transparent;
-			text-align: left;
-		}
-	}
-	
-	/* #ifndef APP-PLUS */
-	@keyframes u-cursor-flicker {
-		0% {
-		    opacity: 0;
-		}
-		50% {
-		    opacity: 1;
-		}
-		100% {
-		    opacity: 0;
-		}
-	}
-	/* #endif */
-
-</style>

+ 0 - 34
uni_modules/uview-ui/components/u-code/props.js

@@ -1,34 +0,0 @@
-export default {
-    props: {
-        // 倒计时总秒数
-        seconds: {
-            type: [String, Number],
-            default: uni.$u.props.code.seconds
-        },
-        // 尚未开始时提示
-        startText: {
-            type: String,
-            default: uni.$u.props.code.startText
-        },
-        // 正在倒计时中的提示
-        changeText: {
-            type: String,
-            default: uni.$u.props.code.changeText
-        },
-        // 倒计时结束时的提示
-        endText: {
-            type: String,
-            default: uni.$u.props.code.endText
-        },
-        // 是否在H5刷新或各端返回再进入时继续倒计时
-        keepRunning: {
-            type: Boolean,
-            default: uni.$u.props.code.keepRunning
-        },
-        // 为了区分多个页面,或者一个页面多个倒计时组件本地存储的继续倒计时变了
-        uniqueKey: {
-            type: String,
-            default: uni.$u.props.code.uniqueKey
-        }
-    }
-}

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