160 lines
5.2 KiB
C++
160 lines
5.2 KiB
C++
#include "AccountTableForm.h"
|
|
|
|
#include <QVBoxLayout>
|
|
#include <QToolButton>
|
|
#include <QHeaderView>
|
|
#include <QSqlRecord>
|
|
|
|
#include "components/AccountRoleComboDelegate.h"
|
|
#include "dialogs/DialogManager.h"
|
|
#include "db/SQLHelper.h"
|
|
#include "models/User.h"
|
|
#include "components/SlideTableView.h"
|
|
#include "event/EventCenter.h"
|
|
#include "log/LogManager.h"
|
|
|
|
AccountTableForm::AccountTableForm(QWidget* aParent)
|
|
: QWidget(aParent)
|
|
, mLayout(new QVBoxLayout(this))
|
|
, mCurrentRow(-1)
|
|
{
|
|
mLayout->setMargin(0);
|
|
QTableView* table = new SlideTableView(this);
|
|
mLayout->addWidget(table);
|
|
|
|
// TableView for patient
|
|
table->setAlternatingRowColors(true);
|
|
table->setSelectionMode(QAbstractItemView::SingleSelection);
|
|
table->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
|
table->setSelectionBehavior(QAbstractItemView::SelectRows);
|
|
table->verticalHeader()->setDefaultSectionSize(38);
|
|
table->horizontalHeader()->setStretchLastSection(true);
|
|
|
|
//data from SQLITE
|
|
auto model = SQLHelper::getTable("Account");
|
|
model->sort(5, Qt::DescendingOrder);
|
|
model->select();
|
|
model->setHeaderData(1, Qt::Horizontal, tr("ID"));
|
|
model->setHeaderData(2, Qt::Horizontal, tr("Name"));
|
|
model->setHeaderData(4, Qt::Horizontal, tr("Role"));
|
|
model->setHeaderData(5, Qt::Horizontal, tr("Comment"));
|
|
table->setModel((QAbstractItemModel*)model);
|
|
table->hideColumn(0);
|
|
table->hideColumn(3);
|
|
AccountRoleComboDelegate* comboDelegate = new AccountRoleComboDelegate(this);
|
|
table->setItemDelegateForColumn(4, comboDelegate);
|
|
table->show();
|
|
|
|
// table->setSortingEnabled(true);
|
|
table->setColumnWidth(1, 250);
|
|
table->setColumnWidth(2, 250);
|
|
table->setColumnWidth(4, 150);
|
|
|
|
QWidget* cmdPanel = new QWidget(this);
|
|
cmdPanel->setObjectName("commandWidget");
|
|
QHBoxLayout* cmdLayout = new QHBoxLayout(cmdPanel);
|
|
|
|
cmdLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding));
|
|
QWidget* spacerLine = new QWidget(this);
|
|
spacerLine->setFixedWidth(2);
|
|
spacerLine->setObjectName("verSpaceLine");
|
|
cmdLayout->addWidget(spacerLine);
|
|
auto btnAdd = new QToolButton(this);
|
|
btnAdd->setObjectName("btnAdd");
|
|
cmdLayout->addWidget(btnAdd);
|
|
auto btnEdit = new QToolButton(this);
|
|
btnEdit->setObjectName("btnEdit");
|
|
cmdLayout->addWidget(btnEdit);
|
|
auto btnDelete = new QToolButton(this);
|
|
btnDelete->setObjectName("btnDelete");
|
|
cmdLayout->addWidget(btnDelete);
|
|
btnAdd->setText(tr("Add"));
|
|
btnEdit->setText(tr("Edit"));
|
|
btnDelete->setText(tr("Delete"));
|
|
mLayout->addWidget(cmdPanel);
|
|
|
|
//index change
|
|
connect(table, &QTableView::clicked, [=](const QModelIndex& aModelIndex) {
|
|
if (mCurrentRow != aModelIndex.row())
|
|
{
|
|
mCurrentRow = aModelIndex.row();
|
|
}
|
|
});
|
|
|
|
//add new account
|
|
connect(btnAdd, &QToolButton::clicked, [=]() {
|
|
if (DialogManager::Default()->requestAddAccount(model) == QDialog::Accepted)
|
|
{
|
|
table->selectRow(0);
|
|
model->selectRow(0);
|
|
mCurrentRow = 0;
|
|
}
|
|
});
|
|
|
|
connect(btnEdit, &QToolButton::clicked, [=]() {
|
|
if (mCurrentRow < 0)
|
|
{
|
|
return;
|
|
}
|
|
QMap<QString, QVariant> map;
|
|
auto record = model->record(mCurrentRow);
|
|
for (int i = 0; i < model->columnCount(); i++)
|
|
{
|
|
map[record.fieldName(i)] = record.value(i);
|
|
}
|
|
int ret =0;
|
|
if (map["UserID"] == User::Current()->getUserID()){
|
|
ret = DialogManager::Default()->requestEditSelfAccount();
|
|
}
|
|
else{
|
|
ret = DialogManager::Default()->requestEditAdminAccount(map);
|
|
}
|
|
if (ret == QDialog::Accepted)
|
|
{
|
|
model->select();
|
|
table->selectRow(mCurrentRow);
|
|
}
|
|
});
|
|
|
|
connect(btnDelete, &QToolButton::clicked, [=]() {
|
|
if (mCurrentRow < 0)
|
|
{
|
|
return;
|
|
}
|
|
QString id = model->data(model->index(mCurrentRow, 1)).toString();
|
|
if (User::Current()->getUserCode() == id)
|
|
{
|
|
//尝试删除自己
|
|
DialogManager::Default()->requestAlertMessage(tr("Can't delete current log in account!"), DialogButtonMode::OkOnly);
|
|
return;
|
|
}
|
|
|
|
if ( DialogManager::Default()->requestAlertMessage(QString(tr("Delete account with ID:\"%1\"!")), id, DialogButtonMode::OkAndCancel) != QDialog::Accepted) return;
|
|
model->removeRow(mCurrentRow);
|
|
model->select();
|
|
mCurrentRow = model->rowCount() > mCurrentRow + 1 ? mCurrentRow : mCurrentRow - 1;
|
|
table->selectRow(mCurrentRow);
|
|
LOG_USER_OPERATION("Delete Account, ID:" + id);
|
|
});
|
|
|
|
connect(EventCenter::Default(), &EventCenter::ReloadLanguage, [=]() {
|
|
model->setHeaderData(2, Qt::Horizontal, tr("Name"));
|
|
model->setHeaderData(4, Qt::Horizontal, tr("Role"));
|
|
model->setHeaderData(5, Qt::Horizontal, tr("Comment"));
|
|
|
|
btnAdd->setText(tr("Add"));
|
|
btnEdit->setText(tr("Edit"));
|
|
btnDelete->setText(tr("Delete"));
|
|
});
|
|
|
|
connect(EventCenter::Default(), &EventCenter::CurrentUserInfoChanged, [model]()
|
|
{
|
|
model->select();
|
|
});
|
|
}
|
|
|
|
AccountTableForm::~AccountTableForm()
|
|
{
|
|
|
|
}
|