完善保险端前后端

This commit is contained in:
shenquanyi
2025-09-24 18:12:37 +08:00
parent 111ebaec84
commit b17bdcc24c
56 changed files with 9862 additions and 1111 deletions

View File

@@ -0,0 +1,199 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>设置认证Token</title>
<style>
body {
font-family: Arial, sans-serif;
max-width: 800px;
margin: 50px auto;
padding: 20px;
background-color: #f5f5f5;
}
.container {
background: white;
padding: 30px;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
h1 {
color: #333;
text-align: center;
}
.step {
margin: 20px 0;
padding: 15px;
background: #f8f9fa;
border-left: 4px solid #007bff;
}
button {
background: #007bff;
color: white;
border: none;
padding: 10px 20px;
border-radius: 4px;
cursor: pointer;
margin: 5px;
}
button:hover {
background: #0056b3;
}
.success {
color: #28a745;
font-weight: bold;
}
.error {
color: #dc3545;
font-weight: bold;
}
.code {
background: #f8f9fa;
padding: 10px;
border-radius: 4px;
font-family: monospace;
margin: 10px 0;
}
</style>
</head>
<body>
<div class="container">
<h1>🔐 保险管理系统 - 认证Token设置</h1>
<div class="step">
<h3>步骤1: 检查当前状态</h3>
<button onclick="checkCurrentStatus()">检查当前Token状态</button>
<div id="currentStatus"></div>
</div>
<div class="step">
<h3>步骤2: 设置新Token</h3>
<button onclick="setNewToken()">设置最新Token</button>
<div id="tokenStatus"></div>
</div>
<div class="step">
<h3>步骤3: 测试API连接</h3>
<button onclick="testAPI()">测试数据仓库API</button>
<div id="apiStatus"></div>
</div>
<div class="step">
<h3>步骤4: 跳转到数据仓库</h3>
<button onclick="goToDataWarehouse()">前往数据仓库页面</button>
</div>
</div>
<script>
// 最新的有效token
const VALID_TOKEN = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsInJvbGVfaWQiOjEsInBlcm1pc3Npb25zIjpbInVzZXI6cmVhZCIsInVzZXI6Y3JlYXRlIiwidXNlcjp1cGRhdGUiLCJ1c2VyOmRlbGV0ZSIsImluc3VyYW5jZTpyZWFkIiwiaW5zdXJhbmNlOmNyZWF0ZSIsImluc3VyYW5jZTp1cGRhdGUiLCJpbnN1cmFuY2U6ZGVsZXRlIiwiaW5zdXJhbmNlOnJldmlldyIsInBvbGljeTpyZWFkIiwicG9saWN5OmNyZWF0ZSIsInBvbGljeTp1cGRhdGUiLCJwb2xpY3k6ZGVsZXRlIiwibGl2ZXN0b2NrX3BvbGljeTpyZWFkIiwibGl2ZXN0b2NrX3BvbGljeTpjcmVhdGUiLCJsaXZlc3RvY2tfcG9saWN5OnVwZGF0ZSIsImxpdmVzdG9ja19wb2xpY3k6ZGVsZXRlIiwiY2xhaW06cmVhZCIsImNsYWltOmNyZWF0ZSIsImNsYWltOnVwZGF0ZSIsImNsYWltOnJldmlldyIsInN5c3RlbTpyZWFkIiwic3lzdGVtOnVwZGF0ZSIsInN5c3RlbTphZG1pbiIsImRhdGE6cmVhZCIsImRhdGE6Y3JlYXRlIiwiZGF0YTp1cGRhdGUiLCJkYXRhOmRlbGV0ZSJdLCJpYXQiOjE3NTg2OTQ3NjMsImV4cCI6MTc1OTI5OTU2M30.O2yZYBQSnagg7gC_yjLNnXD2C-Yk8W8IJuescTu1K_I';
const USER_INFO = {
"id": 1,
"username": "admin",
"role_id": 1,
"permissions": ["user:read","user:create","user:update","user:delete","insurance:read","insurance:create","insurance:update","insurance:delete","insurance:review","policy:read","policy:create","policy:update","policy:delete","livestock_policy:read","livestock_policy:create","livestock_policy:update","livestock_policy:delete","claim:read","claim:create","claim:update","claim:review","system:read","system:update","system:admin","data:read","data:create","data:update","data:delete"],
"iat": 1758694763,
"exp": 1759299563
};
function checkCurrentStatus() {
const currentToken = localStorage.getItem('token');
const currentUser = localStorage.getItem('userInfo');
const statusDiv = document.getElementById('currentStatus');
let html = '<div class="code">';
if (currentToken) {
html += `当前Token: ${currentToken.substring(0, 50)}...<br>`;
// 检查token是否过期
try {
const payload = JSON.parse(atob(currentToken.split('.')[1]));
const now = Math.floor(Date.now() / 1000);
const isExpired = payload.exp < now;
html += `Token过期时间: ${new Date(payload.exp * 1000).toLocaleString()}<br>`;
html += `当前时间: ${new Date().toLocaleString()}<br>`;
html += `<span class="${isExpired ? 'error' : 'success'}">Token状态: ${isExpired ? '已过期' : '有效'}</span><br>`;
if (payload.permissions && payload.permissions.includes('data:read')) {
html += '<span class="success">✅ 包含data:read权限</span><br>';
} else {
html += '<span class="error">❌ 缺少data:read权限</span><br>';
}
} catch (e) {
html += '<span class="error">❌ Token格式错误</span><br>';
}
} else {
html += '<span class="error">❌ 未找到Token</span><br>';
}
if (currentUser) {
html += `用户信息: ${currentUser.substring(0, 100)}...<br>`;
} else {
html += '<span class="error">❌ 未找到用户信息</span><br>';
}
html += '</div>';
statusDiv.innerHTML = html;
}
function setNewToken() {
try {
localStorage.setItem('token', VALID_TOKEN);
localStorage.setItem('userInfo', JSON.stringify(USER_INFO));
document.getElementById('tokenStatus').innerHTML =
'<div class="success">✅ Token设置成功</div>';
// 自动检查状态
setTimeout(checkCurrentStatus, 500);
} catch (error) {
document.getElementById('tokenStatus').innerHTML =
`<div class="error">❌ Token设置失败: ${error.message}</div>`;
}
}
async function testAPI() {
const statusDiv = document.getElementById('apiStatus');
statusDiv.innerHTML = '<div>🔄 测试中...</div>';
try {
const token = localStorage.getItem('token');
if (!token) {
throw new Error('未找到Token请先设置Token');
}
const response = await fetch('/api/data-warehouse/overview', {
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
});
if (response.ok) {
const data = await response.json();
statusDiv.innerHTML = `
<div class="success">✅ API测试成功</div>
<div class="code">响应数据: ${JSON.stringify(data, null, 2)}</div>
`;
} else {
throw new Error(`API调用失败: ${response.status} ${response.statusText}`);
}
} catch (error) {
statusDiv.innerHTML = `<div class="error">❌ API测试失败: ${error.message}</div>`;
}
}
function goToDataWarehouse() {
window.location.href = '/#/data-warehouse';
}
// 页面加载时自动检查状态
window.onload = function() {
checkCurrentStatus();
};
</script>
</body>
</html>