浏览代码

版本更新

liuguofeng 6 月之前
父节点
当前提交
c0485cac5d
共有 26 个文件被更改,包括 1227 次插入125 次删除
  1. 1 1
      jiaoyu_mp/pages.json
  2. 2 3
      jiaoyu_mp/pages/index/index.vue
  3. 7 7
      jiaoyu_mp/pagesA/course/reservation.vue
  4. 51 4
      jiaoyu_mp/pagesA/search/index.vue
  5. 47 0
      jiaoyu_mp/uni_modules/uni-search-bar/changelog.md
  6. 4 0
      jiaoyu_mp/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json
  7. 8 0
      jiaoyu_mp/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js
  8. 4 0
      jiaoyu_mp/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json
  9. 4 0
      jiaoyu_mp/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json
  10. 309 0
      jiaoyu_mp/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue
  11. 87 0
      jiaoyu_mp/uni_modules/uni-search-bar/package.json
  12. 14 0
      jiaoyu_mp/uni_modules/uni-search-bar/readme.md
  13. 322 79
      jiaoyu_mp/unpackage/dist/dev/mp-weixin/common/vendor.js
  14. 1 1
      jiaoyu_mp/unpackage/dist/dev/mp-weixin/pages/index/index.wxml
  15. 0 0
      jiaoyu_mp/unpackage/dist/dev/mp-weixin/pagesA/course/reservation.wxml
  16. 7 7
      jiaoyu_mp/unpackage/dist/dev/mp-weixin/pagesA/course/reservation.wxss
  17. 8 18
      jiaoyu_mp/unpackage/dist/dev/mp-weixin/pagesA/search/index.js
  18. 1 0
      jiaoyu_mp/unpackage/dist/dev/mp-weixin/pagesA/search/index.json
  19. 1 1
      jiaoyu_mp/unpackage/dist/dev/mp-weixin/pagesA/search/index.wxml
  20. 45 0
      jiaoyu_mp/unpackage/dist/dev/mp-weixin/pagesA/search/index.wxss
  21. 4 4
      jiaoyu_mp/unpackage/dist/dev/mp-weixin/project.private.config.json
  22. 19 0
      jiaoyu_mp/unpackage/dist/dev/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js
  23. 198 0
      jiaoyu_mp/unpackage/dist/dev/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.js
  24. 6 0
      jiaoyu_mp/unpackage/dist/dev/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.json
  25. 1 0
      jiaoyu_mp/unpackage/dist/dev/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.wxml
  26. 76 0
      jiaoyu_mp/unpackage/dist/dev/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.wxss

+ 1 - 1
jiaoyu_mp/pages.json

@@ -246,7 +246,7 @@
 			"iconPath": "static/tabbar/score.png",
 			"selectedIconPath": "static/tabbar/score_active.png",
 			"text": "积分"
-		}, {
+		},{
 			"pagePath": "pages/score/clockin",
 			"iconPath": "static/tabbar/clockin.png",
 			"selectedIconPath": "static/tabbar/clockin_active.png",

+ 2 - 3
jiaoyu_mp/pages/index/index.vue

@@ -53,13 +53,13 @@
 			</view>
 		</view>
 		<view class="search_fixed">
-			<view class="search_box">
+			<navigator url="/pagesA/search/index" class="search_box">
 				<view class="search_input" >
 					<text>搜索</text>
 				</view>
 				<uni-icons type="search" size="20" class="icon"></uni-icons>
 				<uni-icons type="notification" size="30" class="search_btn"></uni-icons>
-			</view>
+			</navigator>
 		</view>
 		<view class="to_bottom" v-if="isLast"> -----到底啦-----</view>
 	</view>
@@ -309,7 +309,6 @@
 						width: 224rpx;
 						height: 200rpx;
 						border-radius: 20rpx;
-
 					}
 				}
 				.product_right{

+ 7 - 7
jiaoyu_mp/pagesA/course/reservation.vue

@@ -9,13 +9,12 @@
 				
 			</view>
 		</view>
-		
 		<view class="teacher_list">
 			<view class="teacher_item" v-for="(item,index) in teacherList" :key="index">
 				<text>{{item}}</text>
 			</view>
 		</view>
-		<view class="curriculum">
+		<view class="course">
 			    <view class="days">
 			      <view class="day" v-for="(day, index) in days" :key="index">
 			        <text>{{ day }}</text>
@@ -28,7 +27,7 @@
 					  		<text>8:30</text>
 					  	</view>
 					  	<view class="day" v-for="(day,index) in days" :key="index">
-					  	  <text>预约</text>
+					  	  <text>预约</text>
 					  		<view>8:30</view>
 					  	</view>
 			      </view>
@@ -37,7 +36,7 @@
 							<text>9:30</text>
 						</view>
 						<view class="day" v-for="(day,index) in days" :key="index">
-						  <text>预约</text>
+						  <text>已预满</text>
 							<view>9:30</view>
 						</view>
 				  </view>
@@ -46,7 +45,7 @@
 							<text>10:30</text>
 						</view>
 						<view class="day" v-for="(day,index) in days" :key="index">
-						  <text>已满</text>
+						  <text>已满</text>
 							<view>10:30</view>
 						</view>
 				  </view>
@@ -55,8 +54,9 @@
 							<text>11:30</text>
 						</view>
 						<view class="day" v-for="(day,index) in days" :key="index">
-						  <text>可预约</text>
+							<text>可预约</text>
 							<view>11:30</view>
+							<view>5/30</view>
 						</view>
 				  </view>
 			    </view>
@@ -163,7 +163,7 @@
 			text-align: center;
 		}
 	}
-	.curriculum{
+	.course{
 		width: 690rpx;
 		border: 2rpx solid;
 		.days{

+ 51 - 4
jiaoyu_mp/pagesA/search/index.vue

@@ -11,7 +11,6 @@
 			</uni-search-bar>
 		</view>
 		
-		
 		<view v-if="!classList.length || noSearch">
 			<view class="history" v-if="historySearch.length">
 				<view class="topTitle">
@@ -35,7 +34,8 @@
 			</view>
 		</view>
 		<view class="noSearch" v-if="noSearch">
-			<uv-empty mode="search" icon="http://cdn.uviewui.com/uview/empty/search.png"></uv-empty>
+			<!-- <uv-empty mode="search" icon="http://cdn.uviewui.com/uview/empty/search.png"></uv-empty> -->
+			没有符合你的东西拉~
 		</view>
 		<view v-else>
 			<view class="list">
@@ -44,7 +44,7 @@
 					<image :src="item.smallPicurl" mode="aspectFill"></image>				
 				</navigator>
 			</view>		
-			<view class="lodinglayout" v-if="noData || classList.length"><uni-load-more :status="noData?'noMore':'loading'"/></view>
+			<view class="lodinglayout" v-if="noData || classList.length"><!-- <uni-load-more :status="noData?'noMore':'loading'"/> --></view>
 		</view>
 	</view>
 </template>
@@ -77,6 +77,53 @@
 	}
 </script>
 
-<style>
+<style lang="less">
 
+.searchLayout{
+	.search{
+		padding:0 10rpx;
+	}
+	.topTitle{
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		font-size: 32rpx;
+		color:#999;
+	}
+	.history{
+		padding:30rpx;		
+	}
+	.recommend{
+		padding:30rpx;
+	}
+	.tabs{
+		display: flex;		
+		align-items: center;
+		flex-wrap: wrap;
+		padding-top:20rpx;
+		.tab{
+			background: #F4F4F4;
+			font-size: 28rpx;
+			color:#333;
+			padding:10rpx 28rpx;
+			border-radius: 50rpx;
+			margin-right: 20rpx;
+			margin-top: 20rpx;
+		}
+	}	
+	.list{
+		display: grid;
+		grid-template-columns: repeat(3,1fr);
+		gap: 5rpx;
+		padding:20rpx 5rpx;		
+		.item{
+			height: 440rpx;
+			image{
+				width: 100%;
+				height: 100%;
+				display: block;
+			}			
+		}		
+	}
+}
 </style>

+ 47 - 0
jiaoyu_mp/uni_modules/uni-search-bar/changelog.md

@@ -0,0 +1,47 @@
+## 1.3.0(2024-04-22)
+- 修复 textColor默认值导致的文字不显示的bug
+## 1.2.9(2024-04-17)
+- 修复 textColor不生效的bug
+## 1.2.8(2024-02-22)
+- 修复 清空按钮emit值错误的bug
+## 1.2.7(2024-02-21)
+- 新增 设置输入框字体颜色:textColor
+## 1.2.6(2024-02-20)
+- 修复 uni-search-bar在支付宝小程序下样式兼容问题
+## 1.2.5(2024-01-31)
+- 修复 uni-search-bar居中问题,现在默认居左,并修复样式偏移问题
+## 1.2.4(2023-05-09)
+- 修复 i18n 国际化不正确的 Bug
+## 1.2.3(2022-05-24)
+- 新增 readonly 属性,组件只读
+## 1.2.2(2022-05-06)
+- 修复  vue3 input 事件不生效的bug
+## 1.2.1(2022-05-06)
+- 修复 多余代码导致的bug
+## 1.2.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-search-bar](https://uniapp.dcloud.io/component/uniui/uni-search-bar)
+## 1.1.2(2021-08-30)
+- 修复 value 属性与 modelValue 属性不兼容的Bug
+## 1.1.1(2021-08-24)
+- 新增 支持国际化
+## 1.1.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.0.9(2021-05-12)
+- 新增 项目示例地址
+## 1.0.8(2021-04-21)
+- 优化 添加依赖 uni-icons, 导入后自动下载依赖
+## 1.0.7(2021-04-15)
+- uni-ui 新增 uni-search-bar 的 focus 事件
+
+## 1.0.6(2021-02-05)
+- 优化 组件引用关系,通过uni_modules引用组件
+
+## 1.0.5(2021-02-05)
+- 调整为uni_modules目录规范
+- 新增 支持双向绑定
+- 更改 input 事件的返回值,e={value:Number} --> e=value
+- 新增 支持图标插槽
+- 新增 支持 clear、blur 事件
+- 新增 支持 focus 属性
+- 去掉组件背景色

+ 4 - 0
jiaoyu_mp/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json

@@ -0,0 +1,4 @@
+{
+	"uni-search-bar.cancel": "cancel",
+	"uni-search-bar.placeholder": "Search enter content"
+}

+ 8 - 0
jiaoyu_mp/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js

@@ -0,0 +1,8 @@
+import en from './en.json'
+import zhHans from './zh-Hans.json'
+import zhHant from './zh-Hant.json'
+export default {
+	en,
+	'zh-Hans': zhHans,
+	'zh-Hant': zhHant
+}

+ 4 - 0
jiaoyu_mp/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json

@@ -0,0 +1,4 @@
+{
+	"uni-search-bar.cancel": "取消",
+	"uni-search-bar.placeholder": "请输入搜索内容"
+}

+ 4 - 0
jiaoyu_mp/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json

@@ -0,0 +1,4 @@
+{
+	"uni-search-bar.cancel": "取消",
+	"uni-search-bar.placeholder": "請輸入搜索內容"
+}

+ 309 - 0
jiaoyu_mp/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue

@@ -0,0 +1,309 @@
+<template>
+	<view class="uni-searchbar">
+		<view :style="{borderRadius:radius+'px',backgroundColor: bgColor}" class="uni-searchbar__box"
+			@click="searchClick">
+			<view class="uni-searchbar__box-icon-search">
+				<slot name="searchIcon">
+					<uni-icons color="#c0c4cc" size="18" type="search" />
+				</slot>
+			</view>
+			<input v-if="show || searchVal" :focus="showSync" :disabled="readonly" :placeholder="placeholderText" :maxlength="maxlength"
+				class="uni-searchbar__box-search-input" confirm-type="search" type="text" v-model="searchVal" :style="{color:textColor}"
+				@confirm="confirm" @blur="blur" @focus="emitFocus"/>
+			<text v-else class="uni-searchbar__text-placeholder">{{ placeholder }}</text>
+			<view v-if="show && (clearButton==='always'||clearButton==='auto'&&searchVal!=='') &&!readonly"
+				class="uni-searchbar__box-icon-clear" @click="clear">
+				<slot name="clearIcon">
+					<uni-icons color="#c0c4cc" size="20" type="clear" />
+				</slot>
+			</view>
+		</view>
+		<text @click="cancel" class="uni-searchbar__cancel"
+			v-if="cancelButton ==='always' || show && cancelButton ==='auto'">{{cancelTextI18n}}</text>
+	</view>
+</template>
+
+<script>
+	import {
+		initVueI18n
+	} from '@dcloudio/uni-i18n'
+	import messages from './i18n/index.js'
+	const {
+		t
+	} = initVueI18n(messages)
+
+	/**
+	 * SearchBar 搜索栏
+	 * @description 搜索栏组件,通常用于搜索商品、文章等
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=866
+	 * @property {Number} radius 搜索栏圆角
+	 * @property {Number} maxlength 输入最大长度
+	 * @property {String} placeholder 搜索栏Placeholder
+	 * @property {String} clearButton = [always|auto|none] 是否显示清除按钮
+	 * 	@value always 一直显示
+	 * 	@value auto 输入框不为空时显示
+	 * 	@value none 一直不显示
+	 * @property {String} cancelButton = [always|auto|none] 是否显示取消按钮
+	 * 	@value always 一直显示
+	 * 	@value auto 输入框不为空时显示
+	 * 	@value none 一直不显示
+	 * @property {String} cancelText 取消按钮的文字
+	 * @property {String} bgColor 输入框背景颜色
+	 * @property {String} textColor 输入文字颜色
+	 * @property {Boolean} focus 是否自动聚焦
+	 * @property {Boolean} readonly 组件只读,不能有任何操作,只做展示
+	 * @event {Function} confirm uniSearchBar 的输入框 confirm 事件,返回参数为uniSearchBar的value,e={value:Number}
+	 * @event {Function} input uniSearchBar 的 value 改变时触发事件,返回参数为uniSearchBar的value,e=value
+	 * @event {Function} cancel 点击取消按钮时触发事件,返回参数为uniSearchBar的value,e={value:Number}
+	 * @event {Function} clear 点击清除按钮时触发事件,返回参数为uniSearchBar的value,e={value:Number}
+	 * @event {Function} blur input失去焦点时触发事件,返回参数为uniSearchBar的value,e={value:Number}
+	 */
+
+	export default {
+		name: "UniSearchBar",
+		emits: ['input', 'update:modelValue', 'clear', 'cancel', 'confirm', 'blur', 'focus'],
+		props: {
+			placeholder: {
+				type: String,
+				default: ""
+			},
+			radius: {
+				type: [Number, String],
+				default: 5
+			},
+			clearButton: {
+				type: String,
+				default: "auto"
+			},
+			cancelButton: {
+				type: String,
+				default: "auto"
+			},
+			cancelText: {
+				type: String,
+				default: ""
+			},
+			bgColor: {
+				type: String,
+				default: "#F8F8F8"
+			},
+			textColor: {
+				type: String,
+				default: "#000000"
+			},
+			maxlength: {
+				type: [Number, String],
+				default: 100
+			},
+			value: {
+				type: [Number, String],
+				default: ""
+			},
+			modelValue: {
+				type: [Number, String],
+				default: ""
+			},
+			focus: {
+				type: Boolean,
+				default: false
+			},
+			readonly: {
+				type: Boolean,
+				default: false
+			}
+		},
+		data() {
+			return {
+				show: false,
+				showSync: false,
+				searchVal: ''
+			}
+		},
+		computed: {
+			cancelTextI18n() {
+				return this.cancelText || t("uni-search-bar.cancel")
+			},
+			placeholderText() {
+				return this.placeholder || t("uni-search-bar.placeholder")
+			}
+		},
+		watch: {
+			// #ifndef VUE3
+			value: {
+				immediate: true,
+				handler(newVal) {
+					this.searchVal = newVal
+					if (newVal) {
+						this.show = true
+					}
+				}
+			},
+			// #endif
+			// #ifdef VUE3
+			modelValue: {
+				immediate: true,
+				handler(newVal) {
+					this.searchVal = newVal
+					if (newVal) {
+						this.show = true
+					}
+				}
+			},
+			// #endif
+			focus: {
+				immediate: true,
+				handler(newVal) {
+					if (newVal) {
+						if(this.readonly) return
+						this.show = true;
+						this.$nextTick(() => {
+							this.showSync = true
+						})
+					}
+				}
+			},
+			searchVal(newVal, oldVal) {
+				this.$emit("input", newVal)
+				// #ifdef VUE3
+				this.$emit("update:modelValue", newVal)
+				// #endif
+			}
+		},
+		methods: {
+			searchClick() {
+				if(this.readonly) return
+				if (this.show) {
+					return
+				}
+				this.show = true;
+				this.$nextTick(() => {
+					this.showSync = true
+				})
+			},
+			clear() {
+				this.searchVal = ""
+				this.$nextTick(() => {
+					this.$emit("clear", { value: "" })
+				})
+			},
+			cancel() {
+				if(this.readonly) return
+				this.$emit("cancel", {
+					value: this.searchVal
+				});
+				this.searchVal = ""
+				this.show = false
+				this.showSync = false
+				// #ifndef APP-PLUS
+				uni.hideKeyboard()
+				// #endif
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord()
+				// #endif
+			},
+			confirm() {
+				// #ifndef APP-PLUS
+				uni.hideKeyboard();
+				// #endif
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord()
+				// #endif
+				this.$emit("confirm", {
+					value: this.searchVal
+				})
+			},
+			blur() {
+				// #ifndef APP-PLUS
+				uni.hideKeyboard();
+				// #endif
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord()
+				// #endif
+				this.$emit("blur", {
+					value: this.searchVal
+				})
+			},
+			emitFocus(e) {
+				this.$emit("focus", e.detail)
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	$uni-searchbar-height: 36px;
+
+	.uni-searchbar {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		position: relative;
+		padding: 10px;
+		// background-color: #fff;
+	}
+
+	.uni-searchbar__box {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		box-sizing: border-box;
+		justify-content: left;
+		/* #endif */
+		overflow: hidden;
+		position: relative;
+		flex: 1;
+		flex-direction: row;
+		align-items: center;
+		height: $uni-searchbar-height;
+		padding: 5px 8px 5px 0px;
+	}
+
+	.uni-searchbar__box-icon-search {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: row;
+		// width: 32px;
+		padding: 0 8px;
+		justify-content: center;
+		align-items: center;
+		color: #B3B3B3;
+	}
+
+	.uni-searchbar__box-search-input {
+		flex: 1;
+		font-size: 14px;
+		color: #333;
+		margin-left: 5px;
+		margin-top: 1px;
+		/* #ifndef APP-NVUE */
+		background-color: inherit;
+		/* #endif */
+	}
+
+	.uni-searchbar__box-icon-clear {
+		align-items: center;
+		line-height: 24px;
+		padding-left: 8px;
+		/* #ifdef H5 */
+		cursor: pointer;
+		/* #endif */
+	}
+
+	.uni-searchbar__text-placeholder {
+		font-size: 14px;
+		color: #B3B3B3;
+		margin-left: 5px;
+		text-align: left;
+	}
+
+	.uni-searchbar__cancel {
+		padding-left: 10px;
+		line-height: $uni-searchbar-height;
+		font-size: 14px;
+		color: #333333;
+		/* #ifdef H5 */
+		cursor: pointer;
+		/* #endif */
+	}
+</style>

+ 87 - 0
jiaoyu_mp/uni_modules/uni-search-bar/package.json

@@ -0,0 +1,87 @@
+{
+  "id": "uni-search-bar",
+  "displayName": "uni-search-bar 搜索栏",
+  "version": "1.3.0",
+  "description": "搜索栏组件,通常用于搜索商品、文章等",
+  "keywords": [
+    "uni-ui",
+    "uniui",
+    "搜索框",
+    "搜索栏"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": ""
+  },
+  "directories": {
+    "example": "../../temps/example_temps"
+  },
+"dcloudext": {
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+    "type": "component-vue"
+  },
+  "uni_modules": {
+    "dependencies": [
+			"uni-scss",
+			"uni-icons"
+		],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y",
+        "alipay": "n"
+      },
+      "client": {
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "y"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+          "QQ": "y"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        },
+        "Vue": {
+            "vue2": "y",
+            "vue3": "y"
+        }
+      }
+    }
+  }
+}

+ 14 - 0
jiaoyu_mp/uni_modules/uni-search-bar/readme.md

@@ -0,0 +1,14 @@
+
+
+## SearchBar 搜索栏
+
+> **组件名:uni-search-bar**
+> 代码块: `uSearchBar`
+
+
+搜索栏组件
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-search-bar)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 
+
+

+ 322 - 79
jiaoyu_mp/unpackage/dist/dev/mp-weixin/common/vendor.js

@@ -30,17 +30,17 @@ const remove = (arr, el) => {
     arr.splice(i, 1);
   }
 };
-const hasOwnProperty$1 = Object.prototype.hasOwnProperty;
-const hasOwn = (val, key) => hasOwnProperty$1.call(val, key);
+const hasOwnProperty$2 = Object.prototype.hasOwnProperty;
+const hasOwn$1 = (val, key) => hasOwnProperty$2.call(val, key);
 const isArray = Array.isArray;
 const isMap = (val) => toTypeString(val) === "[object Map]";
 const isSet = (val) => toTypeString(val) === "[object Set]";
 const isFunction = (val) => typeof val === "function";
 const isString = (val) => typeof val === "string";
 const isSymbol = (val) => typeof val === "symbol";
-const isObject = (val) => val !== null && typeof val === "object";
+const isObject$1 = (val) => val !== null && typeof val === "object";
 const isPromise = (val) => {
-  return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);
+  return (isObject$1(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);
 };
 const objectToString = Object.prototype.toString;
 const toTypeString = (value) => objectToString.call(value);
@@ -112,7 +112,7 @@ function normalizeStyle(value) {
       }
     }
     return res;
-  } else if (isString(value) || isObject(value)) {
+  } else if (isString(value) || isObject$1(value)) {
     return value;
   }
 }
@@ -140,7 +140,7 @@ function normalizeClass(value) {
         res += normalized + " ";
       }
     }
-  } else if (isObject(value)) {
+  } else if (isObject$1(value)) {
     for (const name in value) {
       if (value[name]) {
         res += name + " ";
@@ -150,7 +150,7 @@ function normalizeClass(value) {
   return res.trim();
 }
 const toDisplayString = (val) => {
-  return isString(val) ? val : val == null ? "" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? JSON.stringify(val, replacer, 2) : String(val);
+  return isString(val) ? val : val == null ? "" : isArray(val) || isObject$1(val) && (val.toString === objectToString || !isFunction(val.toString)) ? JSON.stringify(val, replacer, 2) : String(val);
 };
 const replacer = (_key, val) => {
   if (val && val.__v_isRef) {
@@ -171,7 +171,7 @@ const replacer = (_key, val) => {
     };
   } else if (isSymbol(val)) {
     return stringifySymbol(val);
-  } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {
+  } else if (isObject$1(val) && !isArray(val) && !isPlainObject(val)) {
     return String(val);
   }
   return val;
@@ -409,11 +409,96 @@ E.prototype = {
   }
 };
 var E$1 = E;
+const isObject = (val) => val !== null && typeof val === "object";
+const defaultDelimiters = ["{", "}"];
+class BaseFormatter {
+  constructor() {
+    this._caches = /* @__PURE__ */ Object.create(null);
+  }
+  interpolate(message, values, delimiters = defaultDelimiters) {
+    if (!values) {
+      return [message];
+    }
+    let tokens = this._caches[message];
+    if (!tokens) {
+      tokens = parse(message, delimiters);
+      this._caches[message] = tokens;
+    }
+    return compile$1(tokens, values);
+  }
+}
+const RE_TOKEN_LIST_VALUE = /^(?:\d)+/;
+const RE_TOKEN_NAMED_VALUE = /^(?:\w)+/;
+function parse(format, [startDelimiter, endDelimiter]) {
+  const tokens = [];
+  let position = 0;
+  let text = "";
+  while (position < format.length) {
+    let char = format[position++];
+    if (char === startDelimiter) {
+      if (text) {
+        tokens.push({ type: "text", value: text });
+      }
+      text = "";
+      let sub = "";
+      char = format[position++];
+      while (char !== void 0 && char !== endDelimiter) {
+        sub += char;
+        char = format[position++];
+      }
+      const isClosed = char === endDelimiter;
+      const type = RE_TOKEN_LIST_VALUE.test(sub) ? "list" : isClosed && RE_TOKEN_NAMED_VALUE.test(sub) ? "named" : "unknown";
+      tokens.push({ value: sub, type });
+    } else {
+      text += char;
+    }
+  }
+  text && tokens.push({ type: "text", value: text });
+  return tokens;
+}
+function compile$1(tokens, values) {
+  const compiled = [];
+  let index2 = 0;
+  const mode = Array.isArray(values) ? "list" : isObject(values) ? "named" : "unknown";
+  if (mode === "unknown") {
+    return compiled;
+  }
+  while (index2 < tokens.length) {
+    const token = tokens[index2];
+    switch (token.type) {
+      case "text":
+        compiled.push(token.value);
+        break;
+      case "list":
+        compiled.push(values[parseInt(token.value, 10)]);
+        break;
+      case "named":
+        if (mode === "named") {
+          compiled.push(values[token.value]);
+        } else {
+          {
+            console.warn(`Type of token '${token.type}' and format of value '${mode}' don't match!`);
+          }
+        }
+        break;
+      case "unknown":
+        {
+          console.warn(`Detect 'unknown' type of token!`);
+        }
+        break;
+    }
+    index2++;
+  }
+  return compiled;
+}
 const LOCALE_ZH_HANS = "zh-Hans";
 const LOCALE_ZH_HANT = "zh-Hant";
 const LOCALE_EN = "en";
 const LOCALE_FR = "fr";
 const LOCALE_ES = "es";
+const hasOwnProperty$1 = Object.prototype.hasOwnProperty;
+const hasOwn = (val, key) => hasOwnProperty$1.call(val, key);
+const defaultFormatter = new BaseFormatter();
 function include(str, parts) {
   return !!parts.find((part) => str.indexOf(part) !== -1);
 }
@@ -453,6 +538,163 @@ function normalizeLocale(locale, messages) {
     return lang;
   }
 }
+class I18n {
+  constructor({ locale, fallbackLocale, messages, watcher, formater: formater2 }) {
+    this.locale = LOCALE_EN;
+    this.fallbackLocale = LOCALE_EN;
+    this.message = {};
+    this.messages = {};
+    this.watchers = [];
+    if (fallbackLocale) {
+      this.fallbackLocale = fallbackLocale;
+    }
+    this.formater = formater2 || defaultFormatter;
+    this.messages = messages || {};
+    this.setLocale(locale || LOCALE_EN);
+    if (watcher) {
+      this.watchLocale(watcher);
+    }
+  }
+  setLocale(locale) {
+    const oldLocale = this.locale;
+    this.locale = normalizeLocale(locale, this.messages) || this.fallbackLocale;
+    if (!this.messages[this.locale]) {
+      this.messages[this.locale] = {};
+    }
+    this.message = this.messages[this.locale];
+    if (oldLocale !== this.locale) {
+      this.watchers.forEach((watcher) => {
+        watcher(this.locale, oldLocale);
+      });
+    }
+  }
+  getLocale() {
+    return this.locale;
+  }
+  watchLocale(fn) {
+    const index2 = this.watchers.push(fn) - 1;
+    return () => {
+      this.watchers.splice(index2, 1);
+    };
+  }
+  add(locale, message, override = true) {
+    const curMessages = this.messages[locale];
+    if (curMessages) {
+      if (override) {
+        Object.assign(curMessages, message);
+      } else {
+        Object.keys(message).forEach((key) => {
+          if (!hasOwn(curMessages, key)) {
+            curMessages[key] = message[key];
+          }
+        });
+      }
+    } else {
+      this.messages[locale] = message;
+    }
+  }
+  f(message, values, delimiters) {
+    return this.formater.interpolate(message, values, delimiters).join("");
+  }
+  t(key, locale, values) {
+    let message = this.message;
+    if (typeof locale === "string") {
+      locale = normalizeLocale(locale, this.messages);
+      locale && (message = this.messages[locale]);
+    } else {
+      values = locale;
+    }
+    if (!hasOwn(message, key)) {
+      console.warn(`Cannot translate the value of keypath ${key}. Use the value of keypath as default.`);
+      return key;
+    }
+    return this.formater.interpolate(message[key], values).join("");
+  }
+}
+function watchAppLocale(appVm, i18n) {
+  if (appVm.$watchLocale) {
+    appVm.$watchLocale((newLocale) => {
+      i18n.setLocale(newLocale);
+    });
+  } else {
+    appVm.$watch(() => appVm.$locale, (newLocale) => {
+      i18n.setLocale(newLocale);
+    });
+  }
+}
+function getDefaultLocale() {
+  if (typeof index !== "undefined" && index.getLocale) {
+    return index.getLocale();
+  }
+  if (typeof global !== "undefined" && global.getLocale) {
+    return global.getLocale();
+  }
+  return LOCALE_EN;
+}
+function initVueI18n(locale, messages = {}, fallbackLocale, watcher) {
+  if (typeof locale !== "string") {
+    const options = [
+      messages,
+      locale
+    ];
+    locale = options[0];
+    messages = options[1];
+  }
+  if (typeof locale !== "string") {
+    locale = getDefaultLocale();
+  }
+  if (typeof fallbackLocale !== "string") {
+    fallbackLocale = typeof __uniConfig !== "undefined" && __uniConfig.fallbackLocale || LOCALE_EN;
+  }
+  const i18n = new I18n({
+    locale,
+    fallbackLocale,
+    messages,
+    watcher
+  });
+  let t2 = (key, values) => {
+    if (typeof getApp !== "function") {
+      t2 = function(key2, values2) {
+        return i18n.t(key2, values2);
+      };
+    } else {
+      let isWatchedAppLocale = false;
+      t2 = function(key2, values2) {
+        const appVm = getApp().$vm;
+        if (appVm) {
+          appVm.$locale;
+          if (!isWatchedAppLocale) {
+            isWatchedAppLocale = true;
+            watchAppLocale(appVm, i18n);
+          }
+        }
+        return i18n.t(key2, values2);
+      };
+    }
+    return t2(key, values);
+  };
+  return {
+    i18n,
+    f(message, values, delimiters) {
+      return i18n.f(message, values, delimiters);
+    },
+    t(key, values) {
+      return t2(key, values);
+    },
+    add(locale2, message, override = true) {
+      return i18n.add(locale2, message, override);
+    },
+    watch(fn) {
+      return i18n.watchLocale(fn);
+    },
+    getLocale() {
+      return i18n.getLocale();
+    },
+    setLocale(newLocale) {
+      return i18n.setLocale(newLocale);
+    }
+  };
+}
 function getBaseSystemInfo() {
   return wx.getSystemInfoSync();
 }
@@ -464,7 +706,7 @@ function validateProtocol(name, data, protocol, onFail) {
     onFail = validateProtocolFail;
   }
   for (const key in protocol) {
-    const errMsg = validateProp$1(key, data[key], protocol[key], !hasOwn(data, key));
+    const errMsg = validateProp$1(key, data[key], protocol[key], !hasOwn$1(data, key));
     if (isString(errMsg)) {
       onFail(name, errMsg);
     }
@@ -527,7 +769,7 @@ function assertType$1(value, type) {
       valid = value instanceof type;
     }
   } else if (expectedType === "Object") {
-    valid = isObject(value);
+    valid = isObject$1(value);
   } else if (expectedType === "Array") {
     valid = isArray(value);
   } else {
@@ -783,7 +1025,7 @@ function formatApiArgs(args, options) {
         return errMsg;
       }
     } else {
-      if (!hasOwn(params, name)) {
+      if (!hasOwn$1(params, name)) {
         params[name] = formatterOrDefaultValue;
       }
     }
@@ -1157,7 +1399,7 @@ function initWrapper(protocols2) {
         argsOption = argsOption(fromArgs, toArgs) || {};
       }
       for (const key in fromArgs) {
-        if (hasOwn(argsOption, key)) {
+        if (hasOwn$1(argsOption, key)) {
           let keyOption = argsOption[key];
           if (isFunction(keyOption)) {
             keyOption = keyOption(fromArgs[key], fromArgs, toArgs);
@@ -1175,7 +1417,7 @@ function initWrapper(protocols2) {
             toArgs[key] = processCallback(methodName, callback, returnValue);
           }
         } else {
-          if (!keepFromArgs && !hasOwn(toArgs, key)) {
+          if (!keepFromArgs && !hasOwn$1(toArgs, key)) {
             toArgs[key] = fromArgs[key];
           }
         }
@@ -1193,7 +1435,7 @@ function initWrapper(protocols2) {
     return processArgs(methodName, res, returnValue, {}, keepReturnValue);
   }
   return function wrapper(methodName, method) {
-    if (!hasOwn(protocols2, methodName)) {
+    if (!hasOwn$1(protocols2, methodName)) {
       return method;
     }
     const protocol = protocols2[methodName];
@@ -1487,13 +1729,13 @@ function initUni(api, protocols2, platform = wx) {
   const wrapper = initWrapper(protocols2);
   const UniProxyHandlers = {
     get(target, key) {
-      if (hasOwn(target, key)) {
+      if (hasOwn$1(target, key)) {
         return target[key];
       }
-      if (hasOwn(api, key)) {
+      if (hasOwn$1(api, key)) {
         return promisify(key, api[key]);
       }
-      if (hasOwn(baseApis, key)) {
+      if (hasOwn$1(baseApis, key)) {
         return promisify(key, baseApis[key]);
       }
       return promisify(key, wrapper(key, platform[key]));
@@ -2505,7 +2747,7 @@ class BaseReactiveHandler2 {
     }
     const targetIsArray = isArray(target);
     if (!isReadonly2) {
-      if (targetIsArray && hasOwn(arrayInstrumentations, key)) {
+      if (targetIsArray && hasOwn$1(arrayInstrumentations, key)) {
         return Reflect.get(arrayInstrumentations, key, receiver);
       }
       if (key === "hasOwnProperty") {
@@ -2525,7 +2767,7 @@ class BaseReactiveHandler2 {
     if (isRef(res)) {
       return targetIsArray && isIntegerKey(key) ? res : res.value;
     }
-    if (isObject(res)) {
+    if (isObject$1(res)) {
       return isReadonly2 ? readonly(res) : reactive(res);
     }
     return res;
@@ -2552,7 +2794,7 @@ class MutableReactiveHandler2 extends BaseReactiveHandler2 {
         }
       }
     }
-    const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key);
+    const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn$1(target, key);
     const result = Reflect.set(target, key, value, receiver);
     if (target === toRaw(receiver)) {
       if (!hadKey) {
@@ -2564,7 +2806,7 @@ class MutableReactiveHandler2 extends BaseReactiveHandler2 {
     return result;
   }
   deleteProperty(target, key) {
-    const hadKey = hasOwn(target, key);
+    const hadKey = hasOwn$1(target, key);
     const oldValue = target[key];
     const result = Reflect.deleteProperty(target, key);
     if (result && hadKey) {
@@ -2869,7 +3111,7 @@ function createInstrumentationGetter(isReadonly2, shallow) {
       return target;
     }
     return Reflect.get(
-      hasOwn(instrumentations, key) && key in target ? instrumentations : target,
+      hasOwn$1(instrumentations, key) && key in target ? instrumentations : target,
       key,
       receiver
     );
@@ -2957,7 +3199,7 @@ function shallowReadonly(target) {
   );
 }
 function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {
-  if (!isObject(target)) {
+  if (!isObject$1(target)) {
     {
       warn$2(`value cannot be made reactive: ${String(target)}`);
     }
@@ -3006,8 +3248,8 @@ function markRaw(value) {
   }
   return value;
 }
-const toReactive = (value) => isObject(value) ? reactive(value) : value;
-const toReadonly = (value) => isObject(value) ? readonly(value) : value;
+const toReactive = (value) => isObject$1(value) ? reactive(value) : value;
+const toReadonly = (value) => isObject$1(value) ? readonly(value) : value;
 const COMPUTED_SIDE_EFFECT_WARN = `Computed is still dirty after getter evaluation, likely because a computed is mutating its own dependency in its getter. State mutations in computed getters should be avoided.  Check the docs for more details: https://vuejs.org/guide/essentials/computed.html#getters-should-be-side-effect-free`;
 class ComputedRefImpl {
   constructor(getter, _setter, isReadonly2, isSSR) {
@@ -3761,7 +4003,7 @@ function normalizeEmitsOptions(comp, appContext, asMixin = false) {
     }
   }
   if (!raw && !hasExtends) {
-    if (isObject(comp)) {
+    if (isObject$1(comp)) {
       cache.set(comp, null);
     }
     return null;
@@ -3771,7 +4013,7 @@ function normalizeEmitsOptions(comp, appContext, asMixin = false) {
   } else {
     extend(normalized, raw);
   }
-  if (isObject(comp)) {
+  if (isObject$1(comp)) {
     cache.set(comp, normalized);
   }
   return normalized;
@@ -3781,7 +4023,7 @@ function isEmitListener(options, key) {
     return false;
   }
   key = key.slice(2).replace(/Once$/, "");
-  return hasOwn(options, key[0].toLowerCase() + key.slice(1)) || hasOwn(options, hyphenate(key)) || hasOwn(options, key);
+  return hasOwn$1(options, key[0].toLowerCase() + key.slice(1)) || hasOwn$1(options, hyphenate(key)) || hasOwn$1(options, key);
 }
 let currentRenderingInstance = null;
 function setCurrentRenderingInstance(instance) {
@@ -4032,7 +4274,7 @@ function createPathGetter(ctx, path) {
   };
 }
 function traverse(value, depth, currentDepth = 0, seen) {
-  if (!isObject(value) || value["__v_skip"]) {
+  if (!isObject$1(value) || value["__v_skip"]) {
     return value;
   }
   if (depth && depth > 0) {
@@ -4095,7 +4337,7 @@ function createAppAPI(render, hydrate) {
     if (!isFunction(rootComponent)) {
       rootComponent = extend({}, rootComponent);
     }
-    if (rootProps != null && !isObject(rootProps)) {
+    if (rootProps != null && !isObject$1(rootProps)) {
       warn$1(`root props passed to app.mount() must be an object.`);
       rootProps = null;
     }
@@ -4360,7 +4602,7 @@ const publicPropertiesMap = (
   })
 );
 const isReservedPrefix = (key) => key === "_" || key === "$";
-const hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key);
+const hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn$1(state, key);
 const PublicInstanceProxyHandlers = {
   get({ _: instance }, key) {
     const { ctx, setupState, data, props, accessCache, type, appContext } = instance;
@@ -4384,17 +4626,17 @@ const PublicInstanceProxyHandlers = {
       } else if (hasSetupBinding(setupState, key)) {
         accessCache[key] = 1;
         return setupState[key];
-      } else if (data !== EMPTY_OBJ && hasOwn(data, key)) {
+      } else if (data !== EMPTY_OBJ && hasOwn$1(data, key)) {
         accessCache[key] = 2;
         return data[key];
       } else if (
         // only cache other properties when instance has declared (thus stable)
         // props
-        (normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key)
+        (normalizedProps = instance.propsOptions[0]) && hasOwn$1(normalizedProps, key)
       ) {
         accessCache[key] = 3;
         return props[key];
-      } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {
+      } else if (ctx !== EMPTY_OBJ && hasOwn$1(ctx, key)) {
         accessCache[key] = 4;
         return ctx[key];
       } else if (shouldCacheAccess) {
@@ -4415,12 +4657,12 @@ const PublicInstanceProxyHandlers = {
       (cssModule = type.__cssModules) && (cssModule = cssModule[key])
     ) {
       return cssModule;
-    } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {
+    } else if (ctx !== EMPTY_OBJ && hasOwn$1(ctx, key)) {
       accessCache[key] = 4;
       return ctx[key];
     } else if (
       // global properties
-      globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key)
+      globalProperties = appContext.config.globalProperties, hasOwn$1(globalProperties, key)
     ) {
       {
         return globalProperties[key];
@@ -4428,7 +4670,7 @@ const PublicInstanceProxyHandlers = {
     } else if (currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading
     // to infinite warning loop
     key.indexOf("__v") !== 0)) {
-      if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) {
+      if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn$1(data, key)) {
         warn$1(
           `Property ${JSON.stringify(
             key
@@ -4446,13 +4688,13 @@ const PublicInstanceProxyHandlers = {
     if (hasSetupBinding(setupState, key)) {
       setupState[key] = value;
       return true;
-    } else if (setupState.__isScriptSetup && hasOwn(setupState, key)) {
+    } else if (setupState.__isScriptSetup && hasOwn$1(setupState, key)) {
       warn$1(`Cannot mutate <script setup> binding "${key}" from Options API.`);
       return false;
-    } else if (data !== EMPTY_OBJ && hasOwn(data, key)) {
+    } else if (data !== EMPTY_OBJ && hasOwn$1(data, key)) {
       data[key] = value;
       return true;
-    } else if (hasOwn(instance.props, key)) {
+    } else if (hasOwn$1(instance.props, key)) {
       warn$1(`Attempting to mutate prop "${key}". Props are readonly.`);
       return false;
     }
@@ -4478,12 +4720,12 @@ const PublicInstanceProxyHandlers = {
     _: { data, setupState, accessCache, ctx, appContext, propsOptions }
   }, key) {
     let normalizedProps;
-    return !!accessCache[key] || data !== EMPTY_OBJ && hasOwn(data, key) || hasSetupBinding(setupState, key) || (normalizedProps = propsOptions[0]) && hasOwn(normalizedProps, key) || hasOwn(ctx, key) || hasOwn(publicPropertiesMap, key) || hasOwn(appContext.config.globalProperties, key);
+    return !!accessCache[key] || data !== EMPTY_OBJ && hasOwn$1(data, key) || hasSetupBinding(setupState, key) || (normalizedProps = propsOptions[0]) && hasOwn$1(normalizedProps, key) || hasOwn$1(ctx, key) || hasOwn$1(publicPropertiesMap, key) || hasOwn$1(appContext.config.globalProperties, key);
   },
   defineProperty(target, key, descriptor) {
     if (descriptor.get != null) {
       target._.accessCache[key] = 0;
-    } else if (hasOwn(descriptor, "value")) {
+    } else if (hasOwn$1(descriptor, "value")) {
       this.set(target, key, descriptor.value, null);
     }
     return Reflect.defineProperty(target, key, descriptor);
@@ -4657,7 +4899,7 @@ function applyOptions$1(instance) {
         `data() returned a Promise - note data() cannot be async; If you intend to perform data fetching before component renders, use async setup() + <Suspense>.`
       );
     }
-    if (!isObject(data)) {
+    if (!isObject$1(data)) {
       warn$1(`data() should return an object.`);
     } else {
       instance.data = reactive(data);
@@ -4775,7 +5017,7 @@ function resolveInjections(injectOptions, ctx, checkDuplicateProperties = NOOP)
   for (const key in injectOptions) {
     const opt = injectOptions[key];
     let injected;
-    if (isObject(opt)) {
+    if (isObject$1(opt)) {
       if ("default" in opt) {
         injected = inject(
           opt.from || key,
@@ -4821,7 +5063,7 @@ function createWatcher(raw, ctx, publicThis, key) {
     }
   } else if (isFunction(raw)) {
     watch(getter, raw.bind(publicThis));
-  } else if (isObject(raw)) {
+  } else if (isObject$1(raw)) {
     if (isArray(raw)) {
       raw.forEach((r2) => createWatcher(r2, ctx, publicThis, key));
     } else {
@@ -4861,7 +5103,7 @@ function resolveMergedOptions(instance) {
     }
     mergeOptions(resolved, base, optionMergeStrategies);
   }
-  if (isObject(base)) {
+  if (isObject$1(base)) {
     cache.set(base, resolved);
   }
   return resolved;
@@ -5032,7 +5274,7 @@ function updateProps(instance, rawProps, rawPrevProps, optimized) {
         }
         const value = rawProps[key];
         if (options) {
-          if (hasOwn(attrs, key)) {
+          if (hasOwn$1(attrs, key)) {
             if (value !== attrs[key]) {
               attrs[key] = value;
               hasAttrsChanged = true;
@@ -5063,9 +5305,9 @@ function updateProps(instance, rawProps, rawPrevProps, optimized) {
     let kebabKey;
     for (const key in rawCurrentProps) {
       if (!rawProps || // for camelCase
-      !hasOwn(rawProps, key) && // it's possible the original props was passed in as kebab-case
+      !hasOwn$1(rawProps, key) && // it's possible the original props was passed in as kebab-case
       // and converted to camelCase (#955)
-      ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey))) {
+      ((kebabKey = hyphenate(key)) === key || !hasOwn$1(rawProps, kebabKey))) {
         if (options) {
           if (rawPrevProps && // for camelCase
           (rawPrevProps[key] !== void 0 || // for kebab-case
@@ -5086,7 +5328,7 @@ function updateProps(instance, rawProps, rawPrevProps, optimized) {
     }
     if (attrs !== rawCurrentProps) {
       for (const key in attrs) {
-        if (!rawProps || !hasOwn(rawProps, key) && true) {
+        if (!rawProps || !hasOwn$1(rawProps, key) && true) {
           delete attrs[key];
           hasAttrsChanged = true;
         }
@@ -5111,7 +5353,7 @@ function setFullProps(instance, rawProps, props, attrs) {
       }
       const value = rawProps[key];
       let camelKey;
-      if (options && hasOwn(options, camelKey = camelize(key))) {
+      if (options && hasOwn$1(options, camelKey = camelize(key))) {
         if (!needCastKeys || !needCastKeys.includes(camelKey)) {
           props[camelKey] = value;
         } else {
@@ -5136,7 +5378,7 @@ function setFullProps(instance, rawProps, props, attrs) {
         key,
         castValues[key],
         instance,
-        !hasOwn(castValues, key)
+        !hasOwn$1(castValues, key)
       );
     }
   }
@@ -5145,7 +5387,7 @@ function setFullProps(instance, rawProps, props, attrs) {
 function resolvePropValue(options, props, key, value, instance, isAbsent) {
   const opt = options[key];
   if (opt != null) {
-    const hasDefault = hasOwn(opt, "default");
+    const hasDefault = hasOwn$1(opt, "default");
     if (hasDefault && value === void 0) {
       const defaultValue = opt.default;
       if (opt.type !== Function && !opt.skipFactory && isFunction(defaultValue)) {
@@ -5209,7 +5451,7 @@ function normalizePropsOptions(comp, appContext, asMixin = false) {
     }
   }
   if (!raw && !hasExtends) {
-    if (isObject(comp)) {
+    if (isObject$1(comp)) {
       cache.set(comp, EMPTY_ARR);
     }
     return EMPTY_ARR;
@@ -5225,7 +5467,7 @@ function normalizePropsOptions(comp, appContext, asMixin = false) {
       }
     }
   } else if (raw) {
-    if (!isObject(raw)) {
+    if (!isObject$1(raw)) {
       warn$1(`invalid props options`, raw);
     }
     for (const key in raw) {
@@ -5244,7 +5486,7 @@ function normalizePropsOptions(comp, appContext, asMixin = false) {
             1
             /* shouldCastTrue */
           ] = stringIndex < 0 || booleanIndex < stringIndex;
-          if (booleanIndex > -1 || hasOwn(prop, "default")) {
+          if (booleanIndex > -1 || hasOwn$1(prop, "default")) {
             needCastKeys.push(normalizedKey);
           }
         }
@@ -5252,7 +5494,7 @@ function normalizePropsOptions(comp, appContext, asMixin = false) {
     }
   }
   const res = [normalized, needCastKeys];
-  if (isObject(comp)) {
+  if (isObject$1(comp)) {
     cache.set(comp, res);
   }
   return res;
@@ -5300,7 +5542,7 @@ function validateProps(rawProps, props, instance) {
       resolvedValues[key],
       opt,
       shallowReadonly(resolvedValues),
-      !hasOwn(rawProps, key) && !hasOwn(rawProps, hyphenate(key))
+      !hasOwn$1(rawProps, key) && !hasOwn$1(rawProps, hyphenate(key))
     );
   }
 }
@@ -5344,7 +5586,7 @@ function assertType(value, type) {
       valid = value instanceof type;
     }
   } else if (expectedType === "Object") {
-    valid = isObject(value);
+    valid = isObject$1(value);
   } else if (expectedType === "Array") {
     valid = isArray(value);
   } else if (expectedType === "null") {
@@ -5648,7 +5890,7 @@ function handleSetupResult(instance, setupResult, isSSR) {
     {
       instance.render = setupResult;
     }
-  } else if (isObject(setupResult)) {
+  } else if (isObject$1(setupResult)) {
     if (isVNode(setupResult)) {
       warn$1(
         `setup() should not return VNodes directly - return a render function instead.`
@@ -5993,7 +6235,7 @@ function clone(src, seen) {
       copy = {};
       seen.set(src, copy);
       for (const name in src) {
-        if (hasOwn(src, name)) {
+        if (hasOwn$1(src, name)) {
           copy[name] = clone(src[name], seen);
         }
       }
@@ -6113,7 +6355,7 @@ function setRef$1(instance, isUnmount = false) {
   }
 }
 function toSkip(value) {
-  if (isObject(value)) {
+  if (isObject$1(value)) {
     markRaw(value);
   }
   return value;
@@ -6154,7 +6396,7 @@ function setTemplateRef({ r: r2, f: f2 }, refValue, setupState) {
           onBeforeUnmount(() => remove(existing, refValue), refValue.$);
         }
       } else if (_isString) {
-        if (hasOwn(setupState, r2)) {
+        if (hasOwn$1(setupState, r2)) {
           setupState[r2] = refValue;
         }
       } else if (isRef(r2)) {
@@ -6735,14 +6977,14 @@ function patchMPEvent(event) {
     event.preventDefault = NOOP;
     event.stopPropagation = NOOP;
     event.stopImmediatePropagation = NOOP;
-    if (!hasOwn(event, "detail")) {
+    if (!hasOwn$1(event, "detail")) {
       event.detail = {};
     }
-    if (hasOwn(event, "markerId")) {
+    if (hasOwn$1(event, "markerId")) {
       event.detail = typeof event.detail === "object" ? event.detail : {};
       event.detail.markerId = event.markerId;
     }
-    if (isPlainObject(event.detail) && hasOwn(event.detail, "checked") && !hasOwn(event.detail, "value")) {
+    if (isPlainObject(event.detail) && hasOwn$1(event.detail, "checked") && !hasOwn$1(event.detail, "value")) {
       event.detail.value = event.detail.checked;
     }
     if (isPlainObject(event.detail)) {
@@ -6778,7 +7020,7 @@ function vFor(source, renderItem) {
     for (let i = 0; i < source; i++) {
       ret[i] = renderItem(i + 1, i, i);
     }
-  } else if (isObject(source)) {
+  } else if (isObject$1(source)) {
     if (source[Symbol.iterator]) {
       ret = Array.from(source, (item, i) => renderItem(item, i, i));
     } else {
@@ -6888,7 +7130,7 @@ function initComponentInstance(instance, options) {
 function initMocks(instance, mpInstance, mocks2) {
   const ctx = instance.ctx;
   mocks2.forEach((mock) => {
-    if (hasOwn(mpInstance, mock)) {
+    if (hasOwn$1(mpInstance, mock)) {
       instance[mock] = ctx[mock] = mpInstance[mock];
     }
   });
@@ -6944,7 +7186,7 @@ function findHooks(vueOptions, hooks = /* @__PURE__ */ new Set()) {
   return hooks;
 }
 function initHook(mpOptions, hook, excludes) {
-  if (excludes.indexOf(hook) === -1 && !hasOwn(mpOptions, hook)) {
+  if (excludes.indexOf(hook) === -1 && !hasOwn$1(mpOptions, hook)) {
     mpOptions[hook] = function(args) {
       return this.$vm && this.$vm.$callHook(hook, args);
     };
@@ -6977,7 +7219,7 @@ const findMixinRuntimeHooks = /* @__PURE__ */ once(() => {
       const hooks = Object.keys(MINI_PROGRAM_PAGE_RUNTIME_HOOKS);
       mixins.forEach((mixin) => {
         hooks.forEach((hook) => {
-          if (hasOwn(mixin, hook) && !runtimeHooks.includes(hook)) {
+          if (hasOwn$1(mixin, hook) && !runtimeHooks.includes(hook)) {
             runtimeHooks.push(hook);
           }
         });
@@ -7054,13 +7296,13 @@ function initCreateSubpackageApp(parseAppOptions) {
     const globalData = app.globalData;
     if (globalData) {
       Object.keys(appOptions.globalData).forEach((name) => {
-        if (!hasOwn(globalData, name)) {
+        if (!hasOwn$1(globalData, name)) {
           globalData[name] = appOptions.globalData[name];
         }
       });
     }
     Object.keys(appOptions).forEach((name) => {
-      if (!hasOwn(app, name)) {
+      if (!hasOwn$1(app, name)) {
         app[name] = appOptions[name];
       }
     });
@@ -7110,7 +7352,7 @@ function initVueIds(vueIds, mpInstance) {
 const EXTRAS = ["externalClasses"];
 function initExtraOptions(miniProgramComponentOptions, vueOptions) {
   EXTRAS.forEach((name) => {
-    if (hasOwn(vueOptions, name)) {
+    if (hasOwn$1(vueOptions, name)) {
       miniProgramComponentOptions[name] = vueOptions[name];
     }
   });
@@ -7417,7 +7659,7 @@ function applyOptions(componentOptions, vueOptions) {
   componentOptions.data = initData();
   componentOptions.behaviors = initBehaviors(vueOptions);
 }
-function parseComponent(vueOptions, { parse, mocks: mocks2, isPage: isPage2, initRelation: initRelation2, handleLink: handleLink2, initLifetimes: initLifetimes2 }) {
+function parseComponent(vueOptions, { parse: parse2, mocks: mocks2, isPage: isPage2, initRelation: initRelation2, handleLink: handleLink2, initLifetimes: initLifetimes2 }) {
   vueOptions = vueOptions.default || vueOptions;
   const options = {
     multipleSlots: true,
@@ -7427,7 +7669,7 @@ function parseComponent(vueOptions, { parse, mocks: mocks2, isPage: isPage2, ini
   };
   if (isArray(vueOptions.mixins)) {
     vueOptions.mixins.forEach((item) => {
-      if (isObject(item.options)) {
+      if (isObject$1(item.options)) {
         extend(options, item.options);
       }
     });
@@ -7463,8 +7705,8 @@ function parseComponent(vueOptions, { parse, mocks: mocks2, isPage: isPage2, ini
   {
     initWorkletMethods(mpComponentOptions.methods, vueOptions.methods);
   }
-  if (parse) {
-    parse(mpComponentOptions, { handleLink: handleLink2 });
+  if (parse2) {
+    parse2(mpComponentOptions, { handleLink: handleLink2 });
   }
   return mpComponentOptions;
 }
@@ -7492,7 +7734,7 @@ function $destroyComponent(instance) {
   return $destroyComponentFn(instance);
 }
 function parsePage(vueOptions, parseOptions2) {
-  const { parse, mocks: mocks2, isPage: isPage2, initRelation: initRelation2, handleLink: handleLink2, initLifetimes: initLifetimes2 } = parseOptions2;
+  const { parse: parse2, mocks: mocks2, isPage: isPage2, initRelation: initRelation2, handleLink: handleLink2, initLifetimes: initLifetimes2 } = parseOptions2;
   const miniProgramPageOptions = parseComponent(vueOptions, {
     mocks: mocks2,
     isPage: isPage2,
@@ -7515,7 +7757,7 @@ function parsePage(vueOptions, parseOptions2) {
   }
   initRuntimeHooks(methods, vueOptions.__runtimeHooks);
   initMixinRuntimeHooks(methods);
-  parse && parse(miniProgramPageOptions, { handleLink: handleLink2 });
+  parse2 && parse2(miniProgramPageOptions, { handleLink: handleLink2 });
   return miniProgramPageOptions;
 }
 function initCreatePage(parseOptions2) {
@@ -7658,6 +7900,7 @@ exports.createSSRApp = createSSRApp;
 exports.e = e;
 exports.f = f;
 exports.index = index;
+exports.initVueI18n = initVueI18n;
 exports.n = n;
 exports.o = o;
 exports.p = p;

+ 1 - 1
jiaoyu_mp/unpackage/dist/dev/mp-weixin/pages/index/index.wxml

@@ -1 +1 @@
-<view><view class="banner_box"><view class="banner_list"><swiper class="banner_swiper" autoplay="{{true}}"><swiper-item wx:for="{{a}}" wx:for-item="item" wx:key="c"><image src="{{item.a}}" mode="widthFix" bindtap="{{item.b}}"></image></swiper-item></swiper></view></view><view class="product_box"><view wx:if="{{b}}" class="to_bottom"> -----还没有产品啦-----</view><view class="product_list"><view wx:for="{{c}}" wx:for-item="item" wx:key="e" bindtap="{{item.d}}" data-eventsync="true" class="product_item"><view class="product_left"><image class="product_image" src="{{item.a}}" mode=""></image></view><view class="product_right"><view class="product_title"><view class="product_text"><text>{{item.b}}</text></view><view class="time"><text>距今日结束08:02:56</text></view></view><view class="stock_price"><view class="product_price"><label style="font-size:26rpx">¥</label><text>{{item.c}}</text></view><view class="product_order_but"><button>立即购买</button></view></view></view></view></view></view><view class="search_fixed"><view class="search_box"><view class="search_input"><text>搜索</text></view><uni-icons wx:if="{{d}}" class="icon" u-i="406c9705-0" bind:__l="__l" u-p="{{d}}"></uni-icons><uni-icons wx:if="{{e}}" class="search_btn" u-i="406c9705-1" bind:__l="__l" u-p="{{e}}"></uni-icons></view></view><view wx:if="{{f}}" class="to_bottom"> -----到底啦-----</view></view>
+<view><view class="banner_box"><view class="banner_list"><swiper class="banner_swiper" autoplay="{{true}}"><swiper-item wx:for="{{a}}" wx:for-item="item" wx:key="c"><image src="{{item.a}}" mode="widthFix" bindtap="{{item.b}}"></image></swiper-item></swiper></view></view><view class="product_box"><view wx:if="{{b}}" class="to_bottom"> -----还没有产品啦-----</view><view class="product_list"><view wx:for="{{c}}" wx:for-item="item" wx:key="e" bindtap="{{item.d}}" data-eventsync="true" class="product_item"><view class="product_left"><image class="product_image" src="{{item.a}}" mode=""></image></view><view class="product_right"><view class="product_title"><view class="product_text"><text>{{item.b}}</text></view><view class="time"><text>距今日结束08:02:56</text></view></view><view class="stock_price"><view class="product_price"><label style="font-size:26rpx">¥</label><text>{{item.c}}</text></view><view class="product_order_but"><button>立即购买</button></view></view></view></view></view></view><view class="search_fixed"><navigator url="/pagesA/search/index" class="search_box"><view class="search_input"><text>搜索</text></view><uni-icons wx:if="{{d}}" class="icon" u-i="406c9705-0" bind:__l="__l" u-p="{{d}}"></uni-icons><uni-icons wx:if="{{e}}" class="search_btn" u-i="406c9705-1" bind:__l="__l" u-p="{{e}}"></uni-icons></navigator></view><view wx:if="{{f}}" class="to_bottom"> -----到底啦-----</view></view>

文件差异内容过多而无法显示
+ 0 - 0
jiaoyu_mp/unpackage/dist/dev/mp-weixin/pagesA/course/reservation.wxml


+ 7 - 7
jiaoyu_mp/unpackage/dist/dev/mp-weixin/pagesA/course/reservation.wxss

@@ -41,16 +41,16 @@
   border-radius: 20rpx;
   text-align: center;
 }
-.reservation_layout .curriculum {
+.reservation_layout .course {
   width: 690rpx;
   border: 2rpx solid;
 }
-.reservation_layout .curriculum .days {
+.reservation_layout .course .days {
   display: flex;
   margin-left: 115rpx;
   background-color: #ffffff;
 }
-.reservation_layout .curriculum .days .day {
+.reservation_layout .course .days .day {
   display: inline-flex;
   flex-direction: column;
   justify-content: center;
@@ -58,22 +58,22 @@
   width: 115rpx;
   height: 115rpx;
 }
-.reservation_layout .curriculum .times {
+.reservation_layout .course .times {
   border: 2rpx solid;
 }
-.reservation_layout .curriculum .times .time_list {
+.reservation_layout .course .times .time_list {
   display: flex;
   background-color: #ffffff;
   border: 2rpx solid;
 }
-.reservation_layout .curriculum .times .time_list .time {
+.reservation_layout .course .times .time_list .time {
   display: inline-flex;
   justify-content: center;
   align-items: center;
   width: 115rpx;
   height: 115rpx;
 }
-.reservation_layout .curriculum .times .time_list .day {
+.reservation_layout .course .times .time_list .day {
   display: inline-flex;
   flex-direction: column;
   justify-content: center;

+ 8 - 18
jiaoyu_mp/unpackage/dist/dev/mp-weixin/pagesA/search/index.js

@@ -24,15 +24,14 @@ const _sfc_main = {
   methods: {}
 };
 if (!Array) {
-  const _component_uni_search_bar = common_vendor.resolveComponent("uni-search-bar");
+  const _easycom_uni_search_bar2 = common_vendor.resolveComponent("uni-search-bar");
   const _easycom_uni_icons2 = common_vendor.resolveComponent("uni-icons");
-  const _component_uv_empty = common_vendor.resolveComponent("uv-empty");
-  const _component_uni_load_more = common_vendor.resolveComponent("uni-load-more");
-  (_component_uni_search_bar + _easycom_uni_icons2 + _component_uv_empty + _component_uni_load_more)();
+  (_easycom_uni_search_bar2 + _easycom_uni_icons2)();
 }
+const _easycom_uni_search_bar = () => "../../uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.js";
 const _easycom_uni_icons = () => "../../uni_modules/uni-icons/components/uni-icons/uni-icons.js";
 if (!Math) {
-  _easycom_uni_icons();
+  (_easycom_uni_search_bar + _easycom_uni_icons)();
 }
 function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
   return common_vendor.e({
@@ -71,25 +70,16 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
     })
   }) : {}, {
     l: $data.noSearch
-  }, $data.noSearch ? {
-    m: common_vendor.p({
-      mode: "search",
-      icon: "http://cdn.uviewui.com/uview/empty/search.png"
-    })
-  } : common_vendor.e({
-    n: common_vendor.f($data.classList, (item, k0, i0) => {
+  }, $data.noSearch ? {} : common_vendor.e({
+    m: common_vendor.f($data.classList, (item, k0, i0) => {
       return {
         a: item.smallPicurl,
         b: `/pages/preview/preview?id=${item._id}`,
         c: item._id
       };
     }),
-    o: $data.noData || $data.classList.length
-  }, $data.noData || $data.classList.length ? {
-    p: common_vendor.p({
-      status: $data.noData ? "noMore" : "loading"
-    })
-  } : {}));
+    n: $data.noData || $data.classList.length
+  }, $data.noData || $data.classList.length ? {} : {}));
 }
 const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
 wx.createPage(MiniProgramPage);

+ 1 - 0
jiaoyu_mp/unpackage/dist/dev/mp-weixin/pagesA/search/index.json

@@ -1,6 +1,7 @@
 {
   "navigationBarTitleText": "搜索商品",
   "usingComponents": {
+    "uni-search-bar": "../../uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar",
     "uni-icons": "../../uni_modules/uni-icons/components/uni-icons/uni-icons"
   }
 }

+ 1 - 1
jiaoyu_mp/unpackage/dist/dev/mp-weixin/pagesA/search/index.wxml

@@ -1 +1 @@
-<view class="searchLayout"><view class="search"><uni-search-bar wx:if="{{e}}" bindconfirm="{{a}}" bindcancel="{{b}}" bindclear="{{c}}" u-i="a8663a90-0" bind:__l="__l" bindupdateModelValue="{{d}}" u-p="{{e}}"></uni-search-bar></view><view wx:if="{{f}}"><view wx:if="{{g}}" class="history"><view class="topTitle"><view class="text">最近搜索</view><view class="icon" bindtap="{{i}}"><uni-icons wx:if="{{h}}" u-i="a8663a90-1" bind:__l="__l" u-p="{{h}}"></uni-icons></view></view><view class="tabs"><view wx:for="{{j}}" wx:for-item="tab" wx:key="b" class="tab" bindtap="{{tab.c}}">{{tab.a}}</view></view></view><view class="recommend"><view class="topTitle"><view class="text">热门搜索</view></view><view class="tabs"><view wx:for="{{k}}" wx:for-item="tab" wx:key="b" class="tab" bindtap="{{tab.c}}">{{tab.a}}</view></view></view></view><view wx:if="{{l}}" class="noSearch"><uv-empty wx:if="{{m}}" u-i="a8663a90-2" bind:__l="__l" u-p="{{m}}"></uv-empty></view><view wx:else><view class="list"><navigator wx:for="{{n}}" wx:for-item="item" wx:key="c" url="{{item.b}}" class="item"><image src="{{item.a}}" mode="aspectFill"></image></navigator></view><view wx:if="{{o}}" class="lodinglayout"><uni-load-more wx:if="{{p}}" u-i="a8663a90-3" bind:__l="__l" u-p="{{p}}"/></view></view></view>
+<view class="searchLayout"><view class="search"><uni-search-bar wx:if="{{e}}" bindconfirm="{{a}}" bindcancel="{{b}}" bindclear="{{c}}" u-i="a8663a90-0" bind:__l="__l" bindupdateModelValue="{{d}}" u-p="{{e}}"></uni-search-bar></view><view wx:if="{{f}}"><view wx:if="{{g}}" class="history"><view class="topTitle"><view class="text">最近搜索</view><view class="icon" bindtap="{{i}}"><uni-icons wx:if="{{h}}" u-i="a8663a90-1" bind:__l="__l" u-p="{{h}}"></uni-icons></view></view><view class="tabs"><view wx:for="{{j}}" wx:for-item="tab" wx:key="b" class="tab" bindtap="{{tab.c}}">{{tab.a}}</view></view></view><view class="recommend"><view class="topTitle"><view class="text">热门搜索</view></view><view class="tabs"><view wx:for="{{k}}" wx:for-item="tab" wx:key="b" class="tab" bindtap="{{tab.c}}">{{tab.a}}</view></view></view></view><view wx:if="{{l}}" class="noSearch"> 没有符合你的东西拉~ </view><view wx:else><view class="list"><navigator wx:for="{{m}}" wx:for-item="item" wx:key="c" url="{{item.b}}" class="item"><image src="{{item.a}}" mode="aspectFill"></image></navigator></view><view wx:if="{{n}}" class="lodinglayout"></view></view></view>

+ 45 - 0
jiaoyu_mp/unpackage/dist/dev/mp-weixin/pagesA/search/index.wxss

@@ -0,0 +1,45 @@
+.searchLayout .search {
+  padding: 0 10rpx;
+}
+.searchLayout .topTitle {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  font-size: 32rpx;
+  color: #999;
+}
+.searchLayout .history {
+  padding: 30rpx;
+}
+.searchLayout .recommend {
+  padding: 30rpx;
+}
+.searchLayout .tabs {
+  display: flex;
+  align-items: center;
+  flex-wrap: wrap;
+  padding-top: 20rpx;
+}
+.searchLayout .tabs .tab {
+  background: #F4F4F4;
+  font-size: 28rpx;
+  color: #333;
+  padding: 10rpx 28rpx;
+  border-radius: 50rpx;
+  margin-right: 20rpx;
+  margin-top: 20rpx;
+}
+.searchLayout .list {
+  display: grid;
+  grid-template-columns: repeat(3, 1fr);
+  gap: 5rpx;
+  padding: 20rpx 5rpx;
+}
+.searchLayout .list .item {
+  height: 440rpx;
+}
+.searchLayout .list .item image {
+  width: 100%;
+  height: 100%;
+  display: block;
+}

+ 4 - 4
jiaoyu_mp/unpackage/dist/dev/mp-weixin/project.private.config.json

@@ -8,15 +8,15 @@
     "miniprogram": {
       "list": [
         {
-          "name": "pages/product/index",
-          "pathName": "pages/index/index",
+          "name": "pagesA/course/index",
+          "pathName": "pagesA/course/reservation",
           "query": "",
           "launchMode": "default",
           "scene": null
         },
         {
-          "name": "pagesA/course/index",
-          "pathName": "pagesA/course/index",
+          "name": "pages/product/index",
+          "pathName": "pagesA/search/index",
           "query": "",
           "launchMode": "default",
           "scene": null

+ 19 - 0
jiaoyu_mp/unpackage/dist/dev/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js

@@ -0,0 +1,19 @@
+"use strict";
+const en = {
+  "uni-search-bar.cancel": "cancel",
+  "uni-search-bar.placeholder": "Search enter content"
+};
+const zhHans = {
+  "uni-search-bar.cancel": "取消",
+  "uni-search-bar.placeholder": "请输入搜索内容"
+};
+const zhHant = {
+  "uni-search-bar.cancel": "取消",
+  "uni-search-bar.placeholder": "請輸入搜索內容"
+};
+const messages = {
+  en,
+  "zh-Hans": zhHans,
+  "zh-Hant": zhHant
+};
+exports.messages = messages;

+ 198 - 0
jiaoyu_mp/unpackage/dist/dev/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.js

@@ -0,0 +1,198 @@
+"use strict";
+const common_vendor = require("../../../../common/vendor.js");
+const uni_modules_uniSearchBar_components_uniSearchBar_i18n_index = require("./i18n/index.js");
+const {
+  t
+} = common_vendor.initVueI18n(uni_modules_uniSearchBar_components_uniSearchBar_i18n_index.messages);
+const _sfc_main = {
+  name: "UniSearchBar",
+  emits: ["input", "update:modelValue", "clear", "cancel", "confirm", "blur", "focus"],
+  props: {
+    placeholder: {
+      type: String,
+      default: ""
+    },
+    radius: {
+      type: [Number, String],
+      default: 5
+    },
+    clearButton: {
+      type: String,
+      default: "auto"
+    },
+    cancelButton: {
+      type: String,
+      default: "auto"
+    },
+    cancelText: {
+      type: String,
+      default: ""
+    },
+    bgColor: {
+      type: String,
+      default: "#F8F8F8"
+    },
+    textColor: {
+      type: String,
+      default: "#000000"
+    },
+    maxlength: {
+      type: [Number, String],
+      default: 100
+    },
+    value: {
+      type: [Number, String],
+      default: ""
+    },
+    modelValue: {
+      type: [Number, String],
+      default: ""
+    },
+    focus: {
+      type: Boolean,
+      default: false
+    },
+    readonly: {
+      type: Boolean,
+      default: false
+    }
+  },
+  data() {
+    return {
+      show: false,
+      showSync: false,
+      searchVal: ""
+    };
+  },
+  computed: {
+    cancelTextI18n() {
+      return this.cancelText || t("uni-search-bar.cancel");
+    },
+    placeholderText() {
+      return this.placeholder || t("uni-search-bar.placeholder");
+    }
+  },
+  watch: {
+    modelValue: {
+      immediate: true,
+      handler(newVal) {
+        this.searchVal = newVal;
+        if (newVal) {
+          this.show = true;
+        }
+      }
+    },
+    focus: {
+      immediate: true,
+      handler(newVal) {
+        if (newVal) {
+          if (this.readonly)
+            return;
+          this.show = true;
+          this.$nextTick(() => {
+            this.showSync = true;
+          });
+        }
+      }
+    },
+    searchVal(newVal, oldVal) {
+      this.$emit("input", newVal);
+      this.$emit("update:modelValue", newVal);
+    }
+  },
+  methods: {
+    searchClick() {
+      if (this.readonly)
+        return;
+      if (this.show) {
+        return;
+      }
+      this.show = true;
+      this.$nextTick(() => {
+        this.showSync = true;
+      });
+    },
+    clear() {
+      this.searchVal = "";
+      this.$nextTick(() => {
+        this.$emit("clear", { value: "" });
+      });
+    },
+    cancel() {
+      if (this.readonly)
+        return;
+      this.$emit("cancel", {
+        value: this.searchVal
+      });
+      this.searchVal = "";
+      this.show = false;
+      this.showSync = false;
+      common_vendor.index.hideKeyboard();
+    },
+    confirm() {
+      common_vendor.index.hideKeyboard();
+      this.$emit("confirm", {
+        value: this.searchVal
+      });
+    },
+    blur() {
+      common_vendor.index.hideKeyboard();
+      this.$emit("blur", {
+        value: this.searchVal
+      });
+    },
+    emitFocus(e) {
+      this.$emit("focus", e.detail);
+    }
+  }
+};
+if (!Array) {
+  const _easycom_uni_icons2 = common_vendor.resolveComponent("uni-icons");
+  _easycom_uni_icons2();
+}
+const _easycom_uni_icons = () => "../../../uni-icons/components/uni-icons/uni-icons.js";
+if (!Math) {
+  _easycom_uni_icons();
+}
+function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
+  return common_vendor.e({
+    a: common_vendor.p({
+      color: "#c0c4cc",
+      size: "18",
+      type: "search"
+    }),
+    b: $data.show || $data.searchVal
+  }, $data.show || $data.searchVal ? {
+    c: $data.showSync,
+    d: $props.readonly,
+    e: $options.placeholderText,
+    f: $props.maxlength,
+    g: $props.textColor,
+    h: common_vendor.o((...args) => $options.confirm && $options.confirm(...args)),
+    i: common_vendor.o((...args) => $options.blur && $options.blur(...args)),
+    j: common_vendor.o((...args) => $options.emitFocus && $options.emitFocus(...args)),
+    k: $data.searchVal,
+    l: common_vendor.o(($event) => $data.searchVal = $event.detail.value)
+  } : {
+    m: common_vendor.t($props.placeholder)
+  }, {
+    n: $data.show && ($props.clearButton === "always" || $props.clearButton === "auto" && $data.searchVal !== "") && !$props.readonly
+  }, $data.show && ($props.clearButton === "always" || $props.clearButton === "auto" && $data.searchVal !== "") && !$props.readonly ? {
+    o: common_vendor.p({
+      color: "#c0c4cc",
+      size: "20",
+      type: "clear"
+    }),
+    p: common_vendor.o((...args) => $options.clear && $options.clear(...args))
+  } : {}, {
+    q: $props.radius + "px",
+    r: $props.bgColor,
+    s: common_vendor.o((...args) => $options.searchClick && $options.searchClick(...args)),
+    t: $props.cancelButton === "always" || $data.show && $props.cancelButton === "auto"
+  }, $props.cancelButton === "always" || $data.show && $props.cancelButton === "auto" ? {
+    v: common_vendor.t($options.cancelTextI18n),
+    w: common_vendor.o((...args) => $options.cancel && $options.cancel(...args))
+  } : {});
+}
+const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
+wx.createComponent(Component);

+ 6 - 0
jiaoyu_mp/unpackage/dist/dev/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.json

@@ -0,0 +1,6 @@
+{
+  "component": true,
+  "usingComponents": {
+    "uni-icons": "../../../uni-icons/components/uni-icons/uni-icons"
+  }
+}

+ 1 - 0
jiaoyu_mp/unpackage/dist/dev/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.wxml

@@ -0,0 +1 @@
+<view class="uni-searchbar"><view style="{{'border-radius:' + q + ';' + ('background-color:' + r)}}" class="uni-searchbar__box" bindtap="{{s}}"><view class="uni-searchbar__box-icon-search"><block wx:if="{{$slots.searchIcon}}"><slot name="searchIcon"></slot></block><block wx:else><uni-icons wx:if="{{a}}" u-i="93638444-0" bind:__l="__l" u-p="{{a}}"/></block></view><input wx:if="{{b}}" focus="{{c}}" disabled="{{d}}" placeholder="{{e}}" maxlength="{{f}}" class="uni-searchbar__box-search-input" confirm-type="search" type="text" style="{{'color:' + g}}" bindconfirm="{{h}}" bindblur="{{i}}" bindfocus="{{j}}" value="{{k}}" bindinput="{{l}}"/><text wx:else class="uni-searchbar__text-placeholder">{{m}}</text><view wx:if="{{n}}" class="uni-searchbar__box-icon-clear" bindtap="{{p}}"><block wx:if="{{$slots.clearIcon}}"><slot name="clearIcon"></slot></block><block wx:else><uni-icons wx:if="{{o}}" u-i="93638444-1" bind:__l="__l" u-p="{{o}}"/></block></view></view><text wx:if="{{t}}" bindtap="{{w}}" class="uni-searchbar__cancel">{{v}}</text></view>

+ 76 - 0
jiaoyu_mp/unpackage/dist/dev/mp-weixin/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.wxss

@@ -0,0 +1,76 @@
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+/* 颜色变量 */
+/* 行为相关颜色 */
+/* 文字基本颜色 */
+/* 背景颜色 */
+/* 边框颜色 */
+/* 尺寸变量 */
+/* 文字尺寸 */
+/* 图片尺寸 */
+/* Border Radius */
+/* 水平间距 */
+/* 垂直间距 */
+/* 透明度 */
+/* 文章场景相关 */
+.uni-searchbar {
+  display: flex;
+  flex-direction: row;
+  position: relative;
+  padding: 10px;
+}
+.uni-searchbar__box {
+  display: flex;
+  box-sizing: border-box;
+  justify-content: left;
+  overflow: hidden;
+  position: relative;
+  flex: 1;
+  flex-direction: row;
+  align-items: center;
+  height: 36px;
+  padding: 5px 8px 5px 0px;
+}
+.uni-searchbar__box-icon-search {
+  display: flex;
+  flex-direction: row;
+  padding: 0 8px;
+  justify-content: center;
+  align-items: center;
+  color: #B3B3B3;
+}
+.uni-searchbar__box-search-input {
+  flex: 1;
+  font-size: 14px;
+  color: #333;
+  margin-left: 5px;
+  margin-top: 1px;
+  background-color: inherit;
+}
+.uni-searchbar__box-icon-clear {
+  align-items: center;
+  line-height: 24px;
+  padding-left: 8px;
+}
+.uni-searchbar__text-placeholder {
+  font-size: 14px;
+  color: #B3B3B3;
+  margin-left: 5px;
+  text-align: left;
+}
+.uni-searchbar__cancel {
+  padding-left: 10px;
+  line-height: 36px;
+  font-size: 14px;
+  color: #333333;
+}

部分文件因为文件数量过多而无法显示