Align console UI with school-iot-admin and wire login to serverschool

UI / layout
- rebuild left mode: full-width blue header (60px) + white sidebar below + card-style tags view
- introduce design tokens in variables.css (brand #347df9, sidebar 240px, menu item 49px)
  and theme overrides for dark / dark-blue themes
- restyle navigation bar (logo + platform name / top nav / tools + user), logo, sidebar
  (selected state: light blue bg + blue bar + bold), tags view, app main
- global styles: .app-container white card, .head-title, .btn-blue/.btn-white,
  el-table / el-dialog look, brand color injected into --el-color-primary
- add favorites store (localStorage) wired to sidebar star and header top nav
- disable template watermark / footer / promo notifications by default

Login (serverschool)
- port school-iot-admin login page (background art, right side card, keep-login)
- OAuth2 password mode: GET /oauth/token (raw axios) + GET /uc/account/current
- port phone lookup (/wx/getAccoutList) and forget-password flow
  (/sms/sendCode + /sms/verifyCode) as components/login/Forget.vue
- user store exposes accountInfo / accountType / teamId / roleId and strips password

Infra
- move all devServer proxies and env vars from school-iot-admin/vue.config.js
  (default targets point to production)
- fix empty sidebar: guard short-circuit skipped setRoutes when login page already
  fetched user info
This commit is contained in:
2026-10-27 09:13:39 +08:00
parent 80b8218b23
commit 47dd605067
38 changed files with 1719 additions and 464 deletions
+1
View File
@@ -21,6 +21,7 @@ declare module 'vue' {
ElButton: typeof import('element-plus/es')['ElButton']
ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup']
ElCard: typeof import('element-plus/es')['ElCard']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
ElContainer: typeof import('element-plus/es')['ElContainer']
ElDialog: typeof import('element-plus/es')['ElDialog']
+19
View File
@@ -4,6 +4,25 @@ interface ImportMetaEnv {
readonly VITE_BASE_URL: string
readonly VITE_ROUTER_HISTORY: "hash" | "html5"
readonly VITE_PUBLIC_PATH: string
/** serverschool 后端接口前缀(如 /hxyd-api) */
readonly VITE_SCHOOL_BASE_URL: string
/** 开发环境 /hxyd-api 代理目标(仅 vite.config.ts 使用) */
readonly VITE_SCHOOL_TARGET: string
/** kkFileView 文档预览服务 */
readonly VITE_KKFILEVIEW_URL?: string
/** 问卷系统 */
readonly VITE_QUESTION_URL?: string
/** 可视化数据大屏 */
readonly VITE_DATA_SCREEN?: string
/** 新生填报 H5 */
readonly VITE_APPLY_URL?: string
/** 数据填报表单 */
readonly VITE_API_FORM?: string
/** 以下为 vite.config.ts 代理目标(仅开发环境使用) */
readonly VITE_WS_TARGET?: string
readonly VITE_VIDEO_TARGET?: string
readonly VITE_VIDEO_MINIO?: string
readonly VITE_AGENT_DIALOGUE_TARGET?: string
}
interface ImportMeta {