提交登录修改
This commit is contained in:
@@ -236,6 +236,29 @@
|
||||
|
||||
<script>
|
||||
(function() {
|
||||
var JAVA_API_BASE = "{{ java_api_base or '' }}".replace(/\/+$/, '');
|
||||
var AUTH_TOKEN_KEY = 'aiimage_auth_token';
|
||||
function buildJavaUrl(path) { return JAVA_API_BASE + path; }
|
||||
function getAuthToken() {
|
||||
try { return localStorage.getItem(AUTH_TOKEN_KEY) || ''; } catch (e) { return ''; }
|
||||
}
|
||||
function authHeaders(extra) {
|
||||
var headers = extra || {};
|
||||
var token = getAuthToken();
|
||||
if (token) headers['Authorization'] = 'Bearer ' + token;
|
||||
return headers;
|
||||
}
|
||||
function jsonHeaders() {
|
||||
return authHeaders({ 'Content-Type': 'application/json' });
|
||||
}
|
||||
function parseJson(r) { return r.json().catch(function() { return {}; }); }
|
||||
function errMsg(res) {
|
||||
return (res && (res.message || res.error)) || '请求失败';
|
||||
}
|
||||
if (!JAVA_API_BASE) {
|
||||
alert('Java 服务地址未配置,请联系管理员设置 java_api_base');
|
||||
}
|
||||
|
||||
// Tab 切换
|
||||
document.querySelectorAll('.tab').forEach(function(t) {
|
||||
t.onclick = function() {
|
||||
@@ -268,17 +291,21 @@
|
||||
}
|
||||
function loadUsers(page) {
|
||||
userPage = page || 1;
|
||||
fetch('/api/admin/users?' + buildUserListQuery(userPage))
|
||||
.then(function(r) { return r.json(); })
|
||||
fetch(buildJavaUrl('/api/admin/users?' + buildUserListQuery(userPage)), {
|
||||
credentials: 'include',
|
||||
headers: authHeaders()
|
||||
})
|
||||
.then(parseJson)
|
||||
.then(function(res) {
|
||||
var tbody = document.getElementById('userListBody');
|
||||
if (!res.success) {
|
||||
tbody.innerHTML = '<tr><td colspan="6" class="empty-tip">加载失败: ' + (res.error || '') + '</td></tr>';
|
||||
tbody.innerHTML = '<tr><td colspan="6" class="empty-tip">加载失败: ' + errMsg(res) + '</td></tr>';
|
||||
return;
|
||||
}
|
||||
currentUserRole = res.current_user_role || 'admin';
|
||||
adminsList = res.admins || [];
|
||||
var items = res.items || [];
|
||||
var data = res.data || {};
|
||||
currentUserRole = data.current_user_role || 'admin';
|
||||
adminsList = data.admins || [];
|
||||
var items = data.items || [];
|
||||
if (items.length === 0) {
|
||||
tbody.innerHTML = '<tr><td colspan="6" class="empty-tip">暂无用户</td></tr>';
|
||||
} else {
|
||||
@@ -290,7 +317,7 @@
|
||||
'</td></tr>';
|
||||
}).join('');
|
||||
}
|
||||
renderPagination('userPagination', res.total, res.page, res.page_size, loadUsers);
|
||||
renderPagination('userPagination', data.total, data.page, data.page_size, loadUsers);
|
||||
bindUserActions();
|
||||
updateCreateFormByRole();
|
||||
updateUserFilterByRole();
|
||||
@@ -362,11 +389,15 @@
|
||||
document.querySelectorAll('[data-delete]').forEach(function(btn) {
|
||||
btn.onclick = function() {
|
||||
if (!confirm('确定删除用户 "' + (btn.dataset.name || '') + '" 吗?')) return;
|
||||
fetch('/api/admin/user/' + btn.dataset.delete, { method: 'DELETE' })
|
||||
.then(function(r) { return r.json(); })
|
||||
fetch(buildJavaUrl('/api/admin/user/' + btn.dataset.delete), {
|
||||
method: 'DELETE',
|
||||
credentials: 'include',
|
||||
headers: authHeaders()
|
||||
})
|
||||
.then(parseJson)
|
||||
.then(function(res) {
|
||||
if (res.success) { loadUsers(userPage); }
|
||||
else { alert(res.error || '删除失败'); }
|
||||
else { alert(errMsg(res)); }
|
||||
});
|
||||
};
|
||||
});
|
||||
@@ -393,22 +424,23 @@
|
||||
return;
|
||||
}
|
||||
var body = { username: username, password: password, role: role };
|
||||
if (role === 'normal' && currentUserRole === 'super_admin' && createdById) body.created_by_id = createdById;
|
||||
fetch('/api/admin/user', {
|
||||
if (role === 'normal' && currentUserRole === 'super_admin' && createdById) body.createdById = createdById;
|
||||
fetch(buildJavaUrl('/api/admin/user'), {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
credentials: 'include',
|
||||
headers: jsonHeaders(),
|
||||
body: JSON.stringify(body)
|
||||
})
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(parseJson)
|
||||
.then(function(res) {
|
||||
if (res.success) {
|
||||
msgEl.textContent = res.msg || '创建成功';
|
||||
msgEl.textContent = res.message || '创建成功';
|
||||
msgEl.classList.add('ok');
|
||||
document.getElementById('username').value = '';
|
||||
document.getElementById('password').value = '';
|
||||
loadUsers(1);
|
||||
} else {
|
||||
msgEl.textContent = res.error || '创建失败';
|
||||
msgEl.textContent = errMsg(res);
|
||||
msgEl.classList.add('err');
|
||||
}
|
||||
})
|
||||
@@ -429,20 +461,21 @@
|
||||
if (password) body.password = password;
|
||||
if (currentUserRole === 'super_admin' && editRoleEl && editRoleEl.offsetParent !== null)
|
||||
body.role = editRoleEl.value || 'normal';
|
||||
fetch('/api/admin/user/' + uid, {
|
||||
fetch(buildJavaUrl('/api/admin/user/' + uid), {
|
||||
method: 'PUT',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
credentials: 'include',
|
||||
headers: jsonHeaders(),
|
||||
body: JSON.stringify(body)
|
||||
})
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(parseJson)
|
||||
.then(function(res) {
|
||||
if (res.success) {
|
||||
msgEl.textContent = res.msg || '保存成功';
|
||||
msgEl.textContent = res.message || '保存成功';
|
||||
msgEl.classList.add('ok');
|
||||
document.getElementById('editUserModal').classList.remove('show');
|
||||
loadUsers(userPage);
|
||||
} else {
|
||||
msgEl.textContent = res.error || '保存失败';
|
||||
msgEl.textContent = errMsg(res);
|
||||
msgEl.classList.add('err');
|
||||
}
|
||||
});
|
||||
@@ -469,15 +502,19 @@
|
||||
}
|
||||
function loadHistory(page) {
|
||||
historyPage = page || 1;
|
||||
fetch('/api/admin/history?' + buildHistoryQuery(historyPage))
|
||||
.then(function(r) { return r.json(); })
|
||||
fetch(buildJavaUrl('/api/admin/history?' + buildHistoryQuery(historyPage)), {
|
||||
credentials: 'include',
|
||||
headers: authHeaders()
|
||||
})
|
||||
.then(parseJson)
|
||||
.then(function(res) {
|
||||
var tbody = document.getElementById('historyListBody');
|
||||
if (!res.success) {
|
||||
tbody.innerHTML = '<tr><td colspan="5" class="empty-tip">加载失败: ' + (res.error || '') + '</td></tr>';
|
||||
tbody.innerHTML = '<tr><td colspan="5" class="empty-tip">加载失败: ' + errMsg(res) + '</td></tr>';
|
||||
return;
|
||||
}
|
||||
var items = res.items || [];
|
||||
var data = res.data || {};
|
||||
var items = data.items || [];
|
||||
if (items.length === 0) {
|
||||
tbody.innerHTML = '<tr><td colspan="5" class="empty-tip">暂无记录</td></tr>';
|
||||
} else {
|
||||
@@ -492,20 +529,24 @@
|
||||
'<div class="thumb-wrap">' + (thumbs || '-') + '</div></td></tr>';
|
||||
}).join('');
|
||||
}
|
||||
renderPagination('historyPagination', res.total, res.page, res.page_size, loadHistory);
|
||||
renderPagination('historyPagination', data.total, data.page, data.page_size, loadHistory);
|
||||
})
|
||||
.catch(function() {
|
||||
document.getElementById('historyListBody').innerHTML = '<tr><td colspan="5" class="empty-tip">请求失败</td></tr>';
|
||||
});
|
||||
}
|
||||
function loadUserOptions() {
|
||||
fetch('/api/admin/users?page=1&page_size=999')
|
||||
.then(function(r) { return r.json(); })
|
||||
fetch(buildJavaUrl('/api/admin/users?page=1&page_size=50'), {
|
||||
credentials: 'include',
|
||||
headers: authHeaders()
|
||||
})
|
||||
.then(parseJson)
|
||||
.then(function(res) {
|
||||
var sel = document.getElementById('filterUser');
|
||||
var cur = sel.value;
|
||||
sel.innerHTML = '<option value="">全部用户</option>';
|
||||
(res.items || []).forEach(function(u) {
|
||||
var data = res.data || {};
|
||||
(data.items || []).forEach(function(u) {
|
||||
var opt = document.createElement('option');
|
||||
opt.value = u.id;
|
||||
opt.textContent = u.username + ' (' + roleLabel(u.role || 'normal') + ')';
|
||||
@@ -520,6 +561,9 @@
|
||||
function renderPagination(elId, total, page, pageSize, onPage) {
|
||||
var el = document.getElementById(elId);
|
||||
if (!el) return;
|
||||
total = total || 0;
|
||||
page = page || 1;
|
||||
pageSize = pageSize || 15;
|
||||
var totalPages = Math.max(1, Math.ceil(total / pageSize));
|
||||
el.innerHTML = '<span>共 ' + total + ' 条</span>' +
|
||||
'<button ' + (page <= 1 ? 'disabled' : '') + ' data-p="' + (page - 1) + '">上一页</button>' +
|
||||
|
||||
Reference in New Issue
Block a user