Bladeren bron

名片+顾问

xhj 2 jaren geleden
bovenliggende
commit
5d97eabb44
54 gewijzigde bestanden met toevoegingen van 5207 en 52 verwijderingen
  1. 137 0
      card/cardDetail/cardDetail.css
  2. 101 0
      card/cardDetail/cardDetail.vue
  3. 593 0
      card/cardFound/cardFound.css
  4. 463 0
      card/cardFound/cardFound.vue
  5. 2 5
      card/cardList/cardList.vue
  6. 17 19
      card/poster/poster.css
  7. 3 2
      card/poster/poster.vue
  8. 5 5
      components/integral-nav/index.vue
  9. 12 5
      components/nav-bar/index.vue
  10. 10 10
      components/shopping-cart/index.vue
  11. 19 2
      pages.json
  12. 143 0
      pages/found/found.css
  13. 276 0
      pages/found/found.vue
  14. BIN
      static/images/card_bottom.png
  15. BIN
      static/images/clear.png
  16. BIN
      static/images/close1.png
  17. BIN
      static/images/fj_loca.png
  18. BIN
      static/images/found_more.png
  19. BIN
      static/images/jg_map_ico.png
  20. BIN
      static/images/lpal.png
  21. BIN
      static/images/mapIconBg.png
  22. BIN
      static/images/side_ico3.png
  23. BIN
      static/images/sj_map_ico.png
  24. BIN
      static/images/tbal.png
  25. BIN
      static/images/video_play.png
  26. BIN
      static/images/xbrm.png
  27. 22 0
      uni_modules/uni-icons/changelog.md
  28. 1169 0
      uni_modules/uni-icons/components/uni-icons/icons.js
  29. 96 0
      uni_modules/uni-icons/components/uni-icons/uni-icons.vue
  30. 663 0
      uni_modules/uni-icons/components/uni-icons/uniicons.css
  31. BIN
      uni_modules/uni-icons/components/uni-icons/uniicons.ttf
  32. 86 0
      uni_modules/uni-icons/package.json
  33. 8 0
      uni_modules/uni-icons/readme.md
  34. 25 0
      uni_modules/uni-rate/changelog.md
  35. 361 0
      uni_modules/uni-rate/components/uni-rate/uni-rate.vue
  36. 88 0
      uni_modules/uni-rate/package.json
  37. 12 0
      uni_modules/uni-rate/readme.md
  38. 8 0
      uni_modules/uni-scss/changelog.md
  39. 1 0
      uni_modules/uni-scss/index.scss
  40. 82 0
      uni_modules/uni-scss/package.json
  41. 4 0
      uni_modules/uni-scss/readme.md
  42. 7 0
      uni_modules/uni-scss/styles/index.scss
  43. 3 0
      uni_modules/uni-scss/styles/setting/_border.scss
  44. 66 0
      uni_modules/uni-scss/styles/setting/_color.scss
  45. 55 0
      uni_modules/uni-scss/styles/setting/_radius.scss
  46. 56 0
      uni_modules/uni-scss/styles/setting/_space.scss
  47. 167 0
      uni_modules/uni-scss/styles/setting/_styles.scss
  48. 24 0
      uni_modules/uni-scss/styles/setting/_text.scss
  49. 146 0
      uni_modules/uni-scss/styles/setting/_variables.scss
  50. 19 0
      uni_modules/uni-scss/styles/tools/functions.scss
  51. 31 0
      uni_modules/uni-scss/theme.scss
  52. 62 0
      uni_modules/uni-scss/variables.scss
  53. 3 3
      utils/request.js
  54. 162 1
      utils/util.js

+ 137 - 0
card/cardDetail/cardDetail.css

@@ -0,0 +1,137 @@
+.card-box{
+	margin: 120rpx 30rpx 100rpx;
+	background: #FFFFFF;
+	border-radius: 20rpx 20rpx 20rpx 20rpx;
+	position: relative;
+}
+.hearder{
+	width: 160rpx;
+	height: 160rpx;
+	margin: -80rpx auto 14rpx;
+}
+.hearder image{
+	width: 100%;
+	height: 100%;
+}
+.user-name{
+	line-height: 50rpx;
+	font-size: 36rpx;
+	font-weight: bold;
+	color: #333333;
+	text-align: center;
+}
+.user-tag{
+	justify-content: center;
+	margin-top: 10rpx;
+}
+.user-tag-item{
+	padding: 0 10rpx;
+	line-height: 32rpx;
+	background: linear-gradient(80deg, #7EBFF1 0%, #458EEE 100%);
+	border-radius: 5rpx 5rpx 5rpx 5rpx;
+	opacity: 1;
+	text-align: center;
+	margin-right: 10rpx;
+	font-size: 20rpx;
+	color: #FFFFFF;
+}
+.user-tag-item:last-child{
+	margin-right: 0rpx;
+}
+.pf{
+	margin-top: 50rpx;
+	text-align: center;
+}
+.pf-title {
+	line-height: 45rpx;
+	font-size: 32rpx;
+	font-family: PingFang SC-Bold, PingFang SC;
+	font-weight: bold;
+	color: #333333;
+	margin-bottom: 10rpx;
+}
+.user-data{
+	margin-top: 51rpx;
+	justify-content: center;
+}
+.user-data-num{
+	line-height: 43rpx;
+	font-size: 39rpx;
+	font-family: Arial-Regular, Arial;
+	font-weight: 400;
+	color: #333333;
+	text-align: center;
+	margin-bottom: 10rpx;
+}
+.user-data-label image{
+	width: 28rpx;
+	height: 28rpx;
+	margin-right: 10rpx;
+}
+.user-data-label{
+	line-height: 33rpx;
+	font-size: 24rpx;
+	font-family: PingFang SC-Medium, PingFang SC;
+	font-weight: 500;
+	color: #A1A1A1;
+	text-align: center;
+}
+.user-des{
+	font-size: 24rpx;
+	font-family: PingFang SC-Regular, PingFang SC;
+	font-weight: 400;
+	color: #333333;
+	line-height: 42rpx;
+	margin: 40rpx;
+}
+.user-code{
+	width: 262rpx;
+	height: 262rpx;
+	margin: 36rpx auto 0;
+}
+.user-btn{
+	width: 400rpx;
+	height: 80rpx;
+	line-height: 80rpx;
+	background: #27D699;
+	border-radius: 40rpx 40rpx 40rpx 40rpx;
+	opacity: 1;
+	text-align: center;
+	margin: 40rpx auto;
+	font-size: 30rpx;
+	font-family: Source Han Sans CN-Regular, Source Han Sans CN;
+	font-weight: 400;
+	color: #FFFFFF;
+}
+.user-btn-text{
+	text-align: center;
+	margin: 36rpx auto 90rpx;
+	color: #009B62;
+	font-size: 30rpx;
+	z-index: 2;
+	position: relative;
+}
+.card-bottom{
+	position: absolute;
+	bottom: 0;
+	left: 0;
+	right: 0;
+	height: 190rpx;
+	width: 100%;
+}
+.clearfix::after {
+    content: ".";
+    display: block;
+    height: 0;
+    line-height: 0;
+    clear: both;
+    visibility: hidden;
+}
+.clearfix::before {
+    content: ".";
+    display: block;
+    height: 0;
+    line-height: 0;
+    clear: both;
+    visibility: hidden;
+}

+ 101 - 0
card/cardDetail/cardDetail.vue

@@ -0,0 +1,101 @@
+<template>
+	<view>
+		<view class="card-box clearfix">
+			<image class="card-bottom" src="/static/images/card_bottom.png" mode="widthFix"></image>
+			<view class="hearder">
+				<image src="../../static/images/userimg.png"></image>
+			</view>
+			<view class="user-name">杜平</view>
+			<view class="user-tag ddflex">
+				<view class="user-tag-item" v-for="item in 2">高级组经理</view>
+			</view>
+			<view class="pf">
+				<view class="pf-title">综合评分</view>
+				<uni-rate style="justify-content: center;" class="ddflex" color="#999999" active-color="#FF4600" :readonly="true" size="18" allow-half :value="4" />
+			</view>
+			<view class="user-data ddflex">
+				<view>
+					<view class="user-data-num">1678</view>
+					<view class="user-data-label ddflex">
+						<image src="/static/pages/images/fw_hui.png"></image>
+						<view>服务客户</view>
+					</view>
+				</view>
+				<view style="margin-left: 109rpx;">
+					<view class="user-data-num">1678</view>
+					<view class="user-data-label ddflex">
+						<image src="/static/pages/images/cy_hui.png"></image>
+						<view>保单件数</view>
+					</view>
+				</view>
+				<view style="margin-left: 109rpx;">
+					<view class="user-data-num">1678</view>
+					<view class="user-data-label ddflex">
+						<image src="/static/pages/images/dz_hui.png"></image>
+						<view>点赞量</view>
+					</view>
+				</view>
+			</view>
+			<view class="user-des">
+				本人拥有丰富的保险知识及行业经验,可为您和您的家庭提供专业合理的保障规划,让保险成为您生活的P士,免去您的后顾之忧,守护您的幸福人生。
+			</view>
+			<image class="user-code" src="/static/images/lj_img.png"></image>
+			<view class="user-btn">
+				选TA做专属顾问
+			</view>
+			<view class="user-btn-text" @click="jumpUrl('/card/cardFound/cardFound')">
+				更多专属顾问>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	const app = getApp();
+	const req = require("../../utils/request.js");
+
+	export default {
+		components: {},
+		props: {},
+		data() {
+			return {
+				systems: {},
+				isTop:0,
+			}
+		},
+		onLoad(options) {
+		},
+		onShow() {
+			
+		},
+		methods: {
+			jumpUrl(url){
+				uni.navigateTo({
+					url:url
+				})
+			}
+		},
+		mounted() {
+			const systemInfo = uni.getSystemInfoSync();
+			// px转换到rpx的比例
+			let pxToRpxScale = 750 / systemInfo.windowWidth;
+			let systems = {
+				ktxStatusHeight: systemInfo.statusBarHeight * pxToRpxScale, // 状态栏的高度
+				navigationHeight: 44 * pxToRpxScale // 导航栏的高度
+			};
+			systems.barHeight = systems.ktxStatusHeight + systems.navigationHeight;
+			this.systems = systems;
+		},
+		onPageScroll: function(e) {
+			if (e.scrollTop > this.systems.barHeight) {
+				this.isTop = 1;
+			} else {
+				this.isTop = 0;
+			}
+		}
+	}
+</script>
+
+<style>
+	@import "./cardDetail.css";
+</style>

+ 593 - 0
card/cardFound/cardFound.css

@@ -0,0 +1,593 @@
+.top-con {
+	position: fixed;
+	top: 0;
+	left: 0;
+	right: 0;
+	z-index: 50;
+}
+
+.top-adv {
+	margin: 30rpx 30rpx 0;
+	position: relative;
+}
+
+.top-adv-img {
+	width: 100%;
+	height: 135rpx;
+}
+
+.top-adv-close {
+	position: absolute;
+	top: -10rpx;
+	right: 10rpx;
+	background-color: rgba(0, 0, 0, .5);
+	border-radius: 50%;
+	width: 40rpx;
+	height: 40rpx;
+}
+
+.top-adv-close image {
+	width: 40rpx;
+	height: 40rpx;
+}
+
+.order-ing {
+	background: #FFEDE5;
+	padding: 22rpx 30rpx;
+	font-size: 28rpx;
+	color: #EB5C20;
+}
+
+.order-ing image {
+	width: 50rpx;
+	height: 50rpx;
+	margin-right: 20rpx;
+}
+
+.gh-btn {
+	width: 137rpx;
+	height: 56rpx;
+	background: #EB5C20;
+	border-radius: 73rpx;
+	font-size: 28rpx;
+	color: #fff;
+	font-weight: bold;
+	text-align: center;
+	line-height: 56rpx;
+}
+
+.map-box {
+	width: 100%;
+	height: 100%;
+	position: absolute
+}
+
+.map {
+	width: 100%;
+	height: 100%;
+}
+
+.side {
+	position: fixed;
+	left: 30rpx;
+	bottom: 30%;
+	z-index: 91;
+}
+
+.side .li {
+	width: 80rpx !important;
+	height: 80rpx !important;
+	background: #fff;
+	border-radius: 50% !important;
+	justify-content: center;
+	margin-bottom: 40rpx !important;
+	box-shadow: 0 0 10rpx rgba(0, 0, 0, 0.1);
+}
+
+.side .li image {
+	width: 48rpx;
+	height: 48rpx;
+}
+
+.store {
+	position: absolute;
+	top: 30%;
+	left: 20%;
+}
+
+.store image {
+	width: 94rpx;
+	height: 94rpx;
+}
+
+.ibn {
+	position: absolute;
+	top: 20%;
+	left: 30%;
+}
+
+.ibn image {
+	width: 80rpx;
+	height: 80rpx;
+}
+
+.count {
+	position: absolute;
+	top: -5rpx;
+	right: -5rpx;
+	width: 34rpx;
+	height: 34rpx;
+	background-color: #f00;
+	box-sizing: border-box;
+	font-size: 24rpx;
+	color: #fff;
+	border-radius: 50%;
+	justify-content: center;
+}
+
+.nearby-box {
+	width: 150rpx;
+	height: 150rpx;
+	position: absolute;
+	top: 50%;
+	left: 50%;
+	justify-content: center;
+	transform: translate(-50%, -50%);
+}
+
+.loca {
+	width: 70rpx;
+	height: 70rpx;
+	position: relative;
+	z-index: 2;
+}
+
+.nearby-yuan {
+	background: rgba(46, 171, 255, .2);
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+	border-radius: 50%;
+	z-index: 1;
+	-webkit-animation: scale 2s ease-in-out infinite;
+}
+
+.nearby {
+	position: absolute;
+	bottom: 90rpx;
+	left: 50%;
+	transform: translateX(-50%);
+	z-index: 3;
+}
+
+@-webkit-keyframes scale {
+	0% {
+		-webkit-transform: scale(1);
+	}
+
+	50% {
+		-webkit-transform: scale(.6);
+	}
+
+	100% {
+		-webkit-transform: scale(1);
+	}
+}
+
+.gan {
+	width: 6rpx;
+	height: 69rpx;
+	background: #242323;
+	border-radius: 0 0 50rpx 50rpx;
+	margin: 0 auto;
+}
+
+.nearby-text {
+	width: 124rpx;
+	height: 53rpx;
+	background: #666464;
+	border-radius: 27rpx;
+	font-size: 24rpx;
+	color: #fff;
+	justify-content: center;
+}
+
+.nearby-text image {
+	width: 23rpx;
+	height: 32rpx;
+}
+
+.bot {
+	padding: 45rpx 74rpx 0;
+	position: fixed;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	background: #fff;
+	border-radius: 40rpx 40rpx 0 0;
+	z-index: 90;
+}
+
+.scan {
+	height: 112rpx;
+	background-color: var(--main);
+	box-shadow: 0 10rpx 30rpx 1rpx rgba(235, 92, 32, 0.33);
+	border-radius: 56rpx;
+	border: 1px solid rgba(0, 0, 0, 0);
+	font-size: 36rpx;
+	color: #fff;
+	font-weight: bold;
+	justify-content: center;
+}
+
+.scan image {
+	width: 50rpx;
+	height: 50rpx;
+	margin-right: 23rpx;
+}
+
+.hand {
+	font-size: 24rpx;
+	color: #666464;
+	justify-content: center;
+	margin: 25rpx 0 0;
+}
+
+.hand image {
+	width: 32rpx;
+	height: 32rpx;
+}
+
+.nav {
+	justify-content: space-between;
+	font-size: 24rpx;
+	color: #666464;
+}
+
+.nav .li {
+	padding: 35rpx 0;
+}
+
+.nav .li image {
+	width: 54rpx;
+	height: 54rpx;
+	margin: 0 auto 9rpx;
+}
+
+.cabinet {
+	position: fixed;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	background: linear-gradient(360deg, #FFFFFF 0%, #C8FEEB 100%);
+	box-shadow: 0rpx -5rpx 20rpx 1rpx rgba(32,32,32,0.1);
+	border-radius: 40rpx 40rpx 0rpx 0rpx;
+	z-index: 92;
+	padding: 35rpx;
+	transition: all .3s ease;
+}
+
+.close {
+	width: 37rpx;
+	height: 37rpx;
+	position: absolute;
+	top: 20rpx;
+	right: 20rpx;
+}
+
+.jg-ico {
+	width: 35rpx;
+	height: 48rpx;
+	margin-right: 15rpx;
+}
+
+.jg-tit {
+	font-size: 36rpx;
+	color: #242323;
+	margin-right: 10rpx;
+	font-weight: bold;
+}
+
+.juli {
+	font-size: 24rpx;
+	color: #A8A5A5;
+}
+
+.jg-num {
+	font-size: 24rpx;
+	color: #A8A5A5;
+}
+
+.cab-addr {
+	font-size: 28rpx;
+	color: #A8A5A5;
+	margin-top: 15rpx;
+	margin-bottom: 35rpx;
+}
+
+.addr-ico {
+	width: 20rpx;
+	height: 26rpx;
+	margin-right: 15rpx;
+}
+
+.daoh {
+	width: 50rpx;
+	height: 50rpx;
+}
+
+.cab-tits {
+	font-size: 32rpx;
+	color: #242323;
+	font-weight: bold;
+	margin: 20rpx 0;
+}
+
+.datas {
+	height: 124rpx;
+	background-color: #F2F2F2;
+	font-size: 28rpx;
+	color: #A8A5A5;
+	font-weight: bold;
+	border-radius: 8rpx;
+}
+
+.datas .li {
+	width: 50%;
+	text-align: center;
+}
+
+.datas .li view {
+	font-size: 36rpx;
+	margin-bottom: 10rpx;
+	color: var(--main);
+}
+
+.charge-datas {
+	border: 1rpx solid rgba(165, 165, 165, .5);
+	border-radius: 8rpx;
+	display: table;
+	width: 100%;
+	box-sizing: border-box;
+	text-align: center;
+	font-size: 24rpx;
+	color: #666464;
+}
+
+.charge-datas .hd,
+.charge-datas .bd {
+	display: table-row;
+}
+
+.hd {
+	height: 57rpx;
+	background-color: #E6E6E6;
+	line-height: 57rpx;
+}
+
+.charge-datas .li {
+	display: table-cell;
+}
+
+.bd .li {
+	padding: 16rpx 0;
+}
+
+.imgbox {
+	margin: 20rpx 0 0;
+}
+
+.imgbox image {
+	width: 220rpx;
+	height: 220rpx;
+	border-radius: 10rpx;
+	margin: 0 15rpx 0 0;
+}
+
+.imgbox image:nth-child(3n) {
+	margin-right: 0;
+}
+
+.cab-btn {
+	padding: 50rpx 44rpx 0;
+}
+
+.sta {
+	width: 97rpx;
+	height: 36rpx;
+	border-radius: 5rpx;
+	font-size: 24rpx;
+	color: #fff;
+	background-color: #A8A5A5;
+	margin-left: 5rpx;
+	text-align: center;
+	font-weight: normal;
+	margin-right: 13rpx;
+}
+
+.ing {
+	background-color: #EB5C20;
+}
+
+.sj-ico {
+	width: 49rpx;
+	height: 48rpx;
+	margin-right: 14rpx;
+}
+
+.sj-info .li {
+	background-color: #F2F2F2;
+	border-radius: 8rpx;
+	padding: 25rpx 35rpx;
+	font-size: 28rpx;
+	color: #666464;
+	margin-top: 20rpx;
+	font-weight: bold;
+	align-items: flex-start;
+}
+
+.label {
+	margin-right: 33rpx;
+}
+
+.phone {
+	color: #2A82E4;
+}
+
+.ceng {
+	position: fixed;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	background-color: rgba(0, 0, 0, .5);
+	z-index: 99;
+}
+
+.pop-adv {
+	position: fixed;
+	left: 60rpx;
+	right: 60rpx;
+	top: 50%;
+	transform: translateY(-50%);
+	z-index: 100;
+}
+
+.pop-adv-img {
+	width: 100%;
+	height: 668rpx;
+	border-radius: 15rpx;
+}
+
+.pop-adv-close {
+	width: 84rpx;
+	height: 84rpx;
+	margin: 100rpx auto 0;
+}
+
+
+
+.register-box{
+	background: #FFFFFF;
+	box-shadow: 0rpx 5rpx 20rpx 1rpx rgba(0,155,98,0.2);
+	border-radius: 16rpx 16rpx 16rpx 16rpx;
+	position: relative;
+}
+.register-title{
+	font-size: 28rpx;
+	font-weight: bold;
+	color: #999999;
+	padding: 30rpx 30rpx;
+	padding-bottom: 21rpx;
+	flex-wrap: nowrap;
+}
+.card-name{
+	line-height: 50rpx;
+	font-size: 36rpx;
+	font-weight: bold;
+	color: #333333;
+}
+.card-tag{
+	padding: 0 10rpx;
+	line-height: 32rpx;
+	border-radius: 5rpx 5rpx 5rpx 5rpx;
+	opacity: 1;
+	border: 2rpx solid #FF5700;
+	font-size: 20rpx;
+	color: #FF5700;
+	text-align: center;
+	margin-right: 10rpx;
+}
+.card-area{
+	line-height: 46rpx;
+	background: #F8F8F8;
+	border-radius: 10rpx 10rpx 10rpx 10rpx;
+	padding:0 16rpx ;
+	font-size: 24rpx;
+	font-weight: 400;
+	color: #666666;
+	margin-top: 35rpx;
+}
+.card-area image{
+	width: 20rpx;
+	height: 24rpx;
+	margin-right: 10rpx;
+}
+.card-data{
+	font-size: 39rpx;
+	font-family: Arial-Regular, Arial;
+	font-weight: 400;
+	color: #333333;
+	line-height: 47rpx;
+	text-align: center;
+}
+.card-label{
+	line-height: 33rpx;
+	font-size: 24rpx;
+	font-family: PingFang SC-Medium, PingFang SC;
+	font-weight: 500;
+	color: #A1A1A1;
+	text-align: center;
+}
+.card-line{
+	width: 1rpx;
+	height: 66rpx;
+	background: #DEDEDE;
+}
+.register-state{
+	font-size: 24rpx;
+	font-weight: 500;
+	line-height: 36rpx;
+	color: #999999;
+}
+.register-title-icon{
+	width: 160rpx;
+	height: 160rpx;
+	opacity: 1;
+	margin-right: 20rpx;
+	border-radius: 10rpx;
+}
+.register-info-item{
+	margin-top: 30rpx;
+	align-items: flex-start;
+}
+.register-info-label{
+	line-height: 41rpx;
+	color: #999999;
+	font-size: 28rpx;
+	margin-right: 60rpx;
+}
+.register-info-data{
+	font-size: 28rpx;
+	color: #333333;
+	line-height: 41rpx;
+	text-align: right;
+}
+
+
+.found-more{
+	margin: 50rpx auto;
+	line-height: 40rpx;
+	font-size: 28rpx;
+	font-family: PingFang SC-Heavy, PingFang SC;
+	font-weight: 800;
+	color: #27D699;
+	justify-content: center;
+}
+.found-more image{
+	width: 46rpx;
+	height: 46rpx;
+	margin-right: 14rpx;
+}
+
+canvas {
+	position: fixed;
+	left: 9000px;
+	/* left:0px;
+  top: 0;
+  z-index: 9999; */
+}
+
+

+ 463 - 0
card/cardFound/cardFound.vue

@@ -0,0 +1,463 @@
+<template>
+<view>
+	<view class="map-box">
+		<map class="map" id="map1" ref="map1" @regionchange="regionChange" :latitude="latitude" :longitude="longitude" :markers="covers" @markertap="clickMap" :scale="mapScale" :circles="circles"></map>
+		<!-- <view class="store" @click="showStore"><image src="../../static/images/sj_map_ico.png"></image></view>
+		<view class="ibn" @click="showCab"><image src="../../static/images/jg_map_ico.png"></image><view class="count ddflex">12</view></view> -->
+		<view class="nearby-box ddflex" @click="jumpUrl('/nearby/list/index?lat='+latitude+'&lng='+longitude)">
+			<view class="nearby-yuan"></view>
+			<image src="../../static/images/fj_loca.png" class="loca"></image>
+			<view class="nearby">
+				<view class="nearby-text ddflex">附近<image src="../../static/images/fj_ico.png"></image></view>
+				<view class="gan"></view>
+			</view>
+		</view>
+		<view class="side">
+			<view class="li ddflex" @click="getLoca"><image src="../../static/images/side_ico3.png"></image></view>
+		</view>
+	</view>
+	<view class="cabinet" :style="'bottom:' + cabBottom">
+		<view class="register-box">
+			<view class="register-title ddflex fflex" @click.stop="jumpUrl('/card/cardDetail/cardDetail')">
+				<image class="register-title-icon" :src="item.avatar?item.avatar:'/static/images/userimg.png'"></image>
+				<view class="flex" style="min-width: 0;">
+					<view class="ddflex">
+						<view class="card-name fflex tover">{{item.nickName?item.nickName:'杜平'}}</view>
+						<uni-rate class="ddflex" color="#999999" active-color="#FF4600" :readonly="true" size="16" allow-half :value="4" />
+					</view>
+					<view class="ddflex" style="margin-top: 4rpx;">
+						<view class="card-tag">高级组经理</view>
+						<view class="card-tag">入司10年</view>
+					</view>
+					<view class="card-area ddflex">
+						<image src="/static/pages/images/dzico.png"></image>
+						<view class="flex tover">中电软件园中电软件园中电软件园中电软件园</view>
+						<view style="color: #A1A1A1;margin-left: 10rpx;">距离5.23km</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="found-more ddflex">
+			<image src="../../static/images/found_more.png"></image>
+			寻找更多保险顾问
+		</view>
+	</view>
+	
+	<canvas v-if="canvasShow" class="canvas" style="width:80px;height:92px;" canvas-id="logoIcon"></canvas>
+	<!-- <update-userinfo :update-info="isUpdateInfo" :update-mobile="isUpdateMobile" v-if="isShowUpdate" @closeUpdate="closeUpdate" @updateInfo="updateInfo" @updateMobile="updateMobile"></update-userinfo> -->
+</view>
+</template>
+
+<script>
+const app = getApp();
+const req = require('../../utils/request.js');
+const api = require('../../utils/api.js');
+const util = require('../../utils/util.js');
+const QQMapWX = require("../../utils/qqmap.js");
+export default {
+	data() {
+		return {
+			picUrlss: req.public.picUrls,
+			userInfo: {},
+			map: '',
+			latitude: '23.027923',
+			longitude: '113.753815',
+			mapScale: 16,
+			circles: [],
+			covers: [],
+			cabList: [],//机柜列表
+			cabInfo: {},//机柜详情
+			cabBottom: '-100%',
+			storeList: [],//门店列表
+			storeInfo: {},//门店详情
+			storeBottom: '-100%',
+			isAuth: false,//是否实名认证
+			markerId: '',
+			orderCount: '',//订单数
+			isShowUpdate: false,//是否显示更新信息弹窗
+			// isUpdateInfo: false,//更新用户信息
+			isUpdateMobile: false,//绑定手机号
+			realInfo: {},//实名认证信息
+			config: {},//配置信息
+			popadv: '',//弹窗广告
+			topadv: '',//顶部广告
+			isShowPopAdv: false,
+			isShowTopAdv: false,
+			canvasShow:false
+		}
+	},
+	async onLoad(options) {
+		if(options.userId){
+			req.setStorage('pidCode',options.userId);
+		}
+		// req.silenceLogin(options.userId, '');
+		this.map = uni.createMapContext("map1", this);
+		let locations = req.getStorage('loctionAddressMap');
+		if(locations){
+			this.latitude = locations.location.lat;
+			this.longitude = locations.location.lng;
+			let points = {
+				latitude: this.latitude,
+				longitude: this.longitude
+			}
+			this.map.moveToLocation(points,res=>{})
+			await this.getCabList();
+		}else{
+			QQMapWX.initMap();
+			req.getLocation(res => {
+				const to = {
+					latitude: res.latitude,
+					longitude: res.longitude
+				};
+				this.latitude = res.latitude;
+				this.longitude = res.longitude;
+				this.map.moveToLocation(to,res=>{})
+				QQMapWX.reverseGeocoder(to,async resp => {
+					await this.getCabList();
+				});
+			});
+		}
+	},
+	onShow() {
+		this.getConfig();
+		// this.userInfo.authState = 1;
+	},
+	onHide() {
+		this.hideStore();
+		this.hideCab();
+	},
+	methods: {
+		hidePopAdv(){
+			this.isShowPopAdv = false;
+		},
+		hideTopAdv(){
+			this.isShowTopAdv = false;
+		},
+		banJump(item){
+			app.globalData.clickBanner(item)
+		},
+		getConfig(){
+			req.getRequest('/api/config',{},data=>{
+				req.setStorage('configRes',JSON.stringify(data));
+				this.config = data;
+			})
+		},
+		addNearby(){
+			let cover = [];
+			let obj = {
+				column: 0,
+				type: 2,
+				latitude: req.getStorage('loctionAddressMap').location.lat,
+				longitude: req.getStorage('loctionAddressMap').location.lng,
+				width: 75,
+				height: 99,
+				iconPath: '/static/images/nearby.png',
+				// joinCluster: true
+			}
+			cover.unshift(obj);
+			return cover;
+		},
+		async getLoca(){
+			this.covers = [];
+			this.latitude = req.getStorage('loctionAddressMap').location.lat;
+			this.longitude = req.getStorage('loctionAddressMap').location.lng;
+			await this.getCabList();
+		},
+		async regionChange(e){
+			// console.log('视野发生变化时触发',e)
+			// if(e.type == 'end' && e.causedBy == 'drag'){
+			// 	this.covers = [];
+			// 	this.latitude = e.detail.centerLocation.latitude;
+			// 	this.longitude = e.detail.centerLocation.longitude;
+			// 	await this.getCabList();
+			// }
+		},
+		async clickMap(e){
+			console.log('e==',e.detail)
+			let markerId = e.detail.markerId
+			let index = this.covers.findIndex(item=>item.id==markerId)
+			// if(this.markerId == this.covers[markerId-1].column && this.markerId != 0) return false;
+			this.cabBottom = '-100%';
+			this.storeBottom = '-100%';
+			this.getCabInfo(markerId);
+			
+			// let covers = JSON.parse(JSON.stringify(this.covers)); //this.addNearby();
+			// covers[index] = {
+			// 	id:covers[index].id,
+			// 	type: 0,
+			// 	latitude: covers[index].latitude,
+			// 	longitude: covers[index].longitude,
+			// 	width: 80,
+			// 	height: 92,
+			// 	logo:covers[index].logo,
+			// 	// iconPath: '/static/images/jg_map_ico.png',
+			// 	// 'https://img.zhiqiyun.com/test/2023/07/27/ec50eeee1ab3358d9ba397c86ae8fcc6.jpeg'
+			// 	iconPath: await this.getMarkerLogo(covers[index].logo,2)//显示的图标     
+			// 	// radius: it.column_4[0].radius,//检索的半径,单位为米
+			// 	// joinCluster: true
+			// }
+			let covers = [];
+			// this.covers = []
+			if(this.covers&&this.covers.length>0){
+				
+				for(let i=0;i<this.covers.length;i++){
+					let it = this.covers[i]
+					let markerLogo = await this.getMarkerLogo(it.logo,it.id==markerId?2:null)
+					let obj = {
+						latitude: it.latitude,
+						longitude: it.longitude,
+						width: 80,
+						height: 92,
+						logo:it.logo,
+						id:it.id,
+						// iconPath: '/static/images/jg_map_ico.png',
+						// 'https://img.zhiqiyun.com/test/2023/07/27/ec50eeee1ab3358d9ba397c86ae8fcc6.jpeg'
+						iconPath: markerLogo//显示的图标     
+						// radius: it.column_4[0].radius,//检索的半径,单位为米
+						// joinCluster: true
+					}
+					covers.push(obj)
+				}
+			}
+			this.covers = JSON.parse(JSON.stringify(covers))
+			this.$forceUpdate()
+			// console.log('covers==',this.covers[markerId-1])
+			// console.log('this.circles=',this.circles[0])
+		},
+		timeRange(beginTime, endTime) {
+			let strb = beginTime.split(":");
+			if (strb.length != 2) {
+				return false;
+			}
+			let stre = endTime.split(":");
+			if (stre.length != 2) {
+				return false;
+			}
+			let b = new Date();
+			let e = new Date();
+			let n = new Date();
+			b.setHours(strb[0]);
+			b.setMinutes(strb[1]);
+			e.setHours(stre[0]);
+			e.setMinutes(stre[1]);
+			if (n.getTime() - b.getTime() >= 0 && n.getTime() - e.getTime() < 0) {
+				return true;
+			} else {
+				return false;
+			}
+		},
+		captureTime(time,isTime){
+			return util.captureTime(time,isTime)
+		},
+		getCabList(){
+			let that = this;
+			let form = {
+				latitude: this.latitude,
+				longitude: this.longitude,
+				distance: 2000
+			}
+			return new Promise(async(resolve,reject)=>{
+				// req.getRequest(api.cab_page,form,data=>{
+					let data= {list:[
+						{id:0,latitude:28.235202,longitude:112.930116,logo:'https://img.zhiqiyun.com/test/2023/07/27/15623154b01098483ae01bb99ac17c77.png'},
+						{id:0,latitude:28.233202,longitude:112.931116,logo:'https://img.zhiqiyun.com/test/2023/07/27/ec50eeee1ab3358d9ba397c86ae8fcc6.jpeg'},
+						{id:0,latitude:28.233202,longitude:112.930116,logo:'https://img.zhiqiyun.com/test/2023/07/27/623f217fc7aa3eb7a3dcd0897f4cb80c.png'}
+					]}
+					let covers = this.covers; //this.addNearby();
+					if(data.list&&data.list.length>0){
+						for(let i=0;i<data.list.length;i++){
+							let it = data.list[i]
+							let markerLogo = await this.getMarkerLogo(it.logo)
+							let obj = {
+								latitude: it.latitude,
+								longitude: it.longitude,
+								width: 80,
+								height: 92,
+								logo:it.logo,
+								// iconPath: '/static/images/jg_map_ico.png',
+								// 'https://img.zhiqiyun.com/test/2023/07/27/ec50eeee1ab3358d9ba397c86ae8fcc6.jpeg'
+								iconPath: markerLogo//显示的图标     
+								// radius: it.column_4[0].radius,//检索的半径,单位为米
+								// joinCluster: true
+							}
+							covers.push(obj);
+						}
+					}
+					if(covers.length > 0){
+						covers.map((it,index)=>{
+							it.id = index+1;
+							return it;
+						})
+					}
+					that.covers = covers
+					this.cabList = data.list;
+					resolve();
+				// })
+			})
+		},
+		getCabInfo(id){
+			let params = {
+				latitude: this.latitude,
+				longitude: this.longitude,
+				devId: id
+			}
+			// req.getRequest(api.cab_detail,params,data=>{
+				this.cabInfo = {};
+				this.cabBottom = 0;
+			// })
+		},
+		routePlan(type){
+			let that = this;
+			let plugin = requirePlugin('routePlan');
+			let key = req.public.mapLBSKEY;  //使用在腾讯位置服务申请的key
+			let referer = '线上会客厅系统';   //调用插件的app的名称
+			let endPoint = '';
+			if(type == 1){
+				endPoint = JSON.stringify({  //终点
+				  'name': that.cabInfo.devName,
+				  'latitude': that.cabInfo.latitude,
+				  'longitude': that.cabInfo.longitude
+				});
+			}else{
+				endPoint = JSON.stringify({  //终点
+				  'name': that.storeInfo.name,
+				  'latitude': that.storeInfo.latitude,
+				  'longitude': that.storeInfo.longitude
+				});
+			}
+			console.log('endPoint==',endPoint)
+			wx.navigateTo({
+			  url: 'plugin://routePlan/index?key=' + key + '&referer=' + referer + '&endPoint=' + endPoint
+			});
+		},
+		callPhone(number){
+			uni.makePhoneCall({
+				phoneNumber: number
+			})
+		},
+		hideCab(){
+			this.cabBottom = '-100%';
+			this.markerId = '';
+		},
+		showCab(){
+			this.isShowCab = true;
+		},
+		jumpUrl(url){
+			if (!req.isLogins(true)) return false;
+			uni.navigateTo({
+				url: url
+			})
+		},
+		
+		
+		
+		
+		// 获取markerLogo
+			getMarkerLogo(url,type){
+				// 多次绘图时重置canvas
+				this.canvasShow = true
+				let that = this
+				return new Promise(async(re,rj)=>{
+					let mapBgUrl = 'https://img.zhiqiyun.com/test/2023/07/27/2d30f06817365b83a5f78c455fce8974.png'
+					if(type&&type==2) mapBgUrl = 'https://img.zhiqiyun.com/test/2023/07/27/ad0bfade8dcffa6b20c045a53945dea3.png'
+					console.log('mapBgUrl',mapBgUrl)
+					const avatarp = this.getImageInfo(url); // 获取小程序码图
+					const mapBg = this.getImageInfo(mapBgUrl); // 获取小程序码图
+					Promise.all([avatarp,mapBg]).then(([avatar,mapIcon]) => {
+					const ctx = uni.createCanvasContext('logoIcon', this); // 绘制背景,填充满整个canvas画布
+					let width = 80,
+						height = 92; //默认背景
+					// ctx.setFillStyle('transparent');
+					// ctx.fillRect(0, 0, width, height); // 画布背景
+					ctx.drawImage(mapIcon.path, 0, 0, width, height); //绘制图片
+					// ctx.save();
+					// ctx.restore();
+					// ctx.beginPath();
+					const avatarW = width-28;
+					that.roundRect(ctx, 14, 12, avatarW, avatarW, avatarW/2);
+					ctx.clip(); //裁剪
+					ctx.drawImage(avatar.path, 14, 12, avatarW, avatarW);
+					ctx.restore();
+					ctx.draw(false, function() {
+						uni.canvasToTempFilePath({
+							canvasId: 'logoIcon',
+							success: function(res) {
+								console.log('ctx.draw',res.tempFilePath)
+								that.canvasShow = false
+								re(res.tempFilePath)
+							},
+							fail: function(res) {
+								console.log(res)
+								rj()
+							}
+						}, that);
+					});
+					})
+				})
+			},
+			getImageInfo(url) {
+				console.log('getImageInfo',url)
+				return new Promise((resolve, reject) => {
+					if (!url) {
+						resolve();
+						return false;
+					}
+							
+					uni.getImageInfo({
+						src: url,
+						success: resolve,
+						fail: reject
+					});
+				});
+			},
+			/**
+			*
+			 * @param {CanvasContext} ctx canvas上下文
+			 * @param {number} x 圆角矩形选区的左上角 x坐标
+			 * @param {number} y 圆角矩形选区的左上角 y坐标
+			 * @param {number} w 圆角矩形选区的宽度
+			 * @param {number} h 圆角矩形选区的高度
+			 * @param {number} r 圆角的半径
+			 */
+			roundRect: function(ctx, x, y, w, h, r) {
+				// 开始绘制
+				ctx.beginPath(); // 因为边缘描边存在锯齿,最好指定使用 transparent 填充
+				// 这里是使用 fill 还是 stroke都可以,二选一即可
+						
+				ctx.setFillStyle('white'); // ctx.setStrokeStyle('transparent')
+				// 左上角
+						
+				ctx.arc(x + r, y + r, r, Math.PI, Math.PI * 1.5); // border-top
+						
+				ctx.moveTo(x + r, y);
+				ctx.lineTo(x + w - r, y);
+				ctx.lineTo(x + w, y + r); // 右上角
+						
+				ctx.arc(x + w - r, y + r, r, Math.PI * 1.5, Math.PI * 2); // border-right
+						
+				ctx.lineTo(x + w, y + h - r);
+				ctx.lineTo(x + w - r, y + h); // 右下角
+						
+				ctx.arc(x + w - r, y + h - r, r, 0, Math.PI * 0.5); // border-bottom
+						
+				ctx.lineTo(x + r, y + h);
+				ctx.lineTo(x, y + h - r); // 左下角
+						
+				ctx.arc(x + r, y + h - r, r, Math.PI * 0.5, Math.PI); // border-left
+						
+				ctx.lineTo(x, y + r);
+				ctx.lineTo(x + r, y); // 这里是使用 fill 还是 stroke都可以,二选一即可,但是需要与上面对应
+						
+				ctx.fill(); // ctx.stroke()
+						
+				ctx.closePath(); // 剪切
+						
+				ctx.clip();
+			}
+	},
+}
+</script>
+
+<style>
+	@import "./cardFound.css";
+</style>

+ 2 - 5
card/cardList/cardList.vue

@@ -1,9 +1,6 @@
 <template>
 	<view>
 		<view class="top-fixed">
-			<!-- #ifdef H5 -->
-			<view :style="'height:'+statusBarHeight+'rpx'"></view>
-			<!-- #endif -->
 			<view class="search-box ddflex">
 				<view class="search-input ddflex fflex">
 					<image src="/static/images/ssico.png"></image>
@@ -59,8 +56,8 @@
 		<view style="height: 190rpx;"></view>
 		<!-- 订单列表 -->
 		<view style="position: relative;overflow: hidden;" v-if="dataList.length>0">
-			<view class="register-box" v-for="item,index in dataList" :key="index" @click="jumpUrl('/merchant/cardRegisterDetail/index?id='+item.id)">
-				<view class="register-title ddflex fflex" @click.stop="jumpUrl('/member/detail/detail?id='+item.uid)">
+			<view class="register-box" v-for="item,index in dataList" :key="index" @click="jumpUrl('/card/cardDetail/cardDetail')">
+				<view class="register-title ddflex fflex" @click.stop="jumpUrl('/card/cardDetail/cardDetail')">
 					<image class="register-title-icon" :src="item.avatar?item.avatar:'/static/images/userimg.png'"></image>
 					<view class="flex" style="min-width: 0;">
 						<view class="ddflex">

+ 17 - 19
card/poster/poster.css

@@ -15,25 +15,29 @@ page{
 }
 .info {
 	width: 590rpx;
-	height: 736rpx;
-	background: #FFFFFF;
+	/* height: 736rpx; */
+	background: #27D699;
 	border-radius: 16rpx;
 	margin: 215rpx auto 0;
 	position: relative;
-	padding: 110rpx 0 0;
+	padding: 80rpx 0 0;
 	box-sizing: border-box;
 	overflow: hidden;
 }
-
+.info-title{
+	line-height: 53rpx;
+	font-size: 38rpx;
+	font-family: PingFang SC-Regular, PingFang SC;
+	font-weight: 400;
+	color: #FFFFFF;
+	text-align: center;
+	margin: 40rpx auto;
+}
 .logo {
 	width: 130rpx;
 	height: 130rpx;
-	border: 6rpx solid rgba(255, 255, 255, .8);
 	border-radius: 50%;
-	position: absolute;
-	left: 50%;
-	transform: translateX(-50%);
-	top: -70rpx;
+	margin: 0 auto;
 }
 
 .logo image {
@@ -73,8 +77,8 @@ page{
 }
 
 .code {
-	width: 304rpx;
-	height: 304rpx;
+	width: 341rpx;
+	height: 341rpx;
 	border-radius: 16rpx;
 	background: #fff;
 	margin: 0rpx auto 0;
@@ -83,17 +87,11 @@ page{
 .code image {
 	width: 100%;
 	height: 100%;
+	border-radius: 16rpx;
 }
 
 .infos {
-	position: absolute;
-	bottom: 0;
-	left:0;
-	right:0;
-	width: 590rpx;
-	height: 250rpx;
-	background: linear-gradient(180deg, #A4C8FF 0%, #498FF8 100%);
-	padding: 60rpx;
+	padding: 30rpx 120rpx 100rpx;
 	box-sizing: border-box;
 }
 

+ 3 - 2
card/poster/poster.vue

@@ -5,16 +5,17 @@
 		</view>
 		<view>
 			<view class="info">
-				<!-- <view class="logo"><image :src="cardInfo.avatar ? cardInfo.avatar : '../../static/images/qy_logo.jpg'" mode="aspectFit"></image></view> -->
+				<view class="logo"><image :src="cardInfo.avatar ? cardInfo.avatar : '../../static/images/qy_logo.jpg'" mode="aspectFit"></image></view>
 				<!-- <view class="brief" v-if="cardInfo.message">
 					<image src="../static/images/yin_l.png" class="yin-l"></image>
 					{{ cardInfo.message }}
 					<image src="../static/images/yin_r.png" class="yin-r"></image>
 				</view> -->
+				<view class="info-title">专业顾问为你提供服务</view>
 				<!-- codUrl -->
 				<view class="code"><image :src="codUrl"></image></view>
 				<view class="infos">
-					<view class="name">{{ cardInfo.realName }}</view>
+					<view class="name">{{ cardInfo.realName }}<text style="font-size: 24rpx;margin-left: 10rpx;font-weight: 400;">高级组经理</text></view>
 					<view class="company">{{ cardInfo.companyName }}</view>
 					<view class="industry">{{ cardInfo.industryName }}</view>
 				</view>

+ 5 - 5
components/integral-nav/index.vue

@@ -86,11 +86,11 @@ export default {
         from.purchaseType = 1;
       }
 
-      req.getRequest('/api/purchase/count', from, res => {
-        this.setData({
-          count: res
-        });
-      });
+      // req.getRequest('/api/purchase/count', from, res => {
+      //   this.setData({
+      //     count: res
+      //   });
+      // });
     },
 
     /**

+ 12 - 5
components/nav-bar/index.vue

@@ -73,11 +73,11 @@
 					from.purchaseType = 1;
 				}
 
-				req.getRequest('/api/purchase/count', from, res => {
-					this.setData({
-						count: res
-					});
-				});
+				// req.getRequest('/api/purchase/count', from, res => {
+				// 	this.setData({
+				// 		count: res
+				// 	});
+				// });
 			},
 
 			// 获取tab导航
@@ -130,6 +130,9 @@
 				if (e == "goMatch") {
 					this.goMatch()
 				}
+				if (e == "goFound"){
+					this.goFound()
+				}
 			},
 			goHome: function() {
 				if (this.channel === "home") return;
@@ -162,6 +165,10 @@
 			goMatch: function() {
 				if (this.channel === "match") return;
 				app.globalData.switchTab('pages/matchList/index');
+			},
+			goFound: function() {
+				if (this.channel === "found") return;
+				app.globalData.switchTab('pages/found/found');
 			}
 		}
 	};

+ 10 - 10
components/shopping-cart/index.vue

@@ -40,16 +40,16 @@ export default {
   },
 
   methods: {
-    getCount() {
-      req.getRequest('/api/purchase/count', {
-        purchaseType: 1
-      }, data => {
-        this.setData({
-          count: data
-        });
-        // console.log(this);
-      });
-    },
+    // getCount() {
+    //   req.getRequest('/api/purchase/count', {
+    //     purchaseType: 1
+    //   }, data => {
+    //     this.setData({
+    //       count: data
+    //     });
+    //     // console.log(this);
+    //   });
+    // },
 
     goshopCar() {
       uni.switchTab({

+ 19 - 2
pages.json

@@ -23,6 +23,12 @@
 			"style": {}
 		},
 		{
+			"path": "pages/found/found",
+			"style": {
+				"navigationBarTitleText": "发现"
+			}
+		},
+		{
 			"path": "pages/user/user",
 			"style": {
 				"navigationStyle": "custom",
@@ -172,8 +178,8 @@
 			// 	"text": "直播"
 			// },
 			{
-				"pagePath": "pages/cart/cart",
-				"text": "购物"
+				"pagePath": "pages/found/found",
+				"text": "发现"
 			},
 			{
 				"pagePath": "pages/user/user",
@@ -1239,6 +1245,17 @@
 					"style": {
 						"navigationBarTitleText": "顾问"
 					}
+				},
+				{
+					"path": "cardDetail/cardDetail",
+					"style": {
+						"navigationBarTitleText": ""
+					}
+				},{
+					"path": "cardFound/cardFound",
+					"style": {
+						"navigationBarTitleText": "寻找保险顾问"
+					}
 				}
 			]
 		}

+ 143 - 0
pages/found/found.css

@@ -0,0 +1,143 @@
+
+/* pages/live/live.wxss */
+.top-fixed{
+	position: fixed;
+	top: 0;
+	right: 0;
+	left: 0;
+	background-color: #fff;
+	z-index: 101;
+}
+.search-box{
+	padding: 30rpx;
+	background-color: #fff;
+}
+
+.search-text{
+	color: #999999;
+}
+
+
+.search-input{
+	height: 76rpx;
+	line-height: 76rpx;;
+	background: #F5F5F5;
+	border-radius: 60rpx;
+	padding: 0 26rpx;
+	font-size: 24rpx;
+}
+.search-input input{
+	font-size: 24rpx;
+}
+.search-input image{
+	width: 34rpx;
+	height: 34rpx;
+	margin-right: 26rpx;
+}
+.search-all{
+	color: #2a82fd;
+	font-size: 30rpx;
+	margin-left: 46rpx;
+}
+
+.map-ac{overflow: hidden;margin-top: 30rpx;}
+.map-acs{white-space: nowrap;height: 312rpx;}
+.fx-nav{
+	height: 40rpx;
+	line-height: 40rpx;
+	font-size: 28rpx;
+	font-family: PingFang SC-Medium, PingFang SC;
+	font-weight: 500;
+	color: #7A7B7F;
+	display: inline-block;
+	margin-right: 50rpx;
+}
+.fx-nav:first-child{
+	margin-left: 30rpx;
+}
+.fx-nav-active{
+	font-size: 32rpx;
+	font-weight: bold;
+	position: relative;
+	color: #333333;
+}
+.fx-nav-active::after{
+	content: '';
+	position: absolute;
+	bottom:-10rpx;
+	left:50%;
+	transform: translateX(-50%);
+	width: 40rpx;
+	height: 9rpx;
+	background: #009B62;
+	border-radius: 5rpx 5rpx 5rpx 5rpx;
+	opacity: 1;
+}
+
+.list{padding: 30rpx 30rpx;overflow: hidden;}
+
+
+.image-nav{
+	padding: 10rpx 30rpx;
+	justify-content: space-between;
+}
+.image-nav image{
+	width: 220rpx;
+	height: 141rpx;
+	border-radius: 15rpx 15rpx 15rpx 15rpx;
+}
+
+/* 视频中心 */
+.video-box{
+	display: flex;
+	flex-wrap: wrap;
+	justify-content: space-between;
+}
+.video-card{
+	width: 330rpx;
+	margin-bottom: 30rpx;
+}
+.video-cover{
+	width: 330rpx;
+	height: 250rpx;
+	background: #E6E6E6;
+	border-radius: 12rpx 12rpx 0rpx 0rpx;
+	overflow: hidden;
+	position: relative;
+}
+.video-play{
+	width: 48rpx;
+	height: 48rpx;
+	position: absolute;
+	top:20rpx;
+	right: 20rpx;
+}
+.video-info{
+	padding: 24rpx 20rpx;
+	background: #FFFFFF;
+	border-radius: 0rpx 0rpx 12rpx 12rpx;
+}
+.video-name{
+	font-weight: bold;
+	color: #333333;
+	line-height: 44rpx;
+	height: 88rpx;
+	font-size: 28rpx;
+	margin-bottom: 10rpx;
+}
+.video-info-desc{
+	font-size: 24rpx;
+	color: #999;
+	display: flex;
+	display: -webkit-flex;
+	justify-content: space-between;
+	align-items: center;
+	margin-top: 23rpx;
+}
+.ellipsis{
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+}
+.video{position: relative;width: 100%;height: 100%;}
+.video video{width: 100%;height: 100%;border-radius: 15rpx;display: block;}

+ 276 - 0
pages/found/found.vue

@@ -0,0 +1,276 @@
+<template>
+	<view>
+		<view class="top-fixed">
+			<view class="search-box ddflex">
+				<view class="search-input ddflex fflex">
+					<image src="/static/images/ssico.png"></image>
+					<input @confirm="searchFn" confirm-type="search" @input="searchFn" v-model="searchVal" class="fflex"
+						placeholder="请输入关键词" />
+				</view>
+			</view>
+			<view class="image-nav ddflex">
+				<image src="/static/images/xbrm.png"></image>
+				<image src="/static/images/tbal.png"></image>
+				<image src="/static/images/lpal.png"></image>
+			</view>
+			<view class="map-ac">
+				<scroll-view scroll-x="true" class="map-acs ddflex" style="height: 70rpx;">
+					<view :class="'fx-nav '+(index==0?'fx-nav-active':'')" v-for="item,index in 10">健康生活</view>
+				</scroll-view>
+			</view>
+		</view>
+		<view style="height: 400rpx;"></view>
+		<view class="list">
+			<view class="video-box" v-if="videoList&&videoList.length > 0">
+				<view class="video-card" v-for="(item, index) in (videoList.length%2==0||videoList.length==1?videoList:videoList.slice(0,videoList.length-1))" :key="index">
+					<view class="video-cover">
+						<view class="video">
+							<image mode="aspectFill" style="max-width: 100%;max-height: 100%;" src="/static/images/lj_img.png"></image>
+						</view>
+						<image v-if="index==1" class="video-play" src="/static/images/video_play.png"></image>
+					</view>
+					<view class="video-info">
+						<view class="video-name tovers">3·15|手把手教你读懂“食品标签”,拒绝...</view>
+						<view class="video-info-desc">
+							<view class="ddflex" style="overflow: hidden;">
+								2023-03-13
+							</view>
+							<view class="ddflex">
+								<image style="width: 27rpx;height: 20rpx;margin-right: 10rpx" src="/static/images/eyes.png"></image>
+								<view>2.2万</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="nodata" v-if="!videoList||videoList.length==0">
+				<image :src="picUrlss+'empty_zb.png'"></image>
+				<text>暂无资讯</text>
+			</view>
+		</view>
+
+		<foot channel="found" :isUpdate="isUpdate"></foot>
+	</view>
+</template>
+
+<script>
+	// pages/live/live.js
+	const app = getApp();
+	const req = require("../../utils/request.js");
+	const util = require("../../utils/util.js");
+	import foot from "../../components/nav-bar/index";
+
+	export default {
+		data() {
+			return {
+				picUrlss: req.public.picUrls,
+				bottomBlankHeignt: app.globalData.isIPhoneX ? 68 : 0,
+				page: 1,
+				pageList: [],
+				isLoad: true,
+				isUpdate: false, // 是否更新消息
+				hasmore: false,
+				ishow: false,
+				videoList:[],
+				videoCurrent:null,//当前正在播放的视频下标
+				config:{},
+				isFullScreen:false,//是否正在全屏播放
+				
+				swiperPlayIndex:0
+			};
+		},
+
+		components: {
+			foot
+		},
+		props: {},
+
+		async onLoad() { // this.getList()
+			await this.getConfig()
+			// 为了小程序过审判断,是否屏蔽审核不通过页面
+			console.log("this.config.PASS_REVIEW",this.config.PASS_REVIEW)
+			if(this.config.PASS_REVIEW==0){
+				uni.setNavigationBarTitle({
+					title:'视频'
+				})
+			}
+		},
+
+		onShow() {
+			this.getList();
+			this.getDataList()
+			this.setData({
+				isUpdate: !this.isUpdate
+			});
+		},
+
+		onReachBottom() {
+			this.page++;
+			this.getList();
+		},
+
+		methods: {
+			getConfig() {
+				return new Promise((resolve, reject) => {
+					req.getRequest('/api/config', {}, (res)=> {
+						this.config = res;
+						resolve(res)
+					});
+				});
+			},
+			jumpUrl(url) {
+				// if (!req.isLogins(true)) {
+				// 	return;
+				// }
+				uni.navigateTo({
+					url: url
+				});
+			},
+			// 获取视频列表
+			getDataList() {
+				let form = {
+					page: 1,
+					limit: 6,
+					state: 2,
+					rootCode : 'video',
+					sortRules:'top'
+				}
+				req.getRequest('/api/v3/material/library', form, data => {
+					if(data){
+						data.list.map(item=>{
+							item.createDate = this.captureTime(item.createDate)
+							item.isControls = false
+							item.isShowPlayBtn = true
+						})
+					}
+						// this.videoList = data.list?data.list:[]
+						this.videoList = [{},{}]
+				})
+			},
+			//视频全屏事件
+			fullscreenchange (e,index){
+				console.log(e)
+			   if(!e.detail.fullScreen){
+				   this.isFullScreen = false
+				  if (this.videoCurrent != null) {
+				  	var videoContextPrev = uni.createVideoContext('myVideo' + this.videoCurrent)
+				  	this.videoList[this.videoCurrent].isControls = false
+				  	this.videoList[this.videoCurrent].isShowPlayBtn = true
+				  	
+				  	videoContextPrev.stop()
+				  }
+			   }else{
+				   this.isFullScreen = true
+			   }
+			},
+			// 视频暂停结束事件
+			videoPause(index){
+				if(this.isFullScreen){
+					this.videoList[index].isControls = true
+					this.videoList[index].isShowPlayBtn = true
+				}else{
+					this.videoList[index].isControls = false
+					this.videoList[index].isShowPlayBtn = true
+				}
+			},
+			getList() {
+				let that = this;
+				let isShowLoading = false;
+				// console.log(that.isLoad);
+				if (!that.isLoad) return false;
+				that.isLoad = false;
+				let form = {
+					page: that.page,
+					limit: 10
+				};
+
+				if (form.page == 1 && !isShowLoading) {
+					req.loadIng('加载中');
+					isShowLoading = true;
+				}
+
+				req.getRequest('/api/live/list', form, data => {
+					// if (!data) return req.msg('还没有直播');
+					if (data && data.length == 10) that.isLoad = true;
+					if (that.page > 1) data = that.pageList.concat(data);
+
+					if (!data || data.length < 10) {
+						that.setData({
+							hasmore: true
+						});
+					}
+
+					if (data) {
+						data.map(item => {
+							if (item.start_time) {
+								item.time = util.transTime(item.start_time);
+							}
+
+							return item;
+						});
+					}
+
+					// console.log(data);
+					that.setData({
+						pageList: data
+					});
+
+					if (!this.pageList) {
+						that.setData({
+							ishow: true
+						});
+					} else {
+						that.setData({
+							ishow: false
+						});
+					}
+					// this.pageList = [{
+					// 	roomid: 111,
+					// 	share_img: 'https://img.tongyu99.com/IMAGE-185/20221019/9fb2b253b1de4f65950c3c7ec4d28ba0.png',
+					// 	name: 'ceshi',
+					// 	live_status: 101
+					// },{
+					// 	roomid: 111,
+					// 	share_img: 'https://img.tongyu99.com/IMAGE-185/20221019/9fb2b253b1de4f65950c3c7ec4d28ba0.png',
+					// 	name: 'ceshi',
+					// 	time:'2022-10-19 12:15:22',
+					// 	live_status: 102
+					// },{
+					// 	roomid: 111,
+					// 	share_img: 'https://img.tongyu99.com/IMAGE-185/20221019/9fb2b253b1de4f65950c3c7ec4d28ba0.png',
+					// 	name: 'ceshi',
+					// 	live_status: 103
+					// }]
+					if (isShowLoading) {
+						uni.hideLoading();
+						isShowLoading = false;
+					}
+				});
+			},
+			captureTime(time) {
+				return util.formatTime(new Date(time.replace(/\-/g, '/'))).t2;
+			},
+			// 视频浏览数
+			getBrowse(libraryId) {
+				let params = {
+					bindId: libraryId,
+					type: 7,//素材
+					behavior:4//浏览
+				}
+				req.postRequest('/api/v3/behavior/save', params, data => {});
+			},
+			// 秒转换分秒
+			getMinuteTime(data) {
+				let minute = parseInt(data / 60);
+				let second = parseInt(data % 60);
+				if (minute.toString().length == 1) minute = `0${minute}`;
+				if (second.toString().length == 1) second = `0${second}`;
+				return `${minute}:${second}`;
+			},
+
+		}
+	};
+</script>
+<style>
+	@import "./found.css";
+</style>

BIN
static/images/card_bottom.png


BIN
static/images/clear.png


BIN
static/images/close1.png


BIN
static/images/fj_loca.png


BIN
static/images/found_more.png


BIN
static/images/jg_map_ico.png


BIN
static/images/lpal.png


BIN
static/images/mapIconBg.png


BIN
static/images/side_ico3.png


BIN
static/images/sj_map_ico.png


BIN
static/images/tbal.png


BIN
static/images/video_play.png


BIN
static/images/xbrm.png


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

@@ -0,0 +1,22 @@
+## 1.3.5(2022-01-24)
+- 优化 size 属性可以传入不带单位的字符串数值
+## 1.3.4(2022-01-24)
+- 优化 size 支持其他单位
+## 1.3.3(2022-01-17)
+- 修复 nvue 有些图标不显示的bug,兼容老版本图标
+## 1.3.2(2021-12-01)
+- 优化 示例可复制图标名称
+## 1.3.1(2021-11-23)
+- 优化 兼容旧组件 type 值
+## 1.3.0(2021-11-19)
+- 新增 更多图标
+- 优化 自定义图标使用方式
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-icons](https://uniapp.dcloud.io/component/uniui/uni-icons)
+## 1.1.7(2021-11-08)
+## 1.2.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.5(2021-05-12)
+- 新增 组件示例地址
+## 1.1.4(2021-02-05)
+- 调整为uni_modules目录规范

+ 1169 - 0
uni_modules/uni-icons/components/uni-icons/icons.js

@@ -0,0 +1,1169 @@
+export default {
+  "id": "2852637",
+  "name": "uniui图标库",
+  "font_family": "uniicons",
+  "css_prefix_text": "uniui-",
+  "description": "",
+  "glyphs": [
+    {
+      "icon_id": "25027049",
+      "name": "yanse",
+      "font_class": "color",
+      "unicode": "e6cf",
+      "unicode_decimal": 59087
+    },
+    {
+      "icon_id": "25027048",
+      "name": "wallet",
+      "font_class": "wallet",
+      "unicode": "e6b1",
+      "unicode_decimal": 59057
+    },
+    {
+      "icon_id": "25015720",
+      "name": "settings-filled",
+      "font_class": "settings-filled",
+      "unicode": "e6ce",
+      "unicode_decimal": 59086
+    },
+    {
+      "icon_id": "25015434",
+      "name": "shimingrenzheng-filled",
+      "font_class": "auth-filled",
+      "unicode": "e6cc",
+      "unicode_decimal": 59084
+    },
+    {
+      "icon_id": "24934246",
+      "name": "shop-filled",
+      "font_class": "shop-filled",
+      "unicode": "e6cd",
+      "unicode_decimal": 59085
+    },
+    {
+      "icon_id": "24934159",
+      "name": "staff-filled-01",
+      "font_class": "staff-filled",
+      "unicode": "e6cb",
+      "unicode_decimal": 59083
+    },
+    {
+      "icon_id": "24932461",
+      "name": "VIP-filled",
+      "font_class": "vip-filled",
+      "unicode": "e6c6",
+      "unicode_decimal": 59078
+    },
+    {
+      "icon_id": "24932462",
+      "name": "plus_circle_fill",
+      "font_class": "plus-filled",
+      "unicode": "e6c7",
+      "unicode_decimal": 59079
+    },
+    {
+      "icon_id": "24932463",
+      "name": "folder_add-filled",
+      "font_class": "folder-add-filled",
+      "unicode": "e6c8",
+      "unicode_decimal": 59080
+    },
+    {
+      "icon_id": "24932464",
+      "name": "yanse-filled",
+      "font_class": "color-filled",
+      "unicode": "e6c9",
+      "unicode_decimal": 59081
+    },
+    {
+      "icon_id": "24932465",
+      "name": "tune-filled",
+      "font_class": "tune-filled",
+      "unicode": "e6ca",
+      "unicode_decimal": 59082
+    },
+    {
+      "icon_id": "24932455",
+      "name": "a-rilidaka-filled",
+      "font_class": "calendar-filled",
+      "unicode": "e6c0",
+      "unicode_decimal": 59072
+    },
+    {
+      "icon_id": "24932456",
+      "name": "notification-filled",
+      "font_class": "notification-filled",
+      "unicode": "e6c1",
+      "unicode_decimal": 59073
+    },
+    {
+      "icon_id": "24932457",
+      "name": "wallet-filled",
+      "font_class": "wallet-filled",
+      "unicode": "e6c2",
+      "unicode_decimal": 59074
+    },
+    {
+      "icon_id": "24932458",
+      "name": "paihangbang-filled",
+      "font_class": "medal-filled",
+      "unicode": "e6c3",
+      "unicode_decimal": 59075
+    },
+    {
+      "icon_id": "24932459",
+      "name": "gift-filled",
+      "font_class": "gift-filled",
+      "unicode": "e6c4",
+      "unicode_decimal": 59076
+    },
+    {
+      "icon_id": "24932460",
+      "name": "fire-filled",
+      "font_class": "fire-filled",
+      "unicode": "e6c5",
+      "unicode_decimal": 59077
+    },
+    {
+      "icon_id": "24928001",
+      "name": "refreshempty",
+      "font_class": "refreshempty",
+      "unicode": "e6bf",
+      "unicode_decimal": 59071
+    },
+    {
+      "icon_id": "24926853",
+      "name": "location-ellipse",
+      "font_class": "location-filled",
+      "unicode": "e6af",
+      "unicode_decimal": 59055
+    },
+    {
+      "icon_id": "24926735",
+      "name": "person-filled",
+      "font_class": "person-filled",
+      "unicode": "e69d",
+      "unicode_decimal": 59037
+    },
+    {
+      "icon_id": "24926703",
+      "name": "personadd-filled",
+      "font_class": "personadd-filled",
+      "unicode": "e698",
+      "unicode_decimal": 59032
+    },
+    {
+      "icon_id": "24923351",
+      "name": "back",
+      "font_class": "back",
+      "unicode": "e6b9",
+      "unicode_decimal": 59065
+    },
+    {
+      "icon_id": "24923352",
+      "name": "forward",
+      "font_class": "forward",
+      "unicode": "e6ba",
+      "unicode_decimal": 59066
+    },
+    {
+      "icon_id": "24923353",
+      "name": "arrowthinright",
+      "font_class": "arrow-right",
+      "unicode": "e6bb",
+      "unicode_decimal": 59067
+    },
+		{
+		  "icon_id": "24923353",
+		  "name": "arrowthinright",
+		  "font_class": "arrowthinright",
+		  "unicode": "e6bb",
+		  "unicode_decimal": 59067
+		},
+    {
+      "icon_id": "24923354",
+      "name": "arrowthinleft",
+      "font_class": "arrow-left",
+      "unicode": "e6bc",
+      "unicode_decimal": 59068
+    },
+		{
+		  "icon_id": "24923354",
+		  "name": "arrowthinleft",
+		  "font_class": "arrowthinleft",
+		  "unicode": "e6bc",
+		  "unicode_decimal": 59068
+		},
+    {
+      "icon_id": "24923355",
+      "name": "arrowthinup",
+      "font_class": "arrow-up",
+      "unicode": "e6bd",
+      "unicode_decimal": 59069
+    },
+		{
+		  "icon_id": "24923355",
+		  "name": "arrowthinup",
+		  "font_class": "arrowthinup",
+		  "unicode": "e6bd",
+		  "unicode_decimal": 59069
+		},
+    {
+      "icon_id": "24923356",
+      "name": "arrowthindown",
+      "font_class": "arrow-down",
+      "unicode": "e6be",
+      "unicode_decimal": 59070
+    },{
+      "icon_id": "24923356",
+      "name": "arrowthindown",
+      "font_class": "arrowthindown",
+      "unicode": "e6be",
+      "unicode_decimal": 59070
+    },
+    {
+      "icon_id": "24923349",
+      "name": "arrowdown",
+      "font_class": "bottom",
+      "unicode": "e6b8",
+      "unicode_decimal": 59064
+    },{
+      "icon_id": "24923349",
+      "name": "arrowdown",
+      "font_class": "arrowdown",
+      "unicode": "e6b8",
+      "unicode_decimal": 59064
+    },
+    {
+      "icon_id": "24923346",
+      "name": "arrowright",
+      "font_class": "right",
+      "unicode": "e6b5",
+      "unicode_decimal": 59061
+    },
+		{
+		  "icon_id": "24923346",
+		  "name": "arrowright",
+		  "font_class": "arrowright",
+		  "unicode": "e6b5",
+		  "unicode_decimal": 59061
+		},
+    {
+      "icon_id": "24923347",
+      "name": "arrowup",
+      "font_class": "top",
+      "unicode": "e6b6",
+      "unicode_decimal": 59062
+    },
+		{
+		  "icon_id": "24923347",
+		  "name": "arrowup",
+		  "font_class": "arrowup",
+		  "unicode": "e6b6",
+		  "unicode_decimal": 59062
+		},
+    {
+      "icon_id": "24923348",
+      "name": "arrowleft",
+      "font_class": "left",
+      "unicode": "e6b7",
+      "unicode_decimal": 59063
+    },
+		{
+		  "icon_id": "24923348",
+		  "name": "arrowleft",
+		  "font_class": "arrowleft",
+		  "unicode": "e6b7",
+		  "unicode_decimal": 59063
+		},
+    {
+      "icon_id": "24923334",
+      "name": "eye",
+      "font_class": "eye",
+      "unicode": "e651",
+      "unicode_decimal": 58961
+    },
+    {
+      "icon_id": "24923335",
+      "name": "eye-filled",
+      "font_class": "eye-filled",
+      "unicode": "e66a",
+      "unicode_decimal": 58986
+    },
+    {
+      "icon_id": "24923336",
+      "name": "eye-slash",
+      "font_class": "eye-slash",
+      "unicode": "e6b3",
+      "unicode_decimal": 59059
+    },
+    {
+      "icon_id": "24923337",
+      "name": "eye-slash-filled",
+      "font_class": "eye-slash-filled",
+      "unicode": "e6b4",
+      "unicode_decimal": 59060
+    },
+    {
+      "icon_id": "24923305",
+      "name": "info-filled",
+      "font_class": "info-filled",
+      "unicode": "e649",
+      "unicode_decimal": 58953
+    },
+    {
+      "icon_id": "24923299",
+      "name": "reload-01",
+      "font_class": "reload",
+      "unicode": "e6b2",
+      "unicode_decimal": 59058
+    },
+    {
+      "icon_id": "24923195",
+      "name": "mic_slash_fill",
+      "font_class": "micoff-filled",
+      "unicode": "e6b0",
+      "unicode_decimal": 59056
+    },
+    {
+      "icon_id": "24923165",
+      "name": "map-pin-ellipse",
+      "font_class": "map-pin-ellipse",
+      "unicode": "e6ac",
+      "unicode_decimal": 59052
+    },
+    {
+      "icon_id": "24923166",
+      "name": "map-pin",
+      "font_class": "map-pin",
+      "unicode": "e6ad",
+      "unicode_decimal": 59053
+    },
+    {
+      "icon_id": "24923167",
+      "name": "location",
+      "font_class": "location",
+      "unicode": "e6ae",
+      "unicode_decimal": 59054
+    },
+    {
+      "icon_id": "24923064",
+      "name": "starhalf",
+      "font_class": "starhalf",
+      "unicode": "e683",
+      "unicode_decimal": 59011
+    },
+    {
+      "icon_id": "24923065",
+      "name": "star",
+      "font_class": "star",
+      "unicode": "e688",
+      "unicode_decimal": 59016
+    },
+    {
+      "icon_id": "24923066",
+      "name": "star-filled",
+      "font_class": "star-filled",
+      "unicode": "e68f",
+      "unicode_decimal": 59023
+    },
+    {
+      "icon_id": "24899646",
+      "name": "a-rilidaka",
+      "font_class": "calendar",
+      "unicode": "e6a0",
+      "unicode_decimal": 59040
+    },
+    {
+      "icon_id": "24899647",
+      "name": "fire",
+      "font_class": "fire",
+      "unicode": "e6a1",
+      "unicode_decimal": 59041
+    },
+    {
+      "icon_id": "24899648",
+      "name": "paihangbang",
+      "font_class": "medal",
+      "unicode": "e6a2",
+      "unicode_decimal": 59042
+    },
+    {
+      "icon_id": "24899649",
+      "name": "font",
+      "font_class": "font",
+      "unicode": "e6a3",
+      "unicode_decimal": 59043
+    },
+    {
+      "icon_id": "24899650",
+      "name": "gift",
+      "font_class": "gift",
+      "unicode": "e6a4",
+      "unicode_decimal": 59044
+    },
+    {
+      "icon_id": "24899651",
+      "name": "link",
+      "font_class": "link",
+      "unicode": "e6a5",
+      "unicode_decimal": 59045
+    },
+    {
+      "icon_id": "24899652",
+      "name": "notification",
+      "font_class": "notification",
+      "unicode": "e6a6",
+      "unicode_decimal": 59046
+    },
+    {
+      "icon_id": "24899653",
+      "name": "staff",
+      "font_class": "staff",
+      "unicode": "e6a7",
+      "unicode_decimal": 59047
+    },
+    {
+      "icon_id": "24899654",
+      "name": "VIP",
+      "font_class": "vip",
+      "unicode": "e6a8",
+      "unicode_decimal": 59048
+    },
+    {
+      "icon_id": "24899655",
+      "name": "folder_add",
+      "font_class": "folder-add",
+      "unicode": "e6a9",
+      "unicode_decimal": 59049
+    },
+    {
+      "icon_id": "24899656",
+      "name": "tune",
+      "font_class": "tune",
+      "unicode": "e6aa",
+      "unicode_decimal": 59050
+    },
+    {
+      "icon_id": "24899657",
+      "name": "shimingrenzheng",
+      "font_class": "auth",
+      "unicode": "e6ab",
+      "unicode_decimal": 59051
+    },
+    {
+      "icon_id": "24899565",
+      "name": "person",
+      "font_class": "person",
+      "unicode": "e699",
+      "unicode_decimal": 59033
+    },
+    {
+      "icon_id": "24899566",
+      "name": "email-filled",
+      "font_class": "email-filled",
+      "unicode": "e69a",
+      "unicode_decimal": 59034
+    },
+    {
+      "icon_id": "24899567",
+      "name": "phone-filled",
+      "font_class": "phone-filled",
+      "unicode": "e69b",
+      "unicode_decimal": 59035
+    },
+    {
+      "icon_id": "24899568",
+      "name": "phone",
+      "font_class": "phone",
+      "unicode": "e69c",
+      "unicode_decimal": 59036
+    },
+    {
+      "icon_id": "24899570",
+      "name": "email",
+      "font_class": "email",
+      "unicode": "e69e",
+      "unicode_decimal": 59038
+    },
+    {
+      "icon_id": "24899571",
+      "name": "personadd",
+      "font_class": "personadd",
+      "unicode": "e69f",
+      "unicode_decimal": 59039
+    },
+    {
+      "icon_id": "24899558",
+      "name": "chatboxes-filled",
+      "font_class": "chatboxes-filled",
+      "unicode": "e692",
+      "unicode_decimal": 59026
+    },
+    {
+      "icon_id": "24899559",
+      "name": "contact",
+      "font_class": "contact",
+      "unicode": "e693",
+      "unicode_decimal": 59027
+    },
+    {
+      "icon_id": "24899560",
+      "name": "chatbubble-filled",
+      "font_class": "chatbubble-filled",
+      "unicode": "e694",
+      "unicode_decimal": 59028
+    },
+    {
+      "icon_id": "24899561",
+      "name": "contact-filled",
+      "font_class": "contact-filled",
+      "unicode": "e695",
+      "unicode_decimal": 59029
+    },
+    {
+      "icon_id": "24899562",
+      "name": "chatboxes",
+      "font_class": "chatboxes",
+      "unicode": "e696",
+      "unicode_decimal": 59030
+    },
+    {
+      "icon_id": "24899563",
+      "name": "chatbubble",
+      "font_class": "chatbubble",
+      "unicode": "e697",
+      "unicode_decimal": 59031
+    },
+    {
+      "icon_id": "24881290",
+      "name": "upload-filled",
+      "font_class": "upload-filled",
+      "unicode": "e68e",
+      "unicode_decimal": 59022
+    },
+    {
+      "icon_id": "24881292",
+      "name": "upload",
+      "font_class": "upload",
+      "unicode": "e690",
+      "unicode_decimal": 59024
+    },
+    {
+      "icon_id": "24881293",
+      "name": "weixin",
+      "font_class": "weixin",
+      "unicode": "e691",
+      "unicode_decimal": 59025
+    },
+    {
+      "icon_id": "24881274",
+      "name": "compose",
+      "font_class": "compose",
+      "unicode": "e67f",
+      "unicode_decimal": 59007
+    },
+    {
+      "icon_id": "24881275",
+      "name": "qq",
+      "font_class": "qq",
+      "unicode": "e680",
+      "unicode_decimal": 59008
+    },
+    {
+      "icon_id": "24881276",
+      "name": "download-filled",
+      "font_class": "download-filled",
+      "unicode": "e681",
+      "unicode_decimal": 59009
+    },
+    {
+      "icon_id": "24881277",
+      "name": "pengyouquan",
+      "font_class": "pyq",
+      "unicode": "e682",
+      "unicode_decimal": 59010
+    },
+    {
+      "icon_id": "24881279",
+      "name": "sound",
+      "font_class": "sound",
+      "unicode": "e684",
+      "unicode_decimal": 59012
+    },
+    {
+      "icon_id": "24881280",
+      "name": "trash-filled",
+      "font_class": "trash-filled",
+      "unicode": "e685",
+      "unicode_decimal": 59013
+    },
+    {
+      "icon_id": "24881281",
+      "name": "sound-filled",
+      "font_class": "sound-filled",
+      "unicode": "e686",
+      "unicode_decimal": 59014
+    },
+    {
+      "icon_id": "24881282",
+      "name": "trash",
+      "font_class": "trash",
+      "unicode": "e687",
+      "unicode_decimal": 59015
+    },
+    {
+      "icon_id": "24881284",
+      "name": "videocam-filled",
+      "font_class": "videocam-filled",
+      "unicode": "e689",
+      "unicode_decimal": 59017
+    },
+    {
+      "icon_id": "24881285",
+      "name": "spinner-cycle",
+      "font_class": "spinner-cycle",
+      "unicode": "e68a",
+      "unicode_decimal": 59018
+    },
+    {
+      "icon_id": "24881286",
+      "name": "weibo",
+      "font_class": "weibo",
+      "unicode": "e68b",
+      "unicode_decimal": 59019
+    },
+    {
+      "icon_id": "24881288",
+      "name": "videocam",
+      "font_class": "videocam",
+      "unicode": "e68c",
+      "unicode_decimal": 59020
+    },
+    {
+      "icon_id": "24881289",
+      "name": "download",
+      "font_class": "download",
+      "unicode": "e68d",
+      "unicode_decimal": 59021
+    },
+    {
+      "icon_id": "24879601",
+      "name": "help",
+      "font_class": "help",
+      "unicode": "e679",
+      "unicode_decimal": 59001
+    },
+    {
+      "icon_id": "24879602",
+      "name": "navigate-filled",
+      "font_class": "navigate-filled",
+      "unicode": "e67a",
+      "unicode_decimal": 59002
+    },
+    {
+      "icon_id": "24879603",
+      "name": "plusempty",
+      "font_class": "plusempty",
+      "unicode": "e67b",
+      "unicode_decimal": 59003
+    },
+    {
+      "icon_id": "24879604",
+      "name": "smallcircle",
+      "font_class": "smallcircle",
+      "unicode": "e67c",
+      "unicode_decimal": 59004
+    },
+    {
+      "icon_id": "24879605",
+      "name": "minus-filled",
+      "font_class": "minus-filled",
+      "unicode": "e67d",
+      "unicode_decimal": 59005
+    },
+    {
+      "icon_id": "24879606",
+      "name": "micoff",
+      "font_class": "micoff",
+      "unicode": "e67e",
+      "unicode_decimal": 59006
+    },
+    {
+      "icon_id": "24879588",
+      "name": "closeempty",
+      "font_class": "closeempty",
+      "unicode": "e66c",
+      "unicode_decimal": 58988
+    },
+    {
+      "icon_id": "24879589",
+      "name": "clear",
+      "font_class": "clear",
+      "unicode": "e66d",
+      "unicode_decimal": 58989
+    },
+    {
+      "icon_id": "24879590",
+      "name": "navigate",
+      "font_class": "navigate",
+      "unicode": "e66e",
+      "unicode_decimal": 58990
+    },
+    {
+      "icon_id": "24879591",
+      "name": "minus",
+      "font_class": "minus",
+      "unicode": "e66f",
+      "unicode_decimal": 58991
+    },
+    {
+      "icon_id": "24879592",
+      "name": "image",
+      "font_class": "image",
+      "unicode": "e670",
+      "unicode_decimal": 58992
+    },
+    {
+      "icon_id": "24879593",
+      "name": "mic",
+      "font_class": "mic",
+      "unicode": "e671",
+      "unicode_decimal": 58993
+    },
+    {
+      "icon_id": "24879594",
+      "name": "paperplane",
+      "font_class": "paperplane",
+      "unicode": "e672",
+      "unicode_decimal": 58994
+    },
+    {
+      "icon_id": "24879595",
+      "name": "close",
+      "font_class": "close",
+      "unicode": "e673",
+      "unicode_decimal": 58995
+    },
+    {
+      "icon_id": "24879596",
+      "name": "help-filled",
+      "font_class": "help-filled",
+      "unicode": "e674",
+      "unicode_decimal": 58996
+    },
+    {
+      "icon_id": "24879597",
+      "name": "plus-filled",
+      "font_class": "paperplane-filled",
+      "unicode": "e675",
+      "unicode_decimal": 58997
+    },
+    {
+      "icon_id": "24879598",
+      "name": "plus",
+      "font_class": "plus",
+      "unicode": "e676",
+      "unicode_decimal": 58998
+    },
+    {
+      "icon_id": "24879599",
+      "name": "mic-filled",
+      "font_class": "mic-filled",
+      "unicode": "e677",
+      "unicode_decimal": 58999
+    },
+    {
+      "icon_id": "24879600",
+      "name": "image-filled",
+      "font_class": "image-filled",
+      "unicode": "e678",
+      "unicode_decimal": 59000
+    },
+    {
+      "icon_id": "24855900",
+      "name": "locked-filled",
+      "font_class": "locked-filled",
+      "unicode": "e668",
+      "unicode_decimal": 58984
+    },
+    {
+      "icon_id": "24855901",
+      "name": "info",
+      "font_class": "info",
+      "unicode": "e669",
+      "unicode_decimal": 58985
+    },
+    {
+      "icon_id": "24855903",
+      "name": "locked",
+      "font_class": "locked",
+      "unicode": "e66b",
+      "unicode_decimal": 58987
+    },
+    {
+      "icon_id": "24855884",
+      "name": "camera-filled",
+      "font_class": "camera-filled",
+      "unicode": "e658",
+      "unicode_decimal": 58968
+    },
+    {
+      "icon_id": "24855885",
+      "name": "chat-filled",
+      "font_class": "chat-filled",
+      "unicode": "e659",
+      "unicode_decimal": 58969
+    },
+    {
+      "icon_id": "24855886",
+      "name": "camera",
+      "font_class": "camera",
+      "unicode": "e65a",
+      "unicode_decimal": 58970
+    },
+    {
+      "icon_id": "24855887",
+      "name": "circle",
+      "font_class": "circle",
+      "unicode": "e65b",
+      "unicode_decimal": 58971
+    },
+    {
+      "icon_id": "24855888",
+      "name": "checkmarkempty",
+      "font_class": "checkmarkempty",
+      "unicode": "e65c",
+      "unicode_decimal": 58972
+    },
+    {
+      "icon_id": "24855889",
+      "name": "chat",
+      "font_class": "chat",
+      "unicode": "e65d",
+      "unicode_decimal": 58973
+    },
+    {
+      "icon_id": "24855890",
+      "name": "circle-filled",
+      "font_class": "circle-filled",
+      "unicode": "e65e",
+      "unicode_decimal": 58974
+    },
+    {
+      "icon_id": "24855891",
+      "name": "flag",
+      "font_class": "flag",
+      "unicode": "e65f",
+      "unicode_decimal": 58975
+    },
+    {
+      "icon_id": "24855892",
+      "name": "flag-filled",
+      "font_class": "flag-filled",
+      "unicode": "e660",
+      "unicode_decimal": 58976
+    },
+    {
+      "icon_id": "24855893",
+      "name": "gear-filled",
+      "font_class": "gear-filled",
+      "unicode": "e661",
+      "unicode_decimal": 58977
+    },
+    {
+      "icon_id": "24855894",
+      "name": "home",
+      "font_class": "home",
+      "unicode": "e662",
+      "unicode_decimal": 58978
+    },
+    {
+      "icon_id": "24855895",
+      "name": "home-filled",
+      "font_class": "home-filled",
+      "unicode": "e663",
+      "unicode_decimal": 58979
+    },
+    {
+      "icon_id": "24855896",
+      "name": "gear",
+      "font_class": "gear",
+      "unicode": "e664",
+      "unicode_decimal": 58980
+    },
+    {
+      "icon_id": "24855897",
+      "name": "smallcircle-filled",
+      "font_class": "smallcircle-filled",
+      "unicode": "e665",
+      "unicode_decimal": 58981
+    },
+    {
+      "icon_id": "24855898",
+      "name": "map-filled",
+      "font_class": "map-filled",
+      "unicode": "e666",
+      "unicode_decimal": 58982
+    },
+    {
+      "icon_id": "24855899",
+      "name": "map",
+      "font_class": "map",
+      "unicode": "e667",
+      "unicode_decimal": 58983
+    },
+    {
+      "icon_id": "24855825",
+      "name": "refresh-filled",
+      "font_class": "refresh-filled",
+      "unicode": "e656",
+      "unicode_decimal": 58966
+    },
+    {
+      "icon_id": "24855826",
+      "name": "refresh",
+      "font_class": "refresh",
+      "unicode": "e657",
+      "unicode_decimal": 58967
+    },
+    {
+      "icon_id": "24855808",
+      "name": "cloud-upload",
+      "font_class": "cloud-upload",
+      "unicode": "e645",
+      "unicode_decimal": 58949
+    },
+    {
+      "icon_id": "24855809",
+      "name": "cloud-download-filled",
+      "font_class": "cloud-download-filled",
+      "unicode": "e646",
+      "unicode_decimal": 58950
+    },
+    {
+      "icon_id": "24855810",
+      "name": "cloud-download",
+      "font_class": "cloud-download",
+      "unicode": "e647",
+      "unicode_decimal": 58951
+    },
+    {
+      "icon_id": "24855811",
+      "name": "cloud-upload-filled",
+      "font_class": "cloud-upload-filled",
+      "unicode": "e648",
+      "unicode_decimal": 58952
+    },
+    {
+      "icon_id": "24855813",
+      "name": "redo",
+      "font_class": "redo",
+      "unicode": "e64a",
+      "unicode_decimal": 58954
+    },
+    {
+      "icon_id": "24855814",
+      "name": "images-filled",
+      "font_class": "images-filled",
+      "unicode": "e64b",
+      "unicode_decimal": 58955
+    },
+    {
+      "icon_id": "24855815",
+      "name": "undo-filled",
+      "font_class": "undo-filled",
+      "unicode": "e64c",
+      "unicode_decimal": 58956
+    },
+    {
+      "icon_id": "24855816",
+      "name": "more",
+      "font_class": "more",
+      "unicode": "e64d",
+      "unicode_decimal": 58957
+    },
+    {
+      "icon_id": "24855817",
+      "name": "more-filled",
+      "font_class": "more-filled",
+      "unicode": "e64e",
+      "unicode_decimal": 58958
+    },
+    {
+      "icon_id": "24855818",
+      "name": "undo",
+      "font_class": "undo",
+      "unicode": "e64f",
+      "unicode_decimal": 58959
+    },
+    {
+      "icon_id": "24855819",
+      "name": "images",
+      "font_class": "images",
+      "unicode": "e650",
+      "unicode_decimal": 58960
+    },
+    {
+      "icon_id": "24855821",
+      "name": "paperclip",
+      "font_class": "paperclip",
+      "unicode": "e652",
+      "unicode_decimal": 58962
+    },
+    {
+      "icon_id": "24855822",
+      "name": "settings",
+      "font_class": "settings",
+      "unicode": "e653",
+      "unicode_decimal": 58963
+    },
+    {
+      "icon_id": "24855823",
+      "name": "search",
+      "font_class": "search",
+      "unicode": "e654",
+      "unicode_decimal": 58964
+    },
+    {
+      "icon_id": "24855824",
+      "name": "redo-filled",
+      "font_class": "redo-filled",
+      "unicode": "e655",
+      "unicode_decimal": 58965
+    },
+    {
+      "icon_id": "24841702",
+      "name": "list",
+      "font_class": "list",
+      "unicode": "e644",
+      "unicode_decimal": 58948
+    },
+    {
+      "icon_id": "24841489",
+      "name": "mail-open-filled",
+      "font_class": "mail-open-filled",
+      "unicode": "e63a",
+      "unicode_decimal": 58938
+    },
+    {
+      "icon_id": "24841491",
+      "name": "hand-thumbsdown-filled",
+      "font_class": "hand-down-filled",
+      "unicode": "e63c",
+      "unicode_decimal": 58940
+    },
+    {
+      "icon_id": "24841492",
+      "name": "hand-thumbsdown",
+      "font_class": "hand-down",
+      "unicode": "e63d",
+      "unicode_decimal": 58941
+    },
+    {
+      "icon_id": "24841493",
+      "name": "hand-thumbsup-filled",
+      "font_class": "hand-up-filled",
+      "unicode": "e63e",
+      "unicode_decimal": 58942
+    },
+    {
+      "icon_id": "24841494",
+      "name": "hand-thumbsup",
+      "font_class": "hand-up",
+      "unicode": "e63f",
+      "unicode_decimal": 58943
+    },
+    {
+      "icon_id": "24841496",
+      "name": "heart-filled",
+      "font_class": "heart-filled",
+      "unicode": "e641",
+      "unicode_decimal": 58945
+    },
+    {
+      "icon_id": "24841498",
+      "name": "mail-open",
+      "font_class": "mail-open",
+      "unicode": "e643",
+      "unicode_decimal": 58947
+    },
+    {
+      "icon_id": "24841488",
+      "name": "heart",
+      "font_class": "heart",
+      "unicode": "e639",
+      "unicode_decimal": 58937
+    },
+    {
+      "icon_id": "24839963",
+      "name": "loop",
+      "font_class": "loop",
+      "unicode": "e633",
+      "unicode_decimal": 58931
+    },
+    {
+      "icon_id": "24839866",
+      "name": "pulldown",
+      "font_class": "pulldown",
+      "unicode": "e632",
+      "unicode_decimal": 58930
+    },
+    {
+      "icon_id": "24813798",
+      "name": "scan",
+      "font_class": "scan",
+      "unicode": "e62a",
+      "unicode_decimal": 58922
+    },
+    {
+      "icon_id": "24813786",
+      "name": "bars",
+      "font_class": "bars",
+      "unicode": "e627",
+      "unicode_decimal": 58919
+    },
+    {
+      "icon_id": "24813788",
+      "name": "cart-filled",
+      "font_class": "cart-filled",
+      "unicode": "e629",
+      "unicode_decimal": 58921
+    },
+    {
+      "icon_id": "24813790",
+      "name": "checkbox",
+      "font_class": "checkbox",
+      "unicode": "e62b",
+      "unicode_decimal": 58923
+    },
+    {
+      "icon_id": "24813791",
+      "name": "checkbox-filled",
+      "font_class": "checkbox-filled",
+      "unicode": "e62c",
+      "unicode_decimal": 58924
+    },
+    {
+      "icon_id": "24813794",
+      "name": "shop",
+      "font_class": "shop",
+      "unicode": "e62f",
+      "unicode_decimal": 58927
+    },
+    {
+      "icon_id": "24813795",
+      "name": "headphones",
+      "font_class": "headphones",
+      "unicode": "e630",
+      "unicode_decimal": 58928
+    },
+    {
+      "icon_id": "24813796",
+      "name": "cart",
+      "font_class": "cart",
+      "unicode": "e631",
+      "unicode_decimal": 58929
+    }
+  ]
+}

+ 96 - 0
uni_modules/uni-icons/components/uni-icons/uni-icons.vue

@@ -0,0 +1,96 @@
+<template>
+	<!-- #ifdef APP-NVUE -->
+	<text :style="{ color: color, 'font-size': iconSize }" class="uni-icons" @click="_onClick">{{unicode}}</text>
+	<!-- #endif -->
+	<!-- #ifndef APP-NVUE -->
+	<text :style="{ color: color, 'font-size': iconSize }" class="uni-icons" :class="['uniui-'+type,customPrefix,customPrefix?type:'']" @click="_onClick"></text>
+	<!-- #endif -->
+</template>
+
+<script>
+	import icons from './icons.js';
+	const getVal = (val) => {
+		const reg = /^[0-9]*$/g
+		return (typeof val === 'number' || reg.test(val) )? val + 'px' : val;
+	} 
+	// #ifdef APP-NVUE
+	var domModule = weex.requireModule('dom');
+	import iconUrl from './uniicons.ttf'
+	domModule.addRule('fontFace', {
+		'fontFamily': "uniicons",
+		'src': "url('"+iconUrl+"')"
+	});
+	// #endif
+
+	/**
+	 * Icons 图标
+	 * @description 用于展示 icons 图标
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=28
+	 * @property {Number} size 图标大小
+	 * @property {String} type 图标图案,参考示例
+	 * @property {String} color 图标颜色
+	 * @property {String} customPrefix 自定义图标
+	 * @event {Function} click 点击 Icon 触发事件
+	 */
+	export default {
+		name: 'UniIcons',
+		emits:['click'],
+		props: {
+			type: {
+				type: String,
+				default: ''
+			},
+			color: {
+				type: String,
+				default: '#333333'
+			},
+			size: {
+				type: [Number, String],
+				default: 16
+			},
+			customPrefix:{
+				type: String,
+				default: ''
+			}
+		},
+		data() {
+			return {
+				icons: icons.glyphs
+			}
+		},
+		computed:{
+			unicode(){
+				let code = this.icons.find(v=>v.font_class === this.type)
+				if(code){
+					return unescape(`%u${code.unicode}`)
+				}
+				return ''
+			},
+			iconSize(){
+				return getVal(this.size)
+			}
+		},
+		methods: {
+			_onClick() {
+				this.$emit('click')
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	/* #ifndef APP-NVUE */
+	@import './uniicons.css';
+	@font-face {
+		font-family: uniicons;
+		src: url('./uniicons.ttf') format('truetype');
+	}
+
+	/* #endif */
+	.uni-icons {
+		font-family: uniicons;
+		text-decoration: none;
+		text-align: center;
+	}
+
+</style>

+ 663 - 0
uni_modules/uni-icons/components/uni-icons/uniicons.css

@@ -0,0 +1,663 @@
+.uniui-color:before {
+  content: "\e6cf";
+}
+
+.uniui-wallet:before {
+  content: "\e6b1";
+}
+
+.uniui-settings-filled:before {
+  content: "\e6ce";
+}
+
+.uniui-auth-filled:before {
+  content: "\e6cc";
+}
+
+.uniui-shop-filled:before {
+  content: "\e6cd";
+}
+
+.uniui-staff-filled:before {
+  content: "\e6cb";
+}
+
+.uniui-vip-filled:before {
+  content: "\e6c6";
+}
+
+.uniui-plus-filled:before {
+  content: "\e6c7";
+}
+
+.uniui-folder-add-filled:before {
+  content: "\e6c8";
+}
+
+.uniui-color-filled:before {
+  content: "\e6c9";
+}
+
+.uniui-tune-filled:before {
+  content: "\e6ca";
+}
+
+.uniui-calendar-filled:before {
+  content: "\e6c0";
+}
+
+.uniui-notification-filled:before {
+  content: "\e6c1";
+}
+
+.uniui-wallet-filled:before {
+  content: "\e6c2";
+}
+
+.uniui-medal-filled:before {
+  content: "\e6c3";
+}
+
+.uniui-gift-filled:before {
+  content: "\e6c4";
+}
+
+.uniui-fire-filled:before {
+  content: "\e6c5";
+}
+
+.uniui-refreshempty:before {
+  content: "\e6bf";
+}
+
+.uniui-location-filled:before {
+  content: "\e6af";
+}
+
+.uniui-person-filled:before {
+  content: "\e69d";
+}
+
+.uniui-personadd-filled:before {
+  content: "\e698";
+}
+
+.uniui-back:before {
+  content: "\e6b9";
+}
+
+.uniui-forward:before {
+  content: "\e6ba";
+}
+
+.uniui-arrow-right:before {
+  content: "\e6bb";
+}
+
+.uniui-arrowthinright:before {
+  content: "\e6bb";
+}
+
+.uniui-arrow-left:before {
+  content: "\e6bc";
+}
+
+.uniui-arrowthinleft:before {
+  content: "\e6bc";
+}
+
+.uniui-arrow-up:before {
+  content: "\e6bd";
+}
+
+.uniui-arrowthinup:before {
+  content: "\e6bd";
+}
+
+.uniui-arrow-down:before {
+  content: "\e6be";
+}
+
+.uniui-arrowthindown:before {
+  content: "\e6be";
+}
+
+.uniui-bottom:before {
+  content: "\e6b8";
+}
+
+.uniui-arrowdown:before {
+  content: "\e6b8";
+}
+
+.uniui-right:before {
+  content: "\e6b5";
+}
+
+.uniui-arrowright:before {
+  content: "\e6b5";
+}
+
+.uniui-top:before {
+  content: "\e6b6";
+}
+
+.uniui-arrowup:before {
+  content: "\e6b6";
+}
+
+.uniui-left:before {
+  content: "\e6b7";
+}
+
+.uniui-arrowleft:before {
+  content: "\e6b7";
+}
+
+.uniui-eye:before {
+  content: "\e651";
+}
+
+.uniui-eye-filled:before {
+  content: "\e66a";
+}
+
+.uniui-eye-slash:before {
+  content: "\e6b3";
+}
+
+.uniui-eye-slash-filled:before {
+  content: "\e6b4";
+}
+
+.uniui-info-filled:before {
+  content: "\e649";
+}
+
+.uniui-reload:before {
+  content: "\e6b2";
+}
+
+.uniui-micoff-filled:before {
+  content: "\e6b0";
+}
+
+.uniui-map-pin-ellipse:before {
+  content: "\e6ac";
+}
+
+.uniui-map-pin:before {
+  content: "\e6ad";
+}
+
+.uniui-location:before {
+  content: "\e6ae";
+}
+
+.uniui-starhalf:before {
+  content: "\e683";
+}
+
+.uniui-star:before {
+  content: "\e688";
+}
+
+.uniui-star-filled:before {
+  content: "\e68f";
+}
+
+.uniui-calendar:before {
+  content: "\e6a0";
+}
+
+.uniui-fire:before {
+  content: "\e6a1";
+}
+
+.uniui-medal:before {
+  content: "\e6a2";
+}
+
+.uniui-font:before {
+  content: "\e6a3";
+}
+
+.uniui-gift:before {
+  content: "\e6a4";
+}
+
+.uniui-link:before {
+  content: "\e6a5";
+}
+
+.uniui-notification:before {
+  content: "\e6a6";
+}
+
+.uniui-staff:before {
+  content: "\e6a7";
+}
+
+.uniui-vip:before {
+  content: "\e6a8";
+}
+
+.uniui-folder-add:before {
+  content: "\e6a9";
+}
+
+.uniui-tune:before {
+  content: "\e6aa";
+}
+
+.uniui-auth:before {
+  content: "\e6ab";
+}
+
+.uniui-person:before {
+  content: "\e699";
+}
+
+.uniui-email-filled:before {
+  content: "\e69a";
+}
+
+.uniui-phone-filled:before {
+  content: "\e69b";
+}
+
+.uniui-phone:before {
+  content: "\e69c";
+}
+
+.uniui-email:before {
+  content: "\e69e";
+}
+
+.uniui-personadd:before {
+  content: "\e69f";
+}
+
+.uniui-chatboxes-filled:before {
+  content: "\e692";
+}
+
+.uniui-contact:before {
+  content: "\e693";
+}
+
+.uniui-chatbubble-filled:before {
+  content: "\e694";
+}
+
+.uniui-contact-filled:before {
+  content: "\e695";
+}
+
+.uniui-chatboxes:before {
+  content: "\e696";
+}
+
+.uniui-chatbubble:before {
+  content: "\e697";
+}
+
+.uniui-upload-filled:before {
+  content: "\e68e";
+}
+
+.uniui-upload:before {
+  content: "\e690";
+}
+
+.uniui-weixin:before {
+  content: "\e691";
+}
+
+.uniui-compose:before {
+  content: "\e67f";
+}
+
+.uniui-qq:before {
+  content: "\e680";
+}
+
+.uniui-download-filled:before {
+  content: "\e681";
+}
+
+.uniui-pyq:before {
+  content: "\e682";
+}
+
+.uniui-sound:before {
+  content: "\e684";
+}
+
+.uniui-trash-filled:before {
+  content: "\e685";
+}
+
+.uniui-sound-filled:before {
+  content: "\e686";
+}
+
+.uniui-trash:before {
+  content: "\e687";
+}
+
+.uniui-videocam-filled:before {
+  content: "\e689";
+}
+
+.uniui-spinner-cycle:before {
+  content: "\e68a";
+}
+
+.uniui-weibo:before {
+  content: "\e68b";
+}
+
+.uniui-videocam:before {
+  content: "\e68c";
+}
+
+.uniui-download:before {
+  content: "\e68d";
+}
+
+.uniui-help:before {
+  content: "\e679";
+}
+
+.uniui-navigate-filled:before {
+  content: "\e67a";
+}
+
+.uniui-plusempty:before {
+  content: "\e67b";
+}
+
+.uniui-smallcircle:before {
+  content: "\e67c";
+}
+
+.uniui-minus-filled:before {
+  content: "\e67d";
+}
+
+.uniui-micoff:before {
+  content: "\e67e";
+}
+
+.uniui-closeempty:before {
+  content: "\e66c";
+}
+
+.uniui-clear:before {
+  content: "\e66d";
+}
+
+.uniui-navigate:before {
+  content: "\e66e";
+}
+
+.uniui-minus:before {
+  content: "\e66f";
+}
+
+.uniui-image:before {
+  content: "\e670";
+}
+
+.uniui-mic:before {
+  content: "\e671";
+}
+
+.uniui-paperplane:before {
+  content: "\e672";
+}
+
+.uniui-close:before {
+  content: "\e673";
+}
+
+.uniui-help-filled:before {
+  content: "\e674";
+}
+
+.uniui-paperplane-filled:before {
+  content: "\e675";
+}
+
+.uniui-plus:before {
+  content: "\e676";
+}
+
+.uniui-mic-filled:before {
+  content: "\e677";
+}
+
+.uniui-image-filled:before {
+  content: "\e678";
+}
+
+.uniui-locked-filled:before {
+  content: "\e668";
+}
+
+.uniui-info:before {
+  content: "\e669";
+}
+
+.uniui-locked:before {
+  content: "\e66b";
+}
+
+.uniui-camera-filled:before {
+  content: "\e658";
+}
+
+.uniui-chat-filled:before {
+  content: "\e659";
+}
+
+.uniui-camera:before {
+  content: "\e65a";
+}
+
+.uniui-circle:before {
+  content: "\e65b";
+}
+
+.uniui-checkmarkempty:before {
+  content: "\e65c";
+}
+
+.uniui-chat:before {
+  content: "\e65d";
+}
+
+.uniui-circle-filled:before {
+  content: "\e65e";
+}
+
+.uniui-flag:before {
+  content: "\e65f";
+}
+
+.uniui-flag-filled:before {
+  content: "\e660";
+}
+
+.uniui-gear-filled:before {
+  content: "\e661";
+}
+
+.uniui-home:before {
+  content: "\e662";
+}
+
+.uniui-home-filled:before {
+  content: "\e663";
+}
+
+.uniui-gear:before {
+  content: "\e664";
+}
+
+.uniui-smallcircle-filled:before {
+  content: "\e665";
+}
+
+.uniui-map-filled:before {
+  content: "\e666";
+}
+
+.uniui-map:before {
+  content: "\e667";
+}
+
+.uniui-refresh-filled:before {
+  content: "\e656";
+}
+
+.uniui-refresh:before {
+  content: "\e657";
+}
+
+.uniui-cloud-upload:before {
+  content: "\e645";
+}
+
+.uniui-cloud-download-filled:before {
+  content: "\e646";
+}
+
+.uniui-cloud-download:before {
+  content: "\e647";
+}
+
+.uniui-cloud-upload-filled:before {
+  content: "\e648";
+}
+
+.uniui-redo:before {
+  content: "\e64a";
+}
+
+.uniui-images-filled:before {
+  content: "\e64b";
+}
+
+.uniui-undo-filled:before {
+  content: "\e64c";
+}
+
+.uniui-more:before {
+  content: "\e64d";
+}
+
+.uniui-more-filled:before {
+  content: "\e64e";
+}
+
+.uniui-undo:before {
+  content: "\e64f";
+}
+
+.uniui-images:before {
+  content: "\e650";
+}
+
+.uniui-paperclip:before {
+  content: "\e652";
+}
+
+.uniui-settings:before {
+  content: "\e653";
+}
+
+.uniui-search:before {
+  content: "\e654";
+}
+
+.uniui-redo-filled:before {
+  content: "\e655";
+}
+
+.uniui-list:before {
+  content: "\e644";
+}
+
+.uniui-mail-open-filled:before {
+  content: "\e63a";
+}
+
+.uniui-hand-down-filled:before {
+  content: "\e63c";
+}
+
+.uniui-hand-down:before {
+  content: "\e63d";
+}
+
+.uniui-hand-up-filled:before {
+  content: "\e63e";
+}
+
+.uniui-hand-up:before {
+  content: "\e63f";
+}
+
+.uniui-heart-filled:before {
+  content: "\e641";
+}
+
+.uniui-mail-open:before {
+  content: "\e643";
+}
+
+.uniui-heart:before {
+  content: "\e639";
+}
+
+.uniui-loop:before {
+  content: "\e633";
+}
+
+.uniui-pulldown:before {
+  content: "\e632";
+}
+
+.uniui-scan:before {
+  content: "\e62a";
+}
+
+.uniui-bars:before {
+  content: "\e627";
+}
+
+.uniui-cart-filled:before {
+  content: "\e629";
+}
+
+.uniui-checkbox:before {
+  content: "\e62b";
+}
+
+.uniui-checkbox-filled:before {
+  content: "\e62c";
+}
+
+.uniui-shop:before {
+  content: "\e62f";
+}
+
+.uniui-headphones:before {
+  content: "\e630";
+}
+
+.uniui-cart:before {
+  content: "\e631";
+}

BIN
uni_modules/uni-icons/components/uni-icons/uniicons.ttf


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

@@ -0,0 +1,86 @@
+{
+  "id": "uni-icons",
+  "displayName": "uni-icons 图标",
+  "version": "1.3.5",
+  "description": "图标组件,用于展示移动端常见的图标,可自定义颜色、大小。",
+  "keywords": [
+    "uni-ui",
+    "uniui",
+    "icon",
+    "图标"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": "^3.2.14"
+  },
+  "directories": {
+    "example": "../../temps/example_temps"
+  },
+  "dcloudext": {
+    "category": [
+      "前端组件",
+      "通用组件"
+    ],
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+  },
+  "uni_modules": {
+    "dependencies": ["uni-scss"],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "y"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+          "QQ": "y"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        },
+        "Vue": {
+            "vue2": "y",
+            "vue3": "y"
+        }
+      }
+    }
+  }
+}

+ 8 - 0
uni_modules/uni-icons/readme.md

@@ -0,0 +1,8 @@
+## Icons 图标
+> **组件名:uni-icons**
+> 代码块: `uIcons`
+
+用于展示 icons 图标 。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-icons)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 

+ 25 - 0
uni_modules/uni-rate/changelog.md

@@ -0,0 +1,25 @@
+## 1.3.1(2022-02-25)
+- 修复 条件判断 `NaN` 错误的 bug
+## 1.3.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-rate](https://uniapp.dcloud.io/component/uniui/uni-rate)
+## 1.2.2(2021-09-10)
+- 优化 默认值修改为 0 颗星
+## 1.2.1(2021-07-30)
+- 优化 vue3下事件警告的问题
+## 1.2.0(2021-07-13)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.2(2021-05-12)
+- 新增 组件示例地址
+## 1.1.1(2021-04-21)
+- 修复 布局变化后 uni-rate  星星计算不准确的 bug
+- 优化 添加依赖 uni-icons, 导入 uni-rate 自动下载依赖
+## 1.1.0(2021-04-16)
+- 修复 uni-rate 属性 margin 值为 string 组件失效的 bug
+
+## 1.0.9(2021-02-05)
+- 优化 组件引用关系,通过uni_modules引用组件
+
+## 1.0.8(2021-02-05)
+- 调整为uni_modules目录规范
+- 支持 pc 端

+ 361 - 0
uni_modules/uni-rate/components/uni-rate/uni-rate.vue

@@ -0,0 +1,361 @@
+<template>
+	<view>
+		<view ref="uni-rate" class="uni-rate">
+			<view class="uni-rate__icon" :class="{'uni-cursor-not-allowed': disabled}"
+				:style="{ 'margin-right': marginNumber + 'px' }" v-for="(star, index) in stars" :key="index"
+				@touchstart.stop="touchstart" @touchmove.stop="touchmove" @mousedown.stop="mousedown"
+				@mousemove.stop="mousemove" @mouseleave="mouseleave">
+				<uni-icons :color="color" :size="size" :type="isFill ? 'star-filled' : 'star'" />
+				<!-- #ifdef APP-NVUE -->
+				<view :style="{ width: star.activeWitch.replace('%','')*size/100+'px'}" class="uni-rate__icon-on">
+					<uni-icons style="text-align: left;" :color="disabled?'#ccc':activeColor" :size="size"
+						type="star-filled" />
+				</view>
+				<!-- #endif -->
+				<!-- #ifndef APP-NVUE -->
+				<view :style="{ width: star.activeWitch}" class="uni-rate__icon-on">
+					<uni-icons :color="disabled?disabledColor:activeColor" :size="size" type="star-filled" />
+				</view>
+				<!-- #endif -->
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	// #ifdef APP-NVUE
+	const dom = uni.requireNativePlugin('dom');
+	// #endif
+	/**
+	 * Rate 评分
+	 * @description 评分组件
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=33
+	 * @property {Boolean} 	isFill = [true|false] 		星星的类型,是否为实心类型, 默认为实心
+	 * @property {String} 	color 						未选中状态的星星颜色,默认为 "#ececec"
+	 * @property {String} 	activeColor 				选中状态的星星颜色,默认为 "#ffca3e"
+	 * @property {String} 	disabledColor 				禁用状态的星星颜色,默认为 "#c0c0c0"
+	 * @property {Number} 	size 						星星的大小
+	 * @property {Number} 	value/v-model 				当前评分
+	 * @property {Number} 	max 						最大评分评分数量,目前一分一颗星
+	 * @property {Number} 	margin 						星星的间距,单位 px
+	 * @property {Boolean} 	disabled = [true|false] 	是否为禁用状态,默认为 false
+	 * @property {Boolean} 	readonly = [true|false] 	是否为只读状态,默认为 false
+	 * @property {Boolean} 	allowHalf = [true|false] 	是否实现半星,默认为 false
+	 * @property {Boolean} 	touchable = [true|false] 	是否支持滑动手势,默认为 true
+	 * @event {Function} change 						uniRate 的 value 改变时触发事件,e={value:Number}
+	 */
+
+	export default {
+		name: "UniRate",
+		props: {
+			isFill: {
+				// 星星的类型,是否镂空
+				type: [Boolean, String],
+				default: true
+			},
+			color: {
+				// 星星未选中的颜色
+				type: String,
+				default: "#ececec"
+			},
+			activeColor: {
+				// 星星选中状态颜色
+				type: String,
+				default: "#ffca3e"
+			},
+			disabledColor: {
+				// 星星禁用状态颜色
+				type: String,
+				default: "#c0c0c0"
+			},
+			size: {
+				// 星星的大小
+				type: [Number, String],
+				default: 24
+			},
+			value: {
+				// 当前评分
+				type: [Number, String],
+				default: 0
+			},
+			modelValue: {
+				// 当前评分
+				type: [Number, String],
+				default: 0
+			},
+			max: {
+				// 最大评分
+				type: [Number, String],
+				default: 5
+			},
+			margin: {
+				// 星星的间距
+				type: [Number, String],
+				default: 0
+			},
+			disabled: {
+				// 是否可点击
+				type: [Boolean, String],
+				default: false
+			},
+			readonly: {
+				// 是否只读
+				type: [Boolean, String],
+				default: false
+			},
+			allowHalf: {
+				// 是否显示半星
+				type: [Boolean, String],
+				default: false
+			},
+			touchable: {
+				// 是否支持滑动手势
+				type: [Boolean, String],
+				default: true
+			}
+		},
+		data() {
+			return {
+				valueSync: "",
+				userMouseFristMove: true,
+				userRated: false,
+				userLastRate: 1
+			};
+		},
+		watch: {
+			value(newVal) {
+				this.valueSync = Number(newVal);
+			},
+			modelValue(newVal) {
+				this.valueSync = Number(newVal);
+			},
+		},
+		computed: {
+			stars() {
+				const value = this.valueSync ? this.valueSync : 0;
+				const starList = [];
+				const floorValue = Math.floor(value);
+				const ceilValue = Math.ceil(value);
+				for (let i = 0; i < this.max; i++) {
+					if (floorValue > i) {
+						starList.push({
+							activeWitch: "100%"
+						});
+					} else if (ceilValue - 1 === i) {
+						starList.push({
+							activeWitch: (value - floorValue) * 100 + "%"
+						});
+					} else {
+						starList.push({
+							activeWitch: "0"
+						});
+					}
+				}
+				return starList;
+			},
+
+			marginNumber() {
+				return Number(this.margin)
+			}
+		},
+		created() {
+			this.valueSync = Number(this.value || this.modelValue);
+			this._rateBoxLeft = 0
+			this._oldValue = null
+		},
+		mounted() {
+			setTimeout(() => {
+				this._getSize()
+			}, 100)
+			// #ifdef H5
+			this.PC = this.IsPC()
+			// #endif
+		},
+		methods: {
+			touchstart(e) {
+				// #ifdef H5
+				if (this.IsPC()) return
+				// #endif
+				if (this.readonly || this.disabled) return
+				const {
+					clientX,
+					screenX
+				} = e.changedTouches[0]
+				// TODO 做一下兼容,只有 Nvue 下才有 screenX,其他平台式 clientX
+				this._getRateCount(clientX || screenX)
+			},
+			touchmove(e) {
+				// #ifdef H5
+				if (this.IsPC()) return
+				// #endif
+				if (this.readonly || this.disabled || !this.touchable) return
+				const {
+					clientX,
+					screenX
+				} = e.changedTouches[0]
+				this._getRateCount(clientX || screenX)
+			},
+
+			/**
+			 * 兼容 PC @tian
+			 */
+
+			mousedown(e) {
+				// #ifdef H5
+				if (!this.IsPC()) return
+				if (this.readonly || this.disabled) return
+				const {
+					clientX,
+				} = e
+				this.userLastRate = this.valueSync
+				this._getRateCount(clientX)
+				this.userRated = true
+				// #endif
+			},
+			mousemove(e) {
+				// #ifdef H5
+				if (!this.IsPC()) return
+				if (this.userRated) return
+				if (this.userMouseFristMove) {
+					console.log('---mousemove----', this.valueSync);
+					this.userLastRate = this.valueSync
+					this.userMouseFristMove = false
+				}
+				if (this.readonly || this.disabled || !this.touchable) return
+				const {
+					clientX,
+				} = e
+				this._getRateCount(clientX)
+				// #endif
+			},
+			mouseleave(e) {
+				// #ifdef H5
+				if (!this.IsPC()) return
+				if (this.readonly || this.disabled || !this.touchable) return
+				if (this.userRated) {
+					this.userRated = false
+					return
+				}
+				this.valueSync = this.userLastRate
+				// #endif
+			},
+			// #ifdef H5
+			IsPC() {
+				var userAgentInfo = navigator.userAgent;
+				var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];
+				var flag = true;
+				for (let v = 0; v < Agents.length - 1; v++) {
+					if (userAgentInfo.indexOf(Agents[v]) > 0) {
+						flag = false;
+						break;
+					}
+				}
+				return flag;
+			},
+			// #endif
+
+			/**
+			 * 获取星星个数
+			 */
+			_getRateCount(clientX) {
+				this._getSize()
+				const size = Number(this.size)
+				if (isNaN(size)) {
+					return new Error('size 属性只能设置为数字')
+				}
+				const rateMoveRange = clientX - this._rateBoxLeft
+				let index = parseInt(rateMoveRange / (size + this.marginNumber))
+				index = index < 0 ? 0 : index;
+				index = index > this.max ? this.max : index;
+				const range = parseInt(rateMoveRange - (size + this.marginNumber) * index);
+				let value = 0;
+				if (this._oldValue === index && !this.PC) return;
+				this._oldValue = index;
+				if (this.allowHalf) {
+					if (range > (size / 2)) {
+						value = index + 1
+					} else {
+						value = index + 0.5
+					}
+				} else {
+					value = index + 1
+				}
+
+				value = Math.max(0.5, Math.min(value, this.max))
+				this.valueSync = value
+				this._onChange()
+			},
+
+			/**
+			 * 触发动态修改
+			 */
+			_onChange() {
+
+				this.$emit("input", this.valueSync);
+				this.$emit("update:modelValue", this.valueSync);
+				this.$emit("change", {
+					value: this.valueSync
+				});
+			},
+			/**
+			 * 获取星星距离屏幕左侧距离
+			 */
+			_getSize() {
+				// #ifndef APP-NVUE
+				uni.createSelectorQuery()
+					.in(this)
+					.select('.uni-rate')
+					.boundingClientRect()
+					.exec(ret => {
+						if (ret) {
+							this._rateBoxLeft = ret[0].left
+						}
+					})
+				// #endif
+				// #ifdef APP-NVUE
+				dom.getComponentRect(this.$refs['uni-rate'], (ret) => {
+					const size = ret.size
+					if (size) {
+						this._rateBoxLeft = size.left
+					}
+				})
+				// #endif
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	.uni-rate {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		line-height: 1;
+		font-size: 0;
+		flex-direction: row;
+		/* #ifdef H5 */
+		cursor: pointer;
+		/* #endif */
+	}
+
+	.uni-rate__icon {
+		position: relative;
+		line-height: 1;
+		font-size: 0;
+	}
+
+	.uni-rate__icon-on {
+		overflow: hidden;
+		position: absolute;
+		top: 0;
+		left: 0;
+		line-height: 1;
+		text-align: left;
+	}
+
+	.uni-cursor-not-allowed {
+		/* #ifdef H5 */
+		cursor: not-allowed !important;
+		/* #endif */
+	}
+</style>

+ 88 - 0
uni_modules/uni-rate/package.json

@@ -0,0 +1,88 @@
+{
+  "id": "uni-rate",
+  "displayName": "uni-rate 评分",
+  "version": "1.3.1",
+  "description": "Rate 评分组件,可自定义评分星星图标的大小、间隔、评分数。",
+  "keywords": [
+    "uni-ui",
+    "uniui",
+    "评分"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": ""
+  },
+  "directories": {
+    "example": "../../temps/example_temps"
+  },
+  "dcloudext": {
+    "category": [
+      "前端组件",
+      "通用组件"
+    ],
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+  },
+  "uni_modules": {
+    "dependencies": [
+			"uni-scss",
+			"uni-icons"
+		],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "y"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+          "QQ": "y"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        },
+        "Vue": {
+            "vue2": "y",
+            "vue3": "y"
+        }
+      }
+    }
+  }
+}

+ 12 - 0
uni_modules/uni-rate/readme.md

@@ -0,0 +1,12 @@
+
+
+## Rate 评分
+> **组件名:uni-rate**
+> 代码块: `uRate`
+> 关联组件:`uni-icons`
+
+
+评分组件,多用于购买商品后,对商品进行评价等场景
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-rate)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

+ 3 - 3
utils/request.js

@@ -1064,9 +1064,9 @@ var tab = [{
 		text: "发现",
 		iconPath: "/static/pages/images/found.png",
 		selectedIconPath: '/static/pages/images/found_h.png',
-		pagePath: 'pages/live/live',
-		click: 'goLive',
-		channel: 'live',
+		pagePath: 'pages/found/found',
+		click: 'goFound',
+		channel: 'found',
 		index: 3,
 		show:true
 	},

+ 162 - 1
utils/util.js

@@ -290,6 +290,166 @@ function captureTime(time,isTime){
 	}
 }
 
+function isAuth(fun) {
+	if (!uni.saveImageToPhotosAlbum) {
+		uni.showModal({
+			title: '提示',
+			content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。'
+		});
+		return;
+	} //可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.writePhotosAlbum" 这个 scope
+	// #ifndef H5
+	uni.getSetting({
+		success(res) {
+			if (!res.authSetting['scope.writePhotosAlbum']) {
+				// 接口调用询问
+				uni.authorize({
+					scope: 'scope.writePhotosAlbum',
+					success() {
+						// console.log("2-授权《保存图片》权限成功");
+						fun(true);
+					},
+					fail() {
+						wx.showModal({
+							title: '提示',
+							content: '用户拒绝授权访问本地相册导致图片无法保存!如需继续操作,请点击确定前往开启授权',
+							success: function(res) {
+								if (res.confirm) {
+									//点击确定后前往授权设置页面
+									wx.openSetting();
+								}
+							}
+						});
+						fun(false);
+					}
+				});
+			} else {
+				// 拒绝授权
+				fun(true);
+			}
+		},
+		fail(res) {
+			fun(false);
+		}
+	});
+	// #endif
+}
+
+/**
+ * 安卓环境
+ */
+function isAndroidSys() {
+	return uni.getSystemInfoSync().platform == 'android';
+}
+
+/**
+ * ios环境
+ */
+function isIosSys() {
+	return uni.getSystemInfoSync().platform == 'ios';
+}
+
+async function isAuthWritePhotosAlbum(fun) {
+	console.log('isAuthWritePhotosAlbum>>>>');
+	var result = await permission.requestAndroidPermission('android.permission.READ_EXTERNAL_STORAGE');
+	console.log('数据>>>>', result);
+	if (result == 1) {
+		// strStatus = "已获得授权"
+		fun(true);
+	} else if (result == 0) {
+		// strStatus = "未获得授权"
+		fun(false);
+	} else {
+		gotoAppPermissionSetting();
+		fun(false);
+		// strStatus = "被永久拒绝权限"
+	}
+}
+
+function gotoAppPermissionSetting() {
+	permission.gotoAppPermissionSetting()
+}
+
+
+/**
+ * 保存图片到相册
+ * @param {Object} tempFilePath
+ */
+function saveImageToPhotosAlbum(tempFilePath, suc) {
+	uni.saveImageToPhotosAlbum({
+		filePath: tempFilePath,
+		success(res) {
+			uni.showToast({
+				title: '图片保存成功',
+				icon: 'none'
+			});
+			if (suc) {
+				suc(true);
+			}
+		}
+		// fail(res) {
+		// 	uni.showModal({
+		// 		title: '提示',
+		// 		content: '检测到您没有授权访问相册权限,是否去设置打开?',
+		// 		confirmText: '去打开',
+		// 		cancelText: '取消',
+		// 		success: (res) => {
+		// 			if (res.confirm) {
+		// 				// #ifdef APP-PLUS
+		// 				gotoAppPermissionSetting();
+		// 				// #endif
+		// 				//#ifndef APP-PLUS
+		// 				wx.openSetting();
+		// 				// #endif
+		// 			} else {
+		// 				uni.showToast({
+		// 					title: '图片保存失败',
+		// 					icon: 'none'
+		// 				});
+		// 			}
+		// 		}
+		// 	});
+		// }
+	});
+}
+
+/**
+ * 保存图片
+ * @param {Object} tempFilePath
+ */
+function saveImage(tempFilePath, suc) {
+	let that = this;
+	// #ifdef APP-PLUS
+	if (isIosSys()) {
+		saveImageToPhotosAlbum(tempFilePath, suc);
+	} else {
+		isAuthWritePhotosAlbum(success => {
+			if (success) {
+				saveImageToPhotosAlbum(tempFilePath, suc);
+			}
+		});
+	}
+	// #endif
+	// #ifndef APP-PLUS
+	isAuth(success => {
+		if (success) {
+			uni.saveImageToPhotosAlbum({
+				filePath: tempFilePath,
+				success(res) {
+					uni.showToast({
+						title: '图片保存成功',
+						icon: 'none',
+						success() {
+							// suc(true);
+						}
+					});
+				}
+			});
+		}
+	});
+	// #endif
+}
+
 module.exports = {
 	formatTime: formatTime,
 	formatTimes: formatTimes,
@@ -306,5 +466,6 @@ module.exports = {
 	styleHintText:styleHintText,
 	formatNumbers: formatNumbers,
 	toDecimal: toDecimal,
-	captureTime: captureTime
+	captureTime: captureTime,
+	saveImage: saveImage,
 };