| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>登录 - CRM 系统</title>
- <script src="https://cdn.tailwindcss.com"></script>
- </head>
- <body class="bg-gray-100 min-h-screen flex items-center justify-center">
- <div class="bg-white p-8 rounded-lg shadow-lg w-full max-w-md">
- <div class="text-center mb-8">
- <h1 class="text-3xl font-bold text-gray-800">📊 CRM 系统</h1>
- <p class="text-gray-600 mt-2">中小企业轻量级 CRM</p>
- </div>
-
- <form id="loginForm" class="space-y-6">
- <div>
- <label class="block text-sm font-medium text-gray-700 mb-1">用户名</label>
- <input type="text" id="username" name="username" required
- class="w-full border border-gray-300 rounded-lg px-4 py-2 focus:ring-2 focus:ring-indigo-500 focus:border-transparent">
- </div>
-
- <div>
- <label class="block text-sm font-medium text-gray-700 mb-1">密码</label>
- <input type="password" id="password" name="password" required
- class="w-full border border-gray-300 rounded-lg px-4 py-2 focus:ring-2 focus:ring-indigo-500 focus:border-transparent">
- </div>
-
- <button type="submit"
- class="w-full bg-indigo-600 text-white py-3 rounded-lg hover:bg-indigo-700 transition font-medium">
- 登录
- </button>
- </form>
-
- <div class="mt-6 text-center">
- <p class="text-gray-600">
- 还没有账号?
- <a href="http://localhost:3005/register" target="_blank" class="text-indigo-600 hover:underline">立即注册</a>
- </p>
- </div>
-
- <div class="mt-4 p-4 bg-indigo-50 rounded-lg">
- <p class="text-sm text-indigo-800 font-medium">📋 测试账号:</p>
- <p class="text-sm text-indigo-700 mt-1">用户名:admin</p>
- <p class="text-sm text-indigo-700">密码:admin123</p>
- </div>
- </div>
-
- <script>
- const AUTH_SERVICE = 'http://localhost:3005';
-
- document.getElementById('loginForm').addEventListener('submit', async (e) => {
- e.preventDefault();
- const username = document.getElementById('username').value;
- const password = document.getElementById('password').value;
-
- try {
- const res = await fetch(`${AUTH_SERVICE}/api/auth/login`, {
- method: 'POST',
- headers: { 'Content-Type': 'application/json' },
- body: JSON.stringify({ username, password })
- });
- const result = await res.json();
-
- if (result.success) {
- localStorage.setItem('token', result.data.token);
- localStorage.setItem('user', JSON.stringify(result.data.user));
- alert('✅ 登录成功!');
- window.location.href = '/';
- } else {
- alert('❌ ' + result.error);
- }
- } catch (error) {
- alert('❌ 登录失败:' + error.message);
- }
- });
-
- // 检查是否已登录
- async function checkAuth() {
- const token = localStorage.getItem('token');
- if (token) {
- try {
- const res = await fetch(`${AUTH_SERVICE}/api/auth/verify`, {
- headers: { 'Authorization': 'Bearer ' + token }
- });
- const result = await res.json();
- if (result.success) {
- window.location.href = '/';
- }
- } catch (e) {}
- }
- }
- checkAuth();
- </script>
- </body>
- </html>
|