Browse Source

Merge branch 'master' of http://git.zthymaoyi.com/zyw/tourism

# Conflicts:
#	uni_applet/pages/food/food.vue
achao 2 years ago
parent
commit
426fa07117
70 changed files with 10141 additions and 108 deletions
  1. 22 5
      uni_applet/App.vue
  2. 184 0
      uni_applet/colorui/animation.css
  3. 65 0
      uni_applet/colorui/components/cu-custom.vue
  4. 36 0
      uni_applet/colorui/icon.css
  5. 3935 0
      uni_applet/colorui/main.css
  6. 373 0
      uni_applet/pageA/enter/cateringindustry.vue
  7. 386 0
      uni_applet/pageA/enter/enter.vue
  8. 283 0
      uni_applet/pageA/enter/homestay.vue
  9. 270 0
      uni_applet/pageA/enter/hotel.vue
  10. 338 0
      uni_applet/pageA/enter/myCateringdustry/addGroupBuying.vue
  11. 342 0
      uni_applet/pageA/enter/myCateringdustry/addGroupBuyingNext.vue
  12. 262 0
      uni_applet/pageA/enter/myCateringdustry/addfood.vue
  13. 413 0
      uni_applet/pageA/enter/myCateringdustry/edit.vue
  14. 197 0
      uni_applet/pageA/enter/myCateringdustry/index.vue
  15. 154 0
      uni_applet/pageA/enter/myCateringdustry/shopSetting/editCertificate.vue
  16. 161 0
      uni_applet/pageA/enter/myCateringdustry/shopSetting/editFoodClassify.vue
  17. 147 0
      uni_applet/pageA/enter/myCateringdustry/shopSetting/editShopImage.vue
  18. 181 0
      uni_applet/pageA/enter/myCateringdustry/shopSetting/editShopInformation.vue
  19. 263 0
      uni_applet/pageA/enter/myCateringdustry/shopSetting/foodInfomation.vue
  20. 22 0
      uni_applet/pageA/enter/myCateringdustry/shopSetting/groupBuying.vue
  21. 313 0
      uni_applet/pageA/enter/myCateringdustry/shopSetting/index.vue
  22. 22 0
      uni_applet/pageA/enter/myCateringdustry/shopSetting/lookGroupBuying.vue
  23. 22 0
      uni_applet/pageA/enter/myCateringdustry/shopSetting/saleroom.vue
  24. 22 0
      uni_applet/pageA/enter/myHomestay/add.vue
  25. 22 0
      uni_applet/pageA/enter/myHomestay/edit.vue
  26. 42 0
      uni_applet/pageA/enter/myHomestay/index.vue
  27. 22 0
      uni_applet/pageA/enter/myHomestay/search.vue
  28. 3 3
      uni_applet/pageA/find/createLifeService.vue
  29. 22 0
      uni_applet/pageA/my/bill.vue
  30. 22 0
      uni_applet/pageA/my/my.vue
  31. 98 0
      uni_applet/pageA/notice/index.vue
  32. 22 0
      uni_applet/pageA/notice/noticedetail.vue
  33. 24 0
      uni_applet/pageA/webview.vue
  34. 261 14
      uni_applet/pages.json
  35. 111 73
      uni_applet/pages/find/find.vue
  36. 52 3
      uni_applet/pages/my/my.vue
  37. BIN
      uni_applet/static/image/enter/camera.png
  38. BIN
      uni_applet/static/image/enter/jingyingxukezheng.png
  39. BIN
      uni_applet/static/image/enter/news.png
  40. BIN
      uni_applet/static/image/enter/yingyezhizhao.png
  41. BIN
      uni_applet/static/image/find/camera.png
  42. BIN
      uni_applet/static/image/nav-icon/antOutline-team Copy.png
  43. BIN
      uni_applet/static/image/nav-icon/antOutline-team.png
  44. 0 0
      uni_applet/static/image/nav-icon/antOutline-user1 Copy.png
  45. 0 0
      uni_applet/static/image/nav-icon/antOutline-user1.png
  46. BIN
      uni_applet/static/image/nav-icon/md-notifications_none Copy.png
  47. BIN
      uni_applet/static/image/nav-icon/md-notifications_none.png
  48. BIN
      uni_applet/static/image/yjt.png
  49. 35 0
      uni_applet/style/mercharts_icon/iconfont.css
  50. 60 0
      uni_applet/style/mercharts_icon/iconfont_colors.css
  51. 8 0
      uni_applet/uni_modules/lxm-fold-link/luyj-grid-link/changelog.md
  52. 102 0
      uni_applet/uni_modules/lxm-fold-link/luyj-grid-link/components/luyj-grid-link/luyj-grid-link.vue
  53. 175 0
      uni_applet/uni_modules/lxm-fold-link/luyj-grid-link/readme.md
  54. 0 0
      uni_applet/uni_modules/lxm-fold-link/lxm-fold-grid/changelog.md
  55. 166 0
      uni_applet/uni_modules/lxm-fold-link/lxm-fold-grid/pages/lxm-fold-grid/lxm-fold-grid.vue
  56. 21 0
      uni_applet/uni_modules/lxm-fold-link/lxm-fold-grid/pages/toUrl/toUrl.vue
  57. 173 0
      uni_applet/uni_modules/lxm-fold-link/lxm-fold-grid/readme.md
  58. 1 1
      uni_applet/uni_modules/mescroll-uni/components/mescroll-uni/components/mescroll-up.css
  59. 6 0
      uni_applet/uni_modules/smh-time-range/changelog.md
  60. 208 0
      uni_applet/uni_modules/smh-time-range/components/smh-time-range/smh-time-range.vue
  61. 40 0
      uni_applet/uni_modules/smh-time-range/readme.md
  62. 3 0
      uni_applet/uni_modules/uview-ui/components/u-textarea/u-textarea.vue
  63. 2 2
      uni_merchants_enter/manifest.json
  64. 23 3
      uni_merchants_enter/pageA/enter/myHomestay/index.vue
  65. 1 1
      uni_merchants_enter/pages/enter/enter.vue
  66. BIN
      uni_merchants_enter/static/image/nav-icon/antOutline-user1 Copy.png
  67. BIN
      uni_merchants_enter/static/image/nav-icon/antOutline-user1.png
  68. 1 1
      uni_merchants_enter/util/request.js
  69. 1 1
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/tourism/impl/FoodInfoServiceImpl.java
  70. 1 1
      unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/tourism/impl/ProductManagementServiceImpl.java

+ 22 - 5
uni_applet/App.vue

@@ -19,12 +19,15 @@
 	/*每个页面公共css */
 	@import "@/uni_modules/uview-ui/index.scss";
 	@import '@/uni_modules/uni-scss/index.scss';
+	@import "colorui/main.css";
 	@import '@/static/styles/index.scss';
 	@import '@/style/icons/iconfont.css';
 	@import '@/style/icons/iconfont-colors.css';
+	@import '@/style/mercharts_icon/iconfont.css';
+	@import '@/style/mercharts_icon/iconfont_colors.css';
 	// 设置整个项目的背景色
 	page {
-		background-color: #f7f4ed;
+		background-color: #F2F6F9;
 	}
 	.content{
 		padding-bottom:150rpx;
@@ -33,6 +36,7 @@
 		background:#fff;
 		border-radius:20rpx;
 		margin:20rpx;
+		padding:20rpx;
 	}
 	.caution{
 		color:red;
@@ -62,9 +66,22 @@
 	}
 	.detailedAddress{
 		width:600rpx;
-		overflow:hidden;
-		white-space: nowrap;
-		text-overflow: ellipsis;
-		-o-text-overflow:ellipsis;
+	}
+	.merchants_button,.merchants_unable_button,.merchants_default_button,.merchants_caution_button{
+		background:#5F7DE9;
+		color:#fff;
+		padding:5rpx 20rpx;
+		border-radius: 10rpx;
+	}
+	.merchants_default_button{
+		background:#fff;
+		color:#000;
+		border:2rpx solid #5F7DE9;
+	}
+	.merchants_caution_button{
+		background:red;
+	}
+	.merchants_unable_button{
+		background:#999;
 	}
 </style>

+ 184 - 0
uni_applet/colorui/animation.css

@@ -0,0 +1,184 @@
+/* 
+  Animation 微动画  
+  基于ColorUI组建库的动画模块 by 文晓港 2019年3月26日19:52:28
+ */
+
+/* css 滤镜 控制黑白底色gif的 */
+.gif-black{  
+  mix-blend-mode: screen;  
+}
+.gif-white{  
+  mix-blend-mode: multiply; 
+}
+
+
+/* Animation css */
+[class*=animation-] {
+    animation-duration: .5s;
+    animation-timing-function: ease-out;
+    animation-fill-mode: both
+}
+
+.animation-fade {
+    animation-name: fade;
+    animation-duration: .8s;
+    animation-timing-function: linear
+}
+
+.animation-scale-up {
+    animation-name: scale-up
+}
+
+.animation-scale-down {
+    animation-name: scale-down
+}
+
+.animation-slide-top {
+    animation-name: slide-top
+}
+
+.animation-slide-bottom {
+    animation-name: slide-bottom
+}
+
+.animation-slide-left {
+    animation-name: slide-left
+}
+
+.animation-slide-right {
+    animation-name: slide-right
+}
+
+.animation-shake {
+    animation-name: shake
+}
+
+.animation-reverse {
+    animation-direction: reverse
+}
+
+@keyframes fade {
+    0% {
+        opacity: 0
+    }
+
+    100% {
+        opacity: 1
+    }
+}
+
+@keyframes scale-up {
+    0% {
+        opacity: 0;
+        transform: scale(.2)
+    }
+
+    100% {
+        opacity: 1;
+        transform: scale(1)
+    }
+}
+
+@keyframes scale-down {
+    0% {
+        opacity: 0;
+        transform: scale(1.8)
+    }
+
+    100% {
+        opacity: 1;
+        transform: scale(1)
+    }
+}
+
+@keyframes slide-top {
+    0% {
+        opacity: 0;
+        transform: translateY(-100%)
+    }
+
+    100% {
+        opacity: 1;
+        transform: translateY(0)
+    }
+}
+
+@keyframes slide-bottom {
+    0% {
+        opacity: 0;
+        transform: translateY(100%)
+    }
+
+    100% {
+        opacity: 1;
+        transform: translateY(0)
+    }
+}
+
+@keyframes shake {
+
+    0%,
+    100% {
+        transform: translateX(0)
+    }
+
+    10% {
+        transform: translateX(-9px)
+    }
+
+    20% {
+        transform: translateX(8px)
+    }
+
+    30% {
+        transform: translateX(-7px)
+    }
+
+    40% {
+        transform: translateX(6px)
+    }
+
+    50% {
+        transform: translateX(-5px)
+    }
+
+    60% {
+        transform: translateX(4px)
+    }
+
+    70% {
+        transform: translateX(-3px)
+    }
+
+    80% {
+        transform: translateX(2px)
+    }
+
+    90% {
+        transform: translateX(-1px)
+    }
+}
+
+@keyframes slide-left {
+    0% {
+        opacity: 0;
+        transform: translateX(-100%)
+    }
+
+    100% {
+        opacity: 1;
+        transform: translateX(0)
+    }
+}
+
+@keyframes slide-right {
+    0% {
+        opacity: 0;
+        transform: translateX(100%)
+    }
+
+    100% {
+        opacity: 1;
+        transform: translateX(0)
+    }
+}

+ 65 - 0
uni_applet/colorui/components/cu-custom.vue

@@ -0,0 +1,65 @@
+<template>
+	<view>
+		<view class="cu-custom" :style="[{height:CustomBar + 'px'}]">
+			<view class="cu-bar fixed" :style="style" :class="[bgImage!=''?'none-bg text-white bg-img':'',bgColor]">
+				<view class="action" @tap="BackPage" v-if="isBack">
+					<text class="cuIcon-back"></text>
+					<slot name="backText"></slot>
+				</view>
+				<view class="content" :style="[{top:StatusBar + 'px'}]">
+					<slot name="content"></slot>
+				</view>
+				<slot name="right"></slot>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				StatusBar: this.StatusBar,
+				CustomBar: this.CustomBar
+			};
+		},
+		name: 'cu-custom',
+		computed: {
+			style() {
+				var StatusBar= this.StatusBar;
+				var CustomBar= this.CustomBar;
+				var bgImage = this.bgImage;
+				var style = `height:${CustomBar}px;padding-top:${StatusBar}px;`;
+				if (this.bgImage) {
+					style = `${style}background-image:url(${bgImage});`;
+				}
+				return style
+			}
+		},
+		props: {
+			bgColor: {
+				type: String,
+				default: ''
+			},
+			isBack: {
+				type: [Boolean, String],
+				default: false
+			},
+			bgImage: {
+				type: String,
+				default: ''
+			},
+		},
+		methods: {
+			BackPage() {
+				uni.navigateBack({
+					delta: 1
+				});
+			}
+		}
+	}
+</script>
+
+<style>
+
+</style>

File diff suppressed because it is too large
+ 36 - 0
uni_applet/colorui/icon.css


+ 3935 - 0
uni_applet/colorui/main.css

@@ -0,0 +1,3935 @@
+/*
+  ColorUi for uniApp  v2.1.6 | by 文晓港 2019-05-31 10:44:24
+  仅供学习交流,如作它用所承受的法律责任一概与作者无关  
+  
+  *使用ColorUi开发扩展与插件时,请注明基于ColorUi开发 
+  
+  (QQ交流群:240787041)
+*/
+
+/* ==================
+        初始化
+ ==================== */
+body {
+	background-color: #f1f1f1;
+	font-size: 28upx;
+	color: #333333;
+	font-family: Helvetica Neue, Helvetica, sans-serif;
+}
+
+view,
+scroll-view,
+swiper,
+button,
+input,
+textarea,
+label,
+navigator,
+image {
+	box-sizing: border-box;
+}
+
+.round {
+	border-radius: 5000upx;
+}
+
+.radius {
+	border-radius: 6upx;
+}
+
+/* ==================
+          图片
+ ==================== */
+
+image {
+	max-width: 100%;
+	display: inline-block;
+	position: relative;
+	z-index: 0;
+}
+
+image.loading::before {
+	content: "";
+	background-color: #f5f5f5;
+	display: block;
+	position: absolute;
+	width: 100%;
+	height: 100%;
+	z-index: -2;
+}
+
+image.loading::after {
+	content: "\e7f1";
+	font-family: "cuIcon";
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 32upx;
+	height: 32upx;
+	line-height: 32upx;
+	right: 0;
+	bottom: 0;
+	z-index: -1;
+	font-size: 32upx;
+	margin: auto;
+	color: #ccc;
+	-webkit-animation: cuIcon-spin 2s infinite linear;
+	animation: cuIcon-spin 2s infinite linear;
+	display: block;
+}
+
+.response {
+	width: 100%;
+}
+
+/* ==================
+         开关
+ ==================== */
+
+switch,
+checkbox,
+radio {
+	position: relative;
+}
+
+switch::after,
+switch::before {
+	font-family: "cuIcon";
+	content: "\e645";
+	position: absolute;
+	color: #ffffff !important;
+	top: 0%;
+	left: 0upx;
+	font-size: 26upx;
+	line-height: 26px;
+	width: 50%;
+	text-align: center;
+	pointer-events: none;
+	transform: scale(0, 0);
+	transition: all 0.3s ease-in-out 0s;
+	z-index: 9;
+	bottom: 0;
+	height: 26px;
+	margin: auto;
+}
+
+switch::before {
+	content: "\e646";
+	right: 0;
+	transform: scale(1, 1);
+	left: auto;
+}
+
+switch[checked]::after,
+switch.checked::after {
+	transform: scale(1, 1);
+}
+
+switch[checked]::before,
+switch.checked::before {
+	transform: scale(0, 0);
+}
+
+/* #ifndef MP-ALIPAY */
+radio::before,
+checkbox::before {
+	font-family: "cuIcon";
+	content: "\e645";
+	position: absolute;
+	color: #ffffff !important;
+	top: 50%;
+	margin-top: -8px;
+	right: 5px;
+	font-size: 32upx;
+	line-height: 16px;
+	pointer-events: none;
+	transform: scale(1, 1);
+	transition: all 0.3s ease-in-out 0s;
+	z-index: 9;
+}
+
+radio .wx-radio-input,
+checkbox .wx-checkbox-input,
+radio .uni-radio-input,
+checkbox .uni-checkbox-input {
+	margin: 0;
+	width: 24px;
+	height: 24px;
+}
+
+checkbox.round .wx-checkbox-input,
+checkbox.round .uni-checkbox-input {
+	border-radius: 100upx;
+}
+
+/* #endif */
+
+switch[checked]::before {
+	transform: scale(0, 0);
+}
+
+switch .wx-switch-input,
+switch .uni-switch-input {
+	border: none;
+	padding: 0 24px;
+	width: 48px;
+	height: 26px;
+	margin: 0;
+	border-radius: 100upx;
+}
+
+switch .wx-switch-input:not([class*="bg-"]),
+switch .uni-switch-input:not([class*="bg-"]) {
+	background: #8799a3 !important;
+}
+
+switch .wx-switch-input::after,
+switch .uni-switch-input::after {
+	margin: auto;
+	width: 26px;
+	height: 26px;
+	border-radius: 100upx;
+	left: 0upx;
+	top: 0upx;
+	bottom: 0upx;
+	position: absolute;
+	transform: scale(0.9, 0.9);
+	transition: all 0.1s ease-in-out 0s;
+}
+
+switch .wx-switch-input.wx-switch-input-checked::after,
+switch .uni-switch-input.uni-switch-input-checked::after {
+	margin: auto;
+	left: 22px;
+	box-shadow: none;
+	transform: scale(0.9, 0.9);
+}
+
+radio-group {
+	display: inline-block;
+}
+
+
+
+switch.radius .wx-switch-input::after,
+switch.radius .wx-switch-input,
+switch.radius .wx-switch-input::before,
+switch.radius .uni-switch-input::after,
+switch.radius .uni-switch-input,
+switch.radius .uni-switch-input::before {
+	border-radius: 10upx;
+}
+
+switch .wx-switch-input::before,
+radio.radio::before,
+checkbox .wx-checkbox-input::before,
+radio .wx-radio-input::before,
+switch .uni-switch-input::before,
+radio.radio::before,
+checkbox .uni-checkbox-input::before,
+radio .uni-radio-input::before {
+	display: none;
+}
+
+radio.radio[checked]::after,
+radio.radio .uni-radio-input-checked::after {
+	content: "";
+	background-color: transparent;
+	display: block;
+	position: absolute;
+	width: 8px;
+	height: 8px;
+	z-index: 999;
+	top: 0upx;
+	left: 0upx;
+	right: 0;
+	bottom: 0;
+	margin: auto;
+	border-radius: 200upx;
+	/* #ifndef MP */
+	border: 7px solid #ffffff !important;
+	/* #endif */
+
+	/* #ifdef MP */
+	border: 8px solid #ffffff !important;
+	/* #endif */
+}
+
+.switch-sex::after {
+	content: "\e71c";
+}
+
+.switch-sex::before {
+	content: "\e71a";
+}
+
+.switch-sex .wx-switch-input,
+.switch-sex .uni-switch-input {
+	background: #e54d42 !important;
+	border-color: #e54d42 !important;
+}
+
+.switch-sex[checked] .wx-switch-input,
+.switch-sex.checked .uni-switch-input {
+	background: #0081ff !important;
+	border-color: #0081ff !important;
+}
+
+.switch-organ::after {
+	/* content: "\e71c"; */
+	content: "主企";
+	/* font-size: 12rpx; */
+}
+
+.switch-organ::before {
+	/* content: "\e71a"; */
+	/* content: "非主企业"; */
+}
+
+.switch-organ .wx-switch-input,
+.switch-organ .uni-switch-input {
+	background: #e54d42 !important;
+	border-color: #e54d42 !important;
+}
+
+.switch-organ[checked] .wx-switch-input,
+.switch-organ.checked .uni-switch-input {
+	background: #00BEB7 !important;
+	border-color: #00BEB7 !important;
+}
+
+switch.red[checked] .wx-switch-input.wx-switch-input-checked,
+checkbox.red[checked] .wx-checkbox-input,
+radio.red[checked] .wx-radio-input,
+switch.red.checked .uni-switch-input.uni-switch-input-checked,
+checkbox.red.checked .uni-checkbox-input,
+radio.red.checked .uni-radio-input {
+	background-color: #e54d42 !important;
+	border-color: #e54d42 !important;
+	color: #ffffff !important;
+}
+
+switch.orange[checked] .wx-switch-input,
+checkbox.orange[checked] .wx-checkbox-input,
+radio.orange[checked] .wx-radio-input,
+switch.orange.checked .uni-switch-input,
+checkbox.orange.checked .uni-checkbox-input,
+radio.orange.checked .uni-radio-input {
+	background-color: #f37b1d !important;
+	border-color: #f37b1d !important;
+	color: #ffffff !important;
+}
+
+switch.yellow[checked] .wx-switch-input,
+checkbox.yellow[checked] .wx-checkbox-input,
+radio.yellow[checked] .wx-radio-input,
+switch.yellow.checked .uni-switch-input,
+checkbox.yellow.checked .uni-checkbox-input,
+radio.yellow.checked .uni-radio-input {
+	background-color: #fbbd08 !important;
+	border-color: #fbbd08 !important;
+	color: #333333 !important;
+}
+
+switch.olive[checked] .wx-switch-input,
+checkbox.olive[checked] .wx-checkbox-input,
+radio.olive[checked] .wx-radio-input,
+switch.olive.checked .uni-switch-input,
+checkbox.olive.checked .uni-checkbox-input,
+radio.olive.checked .uni-radio-input {
+	background-color: #8dc63f !important;
+	border-color: #8dc63f !important;
+	color: #ffffff !important;
+}
+
+switch.green[checked] .wx-switch-input,
+switch[checked] .wx-switch-input,
+checkbox.green[checked] .wx-checkbox-input,
+checkbox[checked] .wx-checkbox-input,
+radio.green[checked] .wx-radio-input,
+radio[checked] .wx-radio-input,
+switch.green.checked .uni-switch-input,
+switch.checked .uni-switch-input,
+checkbox.green.checked .uni-checkbox-input,
+checkbox.checked .uni-checkbox-input,
+radio.green.checked .uni-radio-input,
+radio.checked .uni-radio-input {
+	background-color: #39b54a !important;
+	border-color: #39b54a !important;
+	color: #ffffff !important;
+	border-color: #39B54A !important;
+}
+
+switch.cyan[checked] .wx-switch-input,
+checkbox.cyan[checked] .wx-checkbox-input,
+radio.cyan[checked] .wx-radio-input,
+switch.cyan.checked .uni-switch-input,
+checkbox.cyan.checked .uni-checkbox-input,
+radio.cyan.checked .uni-radio-input {
+	background-color: #1cbbb4 !important;
+	border-color: #1cbbb4 !important;
+	color: #ffffff !important;
+}
+
+switch.blue[checked] .wx-switch-input,
+checkbox.blue[checked] .wx-checkbox-input,
+radio.blue[checked] .wx-radio-input,
+switch.blue.checked .uni-switch-input,
+checkbox.blue.checked .uni-checkbox-input,
+radio.blue.checked .uni-radio-input {
+	background-color: #0081ff !important;
+	border-color: #0081ff !important;
+	color: #ffffff !important;
+}
+
+switch.purple[checked] .wx-switch-input,
+checkbox.purple[checked] .wx-checkbox-input,
+radio.purple[checked] .wx-radio-input,
+switch.purple.checked .uni-switch-input,
+checkbox.purple.checked .uni-checkbox-input,
+radio.purple.checked .uni-radio-input {
+	background-color: #6739b6 !important;
+	border-color: #6739b6 !important;
+	color: #ffffff !important;
+}
+
+switch.mauve[checked] .wx-switch-input,
+checkbox.mauve[checked] .wx-checkbox-input,
+radio.mauve[checked] .wx-radio-input,
+switch.mauve.checked .uni-switch-input,
+checkbox.mauve.checked .uni-checkbox-input,
+radio.mauve.checked .uni-radio-input {
+	background-color: #9c26b0 !important;
+	border-color: #9c26b0 !important;
+	color: #ffffff !important;
+}
+
+switch.pink[checked] .wx-switch-input,
+checkbox.pink[checked] .wx-checkbox-input,
+radio.pink[checked] .wx-radio-input,
+switch.pink.checked .uni-switch-input,
+checkbox.pink.checked .uni-checkbox-input,
+radio.pink.checked .uni-radio-input {
+	background-color: #e03997 !important;
+	border-color: #e03997 !important;
+	color: #ffffff !important;
+}
+
+switch.brown[checked] .wx-switch-input,
+checkbox.brown[checked] .wx-checkbox-input,
+radio.brown[checked] .wx-radio-input,
+switch.brown.checked .uni-switch-input,
+checkbox.brown.checked .uni-checkbox-input,
+radio.brown.checked .uni-radio-input {
+	background-color: #a5673f !important;
+	border-color: #a5673f !important;
+	color: #ffffff !important;
+}
+
+switch.grey[checked] .wx-switch-input,
+checkbox.grey[checked] .wx-checkbox-input,
+radio.grey[checked] .wx-radio-input,
+switch.grey.checked .uni-switch-input,
+checkbox.grey.checked .uni-checkbox-input,
+radio.grey.checked .uni-radio-input {
+	background-color: #8799a3 !important;
+	border-color: #8799a3 !important;
+	color: #ffffff !important;
+}
+
+switch.gray[checked] .wx-switch-input,
+checkbox.gray[checked] .wx-checkbox-input,
+radio.gray[checked] .wx-radio-input,
+switch.gray.checked .uni-switch-input,
+checkbox.gray.checked .uni-checkbox-input,
+radio.gray.checked .uni-radio-input {
+	background-color: #f0f0f0 !important;
+	border-color: #f0f0f0 !important;
+	color: #333333 !important;
+}
+
+switch.black[checked] .wx-switch-input,
+checkbox.black[checked] .wx-checkbox-input,
+radio.black[checked] .wx-radio-input,
+switch.black.checked .uni-switch-input,
+checkbox.black.checked .uni-checkbox-input,
+radio.black.checked .uni-radio-input {
+	background-color: #333333 !important;
+	border-color: #333333 !important;
+	color: #ffffff !important;
+}
+
+switch.white[checked] .wx-switch-input,
+checkbox.white[checked] .wx-checkbox-input,
+radio.white[checked] .wx-radio-input,
+switch.white.checked .uni-switch-input,
+checkbox.white.checked .uni-checkbox-input,
+radio.white.checked .uni-radio-input {
+	background-color: #ffffff !important;
+	border-color: #ffffff !important;
+	color: #333333 !important;
+}
+
+/* ==================
+          边框
+ ==================== */
+
+/* -- 实线 -- */
+
+.solid,
+.solid-top,
+.solid-right,
+.solid-bottom,
+.solid-left,
+.solids,
+.solids-top,
+.solids-right,
+.solids-bottom,
+.solids-left,
+.dashed,
+.dashed-top,
+.dashed-right,
+.dashed-bottom,
+.dashed-left {
+	position: relative;
+}
+
+.solid::after,
+.solid-top::after,
+.solid-right::after,
+.solid-bottom::after,
+.solid-left::after,
+.solids::after,
+.solids-top::after,
+.solids-right::after,
+.solids-bottom::after,
+.solids-left::after,
+.dashed::after,
+.dashed-top::after,
+.dashed-right::after,
+.dashed-bottom::after,
+.dashed-left::after {
+	content: " ";
+	width: 200%;
+	height: 200%;
+	position: absolute;
+	top: 0;
+	left: 0;
+	border-radius: inherit;
+	transform: scale(0.5);
+	transform-origin: 0 0;
+	pointer-events: none;
+	box-sizing: border-box;
+}
+
+.solid::after {
+	border: 1upx solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-top::after {
+	border-top: 1upx solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-right::after {
+	border-right: 1upx solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-bottom::after {
+	border-bottom: 1upx solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-left::after {
+	border-left: 1upx solid rgba(0, 0, 0, 0.1);
+}
+
+.solids::after {
+	border: 8upx solid #eee;
+}
+
+.solids-top::after {
+	border-top: 8upx solid #eee;
+}
+
+.solids-right::after {
+	border-right: 8upx solid #eee;
+}
+
+.solids-bottom::after {
+	border-bottom: 8upx solid #eee;
+}
+
+.solids-left::after {
+	border-left: 8upx solid #eee;
+}
+
+/* -- 虚线 -- */
+
+.dashed::after {
+	border: 1upx dashed #ddd;
+}
+
+.dashed-top::after {
+	border-top: 1upx dashed #ddd;
+}
+
+.dashed-right::after {
+	border-right: 1upx dashed #ddd;
+}
+
+.dashed-bottom::after {
+	border-bottom: 1upx dashed #ddd;
+}
+
+.dashed-left::after {
+	border-left: 1upx dashed #ddd;
+}
+
+/* -- 阴影 -- */
+
+.shadow[class*='white'] {
+	--ShadowSize: 0 1upx 6upx;
+}
+
+.shadow-lg {
+	--ShadowSize: 0upx 40upx 100upx 0upx;
+}
+
+.shadow-warp {
+	position: relative;
+	box-shadow: 0 0 10upx rgba(0, 0, 0, 0.1);
+}
+
+.shadow-warp:before,
+.shadow-warp:after {
+	position: absolute;
+	content: "";
+	top: 20upx;
+	bottom: 30upx;
+	left: 20upx;
+	width: 50%;
+	box-shadow: 0 30upx 20upx rgba(0, 0, 0, 0.2);
+	transform: rotate(-3deg);
+	z-index: -1;
+}
+
+.shadow-warp:after {
+	right: 20upx;
+	left: auto;
+	transform: rotate(3deg);
+}
+
+.shadow-blur {
+	position: relative;
+}
+
+.shadow-blur::before {
+	content: "";
+	display: block;
+	background: inherit;
+	filter: blur(10upx);
+	position: absolute;
+	width: 100%;
+	height: 100%;
+	top: 10upx;
+	left: 10upx;
+	z-index: -1;
+	opacity: 0.4;
+	transform-origin: 0 0;
+	border-radius: inherit;
+	transform: scale(1, 1);
+}
+
+/* ==================
+          按钮
+ ==================== */
+
+.cu-btn {
+	position: relative;
+	border: 0upx;
+	display: inline-flex;
+	align-items: center;
+	justify-content: center;
+	box-sizing: border-box;
+	padding: 0 30upx;
+	font-size: 28upx;
+	height: 64upx;
+	line-height: 1;
+	text-align: center;
+	text-decoration: none;
+	overflow: visible;
+	margin-left: initial;
+	transform: translate(0upx, 0upx);
+	margin-right: initial;
+}
+
+.cu-btn::after {
+	display: none;
+}
+
+.cu-btn:not([class*="bg-"]) {
+	background-color: #f0f0f0;
+}
+
+.cu-btn[class*="line"] {
+	background-color: transparent;
+}
+
+.cu-btn[class*="line"]::after {
+	content: " ";
+	display: block;
+	width: 200%;
+	height: 200%;
+	position: absolute;
+	top: 0;
+	left: 0;
+	border: 1upx solid currentColor;
+	transform: scale(0.5);
+	transform-origin: 0 0;
+	box-sizing: border-box;
+	border-radius: 12upx;
+	z-index: 1;
+	pointer-events: none;
+}
+
+.cu-btn.round[class*="line"]::after {
+	border-radius: 1000upx;
+}
+
+.cu-btn[class*="lines"]::after {
+	border: 6upx solid currentColor;
+}
+
+.cu-btn[class*="bg-"]::after {
+	display: none;
+}
+
+.cu-btn.sm {
+	padding: 0 20upx;
+	font-size: 20upx;
+	height: 48upx;
+}
+
+.cu-btn.lg {
+	padding: 0 40upx;
+	font-size: 32upx;
+	height: 80upx;
+}
+
+.cu-btn.cuIcon.sm {
+	width: 48upx;
+	height: 48upx;
+}
+
+.cu-btn.cuIcon {
+	width: 64upx;
+	height: 64upx;
+	border-radius: 500upx;
+	padding: 0;
+}
+
+button.cuIcon.lg {
+	width: 80upx;
+	height: 80upx;
+}
+
+.cu-btn.shadow-blur::before {
+	top: 4upx;
+	left: 4upx;
+	filter: blur(6upx);
+	opacity: 0.6;
+}
+
+.cu-btn.button-hover {
+	transform: translate(1upx, 1upx);
+}
+
+.block {
+	display: block;
+}
+
+.cu-btn.block {
+	display: flex;
+}
+
+.cu-btn[disabled] {
+	opacity: 0.6;
+	color: #ffffff;
+}
+
+/* ==================
+          徽章
+ ==================== */
+
+.cu-tag {
+	font-size: 24upx;
+	vertical-align: middle;
+	position: relative;
+	display: inline-flex;
+	align-items: center;
+	justify-content: center;
+	box-sizing: border-box;
+	padding: 0upx 16upx;
+	height: 48upx;
+	font-family: Helvetica Neue, Helvetica, sans-serif;
+	white-space: nowrap;
+}
+
+.cu-tag:not([class*="bg"]):not([class*="line"]) {
+	background-color: #f1f1f1;
+}
+
+.cu-tag[class*="line-"]::after {
+	content: " ";
+	width: 200%;
+	height: 200%;
+	position: absolute;
+	top: 0;
+	left: 0;
+	border: 1upx solid currentColor;
+	transform: scale(0.5);
+	transform-origin: 0 0;
+	box-sizing: border-box;
+	border-radius: inherit;
+	z-index: 1;
+	pointer-events: none;
+}
+
+.cu-tag.radius[class*="line"]::after {
+	border-radius: 12upx;
+}
+
+.cu-tag.round[class*="line"]::after {
+	border-radius: 1000upx;
+}
+
+.cu-tag[class*="line-"]::after {
+	border-radius: 0;
+}
+
+.cu-tag+.cu-tag {
+	margin-left: 10upx;
+}
+
+.cu-tag.sm {
+	font-size: 20upx;
+	padding: 0upx 12upx;
+	height: 32upx;
+}
+
+.cu-capsule {
+	display: inline-flex;
+	vertical-align: middle;
+}
+
+.cu-capsule+.cu-capsule {
+	margin-left: 10upx;
+}
+
+.cu-capsule .cu-tag {
+	margin: 0;
+}
+
+.cu-capsule .cu-tag[class*="line-"]:last-child::after {
+	border-left: 0upx solid transparent;
+}
+
+.cu-capsule .cu-tag[class*="line-"]:first-child::after {
+	border-right: 0upx solid transparent;
+}
+
+.cu-capsule.radius .cu-tag:first-child {
+	border-top-left-radius: 6upx;
+	border-bottom-left-radius: 6upx;
+}
+
+.cu-capsule.radius .cu-tag:last-child::after,
+.cu-capsule.radius .cu-tag[class*="line-"] {
+	border-top-right-radius: 12upx;
+	border-bottom-right-radius: 12upx;
+}
+
+.cu-capsule.round .cu-tag:first-child {
+	border-top-left-radius: 200upx;
+	border-bottom-left-radius: 200upx;
+	text-indent: 4upx;
+}
+
+.cu-capsule.round .cu-tag:last-child::after,
+.cu-capsule.round .cu-tag:last-child {
+	border-top-right-radius: 200upx;
+	border-bottom-right-radius: 200upx;
+	text-indent: -4upx;
+}
+
+.cu-tag.badge {
+	border-radius: 200upx;
+	position: absolute;
+	top: -10upx;
+	right: -10upx;
+	font-size: 20upx;
+	padding: 0upx 10upx;
+	height: 28upx;
+	color: #ffffff;
+}
+
+.cu-tag.badge:not([class*="bg-"]) {
+	background-color: #dd514c;
+}
+
+.cu-tag:empty:not([class*="cuIcon-"]) {
+	padding: 0upx;
+	width: 16upx;
+	height: 16upx;
+	top: -4upx;
+	right: -4upx;
+}
+
+.cu-tag[class*="cuIcon-"] {
+	width: 32upx;
+	height: 32upx;
+	top: -4upx;
+	right: -4upx;
+}
+
+/* ==================
+          头像
+ ==================== */
+
+.cu-avatar {
+	font-variant: small-caps;
+	margin: 0;
+	padding: 0;
+	display: inline-flex;
+	text-align: center;
+	justify-content: center;
+	align-items: center;
+	background-color: #ccc;
+	color: #ffffff;
+	white-space: nowrap;
+	position: relative;
+	width: 64upx;
+	height: 64upx;
+	background-size: cover;
+	background-position: center;
+	vertical-align: middle;
+	font-size: 1.5em;
+}
+
+.cu-avatar.sm {
+	width: 48upx;
+	height: 48upx;
+	font-size: 1em;
+}
+
+.cu-avatar.lg {
+	width: 96upx;
+	height: 96upx;
+	font-size: 2em;
+}
+
+.cu-avatar.xl {
+	width: 128upx;
+	height: 128upx;
+	font-size: 2.5em;
+}
+
+.cu-avatar .avatar-text {
+	font-size: 0.4em;
+}
+
+.cu-avatar-group {
+	direction: rtl;
+	unicode-bidi: bidi-override;
+	padding: 0 10upx 0 40upx;
+	display: inline-block;
+}
+
+.cu-avatar-group .cu-avatar {
+	margin-left: -30upx;
+	border: 4upx solid #f1f1f1;
+	vertical-align: middle;
+}
+
+.cu-avatar-group .cu-avatar.sm {
+	margin-left: -20upx;
+	border: 1upx solid #f1f1f1;
+}
+
+/* ==================
+         进度条
+ ==================== */
+
+.cu-progress {
+	overflow: hidden;
+	height: 28upx;
+	background-color: #ebeef5;
+	display: inline-flex;
+	align-items: center;
+	width: 100%;
+}
+
+.cu-progress+view,
+.cu-progress+text {
+	line-height: 1;
+}
+
+.cu-progress.xs {
+	height: 10upx;
+}
+
+.cu-progress.sm {
+	height: 20upx;
+}
+
+.cu-progress view {
+	width: 0;
+	height: 100%;
+	align-items: center;
+	display: flex;
+	justify-items: flex-end;
+	justify-content: space-around;
+	font-size: 20upx;
+	color: #ffffff;
+	transition: width 0.6s ease;
+}
+
+.cu-progress text {
+	align-items: center;
+	display: flex;
+	font-size: 20upx;
+	color: #333333;
+	text-indent: 10upx;
+}
+
+.cu-progress.text-progress {
+	padding-right: 60upx;
+}
+
+.cu-progress.striped view {
+	background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+	background-size: 72upx 72upx;
+}
+
+.cu-progress.active view {
+	animation: progress-stripes 2s linear infinite;
+}
+
+@keyframes progress-stripes {
+	from {
+		background-position: 72upx 0;
+	}
+
+	to {
+		background-position: 0 0;
+	}
+}
+
+/* ==================
+          加载
+ ==================== */
+
+.cu-load {
+	display: block;
+	line-height: 3em;
+	text-align: center;
+}
+
+.cu-load::before {
+	font-family: "cuIcon";
+	display: inline-block;
+	margin-right: 6upx;
+}
+
+.cu-load.loading::before {
+	content: "\e67a";
+	animation: cuIcon-spin 2s infinite linear;
+}
+
+.cu-load.loading::after {
+	content: "加载中...";
+}
+
+.cu-load.over::before {
+	content: "\e64a";
+}
+
+.cu-load.over::after {
+	content: "没有更多了";
+}
+
+.cu-load.erro::before {
+	content: "\e658";
+}
+
+.cu-load.erro::after {
+	content: "加载失败";
+}
+
+.cu-load.load-cuIcon::before {
+	font-size: 32upx;
+}
+
+.cu-load.load-cuIcon::after {
+	display: none;
+}
+
+.cu-load.load-cuIcon.over {
+	display: none;
+}
+
+.cu-load.load-modal {
+	position: fixed;
+	top: 0;
+	right: 0;
+	bottom: 140upx;
+	left: 0;
+	margin: auto;
+	width: 260upx;
+	height: 260upx;
+	background-color: #ffffff;
+	border-radius: 10upx;
+	box-shadow: 0 0 0upx 2000upx rgba(0, 0, 0, 0.5);
+	display: flex;
+	align-items: center;
+	flex-direction: column;
+	justify-content: center;
+	font-size: 28upx;
+	z-index: 9999;
+	line-height: 2.4em;
+}
+
+.cu-load.load-modal [class*="cuIcon-"] {
+	font-size: 60upx;
+}
+
+.cu-load.load-modal image {
+	width: 70upx;
+	height: 70upx;
+}
+
+.cu-load.load-modal::after {
+	content: "";
+	position: absolute;
+	background-color: #ffffff;
+	border-radius: 50%;
+	width: 200upx;
+	height: 200upx;
+	font-size: 10px;
+	border-top: 6upx solid rgba(0, 0, 0, 0.05);
+	border-right: 6upx solid rgba(0, 0, 0, 0.05);
+	border-bottom: 6upx solid rgba(0, 0, 0, 0.05);
+	border-left: 6upx solid #f37b1d;
+	animation: cuIcon-spin 1s infinite linear;
+	z-index: -1;
+}
+
+.load-progress {
+	pointer-events: none;
+	top: 0;
+	position: fixed;
+	width: 100%;
+	left: 0;
+	z-index: 2000;
+}
+
+.load-progress.hide {
+	display: none;
+}
+
+.load-progress .load-progress-bar {
+	position: relative;
+	width: 100%;
+	height: 4upx;
+	overflow: hidden;
+	transition: all 200ms ease 0s;
+}
+
+.load-progress .load-progress-spinner {
+	position: absolute;
+	top: 10upx;
+	right: 10upx;
+	z-index: 2000;
+	display: block;
+}
+
+.load-progress .load-progress-spinner::after {
+	content: "";
+	display: block;
+	width: 24upx;
+	height: 24upx;
+	-webkit-box-sizing: border-box;
+	box-sizing: border-box;
+	border: solid 4upx transparent;
+	border-top-color: inherit;
+	border-left-color: inherit;
+	border-radius: 50%;
+	-webkit-animation: load-progress-spinner 0.4s linear infinite;
+	animation: load-progress-spinner 0.4s linear infinite;
+}
+
+@-webkit-keyframes load-progress-spinner {
+	0% {
+		-webkit-transform: rotate(0);
+		transform: rotate(0);
+	}
+
+	100% {
+		-webkit-transform: rotate(360deg);
+		transform: rotate(360deg);
+	}
+}
+
+@keyframes load-progress-spinner {
+	0% {
+		-webkit-transform: rotate(0);
+		transform: rotate(0);
+	}
+
+	100% {
+		-webkit-transform: rotate(360deg);
+		transform: rotate(360deg);
+	}
+}
+
+/* ==================
+          列表
+ ==================== */
+.grayscale {
+	filter: grayscale(1);
+}
+
+.cu-list+.cu-list {
+	margin-top: 30upx
+}
+
+.cu-list>.cu-item {
+	transition: all .6s ease-in-out 0s;
+	transform: translateX(0upx)
+}
+
+.cu-list>.cu-item.move-cur {
+	transform: translateX(-260upx)
+}
+
+.cu-list>.cu-item .move {
+	position: absolute;
+	right: 0;
+	display: flex;
+	width: 260upx;
+	height: 100%;
+	transform: translateX(100%)
+}
+
+.cu-list>.cu-item .move view {
+	display: flex;
+	flex: 1;
+	justify-content: center;
+	align-items: center
+}
+
+.cu-list.menu-avatar {
+	overflow: hidden;
+}
+
+.cu-list.menu-avatar>.cu-item {
+	position: relative;
+	display: flex;
+	padding-right: 10upx;
+	height: 140upx;
+	background-color: #ffffff;
+	justify-content: flex-end;
+	align-items: center
+}
+
+.cu-list.menu-avatar>.cu-item>.cu-avatar {
+	position: absolute;
+	left: 30upx
+}
+
+.cu-list.menu-avatar>.cu-item .flex .text-cut {
+	max-width: 510upx
+}
+
+.cu-list.menu-avatar>.cu-item .content {
+	position: absolute;
+	left: 146upx;
+	width: calc(100% - 96upx - 60upx - 120upx - 20upx);
+	line-height: 1.6em;
+}
+
+.cu-list.menu-avatar>.cu-item .content.flex-sub {
+	width: calc(100% - 96upx - 60upx - 20upx);
+}
+
+.cu-list.menu-avatar>.cu-item .content>view:first-child {
+	font-size: 30upx;
+	display: flex;
+	align-items: center
+}
+
+.cu-list.menu-avatar>.cu-item .content .cu-tag.sm {
+	display: inline-block;
+	margin-left: 10upx;
+	height: 28upx;
+	font-size: 16upx;
+	line-height: 32upx
+}
+
+.cu-list.menu-avatar>.cu-item .action {
+	width: 100upx;
+	text-align: center
+}
+
+.cu-list.menu-avatar>.cu-item .action view+view {
+	margin-top: 10upx
+}
+
+.cu-list.menu-avatar.comment>.cu-item .content {
+	position: relative;
+	left: 0;
+	width: auto;
+	flex: 1;
+}
+
+.cu-list.menu-avatar.comment>.cu-item {
+	padding: 30upx 30upx 30upx 120upx;
+	height: auto
+}
+
+.cu-list.menu-avatar.comment .cu-avatar {
+	align-self: flex-start
+}
+
+.cu-list.menu>.cu-item {
+	position: relative;
+	display: flex;
+	padding: 0 30upx;
+	min-height: 100upx;
+	background-color: #ffffff;
+	justify-content: space-between;
+	align-items: center
+}
+
+.cu-list.menu>.cu-item:last-child:after {
+	border: none
+}
+
+.cu-list.menu-avatar>.cu-item:after,
+.cu-list.menu>.cu-item:after {
+	position: absolute;
+	top: 0;
+	left: 0;
+	box-sizing: border-box;
+	width: 200%;
+	height: 200%;
+	border-bottom: 1upx solid #ddd;
+	border-radius: inherit;
+	content: " ";
+	transform: scale(.5);
+	transform-origin: 0 0;
+	pointer-events: none
+}
+
+.cu-list.menu>.cu-item.grayscale {
+	background-color: #f5f5f5
+}
+
+.cu-list.menu>.cu-item.cur {
+	background-color: #fcf7e9
+}
+
+.cu-list.menu>.cu-item.arrow {
+	padding-right: 90upx
+}
+
+.cu-list.menu>.cu-item.arrow:before {
+	position: absolute;
+	top: 0;
+	right: 30upx;
+	bottom: 0;
+	display: block;
+	margin: auto;
+	width: 30upx;
+	height: 30upx;
+	color: #8799a3;
+	content: "\e6a3";
+	text-align: center;
+	font-size: 34upx;
+	font-family: cuIcon;
+	line-height: 30upx
+}
+
+.cu-list.menu>.cu-item button.content {
+	padding: 0;
+	background-color: transparent;
+	justify-content: flex-start
+}
+
+.cu-list.menu>.cu-item button.content:after {
+	display: none
+}
+
+.cu-list.menu>.cu-item .cu-avatar-group .cu-avatar {
+	border-color: #ffffff
+}
+
+.cu-list.menu>.cu-item .content>view:first-child {
+	display: flex;
+	align-items: center
+}
+
+.cu-list.menu>.cu-item .content>text[class*=cuIcon] {
+	display: inline-block;
+	margin-right: 10upx;
+	width: 1.6em;
+	text-align: center
+}
+
+.cu-list.menu>.cu-item .content>image {
+	display: inline-block;
+	margin-right: 10upx;
+	width: 1.6em;
+	height: 1.6em;
+	vertical-align: middle
+}
+
+.cu-list.menu>.cu-item .content {
+	font-size: 30upx;
+	line-height: 1.6em;
+	flex: 1
+}
+
+.cu-list.menu>.cu-item .content .cu-tag.sm {
+	display: inline-block;
+	margin-left: 10upx;
+	height: 28upx;
+	font-size: 16upx;
+	line-height: 32upx
+}
+
+.cu-list.menu>.cu-item .action .cu-tag:empty {
+	right: 10upx
+}
+
+.cu-list.menu {
+	display: block;
+	overflow: hidden
+}
+
+.cu-list.menu.sm-border>.cu-item:after {
+	left: 30upx;
+	width: calc(200% - 120upx)
+}
+
+.cu-list.grid>.cu-item {
+	position: relative;
+	display: flex;
+	padding: 20upx 0 30upx;
+	transition-duration: 0s;
+	flex-direction: column
+}
+
+.cu-list.grid>.cu-item:after {
+	position: absolute;
+	top: 0;
+	left: 0;
+	box-sizing: border-box;
+	width: 200%;
+	height: 200%;
+	border-right: 1px solid rgba(0, 0, 0, .1);
+	border-bottom: 1px solid rgba(0, 0, 0, .1);
+	border-radius: inherit;
+	content: " ";
+	transform: scale(.5);
+	transform-origin: 0 0;
+	pointer-events: none
+}
+
+.cu-list.grid>.cu-item text {
+	display: block;
+	margin-top: 10upx;
+	color: #888;
+	font-size: 26upx;
+	line-height: 40upx
+}
+
+.cu-list.grid>.cu-item [class*=cuIcon] {
+	position: relative;
+	display: block;
+	margin-top: 20upx;
+	width: 100%;
+	font-size: 48upx
+}
+
+.cu-list.grid>.cu-item .cu-tag {
+	right: auto;
+	left: 50%;
+	margin-left: 20upx
+}
+
+.cu-list.grid {
+	background-color: #ffffff;
+	text-align: center
+}
+
+.cu-list.grid.no-border>.cu-item {
+	padding-top: 10upx;
+	padding-bottom: 20upx
+}
+
+.cu-list.grid.no-border>.cu-item:after {
+	border: none
+}
+
+.cu-list.grid.no-border {
+	padding: 20upx 10upx
+}
+
+.cu-list.grid.col-3>.cu-item:nth-child(3n):after,
+.cu-list.grid.col-4>.cu-item:nth-child(4n):after,
+.cu-list.grid.col-5>.cu-item:nth-child(5n):after {
+	border-right-width: 0
+}
+
+.cu-list.card-menu {
+	overflow: hidden;
+	margin-right: 30upx;
+	margin-left: 30upx;
+	border-radius: 20upx
+}
+
+
+/* ==================
+          操作条
+ ==================== */
+
+.cu-bar {
+	display: flex;
+	position: relative;
+	align-items: center;
+	min-height: 100upx;
+	justify-content: space-between;
+}
+
+.cu-bar .action {
+	display: flex;
+	align-items: center;
+	height: 100%;
+	justify-content: center;
+	max-width: 100%;
+}
+
+.cu-bar .action.border-title {
+	position: relative;
+	top: -10upx;
+}
+
+.cu-bar .action.border-title text[class*="bg-"]:last-child {
+	position: absolute;
+	bottom: -0.5rem;
+	min-width: 2rem;
+	height: 6upx;
+	left: 0;
+}
+
+.cu-bar .action.sub-title {
+	position: relative;
+	top: -0.2rem;
+}
+
+.cu-bar .action.sub-title text {
+	position: relative;
+	z-index: 1;
+}
+
+.cu-bar .action.sub-title text[class*="bg-"]:last-child {
+	position: absolute;
+	display: inline-block;
+	bottom: -0.2rem;
+	border-radius: 6upx;
+	width: 100%;
+	height: 0.6rem;
+	left: 0.6rem;
+	opacity: 0.3;
+	z-index: 0;
+}
+
+.cu-bar .action.sub-title text[class*="text-"]:last-child {
+	position: absolute;
+	display: inline-block;
+	bottom: -0.7rem;
+	left: 0.5rem;
+	opacity: 0.2;
+	z-index: 0;
+	text-align: right;
+	font-weight: 900;
+	font-size: 36upx;
+}
+
+.cu-bar.justify-center .action.border-title text:last-child,
+.cu-bar.justify-center .action.sub-title text:last-child {
+	left: 0;
+	right: 0;
+	margin: auto;
+	text-align: center;
+}
+
+.cu-bar .action:first-child {
+	margin-left: 30upx;
+	font-size: 30upx;
+}
+
+.cu-bar .action text.text-cut {
+	text-align: left;
+	width: 100%;
+}
+
+.cu-bar .cu-avatar:first-child {
+	margin-left: 20upx;
+}
+
+.cu-bar .action:first-child>text[class*="cuIcon-"] {
+	margin-left: -0.3em;
+	margin-right: 0.3em;
+}
+
+.cu-bar .action:last-child {
+	margin-right: 30upx;
+}
+
+.cu-bar .action>text[class*="cuIcon-"],
+.cu-bar .action>view[class*="cuIcon-"] {
+	font-size: 36upx;
+}
+
+.cu-bar .action>text[class*="cuIcon-"]+text[class*="cuIcon-"] {
+	margin-left: 0.5em;
+}
+
+.cu-bar .content {
+	position: absolute;
+	text-align: center;
+	width: calc(100% - 340upx);
+	left: 0;
+	right: 0;
+	bottom: 0;
+	top: 0;
+	margin: auto;
+	height: 60upx;
+	font-size: 32upx;
+	line-height: 60upx;
+	cursor: none;
+	pointer-events: none;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	overflow: hidden;
+}
+
+.cu-bar.ios .content {
+	bottom: 7px;
+	height: 30px;
+	font-size: 32upx;
+	line-height: 30px;
+}
+
+.cu-bar.btn-group {
+	justify-content: space-around;
+}
+
+.cu-bar.btn-group button {
+	padding: 20upx 32upx;
+}
+
+.cu-bar.btn-group button {
+	flex: 1;
+	margin: 0 20upx;
+	max-width: 50%;
+}
+
+.cu-bar .search-form {
+	background-color: #f5f5f5;
+	line-height: 64upx;
+	height: 64upx;
+	font-size: 24upx;
+	color: #333333;
+	flex: 1;
+	display: flex;
+	align-items: center;
+	margin: 0 30upx;
+}
+
+.cu-bar .search-form+.action {
+	margin-right: 30upx;
+}
+
+.cu-bar .search-form input {
+	flex: 1;
+	padding-right: 30upx;
+	height: 64upx;
+	line-height: 64upx;
+	font-size: 26upx;
+	background-color: transparent;
+}
+
+.cu-bar .search-form [class*="cuIcon-"] {
+	margin: 0 0.5em 0 0.8em;
+}
+
+.cu-bar .search-form [class*="cuIcon-"]::before {
+	top: 0upx;
+}
+
+.cu-bar.fixed,
+.nav.fixed {
+	position: fixed;
+	width: 100%;
+	top: 0;
+	z-index: 1024;
+	box-shadow: 0 1upx 6upx rgba(0, 0, 0, 0.1);
+}
+
+.cu-bar.foot {
+	position: fixed;
+	width: 100%;
+	bottom: 0;
+	z-index: 1024;
+	box-shadow: 0 -1upx 6upx rgba(0, 0, 0, 0.1);
+}
+
+.cu-bar.tabbar {
+	padding: 0;
+	height: calc(100upx + env(safe-area-inset-bottom) / 2);
+	padding-bottom: calc(env(safe-area-inset-bottom) / 2);
+}
+
+.cu-tabbar-height {
+	min-height: 100upx;
+	height: calc(100upx + env(safe-area-inset-bottom) / 2);
+}
+
+.cu-bar.tabbar.shadow {
+	box-shadow: 0 -1upx 6upx rgba(0, 0, 0, 0.1);
+}
+
+.cu-bar.tabbar .action {
+	font-size: 22upx;
+	position: relative;
+	flex: 1;
+	text-align: center;
+	padding: 0;
+	display: block;
+	height: auto;
+	line-height: 1;
+	margin: 0;
+	background-color: inherit;
+	overflow: initial;
+}
+
+.cu-bar.tabbar.shop .action {
+	width: 140upx;
+	flex: initial;
+}
+
+.cu-bar.tabbar .action.add-action {
+	position: relative;
+	z-index: 2;
+	padding-top: 50upx;
+}
+
+.cu-bar.tabbar .action.add-action [class*="cuIcon-"] {
+	position: absolute;
+	width: 70upx;
+	z-index: 2;
+	height: 70upx;
+	border-radius: 50%;
+	line-height: 70upx;
+	font-size: 50upx;
+	top: -35upx;
+	left: 0;
+	right: 0;
+	margin: auto;
+	padding: 0;
+}
+
+.cu-bar.tabbar .action.add-action::after {
+	content: "";
+	position: absolute;
+	width: 100upx;
+	height: 100upx;
+	top: -50upx;
+	left: 0;
+	right: 0;
+	margin: auto;
+	box-shadow: 0 -3upx 8upx rgba(0, 0, 0, 0.08);
+	border-radius: 50upx;
+	background-color: inherit;
+	z-index: 0;
+}
+
+.cu-bar.tabbar .action.add-action::before {
+	content: "";
+	position: absolute;
+	width: 100upx;
+	height: 30upx;
+	bottom: 30upx;
+	left: 0;
+	right: 0;
+	margin: auto;
+	background-color: inherit;
+	z-index: 1;
+}
+
+.cu-bar.tabbar .btn-group {
+	flex: 1;
+	display: flex;
+	justify-content: space-around;
+	align-items: center;
+	padding: 0 10upx;
+}
+
+.cu-bar.tabbar button.action::after {
+	border: 0;
+}
+
+.cu-bar.tabbar .action [class*="cuIcon-"] {
+	width: 100upx;
+	position: relative;
+	display: block;
+	height: auto;
+	margin: 0 auto 10upx;
+	text-align: center;
+	font-size: 40upx;
+}
+
+.cu-bar.tabbar .action .cuIcon-cu-image {
+	margin: 0 auto;
+}
+
+.cu-bar.tabbar .action .cuIcon-cu-image image {
+	width: 50upx;
+	height: 50upx;
+	display: inline-block;
+}
+
+.cu-bar.tabbar .submit {
+	align-items: center;
+	display: flex;
+	justify-content: center;
+	text-align: center;
+	position: relative;
+	flex: 2;
+	align-self: stretch;
+}
+
+.cu-bar.tabbar .submit:last-child {
+	flex: 2.6;
+}
+
+.cu-bar.tabbar .submit+.submit {
+	flex: 2;
+}
+
+.cu-bar.tabbar.border .action::before {
+	content: " ";
+	width: 200%;
+	height: 200%;
+	position: absolute;
+	top: 0;
+	left: 0;
+	transform: scale(0.5);
+	transform-origin: 0 0;
+	border-right: 1upx solid rgba(0, 0, 0, 0.1);
+	z-index: 3;
+}
+
+.cu-bar.tabbar.border .action:last-child:before {
+	display: none;
+}
+
+.cu-bar.input {
+	padding-right: 20upx;
+	background-color: #ffffff;
+}
+
+.cu-bar.input input {
+	overflow: initial;
+	line-height: 64upx;
+	height: 64upx;
+	min-height: 64upx;
+	flex: 1;
+	font-size: 30upx;
+	margin: 0 20upx;
+}
+
+.cu-bar.input .action {
+	margin-left: 20upx;
+}
+
+.cu-bar.input .action [class*="cuIcon-"] {
+	font-size: 48upx;
+}
+
+.cu-bar.input input+.action {
+	margin-right: 20upx;
+	margin-left: 0upx;
+}
+
+.cu-bar.input .action:first-child [class*="cuIcon-"] {
+	margin-left: 0upx;
+}
+
+.cu-custom {
+	display: block;
+	position: relative;
+}
+
+.cu-custom .cu-bar .content {
+	width: calc(100% - 440upx);
+}
+
+/* #ifdef MP-ALIPAY */
+.cu-custom .cu-bar .action .cuIcon-back {
+	opacity: 0;
+}
+
+/* #endif */
+
+.cu-custom .cu-bar .content image {
+	height: 60upx;
+	width: 240upx;
+}
+
+.cu-custom .cu-bar {
+	min-height: 0px;
+	/* #ifdef MP-WEIXIN */
+	padding-right: 220upx;
+	/* #endif */
+	/* #ifdef MP-ALIPAY */
+	padding-right: 150upx;
+	/* #endif */
+	box-shadow: 0upx 0upx 0upx;
+	z-index: 9999;
+}
+
+.cu-custom .cu-bar .border-custom {
+	position: relative;
+	background: rgba(0, 0, 0, 0.15);
+	border-radius: 1000upx;
+	height: 30px;
+}
+
+.cu-custom .cu-bar .border-custom::after {
+	content: " ";
+	width: 200%;
+	height: 200%;
+	position: absolute;
+	top: 0;
+	left: 0;
+	border-radius: inherit;
+	transform: scale(0.5);
+	transform-origin: 0 0;
+	pointer-events: none;
+	box-sizing: border-box;
+	border: 1upx solid #ffffff;
+	opacity: 0.5;
+}
+
+.cu-custom .cu-bar .border-custom::before {
+	content: " ";
+	width: 1upx;
+	height: 110%;
+	position: absolute;
+	top: 22.5%;
+	left: 0;
+	right: 0;
+	margin: auto;
+	transform: scale(0.5);
+	transform-origin: 0 0;
+	pointer-events: none;
+	box-sizing: border-box;
+	opacity: 0.6;
+	background-color: #ffffff;
+}
+
+.cu-custom .cu-bar .border-custom text {
+	display: block;
+	flex: 1;
+	margin: auto !important;
+	text-align: center;
+	font-size: 34upx;
+}
+
+/* ==================
+         导航栏
+ ==================== */
+
+.nav {
+	white-space: nowrap;
+}
+
+::-webkit-scrollbar {
+	display: none;
+}
+
+.nav .cu-item {
+	height: 90upx;
+	display: inline-block;
+	line-height: 90upx;
+	margin: 0 10upx;
+	padding: 0 20upx;
+}
+
+.nav .cu-item.cur {
+	border-bottom: 4upx solid;
+}
+
+/* ==================
+         时间轴
+ ==================== */
+
+.cu-timeline {
+	display: block;
+	background-color: #ffffff;
+}
+
+.cu-timeline .cu-time {
+	width: 120upx;
+	text-align: center;
+	padding: 20upx 0;
+	font-size: 26upx;
+	color: #888;
+	display: block;
+}
+
+.cu-timeline>.cu-item {
+	padding: 30upx 30upx 30upx 120upx;
+	position: relative;
+	display: block;
+	z-index: 0;
+}
+
+.cu-timeline>.cu-item:not([class*="text-"]) {
+	color: #ccc;
+}
+
+.cu-timeline>.cu-item::after {
+	content: "";
+	display: block;
+	position: absolute;
+	width: 1upx;
+	background-color: #ddd;
+	left: 60upx;
+	height: 100%;
+	top: 0;
+	z-index: 8;
+}
+
+.cu-timeline>.cu-item::before {
+	font-family: "cuIcon";
+	display: block;
+	position: absolute;
+	top: 36upx;
+	z-index: 9;
+	background-color: #ffffff;
+	width: 50upx;
+	height: 50upx;
+	text-align: center;
+	border: none;
+	line-height: 50upx;
+	left: 36upx;
+}
+
+.cu-timeline>.cu-item:not([class*="cuIcon-"])::before {
+	content: "\e763";
+}
+
+.cu-timeline>.cu-item[class*="cuIcon-"]::before {
+	background-color: #ffffff;
+	width: 50upx;
+	height: 50upx;
+	text-align: center;
+	border: none;
+	line-height: 50upx;
+	left: 36upx;
+}
+
+.cu-timeline>.cu-item>.content {
+	padding: 30upx;
+	border-radius: 6upx;
+	display: block;
+	line-height: 1.6;
+}
+
+.cu-timeline>.cu-item>.content:not([class*="bg-"]) {
+	background-color: #f1f1f1;
+	color: #333333;
+}
+
+.cu-timeline>.cu-item>.content+.content {
+	margin-top: 20upx;
+}
+
+/* ==================
+         聊天
+ ==================== */
+
+.cu-chat {
+	display: flex;
+	flex-direction: column;
+}
+
+.cu-chat .cu-item {
+	display: flex;
+	padding: 30upx 30upx 70upx;
+	position: relative;
+}
+
+.cu-chat .cu-item>.cu-avatar {
+	width: 80upx;
+	height: 80upx;
+}
+
+.cu-chat .cu-item>.main {
+	max-width: calc(100% - 260upx);
+	margin: 0 40upx;
+	display: flex;
+	align-items: center;
+}
+
+.cu-chat .cu-item>image {
+	height: 320upx;
+}
+
+.cu-chat .cu-item>.main .content {
+	padding: 20upx;
+	border-radius: 6upx;
+	display: inline-flex;
+	max-width: 100%;
+	align-items: center;
+	font-size: 30upx;
+	position: relative;
+	min-height: 80upx;
+	line-height: 40upx;
+	text-align: left;
+}
+
+.cu-chat .cu-item>.main .content:not([class*="bg-"]) {
+	background-color: #ffffff;
+	color: #333333;
+}
+
+.cu-chat .cu-item .date {
+	position: absolute;
+	font-size: 24upx;
+	color: #8799a3;
+	width: calc(100% - 320upx);
+	bottom: 20upx;
+	left: 160upx;
+}
+
+.cu-chat .cu-item .action {
+	padding: 0 30upx;
+	display: flex;
+	align-items: center;
+}
+
+.cu-chat .cu-item>.main .content::after {
+	content: "";
+	top: 27upx;
+	transform: rotate(45deg);
+	position: absolute;
+	z-index: 100;
+	display: inline-block;
+	overflow: hidden;
+	width: 24upx;
+	height: 24upx;
+	left: -12upx;
+	right: initial;
+	background-color: inherit;
+}
+
+.cu-chat .cu-item.self>.main .content::after {
+	left: auto;
+	right: -12upx;
+}
+
+.cu-chat .cu-item>.main .content::before {
+	content: "";
+	top: 30upx;
+	transform: rotate(45deg);
+	position: absolute;
+	z-index: -1;
+	display: inline-block;
+	overflow: hidden;
+	width: 24upx;
+	height: 24upx;
+	left: -12upx;
+	right: initial;
+	background-color: inherit;
+	filter: blur(5upx);
+	opacity: 0.3;
+}
+
+.cu-chat .cu-item>.main .content:not([class*="bg-"])::before {
+	background-color: #333333;
+	opacity: 0.1;
+}
+
+.cu-chat .cu-item.self>.main .content::before {
+	left: auto;
+	right: -12upx;
+}
+
+.cu-chat .cu-item.self {
+	justify-content: flex-end;
+	text-align: right;
+}
+
+.cu-chat .cu-info {
+	display: inline-block;
+	margin: 20upx auto;
+	font-size: 24upx;
+	padding: 8upx 12upx;
+	background-color: rgba(0, 0, 0, 0.2);
+	border-radius: 6upx;
+	color: #ffffff;
+	max-width: 400upx;
+	line-height: 1.4;
+}
+
+/* ==================
+         卡片
+ ==================== */
+
+.cu-card {
+	display: block;
+	overflow: hidden;
+}
+
+.cu-card>.cu-item {
+	display: block;
+	background-color: #ffffff;
+	overflow: hidden;
+	border-radius: 10upx;
+	margin: 30upx;
+}
+
+.cu-card>.cu-item.shadow-blur {
+	overflow: initial;
+}
+
+.cu-card.no-card>.cu-item {
+	margin: 0upx;
+	border-radius: 0upx;
+}
+
+.cu-card .grid.grid-square {
+	margin-bottom: -20upx;
+}
+
+.cu-card.case .image {
+	position: relative;
+}
+
+.cu-card.case .image image {
+	width: 100%;
+}
+
+.cu-card.case .image .cu-tag {
+	position: absolute;
+	right: 0;
+	top: 0;
+}
+
+.cu-card.case .image .cu-bar {
+	position: absolute;
+	bottom: 0;
+	width: 100%;
+	background-color: transparent;
+	padding: 0upx 30upx;
+}
+
+.cu-card.case.no-card .image {
+	margin: 30upx 30upx 0;
+	overflow: hidden;
+	border-radius: 10upx;
+}
+
+.cu-card.dynamic {
+	display: block;
+}
+
+.cu-card.dynamic>.cu-item {
+	display: block;
+	background-color: #ffffff;
+	overflow: hidden;
+}
+
+.cu-card.dynamic>.cu-item>.text-content {
+	padding: 0 30upx 0;
+	max-height: 6.4em;
+	overflow: hidden;
+	font-size: 30upx;
+	margin-bottom: 20upx;
+}
+
+.cu-card.dynamic>.cu-item .square-img {
+	width: 100%;
+	height: 200upx;
+	border-radius: 6upx;
+}
+
+.cu-card.dynamic>.cu-item .only-img {
+	width: 100%;
+	height: 320upx;
+	border-radius: 6upx;
+}
+
+/* card.dynamic>.cu-item .comment {
+  padding: 20upx;
+  background-color: #f1f1f1;
+  margin: 0 30upx 30upx;
+  border-radius: 6upx;
+} */
+
+.cu-card.article {
+	display: block;
+}
+
+.cu-card.article>.cu-item {
+	padding-bottom: 30upx;
+}
+
+.cu-card.article>.cu-item .title {
+	font-size: 30upx;
+	font-weight: 900;
+	color: #333333;
+	line-height: 100upx;
+	padding: 0 30upx;
+}
+
+.cu-card.article>.cu-item .content {
+	display: flex;
+	padding: 0 30upx;
+}
+
+.cu-card.article>.cu-item .content>image {
+	width: 240upx;
+	height: 6.4em;
+	margin-right: 20upx;
+	border-radius: 6upx;
+}
+
+.cu-card.article>.cu-item .content .desc {
+	flex: 1;
+	display: flex;
+	flex-direction: column;
+	justify-content: space-between;
+}
+
+.cu-card.article>.cu-item .content .text-content {
+	font-size: 28upx;
+	color: #888;
+	height: 4.8em;
+	overflow: hidden;
+}
+
+/* ==================
+         表单
+ ==================== */
+
+.cu-form-group {
+	background-color: #ffffff;
+	padding: 1upx 30upx;
+	display: flex;
+	align-items: center;
+	min-height: 100upx;
+	justify-content: space-between;
+}
+
+.cu-form-group+.cu-form-group {
+	border-top: 1upx solid #eee;
+}
+
+.cu-form-group .title {
+	text-align: justify;
+	padding-right: 30upx;
+	font-size: 30upx;
+	position: relative;
+	height: 60upx;
+	line-height: 60upx;
+}
+
+.cu-form-group input {
+	flex: 1;
+	font-size: 30upx;
+	color: #555;
+	padding-right: 20upx;
+}
+
+.cu-form-group>text[class*="cuIcon-"] {
+	font-size: 36upx;
+	padding: 0;
+	box-sizing: border-box;
+}
+
+.cu-form-group textarea {
+	margin: 32upx 0 30upx;
+	height: 4.6em;
+	width: 100%;
+	line-height: 1.2em;
+	flex: 1;
+	font-size: 28upx;
+	padding: 0;
+}
+
+.cu-form-group.align-start .title {
+	height: 1em;
+	margin-top: 32upx;
+	line-height: 1em;
+}
+
+.cu-form-group picker {
+	flex: 1;
+	padding-right: 40upx;
+	overflow: hidden;
+	position: relative;
+}
+
+.cu-form-group picker .picker {
+	line-height: 100upx;
+	font-size: 28upx;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	overflow: hidden;
+	width: 100%;
+	text-align: right;
+}
+
+.cu-form-group picker::after {
+	font-family: cuIcon;
+	display: block;
+	content: "\e6a3";
+	position: absolute;
+	font-size: 34upx;
+	color: #8799a3;
+	line-height: 100upx;
+	width: 60upx;
+	text-align: center;
+	top: 0;
+	bottom: 0;
+	right: -20upx;
+	margin: auto;
+}
+
+.cu-form-group textarea[disabled],
+.cu-form-group textarea[disabled] .placeholder {
+	color: transparent;
+}
+
+/* ==================
+         模态窗口
+ ==================== */
+
+.cu-modal {
+	position: fixed;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	z-index: 1110;
+	opacity: 0;
+	outline: 0;
+	text-align: center;
+	-ms-transform: scale(1.185);
+	transform: scale(1.185);
+	backface-visibility: hidden;
+	perspective: 2000upx;
+	background: rgba(0, 0, 0, 0.6);
+	transition: all 0.3s ease-in-out 0s;
+	pointer-events: none;
+}
+
+.cu-modal::before {
+	content: "\200B";
+	display: inline-block;
+	height: 100%;
+	vertical-align: middle;
+}
+
+.cu-modal.show {
+	opacity: 1;
+	transition-duration: 0.3s;
+	-ms-transform: scale(1);
+	transform: scale(1);
+	overflow-x: hidden;
+	overflow-y: auto;
+	pointer-events: auto;
+}
+
+.cu-dialog {
+	position: relative;
+	display: inline-block;
+	vertical-align: middle;
+	margin-left: auto;
+	margin-right: auto;
+	width: 680upx;
+	max-width: 100%;
+	background-color: #f8f8f8;
+	border-radius: 10upx;
+	overflow: hidden;
+}
+
+.cu-modal.bottom-modal::before {
+	vertical-align: bottom;
+}
+
+.cu-modal.bottom-modal .cu-dialog {
+	width: 100%;
+	border-radius: 0;
+}
+
+.cu-modal.bottom-modal {
+	margin-bottom: -1000upx;
+}
+
+.cu-modal.bottom-modal.show {
+	margin-bottom: 0;
+}
+
+.cu-modal.drawer-modal {
+	transform: scale(1);
+	display: flex;
+}
+
+.cu-modal.drawer-modal .cu-dialog {
+	height: 100%;
+	min-width: 200upx;
+	border-radius: 0;
+	margin: initial;
+	transition-duration: 0.3s;
+}
+
+.cu-modal.drawer-modal.justify-start .cu-dialog {
+	transform: translateX(-100%);
+}
+
+.cu-modal.drawer-modal.justify-end .cu-dialog {
+	transform: translateX(100%);
+}
+
+.cu-modal.drawer-modal.show .cu-dialog {
+	transform: translateX(0%);
+}
+.cu-modal .cu-dialog>.cu-bar:first-child .action{
+  min-width: 100rpx;
+  margin-right: 0;
+  min-height: 100rpx;
+}
+/* ==================
+         轮播
+ ==================== */
+swiper .a-swiper-dot {
+	display: inline-block;
+	width: 16upx;
+	height: 16upx;
+	background: rgba(0, 0, 0, .3);
+	border-radius: 50%;
+	vertical-align: middle;
+}
+
+swiper[class*="-dot"] .wx-swiper-dots,
+swiper[class*="-dot"] .a-swiper-dots,
+swiper[class*="-dot"] .uni-swiper-dots {
+	display: flex;
+	align-items: center;
+	width: 100%;
+	justify-content: center;
+}
+
+swiper.square-dot .wx-swiper-dot,
+swiper.square-dot .a-swiper-dot,
+swiper.square-dot .uni-swiper-dot {
+	background-color: #ffffff;
+	opacity: 0.4;
+	width: 10upx;
+	height: 10upx;
+	border-radius: 20upx;
+	margin: 0 8upx !important;
+}
+
+swiper.square-dot .wx-swiper-dot.wx-swiper-dot-active,
+swiper.square-dot .a-swiper-dot.a-swiper-dot-active,
+swiper.square-dot .uni-swiper-dot.uni-swiper-dot-active {
+	opacity: 1;
+	width: 30upx;
+}
+
+swiper.round-dot .wx-swiper-dot,
+swiper.round-dot .a-swiper-dot,
+swiper.round-dot .uni-swiper-dot {
+	width: 10upx;
+	height: 10upx;
+	position: relative;
+	margin: 4upx 8upx !important;
+}
+
+swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active::after,
+swiper.round-dot .a-swiper-dot.a-swiper-dot-active::after,
+swiper.round-dot .uni-swiper-dot.uni-swiper-dot-active::after {
+	content: "";
+	position: absolute;
+	width: 10upx;
+	height: 10upx;
+	top: 0upx;
+	left: 0upx;
+	right: 0;
+	bottom: 0;
+	margin: auto;
+	background-color: #ffffff;
+	border-radius: 20upx;
+}
+
+swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active,
+swiper.round-dot .a-swiper-dot.a-swiper-dot-active,
+swiper.round-dot .uni-swiper-dot.uni-swiper-dot-active {
+	width: 18upx;
+	height: 18upx;
+}
+
+.screen-swiper {
+	min-height: 375upx;
+}
+
+.screen-swiper image,
+.screen-swiper video,
+.swiper-item image,
+.swiper-item video {
+	width: 100%;
+	display: block;
+	height: 100%;
+	margin: 0;
+	pointer-events: none;
+}
+
+.card-swiper {
+	height: 420upx !important;
+}
+
+.card-swiper swiper-item {
+	width: 610upx !important;
+	left: 70upx;
+	box-sizing: border-box;
+	padding: 40upx 0upx 70upx;
+	overflow: initial;
+}
+
+.card-swiper swiper-item .swiper-item {
+	width: 100%;
+	display: block;
+	height: 100%;
+	border-radius: 10upx;
+	transform: scale(0.9);
+	transition: all 0.2s ease-in 0s;
+	overflow: hidden;
+}
+
+.card-swiper swiper-item.cur .swiper-item {
+	transform: none;
+	transition: all 0.2s ease-in 0s;
+}
+
+
+.tower-swiper {
+	height: 420upx;
+	position: relative;
+	max-width: 750upx;
+	overflow: hidden;
+}
+
+.tower-swiper .tower-item {
+	position: absolute;
+	width: 300upx;
+	height: 380upx;
+	top: 0;
+	bottom: 0;
+	left: 50%;
+	margin: auto;
+	transition: all 0.2s ease-in 0s;
+	opacity: 1;
+}
+
+.tower-swiper .tower-item.none {
+	opacity: 0;
+}
+
+.tower-swiper .tower-item .swiper-item {
+	width: 100%;
+	height: 100%;
+	border-radius: 6upx;
+	overflow: hidden;
+}
+
+/* ==================
+          步骤条
+ ==================== */
+
+.cu-steps {
+	display: flex;
+}
+
+scroll-view.cu-steps {
+	display: block;
+	white-space: nowrap;
+}
+
+scroll-view.cu-steps .cu-item {
+	display: inline-block;
+}
+
+.cu-steps .cu-item {
+	flex: 1;
+	text-align: center;
+	position: relative;
+	min-width: 100upx;
+}
+
+.cu-steps .cu-item:not([class*="text-"]) {
+	color: #8799a3;
+}
+
+.cu-steps .cu-item [class*="cuIcon-"],
+.cu-steps .cu-item .num {
+	display: block;
+	font-size: 40upx;
+	line-height: 80upx;
+}
+
+.cu-steps .cu-item::before,
+.cu-steps .cu-item::after,
+.cu-steps.steps-arrow .cu-item::before,
+.cu-steps.steps-arrow .cu-item::after {
+	content: "";
+	display: block;
+	position: absolute;
+	height: 0px;
+	width: calc(100% - 80upx);
+	border-bottom: 1px solid #ccc;
+	left: calc(0px - (100% - 80upx) / 2);
+	top: 40upx;
+	z-index: 0;
+}
+
+.cu-steps.steps-arrow .cu-item::before,
+.cu-steps.steps-arrow .cu-item::after {
+	content: "\e6a3";
+	font-family: 'cuIcon';
+	height: 30upx;
+	border-bottom-width: 0px;
+	line-height: 30upx;
+	top: 0;
+	bottom: 0;
+	margin: auto;
+	color: #ccc;
+}
+
+.cu-steps.steps-bottom .cu-item::before,
+.cu-steps.steps-bottom .cu-item::after {
+	bottom: 40upx;
+	top: initial;
+}
+
+.cu-steps .cu-item::after {
+	border-bottom: 1px solid currentColor;
+	width: 0px;
+	transition: all 0.3s ease-in-out 0s;
+}
+
+.cu-steps .cu-item[class*="text-"]::after {
+	width: calc(100% - 80upx);
+	color: currentColor;
+}
+
+.cu-steps .cu-item:first-child::before,
+.cu-steps .cu-item:first-child::after {
+	display: none;
+}
+
+.cu-steps .cu-item .num {
+	width: 40upx;
+	height: 40upx;
+	border-radius: 50%;
+	line-height: 40upx;
+	margin: 20upx auto;
+	font-size: 24upx;
+	border: 1px solid currentColor;
+	position: relative;
+	overflow: hidden;
+}
+
+.cu-steps .cu-item[class*="text-"] .num {
+	background-color: currentColor;
+}
+
+.cu-steps .cu-item .num::before,
+.cu-steps .cu-item .num::after {
+	content: attr(data-index);
+	position: absolute;
+	left: 0;
+	right: 0;
+	top: 0;
+	bottom: 0;
+	margin: auto;
+	transition: all 0.3s ease-in-out 0s;
+	transform: translateY(0upx);
+}
+
+.cu-steps .cu-item[class*="text-"] .num::before {
+	transform: translateY(-40upx);
+	color: #ffffff;
+}
+
+.cu-steps .cu-item .num::after {
+	transform: translateY(40upx);
+	color: #ffffff;
+	transition: all 0.3s ease-in-out 0s;
+}
+
+.cu-steps .cu-item[class*="text-"] .num::after {
+	content: "\e645";
+	font-family: 'cuIcon';
+	color: #ffffff;
+	transform: translateY(0upx);
+}
+
+.cu-steps .cu-item[class*="text-"] .num.err::after {
+	content: "\e646";
+}
+
+/* ==================
+          布局
+ ==================== */
+
+/*  -- flex弹性布局 -- */
+
+.flex {
+	display: flex;
+}
+
+.basis-xs {
+	flex-basis: 20%;
+}
+
+.basis-sm {
+	flex-basis: 40%;
+}
+
+.basis-df {
+	flex-basis: 50%;
+}
+
+.basis-lg {
+	flex-basis: 60%;
+}
+
+.basis-xl {
+	flex-basis: 80%;
+}
+
+.flex-sub {
+	flex: 1;
+}
+
+.flex-twice {
+	flex: 2;
+}
+
+.flex-treble {
+	flex: 3;
+}
+
+.flex-direction {
+	flex-direction: column;
+}
+
+.flex-wrap {
+	flex-wrap: wrap;
+}
+
+.align-start {
+	align-items: flex-start;
+}
+
+.align-end {
+	align-items: flex-end;
+}
+
+.align-center {
+	align-items: center;
+}
+
+.align-stretch {
+	align-items: stretch;
+}
+
+.self-start {
+	align-self: flex-start;
+}
+
+.self-center {
+	align-self: flex-center;
+}
+
+.self-end {
+	align-self: flex-end;
+}
+
+.self-stretch {
+	align-self: stretch;
+}
+
+.align-stretch {
+	align-items: stretch;
+}
+
+.justify-start {
+	justify-content: flex-start;
+}
+
+.justify-end {
+	justify-content: flex-end;
+}
+
+.justify-center {
+	justify-content: center;
+}
+
+.justify-between {
+	justify-content: space-between;
+}
+
+.justify-around {
+	justify-content: space-around;
+}
+
+/* grid布局 */
+
+.grid {
+	display: flex;
+	flex-wrap: wrap;
+}
+
+.grid.grid-square {
+	overflow: hidden;
+}
+
+.grid.grid-square .cu-tag {
+	position: absolute;
+	right: 0;
+	top: 0;
+	border-bottom-left-radius: 6upx;
+	padding: 6upx 12upx;
+	height: auto;
+	background-color: rgba(0, 0, 0, 0.5);
+}
+
+.grid.grid-square>view>text[class*="cuIcon-"] {
+	font-size: 52upx;
+	position: absolute;
+	color: #8799a3;
+	margin: auto;
+	top: 0;
+	bottom: 0;
+	left: 0;
+	right: 0;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	flex-direction: column;
+}
+
+.grid.grid-square>view {
+	margin-right: 20upx;
+	margin-bottom: 20upx;
+	border-radius: 6upx;
+	position: relative;
+	overflow: hidden;
+}
+.grid.grid-square>view.bg-img image {
+	width: 100%;
+	height: 100%;
+	position: absolute;
+}
+.grid.col-1.grid-square>view {
+	padding-bottom: 100%;
+	height: 0;
+	margin-right: 0;
+}
+
+.grid.col-2.grid-square>view {
+	padding-bottom: calc((100% - 20upx)/2);
+	height: 0;
+	width: calc((100% - 20upx)/2);
+}
+
+.grid.col-3.grid-square>view {
+	padding-bottom: calc((100% - 40upx)/3);
+	height: 0;
+	width: calc((100% - 40upx)/3);
+}
+
+.grid.col-4.grid-square>view {
+	padding-bottom: calc((100% - 60upx)/4);
+	height: 0;
+	width: calc((100% - 60upx)/4);
+}
+
+.grid.col-5.grid-square>view {
+	padding-bottom: calc((100% - 80upx)/5);
+	height: 0;
+	width: calc((100% - 80upx)/5);
+}
+
+.grid.col-2.grid-square>view:nth-child(2n),
+.grid.col-3.grid-square>view:nth-child(3n),
+.grid.col-4.grid-square>view:nth-child(4n),
+.grid.col-5.grid-square>view:nth-child(5n) {
+	margin-right: 0;
+}
+
+.grid.col-1>view {
+	width: 100%;
+}
+
+.grid.col-2>view {
+	width: 50%;
+}
+
+.grid.col-3>view {
+	width: 33.33%;
+}
+
+.grid.col-4>view {
+	width: 25%;
+}
+
+.grid.col-5>view {
+	width: 20%;
+}
+
+/*  -- 内外边距 -- */
+
+.margin-0 {
+	margin: 0;
+}
+
+.margin-xs {
+	margin: 10upx;
+}
+
+.margin-sm {
+	margin: 20upx;
+}
+
+.margin {
+	margin: 30upx;
+}
+
+.margin-lg {
+	margin: 40upx;
+}
+
+.margin-xl {
+	margin: 50upx;
+}
+
+.margin-top-xs {
+	margin-top: 10upx;
+}
+
+.margin-top-sm {
+	margin-top: 20upx;
+}
+
+.margin-top {
+	margin-top: 30upx;
+}
+
+.margin-top-lg {
+	margin-top: 40upx;
+}
+
+.margin-top-xl {
+	margin-top: 50upx;
+}
+
+.margin-right-xs {
+	margin-right: 10upx;
+}
+
+.margin-right-sm {
+	margin-right: 20upx;
+}
+
+.margin-right {
+	margin-right: 30upx;
+}
+
+.margin-right-lg {
+	margin-right: 40upx;
+}
+
+.margin-right-xl {
+	margin-right: 50upx;
+}
+
+.margin-bottom-xs {
+	margin-bottom: 10upx;
+}
+
+.margin-bottom-sm {
+	margin-bottom: 20upx;
+}
+
+.margin-bottom {
+	margin-bottom: 30upx;
+}
+
+.margin-bottom-lg {
+	margin-bottom: 40upx;
+}
+
+.margin-bottom-xl {
+	margin-bottom: 50upx;
+}
+
+.margin-left-xs {
+	margin-left: 10upx;
+}
+
+.margin-left-sm {
+	margin-left: 20upx;
+}
+
+.margin-left {
+	margin-left: 30upx;
+}
+
+.margin-left-lg {
+	margin-left: 40upx;
+}
+
+.margin-left-xl {
+	margin-left: 50upx;
+}
+
+.margin-lr-xs {
+	margin-left: 10upx;
+	margin-right: 10upx;
+}
+
+.margin-lr-sm {
+	margin-left: 20upx;
+	margin-right: 20upx;
+}
+
+.margin-lr {
+	margin-left: 30upx;
+	margin-right: 30upx;
+}
+
+.margin-lr-lg {
+	margin-left: 40upx;
+	margin-right: 40upx;
+}
+
+.margin-lr-xl {
+	margin-left: 50upx;
+	margin-right: 50upx;
+}
+
+.margin-tb-xs {
+	margin-top: 10upx;
+	margin-bottom: 10upx;
+}
+
+.margin-tb-sm {
+	margin-top: 20upx;
+	margin-bottom: 20upx;
+}
+
+.margin-tb {
+	margin-top: 30upx;
+	margin-bottom: 30upx;
+}
+
+.margin-tb-lg {
+	margin-top: 40upx;
+	margin-bottom: 40upx;
+}
+
+.margin-tb-xl {
+	margin-top: 50upx;
+	margin-bottom: 50upx;
+}
+
+.padding-0 {
+	padding: 0;
+}
+
+.padding-xs {
+	padding: 10upx;
+}
+
+.padding-sm {
+	padding: 20upx;
+}
+
+.padding {
+	padding: 30upx;
+}
+
+.padding-lg {
+	padding: 40upx;
+}
+
+.padding-xl {
+	padding: 50upx;
+}
+
+.padding-top-xs {
+	padding-top: 10upx;
+}
+
+.padding-top-sm {
+	padding-top: 20upx;
+}
+
+.padding-top {
+	padding-top: 30upx;
+}
+
+.padding-top-lg {
+	padding-top: 40upx;
+}
+
+.padding-top-xl {
+	padding-top: 50upx;
+}
+
+.padding-right-xs {
+	padding-right: 10upx;
+}
+
+.padding-right-sm {
+	padding-right: 20upx;
+}
+
+.padding-right {
+	padding-right: 30upx;
+}
+
+.padding-right-lg {
+	padding-right: 40upx;
+}
+
+.padding-right-xl {
+	padding-right: 50upx;
+}
+
+.padding-bottom-xs {
+	padding-bottom: 10upx;
+}
+
+.padding-bottom-sm {
+	padding-bottom: 20upx;
+}
+
+.padding-bottom {
+	padding-bottom: 30upx;
+}
+
+.padding-bottom-lg {
+	padding-bottom: 40upx;
+}
+
+.padding-bottom-xl {
+	padding-bottom: 50upx;
+}
+
+.padding-left-xs {
+	padding-left: 10upx;
+}
+
+.padding-left-sm {
+	padding-left: 20upx;
+}
+
+.padding-left {
+	padding-left: 30upx;
+}
+
+.padding-left-lg {
+	padding-left: 40upx;
+}
+
+.padding-left-xl {
+	padding-left: 50upx;
+}
+
+.padding-lr-xs {
+	padding-left: 10upx;
+	padding-right: 10upx;
+}
+
+.padding-lr-sm {
+	padding-left: 20upx;
+	padding-right: 20upx;
+}
+
+.padding-lr {
+	padding-left: 30upx;
+	padding-right: 30upx;
+}
+
+.padding-lr-lg {
+	padding-left: 40upx;
+	padding-right: 40upx;
+}
+
+.padding-lr-xl {
+	padding-left: 50upx;
+	padding-right: 50upx;
+}
+
+.padding-tb-xs {
+	padding-top: 10upx;
+	padding-bottom: 10upx;
+}
+
+.padding-tb-sm {
+	padding-top: 20upx;
+	padding-bottom: 20upx;
+}
+
+.padding-tb {
+	padding-top: 30upx;
+	padding-bottom: 30upx;
+}
+
+.padding-tb-lg {
+	padding-top: 40upx;
+	padding-bottom: 40upx;
+}
+
+.padding-tb-xl {
+	padding-top: 50upx;
+	padding-bottom: 50upx;
+}
+
+/* -- 浮动 --  */
+
+.cf::after,
+.cf::before {
+	content: " ";
+	display: table;
+}
+
+.cf::after {
+	clear: both;
+}
+
+.fl {
+	float: left;
+}
+
+.fr {
+	float: right;
+}
+
+/* ==================
+          背景
+ ==================== */
+
+.line-red::after,
+.lines-red::after {
+	border-color: #e54d42;
+}
+
+.line-orange::after,
+.lines-orange::after {
+	border-color: #f37b1d;
+}
+
+.line-yellow::after,
+.lines-yellow::after {
+	border-color: #fbbd08;
+}
+
+.line-olive::after,
+.lines-olive::after {
+	border-color: #8dc63f;
+}
+
+.line-green::after,
+.lines-green::after {
+	border-color: #39b54a;
+}
+
+.line-cyan::after,
+.lines-cyan::after {
+	border-color: #1cbbb4;
+}
+
+.line-blue::after,
+.lines-blue::after {
+	border-color: #0081ff;
+}
+
+.line-purple::after,
+.lines-purple::after {
+	border-color: #6739b6;
+}
+
+.line-mauve::after,
+.lines-mauve::after {
+	border-color: #9c26b0;
+}
+
+.line-pink::after,
+.lines-pink::after {
+	border-color: #e03997;
+}
+
+.line-brown::after,
+.lines-brown::after {
+	border-color: #a5673f;
+}
+
+.line-grey::after,
+.lines-grey::after {
+	border-color: #8799a3;
+}
+
+.line-gray::after,
+.lines-gray::after {
+	border-color: #aaaaaa;
+}
+
+.line-black::after,
+.lines-black::after {
+	border-color: #333333;
+}
+
+.line-white::after,
+.lines-white::after {
+	border-color: #ffffff;
+}
+
+.bg-red {
+	background-color: #e54d42;
+	color: #ffffff;
+}
+
+.bg-orange {
+	background-color: #f37b1d;
+	color: #ffffff;
+}
+
+.bg-yellow {
+	background-color: #fbbd08;
+	color: #333333;
+}
+
+.bg-olive {
+	background-color: #8dc63f;
+	color: #ffffff;
+}
+
+.bg-green {
+	background-color: #39b54a;
+	color: #ffffff;
+}
+
+.bg-cyan {
+	background-color: #1cbbb4;
+	color: #ffffff;
+}
+
+.bg-blue {
+	background-color: #0081ff;
+	color: #ffffff;
+}
+
+.bg-purple {
+	background-color: #6739b6;
+	color: #ffffff;
+}
+
+.bg-mauve {
+	background-color: #9c26b0;
+	color: #ffffff;
+}
+
+.bg-pink {
+	background-color: #e03997;
+	color: #ffffff;
+}
+
+.bg-brown {
+	background-color: #a5673f;
+	color: #ffffff;
+}
+
+.bg-grey {
+	background-color: #8799a3;
+	color: #ffffff;
+}
+
+.bg-gray {
+	background-color: #f0f0f0;
+	color: #333333;
+}
+
+.bg-black {
+	background-color: #333333;
+	color: #ffffff;
+}
+
+.bg-white {
+	background-color: #ffffff;
+	color: #666666;
+}
+
+.bg-shadeTop {
+	background-image: linear-gradient(rgba(0, 0, 0, 1), rgba(0, 0, 0, 0.01));
+	color: #ffffff;
+}
+
+.bg-shadeBottom {
+	background-image: linear-gradient(rgba(0, 0, 0, 0.01), rgba(0, 0, 0, 1));
+	color: #ffffff;
+}
+
+.bg-red.light {
+	color: #e54d42;
+	background-color: #fadbd9;
+}
+
+.bg-orange.light {
+	color: #f37b1d;
+	background-color: #fde6d2;
+}
+
+.bg-yellow.light {
+	color: #fbbd08;
+	background-color: #fef2ced2;
+}
+
+.bg-olive.light {
+	color: #8dc63f;
+	background-color: #e8f4d9;
+}
+
+.bg-green.light {
+	color: #39b54a;
+	background-color: #d7f0dbff;
+}
+
+.bg-cyan.light {
+	color: #1cbbb4;
+	background-color: #d2f1f0;
+}
+
+.bg-blue.light {
+	color: #0081ff;
+	background-color: #cce6ff;
+}
+
+.bg-purple.light {
+	color: #6739b6;
+	background-color: #e1d7f0;
+}
+
+.bg-mauve.light {
+	color: #9c26b0;
+	background-color: #ebd4ef;
+}
+
+.bg-pink.light {
+	color: #e03997;
+	background-color: #f9d7ea;
+}
+
+.bg-brown.light {
+	color: #a5673f;
+	background-color: #ede1d9;
+}
+
+.bg-grey.light {
+	color: #8799a3;
+	background-color: #e7ebed;
+}
+
+.bg-gradual-red {
+	background-image: linear-gradient(45deg, #f43f3b, #ec008c);
+	color: #ffffff;
+}
+
+.bg-gradual-orange {
+	background-image: linear-gradient(45deg, #ff9700, #ed1c24);
+	color: #ffffff;
+}
+
+.bg-gradual-green {
+	background-image: linear-gradient(45deg, #39b54a, #8dc63f);
+	color: #ffffff;
+}
+
+.bg-gradual-purple {
+	background-image: linear-gradient(45deg, #9000ff, #5e00ff);
+	color: #ffffff;
+}
+
+.bg-gradual-pink {
+	background-image: linear-gradient(45deg, #ec008c, #6739b6);
+	color: #ffffff;
+}
+
+.bg-gradual-blue {
+	background-image: linear-gradient(45deg, #0081ff, #1cbbb4);
+	color: #ffffff;
+}
+
+.shadow[class*="-red"] {
+	box-shadow: 6upx 6upx 8upx rgba(204, 69, 59, 0.2);
+}
+
+.shadow[class*="-orange"] {
+	box-shadow: 6upx 6upx 8upx rgba(217, 109, 26, 0.2);
+}
+
+.shadow[class*="-yellow"] {
+	box-shadow: 6upx 6upx 8upx rgba(224, 170, 7, 0.2);
+}
+
+.shadow[class*="-olive"] {
+	box-shadow: 6upx 6upx 8upx rgba(124, 173, 55, 0.2);
+}
+
+.shadow[class*="-green"] {
+	box-shadow: 6upx 6upx 8upx rgba(48, 156, 63, 0.2);
+}
+
+.shadow[class*="-cyan"] {
+	box-shadow: 6upx 6upx 8upx rgba(28, 187, 180, 0.2);
+}
+
+.shadow[class*="-blue"] {
+	box-shadow: 6upx 6upx 8upx rgba(0, 102, 204, 0.2);
+}
+
+.shadow[class*="-purple"] {
+	box-shadow: 6upx 6upx 8upx rgba(88, 48, 156, 0.2);
+}
+
+.shadow[class*="-mauve"] {
+	box-shadow: 6upx 6upx 8upx rgba(133, 33, 150, 0.2);
+}
+
+.shadow[class*="-pink"] {
+	box-shadow: 6upx 6upx 8upx rgba(199, 50, 134, 0.2);
+}
+
+.shadow[class*="-brown"] {
+	box-shadow: 6upx 6upx 8upx rgba(140, 88, 53, 0.2);
+}
+
+.shadow[class*="-grey"] {
+	box-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2);
+}
+
+.shadow[class*="-gray"] {
+	box-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2);
+}
+
+.shadow[class*="-black"] {
+	box-shadow: 6upx 6upx 8upx rgba(26, 26, 26, 0.2);
+}
+
+.shadow[class*="-white"] {
+	box-shadow: 6upx 6upx 8upx rgba(26, 26, 26, 0.2);
+}
+
+.text-shadow[class*="-red"] {
+	text-shadow: 6upx 6upx 8upx rgba(204, 69, 59, 0.2);
+}
+
+.text-shadow[class*="-orange"] {
+	text-shadow: 6upx 6upx 8upx rgba(217, 109, 26, 0.2);
+}
+
+.text-shadow[class*="-yellow"] {
+	text-shadow: 6upx 6upx 8upx rgba(224, 170, 7, 0.2);
+}
+
+.text-shadow[class*="-olive"] {
+	text-shadow: 6upx 6upx 8upx rgba(124, 173, 55, 0.2);
+}
+
+.text-shadow[class*="-green"] {
+	text-shadow: 6upx 6upx 8upx rgba(48, 156, 63, 0.2);
+}
+
+.text-shadow[class*="-cyan"] {
+	text-shadow: 6upx 6upx 8upx rgba(28, 187, 180, 0.2);
+}
+
+.text-shadow[class*="-blue"] {
+	text-shadow: 6upx 6upx 8upx rgba(0, 102, 204, 0.2);
+}
+
+.text-shadow[class*="-purple"] {
+	text-shadow: 6upx 6upx 8upx rgba(88, 48, 156, 0.2);
+}
+
+.text-shadow[class*="-mauve"] {
+	text-shadow: 6upx 6upx 8upx rgba(133, 33, 150, 0.2);
+}
+
+.text-shadow[class*="-pink"] {
+	text-shadow: 6upx 6upx 8upx rgba(199, 50, 134, 0.2);
+}
+
+.text-shadow[class*="-brown"] {
+	text-shadow: 6upx 6upx 8upx rgba(140, 88, 53, 0.2);
+}
+
+.text-shadow[class*="-grey"] {
+	text-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2);
+}
+
+.text-shadow[class*="-gray"] {
+	text-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2);
+}
+
+.text-shadow[class*="-black"] {
+	text-shadow: 6upx 6upx 8upx rgba(26, 26, 26, 0.2);
+}
+
+.bg-img {
+	background-size: cover;
+	background-position: center;
+	background-repeat: no-repeat;
+}
+
+.bg-mask {
+	background-color: #333333;
+	position: relative;
+}
+
+.bg-mask::after {
+	content: "";
+	border-radius: inherit;
+	width: 100%;
+	height: 100%;
+	display: block;
+	background-color: rgba(0, 0, 0, 0.4);
+	position: absolute;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	top: 0;
+}
+
+.bg-mask view,
+.bg-mask cover-view {
+	z-index: 5;
+	position: relative;
+}
+
+.bg-video {
+	position: relative;
+}
+
+.bg-video video {
+	display: block;
+	height: 100%;
+	width: 100%;
+	-o-object-fit: cover;
+	object-fit: cover;
+	position: absolute;
+	top: 0;
+	z-index: 0;
+	pointer-events: none;
+}
+
+/* ==================
+          文本
+ ==================== */
+
+.text-xs {
+	font-size: 20upx;
+}
+
+.text-sm {
+	font-size: 24upx;
+}
+
+.text-df {
+	font-size: 28upx;
+}
+
+.text-lg {
+	font-size: 32upx;
+}
+
+.text-xl {
+	font-size: 36upx;
+}
+
+.text-xxl {
+	font-size: 44upx;
+}
+
+.text-sl {
+	font-size: 80upx;
+}
+
+.text-xsl {
+	font-size: 120upx;
+}
+
+.text-Abc {
+	text-transform: Capitalize;
+}
+
+.text-ABC {
+	text-transform: Uppercase;
+}
+
+.text-abc {
+	text-transform: Lowercase;
+}
+
+.text-price::before {
+	content: "¥";
+	font-size: 80%;
+	margin-right: 4upx;
+}
+
+.text-cut {
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	overflow: hidden;
+}
+
+.text-bold {
+	font-weight: bold;
+}
+
+.text-center {
+	text-align: center;
+}
+
+.text-content {
+	line-height: 1.6;
+}
+
+.text-left {
+	text-align: left;
+}
+
+.text-right {
+	text-align: right;
+}
+
+.text-red,
+.line-red,
+.lines-red {
+	color: #e54d42;
+}
+
+.text-orange,
+.line-orange,
+.lines-orange {
+	color: #f37b1d;
+}
+
+.text-yellow,
+.line-yellow,
+.lines-yellow {
+	color: #fbbd08;
+}
+
+.text-olive,
+.line-olive,
+.lines-olive {
+	color: #8dc63f;
+}
+
+.text-green,
+.line-green,
+.lines-green {
+	color: #39b54a;
+}
+
+.text-cyan,
+.line-cyan,
+.lines-cyan {
+	color: #1cbbb4;
+}
+
+.text-blue,
+.line-blue,
+.lines-blue {
+	color: #0081ff;
+}
+
+.text-purple,
+.line-purple,
+.lines-purple {
+	color: #6739b6;
+}
+
+.text-mauve,
+.line-mauve,
+.lines-mauve {
+	color: #9c26b0;
+}
+
+.text-pink,
+.line-pink,
+.lines-pink {
+	color: #e03997;
+}
+
+.text-brown,
+.line-brown,
+.lines-brown {
+	color: #a5673f;
+}
+
+.text-grey,
+.line-grey,
+.lines-grey {
+	color: #8799a3;
+}
+
+.text-gray,
+.line-gray,
+.lines-gray {
+	color: #aaaaaa;
+}
+
+.text-black,
+.line-black,
+.lines-black {
+	color: #333333;
+}
+
+.text-white,
+.line-white,
+.lines-white {
+	color: #ffffff;
+}

+ 373 - 0
uni_applet/pageA/enter/cateringindustry.vue

@@ -0,0 +1,373 @@
+<template>
+	<view class='content'>
+		<view class='wrap'>
+			<u--form  ref="uForm">
+				<u-form-item labelWidth='80' labelPosition='top' label="营业执照">
+					<u-upload height='208' width='320' :fileList="fileList2" @afterRead="afterRead($event,1)" @delete="deletePic($event,1)" name="2" multiple
+						:maxCount="1">
+						<image style='width:680rpx;height:417rpx;' src="../../static/image/enter/yingyezhizhao.png" mode=""></image>
+					</u-upload>
+				</u-form-item>
+				<u-form-item labelWidth='80' labelPosition='top' label="经营许可证">
+					<u-upload height='208' width='320' :fileList="fileList3" @afterRead="afterRead($event,2)" @delete="deletePic($event,2)" name="3" multiple
+						:maxCount="1">
+						<image style='width:680rpx;height:417rpx;' src="../../static/image/enter/jingyingxukezheng.png" mode=""></image>
+					</u-upload>
+				</u-form-item>
+				<u-form-item  labelWidth='150' labelPosition='left' label="经营许可证有效期">
+					<view style='text-align:right;' @click='openjyxkz'>{{form.operateCertificateDate?form.operateCertificateDate:'选择日期'}}<image src="@/static/image/yjt.png" mode=""
+								style="margin-left:10rpx;width:12rpx;height: 21rpx;"></image></view>
+				</u-form-item>
+				<uni-calendar
+				   :insert="false"
+				   :lunar="true" 
+					ref="calendar"
+				   :start-date="startDate"
+				   @confirm="confirm"
+				    />
+					<u-form-item  labelWidth='150' labelPosition='left' label="店铺名称">
+						<u-input inputAlign='right' border='none' placeholder='输入店铺名称' v-model="form.shopNames" />
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="经营者">
+						<u-input inputAlign='right' border='none' placeholder='输入经营者姓名' v-model="form.operater" />
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="经营者手机号">
+						<u-input inputAlign='right' maxlength="15" border='none' placeholder='输入经营者手机号' v-model="form.operaterPhone" />
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="验证码">
+						<u-input inputAlign='right' border='none' placeholder='输入验证码' v-model="form.verifyCode" >
+							<template slot="suffix">
+								<u-code ref="uCode"
+									@change="codeChange"
+									seconds="60"
+									changeText="X秒重新获取"
+								></u-code>
+
+								<view class='get_code' @click='getCode'>{{tips}}</view>
+							</template>
+						</u-input>
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="业务联系人(选填)">
+						<u-input inputAlign='right' border='none' placeholder='输入联系人姓名' v-model="form.contacts" />
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="业务联系电话(选填)">
+						<u-input inputAlign='right' maxlength="15" border='none' placeholder='输入联系电话' v-model="form.contactsPhone" />
+					</u-form-item>
+					<u-form-item labelWidth='80' labelPosition='left' @click='placeSelect(),hideKeyboard()' label="店铺位置">
+						<view style='text-align:right;' v-if="form.province">{{ form.province }}{{ form.city }}{{ form.area }}</view>
+						<view style='text-align:right;' v-else>
+							<text style='text-align:right;'>选择位置 </text>
+							<image src="@/static/image/yjt.png" mode=""
+								style="margin-left:10rpx;width:12rpx;height: 21rpx;"></image>
+						</view>
+					</u-form-item>
+					<u-form-item labelWidth='80' labelPosition='left' label="详细地址">
+						<u-input inputAlign='right' maxlength="15" border='none' placeholder='输入详细地址,不超过15个字' v-model="form.detailedAddress" />
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="营业时间">
+						<view style='text-align:right;' @click='selectTime'>{{form.timesection}}<image src="@/static/image/yjt.png" mode=""
+								style="margin-left:10rpx;width:12rpx;height: 21rpx;"></image></view>
+					</u-form-item>
+					<smh-time-range :is-under='show' :time="['18','0','42']" @confrim="confrim" @cancel="cancel"></smh-time-range>
+					<!-- label -->
+					<view class='flex justify-space-between align-item-center'>
+						<view>标签(2-4个,最多5个字)</view> 
+						<view class='add_label' @click='addLabel'>新增</view>
+					</view>
+					<view style='flex-wrap: wrap;' class='flex'>
+						<view style='margin:10rpx;width:47%;' class='flex align-item-center' v-for='item in labelList'>
+							<u-input inputAlign='right' placeholder='输入标签文字' v-model="item.value" />
+							<view class="iconfont_no icon_merchants_enterjianshao"></view>
+						</view>
+					</view>
+					
+				<u-form-item labelWidth='240' labelPosition='top' label="门面及门头照片(1张,店名文字清晰)">
+					<u-upload :fileList="fileList4" @afterRead="afterRead($event,3)" @delete="deletePic($event,3)" name="4" multiple
+						:maxCount="1">
+						
+					</u-upload>
+				</u-form-item>
+				<u-form-item labelWidth='120' labelPosition='top' label="室内照片(1-6张)">
+					<u-upload :fileList="fileList5" @afterRead="afterRead($event,4)" @delete="deletePic($event,4)" name="5" multiple
+						:maxCount="6">
+						
+					</u-upload>
+				</u-form-item>
+			</u--form>
+			<view class="footer">
+				<button @click='submit' class="submit">提交</button>
+			</view>
+		</view>
+		<u-modal :show="isSubmit" :content='content' @confirm="$u.debounce(confirmSubmit, 500)" showCancelButton
+			@cancel="isSubmit=false" @close="isSubmit=false" closeOnClickOverlay></u-modal>
+	</view>
+</template>
+
+<script>
+	var that
+	import uploadImage from '@/components/ossutil/uploadFile.js';
+	export default {
+		data() {
+			return {
+				content:'确定提交入驻信息',
+				isSubmit:false,
+				form:{
+					commonId:uni.getStorageSync("userInfo").id,
+					mainBody:'商铺',
+					lookFlag:0,
+					startDate:'',
+					city: '',
+					area: '',
+					province: '',
+					location: '',
+					detailedAddress: '',
+					businessLicense:'',
+					operateCertificate:'',
+					coverImage:'',
+					indoorImage:'',
+					timesection:'09:00~21:00',
+					startDate:'09:00',
+					endDate:'21:00',
+					operateCertificateDate:'',
+				},
+				indoorImageArray:[],
+				tips:'发送验证码',
+				startDate:'',
+				show:false,
+				labelList:[{value:''},{value:''}],
+				fileList2:[],
+				fileList3:[],
+				fileList4:[],
+				fileList5:[],
+				
+			}
+		},
+		onLoad() {
+			that = this
+		},
+		onShow(){
+			var date = new Date().toISOString().slice(0, 10)
+			this.startDate=date
+			console.log(date)
+			
+		},
+		methods: {
+			submit(){
+				if(this.labelList.length>0){
+					var arr=[]
+					for(var i=0;i<this.labelList.length;i++){
+						if(!this.labelList[i].value){
+							uni.showToast({
+								icon: "none",
+								title: '标签请输入内容!',
+								duration: 3000
+							});
+							return
+						}
+						if(this.labelList[i].value.length>5){
+							uni.showToast({
+								icon: "none",
+								title: '标签最多5个字!',
+								duration: 3000
+							});
+							return
+						}
+						arr.push(this.labelList[i].value)
+					}
+					this.form.label=arr.toString()
+				}
+				this.isSubmit = true
+			},
+			confirmSubmit() {
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				})
+				this.$request.baseRequest('admin.tourism.foodInfo', 'add', {
+					foodInfo: JSON.stringify(this.form)
+				}, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+			
+					uni.hideLoading()
+				}).then(res => {
+					this.isSubmit = false
+					uni.showToast({
+						icon: "success",
+						title: '提交成功,请等待平台审核',
+						duration: 2000
+					});
+					that.indoorImageArray=[]
+					uni.navigateBack()
+			
+				})
+			},
+			concel(e){
+				this.show=false
+				console.log(e)
+			},
+			confrim(e){
+				console.log(e)
+				this.show=false
+				this.form.timesection=e.time
+				this.form.startDate=e.start
+				this.form.endDate=e.end
+			},
+			selectTime(){
+				this.show=true
+			},
+			addLabel(){
+				if(this.labelList.length>=4){
+					uni.showToast({
+						icon: "success",
+						title: '最多4个标签!',
+						duration: 2000
+					});
+					return
+				}
+				this.labelList.push({value:''})
+			},
+			codeChange(text) {
+			    this.tips = text;
+			},
+			getCode() {
+				if(!this.form.operaterPhone){
+					uni.showToast({
+						icon: "none",
+						title: '请输入手机号再获取验证码!',
+						duration: 2000
+					});
+					return
+				}
+			    if (this.$refs.uCode.canGetCode) {
+			         // 模拟向后端请求验证码
+			        uni.showLoading({
+			        title: '正在获取验证码'
+			        })
+					this.$request.baseRequest('user', 'sendVerifyCode', {
+						phone: this.form.operaterPhone
+					}, failres => {
+						uni.showToast({
+							icon: "none",
+							title: failres.errmsg,
+							duration: 3000
+						});
+						uni.hideLoading()
+					}).then(res => {
+						
+								
+					})
+			        setTimeout(() => {
+			            uni.hideLoading();
+			            // 这里此提示会被this.start()方法中的提示覆盖
+			         
+			            // 通知验证码组件内部开始倒计时
+			            this.$refs.uCode.start();
+			        }, 2000);
+			    } else {
+			        uni.showToast({
+			        	icon: "success",
+			        	title: '提交成功!',
+			        	duration: 2000
+			        });
+			    }
+			},
+			confirm(e){
+				this.form.operateCertificateDate = e.fulldate
+				this.$forceUpdate()
+				console.log(e)
+			},
+			openjyxkz(){
+				  this.$refs.calendar.open();
+			},
+			placeSelect() {
+				uni.chooseLocation({
+					success: function(res) {
+						console.log(res);
+						that.form.location = res.latitude + ',' + res.longitude
+						let _address = that.$helper.formatLocation(res.address)
+						console.log(_address)
+						that.form.province = _address.Province
+						that.form.city = _address.City
+						that.form.area = _address.Country
+						that.form.detailedAddress = _address.Village
+						that.$forceUpdate()
+					}
+				});
+			},
+			hideKeyboard() {
+				uni.hideKeyboard()
+			},
+			// 删除图片
+			deletePic(event,status) {
+				this[`fileList${event.name}`].splice(event.index, 1)
+				that.indoorImageArray.splice(event.index, 1)
+				that.form.indoorImage =that.indoorImageArray.toString()
+			},
+			// 新增图片
+			async afterRead(event,status) {
+				// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
+				let lists = [].concat(event.file)
+				let fileListLen = this[`fileList${event.name}`].length
+				lists.map((item) => {
+					this[`fileList${event.name}`].push({
+						...item,
+						status: 'uploading',
+						message: '上传中'
+					})
+				})
+				for (let i = 0; i < lists.length; i++) {
+					const result = await this.uploadFilePromise(lists[i].url,status)
+					
+					let item = this[`fileList${event.name}`][fileListLen]
+					this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
+						status: 'success',
+						message: '',
+						url: result
+					}))
+					fileListLen++
+					console.log(that.form, this[`fileList${event.name}`])
+					
+				}
+			},
+			uploadFilePromise(res,status) {
+				return new Promise((resolve, reject) => {
+					uploadImage(res, 'cardImages/',
+						result => {
+							if(status==1){
+								that.form.businessLicense = result
+							}else if(status==2){
+								that.form.operateCertificate = result
+							}else if(status==3){
+								that.form.coverImage = result
+							}else if(status==4){
+								that.indoorImageArray.push(result)
+								that.form.indoorImage =that.indoorImageArray.toString()
+							}
+							resolve(res)
+						}
+					)
+				})
+			},
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+ .icon_merchants_enterjianshao{
+	 margin-left:10rpx;
+	 font-size:50rpx;
+	 color:#666;
+ }
+ .add_label,.get_code{
+
+	background: #5F7DE9;
+	color: #fff;
+	padding: 10rpx 20rpx;
+	border-radius: 10rpx;
+	font-size: 26rpx;
+ }
+</style>

+ 386 - 0
uni_applet/pageA/enter/enter.vue

@@ -0,0 +1,386 @@
+<template>
+	<view>
+		 <u-navbar
+		            title="入驻"
+		            placeholder='true'
+		        >
+		            <view
+		                class="u-nav-slot"
+		                slot="left"
+		            >
+		            </view>
+		        </u-navbar>
+		<view>
+			<u-swiper :list="fileList"
+			autoplay
+			imgMode='aspectFit'
+			height='200'
+			radius='0'
+			:circular="true"
+			@change="e => current = e.current" @click="click">
+				<view slot="indicator" class="indicator">
+					<view
+			            class="indicator__dot"
+			            v-for="(item, index) in fileList"
+			            :key="index"
+			            :class="[index === current && 'indicator__dot--active']">
+			        </view>
+				</view>
+			</u-swiper>
+		</view>
+		<view>
+			 <luyj-grid-link :list="list" @gridExc="clickGrid"></luyj-grid-link>
+			 <u-modal :show="showAuthorizePhone" :showConfirmButton="false">
+			 	<view class="slot-content">
+			 		<view class="auth-card">
+			 			<view class="img">
+			 				<img class="avatar-img" src="@/static/logo.png" mode="widthFix">
+			 			</view>
+			 			<view class="content">手机登录后才能查看名片哦~</view>
+			 		</view>
+			 		<view class="auth-btncard">
+			 			<view class="btn-unok">
+			 				<u-button :customStyle="customStyleUnOk" @click="showAuthorizePhone=false" :plain="true">
+			 					拒绝</u-button>
+			 			</view>
+			 			<view class="btn-ok">
+			 				<u-button :customStyle="customStyleOk" open-type="getPhoneNumber"
+			 					@getphonenumber="getPhoneNumber"> 立即登录</u-button>
+			 			</view>
+			 		</view>
+			 	</view>
+			 </u-modal>
+			<u-modal :show="showAuthorizeUser" :showConfirmButton="false">
+				<view class="slot-content">
+					<view class="auth-card">
+						<view class="img">
+							<img class="avatar-img" src="/static/image/logo.png" mode="widthFix">
+						</view>
+						<view class="content">邀请您补全个人信息<br></br>(昵称、头像)</view>
+						<view style="margin-left: 100rpx;margin-right: 100rpx">
+							<u-form :model="userInfo" ref="uForm">
+								<u-form-item label="头像">
+									<button class="avatar-wrapper" open-type="chooseAvatar" @chooseavatar="onChooseAvatar"
+										slot="right">
+										<image class="avatar"
+											:src="userInfo.head?userInfo.head:'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0'">
+										</image>
+									</button>
+								</u-form-item>
+								<u-form-item label="昵称">
+									<u-input inputAlign='right' v-model="userInfo.nickname" class="weui-input"
+										@blur="userNameInput" placeholder="请输入昵称" border="false" />
+									<!-- <input type="nickname" :value="userInfo.nickname" class="weui-input" @blur="userNameInput" placeholder="请输入昵称"/> -->
+								</u-form-item>
+							</u-form>
+						</view>
+					</view>
+					<view class="auth-btncard">
+						<view class="btn-unok"><u-button :customStyle="customStyleUnOk" @click="authUser(0)">
+								拒绝</u-button>
+						</view>
+						<view class="btn-ok">
+							<u-button :customStyle="customStyleOk" @click="authUser(1)"> 允许</u-button>
+						</view>
+					</view>
+				</view>
+			</u-modal>
+		</view>
+		<u-tabbar
+			:value="tabbarCheck"
+			@change="name => tabbarCheck = name"
+			activeColor="#5F7DE9"
+		>
+			<u-tabbar-item name="team" text="加入">
+				<image
+					class="u-page__item__slot-icon"
+					slot="active-icon"
+					src="@/static/image/nav-icon/antOutline-team Copy.png"
+				></image>
+				<image
+					class="u-page__item__slot-icon"
+					slot="inactive-icon"
+					src="@/static/image/nav-icon/antOutline-team.png"
+				></image>
+			</u-tabbar-item>
+			<u-tabbar-item name="notification" text="通知">
+				<image
+					class="u-page__item__slot-icon"
+					slot="active-icon"
+					src="@/static/image/nav-icon/md-notifications_none Copy.png"
+				></image>
+				<image
+					class="u-page__item__slot-icon"
+					slot="inactive-icon"
+					src="@/static/image/nav-icon/md-notifications_none.png"
+				></image>
+			</u-tabbar-item>
+			<u-tabbar-item name="user" text="我的">
+				<image
+					class="u-page__item__slot-icon"
+					slot="active-icon"
+					src="@/static/image/nav-icon/antOutline-user1 Copy.png"
+				></image>
+				<image
+					class="u-page__item__slot-icon"
+					slot="inactive-icon"
+					src="@/static/image/nav-icon/antOutline-user1.png"
+				></image>
+			</u-tabbar-item>
+		</u-tabbar>
+	</view>
+</template>
+
+<script>
+	var that
+	import luyjGridLink from '@/uni_modules/lxm-fold-link/luyj-grid-link/components/luyj-grid-link/luyj-grid-link.vue'
+	export default {
+		components: {
+			"luyjGridLink": luyjGridLink
+		},
+		data() {
+			return {
+				fileList:[],
+				tabbarCheck:'team',
+				showAuthorizePhone:false,
+				showAuthorizeUser:false,
+				userInfo: {
+					head: '',
+					nickname: '',
+					phone: '',
+				},
+				customStyleUnOk: {
+					marginTop: '20rpx',
+					color: '#5F7DE9',
+					border: '2px solid #5F7DE9',
+					"border-radius": "10px",
+					fontSize: "32rpx"
+				},
+				customStyleOk: {
+					marginTop: '20rpx',
+					color: '#fff',
+					border: '2px solid #5F7DE9',
+					"border-radius": "10px",
+					fontSize: "32rpx",
+					background: "#5F7DE9"
+				},
+				list: [
+					{
+				        title: '全部分类',
+				        // cur: 'basic',
+				        bgColor: '', // 背景颜色
+				        color: 'blue',
+				        title_show: true,
+				        showAll: false,
+				        colNumber: 4, // 显示的列数
+				        iconsList: [
+							{
+								cuIcon: '1_canyin-35',
+								color: 'blue',
+								name: '餐饮',
+								url: '/pageA/enter/cateringindustry'
+							},
+							{
+								cuIcon: 'zufang',
+								color: 'blue',
+								name: '民宿',
+								url: '/pageA/enter/homestay'
+							},
+							{
+				                cuIcon: 'jiudian-38',
+				                color: 'blue',
+				                name: '酒店',
+				                 url: '/pageA/enter/hotel'
+				            }
+				        ]
+				    },
+					{
+						title: '我的入驻',
+						// cur: 'basic',
+						bgColor: '', // 背景颜色
+						color: 'blue',
+						title_show: true,
+						showAll: false,
+						colNumber: 4, // 显示的列数
+						iconsList: [
+							{
+								cuIcon: '1_canyin-35',
+								color: 'blue',
+								name: '餐饮',
+								url: '/pageA/enter/myCateringdustry/index'
+							},
+							{
+								cuIcon: 'zufang',
+								color: 'blue',
+								name: '民宿',
+								url: '/pageA/enter/myHomestay/index'
+							},
+							{
+						        cuIcon: 'jiudian-38',
+						        color: 'blue',
+						        name: '酒店',
+						         url: '/pageA/enter/hotel'
+						    }
+						]
+						},
+				    ], 
+			}
+		},
+		onLoad(){
+			that = this
+			this.getList()
+		},
+		onShow: function() {
+			let _isLoad = uni.getStorageSync("scanAddCardToIndex")
+			if (uni.getStorageSync("userInfo").phone) {
+				// that.$request.baseRequest('admin.unimall.cardNewsInfo', 'list', {
+				// 	receiveId: uni.getStorageSync("userInfo").id,
+				// }, failres => {
+				// 	console.log('res+++++', failres.errmsg)
+				// 	that.$refs.uToast.show({
+				// 		type: 'error',
+				// 		message: failres.errmsg,
+				// 	})
+				// }).then(res => {
+				// 	that.noticeList = res.data.items
+				// 	if (that.noticeList.length > 0) {
+				// 		var data = that.noticeList.filter((item) => {
+				// 			return item.newsFlag == 0
+				// 		})
+				// 		that.unread = data ? data.length : 0
+				// 	}
+				// 	console.log(that.unread)
+				// })
+			} else {
+				this.showAuthorizePhone = true
+			}
+		
+		},
+		methods: {
+			getList(){
+				 this.$request.baseRequest('admin.tourism.carouselManagement', 'list', {
+					page: 1,
+					limit: 9999,
+					classify:'商家版首页'
+				 }, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});	
+				 }).then(res => {
+					this.fileList=res.data.items
+				 })
+			},
+			toDetail(url){
+				uni.navigateTo({
+					url:url
+				})
+			},
+			async getPhoneNumber(e) {
+				that.userInfo = await this.$request.wxlogin()
+				that.userInfo.phone = await this.$request.getPhone(e, that.userInfo)
+				this.showAuthorizePhone = false
+				this.showAuthorizeUser = true
+			
+			},
+			async authUser(type) {
+				//同步信息,没有头像和昵称自动生成
+				this.userInfo = await this.$request.syncInfo(this.userInfo)
+				if (this.userInfo.openId) {
+					uni.setStorageSync("userInfo", that.userInfo)
+					that.showAuthorizeUser = false
+					// that.mescroll.resetUpScroll()
+				}
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+.slot-content {
+		width: 100%;
+	}
+
+
+
+	/deep/.u-checkbox-group {
+
+		position: absolute;
+		right: 20px;
+		z-index: 99;
+		top: 30px;
+	}
+
+	/deep/.u-checkbox__icon-wrap.u-checkbox__icon-wrap--square {
+		border-color: #D7DEEB !important;
+	}
+
+
+
+	/deep/.mescroll-body {
+		min-height: 558px !important;
+		height: 558px !important;
+		background-color: green;
+		overflow: scroll !important;
+	}
+
+	.auth-btncard {
+		display: flex !important;
+		justify-content: space-between !important;
+
+		.btn-unok {
+			width: 40%;
+		}
+
+		.btn-ok {
+			width: 40%;
+		}
+	}
+
+	.auth-card {
+		text-align: center;
+
+		.avatar-img {
+			width: 250rpx;
+		}
+
+		.title {
+			font-size: 20rpx;
+		}
+
+		.content {
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #1A1A1A;
+			margin-bottom: 30rpx;
+		}
+	}
+
+	.avatar-wrapper {
+		color: #333 !important;
+		border: none !important;
+		border-radius: 0 !important;
+		background-color: transparent !important;
+		padding: 0;
+	}
+
+	.avatar-wrapper::after {
+		border: none !important;
+	}
+
+	.avatar {
+		width: 100rpx;
+		height: 100rpx;
+		overflow: hidden;
+		border-radius: 100%;
+	}
+
+	/deep/.u-popup__content {
+		border-radius: 20rpx !important;
+	}
+	/deep/.u-tabbar-item image{
+		width:40rpx;
+		height:40rpx;
+	}
+</style>

+ 283 - 0
uni_applet/pageA/enter/homestay.vue

@@ -0,0 +1,283 @@
+<template>
+	<view class='content'>
+		<view class='wrap'>
+			<u--form  ref="uForm">
+				<u-form-item   labelWidth='120' labelPosition='top' label="身份证头像面">
+					<u-upload height='208' width='320' :fileList="fileList4" @afterRead="afterRead($event,1)" @delete="deletePic" name="4" multiple
+						:maxCount="1">
+						<view class="bgc">
+							<image class='circle' style='width:123rpx;height:123rpx;' src="../../static/image/enter/camera.png"  mode=""></image>
+							<view>请上传头像面</view>
+						</view>
+						</u-upload>
+				</u-form-item>
+				<u-form-item   labelWidth='120' labelPosition='top' label="身份证国徽面">
+					<u-upload  height='208' width='320' :fileList="fileList6" @afterRead="afterRead($event,2)" @delete="deletePic" name="6" multiple
+						:maxCount="1">
+						<view class="bgc1">
+							<image class='circle' style='width:123rpx;height:123rpx;' src="../../static/image/enter/camera.png" mode=""></image>
+							<view>请上传国徽面</view>
+						</view>
+					</u-upload>
+				</u-form-item>
+				<u-form-item  labelWidth='120' labelPosition='left' label="身份证号码">
+					<u-input inputAlign='right' border='none' placeholder='请输入身份证号码' v-model="form.personNo" />
+				</u-form-item>
+				<uni-calendar
+				   :insert="false"
+				   :lunar="true" 
+					ref="calendar"
+				   :start-date="startDate"
+				   @confirm="confirm"
+				    />
+					<u-form-item  labelWidth='150' labelPosition='left' label="姓名">
+						<u-input inputAlign='right' border='none' placeholder='输入姓名' v-model="form.realname" />
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="手机号">
+						<u-input inputAlign='right' border='none' placeholder='输入手机号' v-model="form.phone" />
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="验证码">
+						<u-input inputAlign='right' border='none' placeholder='输入验证码' v-model="form.verifyCode" >
+							<template slot="suffix">
+								<u-code ref="uCode"
+									@change="codeChange"
+									seconds="60"
+									changeText="X秒重新获取"
+								></u-code>
+
+								<view class='get_code' @click='getCode'>{{tips}}</view>
+							</template>
+						</u-input>
+					</u-form-item>
+				</u-form-item>
+				<u-form-item>
+					<view class="flex service align-center">
+						<view @click='' :class='consentStatus?"icon_merchants_entergouxuan":"icon_merchants_enterweigouxuan"' class="iconfont_no"></view>
+						我已阅读并同意
+						<navigator
+							url="/pageA/webview?can_share=false&url=https://liangxin.zthymaoyi.com/userAgreement.html"
+							class="path" hover-class="navigator-hover">《民宿入驻协议》</navigator>的相关规定
+					</view>
+				</u-form-item>
+			</u--form>
+			<view class="footer">
+				<button @click='submit' class="submit">提交</button>
+			</view>
+			<u-modal :show="isSubmit" :content='content' @confirm="$u.debounce(confirmSubmit, 500)" showCancelButton
+				@cancel="isSubmit=false" @close="isSubmit=false" closeOnClickOverlay></u-modal>
+		</view>
+	</view>
+</template>
+
+<script>
+	var that
+	import uploadImage from '@/components/ossutil/uploadFile.js';
+	export default {
+		data() {
+			return {
+				form:{
+					commonId:uni.getStorageSync("userInfo").id,
+					type:"1",
+				},
+				consentStatus:false,
+				tips:'发送验证码',
+				startDate:'',
+				isSubmit:false,
+				fileList4:[],
+				fileList6:[],
+				content:'确定提交入驻信息',
+			}
+		},
+		onLoad() {
+			that = this
+		},
+		onShow(){
+			var date = new Date().toISOString().slice(0, 10)
+			this.startDate=date
+		},
+		methods: {
+			codeChange(text) {
+			    this.tips = text;
+			},
+			getCode() {
+				if(!this.form.phone){
+					uni.showToast({
+						icon: "none",
+						title: '请输入手机号再获取验证码!',
+						duration: 2000
+					});
+					return
+				}
+			    if (this.$refs.uCode.canGetCode) {
+			         // 模拟向后端请求验证码
+			        uni.showLoading({
+			        title: '正在获取验证码'
+			        })
+					this.$request.baseRequest('user', 'sendVerifyCode', {
+						phone: this.form.phone
+					}, failres => {
+						uni.showToast({
+							icon: "none",
+							title: failres.errmsg,
+							duration: 3000
+						});
+						uni.hideLoading()
+					}).then(res => {
+						
+								
+					})
+			        setTimeout(() => {
+			            uni.hideLoading();
+			            // 这里此提示会被this.start()方法中的提示覆盖
+			         
+			            // 通知验证码组件内部开始倒计时
+			            this.$refs.uCode.start();
+			        }, 2000);
+			    } else {
+			        uni.showToast({
+			        	icon: "success",
+			        	title: '提交成功!',
+			        	duration: 2000
+			        });
+			    }
+			},
+			submit(){
+				this.isSubmit = true
+			},
+			confirmSubmit(){
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				})
+				this.$request.baseRequest('admin.tourism.homestayInfo', 'add', {
+					homestayInfo: JSON.stringify(this.form)
+				}, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+							
+					uni.hideLoading()
+				}).then(res => {
+					this.isSubmit = false
+					uni.showToast({
+						icon: "success",
+						title: '提交成功,请等待平台审核',
+						duration: 2000
+					});
+					uni.navigateBack()
+							
+				})
+			},
+			// 删除图片
+			deletePic(event,status) {
+				this[`fileList${event.name}`].splice(event.index, 1)
+			},
+			// 新增图片
+			async afterRead(event,status) {
+				// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
+				let lists = [].concat(event.file)
+				let fileListLen = this[`fileList${event.name}`].length
+				lists.map((item) => {
+					this[`fileList${event.name}`].push({
+						...item,
+						status: 'uploading',
+						message: '上传中'
+					})
+				})
+				for (let i = 0; i < lists.length; i++) {
+					const result = await this.uploadFilePromise(lists[i].url,status)
+					
+					let item = this[`fileList${event.name}`][fileListLen]
+					this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
+						status: 'success',
+						message: '',
+						url: result
+					}))
+					fileListLen++
+					console.log(that.form, this[`fileList${event.name}`])
+					
+				}
+			},
+			uploadFilePromise(res,status) {
+				return new Promise((resolve, reject) => {
+					uploadImage(res, 'cardImages/',
+						result => {
+							if(status==1){
+								that.form.personImageFront = result
+									uni.showLoading({
+										title: '加载中',
+										mask: true
+									})
+									that.$request.baseRequest('admin.tourism.productManagement', 'personShibie', {
+										personImageFront: that.form.personImageFront
+									}, failres => {
+										uni.showToast({
+											icon: "none",
+											title: failres.errmsg,
+											duration: 3000
+										});	
+										uni.hideLoading()
+									}).then(res => {
+										console.log(res)
+										uni.hideLoading()
+										that.form.personNo=res.data.recPersonNo
+										console.log(that.form)
+										that.$forceUpdate()	
+									})
+							}else if(status==2){
+								that.form.personImageBack = result
+							}
+							resolve(res)
+						}
+					)
+				})
+			},
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+ .wrap{
+	 padding:20rpx;
+ }
+ .icon_merchants_enterjian1{
+	 margin-left:10rpx;
+	 font-size:50rpx;
+ }
+ .add_label,.get_code{
+
+	background: #5F7DE9;
+	color: #fff;
+	padding: 10rpx 20rpx;
+	border-radius: 10rpx;
+	font-size: 26rpx;
+ }
+ .circle{
+ 	margin:110rpx 0 20rpx 0;
+ }
+ // 人像
+ .bgc,.bgc1{
+ 	 width:672rpx;
+ 	 height:417rpx;
+ 	 background:url('https://taohaoliang.oss-cn-beijing.aliyuncs.com/pcfiles/card2.png') no-repeat center;
+ 	 background-size: 100%;
+ 	 text-align:center;
+ }
+ // 国徽
+ .bgc1{
+ 	 background:url('https://taohaoliang.oss-cn-beijing.aliyuncs.com/pcfiles/card.png') no-repeat center;
+ 	 background-size: 100%;
+ }
+ .path {
+ 	color: #2772FB;
+ 
+ }
+ .icon_merchants_enterweigouxuan{
+	 color:#999;
+ }
+ .icon_merchants_entergouxuan{
+	 color:#5F7DE9;
+ }
+</style>

+ 270 - 0
uni_applet/pageA/enter/hotel.vue

@@ -0,0 +1,270 @@
+<template>
+	<view class='content'>
+		<view class='wrap'>
+			<u--form  ref="uForm">
+				<u-form-item labelWidth='80' labelPosition='top' label="营业执照">
+					<u-upload height='208' width='320' :fileList="fileList2" @afterRead="afterRead($event,1)" @delete="deletePic" name="2" multiple
+						:maxCount="1">
+						<image style='width:680rpx;height:417rpx;' src="../../static/image/enter/yingyezhizhao.png" mode=""></image>
+					</u-upload>
+				</u-form-item>
+				<uni-calendar
+				   :insert="false"
+				   :lunar="true" 
+					ref="calendar"
+				   :start-date="startDate"
+				   @confirm="confirm"
+				    />
+					<u-form-item  labelWidth='150' labelPosition='left' label="酒店名称">
+						<u-input inputAlign='right' border='none' placeholder='输入酒店名称' v-model="form.hotelName" />
+					</u-form-item>
+					<u-form-item labelWidth='80' labelPosition='left' @click='placeSelect(),hideKeyboard()' label="店铺位置">
+						<view style='text-align:right;' v-if="form.province">{{ form.province }}{{ form.city }}{{ form.area }}</view>
+						<view style='text-align:right;' v-else>
+							<text style='text-align:right;'>选择位置 </text>
+							<image src="@/static/image/yjt.png" mode=""
+								style="margin-left:10rpx;width:12rpx;height: 21rpx;"></image>
+						</view>
+					</u-form-item>
+					<u-form-item labelWidth='80' labelPosition='left' label="详细地址">
+						<u-input inputAlign='right' maxlength="15" border='none' placeholder='输入详细地址,不超过15个字' v-model="form.detailedAddress" />
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="法人姓名">
+						<u-input inputAlign='right' border='none' placeholder='输入法人姓名' v-model="form.legalName" />
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="联系人">
+						<u-input inputAlign='right' border='none' placeholder='输入联系人姓名' v-model="form.realname" />
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="手机号">
+						<u-input inputAlign='right' border='none' placeholder='输入手机号' v-model="form.phone" />
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="验证码">
+						<u-input inputAlign='right' border='none' placeholder='输入验证码' v-model="form.verifyCode" >
+							<template slot="suffix">
+								<u-code ref="uCode"
+									@change="codeChange"
+									seconds="60"
+									changeText="X秒重新获取"
+								></u-code>
+
+								<view class='get_code' @click='getCode'>{{tips}}</view>
+							</template>
+						</u-input>
+					</u-form-item>
+				</u-form-item>
+				<u-form-item  labelWidth='150' labelPosition='left' label="酒店座机(选填)">
+					<u-input inputAlign='right' border='none' placeholder='输入座机号' v-model="form.landlinePhone" />
+				</u-form-item>
+				<u-form-item>
+					<view class="flex service align-center">
+						<view @click='' :class='consentStatus?"icon_merchants_entergouxuan":"icon_merchants_enterweigouxuan"' class="iconfont_no"></view>
+						我已阅读并同意
+						<navigator
+							url="/pageA/webview?can_share=false&url=https://liangxin.zthymaoyi.com/userAgreement.html"
+							class="path" hover-class="navigator-hover">《酒店入驻协议》</navigator>的相关规定
+					</view>
+				</u-form-item>
+			</u--form>
+			<view class="footer">
+				<button @click='submit' class="submit">提交</button>
+			</view>
+			<u-modal :show="isSubmit" :content='content' @confirm="$u.debounce(confirmSubmit, 500)" showCancelButton
+				@cancel="isSubmit=false" @close="isSubmit=false" closeOnClickOverlay></u-modal>
+		</view>
+	</view>
+</template>
+
+<script>
+	var that
+	import uploadImage from '@/components/ossutil/uploadFile.js';
+	export default {
+		data() {
+			return {
+				form:{
+					commonId:uni.getStorageSync("userInfo").id,
+					type:"2",
+				},
+				consentStatus:false,
+				tips:'发送验证码',
+				startDate:'',
+				isSubmit:false,
+				fileList2:[],
+				content:'确定提交入驻信息',
+			}
+		},
+		onLoad() {
+			that = this
+		},
+		onShow(){
+			var date = new Date().toISOString().slice(0, 10)
+			this.startDate=date
+		},
+		methods: {
+			codeChange(text) {
+			    this.tips = text;
+			},
+			getCode() {
+				if(!this.form.phone){
+					uni.showToast({
+						icon: "none",
+						title: '请输入手机号再获取验证码!',
+						duration: 2000
+					});
+					return
+				}
+			    if (this.$refs.uCode.canGetCode) {
+			         // 模拟向后端请求验证码
+			        uni.showLoading({
+			        title: '正在获取验证码'
+			        })
+					this.$request.baseRequest('user', 'sendVerifyCode', {
+						phone: this.form.phone
+					}, failres => {
+						uni.showToast({
+							icon: "none",
+							title: failres.errmsg,
+							duration: 3000
+						});
+						uni.hideLoading()
+					}).then(res => {
+						
+								
+					})
+			        setTimeout(() => {
+			            uni.hideLoading();
+			            // 这里此提示会被this.start()方法中的提示覆盖
+			         
+			            // 通知验证码组件内部开始倒计时
+			            this.$refs.uCode.start();
+			        }, 2000);
+			    } else {
+			        uni.showToast({
+			        	icon: "success",
+			        	title: '提交成功!',
+			        	duration: 2000
+			        });
+			    }
+			},
+			submit(){
+				this.isSubmit = true
+			},
+			placeSelect() {
+				uni.chooseLocation({
+					success: function(res) {
+						console.log(res);
+						that.form.location = res.latitude + ',' + res.longitude
+						let _address = that.$helper.formatLocation(res.address)
+						console.log(_address)
+						that.form.province = _address.Province
+						that.form.city = _address.City
+						that.form.area = _address.Country
+						that.form.detailedAddress = _address.Village
+						that.$forceUpdate()
+					}
+				});
+			},
+			hideKeyboard() {
+				uni.hideKeyboard()
+			},
+			confirmSubmit(){
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				})
+				this.$request.baseRequest('admin.tourism.homestayInfo', 'add', {
+					homestayInfo: JSON.stringify(this.form)
+				}, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+							
+					uni.hideLoading()
+				}).then(res => {
+					this.isSubmit = false
+					uni.showToast({
+						icon: "success",
+						title: '提交成功,请等待平台审核',
+						duration: 2000
+					});
+					uni.navigateBack()
+							
+				})
+			},
+			// 删除图片
+			deletePic(event,status) {
+				this[`fileList${event.name}`].splice(event.index, 1)
+			},
+			// 新增图片
+			async afterRead(event,status) {
+				// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
+				let lists = [].concat(event.file)
+				let fileListLen = this[`fileList${event.name}`].length
+				lists.map((item) => {
+					this[`fileList${event.name}`].push({
+						...item,
+						status: 'uploading',
+						message: '上传中'
+					})
+				})
+				for (let i = 0; i < lists.length; i++) {
+					const result = await this.uploadFilePromise(lists[i].url,status)
+					
+					let item = this[`fileList${event.name}`][fileListLen]
+					this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
+						status: 'success',
+						message: '',
+						url: result
+					}))
+					fileListLen++
+					console.log(that.form, this[`fileList${event.name}`])
+					
+				}
+			},
+			uploadFilePromise(res,status) {
+				return new Promise((resolve, reject) => {
+					uploadImage(res, 'cardImages/',
+						result => {
+							if(status==1){
+								that.form.businessLicense = result
+							}
+							resolve(res)
+						}
+					)
+				})
+			},
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+ .wrap{
+	 padding:20rpx;
+ }
+ .icon_merchants_enterjian1{
+	 margin-left:10rpx;
+	 font-size:50rpx;
+ }
+ .add_label,.get_code{
+
+	background: #5F7DE9;
+	color: #fff;
+	padding: 10rpx 20rpx;
+	border-radius: 10rpx;
+	font-size: 26rpx;
+ }
+ .circle{
+ 	margin:110rpx 0 20rpx 0;
+ }
+ .path {
+ 	color: #2772FB;
+ 
+ }
+ .icon_merchants_enterweigouxuan{
+	 color:#999;
+ }
+ .icon_merchants_entergouxuan{
+	 color:#5F7DE9;
+ }
+</style>

+ 338 - 0
uni_applet/pageA/enter/myCateringdustry/addGroupBuying.vue

@@ -0,0 +1,338 @@
+<template>
+	<view class='content'>
+		<view class='wrap'>
+			<u--form :model="form"  ref="uForm">
+				<u-form-item labelWidth='120' labelPosition='left' label="店铺名称">
+					<view style='text-align:right'>{{form.shopNames}}</view>
+				</u-form-item>
+				<u-form-item labelWidth='120' labelPosition='left' label="团购标题">
+					<u-input inputAlign='right' border='none' placeholder='输入团购标题,不超过20个字' v-model="form.groupTitle" />
+				</u-form-item>
+				<u-form-item labelWidth='120' labelPosition='left' label="可供用餐人数">
+					<view class='flex align-item-center'>
+						<u-input inputAlign='right' border='none' placeholder='最少人数' v-model="form.leastPeople" />
+						<view>人~</view>
+						<u-input inputAlign='right' border='none' placeholder='最多人数' v-model="form.mostPeople" />
+						人
+					</view>
+				</u-form-item>
+				<u-form-item labelWidth='120' labelPosition='left' label="下单后随时退单">
+					<u-radio-group 
+					    v-model="form.chargeableFlag"
+					    placement="row">
+						<u-radio activeColor="#5F7DE9" label="不接受" name='1' ></u-radio>
+						<u-radio activeColor="#5F7DE9" label="接受"  name='0' ></u-radio>
+					</u-radio-group>
+				</u-form-item>
+				<u-form-item labelWidth='140' labelPosition='left' label="活动结束后自动退单">
+					<u-radio-group 
+					    v-model="form.endChargeable"
+					    placement="row">
+						<u-radio activeColor="#5F7DE9" label="不接受" name='1'></u-radio>
+						<u-radio activeColor="#5F7DE9" label="接受" name='0'></u-radio>
+					</u-radio-group>
+				</u-form-item>
+				<u-form-item labelWidth='120' labelPosition='left' label="可团购总数量">
+					<u-input inputAlign='right' border='none' placeholder='输入团购套餐总数' v-model="form.totalQuantity" />
+				</u-form-item>
+				<u-form-item labelWidth='120' labelPosition='left' label="单人可团数量">
+					<u-radio-group 
+						v-model="form.quantityLimited"
+						placement="row">
+						<u-radio activeColor="#5F7DE9" label="限量" name='1'></u-radio>
+						<u-radio activeColor="#5F7DE9" label="不限量" name='0'></u-radio>
+					</u-radio-group>
+				</u-form-item>
+				<u-form-item v-if='form.quantityLimited==1' labelWidth='120' labelPosition='left' label="单人团购上限">
+					<u-input inputAlign='right' border='none' placeholder='输入单个用户最多可团购的数量' v-model="form.groupLimit" />
+				</u-form-item>
+				<u-form-item labelWidth='120' labelPosition='left' label="提前预约时间">
+					<view class='flex align-item-center'>
+						<u-input inputAlign='right' border='none' placeholder='提前预约时间' v-model="form.reservationTime" />小时
+					</view>
+				</u-form-item>
+				<u-form-item labelWidth='120' labelPosition='left' label="活动开始日期">
+					<view style='text-align:right;' @click='selectTime(0)'>{{form.startDate?form.startDate:'活动开始日期'}}<image src="@/static/image/yjt.png" mode=""
+								style="margin-left:10rpx;width:12rpx;height: 21rpx;"></image></view>
+				</u-form-item>
+				
+				<u-form-item labelWidth='120' labelPosition='left' label="活动结束日期">
+					<view style='text-align:right;' @click='selectTime1(1)'>{{form.endDate?form.endDate:'活动结束日期'}}<image src="@/static/image/yjt.png" mode=""
+													style="margin-left:10rpx;width:12rpx;height: 21rpx;"></image></view>
+				</u-form-item>
+				<u-form-item labelWidth='120' labelPosition='top' label="不可用日期">
+					<view class='flex'>
+						<view v-for='item in weekList' class='week_item' :class='item.select?"active":""' @click='selectweek(item)'>{{item.value}}</view>
+					</view>
+					
+				</u-form-item>
+				<u-form-item labelWidth='120' labelPosition='left' label="指定不可用日期">
+					<view style='text-align:right;' @click='show2 = true'>{{form.unavailableDay?'已选'+form.unavailableDay.length+'天':'已选0天'}}</view>
+					<!-- <view class='flex align-item-center'>
+						<u-input inputAlign='right' border='none' placeholder='提前预约时间' v-model="form.unavailableDay" />小时
+					</view> -->
+				</u-form-item>
+				<u-form-item labelWidth='120' labelPosition='left' label="餐位费">
+					<view class='flex align-item-center'>
+						<u-input inputAlign='right' border='none' placeholder='输入餐位费' v-model="form.spaceFee" />元/人
+					</view>
+				</u-form-item>
+				<u-form-item labelWidth='120' labelPosition='left' label="商品打包外带">
+					<u-radio-group 
+						v-model="form.packFlag"
+						placement="row">
+							<u-radio activeColor="#5F7DE9" label="不支持" name='1'></u-radio>
+							<u-radio activeColor="#5F7DE9" label="支持" name='0'></u-radio>
+					</u-radio-group>
+				</u-form-item>
+				<u-form-item labelWidth='120' labelPosition='left' label="包间消费使用">
+					<u-radio-group 
+						v-model="form.roomUsage"
+						placement="row">
+							<u-radio activeColor="#5F7DE9" label="不支持" name='1'></u-radio>
+							<u-radio activeColor="#5F7DE9" label="支持" name='0'></u-radio>
+					</u-radio-group>
+				</u-form-item>
+				<u-form-item labelWidth='140' labelPosition='left' label="与店内其他优惠共享">
+					<u-radio-group 
+						v-model="form.discountSharing"
+						placement="row">
+							<u-radio activeColor="#5F7DE9" label="不支持" name='1'></u-radio>
+							<u-radio activeColor="#5F7DE9" label="支持" name='0'></u-radio>
+					</u-radio-group>
+				</u-form-item>
+				<u-form-item labelWidth='120' labelPosition='left' label="免费打包">
+					<u-radio-group 	
+						v-model="form.freePackaging"
+						placement="row">
+							<u-radio activeColor="#5F7DE9" label="不支持" name='1'></u-radio>
+							<u-radio activeColor="#5F7DE9" label="支持" name='0'></u-radio>
+					</u-radio-group>
+				</u-form-item>
+				<u-form-item labelWidth='120' labelPosition='left' label="发票">
+					<u-radio-group 
+						v-model="form.invoice"
+						placement="row">
+							<u-radio activeColor="#5F7DE9" label="不支持" name='1'></u-radio>
+							<u-radio activeColor="#5F7DE9" label="支持" name='0'></u-radio>
+					</u-radio-group>
+				</u-form-item>
+			</u--form>
+			<view>备注:如部分菜品因时令或其他不可抗因素导致无法提供,商家可用等价菜品替换,具体事宜与顾客协商决定。</view>
+			<view class="footer">
+				<button @click='next' class="submit">下一步</button>
+			</view>
+			<u-calendar @close='show = false' @confirm="confirm" :show="show"></u-calendar>
+			<u-calendar :minDate='minDate' @close='show1 = false' @confirm="confirm" :show="show1"></u-calendar>
+			<u-calendar :show="show2" mode="multiple" monthNum='12' :maxDate='maxDate' @close='show2 = false' @confirm="confirm1"></u-calendar>
+		</view>
+	</view>
+</template>
+
+<script>
+	var that
+	export default {
+		data() {
+			return {
+				value:'',
+				show:false,
+				show1:false,
+				show2:false,
+				status:'',
+				minDate:'',
+				maxDate:'',
+				sortDate:[],
+				weekList:[
+					{value:'周一',select:false},
+					{value:'周二',select:false},
+					{value:'周三',select:false},
+					{value:'周四',select:false},
+					{value:'周五',select:false},
+					{value:'周六',select:false},
+					{value:'周日',select:false}],
+				form:{
+					chargeableFlag:"0",
+					endChargeable:"0",
+					quantityLimited:"0",
+					packFlag:"0",
+					roomUsage:"0",
+					discountSharing:"0",
+					freePackaging:"0",
+					invoice:"0",
+				},
+			}
+		},
+		onLoad(options) {
+			console.log(options)
+			that = this
+			var date = new Date().toISOString().slice(0, 10)
+			this.minDate=date
+			this.form.foodId=options.foodId
+			this.form.shopNames=options.shopNames
+			this.getTime()
+		},
+		onShow(){
+			
+		},
+		methods: {
+			getTime(){
+				var time = new Date();
+				    time.setTime(time.getTime());
+				    var s2 = time.getFullYear()+"-" + (time.getMonth()+1) + "-" + time.getDate();
+				    var monthNum=6; //要减的月数(6)自己定义
+				    var dateArr = s2.split('-'); //s2当前时间
+				    var year = dateArr[0]; //获取当前日期的年份
+				    var month = dateArr[1]; //获取当前日期的月份
+				    var day = dateArr[2]; //获取当前日期的日
+				    var days = new Date(year, month, 0);
+				    days = days.getDate(); //获取当前日期中月的天数
+				    var year2 = year;
+				    var month2 = parseInt(month) + monthNum;
+				    if (month2 <=0) {
+				        year2 = parseInt(year2) - parseInt(month2 / 12 == 0 ? 1 : parseInt(month2) / 12);
+				        month2 = 12 - (Math.abs(month2) % 12);
+				    }
+				    var day2 = day;
+				    var days2 = new Date(year2, month2, 0);
+				    days2 = days2.getDate();
+				    if (day2 > days2) {
+				        day2 = days2;
+				    }
+				    if (month2 < 10) {
+				        month2 = '0' + month2;
+				    }
+				    var t2 = year2 + '-' + month2 + '-' + day2;
+					this.maxDate = t2
+					console.log(t2)
+			},
+			selectweek(item){
+				console.log(item)
+				item.select = !item.select
+				this.$forceUpdate()
+				var arr = this.weekList.filter((item)=>{return item.select == true})
+				console.log(arr)
+				var arr2=[]
+				for(var i=0;i<arr.length;i++){
+					arr2.push(arr[i].value)
+				}
+				this.form.unavailableDate=arr2.toString()
+			},
+			confirm1(e){
+				console.log(e)
+				console.log(e.sort( (a, b)=> {return a.localeCompare(b)   // 按照升序排列 
+				}))
+				this.sortDate=e.sort( (a, b)=> {return a.localeCompare(b)})
+				
+				this.form.unavailableDay=this.sortDate.toString()  // 按照升序排列
+				
+				this.show2 = false
+				
+			},
+			confirm(e){
+				if(this.status==0){
+					this.form.startDate =e[0]
+					this.show = false
+				}else{
+					this.form.endDate =e[0]
+					this.show1 = false
+				}
+					console.log(e)
+			},
+			selectTime(status){
+				this.status=status
+				this.show = true
+			},
+			selectTime1(status){
+				this.status=status
+				this.show1 = true
+			},
+			next(){
+				var time = new Date();
+				var date=time.getFullYear()+"-" + ((time.getMonth()+1)>=10?(time.getMonth()+1):'0'+(time.getMonth()+1)) + "-" + time.getDate()
+				    var s2 =  new Date(date).getTime();
+					console.log(s2,date,this.form.startDate,new Date(this.form.startDate).getTime(),1111)
+				if(new Date(this.form.endDate).getTime()==s2){
+					uni.showToast({
+						icon: "none",
+						title: '结束日期不可晚于当天!',
+						duration: 3000
+					});
+					return
+				}
+				if(new Date(this.form.startDate).getTime()>new Date(this.form.endDate).getTime()){
+					uni.showToast({
+						icon: "none",
+						title: '开始日期不可晚于结束日期!',
+						duration: 3000
+					});
+					return
+				}
+				uni.setStorageSync('groupBuying',JSON.stringify(this.form))
+				uni.navigateTo({
+					url:'/pageA/enter/myCateringdustry/addGroupBuyingNext?foodId='+this.form.foodId
+				})
+			},
+			// 删除图片
+			deletePic(event,status) {
+				this[`fileList${event.name}`].splice(event.index, 1)
+			},
+			// 新增图片
+			async afterRead(event,status) {
+				// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
+				let lists = [].concat(event.file)
+				let fileListLen = this[`fileList${event.name}`].length
+				lists.map((item) => {
+					this[`fileList${event.name}`].push({
+						...item,
+						status: 'uploading',
+						message: '上传中'
+					})
+				})
+				for (let i = 0; i < lists.length; i++) {
+					const result = await this.uploadFilePromise(lists[i].url,status)
+					
+					let item = this[`fileList${event.name}`][fileListLen]
+					this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
+						status: 'success',
+						message: '',
+						url: result
+					}))
+					fileListLen++
+					console.log(that.form, this[`fileList${event.name}`])
+					
+				}
+			},
+			uploadFilePromise(res,status) {
+				return new Promise((resolve, reject) => {
+					uploadImage(res, 'cardImages/',
+						result => {
+							
+							that.form.dishImage = result
+							resolve(res)
+						}
+					)
+				})
+			},
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+	/deep/.u-radio-group,/deep/.u-radio-group--row {
+		flex-direction: row-reverse !important;
+		.u-radio{
+			margin-left:10rpx;
+		}
+	}
+	.week_item{
+		border:1px solid #999;
+		padding: 5rpx 10rpx;
+		margin: 10rpx;
+		border-radius: 10rpx;
+	}
+	.week_item.active{
+		background:#5F7DE9;
+		border: 1px solid #5F7DE9;
+		color:#fff;
+	}
+</style>

+ 342 - 0
uni_applet/pageA/enter/myCateringdustry/addGroupBuyingNext.vue

@@ -0,0 +1,342 @@
+<template>
+	<view class='content'>
+		<view>
+			<view class='flex'>
+				<view v-for='(item,index) in classifyList' class='classify_item' :class='item.select?"active":""'  @click='switchClassify(item)'>{{item.classifyName}}</view>
+			</view>
+			<view class='merchants_button' @click='addClassify'>自定义分类</view>
+		</view>
+		<view class="wrap">
+			<view style='padding: 10rpx 0 40rpx 0;' v-for='item in categorizationOfDishes'>
+				<view style='margin-bottom:20rpx;' class='flex justify-space-between align-item-center'>
+					<view class='flex align-item-center'>
+						<view>{{item.classifyName}}</view>
+						<view class='iconfont_no' @click='switchStatus(item)' :class='item.status?"icon_merchants_entershouqi":"icon_merchants_enterzhankai"'></view>
+					</view>
+					<view class='merchants_button' @click='addList(item)'>新增</view>
+					
+					
+				</view>
+				<view v-if='item.status'>
+					<view class='flex align-item-center' v-for='(item1,index1) in item.list'>
+						<view>
+							<view  style='margin: 10rpx 20rpx;' class='flex  justify-space-between align-item-center'>
+								<view>菜品名称</view>
+								<u-input inputAlign='right' border='none' placeholder='输入菜品名称,不超过10个字' v-model="item1.dishName" />
+							</view>
+							
+							<view class='flex'>
+								<view class='flex align-item-center'>
+									<u-input @input='compute'  inputAlign='right' border='none' placeholder='输入单价' v-model="item1.dishPrice" />
+									(元/份)
+								</view>
+								<view class="flex align-item-center">
+									<u-input @input='compute' inputAlign='right' border='none' placeholder='输入单价' v-model="item1.number" />
+									(份)
+								</view>
+							</view>
+						</view>
+						<view>
+							<view @click='del(item,index1)' class="iconfont_no icon_merchants_enterjianshao"></view>
+						</view>
+					</view>
+				</view>
+				
+			</view>
+			<view class='flex align-item-center justify-space-between'>
+				原价合计(元)<view>{{form.originalPrice}}</view>
+			</view>
+			<view class='flex align-item-center'>
+				团购价(元)<u-input @input='groupPriceInput' inputAlign='right' border='none' placeholder='输入团购价格' v-model="form.groupPrice" />
+			</view>
+			<view class='flex align-item-center justify-space-between'>
+				折扣<view class='flex align-item-center'><view>{{form.discount?form.discount:'自动计算折扣'}}</view><view>折</view></view>
+			</view>
+			<view>
+				<view>上传图片</view>
+				<view>
+					<u-upload :fileList="fileList1" @afterRead="afterRead($event)" @delete="deletePic" name="1" multiple
+						:maxCount="9">
+					</u-upload>
+				</view>
+			</view>
+		</view>
+		<u-modal :show="isSubmit" content='确认添加团购信息?' @confirm="$u.debounce(confirmSubmit, 500)" showCancelButton
+			@cancel="isSubmit=false" @close="isSubmit=false" closeOnClickOverlay></u-modal>
+		<u-modal :show="show1" content='确认取消该分类?'  @confirm="$u.debounce(classifycancelSubmit, 500)" showCancelButton
+			@cancel="show1=false" @close="show1=false" closeOnClickOverlay>
+		</u-modal>
+		<u-modal :show="show" title='添加分类'  @confirm="$u.debounce(classifySubmit, 500)" showCancelButton
+			@cancel="show=false" @close="show=false" closeOnClickOverlay>
+			<view class="slot-content">
+				<view>
+					<u--input inputAlign='center' v-model="classifyName" placeholder="输入分类名称" border="none"></u--input>
+				</view>
+			</view>
+		</u-modal>
+		<view class="footer">
+			<button @click='submit' class="submit">提交</button>
+		</view>
+	</view>
+</template>
+
+<script>
+	var that = this
+	import uploadImage from '@/components/ossutil/uploadFile.js';
+	export default {
+		data() {
+			return {
+				form:{},
+				show:false,
+				show1:false,
+				classifyList:[],
+				categorizationOfDishes:[],
+				currectClassify:{},
+				dishImageArray:[],
+				fileList1:[],
+				isSubmit:false
+			}
+		},
+		onLoad(options) {
+			that = this
+			this.form.foodId=options.foodId
+			this.form.shopNames=options.shopNames
+			this.$request.baseRequest('admin.tourism.dishClassifyInfo', 'list', {
+				foodId:this.form.foodId,
+				page:1,
+				limit:9999
+			}, failres => {
+				uni.showToast({
+					icon: "none",
+					title: failres.errmsg,
+					duration: 3000
+				});
+			}).then(res => {
+				for(var i=0;i<res.data.items.length;i++){
+					res.data.items[i].select=false
+				}
+				this.classifyList = res.data.items
+			})
+			this.form=JSON.parse(uni.getStorageSync('groupBuying'))
+		},
+		onShow(){
+			
+		},
+		methods: {
+			switchStatus(item){
+				item.status= !item.status
+				this.$forceUpdate()
+				console.log(item,1111111)
+			},
+			submit(){
+				for(var i=0;i<this.categorizationOfDishes.length;i++){
+					for(var q=0;q<this.categorizationOfDishes[i].list.length;q++){
+						if(!this.categorizationOfDishes[i].list[q].dishName){
+							uni.showToast({
+								icon: "none",
+								title: '请输入菜品名称!',
+								duration: 3000
+							});
+							return
+						}
+						if(!this.categorizationOfDishes[i].list[q].dishPrice){
+							uni.showToast({
+								icon: "none",
+								title: '请输入菜品单价!',
+								duration: 3000
+							});
+							return
+						}
+						if(!this.categorizationOfDishes[i].list[q].number){
+							uni.showToast({
+								icon: "none",
+								title: '请输入菜品份数!',
+								duration: 3000
+							});
+							return
+						}
+					}
+				}
+				this.isSubmit = true
+			},
+			confirmSubmit() {
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				})
+				this.form.foodGroupDetailInfoList=[]
+				for(var i=0;i<this.categorizationOfDishes.length;i++){
+					this.form.foodGroupDetailInfoList=this.form.foodGroupDetailInfoList.concat(this.categorizationOfDishes[i].list)
+				}
+				console.log(this.form)
+				this.$request.baseRequest('admin.tourism.foodGroupInfo', 'add', {
+					foodGroupInfo: JSON.stringify(this.form)
+				}, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+			
+					uni.hideLoading()
+				}).then(res => {
+					uni.hideLoading()
+					this.isSubmit = false
+					uni.showToast({
+						icon: "success",
+						title: '提交成功',
+						duration: 2000
+					});
+					this.categorizationOfDishes = []
+					this.dishImageArray=[]
+					uni.navigateBack({delta: 2})
+				})
+			},
+			groupPriceInput(){
+				if(this.form.originalPrice){
+					this.form.discount = Number(this.form.groupPrice/this.form.originalPrice).toFixed(2)
+				}
+			},
+			compute(){
+				var prices=0
+				for(var i=0;i<this.categorizationOfDishes.length;i++){
+					for(var q=0;q<this.categorizationOfDishes[i].list.length;q++){
+						if(this.categorizationOfDishes[i].list[q].dishPrice&&this.categorizationOfDishes[i].list[q].number){
+							var price=this.categorizationOfDishes[i].list[q].dishPrice*this.categorizationOfDishes[i].list[q].number
+							prices+=price
+						}
+					}
+				}
+				if(prices){
+					this.form.originalPrice=prices.toFixed(2)
+				}else{
+					this.form.originalPrice=0
+				}
+				if(this.form.groupPrice){
+					this.form.discount = Number(this.form.groupPrice/this.form.originalPrice).toFixed(2)
+				}
+				console.log(prices)
+			},
+			del(item,index){
+				console.log(11111)
+				for(var i=0;i<this.categorizationOfDishes.length;i++){
+					if(this.categorizationOfDishes[i].classifyName==item.classifyName){
+						this.categorizationOfDishes[i].list.splice(index,1)
+					}
+				}
+				this.compute()
+			},
+			classifycancelSubmit(){
+				var index = this.categorizationOfDishes.findIndex((item)=>{return item.classifyName == this.currectClassify.classifyName})
+				this.categorizationOfDishes,splice(index,1)
+			},
+			addList(item){
+				item.list.push({classify:item.classifyName,dishName:'',dishPrice:'',number:''})
+			},
+			addClassify(){
+				this.show = true
+			},
+			classifySubmit() {
+				console.log(this.form)
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				})
+				this.$request.baseRequest('admin.tourism.dishClassifyInfo', 'add', {
+					dishClassifyInfo: JSON.stringify({foodId:this.form.foodId,classifyName:this.classifyName})
+				}, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+					uni.hideLoading()
+				}).then(res => {
+					this.show = false
+					uni.showToast({
+						icon: "success",
+						title: '添加分类成功',
+						duration: 2000
+					});
+				})
+			},
+			switchClassify(item){
+				if(item.select){
+					var arr = this.categorizationOfDishes.filter((items)=>{return items.classifyName==item.classifyName})
+					if(arr.length>0&&arr.list.length>0){
+						this.currectClassify = item
+						this.show1 = true
+					}else{
+						item.select=!item.select
+					}
+					// if()
+				}else{
+					item.select=!item.select
+					this.categorizationOfDishes.push({
+						classifyName:item.classifyName,
+						status:false,
+						list:[{classify:item.classifyName,dishName:'',dishPrice:'',number:'',}]})
+				}
+				
+			},
+			// 删除图片
+			deletePic(event,status) {
+				this[`fileList${event.name}`].splice(event.index, 1)
+			},
+			// 新增图片
+			async afterRead(event,status) {
+				// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
+				let lists = [].concat(event.file)
+				let fileListLen = this[`fileList${event.name}`].length
+				lists.map((item) => {
+					this[`fileList${event.name}`].push({
+						...item,
+						status: 'uploading',
+						message: '上传中'
+					})
+				})
+				for (let i = 0; i < lists.length; i++) {
+					const result = await this.uploadFilePromise(lists[i].url,status)
+					
+					let item = this[`fileList${event.name}`][fileListLen]
+					this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
+						status: 'success',
+						message: '',
+						url: result
+					}))
+					fileListLen++
+					console.log(that.form, this[`fileList${event.name}`])
+					
+				}
+			},
+			uploadFilePromise(res,status) {
+				return new Promise((resolve, reject) => {
+					uploadImage(res, 'cardImages/',
+						result => {
+							that.dishImageArray.push(result)
+							that.form.dishImage =that.dishImageArray.toString()
+							resolve(res)
+						}
+					)
+				})
+			},
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+	.classify_item{
+		border:1px solid #999;
+		padding: 5rpx 10rpx;
+		margin: 10rpx;
+		border-radius: 10rpx;
+	}
+	.classify_item.active{
+		background:#5F7DE9;
+		border: 1px solid #5F7DE9;
+		color:#fff;
+	}
+	.icon_merchants_enterjianshao{
+		font-size:48rpx;
+	}
+</style>

+ 262 - 0
uni_applet/pageA/enter/myCateringdustry/addfood.vue

@@ -0,0 +1,262 @@
+<template>
+	<view class='content'>
+		<view class='wrap'>
+			<u--form labelPosition="left" :model="form"  ref="uForm">
+				<u-form-item labelWidth='120' labelPosition='left' label="店铺名称">
+					<view style='text-align:right'>{{form.shopNames}}</view>
+				</u-form-item>
+				<u-form-item
+					label="分类"
+					prop="classify"
+					borderBottom
+					labelWidth='120'
+					ref="item1">
+					<view style='flex-direction:row-reverse ;' class='flex align-item-center'>
+						<view class='add' @click='add'>新增</view>
+						<view style='margin-right:10rpx;' @click='openClassify'>{{form.classify?form.classify:'选择分类'}}<image src="@/static/image/yjt.png" mode=""
+								style="margin-left:10rpx;width:12rpx;height: 21rpx;"></image></view>
+					</view>
+				</u-form-item>
+				<u-form-item
+					label="菜品名称"
+					 labelWidth='120'
+					prop="dishName"
+					borderBottom
+					ref="item1">
+					<u--input inputAlign='right' v-model="form.dishName" placeholder="输入菜品名称.2-8个字" border="none"></u--input>
+				</u-form-item>
+				<u-form-item
+					labelWidth='150'
+					label="菜品单价(选填)"
+					prop="userInfo"
+					ref="item1">
+					<view class='flex align-item-center'>
+						<u--input inputAlign='right' v-model="form.dishPrice" placeholder="输入菜品单价" border="none"></u--input>元
+					</view>
+					
+				</u-form-item>
+				<view class='caution'>注:如不想用户查看价格可在店铺设置中关闭查看功能。</view>
+				<u-form-item labelWidth='240' labelPosition='top' label="上传菜品图片(清晰、美观)">
+					<u-upload :fileList="fileList1" @afterRead="afterRead($event)" @delete="deletePic" name="1" multiple
+						:maxCount="1">
+						
+					</u-upload>
+				</u-form-item>
+			</u--form>
+			<view class="footer">
+				<button @click='submit' class="submit">提交</button>
+			</view>
+		</view>
+		<u-overlay :show="show" @click="show = false">
+				<view style='flex-wrap: wrap;' class='wrap flex'>
+					<view v-for='item in classifyList' style='width:33.3333%;'>
+						<view @click='selectClassify(item)' class='classifyItem' :class='form.classify==item.classifyName?"active":""'>{{item.classifyName}}</view>
+					</view>
+					
+				</view>
+			</u-overlay>
+		<u-modal :show="isSubmit" content='确认添加菜品信息?' @confirm="$u.debounce(confirmSubmit, 500)" showCancelButton
+			@cancel="isSubmit=false" @close="isSubmit=false" closeOnClickOverlay></u-modal>
+			<u-modal :show="show1" title='添加分类'  @confirm="$u.debounce(classifySubmit, 500)" showCancelButton
+				@cancel="show1=false" @close="show1=false" closeOnClickOverlay>
+				<view class="slot-content">
+					<view>
+						<u--input inputAlign='center' v-model="classifyName" placeholder="输入分类名称" border="none"></u--input>
+					</view>
+				</view>
+			</u-modal>
+	</view>
+</template>
+
+<script>
+	var that = this
+	import uploadImage from '@/components/ossutil/uploadFile.js';
+	export default {
+		data() {
+			return {
+				form:{
+					foodId:'',
+					classify:'',
+				},
+				classifyName:'',
+				show:false,
+				show1:false,
+				isSubmit:false,
+				dataList:[],
+				classifyList:[],
+				fileList1:[]
+			}
+		},
+		onLoad(options) {
+			that = this
+			this.form.foodId=options.foodId
+			this.form.shopNames=options.shopNames
+			this.$request.baseRequest('admin.tourism.dishClassifyInfo', 'list', {
+				foodId:this.form.foodId,
+				page:1,
+				limit:9999
+			}, failres => {
+				uni.showToast({
+					icon: "none",
+					title: failres.errmsg,
+					duration: 3000
+				});
+			}).then(res => {
+				this.classifyList = res.data.items
+				this.form.classify = res.data.items[0].classifyName
+			})
+		},
+		onShow(){
+			
+		},
+		methods: {
+			add(){
+				this.show1 = true
+			},
+			openClassify(){
+				this.show = true
+			},
+			selectClassify(item){
+				console.log(item)
+				this.form.classify = item.classifyName
+			},
+			submit(){
+					if(this.form.dishName.length<2||this.form.dishName.length>8){
+							uni.showToast({
+								icon: "none",
+								title: '菜品名称2-8个字!',
+								duration: 3000
+							});
+							return
+						}
+						if(this.form.dishPrice<=0){
+							uni.showToast({
+								icon: "none",
+								title: '菜品单价输入错误!',
+								duration: 3000
+							});
+							return
+						}
+						if(!this.form.dishImage){
+							uni.showToast({
+								icon: "none",
+								title: '菜品图片不能为空!',
+								duration: 3000
+							});
+							return
+						}
+
+				this.isSubmit = true
+			},
+			classifySubmit() {
+				console.log(this.form)
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				})
+				this.$request.baseRequest('admin.tourism.dishClassifyInfo', 'add', {
+					dishClassifyInfo: JSON.stringify({foodId:this.form.foodId,classifyName:this.classifyName})
+				}, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+			
+					uni.hideLoading()
+				}).then(res => {
+					this.show1 = false
+					uni.showToast({
+						icon: "success",
+						title: '添加分类成功',
+						duration: 2000
+					});
+				})
+			},
+			confirmSubmit() {
+				console.log(this.form)
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				})
+				this.$request.baseRequest('admin.tourism.foodDishesInfo', 'add', {
+					foodDishesInfo: JSON.stringify(this.form)
+				}, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+			
+					uni.hideLoading()
+				}).then(res => {
+					this.isSubmit = false
+					uni.showToast({
+						icon: "success",
+						title: '提交成功',
+						duration: 2000
+					});
+					uni.navigateBack()
+			
+				})
+			},
+			// 删除图片
+			deletePic(event,status) {
+				this[`fileList${event.name}`].splice(event.index, 1)
+			},
+			// 新增图片
+			async afterRead(event,status) {
+				// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
+				let lists = [].concat(event.file)
+				let fileListLen = this[`fileList${event.name}`].length
+				lists.map((item) => {
+					this[`fileList${event.name}`].push({
+						...item,
+						status: 'uploading',
+						message: '上传中'
+					})
+				})
+				for (let i = 0; i < lists.length; i++) {
+					const result = await this.uploadFilePromise(lists[i].url,status)
+					
+					let item = this[`fileList${event.name}`][fileListLen]
+					this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
+						status: 'success',
+						message: '',
+						url: result
+					}))
+					fileListLen++
+					console.log(that.form, this[`fileList${event.name}`])
+					
+				}
+			},
+			uploadFilePromise(res,status) {
+				return new Promise((resolve, reject) => {
+					uploadImage(res, 'cardImages/',
+						result => {
+							
+							that.form.dishImage = result
+							resolve(res)
+						}
+					)
+				})
+			},
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+.add,.active{
+	background: #5F7DE9;
+	color: #fff;
+	padding: 10rpx 20rpx;
+	border-radius: 10rpx;
+	font-size: 26rpx;
+ }
+ .classifyItem{
+	padding: 10rpx 20rpx;
+	font-size: 26rpx;
+	text-align: center;
+	margin: 0 30px;
+ }
+</style>

+ 413 - 0
uni_applet/pageA/enter/myCateringdustry/edit.vue

@@ -0,0 +1,413 @@
+<template>
+	<view class='content'>
+		<view class='wrap'>
+			<u--form  ref="uForm">
+				<u-form-item labelWidth='80' labelPosition='top' label="营业执照">
+					<u-upload height='208' width='320' :fileList="fileList2" @afterRead="afterRead($event,1)" @delete="deletePic" name="2" multiple
+						:maxCount="1">
+						<image style='width:680rpx;height:417rpx;' src="@/static/image/enter/yingyezhizhao.png" mode=""></image>
+					</u-upload>
+				</u-form-item>
+				<u-form-item labelWidth='80' labelPosition='top' label="经营许可证">
+					<u-upload height='208' width='320' :fileList="fileList3" @afterRead="afterRead($event,2)" @delete="deletePic" name="3" multiple
+						:maxCount="1">
+						<image style='width:680rpx;height:417rpx;' src="@/static/image/enter/jingyingxukezheng.png" mode=""></image>
+					</u-upload>
+				</u-form-item>
+				<u-form-item  labelWidth='150' labelPosition='left' label="经营许可证有效期">
+					<view style='text-align:right;' @click='openjyxkz'>{{form.operateCertificateDate?form.operateCertificateDate:'选择日期'}}<image src="@/static/image/yjt.png" mode=""
+								style="margin-left:10rpx;width:12rpx;height: 21rpx;"></image></view>
+				</u-form-item>
+				<uni-calendar
+				   :insert="false"
+				   :lunar="true" 
+					ref="calendar"
+				   :start-date="startDate"
+				   @confirm="confirm"
+				    />
+					<u-form-item  labelWidth='150' labelPosition='left' label="店铺名称">
+						<u-input inputAlign='right' border='none' placeholder='输入店铺名称' v-model="form.shopNames" />
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="经营者">
+						<u-input inputAlign='right' border='none' placeholder='输入经营者姓名' v-model="form.operater" />
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="经营者手机号">
+						<u-input inputAlign='right' maxlength="15" border='none' placeholder='输入经营者手机号' v-model="form.operaterPhone" />
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="验证码">
+						<u-input inputAlign='right' border='none' placeholder='输入验证码' v-model="form.verifyCode" >
+							<template slot="suffix">
+								<u-code ref="uCode"
+									@change="codeChange"
+									seconds="60"
+									changeText="X秒重新获取"
+								></u-code>
+
+								<view class='get_code' @click='getCode'>{{tips}}</view>
+							</template>
+						</u-input>
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="业务联系人(选填)">
+						<u-input inputAlign='right' border='none' placeholder='输入联系人姓名' v-model="form.contacts" />
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="业务联系电话(选填)">
+						<u-input inputAlign='right' maxlength="15" border='none' placeholder='输入联系电话' v-model="form.contactsPhone" />
+					</u-form-item>
+					<u-form-item labelWidth='80' labelPosition='left' @click='placeSelect(),hideKeyboard()' label="店铺位置">
+						<view style='text-align:right;' v-if="form.province">{{ form.province }}{{ form.city }}{{ form.area }}</view>
+						<view style='text-align:right;' v-else>
+							<text style='text-align:right;'>选择位置 </text>
+							<image src="@/static/image/yjt.png" mode=""
+								style="margin-left:10rpx;width:12rpx;height: 21rpx;"></image>
+						</view>
+					</u-form-item>
+					<u-form-item labelWidth='80' labelPosition='left' label="详细地址">
+						<u-input inputAlign='right' maxlength="15" border='none' placeholder='输入详细地址,不超过15个字' v-model="form.detailedAddress" />
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="营业时间">
+						<view style='text-align:right;' @click='selectTime'>{{form.timesection}}<image src="@/static/image/yjt.png" mode=""
+								style="margin-left:10rpx;width:12rpx;height: 21rpx;"></image></view>
+					</u-form-item>
+					<smh-time-range :is-under='show' :time="['18','0','42']" @confrim="confrim" @cancel="cancel"></smh-time-range>
+					<!-- label -->
+					<view class='flex justify-space-between align-item-center'>
+						<view>标签(2-4个,最多5个字)</view> 
+						<view class='add_label' @click='addLabel'>新增</view>
+					</view>
+					<view style='flex-wrap: wrap;' class='flex'>
+						<view style='margin:10rpx;width:47%;' class='flex align-item-center' v-for='item in labelList'>
+							<u-input inputAlign='right' placeholder='输入标签文字' v-model="item.value" />
+							<view class="iconfont_no icon_merchants_enterjianshao"></view>
+						</view>
+					</view>
+					
+				<u-form-item labelWidth='240' labelPosition='top' label="门面及门头照片(1张,店名文字清晰)">
+					<u-upload :fileList="fileList4" @afterRead="afterRead($event,3)" @delete="deletePic" name="4" multiple
+						:maxCount="1">
+						
+					</u-upload>
+				</u-form-item>
+				<u-form-item labelWidth='120' labelPosition='top' label="室内照片(1-6张)">
+					<u-upload :fileList="fileList5" @afterRead="afterRead($event,4)" @delete="deletePic" name="5" multiple
+						:maxCount="6">
+						
+					</u-upload>
+				</u-form-item>
+			</u--form>
+			<view class="footer">
+				<button @click='submit' class="submit">提交</button>
+			</view>
+		</view>
+		<u-modal :show="isSubmit" :content='content' @confirm="$u.debounce(confirmSubmit, 500)" showCancelButton
+			@cancel="isSubmit=false" @close="isSubmit=false" closeOnClickOverlay></u-modal>
+	</view>
+</template>
+
+<script>
+	var that
+	import uploadImage from '@/components/ossutil/uploadFile.js';
+	export default {
+		data() {
+			return {
+				content:'确定提交入驻信息',
+				isSubmit:false,
+				form:{
+					commonId:uni.getStorageSync("userInfo").id,
+					mainBody:'商铺',
+					lookFlag:0,
+					startDate:'',
+					city: '',
+					area: '',
+					province: '',
+					location: '',
+					detailedAddress: '',
+					businessLicense:'',
+					operateCertificate:'',
+					coverImage:'',
+					indoorImage:'',
+					timesection:'09:00~21:00',
+					startDate:'09:00',
+					endDate:'21:00',
+					operateCertificateDate:'',
+				},
+				indoorImageArray:[],
+				tips:'发送验证码',
+				startDate:'',
+				show:false,
+				foodId:'',
+				labelList:[{value:''},{value:''}],
+				fileList2:[],
+				fileList3:[],
+				fileList4:[],
+				fileList5:[],
+				
+			}
+		},
+		onLoad(options) {
+			this.foodId=options.foodId
+			that = this
+		},
+		onShow(){
+			this.$request.baseRequest('admin.tourism.foodInfo', 'get', {
+				id:this.foodId
+			}, failres => {
+				uni.showToast({
+					icon: "none",
+					title: failres.errmsg,
+					duration: 3000
+				});
+						
+				uni.hideLoading()
+			}).then(res => {
+				console.log(res.data)
+				this.form=res.data
+				this.fileList2=[{url:this.form.businessLicense}]
+				this.fileList3=[{url:this.form.operateCertificate}]
+				this.fileList4=[{url:this.form.coverImage}]
+				this.fileList5=[]
+				if(this.form.indoorImage){
+					var arr=this.form.indoorImage.split(',')
+					for(var i=0;i<arr.length;i++){
+						if(arr[i]!=''){
+							this.fileList5.push({url:arr[i]})
+						}
+					}
+					
+				}
+				if(this.form.label){
+					this.labelList=[]
+					var label=this.form.label.split(',')
+					for(var i=0;i<label.length;i++){
+						if(arr[i]!=''){
+							this.labelList.push({value:label[i]})
+						}
+					}
+				}else{
+					this.labelList=[{value:''},{value:''}]
+				}
+			})
+			
+		},
+		methods: {
+			submit(){
+				if(this.labelList.length>0){
+					var arr=[]
+					for(var i=0;i<this.labelList.length;i++){
+						if(!this.labelList[i].value){
+							uni.showToast({
+								icon: "none",
+								title: '标签请输入内容!',
+								duration: 3000
+							});
+							return
+						}
+						if(this.labelList[i].value.length>5){
+							uni.showToast({
+								icon: "none",
+								title: '标签最多5个字!',
+								duration: 3000
+							});
+							return
+						}
+						arr.push(this.labelList[i].value)
+					}
+					this.form.label=arr.toString()
+				}
+				this.isSubmit = true
+			},
+			confirmSubmit() {
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				})
+				this.form.status = '审核中'
+				this.$request.baseRequest('admin.tourism.foodInfo', 'update', {
+					foodInfo: JSON.stringify(this.form)
+				}, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+			
+					uni.hideLoading()
+				}).then(res => {
+					this.isSubmit = false
+					uni.showToast({
+						icon: "success",
+						title: '提交成功,请等待平台审核',
+						duration: 2000
+					});
+					uni.navigateBack()
+			
+				})
+			},
+			concel(e){
+				this.show=false
+				console.log(e)
+			},
+			confrim(e){
+				console.log(e)
+				this.show=false
+				this.form.timesection=e.time
+				this.form.startDate=e.start
+				this.form.endDate=e.end
+			},
+			selectTime(){
+				this.show=true
+			},
+			addLabel(){
+				if(this.labelList.length>=4){
+					uni.showToast({
+						icon: "success",
+						title: '最多4个标签!',
+						duration: 2000
+					});
+					return
+				}
+				this.labelList.push({value:''})
+			},
+			codeChange(text) {
+			    this.tips = text;
+			},
+			getCode() {
+				if(!this.form.operaterPhone){
+					uni.showToast({
+						icon: "none",
+						title: '请输入手机号再获取验证码!',
+						duration: 2000
+					});
+					return
+				}
+			    if (this.$refs.uCode.canGetCode) {
+			         // 模拟向后端请求验证码
+			        uni.showLoading({
+			        title: '正在获取验证码'
+			        })
+					this.$request.baseRequest('user', 'sendVerifyCode', {
+						phone: this.form.operaterPhone
+					}, failres => {
+						uni.showToast({
+							icon: "none",
+							title: failres.errmsg,
+							duration: 3000
+						});
+						uni.hideLoading()
+					}).then(res => {
+						
+								
+					})
+			        setTimeout(() => {
+			            uni.hideLoading();
+			            // 这里此提示会被this.start()方法中的提示覆盖
+			         
+			            // 通知验证码组件内部开始倒计时
+			            this.$refs.uCode.start();
+			        }, 2000);
+			    } else {
+			        uni.showToast({
+			        	icon: "success",
+			        	title: '提交成功!',
+			        	duration: 2000
+			        });
+			    }
+			},
+			confirm(e){
+				this.form.operateCertificateDate = e.fulldate
+				this.$forceUpdate()
+				console.log(e)
+			},
+			openjyxkz(){
+				  this.$refs.calendar.open();
+			},
+			placeSelect() {
+				uni.chooseLocation({
+					success: function(res) {
+						console.log(res);
+						that.form.location = res.latitude + ',' + res.longitude
+						let _address = that.$helper.formatLocation(res.address)
+						console.log(_address)
+						that.form.province = _address.Province
+						that.form.city = _address.City
+						that.form.area = _address.Country
+						that.form.detailedAddress = _address.Village
+						that.$forceUpdate()
+					}
+				});
+			},
+			hideKeyboard() {
+				uni.hideKeyboard()
+			},
+			// 删除图片
+			deletePic(event,status) {
+				this[`fileList${event.name}`].splice(event.index, 1)
+				that.indoorImageArray.splice(event.index, 1)
+				that.form.indoorImage =that.indoorImageArray.toString()
+			},
+			// 新增图片
+			async afterRead(event,status) {
+				// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
+				let lists = [].concat(event.file)
+				let fileListLen = this[`fileList${event.name}`].length
+				lists.map((item) => {
+					this[`fileList${event.name}`].push({
+						...item,
+						status: 'uploading',
+						message: '上传中'
+					})
+				})
+				for (let i = 0; i < lists.length; i++) {
+					const result = await this.uploadFilePromise(lists[i].url,status)
+					
+					let item = this[`fileList${event.name}`][fileListLen]
+					this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
+						status: 'success',
+						message: '',
+						url: result
+					}))
+					fileListLen++
+					console.log(that.form, this[`fileList${event.name}`])
+					
+				}
+			},
+			uploadFilePromise(res,status) {
+				return new Promise((resolve, reject) => {
+					uploadImage(res, 'cardImages/',
+						result => {
+							if(status==1){
+								that.form.businessLicense = result
+							}else if(status==2){
+								that.form.operateCertificate = result
+							}else if(status==3){
+								that.form.coverImage = result
+							}else if(status==4){
+								that.indoorImageArray.push(result)
+								that.form.indoorImage =that.indoorImageArray.toString()
+							}
+							resolve(res)
+						}
+					)
+				})
+			},
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+ .wrap{
+	 padding:20rpx;
+ }
+ .icon_merchants_enterjianshao{
+	 margin-left:10rpx;
+	 font-size:50rpx;
+	 color:#666;
+ }
+ .add_label,.get_code{
+
+	background: #5F7DE9;
+	color: #fff;
+	padding: 10rpx 20rpx;
+	border-radius: 10rpx;
+	font-size: 26rpx;
+ }
+</style>

+ 197 - 0
uni_applet/pageA/enter/myCateringdustry/index.vue

@@ -0,0 +1,197 @@
+<template>
+	<view class='content'>
+		<view class='wrap'>
+			<view class='flex align-items-flex-start justify-space-between'>	
+			<view class="flex">
+				<view class="head_sculpture">
+					<u--image :showLoading="true" :src="currectData.coverImage" width="80rpx" height="80rpx" shape="circle"></u--image>
+				</view>
+				<view>
+					<view @click='switchShop' style='font-size:28rpx;'>{{currectData.shopNames}}<image src="@/static/image/yjt.png" mode=""
+								style="margin-left:10rpx;width:12rpx;height: 21rpx;"></image></view>
+					<view style='color:#999;font-size:24rpx;'>{{currectData.detailedAddress}}</view>
+				</view>
+			</view>
+				
+				<view>
+					<view class='caution' v-if='currectData.status!="显示中"&&currectData.status!="已隐藏"'>{{currectData.status}}</view>
+				</view>
+			</view>
+			<view>
+				<view style='font-size:28rpx;'>店铺照片</view>
+				<view  style='flex-wrap: wrap;' class='flex'>
+					<view class='shop_image' v-for='item in currectData.indoorImageArray'>
+						<u--image :showLoading="true" :radius='10' :src="item" width="100rpx" height="100rpx" ></u--image>
+					</view>
+				</view>
+			</view>
+			<view>
+				<view class='switch_show flex' style='font-size:34rpx;'>
+					<view :class='showStatus==0?"active":""' @click='switchShow(0)'>商品展示({{currectData.displaysNum?currectData.displaysNum:0}})</view>
+					<view :class='showStatus==1?"active":""' @click='switchShow(1)'>团购({{currectData.groupNum?currectData.groupNum:0}})</view>
+				</view>
+				<view v-if='showStatus==0' style='font-size:28rpx;'>
+					<view v-for='item in  currectData.dishClassifyInfoList' v-show='item.dishesNum'>
+						<view>
+							<view>{{item.classifyName}}({{item.dishesNum}})</view>
+						</view>
+						<view style='flex-wrap: wrap;text-align:center;' class='flex'>
+							<view style='margin:10rpx;' v-for='item1 in item.foodDishesInfoList'>
+								<u--image :showLoading="true" :src="item1.dishImage" width="150rpx" height="150rpx"  ></u--image>
+								<view>{{item1.dishName}}</view>
+							</view>
+						</view>
+						
+					</view>
+					
+				</view>
+				<view v-if='showStatus==1'>
+					<view style='margin:10rpx;' v-for='item1 in currectData.foodGroupInfoList'>
+						<u--image v-if='item1.showImage' :showLoading="true" :src="item1.showImage":width="width" :height="height"></u--image>
+						<view>{{item1.groupTitle}}</view>
+						<view class='flex justify-space-between align-item-center'>
+							<view>{{item1.groupPrice}}</view>
+							<view class='flex align-item-center'>
+								<view>已收{{item1.soldNum}}.</view>
+								<view>已用{{item1.usedNum}}.</view>
+								<view>待用{{item1.notUseNum}}</view>
+							</view>
+						</view>
+						
+					</view>
+				</view>
+			</view>
+			
+		</view>
+		<view v-if='currectData.status=="显示中"||currectData.status=="已隐藏"' style='margin:20rpx;' class='flex justify-space-between'>
+			<view class='merchants_button' @click='addfood'>添加菜品</view>
+			<view class='merchants_button' @click='addGroupBuying'>添加团购</view>
+			<view class='merchants_button' @click='shopSetting'>店铺设置</view>
+		</view>
+		<view v-else style='margin:20rpx;' class='flex justify-space-between'>
+			<view v-if='currectData.status=="审核中"||currectData.status=="已禁用"' class='merchants_unable_button' >添加菜品</view>
+			<view v-if='currectData.status=="审核中"||currectData.status=="已禁用"' class='merchants_unable_button' >添加团购</view>
+			<view v-if='currectData.status=="审核中"||currectData.status=="已禁用"' class='merchants_unable_button' >店铺设置</view>
+			<view v-if='currectData.status=="已驳回"' ></view>
+			<view v-if='currectData.status=="已驳回"' class='merchants_button' @click='editCateringindustry'>编辑店铺信息</view>
+			<view v-if='currectData.status=="已驳回"'></view>
+		</view>
+		<u-picker immediateChange='true' title='选择店铺' @cancel='show = false' @confirm='shopConfirm' :show="show" :columns="columns" keyName="shopNames"></u-picker>
+	</view>
+</template>
+
+<script>
+	var that
+	export default {
+		data() {
+			return {
+				dataList:[],
+				currectData:{},
+				showStatus:0,
+				show:false,
+				height:'',
+				width:'',
+				columns:[]
+			}
+		},
+		onLoad() {
+			that = this
+		},
+		onShow(){
+			this.height = (uni.getSystemInfoSync().windowWidth/2);
+			
+			this.width = uni.getSystemInfoSync().windowWidth-50;
+			console.log(this.height)
+			uni.showLoading({
+				title: '加载中',
+				mask: true
+			})
+			this.$request.baseRequest('admin.tourism.foodInfo', 'list', {
+				commonId:uni.getStorageSync("userInfo").id,
+				page:1,
+				limit:9999
+			}, failres => {
+				uni.showToast({
+					icon: "none",
+					title: failres.errmsg,
+					duration: 3000
+				});
+						
+				uni.hideLoading()
+			}).then(res => {
+				for(var i=0;i<res.data.items.length;i++){
+					if(res.data.items[i].indoorImage){
+						res.data.items[i].indoorImageArray=res.data.items[i].indoorImage.split(',')
+					}
+					if(res.data.items[i].foodGroupInfoList){
+						for(var q=0;q<res.data.items[i].foodGroupInfoList.length;q++){
+							var data = res.data.items[i].foodGroupInfoList[q]
+							if(data.dishImage){
+								var images = data.dishImage.split(',')
+								data.showImage=images[0]
+							}
+						}
+					}
+				}
+				this.columns = [res.data.items]
+				this.dataList = res.data.items
+				this.currectData = res.data.items[0]
+				uni.hideLoading()
+						
+			})
+			
+		},
+		methods: {
+			shopConfirm(e){
+				console.log(e)
+				this.currectData =e.value[0]
+				this.show = false
+			},
+			switchShop(){
+				this.show = true
+			},
+			switchShow(status){
+				this.showStatus=status
+			},
+			addfood(){
+				uni.navigateTo({
+					url:'/pageA/enter/myCateringdustry/addfood?foodId='+this.currectData.id+'&shopNames='+this.currectData.shopNames
+				})
+			},
+			editCateringindustry(){
+				uni.navigateTo({
+					url:'/pageA/enter/myCateringdustry/edit?foodId='+this.currectData.id
+				})
+			},
+			addGroupBuying(){
+				uni.navigateTo({
+					url:'/pageA/enter/myCateringdustry/addGroupBuying?foodId='+this.currectData.id+'&shopNames='+this.currectData.shopNames
+				})
+			},
+			shopSetting(){
+				uni.setStorageSync('myCateringdustry',JSON.stringify(this.currectData))
+				uni.navigateTo({
+					url:'/pageA/enter/myCateringdustry/shopSetting/index?foodId='+this.currectData.id+'&shopNames='+this.currectData.shopNames
+				})
+			}
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+	.wrap{
+		padding:20rpx;
+	}
+	.head_sculpture{
+		padding: 0 20rpx 20rpx 0;
+	}
+	.shop_image{
+		margin:10rpx;
+	}
+	.switch_show{
+		.active{
+			font-weight:600;
+			color:#5F7DE9;
+		}
+	}
+</style>

+ 154 - 0
uni_applet/pageA/enter/myCateringdustry/shopSetting/editCertificate.vue

@@ -0,0 +1,154 @@
+<template>
+	<view class='content'>
+		<view class='wrap'>
+			<u--form  ref="uForm">
+				<u-form-item labelWidth='80' labelPosition='top' label="营业执照">
+					<u-upload height='208' width='320' :fileList="fileList2" @afterRead="afterRead($event,1)" @delete="deletePic" name="2" multiple
+						:maxCount="1">
+						<image style='width:680rpx;height:417rpx;' src="@/static/image/enter/yingyezhizhao.png" mode=""></image>
+					</u-upload>
+				</u-form-item>
+				<u-form-item labelWidth='80' labelPosition='top' label="经营许可证">
+					<u-upload height='208' width='320' :fileList="fileList3" @afterRead="afterRead($event,2)" @delete="deletePic" name="3" multiple
+						:maxCount="1">
+						<image style='width:680rpx;height:417rpx;' src="@/static/image/enter/jingyingxukezheng.png" mode=""></image>
+					</u-upload>
+				</u-form-item>
+				<u-form-item  labelWidth='150' labelPosition='left' label="经营许可证有效期">
+					<view style='text-align:right;' @click='openjyxkz'>{{currectData.operateCertificateDate?currectData.operateCertificateDate:'选择日期'}}<image src="@/static/image/yjt.png" mode=""
+								style="margin-left:10rpx;width:12rpx;height: 21rpx;"></image></view>
+				</u-form-item>
+				<uni-calendar
+				   :insert="false"
+				   :lunar="true" 
+					ref="calendar"
+				   :start-date="startDate"
+				   @confirm="confirm"
+				    />
+			</u--form>
+			<view class="footer">
+				<button @click='submit' class="submit">提交</button>
+			</view>
+		</view>
+		<u-modal :show="isSubmit" content='确定提交证件图片' @confirm="$u.debounce(confirmSubmit, 500)" showCancelButton
+			@cancel="isSubmit=false" @close="isSubmit=false" closeOnClickOverlay></u-modal>
+	</view>
+</template>
+
+<script>
+	var that
+	import uploadImage from '@/components/ossutil/uploadFile.js';
+	export default {
+		data() {
+			return {
+				isSubmit:false,
+				currectData:{},
+				fileList2:[],
+				fileList3:[],
+				startDate:'',
+			}
+		},
+		onLoad() {
+			that = this
+		},
+		onShow(){
+			var date = new Date().toISOString().slice(0, 10)
+			this.startDate=date
+			if(uni.getStorageSync('myCateringdustry')){
+				this.currectData=JSON.parse(uni.getStorageSync('myCateringdustry'))
+				if(this.currectData.businessLicense){
+					this.fileList2=[{url:this.currectData.businessLicense}]
+				}
+				if(this.currectData.operateCertificate){
+					this.fileList3=[{url:this.currectData.operateCertificate}]
+				}
+				this.currectData.operateCertificateDate=this.parseTime(this.currectData.operateCertificateDate,'{y}-{m}-{d}')
+			}
+		},
+		methods: {
+			submit(){
+				this.isSubmit = true
+			},
+			confirmSubmit() {
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				})
+				this.$request.baseRequest('admin.tourism.foodInfo', 'update', {
+					foodInfo: JSON.stringify(this.currectData)
+				}, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+			
+					uni.hideLoading()
+				}).then(res => {
+					this.isSubmit = false
+					uni.showToast({
+						icon: "success",
+						title: '编辑证件图片成功',
+						duration: 2000
+					});
+					uni.setStorageSync('myCateringdustry',JSON.stringify(this.currectData))
+					uni.navigateBack()
+			
+				})
+			},
+			openjyxkz(){
+				this.$refs.calendar.open();
+			},
+			// 删除图片
+			deletePic(event,status) {
+				this[`fileList${event.name}`].splice(event.index, 1)
+				that.indoorImageArray.splice(event.index, 1)
+				that.currectData.indoorImage =that.indoorImageArray.toString()
+			},
+			// 新增图片
+			async afterRead(event,status) {
+				// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
+				let lists = [].concat(event.file)
+				let fileListLen = this[`fileList${event.name}`].length
+				lists.map((item) => {
+					this[`fileList${event.name}`].push({
+						...item,
+						status: 'uploading',
+						message: '上传中'
+					})
+				})
+				for (let i = 0; i < lists.length; i++) {
+					const result = await this.uploadFilePromise(lists[i].url,status)
+					
+					let item = this[`fileList${event.name}`][fileListLen]
+					this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
+						status: 'success',
+						message: '',
+						url: result
+					}))
+					fileListLen++
+					console.log(that.currectData, this[`fileList${event.name}`])
+					
+				}
+			},
+			uploadFilePromise(res,status) {
+				return new Promise((resolve, reject) => {
+					uploadImage(res, 'cardImages/',
+						result => {
+							if(status==1){
+								that.currectData.businessLicense = result
+							}else if(status==2){
+								that.currectData.operateCertificate = result
+							}
+							resolve(res)
+						}
+					)
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 161 - 0
uni_applet/pageA/enter/myCateringdustry/shopSetting/editFoodClassify.vue

@@ -0,0 +1,161 @@
+<template>
+	<view class='content'>
+		<view class='wrap'>
+			<view class='caution'>注意:分类排序决定顾客端显示的顺序</view>
+			<view class='flex justify-space-between align-item-center' v-for='item in classifyList'>
+				<view>{{item.classifyName}}({{item.dishesNum?item.dishesNum:0}})</view>
+				<view class='flex'>
+					<view  class='button' @click='sticky(item)'>置顶</view>
+					<view v-if='!item.dishesNum' class='button' @click='del(item)'>删除</view>
+					<view v-else class='unable_button'>删除</view>
+					<view class='button' @click='edit(item)'>编辑</view>
+				</view>
+			</view>
+		</view>
+		<view class="footer">
+			<button @click='submit' class="submit">新增</button>
+		</view>
+		<u-modal :show="isSubmit" :content='content' @confirm="$u.debounce(confirmSubmit, 500)" showCancelButton
+			@cancel="isSubmit=false" @close="isSubmit=false" closeOnClickOverlay>
+			<view class="slot-content">
+				<view v-if="status==0">
+					确定删除"{{currectData.classifyName}}"分类?
+				</view>
+				<view v-else>
+					<u--input inputAlign='center' v-model="classifyName" placeholder="输入分类名称" border="none"></u--input>
+				</view>
+			</view>
+		</u-modal>
+	</view>
+</template>
+
+<script>
+	var that
+	export default {
+		data() {
+			return {
+				currect:{},
+				currectData:{},
+				classifyList:[],
+				status:0,
+				classifyName:'',
+				form:{},
+				isSubmit:false,
+			}
+		},
+		onLoad() {
+			that = this
+		},
+		onShow(){
+			if(uni.getStorageSync('myCateringdustry')){
+				this.currect=JSON.parse(uni.getStorageSync('myCateringdustry'))
+				this.getList()
+			}
+			
+		},
+		methods: {
+			edit(item){
+				this.currectData=item
+				this.status=2
+				this.isSubmit = true
+			},
+			del(item){
+				this.currectData=item
+				this.status=0
+				this.isSubmit = true
+			},
+			submit(){
+				this.status=1
+				this.isSubmit = true
+			},
+			confirmSubmit() {
+				this.form.foodId=this.currect.id
+				this.form.classifyName=this.classifyName
+				this.currectData.classifyName=this.classifyName
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				})
+				var text ='',parameter='',data={}
+				if(this.status==0){
+					parameter='delete'
+					data={
+						id: this.currectData.id
+					}
+					text=`删除成功`
+				}else if(this.status==1){
+					parameter='add'
+					data={
+						dishClassifyInfo: JSON.stringify(this.form)
+					}
+					text=`新增成功`
+				}else if(this.status==2){
+					parameter='update'
+					data={
+						dishClassifyInfo: JSON.stringify(this.currectData)
+					}
+					text=`编辑成功`
+				}
+				this.$request.baseRequest('admin.tourism.dishClassifyInfo', parameter, data, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+			
+					uni.hideLoading()
+				}).then(res => {
+					this.isSubmit = false
+					uni.showToast({
+						icon: "success",
+						title: text,
+						duration: 2000
+					});
+					this.getList()
+			
+				})
+			},
+			sticky(item){
+				this.$request.baseRequest('admin.tourism.dishClassifyInfo', 'top', {
+					dishClassifyInfo: JSON.stringify(item)
+				}, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+							
+					uni.hideLoading()
+				}).then(res => {
+					uni.showToast({
+						icon: "success",
+						title: '置顶成功',
+						duration: 2000
+					});
+					this.getList()
+				})
+			},
+			getList(){
+				this.$request.baseRequest('admin.tourism.dishClassifyInfo', 'list', {
+					foodId:this.currect.id,
+					page:1,
+					limit:9999
+				}, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+				}).then(res => {
+					this.classifyList = res.data.items
+				})
+			},
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+	.button,.unable_button{
+		margin:5px;
+	}
+</style>

+ 147 - 0
uni_applet/pageA/enter/myCateringdustry/shopSetting/editShopImage.vue

@@ -0,0 +1,147 @@
+<template>
+	<view class='content'>
+		<view class='wrap'>
+			<u--form  ref="uForm">
+				<u-form-item labelWidth='240' labelPosition='top' label="门面及门头照片(1张,店名文字清晰)">
+					<u-upload :fileList="fileList4" @afterRead="afterRead($event,3)" @delete="deletePic($event,3)" name="4" multiple
+						:maxCount="1">
+						
+					</u-upload>
+				</u-form-item>
+				<u-form-item labelWidth='120' labelPosition='top' label="室内照片(1-6张)">
+					<u-upload :fileList="fileList5" @afterRead="afterRead($event,4)" @delete="deletePic($event,4)" name="5" multiple
+						:maxCount="6">
+					</u-upload>
+				</u-form-item>
+			</u--form>
+			<view class="footer">
+				<button @click='submit' class="submit">提交</button>
+			</view>
+		</view>
+		<u-modal :show="isSubmit" content='确定提交店铺图片' @confirm="$u.debounce(confirmSubmit, 500)" showCancelButton
+			@cancel="isSubmit=false" @close="isSubmit=false" closeOnClickOverlay></u-modal>
+	</view>
+</template>
+
+<script>
+	var that
+	import uploadImage from '@/components/ossutil/uploadFile.js';
+	export default {
+		data() {
+			return {
+				isSubmit:false,
+				indoorImageArray:[],
+				fileList4:[],
+				fileList5:[],
+				currectData:{},
+			}
+		},
+		onLoad() {
+			that = this
+		},
+		onShow(){
+			if(uni.getStorageSync('myCateringdustry')){
+				this.currectData=JSON.parse(uni.getStorageSync('myCateringdustry'))
+				if(this.currectData.coverImage){
+					this.fileList4=[{url:this.currectData.coverImage}]
+				}
+				this.fileList5=[]
+				if(this.currectData.indoorImage){
+					this.indoorImageArray=this.currectData.indoorImage.split(',')
+					for(var i=0;i<this.indoorImageArray.length;i++){
+						if(this.indoorImageArray[i]){
+							this.fileList5.push({url:this.indoorImageArray[i]})
+						}
+					}
+					
+				}
+			}
+		},
+		methods: {
+			submit(){
+				this.isSubmit = true
+			},
+			confirmSubmit() {
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				})
+				this.$request.baseRequest('admin.tourism.foodInfo', 'update', {
+					foodInfo: JSON.stringify(this.currectData)
+				}, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+			
+					uni.hideLoading()
+				}).then(res => {
+					this.isSubmit = false
+					uni.showToast({
+						icon: "success",
+						title: '编辑店铺图片成功',
+						duration: 2000
+					});
+					uni.setStorageSync('myCateringdustry',JSON.stringify(this.currectData))
+					uni.navigateBack()
+			
+				})
+			},
+			// 删除图片
+			deletePic(event,status) {
+				this[`fileList${event.name}`].splice(event.index, 1)
+				if(status==4){
+					that.indoorImageArray.splice(event.index, 1)
+					that.currectData.indoorImage =that.indoorImageArray.toString()
+				}
+				
+			},
+			// 新增图片
+			async afterRead(event,status) {
+				// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
+				let lists = [].concat(event.file)
+				let fileListLen = this[`fileList${event.name}`].length
+				lists.map((item) => {
+					this[`fileList${event.name}`].push({
+						...item,
+						status: 'uploading',
+						message: '上传中'
+					})
+				})
+				for (let i = 0; i < lists.length; i++) {
+					const result = await this.uploadFilePromise(lists[i].url,status)
+					
+					let item = this[`fileList${event.name}`][fileListLen]
+					this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
+						status: 'success',
+						message: '',
+						url: result
+					}))
+					fileListLen++
+					console.log(that.currectData, this[`fileList${event.name}`])
+					
+				}
+			},
+			uploadFilePromise(res,status) {
+				return new Promise((resolve, reject) => {
+					uploadImage(res, 'cardImages/',
+						result => {
+							 if(status==3){
+								that.currectData.coverImage = result
+							}else if(status==4){
+								that.indoorImageArray.push(result)
+								that.currectData.indoorImage =that.indoorImageArray.toString()
+							}
+							resolve(res)
+						}
+					)
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 181 - 0
uni_applet/pageA/enter/myCateringdustry/shopSetting/editShopInformation.vue

@@ -0,0 +1,181 @@
+<template>
+	<view class='content'>
+		<view class='wrap'>
+			<u--form  ref="uForm">
+				
+				<u-form-item  labelWidth='150' labelPosition='left' label="店铺名称">
+					<u-input inputAlign='right' border='none' placeholder='输入店铺名称' v-model="currectData.shopNames" />
+				</u-form-item>
+				<u-form-item  labelWidth='150' labelPosition='left' label="经营者">
+					<u-input inputAlign='right' border='none' placeholder='输入经营者姓名' v-model="currectData.operater" />
+				</u-form-item>
+				<u-form-item  labelWidth='150' labelPosition='left' label="经营者手机号">
+					<u-input inputAlign='right' maxlength="15" border='none' placeholder='输入经营者手机号' v-model="currectData.operaterPhone" />
+				</u-form-item>
+				<u-form-item  labelWidth='150' labelPosition='left' label="验证码">
+					<u-input inputAlign='right' border='none' placeholder='输入验证码' v-model="currectData.verifyCode" >
+						<template slot="suffix">
+							<u-code ref="uCode"
+								@change="codeChange"
+								seconds="60"
+								changeText="X秒重新获取"
+							></u-code>
+							<view class='get_code' @click='getCode'>{{tips}}</view>
+						</template>
+					</u-input>
+				</u-form-item>
+				<u-form-item  labelWidth='150' labelPosition='left' label="业务联系人(选填)">
+					<u-input inputAlign='right' border='none' placeholder='输入联系人姓名' v-model="currectData.contacts" />
+				</u-form-item>
+				<u-form-item  labelWidth='150' labelPosition='left' label="业务联系电话(选填)">
+					<u-input inputAlign='right' maxlength="15" border='none' placeholder='输入联系电话' v-model="currectData.contactsPhone" />
+				</u-form-item>
+				<u-form-item labelWidth='80' labelPosition='left' @click='placeSelect(),hideKeyboard()' label="店铺位置">
+					<view style='text-align:right;' v-if="currectData.province">{{ currectData.province }}{{ currectData.city }}{{ currectData.area }}</view>
+					<view style='text-align:right;' v-else>
+						<text style='text-align:right;'>选择位置 </text>
+						<image src="@/static/image/yjt.png" mode=""
+							style="margin-left:10rpx;width:12rpx;height: 21rpx;"></image>
+					</view>
+				</u-form-item>
+				<u-form-item labelWidth='80' labelPosition='left' label="详细地址">
+					<u-input inputAlign='right' maxlength="15" border='none' placeholder='输入详细地址,不超过15个字' v-model="currectData.detailedAddress" />
+				</u-form-item>
+			</u--form>
+			<view class="footer">
+				<button @click='submit' class="submit">提交</button>
+			</view>
+			<u-modal :show="isSubmit" content='确定提交店铺信息?' @confirm="$u.debounce(confirmSubmit, 500)" showCancelButton
+				@cancel="isSubmit=false" @close="isSubmit=false" closeOnClickOverlay></u-modal>
+		</view>
+	</view>
+</template>
+
+<script>
+	var that
+	export default {
+		data() {
+			return {
+				currectData:{
+					
+				},
+				isSubmit:false,
+				tips:'发送验证码',
+			}
+		},
+		onLoad() {
+			that = this
+		},
+		onShow(){
+			if(uni.getStorageSync('myCateringdustry')){
+				this.currectData=JSON.parse(uni.getStorageSync('myCateringdustry'))
+			}
+		},
+		methods: {
+			placeSelect() {
+				uni.chooseLocation({
+					success: function(res) {
+						console.log(res);
+						that.currectData.location = res.latitude + ',' + res.longitude
+						let _address = that.$helper.formatLocation(res.address)
+						console.log(_address)
+						that.currectData.province = _address.Province
+						that.currectData.city = _address.City
+						that.currectData.area = _address.Country
+						that.currectData.detailedAddress = _address.Village
+						that.$forceUpdate()
+					}
+				});
+			},
+			hideKeyboard() {
+				uni.hideKeyboard()
+			},
+			codeChange(text) {
+			    this.tips = text;
+			},
+			getCode() {
+				if(!this.currectData.operaterPhone){
+					uni.showToast({
+						icon: "none",
+						title: '请输入手机号再获取验证码!',
+						duration: 2000
+					});
+					return
+				}
+			    if (this.$refs.uCode.canGetCode) {
+			         // 模拟向后端请求验证码
+			        uni.showLoading({
+			        title: '正在获取验证码'
+			        })
+					this.$request.baseRequest('user', 'sendVerifyCode', {
+						phone: this.currectData.operaterPhone
+					}, failres => {
+						uni.showToast({
+							icon: "none",
+							title: failres.errmsg,
+							duration: 3000
+						});
+						uni.hideLoading()
+					}).then(res => {
+						
+								
+					})
+			        setTimeout(() => {
+			            uni.hideLoading();
+			            // 这里此提示会被this.start()方法中的提示覆盖
+			         
+			            // 通知验证码组件内部开始倒计时
+			            this.$refs.uCode.start();
+			        }, 2000);
+			    } else {
+				
+			        uni.showToast({
+			        	icon: "success",
+			        	title: '提交成功!',
+			        	duration: 2000
+			        });
+			    }
+			},
+			submit(){
+				this.isSubmit = true
+			},
+			confirmSubmit() {
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				})
+				this.$request.baseRequest('admin.tourism.foodInfo', 'update', {
+					foodInfo: JSON.stringify(this.currectData)
+				}, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+			
+					uni.hideLoading()
+				}).then(res => {
+					this.isSubmit = false
+					uni.showToast({
+						icon: "success",
+						title: '编辑店铺信息成功',
+						duration: 2000
+					});
+					uni.setStorageSync('myCateringdustry',JSON.stringify(this.currectData))
+					uni.navigateBack()
+			
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.get_code{
+		background: #5F7DE9;
+		color: #fff;
+		padding: 10rpx 20rpx;
+		border-radius: 10rpx;
+		font-size: 26rpx;
+	 }
+</style>

+ 263 - 0
uni_applet/pageA/enter/myCateringdustry/shopSetting/foodInfomation.vue

@@ -0,0 +1,263 @@
+<template>
+	<view class='content'>
+		<view class='wrap'>
+			<view v-for='item in foodInfomations'>
+				<view>{{item.classify}}</view>
+				<view style='margin:10rpx;' class='flex justify-space-between align-item-center' v-for='(item1,index) in item.data'>
+					<view class='flex align-item-center'>
+						<u-checkbox-group
+						    placement="column"
+						    @change="checkboxChange($event,item1)">
+						    <u-checkbox
+						    :customStyle="{marginBottom: '8px'}"
+						    :key="index"
+							:name='item1.dishName'
+							:checked='item1.checked'
+							>
+						    </u-checkbox>
+						</u-checkbox-group>
+						<image v-if='!item1.edit' style='width:200rpx;height:200rpx;margin-right:20rpx;' :src="item1.dishImage" mode="aspectFill"></image>
+						<u-upload v-else height='100' width='100' :fileList="item1[`fileList${item1.id}`]" @afterRead="afterRead($event,item1,item)" @delete="deletePic($event,item1,item)" :name="item1.id" multiple
+							:maxCount="1">
+						</u-upload>
+						 <view>
+							 <view v-if='!item1.edit'>{{item1.dishName}}</view>
+							 <u--input v-else inputAlign='right' v-model="item1.dishName" placeholder="输入菜品名称" border="none"></u--input>
+							 <view v-if='!item1.edit'>{{item1.dishPrice}}</view>
+							 <u--input v-else inputAlign='right' v-model="item1.dishPrice" placeholder="输入菜品单价" border="none"></u--input>
+						 </view>
+					 </view>
+					<view>
+						<view v-if='!item1.edit' @click='edit(item1)' class='button1 button'>编辑</view>
+						<view v-if='item1.edit' @click='submit(item1)' class='button1 button'>确定</view>
+						<view v-if='item1.edit' @click='item1.edit = false' class='default_button'>取消</view>
+						<view v-if='!item1.edit' class='default_button'>置顶</view>
+					</view>
+				 </view>
+			</view>
+		</view>
+		<view style='padding:10px;' class='footer flex justify-space-between align-item-center'>
+			<u-checkbox-group
+			    placement="column"
+			    @change="checkboxAllChange">
+			    <u-checkbox
+			    :customStyle="{marginBottom: '8px'}"
+				name='全选'
+				label='全选'
+				:checked="checkAll"
+				>
+			    </u-checkbox>
+			</u-checkbox-group>
+			<view class='flex align-item-center'>
+				<view @click='del' style='margin-right:10rpx;' class='caution_button'>删除</view>
+				<view @click='add' class='button'>添加</view>
+			</view>
+		</view>
+		<u-modal :show="isSubmit" content='确定删除菜品?' @confirm="$u.debounce(confirmSubmit, 500)" showCancelButton
+			@cancel="isSubmit=false" @close="isSubmit=false" closeOnClickOverlay></u-modal>
+	</view>
+</template>
+
+<script>
+	var that
+	import uploadImage from '@/components/ossutil/uploadFile.js';
+	export default {
+		data() {
+			return {
+				foodInfomations:[],
+				currect:{},
+				checkList:[],
+				checkAll:false,
+				dataList:[],
+				isSubmit:false,
+				
+			}
+		},
+		onLoad() {
+			that = this
+			if(uni.getStorageSync('myCateringdustry')){
+				this.currect=JSON.parse(uni.getStorageSync('myCateringdustry'))
+				this.getList()
+			}
+		},
+		onShow(){
+			
+		},
+		methods: {
+			// 删除图片
+			deletePic(event,item1,item) {
+				console.log(item1,item)
+				item1[`fileList${item1.id}`].splice(event.index, 1)
+				this.$forceUpdate()
+				// that.indoorImageArray.splice(event.index, 1)
+				// that.currectData.indoorImage =that.indoorImageArray.toString()
+			},
+			// 新增图片
+			async afterRead(event,item1,item) {
+				console.log(item1,item)
+				// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
+				let lists = [].concat(event.file)
+				let fileListLen = item1[`fileList${item1.id}`].length
+				lists.map((item2) => {
+					item1[`fileList${item1.id}`].push({
+						...item2,
+						status: 'uploading',
+						message: '上传中'
+					})
+				})
+				for (let i = 0; i < lists.length; i++) {
+					const result = await this.uploadFilePromise(lists[i].url,item1)
+					
+					let item = item1[`fileList${item1.id}`][fileListLen]
+					item1[`fileList${item1.id}`].splice(fileListLen, 1, Object.assign(item, {
+						status: 'success',
+						message: '',
+						url: result
+					}))
+					fileListLen++
+					this.$forceUpdate()
+				}
+			},
+			uploadFilePromise(res,item) {
+				return new Promise((resolve, reject) => {
+					uploadImage(res, 'cardImages/',
+						result => {
+							item.dishImage = result
+							resolve(res)
+						}
+					)
+				})
+			},
+			submit(item){
+				this.$request.baseRequest('admin.tourism.foodDishesInfo', 'update', {
+					foodDishesInfo:JSON.stringify(item)
+				}, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+				}).then(res => {
+					uni.showToast({
+						icon: "success",
+						title: '编辑菜品成功',
+						duration: 2000
+					});
+					this.getList()
+				})
+			},
+			del(){
+
+				this.isSubmit = true
+			},
+			confirmSubmit(){
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				})
+				for(var i = 0;i<this.checkList.length;i++){
+					this.$request.baseRequest('admin.tourism.foodDishesInfo', 'delete', {
+						id:this.checkList[i].id
+					}, failres => {
+						uni.showToast({
+							icon: "none",
+							title: failres.errmsg,
+							duration: 3000
+						});
+						uni.hideLoading()
+					}).then(res => {
+						this.isSubmit = false
+						
+						if(this.checkList.length==1||i==this.checkList.length-1){
+							uni.hideLoading()
+							uni.showToast({
+								icon: "success",
+								title: '删除菜品成功',
+								duration: 2000
+							});
+							this.getList()
+						}
+					})
+				}
+			},
+			checkboxAllChange(e){
+				console.log(e)
+				this.checkAll = !this.checkAll;
+				for(var i = 0; i < this.foodInfomations.length; i++){
+					for(var q = 0; q < this.foodInfomations[i].data.length; q++){
+						this.foodInfomations[i].data[q].checked = this.checkAll
+					}
+				}
+				console.log(this.foodInfomations)
+				this.$forceUpdate()
+				
+			},
+			edit(item){
+				console.log(item)
+				item.edit = true
+				this.$forceUpdate()
+			},
+			checkboxChange(e,item1){
+				console.log(e,item1)
+				var checkData = this.checkList.filter((item)=>{return item.id==item1.id})
+				item1.checked = !item1.checked
+				if(e[0]){
+					if(checkData.length==0){
+						this.checkList.push(item1)
+					}else{
+						var checkindex = this.checkList.findIndex((item)=>{return item.id==item1.id})
+						this.checkList[checkindex]=item1
+					}
+				}else{
+					var checkindex = this.checkList.findIndex((item)=>{return item.id==item1.id})
+					this.checkList.splice(checkindex,1)
+				}
+			},
+			add(){
+				uni.navigateTo({
+					url:'/pageA/enter/myCateringdustry/addfood?foodId='+this.currect.id+'&shopNames='+this.currect.shopNames
+				})
+			},
+			deWeightFour(arr) {
+				var obj = {};
+			    arr = arr.reduce(function(a, b) {
+			        obj[b.classify] ? '' : obj[b.classify] = true && a.push({classify:b.classify,data:[]});
+			        return a;
+			    }, [])
+			    return arr;
+			},
+			getList(){
+				this.$request.baseRequest('admin.tourism.foodDishesInfo', 'list', {
+					foodId:this.currect.id,
+					page:1,
+					limit:9999
+				}, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+				}).then(res => {
+					var arr = res.data.items
+					var newArr = this.deWeightFour(arr);
+					for(var i=0;i<arr.length;i++){
+						this.dataList=res.data.items
+						var currectList=newArr.filter((item)=>{return item.classify==arr[i].classify})
+						arr[i].checked = false
+						arr[i].edit = false
+						arr[i][`fileList${arr[i].id}`]=[{url:arr[i].dishImage}]
+						currectList[0].data.push(arr[i])
+					}
+					this.foodInfomations = newArr
+					console.log(this.foodInfomations)
+				})
+			},
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+	.button1{
+		margin-bottom:20rpx;
+	}
+</style>

+ 22 - 0
uni_applet/pageA/enter/myCateringdustry/shopSetting/groupBuying.vue

@@ -0,0 +1,22 @@
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 313 - 0
uni_applet/pageA/enter/myCateringdustry/shopSetting/index.vue

@@ -0,0 +1,313 @@
+<template>
+	<view class='content'>
+		<view class='wrap'>
+			<view>
+				{{currectData.shopNames}}
+				<image src="@/static/image/yjt.png" mode="" style="margin-left:10rpx;width:12rpx;height: 21rpx;"></image>
+			</view>
+			<view class='title'>营业管理</view>
+			<u-cell-group>
+				<u-cell title="营业时间" :isLink="true" arrow-direction="right">
+					<view @click='selectTime' slot="title" class="u-slot-title flex justify-space-between">
+						<view>营业时间</view>
+						{{currectData.startDate}}~{{currectData.endDate}}
+					</view>
+				</u-cell>
+				<u-cell  title="店铺上架" :isLink="true" arrow-direction="right">
+					<!-- <u-badge count="99" :absolute="false" slot="right-icon"></u-badge> -->
+					<view slot="title" class="u-slot-title flex justify-space-between align-item-center">
+						<view class="">
+							店铺上架
+						</view>
+						<view class='flex  align-item-center'>
+							<view style='margin-right:10rpx;'>{{currectData.status}}</view>
+							<u-switch @change="change" slot="right-icon" v-model="checked"></u-switch>	
+						</view>
+					</view>
+				</u-cell>
+				<u-cell title="删除店铺" :isLink="true" arrow-direction="right">
+					<view @click='del' slot="title" class="u-slot-title">
+						<view class="">
+							删除店铺
+						</view>
+					</view>	
+				</u-cell>
+			</u-cell-group>
+			<view class='title'>店铺信息</view>
+			<u-cell-group>
+				<u-cell title="店铺信息" :isLink="true" arrow-direction="right">
+					<view  @click='toDetail("/pageA/enter/myCateringdustry/shopSetting/editShopInformation")' slot="title" class="u-slot-title">
+						<view class="">
+							店铺信息
+						</view>
+					</view>	
+				</u-cell>
+				<u-cell title="店铺图片" :isLink="true" arrow-direction="right">
+					<view @click='toDetail("/pageA/enter/myCateringdustry/shopSetting/editShopImage")' slot="title" class="u-slot-title">
+						<view class="">
+							店铺图片
+						</view>
+					</view>	
+				</u-cell>
+				<u-cell title="证照图片" :isLink="true" arrow-direction="right">
+					<view @click='toDetail("/pageA/enter/myCateringdustry/shopSetting/editCertificate")' slot="title" class="u-slot-title">
+						<view class="">
+							证照图片
+						</view>
+					</view>	
+				</u-cell>
+				
+				<u-cell @click='toDetail("/pageA/enter/myCateringdustry/shopSetting/editFoodClassify")' title="菜品分类" :isLink="true" arrow-direction="right">
+					<view slot="title" class="u-slot-title">
+						<view class="">
+							菜品分类
+						</view>
+					</view>	
+				</u-cell>
+				<u-cell  title="允许用户查看菜品价格" :isLink="true" arrow-direction="right">
+					<view slot="title" class="u-slot-title flex justify-space-between">
+						<view class="">
+							允许用户查看菜品价格
+						</view>
+						<u-switch @change='change1' slot="right-icon" v-model="checked1"></u-switch>
+					</view>	
+				</u-cell>
+				
+			</u-cell-group>
+		</view>
+		<view style='margin:10px;' class='flex justify-space-between align-item-center'>
+			<view @click='toDetail("/pageA/enter/myCateringdustry/shopSetting/foodInfomation")' class='button'>菜品信息</view>
+			<view @click='toDetail("/pageA/enter/myCateringdustry/shopSetting/editFoodClassify")' class='button'>团购信息</view>
+		</view>
+		<smh-time-range :is-under='show' :time="time" @confrim="confrim" @cancel="cancel"></smh-time-range>
+		<u-modal :show="isSubmit" :content='content' @confirm="$u.debounce(confirmSubmit, 500)" showCancelButton
+			@cancel="isSubmit=false" @close="isSubmit=false" closeOnClickOverlay></u-modal>
+			<u-modal :show="isDel" content='确定删除店铺?' @confirm="$u.debounce(confirmDelSubmit, 500)" showCancelButton
+				@cancel="isDel=false" @close="isDel=false" closeOnClickOverlay></u-modal>
+		<u-modal :show="isStatus" :content='content' @confirm="$u.debounce(confirmStatusSubmit, 500)" showCancelButton
+			@cancel="isStatus=false" @close="isStatus=false" closeOnClickOverlay></u-modal>
+	</view>
+</template>
+
+<script>
+	var that
+	export default {
+		data() {
+			return {
+				content:'确定下架店铺?',
+				isSubmit:false,
+				isStatus:false,
+				isDel:false,
+				checked:true,
+				checked1:true,
+				show:false,
+				time:[],
+				currectStatus:1,
+				currectData:{
+					
+				},
+				hoursList:[
+					'00:00',
+					'00:30',
+					'01:00',
+					'01:30',
+					'02:00',
+					'02:30',
+					'03:00',
+					'03:30',
+					'04:00',
+					'04:30',
+					'05:00',
+					'05:30',
+					'06:00',
+					'06:30',
+					'07:00',
+					'07:30',
+					'08:00',
+					'08:30',
+					'09:00',
+					'09:30',
+					'10:00',
+					'10:00',
+					'11:00',
+					'11:30',
+					'12:00',
+					'12:30',
+					'13:00',
+					'13:30',
+					'14:00',
+					'14:30',
+					'15:00',
+					'15:30',
+					'16:00',
+					'16:30',
+					'17:00',
+					'17:30',
+					'18:00',
+					'18:30',
+					'19:00',
+					'19:30',
+					'20:00',
+					'20:30',
+					'21:00',
+					'21:30',
+					'22:00',
+					'22:30',
+					'23:00',
+					'23:30',
+					'24:00'],
+			}
+		},
+		onLoad() {
+			that = this
+		},
+		onShow(){
+			if(uni.getStorageSync('myCateringdustry')){
+				this.currectData=JSON.parse(uni.getStorageSync('myCateringdustry'))
+				var start = 0,end = 0
+				for(var i=0;i<this.hoursList.length;i++){
+					if(this.currectData.startDate==this.hoursList[i]){
+						start = i
+					}
+					if(this.currectData.endDate==this.hoursList[i]){
+						end = i
+					}
+				}
+				if(this.currectData.status=='显示中'){
+					this.checked=true
+				}else if(this.currectData.status=='已隐藏'){
+					this.checked=false
+				}
+				if(this.currectData.lookFlag==0){
+					this.checked1 =true
+				}else{
+					this.checked1 =false
+				}
+				this.time=[start,'0',end]
+				console.log(this.time)
+			}
+		},
+		methods: {
+			change1(e){
+				console.log(1111111)
+				this.currectStatus = 2
+				if(!this.checked1){
+					this.content='确定禁止用户查看菜品价格?'
+					this.isStatus = true
+				}else{
+					this.confirmStatusSubmit()
+				}
+			},
+			toDetail(url){
+				uni.navigateTo({
+					url:url
+				})
+			},
+			del(){
+				this.isDel = true
+			},
+			change(e){
+				this.currectStatus = 1
+				console.log(e,this.checked)
+				if(!this.checked){
+					this.content='确定下架店铺?'
+					this.isStatus = true
+				}else{
+					this.confirmStatusSubmit()
+				}
+			},
+			confirmDelSubmit(){
+				this.$request.baseRequest('admin.tourism.foodInfo', 'delete', {
+					id: this.currectData.id
+				}, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+							
+					uni.hideLoading()
+				}).then(res => {
+					uni.showToast({
+						icon: "success",
+						title: '删除成功',
+						duration: 2000
+					});
+					this.isStatus = false
+					uni.navigateBack()
+				})
+			},
+			confirmStatusSubmit(){
+				if(this.currectStatus==1){
+					if(!this.checked){
+						this.currectData.status='已隐藏'
+					}else{
+						this.currectData.status='显示中'
+					}
+				}else{
+					if(!this.checked1){
+						this.currectData.lookFlag=1
+					}else{
+						this.currectData.lookFlag=0
+					}
+				}
+				this.$request.baseRequest('admin.tourism.foodInfo', 'update', {
+					foodInfo: JSON.stringify(this.currectData)
+				}, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+							
+					uni.hideLoading()
+				}).then(res => {
+					uni.showToast({
+						icon: "success",
+						title: this.currectStatus==1?this.checked?'店铺已上架':'店铺已下架':this.checked1?'开启成功':'关闭成功',
+						duration: 2000
+					});
+					uni.setStorageSync('myCateringdustry',JSON.stringify(this.currectData))
+					this.isStatus = false
+				})
+			},
+			selectTime(){
+				this.show = true
+			},
+			confrim(e){
+				this.currectData.startDate=e.start
+				this.currectData.endDate=e.end
+				this.$request.baseRequest('admin.tourism.foodInfo', 'update', {
+					foodInfo: JSON.stringify(this.currectData)
+				}, failres => {
+					uni.showToast({
+						icon: "none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+							
+					uni.hideLoading()
+				}).then(res => {
+					uni.showToast({
+						icon: "success",
+						title: '修改营业时间成功',
+						duration: 2000
+					});
+					this.show = false
+					uni.setStorageSync('myCateringdustry',JSON.stringify(this.currectData))
+
+				})
+			},
+			cancel(){
+				this.show = false
+			}
+		}
+	}
+</script>
+
+<style lang='scss' scoped>
+.title{
+	padding:20rpx;
+	font-weight:600;
+}
+</style>

+ 22 - 0
uni_applet/pageA/enter/myCateringdustry/shopSetting/lookGroupBuying.vue

@@ -0,0 +1,22 @@
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 22 - 0
uni_applet/pageA/enter/myCateringdustry/shopSetting/saleroom.vue

@@ -0,0 +1,22 @@
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 22 - 0
uni_applet/pageA/enter/myHomestay/add.vue

@@ -0,0 +1,22 @@
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 22 - 0
uni_applet/pageA/enter/myHomestay/edit.vue

@@ -0,0 +1,22 @@
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 42 - 0
uni_applet/pageA/enter/myHomestay/index.vue

@@ -0,0 +1,42 @@
+<template>
+	<view class='content'>
+		<view class='wrap'>
+			<view></view>
+			<view>
+				
+			</view>
+		</view>
+		<view style='margin:20rpx;' class='flex  justify-space-between'>
+			<view class='merchants_button'>一键刷新</view>
+			<view @click='add' class='merchants_button'>添加民宿</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	var that
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		onLoad() {
+			that = this
+		},
+		onShow(){
+			
+		},
+		methods: {
+			add(){
+				uni.navigateTo({
+					url:'/pageA/enter/myHomestay/add'
+				})
+			}
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 22 - 0
uni_applet/pageA/enter/myHomestay/search.vue

@@ -0,0 +1,22 @@
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 3 - 3
uni_applet/pageA/find/createLifeService.vue

@@ -31,7 +31,7 @@
 					<u-input inputAlign='right' border='none' placeholder='输入详细地址,不超过15个字' v-model="form.detailedAddress" />
 				</u-form-item>
 				<u-form-item  labelWidth='80' labelPosition='top' label="业务描述">
-					<u--textarea v-model="form.serviceDescription" autoHeight placeholder="输入业务描述,0-200个字" ></u--textarea> 
+					<u--textarea  v-model="form.serviceDescription" autoHeight placeholder="输入业务描述,0-200个字" ></u--textarea> 
 				</u-form-item>
 				<view class='title'>以下信息为选填信息</view>
 				<u-form-item v-if='form.mainBody=="商铺"' labelWidth='160' labelPosition='left' label="联系人(仅平台可见)">
@@ -40,8 +40,8 @@
 				<u-form-item  v-if='form.mainBody=="个人"' labelWidth='160' labelPosition='left' label="姓名(仅平台可见)">
 					<u-input inputAlign='right' placeholder='输入姓名' border='none' v-model="form.realname" type="select" />
 				</u-form-item>
-				<u-form-item labelWidth='160' labelPosition='left' label="称(所有人可见)">
-					<u-input inputAlign='right' placeholder='输入称' border='none' v-model="form.sex" type="select" />
+				<u-form-item labelWidth='160' labelPosition='left' label="称(所有人可见)">
+					<u-input inputAlign='right' placeholder='输入称呼,如李先生' border='none' v-model="form.sex" type="select" />
 				</u-form-item>
 				<u-form-item labelWidth='160' labelPosition='left' label="联系电话(所有人可见)">
 					<u-input inputAlign='right' maxlength="15" type='number' placeholder='输入联系电话' border='none' v-model="form.phone"  />

+ 22 - 0
uni_applet/pageA/my/bill.vue

@@ -0,0 +1,22 @@
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 22 - 0
uni_applet/pageA/my/my.vue

@@ -0,0 +1,22 @@
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 98 - 0
uni_applet/pageA/notice/index.vue

@@ -0,0 +1,98 @@
+<template>
+	<view>
+			<view class='notice-wrap' v-for='item in noticeList'>
+				<view class="flex justify-space-between">
+					<view style='width:100px;margin:10rpx 0;' class='flex justify-space-between'>
+						<u--image :showLoading="true" src="/static/image/enter/news.png" width="52rpx" height="52rpx"></u--image>
+						<view>{{item.newsTitle}}</view>
+					</view>
+					
+					<view class='date'>{{parseTime(item.gmtCreate)}}</view>
+				</view>
+				<view class='content'>{{item.newsContent}}</view>
+			</view>
+		<!-- </mescroll-body> -->
+		<u-toast ref="uToast"></u-toast>
+	</view>
+</template>
+
+<script>
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	export default {
+		mixins: [MescrollMixin],
+		data() {
+			return {
+				noticeList:[],
+				unreadList:[]
+			};
+		},
+		onShow() {
+			this.getList()
+		},
+		
+		methods:{
+			getList(){
+				var that = this
+				uni.showLoading({
+						title: '数据加载中'
+					})
+				this.$request.baseRequest('admin.tourism.noticeMessageInfo', 'list',{
+					receiveId:uni.getStorageSync("userInfo").id,
+				}, failres => {
+					uni.showToast({
+						icon:"none",
+						title: failres.errmsg,
+						duration: 3000
+					});
+					uni.hideLoading()
+				}).then(res => {
+					let curPageLen = res.data.items.length;
+					let totalPage = res.data.total;
+					this.noticeList=res.data.items
+					if(this.noticeList.length>0){
+						var data=this.noticeList.filter((item)=>{return item.newsFlag==0})
+						this.unreadList=data
+						if(this.unreadList.length>0){
+							for(var i=0;i<this.unreadList.length;i++){
+								if(this.unreadList[i].newsFlag==0){
+									this.unreadList[i].newsFlag=1
+									this.$request.baseRequest('admin.tourism.noticeMessageInfo', 'update',{
+										noticeMessageInfo:JSON.stringify(this.unreadList[i]),
+									}, failres => {
+										uni.showToast({
+											icon:"none",
+											title: failres.errmsg,
+											duration: 3000
+										});
+										uni.hideLoading()
+									}).then(res => {})
+								}
+								
+							}
+							
+						}
+					}
+					
+					uni.hideLoading()
+				})
+			},
+		}
+		
+	}
+</script>
+
+<style lang="scss" scoped>
+.notice-wrap{
+	background:#fff;
+	padding:20rpx;
+	margin:10rpx;
+	border-radius:20rpx;
+}
+.date{
+	color:#CCCCCC;
+}
+.content{
+	font-size:26rpx;
+	color:#666;
+}
+</style>

+ 22 - 0
uni_applet/pageA/notice/noticedetail.vue

@@ -0,0 +1,22 @@
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 24 - 0
uni_applet/pageA/webview.vue

@@ -0,0 +1,24 @@
+<template>
+    <web-view :src="url"></web-view>
+</template>
+
+<script>
+	export default {
+        data() {
+            return {
+                url:""
+            }
+        },
+        onLoad(option) {
+            this.url = option.url;
+        },
+        methods: {
+        }
+    }
+</script>
+    
+
+
+<style>
+
+</style>

+ 261 - 14
uni_applet/pages.json

@@ -4,6 +4,13 @@
 	},
 	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
 		{
+			"path": "pages/accommodation/accommodation",
+			"style": {
+				"navigationBarTitleText": "住宿",
+				"enablePullDownRefresh": false
+			}
+
+		},{
 			"path": "pages/food/food",
 			"style": {
 				"navigationBarTitleText": "美食推荐",
@@ -12,14 +19,7 @@
 			}
 
 		},
-		{
-			"path": "pages/accommodation/accommodation",
-			"style": {
-				"navigationBarTitleText": "住宿",
-				"enablePullDownRefresh": false
-			}
-
-		},
+		
 		{
 			"path": "pages/my/my",
 			"style": {
@@ -84,7 +84,7 @@
 	"globalStyle": {
 		"navigationBarTextStyle": "black",
 		"navigationBarTitleText": "uni-app",
-		"navigationBarBackgroundColor": "#fbb612",
+		"navigationBarBackgroundColor": "#fff",
 		"backgroundColor": "#F8F8F8"
 	},
 	"uniIdRouter": {},
@@ -131,12 +131,259 @@
 		    ,{
                     "path" : "food/fondMap",
                     "style" :                                                                                    
-                {
-                    "navigationBarTitleText": "美食地图",
-                    "enablePullDownRefresh": false
-                }
+					{
+						"navigationBarTitleText": "美食地图",
+						"enablePullDownRefresh": false
+					}
                 
-                }
+                },
+				{
+				    "path" : "enter/cateringindustry",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "餐饮",
+				        "enablePullDownRefresh": false
+				    }
+				    
+				}
+				,{
+				    "path" : "enter/hotel",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "酒店",
+				        "enablePullDownRefresh": false
+				    }
+				    
+				}
+				,{
+				    "path" : "enter/homestay",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "民宿",
+				        "enablePullDownRefresh": false
+				    }
+				    
+				}
+				,{
+				    "path" : "webview",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "",
+						"enablePullDownRefresh": false
+					}
+				
+				}
+				,{
+				    "path" : "enter/myCateringdustry/index",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "餐饮",
+						"enablePullDownRefresh": false
+					}
+				
+				}
+				,{
+				    "path" : "enter/enter",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "入驻",
+						"enablePullDownRefresh": false,
+						"navigationStyle":"custom"
+					}
+				
+				}
+				,{
+				    "path" : "enter/myCateringdustry/addfood",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "添加菜品",
+						"enablePullDownRefresh": false
+					}
+				
+				}
+				,{
+				    "path" : "enter/myCateringdustry/addGroupBuying",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "添加团购",
+						"enablePullDownRefresh": false
+					}
+				
+				},
+				{
+				    "path" : "enter/myCateringdustry/addGroupBuyingNext",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "添加团购",
+						"enablePullDownRefresh": false
+					}
+				
+				}
+				,{
+				    "path" : "enter/myCateringdustry/shopSetting/index",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "设置",
+						"enablePullDownRefresh": false
+					}
+				
+				}
+				,{
+				    "path" : "enter/myCateringdustry/shopSetting/editShopInformation",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "店铺信息",
+						"enablePullDownRefresh": false
+					}
+				
+				}
+				,{
+				    "path" : "enter/myCateringdustry/shopSetting/editShopImage",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "店铺图片",
+						"enablePullDownRefresh": false
+					}
+				
+				}
+				,{
+				    "path" : "enter/myCateringdustry/shopSetting/editCertificate",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "证照",
+						"enablePullDownRefresh": false
+					}
+				
+				}
+				,{
+				    "path" : "enter/myCateringdustry/shopSetting/editFoodClassify",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "菜品分类",
+						"enablePullDownRefresh": false
+					}
+				
+				}
+				,{
+				    "path" : "enter/myCateringdustry/shopSetting/foodInfomation",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "菜品",
+						"enablePullDownRefresh": false
+					}
+				
+				}
+				,{
+				    "path" : "enter/myCateringdustry/shopSetting/groupBuying",
+				    "style" :                                                                                    
+				{
+				    "navigationBarTitleText": "团购",
+				    "enablePullDownRefresh": false
+				}
+				
+				}
+				,{
+				    "path" : "enter/myCateringdustry/shopSetting/lookGroupBuying",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "团购详情",
+						"enablePullDownRefresh": false
+					}
+				
+				}
+				,{
+				    "path" : "enter/myCateringdustry/shopSetting/saleroom",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "销售记录",
+						"enablePullDownRefresh": false
+					}
+				
+				}
+				,{
+				    "path" : "enter/myHomestay/index",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "民宿",
+						"enablePullDownRefresh": false
+					}
+				
+				}
+				,{
+				    "path" : "enter/myHomestay/add",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "民宿",
+						"enablePullDownRefresh": false
+					}
+				
+				}
+				,{
+				    "path" : "enter/myHomestay/edit",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "民宿",
+						"enablePullDownRefresh": false
+					}
+				
+				}
+				,{
+				    "path" : "enter/myHomestay/search",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "搜索",
+						"enablePullDownRefresh": false
+					}
+				
+				}
+				,{
+				    "path" : "notice/noticedetail",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "通知详情",
+						"enablePullDownRefresh": false
+					}
+				
+				},
+				{
+				    "path" : "notice/index",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "通知",
+						"enablePullDownRefresh": false,
+						"navigationStyle":"custom"
+					}
+				
+				}
+				,{
+				    "path" : "my/bill",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "账单",
+						"enablePullDownRefresh": false
+					}
+				
+				}
+				,{
+				    "path" : "my/my",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "我的",
+						"enablePullDownRefresh": false,
+						"navigationStyle":"custom"
+					}
+				
+				}
+				,{
+				    "path" : "enter/myCateringdustry/edit",
+				    "style" :                                                                                    
+					{
+						"navigationBarTitleText": "店铺信息",
+						"enablePullDownRefresh": false
+					}
+				
+				}
+				
             ]
 	}],
 	"preloadRule": {

+ 111 - 73
uni_applet/pages/find/find.vue

@@ -2,7 +2,7 @@
 	<view>
 		<view class="flex content1">
 			<view @click='placeSelect' class='address flex'>
-			<view class='detailedAddress'>{{detailedAddress}}</view>
+			<view class='detailedAddress'>{{detailedAddress1}}</view>
 			<view class='iconfont applet-xiala'></view>
 			</view>
 			<view class=" search-wrap">
@@ -19,27 +19,28 @@
 				</view>
 			</view>
 		</view>
-		<view style='margin-top:112rpx;'>
-			<u-swiper :list="fileList"
-			autoplay
-			:height='height'
-			imgMode='aspectFill'
-			radius='0'
-			:circular="true"
-			@change="e => current = e.current" @click="click">
-				<view slot="indicator" class="indicator">
-					<view
-			            class="indicator__dot"
-			            v-for="(item, index) in fileList"
-			            :key="index"
-			            :class="[index === current && 'indicator__dot--active']">
-			        </view>
-				</view>
-			</u-swiper>
-		</view>
+		
 		<view>
 			<mescroll-uni :up="upOption" :down="downOption" ref="mescrollRef" @init="mescrollInit"
-				@up="upCallback" @down="downCallback" height="960">
+				@up="upCallback" @down="downCallback" height="1200">
+				<view style='margin-top:106rpx;'>
+					<u-swiper :list="fileList"
+					autoplay
+					:height='height'
+					imgMode='aspectFill'
+					radius='0'
+					:circular="true"
+					@change="e => current = e.current" @click="click">
+						<view slot="indicator" class="indicator">
+							<view
+					            class="indicator__dot"
+					            v-for="(item, index) in fileList"
+					            :key="index"
+					            :class="[index === current && 'indicator__dot--active']">
+					        </view>
+						</view>
+					</u-swiper>
+				</view>
 				<view class='findItem' v-for='item in findList'>
 					<view style='align-items: flex-start;' class='flex'>
 						<view class="left">
@@ -63,8 +64,8 @@
 							<view class='iconfont applet-dizhi'></view>
 							<view>{{item.province}}{{item.city}}{{item.area}}</view>
 						</view>
-						<view>{{item.distance}}
-						<text style='font-weight:600;'>km</text></view>
+						<view>{{item.distance1>1000?item.distance:item.distance1}}
+						<text style='font-weight:600;'>{{item.distance1>1000?'km':'m'}}</text></view>
 					</view>
 				</view>
 			</mescroll-uni>
@@ -78,10 +79,10 @@
 
 <script>
 	var that;
-	var QQMapWX = require('@/js_sdk/qqmap-wx-jssdk.min.js');
-	 var qqmapsdk = new QQMapWX({
-	        key: 'HQ6BZ-RMALQ-TGF5H-BXJQB-UFYN3-Q5BYM'
-	    });
+	var GDMapWX = require('@/js_sdk/js-amap/amap-wx.130.js');
+	import {
+		authorizedLocation
+	} from '@/util/util.js'
 	import MoteLinesDivide from "@/components/text-over-flow/text-over-flow.vue"
 	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
 	export default {
@@ -99,11 +100,12 @@
 				handleList:[],
 				height:'',
 				width:'',
-				longitude:uni.getStorageSync("findlongitude")?uni.getStorageSync("findlongitude"):"122.084565",
-				latitude:uni.getStorageSync("findlatitude")?uni.getStorageSync("findlatitude"):'40.220547',
+				longitude:"122.084565",
+				latitude:'40.220547',
 				curPageLen:0,
 				totalPage:0,
-				detailedAddress:uni.getStorageSync("detailedAddress")?uni.getStorageSync("detailedAddress"):'山海广场',
+				detailedAddress:'正在定位...',
+				detailedAddress1:'',
 				downOption: {
 					auto: false,
 					textColor: '#bbb'
@@ -121,23 +123,15 @@
 		},
 		onLoad() {
 			that = this
-		this.getList()
+			this.getList()
 		// this.mescroll.resetUpScroll();
 		},
 		onShow(){
-			this.height = uni.getSystemInfoSync().windowWidth/2;
+			this.height = uni.getSystemInfoSync().windowWidth/2.35;
 			
 			this.width = uni.getSystemInfoSync().windowWidth;
-			console.log(this.height,this.width,11111111)
-			
-			
-			if(!this.detailedAddress){
-				// this.placeSelect()
-			}else{
-				that.upCallback({
-					num:1,
-					size:10
-				})
+			if(this.detailedAddress=='正在定位...'){
+				this.isdingwei()
 			}
 		},
 		methods: {
@@ -159,9 +153,10 @@
 						uni.setStorageSync("findlatitude",res.latitude)
 						uni.setStorageSync("findlongitude",res.longitude)
 						let _address = that.$helper.formatLocation(res.address)
-						that.detailedAddress = _address.Village
-						console.log(that.detailedAddress)
-						uni.setStorageSync("detailedAddress",_address.Village)
+						that.detailedAddress = res.name?res.name:_address.Village
+						that.detailedAddress1 = that.detailedAddress.length>4 ? that.detailedAddress.slice(0,4)+'...' : that.detailedAddress
+						console.log(that.detailedAddress,that.detailedAddress1)
+						uni.setStorageSync("detailedAddress",that.detailedAddress)
 						that.$forceUpdate()
 						that.upCallback({
 							num:1,
@@ -170,16 +165,61 @@
 					}
 				});
 			},
+			isdingwei() {
+				authorizedLocation().then(res => {
+					let _obj = {}
+					if (res == '取消授权') {
+						//获取上一次,无上一次山海广场
+						let _place = uni.getStorageSync("LocationPlace")
+						if (_place && _place.latitude) {
+							_obj = {
+								latitude: _place.latitude,
+								longitude: _place.longitude
+							}
+						} else {
+							_obj = {
+								latitude: 40.22086204872,
+								longitude: 122.08338497727
+							}
+						}
+			
+					} else {
+						_obj = {
+							latitude: res.latitude,
+							longitude: res.longitude
+						}
+					}
+					this.longitude = _obj.longitude
+					this.latitude = _obj.latitude
+					var amapPluginInstance = new GDMapWX.AMapWX({	
+									key: '6bafe91754a563ff2b7c02542c1ef4e8'
+								});
+							   amapPluginInstance.getRegeo({
+							      success: function(res){
+									  console.log(res)
+									  		that.detailedAddress = res[0].desc
+											that.detailedAddress1 = that.detailedAddress.length>4 ? that.detailedAddress.slice(0,4)+'...' : that.detailedAddress
+											console.log(that.detailedAddress,that.detailedAddress1)
+									  		that.mescroll.resetUpScroll()
+							        //成功回调
+							      },
+							      fail: function(info){
+							        //失败回调
+							        console.log(info)
+							      }
+							    })
+				})
+			},
 			mescrollInit(mescroll) {
 				this.mescroll = mescroll;
 			},
 			downCallback() {
-				if (uni.getStorageSync("userInfo").phone) {
+				// if (uni.getStorageSync("userInfo").phone) {
 					this.mescroll.resetUpScroll()
-				} else {
-					that.mescroll.endBySize(0, 0)
-					this.showAuthorizePhone = true
-				}
+				// } else {
+				// 	that.mescroll.endBySize(0, 0)
+				// 	this.showAuthorizePhone = true
+				// }
 			
 			},
 			getDistance(latitude,longitude){
@@ -222,31 +262,25 @@
 						})
 						
 						var finddata=await that.getfindList(page)
-						console.log(finddata,0)
 						if (page.num == 1) that.findList = [],that.handleList = [];
 						that.curPageLen = finddata.data.items.length;
 						that.handleList = finddata.data.items
 						that.totalPage = finddata.data.total;
-						for(var i=0;i<that.handleList.length;i++){
-							console.log(111)
-							that.handleList[i].latitude=that.handleList[i].location.split(',')[0]
-							that.handleList[i].longitude=that.handleList[i].location.split(',')[1]
-							var data=await that.getDistance(that.handleList[i].latitude,that.handleList[i].longitude) 
-							console.log(222)
-							that.handleList[i].distance=(data.distance/1000).toFixed(2)
-							console.log(data,i==that.handleList.length-1,111111111111)
-							if(i==that.handleList.length-1){
-								setTimeout(()=>{
-									console.log(that.handleList)
-									that.findList = that.handleList
-									that.loading = false
-									that.$nextTick(() => {
-										that.mescroll.endBySize(that.curPageLen, that.totalPage)
-									});	
-									uni.hideLoading()
-								},100)
+						if(that.handleList.length > 0){
+							for(var i=0;i<that.handleList.length;i++){
+								that.handleList[i].latitude=that.handleList[i].location.split(',')[0]
+								that.handleList[i].longitude=that.handleList[i].location.split(',')[1]
+								that.handleList[i].distance1 = JSON.parse(JSON.stringify(that.handleList[i].distance))
+								that.handleList[i].distance=(that.handleList[i].distance/1000).toFixed(2)
+								console.log(that.handleList)
+								that.findList = that.handleList
+								that.loading = false
 							}
 						}
+						uni.hideLoading()
+						that.$nextTick(() => {
+							that.mescroll.endBySize(that.curPageLen, that.totalPage)
+						});	
 			
 					// }
 			},
@@ -275,6 +309,8 @@
 		 		that.$request.baseRequest('admin.tourism.productManagement', 'list', {
 		 			page: page.num,
 		 			limit: page.size,
+					userLongitude:that.longitude,
+					userLatitude:that.latitude,
 		 			// searchContent: this.searchVal,
 		 			// classify: this.typeName
 		 		}, failres => {
@@ -301,7 +337,7 @@
 		top:0;
 		left:0;
 		padding: 20rpx;
-		background-color: #fbb612;
+		background-color: #fff;
 		z-index:99;
 		width:95vw;
 		.search {
@@ -332,13 +368,14 @@
 		}
 	}
 	.search-wrap{
-		width:78%;
-		background: #ffff;
-		border: 1px solid #f9d27d;
+		width:76%;
+		background: #f9f9f9;
+		// border: 1px solid #f9d27d;
 		border-radius: 50rpx;
 	}
 	.address{
-		width:22%;
+		width:24%;
+		margin-right:20rpx;
 	}
 	.findItem{
 		background:#fff;
@@ -356,6 +393,7 @@
 			font-size:36rpx;
 			color:#333;
 			margin-left:10rpx;
+			overflow-x: scroll;
 		}
 		.description{
 			color:#666;

+ 52 - 3
uni_applet/pages/my/my.vue

@@ -1,8 +1,54 @@
 <template>
 	<view class="content">
-		<image class="logo" src="/static/logo.png"></image>
-		<view class="text-area">
-			<text class="title">{{title}}</text>
+		<view class="wrap">
+			<view></view>
+			<view>
+				
+			</view>
+			<view style='width:100%;'>
+				<u-cell-group>
+					<u-cell
+					    title="收货地址"
+					    isLink
+					    url="/pages/componentsB/tag/tag"
+					></u-cell>
+					<u-cell
+					    title="我的发布"
+					    isLink
+					    url="/pages/componentsB/badge/badge"
+					></u-cell>
+					<u-cell
+					    title="房源发布"
+					    isLink
+					    url="/pages/componentsB/badge/badge"
+					></u-cell>
+					<u-cell
+					    title="商家入驻"
+					    isLink
+					    url="/pages/componentsB/badge/badge"
+					></u-cell>
+					<u-cell
+					    title="业务合作"
+					    isLink
+					    url="/pages/componentsB/badge/badge"
+					></u-cell>
+					<u-cell
+					    title="广告推广"
+					    isLink
+					    url="/pages/componentsB/badge/badge"
+					></u-cell>
+					<u-cell
+					    title="联系客服"
+					    isLink
+					    url="/pages/componentsB/badge/badge"
+					></u-cell>
+					<u-cell
+					    title="去商家端"
+					    isLink
+					    url="/pageA/enter/enter"
+					></u-cell>
+				</u-cell-group>
+			</view>
 		</view>
 	</view>
 </template>
@@ -49,4 +95,7 @@
 		font-size: 36rpx;
 		color: #8f8f94;
 	}
+	.wrap{
+		width:92vw;
+	}
 </style>

BIN
uni_applet/static/image/enter/camera.png


BIN
uni_applet/static/image/enter/jingyingxukezheng.png


BIN
uni_applet/static/image/enter/news.png


BIN
uni_applet/static/image/enter/yingyezhizhao.png


BIN
uni_applet/static/image/find/camera.png


BIN
uni_applet/static/image/nav-icon/antOutline-team Copy.png


BIN
uni_applet/static/image/nav-icon/antOutline-team.png


+ 0 - 0
uni_merchants_enter/static/image/nav-icon/antOutline-user Copy.png → uni_applet/static/image/nav-icon/antOutline-user1 Copy.png


+ 0 - 0
uni_merchants_enter/static/image/nav-icon/antOutline-user.png → uni_applet/static/image/nav-icon/antOutline-user1.png


BIN
uni_applet/static/image/nav-icon/md-notifications_none Copy.png


BIN
uni_applet/static/image/nav-icon/md-notifications_none.png


BIN
uni_applet/static/image/yjt.png


+ 35 - 0
uni_applet/style/mercharts_icon/iconfont.css

@@ -0,0 +1,35 @@
+@font-face {
+  font-family: "iconfont_no"; /* Project id 4108869 */
+  src: url('//at.alicdn.com/t/c/font_4108869_3enqife4n1a.woff2?t=1686805807796') format('woff2'),
+       url('//at.alicdn.com/t/c/font_4108869_3enqife4n1a.woff?t=1686805807796') format('woff'),
+       url('//at.alicdn.com/t/c/font_4108869_3enqife4n1a.ttf?t=1686805807796') format('truetype'),
+       url('//at.alicdn.com/t/c/font_4108869_3enqife4n1a.svg?t=1686805807796#iconfont_no') format('svg');
+}
+
+.iconfont_no {
+  font-family: "iconfont_no" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.icon_merchants_enterzhankai:before {
+  content: "\e633";
+}
+
+.icon_merchants_entershouqi:before {
+  content: "\e634";
+}
+
+.icon_merchants_enterweigouxuan:before {
+  content: "\e63e";
+}
+
+.icon_merchants_entergouxuan:before {
+  content: "\e615";
+}
+
+.icon_merchants_enterjianshao:before {
+  content: "\e8b1";
+}

+ 60 - 0
uni_applet/style/mercharts_icon/iconfont_colors.css

@@ -0,0 +1,60 @@
+@font-face {
+  font-family: "iconfont"; /* Project id 4107010 */
+  /* Color fonts */
+  src: 
+       url('//at.alicdn.com/t/c/font_4107010_ja6xtpo7y3t.woff2?t=1686036529797') format('woff2'),
+       url('//at.alicdn.com/t/c/font_4107010_ja6xtpo7y3t.woff?t=1686036529797') format('woff'),
+       url('//at.alicdn.com/t/c/font_4107010_ja6xtpo7y3t.ttf?t=1686036529797') format('truetype');
+}
+
+.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.merchants-jingmeishuiguo:before {
+  content: "\e628";
+}
+
+.merchants-1_waimai-17:before {
+  content: "\f563";
+}
+
+.merchants-1_dache-18:before {
+  content: "\f566";
+}
+
+.merchants-1_gouwu-46:before {
+  content: "\f57e";
+}
+
+.merchants-dachexinxi:before {
+  content: "\e621";
+}
+
+.merchants-dingweixinxi:before {
+  content: "\e622";
+}
+
+.merchants-gouwushangcheng:before {
+  content: "\e625";
+}
+
+.merchants-kuaidiwaimai:before {
+  content: "\e62d";
+}
+
+.merchants-zufang:before {
+  content: "\e63b";
+}
+
+.merchants-1_canyin-35:before {
+  content: "\f57a";
+}
+
+.merchants-jiudian-38:before {
+  content: "\f580";
+}

+ 8 - 0
uni_applet/uni_modules/lxm-fold-link/luyj-grid-link/changelog.md

@@ -0,0 +1,8 @@
+## 1.0.3(2021-08-07)
+重新上传说明
+## 1.0.2(2021-08-07)
+完善宫格的说明,添加全部/折叠方法
+## 1.0.1(2021-08-05)
+简单说明,并上传示例项目。
+## 1.0.0(2021-07-29)
+初始化,暂无说明

+ 102 - 0
uni_applet/uni_modules/lxm-fold-link/luyj-grid-link/components/luyj-grid-link/luyj-grid-link.vue

@@ -0,0 +1,102 @@
+<template>
+	<view>
+		<view v-for="(item , i) in tabber_list" :key="i">
+			<!-- 标题 -->
+			<view v-if="item.iconsList.length > 0 && item.title_show" class="cu-bar bg-white solid-top ">
+				<view class="action">
+					<!-- <text class="cuIcon-title " :class="'text-'+item.color"></text> -->{{ item.title}}
+				</view>
+			</view>
+			<!-- 宫格 -->
+			<view v-if="item.iconsList.length > 0" class="cu-list grid no-border solid-bottom "
+			:class="'col-' + item.colNumber  +  ' ' + item.bgColor"
+				 :data-cur="item.cur">
+				<!-- 总宫格数小于等于item.colNumber*2 || 总宫格大于item.colNumber*2 , index < item.colNumber*2 -1-->
+				<view class="cu-item " v-for="(icon,index) in item.iconsList" :key="index"
+					v-if="(item.iconsList.length <= item.colNumber*1) || (item.iconsList.length > item.colNumber*1 && index < item.colNumber*1 -1)"
+					@tap="navigateTo" :data-url="icon.url" :data-exec="icon.exec">
+					<view class='iconfont' :class="['merchants-' + icon.cuIcon,'text-' + icon.color]">
+					</view>
+					<text>{{icon.name}}</text>
+				</view>
+
+				<!-- 总宫格大于item.colNumber*2 ,index > item.colNumber*2-1 -->
+				<view class="cu-item " v-for="(icon,index) in item.iconsList" :key="index"
+				v-if="item.iconsList.length > item.colNumber*1 && index >= item.colNumber*1 -1 && item.showAll"
+					@tap="navigateTo" :data-url="icon.url">
+					<view class='iconfont' :class="['merchants-' + icon.cuIcon,'text-' + icon.color]">
+					</view>
+					<text>{{icon.name}}</text>
+				</view>
+				<!-- 全部或折叠按钮 -->
+				<view v-if="item.iconsList.length >item.colNumber*1" class="cu-item" :data-cur="item.cur"
+					@click="showAllGrid">
+					<view class=" text-blue" :class="item.showAll ? 'cuIcon-triangleupfill' : 'cuIcon-triangledownfill'">
+					</view>
+					<text>{{ item.showAll ? '收起' :'展开' }}</text>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+	/**
+	 * 宫格的展示
+	 * @description  依据ColorUI的宫格样式。只要以数组形式传入宫格
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=5746
+	 * @property {Array}  list 列表,用于传递数据(传递每一行宫格对象)
+	 * @event {Function()} gridExc 若对象没有Url属性,点击宫格时传出该宫格的值
+	 */
+	export default {
+		name: 'luyj-grid-link',
+		props:{
+			list: {
+				type : Array,
+				default: new Array
+			}
+		},
+		data(){
+			return{
+				tabber_list : this.list,		// 列表 , 由于参数不可改变值
+			}
+		},
+		created:function(){
+			
+		},
+		methods:{
+			/** 连接到页或执行方法
+			 * @param {Object} e
+			 */
+			navigateTo(e) {
+				var url = e.currentTarget.dataset.url; // 连接的页面
+				if (url != undefined) {
+					// 跳转到页面
+					uni.navigateTo({
+						url: url
+					});
+				} else {
+					var exec = e.currentTarget.dataset.exec;
+					this.$emit("gridExc" ,e);			// 点击某一宫格时执行方法
+				}
+			},
+			/** 展开或折叠当前宫格
+			 * @param {Object} e
+			 */
+			showAllGrid(e) {
+				var cur_grid = e.currentTarget.dataset.cur;
+				// 获取当前列
+				var tabber = this.tabber_list.find(function(item) {
+					return item.cur == cur_grid;
+				})
+				if (tabber != undefined) {
+					tabber.showAll = !tabber.showAll;
+				}
+			},
+		}
+	}
+</script>
+<style scoped>
+.iconfont{
+	font-size:100rpx;
+}
+</style>

+ 175 - 0
uni_applet/uni_modules/lxm-fold-link/luyj-grid-link/readme.md

@@ -0,0 +1,175 @@
+# luyj-grid-link
+> **组件名:luyj-grid-link**
+> 代码块: `luyj-grid-link`
+
+### 说明
+由于是基于[ColorUI-uniAPP](https://ext.dcloud.net.cn/plugin?id=239)模板,列表下的宫格。为了更专注于页面的数据,我将宫格的代码打包成插件形式。
+
+![alt 宫格](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-c07243ab-98a3-4f90-9b4d-2fa60aba2ee9/38647539-c303-4451-a9e3-68ed7abeaabc.png)
+基于Color UI 的宫格的主要功能包括:
+* 按组显示宫格信息
+* 每组可以选择标题是否展示、背景色
+* 超过两行,自动设置折叠/展开的形式。点击:**展开** 或**折叠**按钮显示宫格内容。
+![alt 宫格折叠](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-c07243ab-98a3-4f90-9b4d-2fa60aba2ee9/7576e49f-b5e0-4e4e-81f8-dc2cd0942e83.png)
+
+![alt 宫格展开](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-c07243ab-98a3-4f90-9b4d-2fa60aba2ee9/6a7ec0a3-4d42-49fb-97cf-42d31fd08d0a.png)
+### 安装方式
+
+* 本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。
+* 本组件的样式基于ColorUI 。所以,若要使用先依照官网下载并下源码解压,复制根目录的 /colorui 文件夹到你的根目录。然后在App.vue 引入关键Css `main.css` `icon.css`。
+
+``` html
+<style>
+    @import "colorui/main.css";
+    @import "colorui/icon.css";
+    @import "app.css"; /* 你的项目css */
+    ....
+</style>
+```
+
+### 基本用法
+
+在 ``template`` 中的使用
+
+```html
+	<luyj-grid-link :list="list" @gridExc="clickGrid"></luyj-grid-link>
+```
+
+这里 `list`对应列表数据;@gridExc,对应没有链接属性时,宫格的执行方法,其中`e.detail.dataset.exec`对应列表中宫格的**`exec`**属性。这里引用了数据:
+
+```javascript
+list: [{
+			title: '成员管理',
+			cur: 'applications',
+			bgColor: 'bg-blue light', // 背景颜色
+			color: 'blue',
+			title_show: false,
+			showAll: false,
+			colNumber: 3, // 显示的列数
+			iconsList: [{
+					cuIcon: 'group_fill',
+					color: 'blue',
+					name: '组织机构',
+					url: '/pages/toUrl/toUrl'
+				},
+				{
+					cuIcon: 'friendadd',
+					color: 'blue',
+					name: '无URL',
+					exec : 'add'
+				},
+				{
+					cuIcon: 'friendaddfill',
+					color: 'blue',
+					name: '无Url',
+					exec: 'invite'
+				},
+			]
+		},
+		{
+			title: '基础数据',
+			cur: 'basic',
+			bgColor: '', // 背景颜色
+			color: 'blue',
+			title_show: true,
+			showAll: false,
+			colNumber: 5, // 显示的列数
+			iconsList: [{
+					cuIcon: 'text',
+					color: 'yellow',
+					name: '基本信息',
+					url: '/pages/toUrl/toUrl'
+				},
+				{
+					cuIcon: 'peoplelist',
+					color: 'blue',
+					name: '员工管理',
+					url: '/pages/toUrl/toUrl'
+				},
+
+			]
+		}, {
+			title: '产品目录',
+			cur: 'goods',
+			bgColor: '', // 背景颜色
+			color: 'blue',
+			title_show: true,
+			showAll: false,
+			colNumber: 5, // 显示的列数
+			iconsList: [{
+					cuIcon: 'list',
+					color: 'yellow',
+					name: '分类',
+					url: '/pages/toUrl/toUrl'
+				},
+				{
+					cuIcon: 'goodsnew',
+					color: 'blue',
+					name: '型号',
+					url: '/pages/toUrl/toUrl'
+				},
+				{
+					cuIcon: 'shake',
+					color: 'olive',
+					name: '设备',
+					url: '/pages/toUrl/toUrl'
+				},
+				{
+					cuIcon: 'questionfill',
+					color: 'yellow',
+					name: '常见问题',
+					url: '/pages/toUrl/toUrl'
+				}
+			]
+		},
+		{
+			title: '权限管理',
+			cur: 'goods',
+			bgColor: '', // 背景颜色
+			color: 'blue',
+			title_show: true,
+			showAll: false,
+			colNumber: 5, // 显示的列数
+			iconsList: [{
+				cuIcon: 'goodsfill',
+				color: 'red',
+				name: '权限设置',
+				url: '/pages/toUrl/toUrl'
+			}]
+		}
+	], 
+```
+
+### 属性说明
+
+|属性名					|类型			|默认值		|说明																
+|:-:					|:-:			|:-:		|:-:																
+| list					|Arrary			|[]			|宫格组,其中里面的每一组对象表示每一组宫格的展示
+
+#### list 内对象的参数说明
+
+|属性名					|类型			|是否必填		|说明
+|:-:					|:-:			|:-:			|:-:
+|title					|String			|是				|标题
+|cur					|String			|是				|当前宫格组的名称(每组不能重名)
+|bgColor				|String			|是				|宫格的背景颜,(可以为''),参考Color UI的样式
+|color					|String			|是				|标题字体的颜色
+|title_show				|Boolean		|是				|是否显示标题
+|showAll				|Boolean		|是				|是否默认展开所有宫格
+|colNumber				|Number			|是				|每行展示宫格的列数
+|iconsList				|Array			|是				|宫格的图标列表
+
+##### iconsList 内对象的参数说明
+
+|属性名					|类型			|是否必填		|说明
+|:-:					|:-:			|:-:			|:-:
+|cuIcon					|String			|是				|图标名称,参考ColorUI库
+|color					|String			|是				|宫格颜色
+|name					|String			|是				|名称
+|url					|String			|否				|宫格默认的跳转路径
+|exec					|String			|否				|存储参数(无Url时),宫格的参数。点击宫格是,@gridExc传递参数
+
+### 事件说明
+| 事件名		| 说明		|	返回参数 
+| :-:			| :-:		| :-:	
+|@gridExc		| 宫格无跳转路径时,返回参数,用于区分宫格,执行不同操作			| value= {e.detail.dataset.exec}

+ 0 - 0
uni_applet/uni_modules/lxm-fold-link/lxm-fold-grid/changelog.md


+ 166 - 0
uni_applet/uni_modules/lxm-fold-link/lxm-fold-grid/pages/lxm-fold-grid/lxm-fold-grid.vue

@@ -0,0 +1,166 @@
+<template>
+	<view>
+		<view class="cu-bar bg-transparent">
+			<view class="action">
+				<text class="cuIcon-back text-gray"></text>
+			</view>
+			<view class="content text-bold">
+
+			</view>
+			<view class="action">
+				<text class="cuIcon-cardboardfill text-grey"></text>
+				<text class="cuIcon-add text-red"></text>发布
+			</view>
+		</view>
+		<view  class="cu-bar bg-transparent search">
+			<view  class="cu-avatar round "
+				style="background-image:url(https://ossweb-img.qq.com/images/lol/web201310/skin/big91012.jpg);"></view>
+			<view class="text-left padding">
+				在XX创作的第1274天
+			</view>
+			<view class="action">
+				<view class="padding-xs">
+					<view class='cu-tag round light bg-red'>实名认证</view>
+				</view>
+			</view>
+		</view>
+		<luyj-grid-link :list="list" @gridExc="clickGrid"></luyj-grid-link>
+		<view class="tower-swiper" @touchmove="TowerMove" @touchstart="TowerStart" @touchend="TowerEnd">
+			<view class="tower-item" :class="item.zIndex==1?'none':''" v-for="(item,index) in swiperList" :key="index"
+				:style="[{'--index': item.zIndex,'--left':item.mLeft}]" :data-direction="direction">
+				<view class="swiper-item">
+					<image :src="item.url" mode="aspectFill" v-if="item.type=='image'"></image>
+
+				</view>
+			</view>
+		</view>
+		<scroll-view scroll-x class="bg-green nav text-center">
+			<view class="cu-item" :class="0==TabCur?'text-white cur':''" @tap="tabSelect" data-id="0">
+				<text class="cuIcon-camerafill"></text> 数码
+			</view>
+			<view class="cu-item" :class="1==TabCur?'text-white cur':''" @tap="tabSelect" data-id="1">
+				<text class="cuIcon-upstagefill"></text> 排行榜
+			</view>
+			<view class="cu-item" :class="2==TabCur?'text-white cur':''" @tap="tabSelect" data-id="2">
+				<text class="cuIcon-clothesfill"></text> 皮肤
+			</view>
+		</scroll-view>
+	</view>
+</template>
+<script>
+	import data from '@/common/data/data.js'; // 数据
+	export default {
+		data() {
+			return {
+				TabCur: 0,
+				scrollLeft: 0,
+				list: data.current_list,
+				cardCur: 0,
+				swiperList: [{
+					id: 0,
+					type: 'image',
+					url: 'https://ossweb-img.qq.com/images/lol/web201310/skin/big84000.jpg'
+				}, {
+					id: 1,
+					type: 'image',
+					url: 'https://ossweb-img.qq.com/images/lol/web201310/skin/big37006.jpg',
+				}, {
+					id: 2,
+					type: 'image',
+					url: 'https://ossweb-img.qq.com/images/lol/web201310/skin/big39000.jpg'
+				}, {
+					id: 3,
+					type: 'image',
+					url: 'https://ossweb-img.qq.com/images/lol/web201310/skin/big10001.jpg'
+				}, {
+					id: 4,
+					type: 'image',
+					url: 'https://ossweb-img.qq.com/images/lol/web201310/skin/big25011.jpg'
+				}, {
+					id: 5,
+					type: 'image',
+					url: 'https://ossweb-img.qq.com/images/lol/web201310/skin/big21016.jpg'
+				}, {
+					id: 6,
+					type: 'image',
+					url: 'https://ossweb-img.qq.com/images/lol/web201310/skin/big99008.jpg'
+				}],
+				dotStyle: false,
+				towerStart: 0,
+				direction: ''
+			}
+		},
+		onLoad() {
+            this.TowerSwiper('swiperList');
+			// 初始化towerSwiper 传已有的数组名即可
+		},
+		methods: {
+			tabSelect(e) {
+				this.TabCur = e.currentTarget.dataset.id;
+				this.scrollLeft = (e.currentTarget.dataset.id - 1) * 60
+			},
+			DotStyle(e) {
+				this.dotStyle = e.detail.value
+			},
+			// cardSwiper
+			cardSwiper(e) {
+				this.cardCur = e.detail.current
+			},
+			// towerSwiper
+			// 初始化towerSwiper
+			TowerSwiper(name) {
+				let list = this[name];
+				for (let i = 0; i < list.length; i++) {
+					list[i].zIndex = parseInt(list.length / 2) + 1 - Math.abs(i - parseInt(list.length / 2))
+					list[i].mLeft = i - parseInt(list.length / 2)
+				}
+				this.swiperList = list
+			},
+		
+			// towerSwiper触摸开始
+			TowerStart(e) {
+				this.towerStart = e.touches[0].pageX
+			},
+		
+			// towerSwiper计算方向
+			TowerMove(e) {
+				this.direction = e.touches[0].pageX - this.towerStart > 0 ? 'right' : 'left'
+			},
+		
+			// towerSwiper计算滚动
+			TowerEnd(e) {
+				let direction = this.direction;
+				let list = this.swiperList;
+				if (direction == 'right') {
+					let mLeft = list[0].mLeft;
+					let zIndex = list[0].zIndex;
+					for (let i = 1; i < this.swiperList.length; i++) {
+						this.swiperList[i - 1].mLeft = this.swiperList[i].mLeft
+						this.swiperList[i - 1].zIndex = this.swiperList[i].zIndex
+					}
+					this.swiperList[list.length - 1].mLeft = mLeft;
+					this.swiperList[list.length - 1].zIndex = zIndex;
+				} else {
+					let mLeft = list[list.length - 1].mLeft;
+					let zIndex = list[list.length - 1].zIndex;
+					for (let i = this.swiperList.length - 1; i > 0; i--) {
+						this.swiperList[i].mLeft = this.swiperList[i - 1].mLeft
+						this.swiperList[i].zIndex = this.swiperList[i - 1].zIndex
+					}
+					this.swiperList[0].mLeft = mLeft;
+					this.swiperList[0].zIndex = zIndex;
+				}
+				this.direction = ""
+				this.swiperList = this.swiperList
+			},
+		}
+	}
+</script>
+
+<style>
+	.tower-swiper .tower-item {
+		transform: scale(calc(0.5 + var(--index) / 10));
+		margin-left: calc(var(--left) * 100upx - 150upx);
+		z-index: var(--index);
+	}
+</style>

+ 21 - 0
uni_applet/uni_modules/lxm-fold-link/lxm-fold-grid/pages/toUrl/toUrl.vue

@@ -0,0 +1,21 @@
+<template>
+	<view>
+		<view>跳转到的新页面</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 173 - 0
uni_applet/uni_modules/lxm-fold-link/lxm-fold-grid/readme.md

@@ -0,0 +1,173 @@
+# lxm-fold-grid是一个全平台前端页面模板,一般用来做个人中心页面模板,也可以做其他页面模板。宫格折叠收起展开+堆叠图片轮播+操作条+头像+胶囊按钮+图标带文字选项卡
+> **组件名:lxm-fold-grid**
+> 代码块: `lxm-fold-grid`
+
+### 说明
+
+基于Color UI 的宫格,本模板引用插件luyj-grid-link的主要功能包括:
+* 按组显示宫格信息。
+* 每组可以选择标题是否展示、可以选择背景色。
+* 超过一行,自动设置折叠/展开的形式。点击:**展开** 或**折叠**按钮显示宫格内容。
+* 也可以修改为超过两行自动设置折叠/展开的形式。这个可以修改“luyj-grid-link.vue”文件里的参数。item.colNumber*1改为:item.colNumber*2。@/common/data/data.js,列表iconsList里图标超过9个,比如12个左右。
+
+### 安装方式
+
+* 本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。
+* 本组件的样式基于ColorUI 。所以,若要使用先依照官网下载并下源码解压,复制根目录的 /colorui 文件夹到你的根目录。然后在App.vue 引入关键Css `main.css` `icon.css`。
+
+``` html
+<style>
+    @import "colorui/main.css";
+    @import "colorui/icon.css";
+    @import "app.css"; /* 你的项目css */
+    ....
+</style>
+```
+
+### 本模板引用插件luyj-grid-link的基本用法
+
+在 ``template`` 中的使用
+
+```html
+	<luyj-grid-link :list="list" @gridExc="clickGrid"></luyj-grid-link>
+```
+
+这里 `list`对应列表数据;@gridExc,对应没有链接属性时,宫格的执行方法,其中`e.detail.dataset.exec`对应列表中宫格的**`exec`**属性。这里引用了数据:
+
+```javascript
+list: [{
+			title: '成员管理',
+			cur: 'applications',
+			bgColor: 'bg-blue light', // 背景颜色
+			color: 'blue',
+			title_show: false,
+			showAll: false,
+			colNumber: 3, // 显示的列数
+			iconsList: [{
+					cuIcon: 'group_fill',
+					color: 'blue',
+					name: '组织机构',
+					url: '/pages/toUrl/toUrl'
+				},
+				{
+					cuIcon: 'friendadd',
+					color: 'blue',
+					name: '无URL',
+					exec : 'add'
+				},
+				{
+					cuIcon: 'friendaddfill',
+					color: 'blue',
+					name: '无Url',
+					exec: 'invite'
+				},
+			]
+		},
+		{
+			title: '基础数据',
+			cur: 'basic',
+			bgColor: '', // 背景颜色
+			color: 'blue',
+			title_show: true,
+			showAll: false,
+			colNumber: 5, // 显示的列数
+			iconsList: [{
+					cuIcon: 'text',
+					color: 'yellow',
+					name: '基本信息',
+					url: '/pages/toUrl/toUrl'
+				},
+				{
+					cuIcon: 'peoplelist',
+					color: 'blue',
+					name: '员工管理',
+					url: '/pages/toUrl/toUrl'
+				},
+
+			]
+		}, {
+			title: '产品目录',
+			cur: 'goods',
+			bgColor: '', // 背景颜色
+			color: 'blue',
+			title_show: true,
+			showAll: false,
+			colNumber: 5, // 显示的列数
+			iconsList: [{
+					cuIcon: 'list',
+					color: 'yellow',
+					name: '分类',
+					url: '/pages/toUrl/toUrl'
+				},
+				{
+					cuIcon: 'goodsnew',
+					color: 'blue',
+					name: '型号',
+					url: '/pages/toUrl/toUrl'
+				},
+				{
+					cuIcon: 'shake',
+					color: 'olive',
+					name: '设备',
+					url: '/pages/toUrl/toUrl'
+				},
+				{
+					cuIcon: 'questionfill',
+					color: 'yellow',
+					name: '常见问题',
+					url: '/pages/toUrl/toUrl'
+				}
+			]
+		},
+		{
+			title: '权限管理',
+			cur: 'goods',
+			bgColor: '', // 背景颜色
+			color: 'blue',
+			title_show: true,
+			showAll: false,
+			colNumber: 5, // 显示的列数
+			iconsList: [{
+				cuIcon: 'goodsfill',
+				color: 'red',
+				name: '权限设置',
+				url: '/pages/toUrl/toUrl'
+			}]
+		}
+	], 
+```
+
+### 属性说明
+
+|属性名					|类型			|默认值		|说明																
+|:-:					|:-:			|:-:		|:-:																
+| list					|Arrary			|[]			|宫格组,其中里面的每一组对象表示每一组宫格的展示
+
+#### list 内对象的参数说明
+
+|属性名					|类型			|是否必填		|说明
+|:-:					|:-:			|:-:			|:-:
+|title					|String			|是				|标题
+|cur					|String			|是				|当前宫格组的名称(每组不能重名)
+|bgColor				|String			|是				|宫格的背景颜,(可以为''),参考Color UI的样式
+|color					|String			|是				|标题字体的颜色
+|title_show				|Boolean		|是				|是否显示标题
+|showAll				|Boolean		|是				|是否默认展开所有宫格
+|colNumber				|Number			|是				|每行展示宫格的列数
+|iconsList				|Array			|是				|宫格的图标列表
+
+##### iconsList 内对象的参数说明
+
+|属性名					|类型			|是否必填		|说明
+|:-:					|:-:			|:-:			|:-:
+|cuIcon					|String			|是				|图标名称,参考ColorUI库
+|color					|String			|是				|宫格颜色
+|name					|String			|是				|名称
+|url					|String			|否				|宫格默认的跳转路径
+|exec					|String			|否				|存储参数(无Url时),宫格的参数。点击宫格是,@gridExc传递参数
+
+### 事件说明
+| 事件名		| 说明		|	返回参数 
+| :-:			| :-:		| :-:	
+|@gridExc		| 宫格无跳转路径时,返回参数,用于区分宫格,执行不同操作			| value= {e.detail.dataset.exec}
+传奇开心果模板,名称:lxm-fold-gridV1.0.0,传奇开心果出品,2022.1.6

+ 1 - 1
uni_applet/uni_modules/mescroll-uni/components/mescroll-uni/components/mescroll-up.css

@@ -2,7 +2,7 @@
 .mescroll-upwarp {
 	box-sizing: border-box;
 	min-height: 110rpx;
-	padding: 30rpx 0;
+	padding: 60rpx 0;
 	text-align: center;
 	clear: both;
 }

+ 6 - 0
uni_applet/uni_modules/smh-time-range/changelog.md

@@ -0,0 +1,6 @@
+## 1.0.3(2021-06-10)
+修改了由接口返回的数据,然后渲染数据无效的bug
+## 1.0.2(2021-05-21)
+修改了一些样式的小bug
+## 1.0.1(2021-05-21)
+更新了属性和时间的详细说明

+ 208 - 0
uni_applet/uni_modules/smh-time-range/components/smh-time-range/smh-time-range.vue

@@ -0,0 +1,208 @@
+<template >
+	<view v-if="isUnder">
+		<view class='shade'>
+		
+		</view>
+		<view  class="time1">
+			<view class="top flex justify-between align-center">
+				<text  @tap="cancel">取消</text>
+				<text @tap="confirm">确定</text>
+			</view>
+			<view style='display: flex;justify-content: space-between;margin:0 38px;'>
+				<view>开始时间</view>
+				<view>结束时间</view>
+			</view>
+			<picker-view class="picker" :value="value" @change="getime" indicator-style="height:30px;">
+				<picker-view-column>
+					<view class="hours" style="line-height:30px; text-align: center;" v-for="(item,index) in hoursList" :key="index">{{item}}</view>
+				</picker-view-column>
+				<picker-view-column>
+					<view style="line-height:30px; text-align: center;">-</view>
+				</picker-view-column>
+				<picker-view-column>
+					<view class="hours" style="line-height:30px; text-align: center;" v-for="(item,index) in hoursList" :key="index">{{item}}</view>
+				</picker-view-column>
+			</picker-view>
+		</view>
+	</view>
+</template>
+<script>
+	let minutes=['00','30']
+	// for (let i = 0; i <= 59; i++) {
+	// 	if(i<10){
+	// 		i="0"+i
+	// 	}
+	//   minutes.push(i)
+	// }
+	export default{
+		props:{
+			time:{
+				type: Array,
+				default() {
+					return ['15','0','0'];
+				}
+			},
+			isUnder: {
+			    type: Boolean,
+			    default: false
+			}
+		},
+		watch:{
+			time:function(){
+				this.value=this.time
+			},
+			
+		},
+		created(){
+			console.log(this.isUnder)
+		},
+		data(){
+			return{
+				value:this.time,//默认结束开始时间
+				hoursList:[
+					'00:00',
+					'00:30',
+					'01:00',
+					'01:30',
+					'02:00',
+					'02:30',
+					'03:00',
+					'03:30',
+					'04:00',
+					'04:30',
+					'05:00',
+					'05:30',
+					'06:00',
+					'06:30',
+					'07:00',
+					'07:30',
+					'08:00',
+					'08:30',
+					'09:00',
+					'09:30',
+					'10:00',
+					'10:00',
+					'11:00',
+					'11:30',
+					'12:00',
+					'12:30',
+					'13:00',
+					'13:30',
+					'14:00',
+					'14:30',
+					'15:00',
+					'15:30',
+					'16:00',
+					'16:30',
+					'17:00',
+					'17:30',
+					'18:00',
+					'18:30',
+					'19:00',
+					'19:30',
+					'20:00',
+					'20:30',
+					'21:00',
+					'21:30',
+					'22:00',
+					'22:30',
+					'23:00',
+					'23:30',
+					'24:00'],
+				minutes,
+			}
+		},
+		methods:{
+			confirm(){
+				setTimeout(()=>{
+					console.log(this.value)
+					let time = this.value[0]+"~"+this.value[1]
+					this.$emit("confrim",{time:time,start:this.value[0],end:this.value[1]})
+				},100)
+				
+			},
+			cancel(){
+				let time = this.value[0]+"~"+this.value[1]
+				this.$emit("cancel",{time:time,start:this.value[0],end:this.value[1]})
+			},
+			getime(e){
+				let val = e.detail.value
+				console.log(val,val[0],val[1],val[2])
+				this.value[0] = this.hoursList[val[0]] 
+				this.value[1] = this.hoursList[val[2]] 
+			},
+		}
+	}
+</script>
+<style lang="scss" scoped>
+.shade{
+	position: fixed;
+	    bottom: 0;
+	    top: 0;
+	    left: 0;
+	    right: 0;
+	    background-color: rgba(0, 0, 0, 0.4);
+	    transition-property: opacity;
+	    transition-duration: 0.3s;
+	    opacity: 1;
+	    z-index: 99;
+}
+.time1{
+	    position: fixed;
+	    left: 0;
+	    right: 0;
+	    transition-property: -webkit-transform;
+	    transition-property: transform;
+	    transition-property: transform, -webkit-transform;
+	    transition-duration: 0.3s;
+	    bottom: calc(0px);
+	    z-index: 99;
+	width:100%;
+	margin: 0 auto;
+	background-color:#FFFFFF;
+	color: #000;
+	height: 450rpx;
+	.top{
+		width: 690rpx;
+		margin: 0 auto;
+		height: 100rpx;
+		line-height: 100rpx;
+		text{
+			font-weight: bold;
+			&:nth-child(1){
+				font-size: 28rpx;
+				color: #999;
+			}
+			&:nth-child(2){
+				font-size: 28rpx;
+				color: #0A84FF;
+			}
+		}
+	}
+	.tip12{
+		width: 100%;
+		height: 100rpx;
+		view{
+			width: 50%;
+			text-align: center;
+			line-height: 100rpx;
+			font-size: 40rpx;
+			color: #000000;
+		}
+	}
+	.hours{
+		font-size: 30rpx;
+		font-weight: bold;
+		color: #000;
+	}
+	.minutes{
+		font-size: 30rpx;
+		font-weight: bold;
+		color: #000;
+	}
+}
+.picker{
+	width: 100%;
+	height: 300rpx;
+}
+</style>

+ 40 - 0
uni_applet/uni_modules/smh-time-range/readme.md

@@ -0,0 +1,40 @@
+# smh-time-range
+
+用于时间范围的选择组件
+
+### 安装方式
+
+本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。
+
+### 基本用法
+
+在 ``template`` 中使用组件
+
+```html
+<smh-time-range :time="['12','30','0','17','30']" @confrim="confrim" @cancel="cancel"></smh-time-range>
+
+methods: {
+	confrim(e){
+		console.log(e.time)//确定事件 =>12:30-17:30
+	},
+	cancel(e){
+		console.log(e.time)//取消事件 =>12:30-17:30
+	}
+}
+```
+
+
+## API
+
+### smh-time-range  Props
+
+|属性名	|类型		|默认值	|说明				|
+|:-:	|:-:		|:-:	|:-:				|
+|time	|Array		|['15','0','0','18','0']		|设置默认时间,前两个参数为第一个时间(15:00),后两个参数为第二个时间(18:00),第三个参数为固定参数,不用修改		|
+
+
+### smh-time-range Events
+|事件名	|说明			|返回值|
+|:-:	|:-:			|:-:  |
+|@confrim|点击确定按钮事件|{time:15:00-18:00}|
+|@cancel|点击取消按钮事件|{time:15:00-18:00}|

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

@@ -235,5 +235,8 @@ export default {
         background-color: #ffffff;
         padding: 1px 4px;
     }
+	.u-textarea__field{
+		min-height:150rpx;
+	}
 }
 </style>

+ 2 - 2
uni_merchants_enter/manifest.json

@@ -50,7 +50,7 @@
     "quickapp" : {},
     /* 小程序特有相关 */
     "mp-weixin" : {
-        "appid" : "wx5d8906c2208c899f",
+        "appid" : "wxa88225ca7712d558",
         "setting" : {
             "urlCheck" : false
         },
@@ -60,7 +60,7 @@
                 "desc" : "为用户提供给接送服务,需要定位信息"
             }
         },
-		"requiredPrivateInfos" : [ "getLocation", "chooseLocation", "chooseAddress" ]
+        "requiredPrivateInfos" : [ "getLocation", "chooseLocation", "chooseAddress" ]
     },
     "mp-alipay" : {
         "usingComponents" : true

+ 23 - 3
uni_merchants_enter/pageA/enter/myHomestay/index.vue

@@ -1,18 +1,38 @@
 <template>
-	<view>
-		
+	<view class='content'>
+		<view class='wrap'>
+			<view></view>
+			<view>
+				
+			</view>
+		</view>
+		<view style='margin:20rpx;' class='flex  justify-space-between'>
+			<view class='button'>一键刷新</view>
+			<view @click='add' class='button'>添加民宿</view>
+		</view>
 	</view>
 </template>
 
 <script>
+	var that
 	export default {
 		data() {
 			return {
 				
 			}
 		},
-		methods: {
+		onLoad() {
+			that = this
+		},
+		onShow(){
 			
+		},
+		methods: {
+			add(){
+				uni.navigateTo({
+					url:'/pageA/enter/myHomestay/add'
+				})
+			}
 		}
 	}
 </script>

+ 1 - 1
uni_merchants_enter/pages/enter/enter.vue

@@ -160,7 +160,7 @@
 								cuIcon: 'zufang',
 								color: 'blue',
 								name: '民宿',
-								url: '/pageA/enter/homestay'
+								url: '/pageA/enter/myHomestay/index'
 							},
 							{
 						        cuIcon: 'jiudian-38',

BIN
uni_merchants_enter/static/image/nav-icon/antOutline-user1 Copy.png


BIN
uni_merchants_enter/static/image/nav-icon/antOutline-user1.png


+ 1 - 1
uni_merchants_enter/util/request.js

@@ -124,7 +124,7 @@ const wxlogin = () => {
 const getPhone = (e, userInfo) => {
 	let promise = new Promise(function(resolve, reject) {
 		if (e.mp.detail.errMsg === "getPhoneNumber:ok") {
-			let appId = 'wx5d8906c2208c899f'
+			let appId = 'wxa88225ca7712d558'
 			let sessionKey = userInfo.sessionKey
 			let encryptedData = e.mp.detail.encryptedData
 			let iv = e.mp.detail.iv

+ 1 - 1
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/tourism/impl/FoodInfoServiceImpl.java

@@ -243,7 +243,7 @@ public class FoodInfoServiceImpl implements IFoodInfoService {
 					//根据装货城市获取经纬度
 					String str = EntCoordUtil.getCoordinate(place);
 					// 参数解释:lng:经度,lat:维度。KEY:高德地图key
-					String urlString = "https://restapi.amap.com/v3/direction/driving?origin=" + userLongitude + "," +userLatitude+ "&destination=" + longitude + "," + latitude  + "&key=" + KEY ;
+					String urlString = "https://restapi.amap.com/v3/direction/driving?origin=" + str+ "&destination=" + longitude + "," + latitude  + "&key=" + KEY ;
 					//输入流的缓冲
 					StringBuffer sb = new StringBuffer();
 					try {

+ 1 - 1
unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/tourism/impl/ProductManagementServiceImpl.java

@@ -161,7 +161,7 @@ public class ProductManagementServiceImpl implements IProductManagementService{
 					//根据装货城市获取经纬度
 					String str = EntCoordUtil.getCoordinate(place);
 					// 参数解释:lng:经度,lat:维度。KEY:高德地图key
-					String urlString = "https://restapi.amap.com/v3/direction/driving?origin=" + userLongitude + "," +userLatitude+ "&destination=" + longitude + "," + latitude  + "&key=" + KEY ;
+					String urlString = "https://restapi.amap.com/v3/direction/driving?origin=" + str + "&destination=" + longitude + "," + latitude  + "&key=" + KEY ;
 					//输入流的缓冲
 					StringBuffer sb = new StringBuffer();
 					try {

Some files were not shown because too many files changed in this diff