Просмотр исходного кода

feat:mobile项目手机号绑定插件应用

yangfeng 5 месяцев назад
Родитель
Сommit
9f8b03deb5

+ 1 - 1
apps/mobile/package.json

@@ -15,7 +15,7 @@
     "@jy/data-models": "workspace:^",
     "@jy/util": "workspace:^",
     "@jy/vue-anti": "workspace:^",
-    "@jy/bind-phone": "workspace:^",
+    "@jy/plugin-bind-phone": "workspace:^",
     "@sentry/vue": "^7.64.0",
     "@tinymce/tinymce-vue": "^3.2.8",
     "aliyun_numberauthsdk_web": "^2.1.9",

+ 15 - 2
apps/mobile/src/components/ad/SwipeFloor.vue

@@ -15,6 +15,8 @@
         v-for="(floor, fIndex) in getImages"
         :key="fIndex"
         :id="'ad-swipe-floor-item-' + (floor.name || fIndex)"
+        :data-script="floor.script.tip"
+        v-bound-phone="bindPhoneOpenFloor(floor)"
       >
         <van-image fit="contain" :src="floor.pic" :alt="floor.name"></van-image>
         <span>{{ floor.name }}</span>
@@ -76,7 +78,7 @@ export default {
           type: 'progressbar'
         },
         on: {
-          click: this.open
+          // click: this.open
         }
       },
       list: []
@@ -108,7 +110,6 @@ export default {
         codes
       })
         .then((res) => {
-          console.log(res)
           if (res?.error_code === 0 && typeof res?.data === 'object') {
             this.list = Object.values(res.data)
               .filter((v) => Array.isArray(v))
@@ -178,6 +179,18 @@ export default {
         }
       }
       console.warn('获取广告位点击信息异常')
+    },
+    bindPhoneOpenFloor(floor) {
+      const { name, script } = floor || {}
+      return {
+        props: {
+          name: `首页-金刚区${name}`
+        },
+        pass: !script?.tip ? this.open : null,
+        next: () => {
+          this.open()
+        }
+      }
     }
   }
 }

+ 22 - 2
apps/mobile/src/components/home/list.vue

@@ -24,7 +24,7 @@
         <span class="header-desc">完善信息,推荐更准</span>
         <span
           class="flex flex-items-center header-set"
-          @click="gotoKeySettingPage"
+          v-bound-phone="bindPhoneGoSetting()"
           >去设置 <van-icon name="arrow" color="#2ABED1"></van-icon
         ></span>
       </div>
@@ -67,7 +67,7 @@
           </div>
         </template>
         <template slot="icon">
-          <div class="right-event" @click.stop="onKeep(item, index)">
+          <div class="right-event" v-bound-phone="bindPhoneOnKeep(item, index)">
             <AppIcon
               style="margin-right: 4px"
               svg
@@ -610,6 +610,26 @@ export default {
             this.loadList()
           }
         })
+    },
+    bindPhoneOnKeep(item, index) {
+      return {
+        props: {
+          name: '首页-商机推荐标讯收藏'
+        },
+        next: () => {
+          this.onKeep(item, index)
+        }
+      }
+    },
+    bindPhoneGoSetting() {
+      return {
+        props: {
+          name: '首页-商机推荐去设置'
+        },
+        next: () => {
+          this.gotoKeySettingPage()
+        }
+      }
     }
   }
 }

+ 11 - 1
apps/mobile/src/components/message/message-card.vue

@@ -24,7 +24,7 @@
             :key="index"
             :class="{ visited: item.visited }"
             ref="listItem"
-            @click="goMessage(item)"
+            v-bound-phone="bindPhoneGoMessage(item)"
           >
             <!-- <span class="dot"></span> -->
             <van-cell class="message-item-cell" is-link>
@@ -244,6 +244,16 @@ export default {
       // window.open在安卓正常,但是ios无法跳转。改为location.href跳转
       if (!url) return
       location.href = url
+    },
+    bindPhoneGoMessage(item) {
+      return {
+        props: {
+          name: '首页-消息列表'
+        },
+        next: () => {
+          this.goMessage(item)
+        }
+      }
     }
   }
 }

+ 10 - 1
apps/mobile/src/main.js

@@ -3,6 +3,10 @@ import Vue from 'vue'
 import dayjs from 'dayjs'
 import MetaInfo from 'vue-meta-info'
 import { Dialog, Lazyload, Toast } from 'vant'
+import {
+  BindPhoneDialogPlugin,
+  BindPhoneDirective
+} from '@jy/plugin-bind-phone'
 import App from './App.vue'
 import router from './router'
 import store from './store'
@@ -20,7 +24,12 @@ import { initSentry } from './sentry'
 
 dayjs.locale('zh-cn')
 
-Vue.use(Toast).use(Lazyload).use(Dialog).use(MetaInfo)
+Vue.use(Toast)
+  .use(Lazyload)
+  .use(Dialog)
+  .use(MetaInfo)
+  .use(BindPhoneDialogPlugin)
+Vue.directive('bound-phone', BindPhoneDirective)
 
 // 设置默认 loading 配置项
 Toast.setDefaultOptions('loading', {

+ 2 - 1
apps/mobile/src/utils/format/modules/ad-formatter.js

@@ -23,6 +23,7 @@ export function adConfigFormatter(config = {}) {
       type: config?.o_extend?.linktype,
       power: oExtend?.power,
       tab: oExtend?.tab
-    }
+    },
+    script: config?.s_script ? JSON.parse(config.s_script) : ''
   }
 }

+ 11 - 1
apps/mobile/src/views/dataSmt/index.vue

@@ -115,7 +115,7 @@
       </div>
     </div>
     <div class="j-footer">
-      <div class="confirm-btn clickable" @click="reservedHandle">
+      <div class="confirm-btn clickable" v-bound-phone="bindPhoneReserved()">
         申请数据定制
       </div>
     </div>
@@ -416,6 +416,16 @@ export default {
           break
       }
       return bg
+    },
+    bindPhoneReserved() {
+      return {
+        props: {
+          name: '数据超市-申请数据定制'
+        },
+        next: () => {
+          this.reservedHandle()
+        }
+      }
     }
   }
 }

+ 24 - 2
apps/mobile/src/views/landing/consultingService.vue

@@ -209,8 +209,10 @@
       </div>
     </div>
     <div class="cs-footer">
-      <div class="left-btn" @click="call_Phone">咨询客服</div>
-      <div class="right-btn" @click="goSource('more')">获取更多专属服务</div>
+      <div class="left-btn" v-bound-phone="bindPhoneConsult()">咨询客服</div>
+      <div class="right-btn" v-bound-phone="bindPhoneGetMore()">
+        获取更多专属服务
+      </div>
     </div>
   </div>
 </template>
@@ -460,6 +462,26 @@ export default {
       }
 
       return result
+    },
+    bindPhoneConsult() {
+      return {
+        props: {
+          source: '咨询服务-咨询客服'
+        },
+        next: () => {
+          this.call_Phone()
+        }
+      }
+    },
+    bindPhoneGetMore() {
+      return {
+        props: {
+          name: '咨询服务-获取更多专属服务'
+        },
+        next: () => {
+          this.goSource('more')
+        }
+      }
     }
   }
 }

+ 37 - 1
apps/mobile/src/views/subscribe/Guide.vue

@@ -93,11 +93,12 @@
     </div>
     <div class="j-footer">
       <div class="j-button-group" :class="{ height40: active === 1 }">
+        <!-- @click="nextHandle" -->
         <button
           v-show="active === 0"
-          @click="nextHandle"
           class="j-button-confirm"
           :class="{ opacity50: !nextDisabled }"
+          v-bound-phone="bindPhoneNextHandle()"
         >
           下一步
         </button>
@@ -172,6 +173,7 @@ import AreaCitySidebar from '@/components/selector/area-three-sidebar/index'
 import RecommendedWords from '@/components/subscribe/RecommendedWords'
 import { mixinHeader } from '@/utils/mixins/header'
 import { pushHistoryState } from '@/utils/mixins/pushState'
+import Cookies from 'js-cookie'
 import {
   getUserSubscribeSomeInfo,
   saveSubscribeGuide,
@@ -288,6 +290,28 @@ export default {
     this.getAppSwitchStatus()
     await this.isCanEditArea()
     this.pushHistoryState()
+    // 需求:进入页面时,如果没有绑定手机号,自动弹出绑定手机号弹窗,完成绑定返回订阅列表
+    const needPhoneBound = Cookies.get('EXPERIENCESIGN')
+    if (needPhoneBound) {
+      this.$nextTick(() => {
+        this.$bindPhoneDialog({
+          props: {
+            visible: true,
+            name: '订阅向导',
+            source: '订阅向导-首次进入',
+            break_data: 'abtest'
+          },
+          on: {
+            bound: () => {
+              this.$router.replace('/tabbar/subscribe')
+            },
+            close: () => {
+              this.$toast('请先绑定手机号')
+            }
+          }
+        })
+      })
+    }
   },
   methods: {
     ...mapActions('user', ['userVipSwitchState']),
@@ -628,6 +652,18 @@ export default {
       } else {
         return area
       }
+    },
+    // 绑定手机号指令(下一步按钮)
+    bindPhoneNextHandle() {
+      return {
+        props: {
+          name: '订阅向导-下一步'
+        },
+        bound: () => {
+          this.$router.replace('/tabbar/subscribe')
+        },
+        next: this.nextHandle
+      }
     }
   }
 }

+ 78 - 35
pnpm-lock.yaml

@@ -59,7 +59,7 @@ importers:
         version: 5.0.2
       vite:
         specifier: ^4.5.3
-        version: 4.5.3(less@4.1.3)(sass@1.63.2)(terser@5.19.2)
+        version: 4.5.3(less@4.1.3)(sass@1.71.1)(terser@5.19.2)
       vite-plugin-html-redirect:
         specifier: ^1.0.4
         version: 1.0.4
@@ -293,12 +293,12 @@ importers:
 
   apps/mobile:
     dependencies:
-      '@jy/bind-phone':
-        specifier: workspace:^
-        version: link:../../plugins/bind-phone-mobile
       '@jy/data-models':
         specifier: workspace:^
         version: link:../../data/data-models
+      '@jy/plugin-bind-phone':
+        specifier: workspace:^
+        version: link:../../plugins/bind-phone-mobile
       '@jy/util':
         specifier: workspace:^
         version: link:../../packages/util
@@ -799,33 +799,15 @@ importers:
 
   plugins/bind-phone-mobile:
     dependencies:
-      '@jy/data-models':
-        specifier: workspace:^
-        version: link:../../data/data-models
-      '@jy/util':
-        specifier: workspace:^
-        version: link:../../packages/util
-      '@jy/vue-anti':
-        specifier: workspace:^
-        version: link:../../packages/vue-anti
       js-cookie:
         specifier: ^3.0.1
         version: 3.0.5
-      lodash:
-        specifier: ^4.17.21
-        version: 4.17.21
       qs:
         specifier: ^6.11.2
         version: 6.11.2
       vant:
         specifier: 2.12.44
         version: 2.12.44(vue@2.7.16)
-      vite-plugin-css-injected-by-js:
-        specifier: ^3.1.0
-        version: 3.1.0(vite@4.5.3)
-      vuex:
-        specifier: ^3.6.2
-        version: 3.6.2(vue@2.7.16)
     devDependencies:
       '@jonny1994/postcss-px-to-viewport':
         specifier: ^1.1.0
@@ -836,15 +818,6 @@ importers:
       '@rushstack/eslint-patch':
         specifier: ^1.1.0
         version: 1.1.0
-      '@sentry/vite-plugin':
-        specifier: ^2.21.1
-        version: 2.21.1
-      '@unocss/transformer-variant-group':
-        specifier: ^0.58.5
-        version: 0.58.5
-      '@vitejs/plugin-legacy':
-        specifier: ^4.0.4
-        version: 4.0.4(terser@5.19.2)(vite@4.5.3)
       '@vitejs/plugin-vue2':
         specifier: ^2.2.0
         version: 2.2.0(vite@4.5.3)(vue@2.7.16)
@@ -884,6 +857,9 @@ importers:
       vite-plugin-compression:
         specifier: ^0.5.1
         version: 0.5.1(vite@4.5.3)
+      vite-plugin-css-injected-by-js:
+        specifier: ^3.1.0
+        version: 3.1.0(vite@4.5.3)
       vite-plugin-ejs:
         specifier: 1.6.4
         version: 1.6.4
@@ -3016,6 +2992,7 @@ packages:
     cpu: [arm64]
     os: [android]
     requiresBuild: true
+    dev: true
     optional: true
 
   /@esbuild/android-arm64@0.19.8:
@@ -3042,6 +3019,7 @@ packages:
     cpu: [arm]
     os: [android]
     requiresBuild: true
+    dev: true
     optional: true
 
   /@esbuild/android-arm@0.19.8:
@@ -3068,6 +3046,7 @@ packages:
     cpu: [x64]
     os: [android]
     requiresBuild: true
+    dev: true
     optional: true
 
   /@esbuild/android-x64@0.19.8:
@@ -3094,6 +3073,7 @@ packages:
     cpu: [arm64]
     os: [darwin]
     requiresBuild: true
+    dev: true
     optional: true
 
   /@esbuild/darwin-arm64@0.19.8:
@@ -3120,6 +3100,7 @@ packages:
     cpu: [x64]
     os: [darwin]
     requiresBuild: true
+    dev: true
     optional: true
 
   /@esbuild/darwin-x64@0.19.8:
@@ -3146,6 +3127,7 @@ packages:
     cpu: [arm64]
     os: [freebsd]
     requiresBuild: true
+    dev: true
     optional: true
 
   /@esbuild/freebsd-arm64@0.19.8:
@@ -3172,6 +3154,7 @@ packages:
     cpu: [x64]
     os: [freebsd]
     requiresBuild: true
+    dev: true
     optional: true
 
   /@esbuild/freebsd-x64@0.19.8:
@@ -3198,6 +3181,7 @@ packages:
     cpu: [arm64]
     os: [linux]
     requiresBuild: true
+    dev: true
     optional: true
 
   /@esbuild/linux-arm64@0.19.8:
@@ -3224,6 +3208,7 @@ packages:
     cpu: [arm]
     os: [linux]
     requiresBuild: true
+    dev: true
     optional: true
 
   /@esbuild/linux-arm@0.19.8:
@@ -3250,6 +3235,7 @@ packages:
     cpu: [ia32]
     os: [linux]
     requiresBuild: true
+    dev: true
     optional: true
 
   /@esbuild/linux-ia32@0.19.8:
@@ -3276,6 +3262,7 @@ packages:
     cpu: [loong64]
     os: [linux]
     requiresBuild: true
+    dev: true
     optional: true
 
   /@esbuild/linux-loong64@0.19.8:
@@ -3302,6 +3289,7 @@ packages:
     cpu: [mips64el]
     os: [linux]
     requiresBuild: true
+    dev: true
     optional: true
 
   /@esbuild/linux-mips64el@0.19.8:
@@ -3328,6 +3316,7 @@ packages:
     cpu: [ppc64]
     os: [linux]
     requiresBuild: true
+    dev: true
     optional: true
 
   /@esbuild/linux-ppc64@0.19.8:
@@ -3354,6 +3343,7 @@ packages:
     cpu: [riscv64]
     os: [linux]
     requiresBuild: true
+    dev: true
     optional: true
 
   /@esbuild/linux-riscv64@0.19.8:
@@ -3380,6 +3370,7 @@ packages:
     cpu: [s390x]
     os: [linux]
     requiresBuild: true
+    dev: true
     optional: true
 
   /@esbuild/linux-s390x@0.19.8:
@@ -3406,6 +3397,7 @@ packages:
     cpu: [x64]
     os: [linux]
     requiresBuild: true
+    dev: true
     optional: true
 
   /@esbuild/linux-x64@0.19.8:
@@ -3432,6 +3424,7 @@ packages:
     cpu: [x64]
     os: [netbsd]
     requiresBuild: true
+    dev: true
     optional: true
 
   /@esbuild/netbsd-x64@0.19.8:
@@ -3458,6 +3451,7 @@ packages:
     cpu: [x64]
     os: [openbsd]
     requiresBuild: true
+    dev: true
     optional: true
 
   /@esbuild/openbsd-x64@0.19.8:
@@ -3484,6 +3478,7 @@ packages:
     cpu: [x64]
     os: [sunos]
     requiresBuild: true
+    dev: true
     optional: true
 
   /@esbuild/sunos-x64@0.19.8:
@@ -3510,6 +3505,7 @@ packages:
     cpu: [arm64]
     os: [win32]
     requiresBuild: true
+    dev: true
     optional: true
 
   /@esbuild/win32-arm64@0.19.8:
@@ -3536,6 +3532,7 @@ packages:
     cpu: [ia32]
     os: [win32]
     requiresBuild: true
+    dev: true
     optional: true
 
   /@esbuild/win32-ia32@0.19.8:
@@ -3562,6 +3559,7 @@ packages:
     cpu: [x64]
     os: [win32]
     requiresBuild: true
+    dev: true
     optional: true
 
   /@esbuild/win32-x64@0.19.8:
@@ -3885,23 +3883,28 @@ packages:
       '@jridgewell/set-array': 1.1.2
       '@jridgewell/sourcemap-codec': 1.4.15
       '@jridgewell/trace-mapping': 0.3.18
+    dev: true
 
   /@jridgewell/resolve-uri@3.1.0:
     resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
     engines: {node: '>=6.0.0'}
+    dev: true
 
   /@jridgewell/set-array@1.1.2:
     resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
     engines: {node: '>=6.0.0'}
+    dev: true
 
   /@jridgewell/source-map@0.3.5:
     resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==}
     dependencies:
       '@jridgewell/gen-mapping': 0.3.3
       '@jridgewell/trace-mapping': 0.3.18
+    dev: true
 
   /@jridgewell/sourcemap-codec@1.4.14:
     resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
+    dev: true
 
   /@jridgewell/sourcemap-codec@1.4.15:
     resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
@@ -3911,6 +3914,7 @@ packages:
     dependencies:
       '@jridgewell/resolve-uri': 3.1.0
       '@jridgewell/sourcemap-codec': 1.4.14
+    dev: true
 
   /@kwsites/file-exists@1.1.1:
     resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==}
@@ -3955,7 +3959,7 @@ packages:
       '@types/eslint': 9.6.1
       chalk: 4.1.2
       eslint: 8.57.0
-      vite: 4.5.3(less@4.1.3)(sass@1.71.1)(terser@5.19.2)
+      vite: 4.5.3(less@4.1.3)(sass@1.63.2)(terser@5.19.2)
     dev: true
 
   /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1:
@@ -5348,7 +5352,7 @@ packages:
       regenerator-runtime: 0.13.11
       systemjs: 6.14.3
       terser: 5.19.2
-      vite: 4.5.3(less@4.1.3)(sass@1.63.2)(terser@5.19.2)
+      vite: 4.5.3(less@4.1.3)(sass@1.71.1)(terser@5.19.2)
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -7253,6 +7257,7 @@ packages:
     dependencies:
       normalize-path: 3.0.0
       picomatch: 2.3.1
+    dev: true
 
   /aproba@2.0.0:
     resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
@@ -7599,6 +7604,7 @@ packages:
   /binary-extensions@2.2.0:
     resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
     engines: {node: '>=8'}
+    dev: true
 
   /bl@4.1.0:
     resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
@@ -7670,6 +7676,7 @@ packages:
     engines: {node: '>=8'}
     dependencies:
       fill-range: 7.0.1
+    dev: true
 
   /browserslist@4.21.9:
     resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==}
@@ -7719,6 +7726,7 @@ packages:
 
   /buffer-from@1.1.2:
     resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+    dev: true
 
   /buffer@5.7.1:
     resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
@@ -7979,6 +7987,7 @@ packages:
       readdirp: 3.6.0
     optionalDependencies:
       fsevents: 2.3.3
+    dev: true
 
   /chownr@2.0.0:
     resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
@@ -8173,6 +8182,7 @@ packages:
 
   /commander@2.20.3:
     resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+    dev: true
 
   /commander@7.2.0:
     resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
@@ -8443,6 +8453,7 @@ packages:
     resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==}
     dependencies:
       is-what: 3.14.1
+    dev: true
 
   /copy-webpack-plugin@9.1.0(webpack@5.88.2):
     resolution: {integrity: sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==}
@@ -9223,6 +9234,7 @@ packages:
     requiresBuild: true
     dependencies:
       prr: 1.0.1
+    dev: true
     optional: true
 
   /error-ex@1.3.2:
@@ -9368,6 +9380,7 @@ packages:
       '@esbuild/win32-arm64': 0.18.20
       '@esbuild/win32-ia32': 0.18.20
       '@esbuild/win32-x64': 0.18.20
+    dev: true
 
   /esbuild@0.19.8:
     resolution: {integrity: sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==}
@@ -10962,6 +10975,7 @@ packages:
     engines: {node: '>=8'}
     dependencies:
       to-regex-range: 5.0.1
+    dev: true
 
   /finalhandler@1.2.0:
     resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
@@ -11127,6 +11141,7 @@ packages:
     engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
     os: [darwin]
     requiresBuild: true
+    dev: true
     optional: true
 
   /function-bind@1.1.2:
@@ -11246,6 +11261,7 @@ packages:
     engines: {node: '>= 6'}
     dependencies:
       is-glob: 4.0.3
+    dev: true
 
   /glob-parent@6.0.2:
     resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
@@ -11333,6 +11349,7 @@ packages:
 
   /graceful-fs@4.2.11:
     resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+    dev: true
 
   /grapheme-splitter@1.0.4:
     resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
@@ -11643,6 +11660,7 @@ packages:
     requiresBuild: true
     dependencies:
       safer-buffer: 2.1.2
+    dev: true
 
   /icss-utils@5.1.0(postcss@8.4.35):
     resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
@@ -11675,10 +11693,12 @@ packages:
     engines: {node: '>=0.10.0'}
     hasBin: true
     requiresBuild: true
+    dev: true
     optional: true
 
   /immutable@4.3.1:
     resolution: {integrity: sha512-lj9cnmB/kVS0QHsJnYKD1uo3o39nrbKxszjnqS9Fr6NB7bZzW45U6WSGBPKXDL/CvDKqDNPA4r3DoDQ8GTxo2A==}
+    dev: true
 
   /import-fresh@3.3.0:
     resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
@@ -11810,6 +11830,7 @@ packages:
     engines: {node: '>=8'}
     dependencies:
       binary-extensions: 2.2.0
+    dev: true
 
   /is-boolean-object@1.1.2:
     resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
@@ -11942,6 +11963,7 @@ packages:
   /is-number@7.0.0:
     resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
     engines: {node: '>=0.12.0'}
+    dev: true
 
   /is-path-inside@3.0.3:
     resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
@@ -12041,6 +12063,7 @@ packages:
 
   /is-what@3.14.1:
     resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==}
+    dev: true
 
   /is-wsl@2.2.0:
     resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
@@ -12390,6 +12413,7 @@ packages:
       mime: 1.6.0
       needle: 3.3.1
       source-map: 0.6.1
+    dev: true
 
   /levn@0.3.0:
     resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==}
@@ -12683,6 +12707,7 @@ packages:
     dependencies:
       pify: 4.0.1
       semver: 5.7.2
+    dev: true
     optional: true
 
   /make-dir@3.1.0:
@@ -13071,6 +13096,7 @@ packages:
     engines: {node: '>=4'}
     hasBin: true
     requiresBuild: true
+    dev: true
 
   /mimic-fn@1.2.0:
     resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==}
@@ -13323,6 +13349,7 @@ packages:
     dependencies:
       iconv-lite: 0.6.3
       sax: 1.3.0
+    dev: true
     optional: true
 
   /negotiator@0.6.3:
@@ -13402,6 +13429,7 @@ packages:
   /normalize-path@3.0.0:
     resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
     engines: {node: '>=0.10.0'}
+    dev: true
 
   /normalize-range@0.1.2:
     resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
@@ -13756,6 +13784,7 @@ packages:
   /parse-node-version@1.0.1:
     resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==}
     engines: {node: '>= 0.10'}
+    dev: true
 
   /parse5-htmlparser2-tree-adapter@6.0.1:
     resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==}
@@ -13871,6 +13900,7 @@ packages:
   /picomatch@2.3.1:
     resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
     engines: {node: '>=8.6'}
+    dev: true
 
   /picomatch@4.0.2:
     resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
@@ -13887,6 +13917,7 @@ packages:
     resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
     engines: {node: '>=6'}
     requiresBuild: true
+    dev: true
     optional: true
 
   /pkg-dir@4.2.0:
@@ -14415,6 +14446,7 @@ packages:
   /prr@1.0.1:
     resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==}
     requiresBuild: true
+    dev: true
     optional: true
 
   /pseudomap@1.0.2:
@@ -14611,6 +14643,7 @@ packages:
     engines: {node: '>=8.10.0'}
     dependencies:
       picomatch: 2.3.1
+    dev: true
 
   /refa@0.12.1:
     resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==}
@@ -14936,6 +14969,7 @@ packages:
     hasBin: true
     optionalDependencies:
       fsevents: 2.3.3
+    dev: true
 
   /rollup@4.14.1:
     resolution: {integrity: sha512-4LnHSdd3QK2pa1J6dFbfm1HN0D7vSK/ZuZTsdyUAlA6Rr1yTouUTL13HaDOGJVgby461AhrNGBS7sCGXXtT+SA==}
@@ -15040,6 +15074,7 @@ packages:
   /safer-buffer@2.1.2:
     resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
     requiresBuild: true
+    dev: true
 
   /sass-loader@12.0.0(sass@1.63.2)(webpack@5.88.2):
     resolution: {integrity: sha512-LJQMyDdNdhcvoO2gJFw7KpTaioVFDeRJOuatRDUNgCIqyu4s4kgDsNofdGzAZB1zFOgo/p3fy+aR/uGXamcJBg==}
@@ -15096,6 +15131,7 @@ packages:
       chokidar: 3.5.3
       immutable: 4.3.1
       source-map-js: 1.0.2
+    dev: true
 
   /sass@1.71.1:
     resolution: {integrity: sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==}
@@ -15110,6 +15146,7 @@ packages:
   /sax@1.3.0:
     resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==}
     requiresBuild: true
+    dev: true
     optional: true
 
   /saxes@6.0.0:
@@ -15191,6 +15228,7 @@ packages:
     resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
     hasBin: true
     requiresBuild: true
+    dev: true
 
   /semver@6.3.1:
     resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
@@ -15468,6 +15506,7 @@ packages:
     dependencies:
       buffer-from: 1.1.2
       source-map: 0.6.1
+    dev: true
 
   /source-map@0.6.1:
     resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
@@ -15917,6 +15956,7 @@ packages:
       acorn: 8.12.1
       commander: 2.20.3
       source-map-support: 0.5.21
+    dev: true
 
   /test-exclude@6.0.0:
     resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
@@ -16014,6 +16054,7 @@ packages:
     engines: {node: '>=8.0'}
     dependencies:
       is-number: 7.0.0
+    dev: true
 
   /toidentifier@1.0.1:
     resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
@@ -16736,7 +16777,7 @@ packages:
       chalk: 4.1.2
       debug: 4.3.4
       fs-extra: 10.1.0
-      vite: 4.5.3(less@4.1.3)(sass@1.71.1)(terser@5.19.2)
+      vite: 4.5.3(less@4.1.3)(sass@1.63.2)(terser@5.19.2)
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -16747,6 +16788,7 @@ packages:
       vite: '>2.0.0-0'
     dependencies:
       vite: 4.5.3(less@4.1.3)(sass@1.63.2)(terser@5.19.2)
+    dev: true
 
   /vite-plugin-ejs@1.6.4:
     resolution: {integrity: sha512-23p1RS4PiA0veXY5/gHZ60pl3pPvd8NEqdBsDgxNK8nM1rjFFDcVb0paNmuipzCgNP/Y0f/Id22M7Il4kvZ2jA==}
@@ -16764,7 +16806,7 @@ packages:
       '@types/eslint': 8.44.1
       eslint: 8.37.0
       rollup: 2.79.1
-      vite: 4.5.3(less@4.1.3)(sass@1.63.2)(terser@5.19.2)
+      vite: 4.5.3(less@4.1.3)(sass@1.71.1)(terser@5.19.2)
     dev: true
 
   /vite-plugin-externals@0.6.2(vite@4.5.3):
@@ -16932,6 +16974,7 @@ packages:
       terser: 5.19.2
     optionalDependencies:
       fsevents: 2.3.3
+    dev: true
 
   /vite@4.5.3(less@4.1.3)(sass@1.71.1)(terser@5.19.2):
     resolution: {integrity: sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==}