feat(web): I1 shell and I2 customer/project UI

Vue 3 + Element Plus layout with JWT login, RBAC routes, axios 401
handling with token restore, and Customers/Projects views wired to
platform APIs.

Made-with: Cursor
This commit is contained in:
2026-04-06 21:05:02 +08:00
parent 3f577b34d5
commit 65eb983035
18 changed files with 2939 additions and 0 deletions
+33
View File
@@ -0,0 +1,33 @@
import { createApp } from "vue";
import { createPinia } from "pinia";
import ElementPlus from "element-plus";
import "element-plus/dist/index.css";
import axios from "axios";
import App from "./App.vue";
import router from "./router";
import { useAuthStore } from "./stores/auth";
const pinia = createPinia();
const app = createApp(App);
app.use(pinia);
useAuthStore(pinia).restoreAxiosAuth();
axios.interceptors.response.use(
(r) => r,
(err) => {
if (err.response?.status === 401) {
const auth = useAuthStore();
auth.logout();
if (router.currentRoute.value.name !== "login") {
router.push({
name: "login",
query: { redirect: router.currentRoute.value.fullPath },
});
}
}
return Promise.reject(err);
},
);
app.use(router).use(ElementPlus).mount("#app");