chengxr 1 year ago
parent
commit
ab795dd502

+ 1 - 1
QFD/common/QFDAlert.cpp

@@ -25,7 +25,7 @@ void QFDAlert::showAlertWithCode(int code, QWidget *w)
     } else if (code == QF_CODE_PASSWORD_UNCHANGED) {
         msg = "不能与旧密码相同,请修改后重试";
     } else if (code == QF_CODE_DATA_ERROR) {
-        msg = "数据错误";
+        msg = "数据异常";
     }
 
     if (!msg.isEmpty()) {

+ 33 - 11
QFD/view/ExpertManageView.cpp

@@ -6,9 +6,12 @@
 #include "ExpertInfoWidget.h"
 #include "ExpertListWidget.h"
 
+#include <dbService/DBServiceSet.h>
+
 #include <Widgets/Button.h>
 #include <Widgets/LineEdit.h>
 #include <DialogBox/Dialog.h>
+#include <QFDAlert.h>
 
 #include <QBoxLayout>
 #include <QLabel>
@@ -19,16 +22,14 @@ ExpertManageView::ExpertManageView(QWidget *parent) : QWidget(parent) { }
 
 void ExpertManageView::showEvent(QShowEvent *event)
 {
-
     QWidget::showEvent(event);
-
     init();
 }
 
 void ExpertManageView::hideEvent(QHideEvent *event)
 {
     QWidget::hideEvent(event);
-    hideExpertInfo();
+    hideExpertInfoWidget();
 }
 
 void ExpertManageView::init()
@@ -39,6 +40,7 @@ void ExpertManageView::init()
         connectSignalsAndSlots();
         m_initilized = true;
     }
+    refreshList();
 }
 
 void ExpertManageView::initialize()
@@ -98,7 +100,7 @@ void ExpertManageView::setListButtonHidden(bool hidden)
     m_deleteButton->setHidden(hidden);
 }
 
-void ExpertManageView::showExpertInfo(ExpertInfoWidget::Mode mode)
+void ExpertManageView::showExpertInfoWidget(ExpertInfoWidget::Mode mode)
 {
     if (m_expertInfoWidget == nullptr) {
         m_expertInfoWidget = new ExpertInfoWidget(this);
@@ -106,33 +108,49 @@ void ExpertManageView::showExpertInfo(ExpertInfoWidget::Mode mode)
 
     if (m_expertInfoWidget->isVisible() == false) {
         m_expertInfoWidget->clearInputs();
-
         m_expertInfoWidget->show();
+        m_expertInfoWidget->setFocus(Qt::NoFocusReason);
     }
 
     m_expertInfoWidget->setMode(mode);
 }
 
-void ExpertManageView::hideExpertInfo()
+void ExpertManageView::hideExpertInfoWidget()
 {
     if (m_expertInfoWidget && m_expertInfoWidget->isVisible()) {
         m_expertInfoWidget->close();
     }
 }
 
+void ExpertManageView::showExpertInfo(QFUser *user)
+{
+    showExpertInfoWidget();
+    m_expertInfoWidget->setUser(user);
+}
+
+void ExpertManageView::refreshList()
+{
+    if (!DBServiceSet().QueryUserListNotAdmin(&m_userList)) {
+        QFDAlert::showAlertWithCode(QF_CODE_DATA_ERROR, this);
+        return;
+    }
+
+    m_expertListWidget->showUsers(m_userList);
+}
+
 void ExpertManageView::slotAddExpertClicked()
 {
-    showExpertInfo(ExpertInfoWidget::Add);
+    showExpertInfoWidget(ExpertInfoWidget::Create);
 }
 
 void ExpertManageView::slotDetailClicked()
 {
-    showExpertInfo();
+    showExpertInfoWidget();
 }
 
 void ExpertManageView::slotDeleteClicked()
 {
-    hideExpertInfo();
+    hideExpertInfoWidget();
     MessageBox *m = new MessageBox("删除专家信息", "删除后不可恢复,确认删除?", topLevelWidget());
     m->exec();
 }
@@ -142,7 +160,11 @@ void ExpertManageView::slotListSelectionChanged()
     setListButtonHidden(!m_expertListWidget->isItemSelected());
 }
 
-void ExpertManageView::slotListItemDoubleClicked()
+void ExpertManageView::slotListItemDoubleClicked(int row)
 {
-    showExpertInfo();
+    if (row < 0 || row >= m_userList.count()) {
+        return;
+    }
+    QFUser *user = m_userList[row];
+    showExpertInfo(user);
 }

+ 11 - 3
QFD/view/ExpertManageView.h

@@ -7,6 +7,8 @@
 
 class ExpertListWidget;
 
+class QFUser;
+
 class PushButton;
 class ToolButton;
 class SearchLineEdit;
@@ -38,15 +40,19 @@ private:
 
     void setListButtonHidden(bool hidden);
 
-    void showExpertInfo(ExpertInfoWidget::Mode mode = ExpertInfoWidget::Read);
-    void hideExpertInfo();
+    void showExpertInfoWidget(ExpertInfoWidget::Mode mode = ExpertInfoWidget::Info);
+    void hideExpertInfoWidget();
+
+    void showExpertInfo(QFUser *user);
+
+    void refreshList();
 
 private slots:
     void slotAddExpertClicked();
     void slotDetailClicked();
     void slotDeleteClicked();
     void slotListSelectionChanged();
-    void slotListItemDoubleClicked();
+    void slotListItemDoubleClicked(int row);
 
 private:
     bool m_initilized = false;
@@ -61,6 +67,8 @@ private:
 
     ExpertInfoWidget *m_expertInfoWidget = nullptr;
     ExpertListWidget *m_expertListWidget = nullptr;
+
+    QList<QFUser *> m_userList;
 };
 
 #endif  // EXPERTMANAGEVIEW_H

+ 22 - 7
QFD/widgets/ExpertInfoWidget.cpp

@@ -1,5 +1,7 @@
 #include "ExpertInfoWidget.h"
 
+#include <dbService/ClassSet.h>
+
 #include <Widgets/LineEdit.h>
 #include <Widgets/Button.h>
 #include <Widgets/SpinBox.h>
@@ -49,9 +51,20 @@ void ExpertInfoWidget::clearInputs()
     m_noteTextEdit->clear();
 }
 
-void ExpertInfoWidget::initWindow()
+void ExpertInfoWidget::setUser(QFUser *user)
 {
+    m_user = user;
+    if (m_user == nullptr) {
+        clearInputs();
+        return;
+    }
 
+    m_idLineEdit->setText(QString(user->id));
+    m_nameLineEdit->setText(user->userName);
+}
+
+void ExpertInfoWidget::initWindow()
+{
     setWindowFlags(Qt::Window);
     setWindowFlag(Qt::WindowMinMaxButtonsHint, false);
     setFixedWidth(400);
@@ -163,12 +176,13 @@ void ExpertInfoWidget::connectSignalsAndSlots()
     connect(m_cancelButton, &PushButton::clicked, this, &ExpertInfoWidget::slotCancel);
 }
 
+/// 根据 mode 更新页面
 void ExpertInfoWidget::updateState()
 {
     int h     = height();
     QString t = windowTitle();
     switch (m_mode) {
-    case Add: {
+    case Create: {
         t = "添加用户";
         h = 350;
         break;
@@ -178,7 +192,7 @@ void ExpertInfoWidget::updateState()
         h = 350;
         break;
     }
-    case Read: {
+    case Info: {
         t = "用户信息";
         h = 450;
         break;
@@ -188,10 +202,12 @@ void ExpertInfoWidget::updateState()
     setFixedHeight(h);
     setWindowTitle(t);
 
-    setEditable(m_mode != Read);
-    setDetailsHideen(m_mode == Add);
+    setEditable(m_mode != Info);
+    setDetailsHideen(m_mode == Create);
 }
 
+/// 设置用户详情是否可见
+/// 单位、职务、专业、联系方式
 void ExpertInfoWidget::setDetailsHideen(bool hidden)
 {
     m_companyLabel->setHidden(hidden);
@@ -204,6 +220,7 @@ void ExpertInfoWidget::setDetailsHideen(bool hidden)
     m_contactInfoLineEdit->setHidden(hidden);
 }
 
+/// 设置所有 Edit 的可编辑状态
 void ExpertInfoWidget::setEditable(bool editable)
 {
     m_idLineEdit->setReadOnly(!editable);
@@ -216,8 +233,6 @@ void ExpertInfoWidget::setEditable(bool editable)
     m_contactInfoLineEdit->setReadOnly(!editable);
     m_timeLineEdit->setReadOnly(!editable);
     m_noteTextEdit->setReadOnly(!editable);
-    m_confirmButton->setHidden(!editable);
-    m_cancelButton->setHidden(!editable);
 }
 
 void ExpertInfoWidget::slotConfirm()

+ 9 - 3
QFD/widgets/ExpertInfoWidget.h

@@ -3,6 +3,8 @@
 
 #include <QDialog>
 
+class QFUser;
+
 class LineEdit;
 class PasswordLineEdit;
 class PushButton;
@@ -23,9 +25,9 @@ class ExpertInfoWidget : public QWidget
 public:
     typedef enum
     {
-        Add,     // 新增
+        Create,  // 新增
         Update,  // 编辑
-        Read,    // 查看
+        Info,    // 查看
     } Mode;
 
     Q_ENUM(Mode)
@@ -39,6 +41,8 @@ public:
 
     void clearInputs();
 
+    void setUser(QFUser *user);
+
 private:
     void initWindow();
     void initialize();
@@ -56,7 +60,7 @@ private slots:
 signals:
 
 private:
-    Mode m_mode = Add;
+    Mode m_mode = Create;
 
     QVBoxLayout *m_vBoxLayout = nullptr;
 
@@ -92,6 +96,8 @@ private:
     QHBoxLayout *m_hBoxLayout   = nullptr;
     PushButton *m_confirmButton = nullptr;
     PushButton *m_cancelButton  = nullptr;
+
+    QFUser *m_user;
 };
 
 #endif  // EXPERTINFOWIDGET_H

+ 8 - 7
QFD/widgets/ExpertListWidget.cpp

@@ -1,5 +1,7 @@
 #include "ExpertListWidget.h"
 
+#include <dbService/ClassSet.h>
+
 #include <Common/Icon.h>
 
 #include <QBoxLayout>
@@ -13,14 +15,13 @@ ExpertListWidget::ExpertListWidget(QWidget *parent) : QWidget(parent)
     initialize();
     initLayout();
     connectSignalsAndSlots();
-    refreshList();
 }
 
-void ExpertListWidget::refreshList()
+void ExpertListWidget::showUsers(QList<QFUser *> list)
 {
     m_listWidget->clear();
 
-    for (int i = 1; i <= 100; i++) {
+    for (int i = 0; i < list.count(); i++) {
         QListWidgetItem *item = new QListWidgetItem;
         item->setSizeHint(QSize(200, 60));
         m_listWidget->addItem(item);
@@ -32,11 +33,11 @@ void ExpertListWidget::refreshList()
         hBox->setSpacing(0);
         hBox->setMargin(10);
 
-        QLabel *idx = new QLabel(QString::number(i));
+        QLabel *idx = new QLabel(QString::number(i + 1));
         idx->setFixedWidth(20);
         hBox->addWidget(idx);
         hBox->addSpacing(10);
-        QLabel *name = new QLabel(QString("专家%1").arg(i));
+        QLabel *name = new QLabel(list[i]->userName);
         hBox->addWidget(name);
         hBox->addStretch();
     }
@@ -70,9 +71,9 @@ void ExpertListWidget::connectSignalsAndSlots()
     connect(m_listWidget, &QListWidget::itemSelectionChanged, this, &ExpertListWidget::slotItemSelectionChanged);
 }
 
-void ExpertListWidget::slotItemDoubleClicked(QListWidgetItem *)
+void ExpertListWidget::slotItemDoubleClicked(QListWidgetItem *item)
 {
-    emit siganlItemDoubleClicked();
+    emit siganlItemDoubleClicked(m_listWidget->row(item));
 }
 
 void ExpertListWidget::slotItemClicked(QListWidgetItem *)

+ 4 - 2
QFD/widgets/ExpertListWidget.h

@@ -3,6 +3,8 @@
 
 #include <QWidget>
 
+class QFUser;
+
 class QVBoxLayout;
 class QListWidget;
 class QListWidgetItem;
@@ -16,13 +18,13 @@ class ExpertListWidget : public QWidget
 public:
     explicit ExpertListWidget(QWidget *parent = nullptr);
 
-    void refreshList();
+    void showUsers(QList<QFUser *> list);
 
     bool isItemSelected() const;
 
 signals:
     void signalSelectionChanged();
-    void siganlItemDoubleClicked();
+    void siganlItemDoubleClicked(int row);
 
 private:
     void initialize();