From 9f393ce70951c25924600ec42c9295ace2810914 Mon Sep 17 00:00:00 2001 From: jinchao <383321154@qq.com> Date: Wed, 7 May 2025 17:01:58 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=A8=E7=AE=A1=E7=90=86=E4=B8=AD=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E7=B3=BB=E7=BB=9F=E6=97=A5=E5=BF=97=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Release/database/XNSim.db | Bin 172032 -> 172032 bytes XNSimHtml/assets/icons/png/file-text.png | Bin 0 -> 5778 bytes XNSimHtml/assets/icons/png/file-text_b.png | Bin 0 -> 6538 bytes XNSimHtml/components/content-area.js | 3 + XNSimHtml/components/main-toolbar.js | 4 +- XNSimHtml/components/sub-toolbar.js | 6 +- XNSimHtml/components/system-log.js | 405 +++++++++++++++++++++ XNSimHtml/main.html | 9 + 8 files changed, 424 insertions(+), 3 deletions(-) create mode 100644 XNSimHtml/assets/icons/png/file-text.png create mode 100644 XNSimHtml/assets/icons/png/file-text_b.png create mode 100644 XNSimHtml/components/system-log.js diff --git a/Release/database/XNSim.db b/Release/database/XNSim.db index 6a8fd1b554cef707805d04ad18277f9ccc9902d8..c43ade218a22fcf09b2d5f36a3e022e22386ab03 100644 GIT binary patch delta 953 zcmaJ;O-NKh9Dlo3uB&e+%`h>u5FyyyX6C(l^PU%lf;xKX;7R9`3{p%x6yf?vE09pr zilPq`0xxQ^n3jQp=WapgVBhYFMBTdf+*Jv}U=F|k%<%txjcmq8Hsg~Gk*=xJmm*!u zJ+t6M)mP(KRl5OHReR!R;*NPF5nc9^RSCZ)T4^-+W~9Ekl{QVEX}WSbntL%`_%Mbn zgpo&}hv|*pK5?D(cZmL*Or(Se7Uy!0R)e=63yTZcPvhCOm)rN}gVlHW`SD=wkvVF> zDgQ!xxT4ai3pXcCGnpJxgF_hGQYvY2D2c_ia2&1(v9W-ZFiMCZS}NgS;t<<*74a;} zsltqfkBlp&qq&vw!qU^=^GGl;RTvrj?|5{~FpS|T|8DwrydG+SDBg;-p>wreYl zAeRa&!aIGHx9!?u_A3n z`hXWXnh45lPuN`3(3;W?hnA93Gb$Cem|)sg4&$~6r68fbFcXJ67-@xsgZ8Lq=EL|8 z!$ajo+SmbW8e+=Bh>6w~rCd3jNP!$A33tP=A*0Z8sYgRaT49^HE+LjCD6GLF9^_Dz zs0xc4yTunP_!s-9B71c=CzDAgZ}#@t3~F0@)9I$MuU%*zT`s@-o zUr|;UDHamnN4R1iq1Zlx<(Zv}iQ|dL?Ll>GFm9UC0I{Cw@{Y!6tY_J8i=}-N#OlvA zUh_}Zp%hFZ8$(Q5VR$H_Z4k8~CwMiVU!2WPKFF>u-qJ!x##bKjpy65 zE8DN;#qZvie9#C%8Y*{cxZ=vO3Tmo#^-jMzMbD delta 143 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 literal 0 HcmV?d00001 diff --git a/XNSimHtml/components/content-area.js b/XNSimHtml/components/content-area.js index 29608a0..cad7cf8 100644 --- a/XNSimHtml/components/content-area.js +++ b/XNSimHtml/components/content-area.js @@ -141,6 +141,9 @@ class ContentArea extends HTMLElement { case 'users': contentElement = document.createElement('user-management'); break; + case 'system-log': + contentElement = document.createElement('system-log'); + break; default: contentElement = document.createElement('div'); contentElement.textContent = '正在开发中...'; diff --git a/XNSimHtml/components/main-toolbar.js b/XNSimHtml/components/main-toolbar.js index 8017248..01b74fc 100644 --- a/XNSimHtml/components/main-toolbar.js +++ b/XNSimHtml/components/main-toolbar.js @@ -97,8 +97,8 @@ class MainToolbar extends HTMLElement { 监控
- 系统管理 - 系统管理 + 管理 + 管理
diff --git a/XNSimHtml/components/sub-toolbar.js b/XNSimHtml/components/sub-toolbar.js index 6f80efb..b7e6b49 100644 --- a/XNSimHtml/components/sub-toolbar.js +++ b/XNSimHtml/components/sub-toolbar.js @@ -237,6 +237,10 @@ class SubToolbar extends HTMLElement { 个人中心 个人中心 +
+ 系统日志 + 系统日志 +
用户管理 用户管理 @@ -308,7 +312,7 @@ class SubToolbar extends HTMLElement { 'config': { icon: 'sliders', text: '配置' }, 'run': { icon: 'play', text: '运行' }, 'monitor': { icon: 'chart', text: '监控' }, - 'system': { icon: 'cogs', text: '系统管理' } + 'system': { icon: 'cogs', text: '管理' } }; const currentTool = toolIcons[this._currentTool] || toolIcons['home']; diff --git a/XNSimHtml/components/system-log.js b/XNSimHtml/components/system-log.js new file mode 100644 index 0000000..6937026 --- /dev/null +++ b/XNSimHtml/components/system-log.js @@ -0,0 +1,405 @@ +class SystemLog extends HTMLElement { + constructor() { + super(); + this.attachShadow({ mode: 'open' }); + } + + connectedCallback() { + this.render(); + this.addEventListeners(); + this.loadLogs(); + } + + render() { + this.shadowRoot.innerHTML = ` + +
+
+ +
+ + +
+
+ + +
+
+
+
+
时间
+
级别
+
来源
+
内容
+
+
+ +
+ +
+
+ `; + } + + addEventListeners() { + // 搜索框事件 + const searchInput = this.shadowRoot.querySelector('.search-box input'); + searchInput.addEventListener('input', this.debounce(() => { + this.filterLogs(); + }, 300)); + + // 级别筛选事件 + const levelFilter = this.shadowRoot.querySelector('#levelFilter'); + levelFilter.addEventListener('change', () => { + this.filterLogs(); + }); + + // 时间筛选事件 + const timeFilter = this.shadowRoot.querySelector('#timeFilter'); + timeFilter.addEventListener('change', () => { + this.filterLogs(); + }); + + // 刷新按钮事件 + const refreshBtn = this.shadowRoot.querySelector('#refreshBtn'); + refreshBtn.addEventListener('click', () => { + this.loadLogs(); + }); + + // 导出按钮事件 + const exportBtn = this.shadowRoot.querySelector('#exportBtn'); + exportBtn.addEventListener('click', () => { + this.exportLogs(); + }); + + // 分页按钮事件 + const prevPage = this.shadowRoot.querySelector('#prevPage'); + const nextPage = this.shadowRoot.querySelector('#nextPage'); + prevPage.addEventListener('click', () => { + this.changePage(-1); + }); + nextPage.addEventListener('click', () => { + this.changePage(1); + }); + } + + async loadLogs() { + try { + // 这里应该调用后端API获取日志数据 + // 示例数据 + const logs = [ + { + timestamp: '2024-03-20 10:00:00', + level: 'info', + source: '系统', + content: '系统启动成功' + }, + { + timestamp: '2024-03-20 10:01:00', + level: 'warning', + source: '数据库', + content: '数据库连接池接近最大连接数' + }, + { + timestamp: '2024-03-20 10:02:00', + level: 'error', + source: 'API', + content: 'API请求超时' + } + ]; + + this.renderLogs(logs); + } catch (error) { + console.error('加载日志失败:', error); + } + } + + renderLogs(logs) { + const logList = this.shadowRoot.querySelector('#logList'); + logList.innerHTML = logs.map(log => ` +
+
${log.timestamp}
+
${this.getLevelText(log.level)}
+
${log.source}
+
${log.content}
+
+ `).join(''); + } + + getLevelText(level) { + const levelMap = { + 'info': '信息', + 'warning': '警告', + 'error': '错误', + 'debug': '调试' + }; + return levelMap[level] || level; + } + + filterLogs() { + const searchText = this.shadowRoot.querySelector('.search-box input').value.toLowerCase(); + const levelFilter = this.shadowRoot.querySelector('#levelFilter').value; + const timeFilter = this.shadowRoot.querySelector('#timeFilter').value; + + // 这里应该根据筛选条件调用后端API获取过滤后的日志 + this.loadLogs(); + } + + exportLogs() { + // 实现日志导出功能 + console.log('导出日志'); + } + + changePage(delta) { + // 实现分页功能 + console.log('切换页面:', delta); + } + + debounce(func, wait) { + let timeout; + return function executedFunction(...args) { + const later = () => { + clearTimeout(timeout); + func(...args); + }; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + }; + } +} + +customElements.define('system-log', SystemLog); \ No newline at end of file diff --git a/XNSimHtml/main.html b/XNSimHtml/main.html index 1cde2a5..c3b0e57 100644 --- a/XNSimHtml/main.html +++ b/XNSimHtml/main.html @@ -17,6 +17,7 @@ + @@ -323,6 +324,14 @@ return; } + // 处理系统日志标签页 + if (title === '系统日志') { + const id = 'system-log'; + tabsContainer.createTab(id, title, icon, parentText, parentTool); + contentArea.loadContent(id); + return; + } + // 处理帮助标签页 if (title === '帮助') { const id = 'help';