2021-12-08 15:10:56 +08:00
# include "AccountTableForm.h"
2022-06-14 18:04:44 +08:00
2021-12-08 15:10:56 +08:00
# include <QVBoxLayout>
2021-12-10 10:17:45 +08:00
# include <QToolButton>
2021-12-08 15:10:56 +08:00
# include <QHeaderView>
2022-06-14 18:04:44 +08:00
# include <QSqlRecord>
2021-12-23 10:09:35 +08:00
# include "components/AccountRoleComboDelegate.h"
2022-07-20 16:45:33 +08:00
# include "dialogs/DialogManager.h"
2021-12-08 15:10:56 +08:00
# include "db/SQLHelper.h"
2021-12-10 10:17:45 +08:00
# include "models/User.h"
2022-06-07 15:19:14 +08:00
# include "components/SlideTableView.h"
2021-12-28 18:23:02 +08:00
# include "event/EventCenter.h"
2024-07-29 17:46:31 +08:00
# include "log/LogManager.h"
2022-06-14 18:04:44 +08:00
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 ) ;
2022-07-14 16:59:30 +08:00
cmdPanel - > setObjectName ( " commandWidget " ) ;
2022-06-14 18:04:44 +08:00
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 ) ;
2022-07-14 16:59:30 +08:00
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 ) ;
2022-06-14 18:04:44 +08:00
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 , [ = ] ( ) {
2022-07-20 16:45:33 +08:00
if ( DialogManager : : Default ( ) - > requestAddAccount ( model ) = = QDialog : : Accepted )
2022-06-14 18:04:44 +08:00
{
table - > selectRow ( 0 ) ;
2024-07-22 18:16:52 +08:00
model - > selectRow ( 0 ) ;
mCurrentRow = 0 ;
2022-06-14 18:04:44 +08:00
}
2022-07-20 16:45:33 +08:00
} ) ;
2022-06-14 18:04:44 +08:00
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 ) ;
}
2022-07-20 16:45:33 +08:00
int ret = 0 ;
if ( map [ " UserID " ] = = User : : Current ( ) - > getUserID ( ) ) {
ret = DialogManager : : Default ( ) - > requestEditSelfAccount ( ) ;
}
else {
ret = DialogManager : : Default ( ) - > requestEditAdminAccount ( map ) ;
}
if ( ret = = QDialog : : Accepted )
2022-06-14 18:04:44 +08:00
{
model - > select ( ) ;
table - > selectRow ( mCurrentRow ) ;
}
2022-07-20 16:45:33 +08:00
} ) ;
2022-06-14 18:04:44 +08:00
connect ( btnDelete , & QToolButton : : clicked , [ = ] ( ) {
if ( mCurrentRow < 0 )
{
return ;
}
QString id = model - > data ( model - > index ( mCurrentRow , 1 ) ) . toString ( ) ;
2024-06-18 16:46:43 +08:00
if ( User : : Current ( ) - > getUserCode ( ) = = id )
2022-06-14 18:04:44 +08:00
{
//尝试删除自己
2022-08-10 15:28:59 +08:00
DialogManager : : Default ( ) - > requestAlertMessage ( tr ( " Can't delete current log in account! " ) , DialogButtonMode : : OkOnly ) ;
2022-06-14 18:04:44 +08:00
return ;
}
2024-07-19 16:09:19 +08:00
if ( DialogManager : : Default ( ) - > requestAlertMessage ( QString ( tr ( " Delete account with ID: \" %1 \" ! " ) ) , id , DialogButtonMode : : OkAndCancel ) ! = QDialog : : Accepted ) return ;
2022-06-14 18:04:44 +08:00
model - > removeRow ( mCurrentRow ) ;
model - > select ( ) ;
2024-06-07 16:57:16 +08:00
mCurrentRow = model - > rowCount ( ) > mCurrentRow + 1 ? mCurrentRow : mCurrentRow - 1 ;
table - > selectRow ( mCurrentRow ) ;
LOG_USER_OPERATION ( " Delete Account, ID: " + id ) ;
2022-06-14 18:04:44 +08:00
} ) ;
2021-12-10 10:17:45 +08:00
2022-06-14 18:04:44 +08:00
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 " ) ) ;
2021-12-10 10:17:45 +08:00
2022-06-14 18:04:44 +08:00
btnAdd - > setText ( tr ( " Add " ) ) ;
btnEdit - > setText ( tr ( " Edit " ) ) ;
btnDelete - > setText ( tr ( " Delete " ) ) ;
} ) ;
2024-07-17 17:23:02 +08:00
connect ( EventCenter : : Default ( ) , & EventCenter : : CurrentUserInfoChanged , [ model ] ( )
{
model - > select ( ) ;
} ) ;
2021-12-08 15:10:56 +08:00
}
2022-06-14 18:04:44 +08:00
AccountTableForm : : ~ AccountTableForm ( )
{
2021-12-08 15:10:56 +08:00
}