feat: 项目初始化,未病局

This commit is contained in:
fuenmao
2025-09-20 10:36:39 +08:00
commit 39f70340a0
421 changed files with 48180 additions and 0 deletions
+116
View File
@@ -0,0 +1,116 @@
<!--
* @Description: 登录页
* @Author: huguodong
* @Date: 2023-12-15 15:42:19
!-->
<template>
<div class="login-container flx-center">
<div class="login-box">
<SwitchDark class="dark" />
<div class="login-left">
<img class="login-left-img" src="@/assets/images/login_left.png" alt="login" />
</div>
<div class="login-form">
<div class="login-logo">
<img v-show="props.sysLogo" class="login-icon" :src="props.sysLogo" alt="" />
<h2 class="logo-text">{{ props.sysName }}</h2>
</div>
<el-tabs v-model="activeName" class="demo-tabs">
<el-tab-pane label="账号登录" name="pwd">
<LoginForm :tenant-option="props.sysTenantOption" :tenant-options="props.tenantOptions" />
</el-tab-pane>
<el-tab-pane label="手机号登录" name="phone">
<LoginPhoneForm :tenant-option="props.sysTenantOption" :tenant-options="props.tenantOptions" />
</el-tab-pane>
</el-tabs>
<div class="fixed-corner">
<span>{{ props.sysVersion }}</span>
</div>
</div>
</div>
</div>
<Footer />
<choose-module v-if="auth.showChooseModule" :show-modal="true" />
</template>
<script setup lang="ts" name="login">
import LoginForm from "./components/pwd-login/index.vue";
import LoginPhoneForm from "./components/phone-login/index.vue";
import SwitchDark from "@/components/SwitchDark/index.vue";
import { useAuthStore, useConfigStore } from "@/stores/modules";
import Footer from "@/layouts/components/Footer/index.vue";
import { TenantEnum } from "@/enums";
import { SysConfig, SysOrg } from "@/api";
const auth = useAuthStore();
const config = useConfigStore();
const activeName = ref("pwd");
/** 登录参数接口 */
interface LoginProps {
/** 系统名称 */
sysName: string;
/** 系统版本 */
sysVersion: string;
/** 系统logo */
sysLogo: string;
/** 多租户选项 */
sysTenantOption: TenantEnum;
/** 多租户列表 */
tenantOptions: SysOrg.SysOrgInfo[]; // 租户列表
}
//默认值
const props = reactive<LoginProps>({
sysName: "SimpleAdmin",
sysVersion: "",
sysLogo: "",
sysTenantOption: TenantEnum.CLOSE,
tenantOptions: config.tenantListGet
});
onMounted(() => {
// 更新系统配置
updateSysConfig(props, config);
});
/**
* 更新系统配置
* @param props 登录参数
* @param config 配置store
*/
function updateSysConfig(props: LoginProps, config: ReturnType<typeof useConfigStore>) {
// 定义更新配置的逻辑
const updateConfig = (res: SysConfig.SysBaseConfig) => {
props.sysName = res.SYS_NAME;
props.sysVersion = res.SYS_VERSION;
props.sysLogo = res.SYS_LOGO;
props.sysTenantOption = res.SYS_TENANT_OPTIONS;
// 如果多租户选项是选择就加载租户列表
if (props.sysTenantOption === TenantEnum.CHOSE) {
config.setTenantList().then(res => {
props.tenantOptions = res;
});
} else {
props.tenantOptions = [];
config.delTenantId();
}
};
// 先从本地存储获取系统配置,放置网络延迟导致页面组件显示延迟
config.getSysBaseInfo().then(updateConfig);
// 再从网络获取系统配置
config.setSysBaseInfo().then(updateConfig);
}
</script>
<style scoped lang="scss">
@use "./index";
.demo-tabs > .el-tabs__content {
padding: 32px;
font-size: 32px;
font-weight: 600;
color: #6b778c;
}
</style>