From 8455d6522c0b5bea30829672db3dcc811cfe54e8 Mon Sep 17 00:00:00 2001 From: duanshengchao <519970194@qq.com> Date: Wed, 2 Apr 2025 15:57:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=B1=9E=E6=80=A7=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E6=97=B6=E2=80=98=E5=8F=96=E6=B6=88=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E2=80=99=E5=92=8C=E5=B1=9E=E6=80=A7=E9=A1=B5=E9=9D=A2=E7=9A=84?= =?UTF-8?q?=E5=88=B7=E6=96=B0=E6=93=8D=E4=BD=9C=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/attributeTableModel.h | 1 + include/dbBrowser.h | 2 ++ include/dbStructureNode.h | 3 ++- include/global.h | 9 +++++++++ include/sqlQueryExecutor.h | 3 ++- source/attributeTableModel.cpp | 23 +++++++++++++++-------- source/dbBrowser.cpp | 28 ++++++++++++++++++++++++++++ source/dbStructureModel.cpp | 16 ++++++++++++---- source/sqlQueryExecutor.cpp | 32 ++++++++++++++++++++++++++++---- 9 files changed, 99 insertions(+), 18 deletions(-) diff --git a/include/attributeTableModel.h b/include/attributeTableModel.h index 7103598..62fd405 100644 --- a/include/attributeTableModel.h +++ b/include/attributeTableModel.h @@ -63,6 +63,7 @@ public: void insertRecord(int); void removeRecord(int); void submitChanges(); //提交更改(增、删、改) + void cancleChanges(); //取消修改 //展示列控制 //void setVisibleColumns(const QStringList& columns); diff --git a/include/dbBrowser.h b/include/dbBrowser.h index 2b63f42..c218b05 100644 --- a/include/dbBrowser.h +++ b/include/dbBrowser.h @@ -33,6 +33,8 @@ private slots: void onBtnClicked_addRecord(); void onBtnClicked_removeRecord(); void onBtnClicked_submitChanges(); + void onBtnClicked_cancleChanges(); + void onBtnClicked_refreshData(); private: int tabIndex(const QString&); diff --git a/include/dbStructureNode.h b/include/dbStructureNode.h index aceaa0b..247911b 100644 --- a/include/dbStructureNode.h +++ b/include/dbStructureNode.h @@ -23,7 +23,8 @@ enum NodeStatus //节点状态(主要是ConnectionNode) enum NodeDataRole { - ID = 1 + ID = 1, + Type }; class DBStructureNode diff --git a/include/global.h b/include/global.h index ca15509..3303e14 100644 --- a/include/global.h +++ b/include/global.h @@ -46,6 +46,15 @@ struct AttributeGroup QString remark; bool isPublic; + AttributeGroup() + { + id = -1; + name = ""; + type = ""; + remark = ""; + isPublic = false; + } + //利用移动语义优化的构造函数(不定义也可以,QString实际上实现了隐式共享) AttributeGroup(int id, QString name, QString type, QString remark, bool isPublic) : id(id), diff --git a/include/sqlQueryExecutor.h b/include/sqlQueryExecutor.h index abdfb28..8847796 100644 --- a/include/sqlQueryExecutor.h +++ b/include/sqlQueryExecutor.h @@ -25,7 +25,8 @@ public: //基于具体业务的查询接口-对外调用 //属性组相关 const QVector getAttributeGroup(const QString&); - const QString getArributeGropuName(const QString&, int); + const QString getAttributeGroupName(const QString&, int); + const AttributeGroup getAttributeGroupData(const QString&, int); //模型相关 const QVector getModels(const QString&); bool addModel(const QString&, Model&); diff --git a/source/attributeTableModel.cpp b/source/attributeTableModel.cpp index 084cc98..e8361e4 100644 --- a/source/attributeTableModel.cpp +++ b/source/attributeTableModel.cpp @@ -363,16 +363,12 @@ void AttributeTableModel::refresh() if(!m_modifiedRows.isEmpty()) { emit showMessage(type_question, QString::fromWCharArray(L"提示"), - QString::fromWCharArray(L"当前有编辑或修改数据未提交,是否进行提交?")); - if(g_msgDlgBtn == btn_Yes) - { - - } - else - m_modifiedRows.clear(); - + QString::fromWCharArray(L"有编辑数据还未提交,确认刷新放弃提交吗?")); + if(g_msgDlgBtn == btn_No) + return; } + m_modifiedRows.clear(); loadPageData(); updateTotalCount(); emit syncDataStatus(m_modifiedRows.isEmpty(), m_paginationInfo); @@ -508,6 +504,17 @@ void AttributeTableModel::submitChanges() refresh(); } +void AttributeTableModel::cancleChanges() +{ + if(m_modifiedRows.isEmpty()) + return; + + m_modifiedRows.clear(); + loadPageData(); + updateTotalCount(); + emit syncDataStatus(m_modifiedRows.isEmpty(), m_paginationInfo); +} + void AttributeTableModel::triggerSyncSignal() { emit syncDataStatus(m_modifiedRows.isEmpty(), m_paginationInfo); diff --git a/source/dbBrowser.cpp b/source/dbBrowser.cpp index b652a77..0d95dc0 100644 --- a/source/dbBrowser.cpp +++ b/source/dbBrowser.cpp @@ -17,6 +17,8 @@ DatabaseBrowser::DatabaseBrowser(QWidget *parent) connect(ui->btnAdd, &QPushButton::clicked, this, &DatabaseBrowser::onBtnClicked_addRecord); connect(ui->btnRemove, &QPushButton::clicked, this, &DatabaseBrowser::onBtnClicked_removeRecord); connect(ui->btnSave, &QPushButton::clicked, this, &DatabaseBrowser::onBtnClicked_submitChanges); + connect(ui->btnCancle, &QPushButton::clicked, this, &DatabaseBrowser::onBtnClicked_cancleChanges); + connect(ui->btnRefresh, &QPushButton::clicked, this, &DatabaseBrowser::onBtnClicked_refreshData); } DatabaseBrowser::~DatabaseBrowser() @@ -174,6 +176,32 @@ void DatabaseBrowser::onBtnClicked_submitChanges() } } +void DatabaseBrowser::onBtnClicked_cancleChanges() +{ + QWidget* widget = ui->tabWidget->currentWidget(); + AttributeView* attributeView = qobject_cast(widget); + if(attributeView) + { + QTableView* view = attributeView->view(); + AttributeTableModel* model = attributeView->model(); + if(view && model) + model->cancleChanges(); + } +} + +void DatabaseBrowser::onBtnClicked_refreshData() +{ + QWidget* widget = ui->tabWidget->currentWidget(); + AttributeView* attributeView = qobject_cast(widget); + if(attributeView) + { + QTableView* view = attributeView->view(); + AttributeTableModel* model = attributeView->model(); + if(view && model) + model->refresh(); + } +} + void DatabaseBrowser::onSyncDataStatus(bool hasModifiedData, const PaginationInfo& paginationInfo) { ui->btnSave->setEnabled(!hasModifiedData); diff --git a/source/dbStructureModel.cpp b/source/dbStructureModel.cpp index b446748..e75e06f 100644 --- a/source/dbStructureModel.cpp +++ b/source/dbStructureModel.cpp @@ -154,9 +154,13 @@ void DBStructureModel::addDataModel(const QString& connection, Model& model) modelNode->setData(Qt::UserRole + NodeDataRole::ID, model.id); for(int groupID : model.groups) { - QString groupName = SqlQueryExecutor::instance().getArributeGropuName(connection, groupID); - DBStructureNode* groupNode = new DBStructureNode(GroupNode, groupName, modelNode); + //QString groupName = SqlQueryExecutor::instance().getAttributeGroupName(connection, groupID); + AttributeGroup group = SqlQueryExecutor::instance().getAttributeGroupData(connection, groupID); + if(group.name.isEmpty()) + continue; + DBStructureNode* groupNode = new DBStructureNode(GroupNode, group.name, modelNode); groupNode->setData(Qt::UserRole + NodeDataRole::ID, groupID); + groupNode->setData(Qt::UserRole + NodeDataRole::Type, group.isPublic); modelNode->appendChild(groupNode); } connNode->appendChild(modelNode); @@ -246,9 +250,13 @@ void DBStructureModel::refreshStructure_Connection(const QString& connection) modelNode->setData(Qt::UserRole + NodeDataRole::ID, model.id); for(int groupID : model.groups) { - QString groupName = SqlQueryExecutor::instance().getArributeGropuName(connection, groupID); - DBStructureNode* groupNode = new DBStructureNode(GroupNode, groupName, modelNode); + //QString groupName = SqlQueryExecutor::instance().getAttributeGroupName(connection, groupID); + AttributeGroup group = SqlQueryExecutor::instance().getAttributeGroupData(connection, groupID); + if(group.name.isEmpty()) + continue; + DBStructureNode* groupNode = new DBStructureNode(GroupNode, group.name, modelNode); groupNode->setData(Qt::UserRole + NodeDataRole::ID, groupID); + groupNode->setData(Qt::UserRole + NodeDataRole::Type, group.isPublic); modelNode->appendChild(groupNode); } connNode->appendChild(modelNode); diff --git a/source/sqlQueryExecutor.cpp b/source/sqlQueryExecutor.cpp index d5f1d37..1b08c15 100644 --- a/source/sqlQueryExecutor.cpp +++ b/source/sqlQueryExecutor.cpp @@ -382,9 +382,9 @@ const QVector SqlQueryExecutor::getAttributeGroup(const QString& return groupList; } -const QString SqlQueryExecutor::getArributeGropuName(const QString& connectionName, int groupID) +const QString SqlQueryExecutor::getAttributeGroupName(const QString& connectionName, int groupID) { - QString name; + QString name = ""; QString strSQL = "SELECT group_name FROM basic.attribute_group WHERE id = :id"; QVariantHash params; params.insert(":id", groupID); @@ -397,12 +397,37 @@ const QString SqlQueryExecutor::getArributeGropuName(const QString& connectionNa catch (const DatabaseException& e) { LOG_ERROR("SQL", QString::fromWCharArray(L"获取属性组名称失败,id:%1").arg(QString::number(groupID))); - name = "groupID-" + QString::number(groupID); } return name; } +const AttributeGroup SqlQueryExecutor::getAttributeGroupData(const QString& connectionName, int groupID) +{ + AttributeGroup group; + QString strSQL = "SELECT group_type, group_name, remark, is_public FROM basic.attribute_group WHERE id = :id"; + QVariantHash params; + params.insert(":id", groupID); + try + { + QSqlQuery query = executeSQL(connectionName, strSQL, params); + if(query.next()) + { + QString type = query.value(0).toString(); + QString name = query.value(1).toString(); + QString remark = query.value(2).toString(); + bool isPublic = query.value(3).toBool(); + return AttributeGroup(groupID,name,type,remark,isPublic); + } + } + catch (const DatabaseException& e) + { + LOG_ERROR("SQL", QString::fromWCharArray(L"获取属性组信息失败,id:%1").arg(QString::number(groupID))); + } + + return group; +} + int SqlQueryExecutor::getAttributeCount(const QString& connectionName, int modelID, int groupID) { int count = 0; @@ -416,7 +441,6 @@ int SqlQueryExecutor::getAttributeCount(const QString& connectionName, int model catch (const DatabaseException& e) { LOG_ERROR("SQL", QString::fromWCharArray(L"获取属性数量失败")); - return 0; } return count;