Browse Source

no message

xiaoxin 2 years ago
parent
commit
0495844318
58 changed files with 5531 additions and 52 deletions
  1. 36 0
      pages.json
  2. 11 3
      pages/affirmOrder/affirmOrder.vue
  3. 312 0
      pages/appraise/appraise.vue
  4. 310 0
      pages/appraiseDetail/appraiseDetail.vue
  5. 186 0
      pages/collect/collect.vue
  6. 204 0
      pages/coupon/coupon.vue
  7. 4 3
      pages/detail/detail.vue
  8. 49 0
      pages/home/home.vue
  9. 54 41
      pages/my/my.vue
  10. 302 0
      pages/myCoupon/myCoupon.vue
  11. 193 0
      pages/myEvaluate/myEvaluate.vue
  12. 1 1
      pages/push/push.vue
  13. BIN
      static/index/banner.png
  14. BIN
      static/index/comment.png
  15. BIN
      static/index/popup_bg.png
  16. BIN
      static/my/banner.png
  17. BIN
      static/my/collect.png
  18. BIN
      static/my/complaint.png
  19. BIN
      static/my/coupon.png
  20. BIN
      static/my/couponTitle.png
  21. BIN
      static/my/evaluate.png
  22. 22 0
      uni_modules/uni-icons/changelog.md
  23. 1169 0
      uni_modules/uni-icons/components/uni-icons/icons.js
  24. 96 0
      uni_modules/uni-icons/components/uni-icons/uni-icons.vue
  25. 663 0
      uni_modules/uni-icons/components/uni-icons/uniicons.css
  26. BIN
      uni_modules/uni-icons/components/uni-icons/uniicons.ttf
  27. 86 0
      uni_modules/uni-icons/package.json
  28. 8 0
      uni_modules/uni-icons/readme.md
  29. 25 0
      uni_modules/uni-rate/changelog.md
  30. 361 0
      uni_modules/uni-rate/components/uni-rate/uni-rate.vue
  31. 88 0
      uni_modules/uni-rate/package.json
  32. 12 0
      uni_modules/uni-rate/readme.md
  33. 9 0
      uni_modules/uni-segmented-control/changelog.md
  34. 145 0
      uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue
  35. 87 0
      uni_modules/uni-segmented-control/package.json
  36. 13 0
      uni_modules/uni-segmented-control/readme.md
  37. 2 0
      uni_modules/uv-icon/changelog.md
  38. 5 0
      uni_modules/uv-icon/components/uv-icon/uv-icon.vue
  39. 1 1
      uni_modules/uv-icon/package.json
  40. 7 0
      uni_modules/uv-link/changelog.md
  41. 40 0
      uni_modules/uv-link/components/uv-link/props.js
  42. 83 0
      uni_modules/uv-link/components/uv-link/uv-link.vue
  43. 87 0
      uni_modules/uv-link/package.json
  44. 11 0
      uni_modules/uv-link/readme.md
  45. 5 0
      uni_modules/uv-read-more/changelog.md
  46. 62 0
      uni_modules/uv-read-more/components/uv-read-more/props.js
  47. 138 0
      uni_modules/uv-read-more/components/uv-read-more/uv-read-more.vue
  48. 89 0
      uni_modules/uv-read-more/package.json
  49. 11 0
      uni_modules/uv-read-more/readme.md
  50. 7 0
      uni_modules/uv-text/changelog.md
  51. 113 0
      uni_modules/uv-text/components/uv-text/props.js
  52. 228 0
      uni_modules/uv-text/components/uv-text/uv-text.vue
  53. 87 0
      uni_modules/uv-text/components/uv-text/value.js
  54. 89 0
      uni_modules/uv-text/package.json
  55. 11 0
      uni_modules/uv-text/readme.md
  56. 6 0
      uni_modules/uv-ui-tools/changelog.md
  57. 2 2
      uni_modules/uv-ui-tools/libs/config/config.js
  58. 1 1
      uni_modules/uv-ui-tools/package.json

+ 36 - 0
pages.json

@@ -146,6 +146,42 @@
 				"navigationBarTitleText": "服务",
 				"enablePullDownRefresh": false
 			}
+		}, {
+			"path": "pages/coupon/coupon",
+			"style": {
+				"navigationBarTitleText": "优惠券",
+				"enablePullDownRefresh": false
+			}
+		}, {
+			"path": "pages/appraise/appraise",
+			"style": {
+				"navigationBarTitleText": "全部评价",
+				"enablePullDownRefresh": false
+			}
+		}, {
+			"path": "pages/appraiseDetail/appraiseDetail",
+			"style": {
+				"navigationBarTitleText": "评价详情",
+				"enablePullDownRefresh": false
+			}
+		}, {
+			"path": "pages/myEvaluate/myEvaluate",
+			"style": {
+				"navigationBarTitleText": "我的评价",
+				"enablePullDownRefresh": false
+			}
+		}, {
+			"path": "pages/collect/collect",
+			"style": {
+				"navigationBarTitleText": "收藏/住过",
+				"enablePullDownRefresh": false
+			}
+		}, {
+			"path": "pages/myCoupon/myCoupon",
+			"style": {
+				"navigationBarTitleText": "我的卡券",
+				"enablePullDownRefresh": false
+			}
 		}
 	],
 	"tabBar": {

+ 11 - 3
pages/affirmOrder/affirmOrder.vue

@@ -5,7 +5,7 @@
 			<img src="../../static/my/headerImg.png" />
 
 			<!-- 标题区域 -->
-			<view class="header_title">填写订单</view>
+			<view class="header_title">{{ hotelName }}</view>
 			<!-- 返回图标区域 -->
 			<view class="header_icon" @click="handleBack">
 				<img src="../../static/index/left.png" />
@@ -132,11 +132,14 @@ export default {
 			// 预计到店时间
 			arriveTime: '',
 			// 当前时间
-			timeValue: Number(new Date())
+			timeValue: Number(new Date()),
+			// 民宿名称
+			hotelName: ''
 		}
 	},
 	onLoad(options) {
 		this.info = JSON.parse(options.info)
+		this.hotelName = this.info.hotelName
 		uni.$on('change', this.change)
 	},
 	computed: {
@@ -276,9 +279,14 @@ export default {
 		.header_title {
 			position: absolute;
 			top: 65rpx;
-			left: 308rpx;
+			left: 182rpx;
+			width: 50%;
 			color: #fff;
+			text-align: center;
 			font-size: 28rpx;
+			overflow: hidden;
+			text-overflow: ellipsis;
+			white-space: nowrap;
 		}
 
 		.header_icon {

+ 312 - 0
pages/appraise/appraise.vue

@@ -0,0 +1,312 @@
+<template>
+	<view class="container">
+		<!-- 顶部评分区域 -->
+		<view class="header">
+			<view class="header_box">
+				<!-- 总评分区域 -->
+				<view class="box_left">5.0</view>
+				<view class="box_right">
+					<!-- 位置评分区域 -->
+					<view class="right_item">
+						<view class="item_info">位置 4.6</view>
+						<view class="item_progress">
+							<progress activeColor="#0BAD8B" backgroundColor="#CCCCCC" stroke-width="10" border-radius="92" :percent="(4.6 / 5) * 100" />
+						</view>
+					</view>
+					<!-- 设施评分区域 -->
+					<view class="right_item">
+						<view class="item_info">设施 4.6</view>
+						<view class="item_progress">
+							<progress activeColor="#0BAD8B" backgroundColor="#CCCCCC" stroke-width="10" border-radius="92" :percent="(4.6 / 5) * 100" />
+						</view>
+					</view>
+					<!-- 服务评分区域 -->
+					<view class="right_item">
+						<view class="item_info">服务 4.6</view>
+						<view class="item_progress">
+							<progress activeColor="#0BAD8B" backgroundColor="#CCCCCC" stroke-width="10" border-radius="92" :percent="(4.6 / 5) * 100" />
+						</view>
+					</view>
+					<!-- 卫生评分区域 -->
+					<view class="right_item">
+						<view class="item_info">卫生 4.6</view>
+						<view class="item_progress">
+							<progress activeColor="#0BAD8B" backgroundColor="#CCCCCC" stroke-width="10" border-radius="92" :percent="(4.6 / 5) * 100" />
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+
+		<!-- 分段器区域 -->
+		<view class="segmented">
+			<uni-segmented-control styleType="text" activeColor="#096562" :current="activeCurrent" :values="headerList" @clickItem="onClickItem" />
+		</view>
+
+		<!-- 评价列表 -->
+		<view class="body">
+			<!-- 每一个评价区域 -->
+			<view class="body_box" v-for="item in commentList" :key="item.id">
+				<!-- 用户信息区域 -->
+				<view class="box_userInfo" @click="handleGoDetail(item)">
+					<img mode="aspectFill" :src="item.imgUrl" />
+					<view class="userInfo_msg">
+						<view class="msg_name">{{ item.name }}</view>
+						<view class="msg_star">
+							<uni-rate readonly activeColor="#FFC300" :size="16" :value="item.rate" />
+						</view>
+					</view>
+				</view>
+
+				<!-- 入住时间区域 -->
+				<view class="box_time">{{ item.liveTime }}入住,{{ item.subTime }}发表 | {{ item.type }}</view>
+
+				<!-- 评价内容区域 -->
+				<uv-read-more show-height="85rpx" closeText="全文" color="#096663" fontSize="24rpx" textIndent="0" :toggle="true" :shadowStyle="shadowStyle">
+					<view class="box_content">
+						{{ item.content }}
+					</view>
+				</uv-read-more>
+
+				<!-- 图片区域 -->
+				<view class="box_img">
+					<img v-for="(ele, index) in item.imgList" :key="index" mode="aspectFill" :src="ele" @click="handleClickImg(item.imgList, index)" />
+				</view>
+
+				<!-- 评论按钮区域 -->
+				<view class="box_comment">
+					<img src="../../static/index/comment.png" />
+					<view>评论({{ item.count }})</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			// 分段器分类数组
+			headerList: ['全部(256)', '有图/视频(42)', '商家回复(42)'],
+			// 当前激活的分段器索引
+			activeCurrent: 0,
+			// 评价内容区域阴影样式
+			shadowStyle: {
+				backgroundImage: 'none'
+			},
+			// 评价列表数据
+			commentList: [
+				{
+					id: 1,
+					imgUrl: 'https://img1.baidu.com/it/u=4085584268,3308739054&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=375',
+					name: '张三',
+					rate: 4.6,
+					liveTime: '2023-07',
+					subTime: '2023-08-01',
+					type: '大床房',
+					content:
+						'评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容的丰富的丰富评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容的丰富的丰富',
+					imgList: [
+						'https://img1.baidu.com/it/u=2776549017,1408541252&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500',
+						'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fitem%2F201912%2F28%2F20191228151619_wxioq.thumb.1000_0.jpg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1695352503&t=cf595866bbcbd5c6a01ffe69913da7e0'
+					],
+					count: 12
+				},
+				{
+					id: 2,
+					imgUrl: 'https://img1.baidu.com/it/u=4085584268,3308739054&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=375',
+					name: '李四',
+					rate: 4.1,
+					liveTime: '2023-08',
+					subTime: '2023-08-11',
+					type: '双人房',
+					content:
+						'评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容的丰富的丰富评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容的丰富的丰富',
+					imgList: [
+						'https://img1.baidu.com/it/u=2776549017,1408541252&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500',
+						'https://img1.baidu.com/it/u=4085584268,3308739054&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=375',
+						'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fitem%2F201912%2F28%2F20191228151619_wxioq.thumb.1000_0.jpg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1695352503&t=cf595866bbcbd5c6a01ffe69913da7e0',
+						'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fsafe-img.xhscdn.com%2Fbw1%2F70a86822-e473-4ad8-9147-fad3e5cbc5ec%3FimageView2%2F2%2Fw%2F1080%2Fformat%2Fjpg&refer=http%3A%2F%2Fsafe-img.xhscdn.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1695352600&t=689d4a86e77580db11cdc227291ef6f7'
+					],
+					count: 8
+				},
+				{
+					id: 3,
+					imgUrl: 'https://img1.baidu.com/it/u=4085584268,3308739054&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=375',
+					name: '王八',
+					rate: 3.8,
+					liveTime: '2023-07',
+					subTime: '2023-07-11',
+					type: '普通房',
+					content:
+						'评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容的丰富的丰富评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容的丰富的丰富',
+					imgList: [],
+					count: 26
+				}
+			]
+		}
+	},
+	methods: {
+		// 点击每一个评价回调
+		handleGoDetail(item) {
+			let info = encodeURIComponent(JSON.stringify(item))
+			uni.navigateTo({
+				url: `/pages/appraiseDetail/appraiseDetail?info=${info}`
+			})
+		},
+		// 切换分段器时的回调
+		onClickItem(e) {
+			if (this.current !== e.currentIndex) {
+				this.current = e.currentIndex
+			}
+		},
+		// 点击评价图片回调
+		handleClickImg(url, index) {
+			// 预览图片
+			uni.previewImage({
+				current: index,
+				urls: url
+			})
+		}
+	}
+}
+</script>
+
+<style lang="scss" scoped>
+.container {
+	display: flex;
+	flex-direction: column;
+	min-height: 100vh;
+	background-color: #f2f3f5;
+
+	.header {
+		height: 150rpx;
+		background-color: #fff;
+
+		.header_box {
+			display: flex;
+			margin: 43rpx 0 36rpx;
+			height: 70rpx;
+
+			.box_left {
+				display: flex;
+				justify-content: center;
+				align-items: center;
+				width: 140rpx;
+				color: #096562;
+				font-size: 60rpx;
+				font-weight: 900;
+				border-right: 1rpx solid #cccccc;
+			}
+
+			.box_right {
+				flex: 1;
+				display: flex;
+				flex-wrap: wrap;
+				color: #808080;
+				font-size: 24rpx;
+
+				.right_item {
+					display: flex;
+					align-items: center;
+					width: 50%;
+
+					.item_info {
+						margin-left: 33rpx;
+					}
+
+					.item_progress {
+						margin-right: 20rpx;
+						padding: 0 13rpx;
+						flex: 1;
+					}
+				}
+			}
+		}
+	}
+
+	.segmented {
+		padding-bottom: 18rpx;
+		margin-bottom: 20rpx;
+		background-color: #fff;
+	}
+
+	.body {
+		.body_box {
+			box-sizing: border-box;
+			padding: 0 20rpx;
+			margin: 0 auto 20rpx;
+			width: 710rpx;
+			border-radius: 18rpx;
+			background-color: #fff;
+
+			.box_userInfo {
+				display: flex;
+				align-items: center;
+				height: 115rpx;
+
+				img {
+					width: 70rpx;
+					height: 70rpx;
+					border-radius: 50%;
+				}
+
+				.userInfo_msg {
+					margin-left: 18rpx;
+
+					.msg_name {
+						font-size: 28rpx;
+					}
+
+					.msg_star {
+						margin-left: -5rpx;
+						margin-top: 5rpx;
+					}
+				}
+			}
+
+			.box_time {
+				display: flex;
+				align-items: center;
+				color: #a6a6a6;
+				font-size: 24rpx;
+			}
+
+			.box_content {
+				margin-top: 15rpx;
+				font-size: 24rpx;
+				color: #000;
+			}
+
+			.box_img {
+				display: grid;
+				grid-template-columns: 1fr 1fr 1fr;
+				grid-auto-rows: auto;
+				gap: 10rpx;
+				margin-top: 20rpx;
+
+				img {
+					width: 216rpx;
+					height: 216rpx;
+					border-radius: 20rpx;
+				}
+			}
+
+			.box_comment {
+				display: flex;
+				justify-content: flex-end;
+				align-items: center;
+				padding: 20rpx 0 30rpx;
+				font-size: 24rpx;
+
+				img {
+					margin-right: 12rpx;
+					width: 25rpx;
+					height: 22rpx;
+				}
+			}
+		}
+	}
+}
+</style>

+ 310 - 0
pages/appraiseDetail/appraiseDetail.vue

@@ -0,0 +1,310 @@
+<template>
+	<view class="container">
+		<!-- 评价信息区域 -->
+		<view class="header">
+			<!-- 用户信息区域 -->
+			<view class="header_info">
+				<img mode="aspectFill" src="https://img1.baidu.com/it/u=4085584268,3308739054&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=375" />
+				<view class="info_msg">
+					<view class="msg_name">张三</view>
+					<view class="msg_star">
+						<uni-rate readonly activeColor="#FFC300" :size="16" :value="4" />
+					</view>
+				</view>
+				<view class="info_time">2023/07/25</view>
+			</view>
+
+			<!-- 入住时间区域 -->
+			<view class="header_time">2023-07入住,2023-08-01发表 | 大床房</view>
+
+			<!-- 评价内容区域 -->
+			<view class="header_content">评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容的丰富的丰富</view>
+
+			<!-- 图片列表区域 -->
+			<view class="header_img">
+				<img mode="aspectFill" src="https://img1.baidu.com/it/u=4085584268,3308739054&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=375" />
+				<img mode="aspectFill" src="https://img1.baidu.com/it/u=4085584268,3308739054&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=375" />
+				<img mode="aspectFill" src="https://img1.baidu.com/it/u=4085584268,3308739054&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=375" />
+				<img mode="aspectFill" src="https://img1.baidu.com/it/u=4085584268,3308739054&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=375" />
+			</view>
+		</view>
+
+		<!-- 民宿信息区域 -->
+		<view class="hotel">
+			<img mode="aspectFill" src="https://img1.baidu.com/it/u=4085584268,3308739054&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=375" />
+			<view class="hotel_info">
+				<view class="info_name">民宿名称</view>
+				<view class="info_star">
+					<uni-rate readonly activeColor="#FFC300" :size="12" :value="4" />
+					<view class="star_num">4.0</view>
+				</view>
+				<view class="info_tags">
+					<view class="tag_item">双溪镇</view>
+					<view class="tag_item">包吃住型</view>
+				</view>
+			</view>
+		</view>
+
+		<!-- 评论回复区域 -->
+		<view class="reply">
+			<!-- 评论总条数区域 -->
+			<view class="reply_title">
+				<img src="../../static/index/comment.png" />
+				评论(24)
+			</view>
+
+			<!-- 评论列表区域 -->
+			<view class="reply_box">
+				<!-- 每一条评论区域 -->
+				<view class="box_item">
+					<!-- 用户区域 -->
+					<view class="item_user">
+						<img mode="aspectFill" src="https://img1.baidu.com/it/u=4085584268,3308739054&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=375" />
+						<view class="user_info">
+							<view class="info_top">张三</view>
+							<view class="info_bottom">2023/05/25</view>
+						</view>
+					</view>
+					<!-- 评价内容区域 -->
+					<view class="item_content">评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容的丰富的丰富</view>
+				</view>
+
+				<view class="box_item">
+					<!-- 用户区域 -->
+					<view class="item_user">
+						<img mode="aspectFill" src="https://img1.baidu.com/it/u=4085584268,3308739054&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=375" />
+						<view class="user_info">
+							<view class="info_top">商家</view>
+							<view class="info_bottom">2023/05/25</view>
+						</view>
+					</view>
+					<!-- 评价内容区域 -->
+					<view class="item_content">
+						<text class="content_key">回复张三:</text>
+						评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容评价内容的丰富的丰富
+					</view>
+				</view>
+			</view>
+
+			<!-- 输入框区域 -->
+			<view class="reply_input">
+				<input type="text" placeholder="说点什么吧..." />
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			// 评价详情信息
+			info: {}
+		}
+	},
+	onLoad(options) {
+		// this.info = JSON.parse(decodeURIComponent(options.info))
+		// console.log(this.info)
+	}
+}
+</script>
+
+<style lang="scss" scoped>
+.container {
+	display: flex;
+	flex-direction: column;
+	min-height: 100vh;
+	background-color: #f2f3f5;
+
+	.header {
+		margin-top: 1rpx;
+		padding: 0 20rpx;
+		background-color: #fff;
+
+		.header_info {
+			display: flex;
+			align-items: center;
+			height: 115rpx;
+
+			img {
+				width: 70rpx;
+				height: 70rpx;
+				border-radius: 50%;
+			}
+
+			.info_msg {
+				margin-left: 18rpx;
+
+				.msg_name {
+					font-size: 28rpx;
+				}
+
+				.msg_star {
+					margin-left: -5rpx;
+					margin-top: 5rpx;
+				}
+			}
+
+			.info_time {
+				margin-top: 25rpx;
+				margin-left: auto;
+				color: #a6a6a6;
+				font-size: 24rpx;
+			}
+		}
+
+		.header_time {
+			color: #a6a6a6;
+			font-size: 24rpx;
+		}
+
+		.header_content {
+			margin-top: 18rpx;
+			font-size: 24rpx;
+		}
+
+		.header_img {
+			display: grid;
+			grid-template-columns: 1fr 1fr 1fr;
+			grid-auto-rows: auto;
+			padding: 20rpx 20rpx 40rpx;
+			gap: 10rpx;
+
+			img {
+				width: 216rpx;
+				height: 216rpx;
+				border-radius: 20rpx;
+			}
+		}
+	}
+
+	.hotel {
+		display: flex;
+		align-items: center;
+		margin-top: 20rpx;
+		height: 160rpx;
+		background-color: #fff;
+
+		img {
+			margin-left: 20rpx;
+			width: 120rpx;
+			height: 120rpx;
+			border-radius: 7rpx;
+		}
+
+		.hotel_info {
+			display: flex;
+			flex-direction: column;
+			justify-content: space-between;
+			margin-left: 20rpx;
+			height: 120rpx;
+
+			.info_name {
+				font-size: 32rpx;
+			}
+			.info_star {
+				display: flex;
+				align-items: center;
+
+				.star_num {
+					margin-left: 10rpx;
+					color: #ffc300;
+					font-size: 24rpx;
+				}
+			}
+
+			.info_tags {
+				display: flex;
+				color: #a6a6a6;
+				font-size: 24rpx;
+
+				.tag_item {
+					margin-right: 20rpx;
+				}
+			}
+		}
+	}
+
+	.reply {
+		margin-top: 20rpx;
+		background-color: #fff;
+
+		.reply_title {
+			display: flex;
+			justify-content: flex-end;
+			align-items: center;
+			padding-right: 35rpx;
+			height: 90rpx;
+			font-size: 24rpx;
+			border-bottom: 1rpx solid #e6e6e6;
+
+			img {
+				margin-right: 12rpx;
+				width: 25rpx;
+				height: 21rpx;
+			}
+		}
+
+		.reply_box {
+			padding: 0 20rpx 30rpx;
+
+			.box_item {
+				margin-bottom: 10rpx;
+
+				.item_user {
+					display: flex;
+					align-items: center;
+					height: 120rpx;
+
+					img {
+						width: 70rpx;
+						height: 70rpx;
+						border-radius: 50%;
+					}
+
+					.user_info {
+						display: flex;
+						flex-direction: column;
+						justify-content: space-between;
+						margin-left: 18rpx;
+						height: 70rpx;
+
+						.info_top {
+							font-size: 28rpx;
+						}
+						.info_bottom {
+							color: #a6a6a6;
+							font-size: 24rpx;
+						}
+					}
+				}
+
+				.item_content {
+					font-size: 24rpx;
+
+					.content_key {
+						color: #808080;
+					}
+				}
+			}
+		}
+
+		.reply_input {
+			display: flex;
+			align-items: center;
+			box-sizing: border-box;
+			padding: 0 33rpx;
+			margin: 54rpx auto;
+			width: 710rpx;
+			height: 78rpx;
+			font-size: 24rpx;
+			border-radius: 44rpx;
+			background-color: #e6e6e6;
+
+			input {
+				width: 100%;
+			}
+		}
+	}
+}
+</style>

+ 186 - 0
pages/collect/collect.vue

@@ -0,0 +1,186 @@
+<template>
+	<view class="container">
+		<!-- 分段器区域 -->
+		<view class="segmented">
+			<uni-segmented-control :current="activeCurrent" :values="headerList" style-type="text" active-color="#096562" @clickItem="onClickItem" />
+		</view>
+
+		<!-- 列表区域 -->
+		<scroll-view class="body" scroll-y @scrolltolower="handlePull">
+			<!-- 每一个盒子区域 -->
+			<view class="box" v-for="item in list" :key="item.id">
+				<!-- 民宿图片区域 -->
+				<img mode="aspectFill" :src="item.imgUrl" />
+				<!-- 民宿信息区域 -->
+				<view class="box_info">
+					<view class="info_name">{{ item.name }}</view>
+					<view class="info_rate">
+						<view class="rate_num">{{ item.rate }}</view>
+						<view class="rate_msg">{{ item.msg }}</view>
+					</view>
+					<view class="info_town">{{ item.town }}</view>
+				</view>
+				<!-- 民宿价格区域 -->
+				<view class="box_price">
+					<view class="price_icon">¥</view>
+					<view class="price_num">{{ item.price }}</view>
+					<view class="price_msg">起</view>
+				</view>
+			</view>
+		</scroll-view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			// 分段器当前激活索引
+			activeCurrent: 0,
+			// 分段器数组
+			headerList: ['收藏', '住过'],
+			// 列表数据
+			list: [
+				{
+					id: 1,
+					imgUrl: 'https://img1.baidu.com/it/u=4085584268,3308739054&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=375',
+					name: '民宿名称',
+					rate: '5.0',
+					town: '宝峰镇',
+					price: 748,
+					msg: '超棒'
+				},
+				{
+					id: 2,
+					imgUrl: 'https://img1.baidu.com/it/u=4085584268,3308739054&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=375',
+					name: '开心民宿',
+					rate: '5.0',
+					town: '木叶村',
+					price: 999,
+					msg: '超棒'
+				},
+				{
+					id: 3,
+					imgUrl: 'https://img1.baidu.com/it/u=4085584268,3308739054&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=375',
+					name: '快乐民宿',
+					rate: '5.0',
+					town: '砂隐村',
+					price: 888,
+					msg: '超棒'
+				}
+			]
+		}
+	},
+	methods: {
+		// 切换分段器回调
+		onClickItem(e) {
+			if (this.current !== e.currentIndex) {
+				this.current = e.currentIndex
+			}
+		},
+		// 列表下拉到底部回调
+		handlePull() {
+			console.log(111)
+		}
+	}
+}
+</script>
+
+<style lang="scss" scoped>
+.container {
+	height: 100vh;
+	background-color: #f2f3f5;
+	overflow: hidden;
+
+	.segmented {
+		box-sizing: border-box;
+		padding-bottom: 28rpx;
+		height: 100rpx;
+		background-color: #fff;
+	}
+
+	.body {
+		box-sizing: border-box;
+		padding: 20rpx 0;
+		height: calc(100vh - 100rpx);
+
+		.box {
+			display: flex;
+			align-items: center;
+			padding: 0 20rpx;
+			height: 207rpx;
+			border-bottom: 1rpx solid #e5e5e5;
+			background-color: #fff;
+
+			img {
+				width: 110rpx;
+				height: 146rpx;
+				border-radius: 10rpx;
+			}
+
+			.box_info {
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+				margin-top: -5rpx;
+				margin-left: 20rpx;
+				height: 146rpx;
+
+				.info_name {
+					font-size: 32rpx;
+					font-weight: bold;
+				}
+
+				.info_rate {
+					display: flex;
+					font-size: 24rpx;
+
+					.rate_num {
+						padding: 4rpx 10rpx;
+						color: #fff;
+						border-radius: 32rpx 0 0 32rpx;
+						background-color: #096562;
+					}
+
+					.rate_msg {
+						padding: 4rpx 10rpx;
+						color: #096562;
+						border-radius: 0 32rpx 32rpx 0;
+						background-color: #dff2f2;
+					}
+				}
+
+				.info_town {
+					color: #808080;
+					font-size: 24rpx;
+				}
+			}
+
+			.box_price {
+				display: flex;
+				align-items: flex-end;
+				margin-left: auto;
+				height: 146rpx;
+
+				.price_icon {
+					margin-bottom: 5rpx;
+					color: #ff5733;
+					font-size: 24rpx;
+				}
+
+				.price_num {
+					color: #ff5733;
+					font-size: 42rpx;
+				}
+
+				.price_msg {
+					margin-left: 12rpx;
+					margin-bottom: 5rpx;
+					color: #808080;
+					font-size: 24rpx;
+				}
+			}
+		}
+	}
+}
+</style>

+ 204 - 0
pages/coupon/coupon.vue

@@ -0,0 +1,204 @@
+<template>
+	<view class="container">
+		<!-- 头部优惠券总数量区域 -->
+		<view class="header">
+			可使用优惠券
+			<text>5张</text>
+		</view>
+
+		<!-- 优惠券列表区域 -->
+		<view class="body">
+			<!-- 每一张优惠券区域 -->
+			<view class="body_item" v-for="item in list" :key="item.id">
+				<img src="../../static/my/couponTitle.png" />
+				<view class="item_type" v-if="item.type === 1">折扣卷</view>
+				<view class="item_type" v-if="item.type === 2">代金卷</view>
+				<view class="item_box">
+					<view class="box_left">
+						<view class="left_title">{{ item.name }}</view>
+						<view class="left_tags">
+							<view class="tag">有限期至2023.09.01</view>
+							<view class="tag">可通用</view>
+							<view class="tag">全民宿</view>
+						</view>
+					</view>
+					<view class="box_right">
+						<view class="right_info">
+							<view class="info_top">{{ item.info }}</view>
+							<view class="info_bottom">满200可用</view>
+						</view>
+						<view class="right_radio">
+							<radio style="transform: scale(0.8)" color="#096562" :checked="item.isCheck" @click="handleChange(item)" />
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+
+		<!-- 底部确定按钮区域 -->
+		<view class="foot_btn">确定</view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			list: [
+				{
+					id: 1,
+					name: '7.5折折扣卷',
+					type: 1,
+					info: '7.5折',
+					isCheck: false
+				},
+				{
+					id: 2,
+					name: '20元代金券',
+					type: 2,
+					info: '¥20',
+					isCheck: false
+				},
+				{
+					id: 3,
+					name: '7.5折折扣卷',
+					type: 1,
+					info: '7.5折',
+					isCheck: false
+				}
+			]
+		}
+	},
+	methods: {
+		handleChange(item) {
+			item.isCheck = !item.isCheck
+		}
+	}
+}
+</script>
+
+<style lang="scss" scoped>
+.container {
+	box-sizing: border-box;
+	padding: 0 30rpx;
+	height: 100vh;
+	background-color: #f7f7f7;
+
+	.header {
+		display: flex;
+		align-items: center;
+		height: 100rpx;
+		font-size: 32rpx;
+
+		text {
+			margin-top: 10rpx;
+			margin-left: 15rpx;
+			color: #808080;
+			font-size: 24rpx;
+		}
+	}
+
+	.body {
+		height: calc(100vh - 245rpx);
+		overflow-y: auto;
+
+		.body_item {
+			position: relative;
+			margin-bottom: 10rpx;
+			padding-bottom: 10rpx;
+			width: 690rpx;
+			border-radius: 15rpx;
+			background-color: #fff;
+
+			img {
+				width: 100rpx;
+				height: 36rpx;
+			}
+
+			.item_type {
+				position: absolute;
+				top: 0;
+				left: 14rpx;
+				font-size: 24rpx;
+				font-weight: bold;
+				color: #fff;
+			}
+
+			.item_box {
+				padding: 0 25rpx;
+				display: flex;
+
+				.box_left {
+					flex: 6;
+					overflow: hidden;
+
+					.left_title {
+						margin: 12rpx 0;
+						font-size: 36rpx;
+						font-weight: bold;
+						overflow: hidden;
+						text-overflow: ellipsis;
+						white-space: nowrap;
+					}
+
+					.left_tags {
+						display: flex;
+						flex-wrap: wrap;
+						color: #808080;
+						font-size: 24rpx;
+
+						.tag {
+							margin-right: 32rpx;
+							margin-bottom: 15rpx;
+						}
+					}
+				}
+
+				.box_right {
+					flex: 2;
+					display: flex;
+
+					.right_info {
+						flex: 1;
+						display: flex;
+						flex-direction: column;
+						width: 100rpx;
+						color: #ff5733;
+
+						.info_top {
+							margin-top: 10rpx;
+							font-size: 36rpx;
+						}
+
+						.info_bottom {
+							margin-top: 10rpx;
+							font-size: 20rpx;
+						}
+					}
+
+					.right_radio {
+						display: flex;
+						justify-content: center;
+						align-items: center;
+						width: 40rpx;
+					}
+				}
+			}
+		}
+	}
+
+	.foot_btn {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		margin: 32rpx 0 17rpx;
+		width: 690rpx;
+		height: 96rpx;
+		color: #fff;
+		font-size: 32rpx;
+		font-weight: bold;
+		border-radius: 64rpx;
+		background-color: #096562;
+	}
+}
+</style>

+ 4 - 3
pages/detail/detail.vue

@@ -85,7 +85,7 @@
 					<view class="box_center">
 						<view class="center_top">{{ item.hName }}</view>
 						<view class="center_center">
-							<view class="center_item" v-if="item.hAreas">{{ item.hAreas }}㎡</view>
+							<view class="center_item" v-if="item.hAreas">{{ item.hAreas }}㎡ 剩余{{ item.remainRooms }}间</view>
 						</view>
 						<view class="center_bottom">
 							<img v-for="item2 in item.hConfigList" :key="item2.id" class="img" :src="item2.fileUrl" />
@@ -325,7 +325,8 @@ export default {
 						queryStartTime: this.startTime,
 						queryEndTime: this.endTime,
 						dayList: this.dayList,
-						hTypeName: this.info.hTypeName
+						hTypeName: this.info.hTypeName,
+						hotelName: this.info.hotel_name
 					})
 					uni.navigateTo({
 						url: `/pages/affirmOrder/affirmOrder?info=${info}`
@@ -862,4 +863,4 @@ export default {
 		}
 	}
 }
-</style>
+</style>

+ 49 - 0
pages/home/home.vue

@@ -43,6 +43,17 @@
 			<img src="../../static/images/noData.png" />
 			暂无数据
 		</view>
+
+		<!-- 领取优惠券弹窗区域 -->
+		<uv-popup ref="popup" mode="center" :closeOnClickOverlay="false" bgColor="none">
+			<view class="popupClass">
+				<img src="../../static/index/popup_bg.png" />
+				<!-- 立即前往区域 -->
+				<view class="btn_go" @click="handleGo"></view>
+				<!-- 关闭按钮区域 -->
+				<view class="btn_close" @click="handleClose"></view>
+			</view>
+		</uv-popup>
 	</view>
 </template>
 
@@ -79,6 +90,7 @@ export default {
 	onLoad() {
 		this.getLocation()
 		this.getTownList()
+		// this.$refs.popup.open()
 	},
 	// 页面下拉回调
 	onPullDownRefresh() {
@@ -235,6 +247,14 @@ export default {
 			this.hotelList = []
 			this.page = 1
 			this.getHotelList()
+		},
+		// 立即前往按钮回调
+		handleGo() {
+			console.log(111)
+		},
+		// 优惠券弹窗关闭按钮回调
+		handleClose() {
+			this.$refs.popup.close()
 		}
 	}
 }
@@ -416,5 +436,34 @@ export default {
 			height: 600rpx;
 		}
 	}
+
+	.popupClass {
+		position: relative;
+		width: 481rpx;
+		height: 764rpx;
+
+		img {
+			width: 100%;
+			height: 665rpx;
+		}
+
+		.btn_go {
+			position: absolute;
+			top: 415rpx;
+			left: 40rpx;
+			width: 396rpx;
+			height: 76rpx;
+			border-radius: 43rpx;
+		}
+
+		.btn_close {
+			position: absolute;
+			top: 586rpx;
+			left: 212rpx;
+			width: 58rpx;
+			height: 58rpx;
+			border-radius: 50%;
+		}
+	}
 }
 </style>

+ 54 - 41
pages/my/my.vue

@@ -1,10 +1,11 @@
 <template>
 	<view class="container">
+		<!-- 页面标题 -->
+		<view class="title">我的</view>
+
 		<!-- 顶部用户信息区域 -->
 		<view class="header">
 			<img src="../../static/my/headerImg.png" />
-			<!-- 页面标题 -->
-			<view class="title">我的</view>
 			<!-- 头像区域 -->
 			<img class="img" mode="aspectFill" v-if="flag" :src="userInfo.headPhoto" />
 			<img class="img" v-else src="../../static/my/portrait.png" />
@@ -17,7 +18,7 @@
 				<img src="../../static/my/true.png" />
 				已实名认证
 			</view>
-			<view class="real2" v-if="flag" v-else @click="goPageCommon">
+			<view class="real2" v-if="flag" v-else>
 				去认证
 				<img src="../../static/my/right2.png" />
 			</view> -->
@@ -28,14 +29,42 @@
 		<!-- 内容区域 -->
 		<view class="body">
 			<!-- 订单管理区域 -->
-			<view class="body_item" @click="goPageOrder">
+			<view class="body_item" @click="handleGoPage('/pages/orderManage/orderManage')">
 				<img class="img" src="../../static/my/order.png" />
 				订单管理
 				<img class="img_icon" src="../../static/my/right3.png" />
 			</view>
 
+			<!-- 我的评价区域 -->
+			<view class="body_item" @click="handleGoPage('/pages/myEvaluate/myEvaluate')">
+				<img class="img" src="../../static/my/evaluate.png" />
+				我的评价
+				<img class="img_icon" src="../../static/my/right3.png" />
+			</view>
+
+			<!-- 收藏/住过区域 -->
+			<view class="body_item" @click="handleGoPage('/pages/collect/collect')">
+				<img class="img" src="../../static/my/collect.png" />
+				收藏/住过
+				<img class="img_icon" src="../../static/my/right3.png" />
+			</view>
+
+			<!-- 我的卡券区域 -->
+			<view class="body_item" @click="handleGoPage('/pages/myCoupon/myCoupon')">
+				<img class="img" src="../../static/my/coupon.png" />
+				我的卡券
+				<img class="img_icon" src="../../static/my/right3.png" />
+			</view>
+
+			<!-- 投诉进度区域 -->
+			<view class="body_item">
+				<img class="img" src="../../static/my/complaint.png" />
+				投诉进度
+				<img class="img_icon" src="../../static/my/right3.png" />
+			</view>
+
 			<!-- 常用旅客区域 -->
-			<view class="body_item" @click="goPageCommon">
+			<view class="body_item" @click="handleGoPage('/pages/common/common')">
 				<img class="img2" src="../../static/my/people.png" />
 				常用旅客
 				<img class="img_icon" src="../../static/my/right3.png" />
@@ -56,7 +85,7 @@
 			</view>
 
 			<!-- 设置区域 -->
-			<view class="body_item" @click="goPageSet">
+			<view class="body_item" @click="handleGoPage('/pages/set/set')">
 				<img class="img3" src="../../static/my/set.png" />
 				设置
 				<img class="img_icon" src="../../static/my/right3.png" />
@@ -88,6 +117,14 @@ export default {
 		}
 	},
 	methods: {
+		// 跳转页面回调
+		handleGoPage(url) {
+			if (this.isLogin()) {
+				uni.navigateTo({
+					url
+				})
+			}
+		},
 		changeFlag(e) {
 			// console.log(e)
 			this.flag = e.data
@@ -149,30 +186,6 @@ export default {
 				url: '/pages/login/login'
 			})
 		},
-		// 点击订单管理按钮回调
-		goPageOrder() {
-			if (this.isLogin()) {
-				uni.navigateTo({
-					url: '/pages/orderManage/orderManage'
-				})
-			}
-		},
-		// 点击常用旅客按钮回调
-		goPageCommon() {
-			if (this.isLogin()) {
-				uni.navigateTo({
-					url: '/pages/common/common'
-				})
-			}
-		},
-		// 点击设置按钮回调
-		goPageSet() {
-			if (this.isLogin()) {
-				uni.navigateTo({
-					url: '/pages/set/set'
-				})
-			}
-		},
 		isLogin() {
 			if (this.flag) {
 				return true
@@ -197,7 +210,15 @@ export default {
 .container {
 	position: relative;
 	min-height: 100vh;
-	background-color: #ebeced;
+
+	.title {
+		z-index: 999;
+		position: fixed;
+		top: 65rpx;
+		left: 342rpx;
+		font-size: 28rpx;
+		color: #fff;
+	}
 
 	.header {
 		position: relative;
@@ -209,14 +230,6 @@ export default {
 			width: 100%;
 		}
 
-		.title {
-			position: absolute;
-			top: 65rpx;
-			left: 342rpx;
-			font-size: 28rpx;
-			color: #fff;
-		}
-
 		.img {
 			position: absolute;
 			top: 190rpx;
@@ -301,7 +314,7 @@ export default {
 		box-sizing: border-box;
 		padding: 0 30rpx;
 		width: 100%;
-		height: calc(100vh - 360rpx);
+		min-height: calc(100vh - 360rpx);
 		border-radius: 20rpx 20rpx 0 0;
 		background-color: #fff;
 
@@ -338,4 +351,4 @@ export default {
 		}
 	}
 }
-</style>
+</style>

+ 302 - 0
pages/myCoupon/myCoupon.vue

@@ -0,0 +1,302 @@
+<template>
+	<view class="container">
+		<!-- 分段器区域 -->
+		<view class="segmented">
+			<view class="segmented_box">
+				<uni-segmented-control :current="activeCurrent" :values="headerList" style-type="text" active-color="#096562" @clickItem="onClickItem" />
+			</view>
+		</view>
+
+		<!-- 领券中心横幅区域 -->
+		<view class="banner">
+			<img mode="aspectFill" src="../../static/my/banner.png" />
+			<view class="banner_title">领券中心</view>
+			<view class="banner_msg">
+				<view class="msg_top">关注领券中心</view>
+				<view>系统会不定时发放代金券</view>
+			</view>
+			<view class="banner_btn">去逛逛</view>
+		</view>
+
+		<!-- 代金券列表区域 -->
+		<scroll-view class="body" scroll-y @scrolltolower="handlePull">
+			<!-- 每一个代金券区域 -->
+			<view class="body_box" v-for="item in list" :key="item.id">
+				<!-- 代金券类型区域 -->
+				<img src="../../static/my/couponTitle.png" />
+				<view class="box_title">
+					<view class="title_type">{{ item.type }}</view>
+					<view class="title_num">x{{ item.count }}张</view>
+				</view>
+				<!-- 代金券信息区域 -->
+				<view class="box_info">
+					<view class="info_left">
+						<view class="left_top">{{ item.name }}</view>
+						<view class="left_bottom">
+							<view class="tag">有限期至{{ item.time }}</view>
+							<view class="tag">可通用</view>
+							<view class="tag">全民宿</view>
+						</view>
+					</view>
+					<view class="info_right">
+						<view class="right_top">{{ item.msg }}</view>
+						<view class="right_bottom" :class="{ color: item.info === '无门槛' }">{{ item.info }}</view>
+					</view>
+				</view>
+				<!-- 代金券按钮区域 -->
+				<view class="box_btn">去使用</view>
+			</view>
+		</scroll-view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			// 分段器当前激活索引
+			activeCurrent: 0,
+			// 分段器数组
+			headerList: ['全部', '代金券', '折扣券'],
+			list: [
+				{
+					id: 1,
+					type: '折扣券',
+					count: 5,
+					name: '7.5折折扣卷',
+					time: '2023.09.01',
+					msg: '7.5折',
+					info: '满200可用'
+				},
+				{
+					id: 2,
+					type: '代金券',
+					count: 2,
+					name: '20元代金券',
+					time: '2023.10.01',
+					msg: '¥10',
+					info: '无门槛'
+				},
+				{
+					id: 1,
+					type: '折扣券',
+					count: 5,
+					name: '7.5折折扣卷',
+					time: '2023.09.01',
+					msg: '7.5折',
+					info: '满200可用'
+				},
+				{
+					id: 2,
+					type: '代金券',
+					count: 2,
+					name: '20元代金券',
+					time: '2023.10.01',
+					msg: '¥10',
+					info: '无门槛'
+				},
+				{
+					id: 1,
+					type: '折扣券',
+					count: 5,
+					name: '7.5折折扣卷',
+					time: '2023.09.01',
+					msg: '7.5折',
+					info: '满200可用'
+				},
+				{
+					id: 2,
+					type: '代金券',
+					count: 2,
+					name: '20元代金券',
+					time: '2023.10.01',
+					msg: '¥10',
+					info: '无门槛'
+				}
+			]
+		}
+	},
+	methods: {
+		// 切换分段器回调
+		onClickItem(e) {
+			if (this.current !== e.currentIndex) {
+				this.current = e.currentIndex
+			}
+		},
+		// 列表下拉到底部回调
+		handlePull() {
+			console.log(111)
+		}
+	}
+}
+</script>
+
+<style lang="scss" scoped>
+.container {
+	height: 100vh;
+	background-color: #f2f3f5;
+	overflow: hidden;
+
+	.segmented {
+		box-sizing: border-box;
+		padding-bottom: 28rpx;
+		height: 100rpx;
+		background-color: #fff;
+
+		.segmented_box {
+			width: 50%;
+		}
+	}
+
+	.banner {
+		position: relative;
+		padding: 0 20rpx;
+		height: 158rpx;
+
+		img {
+			margin-top: 31rpx;
+			width: 710rpx;
+			height: 95rpx;
+		}
+
+		.banner_title {
+			position: absolute;
+			top: 42rpx;
+			left: 55rpx;
+			color: #fff;
+			font-size: 50rpx;
+			font-weight: bold;
+		}
+
+		.banner_msg {
+			position: absolute;
+			top: 46rpx;
+			left: 280rpx;
+			display: flex;
+			flex-direction: column;
+			justify-content: space-between;
+			padding-left: 15rpx;
+			height: 61rpx;
+			color: #fff;
+			font-size: 20rpx;
+			border-left: 1rpx dotted #fff;
+
+			.msg_top {
+				margin-top: -5rpx;
+			}
+		}
+
+		.banner_btn {
+			position: absolute;
+			top: 46rpx;
+			left: 556rpx;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			width: 133rpx;
+			height: 61rpx;
+			color: #000;
+			font-size: 28rpx;
+			border-radius: 12rpx;
+			background: linear-gradient(90deg, #ffeb3b 0%, #ffb300 100%);
+		}
+	}
+
+	.body {
+		box-sizing: border-box;
+		padding: 0 30rpx 20rpx;
+		height: calc(100vh - 258rpx);
+
+		.body_box {
+			position: relative;
+			margin-bottom: 20rpx;
+			height: 218rpx;
+			border-radius: 15rpx;
+			background-color: #fff;
+
+			img {
+				width: 135rpx;
+				height: 36rpx;
+			}
+
+			.box_title {
+				position: absolute;
+				top: 0;
+				left: 16rpx;
+				display: flex;
+				align-items: center;
+				color: #fff;
+
+				.title_type {
+					font-size: 24rpx;
+					font-weight: bold;
+				}
+
+				.title_num {
+					margin-left: 5rpx;
+					margin-top: 10rpx;
+					font-size: 16rpx;
+				}
+			}
+
+			.box_info {
+				display: flex;
+				padding: 0 30rpx 0 25rpx;
+
+				.info_left {
+					flex: 4;
+
+					.left_top {
+						margin: 12rpx 0;
+						font-size: 36rpx;
+					}
+
+					.left_bottom {
+						display: flex;
+						color: #808080;
+						font-size: 24rpx;
+
+						.tag {
+							margin-right: 32rpx;
+						}
+					}
+				}
+				.info_right {
+					flex: 1;
+					color: #ff5733;
+
+					.right_top {
+						margin: 10rpx 0;
+						text-align: end;
+						font-size: 36rpx;
+					}
+
+					.right_bottom {
+						text-align: end;
+						font-size: 20rpx;
+					}
+
+					.color {
+						color: #a6a6a6;
+					}
+				}
+			}
+
+			.box_btn {
+				display: flex;
+				justify-content: center;
+				align-items: center;
+				margin-right: 30rpx;
+				margin-top: 11rpx;
+				margin-left: auto;
+				width: 98rpx;
+				height: 40rpx;
+				color: #fff;
+				font-size: 24rpx;
+				border-radius: 6rpx;
+				background-color: #096562;
+			}
+		}
+	}
+}
+</style>

+ 193 - 0
pages/myEvaluate/myEvaluate.vue

@@ -0,0 +1,193 @@
+<template>
+	<view class="container">
+		<!-- 分段器区域 -->
+		<view class="segmented">
+			<uni-segmented-control :current="activeCurrent" :values="headerList" style-type="text" active-color="#096562" @clickItem="onClickItem" />
+		</view>
+
+		<!-- 列表区域 -->
+		<scroll-view class="body" scroll-y @scrolltolower="handlePull">
+			<!-- 每一个盒子区域 -->
+			<view class="box" v-for="item in list" :key="item.id">
+				<!-- 头部区域 -->
+				<view class="box_top">
+					<img mode="aspectFill" src="../../static/my/hotel.png" />
+					<view class="top_name">{{ item.name }}</view>
+					<view class="box_type">{{ item.type }}</view>
+				</view>
+
+				<!-- 房间信息区域 -->
+				<view class="box_center">
+					<img mode="aspectFill" :src="item.imgUrl" />
+					<view class="center_info">
+						<view>{{ item.count }}间,{{ item.roomType }}</view>
+						<view>{{ item.time }}</view>
+						<view>总价:¥{{ item.total }}</view>
+					</view>
+				</view>
+
+				<!-- 按钮区域 -->
+				<view class="box_btn">
+					<view class="btn_eva">去评价</view>
+				</view>
+			</view>
+		</scroll-view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			// 分段器当前激活索引
+			activeCurrent: 0,
+			// 分段器数组
+			headerList: ['待评价', '已评价'],
+			// 列表数据
+			list: [
+				{
+					id: 1,
+					name: '民宿名称',
+					type: '已消费',
+					imgUrl: 'https://img1.baidu.com/it/u=4085584268,3308739054&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=375',
+					count: 1,
+					roomType: '大床房',
+					time: '2023-07-26  -  2023-07-27',
+					total: 229
+				},
+				{
+					id: 2,
+					name: '开心民宿',
+					type: '已消费',
+					imgUrl: 'https://img1.baidu.com/it/u=4085584268,3308739054&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=375',
+					count: 2,
+					roomType: '双人房',
+					time: '2023-07-27  -  2023-07-27',
+					total: 299
+				},
+				{
+					id: 3,
+					name: '开心民宿',
+					type: '已消费',
+					imgUrl: 'https://img1.baidu.com/it/u=4085584268,3308739054&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=375',
+					count: 2,
+					roomType: '双人房',
+					time: '2023-07-27  -  2023-07-27',
+					total: 299
+				},
+				{
+					id: 4,
+					name: '开心民宿',
+					type: '已消费',
+					imgUrl: 'https://img1.baidu.com/it/u=4085584268,3308739054&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=375',
+					count: 2,
+					roomType: '双人房',
+					time: '2023-07-27  -  2023-07-27',
+					total: 299
+				}
+			]
+		}
+	},
+	methods: {
+		// 切换分段器回调
+		onClickItem(e) {
+			if (this.current !== e.currentIndex) {
+				this.current = e.currentIndex
+			}
+		},
+		// 列表下拉到底部回调
+		handlePull() {
+			console.log(111)
+		}
+	}
+}
+</script>
+
+<style lang="scss" scoped>
+.container {
+	height: 100vh;
+	background-color: #f2f3f5;
+	overflow: hidden;
+
+	.segmented {
+		box-sizing: border-box;
+		padding-bottom: 28rpx;
+		height: 100rpx;
+		background-color: #fff;
+	}
+
+	.body {
+		box-sizing: border-box;
+		padding: 20rpx 0;
+		height: calc(100vh - 100rpx);
+		overflow-y: auto;
+
+		.box {
+			padding: 0 20rpx;
+			margin-bottom: 20rpx;
+			height: 341rpx;
+			background-color: #fff;
+
+			.box_top {
+				display: flex;
+				align-items: center;
+				height: 94rpx;
+
+				img {
+					width: 47rpx;
+					height: 47rpx;
+					border-radius: 50%;
+				}
+
+				.top_name {
+					margin-left: 18rpx;
+					font-size: 32rpx;
+					font-weight: bold;
+				}
+
+				.box_type {
+					margin-left: auto;
+					color: #808080;
+					font-size: 28rpx;
+				}
+			}
+
+			.box_center {
+				display: flex;
+
+				img {
+					width: 100rpx;
+					height: 100rpx;
+					border-radius: 10rpx;
+				}
+
+				.center_info {
+					margin-top: -5rpx;
+					margin-left: 18rpx;
+					color: #808080;
+					font-size: 28rpx;
+				}
+			}
+
+			.box_btn {
+				display: flex;
+				justify-content: flex-end;
+				margin-top: 35rpx;
+
+				.btn_eva {
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					margin-left: 20rpx;
+					width: 178rpx;
+					height: 68rpx;
+					color: #808080;
+					font-size: 28rpx;
+					border-radius: 64rpx;
+					border: 1rpx solid #808080;
+				}
+			}
+		}
+	}
+}
+</style>

+ 1 - 1
pages/push/push.vue

@@ -75,7 +75,7 @@
 
 			<view class="body_btn">
 				<view class="btn_item type" @click="handleOrder(4)">退单</view>
-				<view class="btn_item type2" v-if="orderInfo.hotelIsCanorder === '2'" @click="handleOrder(1)">接单</view>
+				<view class="btn_item type2" v-if="orderInfo.orderStatus === '2'" @click="handleOrder(1)">接单</view>
 			</view>
 		</view>
 	</view>

BIN
static/index/banner.png


BIN
static/index/comment.png


BIN
static/index/popup_bg.png


BIN
static/my/banner.png


BIN
static/my/collect.png


BIN
static/my/complaint.png


BIN
static/my/coupon.png


BIN
static/my/couponTitle.png


BIN
static/my/evaluate.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目录规范

File diff suppressed because it is too large
+ 1169 - 0
uni_modules/uni-icons/components/uni-icons/icons.js


+ 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 

+ 9 - 0
uni_modules/uni-segmented-control/changelog.md

@@ -0,0 +1,9 @@
+## 1.2.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-segmented-control](https://uniapp.dcloud.io/component/uniui/uni-segmented-control)
+## 1.1.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.0.5(2021-05-12)
+- 新增 项目示例地址
+## 1.0.4(2021-02-05)
+- 调整为uni_modules目录规范

+ 145 - 0
uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue

@@ -0,0 +1,145 @@
+<template>
+	<view :class="[styleType === 'text'?'segmented-control--text' : 'segmented-control--button' ]"
+		:style="{ borderColor: styleType === 'text' ? '' : activeColor }" class="segmented-control">
+		<view v-for="(item, index) in values" :class="[ styleType === 'text' ? '': 'segmented-control__item--button',
+		index === currentIndex&&styleType === 'button' ? 'segmented-control__item--button--active': '',
+		index === 0&&styleType === 'button' ? 'segmented-control__item--button--first': '',
+			index === values.length - 1&&styleType === 'button' ? 'segmented-control__item--button--last': '' ]" :key="index"
+			:style="{ backgroundColor: index === currentIndex && styleType === 'button' ? activeColor : '',borderColor: index === currentIndex&&styleType === 'text'||styleType === 'button'?activeColor:'transparent' }"
+			class="segmented-control__item" @click="_onClick(index)">
+			<view>
+				<text :style="{color:
+				    index === currentIndex
+				      ? styleType === 'text'
+				        ? activeColor
+				        : '#fff'
+				      : styleType === 'text'
+				        ? '#000'
+				        : activeColor}" class="segmented-control__text" :class="styleType === 'text' && index === currentIndex ? 'segmented-control__item--text': ''">{{ item }}</text>
+			</view>
+
+		</view>
+	</view>
+</template>
+
+<script>
+	/**
+	 * SegmentedControl 分段器
+	 * @description 用作不同视图的显示
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=54
+	 * @property {Number} current 当前选中的tab索引值,从0计数
+	 * @property {String} styleType = [button|text] 分段器样式类型
+	 * 	@value button 按钮类型
+	 * 	@value text 文字类型
+	 * @property {String} activeColor 选中的标签背景色与边框颜色
+	 * @property {Array} values 选项数组
+	 * @event {Function} clickItem 组件触发点击事件时触发,e={currentIndex}
+	 */
+
+	export default {
+		name: 'UniSegmentedControl',
+		emits: ['clickItem'],
+		props: {
+			current: {
+				type: Number,
+				default: 0
+			},
+			values: {
+				type: Array,
+				default () {
+					return []
+				}
+			},
+			activeColor: {
+				type: String,
+				default: '#2979FF'
+			},
+			styleType: {
+				type: String,
+				default: 'button'
+			}
+		},
+		data() {
+			return {
+				currentIndex: 0
+			}
+		},
+		watch: {
+			current(val) {
+				if (val !== this.currentIndex) {
+					this.currentIndex = val
+				}
+			}
+		},
+		created() {
+			this.currentIndex = this.current
+		},
+		methods: {
+			_onClick(index) {
+				if (this.currentIndex !== index) {
+					this.currentIndex = index
+					this.$emit('clickItem', {
+						currentIndex: index
+					})
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.segmented-control {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		box-sizing: border-box;
+		/* #endif */
+		flex-direction: row;
+		height: 36px;
+		overflow: hidden;
+		/* #ifdef H5 */
+		cursor: pointer;
+		/* #endif */
+	}
+
+	.segmented-control__item {
+		/* #ifndef APP-NVUE */
+		display: inline-flex;
+		box-sizing: border-box;
+		/* #endif */
+		position: relative;
+		flex: 1;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.segmented-control__item--button {
+		border-style: solid;
+		border-top-width: 1px;
+		border-bottom-width: 1px;
+		border-right-width: 1px;
+		border-left-width: 0;
+	}
+
+	.segmented-control__item--button--first {
+		border-left-width: 1px;
+		border-top-left-radius: 5px;
+		border-bottom-left-radius: 5px;
+	}
+
+	.segmented-control__item--button--last {
+		border-top-right-radius: 5px;
+		border-bottom-right-radius: 5px;
+	}
+
+	.segmented-control__item--text {
+		border-bottom-style: solid;
+		border-bottom-width: 2px;
+		padding: 6px 0;
+	}
+
+	.segmented-control__text {
+		font-size: 14px;
+		line-height: 20px;
+		text-align: center;
+	}
+</style>

+ 87 - 0
uni_modules/uni-segmented-control/package.json

@@ -0,0 +1,87 @@
+{
+  "id": "uni-segmented-control",
+  "displayName": "uni-segmented-control 分段器",
+  "version": "1.2.0",
+  "description": "分段器由至少 2 个分段控件组成,用作不同视图的显示",
+  "keywords": [
+    "uni-ui",
+    "uniui",
+    "分段器",
+    "segement",
+    "顶部选择"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": ""
+  },
+  "directories": {
+    "example": "../../temps/example_temps"
+  },
+  "dcloudext": {
+    "category": [
+      "前端组件",
+      "通用组件"
+    ],
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+  },
+  "uni_modules": {
+    "dependencies": ["uni-scss"],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "y"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+          "QQ": "y"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        },
+        "Vue": {
+            "vue2": "y",
+            "vue3": "y"
+        }
+      }
+    }
+  }
+}

+ 13 - 0
uni_modules/uni-segmented-control/readme.md

@@ -0,0 +1,13 @@
+
+
+## SegmentedControl 分段器
+> **组件名:uni-segmented-control**
+> 代码块: `uSegmentedControl`
+
+
+用作不同视图的显示
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-segmented-control)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 
+
+

+ 2 - 0
uni_modules/uv-icon/changelog.md

@@ -1,3 +1,5 @@
+## 1.0.10(2023-08-13)
+1. 优化nvue,方便自定义图标
 ## 1.0.9(2023-07-28)
 1. 修改几个对应错误图标的BUG
 ## 1.0.8(2023-07-24)

+ 5 - 0
uni_modules/uv-icon/components/uv-icon/uv-icon.vue

@@ -134,6 +134,11 @@
 			icon() {
 				// 如果内置的图标中找不到对应的图标,就直接返回name值,因为用户可能传入的是unicode代码
 				const code = icons['uvicon-' + this.name];
+				// #ifdef APP-NVUE
+				if(!code) {
+					return code ? unescape(`%u${code}`) : ['uvicon'].indexOf(this.customPrefix) > -1 ? unescape(`%u${this.name}`) : '';
+				}
+				// #endif
 				return code ? unescape(`%u${code}`) : ['uvicon'].indexOf(this.customPrefix) > -1 ? this.name : '';
 			}
 		},

+ 1 - 1
uni_modules/uv-icon/package.json

@@ -1,7 +1,7 @@
 {
   "id": "uv-icon",
   "displayName": "uv-icon 图标 全面兼容vue3+2、app、h5、小程序等多端",
-  "version": "1.0.9",
+  "version": "1.0.10",
   "description": "基于字体的图标集,包含了大多数常见场景的图标,支持自定义,支持自定义图片图标等。可自定义颜色、大小。",
   "keywords": [
     "uv-ui,uvui,uv-icon,icon,图标,字体图标"

+ 7 - 0
uni_modules/uv-link/changelog.md

@@ -0,0 +1,7 @@
+## 1.0.2(2023-08-13)
+1. 修复报错的BUG
+## 1.0.1(2023-05-16)
+1. 优化组件依赖,修改后无需全局引入,组件导入即可使用
+2. 优化部分功能
+## 1.0.0(2023-05-10)
+uv-link 超链接组件

+ 40 - 0
uni_modules/uv-link/components/uv-link/props.js

@@ -0,0 +1,40 @@
+export default {
+	props: {
+		// 文字颜色
+		color: {
+			type: String,
+			default: ''
+		},
+		// 字体大小,单位px
+		fontSize: {
+			type: [String, Number],
+			default: 14
+		},
+		// 是否显示下划线
+		underLine: {
+			type: Boolean,
+			default: false
+		},
+		// 要跳转的链接
+		href: {
+			type: String,
+			default: ''
+		},
+		// 小程序中复制到粘贴板的提示语
+		mpTips: {
+			type: String,
+			default: '链接已复制,请在浏览器打开'
+		},
+		// 下划线颜色
+		lineColor: {
+			type: String,
+			default: ''
+		},
+		// 超链接的问题,不使用slot形式传入,是因为nvue下无法修改颜色
+		text: {
+			type: String,
+			default: ''
+		},
+		...uni.$uv?.props?.link
+	}
+}

+ 83 - 0
uni_modules/uv-link/components/uv-link/uv-link.vue

@@ -0,0 +1,83 @@
+<template>
+	<text
+	    class="uv-link"
+	    @tap.stop="openLink"
+	    :style="[linkStyle, $uv.addStyle(customStyle)]"
+	>{{text}}</text>
+</template>
+
+<script>
+	import mpMixin from '@/uni_modules/uv-ui-tools/libs/mixin/mpMixin.js'
+	import mixin from '@/uni_modules/uv-ui-tools/libs/mixin/mixin.js'
+	import props from './props.js';
+	/**
+	 * link 超链接
+	 * @description 该组件为超链接组件,在不同平台有不同表现形式:在APP平台会通过plus环境打开内置浏览器,在小程序中把链接复制到粘贴板,同时提示信息,在H5中通过window.open打开链接。
+	 * @tutorial https://www.uvui.cn/components/link.html
+	 * @property {String}			color		文字颜色 (默认 color['uv-primary'] )
+	 * @property {String | Number}	fontSize	字体大小,单位px (默认 15 )
+	 * @property {Boolean}			underLine	是否显示下划线 (默认 false )
+	 * @property {String}			href		跳转的链接,要带上http(s)
+	 * @property {String}			mpTips		各个小程序平台把链接复制到粘贴板后的提示语(默认“链接已复制,请在浏览器打开”)
+	 * @property {String}			lineColor	下划线颜色,默认同color参数颜色 
+	 * @property {String}			text		超链接的问题,不使用slot形式传入,是因为nvue下无法修改颜色 
+	 * @property {Object}			customStyle	定义需要用到的外部样式
+	 * 
+	 * @example <uv-link href="http://www.uvui.cn">蜀道难,难于上青天</uv-link>
+	 */
+	export default {
+		name: "uv-link",
+		emits:['click'],
+		mixins: [mpMixin, mixin, props],
+		computed: {
+			linkStyle() {
+				const style = {
+					color: this.color,
+					fontSize: this.$uv.addUnit(this.fontSize),
+					// line-height设置为比字体大小多2px
+					lineHeight: this.$uv.addUnit(this.$uv.getPx(this.fontSize) + 2),
+					textDecoration: this.underLine ? 'underline' : 'none'
+				}
+				return style
+			}
+		},
+		methods: {
+			openLink() {
+				// #ifdef APP-PLUS
+				plus.runtime.openURL(this.href)
+				// #endif
+				// #ifdef H5
+				window.open(this.href)
+				// #endif
+				// #ifdef MP
+				uni.setClipboardData({
+					data: this.href,
+					success: () => {
+						uni.hideToast();
+						this.$nextTick(() => {
+							this.$uv.toast(this.mpTips);
+						})
+					}
+				});
+				// #endif
+				this.$emit('click')
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import '@/uni_modules/uv-ui-tools/libs/css/components.scss';
+	@import '@/uni_modules/uv-ui-tools/libs/css/color.scss';
+	$uv-link-line-height:1 !default;
+
+	.uv-link {
+		/* #ifndef APP-NVUE */
+		line-height: $uv-link-line-height;
+		/* #endif */
+		@include flex;
+		flex-wrap: wrap;
+		flex: 1;
+		color: $uv-primary;
+	}
+</style>

+ 87 - 0
uni_modules/uv-link/package.json

@@ -0,0 +1,87 @@
+{
+  "id": "uv-link",
+  "displayName": "uv-link 超链接  全面兼容小程序、nvue、vue2、vue3等多端",
+  "version": "1.0.2",
+  "description": "uv-link 该组件为超链接组件",
+  "keywords": [
+    "uv-link",
+    "uvui",
+    "uv-ui",
+    "link",
+    "超链接"
+],
+  "repository": "",
+  "engines": {
+    "HBuilderX": "^3.1.0"
+  },
+  "dcloudext": {
+    "type": "component-vue",
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+    	"ads": "无",
+    	"data": "插件不采集任何数据",
+    	"permissions": "无"
+    },
+    "npmurl": ""
+  },
+  "uni_modules": {
+    "dependencies": [
+			"uv-ui-tools"
+		],
+    "encrypt": [],
+    "platforms": {
+			"cloud": {
+				"tcb": "y",
+				"aliyun": "y"
+			},
+			"client": {
+				"Vue": {
+					"vue2": "y",
+					"vue3": "y"
+				},
+				"App": {
+					"app-vue": "y",
+					"app-nvue": "y"
+				},
+				"H5-mobile": {
+					"Safari": "y",
+					"Android Browser": "y",
+					"微信浏览器(Android)": "y",
+					"QQ浏览器(Android)": "y"
+				},
+				"H5-pc": {
+					"Chrome": "y",
+					"IE": "y",
+					"Edge": "y",
+					"Firefox": "y",
+					"Safari": "y"
+				},
+				"小程序": {
+					"微信": "y",
+					"阿里": "y",
+					"百度": "y",
+					"字节跳动": "y",
+					"QQ": "y",
+					"钉钉": "u",
+					"快手": "u",
+					"飞书": "u",
+					"京东": "u"
+				},
+				"快应用": {
+					"华为": "u",
+					"联盟": "u"
+				}
+			}
+		}
+  }
+}

+ 11 - 0
uni_modules/uv-link/readme.md

@@ -0,0 +1,11 @@
+## Link 超链接
+
+> **组件名:uv-link**
+
+该组件为超链接组件,在不同平台有不同表现形式。
+
+### <a href="https://www.uvui.cn/components/link.html" target="_blank">查看文档</a>
+
+### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui)
+
+#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:<a href="https://ext.dcloud.net.cn/plugin?id=12287" target="_blank">uv-ui</a>、<a href="https://www.uvui.cn/components/addQQGroup.html" target="_blank">官方QQ群</a>

+ 5 - 0
uni_modules/uv-read-more/changelog.md

@@ -0,0 +1,5 @@
+## 1.0.1(2023-05-16)
+1. 优化组件依赖,修改后无需全局引入,组件导入即可使用
+2. 优化部分功能
+## 1.0.0(2023-05-10)
+uv-read-more 展开阅读更多

+ 62 - 0
uni_modules/uv-read-more/components/uv-read-more/props.js

@@ -0,0 +1,62 @@
+export default {
+	props: {
+		// 默认的显示占位高度
+		showHeight: {
+			type: [String, Number],
+			default: 400
+		},
+		// 展开后是否显示"收起"按钮
+		toggle: {
+			type: Boolean,
+			default: false
+		},
+		// 关闭时的提示文字
+		closeText: {
+			type: String,
+			default: '展开阅读全文'
+		},
+		// 展开时的提示文字
+		openText: {
+			type: String,
+			default: '收起'
+		},
+		// 提示的文字颜色
+		color: {
+			type: String,
+			default: '#2979ff'
+		},
+		// 提示文字的大小
+		fontSize: {
+			type: [String, Number],
+			default: 14
+		},
+		// 是否显示阴影
+		// 此参数不能写在props/readMore.js中进行默认配置,因为使用了条件编译,在外部js中
+		// uni无法准确识别当前是否处于nvue还是非nvue下
+		shadowStyle: {
+			type: Object,
+			default: () => ({
+				// #ifndef APP-NVUE
+				backgroundImage: 'linear-gradient(-180deg, rgba(255, 255, 255, 0) 0%, #fff 80%)',
+				// #endif
+				// #ifdef APP-NVUE
+				// nvue上不支持设置复杂的backgroundImage属性
+				backgroundImage: 'linear-gradient(to top, #fff, rgba(255, 255, 255, 0.5))',
+				// #endif
+				paddingTop: '100px',
+				marginTop: '-100px'
+			})
+		},
+		// 段落首行缩进的字符个数
+		textIndent: {
+			type: String,
+			default: '2em'
+		},
+		// open和close事件时,将此参数返回在回调参数中
+		name: {
+			type: [String, Number],
+			default: ''
+		},
+		...uni.$uv?.props?.readMore
+	}
+}

+ 138 - 0
uni_modules/uv-read-more/components/uv-read-more/uv-read-more.vue

@@ -0,0 +1,138 @@
+<template>
+	<view class="uv-read-more">
+		<view
+			class="uv-read-more__content"
+			:style="{
+				height: isLongContent && status === 'close' ? $uv.addUnit(showHeight) : $uv.addUnit(contentHeight),
+				textIndent: textIndent
+			}"
+		>
+			<view class="uv-read-more__content__inner" ref="uv-read-more__content__inner" :class="[elId]">
+				<slot></slot>
+			</view>
+		</view>
+		<view class="uv-read-more__toggle" :style="[innerShadowStyle]" v-if="isLongContent">
+			<slot name="toggle">
+				<view class="uv-read-more__toggle__text" @tap="toggleReadMore">
+					<uv-text :text="status === 'close' ? closeText : openText" :color="color" :size="fontSize" :lineHeight="fontSize" margin="0 5px 0 0"></uv-text>
+					<view class="uv-read-more__toggle__icon">
+						<uv-icon :color="color" :size="fontSize + 2" :name="status === 'close' ? 'arrow-down' : 'arrow-up'"></uv-icon>
+					</view>
+				</view>
+			</slot>
+		</view>
+	</view>
+</template>
+
+<script>
+import mpMixin from '@/uni_modules/uv-ui-tools/libs/mixin/mpMixin.js'
+import mixin from '@/uni_modules/uv-ui-tools/libs/mixin/mixin.js'
+// #ifdef APP-NVUE
+const dom = uni.requireNativePlugin('dom')
+// #endif
+import props from './props.js'
+/**
+ * readMore 阅读更多
+ * @description 该组件一般用于内容较长,预先收起一部分,点击展开全部内容的场景。
+ * @tutorial https://www.uvui.cn/components/readMore.html
+ * @property {String | Number}	showHeight	内容超出此高度才会显示展开全文按钮,单位px(默认 400 )
+ * @property {Boolean}			toggle		展开后是否显示收起按钮(默认 false )
+ * @property {String}			closeText	关闭时的提示文字(默认 '展开阅读全文' )
+ * @property {String}			openText	展开时的提示文字(默认 '收起' )
+ * @property {String}			color		提示文字的颜色(默认 '#2979ff' )
+ * @property {String | Number}	fontSize	提示文字的大小,单位px (默认 14 )
+ * @property {Object}			shadowStyle	显示阴影的样式
+ * @property {String}			textIndent	段落首行缩进的字符个数 (默认 '2em' )
+ * @property {String | Number}	name		用于在 open 和 close 事件中当作回调参数返回
+ * @event {Function} open 内容被展开时触发
+ * @event {Function} close 内容被收起时触发
+ * @example <uv-read-more><rich-text :nodes="content"></rich-text></uv-read-more>
+ */
+export default {
+	name: 'uv-read-more',
+	mixins: [mpMixin, mixin, props],
+	data() {
+		return {
+			isLongContent: false, // 是否需要隐藏一部分内容
+			status: 'close', // 当前隐藏与显示的状态,close-收起状态,open-展开状态
+			elId: '', // 生成唯一class
+			contentHeight: 100 // 内容高度
+		}
+	},
+	computed: {
+		// 展开后无需阴影,收起时才需要阴影样式
+		innerShadowStyle() {
+			if (this.status === 'open') return {}
+			else return this.shadowStyle
+		}
+	},
+	created() {
+		this.elId = this.$uv.guid()
+	},
+	mounted() {
+		this.init()
+	},
+	methods: {
+		async init() {
+			this.getContentHeight().then((height) => {
+				this.contentHeight = height
+				// 判断高度,如果真实内容高度大于占位高度,则显示收起与展开的控制按钮
+				if (height > this.$uv.getPx(this.showHeight)) {
+					this.isLongContent = true
+					this.status = 'close'
+				}
+			})
+		},
+		// 获取内容的高度
+		async getContentHeight() {
+			// 延时一定时间再获取节点
+			await this.$uv.sleep(30)
+			return new Promise((resolve) => {
+				// #ifndef APP-NVUE
+				this.$uvGetRect('.' + this.elId).then((res) => {
+					resolve(res.height)
+				})
+				// #endif
+
+				// #ifdef APP-NVUE
+				const ref = this.$refs['uv-read-more__content__inner']
+				dom.getComponentRect(ref, (res) => {
+					resolve(res.size.height)
+				})
+				// #endif
+			})
+		},
+		// 展开或者收起
+		toggleReadMore() {
+			this.status = this.status === 'close' ? 'open' : 'close'
+			// 如果toggle为false,隐藏"收起"部分的内容
+			if (this.toggle == false) this.isLongContent = false
+			// 发出打开或者收齐的事件
+			this.$emit(this.status, this.name)
+		}
+	}
+}
+</script>
+
+<style lang="scss" scoped>
+@import '@/uni_modules/uv-ui-tools/libs/css/components.scss';
+@import '@/uni_modules/uv-ui-tools/libs/css/color.scss';
+.uv-read-more {
+	&__content {
+		overflow: hidden;
+		color: $uv-content-color;
+		font-size: 15px;
+		text-align: left;
+	}
+
+	&__toggle {
+		@include flex;
+
+		&__text {
+			@include flex;
+			align-items: center;
+			justify-content: center;
+		}
+	}
+}
+</style>

+ 89 - 0
uni_modules/uv-read-more/package.json

@@ -0,0 +1,89 @@
+{
+  "id": "uv-read-more",
+  "displayName": "uv-read-more 展开阅读更多  全面兼容小程序、nvue、vue2、vue3等多端",
+  "version": "1.0.1",
+  "description": "uv-read-more 该组件一般用于内容较长,预先收起一部分,点击展开全部内容的场景。",
+  "keywords": [
+    "uv-read-more",
+    "uvui",
+    "uv-ui",
+    "read",
+    "展开阅读更多"
+],
+  "repository": "",
+  "engines": {
+    "HBuilderX": "^3.1.0"
+  },
+  "dcloudext": {
+    "type": "component-vue",
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+    	"ads": "无",
+    	"data": "插件不采集任何数据",
+    	"permissions": "无"
+    },
+    "npmurl": ""
+  },
+  "uni_modules": {
+    "dependencies": [
+			"uv-ui-tools",
+			"uv-icon",
+			"uv-text"
+		],
+    "encrypt": [],
+    "platforms": {
+			"cloud": {
+				"tcb": "y",
+				"aliyun": "y"
+			},
+			"client": {
+				"Vue": {
+					"vue2": "y",
+					"vue3": "y"
+				},
+				"App": {
+					"app-vue": "y",
+					"app-nvue": "y"
+				},
+				"H5-mobile": {
+					"Safari": "y",
+					"Android Browser": "y",
+					"微信浏览器(Android)": "y",
+					"QQ浏览器(Android)": "y"
+				},
+				"H5-pc": {
+					"Chrome": "y",
+					"IE": "y",
+					"Edge": "y",
+					"Firefox": "y",
+					"Safari": "y"
+				},
+				"小程序": {
+					"微信": "y",
+					"阿里": "y",
+					"百度": "y",
+					"字节跳动": "y",
+					"QQ": "y",
+					"钉钉": "u",
+					"快手": "u",
+					"飞书": "u",
+					"京东": "u"
+				},
+				"快应用": {
+					"华为": "u",
+					"联盟": "u"
+				}
+			}
+		}
+  }
+}

+ 11 - 0
uni_modules/uv-read-more/readme.md

@@ -0,0 +1,11 @@
+## ReadMore 展开阅读更多 
+
+> **组件名:uv-read-more**
+
+该组件一般用于内容较长,预先收起一部分,点击展开全部内容的场景。
+
+### <a href="https://www.uvui.cn/components/readMore.html" target="_blank">查看文档</a>
+
+### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui)
+
+#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:<a href="https://ext.dcloud.net.cn/plugin?id=12287" target="_blank">uv-ui</a>、<a href="https://www.uvui.cn/components/addQQGroup.html" target="_blank">官方QQ群</a>

+ 7 - 0
uni_modules/uv-text/changelog.md

@@ -0,0 +1,7 @@
+## 1.0.2(2023-05-24)
+1. 去掉多余的data-index属性,避免警告
+## 1.0.1(2023-05-16)
+1. 优化组件依赖,修改后无需全局引入,组件导入即可使用
+2. 优化部分功能
+## 1.0.0(2023-05-10)
+uv-text 文本组件

+ 113 - 0
uni_modules/uv-text/components/uv-text/props.js

@@ -0,0 +1,113 @@
+export default {
+	props: {
+		// 主题颜色
+		type: {
+			type: String,
+			default: ''
+		},
+		// 是否显示
+		show: {
+			type: Boolean,
+			default: true
+		},
+		// 显示的值
+		text: {
+			type: [String, Number],
+			default: ''
+		},
+		// 前置图标
+		prefixIcon: {
+			type: String,
+			default: ''
+		},
+		// 后置图标
+		suffixIcon: {
+			type: String,
+			default: ''
+		},
+		// 文本处理的匹配模式
+		// text-普通文本,price-价格,phone-手机号,name-姓名,date-日期,link-超链接
+		mode: {
+			type: String,
+			default: ''
+		},
+		// mode=link下,配置的链接
+		href: {
+			type: String,
+			default: ''
+		},
+		// 格式化规则
+		format: {
+			type: [String, Function],
+			default: ''
+		},
+		// mode=phone时,点击文本是否拨打电话
+		call: {
+			type: Boolean,
+			default: true
+		},
+		// 小程序的打开方式
+		openType: {
+			type: String,
+			default: ''
+		},
+		// 是否粗体,默认normal
+		bold: {
+			type: Boolean,
+			default: false
+		},
+		// 是否块状
+		block: {
+			type: Boolean,
+			default: false
+		},
+		// 文本显示的行数,如果设置,超出此行数,将会显示省略号
+		lines: {
+			type: [String, Number],
+			default: ''
+		},
+		// 文本颜色
+		color: {
+			type: String,
+			default: '#303133'
+		},
+		// 字体大小
+		size: {
+			type: [String, Number],
+			default: 15
+		},
+		// 图标的样式
+		iconStyle: {
+			type: [Object, String],
+			default: () => ({
+				fontSize: '15px'
+			})
+		},
+		// 文字装饰,下划线,中划线等,可选值 none|underline|line-through
+		decoration: {
+			type: String,
+			default: 'none'
+		},
+		// 外边距,对象、字符串,数值形式均可
+		margin: {
+			type: [Object, String, Number],
+			default: 0
+		},
+		// 文本行高
+		lineHeight: {
+			type: [String, Number],
+			default: ''
+		},
+		// 文本对齐方式,可选值left|center|right
+		align: {
+			type: String,
+			default: 'left'
+		},
+		// 文字换行,可选值break-word|normal|anywhere
+		wordWrap: {
+			type: String,
+			default: 'normal'
+		},
+		...uni.$uv?.props?.text
+	}
+}

+ 228 - 0
uni_modules/uv-text/components/uv-text/uv-text.vue

@@ -0,0 +1,228 @@
+<template>
+    <view
+        class="uv-text"
+        :class="[]"
+        v-if="show"
+        :style="{
+            margin: margin,
+			justifyContent: align === 'left' ? 'flex-start' : align === 'center' ? 'center' : 'flex-end'
+        }"
+        @tap="clickHandler"
+    >
+        <text
+            :class="['uv-text__price', type && `uv-text__value--${type}`]"
+            v-if="mode === 'price'"
+            :style="[valueStyle]"
+            >¥</text
+        >
+        <view class="uv-text__prefix-icon" v-if="prefixIcon">
+            <uv-icon
+                :name="prefixIcon"
+                :customStyle="$uv.addStyle(iconStyle)"
+            ></uv-icon>
+        </view>
+        <uv-link
+            v-if="mode === 'link'"
+            :text="value"
+            :href="href"
+            underLine
+        ></uv-link>
+        <template v-else-if="openType && isMp">
+            <button
+                class="uv-reset-button uv-text__value"
+                :style="[valueStyle]"
+                :openType="openType"
+                @getuserinfo="onGetUserInfo"
+                @contact="onContact"
+                @getphonenumber="onGetPhoneNumber"
+                @error="onError"
+                @launchapp="onLaunchApp"
+                @opensetting="onOpenSetting"
+                :lang="lang"
+                :session-from="sessionFrom"
+                :send-message-title="sendMessageTitle"
+                :send-message-path="sendMessagePath"
+                :send-message-img="sendMessageImg"
+                :show-message-card="showMessageCard"
+                :app-parameter="appParameter"
+            >
+                {{ value }}
+            </button>
+        </template>
+        <text
+            v-else
+            class="uv-text__value"
+            :style="[valueStyle]"
+            :class="[
+                type && `uv-text__value--${type}`,
+                lines && `uv-line-${lines}`
+            ]"
+            >{{ value }}</text
+        >
+        <view class="uv-text__suffix-icon" v-if="suffixIcon">
+            <uv-icon
+                :name="suffixIcon"
+                :customStyle="$uv.addStyle(iconStyle)"
+            ></uv-icon>
+        </view>
+    </view>
+</template>
+
+<script>
+import value from './value.js'
+import mpMixin from '@/uni_modules/uv-ui-tools/libs/mixin/mpMixin.js'
+import mixin from '@/uni_modules/uv-ui-tools/libs/mixin/mixin.js'
+import button from '@/uni_modules/uv-ui-tools/libs/mixin/button.js'
+import openType from '@/uni_modules/uv-ui-tools/libs/mixin/openType.js'
+import props from './props.js'
+/**
+ * Text 文本
+ * @description 此组件集成了文本类在项目中的常用功能,包括状态,拨打电话,格式化日期,*替换,超链接...等功能。 您大可不必在使用特殊文本时自己定义,text组件几乎涵盖您能使用的大部分场景。
+ * @tutorial https://www.uvui.cn/components/loading.html
+ * @property {String} 					type		主题颜色
+ * @property {Boolean} 					show		是否显示(默认 true )
+ * @property {String | Number}			text		显示的值
+ * @property {String}					prefixIcon	前置图标
+ * @property {String} 					suffixIcon	后置图标
+ * @property {String} 					mode		文本处理的匹配模式 text-普通文本,price-价格,phone-手机号,name-姓名,date-日期,link-超链接
+ * @property {String} 					href		mode=link下,配置的链接
+ * @property {String | Function} 		format		格式化规则
+ * @property {Boolean} 					call		mode=phone时,点击文本是否拨打电话(默认 false )
+ * @property {String} 					openType	小程序的打开方式
+ * @property {Boolean} 					bold		是否粗体,默认normal(默认 false )
+ * @property {Boolean} 					block		是否块状(默认 false )
+ * @property {String | Number} 			lines		文本显示的行数,如果设置,超出此行数,将会显示省略号
+ * @property {String} 					color		文本颜色(默认 '#303133' )
+ * @property {String | Number} 			size		字体大小(默认 15 )
+ * @property {Object | String} 			iconStyle	图标的样式 (默认 {fontSize: '15px'} )
+ * @property {String} 					decoration	文字装饰,下划线,中划线等,可选值 none|underline|line-through(默认 'none' )
+ * @property {Object | String | Number}	margin		外边距,对象、字符串,数值形式均可(默认 0 )
+ * @property {String | Number} 			lineHeight	文本行高
+ * @property {String} 					align		文本对齐方式,可选值left|center|right(默认 'left' )
+ * @property {String} 					wordWrap	文字换行,可选值break-word|normal|anywhere(默认 'normal' )
+ * @event {Function} click  点击触发事件
+ * @example <uv-text text="我用十年青春,赴你最后之约"></uv-text>
+ */
+export default {
+    name: 'uv-text',
+		emits: ['click'],
+    // #ifdef MP
+    mixins: [mpMixin, mixin, value, button, openType, props],
+    // #endif
+    // #ifndef MP
+    mixins: [mpMixin, mixin, value, props],
+    // #endif
+    computed: {
+        valueStyle() {
+            const style = {
+                textDecoration: this.decoration,
+                fontWeight: this.bold ? 'bold' : 'normal',
+                wordWrap: this.wordWrap,
+                fontSize: this.$uv.addUnit(this.size)
+            }
+            !this.type && (style.color = this.color)
+            this.isNvue && this.lines && (style.lines = this.lines)
+            this.lineHeight &&
+                (style.lineHeight = this.$uv.addUnit(this.lineHeight))
+            !this.isNvue && this.block && (style.display = 'block')
+            return this.$uv.deepMerge(style, this.$uv.addStyle(this.customStyle))
+        },
+        isNvue() {
+            let nvue = false
+            // #ifdef APP-NVUE
+            nvue = true
+            // #endif
+            return nvue
+        },
+        isMp() {
+            let mp = false
+            // #ifdef MP
+            mp = true
+            // #endif
+            return mp
+        }
+    },
+    data() {
+        return {}
+    },
+    methods: {
+        clickHandler() {
+            // 如果为手机号模式,拨打电话
+            if (this.call && this.mode === 'phone') {
+                uni.makePhoneCall({
+                    phoneNumber: this.text
+                })
+            }
+            this.$emit('click')
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+	$show-lines: 1;
+	$show-reset-button: 1;
+	@import '@/uni_modules/uv-ui-tools/libs/css/variable.scss';
+	@import '@/uni_modules/uv-ui-tools/libs/css/components.scss';
+	@import '@/uni_modules/uv-ui-tools/libs/css/color.scss';
+.uv-text {
+    @include flex(row);
+    align-items: center;
+    flex-wrap: nowrap;
+    flex: 1;
+	/* #ifndef APP-NVUE */
+	width: 100%;
+	/* #endif */
+
+    &__price {
+        font-size: 14px;
+        color: $uv-content-color;
+    }
+
+    &__value {
+        font-size: 14px;
+        @include flex;
+        color: $uv-content-color;
+        flex-wrap: wrap;
+        // flex: 1;
+        text-overflow: ellipsis;
+        align-items: center;
+
+        &--primary {
+            color: $uv-primary;
+        }
+
+        &--warning {
+            color: $uv-warning;
+        }
+
+        &--success {
+            color: $uv-success;
+        }
+
+        &--info {
+            color: $uv-info;
+        }
+
+        &--error {
+            color: $uv-error;
+        }
+
+        &--main {
+            color: $uv-main-color;
+        }
+
+        &--content {
+            color: $uv-content-color;
+        }
+
+        &--tips {
+            color: $uv-tips-color;
+        }
+
+        &--light {
+            color: $uv-light-color;
+        }
+    }
+}
+</style>

+ 87 - 0
uni_modules/uv-text/components/uv-text/value.js

@@ -0,0 +1,87 @@
+import { func, date, url } from '@/uni_modules/uv-ui-tools/libs/function/test.js'
+import { error, timeFormat, priceFormat } from '@/uni_modules/uv-ui-tools/libs/function/index.js'
+export default {
+    computed: {
+        // 经处理后需要显示的值
+        value() {
+            const {
+                text,
+                mode,
+                format,
+                href
+            } = this
+            // 价格类型
+            if (mode === 'price') {
+                // 如果text不为金额进行提示
+                if (!/^\d+(\.\d+)?$/.test(text)) {
+                    error('金额模式下,text参数需要为金额格式');
+                }
+                // 进行格式化,判断用户传入的format参数为正则,或者函数,如果没有传入format,则使用默认的金额格式化处理
+                if (func(format)) {
+                    // 如果用户传入的是函数,使用函数格式化
+                    return format(text)
+                }
+                // 如果format非正则,非函数,则使用默认的金额格式化方法进行操作
+                return priceFormat(text, 2)
+            } if (mode === 'date') {
+                // 判断是否合法的日期或者时间戳
+                !date(text) && error('日期模式下,text参数需要为日期或时间戳格式')
+                // 进行格式化,判断用户传入的format参数为正则,或者函数,如果没有传入format,则使用默认的格式化处理
+                if (func(format)) {
+                    // 如果用户传入的是函数,使用函数格式化
+                    return format(text)
+                } if (format) {
+                    // 如果format非正则,非函数,则使用默认的时间格式化方法进行操作
+                    return timeFormat(text, format)
+                }
+                // 如果没有设置format,则设置为默认的时间格式化形式
+                return timeFormat(text, 'yyyy-mm-dd')
+            } if (mode === 'phone') {
+                // 判断是否合法的手机号
+                // !mobile(text) && error('手机号模式下,text参数需要为手机号码格式')
+                if (func(format)) {
+                    // 如果用户传入的是函数,使用函数格式化
+                    return format(text)
+                } if (format === 'encrypt') {
+                    // 如果format为encrypt,则将手机号进行星号加密处理
+                    return `${text.substr(0, 3)}****${text.substr(7)}`
+                }
+                return text
+            } if (mode === 'name') {
+                // 判断是否合法的字符粗
+                !(typeof (text) === 'string') && error('姓名模式下,text参数需要为字符串格式')
+                if (func(format)) {
+                    // 如果用户传入的是函数,使用函数格式化
+                    return format(text)
+                } if (format === 'encrypt') {
+                    // 如果format为encrypt,则将姓名进行星号加密处理
+                    return this.formatName(text)
+                }
+                return text
+            } if (mode === 'link') {
+                // 判断是否合法的字符粗
+                !url(href) && error('超链接模式下,href参数需要为URL格式')
+                return text
+            }
+            return text
+        }
+    },
+    methods: {
+        // 默认的姓名脱敏规则
+        formatName(name) {
+            let value = ''
+            if (name.length === 2) {
+                value = name.substr(0, 1) + '*'
+            } else if (name.length > 2) {
+                let char = ''
+                for (let i = 0, len = name.length - 2; i < len; i++) {
+                    char += '*'
+                }
+                value = name.substr(0, 1) + char + name.substr(-1, 1)
+            } else {
+                value = name
+            }
+            return value
+        }
+    }
+}

+ 89 - 0
uni_modules/uv-text/package.json

@@ -0,0 +1,89 @@
+{
+  "id": "uv-text",
+  "displayName": "uv-text 文本  全面兼容小程序、nvue、vue2、vue3等多端",
+  "version": "1.0.2",
+  "description": "此组件集成了文本类在项目中的常用功能,包括状态,拨打电话,格式化日期,*替换,超链接...等功能。 您大可不必在使用特殊文本时自己定义,text组件涵盖您能使用的大部分场景。",
+  "keywords": [
+    "uv-text",
+    "uvui",
+    "uv-ui",
+    "text",
+    "文本"
+],
+  "repository": "",
+  "engines": {
+    "HBuilderX": "^3.1.0"
+  },
+  "dcloudext": {
+    "type": "component-vue",
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+    	"ads": "无",
+    	"data": "插件不采集任何数据",
+    	"permissions": "无"
+    },
+    "npmurl": ""
+  },
+  "uni_modules": {
+    "dependencies": [
+			"uv-ui-tools",
+			"uv-icon",
+			"uv-link"
+		],
+    "encrypt": [],
+    "platforms": {
+			"cloud": {
+				"tcb": "y",
+				"aliyun": "y"
+			},
+			"client": {
+				"Vue": {
+					"vue2": "y",
+					"vue3": "y"
+				},
+				"App": {
+					"app-vue": "y",
+					"app-nvue": "y"
+				},
+				"H5-mobile": {
+					"Safari": "y",
+					"Android Browser": "y",
+					"微信浏览器(Android)": "y",
+					"QQ浏览器(Android)": "y"
+				},
+				"H5-pc": {
+					"Chrome": "y",
+					"IE": "y",
+					"Edge": "y",
+					"Firefox": "y",
+					"Safari": "y"
+				},
+				"小程序": {
+					"微信": "y",
+					"阿里": "y",
+					"百度": "y",
+					"字节跳动": "y",
+					"QQ": "y",
+					"钉钉": "u",
+					"快手": "u",
+					"飞书": "u",
+					"京东": "u"
+				},
+				"快应用": {
+					"华为": "u",
+					"联盟": "u"
+				}
+			}
+		}
+  }
+}

+ 11 - 0
uni_modules/uv-text/readme.md

@@ -0,0 +1,11 @@
+## Text 文本
+
+> **组件名:uv-text**
+
+此组件集成了文本类在项目中的常用功能,包括状态,拨打电话,格式化日期,*替换,超链接...等功能。 您大可不必在使用特殊文本时自己定义,text组件涵盖您能使用的大部分场景。
+
+### <a href="https://www.uvui.cn/components/text.html" target="_blank">查看文档</a>
+
+### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui)
+
+#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:<a href="https://ext.dcloud.net.cn/plugin?id=12287" target="_blank">uv-ui</a>、<a href="https://www.uvui.cn/components/addQQGroup.html" target="_blank">官方QQ群</a>

+ 6 - 0
uni_modules/uv-ui-tools/changelog.md

@@ -1,3 +1,9 @@
+## 1.1.7(2023-08-22)
+1. 版本升级
+## 1.1.6(2023-08-18)
+uvui版本:1.1.6
+## 1.0.15(2023-08-14)
+1. 更新uvui版本号
 ## 1.0.13(2023-08-06)
 1. 优化
 ## 1.0.12(2023-08-06)

+ 2 - 2
uni_modules/uv-ui-tools/libs/config/config.js

@@ -1,5 +1,5 @@
-// 此版本发布于2023-08-06
-const version = '1.1.3'
+// 此版本发布于2023-08-22
+const version = '1.1.7'
 
 // 开发环境才提示,生产环境不会提示
 if (process.env.NODE_ENV === 'development') {

+ 1 - 1
uni_modules/uv-ui-tools/package.json

@@ -1,7 +1,7 @@
 {
   "id": "uv-ui-tools",
   "displayName": "uv-ui-tools 工具集 全面兼容vue3+2、app、h5、小程序等多端",
-  "version": "1.0.13",
+  "version": "1.1.7",
   "description": "uv-ui-tools,集成工具库,强大的Http请求封装,清晰的文档说明,开箱即用。方便使用,可以全局使用",
   "keywords": [
     "uv-ui-tools,uv-ui组件库,工具集,uvui,uView2.x"