浏览代码

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

zhongzewei 6 年之前
父节点
当前提交
ed56d7ff5b

+ 1 - 0
logs/online_logs.js

@@ -13,6 +13,7 @@ async function saveOnlineTime(req) {
     let interval_time = 10 * 60 *1000;
     let start = req.session.online_start_time;
     let end = + new Date();
+    if(start === undefined) return req.session.online_start_time ==end;
     let online_times =  end - start;
     //1秒内只记一次就好
     if(online_times < 500) return;//如果间隔太短,则忽略

+ 11 - 1
modules/all_models/user.js

@@ -85,6 +85,16 @@ let schema = {
         default: []
     },
     // 是否邮箱已通过验证
-    isUserActive: Number
+    isUserActive: Number,
+    // 是否只允许短信登录
+    isSmsLogin: {
+        type: Number,
+        default: 0
+    },
+    // 登录异常短信通知
+    isLoginValid: {
+        type: Number,
+        default: 0
+    }
 };
 mongoose.model(collectionName, new Schema(schema, {versionKey: false}));

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

@@ -8,7 +8,10 @@
 import UserModel from "../models/user_model";
 import SettingModel from "../models/setting_model";
 import CompilationModel from "../models/compilation_model";
-// import Captcha from "../models/captcha";
+import LogModel from "../models/log_model";
+import LogType from "../../common/const/log_type_const";
+const SMS = require('../models/sms');
+const moment = require('moment');
 // 验证码
 const Captcha = require("../models/captcha");
 
@@ -48,6 +51,17 @@ class LoginController {
                     throw '接口返回数据错误';
                 }
                 let userData = responseData[0];
+
+                // 判断用户是否开启了只使用短信登录
+                const userInfo = await userModel.findDataByAccount(userData.mobile);
+                if (userInfo !== undefined && userInfo !== null && userInfo.isSmsLogin === 1) {
+                    let renderData = {
+                        mobile: userData.mobile,
+                    };
+                    response.render('users/html/login-sms', renderData);
+                    return;
+                }
+
                 let sessionUser = {
                     ssoId: userData.id,
                     username: userData.username,
@@ -116,14 +130,43 @@ class LoginController {
      * @return {string}
      */
     async login(request, response) {
-        let account = request.body.account;
-        let password = request.body.pw;
         let preferenceSetting = {};
         let compilationList = [];
         try {
-            // 调用接口验证登录信息
             let userModel = new UserModel();
-            let responseData = await userModel.getInfoFromSSO(account, password);
+            let responseData = '';
+            if (request.body.account === undefined) {
+                let mobile = request.body.mobile;
+                let codeMsg = request.session.code;
+                if (codeMsg !== undefined && request.body.code !== '') {
+                    console.log(codeMsg);
+                    const validMobile = codeMsg.split('_')[0];
+                    const code = codeMsg.split('_')[1];
+                    const time = codeMsg.split('_')[2];
+                    if (validMobile !== mobile) {
+                        throw '短信验证码错误';
+                    }
+                    if (Date.parse(new Date())/1000 > time+60*5 || request.body.code !== code) {
+                        throw '短信验证码错误或已过期';
+                    } else {
+                        delete request.session.code;
+                    }
+                } else {
+                    throw '短信验证码错误或已过期。';
+                }
+                responseData = await userModel.getInfoFromSSOMobile(mobile);
+            } else {
+                let account = request.body.account;
+                let password = request.body.pw;
+
+                // 调用接口验证登录信息
+                responseData = await userModel.getInfoFromSSO(account, password);
+            }
+
+            // 先判断返回值是否为未激活状态
+            if ( responseData === '-3') {
+                throw '因邮箱未完成认证,账号未激活;去<a href="https://sso.smartcost.com.cn" target="_blank">激活</a>。';
+            }
             responseData = JSON.parse(responseData);
             if (typeof responseData !== 'object') {
                 throw '邮箱/手机 或 密码错误';
@@ -177,6 +220,12 @@ class LoginController {
                 throw '极验验证码错误';
             }
 
+            // 判断用户是否开启了只使用短信登录
+            const userInfo = await userModel.findDataByAccount(userData.mobile);
+            if (request.body.mobile === undefined && request.body.code === undefined && userInfo !== undefined && userInfo !== null && userInfo.isSmsLogin === 1) {
+                return response.json({error: 3, msg: '只能手机短信登录。', data: userData.mobile});
+            }
+
             let sessionUser = {
                 ssoId: userData.id,
                 username: userData.username,
@@ -216,6 +265,34 @@ class LoginController {
                 if(request.session.sessionUser.latest_used !== preferenceSetting.select_version) await userModel.updateLatestUsed(request.session.sessionUser.id,preferenceSetting.select_version);
             }
 
+            // 登录异常短信提醒功能
+            const userinfo2 = await userModel.findDataByAccount(userData.mobile);
+            if (userinfo2.isLoginValid === 1) {
+                // 获取本次访问ip
+                let ip = request.connection.remoteAddress;
+                ip = ip.split(':');
+                ip = ip[3] === undefined ? '' : ip[3];
+                let logModel = new LogModel();
+                let logCount = await logModel.count();
+                logCount = logCount > 30 ? 30 : logCount;
+                let page = 1;
+                const loginList = await logModel.getLog(request.session.sessionUser.id, LogType.LOGIN_LOG, page, logCount);
+                let messageFlag = true;
+                for (const [index,log] of loginList.entries()) {
+                    if (log.message.ip === ip && index !== 0) {
+                        messageFlag = false;
+                        break;
+                    }
+                }
+                messageFlag = true;
+                if (messageFlag) {
+                    // 发送短信
+                    const Sms = new SMS();
+                    const logInfo = loginList[0];
+                    await Sms.sendLoginMsg(userData.mobile, request.session.sessionUser.real_name, moment(logInfo.create_time).format('YYYY-MM-DD'), moment(logInfo.create_time).format('HH:mm:ss'), logInfo.message.ip_info, logInfo.message.ip);
+                }
+            }
+
         } catch (error) {
             console.log(error);
             return response.json({error: 1, msg: error});

+ 35 - 1
modules/users/controllers/sms_controller.js

@@ -5,6 +5,7 @@
  * @date 2018/4/17
  * @version
  */
+import UserModel from "../models/user_model";
 import SmsModel from "../models/sms_model";
 const SMS = require('../models/sms');
 
@@ -34,7 +35,7 @@ class SmsController {
                 // if (parseInt(JSON.stringify(returnStatus).statusCode) !== 200) {
                 //     throw '短信发送失败!';
                 // }
-                request.session.code = code + '_' + Date.parse(new Date())/1000;
+                request.session.code = mobile + '_' + code + '_' + Date.parse(new Date())/1000;
             } else {
                 let returnStatus = await smsModel.sendSmsFromSSO(mobile, type);
                 if (returnStatus === null) {
@@ -87,6 +88,39 @@ class SmsController {
 
         response.json(responseData);
     }
+
+    /**
+     * 检测通行账号是否已存在该手机号码注册
+     *
+     * @param {object} request
+     * @param {object} response
+     * @return {void}
+     */
+    async checkMobile (request, response) {
+        let responseData = {
+            err: 0,
+            msg: ''
+        };
+        let mobile = request.body.mobile;
+        try {
+            let userModel = new UserModel();
+            let responseData = await userModel.getInfoFromSSOMobile(mobile, 0);
+            if ( responseData === '-2') {
+                throw '参数有误或手机号码不正确';
+            }
+            responseData = JSON.parse(responseData);
+            if (typeof responseData !== 'object') {
+                throw '该手机号未注册通行账号';
+            }
+            responseData.msg = 'success';
+        } catch (error) {
+            console.log(error);
+            responseData.err = 1;
+            responseData.msg = error;
+        }
+
+        response.json(responseData);
+    }
 }
 
 export default SmsController;

+ 40 - 0
modules/users/controllers/user_controller.js

@@ -342,6 +342,46 @@ class UserController extends BaseController {
         }
     }
 
+    /*
+    * 更改用户账号登录方式
+    * */
+    async changeIsSmsLogin(request, response) {
+        try{
+            let status = request.body.status;
+            let userModel = new UserModel();
+            let userId = request.session.sessionUser.id;
+            let result = await userModel.updateUser({ _id: userId }, { isSmsLogin: status });
+            if (result) {
+                response.json({error: 0, msg: 'success', data: null});
+            } else {
+                throw '更新失败';
+            }
+        }
+        catch(error){
+            response.json({error: 1, msg: error, data: null});
+        }
+    }
+
+    /*
+    * 更改异常登录通知
+    * */
+    async changeIsLoginValid(request, response) {
+        try{
+            let status = request.body.status;
+            let userModel = new UserModel();
+            let userId = request.session.sessionUser.id;
+            let result = await userModel.updateUser({ _id: userId }, { isLoginValid: status });
+            if (result) {
+                response.json({error: 0, msg: 'success', data: null});
+            } else {
+                throw '更新失败';
+            }
+        }
+        catch(error){
+            response.json({error: 1, msg: error, data: null});
+        }
+    }
+
 }
 
 export default UserController;

+ 41 - 2
modules/users/models/sms.js

@@ -23,7 +23,6 @@ class SMS {
         this.url = 'http://www.sendcloud.net/smsapi/send';
         this.smsUser = 'smartcost';
         this.smskey = 'kuGmqTt10n6vBXivhxXsAuG8aoCsQ1x6';
-        this.templateId = 25595;
     }
 
     /**
@@ -37,7 +36,7 @@ class SMS {
         try {
             const formData = {
                 smsUser: this.smsUser,
-                templateId: this.templateId,
+                templateId: 25595,
                 msgType: 0,
                 phone: mobile,
                 vars: '{"%code%":'+ code +'}',
@@ -72,6 +71,46 @@ class SMS {
         }
     }
 
+    async sendLoginMsg(mobile, name, date, time, local, ip) {
+        console.log(mobile, name, time, local, ip);
+        try {
+            const formData = {
+                smsUser: this.smsUser,
+                templateId: 27561,
+                msgType: 0,
+                phone: mobile,
+                vars: '{"%name%": "' + name + '", "%date%": "' + date + '", "%time%": "' + time + '", "%local%": "' + local + '", "%IP%": "' + ip + '"}',
+            };
+            const signature = await this.getSignature(this.sortDict(formData), this.smskey);
+            formData.signature = signature;
+
+            let postData = {
+                url: this.url,
+                form: formData,
+                encoding: 'utf8'
+            };
+
+            return new Promise(function (resolve, reject) {
+                try {
+                    // 请求接口
+                    Request.post(postData, function (err, postResponse, body) {
+                        if (err) {
+                            throw '请求错误';
+                        }
+                        if (postResponse.statusCode !== 200) {
+                            throw '短信发送失败!';
+                        }
+                        resolve(body);
+                    });
+                } catch (error) {
+                    reject([]);
+                }
+            });
+        } catch (error) {
+            console.log(error);
+        }
+    }
+
     md5(data) {
         var str = data;
         return crypto.createHash("md5").update(str).digest("hex");

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

@@ -81,6 +81,42 @@ class UserModel extends BaseModel {
     }
 
     /**
+     * 根据用户手机号码调用SSO接口获取信息
+     *
+     * @param {string} mobile
+     * @param {string} login 1为登录,不存在则是查询
+     * @return {object}
+     */
+    async getInfoFromSSOMobile(mobile, login = '1') {
+        const fromData = {account: mobile};
+        if (login === '1') {
+            fromData.login = 1;
+        }
+        let postData = {
+            url: 'http://sso.smartcost.com.cn/building/api/mobile/login',
+            form: fromData,
+            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([]);
+            }
+        });
+    }
+
+    /**
      * 根据用户id和token调用SSO接口获取信息
      *
      * @param {string} username

+ 2 - 1
modules/users/routes/sms_route.js

@@ -16,6 +16,7 @@ module.exports = function (app) {
 // action定义区域
     router.post('/code', smsController.code);
     router.post('/mobile', smsController.setMobile);
+    router.post('/check/mobile', smsController.checkMobile);
 
     app.use('/sms',router);
-};
+};

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

@@ -24,5 +24,7 @@ module.exports = function (app) {
     router.post('/getUsers', userController.init, userController.getUsers);
 
     router.post('/getVersionInfo', userController.init, userController.getVersionInfo);
+    router.post('/change/isSmsLogin', userController.init, userController.changeIsSmsLogin);
+    router.post('/change/isLoginValid', userController.init, userController.changeIsLoginValid);
     app.use('/user',router);
-};
+};

文件差异内容过多而无法显示
+ 90 - 0
web/users/html/login-sms.html


文件差异内容过多而无法显示
+ 37 - 5
web/users/html/login.html


+ 4 - 4
web/users/html/user-safe.html

@@ -72,8 +72,8 @@
                             <label class="form-control-label">异常登录提醒</label>
                             <div class="form-control-static">
                                 <div class="custom-control custom-checkbox" >
-                                    <input type="checkbox" class="custom-control-input" id="customCheck1">
-                                    <label class="custom-control-label" for="customCheck1" >开启</label>
+                                    <input type="checkbox" class="custom-control-input" id="isLoginValid" <% if (userData.isLoginValid === 1) { %>checked<% } %>>
+                                    <label class="custom-control-label" for="isLoginValid" >开启</label>
                                 </div>
                                 <p class="text-muted">
                                     账号出现异常登录时将给你的手机号码发送通知。
@@ -84,8 +84,8 @@
                             <label class="form-control-label">关闭账号登录</label>
                             <div class="form-control-static">
                                 <div class="custom-control custom-checkbox" >
-                                    <input type="checkbox" class="custom-control-input" id="customCheck2">
-                                    <label class="custom-control-label" for="customCheck2" >关闭</label>
+                                    <input type="checkbox" class="custom-control-input" id="isSmsLogin" <% if (userData.isSmsLogin === 1) { %>checked<% } %>>
+                                    <label class="custom-control-label" for="isSmsLogin" >关闭</label>
                                 </div>
                                 <p class="text-muted">
                                     关闭账号登录后,只能通过短信验证码方式登录。

+ 179 - 82
web/users/js/login.js

@@ -50,39 +50,54 @@ $(document).ready(function () {
             if (!valid()) {
                 return false;
             }
-            let account = $("#inputEmail").val();
+            if ($('#changeLogin').attr('data-status') === 'user') {
+                let account = $("#inputEmail").val();
+                if(/^1[3456789]\d{9}$/.test(account) || /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(account)) {
+                    login(captchaObj);
+                } else {
+                    $('#emailHelp').text('您输入的 邮箱/手机 格式不对');
+                }
+            } else {
+                let account = $("#mobileLogin").val();
+                if(/^1[3456789]\d{9}$/.test(account)) {
+                    login(captchaObj);
+                } else {
+                    $('#phoneHelp').text('您输入的 手机 格式不对');
+                }
+            }
+            // let account = $("#inputEmail").val();
             // let pw = $("#inputPassword").val();
 
             // 判断输入的邮箱/手机是否格式正确
-            if(/^1[3456789]\d{9}$/.test(account) || /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(account)) {
-                // 先判断是否是专业版用户,是的话弹出短信验证
-                // $.ajax({
-                //     url: '/accountIsPro',
-                //     type: 'post',
-                //     async: true,
-                //     data: {"account": account, "pw": pw},
-                //     success: function (response) {
-                //         if (response.error === 0) {
-                //             const ispro = response.result;
-                //             if (!ispro) {
-                                login(captchaObj);
-                //             } else {
-                //                 $('#phonepass').modal('show');
-                //                 $('#proMobile').val(response.data);
-                //                 $('#pro_mobile').text(response.data.substr(0, 3) + '****' + response.data.substr(7, 11));
-                //             }
-                //         } else if(response.error === 2) {
-                //             $('#check_ssoId').val(response.ssoId);
-                //             $('#phone').modal('show');
-                //         } else {
-                //             let msg = response.msg !== undefined ? response.msg : '未知错误';
-                //             showError(msg, $("input"));
-                //         }
-                //     }
-                // });
-            } else {
-                $('#emailHelp').text('您输入的 邮箱/手机 格式不对');
-            }
+            // if(/^1[3456789]\d{9}$/.test(account) || /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(account)) {
+            // // 先判断是否是专业版用户,是的话弹出短信验证
+            // $.ajax({
+            //     url: '/accountIsPro',
+            //     type: 'post',
+            //     async: true,
+            //     data: {"account": account, "pw": pw},
+            //     success: function (response) {
+            //         if (response.error === 0) {
+            //             const ispro = response.result;
+            //             if (!ispro) {
+            //                 login(captchaObj);
+            //             } else {
+            //                 $('#phonepass').modal('show');
+            //                 $('#proMobile').val(response.data);
+            //                 $('#pro_mobile').text(response.data.substr(0, 3) + '****' + response.data.substr(7, 11));
+            //             }
+            //         } else if(response.error === 2) {
+            //             $('#check_ssoId').val(response.ssoId);
+            //             $('#phone').modal('show');
+            //         } else {
+            //             let msg = response.msg !== undefined ? response.msg : '未知错误';
+            //             showError(msg, $("input"));
+            //         }
+            //     }
+            //     // });
+            // } else {
+            //     $('#emailHelp').text('您输入的 邮箱/手机 格式不对');
+            // }
         });
 
         // $('#loginPro').click(function () {
@@ -172,53 +187,111 @@ $(document).ready(function () {
         }
     });
 
-    // $("#get-code2").click(function() {
-    //     const mobile = $("#proMobile").val();
-    //     if(!validMobile(mobile)){
-    //         return false;
-    //     }
-    //     const btn = $(this);
-    //     if(!btn.hasClass('disabled')){
-    //         $.ajax({
-    //             url: '/sms/code',
-    //             type: 'post',
-    //             data: { mobile: mobile, type: 3},
-    //             error: function() {
-    //                 showValidError('短信接口出错!',$('#smsCode'));
-    //             },
-    //             beforeSend: function() {
-    //             },
-    //             success: function(response) {
-    //                 if (response.err === 0) {
-    //                     codeSuccess(btn);
-    //                 } else {
-    //                     showValidError(response.msg,$('#smsCode'));
-    //                 }
-    //             }
-    //         });
-    //     }
-    // });
+    // 切换登录方式
+    $('#changeLogin').click(function () {
+        if ($(this).attr('data-status') === 'user') {
+            $(this).attr('data-status', 'sms');
+            $('.change-login-p').text('短信登录');
+            $(this).text('账号登录');
+            $('.sms-login-modal').show();
+            $('.user-login-modal').hide();
+            $('.sms-login-modal input').attr('disabled', false);
+            $('.user-login-modal input').attr('disabled', true);
+        } else {
+            $(this).attr('data-status', 'user');
+            $('.change-login-p').text('账号登录');
+            $(this).text('短信登录');
+            $('.sms-login-modal').hide();
+            $('.user-login-modal').show();
+            $('.sms-login-modal input').attr('disabled', true);
+            $('.user-login-modal input').attr('disabled', false);
+        }
+    });
+
+    // 切换到短信登录
+    $('#changeSmsLogin').click(function () {
+        $('#changeLogin').attr('data-status', 'sms');
+        $('.change-login-p').text('短信登录');
+        $('#changeLogin').text('账号登录');
+        $('.sms-login-modal').show();
+        $('.user-login-modal').hide();
+        $('.sms-login-modal input').attr('disabled', false);
+        $('.user-login-modal input').attr('disabled', true);
+        $('#phonepass').modal('hide');
+    });
+
+    $("#get-code2").click(function() {
+        const mobile = $("#mobileLogin").val();
+        if(!validMobile(mobile, 0)){
+            return false;
+        }
+        const btn = $(this);
+        if(!btn.hasClass('disabled')){
+            // 判断该手机号是否已注册通行账号
+            $.ajax({
+                url: '/sms/check/mobile',
+                type: 'post',
+                data: {mobile: mobile},
+                error: function() {
+                    $('#phoneHelp').text('号码查询接口出错!');
+                },
+                beforeSend: function() {
+                },
+                success: function(response) {
+                    if (response.err === 0) {
+                        $.ajax({
+                            url: '/sms/code',
+                            type: 'post',
+                            data: { mobile: mobile, type: 3},
+                            error: function() {
+                                $('#phoneHelp').text('短信接口出错!');
+                            },
+                            beforeSend: function() {
+                            },
+                            success: function(response) {
+                                if (response.err === 0) {
+                                    codeSuccess(btn);
+                                } else {
+                                    $('#phoneHelp').text(response.msg);
+                                }
+                            }
+                        });
+                    } else {
+                        $('#phoneHelp').text(response.msg);
+                    }
+                }
+            })
+        }
+    });
 });
 
 function login(captchaObj) {
-    let account = $("#inputEmail").val();
-    let pw = $("#inputPassword").val();
+
     let geetest_challenge = $('input[name="geetest_challenge"]').val();
     let geetest_validate = $('input[name="geetest_validate"]').val();
     let geetest_seccode = $('input[name="geetest_seccode"]').val();
-    // let code = $("#smsCode").val();
+
+    const postData = {
+        geetest_challenge: geetest_challenge,
+        geetest_validate: geetest_validate,
+        geetest_seccode: geetest_seccode,
+    };
+    if ($('#changeLogin').attr('data-status') === 'user') {
+        let account = $("#inputEmail").val();
+        let pw = $("#inputPassword").val();
+        postData.account = account;
+        postData.pw = pw;
+    } else {
+        let mobile = $('#mobileLogin').val();
+        let code = $("#codeLogin").val();
+        postData.mobile = mobile;
+        postData.code = code;
+    }
 
     $.ajax({
         url: '/login',
         type: 'post',
-        data: {
-            "account": account,
-            "pw": pw,
-            "geetest_challenge": geetest_challenge,
-            "geetest_validate": geetest_validate,
-            "geetest_seccode": geetest_seccode,
-            // "code": code,
-        },
+        data: postData,
         success: function (response) {
             if (response.error === 0) {
                 // $('#phonepass').modal('hide');
@@ -242,8 +315,10 @@ function login(captchaObj) {
                 captchaObj.reset();
                 $('#check_ssoId').val(response.ssoId);
                 $('#phone').modal('show');
-            // } else if(response.error === 3) {
-            //     showValidError(response.msg,$('#smsCode'));
+            } else if(response.error === 3) {
+                captchaObj.reset();
+                $('#phonepass').modal('show');
+                $('#mobileLogin').val(response.data);
             } else {
                 // $('#phonepass').modal('hide');
                 let msg = response.msg !== undefined ? response.msg : '未知错误';
@@ -286,15 +361,23 @@ function codeSuccess(btn) {
  *
  * @return {boolean}
  */
-function validMobile(mobile) {
+function validMobile(mobile, status = 1) {
     let result = true;
     if($.trim(mobile) === ''){
-        showValidError('手机号不能为空!',$('#mobile'));
+        if (status === 1) {
+            showValidError('手机号不能为空!',$('#mobile'));
+        } else {
+            $('#phoneHelp').text('手机号不能为空!');
+        }
         return false;
     }
-    let mobileValid =  /^1[3456789]\d{9}$/;
+    let mobileValid = /^1[3456789]\d{9}$/;
     if(!mobileValid.test(mobile)){
-        showValidError('手机号码格式有误!',$('#mobile'));
+        if (status === 1) {
+            showValidError('手机号码格式有误!',$('#mobile'));
+        } else {
+            $('#phoneHelp').text('手机号码格式有误!');
+        }
         return false;
     }
     return result;
@@ -331,18 +414,32 @@ function cleanValidError(element) {
  */
 function valid() {
     let result = true;
-    let account = $("#inputEmail").val();
-    if (account === undefined || account === '') {
-        showError('用户名不能为空!', $("#inputEmail"));
-        return false;
-    }
+    if ($('#changeLogin').attr('data-status') === 'user') {
+        let account = $("#inputEmail").val();
+        if (account === undefined || account === '') {
+            showError('用户名不能为空!', $("#inputEmail"));
+            return false;
+        }
 
-    let password = $("#inputPassword").val();
-    if (password === undefined || password === '') {
-        showError('密码不能为空!', $("#inputPassword"));
-        return false;
+        let password = $("#inputPassword").val();
+        if (password === undefined || password === '') {
+            showError('密码不能为空!', $("#inputPassword"));
+            return false;
+        }
+    } else {
+        let mobile = $('#mobileLogin').val();
+        if (mobile === undefined || mobile === '') {
+            showError('手机号码不能为空!', $("#mobileLogin"));
+            return false;
+        }
+        let code = $('#codeLogin').val();
+        if (code === undefined || code === '') {
+            showError('验证码不能为空!', $("#codeLogin"));
+            return false;
+        }
     }
 
+
     return result;
 }
 

+ 31 - 1
web/users/js/user.js

@@ -27,6 +27,36 @@ $(document).ready(function() {
             $('#upgrade-title').text('联系销售代表激活');
         }
         CommonHeader.getCategoryList(category);
+    });
+
+    // 关闭和开启账号登录
+    $('#isSmsLogin').click(function () {
+        let status = $(this).is(':checked') ? 1 : 0;
+        $.ajax({
+            type: 'post',
+            url: '/user/change/isSmsLogin',
+            data: {status : status},
+            success: function (response) {
+                if (response.error !== 0) {
+                    alert(response.msg);
+                }
+            }
+        })
+    });
+
+    // 关闭和开启异常登录提醒
+    $('#isLoginValid').click(function () {
+        let status = $(this).is(':checked') ? 1 : 0;
+        $.ajax({
+            type: 'post',
+            url: '/user/change/isLoginValid',
+            data: {status : status},
+            success: function (response) {
+                if (response.error !== 0) {
+                    alert(response.msg);
+                }
+            }
+        })
     })
 });
 
@@ -87,4 +117,4 @@ function cleanError() {
     $("input").removeClass('orm-control-danger');
     $("input").parent().removeClass('has-danger');
     $(".form-control-feedback").remove();
-}
+}