瀏覽代碼

Merge branch 'master' of http://smartcost.f3322.net:3000/SmartCost/YangHuCost

TonyKang 6 年之前
父節點
當前提交
2de578480a

+ 14 - 1
modules/users/controllers/cld_controller.js

@@ -148,6 +148,19 @@ class CLDController {
             response.json({error: 1, msg: err});
         }
     }
+
+    /**
+     * 获取编办列表
+     *
+     * @param request
+     * @param response
+     * @return {Promise.<void>}
+     */
+    async getCompilationList (request, response) {
+        let compilationModel = new CompilationModel();
+        const compilationList = await compilationModel.getList();
+        response.json({error: 0, msg: 'success', data: compilationList});
+    }
 }
 
-export default CLDController;
+export default CLDController;

+ 82 - 5
modules/users/controllers/login_controller.js

@@ -22,12 +22,89 @@ class LoginController {
      * @return {void}
      */
     async index(request, response) {
-        let sessionUser = request.session.sessionUser;
-        if (sessionUser !== undefined && sessionUser.ssoId >= 0) {
-            return response.redirect("/pm");
-        }
+        // 判断是否有带token和ssoID参数
+        if (request.query.ssoID !== undefined && request.query.token !== undefined) {
+            let ssoID = request.query.ssoID;
+            let token = request.query.token;
+            let preferenceSetting = {};
+            let compilationList = [];
+            try {
+                let userModel = new UserModel();
+                // 调用接口验证登录信息
+                let responseData = await userModel.getInfoFromSSO2(ssoID, token);
+                // 先判断返回值是否为未激活状态
+                if ( responseData === '-3') {
+                    throw '因邮箱未完成认证,账号未激活;去<a href="https://sso.smartcost.com.cn" target="_blank">激活</a>。';
+                }
+                if ( responseData === '-2') {
+                    throw 'token已过期,请重新登录Z+获取';
+                }
+                responseData = JSON.parse(responseData);
+                if (typeof responseData !== 'object') {
+                    throw 'ssoId错误或token过期';
+                }
+
+                if (responseData.length <= 0) {
+                    throw '接口返回数据错误';
+                }
+                let userData = responseData[0];
+                let sessionUser = {
+                    ssoId: userData.id,
+                    username: userData.username,
+                    email: userData.useremail,
+                    mobile: userData.mobile,
+                };
+
+                request.session.sessionUser = sessionUser;
+                // 记录用户数据到数据库
+                let result = await userModel.markUser(sessionUser, request);
+
+                // 获取偏好设置
+                let settingModel = new SettingModel();
+                preferenceSetting = await settingModel.getPreferenceSetting(request.session.sessionUser.id);
+                if (!result) {
+                    throw '标记用户信息失败!';
+                }
+                let compilationModel = new CompilationModel();
+                if (preferenceSetting.login_ask === 1 || preferenceSetting.select_version === ''){
+                    preferenceSetting.login_ask = 1;
+                    compilationList = await  compilationModel.getList();
+                } else {
+                    compilationList = [];
+                }
+                // 获取编办信息
+                let sessionCompilation = request.session.sessionCompilation;
 
-        response.render('users/html/login', {});
+                if (preferenceSetting.login_ask === 0 && !sessionCompilation &&
+                    preferenceSetting.select_version !== '') {
+                    let compilationData = await compilationModel.getCompilationById(preferenceSetting.select_version);
+                    // 判断当前用户的是使用免费版还是专业版
+                    let compilationVersion = await userModel.getVersionFromUpgrade(sessionUser.ssoId, preferenceSetting.select_version);
+                    request.session.compilationVersion = compilationVersion;
+                    request.session.sessionCompilation = compilationData;
+                    if(request.session.sessionUser.latest_used !== preferenceSetting.select_version) await userModel.updateLatestUsed(request.session.sessionUser.id,preferenceSetting.select_version);
+                }
+                console.log(`${request.session.sessionUser.real_name}--id:${request.session.sessionUser.id}--登录了系统`);
+                if (preferenceSetting.login_ask === 1 || preferenceSetting.select_version === '') {
+                    let renderData = {
+                        versionData: compilationList,
+                    };
+                    response.render('users/html/login-ver', renderData);
+                } else {
+                    return response.redirect("/pm");
+                }
+            } catch (error) {
+                console.log(error)
+                return response.redirect("/login");
+            }
+        } else {
+            let sessionUser = request.session.sessionUser;
+            if (sessionUser !== undefined && sessionUser.ssoId >= 0) {
+                return response.redirect("/pm");
+            } else {
+                response.render('users/html/login', {});
+            }
+        }
     }
 
     /**

+ 32 - 0
modules/users/models/user_model.js

@@ -81,6 +81,38 @@ class UserModel extends BaseModel {
     }
 
     /**
+     * 根据用户id和token调用SSO接口获取信息
+     *
+     * @param {string} username
+     * @param {string} password
+     * @return {object}
+     */
+    async getInfoFromSSO2(ssoID, token) {
+        let postData = {
+            url: 'http://sso.smartcost.com.cn/building/api/login/auth',
+            form: {ssoID: ssoID, token: token},
+            encoding: 'utf8'
+        };
+        return new Promise(function (resolve, reject) {
+            try {
+                // 请求接口
+                Request.post(postData, function (err, postResponse, body) {
+                    if (err) {
+                        console.log('111');
+                        throw '请求错误';
+                    }
+                    if (postResponse.statusCode !== 200) {
+                        throw '通行证验证失败!';
+                    }
+                    resolve(body);
+                });
+            } catch (error) {
+                reject([]);
+            }
+        });
+    }
+
+    /**
      * 标记用户
      *
      * @param {object} userData

+ 3 - 1
modules/users/routes/cld_route.js

@@ -20,7 +20,9 @@ module.exports = function (app) {
 
     router.get('/getUsersAndCompilation', cldController.getUsersAndCompilationList);
 
+    router.get('/getCompilationList', cldController.getCompilationList);
+
     router.post('/setUserUpgrade', cldController.setUsersUpgrade);
 
     app.use('/cld',router)
-};
+};

+ 18 - 11
server.js

@@ -62,19 +62,26 @@ app.use(function (req, res, next) {
         next();
     } else {
         try {
-            // 判断session
-            let sessionUser = req.session.sessionUser;
-            if (!sessionUser) {
-                //处理 ajax 请求 session 过期问题
-                if (req.headers["x-requested-with"] != null
-                    && req.headers["x-requested-with"] == "XMLHttpRequest"
-                    && req.url != "/login") {
-                    return res.json({ret_code: 99, ret_msg: '登录信息失效,请您重新登录'});
-                }else {
-                    throw 'session error';
+            if (req.query.ssoID !== undefined && req.query.ssoID !== null && req.query.token !== undefined && req.query.token !== null) {
+                delete req.session.sessionUser;
+                delete req.session.sessionCompilation;
+                return res.redirect('/login' + url);
+            } else {
+                // 判断session
+                let sessionUser = req.session.sessionUser;
+                if (!sessionUser) {
+
+                    //处理 ajax 请求 session 过期问题
+                    if (req.headers["x-requested-with"] != null
+                        && req.headers["x-requested-with"] == "XMLHttpRequest"
+                        && req.url != "/login") {
+                        return res.json({ret_code: 99, ret_msg: '登录信息失效,请您重新登录'});
+                    } else {
+                        throw 'session error';
+                    }
                 }
+                res.locals.sessionUser = sessionUser;
             }
-            res.locals.sessionUser = sessionUser;
         } catch (error) {
             // 最后一个页面存入session
             req.session.lastPage = url;

+ 15 - 1
web/building_saas/css/main.css

@@ -36,6 +36,9 @@ a{
 .modal-footer{
     padding:.8rem 1rem;
 }
+.form-check .form-check-label,.form-radio .form-check-label{
+    cursor: pointer;
+}
 /*自定义css*/
 .login-body,.login-html{
     height:100%;
@@ -59,6 +62,10 @@ a{
     background:#fff;
     box-shadow:#333 1px 1px 5px
 }
+.ver-panel {
+    width:100%;
+    top:10%;
+}
 .header {
     border-bottom: 1px solid #ccc
 }
@@ -194,6 +201,9 @@ a{
     overflow: hidden;
     width:100%
 }
+.main-data-top-side{
+    overflow: hidden
+}
 .main-content.col-lg-8{
     width:66.666667%
 }
@@ -531,6 +541,7 @@ a{
 }
 .box-text-style {
     font-size: 12px;
+    font-family:"Microsoft YaHei"
 }
 .box-text-style p{
     margin:0 0 2px 0;
@@ -546,6 +557,9 @@ a{
 .box-text-style table p{
     text-align: left;
 }
+.sys-setting-nav .nav-link{
+    padding:.3rem 1rem;
+}
 /*快捷切换单位工程*/
 .navbar-crumb{
     position: relative;
@@ -633,4 +647,4 @@ a{
         white-space: nowrap;
         max-width:80px;
     }
-}
+}

文件差異過大導致無法顯示
+ 53 - 0
web/users/html/login-ver.html