更新使用手册;修复滚动条问题;新增表映射关系查询

This commit is contained in:
taocong
2026-10-05 10:49:50 +08:00
committed by taocong45644
parent e7030a6dbf
commit 84009be804
26 changed files with 2089 additions and 37 deletions
@@ -0,0 +1,57 @@
#ifndef TABLESEARCHPAGE_H
#define TABLESEARCHPAGE_H
#include <QWidget>
#include <QStandardItemModel>
#include "components/elasearchedit.h"
#include "ElaTableView.h"
class QLabel;
// UF20 & 内存表映射查询页(原"表查询"): 检索 UF20(2.0) 表与内存表(UFT3)之间的映射关系。
// 结果四列: UF20表名 / UF20表中文名(uf20_cache.db 按 key 取) /
// 内存表名(table_mapping.json 映射的 value) / 内存表中文名(uft3_cache.db 按 value 取)。
// 输入 UF20 表名或内存表名均可检索, 支持精确/模糊(ElaSearchEdit 内置开关)两种模式;
// 无映射命中的表仅展示数据库侧字段, 映射相关列置空。
// 双击有完整映射的记录行可添加到「数据映射 → 表替换」页(经 MainWindow 接线, 追加后自动落盘)。
// 不继承 FunctionSearchPageBase: 结果结构为 4 列表信息, 与 FunctionInfo(3 列函数信息)
// 结构不同, 数据源与交互(无批量加入)亦不同, 强行复用基类不值
class TableSearchPage : public QWidget
{
Q_OBJECT
public:
explicit TableSearchPage(QWidget *parent = nullptr);
// 双击添加的回调结果(经 MainWindow 接线后回传): error 为空即添加成功, 非空为原因
void onMappingAddResult(const QString& error);
signals:
// 双击有完整映射的记录行 → 请求把 (UF20表名, 内存表名) 添加到表替换页
void requestAddMapping(const QString& uf20Name, const QString& memName);
private slots:
void onSearch();
void onExactMatchToggled(bool checked);
// 双击记录行: 有完整映射发出 requestAddMapping, 单侧行仅 tip 提示
void onDoubleClicked(const QModelIndex& index);
// tip 标签主题感知(Ela 原生控件颜色不随主题切换, 需手动跟随)
void updateTipStyle();
private:
void initUI();
// 读取表映射文件(Constants::tableMappingJson(), 即 bin/uf2touft3/config/table_mapping.json,
// 顶层键 tableCompareUf2_Uf3: key=UF20表名, value=内存表名; value 可为字符串(一对一)
// 或字符串数组(一对多, 拆为多条映射对))。
// readOk 出参: 文件读取/解析成功为 true(映射本身可为空), 失败为 false;
// errorOut 出参: 失败时带回可展示的错误原因(含行号, 常见手误如末项尾随逗号)
QList<QPair<QString, QString>> loadTableMapping(bool* readOk,
QString* errorOut = nullptr) const;
ElaSearchEdit *m_searchEdit;
ElaTableView *m_resultTable;
QStandardItemModel *m_tableModel;
QLabel *m_tipLabel;
bool m_exactMatch;
};
#endif