فهرست منبع

修改账号和密码方式更改

laiguoran 5 سال پیش
والد
کامیت
6fa1f8dac5
4فایلهای تغییر یافته به همراه103 افزوده شده و 31 حذف شده
  1. 7 9
      app/controller/setting_controller.js
  2. 27 1
      app/public/js/setting.js
  3. 15 7
      app/service/project_account.js
  4. 54 14
      app/view/setting/user_modal.ejs

+ 7 - 9
app/controller/setting_controller.js

@@ -310,10 +310,6 @@ module.exports = app => {
         }
 
         async resetUserPassword(ctx) {
-            const response = {
-                err: 0,
-                msg: '',
-            };
             try {
                 // 获取项目数据
                 const projectId = ctx.session.sessionProject.id;
@@ -328,19 +324,21 @@ module.exports = app => {
                 const accountId = parseInt(ctx.request.body.id);
                 let password = ctx.request.body.reset_password;
                 password = password.toString();
+                const account = ctx.request.body.account !== undefined ? ctx.request.body.account : '';
                 if (isNaN(accountId) || accountId <= 0 || password.length < 6) {
                     throw '参数错误';
                 }
-                const result = await ctx.service.projectAccount.resetPassword(accountId, password);
+                const result = await ctx.service.projectAccount.resetPassword(accountId, password, account);
                 if (!result) {
                     throw '重置密码失败!';
                 }
+                this.setMessage('保存账号数据成功', this.messageType.SUCCESS);
+                ctx.redirect(ctx.request.header.referer);
             } catch (error) {
-                response.err = 1;
-                response.msg = error;
+                console.log(error);
+                this.setMessage(error.toString(), this.messageType.ERROR);
+                ctx.redirect(ctx.request.header.referer);
             }
-
-            ctx.body = response;
         }
 
         /**

+ 27 - 1
app/public/js/setting.js

@@ -39,7 +39,10 @@ $(document).ready(() => {
         } else {
             $('#edit-user input[name="mobile"]').siblings('small').hide();
         }
-
+        $('#edit-password input[name="account"]').val(account.account);
+        $('#edit-password input[class="account-check"]').val(account.account);
+        $('#edit-password input[name="id"]').val(account.id);
+        $('#edit-password input[name="reset_password"]').val('');
     });
 
     // 分配随机密码
@@ -48,6 +51,12 @@ $(document).ready(() => {
         $(this).parent().parent().find('input').val(password);
     });
 
+    // 分配随机密码
+    $("#rand-password2").click(function() {
+        const password = randPassword();
+        $(this).parent().parent().find('input').val(password);
+    });
+
     // 重置密码
     let isChange = false;
     $("#reset-password-btn").click(function() {
@@ -162,6 +171,23 @@ $(document).ready(() => {
     })
 });
 
+function checkPasswordForm() {
+    try {
+        if ($('#edit-password input[name="account"]').val() == '' || $('#edit-password input[name="account"]').hasClass('is-invalid')) {
+            throw '账号不能为空或已存在';
+        }
+        const resetPassword = $('#edit-password input[name="reset_password"]').val();
+        if (resetPassword.length < 6) {
+            throw '密码长度不能小于6';
+        }
+        if (!/^[0-9a-zA-Z*~!@&%$^\\(\\)#_\[\]\-\+={}|?'":,<>.`]+$/.test(resetPassword)) {
+            throw '密码只支持英文数字及符号';
+        }
+    } catch (err) {
+        toastr.error(err);
+        return false;
+    }
+}
 
 /**
  * 表单检测

+ 15 - 7
app/service/project_account.js

@@ -510,7 +510,7 @@ module.exports = app => {
          * @param {String} password - 重置的密码
          * @return {Boolean} - 重置结果
          */
-        async resetPassword(accountId, password) {
+        async resetPassword(accountId, password, account = '') {
             // 初始化事务
             this.transaction = await this.db.beginTransaction();
             let result = false;
@@ -521,13 +521,21 @@ module.exports = app => {
                     throw '不存在对应账号';
                 }
                 // 加密密码
-                const encryptPassword = crypto.createHmac('sha1', accountData.account).update(password)
+                const encryptPassword = account ? crypto.createHmac('sha1', account).update(password)
+                    .digest().toString('base64') : crypto.createHmac('sha1', accountData.account).update(password)
                     .digest().toString('base64');
                 // 更新账号密码
-                const sql = 'UPDATE ?? SET password=? WHERE id=? AND password != ?;';
-                const sqlParam = [this.tableName, encryptPassword, accountId, 'SSO password'];
-                const operate = await this.transaction.query(sql, sqlParam);
-                result = operate.affectedRows > 0;
+                if (account) {
+                    const sql = 'UPDATE ?? SET account=?,password=? WHERE id=? AND password != ?;';
+                    const sqlParam = [this.tableName, account, encryptPassword, accountId, 'SSO password'];
+                    const operate = await this.transaction.query(sql, sqlParam);
+                    result = operate.affectedRows > 0;
+                } else {
+                    const sql = 'UPDATE ?? SET password=? WHERE id=? AND password != ?;';
+                    const sqlParam = [this.tableName, encryptPassword, accountId, 'SSO password'];
+                    const operate = await this.transaction.query(sql, sqlParam);
+                    result = operate.affectedRows > 0;
+                }
 
                 if (!result) {
                     throw '更新密码失败';
@@ -536,7 +544,7 @@ module.exports = app => {
                 // 发送短信
                 if (accountData.auth_mobile !== '') {
                     const sms = new SMS(this.ctx);
-                    const content = '【纵横计量支付】账号:' + accountData.account + ',密码重置为:' + password;
+                    const content = '【纵横计量支付】账号:' + (account ? account : accountData.account) + ',密码重置为:' + password;
                     sms.send(accountData.auth_mobile, content);
                 }
 

+ 54 - 14
app/view/setting/user_modal.ejs

@@ -82,37 +82,37 @@
                 </div>
                 <div class="form-group">
                     <label>登录账号<b class="text-danger">*</b></label>
-                    <input class="form-control form-control-sm" value="" name="account" placeholder="支持英文数字组合" type="text">
+                    <input class="form-control form-control-sm" value="" name="account" readonly placeholder="支持英文数字组合" type="text">
                     <input value="" class="account-check" type="hidden">
                     <div class="invalid-feedback">
                         该账号已存在。
                     </div>
                 </div>
-                <div class="form-group">
-                    <label>登录密码</label>
-                    <div class="input-group">
-                        <input type="text" id="reset-password" class="form-control" placeholder="密码支持英文数字及符号">
-                        <div class="input-group-append">
-                            <button id="reset-password-btn" class="btn btn-outline-secondary btn-sm" type="button">修改密码</button>
-                        </div>
-                    </div>
-                    <span class="form-text text-success">如果账号已有认证手机,密码也将发送至该手机。</span>
-                </div>
+                <!--<div class="form-group">-->
+                    <!--<label>登录密码</label>-->
+                    <!--<div class="input-group">-->
+                        <!--<input type="text" id="reset-password" class="form-control form-control-sm" placeholder="密码支持英文数字及符号">-->
+                        <!--<div class="input-group-append">-->
+                            <!--<button id="reset-password-btn" class="btn btn-outline-secondary btn-sm" type="button">修改密码</button>-->
+                        <!--</div>-->
+                    <!--</div>-->
+                    <!--<span class="form-text text-success">如果账号已有认证手机,密码也将发送至该手机。</span>-->
+                <!--</div>-->
                 <div class="form-group">
                     <label>姓名<b class="text-danger">*</b></label>
                     <input class="form-control form-control-sm" value="" name="name" type="text">
                     <small class="form-text text-muted">修改姓名,将影响所有该账号参与数据</small>
                 </div>
                 <div class="form-group">
-                    <label>认证手机</label>
-                    <input class="form-control" data-mobile="auth-mobile" value="" type="text" readonly>
+                    <label>认证手机(短信通知)</label>
+                    <input class="form-control form-control-sm" data-mobile="auth-mobile" value="" type="text" readonly>
                 </div>
                 <div class="form-group">
                     <label>单位名称<b class="text-danger">*</b></label>
                     <input class="form-control form-control-sm" value="" name="company" type="text">
                 </div>
                 <div class="form-group">
-                    <label>角色/职位<b class="text-danger">*</b></label>
+                    <label>职位名称<b class="text-danger">*</b></label>
                     <input class="form-control form-control-sm" value="" name="role" type="text">
                 </div>
                 <div class="form-group">
@@ -128,6 +128,7 @@
             <div class="modal-footer">
                 <input type="hidden" name="id" id="user-id" value="">
                 <!--<button type="button" class="btn btn-outline-danger btn-sm" data-dismiss="modal">删除账号</button>-->
+                <button type="button" class="btn btn-sm btn-outline-primary" data-toggle="modal" data-target="#edit-password"  data-dismiss="modal">修改账号/密码</button>
                 <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
                 <button type="submit" class="btn btn-primary btn-sm">提交修改</button>
             </div>
@@ -174,3 +175,42 @@
         </div>
     </div>
 </div>
+<!--弹出修改帐号名-->
+<div class="modal" tabindex="-1" role="dialog" id="edit-password">
+    <div class="modal-dialog" role="document">
+        <form method="post" action="/setting/user/reset/password" class="modal-content" onsubmit="return checkPasswordForm();">
+            <div class="modal-header">
+                <h5 class="modal-title">修改账号/密码</h5>
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">&times;</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <div class="form-group">
+                    <label>登录账号<b class="text-danger">*</b></label>
+                    <input class="form-control form-control-sm" placeholder="支持英文数字组合" type="text" name="account" value="">
+                    <input value="" class="account-check" type="hidden">
+                    <div class="invalid-feedback">
+                        该账号已存在。
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label>登录密码<b class="text-danger">*</b></label>
+                    <div class="input-group input-group-sm">
+                        <input type="text" name="reset_password" class="form-control" placeholder="密码支持英文数字及符号">
+                        <div class="input-group-append">
+                            <button id="rand-password2" class="btn btn-outline-secondary" type="button">随机生成</button>
+                        </div>
+                    </div>
+                </div>
+                <div class="alert alert-warning py-1 px-2">若修改登录账号,必须重新设置新密码。新密码会发送至已认证手机。</div>
+            </div>
+            <div class="modal-footer">
+                <input type="hidden" name="_csrf" value="<%= ctx.csrf %>">
+                <input type="hidden" name="id" value="">
+                <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="submit" class="btn btn-sm btn-primary">提交修改</button>
+            </div>
+        </form>
+    </div>
+</div>