ExpertManageView.cpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. #include "ExpertManageView.h"
  2. #include "QFDIcon.h"
  3. #include "MainWindow.h"
  4. #include "ExpertInfoWidget.h"
  5. #include "ExpertListWidget.h"
  6. #include <dbService/DBServiceSet.h>
  7. #include <Widgets/Button.h>
  8. #include <Widgets/LineEdit.h>
  9. #include <DialogBox/Dialog.h>
  10. #include <QFDAlert.h>
  11. #include <QBoxLayout>
  12. #include <QLabel>
  13. #include <QDebug>
  14. ExpertManageView::ExpertManageView(QWidget *parent) : QWidget(parent) { }
  15. void ExpertManageView::showEvent(QShowEvent *event)
  16. {
  17. QWidget::showEvent(event);
  18. init();
  19. }
  20. void ExpertManageView::hideEvent(QHideEvent *event)
  21. {
  22. QWidget::hideEvent(event);
  23. hideExpertInfoWidget();
  24. }
  25. void ExpertManageView::init()
  26. {
  27. if (m_initilized == false) {
  28. initialize();
  29. initLayout();
  30. connectSignalsAndSlots();
  31. m_initilized = true;
  32. }
  33. refreshList();
  34. }
  35. void ExpertManageView::initialize()
  36. {
  37. m_vBoxLayout = new QVBoxLayout(this);
  38. m_titleLabel = new QLabel(this);
  39. m_titleLabel->setText("专家列表");
  40. QFont ft("Microsoft YaHei", 12);
  41. m_titleLabel->setFont(ft);
  42. m_hBoxLayout = new QHBoxLayout();
  43. m_searchLineEdit = new SearchLineEdit(this);
  44. m_searchLineEdit->setPlaceholderText("搜索");
  45. m_searchLineEdit->setMinimumWidth(300);
  46. m_addExpertButton = new PushButton("添加", NEWFLICON(FluentIcon, ADD), this);
  47. m_detailButton = new ToolButton(NEWFLICON(QFDIcon, Detail), this);
  48. m_detailButton->setToolTip("详细信息");
  49. m_deleteButton = new ToolButton(NEWFLICON(FluentIcon, DELETE), this);
  50. m_deleteButton->setToolTip("删除用户");
  51. m_expertListWidget = new ExpertListWidget(this);
  52. }
  53. void ExpertManageView::initLayout()
  54. {
  55. m_vBoxLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft);
  56. m_vBoxLayout->setContentsMargins(15, 10, 10, 15);
  57. m_vBoxLayout->addLayout(m_hBoxLayout);
  58. m_hBoxLayout->setContentsMargins(10, 0, 10, 0);
  59. m_hBoxLayout->addWidget(m_titleLabel);
  60. m_hBoxLayout->addSpacing(15);
  61. m_hBoxLayout->addWidget(m_searchLineEdit, 0, Qt::AlignLeft);
  62. m_hBoxLayout->addWidget(m_addExpertButton, 1, Qt::AlignLeft);
  63. m_hBoxLayout->addStretch();
  64. m_hBoxLayout->addWidget(m_detailButton);
  65. m_hBoxLayout->addWidget(m_deleteButton);
  66. setListButtonHidden(true);
  67. m_vBoxLayout->addWidget(m_expertListWidget);
  68. }
  69. void ExpertManageView::connectSignalsAndSlots()
  70. {
  71. connect(m_addExpertButton, &PushButton::clicked, this, &ExpertManageView::slotAddExpertClicked);
  72. connect(m_detailButton, &PushButton::clicked, this, &ExpertManageView::slotDetailClicked);
  73. connect(m_deleteButton, &PushButton::clicked, this, &ExpertManageView::slotDeleteClicked);
  74. connect(m_expertListWidget, &ExpertListWidget::signalSelectionChanged, this,
  75. &ExpertManageView::slotListSelectionChanged);
  76. connect(m_expertListWidget, &ExpertListWidget::siganlItemDoubleClicked, this,
  77. &ExpertManageView::slotListItemDoubleClicked);
  78. }
  79. void ExpertManageView::setListButtonHidden(bool hidden)
  80. {
  81. m_detailButton->setHidden(hidden);
  82. m_deleteButton->setHidden(hidden);
  83. }
  84. void ExpertManageView::showExpertInfoWidget(ExpertInfoWidget::Mode mode)
  85. {
  86. if (m_expertInfoWidget == nullptr) {
  87. m_expertInfoWidget = new ExpertInfoWidget(this);
  88. }
  89. if (m_expertInfoWidget->isVisible() == false) {
  90. m_expertInfoWidget->clearInputs();
  91. m_expertInfoWidget->show();
  92. m_expertInfoWidget->setFocus(Qt::NoFocusReason);
  93. }
  94. m_expertInfoWidget->setMode(mode);
  95. }
  96. void ExpertManageView::hideExpertInfoWidget()
  97. {
  98. if (m_expertInfoWidget && m_expertInfoWidget->isVisible()) {
  99. m_expertInfoWidget->close();
  100. }
  101. }
  102. void ExpertManageView::showExpertInfo(QFUser *user)
  103. {
  104. showExpertInfoWidget();
  105. m_expertInfoWidget->setUser(user);
  106. }
  107. void ExpertManageView::refreshList()
  108. {
  109. if (!DBServiceSet().QueryUserListNotAdmin(&m_userList)) {
  110. QFDAlert::showAlertWithCode(QF_CODE_DATA_ERROR, this);
  111. return;
  112. }
  113. m_expertListWidget->showUsers(m_userList);
  114. }
  115. void ExpertManageView::slotAddExpertClicked()
  116. {
  117. showExpertInfoWidget(ExpertInfoWidget::Create);
  118. }
  119. void ExpertManageView::slotDetailClicked()
  120. {
  121. int row = m_expertListWidget->selectedRow();
  122. if (row < 0 || row >= m_userList.count()) {
  123. return;
  124. }
  125. QFUser *user = m_userList[row];
  126. showExpertInfo(user);
  127. }
  128. void ExpertManageView::slotDeleteClicked()
  129. {
  130. hideExpertInfoWidget();
  131. MessageBox *m = new MessageBox("删除专家信息", "删除后不可恢复,确认删除?", topLevelWidget());
  132. m->exec();
  133. }
  134. void ExpertManageView::slotListSelectionChanged()
  135. {
  136. setListButtonHidden(!m_expertListWidget->hasSelectedItem());
  137. }
  138. void ExpertManageView::slotListItemDoubleClicked(int row)
  139. {
  140. if (row < 0 || row >= m_userList.count()) {
  141. return;
  142. }
  143. QFUser *user = m_userList[row];
  144. showExpertInfo(user);
  145. }