58 lines
2.6 KiB
C++
58 lines
2.6 KiB
C++
#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
|