index-dev.bb5c7162.js 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. import { aw as defineStore, r as ref, c as computed, v as defineComponent, l as onMounted, B as createElementBlock, C as createVNode, ak as resolveComponent, y as openBlock, ax as createRouter, ay as createWebHistory, at as createApp, az as createPinia } from "./vue-dev.7a51ac2d.js";
  2. import { E as ElementPlusIconsVue, i as installer } from "./element-dev.26a170ea.js";
  3. import { a as axios } from "./utils-dev.be08a1a2.js";
  4. (function polyfill() {
  5. const relList = document.createElement("link").relList;
  6. if (relList && relList.supports && relList.supports("modulepreload")) {
  7. return;
  8. }
  9. for (const link of document.querySelectorAll('link[rel="modulepreload"]')) {
  10. processPreload(link);
  11. }
  12. new MutationObserver((mutations) => {
  13. for (const mutation of mutations) {
  14. if (mutation.type !== "childList") {
  15. continue;
  16. }
  17. for (const node of mutation.addedNodes) {
  18. if (node.tagName === "LINK" && node.rel === "modulepreload")
  19. processPreload(node);
  20. }
  21. }
  22. }).observe(document, { childList: true, subtree: true });
  23. function getFetchOpts(link) {
  24. const fetchOpts = {};
  25. if (link.integrity)
  26. fetchOpts.integrity = link.integrity;
  27. if (link.referrerPolicy)
  28. fetchOpts.referrerPolicy = link.referrerPolicy;
  29. if (link.crossOrigin === "use-credentials")
  30. fetchOpts.credentials = "include";
  31. else if (link.crossOrigin === "anonymous")
  32. fetchOpts.credentials = "omit";
  33. else
  34. fetchOpts.credentials = "same-origin";
  35. return fetchOpts;
  36. }
  37. function processPreload(link) {
  38. if (link.ep)
  39. return;
  40. link.ep = true;
  41. const fetchOpts = getFetchOpts(link);
  42. fetch(link.href, fetchOpts);
  43. }
  44. })();
  45. const index = "";
  46. const useAuthStore = defineStore("auth", () => {
  47. const user = ref(null);
  48. const token = ref(localStorage.getItem("access_token"));
  49. const loading = ref(false);
  50. const isAuthenticated = computed(() => !!token.value && !!user.value);
  51. const setToken = (newToken) => {
  52. token.value = newToken;
  53. localStorage.setItem("access_token", newToken);
  54. axios.defaults.headers.common["Authorization"] = `Bearer ${newToken}`;
  55. };
  56. const clearToken = () => {
  57. token.value = null;
  58. user.value = null;
  59. localStorage.removeItem("access_token");
  60. delete axios.defaults.headers.common["Authorization"];
  61. };
  62. const fetchUserInfo = async () => {
  63. if (!token.value)
  64. return;
  65. try {
  66. const response = await axios.get("/api/user/profile");
  67. if (response.data.code === 0) {
  68. user.value = response.data.data;
  69. }
  70. } catch (error) {
  71. console.error("获取用户信息失败:", error);
  72. clearToken();
  73. throw error;
  74. }
  75. };
  76. const checkAuth = async () => {
  77. if (token.value && !user.value) {
  78. try {
  79. await fetchUserInfo();
  80. } catch (error) {
  81. clearToken();
  82. }
  83. }
  84. if (token.value) {
  85. axios.defaults.headers.common["Authorization"] = `Bearer ${token.value}`;
  86. }
  87. };
  88. const logout = async () => {
  89. try {
  90. if (token.value) {
  91. await axios.get("/auth/logout");
  92. }
  93. } catch (error) {
  94. console.error("登出失败:", error);
  95. } finally {
  96. clearToken();
  97. }
  98. };
  99. return {
  100. user,
  101. token,
  102. loading,
  103. isAuthenticated,
  104. setToken,
  105. clearToken,
  106. fetchUserInfo,
  107. checkAuth,
  108. logout
  109. };
  110. });
  111. const _hoisted_1 = { id: "app" };
  112. const _sfc_main = /* @__PURE__ */ defineComponent({
  113. __name: "App",
  114. setup(__props) {
  115. const authStore = useAuthStore();
  116. onMounted(() => {
  117. authStore.checkAuth();
  118. });
  119. return (_ctx, _cache) => {
  120. const _component_router_view = resolveComponent("router-view");
  121. return openBlock(), createElementBlock("div", _hoisted_1, [
  122. createVNode(_component_router_view)
  123. ]);
  124. };
  125. }
  126. });
  127. const App_vue_vue_type_style_index_0_lang = "";
  128. const scriptRel = "modulepreload";
  129. const assetsURL = function(dep) {
  130. return "/" + dep;
  131. };
  132. const seen = {};
  133. const __vitePreload = function preload(baseModule, deps, importerUrl) {
  134. if (!deps || deps.length === 0) {
  135. return baseModule();
  136. }
  137. const links = document.getElementsByTagName("link");
  138. return Promise.all(deps.map((dep) => {
  139. dep = assetsURL(dep);
  140. if (dep in seen)
  141. return;
  142. seen[dep] = true;
  143. const isCss = dep.endsWith(".css");
  144. const cssSelector = isCss ? '[rel="stylesheet"]' : "";
  145. const isBaseRelative = !!importerUrl;
  146. if (isBaseRelative) {
  147. for (let i = links.length - 1; i >= 0; i--) {
  148. const link2 = links[i];
  149. if (link2.href === dep && (!isCss || link2.rel === "stylesheet")) {
  150. return;
  151. }
  152. }
  153. } else if (document.querySelector(`link[href="${dep}"]${cssSelector}`)) {
  154. return;
  155. }
  156. const link = document.createElement("link");
  157. link.rel = isCss ? "stylesheet" : scriptRel;
  158. if (!isCss) {
  159. link.as = "script";
  160. link.crossOrigin = "";
  161. }
  162. link.href = dep;
  163. document.head.appendChild(link);
  164. if (isCss) {
  165. return new Promise((res, rej) => {
  166. link.addEventListener("load", res);
  167. link.addEventListener("error", () => rej(new Error(`Unable to preload CSS for ${dep}`)));
  168. });
  169. }
  170. })).then(() => baseModule()).catch((err) => {
  171. const e = new Event("vite:preloadError", { cancelable: true });
  172. e.payload = err;
  173. window.dispatchEvent(e);
  174. if (!e.defaultPrevented) {
  175. throw err;
  176. }
  177. });
  178. };
  179. const routes = [
  180. {
  181. path: "/",
  182. redirect: "/dashboard"
  183. },
  184. {
  185. path: "/login",
  186. name: "Login",
  187. component: () => __vitePreload(() => import("./Login-dev.6b0c82e3.js"), true ? ["assets/Login-dev.6b0c82e3.js","assets/vue-dev.7a51ac2d.js","assets/_plugin-vue_export-helper-dev.cc2b3d55.js","assets/element-dev.26a170ea.js","assets/utils-dev.be08a1a2.js","assets/Login-dev.e3300704.css"] : void 0),
  188. meta: { requiresGuest: true }
  189. },
  190. {
  191. path: "/auth/callback",
  192. name: "AuthCallback",
  193. component: () => __vitePreload(() => import("./AuthCallback-dev.4480f579.js"), true ? ["assets/AuthCallback-dev.4480f579.js","assets/vue-dev.7a51ac2d.js","assets/element-dev.26a170ea.js","assets/_plugin-vue_export-helper-dev.cc2b3d55.js","assets/utils-dev.be08a1a2.js","assets/AuthCallback-dev.1bb355ff.css"] : void 0)
  194. },
  195. {
  196. path: "/dashboard",
  197. name: "Dashboard",
  198. component: () => __vitePreload(() => import("./Dashboard-dev.cae2ce38.js"), true ? ["assets/Dashboard-dev.cae2ce38.js","assets/vue-dev.7a51ac2d.js","assets/element-dev.26a170ea.js","assets/_plugin-vue_export-helper-dev.cc2b3d55.js","assets/utils-dev.be08a1a2.js","assets/Dashboard-dev.865428fa.css"] : void 0),
  199. meta: { requiresAuth: true }
  200. },
  201. {
  202. path: "/products",
  203. name: "Products",
  204. component: () => __vitePreload(() => import("./Products-dev.3852cc44.js"), true ? ["assets/Products-dev.3852cc44.js","assets/utils-dev.be08a1a2.js","assets/element-dev.26a170ea.js","assets/vue-dev.7a51ac2d.js","assets/_plugin-vue_export-helper-dev.cc2b3d55.js","assets/Products-dev.7e43ba28.css"] : void 0),
  205. meta: { requiresAuth: true }
  206. },
  207. {
  208. path: "/orders",
  209. name: "Orders",
  210. component: () => __vitePreload(() => import("./Orders-dev.5c571709.js"), true ? ["assets/Orders-dev.5c571709.js","assets/utils-dev.be08a1a2.js","assets/element-dev.26a170ea.js","assets/vue-dev.7a51ac2d.js","assets/_plugin-vue_export-helper-dev.cc2b3d55.js","assets/Orders-dev.8d664eac.css"] : void 0),
  211. meta: { requiresAuth: true }
  212. }
  213. ];
  214. const router = createRouter({
  215. history: createWebHistory(),
  216. routes
  217. });
  218. router.beforeEach(async (to, from, next) => {
  219. const authStore = useAuthStore();
  220. if (to.meta.requiresAuth) {
  221. if (!authStore.isAuthenticated) {
  222. next({ name: "Login" });
  223. return;
  224. }
  225. }
  226. if (to.meta.requiresGuest && authStore.isAuthenticated) {
  227. next({ name: "Dashboard" });
  228. return;
  229. }
  230. next();
  231. });
  232. const app = createApp(_sfc_main);
  233. for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
  234. app.component(key, component);
  235. }
  236. app.use(createPinia());
  237. app.use(router);
  238. app.use(installer);
  239. app.mount("#app");
  240. export {
  241. useAuthStore as u
  242. };
  243. //# sourceMappingURL=index-dev.bb5c7162.js.map