浏览代码

提交用户初始化代码

olym 7 年之前
父节点
当前提交
014dd04ca8

+ 51 - 0
app/controller/boot_controller.js

@@ -0,0 +1,51 @@
+'use strict';
+
+/**
+ * 初始化控制器
+ *
+ * @author CaiAoLin
+ * @date 2017/11/24
+ * @version
+ */
+module.exports = app => {
+
+    class BootController extends app.BaseController {
+
+        /**
+         * 初始化用户信息页面
+         *
+         * @param {Object} ctx - egg全局变量
+         * @return {void}
+         */
+        async index(ctx) {
+            const rule = ctx.service.customer.rule('boot');
+            const frontRule = ctx.helper.validateConvert(rule);
+
+            const renderData = {
+                rule: JSON.stringify(frontRule),
+            };
+            await ctx.render('boot/index.ejs', renderData);
+        }
+
+        /**
+         * 初始化用户
+         *
+         * @param {Object} ctx - egg全局变量
+         * @return {void}
+         */
+        async boot(ctx) {
+            try {
+                const rule = ctx.service.customer.rule('boot');
+                ctx.validate(rule);
+
+                const result = await ctx.service.customer.boot(ctx.request.body);
+                console.log(result);
+            } catch (error) {
+                console.log(error);
+            }
+            ctx.body = 'test';
+        }
+    }
+
+    return BootController;
+};

+ 30 - 0
app/controller/dashboard_controller.js

@@ -0,0 +1,30 @@
+'use strict';
+
+/**
+ * 控制面板
+ *
+ * @author CaiAoLin
+ * @date 2017/11/23
+ * @version
+ */
+
+module.exports = app => {
+
+    class DashboardController extends app.BaseController {
+
+        /**
+         * 控制面板页面
+         *
+         * @param {Object} ctx - egg全局变量
+         * @return {void}
+         */
+        async index(ctx) {
+            const renderData = {
+
+            };
+            await this.layout('dashboard/index.ejs', renderData);
+        }
+    }
+
+    return DashboardController;
+};

+ 6 - 7
app/controller/login_controller.js

@@ -8,7 +8,6 @@
  * @version
  */
 
-const SSO = require('../lib/sso');
 module.exports = app => {
 
     class LoginController extends app.BaseController {
@@ -46,7 +45,12 @@ module.exports = app => {
                 if (!result) {
                     throw '登录失败';
                 }
-                ctx.redirect('/login/test');
+
+                // 判断是否已经有对应用户信息,没有则跳转初始化页面
+                const needBoot = await ctx.service.customer.isNeedBoot(ctx.request.body);
+                const url = needBoot ? '/boot' : '/dashboard';
+                console.log(url);
+                ctx.redirect(url);
             } catch (error) {
                 console.log(error);
                 ctx.session.loginError = '用户名或密码错误';
@@ -66,11 +70,6 @@ module.exports = app => {
             ctx.redirect('/');
         }
 
-        async test(ctx) {
-            const test = ctx.session.sessionUser;
-            console.log(test);
-            ctx.body = 'hello';
-        }
     }
 
     return LoginController;

二进制
app/public/images/avatar.png


+ 8 - 3
app/router.js

@@ -5,11 +5,16 @@ module.exports = app => {
     // session验证中间件
     const sessionAuth = app.middlewares.sessionAuth();
 
-    // 控制面板相关
+    // 登入登出相关
     app.get('/login', 'loginController.index');
     app.get('/', 'loginController.index');
-    app.post('/login', 'loginController.login');
     app.get('/logout', 'loginController.logout');
-    app.get('/login/test', sessionAuth, 'loginController.test');
+    app.post('/login', 'loginController.login');
 
+    // 用户信息初始化相关
+    app.get('/boot', sessionAuth, 'bootController.index');
+    app.post('/boot', sessionAuth, 'bootController.boot');
+
+    // 控制面板相关
+    app.get('/dashboard', sessionAuth, 'dashboardController.index');
 };

+ 59 - 0
app/service/customer.js

@@ -24,6 +24,31 @@ module.exports = app => {
         }
 
         /**
+         * 数据规则
+         *
+         * @param {String} scene
+         * @return {Object}
+         */
+        rule(scene) {
+            let rule = {};
+            switch (scene) {
+                case 'boot':
+                    rule = {
+                        name: { type: 'string', required: true, min: 2 },
+                        company: { type: 'string', required: true, min: 2 },
+                        province: { type: 'string', required: true },
+                        company_type: { type: 'string', allowEmpty: true },
+                        scale: { type: 'string', allowEmpty: true },
+                    };
+                    break;
+                default:
+                    break;
+            }
+
+            return rule;
+        }
+
+        /**
          * 查询过虑
          *
          * @param {Object} data - 筛选表单中的get数据
@@ -60,6 +85,40 @@ module.exports = app => {
 
             return result.insertId;
         }
+
+        /**
+         * 判断是否需要初始化信息
+         *
+         * @param {Object} postData - 表单post过来的数据
+         * @return {Boolean} - 返回是否需要初始化结果
+         */
+        async isNeedBoot(postData) {
+            if (postData.username === undefined) {
+                return false;
+            }
+
+            const customer = await this.getDataByCondition({ email: postData.username });
+            if (customer === null) {
+                return false;
+            }
+
+            return customer.company === '';
+        }
+
+        /**
+         * 初始化用户信息
+         *
+         * @param {Object} postData - 表单post过来的数据
+         * @return {Boolean} - 返回初始化结果
+         */
+        async boot(postData) {
+            const sessionUser = this.ctx.session.sessionUser;
+
+            delete postData._csrf;
+            const result = await this.update(postData, { email: sessionUser.account });
+
+            return result;
+        }
     }
 
     return Customer;

+ 1 - 1
app/service/project_account.js

@@ -63,6 +63,7 @@ module.exports = app => {
          */
         async accountLogin(data, loginType) {
             let result = false;
+            let needToBoot = false;
             try {
                 // 验证数据
                 const scene = loginType === 1 ? 'ssoLogin' : 'login';
@@ -104,7 +105,6 @@ module.exports = app => {
                     result = await sso.loginValid(data.username, data.password.toString());
                     accountData.account = data.username;
                     accountData.id = sso.accountID;
-                    console.log(accountData);
                 }
 
 

+ 104 - 0
app/view/boot/index.ejs

@@ -0,0 +1,104 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <meta http-equiv="x-ua-compatible" content="ie=edge">
+    <title>用户信息填写-计量支付</title>
+    <link rel="stylesheet" href="/public/css/bootstrap/bootstrap.min.css">
+    <link rel="stylesheet" href="/public/css/main.css">
+    <link rel="stylesheet" href="/public/css/font-awesome/font-awesome.min.css">
+</head>
+
+<body>
+<div class="header">
+    <h1 class="logo"><a>计量支付</a></h1>
+    <div class="header-box">
+        <div class="header-nav"></div>
+        <div class="header-user pull-right">
+            <div class="avatar btn-group">
+                <a class="dropdown-toggle" data-toggle="dropdown">
+                    <span class="pic"><img src="/public/images/avatar.png"></span>
+                    <span><%= ctx.session.sessionUser.account %></span>
+                    <span class="caret"></span>
+                </a>
+                <div class="dropdown-menu">
+                    <a href="/logout" class="dropdown-item">退出登录</a>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<div class="main">
+    <div class="container login-infoinput">
+        <div class="row">
+            <div class="col-lg-8 m-auto">
+                <div class="card newuser-input">
+                    <div class="card-body">
+                        <h4 class="card-title">在开始使用前,请填写以下信息。</h4>
+                        <h6 class="card-subtitle text-muted">详细填写这些信息,可以让我们更好的服务您。</h6>
+                    </div>
+                    <div class="card-body">
+                        <form action="" method="post">
+                            <div class="form-group">
+                                <input class="form-control" placeholder="你的姓名" name="name" autofocus="">
+                            </div>
+                            <div class="form-group">
+                                <input class="form-control" placeholder="企业名称" name="company" autofocus="">
+                            </div>
+                            <div class="form-group">
+                                <select class="form-control" name="province">
+                                    <option value="">请选择企业所在地区</option>
+                                    <option value="1">广东省</option>
+                                    <option value="2">北京市</option>
+                                </select>
+                            </div>
+                            <div class="form-group">
+                                <a class="btn btn-link" data-toggle="collapse" href="#moreinfo" aria-expanded="false" aria-controls="moreinfo">更多选项</a>
+                            </div>
+                            <div class="collapse" id="moreinfo">
+                                <div class="form-group">
+                                    <select class="form-control" name="company_type">
+                                        <option value="">请选择企业类型</option>
+                                        <option name="1">设计</option>
+                                        <option name="2">施工</option>
+                                    </select>
+                                </div>
+                                <div class="form-group">
+                                    <select class="form-control" name="scale">
+                                        <option value="">请选择企业规模</option>
+                                        <option value="1">1-20</option>
+                                        <option value="2">20-50</option>
+                                        <option value="3">50-100</option>
+                                        <option value="4">100+</option>
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="form-group">
+                                <input type="hidden" name="_csrf" value="<%= ctx.csrf %>"/>
+                                <button class="btn btn-primary btn-block" type="submit">下一步</button>
+                            </div>
+                        </form>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- JS. -->
+<script type="text/javascript" src="/public/js/jquery/jquery-3.2.1.min.js"></script>
+<script type="text/javascript" src="/public/js/popper/popper.min.js"></script>
+<script type="text/javascript" src="/public/js/bootstrap/bootstrap.min.js"></script>
+<script type="text/javascript" src="/public/js/global.js"></script>
+<script type="text/javascript">
+    let rule = '<%- rule %>';
+    rule = JSON.parse(rule);
+    let message = {};
+</script>
+<script type="text/javascript" src="/public/js/jquery/jquery.validate.js"></script>
+<script type="text/javascript" src="/public/js/form_validate.js"></script>
+<script type="text/javascript" src="/public/js/validate.extend.js"></script>
+</body>
+
+</html>

+ 12 - 0
app/view/dashboard/index.ejs

@@ -0,0 +1,12 @@
+<div class="c-header mt-3">
+    <h4>需要你处理</h4>
+</div>
+<div class="c-body">
+    内容
+</div>
+<div class="c-header mt-4">
+    <h4>需要你关注</h4>
+</div>
+<div class="c-body">
+    内容
+</div>

+ 90 - 0
app/view/layout/layout.ejs

@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <meta http-equiv="x-ua-compatible" content="ie=edge">
+    <title>主页-计量支付</title>
+    <link rel="stylesheet" href="/public/css/bootstrap/bootstrap.min.css">
+    <link rel="stylesheet" href="/public/css/main.css">
+    <link rel="stylesheet" href="/public/css/font-awesome/font-awesome.min.css">
+</head>
+
+<body>
+<div class="header">
+    <h1 class="logo"><a>主页-纵横变更管理系统</a></h1>
+    <!-- <div class="poj-name">
+      <span class="name">项目A</span>
+      <div class="btn-group">
+        <a class=" btn" data-toggle="dropdown" >
+          <span class="fa fa-caret-down" data-toggle="tooltip" data-placement="bottom" title="切换项目"></span>
+        </a>
+        <div class="dropdown-menu">
+         <a href="#" class="dropdown-item">项目B</a>
+         <a href="#" class="dropdown-item">项目C</a>
+         <a href="#" class="dropdown-item">项目D</a>
+       </div>
+     </div><a href="settings-poj.html" class="btn" data-toggle="tooltip" data-placement="bottom" title="项目设置"><i class="fa fa-cogs"></i></a>
+    </div> -->
+    <div class="header-box">
+        <div class="header-nav"></div>
+        <div class="header-user pull-right">
+            <div class="avatar btn-group">
+                <a class="dropdown-toggle" data-toggle="dropdown">
+                    <span class="pic"><img src="/public/images/avatar.png"></span>
+                    <span><%= ctx.session.sessionUser.account %></span>
+                    <span class="caret"></span>
+                </a>
+                <div class="dropdown-menu">
+                    <a href="#" class="dropdown-item">账号资料</a>
+                    <a href="#" class="dropdown-item">账号安全</a>
+                    <div class="dropdown-divider"></div>
+                    <a href="#" class="dropdown-item">帮助中心</a>
+                    <a href="/logout" class="dropdown-item">退出登录</a>
+                </div>
+            </div>
+            <div class="msg">
+                <a>
+                    <i class="fa fa-bell"></i><sup>0</sup>
+                </a>
+            </div>
+        </div>
+    </div>
+</div>
+<div class="main">
+    <div class="main-nav">
+        <div class="nav-top">
+            <ul class="nav nav-pills flex-column nav-fill bg-nav">
+                <li class="nav-item active"><a href="dashboard.html" data-toggle="tooltip" data-placement="right"
+                                               title="主页"><i class="fa fa-dashboard"></i></a></li>
+                <li class="nav-item"><a href="taizhang.html" data-toggle="tooltip" data-placement="right"
+                                        title="台帐管理"><i class="fa fa-list-alt"></i></a></li>
+                <li class="nav-item"><a href="jiliang.html" data-toggle="tooltip" data-placement="right" title="计量管理"><i
+                                class="fa fa-calendar-check-o"></i></a></li>
+                <li class="nav-item"><a href="biangeng.html" data-toggle="tooltip" data-placement="right"
+                                        title="变更管理"><i class="fa fa-retweet"></i></a></li>
+                <li class="nav-item"><a href="hetong.html" data-toggle="tooltip" data-placement="right" title="合同管理"><i
+                                class="fa fa-handshake-o"></i></a></li>
+            </ul>
+        </div>
+    </div>
+    <div class="main-panel">
+        <div class="panel-content">
+            <div class="panel-title fluid">
+                <div class="title-main"><h2>主页</h2></div>
+            </div>
+            <div class="content-wrap">
+                <%- content %>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- JS. -->
+<script src="/public/js/jquery/jquery-3.2.1.min.js"></script>
+<script src="/public/js/popper/popper.min.js"></script>
+<script src="/public/js/bootstrap/bootstrap.min.js"></script>
+<script src="/public/js/global.js"></script>
+</body>
+
+</html>