refactor(frontend): UI/UX改进和组件优化
- DataTable组件操作列自适应 - 优化各种Modal弹窗 - 统一API调用方式(AbortSignal) - 添加全局订阅状态管理 - 优化各管理视图的交互和布局 - 修复国际化翻译问题
This commit is contained in:
@@ -563,13 +563,13 @@ const installing = ref(false)
|
||||
const confirmPassword = ref('')
|
||||
const serviceReady = ref(false)
|
||||
|
||||
// Get current server port from browser location (set by install.sh)
|
||||
// Default server port
|
||||
const getCurrentPort = (): number => {
|
||||
const port = window.location.port
|
||||
if (port) {
|
||||
return parseInt(port, 10)
|
||||
}
|
||||
// Default port based on protocol
|
||||
|
||||
return window.location.protocol === 'https:' ? 443 : 80
|
||||
}
|
||||
|
||||
@@ -674,42 +674,35 @@ async function performInstall() {
|
||||
|
||||
// Wait for service to restart and become available
|
||||
async function waitForServiceRestart() {
|
||||
const maxAttempts = 30 // 30 attempts, ~30 seconds max
|
||||
const maxAttempts = 60 // Increase to 60 attempts, ~60 seconds max
|
||||
const interval = 1000 // 1 second between attempts
|
||||
|
||||
// Wait a moment for the service to start restarting
|
||||
await new Promise((resolve) => setTimeout(resolve, 2000))
|
||||
await new Promise((resolve) => setTimeout(resolve, 3000))
|
||||
|
||||
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
||||
try {
|
||||
// Try to access the health endpoint
|
||||
const response = await fetch('/health', {
|
||||
// Use setup status endpoint as it tells us the real mode
|
||||
// Service might return 404 or connection refused while restarting
|
||||
const response = await fetch('/setup/status', {
|
||||
method: 'GET',
|
||||
cache: 'no-store'
|
||||
})
|
||||
|
||||
if (response.ok) {
|
||||
// Service is up, check if setup is no longer needed
|
||||
const statusResponse = await fetch('/setup/status', {
|
||||
method: 'GET',
|
||||
cache: 'no-store'
|
||||
})
|
||||
|
||||
if (statusResponse.ok) {
|
||||
const data = await statusResponse.json()
|
||||
// If needs_setup is false, service has restarted in normal mode
|
||||
if (data.data && !data.data.needs_setup) {
|
||||
serviceReady.value = true
|
||||
// Redirect to login page after a short delay
|
||||
setTimeout(() => {
|
||||
window.location.href = '/login'
|
||||
}, 1500)
|
||||
return
|
||||
}
|
||||
const data = await response.json()
|
||||
// If needs_setup is false, service has restarted in normal mode
|
||||
if (data.data && !data.data.needs_setup) {
|
||||
serviceReady.value = true
|
||||
// Redirect to login page after a short delay
|
||||
setTimeout(() => {
|
||||
window.location.href = '/login'
|
||||
}, 1500)
|
||||
return
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
// Service not ready yet, continue polling
|
||||
// Service not ready or network error during restart, continue polling
|
||||
}
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, interval))
|
||||
|
||||
Reference in New Issue
Block a user