up
This commit is contained in:
Generated
+5
@@ -57,6 +57,7 @@
|
||||
"integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.27.1",
|
||||
"@babel/generator": "^7.28.5",
|
||||
@@ -1028,6 +1029,7 @@
|
||||
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
|
||||
"integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/popperjs"
|
||||
@@ -1741,6 +1743,7 @@
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"baseline-browser-mapping": "^2.8.19",
|
||||
"caniuse-lite": "^1.0.30001751",
|
||||
@@ -2793,6 +2796,7 @@
|
||||
"integrity": "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"esbuild": "^0.25.0",
|
||||
"fdir": "^6.5.0",
|
||||
@@ -2971,6 +2975,7 @@
|
||||
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.24.tgz",
|
||||
"integrity": "sha512-uTHDOpVQTMjcGgrqFPSb8iO2m1DUvo+WbGqoXQz8Y1CeBYQ0FXf2z1gLRaBtHjlRz7zZUBHxjVB5VTLzYkvftg==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@vue/compiler-dom": "3.5.24",
|
||||
"@vue/compiler-sfc": "3.5.24",
|
||||
|
||||
@@ -1,20 +1,22 @@
|
||||
<script setup>
|
||||
import { useUserStore } from "@/stores/user";
|
||||
|
||||
import { RouterLink } from "vue-router";
|
||||
import { RouterLink, useRouter } from "vue-router";
|
||||
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
import { myfuncs } from "@/myfunc.js";
|
||||
import { onMounted, ref } from "vue";
|
||||
|
||||
|
||||
// import { Tooltip } from "@tabler/core";
|
||||
// import { Dropdown } from 'bootstrap'
|
||||
|
||||
// 使用 vue-i18n 的 Composition API
|
||||
const { t, locale } = useI18n();
|
||||
const userStore = useUserStore();
|
||||
const theTeme = ref("light");
|
||||
const lang_sele = ref(null);
|
||||
const router = useRouter();
|
||||
|
||||
function set_them(temp) {
|
||||
theTeme.value = temp;
|
||||
@@ -30,6 +32,12 @@ function changeLanguage(lang) {
|
||||
//console.log("selectedLang:",selectedLang);
|
||||
}
|
||||
|
||||
function logOut() {
|
||||
//console.log("logout");
|
||||
userStore.logout();
|
||||
router.push("/login");
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
const savedTheme = myfuncs.getThemefromStorge();
|
||||
theTeme.value = savedTheme;
|
||||
@@ -42,10 +50,8 @@ onMounted(() => {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//userlogin
|
||||
userStore.loginFromStoreCookie()
|
||||
|
||||
userStore.loginFromStoreCookie();
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -169,30 +175,32 @@ onMounted(() => {
|
||||
</router-link>
|
||||
</div>
|
||||
|
||||
<div v-if="userStore.isLoggedIn" class="nav-item dropdown">
|
||||
<a
|
||||
href="#"
|
||||
class="nav-link d-flex lh-1 p-0 px-2"
|
||||
data-bs-toggle="dropdown"
|
||||
aria-label="Open user menu"
|
||||
>
|
||||
<span
|
||||
class="avatar avatar-sm"
|
||||
style="background-image: url(./static/avatars/000m.jpg)"
|
||||
<div v-else class="nav-item">
|
||||
<div class="dropdown">
|
||||
<div
|
||||
|
||||
class="nav-link d-flex lh-1 p-0 px-2"
|
||||
data-bs-toggle="dropdown"
|
||||
aria-label="Open user menu"
|
||||
>
|
||||
</span>
|
||||
<div class="d-none d-xl-block ps-2">
|
||||
<div>Paweł Kuna</div>
|
||||
<div class="mt-1 small text-secondary">UI Designer</div>
|
||||
<span
|
||||
class="avatar avatar-sm"
|
||||
style="background-image: url(./static/avatars/000m.jpg)"
|
||||
>
|
||||
</span>
|
||||
<div class="d-none d-xl-block ps-2">
|
||||
<div>Paweł Kuna</div>
|
||||
<div class="mt-1 small text-secondary">UI Designer</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dropdown-menu dropdown-menu-end dropdown-menu-arrow">
|
||||
<a href="#" class="dropdown-item">Status</a>
|
||||
<a href="./profile.html" class="dropdown-item">Profile</a>
|
||||
<a href="#" class="dropdown-item">Feedback</a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a href="./settings.html" class="dropdown-item">Settings</a>
|
||||
<div @click="logOut" class="dropdown-item">Logout</div>
|
||||
</div>
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-end dropdown-menu-arrow">
|
||||
<a href="#" class="dropdown-item">Status</a>
|
||||
<a href="./profile.html" class="dropdown-item">Profile</a>
|
||||
<a href="#" class="dropdown-item">Feedback</a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a href="./settings.html" class="dropdown-item">Settings</a>
|
||||
<a href="./sign-in.html" class="dropdown-item">Logout</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<script setup>
|
||||
import { onMounted, ref } from "vue";
|
||||
import { Offcanvas } from "bootstrap";
|
||||
import { Offcanvas } from "@tabler/core";
|
||||
|
||||
const offcanvasTop = ref(null);
|
||||
let ov;
|
||||
|
||||
@@ -26,10 +26,14 @@ export const my_network_func = {
|
||||
//把cookie插入json
|
||||
var data = {};
|
||||
data["data"] = json;
|
||||
|
||||
var userstore=useUserStore()
|
||||
|
||||
//console.log(userstore.cookieValue)
|
||||
|
||||
// if (useUserStore.cookieValue!="") {
|
||||
// data["cookie"] = useUserStore.cookieValue;
|
||||
// }
|
||||
if (userstore.userCookie) {
|
||||
data["userCookie"] = userstore.userCookie
|
||||
}
|
||||
|
||||
var re_data = {};
|
||||
|
||||
|
||||
@@ -1,35 +1,62 @@
|
||||
// stores/user.js
|
||||
import { defineStore } from "pinia";
|
||||
import { ref, computed } from "vue";
|
||||
import { myfuncs } from '@/myfunc.js'
|
||||
import { myfuncs } from "@/myfunc.js";
|
||||
|
||||
// 组合式 API 写法 (推荐)
|
||||
export const useUserStore = defineStore("user", () => {
|
||||
// 状态 (State)
|
||||
const userInfo = ref(null);
|
||||
const cookieValue = ref("");
|
||||
const userCookie = ref(null);
|
||||
const isLoggedIn = ref(false);
|
||||
|
||||
const logout = () => {
|
||||
isLoggedIn.value = false;
|
||||
const cookiesQualified = () => {
|
||||
//返回一个合格的cookie 就是没过期的cookie
|
||||
//如果cookie没过期直接返回,如果过期 顺便logout
|
||||
var cookieTimeout = userCookie.value.ExpiresAt;
|
||||
if (new Date(cookieTimeout) < new Date()) {
|
||||
//过期了
|
||||
logout();
|
||||
}
|
||||
return userCookie.value;
|
||||
};
|
||||
const logout = () => {
|
||||
userCookie.value = null;
|
||||
isLoggedIn.value = false;
|
||||
myfuncs.dele("userCookie");
|
||||
myfuncs.deleT("userCookie");
|
||||
};
|
||||
const login = (cookie) => {
|
||||
userCookie.value = cookie;
|
||||
isLoggedIn.value = true;
|
||||
//这里应该判读cookie的实效性
|
||||
userCookie.value = cookiesQualified();
|
||||
};
|
||||
|
||||
const loginFromStoreCookie = () => {
|
||||
//从store获取cookie
|
||||
var cookie=myfuncs.loadJson("userCookie")
|
||||
console.log(cookie)
|
||||
//isLoggedIn.value = true;
|
||||
};
|
||||
const loginUpdata = (cookie) => {
|
||||
console.log(cookie)
|
||||
cookieValue.value=cookie.value
|
||||
|
||||
var cookie = myfuncs.loadJsonT("userCookie");
|
||||
if (cookie) {
|
||||
login(cookie);
|
||||
} else {
|
||||
cookie = myfuncs.loadJson("userCookie");
|
||||
if (cookie) {
|
||||
login(cookie);
|
||||
} else {
|
||||
logout();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
return {
|
||||
userInfo,
|
||||
cookieValue,
|
||||
userCookie,
|
||||
isLoggedIn,
|
||||
logout,
|
||||
login,
|
||||
loginFromStoreCookie,
|
||||
loginUpdata,
|
||||
|
||||
};
|
||||
});
|
||||
|
||||
@@ -20,6 +20,6 @@ const user = useUserStore()
|
||||
<main>
|
||||
1112
|
||||
<button @click="t">222</button>
|
||||
{{ user.isLoggedIn }}
|
||||
{{ user.userCookie }}
|
||||
</main>
|
||||
</template>
|
||||
|
||||
@@ -91,7 +91,7 @@ function login() {
|
||||
}
|
||||
|
||||
//更新用户信息
|
||||
userStore.loginUpdata(r.data.return.cookie)
|
||||
userStore.login(r.data.return.cookie)
|
||||
|
||||
|
||||
mos.value?.showAlert(
|
||||
|
||||
Reference in New Issue
Block a user