資料修改及社群分享

dev
Wayne 3 years ago
parent 920ff46f8c
commit bdcac9a8d8

@ -1,4 +1,4 @@
NODE_ENV = production NODE_ENV = development
VITE_ENV = stage VITE_ENV = stage

Binary file not shown.

@ -6,7 +6,7 @@
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
"build": "vite build", "build": "vite build",
"build:sta": "vite build --mode stage", "build:sta": "vite build --mode stage",
"preview": "vite preview" "preview": "vite preview"
}, },
"dependencies": { "dependencies": {
@ -19,6 +19,9 @@
"lodash": "^4.17.21", "lodash": "^4.17.21",
"moment": "^2.29.4", "moment": "^2.29.4",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"pinia": "^2.1.7",
"pinia-plugin-persist": "^1.0.0",
"pinia-plugin-persistedstate": "^3.2.0",
"pwacompat": "^2.0.17", "pwacompat": "^2.0.17",
"qrcode.vue": "^3.4.1", "qrcode.vue": "^3.4.1",
"register-service-worker": "^1.7.2", "register-service-worker": "^1.7.2",

@ -15,7 +15,11 @@
// import { useStore } from 'vuex' // import { useStore } from 'vuex'
// const store = useStore() // const store = useStore()
// import { useUserStore } from '@/store/user'
// const userStore = useUserStore();
// userStore.getUserData();
</script> </script>
<style lang="less"> <style lang="less">

@ -0,0 +1,14 @@
import ajax from "./ajax";
//通訊錄
export const getUserData = async (params) =>
ajax(`/User/getUser`, params, "POST");
export const updateUserExtra = async (params) =>
ajax(`/User/updateUserExtra`, params, "POST");
export const updateUserLink = async (params) =>
ajax(`/User/updateUserLink`, params, "POST");
export const updateUserAddon = async (params) =>
ajax(`/User/updateUserAddon`, {nfc_addon:params}, "POST");

@ -2,6 +2,9 @@ import { createApp } from "vue";
import App from "./App.vue"; import App from "./App.vue";
import router from "./router"; import router from "./router";
import store from "./store"; import store from "./store";
import { createPinia } from 'pinia'
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
import liff from '@line/liff'; import liff from '@line/liff';
import { VueClipboard } from "@soerenmartius/vue3-clipboard"; import { VueClipboard } from "@soerenmartius/vue3-clipboard";
@ -17,9 +20,11 @@ liff.init({
window.liff = liff; window.liff = liff;
const vue = createApp(App); const vue = createApp(App);
const pinia = createPinia();
pinia.use(piniaPluginPersistedstate);
// 將LIFF實例提供給應用 // 將LIFF實例提供給應用
vue.use(VueClipboard); vue.use(VueClipboard);
vue.use(pinia);
vue.use(store).use(router).mount("#app"); vue.use(store).use(router).mount("#app");
}).catch((error) => { }).catch((error) => {

@ -1,37 +1,41 @@
import { defineStore } from 'pinia' import { defineStore } from 'pinia'
import { getUserInfo, setUserTpl, toggleSendWithAD } from "@/api"; import { getUserData } from "@/api/user";
import { toggleSendWithAD } from "@/api";
export const useUserStore = defineStore('user', { export const useUserStore = defineStore('user', {
state: () => { state: () => {
return { return {
userInfo: null, userData: {
is_send_ad: 0,
},
} }
}, },
getters: { getters: {
}, },
actions: { actions: {
async getUserInfo(context) { async getUserData() {
var res = await getUserInfo(); console.log('store get userData');
var res = await getUserData();
if (res.code === 200) { if (res.code === 200) {
context.commit("setUserInfo", res.data); this.userData = res.data
} }
}, },
async setSendWithAd(payload){
let res = await toggleSendWithAD(payload);
if (res.code === 200) {
this.userData.is_send_ad = payload
return true;
}
return false;
}
// async setUserTpl(context, payload) { // async setUserTpl(context, payload) {
// var res = await setUserTpl(payload); // var res = await setUserTpl(payload);
// if (res.code === 200) { // if (res.code === 200) {
// context.commit("setTpl", payload); // context.commit("setTpl", payload);
// } // }
// }, // },
// async setSendWithAd(context, payload) { },
// console.log('payload', payload); persist: true
// let res = await toggleSendWithAD(payload);
// if (res.code === 200) {
// context.commit("setSendWithAd", payload);
// return true;
// }
// return false;
// }
}
}) })

@ -6,6 +6,7 @@ import { toClipboard } from "@soerenmartius/vue3-clipboard";
import { ref, computed, onBeforeMount } from "vue"; import { ref, computed, onBeforeMount } from "vue";
import { useRoute, useRouter } from "vue-router"; import { useRoute, useRouter } from "vue-router";
import { useStore } from "vuex"; import { useStore } from "vuex";
import { useUserStore } from '@/store/user';
import { showToast, showSuccessToast, showConfirmDialog } from "vant"; import { showToast, showSuccessToast, showConfirmDialog } from "vant";
import 'vant/es/toast/style'; import 'vant/es/toast/style';
@ -14,10 +15,14 @@ import { Dialog } from "vant";
import { login, bindCard, getMovie, getMarquee } from "@/api"; import { login, bindCard, getMovie, getMarquee } from "@/api";
import noUserImg from '@/assets/images/upload.jpg'
const router = useRouter(); const router = useRouter();
const route = useRoute(); const route = useRoute();
const store = useStore(); const store = useStore();
const userStore = useUserStore();
const showShare = ref(false); const showShare = ref(false);
const showNfcQrcode = ref(false); const showNfcQrcode = ref(false);
@ -69,7 +74,7 @@ onBeforeMount(async () => {
showToast.fail("綁定失敗"); showToast.fail("綁定失敗");
} }
}) })
.catch(() => {}); .catch(() => { });
} }
} }
@ -110,6 +115,8 @@ onBeforeMount(async () => {
store.dispatch("user/getUserInfo"); store.dispatch("user/getUserInfo");
await userStore.getUserData();
handleAD(); handleAD();
}); });
@ -130,19 +137,20 @@ const noticeClick = (num) => {
const handleAD = async () => { const handleAD = async () => {
if(userInfo.value.status === 1){
return;
}
let res; let res;
res = await getMarquee(); res = await getMarquee();
if (res.code === 200) { if (res.code === 200) {
noticeData.value = res.data; noticeData.value = res.data;
} }
res = await getMovie(); res = await getMovie();
console.log('res',res)
if (res.code === 200) { if (res.code === 200) {
adData.value = res.data; adData.value = res.data;
if (sessionStorage.getItem("isAdShow")==null) { if (sessionStorage.getItem("isAdShow") == null) {
popShow.value = true; popShow.value = true;
} }
} }
@ -152,7 +160,7 @@ const popShow = ref(false);
const modalClose = ref(false); const modalClose = ref(false);
const closeShow = () => { const closeShow = () => {
sessionStorage.setItem("isAdShow",userInfo.value.level_name); sessionStorage.setItem("isAdShow", userInfo.value.level_name);
modalClose.value = true; modalClose.value = true;
}; };
@ -170,14 +178,7 @@ const onUpdateValue = (newValue) => {
confirmButtonText: "確認", confirmButtonText: "確認",
cancelButtonText: "取消", cancelButtonText: "取消",
}).then(() => { }).then(() => {
// let res = toggleSendWithAD(newValue); let res = userStore.setSendWithAd(newValue)
// if (res.code === 200) {
// showToast("");
// } else {
// showToast("");
// }
store.dispatch("user/setSendWithAd", newValue);
}).catch(() => { }).catch(() => {
// on cancel // on cancel
@ -185,8 +186,9 @@ const onUpdateValue = (newValue) => {
}; };
const userInfo = computed(() => { const userInfo = computed(() => {
return store.state.user.userInfo; return userStore.userData;
}); });
const nfcurl = computed(() => { const nfcurl = computed(() => {
@ -237,10 +239,12 @@ const doShare = () => {
}; };
const bindTggo = () => { const bindTggo = () => {
console.log(userInfo.value); if (userInfo.value.uniqid) {
let url = `https://www.tggo.com.tw/u.cgi?&mnm=mybinding&ncode=${userInfo.value.uniqid}&name=${userInfo.value.real_name}&openExternalBrowser=1`; let url = `https://www.tggo.com.tw/u.cgi?&mnm=mybinding&ncode=${userInfo.value.uniqid}&name=${userInfo.value.real_name}&openExternalBrowser=1`;
window.open(url, "_blank");
window.open(url, "_blank"); return;
}
showToast('您的帳號尚未綁定感應卡');
}; };
const handleLogout = () => { const handleLogout = () => {
@ -252,16 +256,17 @@ const handleLogout = () => {
sessionStorage.removeItem("isAdShow"); sessionStorage.removeItem("isAdShow");
router.push("/login"); router.push("/login");
}; };
</script> </script>
<template> <template>
<div class="home page" v-cloak> <div class="home page" v-cloak>
<van-nav-bar <van-nav-bar class="bg-darkBlue py-3">
class="bg-darkBlue py-3"
>
<template #title> <template #title>
<h4 class="text-white mb-1"><strong>UTEL電子名片系統</strong></h4> <h4 class="text-white mb-1"><strong>UTEL電子名片系統</strong></h4>
<a href="javascript:;"><h5 class="text-gray">歡迎來到會員中心</h5></a> <a href="javascript:;">
<h5 class="text-gray">歡迎來到會員中心</h5>
</a>
</template> </template>
<template #right> <template #right>
<div class="btn btn-sm text-skyBlue" @click="handleLogout"> <div class="btn btn-sm text-skyBlue" @click="handleLogout">
@ -270,35 +275,23 @@ const handleLogout = () => {
</template> </template>
</van-nav-bar> </van-nav-bar>
<van-notice-bar <!-- START: 跑馬燈 -->
color="#ffffff" <template v-if="userInfo.status !== 1">
background="#e05338" <van-notice-bar color="#ffffff" background="#e05338" left-icon="volume" mode="link" :scrollable="true">
left-icon="volume" <van-swipe class="notice-swipe" :touchable="false" :show-indicators="false">
mode="link" <van-swipe-item v-for="(item, key, index) in noticeData" :key="index" @click="noticeClick(key)">
:scrollable="true" {{ item.ad_title }}
> </van-swipe-item>
<van-swipe </van-swipe>
class="notice-swipe" </van-notice-bar>
:touchable="false" </template>
:show-indicators="false" <!-- END: 跑馬燈 -->
>
<van-swipe-item
v-for="(item, key, index) in noticeData"
:key="index"
@click="noticeClick(key)"
>
{{ item.ad_title }}
</van-swipe-item>
</van-swipe>
</van-notice-bar>
<div class="my-account"> <div class="my-account">
<div class="avatar"> <div class="avatar">
<div class="left"> <div class="left">
<div class="imgCnt shadow-sm"> <div class="imgCnt shadow-sm">
<img <img :src="userInfo.avatar || noUserImg" />
:src="userInfo.line_picture || import('@/assets/images/user.jpg')"
/>
</div> </div>
<div class="info"> <div class="info">
<h3 class="name">{{ userInfo.real_name }}</h3> <h3 class="name">{{ userInfo.real_name }}</h3>
@ -337,151 +330,123 @@ const handleLogout = () => {
<div class="content" v-if="userInfo"> <div class="content" v-if="userInfo">
<van-cell-group inset> <van-cell-group inset>
<van-field :model-value="userInfo.create_time" input-align="right" readonly> <van-field :model-value="userInfo.create_time" input-align="right" readonly>
<template #label><i class="fa-regular fa-fw fa-calendar-days"></i> 建立日期</template> <template #label><i class="fa-regular fa-fw fa-calendar-days"></i> 建立日期</template>
</van-field> </van-field>
<van-field :model-value="userInfo.user_id" input-align="right" readonly> <van-field :model-value="userInfo.user_id" input-align="right" readonly>
<template #label><i class="fa-solid fa-fw fa-fingerprint"></i> 會員編號</template> <template #label><i class="fa-solid fa-fw fa-fingerprint"></i> 會員編號</template>
<template #button> <template #button>
<van-button size="small" @click="doCopyUid"> <van-button size="small" @click="doCopyUid">
<i class="fa-regular fa-copy"></i> <i class="fa-regular fa-copy"></i>
</van-button> </van-button>
</template> </template>
</van-field> </van-field>
<van-field :model-value="userInfo.level_name" input-align="right" readonly> <van-field :model-value="userInfo.level_name" input-align="right" readonly>
<template #label><i class="fa-solid fa-fw fa-layer-group"></i> 會員等級</template> <template #label><i class="fa-solid fa-fw fa-layer-group"></i> 會員等級</template>
</van-field> </van-field>
<van-field :model-value="overdue" input-align="right" readonly> <van-field :model-value="overdue" input-align="right" readonly>
<template #label><i class="fa-regular fa-fw fa-calendar-check"></i> 使用期限</template> <template #label><i class="fa-regular fa-fw fa-calendar-check"></i> 使用期限</template>
</van-field> </van-field>
<van-field input-align="right" readonly> <van-field input-align="right" readonly>
<template #label><i class="fa-solid fa-fw fa-qrcode"></i> QRcode</template> <template #label><i class="fa-solid fa-fw fa-qrcode"></i> QRcode</template>
<template #button><van-button size="small" class="bg-darkBlue text-white border-0" @click="handleShowNfc"></van-button></template> <template #button><van-button size="small" class="bg-darkBlue text-white border-0"
</van-field> @click="handleShowNfc">開啟掃描</van-button></template>
<van-field input-align="right" readonly> </van-field>
<template #label><i class="fa-solid fa-fw fa-link"></i> 名片連結</template> <van-field input-align="right" readonly>
<template #button><van-button size="small" class="bg-tomatoRed text-white border-0" @click="doCopy"></van-button></template> <template #label><i class="fa-solid fa-fw fa-link"></i> 名片連結</template>
</van-field> <template #button><van-button size="small" class="bg-tomatoRed text-white border-0"
@click="doCopy">複製連結</van-button></template>
</van-field>
</van-cell-group> </van-cell-group>
<van-cell-group inset> <van-cell-group inset>
<van-field :model-value="userInfo.title" input-align="right" readonly> <van-field :model-value="userInfo.title" input-align="right" readonly>
<template #label><i class="fa-regular fa-fw fa-building"></i> 職稱</template> <template #label><i class="fa-regular fa-fw fa-building"></i> 職稱</template>
</van-field> </van-field>
<van-field :model-value="userInfo.phone" input-align="right" readonly> <van-field :model-value="userInfo.phone" input-align="right" readonly>
<template #label><i class="fa-solid fa-fw fa-mobile-retro"></i> 手機</template> <template #label><i class="fa-solid fa-fw fa-mobile-retro"></i> 手機</template>
</van-field> </van-field>
<van-field :model-value="userInfo.tel" input-align="right" readonly> <van-field :model-value="userInfo.tel" input-align="right" readonly>
<template #label><i class="fa-solid fa-fw fa-phone"></i> 市話</template> <template #label><i class="fa-solid fa-fw fa-phone"></i> 市話</template>
</van-field> </van-field>
<van-field :model-value="userInfo.email" input-align="right" readonly> <van-field :model-value="userInfo.email" input-align="right" readonly>
<template #label><i class="fa-regular fa-fw fa-envelope"></i> Email</template> <template #label><i class="fa-regular fa-fw fa-envelope"></i> Email</template>
</van-field> </van-field>
<van-field :model-value="userInfo.address" input-align="right" readonly> <van-field :model-value="userInfo.address" input-align="right" readonly>
<template #label><i class="fa-solid fa-fw fa-location-dot"></i> 住址</template> <template #label><i class="fa-solid fa-fw fa-location-dot"></i> 住址</template>
</van-field> </van-field>
</van-cell-group> </van-cell-group>
<van-cell-group inset> <van-cell-group inset>
<van-field input-align="right" class="longText" readonly> <van-field input-align="right" class="longText" readonly>
<template #label><i class="fa-solid fa-fw fa-user-tie"></i> 授權商務卡片編輯</template> <template #label><i class="fa-solid fa-fw fa-user-tie"></i> 授權商務卡片編輯</template>
<template #button> <template #button>
<van-button size="small" @click="$router.push('/auth/auth')"> <van-button size="small" @click="$router.push('/auth/auth')">
授權 授權
</van-button> </van-button>
</template> </template>
</van-field> </van-field>
<van-field input-align="right" class="longText" readonly> <van-field input-align="right" class="longText" readonly>
<template #label><i class="fa-regular fa-fw fa-handshake"></i> 代客編輯商務卡片</template> <template #label><i class="fa-regular fa-fw fa-handshake"></i> 代客編輯商務卡片</template>
<template #button> <template #button>
<van-button size="small" @click="$router.push('/auth/getauth')"> <van-button size="small" @click="$router.push('/auth/getauth')">
編輯 編輯
</van-button> </van-button>
</template> </template>
</van-field> </van-field>
<van-field input-align="right" class="longText" readonly> <van-field input-align="right" class="longText" readonly>
<template #label><i class="fa-solid fa-fw fa-award"></i> 綁定UTel淘金購會員</template> <template #label><i class="fa-solid fa-fw fa-award"></i> 綁定UTel淘金購會員</template>
<template #button> <template #button>
<van-button size="small" @click="bindTggo"> <van-button size="small" @click="bindTggo">
點擊後前往綁定 點擊後前往綁定
</van-button> </van-button>
</template> </template>
</van-field> </van-field>
<van-field input-align="right" class="longText" readonly> <van-field input-align="right" class="longText" readonly>
<template #label><i class="fa-regular fa-fw fa-paper-plane"></i> 發送名片帶廣告</template> <template #label><i class="fa-regular fa-fw fa-paper-plane"></i> 發送名片帶廣告</template>
<template #input> <template #input>
<van-switch <van-switch v-model="adSwitchStatus" @update:model-value="onUpdateValue" size="18px" active-color="#345068"
v-model="adSwitchStatus" inactive-color="#888888" />
@update:model-value="onUpdateValue" </template>
size="18px" </van-field>
active-color="#345068"
inactive-color="#888888"
/>
</template>
</van-field>
</van-cell-group> </van-cell-group>
<div class="px-3"> <div class="px-3">
<van-button size="normal" block class="bg-darkBlue text-white border-0" @click="router.push('/send')"><h5><i class="fa-regular fa-fw fa-paper-plane"></i> 發送名片</h5></van-button> <van-button size="normal" block class="bg-darkBlue text-white border-0" @click="router.push('/send')">
<h5><i class="fa-regular fa-fw fa-paper-plane"></i> 發送名片</h5>
</van-button>
</div> </div>
</div> </div>
<!-- <Footer /> -->
<van-dialog <van-dialog v-model:show="showNfcQrcode" title="電子名片二維碼" :show-cancel-button="true" cancel-button-text=""
v-model:show="showNfcQrcode" :show-confirm-button="false">
title="電子名片二維碼"
:show-cancel-button="true"
cancel-button-text="關閉"
:show-confirm-button="false"
>
<div class="qrcode text-center pt-3"> <div class="qrcode text-center pt-3">
<qrcode-vue :value="userInfo.nfcurl" :size="200" level="M" /> <qrcode-vue :value="userInfo.nfcurl" :size="200" level="M" />
</div> </div>
</van-dialog> </van-dialog>
<van-overlay <van-overlay :show="popShow" z-index="1000" :style="{ background: 'rgba(0, 0, 0, .85)' }">
:show="popShow"
z-index="1000"
:style="{ background: 'rgba(0, 0, 0, .85)' }"
>
<div class="wrapper" @click.stop> <div class="wrapper" @click.stop>
<div class="clip"> <div class="clip">
<van-icon <van-icon :style="{ display: 'none', marginRight: '5px' }" @click="popShow = false"
:style="{ display: 'none', marginRight: '5px' }" :class="{ 'd-block': modalClose }" name="cross" size="15" />
@click="popShow = false" <van-count-down :style="{ color: '#fff' }" @finish="closeShow" :auto-start="true" :time="adData.play_sec * 1000"
:class="{ 'd-block': modalClose }" format="ss 秒" />
name="cross"
size="15"
/>
<van-count-down
:style="{ color: '#fff' }"
@finish="closeShow"
:auto-start="true"
:time="adData.play_sec * 1000"
format="ss 秒"
/>
</div> </div>
<div class="top"> <div class="top">
<iframe <iframe width="100%" height="100%" :src="imageUrl + adData.ad_movie" title="YouTube video player"
width="100%" autoplay="true" frameborder="0" controls="0"
height="100%"
:src="imageUrl + adData.ad_movie"
title="YouTube video player"
autoplay="true"
frameborder="0"
controls="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowfullscreen allowfullscreen></iframe>
></iframe>
</div> </div>
<div class="bottom"> <div class="bottom">
<h5 class="title">{{ adData.ad_title }}</h5> <h5 class="title">{{ adData.ad_title }}</h5>
<h6 class="desc ellipsis e3">{{ adData.ad_desc }}</h6> <h6 class="desc ellipsis e3">{{ adData.ad_desc }}</h6>
<van-button type="light" :url="adData.ad_link" block <van-button type="light" :url="adData.ad_link" block v-if="adData.ad_link">
><i class="fa-solid fa-fw fa-link"></i> 前往連結</van-button <i class="fa-solid fa-fw fa-link"></i> 前往連結
> </van-button>
</div> </div>
</div> </div>
</van-overlay> </van-overlay>
@ -491,13 +456,14 @@ const handleLogout = () => {
<style src="@/assets/css/main.css"></style> <style src="@/assets/css/main.css"></style>
<style lang="less" scoped> <style lang="less" scoped>
.home{ .home {
.wrapper { .wrapper {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
flex-direction: column; flex-direction: column;
height: 100%; height: 100%;
.clip { .clip {
position: absolute; position: absolute;
display: flex; display: flex;
@ -511,6 +477,7 @@ const handleLogout = () => {
cursor: pointer; cursor: pointer;
z-index: 1005; z-index: 1005;
} }
.top { .top {
position: relative; position: relative;
display: flex; display: flex;
@ -518,16 +485,19 @@ const handleLogout = () => {
width: 100%; width: 100%;
flex: 1 0 0; flex: 1 0 0;
} }
.bottom { .bottom {
position: relative; position: relative;
width: 100%; width: 100%;
flex: 0 0 auto; flex: 0 0 auto;
padding: 15px; padding: 15px;
.title { .title {
color: #ffffff; color: #ffffff;
font-weight: bold; font-weight: bold;
margin-bottom: 15px; margin-bottom: 15px;
} }
.desc { .desc {
color: #ffffff; color: #ffffff;
margin-bottom: 30px; margin-bottom: 30px;
@ -539,62 +509,73 @@ const handleLogout = () => {
position: relative; position: relative;
width: 100%; width: 100%;
padding: 20px 25px; padding: 20px 25px;
.avatar{
.avatar {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
.left{
.left {
display: flex; display: flex;
align-items: center; align-items: center;
flex: 1 0 0; flex: 1 0 0;
.imgCnt{
width:80px; .imgCnt {
width: 80px;
height: 80px; height: 80px;
min-width: 80px; min-width: 80px;
border-radius: 50%; border-radius: 50%;
border:2px #fff solid; border: 2px #fff solid;
overflow: hidden; overflow: hidden;
margin-right: 15px; margin-right: 15px;
img{
width:100%; img {
width: 100%;
height: 100%; height: 100%;
object-fit: cover; object-fit: cover;
} }
} }
.info{
.name{ .info {
.name {
font-weight: bold; font-weight: bold;
color: #303a47; color: #303a47;
} }
.conpany{
.conpany {
margin-top: 5px; margin-top: 5px;
} }
} }
} }
.right{
.right {
flex: 0 0 auto; flex: 0 0 auto;
} }
} }
.recommend{
.recommend {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
padding: 20px 0 10px; padding: 20px 0 10px;
.btn{
.btn {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
flex-direction: column; flex-direction: column;
width:30%; width: 30%;
height: 100px; height: 100px;
background-color: #fff; background-color: #fff;
border-radius: 0; border-radius: 0;
.img{
.img {
font-size: 35px; font-size: 35px;
line-height: 45px; line-height: 45px;
color: #345068; color: #345068;
} }
.text{
.text {
font-size: 16px; font-size: 16px;
font-weight: bold; font-weight: bold;
color: #345068; color: #345068;
@ -603,5 +584,4 @@ const handleLogout = () => {
} }
} }
} }
</style> </style>

File diff suppressed because it is too large Load Diff

@ -1,41 +1,26 @@
<script setup> <script setup>
import { ref } from 'vue' import { ref } from 'vue'
import { useStore } from 'vuex' import { Toast } from 'vant'
import {Toast} from 'vant'
// import Footer from '@/components/Footer.vue' // import Footer from '@/components/Footer.vue'
import { setUserLevel } from '@/api' import { useRouter } from 'vue-router'
import { useRouter} from 'vue-router'
import { getSiteConfig } from '@/api' import { getSiteConfig } from '@/api'
const store = useStore()
const router = useRouter() const router = useRouter()
const shopContent = ref('') const shopContent = ref('')
let res = await getSiteConfig() let res = await getSiteConfig()
console.log(res)
if(res.code===200){ if (res.code === 200) {
store.commit('setSiteConfig',res.data) shopContent.value = res.data.shop_content
}else{ } else {
showToast('系統錯誤') showToast('系統錯誤')
router.push('/home') router.push('/home')
}
shopContent.value=store.state.config.shop_content
const setlevel = async (level)=>{
// let res = await setUserLevel(level)
// store.commit('user/setLevel',level)
// showToast('')
// router.push('/')
// window.location.href = 'http://www.tggo.com.tw/book.cgi?user=omo'
} }
</script> </script>
<template> <template>
@ -45,7 +30,7 @@ const setlevel = async (level)=>{
<h5 class="text-white mb-1"><strong>立即購買</strong></h5> <h5 class="text-white mb-1"><strong>立即購買</strong></h5>
</template> </template>
<template #left> <template #left>
<h4><i class="fa-solid fa-angle-left text-white" :style="{opacity:0.5}"></i></h4> <h4><i class="fa-solid fa-angle-left text-white" :style="{ opacity: 0.5 }"></i></h4>
</template> </template>
</van-nav-bar> </van-nav-bar>
@ -56,25 +41,28 @@ const setlevel = async (level)=>{
</template> </template>
<style lang="less" scoped> <style lang="less" scoped>
.main-section{ .main-section {
width: 100%; width: 100%;
} }
.recommend { .recommend {
width: 100%; width: 100%;
padding-top: 2%; padding-top: 2%;
} }
.recommend ul { .recommend ul {
width: 100%; width: 100%;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
justify-content: space-between; justify-content: space-between;
} }
.recommend ul li { .recommend ul li {
width: 48%; width: 48%;
flex-direction: column; flex-direction: column;
margin: 1%; margin: 1%;
img{
img {
width: 100%; width: 100%;
} }
} }</style>
</style>

@ -7,16 +7,121 @@
resolved "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.6.tgz" resolved "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.6.tgz"
integrity sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w== integrity sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w==
"@babel/parser@^7.15.8", "@babel/parser@^7.23.0": "@babel/parser@^7.23.0":
version "7.23.0" version "7.23.0"
resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz"
integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==
"@esbuild/android-arm64@0.18.20":
version "0.18.20"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622"
integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==
"@esbuild/android-arm@0.18.20":
version "0.18.20"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682"
integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==
"@esbuild/android-x64@0.18.20":
version "0.18.20"
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2"
integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==
"@esbuild/darwin-arm64@0.18.20":
version "0.18.20"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1"
integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==
"@esbuild/darwin-x64@0.18.20":
version "0.18.20"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d"
integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==
"@esbuild/freebsd-arm64@0.18.20":
version "0.18.20"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54"
integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==
"@esbuild/freebsd-x64@0.18.20":
version "0.18.20"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e"
integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==
"@esbuild/linux-arm64@0.18.20":
version "0.18.20"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0"
integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==
"@esbuild/linux-arm@0.18.20":
version "0.18.20"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0"
integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==
"@esbuild/linux-ia32@0.18.20":
version "0.18.20"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7"
integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==
"@esbuild/linux-loong64@0.18.20":
version "0.18.20"
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d"
integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==
"@esbuild/linux-mips64el@0.18.20":
version "0.18.20"
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231"
integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==
"@esbuild/linux-ppc64@0.18.20":
version "0.18.20"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb"
integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==
"@esbuild/linux-riscv64@0.18.20":
version "0.18.20"
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6"
integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==
"@esbuild/linux-s390x@0.18.20":
version "0.18.20"
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071"
integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==
"@esbuild/linux-x64@0.18.20": "@esbuild/linux-x64@0.18.20":
version "0.18.20" version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz" resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz"
integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==
"@esbuild/netbsd-x64@0.18.20":
version "0.18.20"
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1"
integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==
"@esbuild/openbsd-x64@0.18.20":
version "0.18.20"
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae"
integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==
"@esbuild/sunos-x64@0.18.20":
version "0.18.20"
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d"
integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==
"@esbuild/win32-arm64@0.18.20":
version "0.18.20"
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9"
integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==
"@esbuild/win32-ia32@0.18.20":
version "0.18.20"
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102"
integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==
"@esbuild/win32-x64@0.18.20":
version "0.18.20"
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d"
integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==
"@jridgewell/gen-mapping@^0.3.0": "@jridgewell/gen-mapping@^0.3.0":
version "0.3.3" version "0.3.3"
resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz"
@ -596,7 +701,7 @@
"@nodelib/fs.stat" "2.0.5" "@nodelib/fs.stat" "2.0.5"
run-parallel "^1.1.9" run-parallel "^1.1.9"
"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
version "2.0.5" version "2.0.5"
resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
@ -650,7 +755,7 @@
resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.3.tgz" resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.3.tgz"
integrity sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ== integrity sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==
"@types/node@*", "@types/node@^18.0.0", "@types/node@>= 14": "@types/node@*", "@types/node@^18.0.0":
version "18.18.6" version "18.18.6"
resolved "https://registry.npmjs.org/@types/node/-/node-18.18.6.tgz" resolved "https://registry.npmjs.org/@types/node/-/node-18.18.6.tgz"
integrity sha512-wf3Vz+jCmOQ2HV1YUJuCWdL64adYxumkrxtc+H1VUQlnQI04+5HtH+qZCOE21lBE7gIrt+CwX2Wv8Acrw5Ak6w== integrity sha512-wf3Vz+jCmOQ2HV1YUJuCWdL64adYxumkrxtc+H1VUQlnQI04+5HtH+qZCOE21lBE7gIrt+CwX2Wv8Acrw5Ak6w==
@ -765,7 +870,7 @@
"@vue/compiler-ssr" "3.3.6" "@vue/compiler-ssr" "3.3.6"
"@vue/shared" "3.3.6" "@vue/shared" "3.3.6"
"@vue/shared@^3.0.0", "@vue/shared@3.3.6": "@vue/shared@3.3.6", "@vue/shared@^3.0.0":
version "3.3.6" version "3.3.6"
resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.3.6.tgz" resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.3.6.tgz"
integrity sha512-Xno5pEqg8SVhomD0kTSmfh30ZEmV/+jZtyh39q6QflrjdJCXah5lrnOLi9KB6a5k5aAHXMXjoMnxlzUkCNfWLQ== integrity sha512-Xno5pEqg8SVhomD0kTSmfh30ZEmV/+jZtyh39q6QflrjdJCXah5lrnOLi9KB6a5k5aAHXMXjoMnxlzUkCNfWLQ==
@ -800,7 +905,7 @@ asn1@~0.2.3:
dependencies: dependencies:
safer-buffer "~2.1.0" safer-buffer "~2.1.0"
assert-plus@^1.0.0, assert-plus@1.0.0: assert-plus@1.0.0, assert-plus@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz"
integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==
@ -1010,6 +1115,13 @@ debounce@^1.2.0:
resolved "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz" resolved "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz"
integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==
debug@2.6.9:
version "2.6.9"
resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
dependencies:
ms "2.0.0"
debug@^3.2.6: debug@^3.2.6:
version "3.2.7" version "3.2.7"
resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz"
@ -1024,16 +1136,9 @@ debug@^4.3.4:
dependencies: dependencies:
ms "2.1.2" ms "2.1.2"
debug@2.6.9:
version "2.6.9"
resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
dependencies:
ms "2.0.0"
deepmerge@^4.2.2: deepmerge@^4.2.2:
version "4.3.1" version "4.3.1"
resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
define-data-property@^1.1.1: define-data-property@^1.1.1:
@ -1128,7 +1233,7 @@ extend@~3.0.2:
resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz"
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
extsprintf@^1.2.0, extsprintf@1.3.0: extsprintf@1.3.0, extsprintf@^1.2.0:
version "1.3.0" version "1.3.0"
resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz"
integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==
@ -1205,6 +1310,11 @@ form-data@~2.3.2:
combined-stream "^1.0.6" combined-stream "^1.0.6"
mime-types "^2.1.12" mime-types "^2.1.12"
fsevents@~2.3.2:
version "2.3.3"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
function-bind@^1.1.2: function-bind@^1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz"
@ -1327,13 +1437,6 @@ http-signature@~1.2.0:
jsprim "^1.2.2" jsprim "^1.2.2"
sshpk "^1.7.0" sshpk "^1.7.0"
iconv-lite@^0.6.3:
version "0.6.3"
resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz"
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
dependencies:
safer-buffer ">= 2.1.2 < 3.0.0"
iconv-lite@0.4.24: iconv-lite@0.4.24:
version "0.4.24" version "0.4.24"
resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
@ -1341,6 +1444,13 @@ iconv-lite@0.4.24:
dependencies: dependencies:
safer-buffer ">= 2.1.2 < 3" safer-buffer ">= 2.1.2 < 3"
iconv-lite@^0.6.3:
version "0.6.3"
resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz"
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
dependencies:
safer-buffer ">= 2.1.2 < 3.0.0"
ieee754@^1.2.1: ieee754@^1.2.1:
version "1.2.1" version "1.2.1"
resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz"
@ -1351,7 +1461,7 @@ image-size@~0.5.0:
resolved "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz" resolved "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz"
integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ== integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==
inherits@^2.0.3, inherits@2.0.4: inherits@2.0.4, inherits@^2.0.3:
version "2.0.4" version "2.0.4"
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@ -1457,7 +1567,7 @@ jsprim@^1.2.2:
json-schema "0.4.0" json-schema "0.4.0"
verror "1.10.0" verror "1.10.0"
less@*, less@^4.2.0: less@^4.2.0:
version "4.2.0" version "4.2.0"
resolved "https://registry.npmjs.org/less/-/less-4.2.0.tgz" resolved "https://registry.npmjs.org/less/-/less-4.2.0.tgz"
integrity sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA== integrity sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==
@ -1551,11 +1661,6 @@ moment@^2.29.4:
resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz"
integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==
ms@^2.1.1:
version "2.1.3"
resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
ms@2.0.0: ms@2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
@ -1566,6 +1671,11 @@ ms@2.1.2:
resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
ms@^2.1.1:
version "2.1.3"
resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
nanoid@^3.3.6: nanoid@^3.3.6:
version "3.3.6" version "3.3.6"
resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz" resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz"
@ -1675,6 +1785,26 @@ pify@^4.0.1:
resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz"
integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
pinia-plugin-persist@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/pinia-plugin-persist/-/pinia-plugin-persist-1.0.0.tgz#fc696f225527f30bd5955109fafadd43c725e888"
integrity sha512-M4hBBd8fz/GgNmUPaaUsC29y1M09lqbXrMAHcusVoU8xlQi1TqgkWnnhvMikZwr7Le/hVyMx8KUcumGGrR6GVw==
dependencies:
vue-demi "^0.12.1"
pinia-plugin-persistedstate@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-3.2.0.tgz#9932ca2ae88aa6c0d6763bebc6447d7bd1f097d0"
integrity sha512-tZbNGf2vjAQcIm7alK40sE51Qu/m9oWr+rEgNm/2AWr1huFxj72CjvpQcIQzMknDBJEkQznCLAGtJTIcLKrKdw==
pinia@^2.1.7:
version "2.1.7"
resolved "https://registry.yarnpkg.com/pinia/-/pinia-2.1.7.tgz#4cf5420d9324ca00b7b4984d3fbf693222115bbc"
integrity sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==
dependencies:
"@vue/devtools-api" "^6.5.0"
vue-demi ">=0.14.5"
pngjs@^3.3.3: pngjs@^3.3.3:
version "3.4.0" version "3.4.0"
resolved "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz" resolved "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz"
@ -1719,11 +1849,6 @@ qrcode.vue@^3.4.1:
resolved "https://registry.npmjs.org/qrcode.vue/-/qrcode.vue-3.4.1.tgz" resolved "https://registry.npmjs.org/qrcode.vue/-/qrcode.vue-3.4.1.tgz"
integrity sha512-wq/zHsifH4FJ1GXQi8/wNxD1KfQkckIpjK1KPTc/qwYU5/Bkd4me0w4xZSg6EXk6xLBkVDE0zxVagewv5EMAVA== integrity sha512-wq/zHsifH4FJ1GXQi8/wNxD1KfQkckIpjK1KPTc/qwYU5/Bkd4me0w4xZSg6EXk6xLBkVDE0zxVagewv5EMAVA==
qs@~6.5.2:
version "6.5.3"
resolved "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz"
integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==
qs@6.11.0: qs@6.11.0:
version "6.11.0" version "6.11.0"
resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz"
@ -1731,6 +1856,11 @@ qs@6.11.0:
dependencies: dependencies:
side-channel "^1.0.4" side-channel "^1.0.4"
qs@~6.5.2:
version "6.5.3"
resolved "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz"
integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==
queue-microtask@^1.2.2: queue-microtask@^1.2.2:
version "1.2.3" version "1.2.3"
resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"
@ -1814,7 +1944,7 @@ reusify@^1.0.4:
resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
rollup@^1.20.0||^2.0.0||^3.0.0||^4.0.0, rollup@^3.27.1: rollup@^3.27.1:
version "3.29.4" version "3.29.4"
resolved "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz" resolved "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz"
integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==
@ -1833,7 +1963,7 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
safer-buffer@^2.0.2, safer-buffer@^2.1.0, "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0: "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2" version "2.1.2"
resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
@ -1878,7 +2008,7 @@ setprototypeof@1.2.0:
shvl@^2.0.3: shvl@^2.0.3:
version "2.0.3" version "2.0.3"
resolved "https://registry.npmjs.org/shvl/-/shvl-2.0.3.tgz" resolved "https://registry.yarnpkg.com/shvl/-/shvl-2.0.3.tgz#eb4bd37644f5684bba1fc52c3010c96fb5e6afd1"
integrity sha512-V7C6S9Hlol6SzOJPnQ7qzOVEWUQImt3BNmmzh40wObhla3XOYMe4gGiYzLrJd5TFa+cI2f9LKIRJTTKZSTbWgw== integrity sha512-V7C6S9Hlol6SzOJPnQ7qzOVEWUQImt3BNmmzh40wObhla3XOYMe4gGiYzLrJd5TFa+cI2f9LKIRJTTKZSTbWgw==
side-channel@^1.0.4: side-channel@^1.0.4:
@ -1948,7 +2078,7 @@ supports-preserve-symlinks-flag@^1.0.0:
resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
terser@^5.24.0, terser@^5.4.0: terser@^5.24.0:
version "5.24.0" version "5.24.0"
resolved "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz" resolved "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz"
integrity sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw== integrity sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==
@ -2097,7 +2227,7 @@ verror@1.10.0:
core-util-is "1.0.2" core-util-is "1.0.2"
extsprintf "^1.2.0" extsprintf "^1.2.0"
vite@^4.0.0, vite@^4.4.5: vite@^4.4.5:
version "4.5.0" version "4.5.0"
resolved "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz" resolved "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz"
integrity sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw== integrity sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==
@ -2122,6 +2252,16 @@ vue-cropper@^0.6.4:
resolved "https://registry.npmjs.org/vue-cropper/-/vue-cropper-0.6.4.tgz" resolved "https://registry.npmjs.org/vue-cropper/-/vue-cropper-0.6.4.tgz"
integrity sha512-U3bm17Li/Xwfw2t3pr8/hFE/tYhvwIWqepHK9IFC1TnX1KFd64VyfCD9nMBhPY91RyvMC6jSQgT/DyDNKuTpIQ== integrity sha512-U3bm17Li/Xwfw2t3pr8/hFE/tYhvwIWqepHK9IFC1TnX1KFd64VyfCD9nMBhPY91RyvMC6jSQgT/DyDNKuTpIQ==
vue-demi@>=0.14.5:
version "0.14.6"
resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.14.6.tgz#dc706582851dc1cdc17a0054f4fec2eb6df74c92"
integrity sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==
vue-demi@^0.12.1:
version "0.12.5"
resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.12.5.tgz#8eeed566a7d86eb090209a11723f887d28aeb2d1"
integrity sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q==
vue-router@^4.2.5: vue-router@^4.2.5:
version "4.2.5" version "4.2.5"
resolved "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz" resolved "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz"
@ -2129,7 +2269,7 @@ vue-router@^4.2.5:
dependencies: dependencies:
"@vue/devtools-api" "^6.5.0" "@vue/devtools-api" "^6.5.0"
vue@^3.0.0, vue@^3.2.0, vue@^3.2.25, vue@^3.3.4, "vue@2 || 3", vue@3.3.6: vue@^3.3.4:
version "3.3.6" version "3.3.6"
resolved "https://registry.npmjs.org/vue/-/vue-3.3.6.tgz" resolved "https://registry.npmjs.org/vue/-/vue-3.3.6.tgz"
integrity sha512-jJIDETeWJnoY+gfn4ZtMPMS5KtbP4ax+CT4dcQFhTnWEk8xMupFyQ0JxL28nvT/M4+p4a0ptxaV2WY0LiIxvRg== integrity sha512-jJIDETeWJnoY+gfn4ZtMPMS5KtbP4ax+CT4dcQFhTnWEk8xMupFyQ0JxL28nvT/M4+p4a0ptxaV2WY0LiIxvRg==
@ -2142,13 +2282,13 @@ vue@^3.0.0, vue@^3.2.0, vue@^3.2.25, vue@^3.3.4, "vue@2 || 3", vue@3.3.6:
vuex-persistedstate@^4.1.0: vuex-persistedstate@^4.1.0:
version "4.1.0" version "4.1.0"
resolved "https://registry.npmjs.org/vuex-persistedstate/-/vuex-persistedstate-4.1.0.tgz" resolved "https://registry.yarnpkg.com/vuex-persistedstate/-/vuex-persistedstate-4.1.0.tgz#127165f85f5b4534fb3170a5d3a8be9811bd2a53"
integrity sha512-3SkEj4NqwM69ikJdFVw6gObeB0NHyspRYMYkR/EbhR0hbvAKyR5gksVhtAfY1UYuWUOCCA0QNGwv9pOwdj+XUQ== integrity sha512-3SkEj4NqwM69ikJdFVw6gObeB0NHyspRYMYkR/EbhR0hbvAKyR5gksVhtAfY1UYuWUOCCA0QNGwv9pOwdj+XUQ==
dependencies: dependencies:
deepmerge "^4.2.2" deepmerge "^4.2.2"
shvl "^2.0.3" shvl "^2.0.3"
"vuex@^3.0 || ^4.0.0-rc", vuex@^4.1.0: vuex@^4.1.0:
version "4.1.0" version "4.1.0"
resolved "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz" resolved "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz"
integrity sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ== integrity sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==

Loading…
Cancel
Save