Browse Source

web短信快速注册和wap注册

laiguoran 4 years ago
parent
commit
ac1e579dbe

File diff suppressed because it is too large
+ 1 - 4
lib/font-awesome/font-awesome.min.css


BIN
lib/font-awesome/webfonts/fa-brands-400.eot


File diff suppressed because it is too large
+ 3300 - 0
lib/font-awesome/webfonts/fa-brands-400.svg


BIN
lib/font-awesome/webfonts/fa-brands-400.ttf


BIN
lib/font-awesome/webfonts/fa-brands-400.woff


BIN
lib/font-awesome/webfonts/fa-brands-400.woff2


BIN
lib/font-awesome/webfonts/fa-light-300.eot


File diff suppressed because it is too large
+ 9896 - 0
lib/font-awesome/webfonts/fa-light-300.svg


BIN
lib/font-awesome/webfonts/fa-light-300.ttf


BIN
lib/font-awesome/webfonts/fa-light-300.woff


BIN
lib/font-awesome/webfonts/fa-light-300.woff2


BIN
lib/font-awesome/webfonts/fa-regular-400.eot


File diff suppressed because it is too large
+ 9098 - 0
lib/font-awesome/webfonts/fa-regular-400.svg


BIN
lib/font-awesome/webfonts/fa-regular-400.ttf


BIN
lib/font-awesome/webfonts/fa-regular-400.woff


BIN
lib/font-awesome/webfonts/fa-regular-400.woff2


BIN
lib/font-awesome/webfonts/fa-solid-900.eot


File diff suppressed because it is too large
+ 7702 - 0
lib/font-awesome/webfonts/fa-solid-900.svg


BIN
lib/font-awesome/webfonts/fa-solid-900.ttf


BIN
lib/font-awesome/webfonts/fa-solid-900.woff


BIN
lib/font-awesome/webfonts/fa-solid-900.woff2


+ 2 - 2
modules/main/middleware/index.js

@@ -55,7 +55,7 @@ function isAjax(req) {
 // 登录状态全局判断
 async function stateChecking(req, res, next) {
     const url = req.originalUrl;
-    if (url=="\/"|| /^\/login/.test(url) || /\.map|\.ico$/.test(url) || /^\/sms/.test(url) || /^\/cld\/(?!getCategoryStaff)/.test(url) || /^\/captcha/.test(url)) {
+    if (url=="\/"|| /^\/login/.test(url) || /\.map|\.ico$/.test(url) || /^\/sms/.test(url) || /^\/cld\/(?!getCategoryStaff)/.test(url) || /^\/captcha/.test(url) || /^\/wap/.test(url)) {
         // 如果是登录页面或短信接口或cld接口则忽略判断数据
         next();
     } else {
@@ -97,4 +97,4 @@ async function stateChecking(req, res, next) {
         next();
         await online_logs.saveOnlineTime(req);//记录登录时长
     }
-}
+}

+ 126 - 0
modules/users/controllers/login_controller.js

@@ -421,6 +421,132 @@ class LoginController {
     //     response.json(res);
     // }
 
+    async regPage(request, response) {
+        let userModel = new UserModel();
+        const err = request.session.regError;
+        request.session.regError = undefined;
+        let renderData = {
+            err: err ? err : '',
+            provinceList: userModel.province,
+        };
+        response.render('users/html/user-reg', renderData);
+    }
+
+    async reg(request, response) {
+        try {
+            if (request.body.type === undefined || request.body.mobile === undefined || request.body.company === undefined || request.body.real_name === undefined || request.body.qq === undefined || request.body.province === undefined) {
+                throw '参数有误';
+            }
+            let userModel = new UserModel();
+            let responseData = '';
+            if (parseInt(request.body.type) === 2) { // 已注册sso但未注册大司空
+                responseData = await userModel.regForSSO(request.body.mobile, request.body.qq);
+            } else if (parseInt(request.body.type) === 1 && request.body.password !== undefined) { // 都未注册
+                const name = request.body.real_name + '_' + request.body.mobile;
+                responseData = await userModel.regForSSO(request.body.mobile, request.body.qq, request.body.password, name);
+            } else {
+                throw '参数有误';
+            }
+            responseData = JSON.parse(responseData);
+            if (typeof responseData !== 'object') {
+                throw 'SSO报错';
+            }
+
+            if (responseData.length <= 0) {
+                throw '接口返回数据错误';
+            }
+
+            // 正确登录后 存入session
+            let userData = responseData[0];
+            // makeuser
+            let addUserData = {
+                ssoId: userData.id,
+                company: request.body.company,
+                username: userData.username,
+                email: userData.useremail,
+                mobile: userData.mobile,
+                qq: userData.qq,
+                isUserActive: userData.isUserActive,
+                token: uuidV1(),
+                real_name: request.body.real_name,
+                province: request.body.province,
+            };
+            const result = await userModel.addUser(addUserData);
+            return response.redirect("/wap/checkuser?mobile=" + request.body.mobile);
+        } catch (err) {
+            console.log(err);
+            request.session.regError = err;
+            return response.redirect("/wap/reg");
+        }
+
+    }
+
+    async checkUser(request, response) {
+        const renderData = {
+            check: false,
+        };
+        if (request.query.mobile !== undefined) {
+            let userModel = new UserModel();
+            const userInfo = await userModel.findDataByAccount(request.query.mobile);
+            renderData.check = true;
+            renderData.mobile = request.query.mobile;
+            renderData.userinfo = userInfo;
+        }
+        response.render('users/html/user-check', renderData);
+    }
+
+    async checkUserAjax(request, response) {
+        let existUser = 0;
+        try {
+            if (request.body.mobile !== undefined && request.body.code !== 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 '短信验证码错误或已过期。';
+                }
+                let userModel = new UserModel();
+                const userInfo = await userModel.findDataByAccount(mobile);
+                existUser = userInfo ? 1 : 0;
+                // 若未注册大司空,再判断是否已注册sso
+                if (existUser === 0) {
+                    let responseData = await userModel.getInfoFromSSOAccount(mobile);
+                    if ( responseData === '-2') {
+                        throw '参数有误';
+                    }
+                    if ( responseData === '-22') {
+                        existUser = 0;
+                    }
+                    responseData = JSON.parse(responseData);
+                    if (typeof responseData === 'object') {
+                        existUser = 2;
+                    }
+                }
+            } else {
+                throw '参数有误';
+            }
+        } catch (error) {
+            console.log(error);
+            return response.json({error: 1, msg: error});
+        }
+        response.json({
+            error: 0,
+            existUser,
+        });
+    }
+
 }
 
 module.exports = LoginController;

+ 69 - 2
modules/users/models/user_model.js

@@ -88,14 +88,46 @@ class UserModel extends BaseModel {
     }
 
     /**
+     * 根据用户手机调用SSO接口获取个人信息
+     *
+     * @param {string} account
+     * @return {object}
+     */
+    async getInfoFromSSOAccount(account) {
+        let postData = {
+            url: 'http://sso.smartcost.com.cn/building/api/userinfo',
+            form: {account: account},
+            encoding: 'utf8'
+        };
+        return new Promise(function (resolve, reject) {
+            try {
+                // 请求接口
+                Request.post(postData, function (err, postResponse, body) {
+                    if (err) {
+                        console.log('111');
+                        reject('请求错误');
+                    }
+                    if (postResponse.statusCode !== 200) {
+                        reject('通行证验证失败!');
+                    }
+                    resolve(body);
+                });
+            } catch (error) {
+                reject([]);
+            }
+        });
+    }
+
+    /**
      * 根据用户手机号码调用SSO接口获取信息
      *
      * @param {string} mobile
      * @param {string} login 1为登录,不存在则是查询
+     * @param {string} comefrom 1为来自大司空
      * @return {object}
      */
     async getInfoFromSSOMobile(mobile, login = '1') {
-        const fromData = {account: mobile};
+        const fromData = {account: mobile, comefrom: 1};
         if (login === '1') {
             fromData.login = 1;
         }
@@ -157,6 +189,38 @@ class UserModel extends BaseModel {
     }
 
     /**
+     * 注册sso账号或修改sso的qq信息
+     *
+     * @param {string} username
+     * @param {string} password
+     * @return {object}
+     */
+    async regForSSO(mobile, qq, pwd = '', name = '') {
+        let postData = {
+            url: 'http://sso.smartcost.com.cn/building/api/reg',
+            form: {mobile: mobile, qq: qq, password: pwd, name: name},
+            encoding: 'utf8'
+        };
+        return new Promise(function (resolve, reject) {
+            try {
+                // 请求接口
+                Request.post(postData, function (err, postResponse, body) {
+                    if (err) {
+                        console.log('111');
+                        reject('请求错误');
+                    }
+                    if (postResponse.statusCode !== 200) {
+                        reject('通行证验证失败!');
+                    }
+                    resolve(body);
+                });
+            } catch (error) {
+                reject([]);
+            }
+        });
+    }
+
+    /**
      * 标记用户
      *
      * @param {object} userData
@@ -307,7 +371,10 @@ class UserModel extends BaseModel {
             create_time: new Date().getTime(),
             latest_login: new Date().getTime(),
             isUserActive: userData.isUserActive,
-            token: userData.token
+            token: userData.token,
+            real_name: userData.real_name ? userData.real_name : '',
+            province: userData.province ? userData.province : -1,
+            company: userData.company ? userData.company : '',
         };
         return this.db.create(insertData);
     }

+ 8 - 0
modules/users/routes/login_route.js

@@ -19,6 +19,14 @@ module.exports = function (app) {
 // 登录操作
     router.post('/login', loginController.login);
 
+    router.get('/wap/reg', loginController.regPage);
+
+    router.post('/wap/reg', loginController.reg);
+
+    router.get('/wap/checkuser', loginController.checkUser);
+
+    router.post('/wap/checkuser', loginController.checkUserAjax);
+
     // router.post('/accountIsPro', loginController.accountIsPro);
 
     // 验证码相关

+ 270 - 4
package-lock.json

@@ -6,8 +6,7 @@
     "abbrev": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
-      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
-      "dev": true
+      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
     },
     "accepts": {
       "version": "1.3.7",
@@ -234,6 +233,11 @@
         "buffer-equal": "^1.0.0"
       }
     },
+    "aproba": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
+    },
     "archive-type": {
       "version": "3.2.0",
       "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-3.2.0.tgz",
@@ -248,6 +252,44 @@
       "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
       "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA="
     },
+    "are-we-there-yet": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
+      "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
+      "requires": {
+        "delegates": "^1.0.0",
+        "readable-stream": "^2.0.6"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+        },
+        "readable-stream": {
+          "version": "2.3.7",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+          "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        }
+      }
+    },
     "argparse": {
       "version": "1.0.10",
       "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
@@ -1592,6 +1634,11 @@
         "upper-case-first": "^1.1.0"
       }
     },
+    "chownr": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+      "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
+    },
     "ci-info": {
       "version": "1.6.0",
       "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
@@ -1969,6 +2016,11 @@
         "mongodb": ">= 1.2.0 <3.0.0"
       }
     },
+    "console-control-strings": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+      "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
+    },
     "console-stream": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz",
@@ -2859,6 +2911,11 @@
       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
       "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
     },
+    "delegates": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+      "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
+    },
     "denque": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz",
@@ -2887,6 +2944,11 @@
         "repeating": "^2.0.0"
       }
     },
+    "detect-libc": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+      "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
+    },
     "dfa": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz",
@@ -4509,6 +4571,14 @@
       "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
       "optional": true
     },
+    "fs-minipass": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
+      "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
+      "requires": {
+        "minipass": "^2.6.0"
+      }
+    },
     "fs-mkdirp-stream": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz",
@@ -5028,6 +5098,28 @@
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
       "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
     },
+    "gauge": {
+      "version": "2.7.4",
+      "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+      "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+      "requires": {
+        "aproba": "^1.0.3",
+        "console-control-strings": "^1.0.0",
+        "has-unicode": "^2.0.0",
+        "object-assign": "^4.1.0",
+        "signal-exit": "^3.0.0",
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1",
+        "wide-align": "^1.1.0"
+      },
+      "dependencies": {
+        "object-assign": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+          "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+        }
+      }
+    },
     "generate-function": {
       "version": "2.3.1",
       "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
@@ -6224,6 +6316,11 @@
       "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
       "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
     },
+    "has-unicode": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+      "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
+    },
     "has-value": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
@@ -6459,6 +6556,14 @@
       "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=",
       "dev": true
     },
+    "ignore-walk": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz",
+      "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==",
+      "requires": {
+        "minimatch": "^3.0.4"
+      }
+    },
     "imagemin": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-4.0.0.tgz",
@@ -8770,6 +8875,30 @@
       "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
       "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
     },
+    "minipass": {
+      "version": "2.9.0",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
+      "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
+      "requires": {
+        "safe-buffer": "^5.1.2",
+        "yallist": "^3.0.0"
+      },
+      "dependencies": {
+        "yallist": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+          "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+        }
+      }
+    },
+    "minizlib": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
+      "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==",
+      "requires": {
+        "minipass": "^2.9.0"
+      }
+    },
     "mixin-deep": {
       "version": "1.3.2",
       "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
@@ -9087,8 +9216,7 @@
     "nan": {
       "version": "2.14.0",
       "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
-      "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
-      "optional": true
+      "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg=="
     },
     "nanomatch": {
       "version": "1.2.13",
@@ -9116,6 +9244,39 @@
         "xml-char-classes": "^1.0.0"
       }
     },
+    "needle": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz",
+      "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==",
+      "requires": {
+        "debug": "^3.2.6",
+        "iconv-lite": "^0.4.4",
+        "sax": "^1.2.4"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.7",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+          "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "iconv-lite": {
+          "version": "0.4.24",
+          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+          "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+          "requires": {
+            "safer-buffer": ">= 2.1.2 < 3"
+          }
+        },
+        "ms": {
+          "version": "2.1.3",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+          "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+        }
+      }
+    },
     "negotiator": {
       "version": "0.6.2",
       "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
@@ -9131,6 +9292,30 @@
       "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
       "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
     },
+    "node-pre-gyp": {
+      "version": "0.14.0",
+      "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz",
+      "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==",
+      "requires": {
+        "detect-libc": "^1.0.2",
+        "mkdirp": "^0.5.1",
+        "needle": "^2.2.1",
+        "nopt": "^4.0.1",
+        "npm-packlist": "^1.1.6",
+        "npmlog": "^4.0.2",
+        "rc": "^1.2.7",
+        "rimraf": "^2.6.1",
+        "semver": "^5.3.0",
+        "tar": "^4.4.2"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+        }
+      }
+    },
     "node-schedule": {
       "version": "1.3.2",
       "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-1.3.2.tgz",
@@ -9155,6 +9340,15 @@
         "xlsx": "^0.11.10"
       }
     },
+    "nodejieba": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/nodejieba/-/nodejieba-2.4.2.tgz",
+      "integrity": "sha512-U/Yey+OCv7XvTnujtjyx+FEIQ+na8nlroyrzs3vM2dIM/Nx2XpoPA8DcfDXmLuLbnlfd0rd1FCsZ5b5yFTTI9A==",
+      "requires": {
+        "nan": "^2.14.0",
+        "node-pre-gyp": "^0.14.0"
+      }
+    },
     "nodemailer": {
       "version": "2.7.2",
       "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-2.7.2.tgz",
@@ -9353,6 +9547,15 @@
         }
       }
     },
+    "nopt": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
+      "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
+      "requires": {
+        "abbrev": "1",
+        "osenv": "^0.1.4"
+      }
+    },
     "normalize-package-data": {
       "version": "2.5.0",
       "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
@@ -9403,6 +9606,29 @@
         "once": "^1.3.2"
       }
     },
+    "npm-bundled": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz",
+      "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==",
+      "requires": {
+        "npm-normalize-package-bin": "^1.0.1"
+      }
+    },
+    "npm-normalize-package-bin": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz",
+      "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA=="
+    },
+    "npm-packlist": {
+      "version": "1.4.8",
+      "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz",
+      "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==",
+      "requires": {
+        "ignore-walk": "^3.0.1",
+        "npm-bundled": "^1.0.1",
+        "npm-normalize-package-bin": "^1.0.1"
+      }
+    },
     "npm-run-path": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
@@ -9412,6 +9638,17 @@
         "path-key": "^2.0.0"
       }
     },
+    "npmlog": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+      "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+      "requires": {
+        "are-we-there-yet": "~1.1.2",
+        "console-control-strings": "~1.1.0",
+        "gauge": "~2.7.3",
+        "set-blocking": "~2.0.0"
+      }
+    },
     "num2fraction": {
       "version": "1.2.2",
       "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
@@ -12303,6 +12540,27 @@
         }
       }
     },
+    "tar": {
+      "version": "4.4.13",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz",
+      "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==",
+      "requires": {
+        "chownr": "^1.1.1",
+        "fs-minipass": "^1.2.5",
+        "minipass": "^2.8.6",
+        "minizlib": "^1.2.1",
+        "mkdirp": "^0.5.0",
+        "safe-buffer": "^5.1.2",
+        "yallist": "^3.0.3"
+      },
+      "dependencies": {
+        "yallist": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+          "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+        }
+      }
+    },
     "tar-stream": {
       "version": "1.6.2",
       "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
@@ -13622,6 +13880,14 @@
       "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
       "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8="
     },
+    "wide-align": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
+      "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+      "requires": {
+        "string-width": "^1.0.2 || 2"
+      }
+    },
     "widest-line": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",

+ 84 - 0
web/users/html/user-check.html

@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
+    <meta http-equiv="x-ua-compatible" content="ie=edge">
+    <title>用户注册状态-大司空云计价</title>
+    <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
+    <link rel="stylesheet" href="/web/building_saas/css/main.css">
+    <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css">
+    <link rel="shortcut icon" href="/web/building_saas/css/favicon.ico">
+<style>
+html{height:100%;}
+</style>
+</head>
+<body class="login-body">
+    <div class="container">
+        <% if (!check) { %>
+        <form class="form-signin mt-5" method="get" onsubmit="return checkMobile();">
+            <h1 class="d-flex justify-content-center mb-0"><img src="/web/building_saas/img/building.png" width="40" height="40" class="mr-3" style="margin-top:5px"> 大司空云计价</h1>
+            <p class="text-center mb-4 text-muted">市政、房建、轨道、管廊管线等专业工程计价软件</p>
+            <p class="h3 text-center mb-3">查询注册状态</p>
+            <div class="form-group">
+                <input id="inputEmail" name="mobile" class="form-control " placeholder="输入手机号" required="" autofocus="">
+                <small id="mobileHelp" style="display: none" class="form-text text-danger">您输入的 手机 格式不对</small>
+            </div>
+            <div class="form-group">
+                <button type="submit" class="btn btn-success btn-block">查询</button>
+            </div>
+        </form>
+        <% } else { %>
+        <form class="form-signin mt-5">
+            <h1 class="d-flex justify-content-center mb-0"><img src="/web/building_saas/img/building.png" width="40" height="40" class="mr-3" style="margin-top:5px"> 大司空云计价</h1>
+            <p class="text-center mb-4 text-muted">市政、房建、轨道、管廊管线等专业工程计价软件</p>
+            <% if (userinfo) { %>
+            <p class="h3 text-center mb-3"><%= mobile %> 已经注册</p>
+            <div class="card bg-success text-white">
+                <div class="card-body">
+                    <p class="h4 mb-0">账号:<%= userinfo.username %></p>
+                    <hr class="border-light">
+                    <p class="h4 mb-0">单位:<%= userinfo.company %></p>
+                    <hr class="border-light">
+                    <p class="h4 mb-0">姓名:<%= userinfo.real_name %></p>
+                    <hr class="border-light">
+                    <p class="h4 mb-0"> QQ:<%= userinfo.qq %></p>
+                </div>
+            </div>
+            <p class="text-center mt-2 text-success" style="font-size:10px"><i class="fal fa-asterisk fa-spin fa-3x fa-fw"></i><i class="fal fa-asterisk fa-spin fa-3x fa-fw"></i><i class="fal fa-asterisk fa-spin fa-3x fa-fw"></i></p>
+            <div class="form-group">
+                <a href="/wap/checkuser" class="btn btn-outline-primary btn-block">返回</a>
+            </div>
+            <% } else { %>
+            <div class="card bg-danger text-white">
+                <div class="card-body">
+                    <p class="h4 mb-0"><%= mobile %> 未注册</p>
+                </div>
+            </div>
+            <p class="text-center mt-2 text-danger" style="font-size:10px"><i class="fal fa-asterisk fa-spin fa-3x fa-fw"></i><i class="fal fa-asterisk fa-spin fa-3x fa-fw"></i><i class="fal fa-asterisk fa-spin fa-3x fa-fw"></i></p>
+            <div class="form-group">
+                <a href="/wap/reg" class="btn btn-outline-primary btn-block">立即注册</a>
+            </div>
+            <% } %>
+        </form>
+        <% } %>
+
+       <!--  <div class="text-white fixed-bottom"><p class="text-center mb-1">Copyright © 2019 <a href="https://smartcost.com.cn" target="_blank" class="text-white">珠海纵横创新软件有限公司</a>.All Rights Reserved.<a class="text-white ml-2" href="http://www.miitbeian.gov.cn" target="_blank">粤ICP备14032472号</a></p></div> -->
+    </div>
+
+    <!-- JS. -->
+    <script src="/lib/jquery/jquery-3.2.1.min.js"></script>
+    <script src="/lib/popper/popper.min.js"></script>
+    <script src="/lib/bootstrap/bootstrap.min.js"></script>
+    <script src="/web/building_saas/js/global.js"></script>
+    <script>
+        function checkMobile() {
+            if(!/^1[3456789]\d{9}$/.test($('input[name="mobile"]').val())) {
+                $('#mobileHelp').show();
+                return false;
+            }
+        }
+    </script>
+</body>
+
+</html>

+ 281 - 0
web/users/html/user-reg.html

@@ -0,0 +1,281 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
+    <meta http-equiv="x-ua-compatible" content="ie=edge">
+    <title>用户注册-大司空云计价</title>
+    <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
+    <link rel="stylesheet" href="/web/building_saas/css/main.css">
+    <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css">
+    <link rel="shortcut icon" href="/web/building_saas/css/favicon.ico">
+<style>
+html{height:100%;}
+</style>
+</head>
+<body class="login-body">
+    <div class="container">
+        <form class="form-signin mt-5" method="post" onsubmit="return checkForm();">
+            <h1 class="d-flex justify-content-center mb-0"><img src="/web/building_saas/img/building.png" width="40" height="40" class="mr-3" style="margin-top:5px"> 大司空云计价</h1>
+            <p class="text-center mb-4 text-muted">市政、房建、轨道、管廊管线等专业工程计价软件</p>
+            <p class="h3 text-center mb-3" id="tips">用户注册</p>
+            <div class="form-group">
+                <input id="mobile" name="mobile" class="form-control" type="number" placeholder="输入手机号" required="">
+                <small id="mobiletips" style="display: none" class="form-text text-danger">手机号格式不对</small>
+                <!-- <small id="e" class="form-text text-danger alert alert-danger">手机号已注册</small> -->
+            </div>
+            <div class="form-group">
+                <button type="button" class="btn btn-outline-primary btn-block" id="get-code">获取验证码</button>
+            </div>
+            <div class="form-group">
+                <input id="code" name="code" class="form-control " placeholder="输入验证码" required="" type="number">
+            </div>
+            <div class="form-group" id="error-tips" <% if (err === '') { %>style="display: none;"<% } %>>
+                <div class="alert alert-danger" role="alert">
+                    <strong>失败</strong> <span id="message"><%= err %></span>
+                </div>
+            </div>
+            <div class="form-group">
+                <button type="button" id="check-user" class="btn btn-primary btn-block">确认</button>
+            </div>
+            <div id="msg" style="display: none">
+            <hr>
+            <input id="type" name="type" type="hidden">
+            <div class="form-group">
+                <input id="password" disabled name="password" class="form-control " placeholder="输入您的密码" required="" type="password">
+                <small id="pwd-tips" style="display: none" class="form-text text-danger">密码长度为6~16位,建议使用数字与英文混合</small>
+            </div>
+            <div class="form-group">
+                <select id="province" name="province" class="form-control ">
+                    <option value="-1">企业所在地区</option>
+                    <% provinceList.forEach(function(province, index) {%>
+                    <option value="<%= index %>"><%= province %></option>
+                    <% })%>
+                </select>
+                <small id="province-tips" style="display: none" class="form-text text-danger">请选择企业地区</small>
+            </div>
+            <div class="form-group">
+                <input id="company" disabled name="company" class="form-control " placeholder="输入单位信息" required="" type="text">
+                <small id="company-tips" style="display: none" class="form-text text-danger">请输入单位信息</small>
+            </div>
+            <div class="form-group">
+                <input id="realname" disabled name="real_name" class="form-control " placeholder="输入您的姓名" required="" type="text">
+                <small id="name-tips" style="display: none" class="form-text text-danger">姓名存在特殊字符或空格</small>
+            </div>
+            <div class="form-group">
+                <input id="qq" disabled name="qq" class="form-control " placeholder="输入您的QQ号" required="" type="text">
+                <small id="qq-tips" style="display: none" class="form-text text-danger">请输入正确的QQ号码</small>
+            </div>
+            <div class="form-group">
+                <button type="submit" class="btn btn-primary btn-block">注册</button>
+            </div>
+            </div>
+            <div class="form-group mt-5">
+                <a href="/wap/checkuser" class="btn btn-success btn-block">查询注册状态</a>
+            </div>
+        </form>
+
+       <!--  <div class="text-white fixed-bottom"><p class="text-center mb-1">Copyright © 2019 <a href="https://smartcost.com.cn" target="_blank" class="text-white">珠海纵横创新软件有限公司</a>.All Rights Reserved.<a class="text-white ml-2" href="http://www.miitbeian.gov.cn" target="_blank">粤ICP备14032472号</a></p></div> -->
+    </div>
+
+    <!-- JS. -->
+    <script src="/lib/jquery/jquery-3.2.1.min.js"></script>
+    <script src="/lib/popper/popper.min.js"></script>
+    <script src="/lib/bootstrap/bootstrap.min.js"></script>
+    <script src="/web/building_saas/js/global.js"></script>
+    <script type="text/javascript" src="/web/users/js/gt.js"></script>
+<script>
+    $(function () {
+        $("#get-code").click(function() {
+            $('#mobiletips').hide();
+            const mobile = $("#mobile").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() {
+                        $('#mobiletips').text('短信接口出错!').show();
+                    },
+                    beforeSend: function() {
+                    },
+                    success: function(response) {
+                        if (response.err === 0) {
+                            codeSuccess(btn);
+                        } else {
+                            $('#mobiletips').text(response.msg).show();
+                        }
+                    }
+                });
+            }
+        });
+
+        $('#check-user').click(function () {
+            const mobile = $("#mobile").val();
+            const code = $('#code').val();
+            $("#error-tips").hide();
+            $('#mobiletips').hide();
+            if(!validMobile(mobile)){
+                return false;
+            }
+            if(code === '') {
+                return false;
+            }
+            $.ajax({
+                type: 'post',
+                url: '/wap/checkuser',
+                async: false,
+                data: { mobile: mobile, code: code },
+                dataType: 'json',
+                success: function (result) {
+                    if (result.error === 0) {
+                        if (result.existUser === 1) {
+                            window.location.href = '/wap/checkuser?mobile=' + mobile;
+                        } else {
+                            // $('#mobiletips').text('当前手机号未注册').show();
+                            $('#mobile').attr('readOnly', true);
+                            // $('#tips').text('用户注册');
+                            $('#msg').show();
+                            $('#msg input').removeAttr('disabled');
+                            // $('#check-user').parents('div').addClass('mt-5');
+                            // $('#check-user').siblings('a').show();
+                            $('#check-user').remove();
+                            $('#code').parents('.form-group').remove();
+                            $('#get-code').parents('.form-group').remove();
+                            if (result.existUser === 2) {
+                                $('#password').parents('.form-group').remove();
+                                $('#type').val(2); // 代表sso已有账号
+                            } else {
+                                $('#type').val(1); // 代表同时注册sso
+                            }
+                        }
+                    } else {
+                        showError(result.msg, null);
+                    }
+                }
+            })
+        })
+    });
+
+    /**
+     * 获取成功后的操作
+     *
+     * @param {Object} btn - 点击的按钮
+     * @return {void}
+     */
+    function codeSuccess(btn) {
+        let counter = 60;
+        btn.removeClass('btn-primary').addClass('btn-outline-secondary disabled').text('重新获取('+ counter +')');
+        btn.parents().siblings('div').children('input').removeAttr('readonly');
+
+        const countDown = setInterval(function() {
+            const countString = counter - 1 <= 0 ? '' : counter - 1;
+            // 倒数结束后
+            if (countString === '') {
+                clearInterval(countDown);
+                btn.removeClass('btn-outline-secondary disabled').addClass('btn-primary').text('获取验证码');
+            }
+            const text = '重新获取' + (countString === '' ? '' : '('+ countString +')');
+            btn.text(text);
+            counter -= 1;
+        }, 1000);
+    }
+
+    /**
+     * 提示错误
+     *
+     * @param {string} msg
+     * @param {object} element
+     * @return {void}
+     */
+    function showError(msg, element) {
+        if (element !== null) {
+            element.parent().addClass('has-danger');
+        }
+        $("#message").html(msg);
+        $("#error-tips").show("fast");
+    }
+
+    /**
+     * 提示错误
+     *
+     * @param {string} msg
+     * @param {object} element
+     * @return {void}
+     */
+    function showError2(msg, element) {
+        if (element !== null) {
+            element.parent().addClass('has-danger');
+        }
+        $("#message2").html(msg);
+        $("#error-tips2").show("fast");
+    }
+
+    /**
+     * 验证手机号是否正确
+     *
+     * @return {boolean}
+     */
+    function validMobile(mobile, status = 1) {
+        let result = true;
+        if($.trim(mobile) === ''){
+            $('#mobiletips').text('手机号不能为空').show();
+            return false;
+        }
+        let mobileValid = /^1[3456789]\d{9}$/;
+        if(!mobileValid.test(mobile)){
+            $('#mobiletips').text('手机号码格式有误!').show();
+            return false;
+        }
+        return result;
+    }
+
+    function checkForm() {
+        let flag = true;
+        if (parseInt($('#type').val()) === 1) {
+            $('#pwd-tips').hide();
+            const pwd = $('#password').val();
+            if (pwd.length < 6 || pwd.length > 16) {
+                flag = false;
+                $('#pwd-tips').show();
+            }
+        }
+        $('#province-tips').hide();
+        $('#company-tips').hide();
+        $('#name-tips').hide();
+        $('#qq-tips').hide();
+        const province = parseInt($('#province').val());
+        if (province === -1) {
+            flag = false;
+            $('#province-tips').show();
+        }
+        const company = $('#company').val();
+        if (company === '') {
+            flag = false;
+            $('#company-tips').show();
+        }
+        const realname = $('#realname').val();
+        const pattern2 = /^[A-Za-z0-9\u4e00-\u9fa5]+$/gi;
+        if (!pattern2.test(realname) && realname != '') {
+            flag = false;
+            $('#name-tips').show();
+        }
+        const qq = $('#qq').val();
+        const pattern = /^[1-9][0-9]{4,14}$/;
+        if(!pattern.test(qq) && qq !== ''){
+            flag = false;
+            $('#qq-tips').show();
+        }
+        if (flag) {
+            $('button[type="submit"]').text('注册中,请勿退出...').attr('disabled', true);
+        }
+        return flag;
+    }
+</script>
+</body>
+
+</html>

+ 16 - 16
web/users/js/login.js

@@ -228,17 +228,17 @@ $(document).ready(function () {
         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/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',
@@ -256,11 +256,11 @@ $(document).ready(function () {
                                 }
                             }
                         });
-                    } else {
-                        $('#phoneHelp').text(response.msg);
-                    }
-                }
-            })
+            //         } else {
+            //             $('#phoneHelp').text(response.msg);
+            //         }
+            //     }
+            // })
         }
     });
 });