平安校园
 
 
 
 
 
 

117 lines
3.4 KiB

  1. <!--
  2. * @Description: 登录页
  3. * @Author: huguodong
  4. * @Date: 2023-12-15 15:42:19
  5. !-->
  6. <template>
  7. <div class="login-container flx-center">
  8. <div class="login-box">
  9. <SwitchDark class="dark" />
  10. <div class="login-left">
  11. <img class="login-left-img" src="@/assets/images/login_left.png" alt="login" />
  12. </div>
  13. <div class="login-form">
  14. <div class="login-logo">
  15. <img v-show="props.sysLogo" class="login-icon" :src="props.sysLogo" alt="" />
  16. <h2 class="logo-text">{{ props.sysName }}</h2>
  17. </div>
  18. <el-tabs v-model="activeName" class="demo-tabs">
  19. <el-tab-pane label="账号登录" name="pwd">
  20. <LoginForm :tenant-option="props.sysTenantOption" :tenant-options="props.tenantOptions" />
  21. </el-tab-pane>
  22. <el-tab-pane label="手机号登录" name="phone">
  23. <LoginPhoneForm :tenant-option="props.sysTenantOption" :tenant-options="props.tenantOptions" />
  24. </el-tab-pane>
  25. </el-tabs>
  26. <!-- <div class="fixed-corner">
  27. <span>{{ props.sysVersion }}</span>
  28. </div> -->
  29. </div>
  30. </div>
  31. </div>
  32. <Footer />
  33. <choose-module v-if="auth.showChooseModule" :show-modal="true" />
  34. </template>
  35. <script setup lang="ts" name="login">
  36. import LoginForm from "./components/pwd-login/index.vue";
  37. import LoginPhoneForm from "./components/phone-login/index.vue";
  38. import SwitchDark from "@/components/SwitchDark/index.vue";
  39. import { useAuthStore, useConfigStore } from "@/stores/modules";
  40. import Footer from "@/layouts/components/Footer/index.vue";
  41. import { TenantEnum } from "@/enums";
  42. import { SysConfig, SysOrg } from "@/api";
  43. const auth = useAuthStore();
  44. const config = useConfigStore();
  45. const activeName = ref("pwd");
  46. /** 登录参数接口 */
  47. interface LoginProps {
  48. /** 系统名称 */
  49. sysName: string;
  50. /** 系统版本 */
  51. sysVersion: string;
  52. /** 系统logo */
  53. sysLogo: string;
  54. /** 多租户选项 */
  55. sysTenantOption: TenantEnum;
  56. /** 多租户列表 */
  57. tenantOptions: SysOrg.SysOrgInfo[]; // 租户列表
  58. }
  59. //默认值
  60. const props = reactive<LoginProps>({
  61. sysName: "AI监控预警分析平台",
  62. sysVersion: "",
  63. sysLogo: "",
  64. sysTenantOption: TenantEnum.CLOSE,
  65. tenantOptions: config.tenantListGet
  66. });
  67. onMounted(() => {
  68. // 更新系统配置
  69. updateSysConfig(props, config);
  70. });
  71. /**
  72. * 更新系统配置
  73. * @param props 登录参数
  74. * @param config 配置store
  75. */
  76. function updateSysConfig(props: LoginProps, config: ReturnType<typeof useConfigStore>) {
  77. // 定义更新配置的逻辑
  78. const updateConfig = (res: SysConfig.SysBaseConfig) => {
  79. props.sysName = res.SYS_NAME;
  80. props.sysVersion = res.SYS_VERSION;
  81. props.sysLogo = res.SYS_LOGO;
  82. props.sysTenantOption = res.SYS_TENANT_OPTIONS;
  83. // 如果多租户选项是选择就加载租户列表
  84. if (props.sysTenantOption === TenantEnum.CHOSE) {
  85. config.setTenantList().then(res => {
  86. props.tenantOptions = res;
  87. });
  88. } else {
  89. props.tenantOptions = [];
  90. config.delTenantId();
  91. }
  92. };
  93. // 先从本地存储获取系统配置,放置网络延迟导致页面组件显示延迟
  94. config.getSysBaseInfo().then(updateConfig);
  95. // 再从网络获取系统配置
  96. config.setSysBaseInfo().then(updateConfig);
  97. }
  98. </script>
  99. <style scoped lang="scss">
  100. @import "./index.scss";
  101. .demo-tabs > .el-tabs__content {
  102. padding: 32px;
  103. font-size: 32px;
  104. font-weight: 600;
  105. color: #6b778c;
  106. }
  107. </style>