diff --git a/src/api/login.js b/src/api/login.js
index 5fd8135..6ec051f 100644
--- a/src/api/login.js
+++ b/src/api/login.js
@@ -1,13 +1,14 @@
import request from "@/utils/request";
// 登录(使用租户名称)
-export function login(account, password) {
+export function login(account, password, tenant_name) {
return request({
url: `/admin/login`,
method: "post",
data: {
account: account,
password: password,
+ tenant_name: tenant_name,
},
});
}
diff --git a/src/router/index.js b/src/router/index.js
index b51e18f..c45236f 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -8,6 +8,11 @@ const staticMainChildren = [
name: "userProfile",
component: () => import("@/views/user/userProfile.vue"),
meta: { requiresAuth: true, title: "用户中心" }
+ },
+ // 兼容拼写错误的路径重定向
+ {
+ path: "/apps/erp/dashborad",
+ redirect: "/apps/erp/dashboard"
}
];
@@ -25,6 +30,11 @@ const staticRoutes = [
component: () => import("@/views/home/index.vue"),
meta: { requiresAuth: true, title: "系统导航", isStandalone: true }
},
+ // 兼容路径拼写错误:dashborad -> dashboard
+ {
+ path: "/apps/erp/dashborad",
+ redirect: "/apps/erp/dashboard"
+ },
{
path: "/:pathMatch(.*)*",
name: "NotFound",
diff --git a/src/views/apps/erp/ProgramManagement/index.vue b/src/views/apps/erp/ProgramManagement/index.vue
new file mode 100644
index 0000000..e69de29
diff --git a/src/views/apps/erp/dashboard/index.vue b/src/views/apps/erp/dashboard/index.vue
new file mode 100644
index 0000000..b29aa5c
--- /dev/null
+++ b/src/views/apps/erp/dashboard/index.vue
@@ -0,0 +1,329 @@
+
+
+
+
+
+
+
+
+ ¥
+ {{ formatMoney(item.value) }}
+
+
+
+
+
+
+
+
+
+
+
+ ¥
+ {{ formatMoney(item.value) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/login/index.vue b/src/views/login/index.vue
index d9bbad1..854f7b7 100644
--- a/src/views/login/index.vue
+++ b/src/views/login/index.vue
@@ -38,23 +38,20 @@
-
+
+
+
+
+
@@ -148,6 +88,7 @@
type="checkbox"
v-model="rememberMe"
class="remember-me-checkbox"
+ @change="handleRememberMeChange"
/>
记住我
@@ -175,10 +116,12 @@ import { ref, onMounted } from "vue";
import { useRouter } from "vue-router";
import { useAuthStore } from "@/stores/auth";
import { login } from "@/api/login";
+import { ElMessageBox } from "element-plus";
const router = useRouter();
const authStore = useAuthStore();
+const tenant_name = ref("");
const account = ref("");
const password = ref("");
const passwordVisible = ref(false);
@@ -188,34 +131,72 @@ const errorMsg = ref("");
onMounted(() => {
const savedUser = localStorage.getItem("loginAccount");
+ const savedTenant = localStorage.getItem("loginTenantName");
+ const savedPassword = localStorage.getItem("loginPassword");
const savedRemember = localStorage.getItem("loginRememberMe");
if (savedRemember === "true") {
- account.value = savedUser;
+ tenant_name.value = savedTenant || "";
+ account.value = savedUser || "";
+ password.value = savedPassword || "";
rememberMe.value = true;
}
});
+// 记住我复选框变化时触发
+const handleRememberMeChange = async () => {
+ if (rememberMe.value) {
+ // 勾选时弹出确认提示
+ try {
+ await ElMessageBox.confirm(
+ '请确认电脑环境是可信的,登录成功后会自动记住密码。',
+ '安全提示',
+ {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ }
+ );
+ // 用户确认,等待登录成功后再保存
+ } catch {
+ // 用户取消,取消勾选
+ rememberMe.value = false;
+ }
+ } else {
+ // 取消勾选时清除缓存
+ localStorage.removeItem("loginAccount");
+ localStorage.removeItem("loginTenantName");
+ localStorage.removeItem("loginPassword");
+ }
+};
+
const handleLogin = async () => {
errorMsg.value = "";
- if (!account.value || !password.value) {
- errorMsg.value = "请输入用户名和密码";
+ if (!tenant_name.value || !account.value || !password.value) {
+ errorMsg.value = "请输入租户名称、用户名和密码";
return;
}
- // 记住我本地存储
- if (rememberMe.value) {
- localStorage.setItem("loginAccount", account.value);
- localStorage.setItem("loginRememberMe", "true");
- } else {
+ // 记住我的处理已在复选框变化时完成
+ if (!rememberMe.value) {
localStorage.removeItem("loginAccount");
+ localStorage.removeItem("loginTenantName");
+ localStorage.removeItem("loginPassword");
localStorage.setItem("loginRememberMe", "false");
}
loading.value = true;
try {
- const res = await login(account.value, password.value);
+ const res = await login(account.value, password.value, tenant_name.value);
if (res && res.code === 200) {
+ // 登录成功时保存登录信息(如果勾选了记住我)
+ if (rememberMe.value) {
+ localStorage.setItem("loginAccount", account.value);
+ localStorage.setItem("loginTenantName", tenant_name.value);
+ localStorage.setItem("loginPassword", password.value);
+ localStorage.setItem("loginRememberMe", "true");
+ }
+
authStore.setLoginInfo(res.data);
// 登录成功后重置 tabs store 为初始状态
@@ -223,13 +204,6 @@ const handleLogin = async () => {
const tabsStore = useTabsStore();
tabsStore.resetTabs();
- // 登录成功后缓存菜单
- try {
- } catch (menuError) {
- console.error("登录处理失败", menuError);
- // 菜单加载失败不影响登录流程
- }
-
router.push({ path: "/home" });
} else {
errorMsg.value = res.msg || "登录失败";