Browse Source

维护页面和维护中退出系统

laiguoran 5 years ago
parent
commit
f0c893d34b
4 changed files with 37 additions and 54 deletions
  1. 7 0
      app/controller/login_controller.js
  2. 15 0
      app/extend/helper.js
  3. 7 54
      app/service/maintain.js
  4. 8 0
      app/view/login/login.ejs

+ 7 - 0
app/controller/login_controller.js

@@ -8,6 +8,7 @@
  * @version
  */
 const URL = require('url');
+const maintainConst = require('../const/maintain');
 
 module.exports = app => {
 
@@ -23,8 +24,14 @@ module.exports = app => {
             const errorMessage = ctx.session.loginError;
             // 显示完删除
             ctx.session.loginError = null;
+            // 获取系统维护信息
+            const maintainData = await ctx.service.maintain.getDataById(1);
+
+            await ctx.service.maintain.syncMaintainData();
 
             const renderData = {
+                maintainData,
+                maintainConst,
                 errorMessage,
             };
             await ctx.render('login/login.ejs', renderData);

+ 15 - 0
app/extend/helper.js

@@ -845,6 +845,21 @@ module.exports = {
         return moment(time).format('YYYY年MM月DD日 HH:mm');
     },
 
+    timeAdd(duration) {
+        const d = parseInt(duration);
+        let time = 0;
+        if (d === 1) {
+            time = 60 * 15 * 1000;
+        } else if (d === 2) {
+            time = 60 * 30 * 1000;
+        } else if (d === 3) {
+            time = 3600 * 1000;
+        } else if (d === 4) {
+            time = 3600 * 2 * 1000;
+        }
+        return time;
+    },
+
     async sendUserSms(userId, type, judge, msg) {
         const mobiles = [];
         if (!userId || (userId instanceof Array && userId.length === 0)) return;

+ 7 - 54
app/service/maintain.js

@@ -24,58 +24,6 @@ module.exports = app => {
         }
 
         /**
-         * 校验规则
-         *
-         * @return {Object} - 返回校验规则
-         */
-        rule() {
-            return {
-                maintain_time: { type: 'string', required: true, allowEmpty: false },
-                duration: { type: 'string', required: true, allowEmpty: false, min: 1 },
-                msg: { type: 'string', required: false, allowEmpty: true },
-            };
-        }
-
-        async stop(id = 1) {
-            const data = {};
-            data.id = id;
-            data.status = maintainConst.status.notset;
-            data.maintain_time = '';
-            const operate = await this.db.update(this.tableName, data);
-
-            return operate.affectedRows > 0;
-        }
-
-        /**
-         * 保存数据
-         *
-         * @param {Object} data - post过来的数据
-         * @param {Number} id - 用于判断修改还是新增的id
-         * @return {boolean} - 操作结果
-         */
-        async save(data = {}, id = 1) {
-            delete data._csrf;
-            data.maintain_time = Date.parse(data.maintain_time);
-            let status = maintainConst.status.notset;
-            const thisTime = new Date().getTime();
-            if (data.maintain_time) {
-                const endtime = data.maintain_time + await this.durationAddTime(data.duration);
-                if (endtime <= thisTime) {
-                    throw '维护时间必须大于或等于当前时间';
-                } else if (data.maintain_time > thisTime) {
-                    status = maintainConst.status.unstart;
-                } else if (data.maintain_time <= thisTime && endtime > thisTime) {
-                    status = maintainConst.status.ongoing;
-                }
-            }
-            data.id = id;
-            data.status = status;
-            const operate = await this.db.update(this.tableName, data);
-
-            return operate.affectedRows > 0;
-        }
-
-        /**
          * 同步系统设置消息
          * @param id
          * @returns {Promise<boolean>}
@@ -88,9 +36,9 @@ module.exports = app => {
                 const thisTime = new Date().getTime();
                 if (maintainData.maintain_time !== '') {
                     maintainData.maintain_time = parseFloat(maintainData.maintain_time);
-                    if (maintainData.status === maintainConst.status.unstart && maintainData.maintain_time <= thisTime && maintainData.duration === maintainConst.duration.forever) {
+                    if (maintainData.status !== maintainConst.status.notset && maintainData.maintain_time <= thisTime && maintainData.duration === maintainConst.duration.forever) {
                         status = maintainConst.status.ongoing;
-                    } else if (maintainData.status !== maintainConst.status.notset && maintainData.duration !== maintainConst.duration.forever) {
+                    } else if (maintainData.status !== maintainConst.status.notset) {
                         const mttime = maintainData.maintain_time + await this.durationAddTime(maintainData.duration);
                         if (maintainData.maintain_time > thisTime) {
                             status = maintainConst.status.unstart;
@@ -110,6 +58,11 @@ module.exports = app => {
                 }
                 const operate = this.db.update(this.tableName, data);
 
+                if (status === maintainConst.status.ongoing) {
+                    this.ctx.session = null;
+                    this.ctx.redirect('/');
+                }
+
                 result = operate.affectedRows > 0;
             } catch (error) {
                 console.log(error);

+ 8 - 0
app/view/login/login.ejs

@@ -12,6 +12,13 @@
 </head>
 <body class="login-body">
 <div class="container">
+    <% if (maintainData.status === maintainConst.status.ongoing) { %>
+    <form class="form-signin">
+        <h4 class="text-center mb-3"><i class="fa fa-wrench"></i>系统正在维护</h4>
+        <h4>预计恢复时间<%- (maintainData.duration !== maintainConst.duration.forever ? '为 ' + ctx.helper.dateTran(parseFloat(maintainData.maintain_time) + ctx.helper.timeAdd(maintainData.duration)) : ' 暂未确定') %></h4>
+        <h4>造成不便敬请谅解。</h4>
+    </form>
+    <% } else { %>
     <!--演示版-->
     <form class="form-signin" method="post" action="/login">
         <h4 class="text-center mb-2">纵横云计量</h4>
@@ -55,6 +62,7 @@
             <a href="#fg-password" data-toggle="modal" data-target="#fg-password"  class="mr-3">忘记密码?</a>
         </div>
     </form>
+    <% } %>
     <!--项目版-->
     <div class="text-white fixed-bottom"><p class="text-center mb-1">Copyright © 2018 <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>