Twilioapp-project/web-app/test-connection.html
mars 0d57273021 添加数据库集成和用户认证功能
- 新增用户注册和登录系统 (login.html, register.html)
- 集成Supabase数据库连接 (config.js, api.js)
- 完善数据库架构设计 (database-schema.sql)
- 添加部署指南和配置文档 (DEPLOYMENT_GUIDE.md)
- 修复主页面结构和功能完善 (index.html)
- 支持通话记录保存到数据库
- 完整的账单管理和用户认证流程
- 集成OpenAI、Twilio、Stripe等API服务
2025-06-30 19:34:58 +08:00

223 lines
7.2 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Supabase 连接测试</title>
<style>
body {
font-family: Arial, sans-serif;
max-width: 800px;
margin: 0 auto;
padding: 20px;
background-color: #f5f5f5;
}
.container {
background: white;
padding: 30px;
border-radius: 10px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
.status {
padding: 15px;
margin: 10px 0;
border-radius: 5px;
font-weight: bold;
}
.success {
background-color: #d4edda;
color: #155724;
border: 1px solid #c3e6cb;
}
.error {
background-color: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
}
.info {
background-color: #d1ecf1;
color: #0c5460;
border: 1px solid #bee5eb;
}
button {
background-color: #007bff;
color: white;
border: none;
padding: 10px 20px;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
}
button:hover {
background-color: #0056b3;
}
.loading {
display: none;
}
pre {
background-color: #f8f9fa;
padding: 15px;
border-radius: 5px;
overflow-x: auto;
}
</style>
</head>
<body>
<div class="container">
<h1>🔧 Supabase 连接测试</h1>
<div class="info">
<strong>说明:</strong> 这个页面用于测试 Supabase 数据库连接是否正常。
</div>
<h2>当前配置</h2>
<div id="currentConfig"></div>
<h2>连接测试</h2>
<button onclick="testConnection()" id="testBtn">测试连接</button>
<div class="loading" id="loading">正在测试连接...</div>
<div id="result"></div>
<h2>数据库表检查</h2>
<button onclick="checkTables()" id="tablesBtn">检查数据库表</button>
<div id="tablesResult"></div>
<h2>解决方案</h2>
<div class="info">
<p><strong>如果连接失败,请按以下步骤操作:</strong></p>
<ol>
<li>访问 <a href="https://supabase.com/dashboard/project/poxwjzdianersitpnvdy" target="_blank">Supabase 控制台</a></li>
<li>进入 Settings → API</li>
<li>复制 "anon public" 密钥</li>
<li>更新 config.js 文件中的 ANON_KEY</li>
<li>刷新页面重新测试</li>
</ol>
</div>
</div>
<!-- 引入 Supabase 客户端 -->
<script src="https://cdn.jsdelivr.net/npm/@supabase/supabase-js@2"></script>
<script src="config.js"></script>
<script>
// 显示当前配置
document.getElementById('currentConfig').innerHTML = `
<pre>
URL: ${CONFIG.SUPABASE.URL}
ANON_KEY: ${CONFIG.SUPABASE.ANON_KEY.substring(0, 50)}...
</pre>
`;
let supabase;
async function testConnection() {
const resultDiv = document.getElementById('result');
const testBtn = document.getElementById('testBtn');
const loading = document.getElementById('loading');
testBtn.disabled = true;
loading.style.display = 'block';
resultDiv.innerHTML = '';
try {
// 创建 Supabase 客户端
const { createClient } = supabase;
supabase = createClient(CONFIG.SUPABASE.URL, CONFIG.SUPABASE.ANON_KEY);
// 测试连接
const { data, error } = await supabase.auth.getSession();
if (error) {
throw error;
}
resultDiv.innerHTML = `
<div class="success">
✅ 连接成功API 密钥有效。
</div>
<pre>响应数据: ${JSON.stringify(data, null, 2)}</pre>
`;
} catch (error) {
resultDiv.innerHTML = `
<div class="error">
❌ 连接失败: ${error.message}
</div>
<pre>错误详情: ${JSON.stringify(error, null, 2)}</pre>
`;
} finally {
testBtn.disabled = false;
loading.style.display = 'none';
}
}
async function checkTables() {
const resultDiv = document.getElementById('tablesResult');
const tablesBtn = document.getElementById('tablesBtn');
if (!supabase) {
resultDiv.innerHTML = `
<div class="error">
❌ 请先测试连接!
</div>
`;
return;
}
tablesBtn.disabled = true;
resultDiv.innerHTML = '<div class="info">正在检查数据库表...</div>';
try {
// 尝试查询系统设置表
const { data, error } = await supabase
.from('system_settings')
.select('*')
.limit(5);
if (error) {
throw error;
}
resultDiv.innerHTML = `
<div class="success">
✅ 数据库表访问正常!找到 ${data.length} 条系统设置记录。
</div>
<pre>示例数据: ${JSON.stringify(data, null, 2)}</pre>
`;
} catch (error) {
if (error.message.includes('relation "system_settings" does not exist')) {
resultDiv.innerHTML = `
<div class="error">
❌ 数据库表不存在!请先执行数据库初始化脚本。
</div>
<div class="info">
<p><strong>解决方案:</strong></p>
<ol>
<li>访问 <a href="https://supabase.com/dashboard/project/poxwjzdianersitpnvdy" target="_blank">Supabase SQL Editor</a></li>
<li>执行 database-init.sql 脚本</li>
<li>重新测试</li>
</ol>
</div>
`;
} else {
resultDiv.innerHTML = `
<div class="error">
❌ 数据库访问失败: ${error.message}
</div>
<pre>错误详情: ${JSON.stringify(error, null, 2)}</pre>
`;
}
} finally {
tablesBtn.disabled = false;
}
}
// 页面加载时自动测试连接
window.addEventListener('load', () => {
setTimeout(testConnection, 1000);
});
</script>
</body>
</html>