unknown
2025-09-10 a4fc45393e242f15517f9347f95e55c77887b332
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
/* 自定义头文件 */
#include "clientmainwindow.h"
#include "ui_clientmainwindow.h"
 
/* 系统头文键 */
#include <QMessageBox>
 
/* 预处理指令·编译指示 */
#pragma execution_character_set("utf-8")
 
/* 构造函数 */
ClientMainWindow::ClientMainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::ClientMainWindow)
{
    ui->setupUi(this);
 
    /* 初始化socket网络连接 */
    m_client = new QTcpSocket(this);
    m_client->connectToHost("127.0.0.1",16888);
    if(m_client->waitForConnected()){
 
        /* 连上之后,初始化其他界面,并且显示登录界面 */
        init_Ui();//本来的位置
 
        /* 统一定一个收包的槽 */
        connect(m_client,SIGNAL(readyRead()),this,SLOT(readSlot()));
    }
    else
    {
        qDebug()<<"socket connect fail ! ";
        QMessageBox::critical(this,"网络错误","网络连接断开!");
 
        /* 好用,很暴力的关闭,但是这里的情况就是需要它这样的 */
        exit(0);
    }
 
    /* 测试的位置 */
    //init_Ui();
}
 
/* 析构函数 */
ClientMainWindow::~ClientMainWindow()
{
    delete ui;
}
 
/* 进行有关ui的初始化 */
void ClientMainWindow::init_Ui()
{
    /* 在ui设计界面,默认有两个页面,我们把他清除 */
    ui->tabWidget->clear();
 
    /* 页面菜单的点击效果 */
    connect(ui->action_logout,SIGNAL(triggered(bool)),this,SLOT(action_logoutSlot()));
    connect(ui->action_exit,&QAction::triggered,this,[=]{close();});//退出
 
    /* login界面,注意重载构造函数,把这个socket共享出去 */
    m_loginUi = new Login(m_client,this);
    m_loginUi->show();
 
    /* 添加子界面的地方 */
}
 
/* 响应->登录业务 */
void ClientMainWindow::loginProcess(LoginRes *res)
{
    /* 这里进行,登录业务的处理 */
    /* 通过用户的权限,显示不同的回应结果 */
    qDebug()<<"登录用户名:"<<QString::fromLocal8Bit(res->user_name);//res->user_name会乱码
    qDebug()<<"用户ID:"<<res->emp_id;
    qDebug()<<"状态:"<<res->status;
 
    /* 先检查本次提交的用户登录信息的返回状态 */
    /*
        账户状态【0失败,1正常,2离职,3禁用,4注销】
    */
 
    if(res->status == 0){
 
        /* 账户或者密码输入错误,向登录界面发送信号 */
        QString str = "账户或者密码输入错误";
        emit login_callback_signal(str);
    }
    else if(res->status == 1){
 
        /* 切换时,一定要清空本界面的错误信息 */
        ui->label_info->setText("");
        /* 切换时,也要清空本界面的输入信息 */
 
        /* 用户登录成功,向登录界面发送信号 */
        QString str = "用户登录成功";
        emit login_callback_signal(str);
 
        /* 根据权限,决定显示哪些界面 */
        if(res->per.admin == 1){//超级用户
            m_loginUi->hide();
            this->show();
        }
        else if(res->status == 2){//普通用户·具体个别权限独立控制
 
            /* 先关闭登录界面 */
            m_loginUi->hide();
 
            if(res->per.attend_manage == 1){
                //
            }
            if(res->per.device_manage == 1){
                //醇哥?
            }
            if(res->per.history == 1){
                //
            }
            if(res->per.image_input == 1){
                //
            }
            if(res->per.log_search == 1){
                //
            }
            if(res->per.map_change == 1){
                //
            }
            if(res->per.monitor_back == 1){
                //
            }
            if(res->per.notify_manage == 1){
                //
            }
            if(res->per.version_manage == 1){
                //
            }
        }
    }
    else if (res->status == 2) {
 
        /* 该用户已离职,向登录界面发送信号 */
        QString str = "该用户已离职";
        emit login_callback_signal(str);
    }
    else if (res->status == 3) {
 
        /* 该账号已禁用,向登录界面发送信号 */
        QString str = "该账号已禁用";
        emit login_callback_signal(str);
    }
    else if (res->status == 4) {
 
        /* 该账号已注销,向登录界面发送信号 */
        QString str = "该账号已注销";
        emit login_callback_signal(str);
    }
}
 
/* 响应->注册业务 */
void ClientMainWindow::registerProcess(RegisterRes *res)
{
    if(res->emp_id == 0){//通过检查id,判断是否成功注册
        /* 注册失败 */
        QString str = QString::fromLocal8Bit(res->res_info);
        emit register_callback_signal(false,str,0);
    }else {
        /* 注册成功 */
        QString str = "注册成功";
        emit register_callback_signal(true,str,res->emp_id);
    }
}
 
/* 专门收包的槽 */
void ClientMainWindow::readSlot(){
    QByteArray buffer = m_client->readAll();//这个函数,会一次性读取所有数据缓存
    qDebug()<<"buffer size:"<<buffer.size()<<endl<<"buffer:"<<buffer;
 
    /* 强制转换解包 */
    Head *res = (Head *)buffer.data();
    qDebug()<<" bag type:"<<res->type<<"bag length:"<<res->len;
 
    /* 检查服务器发来的响应包的类型 */
    if(res->type == LOGIN_RES){
        LoginRes *res = (LoginRes *)buffer.data();
        qDebug()<<"进入登录事务处理。。。";
        loginProcess(res);
    }
    else if (res->type == REGISTER_RES) {
        RegisterRes *res = (RegisterRes *)buffer.data();
        qDebug()<<"进入注册事务处理。。。";
        registerProcess(res);
    }
    //else-if
 
}
 
/* 菜单栏·注销 */
void ClientMainWindow::action_logoutSlot()
{
    this->hide();
    m_loginUi->show();
 
    /* 切换时,一定要清空本界面的错误信息 */
    ui->label_info->setText("");
    /* 切换时,也要清空本界面的输入信息 */
}