error 6 лет назад
Родитель
Сommit
72e7250bf4

+ 6 - 3
JxcClient.pro

@@ -30,7 +30,8 @@ SOURCES += \
     main.cpp \
     mainwindow.cpp \
     widget/packdetailform.cpp \
-    widget/selectvalueform.cpp
+    widget/selectvalueform.cpp \
+    widget/settingsform.cpp
 
 HEADERS += \
     configinfo.h \
@@ -46,14 +47,16 @@ HEADERS += \
     widget/loginform.h \
     mainwindow.h \
     widget/packdetailform.h \
-    widget/selectvalueform.h
+    widget/selectvalueform.h \
+    widget/settingsform.h
 
 FORMS += \
     widget/autopackform.ui \
     widget/loginform.ui \
     mainwindow.ui \
     widget/packdetailform.ui \
-    widget/selectvalueform.ui
+    widget/selectvalueform.ui \
+    widget/settingsform.ui
 
 # Default rules for deployment.
 qnx: target.path = /tmp/$${TARGET}/bin

+ 17 - 15
configinfo.cpp

@@ -3,11 +3,11 @@
 ConfigInfo::ConfigInfo()
 {
 //    baseUrl = "http://erp.itwsw.cn/api";
-    loginUrl = "http://erp.itwsw.cn/api/v1/signin";
-    autoPackUrl = "http://erp.itwsw.cn/api/v1/product/pending";
-    configUrl = "http://erp.itwsw.cn/api/v1/configuration";
-    selectValueUrl = "http://erp.itwsw.cn/api/v1/goods/list";
-    levelUrl = "http://erp.itwsw.cn/api/v1/level/list";
+//    loginUrl = "http://erp.itwsw.cn/api/v1/signin";
+//    autoPackUrl = "http://erp.itwsw.cn/api/v1/product/pending";
+//    configUrl = "http://erp.itwsw.cn/api/v1/configuration";
+//    selectValueUrl = "http://erp.itwsw.cn/api/v1/goods/list";
+//    levelUrl = "http://erp.itwsw.cn/api/v1/level/list";
 
     packId = 1031;
 
@@ -28,11 +28,12 @@ void ConfigInfo::Init()
    {
         qDebug()<<"配置文件已存在";
         //url接口地址
-        loginUrl = Get("url","loginUrl").toString();//登录接口
-        autoPackUrl = Get("url","autoPackUrl").toString();  //待入库产品添加接口
-        configUrl = Get("url","configUrl").toString();//配置接口
-        selectValueUrl = Get("url","selectValueUrl").toString();//商品列表接口
-        levelUrl = Get("url","levelUrl").toString();//等级列表接口
+//        loginUrl = Get("url","loginUrl").toString();//登录接口
+//        autoPackUrl = Get("url","autoPackUrl").toString();  //待入库产品添加接口
+//        configUrl = Get("url","configUrl").toString();//配置接口
+//        selectValueUrl = Get("url","selectValueUrl").toString();//商品列表接口
+//        levelUrl = Get("url","levelUrl").toString();//等级列表接口
+        baseUrl = Get("url","baseUrl").toString();//服务器地址
 
         //本机用户信息
         packId = Get("user","packId").toInt();//打包点id
@@ -42,11 +43,12 @@ void ConfigInfo::Init()
    }else{
         qDebug()<<"配置文件不存在";
         //url接口地址
-        Set("url","autoPackUrl","http://erp.itwsw.cn/api/v1/product/pending");
-        Set("url","loginUrl","http://erp.itwsw.cn/api/v1/signin");
-        Set("url","configUrl","http://erp.itwsw.cn/api/v1/configuration");
-        Set("url","selectValueUrl","http://erp.itwsw.cn/api/v1/goods/list");
-        Set("url","levelUrl","http://erp.itwsw.cn/api/v1/level/list");
+//        Set("url","autoPackUrl","http://erp.itwsw.cn/api/v1/product/pending");
+//        Set("url","loginUrl","http://erp.itwsw.cn/api/v1/signin");
+//        Set("url","configUrl","http://erp.itwsw.cn/api/v1/configuration");
+//        Set("url","selectValueUrl","http://erp.itwsw.cn/api/v1/goods/list");
+//        Set("url","levelUrl","http://erp.itwsw.cn/api/v1/level/list");
+        Set("url","baseUrl","http://erp.itwsw.cn/api");
 
         //本机用户信息
         Set("user","packId",1031);

+ 6 - 6
configinfo.h

@@ -12,20 +12,20 @@ class ConfigInfo
 public:
     ConfigInfo();
 
-//    QString baseUrl;
+    QString baseUrl;//服务器接口地址
     quint16 packId;
     QString printerName;
 
 
-    QString autoPackUrl;//待入库产品添加接口
+//    QString autoPackUrl;//待入库产品添加接口
 
-    QString loginUrl;//登录接口
+//    QString loginUrl;//登录接口
 
-    QString configUrl;//配置接口
+//    QString configUrl;//配置接口
 
-    QString selectValueUrl;//商品列表接口
+//    QString selectValueUrl;//商品列表接口
 
-    QString levelUrl;//等级列表接口
+//    QString levelUrl;//等级列表接口
 
 
 

+ 65 - 12
handle/autopackutils.cpp

@@ -12,26 +12,30 @@ AutoPackUtils::AutoPackUtils()
  * @brief 把打包数据存入本地数据库后,上传服务器打包数据
  * @param info
  */
-void AutoPackUtils::doSend(QSharedPointer<PackInfo> &info)
+void AutoPackUtils::doSend(QJsonObject json)
 {
-    if(info.isNull()) return;
-    //TODO:发送码单 packinfo 数据, 转换为 json数据发送
-    QJsonObject json = toJson(info);
+    if(json.isEmpty()) return;
+    //保存码单,上传服务器成功后,以codeSingle为条件更改同步字段;
+    this->codeSingle = json["code_single"].toString();
+//    qDebug()<<codeSingle;
+
     _request.setUserToken(QString::number(GlobalInfo::this_()->user().accountId),GlobalInfo::this_()->user().acessToken);
 //    qDebug()<<QString::number(GlobalInfo::this_()->user().accountId);
 //    qDebug()<<GlobalInfo::this_()->user().acessToken;
+//    _request.post(GlobalInfo::this_()->config().baseUrl+"/v1/product/pending",json);
 
-//    _request.post(GlobalInfo::this_()->config().autoPackUrl,json);
-
-//    qDebug()<<json;
-}  // http://doc.vanlai.net:3001/web/#/1?page_id=64
+}
 
 void AutoPackUtils::httpResult(int emitcode, const QJsonObject body)
 {
     qDebug()<<emitcode;
     qDebug()<<body;
-    if(emitcode==200&&body["product_id"].toInt()!=0){
-        database.changeState(codeSingle);
+    if(emitcode==200&&body["message"].toString() == ""){
+        if(database.changeState(codeSingle)){
+                qDebug()<<"同步成功";
+                return;
+        }
+        qDebug()<<"同步失败";
     }
 }
 
@@ -61,8 +65,6 @@ void AutoPackUtils::insertDetailsSQL(QSharedPointer<BoxInfo> boxes,QString codeS
 void AutoPackUtils::insertProductSQL(QSharedPointer<PackInfo> packes)
 {
     if(packes.isNull()) return;
-    //保存码单,上传服务器成功后,以codeSingle为条件更改同步字段;
-    this->codeSingle = packes->codeSingle();
 
     productData.goods_id = packes->goodsID();
     productData.code_single = packes->codeSingle();
@@ -92,9 +94,12 @@ void AutoPackUtils::insertProductSQL(QSharedPointer<PackInfo> packes)
 //将打包数据转换为json数据
 QJsonObject AutoPackUtils::toJson(QSharedPointer<PackInfo> &info)
 {
+
     QJsonObject json;
     QJsonObject detailsjson;
     QJsonArray jsonarray;
+    if(info.isNull()) return json;
+
     for(int i = 0;i<info->boxes().size();i++){
         detailsjson.insert("case_number",info->boxes().at(i)->caseNumber());
         detailsjson.insert("box_weight",info->boxes().at(i)->box_weight);
@@ -123,5 +128,53 @@ QJsonObject AutoPackUtils::toJson(QSharedPointer<PackInfo> &info)
     json.insert("remark",info->remark);
 
 
+    return json;
+}
+
+QJsonObject AutoPackUtils::toJsonMap(QMap<QString,QString> product,QList<QMap<QString,QString>> details)
+{
+//    qDebug()<<"自动打包测试";
+//    qDebug()<<details.at(0).value("code_single");
+    QJsonObject json;
+    QJsonObject detailsjson;
+    QJsonArray jsonarray;
+
+    if(product.isEmpty()){
+        qDebug()<<"product数据为空";
+        return json;
+    }
+
+    if(details.isEmpty()){
+        qDebug()<<"details数据为空";
+        return json;
+    }
+
+    for(int i = 0;i<details.length();i++){
+        detailsjson.insert("case_number",details.at(i).value("case_number"));
+        detailsjson.insert("box_weight",details.at(i).value("box_weight"));
+        detailsjson.insert("tube_number",details.at(i).value("tube_number"));
+        detailsjson.insert("bucket_weight",details.at(i).value("bucket_weight"));
+        detailsjson.insert("gross_weight",details.at(i).value("gross_weight"));
+        detailsjson.insert("net_weight",details.at(i).value("net_weight"));
+        detailsjson.insert("box_weight",details.at(i).value("box_weight"));
+        detailsjson.insert("sort",details.at(i).value("sort"));
+        detailsjson.insert("remark",details.at(i).value("remark"));
+        jsonarray.append(detailsjson);
+    }
+    json.insert("goods_id",product.value("goods_id"));
+    json.insert("code_single",product.value("code_single"));
+    json.insert("quantity",product.value("quantity"));
+    json.insert("level_id",product.value("level_id"));
+    json.insert("tube_number",product.value("tube_number"));
+    json.insert("gross_weight",product.value("gross_weight"));
+    json.insert("net_weight",product.value("net_weight"));
+    json.insert("machine_no",product.value("machine_no"));
+    json.insert("packing_time",product.value("packing_time"));
+    json.insert("packing_type",product.value("packing_type"));
+    json.insert("carton_type",product.value("carton_type"));
+    json.insert("operator",product.value("operator_id"));
+    json.insert("details",jsonarray);
+    json.insert("remark",product.value("remark"));
+
     return json;
 }

+ 2 - 1
handle/autopackutils.h

@@ -19,13 +19,14 @@ public:
     AutoPackUtils();
 public slots:
 
-    void doSend(QSharedPointer<PackInfo> & info);
+    void doSend(QJsonObject json);
     void httpResult(int emitcode, const QJsonObject body);
 
     void insertDetailsSQL(QSharedPointer<BoxInfo> boxes,QString codeSingle);
     void insertProductSQL(QSharedPointer<PackInfo> packes);
 
     QJsonObject toJson(QSharedPointer<PackInfo> &info);
+    QJsonObject toJsonMap(QMap<QString,QString> product,QList<QMap<QString,QString>> details);
 private:
     HttpRequest _request;
     DanJuMuBan djmb;

+ 4 - 4
handle/database.cpp

@@ -82,12 +82,12 @@ bool Database::createDetailsDatabase()
 
     if(success)
     {
-        qDebug() << QObject::tr("details数据库表创建成功!\n");
+        qDebug() << QObject::tr("details数据库表创建成功!");
         return true;
     }
     else
     {
-        qDebug() << QObject::tr("details数据库表已存在!\n");
+        qDebug() << QObject::tr("details数据库表已存在!");
         return false;
     }
 }
@@ -193,14 +193,14 @@ bool Database::del(QString &table, QString &expression)
     return (query.exec(sql)) ? true : false;
 }
 
-QList<QMap<QString,QString>> Database::GetValues(QString &table, QStringList &values)
+QList<QMap<QString,QString>> Database::GetValues(QString table, QStringList &values,QString condition)
 {
     dbmxdata.clear();
     dbmxlist.clear();
     QSqlDatabase db = QSqlDatabase::database("db");
     QSqlQuery query(db);
 
-    QString sql = QString("select * from ") + table;
+    QString sql = QString("select * from ") + table + condition;
     query.exec(sql);
     while (query.next())
     {

+ 1 - 1
handle/database.h

@@ -55,7 +55,7 @@ public:
 //    bool insert(QString &table, QStringList &names, QStringList &values);
     bool update(QString &table, QStringList &names, QStringList &values, QString &expression);
     bool del(QString &table, QString &expression);
-    QList<QMap<QString,QString>> GetValues(QString &table, QStringList &values);
+    QList<QMap<QString,QString>> GetValues(QString table, QStringList &values,QString condition = "");
 
     bool insertProduct(product_data productData);
     bool insertDetails(details_data detailsData);

+ 2 - 2
handle/remotepackconfig.cpp

@@ -102,7 +102,7 @@ void RemotePackConfig::refConfig()
 //    _aid = QString::number(body["user_id"].toInt());
 //    _token = body["access_token"].toString();
     _request.setUserToken(QString::number( glo->user().accountId) ,glo->user().acessToken);
-    QString url = glo->config().configUrl;
+    QString url = glo->config().baseUrl+"/v1/configuration";
     _request.get(url);
 }
 
@@ -142,7 +142,7 @@ void RemotePackConfig::refDengJiList()
 {
     getDdengji = true;
     // todo: http://doc.vanlai.net:3001/web/#/1?page_id=35
-    QString url = GlobalInfo::this_()->config().levelUrl;
+    QString url = GlobalInfo::this_()->config().baseUrl+"/v1/level/list";
     _request.setUserToken(QString::number(GlobalInfo::this_()->user().accountId),GlobalInfo::this_()->user().acessToken);
     _request.get(url);
 

+ 14 - 0
mainwindow.cpp

@@ -9,10 +9,13 @@ MainWindow::MainWindow(QWidget *parent)
     connect(ui->widgetLogin,&LoginForm::loginFinish,this,&MainWindow::backMenu);
     connect(ui->pageSelectValue,&SelectValueForm::back,this,&MainWindow::backMenu);
     connect(ui->pageAutoPack,&AutoPackForm::back,this,&MainWindow::backMenu);
+    connect(ui->pagePackDetail,&PackDetailForm::back,this,&MainWindow::backMenu);
+    connect(ui->pageSettings,&SettingsForm::back,this,&MainWindow::backMenu);
 
     connect(ui->pageSelectValue,&SelectValueForm::selectProject,this,&MainWindow::pageStatusChange);
     ui->stackedWidget->setCurrentWidget(ui->pageLogin);
     connect(ui->pageAutoPack,&AutoPackForm::djmbbox,this,&MainWindow::changedjmb);
+    connect(ui->widgetLogin,&LoginForm::SettingsClicked,this,&MainWindow::changeToSettings);
 
     database.openDB();
     database.createDetailsDatabase();
@@ -41,8 +44,19 @@ void MainWindow::pageStatusChange(const ProjectInfo & info, int status)
     }
 }
 
+void MainWindow::changeToSettings()
+{
+    ui->stackedWidget->setCurrentWidget(ui->pageSettings);
+}
+
 void MainWindow::backMenu()
 {
+    int user = GlobalInfo::this_()->user().userId;
+//    qDebug()<<user;
+    if(user==0){
+        ui->stackedWidget->setCurrentWidget(ui->pageLogin);
+        return;
+    }
     ui->stackedWidget->setCurrentWidget(ui->pageMain);
 }
 

+ 1 - 0
mainwindow.h

@@ -27,6 +27,7 @@ private:
     void pageStatusChange(const ProjectInfo & info, int status);
     void changedjmb(QImage image);
     Database database;
+    void changeToSettings();
 
 private:
     Ui::MainWindow *ui;

+ 8 - 1
mainwindow.ui

@@ -33,7 +33,7 @@
     <item>
      <widget class="QStackedWidget" name="stackedWidget">
       <property name="currentIndex">
-       <number>5</number>
+       <number>2</number>
       </property>
       <widget class="QWidget" name="pageMain">
        <layout class="QHBoxLayout" name="horizontalLayout_2">
@@ -236,6 +236,7 @@ color: rgb(255, 255, 255);</string>
         </item>
        </layout>
       </widget>
+      <widget class="SettingsForm" name="pageSettings"/>
       <widget class="QWidget" name="pageLogin">
        <layout class="QVBoxLayout" name="verticalLayout_2">
         <item>
@@ -356,6 +357,12 @@ color: rgb(255, 255, 255);</string>
    <header>widget/packdetailform.h</header>
    <container>1</container>
   </customwidget>
+  <customwidget>
+   <class>SettingsForm</class>
+   <extends>QWidget</extends>
+   <header>widget/settingsform.h</header>
+   <container>1</container>
+  </customwidget>
  </customwidgets>
  <resources/>
  <connections/>

+ 6 - 2
widget/autopackform.cpp

@@ -16,7 +16,7 @@ AutoPackForm::~AutoPackForm()
 
 void AutoPackForm::on_pushBack_clicked()
 {
-    aputils.doSend(packinfo);
+    aputils.doSend(aputils.toJson(packinfo));
     emit back();
 }
 
@@ -39,10 +39,14 @@ void AutoPackForm::init()
 void AutoPackForm::on_addPackList_clicked()
 {
 
+
+
     //把数据添加到数据库里
     aputils.insertProductSQL(packinfo);
     //TODO: 缓存箱单数据,页面显示情空
-    aputils.doSend(packinfo);
+
+    //发送码单 packinfo 数据, 转换为 json数据发送
+    aputils.doSend(aputils.toJson(packinfo));
     //TODO: 初始化码单信息
     packinfo.reset(new PackInfo(_info));
     packinfo->operator_id = GlobalInfo::this_()->user().userId;

+ 6 - 1
widget/loginform.cpp

@@ -23,7 +23,7 @@ void LoginForm::on_pushLogin_clicked()
     auto glo = GlobalInfo::this_();
     auto uname = this->ui->lineUser->text();
     auto upass = this->ui->linePass->text();
-    auto url = glo->config().loginUrl;
+    auto url = glo->config().baseUrl+"/v1/signin";
     QMap<QString,QString> params;
     params.insert("password",uname);
     params.insert("username",upass);
@@ -81,3 +81,8 @@ void LoginForm::result(int code, const QJsonObject & body)
     GlobalInfo::this_()->setUser(user);
     emit loginFinish();
 }
+
+void LoginForm::on_pushButton_2_clicked()
+{
+    emit SettingsClicked();
+}

+ 3 - 0
widget/loginform.h

@@ -18,12 +18,15 @@ public:
 
 signals:
     void loginFinish();
+    void SettingsClicked();
 private slots:
     void on_pushLogin_clicked();
 
     void result(int code, const QJsonObject & body);
 
     void clear();
+    void on_pushButton_2_clicked();
+
 private:
     HttpRequest  * request();
 private:

+ 47 - 4
widget/packdetailform.cpp

@@ -8,6 +8,7 @@ PackDetailForm::PackDetailForm(QWidget *parent) :
     ui->setupUi(this);
 //    connect(&packConfig,&RemotePackConfig::configUpdate,this,&PackDetailForm::upconfig);
     productList();
+    detailsList();
 }
 
 PackDetailForm::~PackDetailForm()
@@ -15,10 +16,14 @@ PackDetailForm::~PackDetailForm()
     delete ui;
 }
 
+void PackDetailForm::on_pushBack_clicked()
+{
+    emit back();
+}
 
 void PackDetailForm::on_pushButton_clicked()
 {
-    changeTable(database.GetValues(dataname,productSqlList));
+    changeTable(database.GetValues("product",productSqlList));
 }
 
 //往QTableWidget里添加数据
@@ -27,7 +32,9 @@ void PackDetailForm::changeTable(QList<QMap<QString,QString>> productList)
 //    qDebug()<<productList.at(0).value("goods_id");
     if(productList.isEmpty()){
         QMessageBox::information(this,tr("提示"),tr("数据为空"));
+        return;
     }
+    product = productList;
     ui->tableWidget->setColumnCount(11);
     for(int i = 0;i<productList.size();i++){
         ui->tableWidget->insertRow(i);
@@ -39,19 +46,42 @@ void PackDetailForm::changeTable(QList<QMap<QString,QString>> productList)
         ui->tableWidget->setItem(i,5,new QTableWidgetItem(productList.at(i).value("quantity")));
         ui->tableWidget->setItem(i,6,new QTableWidgetItem(productList.at(i).value("packing_time")));
         auto tongbu_btn =  new QPushButton("同步");
-        connect(tongbu_btn, SIGNAL(clicked(bool)), this, SLOT(tongbu_clicked()));
+        connect(tongbu_btn,&QPushButton::clicked,[i,this](){this->tongbu_clicked(i);});
+//        connect(tongbu_btn, SIGNAL(clicked(bool)), this, SLOT(tongbu_clicked()));
         auto code_single_btn = new QPushButton("打印码单");
+        connect(code_single_btn,SIGNAL(clicked(bool)),this,SLOT(code_single_clicked()));
         auto case_nember_btn = new QPushButton("打印箱单");
+        connect(case_nember_btn,SIGNAL(clicked(bool)),this,SLOT(case_number_clicked()));
+        auto details = new QTreeWidget(this);
         ui->tableWidget->setCellWidget(i,7,tongbu_btn);
         ui->tableWidget->setCellWidget(i,8,code_single_btn);
         ui->tableWidget->setCellWidget(i,9,case_nember_btn);
+        ui->tableWidget->setCellWidget(i,10,details);
     }
 }
 
 //同步
-void PackDetailForm::tongbu_clicked()
+void PackDetailForm::tongbu_clicked(int row)
+{
+//    qDebug()<<"行数:" << row;
+    if(ui->tableWidget->item(row,0)->text()!="未同步"){
+        QMessageBox::information(this,tr("垃圾"),tr("打我啊"));
+        return;
+    }
+    QString condition = " where code_single="+product.at(row).value("code_single");
+    details = database.GetValues("details",detailSqlList,condition);
+    autoPack.doSend(autoPack.toJsonMap(product.at(row),details));
+    ui->tableWidget->setItem(row,0,new QTableWidgetItem("请刷新"));
+}
+
+void PackDetailForm::code_single_clicked()
 {
-    qDebug()<<"";
+    qDebug()<<"打印码单";
+}
+
+void PackDetailForm::case_number_clicked()
+{
+    qDebug()<<"打印箱单";
 }
 
 void PackDetailForm::productList()
@@ -72,3 +102,16 @@ void PackDetailForm::productList()
     productSqlList.append("operator_id");
     productSqlList.append("remark");
 }
+
+void PackDetailForm::detailsList()
+{
+    detailSqlList.append("code_single");
+    detailSqlList.append("case_number");
+    detailSqlList.append("box_weight");
+    detailSqlList.append("tube_number");
+    detailSqlList.append("bucket_weight");
+    detailSqlList.append("gross_weight");
+    detailSqlList.append("net_weight");
+    detailSqlList.append("sort");
+    detailSqlList.append("remark");
+}

+ 18 - 2
widget/packdetailform.h

@@ -5,6 +5,9 @@
 //#include "handle/remotepackconfig.h"
 #include "handle/database.h"
 #include "QMessageBox"
+#include "QTreeWidget"
+#include "packinfo.h"
+#include "autopackform.h"
 
 namespace Ui {
 class PackDetailForm;
@@ -22,15 +25,28 @@ public:
 private slots:
     void on_pushButton_clicked();
     void changeTable(QList<QMap<QString,QString>> productList);
-    void tongbu_clicked();
+    void tongbu_clicked(int row);
+    void code_single_clicked();
+    void case_number_clicked();
+
     void productList();
+    void detailsList();
+
+    void on_pushBack_clicked();
+
+signals:
+    void back();
 
 private:
     Ui::PackDetailForm *ui;
 //    RemotePackConfig packConfig;
     Database database;
-    QString dataname = "product";
+    QList<QMap<QString,QString>> product;
+    QList<QMap<QString,QString>> details;
     QStringList productSqlList;
+    QStringList detailSqlList;
+    QSharedPointer<PackInfo> packinfo;
+    AutoPackUtils autoPack;
 };
 
 #endif // PACKDETAILFORM_H

+ 1 - 1
widget/selectvalueform.cpp

@@ -22,7 +22,7 @@ void SelectValueForm::getInfo(int page, int pageListNum)
     nowPage = page;
     this->pageListNum = pageListNum;
     auto glo = GlobalInfo::this_();
-     auto url = glo->config().selectValueUrl + QString("?page=%1&limit=%2").arg(nowPage).arg(pageListNum);
+     auto url = glo->config().baseUrl + QString("/v1/goods/list?page=%1&limit=%2").arg(nowPage).arg(pageListNum);
      _request.setUserToken(QString::number(GlobalInfo::this_()->user().accountId),GlobalInfo::this_()->user().acessToken);
      _request.get(url);
 

+ 19 - 0
widget/settingsform.cpp

@@ -0,0 +1,19 @@
+#include "settingsform.h"
+#include "ui_settingsform.h"
+
+SettingsForm::SettingsForm(QWidget *parent) :
+    QWidget(parent),
+    ui(new Ui::SettingsForm)
+{
+    ui->setupUi(this);
+}
+
+SettingsForm::~SettingsForm()
+{
+    delete ui;
+}
+
+void SettingsForm::on_pushButton_2_clicked()
+{
+    emit back();
+}

+ 28 - 0
widget/settingsform.h

@@ -0,0 +1,28 @@
+#ifndef SETTINGSFORM_H
+#define SETTINGSFORM_H
+
+#include <QWidget>
+
+namespace Ui {
+class SettingsForm;
+}
+
+class SettingsForm : public QWidget
+{
+    Q_OBJECT
+
+public:
+    explicit SettingsForm(QWidget *parent = nullptr);
+    ~SettingsForm();
+
+private slots:
+    void on_pushButton_2_clicked();
+
+signals:
+    void back();
+
+private:
+    Ui::SettingsForm *ui;
+};
+
+#endif // SETTINGSFORM_H

+ 137 - 0
widget/settingsform.ui

@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>SettingsForm</class>
+ <widget class="QWidget" name="SettingsForm">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>641</width>
+    <height>511</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <widget class="QLabel" name="label">
+   <property name="geometry">
+    <rect>
+     <x>60</x>
+     <y>50</y>
+     <width>72</width>
+     <height>15</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>打印机</string>
+   </property>
+  </widget>
+  <widget class="QComboBox" name="comboBox">
+   <property name="geometry">
+    <rect>
+     <x>190</x>
+     <y>50</y>
+     <width>87</width>
+     <height>22</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_2">
+   <property name="geometry">
+    <rect>
+     <x>60</x>
+     <y>90</y>
+     <width>72</width>
+     <height>15</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>称</string>
+   </property>
+  </widget>
+  <widget class="QComboBox" name="comboBox_2">
+   <property name="geometry">
+    <rect>
+     <x>190</x>
+     <y>90</y>
+     <width>87</width>
+     <height>22</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_3">
+   <property name="geometry">
+    <rect>
+     <x>60</x>
+     <y>130</y>
+     <width>72</width>
+     <height>15</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>服务器</string>
+   </property>
+  </widget>
+  <widget class="QLineEdit" name="lineEdit">
+   <property name="geometry">
+    <rect>
+     <x>190</x>
+     <y>130</y>
+     <width>271</width>
+     <height>21</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_4">
+   <property name="geometry">
+    <rect>
+     <x>60</x>
+     <y>170</y>
+     <width>72</width>
+     <height>15</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>规则</string>
+   </property>
+  </widget>
+  <widget class="QTextEdit" name="textEdit">
+   <property name="geometry">
+    <rect>
+     <x>190</x>
+     <y>170</y>
+     <width>271</width>
+     <height>161</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="pushButton">
+   <property name="geometry">
+    <rect>
+     <x>190</x>
+     <y>430</y>
+     <width>93</width>
+     <height>28</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>保存</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="pushButton_2">
+   <property name="geometry">
+    <rect>
+     <x>350</x>
+     <y>430</y>
+     <width>93</width>
+     <height>28</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>返回</string>
+   </property>
+  </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>