資料修改及社群分享

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.

@ -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"
>
<van-swipe
class="notice-swipe"
:touchable="false"
:show-indicators="false"
>
<van-swipe-item
v-for="(item, key, index) in noticeData"
:key="index"
@click="noticeClick(key)"
>
{{ item.ad_title }} {{ item.ad_title }}
</van-swipe-item> </van-swipe-item>
</van-swipe> </van-swipe>
</van-notice-bar> </van-notice-bar>
</template>
<!-- END: 跑馬燈 -->
<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>
@ -356,11 +349,13 @@ const handleLogout = () => {
</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"
@click="handleShowNfc">開啟掃描</van-button></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-link"></i> 名片連結</template> <template #label><i class="fa-solid fa-fw fa-link"></i> 名片連結</template>
<template #button><van-button size="small" class="bg-tomatoRed text-white border-0" @click="doCopy"></van-button></template> <template #button><van-button size="small" class="bg-tomatoRed text-white border-0"
@click="doCopy">複製連結</van-button></template>
</van-field> </van-field>
</van-cell-group> </van-cell-group>
@ -410,78 +405,48 @@ const handleLogout = () => {
<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"
size="18px"
active-color="#345068"
inactive-color="#888888"
/>
</template> </template>
</van-field> </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>

@ -2,19 +2,23 @@
import _ from 'lodash' import _ from 'lodash'
import axios from 'axios' import axios from 'axios'
import { ref , nextTick, onBeforeMount} from 'vue' import { ref, onBeforeMount, onMounted } from 'vue'
import { Cropper } from 'vue-advanced-cropper'; import { Cropper } from 'vue-advanced-cropper';
import 'vue-advanced-cropper/dist/style.css'; import 'vue-advanced-cropper/dist/style.css';
// import Footer from '@/components/Footer.vue' // import Footer from '@/components/Footer.vue'
import { useStore } from 'vuex' import { useStore } from 'vuex'
import { useUserStore } from '@/store/user'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { showToast } from 'vant' import { showToast, showFailToast, showLoadingToast, showSuccessToast } from 'vant';
import { showLoadingToast,showSuccessToast } from 'vant';
import { getUserInfo, updateUserInfo, updateCard, searchConnection, addUserFavi, setUserNfcTpl } from '@/api'
import { getUserInfo, updateUserInfo, updateCard, searchConnection, addUserFavi, setUserNfcTpl} from '@/api' import { updateUserExtra, updateUserLink, updateUserAddon } from '@/api/user';
import imgTp1 from '@/assets/images/tp/tp_1.jpg' import imgTp1 from '@/assets/images/tp/tp_1.jpg'
import imgTp2 from '@/assets/images/tp/tp_2.jpg' import imgTp2 from '@/assets/images/tp/tp_2.jpg'
@ -24,10 +28,14 @@ import imgTp4 from '@/assets/images/tp/tp_4.jpg'
const URL = window.URL || window.webkitURL; const URL = window.URL || window.webkitURL;
const store = useStore() const store = useStore()
const userStore = useUserStore()
const router = useRouter() const router = useRouter()
const form = ref({addon:[]}) const form = ref({ addon: [] })
const uInfoForm = ref({addon:[]})
const uInfoForm = ref({ addon: [] })
const genderChecked = ref() const genderChecked = ref()
@ -38,47 +46,51 @@ const fileList = ref([]);
const myCrop = ref(null) const myCrop = ref(null)
const tabActive = ref(0) const tabActive = ref(0)
const tabItemObj = ref([ const tabItemObj = ref([
{title:"基本資料",icon:"fa-id-card-clip"}, { title: "基本資料", icon: "fa-id-card-clip" },
{title:"社群分享",icon:"fa-share-nodes"}, { title: "社群分享", icon: "fa-share-nodes" },
{title:"人脈資訊",icon:"fa-gem"}, { title: "人脈資訊", icon: "fa-gem" },
{title:"版型設定",icon:"fa-layer-group"} { title: "版型設定", icon: "fa-layer-group" }
]); ]);
const crop = ref({
show: false,
img: null,
})
const validatorUrl = (val) => { const validatorUrl = (val) => {
if(val.length>0){ if (val.length > 0) {
return /(https?:\/\/|line:\/\/|tel:|mailto:)\S+/.test(val) return /(https?:\/\/|line:\/\/|tel:|mailto:)\S+/.test(val)
}else{ } else {
return true return true
} }
}; };
const validatorTel = (val) => { const validatorTel = (val) => {
if(val.length>0){ if (val.length > 0) {
return /(\d{2,3}-?|\(\d{2,3}\))\d{3,4}-?\d{4}/.test(val) return /(\d{2,3}-?|\(\d{2,3}\))\d{3,4}-?\d{4}/.test(val)
}else{ } else {
return true return true
} }
}; };
// START:
const crop = ref({
show: false,
img: null,
})
// onMounted(async ()=>{ onMounted(async () => {
let userRes = await getUserInfo() let userRes = await getUserInfo()
if(userRes.code===200){ if (userRes.code === 200) {
form.value = userRes.data form.value = userRes.data
}else{ } else {
} }
// })
if (userRes.data.nfc_addon && (userRes.data.nfc_addon.length > 0)) { if (userRes.data.nfc_addon && (userRes.data.nfc_addon.length > 0)) {
form.value.addon = JSON.parse(userRes.data.nfc_addon) form.value.addon = JSON.parse(userRes.data.nfc_addon)
} }
console.log(form,"form")
})
const onCrop = () => { const onCrop = () => {
const { canvas } = myCrop.value.getResult(); const { canvas } = myCrop.value.getResult();
@ -108,7 +120,7 @@ const onCrop = () => {
if (res.data.code == 200) { if (res.data.code == 200) {
form.value.avatar = res.data.data form.value.avatar = res.data.data
showSuccessToast('上傳成功'); showSuccessToast('上傳成功');
}else{ } else {
showToast.fail('上傳失敗'); showToast.fail('上傳失敗');
} }
@ -118,7 +130,7 @@ const onCrop = () => {
return return
} }
const afterRead = async(file, name) => { const afterRead = async (file, name) => {
crop.value.show = true crop.value.show = true
const ofile = file.file const ofile = file.file
@ -128,10 +140,10 @@ const afterRead = async(file, name) => {
}; };
const onAddBtn = () => { const onAddBtn = () => {
if(form.value.addon){ if (form.value.addon) {
form.value.addon.push({icon:'',name:'',link:''}) form.value.addon.push({ icon: '', name: '', link: '' })
}else{ } else {
form.value.addon = [{icon:'',name:'',link:''}] form.value.addon = [{ icon: '', name: '', link: '' }]
} }
} }
@ -160,11 +172,11 @@ const onSubmit = async () => {
}); });
// console.log(form.value,"test"); // console.log(form.value,"test");
let res = await updateCard(form.value) let res = await updateCard(form.value)
if(res.code===200){ if (res.code === 200) {
showSuccessToast('更新成功') showSuccessToast('更新成功')
store.commit('user/setUserInfo',form.value) store.commit('user/setUserInfo', form.value)
router.push('/member') router.push('/member')
}else{ } else {
showToast.fail('更新失敗') showToast.fail('更新失敗')
} }
}; };
@ -175,13 +187,13 @@ const userInfoSubmit = async (values) => {
message: '資料更新中...', message: '資料更新中...',
forbidClick: true, forbidClick: true,
}); });
console.log("test",values); console.log("test", values);
let res = await updateUserInfo(values) let res = await updateUserInfo(values)
if(res.code===200){ if (res.code === 200) {
showSuccessToast('更新成功') showSuccessToast('更新成功')
store.commit('user/setUserInfo',values) store.commit('user/setUserInfo', values)
router.push('/member') router.push('/member')
}else{ } else {
showToast.fail('更新失敗') showToast.fail('更新失敗')
} }
}; };
@ -203,17 +215,53 @@ const userExtraSubmit = async (values) => {
// message: '...', // message: '...',
// forbidClick: true, // forbidClick: true,
// }); // });
console.log("test",values); let res = await updateUserExtra(values)
let res = await updateUserInfo(values) if (res.code === 200) {
if(res.code===200){
showSuccessToast('更新成功') showSuccessToast('更新成功')
store.commit('user/setUserInfo',values) // router.push('/member')
router.push('/member') } else {
}else{ showFailToast('更新失敗')
showToast.fail('更新失敗')
} }
}; };
// END:
// START:
const userLinkSubmit = async (values) => {
// showLoadingToast({
// duration: 0,
// message: '...',
// forbidClick: true,
// });
let res = await updateUserLink(values)
if (res.code === 200) {
showSuccessToast('更新成功')
// router.push('/member')
} else {
showFailToast('更新失敗')
}
};
const userAddonSubmit = async (values) => {
// showLoadingToast({
// duration: 0,
// message: '...',
// forbidClick: true,
// });
console.log(form.value.addon)
let res = await updateUserAddon(form.value.addon)
if (res.code === 200) {
showSuccessToast('更新成功')
} else {
showFailToast('更新失敗')
}
};
// END:
// START: // START:
const search = ref({ const search = ref({
@ -241,7 +289,7 @@ const tab2OnSearch = async () => {
const handleSearch = async () => { const handleSearch = async () => {
let res = await searchConnection(search.value); let res = await searchConnection(search.value);
if(res.code===200){ if (res.code === 200) {
tab2list.value = res.data; tab2list.value = res.data;
} }
}; };
@ -272,9 +320,9 @@ const tab2ListonLoad = () => {
}; };
const handleAddFavi = async (uf_user_id) => { const handleAddFavi = async (uf_user_id) => {
let res = await addUserFavi({uf_user_id}); let res = await addUserFavi({ uf_user_id });
if(res.code===200){ if (res.code === 200) {
return showToast({ return showToast({
message: '已加入好友', message: '已加入好友',
duration: 1000, duration: 1000,
@ -291,7 +339,7 @@ const handleAddFavi = async (uf_user_id) => {
const tab3list = ref([]); const tab3list = ref([]);
onBeforeMount(async () => { onBeforeMount(async () => {
let res = await setUserNfcTpl(); let res = await setUserNfcTpl();
if(res.code===200){ if (res.code === 200) {
tab3list.value = res.data; tab3list.value = res.data;
} }
}); });
@ -305,16 +353,16 @@ onBeforeMount(async () => {
<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>
<van-tabs class="van-tabs" :lazy-render="true" v-model:active="tabActive"> <van-tabs class="van-tabs" :lazy-render="true" v-model:active="tabActive">
<van-tab v-for="(item,index) in tabItemObj" :key="index"> <van-tab v-for="(item, index) in tabItemObj" :key="index">
<template #title> <template #title>
<div class="tab_item"> <div class="tab_item">
<i :class="`fa-solid ${item.icon} fa-2x mb-1`"></i> <i :class="`fa-solid ${item.icon} fa-2x mb-1`"></i>
<p class="mb-3">{{item.title}}</p> <p class="mb-3">{{ item.title }}</p>
</div> </div>
</template> </template>
</van-tab> </van-tab>
@ -326,127 +374,48 @@ onBeforeMount(async () => {
<div class="text-center p-4"> <div class="text-center p-4">
<van-uploader :after-read="afterRead" :max-count="1" name="avatar" class="mb-4"> <van-uploader :after-read="afterRead" :max-count="1" name="avatar" class="mb-4">
<div class="upload-main"> <div class="upload-main">
<img <img class="upload-img avatar" :src="form.avatar" alt="" v-if="form.avatar" />
class="upload-img avatar" <img class="upload-img avatar" src="@/assets/images/upload.jpg" alt="" v-else />
:src="form.avatar"
alt=""
v-if="form.avatar"
/>
<img
class="upload-img avatar"
src="@/assets/images/upload.jpg"
alt=""
v-else
/>
<div class="ml-3"> <div class="ml-3">
<p class="text-skyBlue mb-2">上傳圖片預設為Line頭像</p> <p class="text-skyBlue mb-2">上傳圖片預設為Line頭像</p>
<van-button class="btn-darkBlue" icon="plus" block size="small">上傳檔案</van-button> <van-button class="btn-darkBlue" icon="plus" block size="small">上傳檔案</van-button>
</div> </div>
</div> </div>
</van-uploader> </van-uploader>
<van-field <van-field v-model="form.mark" rows="3" type="textarea" maxlength="100" name="mark" placeholder="請輸入100字以內的簡介"
v-model="form.mark" show-word-limit :style="{ border: '1px #e3e3e3 solid', borderRadius: '6px' }" />
rows="3"
type="textarea"
maxlength="100"
name="mark"
placeholder="請輸入100字以內的簡介"
show-word-limit
:style="{border:'1px #e3e3e3 solid',borderRadius:'6px'}"
/>
</div> </div>
<van-field <van-field v-model="form.real_name" label="姓名" name="real_name" placeholder="請輸入您的姓名"
v-model="form.real_name" :rules="[{ required: true, message: '姓名為必填' }]" />
label="姓名" <van-field v-model="form.company" label="公司名稱" name="company" placeholder="請輸入您的公司名稱"
name="real_name" :rules="[{ required: true, message: '公司名稱必填' }]" />
placeholder="請輸入您的姓名" <van-field v-model="form.title" label="職稱" name="title" placeholder="請輸入您的職稱" />
:rules="[{ required: true, message: '姓名為必填' }]" <van-field v-model="form.phone" label="手機" name="phone" type="tel" placeholder="Ex. 0900000001 不要有空格"
/> :rules="[{ required: true, message: '手機號必填' }, { pattern: /\d{10}/, message: '手機號格式錯誤' }]" />
<van-field <van-field v-model="form.tel" label="市話" name="tel" type="tel" placeholder="請輸入您的市話"
v-model="form.company" :rules="[{ validator: validatorTel, message: '市話格式不正確,Ex. 02xxxx or 02-xxxx' }]" />
label="公司名稱" <van-field v-model="form.email" label="Email" name="email" placeholder="請輸入您的Email"
name="company" :rules="[{ required: true, message: 'Email必填' }, { pattern: /^([\w\.\-]){1,64}\@([\w\.\-]){1,64}/, message: 'Email格式錯誤' }]" />
placeholder="請輸入您的公司名稱" <van-field v-model="form.address" label="住址" name="address" placeholder="請輸入您的地址" />
:rules="[{ required: true, message: '公司名稱必填' }]" <van-field v-model="form.age" label="年齡" name="age" placeholder="請輸入您的年齡" />
/>
<van-field
v-model="form.title"
label="職稱"
name="title"
placeholder="請輸入您的職稱"
/>
<van-field
v-model="form.phone"
label="手機"
name="phone"
type="tel"
placeholder="Ex. 0900000001 不要有空格"
:rules="[{ required: true, message: '手機號必填' },{ pattern: /\d{10}/ , message: '手機號格式錯誤' }]"
/>
<van-field
v-model="form.tel"
label="市話"
name="tel"
type="tel"
placeholder="請輸入您的市話"
:rules="[{ validator: validatorTel, message: '市話格式不正確,Ex. 02xxxx or 02-xxxx' }]"
/>
<van-field
v-model="form.email"
label="Email"
name="email"
placeholder="請輸入您的Email"
:rules="[{ required: true, message: 'Email必填' },{ pattern: /^([\w\.\-]){1,64}\@([\w\.\-]){1,64}/ , message: 'Email格式錯誤' }]"
/>
<van-field
v-model="form.address"
label="住址"
name="address"
placeholder="請輸入您的地址"
/>
<van-field
v-model="form.age"
label="年齡"
name="age"
placeholder="請輸入您的年齡"
/>
<van-field name="sex" label="性別"> <van-field name="sex" label="性別">
<template #input> <template #input>
<van-radio-group <van-radio-group v-model="genderChecked" direction="horizontal" checked-color="#345068">
v-model="genderChecked"
direction="horizontal"
checked-color="#345068"
>
<van-radio name="0"></van-radio> <van-radio name="0"></van-radio>
<van-radio name="1"></van-radio> <van-radio name="1"></van-radio>
</van-radio-group> </van-radio-group>
</template> </template>
</van-field> </van-field>
<van-field <van-field v-model="form.area" label="區域" name="area" placeholder="請選擇縣市區域" />
v-model="form.area" <van-field v-model="form.work" label="工作性質" name="work" placeholder="請選擇工作性質" />
label="區域"
name="area"
placeholder="請選擇縣市區域"
/>
<van-field
v-model="form.work"
label="工作性質"
name="work"
placeholder="請選擇工作性質"
/>
<van-field readonly> <van-field readonly>
<template #label>是否公開<br/>資料搜尋</template> <template #label>是否公開<br />資料搜尋</template>
<template #input> <template #input>
<van-switch <van-switch v-model="searchChecked" @update:model-value="searchOnUpdateValue" size="18px"
v-model="searchChecked" active-color="#345068" inactive-color="#888888" />
@update:model-value="searchOnUpdateValue"
size="18px"
active-color="#345068"
inactive-color="#888888"
/>
</template> </template>
</van-field> </van-field>
@ -460,88 +429,44 @@ onBeforeMount(async () => {
</van-form> </van-form>
</van-cell-group> </van-cell-group>
<van-cell-group inset> <van-cell-group inset v-if="userStore.userData.level === 3">
<van-form @submit="userExtraSubmit"> <van-form @submit="userExtraSubmit">
<van-cell class="text-center bg-lightPink py-3"> <van-cell class="text-center bg-lightPink py-3">
<template #title> <template #title>
<h6 class="text-darkBlue"><strong>人脈資訊</strong></h6> <h6 class="text-darkBlue"><strong>人脈資訊</strong></h6>
<div style="text-align: center;">
下面為客製型會員專屬提供被搜尋
</div>
</template> </template>
</van-cell> </van-cell>
<van-field <van-field v-model="form.introduction" name="introduction" placeholder="請輸入簡短的自我介紹" label-align="top">
v-model="form.introduction"
name="introduction"
placeholder="請輸入簡短的自我介紹"
label-align="top"
>
<template #label> <template #label>
<i class="fa-solid fa-gem text-darkBlue"></i> 一句話介紹自己 <i class="fa-solid fa-gem text-darkBlue"></i> 一句話介紹自己
</template> </template>
</van-field> </van-field>
<van-divider <van-divider :style="{
:style="{
color: '#345068', color: '#345068',
borderColor: '#345068', borderColor: '#345068',
padding: '0 16px', padding: '0 16px',
}" }"><strong>貴人資源共享</strong></van-divider>
><strong>貴人資源共享</strong></van-divider
>
<div style="text-align: center;">
下面為客製型會員專屬提供被搜尋
</div>
<van-collapse v-model="resourceActive" accordion> <van-collapse v-model="resourceActive" accordion>
<van-collapse-item title="工商簡介" name="3"> <van-collapse-item title="工商簡介" name="3">
<van-field <van-field v-model="form.exchange" rows="3" type="textarea" name="exchange" maxlength="100"
v-model="form.exchange" placeholder="請填寫工商簡介" show-word-limit />
rows="3" <van-field v-model="form.exchange_link" label="分享網址:" name="exchange_link" placeholder="需求連結" />
type="textarea"
name="exchange"
maxlength="100"
placeholder="請填寫工商簡介"
show-word-limit
/>
<van-field
v-model="form.exchange_link"
label="分享網址:"
name="exchange_link"
placeholder="需求連結"
/>
</van-collapse-item> </van-collapse-item>
<van-collapse-item title="我能分享的資源" name="1"> <van-collapse-item title="我能分享的資源" name="1">
<van-field <van-field v-model="form.supply" rows="3" type="textarea" maxlength="100" name="supply"
v-model="form.supply" placeholder="請填寫能分享的資源" show-word-limit />
rows="3" <van-field v-model="form.supply_link" label="分享網址:" name="supply_link" placeholder="分享網址"
type="textarea" :rules="[{ validator: validatorUrl, message: '網址格式不正確,Ex. http://' }]" />
maxlength="100"
name="supply"
placeholder="請填寫能分享的資源"
show-word-limit
/>
<van-field
v-model="form.supply_link"
label="分享網址:"
name="supply_link"
placeholder="分享網址"
:rules="[{ validator: validatorUrl, message: '網址格式不正確,Ex. http://' }]"
/>
</van-collapse-item> </van-collapse-item>
<van-collapse-item title="我需要的資源" name="2"> <van-collapse-item title="我需要的資源" name="2">
<van-field <van-field v-model="form.demand" rows="3" type="textarea" maxlength="100" name="demand"
v-model="form.demand" placeholder="請填寫需要的的資源" show-word-limit />
rows="3" <van-field v-model="form.demand_link" label="分享網址:" name="demand_link" placeholder="需求連結" />
type="textarea"
maxlength="100"
name="demand"
placeholder="請填寫需要的的資源"
show-word-limit
/>
<van-field
v-model="form.demand_link"
label="分享網址:"
name="demand_link"
placeholder="需求連結"
/>
</van-collapse-item> </van-collapse-item>
</van-collapse> </van-collapse>
@ -556,43 +481,14 @@ onBeforeMount(async () => {
<div class="content cnt1" v-show="tabActive === 1"> <div class="content cnt1" v-show="tabActive === 1">
<van-cell-group inset> <van-cell-group inset>
<van-form @submit="onSubmit"> <van-form @submit="userLinkSubmit">
<van-field <van-field v-model="form.url" label="個人網頁" name="url" placeholder="請輸入您的個人網頁" />
v-model="form.nfcurl" <van-field v-model="form.line" label="Line" name="line" placeholder="請輸入您的Line ID" />
label="個人網頁" <van-field v-model="form.facebook" label="Facebook" name="facebook" placeholder="請輸入您的Facebook" />
name="" <van-field v-model="form.ig" label="IG" name="ig" placeholder="請輸入您的IG" />
placeholder="請輸入您的個人網頁" <van-field v-model="form.youTube" label="YouTube" name="youtube" placeholder="請輸入您的YouTube" />
/> <van-field v-model="form.wechat" label="WeChat" name="wechat" placeholder="請輸入您的WeChat" />
<van-field <van-field v-model="form.tiktok" label="Tiktok" name="tiktok" placeholder="請輸入您的Tiktok" />
v-model="form.line"
label="Line"
name=""
placeholder="請輸入您的Line ID"
/>
<van-field
v-model="form.facebook"
label="Facebook"
name=""
placeholder="請輸入您的Facebook"
/>
<van-field
v-model="form.ig"
label="IG"
name=""
placeholder="請輸入您的IG"
/>
<van-field
v-model="form.youTube"
label="YouTube"
name=""
placeholder="請輸入您的YouTube"
/>
<van-field
v-model="form.wechat"
label="WeChat"
name=""
placeholder="請輸入您的WeChat"
/>
<div class="px-5 py-4"> <div class="px-5 py-4">
<van-button block class="btn-darkBlue" native-type="submit"> <van-button block class="btn-darkBlue" native-type="submit">
@ -603,7 +499,7 @@ onBeforeMount(async () => {
</van-cell-group> </van-cell-group>
<van-cell-group inset> <van-cell-group inset>
<van-form @submit="onSubmit"> <van-form @submit="userAddonSubmit">
<van-cell class="bg-lightPink"> <van-cell class="bg-lightPink">
<template #title> <template #title>
<h6 class="text-darkBlue"><strong>相關連結</strong></h6> <h6 class="text-darkBlue"><strong>相關連結</strong></h6>
@ -615,28 +511,22 @@ onBeforeMount(async () => {
</template> </template>
</van-cell> </van-cell>
<van-field v-for="(item,idx) in form.addon" :key="idx"> <van-field v-for="(item, idx) in form.addon" :key="idx">
<template #label> <template #label>
<van-field <van-field v-model="item.name" name="" maxlength="10" placeholder="請輸入您的連結名稱"
v-model="item.name" :rules="[{ required: true, message: '連結名稱必填' }]" />
name=""
maxlength="10"
placeholder="請輸入您的連結名稱"
:rules="[{ required: true, message: '連結名稱必填' }]"
/>
</template> </template>
<template #input> <template #input>
<van-field <van-field v-model="item.link" name="" placeholder="請輸入您的按鈕連結"
v-model="item.link" :rules="[{ required: true, message: '按鈕連結必填' }]" />
name=""
placeholder="請輸入您的按鈕連結"
:rules="[{ required: true, message: '按鈕連結必填' }]"
/>
</template> </template>
<template #button> <template #button>
<van-button size="small" class="ml-1 btn-tomatoRed" icon="delete-o" hairline @click="onDelBtn(idx)"></van-button> <van-button size="small" class="ml-1 btn-tomatoRed" icon="delete-o" hairline
<van-button size="small" class="ml-1 btn-skyBlue" icon="arrow-up" hairline @click="onMoveBtn(0,idx)"></van-button> @click="onDelBtn(idx)"></van-button>
<van-button size="small" class="ml-1 btn-skyBlue" icon="arrow-down" plain hairline @click="onMoveBtn(1,idx)"></van-button> <van-button size="small" class="ml-1 btn-skyBlue" icon="arrow-up" hairline
@click="onMoveBtn(0, idx)"></van-button>
<van-button size="small" class="ml-1 btn-skyBlue" icon="arrow-down" plain hairline
@click="onMoveBtn(1, idx)"></van-button>
</template> </template>
</van-field> </van-field>
@ -674,43 +564,22 @@ onBeforeMount(async () => {
<div class="content cnt2" v-show="tabActive === 2"> <div class="content cnt2" v-show="tabActive === 2">
<van-cell-group inset> <van-cell-group inset>
<van-row align="center"> <van-row align="center">
<van-col span="8"> <van-col span="12">
<van-field <van-field v-model="tab2result" is-link readonly name="picker" :border="false" placeholder="請選擇"
v-model="tab2result" @click="tab2showPicker = true" />
is-link
readonly
name="picker"
:border="false"
placeholder="請選擇"
@click="tab2showPicker = true"
/>
<van-popup v-model:show="tab2showPicker" position="bottom"> <van-popup v-model:show="tab2showPicker" position="bottom">
<van-picker <van-picker :columns="tab2columns" @confirm="tab2OnConfirm" @cancel="tab2showPicker = false" />
:columns="tab2columns"
@confirm="tab2OnConfirm"
@cancel="tab2showPicker = false"
/>
</van-popup> </van-popup>
</van-col> </van-col>
<van-col span="16"> <van-col span="12">
<van-search <van-search v-model="search.keyword" placeholder="請輸入搜尋關鍵字" @search="tab2OnSearch" />
v-model="search.keyword"
placeholder="請輸入搜尋關鍵字"
@search="tab2OnSearch"
/>
</van-col> </van-col>
</van-row> </van-row>
</van-cell-group> </van-cell-group>
<van-cell-group inset> <van-cell-group inset>
<van-list <van-list v-model:loading="loading" :finished="finished" finished-text="" @load="tab2ListonLoad"
v-model:loading="loading" class="accordion" id="accordion">
:finished="finished"
finished-text="没有更多了"
@load="tab2ListonLoad"
class="accordion"
id="accordion"
>
<!-- <van-cell v-for="item in list" :key="item" :title="item" > --> <!-- <van-cell v-for="item in list" :key="item" :title="item" > -->
<!-- <van-cell v-for="item in tab2list" :key="item" :title="item"> <!-- <van-cell v-for="item in tab2list" :key="item" :title="item">
<template #title> <template #title>
@ -732,24 +601,27 @@ onBeforeMount(async () => {
<div class="left"> <div class="left">
<div class="avatar"><img :src="item.avatar"></div> <div class="avatar"><img :src="item.avatar"></div>
<div class="text"> <div class="text">
<h5 class="name ellipsis">{{item.real_name}}</h5> <h5 class="name ellipsis">{{ item.real_name }}</h5>
<div class="desc ellipsis">@{{item.note}}</div> <div class="desc ellipsis">@{{ item.note }}</div>
</div> </div>
</div> </div>
<div class="right"> <div class="right">
<van-button size="normal" class="border-0" data-toggle="collapse" :href="`#c${index}`" role="button" aria-expanded="false" :aria-controls="`c${index}`"> <van-button size="normal" class="border-0" data-toggle="collapse" :href="`#c${index}`" role="button"
aria-expanded="false" :aria-controls="`c${index}`">
<h5><i class="fa-solid fa-layer-group text-darkBlue"></i></h5> <h5><i class="fa-solid fa-layer-group text-darkBlue"></i></h5>
</van-button> </van-button>
<van-button size="normal" class="border-0" @click="handleAddFavi(item.user_id)"><h5><i class="fa-solid fa-comment-medical text-darkBlue"></i></h5></van-button> <van-button size="normal" class="border-0" @click="handleAddFavi(item.user_id)">
<h5><i class="fa-solid fa-comment-medical text-darkBlue"></i></h5>
</van-button>
</div> </div>
<div class="bottom collapse" :id="`c${index}`" data-parent="#accordion"> <div class="bottom collapse" :id="`c${index}`" data-parent="#accordion">
<h6 class="text-darkBlue"><strong>我能分享的資源</strong></h6> <h6 class="text-darkBlue"><strong>我能分享的資源</strong></h6>
<div class="desc">{{item.supply}}</div> <div class="desc">{{ item.supply }}</div>
<div class="url py-2">網址<a :href="item.supply_link" class="text-moBlue">{{item.supply_link}}</a></div> <div class="url py-2">網址<a :href="item.supply_link" class="text-moBlue">{{ item.supply_link }}</a></div>
<hr/> <hr />
<h6 class="text-darkBlue"><strong>我需要的資源</strong></h6> <h6 class="text-darkBlue"><strong>我需要的資源</strong></h6>
<div class="desc">{{item.demand}}</div> <div class="desc">{{ item.demand }}</div>
<div class="url py-2">網址<a :href="item.demand_link" class="text-moBlue">{{item.demand_link}}</a></div> <div class="url py-2">網址<a :href="item.demand_link" class="text-moBlue">{{ item.demand_link }}</a></div>
</div> </div>
</div> </div>
@ -770,12 +642,7 @@ onBeforeMount(async () => {
</van-cell> </van-cell>
<div class="block"> <div class="block">
<van-image <van-image width="100%" position="top" fit="cover" :src="imgTp1" />
width="100%"
position="top"
fit="cover"
:src="imgTp1"
/>
</div> </div>
<div class="d-flex justify-content-center py-3"> <div class="d-flex justify-content-center py-3">
@ -794,9 +661,7 @@ onBeforeMount(async () => {
<van-col span="12" v-for="(item, index) in tab3list" :key="index"> <van-col span="12" v-for="(item, index) in tab3list" :key="index">
<div class="imgBtn" :data-id="index"> <div class="imgBtn" :data-id="index">
<div class="imgCnt"> <div class="imgCnt">
<van-image <van-image :src="imgTp1" />
:src="imgTp1"
/>
</div> </div>
</div> </div>
</van-col> </van-col>
@ -810,15 +675,9 @@ onBeforeMount(async () => {
<h5 class="text-center mt-3">檔案裁切上傳</h5> <h5 class="text-center mt-3">檔案裁切上傳</h5>
<div class="cropper-section"> <div class="cropper-section">
<div class="crop-area"> <div class="crop-area">
<cropper <cropper class="cropper" ref="myCrop" :src="crop.img" :stencil-props="{
class="cropper"
ref="myCrop"
:src="crop.img"
:stencil-props="{
aspectRatio: 1 / 1, aspectRatio: 1 / 1,
}" }" :auto-zoom="true" />
:auto-zoom="true"
/>
</div> </div>
<van-button round class="btn-tomatoRed rounded-pill w-50 mt-3" size="small" @click="onCrop"> <van-button round class="btn-tomatoRed rounded-pill w-50 mt-3" size="small" @click="onCrop">
裁切確認 裁切確認
@ -832,47 +691,54 @@ onBeforeMount(async () => {
<style src="@/assets/css/main.css"></style> <style src="@/assets/css/main.css"></style>
<style lang="less" scoped> <style lang="less" scoped>
.cnt2{ .cnt2 {
.van-list{ .van-list {
.list-item{ .list-item {
display: flex; display: flex;
align-items: center; align-items: center;
flex-wrap: wrap; flex-wrap: wrap;
padding: 15px 0; padding: 15px 0;
margin:0 15px; margin: 0 15px;
border-bottom: 1px #e3e3e3 solid; border-bottom: 1px #e3e3e3 solid;
.left{
flex:1 0 0%; .left {
flex: 1 0 0%;
display: flex; display: flex;
align-items: center; align-items: center;
.avatar{
.avatar {
width: 55px; width: 55px;
min-width: 55px; min-width: 55px;
aspect-ratio: 1/1; aspect-ratio: 1/1;
border-radius: 50%; border-radius: 50%;
margin-right: 10px; margin-right: 10px;
overflow: hidden; overflow: hidden;
img{
width:100%; img {
height:100%; width: 100%;
height: 100%;
object-fit: cover; object-fit: cover;
} }
} }
.name{
.name {
font-weight: bold; font-weight: bold;
} }
} }
.right{
flex:0 0 auto; .right {
flex: 0 0 auto;
} }
.bottom{
flex:1 0 100%; .bottom {
flex: 1 0 100%;
border: 1px #e3e3e3 solid; border: 1px #e3e3e3 solid;
border-radius: 10px; border-radius: 10px;
padding: 0 10px; padding: 0 10px;
margin: 0; margin: 0;
transition: all .2s; transition: all .2s;
&.show{
&.show {
padding: 10px; padding: 10px;
margin: 5px 0; margin: 5px 0;
} }
@ -881,16 +747,17 @@ onBeforeMount(async () => {
} }
} }
.cnt3{ .cnt3 {
.block{ .block {
height:500px; height: 500px;
text-align: center; text-align: center;
background-color: #000; background-color: #000;
padding: 20px 35px; padding: 20px 35px;
overflow: hidden; overflow: hidden;
overflow-y: auto; overflow-y: auto;
} }
.imgBtn{
.imgBtn {
padding: 10px; padding: 10px;
margin: 10px; margin: 10px;
background-color: #333; background-color: #333;
@ -899,14 +766,18 @@ onBeforeMount(async () => {
cursor: pointer; cursor: pointer;
transform: scale(1); transform: scale(1);
transition: all .3s; transition: all .3s;
&.active,&:hover{
&.active,
&:hover {
transform: scale(1.02); transform: scale(1.02);
} }
.imgCnt{
width:100%; .imgCnt {
width: 100%;
height: 150px; height: 150px;
img{
width:100%; img {
width: 100%;
height: 100%; height: 100%;
object-fit: cover; object-fit: cover;
} }

@ -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