任一存 %!s(int64=2) %!d(string=hai) anos
pai
achega
a43be2766f

+ 1 - 0
package.json

@@ -12,6 +12,7 @@
     "axios": "^1.1.3",
     "core-js": "^3.8.3",
     "dayjs": "^1.11.7",
+    "element-plus": "^2.3.8",
     "mitt": "^3.0.0",
     "vue": "^3.2.13",
     "vue-router": "^4.0.3",

+ 7 - 7
src/App.vue

@@ -73,13 +73,13 @@ export default {
 // ::-webkit-scrollbar-thumb { background: #828a5b; border-radius: 0.15rem; }
 // ::-webkit-scrollbar-corner { background: #dddecc; }
 
-// // vue组件过渡效果
-// .fade-out-leave-active {
-//   transition: opacity 1s;
-// }
-// .fade-out-leave-to {
-//   opacity: 0;
-// }
+// vue组件过渡效果
+.fade-out-leave-active {
+  transition: opacity 1s;
+}
+.fade-out-leave-to {
+  opacity: 0;
+}
 
 // // 不断渐变显隐 animation
 // .animation-show-hide {

BIN=BIN
src/assets/images/bg-1.mp4


BIN=BIN
src/assets/images/bg-2.mp4


BIN=BIN
src/assets/images/bg-3.mp4


BIN=BIN
src/assets/images/bg-4.mp4


BIN=BIN
src/assets/images/bg-5.mp4


BIN=BIN
src/assets/images/bg-6.mp4


BIN=BIN
src/assets/images/bg-learn.jpg


BIN=BIN
src/assets/images/bg-watch.jpg


BIN=BIN
src/assets/images/book-record.png


BIN=BIN
src/assets/images/btn-skip.png


BIN=BIN
src/assets/images/btn-startup-bg.png


BIN=BIN
src/assets/images/lion-female-speaking.gif


BIN=BIN
src/assets/images/lion-male-speaking.gif


BIN=BIN
src/assets/images/女狮子走路.gif


BIN=BIN
src/assets/images/男狮子走路.gif


BIN=BIN
src/assets/videos/startup-video.mp4


+ 102 - 0
src/components/StartUp.vue

@@ -0,0 +1,102 @@
+<template>
+  <div class="start-up">
+    <button
+      v-show="!isBeginVideo"
+      class="begin"
+      @click="onClickBeginVideo"
+    >
+      <img
+        class=""
+        src="@/assets/images/btn-startup-bg.png"
+        alt=""
+        draggable="false"
+      >
+      <span>进入学习</span>
+    </button>
+    <video
+      v-show="isBeginVideo"
+      ref="startup-video"
+      src="@/assets/videos/startup-video.mp4"
+      @ended="onStartupOver"
+    />
+    <button
+      class="skip"
+      @click="onStartupOver"
+    >
+      <img
+        class=""
+        src="@/assets/images/btn-skip.png"
+        alt=""
+        draggable="false"
+      >
+    </button>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'StartUp',
+  emits: ['over'],
+  data() {
+    return {
+      isBeginVideo: false
+    }
+  },
+  methods: {
+    onClickBeginVideo() {
+      this.isBeginVideo = true
+      this.$refs['startup-video'].play()
+    },
+    onStartupOver() {
+      this.$emit('over')
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+.start-up {
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  background-color: #000;
+  z-index: 10;
+  >button.begin {
+    position: absolute;
+    left: 50%;
+    top: 50%;
+    transform: translate(-50%, -50%);
+    font-size: 0;
+    >img {
+      height: 100px;
+    }
+    >span {
+      position: absolute;
+      left: 50%;
+      top: 50%;
+      transform: translate(-50%, -50%);
+      color: #fff;
+      font-size: 34px;
+      letter-spacing: 5px;
+      font-family: 'FZShaoEr-M11-Regular';
+    }
+  }
+  >video {
+    position: absolute;
+    left: 0;
+    top: 0;
+    width: 100%;
+    height: 100%;
+  }
+  >.skip {
+    position: absolute;
+    top: 20px;
+    right: 20px;
+    >img {
+      height: 40px;
+    }
+  }
+}
+</style>

+ 2 - 0
src/main.js

@@ -7,6 +7,8 @@ import "@/assets/style/my-reset.css"
 import UAParser from "@/libs/ua-parser.min.js"
 import clickOutside from "@/directives/v-click-outside.js"
 import mitt from "mitt"
+import ElementPlus from 'element-plus'
+import 'element-plus/dist/index.css'
 // import 'viewerjs/dist/viewer.css'
 // import VueViewer from 'v-viewer'
 

+ 3 - 3
src/store/index.js

@@ -2,13 +2,13 @@ import { createStore } from 'vuex'
 
 export default createStore({
   state: {
-    usingChinese: true,
+    hasPlayedStartupVideo: false,
   },
   getters: {
   },
   mutations: {
-    setUsingChinese(state, value) {
-      state.usingChinese = value
+    recordStartupVideoPlayed(state) {
+      state.hasPlayedStartupVideo = true
     },
   },
   actions: {

+ 23 - 1
src/views/Home.vue

@@ -2,6 +2,12 @@
   <div
     class="home"
   >
+    <transition name="fade-out">
+      <StartUp
+        v-show="!hasPlayedStartupVideo"
+        @over="onStartUpOver"
+      />
+    </transition>
     <div class="lion-male">
       <img
         class="lion"
@@ -26,6 +32,12 @@
         v-for="(item1, idx) in menu"
         :key="idx"
         class="level1"
+        @click="$router.push({
+          name: 'Level2',
+          query: {
+            sceneIdx: idx,
+          },
+        })"
       >
         <h2>第{{ idx + 1 }}章&emsp;{{ item1.name }}</h2>
         <div
@@ -67,9 +79,13 @@
 
 <script>
 import { onMounted, onUnmounted, watch, ref, reactive, computed } from "vue"
+import StartUp from "@/components/StartUp.vue"
 
 export default {
   name: 'HomeView',
+  components: {
+    StartUp,
+  },
   setup() {
     const bgImgWidth = 1920
     const bgImgHeight = 1080
@@ -122,6 +138,7 @@ export default {
   },
   computed: {
     ...mapState([
+      'hasPlayedStartupVideo'
     ]),
   },
   mounted() {
@@ -130,8 +147,11 @@ export default {
   },
   methods: {
     ...mapMutations([
+      'recordStartupVideoPlayed',
     ]),
-
+    onStartUpOver() {
+      this.recordStartupVideoPlayed()
+    }
   },
 }
 </script>
@@ -188,6 +208,7 @@ export default {
     background-position: center center;
     counter-reset: lalala;
     transition: all 0.7s;
+    z-index: 5;
     >.level1 {
       font-size: 24px;
       font-family: Source Han Sans CN-Bold, Source Han Sans CN;
@@ -232,6 +253,7 @@ export default {
     display: flex;
     justify-content: center;
     align-items: center;
+    z-index: 3;
     >div {
       transform: translateX(-3px);
     }

+ 18 - 5
src/views/Learn.vue

@@ -1,8 +1,12 @@
 <template>
   <div
-    class="home"
+    class="learn-comp"
   >
-    {{ $env.BASE_URL }}
+    <!-- <video
+      src=""
+      autoplay
+      controls
+    /> -->
   </div>
 </template>
 
@@ -18,8 +22,6 @@ export default {
     ]),
   },
   mounted() {
-    console.log(process.env)
-    this.$mitt.emit('test', { msg: 'home mounted' })
   },
   unmounted() {
   },
@@ -31,8 +33,19 @@ export default {
 </script>
 
 <style lang="less" scoped>
-.home {
+.learn-comp {
+  position: absolute;
+  left: 0;
+  top: 0;
   width: 100%;
   height: 100%;
+  background-image: url(@/assets/images/bg-learn.jpg);
+  background-size: cover;
+  background-repeat: no-repeat;
+  background-position: center center;
+  >video {
+    position: absolute;
+
+  }
 }
 </style>

+ 17 - 3
src/views/Level2.vue

@@ -1,10 +1,13 @@
 <template>
   <div
     class="level-2"
-    :style="{
-      backgroundImage: `url(${getBgImgUrl()})`,
-    }"
   >
+    <video
+      class="bg"
+      :src="getBgVideoUrl()"
+      loop
+      autoplay
+    />
     <menu
       :style="{
         backgroundImage: `url(${getMenuBgImgUrl()})`,
@@ -53,6 +56,9 @@ export default {
     getBgImgUrl() {
       return require(`@/assets/images/bg-${Number(this.$route.query.sceneIdx) + 1}.jpg`)
     },
+    getBgVideoUrl() {
+      return require(`@/assets/images/bg-${Number(this.$route.query.sceneIdx) + 1}.mp4`)
+    },
     getMenuBgImgUrl() {
       return require(`@/assets/images/bg-menu-level2-${Number(this.$route.query.sceneIdx) + 1}.png`)
     },
@@ -68,6 +74,14 @@ export default {
   background-size: cover;
   background-repeat: no-repeat;
   background-position: center center;
+  >video.bg {
+    position: absolute;
+    left: 0;
+    top: 0;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+  }
   >menu {
     position: absolute;
     top: 0;

+ 30 - 3
src/views/Level3.vue

@@ -1,10 +1,13 @@
 <template>
   <div
     class="level-3"
-    :style="{
-      backgroundImage: `url(${getBgImgUrl()})`,
-    }"
   >
+    <video
+      class="bg"
+      :src="getBgVideoUrl()"
+      loop
+      autoplay
+    />
     <menu>
       <img
         class="bg"
@@ -20,12 +23,24 @@
     </menu>
     <button
       class="watch"
+      @click="$router.push({
+        name: 'WatchView',
+        query: $route.query,
+      })"
     />
     <button
       class="learn"
+      @click="$router.push({
+        name: 'LearnView',
+        query: $route.query,
+      })"
     />
     <button
       class="record"
+      @click="$router.push({
+        name: 'TravelRecord',
+        query: $route.query,
+      })"
     />
     <div class="lion-wrapper">
       <img
@@ -63,6 +78,9 @@ export default {
     getBgImgUrl() {
       return require(`@/assets/images/bg-${Number(this.$route.query.sceneIdxLevel2) + 1}.jpg`)
     },
+    getBgVideoUrl() {
+      return require(`@/assets/images/bg-${Number(this.$route.query.sceneIdxLevel2) + 1}.mp4`)
+    },
     getMenuBgImgUrl() {
       return require(`@/assets/images/bg-menu-level3-length${this.sceneInfo.name.split(' ').join('').length}.png`)
     },
@@ -78,6 +96,14 @@ export default {
   background-size: cover;
   background-repeat: no-repeat;
   background-position: center center;
+  >video.bg {
+    position: absolute;
+    left: 0;
+    top: 0;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+  }
   >menu {
     position: absolute;
     top: 0;
@@ -102,6 +128,7 @@ export default {
       display: flex;
       justify-content: center;
       align-items: center;
+      white-space: pre;
     }
     &.hide {
       transform: translateX(110%);

+ 37 - 6
src/views/TravelRecord.vue

@@ -1,14 +1,22 @@
 <template>
   <div
-    class="home"
+    class="travel-record"
   >
-    {{ $env.BASE_URL }}
+    <img
+      class="book"
+      src="@/assets/images/book-record.png"
+      alt=""
+      draggable="false"
+      @click="onClickBook"
+    >
   </div>
 </template>
 
 <script>
+import { ElMessageBox } from 'element-plus'
+
 export default {
-  name: 'HomeView',
+  name: 'TravelRecord',
   data() {
     return {
     }
@@ -18,21 +26,44 @@ export default {
     ]),
   },
   mounted() {
-    console.log(process.env)
-    this.$mitt.emit('test', { msg: 'home mounted' })
   },
   unmounted() {
   },
   methods: {
     ...mapMutations([
     ]),
+    onClickBook() {
+      ElMessageBox.alert('', '敬请期待!', {
+        confirmButtonText: '确定',
+        callback: (action) => {
+          console.log(action)
+        },
+      })
+    }
   },
 }
 </script>
 
 <style lang="less" scoped>
-.home {
+.travel-record {
+  position: absolute;
+  left: 0;
+  top: 0;
   width: 100%;
   height: 100%;
+  background-image: url(@/assets/images/bg-home.jpg);
+  background-size: cover;
+  background-repeat: no-repeat;
+  background-position: center center;
+  >img.book {
+    max-height: 90%;
+    max-width: 90%;
+    object-fit: contain;
+    position: absolute;
+    left: 50%;
+    top: 50%;
+    transform: translate(-50%, -50%);
+    cursor: pointer;
+  }
 }
 </style>

+ 18 - 5
src/views/Watch.vue

@@ -1,8 +1,12 @@
 <template>
   <div
-    class="home"
+    class="watch-comp"
   >
-    {{ $env.BASE_URL }}
+    <!-- <video
+      src=""
+      autoplay
+      controls
+    /> -->
   </div>
 </template>
 
@@ -18,8 +22,6 @@ export default {
     ]),
   },
   mounted() {
-    console.log(process.env)
-    this.$mitt.emit('test', { msg: 'home mounted' })
   },
   unmounted() {
   },
@@ -31,8 +33,19 @@ export default {
 </script>
 
 <style lang="less" scoped>
-.home {
+.watch-comp {
+  position: absolute;
+  left: 0;
+  top: 0;
   width: 100%;
   height: 100%;
+  background-image: url(@/assets/images/bg-watch.jpg);
+  background-size: cover;
+  background-repeat: no-repeat;
+  background-position: center center;
+  >video {
+    position: absolute;
+
+  }
 }
 </style>

+ 119 - 2
yarn.lock

@@ -1018,11 +1018,21 @@
     "@babel/helper-validator-identifier" "^7.22.5"
     to-fast-properties "^2.0.0"
 
+"@ctrl/tinycolor@^3.4.1":
+  version "3.6.0"
+  resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.0.tgz#53fa5fe9c34faee89469e48f91d51a3766108bc8"
+  integrity sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ==
+
 "@discoveryjs/json-ext@0.5.7":
   version "0.5.7"
   resolved "https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
   integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
 
+"@element-plus/icons-vue@^2.0.6":
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.1.0.tgz#7ad90d08a8c0d5fd3af31c4f73264ca89614397a"
+  integrity sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==
+
 "@eslint/eslintrc@^0.4.3":
   version "0.4.3"
   resolved "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c"
@@ -1038,6 +1048,18 @@
     minimatch "^3.0.4"
     strip-json-comments "^3.1.1"
 
+"@floating-ui/core@^1.3.1":
+  version "1.3.1"
+  resolved "https://registry.npmmirror.com/@floating-ui/core/-/core-1.3.1.tgz#4d795b649cc3b1cbb760d191c80dcb4353c9a366"
+  integrity sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g==
+
+"@floating-ui/dom@^1.0.1":
+  version "1.4.5"
+  resolved "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.4.5.tgz#336dfb9870c98b471ff5802002982e489b8bd1c5"
+  integrity sha512-96KnRWkRnuBSSFbj0sFGwwOUd8EkiecINVl0O9wiZlZ64EkpyAOG3Xc2vKKNJmru0Z7RqWNymA+6b8OZqjgyyw==
+  dependencies:
+    "@floating-ui/core" "^1.3.1"
+
 "@hapi/hoek@^9.0.0":
   version "9.3.0"
   resolved "https://registry.npmmirror.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb"
@@ -1154,6 +1176,11 @@
   resolved "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1"
   integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==
 
+"@popperjs/core@npm:@sxzz/popperjs-es@^2.11.7":
+  version "2.11.7"
+  resolved "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz#a7f69e3665d3da9b115f9e71671dae1b97e13671"
+  integrity sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==
+
 "@sideway/address@^4.1.3":
   version "4.1.4"
   resolved "https://registry.npmmirror.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0"
@@ -1284,6 +1311,18 @@
   resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb"
   integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==
 
+"@types/lodash-es@^4.17.6":
+  version "4.17.8"
+  resolved "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.8.tgz#cfffd0969507830c22da18dbb20d2ca126fdaa8b"
+  integrity sha512-euY3XQcZmIzSy7YH5+Unb3b2X12Wtk54YWINBvvGQ5SmMvwb11JQskGsfkH/5HXK77Kr8GF0wkVDIxzAisWtog==
+  dependencies:
+    "@types/lodash" "*"
+
+"@types/lodash@*", "@types/lodash@^4.14.182":
+  version "4.14.196"
+  resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.196.tgz#a7c3d6fc52d8d71328b764e28e080b4169ec7a95"
+  integrity sha512-22y3o88f4a94mKljsZcanlNWPzO0uBsBdzLAngf2tp533LzZcQzb6+eZPJ+vCTt+bqF2XnvT9gejTLsAcJAJyQ==
+
 "@types/mime@*":
   version "3.0.1"
   resolved "https://registry.npmmirror.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10"
@@ -1360,6 +1399,11 @@
   dependencies:
     "@types/node" "*"
 
+"@types/web-bluetooth@^0.0.16":
+  version "0.0.16"
+  resolved "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz#1d12873a8e49567371f2a75fe3e7f7edca6662d8"
+  integrity sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==
+
 "@types/ws@^8.5.5":
   version "8.5.5"
   resolved "https://registry.npmmirror.com/@types/ws/-/ws-8.5.5.tgz#af587964aa06682702ee6dcbc7be41a80e4b28eb"
@@ -1735,6 +1779,28 @@
   resolved "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz#b6b40a7625429d2bd7c2281ddba601ed05dc7f1a"
   integrity sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==
 
+"@vueuse/core@^9.1.0":
+  version "9.13.0"
+  resolved "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz#2f69e66d1905c1e4eebc249a01759cf88ea00cf4"
+  integrity sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==
+  dependencies:
+    "@types/web-bluetooth" "^0.0.16"
+    "@vueuse/metadata" "9.13.0"
+    "@vueuse/shared" "9.13.0"
+    vue-demi "*"
+
+"@vueuse/metadata@9.13.0":
+  version "9.13.0"
+  resolved "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz#bc25a6cdad1b1a93c36ce30191124da6520539ff"
+  integrity sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==
+
+"@vueuse/shared@9.13.0":
+  version "9.13.0"
+  resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz#089ff4cc4e2e7a4015e57a8f32e4b39d096353b9"
+  integrity sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==
+  dependencies:
+    vue-demi "*"
+
 "@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5":
   version "1.11.6"
   resolved "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24"
@@ -2027,6 +2093,11 @@ astral-regex@^2.0.0:
   resolved "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
   integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
 
+async-validator@^4.2.5:
+  version "4.2.5"
+  resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339"
+  integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==
+
 async@^2.6.4:
   version "2.6.4"
   resolved "https://registry.npmmirror.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221"
@@ -2719,7 +2790,7 @@ csstype@^3.1.1:
   resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
   integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
 
-dayjs@^1.11.7:
+dayjs@^1.11.3, dayjs@^1.11.7:
   version "1.11.9"
   resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.9.tgz#9ca491933fadd0a60a2c19f6c237c03517d71d1a"
   integrity sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==
@@ -2908,6 +2979,27 @@ electron-to-chromium@^1.4.431:
   resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.469.tgz#c9cea85ab94031e239ca4ab03158726672d6f960"
   integrity sha512-HRN9XQjElxJBrdDky5iiUUr3eDwXGTg6Cp4IV8MuNc8VqMkYSneSnIe6poFKx9PsNzkudCgaWCBVxwDqirwQWQ==
 
+element-plus@^2.3.8:
+  version "2.3.8"
+  resolved "https://registry.npmmirror.com/element-plus/-/element-plus-2.3.8.tgz#46032abe1a712abfb65932f146ee19281312a9cf"
+  integrity sha512-yHQR0/tG2LvPkpGUt7Te/hPmP2XW/BytBNUbx+EFO54VnGCOE3upmQcVffNp1PLgwg9sthYDXontUWpnpmLPJw==
+  dependencies:
+    "@ctrl/tinycolor" "^3.4.1"
+    "@element-plus/icons-vue" "^2.0.6"
+    "@floating-ui/dom" "^1.0.1"
+    "@popperjs/core" "npm:@sxzz/popperjs-es@^2.11.7"
+    "@types/lodash" "^4.14.182"
+    "@types/lodash-es" "^4.17.6"
+    "@vueuse/core" "^9.1.0"
+    async-validator "^4.2.5"
+    dayjs "^1.11.3"
+    escape-html "^1.0.3"
+    lodash "^4.17.21"
+    lodash-es "^4.17.21"
+    lodash-unified "^1.0.2"
+    memoize-one "^6.0.0"
+    normalize-wheel-es "^1.2.0"
+
 emoji-regex@^8.0.0:
   version "8.0.0"
   resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
@@ -2981,7 +3073,7 @@ escalade@^3.1.1:
   resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
   integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
 
-escape-html@~1.0.3:
+escape-html@^1.0.3, escape-html@~1.0.3:
   version "1.0.3"
   resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
   integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
@@ -4125,6 +4217,16 @@ locate-path@^5.0.0:
   dependencies:
     p-locate "^4.1.0"
 
+lodash-es@^4.17.21:
+  version "4.17.21"
+  resolved "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
+  integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
+
+lodash-unified@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz#80b1eac10ed2eb02ed189f08614a29c27d07c894"
+  integrity sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==
+
 lodash.debounce@^4.0.8:
   version "4.0.8"
   resolved "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
@@ -4255,6 +4357,11 @@ memfs@^3.4.3:
   dependencies:
     fs-monkey "^1.0.4"
 
+memoize-one@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045"
+  integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==
+
 merge-descriptors@1.0.1:
   version "1.0.1"
   resolved "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
@@ -4491,6 +4598,11 @@ normalize-url@^6.0.1:
   resolved "https://registry.npmmirror.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
   integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
 
+normalize-wheel-es@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz#0fa2593d619f7245a541652619105ab076acf09e"
+  integrity sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==
+
 npm-run-path@^2.0.0:
   version "2.0.2"
   resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
@@ -5985,6 +6097,11 @@ vary@~1.1.2:
   resolved "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
   integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
 
+vue-demi@*:
+  version "0.14.5"
+  resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.5.tgz#676d0463d1a1266d5ab5cba932e043d8f5f2fbd9"
+  integrity sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==
+
 vue-eslint-parser@^8.0.1:
   version "8.3.0"
   resolved "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz#5d31129a1b3dd89c0069ca0a1c88f970c360bd0d"