diff --git a/app/src/App.vue b/app/src/App.vue index 3be9557..b518e18 100644 --- a/app/src/App.vue +++ b/app/src/App.vue @@ -18,6 +18,7 @@ localStorage.setItem('username', user.username); localStorage.setItem('level', user.level); localStorage.setItem('department', user.department); + localStorage.setItem('account', user.account); } } const level = localStorage.getItem('level'); @@ -49,6 +50,7 @@ localStorage.removeItem('username'); localStorage.removeItem('department'); localStorage.removeItem('level'); + localStorage.removeItem('account'); } } } diff --git a/app/src/components/Home.vue b/app/src/components/Home.vue index a39849d..3b0a53c 100644 --- a/app/src/components/Home.vue +++ b/app/src/components/Home.vue @@ -136,6 +136,37 @@ + + + + 修改密碼 + + + + + + + + + + + + 取消 + + + 修改 + + + + @@ -170,6 +201,15 @@ this1: this, menuitems: [ { + icon: 'mdi-pencil', + href: '', + title: '修改密碼', + click: () => { + // this.this1.logout(); + this.dialogModifyPwd = true; + }, + }, + { icon: 'mdi-exit-to-app', href: '#', title: '登出', @@ -178,6 +218,10 @@ }, }, ], + dialogModifyPwd: false, + oldPwd: '', + newPwd: '', + chechNewPwd: '', } }, created() { @@ -204,7 +248,8 @@ this.$emit("authenticated", { 'username': null, 'department': null, - 'level': null + 'level': null, + 'account': null, }); }, async getRoutes() { @@ -240,6 +285,38 @@ if (level === '3') { this.items = [{'text': '資訊資產清冊', 'route': '/serverlist'}]; } + }, + modifyPwd() { + if (this.newPwd !== this.chechNewPwd) { + alert('請確認新密碼正確'); + return; + } + if (this.newPwd === this.oldPwd) { + alert('新舊密碼不得相同'); + return; + } + const pattern = new RegExp('\\s|\\W'); + + if ( this.oldPwd === '' || pattern.test(this.oldPwd) || this.newPwd === '' || pattern.test(this.newPwd)) { + alert('1.密碼不得有空白\n' + + '2.限定英文及數字\n'); + return; + } + this.$axios.put('account/pwd', { + oldPwd: this.oldPwd, + newPwd: this.newPwd, + account: localStorage.getItem('account') + }).then((resp) => { + if (resp.data.code !== 200) { + alert(resp.data.message); + } else { + alert('已修改'); + this.dialogModifyPwd = false; + } + this.oldPwd = ''; + this.newPwd = ''; + this.chechNewPwd = ''; + }); } } } diff --git a/app/src/components/Login.vue b/app/src/components/Login.vue index eafbae6..e0e7d24 100644 --- a/app/src/components/Login.vue +++ b/app/src/components/Login.vue @@ -99,7 +99,8 @@ { 'username': json.data.username, 'department': json.data.department, - 'level': json.data.level + 'level': json.data.level, + 'account': json.data.account }); } else { _this.message = json.message; diff --git a/src/main/java/com/moze/rms/controller/AccountController.java b/src/main/java/com/moze/rms/controller/AccountController.java index 2e91efe..35cd1b6 100644 --- a/src/main/java/com/moze/rms/controller/AccountController.java +++ b/src/main/java/com/moze/rms/controller/AccountController.java @@ -2,6 +2,7 @@ package com.moze.rms.controller; import com.moze.rms.dao.AccountDAO; +import com.moze.rms.entity.dto.PwdDTO; import com.moze.rms.entity.model.Account; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -75,5 +76,15 @@ public class AccountController { return new JsonResult(StatusCode.SUCCESS, accountDAO.finfDepartments()); } + @PutMapping("/pwd") + public JsonResult modifyPwd(@RequestBody PwdDTO pwdDTO) { + Optional> user = accountDAO.findUser(pwdDTO.getAccount().toLowerCase()); + if (user.isPresent() && user.get().get("pwd").equals(pwdDTO.getOldPwd())) { + accountDAO.modifyPwd(pwdDTO.getNewPwd(), pwdDTO.getAccount().toLowerCase()); + return new JsonResult(StatusCode.SUCCESS, null); + } else { + return new JsonResult(StatusCode.PASSWORD_INCORRECT, null); + } + } } diff --git a/src/main/java/com/moze/rms/controller/StatusCode.java b/src/main/java/com/moze/rms/controller/StatusCode.java index f918b29..fad33c8 100644 --- a/src/main/java/com/moze/rms/controller/StatusCode.java +++ b/src/main/java/com/moze/rms/controller/StatusCode.java @@ -31,8 +31,9 @@ public enum StatusCode { DUPLICATE_ID(420, "員工編號重複"), - DUPLICATE_ACCOUNT(421, "帳號重複"); + DUPLICATE_ACCOUNT(421, "帳號重複"), + PASSWORD_INCORRECT(422, "密碼錯誤"); private int code; diff --git a/src/main/java/com/moze/rms/dao/AccountDAO.java b/src/main/java/com/moze/rms/dao/AccountDAO.java index 4f89963..bf3344a 100644 --- a/src/main/java/com/moze/rms/dao/AccountDAO.java +++ b/src/main/java/com/moze/rms/dao/AccountDAO.java @@ -1,10 +1,12 @@ package com.moze.rms.dao; +import com.moze.rms.entity.dto.PwdDTO; import com.moze.rms.entity.model.Account; import org.jdbi.v3.core.Handle; import org.jdbi.v3.sqlobject.SqlObject; import org.jdbi.v3.sqlobject.config.RegisterBeanMapper; import org.jdbi.v3.sqlobject.statement.SqlQuery; +import org.jdbi.v3.sqlobject.statement.SqlUpdate; import java.util.List; import java.util.Map; @@ -73,4 +75,8 @@ public interface AccountDAO extends SqlObject { @SqlQuery("select count(*) from account where account = ?;") Integer findByAccount(String account); + + + @SqlUpdate("update account set pwd = ? where lower(account) = ?") + void modifyPwd(String newPwd, String account); } diff --git a/src/main/java/com/moze/rms/entity/dto/PwdDTO.java b/src/main/java/com/moze/rms/entity/dto/PwdDTO.java new file mode 100644 index 0000000..420e69f --- /dev/null +++ b/src/main/java/com/moze/rms/entity/dto/PwdDTO.java @@ -0,0 +1,16 @@ +package com.moze.rms.entity.dto; + +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +public class PwdDTO { + + private String account; + + private String oldPwd; + + private String newPwd; + +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 857e529..74f9c1d 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,5 +1,5 @@ -#spring.profiles.active=dev -spring.profiles.active=pro +spring.profiles.active=dev +#spring.profiles.active=pro server.servlet.context-path=/rms spring.servlet.multipart.max-file-size=100MB