Jelajahi Sumber

总体完善

zhuizhu 10 bulan lalu
induk
melakukan
850d634725
6 mengubah file dengan 136 tambahan dan 76 penghapusan
  1. 3 0
      mainwindow.cpp
  2. 1 0
      mainwindow.h
  3. 57 34
      settingspage.cpp
  4. 2 0
      settingspage.h
  5. 11 5
      tcontroller.cpp
  6. 62 37
      teacherServer_zh_CN.ts

+ 3 - 0
mainwindow.cpp

@@ -53,6 +53,7 @@ MainWindow::MainWindow(QWidget *parent)
     CurrentExamQuestions = new QLabel;
     currentOnlineNumber = new QLabel;
     numberOfLinks = new QLabel;
+    webLinks = new QLabel;
     QStatusBar *statusBar = new QStatusBar(this);
     setStatusBar(statusBar);
     statusBar->addPermanentWidget(Form{"Ip:", ipLabel, noMargin}.emerge());
@@ -62,6 +63,7 @@ MainWindow::MainWindow(QWidget *parent)
     statusBar->addPermanentWidget(
         Form{tr("current online number:"), currentOnlineNumber, noMargin}.emerge());
     statusBar->addPermanentWidget(Form{tr("number of links:"), numberOfLinks, noMargin}.emerge());
+    statusBar->addPermanentWidget(Form{tr("web links:"), webLinks, noMargin}.emerge());
 
     setMinimumSize({960, 600});
 
@@ -77,6 +79,7 @@ MainWindow::MainWindow(QWidget *parent)
         const int port = AppEvent::instance()->configValue("webSocketPort").toInt();
         wsLabel->setText(QString("%1:%2").arg(ip).arg(port));
     }
+    webLinks->setText(appEvent->isLogin() ? tr("Link") : tr("no Link"));
 
     QObject::connect(appEvent, &AppEvent::loginUserSignal, [this](int) { updateStatusBar(); });
     QObject::connect(appEvent, &AppEvent::loginOutUserSignal, [this](int) { updateStatusBar(); });

+ 1 - 0
mainwindow.h

@@ -30,6 +30,7 @@ private:
     QLabel *CurrentExamQuestions;
     QLabel *currentOnlineNumber;
     QLabel *numberOfLinks;
+    QLabel *webLinks;
     // auto examsEditor = Form{tr("exams name"),
     //     new QLineEdit,
     //     br,

+ 57 - 34
settingspage.cpp

@@ -52,44 +52,55 @@ SettingsPage::SettingsPage(QWidget *parent)
     lockMaxTimeSpinBox = new QSpinBox;
     lockMaxTimeSpinBox->setRange(0, 999999999);
     lockMaxTimeSpinBox->setToolTip(tr("Setting to 0 means unlimited time"));
+
+    submitTextEdit = new QLineEdit;
+    lockTextEdit = new QLineEdit;
     // 教师端
     answerDirLineEdit = new QLineEdit;
     using namespace Layouting;
 
     auto student = Group{title(tr("student configuration")),
-                         Form{tr("exam content dir:"),
-                              examContentDirLineEdit,
-                              PushButton{text(tr("open dir")), onClicked([this]() {
-                                             const QString dir = QFileDialog::getExistingDirectory(
-                                                 this,
-                                                 QObject::tr("选择目录"),
-                                                 "./",
-                                                 QFileDialog::ShowDirsOnly
-                                                     | QFileDialog::DontResolveSymlinks);
-                                             examContentDirLineEdit->setText(dir);
-                                         })},
-                              br,
-                              tr("window x:"),
-                              windowXSpinBox,
-                              tr("window y:"),
-                              windowYSpinBox,
-                              st,
-                              br,
-                              tr("exam answer dir:"),
-                              examAnswerDirLineEdit,
-                              PushButton{text(tr("open dir")), onClicked([this]() {
-                                             const QString dir = QFileDialog::getExistingDirectory(
-                                                 this,
-                                                 QObject::tr("选择目录"),
-                                                 "./",
-                                                 QFileDialog::ShowDirsOnly
-                                                     | QFileDialog::DontResolveSymlinks);
-                                             examAnswerDirLineEdit->setText(dir);
-                                         })},
-                              br,
-                              tr("lock max time"),
-                              lockMaxTimeSpinBox,
-                              tr("s")}};
+                         Form{
+                             tr("exam content dir:"),
+                             examContentDirLineEdit,
+                             PushButton{text(tr("open dir")), onClicked([this]() {
+                                            const QString dir = QFileDialog::getExistingDirectory(
+                                                this,
+                                                QObject::tr("选择目录"),
+                                                "./",
+                                                QFileDialog::ShowDirsOnly
+                                                    | QFileDialog::DontResolveSymlinks);
+                                            examContentDirLineEdit->setText(dir);
+                                        })},
+                             br,
+                             tr("window x:"),
+                             windowXSpinBox,
+                             tr("window y:"),
+                             windowYSpinBox,
+                             st,
+                             br,
+                             tr("exam answer dir:"),
+                             examAnswerDirLineEdit,
+                             PushButton{text(tr("open dir")), onClicked([this]() {
+                                            const QString dir = QFileDialog::getExistingDirectory(
+                                                this,
+                                                QObject::tr("选择目录"),
+                                                "./",
+                                                QFileDialog::ShowDirsOnly
+                                                    | QFileDialog::DontResolveSymlinks);
+                                            examAnswerDirLineEdit->setText(dir);
+                                        })},
+                             br,
+                             tr("lock max time"),
+                             lockMaxTimeSpinBox,
+                             tr("s"),
+                             br,
+                             tr("submitText"),
+                             submitTextEdit,
+                             br,
+                             tr("lockText"),
+                             lockTextEdit,
+                         }};
     auto teacher = Group{title(tr("teacher configuration")),
                          Form{
                              tr("answer dir:"),
@@ -113,12 +124,15 @@ SettingsPage::SettingsPage(QWidget *parent)
     const QVariant windowY = AppEvent::instance()->configValue("windowY");
     const QVariant examAnswerDir = AppEvent::instance()->configValue("examAnswerDir");
     const QVariant lockMaxTime = AppEvent::instance()->configValue("lockMaxTime");
+    const QVariant submitText = AppEvent::instance()->configValue("submitText");
+    const QVariant lockText = AppEvent::instance()->configValue("lockText");
     examContentDirLineEdit->setText(examContentDir.toString());
     windowXSpinBox->setValue(windowX.toInt());
     windowYSpinBox->setValue(windowY.toInt());
     examAnswerDirLineEdit->setText(examAnswerDir.toString());
     lockMaxTimeSpinBox->setValue(lockMaxTime.toInt());
-
+    submitTextEdit->setText(submitText.toString());
+    lockTextEdit->setText(lockText.toString());
     // 教师端
     const QVariant answerDir = AppEvent::instance()->configValue("answerDir");
     answerDirLineEdit->setText(answerDir.toString());
@@ -141,6 +155,15 @@ SettingsPage::SettingsPage(QWidget *parent)
     connect(lockMaxTimeSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), [](int value) {
         AppEvent::instance()->setConfigValue("lockMaxTime", value);
     });
+
+    connect(submitTextEdit, &QLineEdit::textChanged, [this](const QString &) {
+        const QString &test = submitTextEdit->text();
+        AppEvent::instance()->setConfigValue("submitText", test);
+    });
+    connect(lockTextEdit, &QLineEdit::textChanged, [this](const QString &) {
+        const QString &test = lockTextEdit->text();
+        AppEvent::instance()->setConfigValue("lockText", test);
+    });
     // 教师端
 
     connect(answerDirLineEdit, &QLineEdit::textChanged, [this](const QString &) {

+ 2 - 0
settingspage.h

@@ -29,6 +29,8 @@ private:
     QSpinBox *windowXSpinBox;          // 考试窗口位置
     QSpinBox *windowYSpinBox;          // 考试窗口位置
     QLineEdit *examAnswerDirLineEdit;  // 考试答案临时存放路径
+    QLineEdit *submitTextEdit;         //提交提示文本
+    QLineEdit *lockTextEdit;           // 锁屏文本
     // 服务端配置
     QLineEdit *answerDirLineEdit; // 考试答案临时存放路径
 

+ 11 - 5
tcontroller.cpp

@@ -576,7 +576,7 @@ void UploadedFilesController::doPost(CWF::Request &request, CWF::Response &respo
         }
     }
     const QMultiMap<QByteArray, QByteArray> &files = request.getUploadedFiles();
-
+    qDebug() << files.keys();
     if (user.getId() > 0) {
         QVariant answerDir = AppEvent::instance()->configValue("answerDir");
 
@@ -594,8 +594,15 @@ void UploadedFilesController::doPost(CWF::Request &request, CWF::Response &respo
         }
         for (auto it = files.begin(); it != files.end(); ++it) {
             QString fileName = user.getAnswerFileName();
-            if (fileName.isEmpty()) {
-                fileName = QString("%1_%2.zip").arg(user.getName()).arg(user.getExamineeNumber());
+            if (it.key().endsWith("zip")) {
+                if (fileName.isEmpty()) {
+                    fileName = QString("%1_%2.zip").arg(user.getName()).arg(user.getExamineeNumber());
+                }
+            } else {
+                fileName = QString("%1_%2_%3")
+                               .arg(user.getName())
+                               .arg(user.getExamineeNumber())
+                               .arg(QString(it.key()));
             }
 
             const QString filePath = dir.absoluteFilePath(fileName);
@@ -747,7 +754,7 @@ WHERE u.id = %1;
                 //              int startTime,
                 //              int status,
                 //              const QString &swId)
-                {
+                if (AppEvent::instance()->isLogin()) {
                     const QString answerFileName = fileName;
                     const QString checkinNumber = user.getCheckinNumber();
                     int endTime = time;
@@ -783,7 +790,6 @@ WHERE u.id = %1;
                                                   swId);
                     gradesUpdate.postAsync();
                 }
-                qDebug() << " AppEvent::instance()->examsTestUpdate();";
                 AppEvent::instance()->examsTestUpdate();
             }
             response.write(

+ 62 - 37
teacherServer_zh_CN.ts

@@ -322,20 +322,35 @@
         <translation>成绩</translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="61"/>
+        <location filename="mainwindow.cpp" line="62"/>
         <source>current default examination questions:</source>
         <translation>当前默认考试题目:</translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="63"/>
+        <location filename="mainwindow.cpp" line="64"/>
         <source>current online number:</source>
         <translation>当前在线人数:</translation>
     </message>
     <message>
-        <location filename="mainwindow.cpp" line="64"/>
+        <location filename="mainwindow.cpp" line="65"/>
         <source>number of links:</source>
         <translation>链接数量:</translation>
     </message>
+    <message>
+        <location filename="mainwindow.cpp" line="66"/>
+        <source>web links:</source>
+        <translation>web服务器状态:</translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="82"/>
+        <source>Link</source>
+        <translation>已链接</translation>
+    </message>
+    <message>
+        <location filename="mainwindow.cpp" line="82"/>
+        <source>no Link</source>
+        <translation>未链接</translation>
+    </message>
     <message>
         <source>pageSize</source>
         <translation type="obsolete">页大小</translation>
@@ -368,21 +383,21 @@
     <name>QObject</name>
     <message>
         <location filename="examquestionpage.cpp" line="285"/>
-        <location filename="settingspage.cpp" line="65"/>
-        <location filename="settingspage.cpp" line="83"/>
-        <location filename="settingspage.cpp" line="100"/>
+        <location filename="settingspage.cpp" line="69"/>
+        <location filename="settingspage.cpp" line="87"/>
+        <location filename="settingspage.cpp" line="111"/>
         <source>选择目录</source>
-        <translation type="unfinished"></translation>
+        <translation></translation>
     </message>
     <message>
         <location filename="examquestionpage.cpp" line="295"/>
         <source>选择文件</source>
-        <translation type="unfinished"></translation>
+        <translation></translation>
     </message>
     <message>
         <location filename="examquestionpage.cpp" line="297"/>
         <source>所有文件 (*)</source>
-        <translation type="unfinished"></translation>
+        <translation></translation>
     </message>
 </context>
 <context>
@@ -393,54 +408,64 @@
         <translation>设置为0 表示不限时</translation>
     </message>
     <message>
-        <location filename="settingspage.cpp" line="59"/>
+        <location filename="settingspage.cpp" line="62"/>
         <source>student configuration</source>
         <translation>学生端配置</translation>
     </message>
     <message>
-        <location filename="settingspage.cpp" line="60"/>
+        <location filename="settingspage.cpp" line="64"/>
         <source>exam content dir:</source>
         <translation>考题存放目录:</translation>
     </message>
     <message>
-        <location filename="settingspage.cpp" line="62"/>
-        <location filename="settingspage.cpp" line="80"/>
-        <location filename="settingspage.cpp" line="97"/>
+        <location filename="settingspage.cpp" line="66"/>
+        <location filename="settingspage.cpp" line="84"/>
+        <location filename="settingspage.cpp" line="108"/>
         <source>open dir</source>
-        <translation type="unfinished">打开目录</translation>
+        <translation>打开目录</translation>
     </message>
     <message>
-        <location filename="settingspage.cpp" line="72"/>
+        <location filename="settingspage.cpp" line="76"/>
         <source>window x:</source>
         <translation>窗口x:</translation>
     </message>
     <message>
-        <location filename="settingspage.cpp" line="74"/>
+        <location filename="settingspage.cpp" line="78"/>
         <source>window y:</source>
         <translation>窗口y:</translation>
     </message>
     <message>
-        <location filename="settingspage.cpp" line="78"/>
+        <location filename="settingspage.cpp" line="82"/>
         <source>exam answer dir:</source>
         <translation>考试答案目录:</translation>
     </message>
     <message>
-        <location filename="settingspage.cpp" line="90"/>
+        <location filename="settingspage.cpp" line="94"/>
         <source>lock max time</source>
         <translation>最大锁屏时间</translation>
     </message>
     <message>
-        <location filename="settingspage.cpp" line="92"/>
+        <location filename="settingspage.cpp" line="96"/>
         <source>s</source>
         <translation>秒</translation>
     </message>
     <message>
-        <location filename="settingspage.cpp" line="93"/>
+        <location filename="settingspage.cpp" line="98"/>
+        <source>submitText</source>
+        <translation>提交提示文本</translation>
+    </message>
+    <message>
+        <location filename="settingspage.cpp" line="101"/>
+        <source>lockText</source>
+        <translation>锁屏提示文本</translation>
+    </message>
+    <message>
+        <location filename="settingspage.cpp" line="104"/>
         <source>teacher configuration</source>
         <translation>教师端配置</translation>
     </message>
     <message>
-        <location filename="settingspage.cpp" line="95"/>
+        <location filename="settingspage.cpp" line="106"/>
         <source>answer dir:</source>
         <translation>答案存放目录:</translation>
     </message>
@@ -810,8 +835,8 @@
         <location filename="tcontroller.cpp" line="137"/>
         <location filename="tcontroller.cpp" line="239"/>
         <location filename="tcontroller.cpp" line="308"/>
-        <location filename="tcontroller.cpp" line="558"/>
-        <location filename="tcontroller.cpp" line="667"/>
+        <location filename="tcontroller.cpp" line="564"/>
+        <location filename="tcontroller.cpp" line="680"/>
         <source>user does not exist</source>
         <translation>用户不存在</translation>
     </message>
@@ -831,7 +856,7 @@
     <message>
         <location filename="tcontroller.cpp" line="198"/>
         <location filename="tcontroller.cpp" line="273"/>
-        <location filename="tcontroller.cpp" line="524"/>
+        <location filename="tcontroller.cpp" line="530"/>
         <source>LoginOut failed, no find user</source>
         <translation>退出失败, 没有发现用户</translation>
     </message>
@@ -840,8 +865,8 @@
         <location filename="tcontroller.cpp" line="282"/>
         <location filename="tcontroller.cpp" line="353"/>
         <location filename="tcontroller.cpp" line="435"/>
-        <location filename="tcontroller.cpp" line="533"/>
-        <location filename="tcontroller.cpp" line="631"/>
+        <location filename="tcontroller.cpp" line="539"/>
+        <location filename="tcontroller.cpp" line="644"/>
         <source>unauthorized</source>
         <translation></translation>
     </message>
@@ -853,44 +878,44 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="tcontroller.cpp" line="544"/>
-        <location filename="tcontroller.cpp" line="605"/>
+        <location filename="tcontroller.cpp" line="550"/>
+        <location filename="tcontroller.cpp" line="618"/>
         <source>file uploaded successfully</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="tcontroller.cpp" line="611"/>
+        <location filename="tcontroller.cpp" line="624"/>
         <source>Failed to uploaded files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="tcontroller.cpp" line="622"/>
+        <location filename="tcontroller.cpp" line="635"/>
         <source>answer Time failed, no find user login</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="tcontroller.cpp" line="643"/>
-        <location filename="tcontroller.cpp" line="785"/>
+        <location filename="tcontroller.cpp" line="656"/>
+        <location filename="tcontroller.cpp" line="797"/>
         <source>Update Answer Time successfully</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="tcontroller.cpp" line="792"/>
+        <location filename="tcontroller.cpp" line="804"/>
         <source>Update Answer Time Failed</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="tcontroller.cpp" line="803"/>
+        <location filename="tcontroller.cpp" line="815"/>
         <source>json param error</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="tcontroller.cpp" line="865"/>
+        <location filename="tcontroller.cpp" line="877"/>
         <source>Table data </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="tcontroller.cpp" line="872"/>
+        <location filename="tcontroller.cpp" line="884"/>
         <source>Get Table Data Failed</source>
         <translation></translation>
     </message>