This commit is contained in:
孙小云 2026-02-04 17:41:39 +08:00
parent ddd85bc176
commit d19de44668
1 changed files with 96 additions and 0 deletions

View File

@ -1667,6 +1667,34 @@ class DeploymentServer:
border-radius: 3px;
margin-bottom: 20px;
}}
.history-container {{
margin-top: 15px;
max-height: 200px;
overflow-y: auto;
border: 1px solid #ddd;
border-radius: 3px;
background-color: #fafafa;
}}
.history-item {{
padding: 10px;
border-bottom: 1px solid #eee;
cursor: pointer;
transition: background-color 0.2s;
font-family: 'Courier New', monospace;
font-size: 13px;
}}
.history-item:hover {{
background-color: #e3f2fd;
}}
.history-item:last-child {{
border-bottom: none;
}}
.history-empty {{
padding: 20px;
text-align: center;
color: #999;
font-size: 14px;
}}
</style>
</head>
<body>
@ -1706,6 +1734,17 @@ class DeploymentServer:
<label for="sqlEditor"><strong>SQL 语句</strong></label>
<textarea id="sqlEditor" class="sql-editor" placeholder="输入 SQL 查询语句例如SELECT * FROM table_name LIMIT 10"></textarea>
</div>
<!-- SQL 历史记录 -->
<div id="historyPanel" style="display: none;">
<div style="margin-top: 10px; margin-bottom: 5px;">
<strong>📜 历史查询最近10条</strong>
</div>
<div id="historyContainer" class="history-container">
<div class="history-empty">暂无历史记录</div>
</div>
</div>
<div style="margin-top: 10px;">
<button class="btn btn-success" onclick="executeSQL()"> 执行查询</button>
<button class="btn" onclick="clearSQL()">🗑 清空</button>
@ -2008,6 +2047,9 @@ class DeploymentServer:
row_dict[col] = values[i] if i < len(values) else None
data_rows.append(row_dict)
# 保存SQL历史记录
save_sql_history(database, sql)
return jsonify({
'success': True,
'data': data_rows,
@ -2017,6 +2059,19 @@ class DeploymentServer:
except Exception as e:
return jsonify({'success': False, 'error': str(e)})
@self.app.route('/api/database/history')
def get_sql_history():
"""获取SQL历史记录API"""
try:
db_name = request.args.get('db')
if not db_name:
return jsonify({'success': False, 'error': '缺少数据库名称'})
history = load_sql_history(db_name)
return jsonify({'success': True, 'history': history})
except Exception as e:
return jsonify({'success': False, 'error': str(e)})
@self.app.route('/<project_name>')
def deploy_project(project_name):
"""触发项目部署"""
@ -2047,6 +2102,47 @@ class DeploymentServer:
self.app.run(host='0.0.0.0', port=self.port, debug=False, use_reloader=False)
def save_sql_history(database, sql):
"""保存SQL历史记录到文件"""
try:
history_dir = Path('.devops/sql_history')
history_dir.mkdir(parents=True, exist_ok=True)
history_file = history_dir / f'{database}.json'
# 读取现有历史记录
history = []
if history_file.exists():
with open(history_file, 'r', encoding='utf-8') as f:
history = json.load(f)
# 添加新记录(去重)
if sql not in history:
history.insert(0, sql) # 插入到开头
# 只保留最近10条
history = history[:10]
# 保存到文件
with open(history_file, 'w', encoding='utf-8') as f:
json.dump(history, f, ensure_ascii=False, indent=2)
except Exception as e:
Logger.warning(f"保存SQL历史记录失败: {e}")
def load_sql_history(database):
"""从文件加载SQL历史记录"""
try:
history_file = Path('.devops/sql_history') / f'{database}.json'
if history_file.exists():
with open(history_file, 'r', encoding='utf-8') as f:
return json.load(f)
return []
except Exception as e:
Logger.warning(f"加载SQL历史记录失败: {e}")
return []
def main():
"""主函数"""
import argparse