Files
wen_0908/static/js/add_user.js
2025-09-08 17:06:58 +08:00

141 lines
4.1 KiB
JavaScript

// API 基礎 URL
const API_BASE_URL = '/v1/users';
// DOM 元素
const addUserForm = document.getElementById('add-user-form');
const nameInput = document.getElementById('name');
const emailInput = document.getElementById('email');
const ageInput = document.getElementById('age');
const saveBtn = document.getElementById('save-btn');
const resetBtn = document.getElementById('reset-btn');
const cancelBtn = document.getElementById('cancel-btn');
const messageDiv = document.getElementById('message');
const importForm = document.getElementById('import-form');
const importFileInput = document.getElementById('import-file');
// 頁面載入時設置事件監聽器
document.addEventListener('DOMContentLoaded', () => {
setupEventListeners();
});
// 設置事件監聽器
function setupEventListeners() {
// 表單提交事件
addUserForm.addEventListener('submit', handleFormSubmit);
// 重置按鈕事件
resetBtn.addEventListener('click', resetForm);
// 取消按鈕事件
cancelBtn.addEventListener('click', () => {
window.location.href = 'index.html';
});
// 檔案匯入表單提交事件
importForm.addEventListener('submit', handleImportSubmit);
}
// 處理表單提交
async function handleFormSubmit(event) {
event.preventDefault();
const userData = {
name: nameInput.value.trim(),
email: emailInput.value.trim(),
age: parseInt(ageInput.value)
};
try {
const response = await fetch(API_BASE_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(userData)
});
const result = await response.json();
if (result.status === 'success') {
showMessage('用戶創建成功', 'success');
resetForm();
// 延遲後跳轉回用戶列表頁面
setTimeout(() => {
window.location.href = 'index.html';
}, 2000);
} else {
showMessage(result.message, 'error');
}
} catch (error) {
console.error('保存用戶失敗:', error);
showMessage('保存用戶失敗', 'error');
}
}
// 重置表單
function resetForm() {
addUserForm.reset();
}
// 顯示訊息
function showMessage(message, type) {
messageDiv.textContent = message;
messageDiv.className = `message ${type}`;
// 5 秒後自動隱藏訊息
setTimeout(() => {
messageDiv.className = 'message';
}, 5000);
}
// 處理檔案匯入
async function handleImportSubmit(event) {
event.preventDefault();
if (!importFileInput.files || importFileInput.files.length === 0) {
showMessage('請選擇檔案', 'error');
return;
}
const file = importFileInput.files[0];
const formData = new FormData();
formData.append('file', file);
try {
showMessage('正在匯入資料,請稍候...');
const response = await fetch(`${API_BASE_URL}/import`, {
method: 'POST',
body: formData
});
const result = await response.json();
if (result.status === 'success') {
// 顯示匯入結果
const successCount = result.data.success_count;
const errorCount = result.data.error_count;
let message = `匯入成功: ${successCount} 筆資料`;
if (errorCount > 0) {
message += `, 失敗: ${errorCount} 筆資料`;
}
showMessage(message, 'success');
// 重置表單
importForm.reset();
// 延遲後跳轉回用戶列表頁面
setTimeout(() => {
window.location.href = 'index.html';
}, 3000);
} else {
showMessage(`匯入失敗: ${result.message}`, 'error');
}
} catch (error) {
console.error('匯入錯誤:', error);
showMessage('匯入過程中發生錯誤,請稍後再試', 'error');
}
}