Files
SMANAGE/TempLate/GERP/pages/system/dbtable.html
T

112 lines
5.1 KiB
HTML

<style>
.GERPPage { padding: 24px; max-width: 1400px; margin: 0 auto; height: 100%; display: flex; flex-direction: column; box-sizing: border-box; }
.dbtable-page { padding: 20px; flex: 1; min-height: 0; display: flex; flex-direction: column; box-sizing: border-box; }
.dbtable-header { display: flex; align-items: center; margin-bottom: 16px; gap: 12px; flex-shrink: 0; }
.dbtable-header h1 { margin: 0; flex: 1; }
.dbtable-back { cursor: pointer; color: var(--PrimaryColor); display: flex; align-items: center; gap: 4px; font-size: 14px; }
.dbtable-back:hover { text-decoration: underline; }
.dbtable-info { font-size: 13px; color: var(--TextSecondary); margin-bottom: 12px; display: flex; gap: 16px; flex-wrap: wrap; flex-shrink: 0; }
.dbtable-info span { display: flex; align-items: center; gap: 4px; }
.dbtable-container { flex: 1; min-height: 0; overflow: hidden; display: flex; flex-direction: column; }
</style>
<div class="GERPPage">
<div class="dbtable-page">
<div class="dbtable-header">
<div class="dbtable-back" onclick="_helper.goBack()">
<i class="fas fa-arrow-left"></i> 返回数据库
</div>
<h1 class="PageTitle">
<i class="fas fa-table icon-primary icon-left-lg"></i>
<span id="table-title">未选择表</span>
<span id="admin-badge" style="display:none;margin-left:8px;padding:2px 10px;border-radius:4px;background:#1e40af;color:#fff;font-size:12px;font-weight:600;"><i class="fas fa-shield-alt"></i> 特权模式</span>
</h1>
</div>
<div class="dbtable-info" id="table-info"></div>
<div class="dbtable-container" id="TableContainer"></div>
<div id="deniedState" style="display:none;text-align:center;padding:60px 20px;color:var(--TextSecondary,#64748b);">
<i class="fas fa-lock" style="font-size:48px;margin-bottom:12px;display:block;color:var(--DangerColor,#ef4444);"></i>
<div style="font-size:16px;font-weight:600;color:var(--TextPrimary,#1e293b);margin-bottom:6px;">无权访问</div>
<div>该页面仅管理员可查看,请切换至管理员角色或联系管理员。</div>
</div>
</div>
</div>
<script>
const urlParams = new URLSearchParams(window.location.search);
const serverName = urlParams.get('server');
const tableName = urlParams.get('table');
const tableTitle = urlParams.get('title') || tableName;
const isSubServer = !!serverName;
let _helper = null;
let isAdminMode = false;
/** 检查当前用户是否具有管理员特权 */
async function checkAdmin() {
try {
const resp = await fetch('/API/FormAPI/CheckAdmin', { credentials: 'include' });
const result = await resp.json();
return result.code === 0 && result.data && result.data.is_admin;
} catch (e) { return false; }
}
function showDenied() {
document.getElementById('TableContainer').style.display = 'none';
document.getElementById('table-info').style.display = 'none';
document.getElementById('deniedState').style.display = 'block';
}
async function initPage() {
if (!tableName) {
document.getElementById('table-title').textContent = '未选择表';
document.getElementById('TableContainer').innerHTML =
'<div style="color:var(--TextSecondary);padding:40px;text-align:center;">未指定表名</div>';
return;
}
// 入口校验:仅管理员可访问数据库表浏览页
const isAdmin = await checkAdmin();
if (!isAdmin) {
showDenied();
return;
}
isAdminMode = true;
const badge = document.getElementById('admin-badge');
if (badge) badge.style.display = 'inline-block';
if (isSubServer) {
GERP.SetTitle(`${serverName} / ${tableTitle}`);
document.getElementById('table-title').textContent = `${serverName} — ${tableTitle}`;
const proxyUrl = `/api/gerp/msync/servers/${encodeURIComponent(serverName)}/form/`;
_helper = DbTableHelper.init({
container: '#TableContainer',
tableName: tableName,
tableTitle: tableTitle,
apiMode: 'subproxy',
subProxyUrl: proxyUrl,
serverName: serverName,
backUrl: `/pages/system/database.html?server=${encodeURIComponent(serverName)}`,
backTitle: `${serverName} 数据库管理`,
adminVerify: isAdminMode,
});
} else {
GERP.SetTitle(tableTitle);
document.getElementById('table-title').textContent = tableTitle;
_helper = DbTableHelper.init({
container: '#TableContainer',
tableName: tableName,
tableTitle: tableTitle,
apiMode: 'formapi',
backUrl: '/pages/system/database.html',
backTitle: '数据库管理',
adminVerify: isAdminMode,
});
}
}
initPage();
</script>