Explorar o código

1. 自定义日历组件

Cee.Yang %!s(int64=3) %!d(string=hai) anos
pai
achega
40032d6435

+ 9 - 2
api/request.js

@@ -24,14 +24,21 @@ const request = (config) => {
 	if (config.url.indexOf('app_login') === -1) {
 	if (config.url.indexOf('app_login') === -1) {
 		config.header['token'] = store.state.userInfo.token
 		config.header['token'] = store.state.userInfo.token
 	}
 	}
-	console.log(JSON.stringify(config));
 	let promise = new Promise(function(resolve, reject) {
 	let promise = new Promise(function(resolve, reject) {
 		uni.request(config).then(responses => {
 		uni.request(config).then(responses => {
-			console.log(responses)
 			if (responses[0]) {
 			if (responses[0]) {
 				reject({message : "网络超时"})
 				reject({message : "网络超时"})
 			} else {
 			} else {
 				let response = responses[1].data // 如果返回的结果是data.data的,嫌麻烦可以用这个,return res,这样只返回一个data
 				let response = responses[1].data // 如果返回的结果是data.data的,嫌麻烦可以用这个,return res,这样只返回一个data
+				if (response.code != 200) {
+					if (response.code == 401) {
+						store.commit('clearUserInfo')
+						uni.navigateTo({
+							url:'../login/index',
+							animationType:'fade-in'
+						})
+					}
+				}
 				resolve(response)
 				resolve(response)
 			}
 			}
 		}).catch(error => {
 		}).catch(error => {

+ 202 - 176
components/uni-calendar/uni-calendar-item.vue

@@ -1,179 +1,205 @@
-<template>
-	<view class="uni-calendar-item__weeks-box" :class="{
-		'uni-calendar-item--disable':weeks.disable,
-		'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
-		'uni-calendar-item--checked':(calendar.fullDate === weeks.fullDate && !weeks.isDay) ,
-		'uni-calendar-item--before-checked':weeks.beforeMultiple,
-		'uni-calendar-item--multiple': weeks.multiple,
-		'uni-calendar-item--after-checked':weeks.afterMultiple,
-		}"
-	 @click="choiceDate(weeks)">
-		<view class="uni-calendar-item__weeks-box-item">
-			<text v-if="selected&&weeks.extraInfo" class="uni-calendar-item__weeks-box-circle"></text>
-			<text class="uni-calendar-item__weeks-box-text" :class="{
-				'uni-calendar-item--isDay-text': weeks.isDay,
-				'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
-				'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay,
-				'uni-calendar-item--before-checked':weeks.beforeMultiple,
-				'uni-calendar-item--multiple': weeks.multiple,
-				'uni-calendar-item--after-checked':weeks.afterMultiple,
-				'uni-calendar-item--disable':weeks.disable,
-				}">{{weeks.date}}</text>
-			<text v-if="!lunar&&!weeks.extraInfo && weeks.isDay" class="uni-calendar-item__weeks-lunar-text" :class="{
-				'uni-calendar-item--isDay-text':weeks.isDay,
-				'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
-				'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay,
-				'uni-calendar-item--before-checked':weeks.beforeMultiple,
-				'uni-calendar-item--multiple': weeks.multiple,
-				'uni-calendar-item--after-checked':weeks.afterMultiple,
-				}">{{todayText}}</text>
-			<text v-if="lunar&&!weeks.extraInfo" class="uni-calendar-item__weeks-lunar-text" :class="{
-				'uni-calendar-item--isDay-text':weeks.isDay,
-				'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
-				'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay,
-				'uni-calendar-item--before-checked':weeks.beforeMultiple,
-				'uni-calendar-item--multiple': weeks.multiple,
-				'uni-calendar-item--after-checked':weeks.afterMultiple,
-				'uni-calendar-item--disable':weeks.disable,
-				}">{{weeks.isDay ? todayText : (weeks.lunar.IDayCn === '初一'?weeks.lunar.IMonthCn:weeks.lunar.IDayCn)}}</text>
-			<text v-if="weeks.extraInfo&&weeks.extraInfo.info" class="uni-calendar-item__weeks-lunar-text" :class="{
-				'uni-calendar-item--extra':weeks.extraInfo.info,
-				'uni-calendar-item--isDay-text':weeks.isDay,
-				'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
-				'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay,
-				'uni-calendar-item--before-checked':weeks.beforeMultiple,
-				'uni-calendar-item--multiple': weeks.multiple,
-				'uni-calendar-item--after-checked':weeks.afterMultiple,
-				'uni-calendar-item--disable':weeks.disable,
-				}">{{weeks.extraInfo.info}}</text>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		emits:['change'],
-		props: {
-			weeks: {
-				type: Object,
-				default () {
-					return {}
-				}
-			},
-			calendar: {
-				type: Object,
-				default: () => {
-					return {}
-				}
-			},
-			selected: {
-				type: Array,
-				default: () => {
-					return []
-				}
-			},
-			lunar: {
-				type: Boolean,
-				default: false
-			}
-		},
-		computed: {
-			todayText() {
-				return this.$i18n.t("uni-calender.today")
-			},
+<template>
+	<view class="uni-calendar-item__weeks-box" :class="{
+		'uni-calendar-item--disable':weeks.disable,
+		'uni-calendar-item--checked-box':calendar.fullDate === weeks.fullDate,
+		'uni-calendar-item--before-checked':weeks.beforeMultiple,
+		'uni-calendar-item--multiple': weeks.multiple,
+		'uni-calendar-item--after-checked':weeks.afterMultiple,
+		}"
+	 @click="choiceDate(weeks)">
+		<view class="uni-calendar-item__weeks-box-item">
+			<!-- <text v-if="selected&&weeks.extraInfo" class="uni-calendar-item__weeks-box-circle"></text> -->
+			<text class="uni-calendar-item__weeks-box-text" :class="{
+				'uni-calendar-item--isDay-text': weeks.isDay,
+				'uni-calendar-item--before-checked':weeks.beforeMultiple,
+				'uni-calendar-item--multiple': weeks.multiple,
+				'uni-calendar-item--after-checked':weeks.afterMultiple,
+				'uni-calendar-item--disable':weeks.disable,
+				}">{{weeks.date}}</text>
+			<text v-if="!lunar&&!weeks.extraInfo && weeks.isDay" class="uni-calendar-item__weeks-lunar-text" :class="{
+				'uni-calendar-item--isDay-text':weeks.isDay,
+				'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
+				'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay,
+				'uni-calendar-item--before-checked':weeks.beforeMultiple,
+				'uni-calendar-item--multiple': weeks.multiple,
+				'uni-calendar-item--after-checked':weeks.afterMultiple,
+				}">{{todayText}}</text>
+			<text v-if="weeks.extraInfo&&weeks.extraInfo.info" class="uni-calendar-item__weeks-lunar-text" :class="{
+				'uni-calendar-item--extra':weeks.extraInfo.info,
+				'uni-calendar-item--isDay-text':weeks.isDay,
+				'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
+				'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay,
+				'uni-calendar-item--before-checked':weeks.beforeMultiple,
+				'uni-calendar-item--multiple': weeks.multiple,
+				'uni-calendar-item--after-checked':weeks.afterMultiple,
+				'uni-calendar-item--disable':weeks.disable,
+				}">{{weeks.extraInfo.info}}</text>
+			<view v-if="weeks.extraInfo&&weeks.extraInfo.count&&weeks.extraInfo.count > 0" class="uni-calendar-item__weeks-lunar-box">
+				<image :src="imagePath" class="uni-calendar-item__weeks-lunar-box-image"></image>
+				<text class="uni-calendar-item__weeks-lunar-box-text">{{weeks.extraInfo.count}}</text>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		emits:['change'],
+		props: {
+			weeks: {
+				type: Object,
+				default () {
+					return {}
+				}
+			},
+			calendar: {
+				type: Object,
+				default: () => {
+					return {}
+				}
+			},
+			selected: {
+				type: Array,
+				default: () => {
+					return []
+				}
+			},
+			lunar: {
+				type: Boolean,
+				default: false
+			}
+		},
+		computed: {
+			todayText() {
+				return this.$i18n.t("uni-calender.today")
+			},
+			imagePath() {
+				var weeks = this.weeks;
+				if (weeks.extraInfo != null && weeks.extraInfo.status != null && weeks.extraInfo.status == 1) return require('../../static/home/green_book.png')
+				if (weeks.extraInfo != null && weeks.extraInfo.status != null && weeks.extraInfo.status == 2) return require('../../static/home/blue_book.png')
+				if (weeks.extraInfo != null && weeks.extraInfo.status != null && weeks.extraInfo.status == 3) return require('../../static/home/grey_book.png')
+				return require('../../static/home/yellow_book.png')
+			}
 		},
 		},
 		mounted() {
 		mounted() {
 			
 			
-		},
-		methods: {
-			choiceDate(weeks) {
-				this.$emit('change', weeks)
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.uni-calendar-item__weeks-box {
-		flex: 1;
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: column;
-		justify-content: center;
-		align-items: center;
-	}
-
-	.uni-calendar-item__weeks-box-text {
-		font-size: $uni-font-size-base;
-		color: $uni-text-color;
-	}
-
-	.uni-calendar-item__weeks-lunar-text {
-		font-size: $uni-font-size-sm;
-		color: $uni-text-color;
-	}
-
-	.uni-calendar-item__weeks-box-item {
-		position: relative;
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: column;
-		justify-content: center;
-		align-items: center;
-		width: 100rpx;
-		height: 100rpx;
-	}
-
-	.uni-calendar-item__weeks-box-circle {
-		position: absolute;
-		top: 5px;
-		right: 5px;
-		width: 8px;
-		height: 8px;
-		border-radius: 8px;
-		background-color: $uni-color-error;
-
-	}
-
-	.uni-calendar-item--disable {
-		background-color: rgba(249, 249, 249, $uni-opacity-disabled);
-		color: $uni-text-color-disable;
-	}
-
-	.uni-calendar-item--isDay-text {
-		color: $uni-color-primary;
-	}
-
-	.uni-calendar-item--isDay {
-		background-color: $uni-color-primary;
-		opacity: 0.8;
-		color: #fff;
-	}
-
-	.uni-calendar-item--extra {
-		color: $uni-color-error;
-		opacity: 0.8;
-	}
-
-	.uni-calendar-item--checked {
-		background-color: $uni-color-primary;
-		color: #fff;
-		opacity: 0.8;
-	}
-
-	.uni-calendar-item--multiple {
-		background-color: $uni-color-primary;
-		color: #fff;
-		opacity: 0.8;
-	}
-	.uni-calendar-item--before-checked {
-		background-color: #ff5a5f;
-		color: #fff;
-	}
-	.uni-calendar-item--after-checked {
-		background-color: #ff5a5f;
-		color: #fff;
-	}
-</style>
+		},
+		methods: {
+			choiceDate(weeks) {
+				this.$emit('change', weeks)
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.uni-calendar-item__weeks-box {
+		flex: 1;
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.uni-calendar-item__weeks-box-text {
+		font-size: $uni-font-size-base;
+		color: $uni-text-color;
+	}
+
+	.uni-calendar-item__weeks-lunar-text {
+		font-size: $uni-font-size-sm;
+		color: $uni-text-color;
+	}
+	
+	.uni-calendar-item__weeks-lunar-box {
+		position: relative;
+	}
+	
+	.uni-calendar-item__weeks-lunar-box-image {
+		width: 25px; 
+		height: 15px;
+	}
+	
+	.uni-calendar-item__weeks-lunar-box-text {
+		position: absolute;
+		right: 0;
+		font-size: $uni-font-size-sm;
+		color: #fff;
+	}
+
+	.uni-calendar-item__weeks-box-item {
+		position: relative;
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+		width: 100rpx;
+		height: 100rpx;
+	}
+
+	.uni-calendar-item__weeks-box-circle {
+		position: absolute;
+		top: 5px;
+		right: 5px;
+		width: 8px;
+		height: 8px;
+		border-radius: 8px;
+		background-color: $uni-color-error;
+
+	}
+
+	.uni-calendar-item--disable {
+		background-color: rgba(249, 249, 249, $uni-opacity-disabled);
+		color: $uni-text-color-disable;
+	}
+
+	.uni-calendar-item--isDay-text {
+		color: $uni-color-primary;
+	}
+
+	.uni-calendar-item--isDay {
+		background-color: $uni-color-primary;
+		opacity: 0.8;
+		color: #fff;
+	}
+
+	.uni-calendar-item--extra {
+		color: $uni-color-error;
+		opacity: 0.8;
+	}
+
+	.uni-calendar-item--checked {
+		background-color: $uni-color-primary;
+		color: #fff;
+		opacity: 0.6;
+	}
+	
+	.uni-calendar-item--checked-box {
+		border-radius: 50%;
+		background-color: #efebe9;
+	}
+	
+	.uni-calendar-item--checked-text {
+		color: #fff;
+		opacity: 0.6;
+	}
+	
+
+	.uni-calendar-item--multiple {
+		background-color: $uni-color-primary;
+		color: #fff;
+		opacity: 0.8;
+	}
+	.uni-calendar-item--before-checked {
+		background-color: #ff5a5f;
+		color: #fff;
+	}
+	.uni-calendar-item--after-checked {
+		background-color: #ff5a5f;
+		color: #fff;
+	}
+</style>

+ 3 - 2
components/uni-calendar/uni-calendar.vue

@@ -214,6 +214,9 @@ export default {
 		selected(newVal) {
 		selected(newVal) {
 			this.cale.setSelectInfo(this.nowDate.fullDate, newVal);
 			this.cale.setSelectInfo(this.nowDate.fullDate, newVal);
 			this.weeks = this.cale.weeks;
 			this.weeks = this.cale.weeks;
+		},
+		fold(newVal) {
+			this.showMonthed = this.showMonth && !newVal;
 		}
 		}
 	},
 	},
 	created() {
 	created() {
@@ -336,7 +339,6 @@ export default {
 		 * @param {Object} weeks
 		 * @param {Object} weeks
 		 */
 		 */
 		choiceDate(weeks) {
 		choiceDate(weeks) {
-			console.log('fuck');
 			if (weeks.disable) return;
 			if (weeks.disable) return;
 			this.calendar = weeks;
 			this.calendar = weeks;
 			// 设置多选
 			// 设置多选
@@ -384,7 +386,6 @@ export default {
 		/// 展开按钮点击事件
 		/// 展开按钮点击事件
 		foldBtnDidClick() {
 		foldBtnDidClick() {
 			this.fold = !this.fold;
 			this.fold = !this.fold;
-			this.showMonthed = !this.fold;
 		},
 		},
 		handleTouchstart(e) {
 		handleTouchstart(e) {
 			//记录用户按下的时间
 			//记录用户按下的时间

+ 513 - 92
package-lock.json

@@ -1,96 +1,517 @@
 {
 {
-  "name": "i2-school-employee-uniapp",
-  "lockfileVersion": 2,
-  "requires": true,
-  "packages": {
-    "": {
-      "dependencies": {
-        "vue-i18n": "^8.26.7",
-        "vuex": "^3.6.2",
-        "vuex-persistedstate": "^4.1.0"
-      }
+    "name": "滚动列表【自动加载,上拉加载,下拉刷新,可自定义】",
+    "version": "1.1.0",
+    "lockfileVersion": 2,
+    "requires": true,
+    "packages": {
+        "": {
+            "name": "滚动列表【自动加载,上拉加载,下拉刷新,可自定义】",
+            "version": "1.1.0",
+            "dependencies": {
+                "moment": "^2.29.1",
+                "vuex-persistedstate": "^4.1.0"
+            }
+        },
+        "node_modules/@babel/parser": {
+            "version": "7.17.0",
+            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz",
+            "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==",
+            "peer": true,
+            "bin": {
+                "parser": "bin/babel-parser.js"
+            },
+            "engines": {
+                "node": ">=6.0.0"
+            }
+        },
+        "node_modules/@vue/compiler-core": {
+            "version": "3.2.31",
+            "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.31.tgz",
+            "integrity": "sha512-aKno00qoA4o+V/kR6i/pE+aP+esng5siNAVQ422TkBNM6qA4veXiZbSe8OTXHXquEi/f6Akc+nLfB4JGfe4/WQ==",
+            "peer": true,
+            "dependencies": {
+                "@babel/parser": "^7.16.4",
+                "@vue/shared": "3.2.31",
+                "estree-walker": "^2.0.2",
+                "source-map": "^0.6.1"
+            }
+        },
+        "node_modules/@vue/compiler-dom": {
+            "version": "3.2.31",
+            "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.31.tgz",
+            "integrity": "sha512-60zIlFfzIDf3u91cqfqy9KhCKIJgPeqxgveH2L+87RcGU/alT6BRrk5JtUso0OibH3O7NXuNOQ0cDc9beT0wrg==",
+            "peer": true,
+            "dependencies": {
+                "@vue/compiler-core": "3.2.31",
+                "@vue/shared": "3.2.31"
+            }
+        },
+        "node_modules/@vue/compiler-sfc": {
+            "version": "3.2.31",
+            "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.31.tgz",
+            "integrity": "sha512-748adc9msSPGzXgibHiO6T7RWgfnDcVQD+VVwYgSsyyY8Ans64tALHZANrKtOzvkwznV/F4H7OAod/jIlp/dkQ==",
+            "peer": true,
+            "dependencies": {
+                "@babel/parser": "^7.16.4",
+                "@vue/compiler-core": "3.2.31",
+                "@vue/compiler-dom": "3.2.31",
+                "@vue/compiler-ssr": "3.2.31",
+                "@vue/reactivity-transform": "3.2.31",
+                "@vue/shared": "3.2.31",
+                "estree-walker": "^2.0.2",
+                "magic-string": "^0.25.7",
+                "postcss": "^8.1.10",
+                "source-map": "^0.6.1"
+            }
+        },
+        "node_modules/@vue/compiler-ssr": {
+            "version": "3.2.31",
+            "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.31.tgz",
+            "integrity": "sha512-mjN0rqig+A8TVDnsGPYJM5dpbjlXeHUm2oZHZwGyMYiGT/F4fhJf/cXy8QpjnLQK4Y9Et4GWzHn9PS8AHUnSkw==",
+            "peer": true,
+            "dependencies": {
+                "@vue/compiler-dom": "3.2.31",
+                "@vue/shared": "3.2.31"
+            }
+        },
+        "node_modules/@vue/devtools-api": {
+            "version": "6.0.8",
+            "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.0.8.tgz",
+            "integrity": "sha512-bzei608bPVQE2yq9Ghrjn/dnpf27mWfrr0q0ZQiuZoO3LQqFG0T1xSGz+9vw1j9KAZM2Cu9vdQMkddDxqzZGNg==",
+            "peer": true
+        },
+        "node_modules/@vue/reactivity": {
+            "version": "3.2.31",
+            "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.31.tgz",
+            "integrity": "sha512-HVr0l211gbhpEKYr2hYe7hRsV91uIVGFYNHj73njbARVGHQvIojkImKMaZNDdoDZOIkMsBc9a1sMqR+WZwfSCw==",
+            "peer": true,
+            "dependencies": {
+                "@vue/shared": "3.2.31"
+            }
+        },
+        "node_modules/@vue/reactivity-transform": {
+            "version": "3.2.31",
+            "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.31.tgz",
+            "integrity": "sha512-uS4l4z/W7wXdI+Va5pgVxBJ345wyGFKvpPYtdSgvfJfX/x2Ymm6ophQlXXB6acqGHtXuBqNyyO3zVp9b1r0MOA==",
+            "peer": true,
+            "dependencies": {
+                "@babel/parser": "^7.16.4",
+                "@vue/compiler-core": "3.2.31",
+                "@vue/shared": "3.2.31",
+                "estree-walker": "^2.0.2",
+                "magic-string": "^0.25.7"
+            }
+        },
+        "node_modules/@vue/runtime-core": {
+            "version": "3.2.31",
+            "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.31.tgz",
+            "integrity": "sha512-Kcog5XmSY7VHFEMuk4+Gap8gUssYMZ2+w+cmGI6OpZWYOEIcbE0TPzzPHi+8XTzAgx1w/ZxDFcXhZeXN5eKWsA==",
+            "peer": true,
+            "dependencies": {
+                "@vue/reactivity": "3.2.31",
+                "@vue/shared": "3.2.31"
+            }
+        },
+        "node_modules/@vue/runtime-dom": {
+            "version": "3.2.31",
+            "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.31.tgz",
+            "integrity": "sha512-N+o0sICVLScUjfLG7u9u5XCjvmsexAiPt17GNnaWHJUfsKed5e85/A3SWgKxzlxx2SW/Hw7RQxzxbXez9PtY3g==",
+            "peer": true,
+            "dependencies": {
+                "@vue/runtime-core": "3.2.31",
+                "@vue/shared": "3.2.31",
+                "csstype": "^2.6.8"
+            }
+        },
+        "node_modules/@vue/server-renderer": {
+            "version": "3.2.31",
+            "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.31.tgz",
+            "integrity": "sha512-8CN3Zj2HyR2LQQBHZ61HexF5NReqngLT3oahyiVRfSSvak+oAvVmu8iNLSu6XR77Ili2AOpnAt1y8ywjjqtmkg==",
+            "peer": true,
+            "dependencies": {
+                "@vue/compiler-ssr": "3.2.31",
+                "@vue/shared": "3.2.31"
+            },
+            "peerDependencies": {
+                "vue": "3.2.31"
+            }
+        },
+        "node_modules/@vue/shared": {
+            "version": "3.2.31",
+            "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.31.tgz",
+            "integrity": "sha512-ymN2pj6zEjiKJZbrf98UM2pfDd6F2H7ksKw7NDt/ZZ1fh5Ei39X5tABugtT03ZRlWd9imccoK0hE8hpjpU7irQ==",
+            "peer": true
+        },
+        "node_modules/csstype": {
+            "version": "2.6.19",
+            "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz",
+            "integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==",
+            "peer": true
+        },
+        "node_modules/deepmerge": {
+            "version": "4.2.2",
+            "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+            "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/estree-walker": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+            "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+            "peer": true
+        },
+        "node_modules/magic-string": {
+            "version": "0.25.7",
+            "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
+            "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
+            "peer": true,
+            "dependencies": {
+                "sourcemap-codec": "^1.4.4"
+            }
+        },
+        "node_modules/moment": {
+            "version": "2.29.1",
+            "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
+            "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==",
+            "engines": {
+                "node": "*"
+            }
+        },
+        "node_modules/nanoid": {
+            "version": "3.2.0",
+            "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
+            "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==",
+            "peer": true,
+            "bin": {
+                "nanoid": "bin/nanoid.cjs"
+            },
+            "engines": {
+                "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+            }
+        },
+        "node_modules/picocolors": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+            "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+            "peer": true
+        },
+        "node_modules/postcss": {
+            "version": "8.4.6",
+            "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz",
+            "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==",
+            "peer": true,
+            "dependencies": {
+                "nanoid": "^3.2.0",
+                "picocolors": "^1.0.0",
+                "source-map-js": "^1.0.2"
+            },
+            "engines": {
+                "node": "^10 || ^12 || >=14"
+            },
+            "funding": {
+                "type": "opencollective",
+                "url": "https://opencollective.com/postcss/"
+            }
+        },
+        "node_modules/shvl": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/shvl/-/shvl-2.0.3.tgz",
+            "integrity": "sha512-V7C6S9Hlol6SzOJPnQ7qzOVEWUQImt3BNmmzh40wObhla3XOYMe4gGiYzLrJd5TFa+cI2f9LKIRJTTKZSTbWgw=="
+        },
+        "node_modules/source-map": {
+            "version": "0.6.1",
+            "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+            "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+            "peer": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/source-map-js": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+            "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+            "peer": true,
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/sourcemap-codec": {
+            "version": "1.4.8",
+            "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+            "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
+            "peer": true
+        },
+        "node_modules/vue": {
+            "version": "3.2.31",
+            "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.31.tgz",
+            "integrity": "sha512-odT3W2tcffTiQCy57nOT93INw1auq5lYLLYtWpPYQQYQOOdHiqFct9Xhna6GJ+pJQaF67yZABraH47oywkJgFw==",
+            "peer": true,
+            "dependencies": {
+                "@vue/compiler-dom": "3.2.31",
+                "@vue/compiler-sfc": "3.2.31",
+                "@vue/runtime-dom": "3.2.31",
+                "@vue/server-renderer": "3.2.31",
+                "@vue/shared": "3.2.31"
+            }
+        },
+        "node_modules/vuex": {
+            "version": "4.0.2",
+            "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.0.2.tgz",
+            "integrity": "sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==",
+            "peer": true,
+            "dependencies": {
+                "@vue/devtools-api": "^6.0.0-beta.11"
+            },
+            "peerDependencies": {
+                "vue": "^3.0.2"
+            }
+        },
+        "node_modules/vuex-persistedstate": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/vuex-persistedstate/-/vuex-persistedstate-4.1.0.tgz",
+            "integrity": "sha512-3SkEj4NqwM69ikJdFVw6gObeB0NHyspRYMYkR/EbhR0hbvAKyR5gksVhtAfY1UYuWUOCCA0QNGwv9pOwdj+XUQ==",
+            "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
+            "dependencies": {
+                "deepmerge": "^4.2.2",
+                "shvl": "^2.0.3"
+            },
+            "peerDependencies": {
+                "vuex": "^3.0 || ^4.0.0-rc"
+            }
+        }
     },
     },
-    "node_modules/deepmerge": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
-      "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/shvl": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/shvl/-/shvl-2.0.3.tgz",
-      "integrity": "sha512-V7C6S9Hlol6SzOJPnQ7qzOVEWUQImt3BNmmzh40wObhla3XOYMe4gGiYzLrJd5TFa+cI2f9LKIRJTTKZSTbWgw=="
-    },
-    "node_modules/vue": {
-      "version": "2.6.14",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.14.tgz",
-      "integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==",
-      "peer": true
-    },
-    "node_modules/vue-i18n": {
-      "version": "8.26.7",
-      "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.26.7.tgz",
-      "integrity": "sha512-7apa5PvRg1YCLoraE3lOgpCG8hJGupLCtywQWedWsgBbvF0TOgFvhitqK9xRH0PBGG1G8aiJz9oklyNDFfDxLg=="
-    },
-    "node_modules/vuex": {
-      "version": "3.6.2",
-      "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.6.2.tgz",
-      "integrity": "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==",
-      "peerDependencies": {
-        "vue": "^2.0.0"
-      }
-    },
-    "node_modules/vuex-persistedstate": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/vuex-persistedstate/-/vuex-persistedstate-4.1.0.tgz",
-      "integrity": "sha512-3SkEj4NqwM69ikJdFVw6gObeB0NHyspRYMYkR/EbhR0hbvAKyR5gksVhtAfY1UYuWUOCCA0QNGwv9pOwdj+XUQ==",
-      "dependencies": {
-        "deepmerge": "^4.2.2",
-        "shvl": "^2.0.3"
-      },
-      "peerDependencies": {
-        "vuex": "^3.0 || ^4.0.0-rc"
-      }
-    }
-  },
-  "dependencies": {
-    "deepmerge": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
-      "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
-    },
-    "shvl": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/shvl/-/shvl-2.0.3.tgz",
-      "integrity": "sha512-V7C6S9Hlol6SzOJPnQ7qzOVEWUQImt3BNmmzh40wObhla3XOYMe4gGiYzLrJd5TFa+cI2f9LKIRJTTKZSTbWgw=="
-    },
-    "vue": {
-      "version": "2.6.14",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.14.tgz",
-      "integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==",
-      "peer": true
-    },
-    "vue-i18n": {
-      "version": "8.26.7",
-      "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.26.7.tgz",
-      "integrity": "sha512-7apa5PvRg1YCLoraE3lOgpCG8hJGupLCtywQWedWsgBbvF0TOgFvhitqK9xRH0PBGG1G8aiJz9oklyNDFfDxLg=="
-    },
-    "vuex": {
-      "version": "3.6.2",
-      "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.6.2.tgz",
-      "integrity": "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==",
-      "requires": {}
-    },
-    "vuex-persistedstate": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/vuex-persistedstate/-/vuex-persistedstate-4.1.0.tgz",
-      "integrity": "sha512-3SkEj4NqwM69ikJdFVw6gObeB0NHyspRYMYkR/EbhR0hbvAKyR5gksVhtAfY1UYuWUOCCA0QNGwv9pOwdj+XUQ==",
-      "requires": {
-        "deepmerge": "^4.2.2",
-        "shvl": "^2.0.3"
-      }
+    "dependencies": {
+        "@babel/parser": {
+            "version": "7.17.0",
+            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz",
+            "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==",
+            "peer": true
+        },
+        "@vue/compiler-core": {
+            "version": "3.2.31",
+            "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.31.tgz",
+            "integrity": "sha512-aKno00qoA4o+V/kR6i/pE+aP+esng5siNAVQ422TkBNM6qA4veXiZbSe8OTXHXquEi/f6Akc+nLfB4JGfe4/WQ==",
+            "peer": true,
+            "requires": {
+                "@babel/parser": "^7.16.4",
+                "@vue/shared": "3.2.31",
+                "estree-walker": "^2.0.2",
+                "source-map": "^0.6.1"
+            }
+        },
+        "@vue/compiler-dom": {
+            "version": "3.2.31",
+            "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.31.tgz",
+            "integrity": "sha512-60zIlFfzIDf3u91cqfqy9KhCKIJgPeqxgveH2L+87RcGU/alT6BRrk5JtUso0OibH3O7NXuNOQ0cDc9beT0wrg==",
+            "peer": true,
+            "requires": {
+                "@vue/compiler-core": "3.2.31",
+                "@vue/shared": "3.2.31"
+            }
+        },
+        "@vue/compiler-sfc": {
+            "version": "3.2.31",
+            "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.31.tgz",
+            "integrity": "sha512-748adc9msSPGzXgibHiO6T7RWgfnDcVQD+VVwYgSsyyY8Ans64tALHZANrKtOzvkwznV/F4H7OAod/jIlp/dkQ==",
+            "peer": true,
+            "requires": {
+                "@babel/parser": "^7.16.4",
+                "@vue/compiler-core": "3.2.31",
+                "@vue/compiler-dom": "3.2.31",
+                "@vue/compiler-ssr": "3.2.31",
+                "@vue/reactivity-transform": "3.2.31",
+                "@vue/shared": "3.2.31",
+                "estree-walker": "^2.0.2",
+                "magic-string": "^0.25.7",
+                "postcss": "^8.1.10",
+                "source-map": "^0.6.1"
+            }
+        },
+        "@vue/compiler-ssr": {
+            "version": "3.2.31",
+            "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.31.tgz",
+            "integrity": "sha512-mjN0rqig+A8TVDnsGPYJM5dpbjlXeHUm2oZHZwGyMYiGT/F4fhJf/cXy8QpjnLQK4Y9Et4GWzHn9PS8AHUnSkw==",
+            "peer": true,
+            "requires": {
+                "@vue/compiler-dom": "3.2.31",
+                "@vue/shared": "3.2.31"
+            }
+        },
+        "@vue/devtools-api": {
+            "version": "6.0.8",
+            "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.0.8.tgz",
+            "integrity": "sha512-bzei608bPVQE2yq9Ghrjn/dnpf27mWfrr0q0ZQiuZoO3LQqFG0T1xSGz+9vw1j9KAZM2Cu9vdQMkddDxqzZGNg==",
+            "peer": true
+        },
+        "@vue/reactivity": {
+            "version": "3.2.31",
+            "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.31.tgz",
+            "integrity": "sha512-HVr0l211gbhpEKYr2hYe7hRsV91uIVGFYNHj73njbARVGHQvIojkImKMaZNDdoDZOIkMsBc9a1sMqR+WZwfSCw==",
+            "peer": true,
+            "requires": {
+                "@vue/shared": "3.2.31"
+            }
+        },
+        "@vue/reactivity-transform": {
+            "version": "3.2.31",
+            "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.31.tgz",
+            "integrity": "sha512-uS4l4z/W7wXdI+Va5pgVxBJ345wyGFKvpPYtdSgvfJfX/x2Ymm6ophQlXXB6acqGHtXuBqNyyO3zVp9b1r0MOA==",
+            "peer": true,
+            "requires": {
+                "@babel/parser": "^7.16.4",
+                "@vue/compiler-core": "3.2.31",
+                "@vue/shared": "3.2.31",
+                "estree-walker": "^2.0.2",
+                "magic-string": "^0.25.7"
+            }
+        },
+        "@vue/runtime-core": {
+            "version": "3.2.31",
+            "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.31.tgz",
+            "integrity": "sha512-Kcog5XmSY7VHFEMuk4+Gap8gUssYMZ2+w+cmGI6OpZWYOEIcbE0TPzzPHi+8XTzAgx1w/ZxDFcXhZeXN5eKWsA==",
+            "peer": true,
+            "requires": {
+                "@vue/reactivity": "3.2.31",
+                "@vue/shared": "3.2.31"
+            }
+        },
+        "@vue/runtime-dom": {
+            "version": "3.2.31",
+            "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.31.tgz",
+            "integrity": "sha512-N+o0sICVLScUjfLG7u9u5XCjvmsexAiPt17GNnaWHJUfsKed5e85/A3SWgKxzlxx2SW/Hw7RQxzxbXez9PtY3g==",
+            "peer": true,
+            "requires": {
+                "@vue/runtime-core": "3.2.31",
+                "@vue/shared": "3.2.31",
+                "csstype": "^2.6.8"
+            }
+        },
+        "@vue/server-renderer": {
+            "version": "3.2.31",
+            "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.31.tgz",
+            "integrity": "sha512-8CN3Zj2HyR2LQQBHZ61HexF5NReqngLT3oahyiVRfSSvak+oAvVmu8iNLSu6XR77Ili2AOpnAt1y8ywjjqtmkg==",
+            "peer": true,
+            "requires": {
+                "@vue/compiler-ssr": "3.2.31",
+                "@vue/shared": "3.2.31"
+            }
+        },
+        "@vue/shared": {
+            "version": "3.2.31",
+            "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.31.tgz",
+            "integrity": "sha512-ymN2pj6zEjiKJZbrf98UM2pfDd6F2H7ksKw7NDt/ZZ1fh5Ei39X5tABugtT03ZRlWd9imccoK0hE8hpjpU7irQ==",
+            "peer": true
+        },
+        "csstype": {
+            "version": "2.6.19",
+            "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz",
+            "integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==",
+            "peer": true
+        },
+        "deepmerge": {
+            "version": "4.2.2",
+            "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+            "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
+        },
+        "estree-walker": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+            "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+            "peer": true
+        },
+        "magic-string": {
+            "version": "0.25.7",
+            "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
+            "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
+            "peer": true,
+            "requires": {
+                "sourcemap-codec": "^1.4.4"
+            }
+        },
+        "moment": {
+            "version": "2.29.1",
+            "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
+            "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
+        },
+        "nanoid": {
+            "version": "3.2.0",
+            "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
+            "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==",
+            "peer": true
+        },
+        "picocolors": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+            "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+            "peer": true
+        },
+        "postcss": {
+            "version": "8.4.6",
+            "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz",
+            "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==",
+            "peer": true,
+            "requires": {
+                "nanoid": "^3.2.0",
+                "picocolors": "^1.0.0",
+                "source-map-js": "^1.0.2"
+            }
+        },
+        "shvl": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/shvl/-/shvl-2.0.3.tgz",
+            "integrity": "sha512-V7C6S9Hlol6SzOJPnQ7qzOVEWUQImt3BNmmzh40wObhla3XOYMe4gGiYzLrJd5TFa+cI2f9LKIRJTTKZSTbWgw=="
+        },
+        "source-map": {
+            "version": "0.6.1",
+            "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+            "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+            "peer": true
+        },
+        "source-map-js": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+            "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+            "peer": true
+        },
+        "sourcemap-codec": {
+            "version": "1.4.8",
+            "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+            "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
+            "peer": true
+        },
+        "vue": {
+            "version": "3.2.31",
+            "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.31.tgz",
+            "integrity": "sha512-odT3W2tcffTiQCy57nOT93INw1auq5lYLLYtWpPYQQYQOOdHiqFct9Xhna6GJ+pJQaF67yZABraH47oywkJgFw==",
+            "peer": true,
+            "requires": {
+                "@vue/compiler-dom": "3.2.31",
+                "@vue/compiler-sfc": "3.2.31",
+                "@vue/runtime-dom": "3.2.31",
+                "@vue/server-renderer": "3.2.31",
+                "@vue/shared": "3.2.31"
+            }
+        },
+        "vuex": {
+            "version": "4.0.2",
+            "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.0.2.tgz",
+            "integrity": "sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==",
+            "peer": true,
+            "requires": {
+                "@vue/devtools-api": "^6.0.0-beta.11"
+            }
+        },
+        "vuex-persistedstate": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/vuex-persistedstate/-/vuex-persistedstate-4.1.0.tgz",
+            "integrity": "sha512-3SkEj4NqwM69ikJdFVw6gObeB0NHyspRYMYkR/EbhR0hbvAKyR5gksVhtAfY1UYuWUOCCA0QNGwv9pOwdj+XUQ==",
+            "requires": {
+                "deepmerge": "^4.2.2",
+                "shvl": "^2.0.3"
+            }
+        }
     }
     }
-  }
 }
 }

+ 6 - 2
package.json

@@ -9,5 +9,9 @@
         "下拉刷新",
         "下拉刷新",
         "可自定义",
         "可自定义",
         "滚动"
         "滚动"
-    ]
-}
+    ],
+    "dependencies": {
+        "moment": "^2.29.1",
+        "vuex-persistedstate": "^4.1.0"
+    }
+}

+ 37 - 0
pages/calendar/course_item.vue

@@ -0,0 +1,37 @@
+<template>
+	<view class="course-item">
+		<text>{{data.class_number}}</text>
+	</view>
+</template>
+
+<script>
+import moment from 'moment';
+export default {
+	props: {
+		data: {
+			type: Object,
+			default: () => ({})
+		},
+	},
+	data() {
+		return {};
+	},
+	onReady() {},
+	mounted() {
+		// let now = new Date(
+	},
+	methods: {}
+};
+</script>
+
+<style scoped>
+.course-item {
+	height: 8rem;
+	width: auto;
+	border-left: 5px solid #F1A532;
+	border-top: 1px solid #F1F1F1;
+	margin: 1rem;
+	border-radius: 5px;
+	box-shadow: 3px 3px 0 0 #F1F1F1;
+}
+</style>

+ 56 - 52
pages/calendar/index.vue

@@ -9,7 +9,7 @@
 				<u-button @click="testBtnClick">直播测试</u-button>
 				<u-button @click="testBtnClick">直播测试</u-button>
 			</view>
 			</view>
 		</u-navbar>
 		</u-navbar>
-		<scroll-list ref="list" :option="option" @load="load" @refresh="refresh">
+		<scroll-list ref="list" :option="option" @refresh="refresh">
 			<!-- 日历 -->
 			<!-- 日历 -->
 			<uni-calendar insert foldAble :selected="selected" @change="change" @monthSwitch="monthSwitch" />
 			<uni-calendar insert foldAble :selected="selected" @change="change" @monthSwitch="monthSwitch" />
 			<!-- hint -->
 			<!-- hint -->
@@ -23,37 +23,32 @@
 			</view>
 			</view>
 
 
 			<!-- 列表 -->
 			<!-- 列表 -->
-			<view class="list-item" v-for="(item, index) in list" :key="index">
-				<view class="avatar">{{ index + 1 }}</view>
-				<view class="info">
-					<view class="info-item"></view>
-					<view class="info-item"></view>
-				</view>
-			</view>
+			<course-item v-for="(item, index) in list" :key="index" :data="item" />
+			
+			<view slot="empty" />
 		</scroll-list>
 		</scroll-list>
 	</view>
 	</view>
 </template>
 </template>
 
 
 <script>
 <script>
 import Api from '../../api/api.js';
 import Api from '../../api/api.js';
+import moment from 'moment'
 import UniCalendar from '../../components/uni-calendar/uni-calendar.vue';
 import UniCalendar from '../../components/uni-calendar/uni-calendar.vue';
+import CourseItem from './course_item.vue'
 export default {
 export default {
 	components: {
 	components: {
-		UniCalendar
+		UniCalendar,
+		CourseItem
 	},
 	},
 	data() {
 	data() {
 		return {
 		return {
+			currentMonth: '',
 			currentDate: '',
 			currentDate: '',
-			show: false,
-			mode: 'range',
-			selected: [
-				{ date: '2022-01-05', info: '签到', data: { custom: '自定义信息', name: '自定义消息头' } },
-				{ date: '2022-01-09', info: '打卡', data: { custom: '自定义信息', name: '自定义消息头' } },
-				{ date: '2022-02-03', info: '打卡', data: { custom: '自定义信息', name: '自定义消息头' } }
-			],
+			selected: [],
 			option: {
 			option: {
 				size: 10,
 				size: 10,
-				auto: false
+				auto: false,
+				loadDisabled: true
 			},
 			},
 			list: [],
 			list: [],
 			hints: [
 			hints: [
@@ -61,7 +56,8 @@ export default {
 				{ index: 1, color: 'green', title: '已上课' },
 				{ index: 1, color: 'green', title: '已上课' },
 				{ index: 2, color: 'blue', title: '未上完课' },
 				{ index: 2, color: 'blue', title: '未上完课' },
 				{ index: 3, color: 'grey', title: '班级取消' }
 				{ index: 3, color: 'grey', title: '班级取消' }
-			]
+			],
+			datas: {}
 		};
 		};
 	},
 	},
 	onReady() {},
 	onReady() {},
@@ -69,16 +65,43 @@ export default {
 		let now = new Date();
 		let now = new Date();
 		var year = now.getFullYear();
 		var year = now.getFullYear();
 		var month = now.getMonth() + 1;
 		var month = now.getMonth() + 1;
-		month = `${month}`.padStart(2,0);
-		this.currentDate = `${year}${month}`; /// 202201
-		console.log(this.currentDate);
-
+		var day = now.getDay();
+		month = `${month}`.padStart(2,0)
+		day = `${day}`.padStart(2,0)
+		this.currentMonth = `${year}${month}`;
+		this.currentDate = `${year}-${month}-${day}`
 		this.getClassSchedule();
 		this.getClassSchedule();
 	},
 	},
 	methods: {
 	methods: {
 		async getClassSchedule() {
 		async getClassSchedule() {
-			Api.classSchedule(this.currentDate).then(res => {
-				console.log(res);
+			var that = this
+			Api.classSchedule(this.currentMonth).then(res => {
+				if (res.code != 200) return
+				let data = res.data
+				var map = {}
+				data.forEach(e=>{
+					var startTime = moment(e.start_time).format('YYYY-MM-DD')
+					var arrs = map[startTime] || []
+					if (arrs.map(a=>a.class_id).indexOf(e.class_id) == -1) {
+						arrs.push(e)
+					}
+					map[startTime] = arrs
+				})
+				that.datas = map
+				console.log('fuck')
+				var _tempSelected = []
+				for (let i = 0; i < Object.keys(map).length; i++) {
+					var time = Object.keys(map)[i]
+					_tempSelected.push({
+						date: time,
+						statue: 0,
+						count: map[time].length,
+					})
+				}
+				that.selected = _tempSelected
+				that.list = map[that.currentDate]
+				
+				that.$refs.list.refreshSuccess({ list: that.list, total: that.list.length })
 			});
 			});
 		},
 		},
 		previousBtnDidClick() {
 		previousBtnDidClick() {
@@ -88,11 +111,12 @@ export default {
 			console.log('nextBtnDidClick');
 			console.log('nextBtnDidClick');
 		},
 		},
 		change(e) {
 		change(e) {
-			console.log(e);
+			this.currentDate = e.fulldate
+			this.list = this.datas[this.currentDate]
 		},
 		},
 		monthSwitch(e) {
 		monthSwitch(e) {
-			this.currentDate = `${e.year}${e.month.toString().padStart(2,0)}`
-			console.log(this.currentDate)
+			this.currentMonth = `${e.year}${e.month.toString().padStart(2,0)}`
+			console.log(this.currentMonth)
 			this.getClassSchedule();
 			this.getClassSchedule();
 		},
 		},
 		testBtnClick() {
 		testBtnClick() {
@@ -101,39 +125,19 @@ export default {
 				url: '../test/livetest'
 				url: '../test/livetest'
 			});
 			});
 		},
 		},
-		// 加载数据
-		load(paging) {
-			setTimeout(() => {
-				let list = [];
-				for (var i = 0; i < paging.size; i++) {
-					list.push(i);
-				}
-				this.list = [...this.list, ...list];
-				// 加载成功  参数对象{list: 当前列表,total: 数据总长度(后端查询的total)}
-				this.$refs.list.loadSuccess({ list: this.list, total: 50 });
-				// 加载失败
-				// this.$refs.list.loadFail()
-			}, this.$u.random(100, 1000));
-		},
 		// 刷新刷剧
 		// 刷新刷剧
 		refresh(paging) {
 		refresh(paging) {
-			setTimeout(() => {
-				let list = [];
-				for (var i = 0; i < paging.size; i++) {
-					list.push(i);
-				}
-				this.list = list;
-				// 刷新成功  参数对象{list: 当前列表,total: 数据总长度(后端查询的total)}
-				this.$refs.list.refreshSuccess({ list: this.list, total: 50 });
-				// 刷新失败
-				// this.$refs.list.refreshFail()
-			}, this.$u.random(100, 1000));
+			this.getClassSchedule()
 		}
 		}
 	}
 	}
 };
 };
 </script>
 </script>
 
 
 <style scoped>
 <style scoped>
+	.calendar-page {
+		background-color: #FFFFFF;
+		margin-bottom: 70px;
+	}
 	.hint-box {
 	.hint-box {
 		height: 5px;
 		height: 5px;
 	}
 	}

+ 29 - 2
pages/test/livetest.vue

@@ -1,8 +1,35 @@
 <template>
 <template>
+	<view class="padding-lr">
+		<iframe
+			src="https://open.ys7.com/ezopen/h5/iframe?url=ezopen://open.ys7.com/C88252412/1.hd.live&autoplay=1&accessToken=at.atot0lhp50dudupv9u79eic62qyw89n1-3ra5hix23q-1tf487v-grmbjozxf"
+			width="500"
+			height="400"
+			id="ysOpenDevice"
+			allowfullscreen
+		></iframe>
+	</view>
 </template>
 </template>
 
 
 <script>
 <script>
+export default {
+	data() {
+		return {
+			player: null
+		};
+	},
+	computed: {},
+	props: {},
+	mounted() {
+		// var _player = new EZUIKit.EZUIKitPlayer({
+		// 	id: 'video-container', // 视频容器ID
+		// 	accessToken: 'at.atot0lhp50dudupv9u79eic62qyw89n1-3ra5hix23q-1tf487v-grmbjozxf',
+		// 	url: 'ezopen://open.ys7.com/116095156/1.hd.live'
+		// });
+		// this.player = _player;
+		// _player.play();
+	},
+	methods: {}
+};
 </script>
 </script>
 
 
-<style>
-</style>
+<style lang="scss"></style>

BIN=BIN
static/home/blue_book.png


BIN=BIN
static/home/green_book.png


BIN=BIN
static/home/grey_book.png


BIN=BIN
static/home/yellow_book.png


+ 2 - 1
uni.scss

@@ -18,7 +18,8 @@
 /* 颜色变量 */
 /* 颜色变量 */
 
 
 /* 行为相关颜色 */
 /* 行为相关颜色 */
-$uni-color-primary: #007aff;
+// $uni-color-primary: #007aff;
+$uni-color-primary: red;
 $uni-color-success: #4cd964;
 $uni-color-success: #4cd964;
 $uni-color-warning: #f0ad4e;
 $uni-color-warning: #f0ad4e;
 $uni-color-error: #dd524d;
 $uni-color-error: #dd524d;

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
unpackage/dist/dev/app-plus/app-service.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 15 - 23
unpackage/dist/dev/app-plus/app-view.js


BIN=BIN
unpackage/dist/dev/app-plus/static/home/blue_book.png


BIN=BIN
unpackage/dist/dev/app-plus/static/home/green_book.png


BIN=BIN
unpackage/dist/dev/app-plus/static/home/grey_book.png


BIN=BIN
unpackage/dist/dev/app-plus/static/home/yellow_book.png


Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio