2025-10-09 18:37:18 +08:00
# include " QWSysmgr.h "
2025-11-19 15:07:51 +08:00
# include "DialogPop.h"
# include "database/DAO.h"
2025-10-09 18:37:18 +08:00
2025-11-19 15:07:51 +08:00
class TableInfo ;
static map < string , TableInfo > s_mapInfo ;
2025-10-09 18:37:18 +08:00
2025-11-19 15:07:51 +08:00
class TableInfo
2025-10-09 18:37:18 +08:00
{
public :
2025-11-19 15:07:51 +08:00
static void initialize ( )
{
{
auto & info = s_mapInfo [ " 用户管理 " ] ;
info . addHead ( " user_id " , " ID " , 160 ) ;
info . addHead ( " account " , " 用户名 " , 0 ) ;
info . addHead ( " name " , " 姓名 " , 200 ) ;
info . addHead ( " gender " , " 性别 " , 0 ) ;
info . addHead ( " age " , " 年龄 " , 0 ) ;
info . addHead ( " phone " , " 联系方式 " , 0 ) ;
info . addHead ( " role_name " , " 角色 " , 200 ) ;
info . addHead ( " " , " 操作 " , 0 ) ;
info . sqlQuery = " SELECT u.*, ur.role_id, r.name role_name FROM USER u LEFT JOIN user_role ur ON u.user_id=ur.user_id LEFT JOIN ROLE r ON r.role_id=ur.role_id; " ;
}
{
auto & info = s_mapInfo [ " 权限管理 " ] ;
info . addHead ( " permission_id " , " ID " , 60 ) ;
info . addHead ( " route " , " 路由 " , 160 ) ;
info . addHead ( " name " , " 权限名称 " , 0 ) ;
info . addHead ( " describe " , " 描述 " , 540 ) ;
info . addHead ( " is_open " , " 是否启用 " , 0 ) ;
info . addHead ( " " , " 操作 " , 0 ) ;
info . sqlQuery = " SELECT * FROM permission; " ;
}
{
auto & info = s_mapInfo [ " 角色管理 " ] ;
info . addHead ( " role_id " , " ID " , 60 ) ;
info . addHead ( " name " , " 角色名称 " , 200 ) ;
info . addHead ( " describe " , " 描述 " , 600 ) ;
info . addHead ( " is_open " , " 是否启用 " , 0 ) ;
info . addHead ( " " , " 操作 " , 0 ) ;
info . sqlQuery = " SELECT * FROM role; " ;
}
{
auto & info = s_mapInfo [ " 场站管理 " ] ;
info . addHead ( " station_id " , " ID " , 60 ) ;
info . addHead ( " name " , " 场站名称 " , 160 ) ;
info . addHead ( " code " , " 编号 " , 60 ) ;
info . addHead ( " address " , " 地址 " , 280 ) ;
info . addHead ( " lon " , " 经度 " , 0 ) ;
info . addHead ( " lat " , " 维度 " , 0 ) ;
info . addHead ( " attr " , " 参数 " , 200 ) ;
info . addHead ( " " , " 操作 " , 0 ) ;
info . sqlQuery = " SELECT * FROM station; " ;
}
{
auto & info = s_mapInfo [ " 设备管理 " ] ;
info . addHead ( " device_id " , " ID " , 60 ) ;
info . addHead ( " station_name " , " 所属场站 " , 200 ) ;
info . addHead ( " type_name " , " 设备类型 " , 200 ) ;
info . addHead ( " name " , " 设备名称 " , 340 ) ;
info . addHead ( " code " , " 编号 " , 60 ) ;
info . addHead ( " is_open " , " 是否启用 " , 0 ) ;
info . addHead ( " " , " 操作 " , 0 ) ;
info . sqlQuery = " SELECT d.*, s.name station_name, ddt.name type_name FROM "
" device d LEFT JOIN station s ON d.station_id=s.station_id "
" LEFT JOIN def_device_type ddt ON ddt.device_type_id = d.`type`; " ;
}
{
auto & info = s_mapInfo [ " 策略管理 " ] ;
info . addHead ( " policy_id " , " ID " , 0 ) ;
info . addHead ( " type_name " , " 策略类型 " , 160 ) ;
info . addHead ( " name " , " 策略名称 " , 0 ) ;
info . addHead ( " describe " , " 描述 " , 200 ) ;
info . addHead ( " value " , " 参数 " , 400 ) ;
info . addHead ( " " , " 操作 " , 0 ) ;
info . sqlQuery = " SELECT p.*, dpt.name type_name FROM policy p LEFT JOIN def_policy_type dpt ON dpt.policy_type_id=p.`type`; " ;
}
{
auto & info = s_mapInfo [ " 日志管理 " ] ;
info . addHead ( " " , " ID " , 0 ) ;
info . addHead ( " " , " 日志类型 " , 0 ) ;
info . addHead ( " " , " 内容 " , 0 ) ;
info . addHead ( " " , " 状态 " , 0 ) ;
info . addHead ( " " , " 操作 " , 0 ) ;
}
{
auto & info = s_mapInfo [ " 告警管理 " ] ;
info . addHead ( " " , " ID " , 0 ) ;
info . addHead ( " " , " 告警类型 " , 0 ) ;
info . addHead ( " " , " 内容 " , 0 ) ;
info . addHead ( " " , " 状态 " , 0 ) ;
info . addHead ( " " , " 操作 " , 0 ) ;
}
} ;
static TableInfo * getInfo ( string name )
{
auto iter = s_mapInfo . find ( name ) ;
return iter ! = s_mapInfo . end ( ) ? & ( iter - > second ) : nullptr ;
}
2025-10-09 18:37:18 +08:00
2025-11-19 15:07:51 +08:00
struct HEAD
{
string key ;
string title ;
int width { 0 } ;
} ;
TableInfo ( ) { }
void addHead ( string k , string t , int w )
{
HEAD head ;
head . key = k ;
head . title = t ;
head . width = w ;
vecHead . push_back ( head ) ;
}
string name ;
string sqlQuery ;
vector < HEAD > vecHead ;
2025-10-09 18:37:18 +08:00
} ;
2025-11-19 15:07:51 +08:00
class DialogPopUser : public DialogPop
2025-10-09 18:37:18 +08:00
{
2025-11-19 15:07:51 +08:00
public :
DialogPopUser ( QWidget * parent , const Fields & rowdata , string oper = " " ) : DialogPop ( parent , rowdata , oper )
{
this - > setFixedSize ( 500 , 60 + 140 + 40 * 6 ) ;
this - > setWindowTitle ( ( " 用户管理: " + oper ) . c_str ( ) ) ;
this - > addParamLine ( " user_id " , " ID " , true ) ;
this - > addParamLine ( " account " , " 用户名 " ) ;
this - > addParamLine ( " name " , " 姓名 " ) ;
this - > addParamCombox ( " gender " , " 性别 " , { { " 1 " , " 男 " } , { " 0 " , " 女 " } } ) ;
this - > addParamLine ( " age " , " 年龄 " ) ;
this - > addParamLine ( " phone " , " 联系方式 " ) ;
}
void onAccept ( )
{
if ( oper = = " 修改 " )
{
curData . set ( " user_id " , originData . value ( " user_id " ) ) ;
DAO : : updateUserById ( curData ) ;
}
} ;
2025-10-09 18:37:18 +08:00
} ;
2025-11-19 15:07:51 +08:00
class DialogPopPermission : public DialogPop
2025-10-09 18:37:18 +08:00
{
2025-11-19 15:07:51 +08:00
public :
DialogPopPermission ( QWidget * parent , const Fields & rowdata , string oper = " " ) : DialogPop ( parent , rowdata , oper )
{
this - > setFixedSize ( 500 , 60 + 140 + 40 * 5 ) ;
this - > setWindowTitle ( ( " 权限管理: " + oper ) . c_str ( ) ) ;
this - > addParamLine ( " permission_id " , " ID " , true ) ;
this - > addParamLine ( " route " , " 路由 " ) ;
this - > addParamLine ( " name " , " 权限名称 " ) ;
this - > addParamLine ( " describe " , " 描述 " ) ;
this - > addParamCombox ( " is_open " , " 是否启用 " , { { " 1 " , " 启用 " } , { " 0 " , " 不启用 " } } ) ;
}
void onAccept ( )
{
if ( oper = = " 修改 " )
{
curData . set ( " permission_id " , originData . value ( " permission_id " ) ) ;
DAO : : updatePermissionById ( curData ) ;
}
} ;
2025-10-09 18:37:18 +08:00
} ;
2025-11-19 15:07:51 +08:00
class DialogPopRole : public DialogPop
2025-10-09 18:37:18 +08:00
{
2025-11-19 15:07:51 +08:00
public :
DialogPopRole ( QWidget * parent , const Fields & rowdata , string oper = " " ) : DialogPop ( parent , rowdata , oper )
{
this - > setFixedSize ( 500 , 60 + 140 + 40 * 4 ) ;
this - > setWindowTitle ( ( " 角色管理: " + oper ) . c_str ( ) ) ;
this - > addParamLine ( " role_id " , " ID " , true ) ;
this - > addParamLine ( " name " , " 角色名称 " ) ;
this - > addParamLine ( " describe " , " 描述 " ) ;
this - > addParamCombox ( " is_open " , " 是否启用 " , { { " 1 " , " 启用 " } , { " 0 " , " 不启用 " } } ) ;
}
void onAccept ( )
{
if ( oper = = " 修改 " )
{
curData . set ( " role_id " , originData . value ( " role_id " ) ) ;
DAO : : updateRoleById ( nullptr , curData ) ;
}
} ;
2025-10-09 18:37:18 +08:00
} ;
2025-11-19 15:07:51 +08:00
class DialogPopStation : public DialogPop
2025-10-09 18:37:18 +08:00
{
2025-11-19 15:07:51 +08:00
public :
DialogPopStation ( QWidget * parent , const Fields & rowdata , string oper = " " ) : DialogPop ( parent , rowdata , oper )
{
this - > setFixedSize ( 500 , 60 + 140 + 40 * 7 ) ;
this - > setWindowTitle ( ( " 场站管理: " + oper ) . c_str ( ) ) ;
this - > addParamLine ( " station_id " , " ID " , true ) ;
this - > addParamLine ( " name " , " 名称 " ) ;
this - > addParamLine ( " code " , " 编号 " ) ;
this - > addParamLine ( " address " , " 地址 " ) ;
this - > addParamLine ( " lon " , " 经度 " ) ;
this - > addParamLine ( " lat " , " 维度 " ) ;
this - > addParamCombox ( " is_open " , " 是否启用 " , { { " 1 " , " 启用 " } , { " 0 " , " 不启用 " } } ) ;
}
void onAccept ( )
{
if ( oper = = " 修改 " )
{
curData . set ( " station_id " , originData . value ( " station_id " ) ) ;
DAO : : updateStationById ( curData ) ;
}
} ;
2025-10-09 18:37:18 +08:00
} ;
2025-11-19 15:07:51 +08:00
class DialogPopDevice : public DialogPop
2025-10-09 18:37:18 +08:00
{
2025-11-19 15:07:51 +08:00
public :
DialogPopDevice ( QWidget * parent , const Fields & rowdata , string oper = " " ) : DialogPop ( parent , rowdata , oper )
{
this - > setFixedSize ( 500 , 60 + 140 + 40 * 6 ) ;
this - > setWindowTitle ( ( " 设备管理: " + oper ) . c_str ( ) ) ;
this - > addParamLine ( " device_id " , " ID " , true ) ;
this - > addParamLine ( " station_name " , " 所属场站 " ) ;
this - > addParamLine ( " type_name " , " 类型 " ) ;
this - > addParamLine ( " name " , " 名称 " ) ;
this - > addParamLine ( " code " , " 编号 " ) ;
this - > addParamCombox ( " is_open " , " 是否启用 " , { { " 1 " , " 启用 " } , { " 0 " , " 不启用 " } } ) ;
}
void onAccept ( )
{
if ( oper = = " 修改 " )
{
curData . set ( " station_id " , originData . value ( " station_id " ) ) ;
DAO : : updateDeviceById ( curData ) ;
}
} ;
2025-10-09 18:37:18 +08:00
} ;
2025-11-19 15:07:51 +08:00
class DialogPopPolicy : public DialogPop
2025-10-09 18:37:18 +08:00
{
2025-11-19 15:07:51 +08:00
public :
DialogPopPolicy ( QWidget * parent , const Fields & rowdata , string oper = " " ) : DialogPop ( parent , rowdata , oper )
{
}
2025-10-09 18:37:18 +08:00
} ;
2025-11-19 15:07:51 +08:00
class DialogPopLog : public DialogPop
2025-10-09 18:37:18 +08:00
{
2025-11-19 15:07:51 +08:00
public :
DialogPopLog ( QWidget * parent , const Fields & rowdata , string oper = " " ) : DialogPop ( parent , rowdata , oper )
{
}
2025-10-09 18:37:18 +08:00
} ;
2025-11-19 15:07:51 +08:00
class DialogPopAlarm : public DialogPop
2025-10-09 18:37:18 +08:00
{
2025-11-19 15:07:51 +08:00
public :
DialogPopAlarm ( QWidget * parent , const Fields & rowdata , string oper = " " ) : DialogPop ( parent , rowdata , oper )
{
}
2025-10-09 18:37:18 +08:00
} ;
2025-11-19 15:07:51 +08:00
QWSysmgr : : QWSysmgr ( QWidget * parent ) : MyWidget ( parent )
2025-10-09 18:37:18 +08:00
{
2025-11-19 15:07:51 +08:00
TableInfo : : initialize ( ) ;
2025-10-09 18:37:18 +08:00
2025-11-19 15:07:51 +08:00
std : : vector < std : : string > vecItems = { " 用户管理 " , " 权限管理 " , " 角色管理 " , " 场站管理 " , " 设备管理 " , " 策略管理 " , " 日志管理 " , " 告警管理 " } ;
vecBtnFunc . reserve ( vecItems . size ( ) ) ;
int x = 10 , y = 10 ;
for ( auto & itemName : vecItems )
{
auto btn = make_shared < QPushButton > ( itemName . c_str ( ) , this ) ;
btn - > setObjectName ( itemName ) ;
btn - > setGeometry ( x , y , 120 , 36 ) ;
btn - > setStyleSheet ( QSS_BTN . c_str ( ) ) ;
vecBtnFunc . push_back ( btn ) ;
x + = 130 ;
connect ( btn . get ( ) , & QPushButton : : clicked , this , & QWSysmgr : : slotBtnModuleChanged ) ;
}
QStringList headerTextList ;
//headerTextList << "ID" << "类型ID" << "类型名称" << "设备名称" << "编号" << "状态" << "通讯\n状态" << "工作\n状态" << "故障\n状态";
table = MyQUI : : TableWidget ( this , 10 , y + = 100 , 1190 , 740 ) ;
// 设置为水平表头
table - > setColumnCount ( headerTextList . size ( ) ) ;
table - > setHorizontalHeaderLabels ( headerTextList ) ;
table - > horizontalHeader ( ) - > setDefaultSectionSize ( 80 ) ;
if ( vecBtnFunc . size ( ) > 0 )
{
curActiveBtn = vecBtnFunc [ 0 ] . get ( ) ;
curActiveBtn - > setStyleSheet ( QSS_BTN_ACTIVE . c_str ( ) ) ;
this - > initTable ( curActiveBtn - > text ( ) . toStdString ( ) ) ;
}
2025-10-09 18:37:18 +08:00
}
2025-11-19 15:07:51 +08:00
QWSysmgr : : ~ QWSysmgr ( )
2025-10-09 18:37:18 +08:00
{
}
void QWSysmgr : : initTable ( const string & name )
{
2025-11-19 15:07:51 +08:00
QStringList headerTextList ;
auto tableInfo = TableInfo : : getInfo ( name ) ;
if ( tableInfo )
{
for ( auto & item : tableInfo - > vecHead ) { headerTextList < < item . title . c_str ( ) ; }
}
table - > setColumnCount ( headerTextList . size ( ) ) ;
table - > setHorizontalHeaderLabels ( headerTextList ) ;
if ( tableInfo )
{
for ( int i = 0 ; i < tableInfo - > vecHead . size ( ) ; + + i )
{
auto & item = tableInfo - > vecHead [ i ] ;
table - > setColumnWidth ( i , item . width > 0 ? item . width : 100 ) ;
}
}
this - > initTableData ( name ) ;
2025-10-09 18:37:18 +08:00
}
void QWSysmgr : : initTableData ( std : : string name )
{
2025-11-19 15:07:51 +08:00
table - > clearContents ( ) ; // 会自动释放在setCellWidget时创建的对象
table - > setRowCount ( 0 ) ;
auto tableInfo = TableInfo : : getInfo ( name ) ;
if ( tableInfo )
{
DAO : : exec ( NULL , tableInfo - > sqlQuery , rowFields ) ;
for ( int row = 0 ; row < rowFields . size ( ) ; + + row )
{
auto & fields = rowFields [ row ] ;
int col = 0 ;
for ( auto & item : tableInfo - > vecHead )
{
string key = item . key ;
if ( item . title = = " 操作 " )
{
vector < string > items { " 修改 " } ;
MyQUI : : setTableCellButton ( table , row , col , items , this , [ = ] ( string oper ) { this - > showDialogPop ( name , fields , oper ) ; } ) ;
}
else
{
string val = fields . value ( key ) ;
if ( key = = " is_open " ) { val = ( val = = " 1 " ? " 启用 " : " 未启用 " ) ; }
else if ( key = = " gender " ) { val = ( val = = " 1 " ? " 男 " : " 女 " ) ; }
MyQUI : : setTableCellText ( table , row , col , val ) ;
}
+ + col ;
}
}
}
}
void QWSysmgr : : showDialogPop ( std : : string name , const Fields & rowdata , std : : string oper )
{
shared_ptr < DialogPop > dlg ;
if ( name = = " 用户管理 " ) { dlg = make_shared < DialogPopUser > ( this , rowdata , oper ) ; }
else if ( name = = " 权限管理 " ) { dlg = make_shared < DialogPopPermission > ( this , rowdata , oper ) ; }
else if ( name = = " 角色管理 " ) { dlg = make_shared < DialogPopRole > ( this , rowdata , oper ) ; }
else if ( name = = " 场站管理 " ) { dlg = make_shared < DialogPopStation > ( this , rowdata , oper ) ; }
else if ( name = = " 设备管理 " ) { dlg = make_shared < DialogPopDevice > ( this , rowdata , oper ) ; }
else if ( name = = " 策略管理 " ) { dlg = make_shared < DialogPopPolicy > ( this , rowdata , oper ) ; }
else if ( name = = " 日志管理 " ) { dlg = make_shared < DialogPopLog > ( this , rowdata , oper ) ; }
else if ( name = = " 告警管理 " ) { dlg = make_shared < DialogPopAlarm > ( this , rowdata , oper ) ; }
if ( ! dlg ) return ;
int ret = dlg - > exec ( ) ;
if ( ret ) { this - > initTableData ( name ) ; }
}
void QWSysmgr : : slotBtnModuleChanged ( )
{
auto btn = dynamic_cast < QPushButton * > ( sender ( ) ) ;
string name = btn - > objectName ( ) . toStdString ( ) ;
if ( btn ! = curActiveBtn )
{
if ( curActiveBtn ) { curActiveBtn - > setStyleSheet ( QSS_BTN . c_str ( ) ) ; }
if ( btn ) { btn - > setStyleSheet ( QSS_BTN_ACTIVE . c_str ( ) ) ; }
curActiveBtn = btn ;
this - > initTable ( name ) ;
}
2025-10-09 18:37:18 +08:00
}