Quellcode durchsuchen

Merge branch 'zhaosm' of http://120.26.79.179/luxf/mp_exhibitor_miniprog into zhaosm

xiaokuang vor 3 Wochen
Ursprung
Commit
c5ca76832c
91 geänderte Dateien mit 8029 neuen und 86 gelöschten Zeilen
  1. 2 2
      api/exhibitor.js
  2. 1 0
      components/common/u-search/index.vue
  3. 9 3
      package.json
  4. 3 2
      pages.json
  5. 21 11
      pages/activity/components/activity-item.vue
  6. 4 1
      pages/activity/detail.vue
  7. 10 7
      pages/activity/index.vue
  8. 4 4
      pages/disclaimer/index.vue
  9. 6 3
      pages/exhibitor/detail.vue
  10. 6 3
      pages/exhibitor/exhibit-detail.vue
  11. 15 9
      pages/exhibitor/exhibit.vue
  12. 14 8
      pages/exhibitor/index.vue
  13. 1 1
      pages/index/index.vue
  14. 239 24
      pages/index/search.vue
  15. 8 5
      pages/news/index.vue
  16. 2 1
      uni.scss
  17. 2 2
      utils/request.js
  18. 116 0
      wxcomponents/vant/action-sheet/index.vue
  19. 234 0
      wxcomponents/vant/area/index.vue
  20. 92 0
      wxcomponents/vant/button/index.vue
  21. 37 0
      wxcomponents/vant/calendar/calendar.vue
  22. 64 0
      wxcomponents/vant/calendar/components/header/index.vue
  23. 194 0
      wxcomponents/vant/calendar/components/month/index.vue
  24. 388 0
      wxcomponents/vant/calendar/index.vue
  25. 105 0
      wxcomponents/vant/card/index.vue
  26. 246 0
      wxcomponents/vant/cascader/index.vue
  27. 28 0
      wxcomponents/vant/cell-group/index.vue
  28. 76 0
      wxcomponents/vant/cell/index.vue
  29. 50 0
      wxcomponents/vant/checkbox-group/index.vue
  30. 102 0
      wxcomponents/vant/checkbox/index.vue
  31. 215 0
      wxcomponents/vant/circle/index.vue
  32. 23 0
      wxcomponents/vant/col/index.vue
  33. 86 0
      wxcomponents/vant/collapse-item/index.vue
  34. 60 0
      wxcomponents/vant/collapse/index.vue
  35. 23 0
      wxcomponents/vant/config-provider/index.vue
  36. 115 0
      wxcomponents/vant/count-down/index.vue
  37. 309 0
      wxcomponents/vant/datetime-picker/index.vue
  38. 184 0
      wxcomponents/vant/dialog/index.vue
  39. 28 0
      wxcomponents/vant/divider/index.vue
  40. 157 0
      wxcomponents/vant/dropdown-item/index.vue
  41. 139 0
      wxcomponents/vant/dropdown-menu/index.vue
  42. 42 0
      wxcomponents/vant/empty/index.vue
  43. 182 0
      wxcomponents/vant/field/index.vue
  44. 15 0
      wxcomponents/vant/field/input.vue
  45. 15 0
      wxcomponents/vant/field/textarea.vue
  46. 61 0
      wxcomponents/vant/goods-action-button/index.vue
  47. 48 0
      wxcomponents/vant/goods-action-icon/index.vue
  48. 29 0
      wxcomponents/vant/goods-action/index.vue
  49. 82 0
      wxcomponents/vant/grid-item/index.vue
  50. 69 0
      wxcomponents/vant/grid/index.vue
  51. 38 0
      wxcomponents/vant/icon/index.vue
  52. 90 0
      wxcomponents/vant/image/index.vue
  53. 44 0
      wxcomponents/vant/index-anchor/index.vue
  54. 266 0
      wxcomponents/vant/index-bar/index.vue
  55. 20 0
      wxcomponents/vant/info/index.vue
  56. 35 0
      wxcomponents/vant/loading/index.vue
  57. 99 0
      wxcomponents/vant/nav-bar/index.vue
  58. 150 0
      wxcomponents/vant/notice-bar/index.vue
  59. 84 0
      wxcomponents/vant/notify/index.vue
  60. 52 0
      wxcomponents/vant/overlay/index.vue
  61. 34 0
      wxcomponents/vant/panel/index.vue
  62. 134 0
      wxcomponents/vant/picker-column/index.vue
  63. 165 0
      wxcomponents/vant/picker/index.vue
  64. 122 0
      wxcomponents/vant/popup/index.vue
  65. 69 0
      wxcomponents/vant/progress/index.vue
  66. 36 0
      wxcomponents/vant/radio-group/index.vue
  67. 91 0
      wxcomponents/vant/radio/index.vue
  68. 98 0
      wxcomponents/vant/rate/index.vue
  69. 37 0
      wxcomponents/vant/row/index.vue
  70. 126 0
      wxcomponents/vant/search/index.vue
  71. 98 0
      wxcomponents/vant/share-sheet/index.vue
  72. 36 0
      wxcomponents/vant/share-sheet/options.vue
  73. 49 0
      wxcomponents/vant/sidebar-item/index.vue
  74. 48 0
      wxcomponents/vant/sidebar/index.vue
  75. 69 0
      wxcomponents/vant/skeleton/index.vue
  76. 235 0
      wxcomponents/vant/slider/index.vue
  77. 203 0
      wxcomponents/vant/stepper/index.vue
  78. 65 0
      wxcomponents/vant/steps/index.vue
  79. 136 0
      wxcomponents/vant/sticky/index.vue
  80. 98 0
      wxcomponents/vant/submit-bar/index.vue
  81. 155 0
      wxcomponents/vant/swipe-cell/index.vue
  82. 54 0
      wxcomponents/vant/switch/index.vue
  83. 70 0
      wxcomponents/vant/tab/index.vue
  84. 95 0
      wxcomponents/vant/tabbar-item/index.vue
  85. 81 0
      wxcomponents/vant/tabbar/index.vue
  86. 343 0
      wxcomponents/vant/tabs/index.vue
  87. 38 0
      wxcomponents/vant/tag/index.vue
  88. 64 0
      wxcomponents/vant/toast/index.vue
  89. 27 0
      wxcomponents/vant/transition/index.vue
  90. 97 0
      wxcomponents/vant/tree-select/index.vue
  91. 217 0
      wxcomponents/vant/uploader/index.vue

+ 2 - 2
api/exhibitor.js

@@ -24,7 +24,7 @@ export const exhibitorsBoothActivityCollect = post('/api/exhibitors/booth-activi
 export const mettingList = get('/api/meeting/get-list') // 同期活动
 export const meetingCollect = post('/api/user/meeting/collect')
 export const meetingCancelCollect = post('/api/user/meeting/cancel-collect')
-export const meetingView = post('/api/user/meeting/view')
+export const mettingView = post('/api/user/meeting/view')
 export const mettingDesc = get('/api/global/metting-desc')
 
 export const exhibitorsCountryList = get('/api/exhibitors/country/list')
@@ -36,5 +36,5 @@ export const exhibitorsHallList = get('/api/exhibitors/hall/list')
 export const exhibitorsViewLogList = get('/api/exhibitors/view-log')
 export const exhibitorsProductViewLogList = get('/api/exhibitors/product/view-log')
 
-export const exhibitorsSearch = get('/api/exhibitors/search') // 全局搜索
+export const globalSearch = get('/api/exhibitors/search') // 全局搜索
 export const globalPollShow = get('/api/global/poll-show') // 人气是否显示

+ 1 - 0
components/common/u-search/index.vue

@@ -93,6 +93,7 @@
 		}
 
 		.u-search-text {
+			margin-left: 10rpx;
 			font-size: $fontSize2;
 		}
 

+ 9 - 3
package.json

@@ -14,11 +14,13 @@
 			"dev": {
 				"title": "小程序-开发环境",
 				"env": {
+					"ENV_TYPE": "dev",
 					"UNI_PLATFORM": "mp-weixin",
 					"NAME": "dev",
 					"TOKEN_KEY": "token",
 					"BASE_API": "https://mp-test-onlinecatelogue.matchexpo.cn",
-					"WEBSITE": "https://mp-website-test-munich.matchexpo.cn"
+					"WEBSITE": "https://mp-website-test-munich.matchexpo.cn",
+					"CONFERENCE_WEBSITE": "https://mp-test-onlinecatelogue.matchexpo.cn"
 				},
 				"define": {
 					"MP-CJN": true
@@ -27,11 +29,13 @@
 			"text": {
 				"title": "小程序-测试环境",
 				"env": {
+					"ENV_TYPE": "test",
 					"UNI_PLATFORM": "mp-weixin",
 					"NAME": "test",
 					"TOKEN_KEY": "token",
 					"BASE_API": "https://mp-test-miniprogapi.matchexpo.cn",
-					"WEBSITE": "https://mp-website-test-munich.matchexpo.cn"
+					"WEBSITE": "https://mp-website-test-munich.matchexpo.cn",
+					"CONFERENCE_WEBSITE": "https://mp-test-onlinecatelogue.matchexpo.cn"
 				},
 				"define": {
 					"MP-CJN": true
@@ -40,11 +44,13 @@
 			"prod": {
 				"title": "小程序-生产环境",
 				"env": {
+					"ENV_TYPE": "prod",
 					"UNI_PLATFORM": "mp-weixin",
 					"NAME": "prod",
 					"TOKEN_KEY": "token",
 					"BASE_API": "https://starify-api-dev.matchexpo.cn",
-					"WEBSITE": "https://www.productronicachina.com.cn"
+					"WEBSITE": "https://www.productronicachina.com.cn",
+					"CONFERENCE_WEBSITE": "https://mp-test-onlinecatelogue.matchexpo.cn"
 				},
 				"define": {
 					"MP-CJN": true

+ 3 - 2
pages.json

@@ -25,11 +25,12 @@
 		{ "path": "pages/user/like", "style": { "navigationBarTitleText": "我的点赞" }},
 		{ "path": "pages/user/favorites", "style": { "navigationBarTitleText": "我的收藏" }},
 		{ "path": "pages/user/vote", "style": { "navigationBarTitleText": "我的投票" }},
+		//APP协议模块
+		{ "path": "pages/disclaimer/index", "style": { "navigationBarTitleText": "免责声明" }},
 		// 组件页面
 		{ "path": "pages/index/search",  "style": { "navigationBarTitleText": "搜索" }},
 		// WEBVIEW
-		{ "path": "pages/index/webview", "style": { "navigationStyle": "default", "navigationBarTitleText": "加载中...", "navigationBarBackgroundColor": "#332968" }},
-		{ "path" : "pages/disclaimer/index", "style" : { "navigationBarTitleText" : "免责声明" }}
+		{ "path": "pages/index/webview", "style": { "navigationStyle": "default", "navigationBarTitleText": "加载中...", "navigationBarBackgroundColor": "#332968" }}
 	],
 	"globalStyle": {
 		"navigationStyle": "custom",

+ 21 - 11
pages/activity/components/activity-item.vue

@@ -8,11 +8,11 @@
 				<view class="activity-favourites-text">收藏</view>
 			</view>
 		</view>
-		<view class="activity-time">{{ formatDate(item.pub_date) }} | {{ item.address }}</view>
-		<view class="activity-views">浏览:{{ item.view }}</view>
+		<view class="activity-time">{{ formatDate(item.start_date || item.start_time || '') }} | {{ item.address }}</view>
+		<view class="activity-views">浏览:{{ item.view || item.pv || 0 }}</view>
 		<view class="activity-desc">
 			<view>
-				{{ item.description }}
+				{{ item.description || item.content || '' }}
 			</view>
 			<view>
 				<van-button class="activity-detail-link" type="primary">
@@ -26,7 +26,7 @@
 </template>
 
 <script>
-	import { meetingCollect, meetingCancelCollect, meetingView } from '@/api/exhibitor'
+	import { meetingCollect, meetingCancelCollect, mettingView } from '@/api/exhibitor'
 	
 	export default {
 		options: {
@@ -37,7 +37,8 @@
 		props: {
 			// 数据
 			item: Object,
-			favoritesHidden: Boolean
+			favoritesHidden: Boolean,
+			platform: String
 		},
 		data() {
 			return {
@@ -52,18 +53,20 @@
 				if (item.is_collect === 1) {
 					meetingCancelCollect({ id: item.id }).then(res => {
 						if (res.code === 0) {
-							item.is_collect = 0
-							this.$emit('updateItemCollect', {
-								id: item.id
+							this.$emit('updateItemValue', {
+								id: item.id,
+								key: 'is_collect',
+								value: 0
 							})
 						}
 					})
 				} else {
 					meetingCollect({ id: item.id }).then(res => {
 						if (res.code === 0) {
-							item.is_collect = 1
-							this.$emit('updateItemCollect', {
-								id: item.id
+							this.$emit('updateItemValue', {
+								id: item.id,
+								key: 'is_collect',
+								value: 1
 							})
 						}
 					})
@@ -77,7 +80,14 @@
 			  return `${year}年${month}月${day}日`;
 			},
 			onClickActivity(item){
+				this.saveMeetingView(item)
 				this.navigateTo(this.websiteUrl + '/' + item.urla)
+			},
+			saveMeetingView(item) {
+				if (this.platform !== 'metting') return
+				mettingView({ id: item.id }).then(res => {
+					
+				})
 			}
 		}
 	}

+ 4 - 1
pages/activity/detail.vue

@@ -130,6 +130,7 @@
 						</view>
 					</view>
 				</view>
+				<!-- <disclaimer-text></disclaimer-text> -->
 			</view>
 		</u-scroll-view>
 	</view>
@@ -138,6 +139,7 @@
 <script>
 	import NavBar from '@/components/layout/nav-bar'
 	import UScrollView from '@/components/common/u-scroll-view'
+	import DisclaimerText from '@/components/disclaimer-text/index.vue'
 	
 	export default {
 		options: {
@@ -145,7 +147,8 @@
 		},
 		components: {
 			NavBar,
-			UScrollView
+			UScrollView,
+			DisclaimerText
 		},
 		computed: {
 		},

+ 10 - 7
pages/activity/index.vue

@@ -10,9 +10,10 @@
 				<van-empty v-if="activityList.length === 0" description="暂无数据" />
 				<view v-else class="activity-list">
 					<template v-for="(item, index) in activityList">
-						<activity-item :item="item" :key="index" @updateItemCollect="updateItemCollect"/>
+						<activity-item :item="item" :key="index" platform="metting" @updateItemValue="updateItemValue()"/>
 					</template>
 				</view>
+				<!-- <disclaimer-text></disclaimer-text> -->
 			</view>
 		</u-scroll-view>
 	</view>
@@ -22,8 +23,9 @@
 	import NavBar from '@/components/layout/nav-bar'
 	import UScrollView from '@/components/common/u-scroll-view'
 	import ActivityItem from '@/pages/activity/components/activity-item.vue'
+	import DisclaimerText from '@/components/disclaimer-text/index.vue'
 	import { mettingList, mettingDesc } from '@/api/exhibitor'
-	
+
 	export default {
 		options: {
 			styleIsolation: 'shared'
@@ -31,11 +33,12 @@
 		components: {
 			NavBar,
 			UScrollView,
-			ActivityItem
+			ActivityItem,
+			DisclaimerText
 		},
 		data() {
 			return {
-				activityList: [{ favourited: true }, {}, {}],
+				activityList: [],
 				activityParams: {
 					page: 1,
 					page_size: 10,
@@ -67,10 +70,10 @@
 					this.activityListLoading = false
 				})
 			},
-			updateItemCollect(e) {
+			updateItemValue(e) {
 				this.activityList.forEach((item) => {
 					if (item.id === e.id) {
-						item.is_collect = item.is_collect === 1 ? 0 : 1
+						item[e.key] = e.value
 					}
 				})
 			},
@@ -107,4 +110,4 @@
 		margin-top: 40rpx;
 		color: #333333;
 	}
-</style>
+</style>

+ 4 - 4
pages/disclaimer/index.vue

@@ -5,7 +5,7 @@
 			<text class="title">
 				免责声明
 			</text>
-			
+
 			<text class="content">
 				本系统内容由展商提供,慕尼黑展览(上海)有限公司(以下简称“MM-SH”)不对内容的正确性、完整性和最新状态承担任何责任。
 				本系统中包含第三方外部网站的链接,我们无法控制这些网站的内容。在任何情况下,相关网站提供者或运营者须对链接网站的内容负责,MM-SH不对此承担任何责任。
@@ -28,21 +28,21 @@
 	export default {
 		data() {
 			return {
-				
+
 			}
 		},
 		components: {
 			NavBar
 		},
 		methods: {
-			
+
 		}
 	}
 </script>
 
 <style lang="scss">
 .container {
-	
+
 }
 .body {
 	padding: 50rpx;

+ 6 - 3
pages/exhibitor/detail.vue

@@ -80,6 +80,7 @@
 					<activity-recommend recommend-type="detail" :exhibitorId="exhibitorId" />
 				</u-panel>
 				<view class="click-more"><van-button type="primary" @click="navigateTo('/pages/exhibitor/index')">点击查看更多展商信息</van-button></view>
+				<disclaimer-text></disclaimer-text>
 			</view>
 		</u-scroll-view>
 		<u-share-action-sheet :show.sync="showShare" :show-info="shareInfo" />
@@ -95,7 +96,8 @@
 	import NewsRecommend from '@/pages/news/components/news-recommend.vue'
 	import ActivityRecommend from '@/pages/activity/components/activity-recommend.vue'
 	import { exhibitorsInfo, exhibitorsCollect, exhibitorsLike, exhibitorsPoll, globalPollShow } from '@/api/exhibitor'
-	
+	import DisclaimerText from '@/components/disclaimer-text/index.vue'
+
 	export default {
 		options: {
 			// styleIsolation: 'shared'
@@ -107,7 +109,8 @@
 			UPanel,
 			ExhibitRecommend,
 			ActivityRecommend,
-			NewsRecommend
+			NewsRecommend,
+			DisclaimerText
 		},
 		computed: {
 		},
@@ -276,4 +279,4 @@
 			@include link-button;
 		}
 	}
-</style>
+</style>

+ 6 - 3
pages/exhibitor/exhibit-detail.vue

@@ -75,6 +75,7 @@
 						</view>
 					</view>
 				</u-panel>
+				<disclaimer-text></disclaimer-text>
 			</view>
 		</u-scroll-view>
 		<u-share-action-sheet :show.sync="showShare" :show-info="shareInfo" />
@@ -86,8 +87,9 @@
 	import UScrollView from '@/components/common/u-scroll-view'
 	import UShareActionSheet from '@/components/common/u-share-action-sheet'
 	import UPanel from '@/components/common/u-panel'
+	import DisclaimerText from '@/components/disclaimer-text/index.vue'
 	import { exhibitorsProductInfo, globalPollShow, exhibitorsProductCollect, exhibitorsProductLike, exhibitorsProductPoll } from '@/api/exhibitor'
-	
+
 	export default {
 		options: {
 			styleIsolation: 'shared'
@@ -96,7 +98,8 @@
 			NavBar,
 			UScrollView,
 			UShareActionSheet,
-			UPanel
+			UPanel,
+			DisclaimerText
 		},
 		computed: {},
 		data() {
@@ -293,4 +296,4 @@
 			}
 		}
 	}
-</style>
+</style>

+ 15 - 9
pages/exhibitor/exhibit.vue

@@ -6,15 +6,15 @@
 				<view class="exhibitor-filter">
 					<view>
 						<view class="exhibitor-filter-label">展馆号</view>
-						<u-dropdown-select ref="select1" v-model="categoryId" placeholder="选择展馆号" :options="categories" @dropdown="onSelectDropdown(1)" @change="searchList()"/> 
+						<u-dropdown-select ref="select1" v-model="categoryId" placeholder="选择展馆号" :options="categories" @dropdown="onSelectDropdown(1)" @change="searchList()"/>
 					</view>
 					<view>
 						<view class="exhibitor-filter-label">产品类别</view>
-						<u-dropdown-select ref="select2" v-model="searchCategoryId" placeholder="选择产品类别" :options="categories" @dropdown="onSelectDropdown(2)" @change="searchList()" /> 
+						<u-dropdown-select ref="select2" v-model="searchCategoryId" placeholder="选择产品类别" :options="categories" @dropdown="onSelectDropdown(2)" @change="searchList()" />
 					</view>
 					<view>
 						<view class="exhibitor-filter-label">应用领域</view>
-						<u-dropdown-select  ref="select3" v-model="searchApplicationAreas" placeholder="选择应用领域" :options="applicationAreass" @dropdown="onSelectDropdown(3)" @change="searchList()"/> 
+						<u-dropdown-select  ref="select3" v-model="searchApplicationAreas" placeholder="选择应用领域" :options="applicationAreass" @dropdown="onSelectDropdown(3)" @change="searchList()"/>
 					</view>
 				</view>
 				<u-search v-model="searchKeyword" placeholder="搜索展商 / 展品名称 / 会议" @search="onSearch" />
@@ -24,9 +24,10 @@
 				<van-empty v-if="exhibitList.length === 0" description="暂无数据" />
 				<view v-else class="exhibit-list exhibitor-list">
 					<template v-for="(item, index) in exhibitList">
-						<exhibit-item :item="item" :key="index" :pollShow="pollShow.product_poll_show" @share="onShare" @updateItemValue="updateItemValue()"/>
-					</template>	
+						<exhibit-item :item="item" :key="index" :pollShow="pollShow.product_poll_show" @share="onShare" @updateItemValue="updateItemValue()" />
+					</template>
 				</view>
+				<disclaimer-text></disclaimer-text>
 			</view>
 		</u-scroll-view>
 		<u-share-action-sheet :show.sync="showShare" :show-info="shareInfo" />
@@ -41,7 +42,8 @@
 	import UDropdownSelect from '@/components/common/u-dropdown-select'
 	import ExhibitItem from '@/pages/exhibitor/components/exhibit-item.vue'
 	import { exhibitorsProductList, productCategoryList, applicationAreasList, globalPollShow } from '@/api/exhibitor'
-	
+	import DisclaimerText from '@/components/disclaimer-text/index.vue'
+
 	export default {
 		options: {
 			// styleIsolation: 'shared'
@@ -52,7 +54,8 @@
 			USearch,
 			UDropdownSelect,
 			UShareActionSheet,
-			ExhibitItem
+			ExhibitItem,
+			DisclaimerText
 		},
 		computed: {
 		},
@@ -62,7 +65,6 @@
 				searchApplicationAreas: '',
 				scrollviewHeight: 0,
 				searchKeyword: '',
-				exhibitList: [],
 				exhibitParams: {
 					page: 1,
 					page_size: 10,
@@ -130,6 +132,9 @@
 				this.getList()
 			},
 			getList() {
+				if (this.exhibitListLoading === true) {
+					return
+				}
 				this.exhibitListLoading = true
 				exhibitorsProductList(this.exhibitParams).then(res => {
 					if (res.data.data) {
@@ -204,4 +209,5 @@
 </script>
 
 <style lang="scss">
-</style>
+</style>
+

+ 14 - 8
pages/exhibitor/index.vue

@@ -6,15 +6,15 @@
 				<view class="exhibitor-filter">
 					<view>
 						<view class="exhibitor-filter-label">展馆号</view>
-						<u-dropdown-select ref="select1" v-model="searchHall" placeholder="选择展馆号" :options="halls" @dropdown="onSelectDropdown(1)" @change="searchExhibitorsList()"/> 
+						<u-dropdown-select ref="select1" v-model="searchHall" placeholder="选择展馆号" :options="halls" @dropdown="onSelectDropdown(1)" @change="searchExhibitorsList()"/>
 					</view>
 					<view>
 						<view class="exhibitor-filter-label">产品类别</view>
-						<u-dropdown-select ref="select2" v-model="searchCategoryId" placeholder="选择产品类别" :options="categories" @dropdown="onSelectDropdown(2)" @change="searchExhibitorsList()"/> 
+						<u-dropdown-select ref="select2" v-model="searchCategoryId" placeholder="选择产品类别" :options="categories" @dropdown="onSelectDropdown(2)" @change="searchExhibitorsList()"/>
 					</view>
 					<view>
 						<view class="exhibitor-filter-label">应用领域</view>
-						<u-dropdown-select  ref="select3" v-model="searchApplicationAreas" placeholder="选择应用领域" :options="applicationAreass" @dropdown="onSelectDropdown(3)" @change="searchExhibitorsList()"/> 
+						<u-dropdown-select  ref="select3" v-model="searchApplicationAreas" placeholder="选择应用领域" :options="applicationAreass" @dropdown="onSelectDropdown(3)" @change="searchExhibitorsList()"/>
 					</view>
 				</view>
 				<u-search v-model="searchKeyword" placeholder="搜索展商 / 展品名称 / 会议" @search="onSearch" />
@@ -24,9 +24,9 @@
 				<van-empty v-if="exhibitorList.length === 0" description="暂无数据" />
 				<view v-else class="exhibitor-list">
 					<template v-for="(item, index) in exhibitorList">
-						<exhibitor-item :item="item" :key="index" :pollShow="pollShow.exhibitors_poll_show" @share="(e) => $emit('share', e)" @updateItemValue="updateItemValue()" />
-					</template>	
+            <exhibitor-item :item="item" :key="index" :pollShow="pollShow.exhibitors_poll_show" @share="(e) => $emit('share', e)" @updateItemValue="updateItemValue()" />					</template>
 				</view>
+				<disclaimer-text></disclaimer-text>
 			</view>
 		</u-scroll-view>
 	</view>
@@ -39,7 +39,8 @@
 	import UDropdownSelect from '@/components/common/u-dropdown-select'
 	import ExhibitorItem from '@/pages/exhibitor/components/exhibitor-item.vue'
 	import { exhibitorsList, productCategoryList, exhibitorsHallList, applicationAreasList, globalPollShow } from '@/api/exhibitor'
-	
+	import DisclaimerText from '@/components/disclaimer-text/index.vue'
+
 	export default {
 		options: {
 			styleIsolation: 'shared'
@@ -49,7 +50,8 @@
 			USearch,
 			UScrollView,
 			UDropdownSelect,
-			ExhibitorItem
+			ExhibitorItem,
+      DisclaimerText
 		},
 		data() {
 			return {
@@ -139,6 +141,9 @@
 				this.getExhibitorsList()
 			},
 			getExhibitorsList() {
+				if (this.exhibitorListLoading === true) {
+					return
+				}
 				this.exhibitorListLoading = true
 				exhibitorsList(this.exhibitorsParams).then(res => {
 					if (res.data.data) {
@@ -192,4 +197,5 @@
 </script>
 
 <style lang="scss">
-</style>
+</style>
+

+ 1 - 1
pages/index/index.vue

@@ -66,5 +66,5 @@
 	}
 </script>
 
-<style lang="scss" scoped>
+<style lang="scss">
 </style>

+ 239 - 24
pages/index/search.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="search-index">
 		<nav-bar title="搜索" @init="onInitNavbar"></nav-bar>
-		<u-scroll-view>
+		<u-scroll-view :tabbar-conflict="false" @scroll-near-lower="onScrollToLower">
 			<view class="main-container">
 				<u-search v-model="searchKeyword" placeholder="搜索展商 / 展品名称 / 会议" @search="onClickSearch"/>
 				<view class="search-result-text">搜索结果</view>
@@ -12,19 +12,12 @@
 					<u-tabs :active.sync="tabActive" :tabs="tabs" tab-style="default" @change="tabChange"/>
 					<view v-if="tabActive === 1" class="search-result-list exhibit-list">
 						<template v-for="(item, index) in exhibitorList">
-							<exhibitor-item :item="item" :key="index" />
-							<exhibitor-item :item="item" :key="index" />
-							<exhibitor-item :item="item" :key="index" />
-							<exhibitor-item :item="item" :key="index" />
-							<exhibitor-item :item="item" :key="index" />
-							<exhibitor-item :item="item" :key="index" />
-							<exhibitor-item :item="item" :key="index" />
-							<exhibitor-item :item="item" :key="index" />
+							<exhibitor-item :item="item" :key="index" @updateItemValue="updateItemValue()"/>
 						</template>
 					</view>
 					<view v-else-if="tabActive === 2" class="search-result-list exhibit-list">
 						<template v-for="(item, index) in exhibitList">
-							<exhibit-item :item="item" :key="index" />
+							<exhibit-item :item="item" :key="index" @updateItemValue="updateItemValue()"/>
 						</template>
 					</view>
 					<view v-else-if="tabActive === 3" class="search-result-list exhibit-list">
@@ -34,16 +27,16 @@
 					</view>
 					<view v-else-if="tabActive === 4" class="search-result-list exhibit-list">
 						<template v-for="(item, index) in activityList">
-							<activity-item :item="item" :key="index" />
+							<activity-item :item="item" :key="index" @updateItemValue="updateItemValue()"/>
 						</template>
 					</view>
 					<view v-else-if="tabActive === 5" class="search-result-list exhibit-list">
-						<template v-for="(item, index) in activityList">
-							<activity-item :item="item" :key="index" />
+						<template v-for="(item, index) in mettingList">
+							<activity-item :item="item" :key="index" platform="metting" @updateItemValue="updateItemValue()"/>
 						</template>
 					</view>
 				</template>
-				<disclaimer></disclaimer>
+				<disclaimer-text></disclaimer-text>
 			</view>
 		</u-scroll-view>
 	</view>
@@ -58,7 +51,8 @@
 	import ExhibitorItem from '@/pages/exhibitor/components/exhibitor-item.vue'
 	import NewsItem from '@/pages/news/components/news-item.vue'
 	import ActivityItem from '@/pages/activity/components/activity-item.vue'
-	import disclaimer from '@/components/disclaimer-text/index.vue'
+	import { globalSearch, mettingList, exhibitorsList, exhibitorsProductList, exhibitorsNewsList, exhibitorsBoothActivityList } from '@/api/exhibitor'
+	import DisclaimerText from '@/components/disclaimer-text/index.vue'
 	export default {
 		options: {
 			styleIsolation: 'shared'
@@ -72,14 +66,14 @@
 			ExhibitorItem,
 			NewsItem,
 			ActivityItem,
-			disclaimer
+			DisclaimerText
 		},
 		data() {
 			return {
 				searchKeyword: '',
 				tabActive: 1,
 				isEmpty: false,
-				tabs: [{
+				defaultTabs: [{
 					label: '展商',
 					value: 1
 				}, {
@@ -95,24 +89,245 @@
 					label: '同期活动',
 					value: 5
 				}],
-				exhibitorList: [{ favourited: true }, { liked: true }, { voted: true }, {}],
-				exhibitList: [{ favourited: true }, { liked: true }, { voted: true }],
-				newsList: [{}, {}, {}, {}],
-				activityList: [{ favourited: true }, {}, {}, {}, {}]
+				tabs: [],
+				exhibitorList: [],
+				exhibitorListLoading: false,
+				exhibitorListLastPage: 1,
+				exhibitorListParams: {
+					page: 1,
+					page_size: 10,
+					keyword: ''
+				},
+				exhibitList: [],
+				exhibitListLoading: false,
+				exhibitListLastPage: 1,
+				exhibitListParams: {
+					page: 1,
+					page_size: 10,
+					keyword: ''
+				},
+				newsList: [],
+				newsListLoading: false,
+				newsListLastPage: 1,
+				newsListParams: {
+					page: 1,
+					page_size: 10,
+					keyword: ''
+				},
+				activityList: [],
+				activityListLoading: false,
+				activityListLastPage: 1,
+				activityListParams: {
+					page: 1,
+					page_size: 10,
+					keyword: ''
+				},
+				mettingList: [],
+				mettingListLoading: false,
+				mettingListLastPage: 1,
+				mettingListParams: {
+					page: 1,
+					page_size: 10,
+					keyword: ''
+				},
+				listParams: {
+					page: 1,
+					page_size: 10,
+					keyword: ''
+				}
 			}
 		},
 		onLoad(options) {
 			console.log('options')
 			console.log(options.query)
 			this.searchKeyword = options.query
+			this.onClickSearch()
 		},
 		created() {},
 		methods: {
 			tabChange() {
-				
+
 			},
 			onClickSearch() {
-				
+				this.listParams.page = 1
+				this.listParams.keyword = this.searchKeyword
+				this.exhibitorListParams = {...this.listParams}
+				this.exhibitListParams = {...this.listParams}
+				this.newsListParams = {...this.listParams}
+				this.activityListParams = {...this.listParams}
+				this.mettingListParams = {...this.listParams}
+				this.tabs = [...this.defaultTabs]
+				this.getGlobalSearch()
+				this.getMettingList()
+			},
+			getGlobalSearch() { // 全局搜索
+				globalSearch(this.listParams).then(res => {
+					if (res.code === 0) {
+						this.exhibitorList = res.data.exhibitors_list.data ?? []
+						this.exhibitorListLastPage = res.data.exhibitors_list.last_page ?? 1
+						this.exhibitList = res.data.product_list.data ?? []
+						this.exhibitListLastPage = res.data.product_list.last_page ?? 0
+						this.newsList = res.data.news_list.data ?? []
+						this.newsListLastPage = res.data.news_list.last_page ?? 0
+						this.activityList = res.data.booth_activity_list.data ?? []
+						this.activityListLastPage = res.data.booth_activity_list.last_page ?? 0
+						if (this.exhibitorList.length === 0) {
+							this.tabs = this.tabs.filter(item => item.value !== 1);
+						}
+						if (this.exhibitList.length === 0) {
+							this.tabs = this.tabs.filter(item => item.value !== 2);
+						}
+						if (this.newsList.length === 0) {
+							this.tabs = this.tabs.filter(item => item.value !== 3);
+						}
+						if (this.activityList.length === 0) {
+							this.tabs = this.tabs.filter(item => item.value !== 4);
+						}
+					}
+				})
+			},
+			getExhibitorsList() { // 展商
+				this.exhibitorListLoading = true
+				exhibitorsList(this.exhibitorListParams).then(res => {
+					if (res.data.data) {
+						if (this.exhibitorListParams.page > 1) {
+							this.exhibitorList = [...this.exhibitorList, ...res.data.data]
+						} else {
+							this.exhibitorList = res.data.data
+							this.exhibitorListLastPage = res.data.last_page
+						}
+					} else {
+						this.showToast('系统繁忙,稍候再试')
+					}
+					this.exhibitorListLoading = false
+				})
+			},
+			getExhibitList() { // 展品 
+				this.exhibitListLoading = true
+				exhibitorsProductList(this.exhibitListParams).then(res => {
+					if (res.data.data) {
+						if (this.exhibitListParams.page > 1) {
+							this.exhibitList = [...this.exhibitList, ...res.data.data]
+						} else {
+							this.exhibitList = res.data.data
+							this.exhibitListLastPage = res.data.last_page
+						}
+					} else {
+						this.showToast('系统繁忙,稍候再试')
+					}
+					this.exhibitListLoading = false
+				})
+			},
+			getExhibitorsNewsList() { // 展商新闻
+				this.newsListLoading = true
+				exhibitorsNewsList(this.newsListParams).then(res => {
+					if (res.data.data) {
+						if (this.newsListParams.page > 1) {
+							this.newsList = [...this.newsList, ...res.data.data]
+						} else {
+							this.newsList = res.data.data
+							this.newsListLastPage = res.data.last_page
+						}
+					} else {
+						this.showToast('系统繁忙,稍候再试')
+					}
+					this.newsListLoading = false
+				})
+			},
+			getActivityList() { // 展台活动
+				this.activityListLoading = true
+				exhibitorsBoothActivityList(this.activityListParams).then(res => {
+					if (res.data.data) {
+						if (this.activityListParams.page > 1) {
+							this.activityList = [...this.activityList, ...res.data.data]
+						} else {
+							this.activityList = res.data.data
+							this.activityListLastPage = res.data.last_page
+						}
+					} else {
+						this.showToast('系统繁忙,稍候再试')
+					}
+					this.activityListLoading = false
+				})
+			},
+			getMettingList() { // 同期活动
+				this.mettingListLoading = true
+				mettingList(this.mettingListParams).then(res => {
+					if (res.data.data) {
+						if (this.mettingListParams.page > 1) {
+							this.mettingList = [...this.mettingList, ...res.data.data]
+						} else {
+							this.mettingList = res.data.data
+							this.mettingListLastPage = res.data.last_page
+						}
+						if (this.mettingListParams.page === 1 && this.mettingList.length === 0) {
+							this.tabs = this.tabs.filter(item => item.value !== 5);
+						}
+					} else {
+						this.showToast('系统繁忙,稍候再试')
+					}
+					this.mettingListLoading = false
+				})
+			},
+			onScrollToLower(e) {
+				if (this.tabActive === 1) {
+					if (this.exhibitorListLastPage === this.exhibitorListParams.page) return
+					if (this.exhibitorListLoading === true) return
+					this.exhibitorListLoading = true
+					this.exhibitorListParams.page = this.exhibitorListParams.page+1
+					this.getExhibitorsList()
+				} else if (this.tabActive === 2) {
+					if (this.exhibitListLastPage === this.exhibitListParams.page) return
+					if (this.exhibitListLoading === true) return
+					this.exhibitListLoading = true
+					this.exhibitListParams.page = this.exhibitListParams.page+1
+					this.getExhibitList()
+				} else if (this.tabActive === 3) {
+					if (this.newsListLastPage === this.newsListParams.page) return
+					if (this.newsListLoading === true) return
+					this.newsListLoading = true
+					this.newsListParams.page = this.newsListParams.page+1
+					this.getExhibitorsNewsList()
+				} else if (this.tabActive === 4) {
+					if (this.activityListLastPage === this.activityListParams.page) return
+					if (this.activityListLoading === true) return
+					this.activityListLoading = true
+					this.activityListParams.page = this.activityListParams.page+1
+					this.getActivityList()
+				} else if (this.tabActive === 5) {
+					if (this.mettingListLastPage === this.mettingListParams.page) return
+					if (this.mettingListLoading === true) return
+					this.mettingListLoading = true
+					this.mettingListParams.page = this.mettingListParams.page+1
+					this.getMettingList()
+				}
+			},
+			updateItemValue(e) {
+				if (this.tabActive === 1) {
+					this.exhibitorList.forEach((item) => {
+						if (item.id === e.id) {
+							item[e.key] = e.value
+						}
+					})
+				} else if (this.tabActive === 2) {
+					this.exhibitList.forEach((item) => {
+						if (item.id === e.id) {
+							item[e.key] = e.value
+						}
+					})
+				} else if (this.tabActive === 4) {
+					this.activityList.forEach((item) => {
+						if (item.id === e.id) {
+							item[e.key] = e.value
+						}
+					})
+				} else if (this.tabActive === 5) {
+					this.mettingList.forEach((item) => {
+						if (item.id === e.id) {
+							item[e.key] = e.value
+						}
+					})
+				}
 			}
 		}
 	}
@@ -131,4 +346,4 @@
 		grid-row-gap: 28rpx;
 		margin-top: 32rpx;
 	}
-</style>
+</style>

+ 8 - 5
pages/news/index.vue

@@ -5,11 +5,12 @@
 			<view class="main-container">
 				<u-tabs :active.sync="tabActive" :tabs="tabs" tab-style="default" @change="tabChange"/>
 				<van-empty v-if="newsList.length === 0" description="暂无数据" />
-				<view v-else class="news-list">	
+				<view v-else class="news-list">
 					<template v-for="(item, index) in newsList">
 						<news-item :item="item" :key="index" />
-					</template>	
+					</template>
 				</view>
+				<disclaimer-text></disclaimer-text>
 			</view>
 		</u-scroll-view>
 	</view>
@@ -21,7 +22,8 @@
 	import UScrollView from '@/components/common/u-scroll-view'
 	import NewsItem from '@/pages/news/components/news-item.vue'
 	import { exhibitorsNewsList, newsList } from '@/api/exhibitor'
-	
+	import DisclaimerText from '@/components/disclaimer-text/index.vue'
+
 	export default {
 		options: {
 			styleIsolation: 'shared'
@@ -30,7 +32,8 @@
 			NavBar,
 			UTabs,
 			UScrollView,
-			NewsItem
+			NewsItem,
+			DisclaimerText
 		},
 		data() {
 			return {
@@ -128,4 +131,4 @@
 		grid-row-gap: 18rpx;
 		margin-top: 28rpx;
 	}
-</style>
+</style>

+ 2 - 1
uni.scss

@@ -8,6 +8,7 @@ $borderLight: 2rpx solid #dddddd;
 $bgLightColor: #F5F5F5;
 $fontColor: #555555;
 $fontTitleColor: #000000;
+
 $fontSize0: 16rpx;
 $fontSize1: 18rpx;
 $fontSize2: 20rpx;
@@ -64,4 +65,4 @@ $fontSize6: 36rpx;
 		font-weight: bold;
 		white-space: nowrap;
 	}
-}
+}

+ 2 - 2
utils/request.js

@@ -68,7 +68,7 @@ class Request {
 			if (process.env.NODE_ENV !== 'development') {
 				console.log("请求地址:" + this.url, this.data)
 			}
-			
+
 			weixin.request({
 				url: this.url,
 				method: this.method,
@@ -205,4 +205,4 @@ export const upload = (url) =>  (params) => {
 		  }
 		})
 	})
-}
+}

Datei-Diff unterdrückt, da er zu groß ist
+ 116 - 0
wxcomponents/vant/action-sheet/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 234 - 0
wxcomponents/vant/area/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 92 - 0
wxcomponents/vant/button/index.vue


+ 37 - 0
wxcomponents/vant/calendar/calendar.vue

@@ -0,0 +1,37 @@
+<template>
+<uni-shadow-root class="vant-calendar-calendar"><view class="van-calendar">
+  <header :title="title" :showTitle="showTitle" :subtitle="subtitle" :showSubtitle="showSubtitle" :firstDayOfWeek="firstDayOfWeek" @click-subtitle="onClickSubtitle">
+    <slot name="title" slot="title"></slot>
+  </header>
+
+  <scroll-view class="van-calendar__body" scroll-y :scroll-into-view="scrollIntoView">
+    <month v-for="(item,index) in (computed.getMonths(minDate, maxDate))" :key="item.index" :id="'month'+(index)" class="month" :data-date="item" :date="item" :type="type" :color="color" :minDate="minDate" :maxDate="maxDate" :showMark="showMark" :formatter="formatter" :rowHeight="rowHeight" :currentDate="currentDate" :showSubtitle="showSubtitle" :allowSameDay="allowSameDay" :showMonthTitle="index !== 0 || !showSubtitle" :firstDayOfWeek="firstDayOfWeek" @click="onClickDay"></month>
+  </scroll-view>
+
+  <view :class="utils.bem('calendar__footer', { safeAreaInsetBottom })">
+    <slot name="footer"></slot>
+  </view>
+
+  <view :class="utils.bem('calendar__footer', { safeAreaInsetBottom })">
+    <van-button v-if="showConfirm" round block type="danger" :color="color" custom-class="van-calendar__confirm" :disabled="computed.getButtonDisabled(type, currentDate, minRange)" nativeType="text" @click="onConfirm">
+      {{
+        computed.getButtonDisabled(type, currentDate, minRange)
+          ? confirmDisabledText
+          : confirmText
+      }}
+    </van-button>
+  </view>
+</view></uni-shadow-root>
+</template>
+<wxs src="./index.wxs" module="computed"></wxs><wxs src="../wxs/utils.wxs" module="utils"></wxs>
+<script>
+
+global['__wxRoute'] = 'vant/calendar/calendar'
+
+Component({})
+
+export default global['__wxComponents']['vant/calendar/calendar']
+</script>
+<style platform="mp-weixin">
+
+</style>

Datei-Diff unterdrückt, da er zu groß ist
+ 64 - 0
wxcomponents/vant/calendar/components/header/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 194 - 0
wxcomponents/vant/calendar/components/month/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 388 - 0
wxcomponents/vant/calendar/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 105 - 0
wxcomponents/vant/card/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 246 - 0
wxcomponents/vant/cascader/index.vue


+ 28 - 0
wxcomponents/vant/cell-group/index.vue

@@ -0,0 +1,28 @@
+<template>
+<uni-shadow-root class="vant-cell-group-index"><view v-if="title" :class="utils.bem('cell-group__title', { inset })">
+  {{ title }}
+</view>
+<view :class="'custom-class '+(utils.bem('cell-group', { inset }))+' '+(border ? 'van-hairline--top-bottom' : '')">
+  <slot></slot>
+</view></uni-shadow-root>
+</template>
+<wxs src="../wxs/utils.wxs" module="utils"></wxs>
+<script>
+
+global['__wxRoute'] = 'vant/cell-group/index'
+import { VantComponent } from '../common/component';
+VantComponent({
+    props: {
+        title: String,
+        border: {
+            type: Boolean,
+            value: true,
+        },
+        inset: Boolean,
+    },
+});
+export default global['__wxComponents']['vant/cell-group/index']
+</script>
+<style platform="mp-weixin">
+@import '../common/index.css';.van-cell-group--inset{border-radius:var(--cell-group-inset-border-radius,8px);margin:var(--cell-group-inset-padding,0 16px);overflow:hidden}.van-cell-group__title{color:var(--cell-group-title-color,#969799);font-size:var(--cell-group-title-font-size,14px);line-height:var(--cell-group-title-line-height,16px);padding:var(--cell-group-title-padding,16px 16px 8px)}.van-cell-group__title--inset{padding:var(--cell-group-inset-title-padding,16px 16px 8px 32px)}
+</style>

Datei-Diff unterdrückt, da er zu groß ist
+ 76 - 0
wxcomponents/vant/cell/index.vue


+ 50 - 0
wxcomponents/vant/checkbox-group/index.vue

@@ -0,0 +1,50 @@
+<template>
+<uni-shadow-root class="vant-checkbox-group-index"><view :class="utils.bem('checkbox-group', [{ horizontal: direction === 'horizontal' }])">
+  <slot></slot>
+</view></uni-shadow-root>
+</template>
+<wxs src="../wxs/utils.wxs" module="utils"></wxs>
+<script>
+
+global['__wxRoute'] = 'vant/checkbox-group/index'
+import { useChildren } from '../common/relation';
+import { VantComponent } from '../common/component';
+VantComponent({
+    field: true,
+    relation: useChildren('checkbox', function (target) {
+        this.updateChild(target);
+    }),
+    props: {
+        max: Number,
+        value: {
+            type: Array,
+            observer: 'updateChildren',
+        },
+        disabled: {
+            type: Boolean,
+            observer: 'updateChildren',
+        },
+        direction: {
+            type: String,
+            value: 'vertical',
+        },
+    },
+    methods: {
+        updateChildren() {
+            this.children.forEach((child) => this.updateChild(child));
+        },
+        updateChild(child) {
+            const { value, disabled, direction } = this.data;
+            child.setData({
+                value: value.indexOf(child.data.name) !== -1,
+                parentDisabled: disabled,
+                direction,
+            });
+        },
+    },
+});
+export default global['__wxComponents']['vant/checkbox-group/index']
+</script>
+<style platform="mp-weixin">
+@import '../common/index.css';.van-checkbox-group--horizontal{display:flex;flex-wrap:wrap}
+</style>

Datei-Diff unterdrückt, da er zu groß ist
+ 102 - 0
wxcomponents/vant/checkbox/index.vue


+ 215 - 0
wxcomponents/vant/circle/index.vue

@@ -0,0 +1,215 @@
+<template>
+<uni-shadow-root class="vant-circle-index"><view class="van-circle">
+  <canvas class="van-circle__canvas" :type="type" :style="'width: '+(utils.addUnit(size))+';height:'+(utils.addUnit(size))" id="van-circle" canvas-id="van-circle"></canvas>
+  <view v-if="(!text)" class="van-circle__text">
+    <slot></slot>
+  </view>
+  <cover-view v-else class="van-circle__text">{{ text }}</cover-view>
+</view></uni-shadow-root>
+</template>
+<wxs src="../wxs/utils.wxs" module="utils"></wxs>
+<script>
+
+global['__wxRoute'] = 'vant/circle/index'
+import { BLUE, WHITE } from '../common/color';
+import { VantComponent } from '../common/component';
+import { getSystemInfoSync } from '../common/utils';
+import { isObj } from '../common/validator';
+import { canIUseCanvas2d } from '../common/version';
+import { adaptor } from './canvas';
+function format(rate) {
+    return Math.min(Math.max(rate, 0), 100);
+}
+const PERIMETER = 2 * Math.PI;
+const BEGIN_ANGLE = -Math.PI / 2;
+const STEP = 1;
+VantComponent({
+    props: {
+        text: String,
+        lineCap: {
+            type: String,
+            value: 'round',
+        },
+        value: {
+            type: Number,
+            value: 0,
+            observer: 'reRender',
+        },
+        speed: {
+            type: Number,
+            value: 50,
+        },
+        size: {
+            type: Number,
+            value: 100,
+            observer() {
+                this.drawCircle(this.currentValue);
+            },
+        },
+        fill: String,
+        layerColor: {
+            type: String,
+            value: WHITE,
+        },
+        color: {
+            type: null,
+            value: BLUE,
+            observer() {
+                this.setHoverColor().then(() => {
+                    this.drawCircle(this.currentValue);
+                });
+            },
+        },
+        type: {
+            type: String,
+            value: '',
+        },
+        strokeWidth: {
+            type: Number,
+            value: 4,
+        },
+        clockwise: {
+            type: Boolean,
+            value: true,
+        },
+    },
+    data: {
+        hoverColor: BLUE,
+    },
+    methods: {
+        getContext() {
+            const { type, size } = this.data;
+            if (type === '' || !canIUseCanvas2d()) {
+                const ctx = wx.createCanvasContext('van-circle', this);
+                return Promise.resolve(ctx);
+            }
+            const dpr = getSystemInfoSync().pixelRatio;
+            return new Promise((resolve) => {
+                wx.createSelectorQuery()
+                    .in(this)
+                    .select('#van-circle')
+                    .node()
+                    .exec((res) => {
+                    const canvas = res[0].node;
+                    const ctx = canvas.getContext(type);
+                    if (!this.inited) {
+                        this.inited = true;
+                        canvas.width = size * dpr;
+                        canvas.height = size * dpr;
+                        ctx.scale(dpr, dpr);
+                    }
+                    resolve(adaptor(ctx));
+                });
+            });
+        },
+        setHoverColor() {
+            const { color, size } = this.data;
+            if (isObj(color)) {
+                return this.getContext().then((context) => {
+                    if (!context)
+                        return;
+                    const LinearColor = context.createLinearGradient(size, 0, 0, 0);
+                    Object.keys(color)
+                        .sort((a, b) => parseFloat(a) - parseFloat(b))
+                        .map((key) => LinearColor.addColorStop(parseFloat(key) / 100, color[key]));
+                    this.hoverColor = LinearColor;
+                });
+            }
+            this.hoverColor = color;
+            return Promise.resolve();
+        },
+        presetCanvas(context, strokeStyle, beginAngle, endAngle, fill) {
+            const { strokeWidth, lineCap, clockwise, size } = this.data;
+            const position = size / 2;
+            const radius = position - strokeWidth / 2;
+            context.setStrokeStyle(strokeStyle);
+            context.setLineWidth(strokeWidth);
+            context.setLineCap(lineCap);
+            context.beginPath();
+            context.arc(position, position, radius, beginAngle, endAngle, !clockwise);
+            context.stroke();
+            if (fill) {
+                context.setFillStyle(fill);
+                context.fill();
+            }
+        },
+        renderLayerCircle(context) {
+            const { layerColor, fill } = this.data;
+            this.presetCanvas(context, layerColor, 0, PERIMETER, fill);
+        },
+        renderHoverCircle(context, formatValue) {
+            const { clockwise } = this.data;
+            // 结束角度
+            const progress = PERIMETER * (formatValue / 100);
+            const endAngle = clockwise
+                ? BEGIN_ANGLE + progress
+                : 3 * Math.PI - (BEGIN_ANGLE + progress);
+            this.presetCanvas(context, this.hoverColor, BEGIN_ANGLE, endAngle);
+        },
+        drawCircle(currentValue) {
+            const { size } = this.data;
+            this.getContext().then((context) => {
+                if (!context)
+                    return;
+                context.clearRect(0, 0, size, size);
+                this.renderLayerCircle(context);
+                const formatValue = format(currentValue);
+                if (formatValue !== 0) {
+                    this.renderHoverCircle(context, formatValue);
+                }
+                context.draw();
+            });
+        },
+        reRender() {
+            // tofector 动画暂时没有想到好的解决方案
+            const { value, speed } = this.data;
+            if (speed <= 0 || speed > 1000) {
+                this.drawCircle(value);
+                return;
+            }
+            this.clearMockInterval();
+            this.currentValue = this.currentValue || 0;
+            const run = () => {
+                this.interval = setTimeout(() => {
+                    if (this.currentValue !== value) {
+                        if (Math.abs(this.currentValue - value) < STEP) {
+                            this.currentValue = value;
+                        }
+                        else if (this.currentValue < value) {
+                            this.currentValue += STEP;
+                        }
+                        else {
+                            this.currentValue -= STEP;
+                        }
+                        this.drawCircle(this.currentValue);
+                        run();
+                    }
+                    else {
+                        this.clearMockInterval();
+                    }
+                }, 1000 / speed);
+            };
+            run();
+        },
+        clearMockInterval() {
+            if (this.interval) {
+                clearTimeout(this.interval);
+                this.interval = null;
+            }
+        },
+    },
+    mounted() {
+        this.currentValue = this.data.value;
+        this.setHoverColor().then(() => {
+            this.drawCircle(this.currentValue);
+        });
+    },
+    destroyed() {
+        this.clearMockInterval();
+    },
+});
+export default global['__wxComponents']['vant/circle/index']
+</script>
+<style platform="mp-weixin">
+@import '../common/index.css';.van-circle{display:inline-block;position:relative;text-align:center}.van-circle__text{color:var(--circle-text-color,#323233);left:0;position:absolute;top:50%;transform:translateY(-50%);width:100%}
+</style>

Datei-Diff unterdrückt, da er zu groß ist
+ 23 - 0
wxcomponents/vant/col/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 86 - 0
wxcomponents/vant/collapse-item/index.vue


+ 60 - 0
wxcomponents/vant/collapse/index.vue

@@ -0,0 +1,60 @@
+<template>
+<uni-shadow-root class="vant-collapse-index"><view :class="'custom-class van-collapse '+(border ? 'van-hairline--top-bottom' : '')">
+  <slot></slot>
+</view></uni-shadow-root>
+</template>
+
+<script>
+
+global['__wxRoute'] = 'vant/collapse/index'
+import { VantComponent } from '../common/component';
+import { useChildren } from '../common/relation';
+VantComponent({
+    relation: useChildren('collapse-item'),
+    props: {
+        value: {
+            type: null,
+            observer: 'updateExpanded',
+        },
+        accordion: {
+            type: Boolean,
+            observer: 'updateExpanded',
+        },
+        border: {
+            type: Boolean,
+            value: true,
+        },
+    },
+    methods: {
+        updateExpanded() {
+            this.children.forEach((child) => {
+                child.updateExpanded();
+            });
+        },
+        switch(name, expanded) {
+            const { accordion, value } = this.data;
+            const changeItem = name;
+            if (!accordion) {
+                name = expanded
+                    ? (value || []).concat(name)
+                    : (value || []).filter((activeName) => activeName !== name);
+            }
+            else {
+                name = expanded ? name : '';
+            }
+            if (expanded) {
+                this.$emit('open', changeItem);
+            }
+            else {
+                this.$emit('close', changeItem);
+            }
+            this.$emit('change', name);
+            this.$emit('input', name);
+        },
+    },
+});
+export default global['__wxComponents']['vant/collapse/index']
+</script>
+<style platform="mp-weixin">
+@import '../common/index.css';
+</style>

+ 23 - 0
wxcomponents/vant/config-provider/index.vue

@@ -0,0 +1,23 @@
+<template>
+<uni-shadow-root class="vant-config-provider-index"><view class="van-config-provider" :style="computed.mapThemeVarsToCSSVars(themeVars)">
+  <slot></slot>
+</view></uni-shadow-root>
+</template>
+<wxs src="./index.wxs" module="computed"></wxs>
+<script>
+
+global['__wxRoute'] = 'vant/config-provider/index'
+import { VantComponent } from '../common/component';
+VantComponent({
+    props: {
+        themeVars: {
+            type: Object,
+            value: {},
+        },
+    },
+});
+export default global['__wxComponents']['vant/config-provider/index']
+</script>
+<style platform="mp-weixin">
+
+</style>

+ 115 - 0
wxcomponents/vant/count-down/index.vue

@@ -0,0 +1,115 @@
+<template>
+<uni-shadow-root class="vant-count-down-index"><view class="van-count-down">
+  <slot v-if="useSlot"></slot>
+  <block v-else>{{ formattedTime }}</block>
+</view></uni-shadow-root>
+</template>
+
+<script>
+
+global['__wxRoute'] = 'vant/count-down/index'
+import { VantComponent } from '../common/component';
+import { isSameSecond, parseFormat, parseTimeData } from './utils';
+function simpleTick(fn) {
+    return setTimeout(fn, 30);
+}
+VantComponent({
+    props: {
+        useSlot: Boolean,
+        millisecond: Boolean,
+        time: {
+            type: Number,
+            observer: 'reset',
+        },
+        format: {
+            type: String,
+            value: 'HH:mm:ss',
+        },
+        autoStart: {
+            type: Boolean,
+            value: true,
+        },
+    },
+    data: {
+        timeData: parseTimeData(0),
+        formattedTime: '0',
+    },
+    destroyed() {
+        clearTimeout(this.tid);
+        this.tid = null;
+    },
+    methods: {
+        // 开始
+        start() {
+            if (this.counting) {
+                return;
+            }
+            this.counting = true;
+            this.endTime = Date.now() + this.remain;
+            this.tick();
+        },
+        // 暂停
+        pause() {
+            this.counting = false;
+            clearTimeout(this.tid);
+        },
+        // 重置
+        reset() {
+            this.pause();
+            this.remain = this.data.time;
+            this.setRemain(this.remain);
+            if (this.data.autoStart) {
+                this.start();
+            }
+        },
+        tick() {
+            if (this.data.millisecond) {
+                this.microTick();
+            }
+            else {
+                this.macroTick();
+            }
+        },
+        microTick() {
+            this.tid = simpleTick(() => {
+                this.setRemain(this.getRemain());
+                if (this.remain !== 0) {
+                    this.microTick();
+                }
+            });
+        },
+        macroTick() {
+            this.tid = simpleTick(() => {
+                const remain = this.getRemain();
+                if (!isSameSecond(remain, this.remain) || remain === 0) {
+                    this.setRemain(remain);
+                }
+                if (this.remain !== 0) {
+                    this.macroTick();
+                }
+            });
+        },
+        getRemain() {
+            return Math.max(this.endTime - Date.now(), 0);
+        },
+        setRemain(remain) {
+            this.remain = remain;
+            const timeData = parseTimeData(remain);
+            if (this.data.useSlot) {
+                this.$emit('change', timeData);
+            }
+            this.setData({
+                formattedTime: parseFormat(this.data.format, timeData),
+            });
+            if (remain === 0) {
+                this.pause();
+                this.$emit('finish');
+            }
+        },
+    },
+});
+export default global['__wxComponents']['vant/count-down/index']
+</script>
+<style platform="mp-weixin">
+@import '../common/index.css';.van-count-down{color:var(--count-down-text-color,#323233);font-size:var(--count-down-font-size,14px);line-height:var(--count-down-line-height,20px)}
+</style>

+ 309 - 0
wxcomponents/vant/datetime-picker/index.vue

@@ -0,0 +1,309 @@
+<template>
+<uni-shadow-root class="vant-datetime-picker-index"><van-picker class="van-datetime-picker" active-class="active-class" toolbar-class="toolbar-class" column-class="column-class" :title="title" :columns="columns" :item-height="itemHeight" :show-toolbar="showToolbar" :visible-item-count="visibleItemCount" :confirm-button-text="confirmButtonText" :cancel-button-text="cancelButtonText" @change="onChange" @confirm="onConfirm" @cancel="onCancel"></van-picker></uni-shadow-root>
+</template>
+
+<script>
+import VanPicker from '../picker/index.vue'
+global['__wxVueOptions'] = {components:{'van-picker': VanPicker}}
+
+global['__wxRoute'] = 'vant/datetime-picker/index'
+import { VantComponent } from '../common/component';
+import { isDef } from '../common/validator';
+import { pickerProps } from '../picker/shared';
+const currentYear = new Date().getFullYear();
+function isValidDate(date) {
+    return isDef(date) && !isNaN(new Date(date).getTime());
+}
+function range(num, min, max) {
+    return Math.min(Math.max(num, min), max);
+}
+function padZero(val) {
+    return `00${val}`.slice(-2);
+}
+function times(n, iteratee) {
+    let index = -1;
+    const result = Array(n < 0 ? 0 : n);
+    while (++index < n) {
+        result[index] = iteratee(index);
+    }
+    return result;
+}
+function getTrueValue(formattedValue) {
+    if (formattedValue === undefined) {
+        formattedValue = '1';
+    }
+    while (isNaN(parseInt(formattedValue, 10))) {
+        formattedValue = formattedValue.slice(1);
+    }
+    return parseInt(formattedValue, 10);
+}
+function getMonthEndDay(year, month) {
+    return 32 - new Date(year, month - 1, 32).getDate();
+}
+const defaultFormatter = (type, value) => value;
+VantComponent({
+    classes: ['active-class', 'toolbar-class', 'column-class'],
+    props: Object.assign(Object.assign({}, pickerProps), { value: {
+            type: null,
+            observer: 'updateValue',
+        }, filter: null, type: {
+            type: String,
+            value: 'datetime',
+            observer: 'updateValue',
+        }, showToolbar: {
+            type: Boolean,
+            value: true,
+        }, formatter: {
+            type: null,
+            value: defaultFormatter,
+        }, minDate: {
+            type: Number,
+            value: new Date(currentYear - 10, 0, 1).getTime(),
+            observer: 'updateValue',
+        }, maxDate: {
+            type: Number,
+            value: new Date(currentYear + 10, 11, 31).getTime(),
+            observer: 'updateValue',
+        }, minHour: {
+            type: Number,
+            value: 0,
+            observer: 'updateValue',
+        }, maxHour: {
+            type: Number,
+            value: 23,
+            observer: 'updateValue',
+        }, minMinute: {
+            type: Number,
+            value: 0,
+            observer: 'updateValue',
+        }, maxMinute: {
+            type: Number,
+            value: 59,
+            observer: 'updateValue',
+        } }),
+    data: {
+        innerValue: Date.now(),
+        columns: [],
+    },
+    methods: {
+        updateValue() {
+            const { data } = this;
+            const val = this.correctValue(data.value);
+            const isEqual = val === data.innerValue;
+            this.updateColumnValue(val).then(() => {
+                if (!isEqual) {
+                    this.$emit('input', val);
+                }
+            });
+        },
+        getPicker() {
+            if (this.picker == null) {
+                this.picker = this.selectComponent('.van-datetime-picker');
+                const { picker } = this;
+                const { setColumnValues } = picker;
+                picker.setColumnValues = (...args) => setColumnValues.apply(picker, [...args, false]);
+            }
+            return this.picker;
+        },
+        updateColumns() {
+            const { formatter = defaultFormatter } = this.data;
+            const results = this.getOriginColumns().map((column) => ({
+                values: column.values.map((value) => formatter(column.type, value)),
+            }));
+            return this.set({ columns: results });
+        },
+        getOriginColumns() {
+            const { filter } = this.data;
+            const results = this.getRanges().map(({ type, range }) => {
+                let values = times(range[1] - range[0] + 1, (index) => {
+                    const value = range[0] + index;
+                    return type === 'year' ? `${value}` : padZero(value);
+                });
+                if (filter) {
+                    values = filter(type, values);
+                }
+                return { type, values };
+            });
+            return results;
+        },
+        getRanges() {
+            const { data } = this;
+            if (data.type === 'time') {
+                return [
+                    {
+                        type: 'hour',
+                        range: [data.minHour, data.maxHour],
+                    },
+                    {
+                        type: 'minute',
+                        range: [data.minMinute, data.maxMinute],
+                    },
+                ];
+            }
+            const { maxYear, maxDate, maxMonth, maxHour, maxMinute, } = this.getBoundary('max', data.innerValue);
+            const { minYear, minDate, minMonth, minHour, minMinute, } = this.getBoundary('min', data.innerValue);
+            const result = [
+                {
+                    type: 'year',
+                    range: [minYear, maxYear],
+                },
+                {
+                    type: 'month',
+                    range: [minMonth, maxMonth],
+                },
+                {
+                    type: 'day',
+                    range: [minDate, maxDate],
+                },
+                {
+                    type: 'hour',
+                    range: [minHour, maxHour],
+                },
+                {
+                    type: 'minute',
+                    range: [minMinute, maxMinute],
+                },
+            ];
+            if (data.type === 'date')
+                result.splice(3, 2);
+            if (data.type === 'year-month')
+                result.splice(2, 3);
+            return result;
+        },
+        correctValue(value) {
+            const { data } = this;
+            // validate value
+            const isDateType = data.type !== 'time';
+            if (isDateType && !isValidDate(value)) {
+                value = data.minDate;
+            }
+            else if (!isDateType && !value) {
+                const { minHour } = data;
+                value = `${padZero(minHour)}:00`;
+            }
+            // time type
+            if (!isDateType) {
+                let [hour, minute] = value.split(':');
+                hour = padZero(range(hour, data.minHour, data.maxHour));
+                minute = padZero(range(minute, data.minMinute, data.maxMinute));
+                return `${hour}:${minute}`;
+            }
+            // date type
+            value = Math.max(value, data.minDate);
+            value = Math.min(value, data.maxDate);
+            return value;
+        },
+        getBoundary(type, innerValue) {
+            const value = new Date(innerValue);
+            const boundary = new Date(this.data[`${type}Date`]);
+            const year = boundary.getFullYear();
+            let month = 1;
+            let date = 1;
+            let hour = 0;
+            let minute = 0;
+            if (type === 'max') {
+                month = 12;
+                date = getMonthEndDay(value.getFullYear(), value.getMonth() + 1);
+                hour = 23;
+                minute = 59;
+            }
+            if (value.getFullYear() === year) {
+                month = boundary.getMonth() + 1;
+                if (value.getMonth() + 1 === month) {
+                    date = boundary.getDate();
+                    if (value.getDate() === date) {
+                        hour = boundary.getHours();
+                        if (value.getHours() === hour) {
+                            minute = boundary.getMinutes();
+                        }
+                    }
+                }
+            }
+            return {
+                [`${type}Year`]: year,
+                [`${type}Month`]: month,
+                [`${type}Date`]: date,
+                [`${type}Hour`]: hour,
+                [`${type}Minute`]: minute,
+            };
+        },
+        onCancel() {
+            this.$emit('cancel');
+        },
+        onConfirm() {
+            this.$emit('confirm', this.data.innerValue);
+        },
+        onChange() {
+            const { data } = this;
+            let value;
+            const picker = this.getPicker();
+            const originColumns = this.getOriginColumns();
+            if (data.type === 'time') {
+                const indexes = picker.getIndexes();
+                value = `${+originColumns[0].values[indexes[0]]}:${+originColumns[1]
+                    .values[indexes[1]]}`;
+            }
+            else {
+                const indexes = picker.getIndexes();
+                const values = indexes.map((value, index) => originColumns[index].values[value]);
+                const year = getTrueValue(values[0]);
+                const month = getTrueValue(values[1]);
+                const maxDate = getMonthEndDay(year, month);
+                let date = getTrueValue(values[2]);
+                if (data.type === 'year-month') {
+                    date = 1;
+                }
+                date = date > maxDate ? maxDate : date;
+                let hour = 0;
+                let minute = 0;
+                if (data.type === 'datetime') {
+                    hour = getTrueValue(values[3]);
+                    minute = getTrueValue(values[4]);
+                }
+                value = new Date(year, month - 1, date, hour, minute);
+            }
+            value = this.correctValue(value);
+            this.updateColumnValue(value).then(() => {
+                this.$emit('input', value);
+                this.$emit('change', picker);
+            });
+        },
+        updateColumnValue(value) {
+            let values = [];
+            const { type } = this.data;
+            const formatter = this.data.formatter || defaultFormatter;
+            const picker = this.getPicker();
+            if (type === 'time') {
+                const pair = value.split(':');
+                values = [formatter('hour', pair[0]), formatter('minute', pair[1])];
+            }
+            else {
+                const date = new Date(value);
+                values = [
+                    formatter('year', `${date.getFullYear()}`),
+                    formatter('month', padZero(date.getMonth() + 1)),
+                ];
+                if (type === 'date') {
+                    values.push(formatter('day', padZero(date.getDate())));
+                }
+                if (type === 'datetime') {
+                    values.push(formatter('day', padZero(date.getDate())), formatter('hour', padZero(date.getHours())), formatter('minute', padZero(date.getMinutes())));
+                }
+            }
+            return this.set({ innerValue: value })
+                .then(() => this.updateColumns())
+                .then(() => picker.setValues(values));
+        },
+    },
+    created() {
+        const innerValue = this.correctValue(this.data.value);
+        this.updateColumnValue(innerValue).then(() => {
+            this.$emit('input', innerValue);
+        });
+    },
+});
+export default global['__wxComponents']['vant/datetime-picker/index']
+</script>
+<style platform="mp-weixin">
+@import '../common/index.css';
+</style>

Datei-Diff unterdrückt, da er zu groß ist
+ 184 - 0
wxcomponents/vant/dialog/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 28 - 0
wxcomponents/vant/divider/index.vue


+ 157 - 0
wxcomponents/vant/dropdown-item/index.vue

@@ -0,0 +1,157 @@
+<template>
+<uni-shadow-root class="vant-dropdown-item-index"><view v-if="showWrapper" :class="(utils.bem('dropdown-item', direction))+' custom-class'" :style="wrapperStyle">
+  <van-popup :show="showPopup" :custom-style="'position: absolute;'+(popupStyle)" overlay-style="position: absolute;" :overlay="overlay" :position="direction === 'down' ? 'top' : 'bottom'" :duration="transition ? duration : 0" :safe-area-tab-bar="safeAreaTabBar" :close-on-click-overlay="closeOnClickOverlay" :rootPortal="rootPortal" @enter="onOpen" @leave="onClose" @close="toggle" @after-enter="onOpened" @after-leave="onClosed">
+    <van-cell v-for="(item,index) in (options)" :key="item.value" :data-option="item" :class="utils.bem('dropdown-item__option', { active: item.value === value } )" clickable :icon="item.icon" @click.native="onOptionTap">
+      <view slot="title" class="van-dropdown-item__title item-title-class" :style="item.value === value  ? 'color:' + activeColor : ''">
+        {{ item.text }}
+      </view>
+      <van-icon v-if="item.value === value" name="success" class="van-dropdown-item__icon" :color="activeColor"></van-icon>
+    </van-cell>
+
+    <slot></slot>
+  </van-popup>
+</view></uni-shadow-root>
+</template>
+<wxs src="../wxs/utils.wxs" module="utils"></wxs>
+<script>
+import VanPopup from '../popup/index.vue'
+import VanCell from '../cell/index.vue'
+import VanIcon from '../icon/index.vue'
+global['__wxVueOptions'] = {components:{'van-popup': VanPopup,'van-cell': VanCell,'van-icon': VanIcon}}
+
+global['__wxRoute'] = 'vant/dropdown-item/index'
+import { useParent } from '../common/relation';
+import { VantComponent } from '../common/component';
+VantComponent({
+    classes: ['item-title-class'],
+    field: true,
+    relation: useParent('dropdown-menu', function () {
+        this.updateDataFromParent();
+    }),
+    props: {
+        value: {
+            type: null,
+            observer: 'rerender',
+        },
+        title: {
+            type: String,
+            observer: 'rerender',
+        },
+        disabled: Boolean,
+        titleClass: {
+            type: String,
+            observer: 'rerender',
+        },
+        options: {
+            type: Array,
+            value: [],
+            observer: 'rerender',
+        },
+        popupStyle: String,
+        useBeforeToggle: {
+            type: Boolean,
+            value: false,
+        },
+        rootPortal: {
+            type: Boolean,
+            value: false,
+        },
+    },
+    data: {
+        transition: true,
+        showPopup: false,
+        showWrapper: false,
+        displayTitle: '',
+        safeAreaTabBar: false,
+    },
+    methods: {
+        rerender() {
+            wx.nextTick(() => {
+                var _a;
+                (_a = this.parent) === null || _a === void 0 ? void 0 : _a.updateItemListData();
+            });
+        },
+        updateDataFromParent() {
+            if (this.parent) {
+                const { overlay, duration, activeColor, closeOnClickOverlay, direction, safeAreaTabBar, } = this.parent.data;
+                this.setData({
+                    overlay,
+                    duration,
+                    activeColor,
+                    closeOnClickOverlay,
+                    direction,
+                    safeAreaTabBar,
+                });
+            }
+        },
+        onOpen() {
+            this.$emit('open');
+        },
+        onOpened() {
+            this.$emit('opened');
+        },
+        onClose() {
+            this.$emit('close');
+        },
+        onClosed() {
+            this.$emit('closed');
+            this.setData({ showWrapper: false });
+        },
+        onOptionTap(event) {
+            const { option } = event.currentTarget.dataset;
+            const { value } = option;
+            const shouldEmitChange = this.data.value !== value;
+            this.setData({ showPopup: false, value });
+            this.$emit('close');
+            this.rerender();
+            if (shouldEmitChange) {
+                this.$emit('change', value);
+            }
+        },
+        toggle(show, options = {}) {
+            const { showPopup } = this.data;
+            if (typeof show !== 'boolean') {
+                show = !showPopup;
+            }
+            if (show === showPopup) {
+                return;
+            }
+            this.onBeforeToggle(show).then((status) => {
+                var _a;
+                if (!status) {
+                    return;
+                }
+                this.setData({
+                    transition: !options.immediate,
+                    showPopup: show,
+                });
+                if (show) {
+                    (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getChildWrapperStyle().then((wrapperStyle) => {
+                        this.setData({ wrapperStyle, showWrapper: true });
+                        this.rerender();
+                    });
+                }
+                else {
+                    this.rerender();
+                }
+            });
+        },
+        onBeforeToggle(status) {
+            const { useBeforeToggle } = this.data;
+            if (!useBeforeToggle) {
+                return Promise.resolve(true);
+            }
+            return new Promise((resolve) => {
+                this.$emit('before-toggle', {
+                    status,
+                    callback: (value) => resolve(value),
+                });
+            });
+        },
+    },
+});
+export default global['__wxComponents']['vant/dropdown-item/index']
+</script>
+<style platform="mp-weixin">
+@import '../common/index.css';.van-dropdown-item{left:0;overflow:hidden;position:fixed;right:0}.van-dropdown-item__option{text-align:left}.van-dropdown-item__option--active .van-dropdown-item__icon,.van-dropdown-item__option--active .van-dropdown-item__title{color:var(--dropdown-menu-option-active-color,#ee0a24)}.van-dropdown-item--up{top:0}.van-dropdown-item--down{bottom:0}.van-dropdown-item__icon{display:block;line-height:inherit}
+</style>

Datei-Diff unterdrückt, da er zu groß ist
+ 139 - 0
wxcomponents/vant/dropdown-menu/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 42 - 0
wxcomponents/vant/empty/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 182 - 0
wxcomponents/vant/field/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 15 - 0
wxcomponents/vant/field/input.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 15 - 0
wxcomponents/vant/field/textarea.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 61 - 0
wxcomponents/vant/goods-action-button/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 48 - 0
wxcomponents/vant/goods-action-icon/index.vue


+ 29 - 0
wxcomponents/vant/goods-action/index.vue

@@ -0,0 +1,29 @@
+<template>
+<uni-shadow-root class="vant-goods-action-index"><view :class="'custom-class '+(utils.bem('goods-action', { safe: safeAreaInsetBottom }))">
+  <slot></slot>
+</view></uni-shadow-root>
+</template>
+<wxs src="../wxs/utils.wxs" module="utils"></wxs>
+<script>
+
+global['__wxRoute'] = 'vant/goods-action/index'
+import { VantComponent } from '../common/component';
+import { useChildren } from '../common/relation';
+VantComponent({
+    relation: useChildren('goods-action-button', function () {
+        this.children.forEach((item) => {
+            item.updateStyle();
+        });
+    }),
+    props: {
+        safeAreaInsetBottom: {
+            type: Boolean,
+            value: true,
+        },
+    },
+});
+export default global['__wxComponents']['vant/goods-action/index']
+</script>
+<style platform="mp-weixin">
+@import '../common/index.css';.van-goods-action{align-items:center;background-color:var(--goods-action-background-color,#fff);bottom:0;box-sizing:initial;display:flex;height:var(--goods-action-height,50px);left:0;position:fixed;right:0}.van-goods-action--safe{padding-bottom:env(safe-area-inset-bottom)}
+</style>

Datei-Diff unterdrückt, da er zu groß ist
+ 82 - 0
wxcomponents/vant/grid-item/index.vue


+ 69 - 0
wxcomponents/vant/grid/index.vue

@@ -0,0 +1,69 @@
+<template>
+<uni-shadow-root class="vant-grid-index"><view :class="'van-grid custom-class '+(border && !gutter ? 'van-hairline--top' : '')" :style="computed.rootStyle({ gutter })">
+  <slot></slot>
+</view></uni-shadow-root>
+</template>
+<wxs src="./index.wxs" module="computed"></wxs>
+<script>
+
+global['__wxRoute'] = 'vant/grid/index'
+import { VantComponent } from '../common/component';
+import { useChildren } from '../common/relation';
+VantComponent({
+    relation: useChildren('grid-item'),
+    props: {
+        square: {
+            type: Boolean,
+            observer: 'updateChildren',
+        },
+        gutter: {
+            type: null,
+            value: 0,
+            observer: 'updateChildren',
+        },
+        clickable: {
+            type: Boolean,
+            observer: 'updateChildren',
+        },
+        columnNum: {
+            type: Number,
+            value: 4,
+            observer: 'updateChildren',
+        },
+        center: {
+            type: Boolean,
+            value: true,
+            observer: 'updateChildren',
+        },
+        border: {
+            type: Boolean,
+            value: true,
+            observer: 'updateChildren',
+        },
+        direction: {
+            type: String,
+            observer: 'updateChildren',
+        },
+        iconSize: {
+            type: String,
+            observer: 'updateChildren',
+        },
+        reverse: {
+            type: Boolean,
+            value: false,
+            observer: 'updateChildren',
+        },
+    },
+    methods: {
+        updateChildren() {
+            this.children.forEach((child) => {
+                child.updateStyle();
+            });
+        },
+    },
+});
+export default global['__wxComponents']['vant/grid/index']
+</script>
+<style platform="mp-weixin">
+@import '../common/index.css';.van-grid{box-sizing:border-box;overflow:hidden;position:relative}
+</style>

Datei-Diff unterdrückt, da er zu groß ist
+ 38 - 0
wxcomponents/vant/icon/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 90 - 0
wxcomponents/vant/image/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 44 - 0
wxcomponents/vant/index-anchor/index.vue


+ 266 - 0
wxcomponents/vant/index-bar/index.vue

@@ -0,0 +1,266 @@
+<template>
+<uni-shadow-root class="vant-index-bar-index"><view class="van-index-bar">
+  <slot></slot>
+
+  <view v-if="showSidebar" class="van-index-bar__sidebar" @click.stop.prevent="onClick" @touchmove.stop.prevent="onTouchMove" @touchend.stop.prevent="onTouchStop" @touchcancel.stop.prevent="onTouchStop">
+    <view v-for="(item,index) in (indexList)" :key="item.index" class="van-index-bar__index" :style="'z-index: '+(zIndex + 1)+'; color: '+(activeAnchorIndex === index ? highlightColor : '')" :data-index="index">
+      {{ item }}
+    </view>
+  </view>
+</view></uni-shadow-root>
+</template>
+
+<script>
+
+global['__wxRoute'] = 'vant/index-bar/index'
+import { GREEN } from '../common/color';
+import { VantComponent } from '../common/component';
+import { useChildren } from '../common/relation';
+import { getRect, isDef } from '../common/utils';
+import { pageScrollMixin } from '../mixins/page-scroll';
+const indexList = () => {
+    const indexList = [];
+    const charCodeOfA = 'A'.charCodeAt(0);
+    for (let i = 0; i < 26; i++) {
+        indexList.push(String.fromCharCode(charCodeOfA + i));
+    }
+    return indexList;
+};
+VantComponent({
+    relation: useChildren('index-anchor', function () {
+        this.updateData();
+    }),
+    props: {
+        sticky: {
+            type: Boolean,
+            value: true,
+        },
+        zIndex: {
+            type: Number,
+            value: 1,
+        },
+        highlightColor: {
+            type: String,
+            value: GREEN,
+        },
+        stickyOffsetTop: {
+            type: Number,
+            value: 0,
+        },
+        indexList: {
+            type: Array,
+            value: indexList(),
+        },
+    },
+    mixins: [
+        pageScrollMixin(function (event) {
+            this.scrollTop = (event === null || event === void 0 ? void 0 : event.scrollTop) || 0;
+            this.onScroll();
+        }),
+    ],
+    data: {
+        activeAnchorIndex: null,
+        showSidebar: false,
+    },
+    created() {
+        this.scrollTop = 0;
+    },
+    methods: {
+        updateData() {
+            wx.nextTick(() => {
+                if (this.timer != null) {
+                    clearTimeout(this.timer);
+                }
+                this.timer = setTimeout(() => {
+                    this.setData({
+                        showSidebar: !!this.children.length,
+                    });
+                    this.setRect().then(() => {
+                        this.onScroll();
+                    });
+                }, 0);
+            });
+        },
+        setRect() {
+            return Promise.all([
+                this.setAnchorsRect(),
+                this.setListRect(),
+                this.setSiderbarRect(),
+            ]);
+        },
+        setAnchorsRect() {
+            return Promise.all(this.children.map((anchor) => getRect(anchor, '.van-index-anchor-wrapper').then((rect) => {
+                Object.assign(anchor, {
+                    height: rect.height,
+                    top: rect.top + this.scrollTop,
+                });
+            })));
+        },
+        setListRect() {
+            return getRect(this, '.van-index-bar').then((rect) => {
+                if (!isDef(rect)) {
+                    return;
+                }
+                Object.assign(this, {
+                    height: rect.height,
+                    top: rect.top + this.scrollTop,
+                });
+            });
+        },
+        setSiderbarRect() {
+            return getRect(this, '.van-index-bar__sidebar').then((res) => {
+                if (!isDef(res)) {
+                    return;
+                }
+                this.sidebar = {
+                    height: res.height,
+                    top: res.top,
+                };
+            });
+        },
+        setDiffData({ target, data }) {
+            const diffData = {};
+            Object.keys(data).forEach((key) => {
+                if (target.data[key] !== data[key]) {
+                    diffData[key] = data[key];
+                }
+            });
+            if (Object.keys(diffData).length) {
+                target.setData(diffData);
+            }
+        },
+        getAnchorRect(anchor) {
+            return getRect(anchor, '.van-index-anchor-wrapper').then((rect) => ({
+                height: rect.height,
+                top: rect.top,
+            }));
+        },
+        getActiveAnchorIndex() {
+            const { children, scrollTop } = this;
+            const { sticky, stickyOffsetTop } = this.data;
+            for (let i = this.children.length - 1; i >= 0; i--) {
+                const preAnchorHeight = i > 0 ? children[i - 1].height : 0;
+                const reachTop = sticky ? preAnchorHeight + stickyOffsetTop : 0;
+                if (reachTop + scrollTop >= children[i].top) {
+                    return i;
+                }
+            }
+            return -1;
+        },
+        onScroll() {
+            const { children = [], scrollTop } = this;
+            if (!children.length) {
+                return;
+            }
+            const { sticky, stickyOffsetTop, zIndex, highlightColor } = this.data;
+            const active = this.getActiveAnchorIndex();
+            this.setDiffData({
+                target: this,
+                data: {
+                    activeAnchorIndex: active,
+                },
+            });
+            if (sticky) {
+                let isActiveAnchorSticky = false;
+                if (active !== -1) {
+                    isActiveAnchorSticky =
+                        children[active].top <= stickyOffsetTop + scrollTop;
+                }
+                children.forEach((item, index) => {
+                    if (index === active) {
+                        let wrapperStyle = '';
+                        let anchorStyle = `
+              color: ${highlightColor};
+            `;
+                        if (isActiveAnchorSticky) {
+                            wrapperStyle = `
+                height: ${children[index].height}px;
+              `;
+                            anchorStyle = `
+                position: fixed;
+                top: ${stickyOffsetTop}px;
+                z-index: ${zIndex};
+                color: ${highlightColor};
+              `;
+                        }
+                        this.setDiffData({
+                            target: item,
+                            data: {
+                                active: true,
+                                anchorStyle,
+                                wrapperStyle,
+                            },
+                        });
+                    }
+                    else if (index === active - 1) {
+                        const currentAnchor = children[index];
+                        const currentOffsetTop = currentAnchor.top;
+                        const targetOffsetTop = index === children.length - 1
+                            ? this.top
+                            : children[index + 1].top;
+                        const parentOffsetHeight = targetOffsetTop - currentOffsetTop;
+                        const translateY = parentOffsetHeight - currentAnchor.height;
+                        const anchorStyle = `
+              position: relative;
+              transform: translate3d(0, ${translateY}px, 0);
+              z-index: ${zIndex};
+              color: ${highlightColor};
+            `;
+                        this.setDiffData({
+                            target: item,
+                            data: {
+                                active: true,
+                                anchorStyle,
+                            },
+                        });
+                    }
+                    else {
+                        this.setDiffData({
+                            target: item,
+                            data: {
+                                active: false,
+                                anchorStyle: '',
+                                wrapperStyle: '',
+                            },
+                        });
+                    }
+                });
+            }
+        },
+        onClick(event) {
+            this.scrollToAnchor(event.target.dataset.index);
+        },
+        onTouchMove(event) {
+            const sidebarLength = this.children.length;
+            const touch = event.touches[0];
+            const itemHeight = this.sidebar.height / sidebarLength;
+            let index = Math.floor((touch.clientY - this.sidebar.top) / itemHeight);
+            if (index < 0) {
+                index = 0;
+            }
+            else if (index > sidebarLength - 1) {
+                index = sidebarLength - 1;
+            }
+            this.scrollToAnchor(index);
+        },
+        onTouchStop() {
+            this.scrollToAnchorIndex = null;
+        },
+        scrollToAnchor(index) {
+            if (typeof index !== 'number' || this.scrollToAnchorIndex === index) {
+                return;
+            }
+            this.scrollToAnchorIndex = index;
+            const anchor = this.children.find((item) => item.data.index === this.data.indexList[index]);
+            if (anchor) {
+                anchor.scrollIntoView(this.scrollTop);
+                this.$emit('select', anchor.data.index);
+            }
+        },
+    },
+});
+export default global['__wxComponents']['vant/index-bar/index']
+</script>
+<style platform="mp-weixin">
+@import '../common/index.css';.van-index-bar{position:relative}.van-index-bar__sidebar{display:flex;flex-direction:column;position:fixed;right:0;text-align:center;top:50%;transform:translateY(-50%);-webkit-user-select:none;user-select:none}.van-index-bar__index{font-size:var(--index-bar-index-font-size,10px);font-weight:500;line-height:var(--index-bar-index-line-height,14px);padding:0 var(--padding-base,4px) 0 var(--padding-md,16px)}
+</style>

Datei-Diff unterdrückt, da er zu groß ist
+ 20 - 0
wxcomponents/vant/info/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 35 - 0
wxcomponents/vant/loading/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 99 - 0
wxcomponents/vant/nav-bar/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 150 - 0
wxcomponents/vant/notice-bar/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 84 - 0
wxcomponents/vant/notify/index.vue


+ 52 - 0
wxcomponents/vant/overlay/index.vue

@@ -0,0 +1,52 @@
+<template>
+<uni-shadow-root class="vant-overlay-index"><root-portal v-if="rootPortal">
+  <include src="./overlay.wxml"></include>
+</root-portal>
+
+<include v-else src="./overlay.wxml"></include></uni-shadow-root>
+</template>
+
+<script>
+
+const __wxTemplateComponentProps = {}
+import __wxTemplateComponent0 from './overlay.vue'
+
+import VanTransition from '../transition/index.vue'
+global['__wxVueOptions'] = {components:{'van-transition': VanTransition,}}
+
+global['__wxRoute'] = 'vant/overlay/index'
+import { VantComponent } from '../common/component';
+VantComponent({
+    props: {
+        show: Boolean,
+        customStyle: String,
+        duration: {
+            type: null,
+            value: 300,
+        },
+        zIndex: {
+            type: Number,
+            value: 1,
+        },
+        lockScroll: {
+            type: Boolean,
+            value: true,
+        },
+        rootPortal: {
+            type: Boolean,
+            value: false,
+        },
+    },
+    methods: {
+        onClick() {
+            this.$emit('click');
+        },
+        // for prevent touchmove
+        noop() { },
+    },
+});
+export default global['__wxComponents']['vant/overlay/index']
+</script>
+<style platform="mp-weixin">
+@import '../common/index.css';.van-overlay{background-color:var(--overlay-background-color,rgba(0,0,0,.7));height:100%;left:0;position:fixed;top:0;width:100%}
+</style>

+ 34 - 0
wxcomponents/vant/panel/index.vue

@@ -0,0 +1,34 @@
+<template>
+<uni-shadow-root class="vant-panel-index"><view class="van-panel van-hairline--top-bottom custom-class">
+  <van-cell v-if="title || desc || status" :title="title" :label="desc" :value="status" custom-class="header-class" value-class="van-panel__header-value"></van-cell>
+  <slot v-else name="header"></slot>
+
+  <view class="van-panel__content">
+    <slot></slot>
+  </view>
+
+  <view class="van-panel__footer van-hairline--top footer-class">
+    <slot name="footer"></slot>
+  </view>
+</view></uni-shadow-root>
+</template>
+
+<script>
+import VanCell from '../cell/index.vue'
+global['__wxVueOptions'] = {components:{'van-cell': VanCell}}
+
+global['__wxRoute'] = 'vant/panel/index'
+import { VantComponent } from '../common/component';
+VantComponent({
+    classes: ['header-class', 'footer-class'],
+    props: {
+        desc: String,
+        title: String,
+        status: String,
+    },
+});
+export default global['__wxComponents']['vant/panel/index']
+</script>
+<style platform="mp-weixin">
+@import '../common/index.css';.van-panel{background:var(--panel-background-color,#fff)}.van-panel__header-value{color:var(--panel-header-value-color,#ee0a24)}.van-panel__footer{padding:var(--panel-footer-padding,8px 16px)}.van-panel__footer:empty{display:none}
+</style>

+ 134 - 0
wxcomponents/vant/picker-column/index.vue

@@ -0,0 +1,134 @@
+<template>
+<uni-shadow-root class="vant-picker-column-index"><view class="van-picker-column custom-class" :style="computed.rootStyle({ itemHeight, visibleItemCount })" @touchstart="onTouchStart" @touchmove.stop.prevent="onTouchMove" @touchend="onTouchEnd" @touchcancel="onTouchEnd">
+  <view :style="computed.wrapperStyle({ offset, itemHeight, visibleItemCount, duration })">
+    <view v-for="(option,index) in (options)" :key="option.index" :data-index="index" :style="'height: '+(itemHeight)+'px'" :class="'van-ellipsis '+(utils.bem('picker-column__item', { disabled: option && option.disabled, selected: index === currentIndex }))+' '+(index === currentIndex ? 'active-class' : '')" @click="onClickItem">{{ computed.optionText(option, valueKey) }}</view>
+  </view>
+</view></uni-shadow-root>
+</template>
+<wxs src="../wxs/utils.wxs" module="utils"></wxs><wxs src="./index.wxs" module="computed"></wxs>
+<script>
+
+global['__wxRoute'] = 'vant/picker-column/index'
+import { VantComponent } from '../common/component';
+import { range } from '../common/utils';
+import { isObj } from '../common/validator';
+const DEFAULT_DURATION = 200;
+VantComponent({
+    classes: ['active-class'],
+    props: {
+        valueKey: String,
+        className: String,
+        itemHeight: Number,
+        visibleItemCount: Number,
+        initialOptions: {
+            type: Array,
+            value: [],
+        },
+        defaultIndex: {
+            type: Number,
+            value: 0,
+            observer(value) {
+                this.setIndex(value);
+            },
+        },
+    },
+    data: {
+        startY: 0,
+        offset: 0,
+        duration: 0,
+        startOffset: 0,
+        options: [],
+        currentIndex: 0,
+    },
+    created() {
+        const { defaultIndex, initialOptions } = this.data;
+        this.set({
+            currentIndex: defaultIndex,
+            options: initialOptions,
+        }).then(() => {
+            this.setIndex(defaultIndex);
+        });
+    },
+    methods: {
+        getCount() {
+            return this.data.options.length;
+        },
+        onTouchStart(event) {
+            this.setData({
+                startY: event.touches[0].clientY,
+                startOffset: this.data.offset,
+                duration: 0,
+            });
+        },
+        onTouchMove(event) {
+            const { data } = this;
+            const deltaY = event.touches[0].clientY - data.startY;
+            this.setData({
+                offset: range(data.startOffset + deltaY, -(this.getCount() * data.itemHeight), data.itemHeight),
+            });
+        },
+        onTouchEnd() {
+            const { data } = this;
+            if (data.offset !== data.startOffset) {
+                this.setData({ duration: DEFAULT_DURATION });
+                const index = range(Math.round(-data.offset / data.itemHeight), 0, this.getCount() - 1);
+                this.setIndex(index, true);
+            }
+        },
+        onClickItem(event) {
+            const { index } = event.currentTarget.dataset;
+            this.setIndex(index, true);
+        },
+        adjustIndex(index) {
+            const { data } = this;
+            const count = this.getCount();
+            index = range(index, 0, count);
+            for (let i = index; i < count; i++) {
+                if (!this.isDisabled(data.options[i]))
+                    return i;
+            }
+            for (let i = index - 1; i >= 0; i--) {
+                if (!this.isDisabled(data.options[i]))
+                    return i;
+            }
+        },
+        isDisabled(option) {
+            return isObj(option) && option.disabled;
+        },
+        getOptionText(option) {
+            const { data } = this;
+            return isObj(option) && data.valueKey in option
+                ? option[data.valueKey]
+                : option;
+        },
+        setIndex(index, userAction) {
+            const { data } = this;
+            index = this.adjustIndex(index) || 0;
+            const offset = -index * data.itemHeight;
+            if (index !== data.currentIndex) {
+                return this.set({ offset, currentIndex: index }).then(() => {
+                    userAction && this.$emit('change', index);
+                });
+            }
+            return this.set({ offset });
+        },
+        setValue(value) {
+            const { options } = this.data;
+            for (let i = 0; i < options.length; i++) {
+                if (this.getOptionText(options[i]) === value) {
+                    return this.setIndex(i);
+                }
+            }
+            return Promise.resolve();
+        },
+        getValue() {
+            const { data } = this;
+            return data.options[data.currentIndex];
+        },
+    },
+});
+export default global['__wxComponents']['vant/picker-column/index']
+</script>
+<style platform="mp-weixin">
+@import '../common/index.css';.van-picker-column{color:var(--picker-option-text-color,#000);font-size:var(--picker-option-font-size,16px);overflow:hidden;text-align:center}.van-picker-column__item{padding:0 5px}.van-picker-column__item--selected{color:var(--picker-option-selected-text-color,#323233);font-weight:var(--font-weight-bold,500)}.van-picker-column__item--disabled{opacity:var(--picker-option-disabled-opacity,.3)}
+</style>

Datei-Diff unterdrückt, da er zu groß ist
+ 165 - 0
wxcomponents/vant/picker/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 122 - 0
wxcomponents/vant/popup/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 69 - 0
wxcomponents/vant/progress/index.vue


+ 36 - 0
wxcomponents/vant/radio-group/index.vue

@@ -0,0 +1,36 @@
+<template>
+<uni-shadow-root class="vant-radio-group-index"><view :class="utils.bem('radio-group', [direction])">
+  <slot></slot>
+</view></uni-shadow-root>
+</template>
+<wxs src="../wxs/utils.wxs" module="utils"></wxs>
+<script>
+
+global['__wxRoute'] = 'vant/radio-group/index'
+import { VantComponent } from '../common/component';
+import { useChildren } from '../common/relation';
+VantComponent({
+    field: true,
+    relation: useChildren('radio'),
+    props: {
+        value: {
+            type: null,
+            observer: 'updateChildren',
+        },
+        direction: String,
+        disabled: {
+            type: Boolean,
+            observer: 'updateChildren',
+        },
+    },
+    methods: {
+        updateChildren() {
+            this.children.forEach((child) => child.updateFromParent());
+        },
+    },
+});
+export default global['__wxComponents']['vant/radio-group/index']
+</script>
+<style platform="mp-weixin">
+@import '../common/index.css';.van-radio-group--horizontal{display:flex;flex-wrap:wrap}
+</style>

Datei-Diff unterdrückt, da er zu groß ist
+ 91 - 0
wxcomponents/vant/radio/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 98 - 0
wxcomponents/vant/rate/index.vue


+ 37 - 0
wxcomponents/vant/row/index.vue

@@ -0,0 +1,37 @@
+<template>
+<uni-shadow-root class="vant-row-index"><view class="van-row custom-class" :style="computed.rootStyle({ gutter })">
+  <slot></slot>
+</view></uni-shadow-root>
+</template>
+<wxs src="./index.wxs" module="computed"></wxs>
+<script>
+
+global['__wxRoute'] = 'vant/row/index'
+import { VantComponent } from '../common/component';
+import { useChildren } from '../common/relation';
+VantComponent({
+    relation: useChildren('col', function (target) {
+        const { gutter } = this.data;
+        if (gutter) {
+            target.setData({ gutter });
+        }
+    }),
+    props: {
+        gutter: {
+            type: Number,
+            observer: 'setGutter',
+        },
+    },
+    methods: {
+        setGutter() {
+            this.children.forEach((col) => {
+                col.setData(this.data);
+            });
+        },
+    },
+});
+export default global['__wxComponents']['vant/row/index']
+</script>
+<style platform="mp-weixin">
+@import '../common/index.css';.van-row:after{clear:both;content:"";display:table}
+</style>

Datei-Diff unterdrückt, da er zu groß ist
+ 126 - 0
wxcomponents/vant/search/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 98 - 0
wxcomponents/vant/share-sheet/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 36 - 0
wxcomponents/vant/share-sheet/options.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 49 - 0
wxcomponents/vant/sidebar-item/index.vue


+ 48 - 0
wxcomponents/vant/sidebar/index.vue

@@ -0,0 +1,48 @@
+<template>
+<uni-shadow-root class="vant-sidebar-index"><view class="van-sidebar custom-class">
+  <slot></slot>
+</view></uni-shadow-root>
+</template>
+
+<script>
+
+global['__wxRoute'] = 'vant/sidebar/index'
+import { VantComponent } from '../common/component';
+import { useChildren } from '../common/relation';
+VantComponent({
+    relation: useChildren('sidebar-item', function () {
+        this.setActive(this.data.activeKey);
+    }),
+    props: {
+        activeKey: {
+            type: Number,
+            value: 0,
+            observer: 'setActive',
+        },
+    },
+    beforeCreate() {
+        this.currentActive = -1;
+    },
+    methods: {
+        setActive(activeKey) {
+            const { children, currentActive } = this;
+            if (!children.length) {
+                return Promise.resolve();
+            }
+            this.currentActive = activeKey;
+            const stack = [];
+            if (currentActive !== activeKey && children[currentActive]) {
+                stack.push(children[currentActive].setActive(false));
+            }
+            if (children[activeKey]) {
+                stack.push(children[activeKey].setActive(true));
+            }
+            return Promise.all(stack);
+        },
+    },
+});
+export default global['__wxComponents']['vant/sidebar/index']
+</script>
+<style platform="mp-weixin">
+@import '../common/index.css';.van-sidebar{width:var(--sidebar-width,80px)}
+</style>

Datei-Diff unterdrückt, da er zu groß ist
+ 69 - 0
wxcomponents/vant/skeleton/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 235 - 0
wxcomponents/vant/slider/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 203 - 0
wxcomponents/vant/stepper/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 65 - 0
wxcomponents/vant/steps/index.vue


+ 136 - 0
wxcomponents/vant/sticky/index.vue

@@ -0,0 +1,136 @@
+<template>
+<uni-shadow-root class="vant-sticky-index"><view class="custom-class van-sticky" :style="computed.containerStyle({ fixed, height, zIndex })">
+  <view :class="utils.bem('sticky-wrap', { fixed })" :style="computed.wrapStyle({ fixed, offsetTop, transform, zIndex })">
+    <slot></slot>
+  </view>
+</view></uni-shadow-root>
+</template>
+<wxs src="../wxs/utils.wxs" module="utils"></wxs><wxs src="./index.wxs" module="computed"></wxs>
+<script>
+
+global['__wxRoute'] = 'vant/sticky/index'
+import { getRect } from '../common/utils';
+import { VantComponent } from '../common/component';
+import { isDef } from '../common/validator';
+import { pageScrollMixin } from '../mixins/page-scroll';
+const ROOT_ELEMENT = '.van-sticky';
+VantComponent({
+    props: {
+        zIndex: {
+            type: Number,
+            value: 99,
+        },
+        offsetTop: {
+            type: Number,
+            value: 0,
+            observer: 'onScroll',
+        },
+        disabled: {
+            type: Boolean,
+            observer: 'onScroll',
+        },
+        container: {
+            type: null,
+            observer: 'onScroll',
+        },
+        scrollTop: {
+            type: null,
+            observer(val) {
+                this.onScroll({ scrollTop: val });
+            },
+        },
+    },
+    mixins: [
+        pageScrollMixin(function (event) {
+            if (this.data.scrollTop != null) {
+                return;
+            }
+            this.onScroll(event);
+        }),
+    ],
+    data: {
+        height: 0,
+        fixed: false,
+        transform: 0,
+    },
+    mounted() {
+        this.onScroll();
+    },
+    methods: {
+        onScroll({ scrollTop } = {}) {
+            const { container, offsetTop, disabled } = this.data;
+            if (disabled) {
+                this.setDataAfterDiff({
+                    fixed: false,
+                    transform: 0,
+                });
+                return;
+            }
+            this.scrollTop = scrollTop || this.scrollTop;
+            if (typeof container === 'function') {
+                Promise.all([getRect(this, ROOT_ELEMENT), this.getContainerRect()])
+                    .then(([root, container]) => {
+                    if (offsetTop + root.height > container.height + container.top) {
+                        this.setDataAfterDiff({
+                            fixed: false,
+                            transform: container.height - root.height,
+                        });
+                    }
+                    else if (offsetTop >= root.top) {
+                        this.setDataAfterDiff({
+                            fixed: true,
+                            height: root.height,
+                            transform: 0,
+                        });
+                    }
+                    else {
+                        this.setDataAfterDiff({ fixed: false, transform: 0 });
+                    }
+                })
+                    .catch(() => { });
+                return;
+            }
+            getRect(this, ROOT_ELEMENT).then((root) => {
+                if (!isDef(root) || (!root.width && !root.height)) {
+                    return;
+                }
+                if (offsetTop >= root.top) {
+                    this.setDataAfterDiff({ fixed: true, height: root.height });
+                    this.transform = 0;
+                }
+                else {
+                    this.setDataAfterDiff({ fixed: false });
+                }
+            });
+        },
+        setDataAfterDiff(data) {
+            wx.nextTick(() => {
+                const diff = Object.keys(data).reduce((prev, key) => {
+                    if (data[key] !== this.data[key]) {
+                        prev[key] = data[key];
+                    }
+                    return prev;
+                }, {});
+                if (Object.keys(diff).length > 0) {
+                    this.setData(diff);
+                }
+                this.$emit('scroll', {
+                    scrollTop: this.scrollTop,
+                    isFixed: data.fixed || this.data.fixed,
+                });
+            });
+        },
+        getContainerRect() {
+            const nodesRef = this.data.container();
+            if (!nodesRef) {
+                return Promise.reject(new Error('not found container'));
+            }
+            return new Promise((resolve) => nodesRef.boundingClientRect(resolve).exec());
+        },
+    },
+});
+export default global['__wxComponents']['vant/sticky/index']
+</script>
+<style platform="mp-weixin">
+@import '../common/index.css';.van-sticky{position:relative}.van-sticky-wrap--fixed{left:0;position:fixed;right:0}
+</style>

Datei-Diff unterdrückt, da er zu groß ist
+ 98 - 0
wxcomponents/vant/submit-bar/index.vue


+ 155 - 0
wxcomponents/vant/swipe-cell/index.vue

@@ -0,0 +1,155 @@
+<template>
+<uni-shadow-root class="vant-swipe-cell-index"><view class="van-swipe-cell custom-class" data-key="cell" @click.stop.prevent="onClick" @touchstart="startDrag" @touchmove.stop.prevent="_$self[(catchMove ? 'noop' : '')||'_$noop']($event)" @touchmove.capture="onDrag" @touchend="endDrag" @touchcancel="endDrag">
+  <view :style="wrapperStyle">
+    <view v-if="leftWidth" class="van-swipe-cell__left" data-key="left" @click.stop.prevent="onClick">
+      <slot name="left"></slot>
+    </view>
+    <slot></slot>
+    <view v-if="rightWidth" class="van-swipe-cell__right" data-key="right" @click.stop.prevent="onClick">
+      <slot name="right"></slot>
+    </view>
+  </view>
+</view></uni-shadow-root>
+</template>
+
+<script>
+
+global['__wxRoute'] = 'vant/swipe-cell/index'
+import { VantComponent } from '../common/component';
+import { touch } from '../mixins/touch';
+import { range } from '../common/utils';
+const THRESHOLD = 0.3;
+let ARRAY = [];
+VantComponent({
+    props: {
+        disabled: Boolean,
+        leftWidth: {
+            type: Number,
+            value: 0,
+            observer(leftWidth = 0) {
+                if (this.offset > 0) {
+                    this.swipeMove(leftWidth);
+                }
+            },
+        },
+        rightWidth: {
+            type: Number,
+            value: 0,
+            observer(rightWidth = 0) {
+                if (this.offset < 0) {
+                    this.swipeMove(-rightWidth);
+                }
+            },
+        },
+        asyncClose: Boolean,
+        name: {
+            type: null,
+            value: '',
+        },
+    },
+    mixins: [touch],
+    data: {
+        catchMove: false,
+        wrapperStyle: '',
+    },
+    created() {
+        this.offset = 0;
+        ARRAY.push(this);
+    },
+    destroyed() {
+        ARRAY = ARRAY.filter((item) => item !== this);
+    },
+    methods: {
+        open(position) {
+            const { leftWidth, rightWidth } = this.data;
+            const offset = position === 'left' ? leftWidth : -rightWidth;
+            this.swipeMove(offset);
+            this.$emit('open', {
+                position,
+                name: this.data.name,
+            });
+        },
+        close() {
+            this.swipeMove(0);
+        },
+        swipeMove(offset = 0) {
+            this.offset = range(offset, -this.data.rightWidth, this.data.leftWidth);
+            const transform = `translate3d(${this.offset}px, 0, 0)`;
+            const transition = this.dragging
+                ? 'none'
+                : 'transform .6s cubic-bezier(0.18, 0.89, 0.32, 1)';
+            this.setData({
+                wrapperStyle: `
+        -webkit-transform: ${transform};
+        -webkit-transition: ${transition};
+        transform: ${transform};
+        transition: ${transition};
+      `,
+            });
+        },
+        swipeLeaveTransition() {
+            const { leftWidth, rightWidth } = this.data;
+            const { offset } = this;
+            if (rightWidth > 0 && -offset > rightWidth * THRESHOLD) {
+                this.open('right');
+            }
+            else if (leftWidth > 0 && offset > leftWidth * THRESHOLD) {
+                this.open('left');
+            }
+            else {
+                this.swipeMove(0);
+            }
+            this.setData({ catchMove: false });
+        },
+        startDrag(event) {
+            if (this.data.disabled) {
+                return;
+            }
+            this.startOffset = this.offset;
+            this.touchStart(event);
+        },
+        noop() { },
+        onDrag(event) {
+            if (this.data.disabled) {
+                return;
+            }
+            this.touchMove(event);
+            if (this.direction !== 'horizontal') {
+                return;
+            }
+            this.dragging = true;
+            ARRAY.filter((item) => item !== this && item.offset !== 0).forEach((item) => item.close());
+            this.setData({ catchMove: true });
+            this.swipeMove(this.startOffset + this.deltaX);
+        },
+        endDrag() {
+            if (this.data.disabled) {
+                return;
+            }
+            this.dragging = false;
+            this.swipeLeaveTransition();
+        },
+        onClick(event) {
+            const { key: position = 'outside' } = event.currentTarget.dataset;
+            this.$emit('click', position);
+            if (!this.offset) {
+                return;
+            }
+            if (this.data.asyncClose) {
+                this.$emit('close', {
+                    position,
+                    instance: this,
+                    name: this.data.name,
+                });
+            }
+            else {
+                this.swipeMove(0);
+            }
+        },
+    },
+});
+export default global['__wxComponents']['vant/swipe-cell/index']
+</script>
+<style platform="mp-weixin">
+@import '../common/index.css';.van-swipe-cell{overflow:hidden;position:relative}.van-swipe-cell__left,.van-swipe-cell__right{height:100%;position:absolute;top:0}.van-swipe-cell__left{left:0;transform:translate3d(-100%,0,0)}.van-swipe-cell__right{right:0;transform:translate3d(100%,0,0)}
+</style>

Datei-Diff unterdrückt, da er zu groß ist
+ 54 - 0
wxcomponents/vant/switch/index.vue


+ 70 - 0
wxcomponents/vant/tab/index.vue

@@ -0,0 +1,70 @@
+<template>
+<uni-shadow-root class="vant-tab-index"><view :class="'custom-class '+(utils.bem('tab__pane', { active, inactive: !active }))" :style="shouldShow ? '' : 'display: none;'">
+  <slot v-if="shouldRender"></slot>
+</view></uni-shadow-root>
+</template>
+<wxs src="../wxs/utils.wxs" module="utils"></wxs>
+<script>
+
+global['__wxRoute'] = 'vant/tab/index'
+import { useParent } from '../common/relation';
+import { VantComponent } from '../common/component';
+VantComponent({
+    relation: useParent('tabs'),
+    props: {
+        dot: {
+            type: Boolean,
+            observer: 'update',
+        },
+        info: {
+            type: null,
+            observer: 'update',
+        },
+        title: {
+            type: String,
+            observer: 'update',
+        },
+        disabled: {
+            type: Boolean,
+            observer: 'update',
+        },
+        titleStyle: {
+            type: String,
+            observer: 'update',
+        },
+        name: {
+            type: null,
+            value: '',
+        },
+    },
+    data: {
+        active: false,
+    },
+    methods: {
+        getComputedName() {
+            if (this.data.name !== '') {
+                return this.data.name;
+            }
+            return this.index;
+        },
+        updateRender(active, parent) {
+            const { data: parentData } = parent;
+            this.inited = this.inited || active;
+            this.setData({
+                active,
+                shouldRender: this.inited || !parentData.lazyRender,
+                shouldShow: active || parentData.animated,
+            });
+        },
+        update() {
+            if (this.parent) {
+                this.parent.updateTabs();
+            }
+        },
+    },
+});
+export default global['__wxComponents']['vant/tab/index']
+</script>
+<style platform="mp-weixin">
+@import '../common/index.css';.vant-tab-index{box-sizing:border-box;flex-shrink:0;width:100%}.van-tab__pane{-webkit-overflow-scrolling:touch;box-sizing:border-box;overflow-y:auto}.van-tab__pane--active{height:auto}.van-tab__pane--inactive{height:0;overflow:visible}
+</style>

Datei-Diff unterdrückt, da er zu groß ist
+ 95 - 0
wxcomponents/vant/tabbar-item/index.vue


+ 81 - 0
wxcomponents/vant/tabbar/index.vue

@@ -0,0 +1,81 @@
+<template>
+<uni-shadow-root class="vant-tabbar-index"><view :class="(border ? 'van-hairline--top-bottom' : '')+' '+(utils.bem('tabbar', { fixed, safe: safeAreaInsetBottom }))+' custom-class'" :style="zIndex ? 'z-index: ' + zIndex : ''">
+  <slot></slot>
+</view>
+
+<view v-if="fixed && placeholder" :style="'height: '+(height)+'px;'"></view></uni-shadow-root>
+</template>
+<wxs src="../wxs/utils.wxs" module="utils"></wxs>
+<script>
+
+global['__wxRoute'] = 'vant/tabbar/index'
+import { VantComponent } from '../common/component';
+import { useChildren } from '../common/relation';
+import { getRect } from '../common/utils';
+VantComponent({
+    relation: useChildren('tabbar-item', function () {
+        this.updateChildren();
+    }),
+    props: {
+        active: {
+            type: null,
+            observer: 'updateChildren',
+        },
+        activeColor: {
+            type: String,
+            observer: 'updateChildren',
+        },
+        inactiveColor: {
+            type: String,
+            observer: 'updateChildren',
+        },
+        fixed: {
+            type: Boolean,
+            value: true,
+            observer: 'setHeight',
+        },
+        placeholder: {
+            type: Boolean,
+            observer: 'setHeight',
+        },
+        border: {
+            type: Boolean,
+            value: true,
+        },
+        zIndex: {
+            type: Number,
+            value: 1,
+        },
+        safeAreaInsetBottom: {
+            type: Boolean,
+            value: true,
+        },
+    },
+    data: {
+        height: 50,
+    },
+    methods: {
+        updateChildren() {
+            const { children } = this;
+            if (!Array.isArray(children) || !children.length) {
+                return;
+            }
+            children.forEach((child) => child.updateFromParent());
+        },
+        setHeight() {
+            if (!this.data.fixed || !this.data.placeholder) {
+                return;
+            }
+            wx.nextTick(() => {
+                getRect(this, '.van-tabbar').then((res) => {
+                    this.setData({ height: res.height });
+                });
+            });
+        },
+    },
+});
+export default global['__wxComponents']['vant/tabbar/index']
+</script>
+<style platform="mp-weixin">
+@import '../common/index.css';.van-tabbar{background-color:var(--tabbar-background-color,#fff);box-sizing:initial;display:flex;height:var(--tabbar-height,50px);width:100%}.van-tabbar--fixed{bottom:0;left:0;position:fixed}.van-tabbar--safe{padding-bottom:env(safe-area-inset-bottom)}
+</style>

Datei-Diff unterdrückt, da er zu groß ist
+ 343 - 0
wxcomponents/vant/tabs/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 38 - 0
wxcomponents/vant/tag/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 64 - 0
wxcomponents/vant/toast/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 27 - 0
wxcomponents/vant/transition/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 97 - 0
wxcomponents/vant/tree-select/index.vue


Datei-Diff unterdrückt, da er zu groß ist
+ 217 - 0
wxcomponents/vant/uploader/index.vue