From f1fa3af01cdcbb17d03a91eeaaf56f3d32bf3067 Mon Sep 17 00:00:00 2001 From: "xie.bx" Date: Mon, 9 Oct 2023 23:23:23 +0800 Subject: [PATCH] =?UTF-8?q?uniapp=20=20=E4=B8=AA=E4=BA=BA=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/LoginController.java | 9 ++ .../implatform/controller/UserController.java | 2 +- .../bx/implatform/dto/GroupMessageDTO.java | 2 +- .../java/com/bx/implatform/dto/LoginDTO.java | 4 +- .../com/bx/implatform/dto/ModifyPwdDTO.java | 21 +++ .../bx/implatform/dto/PrivateMessageDTO.java | 2 +- .../com/bx/implatform/dto/RegisterDTO.java | 2 +- .../bx/implatform/service/IUserService.java | 3 + .../service/impl/UserServiceImpl.java | 17 +++ im-uniapp/pages.json | 4 + im-uniapp/pages/chat/chat-box.vue | 87 ++++++++---- im-uniapp/pages/common/user-info.vue | 2 + im-uniapp/pages/group/group-edit.vue | 1 - im-uniapp/pages/group/group-info.vue | 6 +- im-uniapp/pages/group/group-member.vue | 4 +- im-uniapp/pages/mine/mine-edit.vue | 76 +++++++++++ im-uniapp/pages/mine/mine-password.vue | 105 +++++++++++++++ im-uniapp/pages/mine/mine.vue | 126 ++++++++++++++++-- 18 files changed, 429 insertions(+), 44 deletions(-) create mode 100644 im-platform/src/main/java/com/bx/implatform/dto/ModifyPwdDTO.java create mode 100644 im-uniapp/pages/mine/mine-edit.vue create mode 100644 im-uniapp/pages/mine/mine-password.vue diff --git a/im-platform/src/main/java/com/bx/implatform/controller/LoginController.java b/im-platform/src/main/java/com/bx/implatform/controller/LoginController.java index 4e70554..3a09fed 100644 --- a/im-platform/src/main/java/com/bx/implatform/controller/LoginController.java +++ b/im-platform/src/main/java/com/bx/implatform/controller/LoginController.java @@ -1,6 +1,7 @@ package com.bx.implatform.controller; +import com.bx.implatform.dto.ModifyPwdDTO; import com.bx.implatform.result.Result; import com.bx.implatform.result.ResultUtils; import com.bx.implatform.service.IUserService; @@ -45,4 +46,12 @@ public class LoginController { userService.register(dto); return ResultUtils.success(); } + + @PutMapping("/modifyPwd") + @ApiOperation(value = "修改密码",notes="修改用户密码") + public Result update(@Valid @RequestBody ModifyPwdDTO dto){ + userService.modifyPassword(dto); + return ResultUtils.success(); + } + } diff --git a/im-platform/src/main/java/com/bx/implatform/controller/UserController.java b/im-platform/src/main/java/com/bx/implatform/controller/UserController.java index bbdeace..8dc7bb6 100644 --- a/im-platform/src/main/java/com/bx/implatform/controller/UserController.java +++ b/im-platform/src/main/java/com/bx/implatform/controller/UserController.java @@ -1,5 +1,6 @@ package com.bx.implatform.controller; +import com.bx.implatform.dto.ModifyPwdDTO; import com.bx.implatform.entity.User; import com.bx.implatform.result.Result; import com.bx.implatform.result.ResultUtils; @@ -61,7 +62,6 @@ public class UserController { - @GetMapping("/findByNickName") @ApiOperation(value = "查找用户",notes="根据昵称查找用户") public Result> findByNickName(@NotEmpty(message = "用户昵称不可为空") @RequestParam("nickName") String nickName){ diff --git a/im-platform/src/main/java/com/bx/implatform/dto/GroupMessageDTO.java b/im-platform/src/main/java/com/bx/implatform/dto/GroupMessageDTO.java index 6227eb1..2535784 100644 --- a/im-platform/src/main/java/com/bx/implatform/dto/GroupMessageDTO.java +++ b/im-platform/src/main/java/com/bx/implatform/dto/GroupMessageDTO.java @@ -9,7 +9,7 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; @Data -@ApiModel("群聊消息VO") +@ApiModel("群聊消息DTO") public class GroupMessageDTO { @NotNull(message="群聊id不可为空") diff --git a/im-platform/src/main/java/com/bx/implatform/dto/LoginDTO.java b/im-platform/src/main/java/com/bx/implatform/dto/LoginDTO.java index aebc58e..0f16599 100644 --- a/im-platform/src/main/java/com/bx/implatform/dto/LoginDTO.java +++ b/im-platform/src/main/java/com/bx/implatform/dto/LoginDTO.java @@ -11,7 +11,7 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; @Data -@ApiModel("用户登录VO") +@ApiModel("用户登录DTO") public class LoginDTO { @Max(value = 1,message = "登录终端类型取值范围:0,1") @@ -24,7 +24,7 @@ public class LoginDTO { @ApiModelProperty(value = "用户名") private String userName; - @NotEmpty(message="用户密码不可为空") + @NotEmpty(message="用户密码不可为空") @ApiModelProperty(value = "用户密码") private String password; diff --git a/im-platform/src/main/java/com/bx/implatform/dto/ModifyPwdDTO.java b/im-platform/src/main/java/com/bx/implatform/dto/ModifyPwdDTO.java new file mode 100644 index 0000000..a4de7fe --- /dev/null +++ b/im-platform/src/main/java/com/bx/implatform/dto/ModifyPwdDTO.java @@ -0,0 +1,21 @@ +package com.bx.implatform.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; + +@Data +@ApiModel("修改密码DTO") +public class ModifyPwdDTO { + + @NotEmpty(message="旧用户密码不可为空") + @ApiModelProperty(value = "旧用户密码") + private String oldPassword; + + @NotEmpty(message="新用户密码不可为空") + @ApiModelProperty(value = "新用户密码") + private String newPassword; + +} diff --git a/im-platform/src/main/java/com/bx/implatform/dto/PrivateMessageDTO.java b/im-platform/src/main/java/com/bx/implatform/dto/PrivateMessageDTO.java index bc74399..9ae1a64 100644 --- a/im-platform/src/main/java/com/bx/implatform/dto/PrivateMessageDTO.java +++ b/im-platform/src/main/java/com/bx/implatform/dto/PrivateMessageDTO.java @@ -10,7 +10,7 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; @Data -@ApiModel("私聊消息VO") +@ApiModel("私聊消息DTO") public class PrivateMessageDTO { diff --git a/im-platform/src/main/java/com/bx/implatform/dto/RegisterDTO.java b/im-platform/src/main/java/com/bx/implatform/dto/RegisterDTO.java index 61255be..78f115c 100644 --- a/im-platform/src/main/java/com/bx/implatform/dto/RegisterDTO.java +++ b/im-platform/src/main/java/com/bx/implatform/dto/RegisterDTO.java @@ -8,7 +8,7 @@ import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotEmpty; @Data -@ApiModel("用户注册VO") +@ApiModel("用户注册DTO") public class RegisterDTO { @Length(max = 64,message = "用户名不能大于64字符") diff --git a/im-platform/src/main/java/com/bx/implatform/service/IUserService.java b/im-platform/src/main/java/com/bx/implatform/service/IUserService.java index 4ff8c40..d960165 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/IUserService.java +++ b/im-platform/src/main/java/com/bx/implatform/service/IUserService.java @@ -1,6 +1,7 @@ package com.bx.implatform.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.bx.implatform.dto.ModifyPwdDTO; import com.bx.implatform.entity.User; import com.bx.implatform.dto.LoginDTO; import com.bx.implatform.dto.RegisterDTO; @@ -14,6 +15,8 @@ public interface IUserService extends IService { LoginVO login(LoginDTO dto); + void modifyPassword(ModifyPwdDTO dto); + LoginVO refreshToken(String refreshToken); void register(RegisterDTO dto); diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java index 543083a..03e718f 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bx.imclient.IMClient; import com.bx.implatform.config.JwtProperties; +import com.bx.implatform.dto.ModifyPwdDTO; import com.bx.implatform.entity.Friend; import com.bx.implatform.entity.GroupMember; import com.bx.implatform.entity.User; @@ -88,6 +89,9 @@ public class UserServiceImpl extends ServiceImpl implements IU return vo; } + + + /** * 用refreshToken换取新 token * @@ -129,6 +133,19 @@ public class UserServiceImpl extends ServiceImpl implements IU log.info("注册用户,用户id:{},用户名:{},昵称:{}",user.getId(),dto.getUserName(),dto.getNickName()); } + + @Override + public void modifyPassword(ModifyPwdDTO dto) { + UserSession session = SessionContext.getSession(); + User user = this.getById(session.getUserId()); + if(!passwordEncoder.matches(dto.getOldPassword(),user.getPassword())){ + throw new GlobalException("旧密码不正确"); + } + user.setPassword(passwordEncoder.encode(dto.getNewPassword())); + this.updateById(user); + log.info("用户修改密码,用户id:{},用户名:{},昵称:{}",user.getId(),user.getUserName(),user.getNickName()); + } + /** * 根据用户名查询用户 * diff --git a/im-uniapp/pages.json b/im-uniapp/pages.json index fdc1564..67680b4 100644 --- a/im-uniapp/pages.json +++ b/im-uniapp/pages.json @@ -44,6 +44,10 @@ "path": "pages/group/group-invite" }, { "path": "pages/group/group-member" + }, { + "path": "pages/mine/mine-edit" + }{ + "path": "pages/mine/mine-password" }], "globalStyle": { "navigationBarTextStyle": "black", diff --git a/im-uniapp/pages/chat/chat-box.vue b/im-uniapp/pages/chat/chat-box.vue index 61bcd5b..26ac9cd 100644 --- a/im-uniapp/pages/chat/chat-box.vue +++ b/im-uniapp/pages/chat/chat-box.vue @@ -4,7 +4,7 @@ {{title}} - + - + + + + - - - + 相册 - + {{ tool.name }} @@ -46,8 +51,9 @@ :key="i" @click="selectEmoji(emoText)" mode="aspectFit" lazy-load="true"> - + + @@ -63,7 +69,8 @@ showVoice: false, // 是否显示语音录制弹窗 scrollMsgIdx: 0, // 滚动条定位为到哪条消息 chatTabBox: 'none', - sendTextFocus: false, + showKeyBoard:false, + keyboardHeight: 322, tools: [{ name: "拍摄", icon: "icon-camera" @@ -129,8 +136,6 @@ }).finally(() => { // 滚动到底部 this.scrollToBottom(); - // 重新获得输入焦点 - //this.sendTextFocus = true; }); }, fillTargetId(msgInfo, targetId) { @@ -142,16 +147,16 @@ }, scrollToBottom() { let size = this.chat.messages.length; - if(size>0){ - this.scrollToMsgIdx(size-1); + if (size > 0) { + this.scrollToMsgIdx(size - 1); } }, - scrollToMsgIdx(idx){ + scrollToMsgIdx(idx) { // 踩坑:如果scrollMsgIdx值没变化,滚动条不会移动 - if(idx == this.scrollMsgIdx && idx>0){ + if (idx == this.scrollMsgIdx && idx > 0) { this.$nextTick(() => { // 先滚动到上一条 - this.scrollMsgIdx = idx-1; + this.scrollMsgIdx = idx - 1; // 再滚动目标位置 this.scrollToMsgIdx(idx); }); @@ -160,21 +165,39 @@ this.$nextTick(() => { this.scrollMsgIdx = idx; }); - + }, - switchChatTabBox(chatTabBox,sendTextFocus) { + switchChatTabBox(chatTabBox,hideKeyBoard) { console.log("switchChatTabBox") this.chatTabBox = chatTabBox; - this.sendTextFocus = sendTextFocus this.scrollToBottom(); - console.log(this.sendTextFocus) + if(hideKeyBoard){ + uni.hideKeyboard(); + } }, selectEmoji(emoText) { this.sendText += `#${emoText};`; }, - onSendTextFoucs(){ - console.log("onSendTextFoucs") - this.scrollToBottom(); + onSendTextFoucs(e) { + // 更新键盘高度 + // if (e && e.detail && e.detail.height) { + // this.switchChatTabBox('keyboard') + // this.keyboardHeight = this.rpxTopx(e.detail.height); + // console.log(this.keyboardHeight) + // } + }, + onKeyboardheightchange(e){ + console.log(e); + if(e.detail.height >0){ + this.showKeyBoard = true; + this.switchChatTabBox('none',false) + this.keyboardHeight = this.rpxTopx(e.detail.height); + }else{ + this.showKeyBoard = false; + } + }, + onSendTextBlur() { + //this.switchChatTabBox("none") }, onUploadImageBefore(file) { let data = { @@ -225,7 +248,7 @@ break; } - + }, loadGroup(groupId) { this.$http({ @@ -235,9 +258,9 @@ this.group = group; this.$store.commit("updateChatFromGroup", group); this.$store.commit("updateGroup", group); - + }); - + this.$http({ url: `/group/members/${groupId}`, method: 'get' @@ -256,6 +279,12 @@ this.$store.commit("updateFriend", friend); }) }, + rpxTopx(rpx) { + // px转换成rpx + let info = uni.getSystemInfoSync() + let px = info.windowWidth * rpx / 750; + return Math.floor(rpx); + } }, computed: { mine() { @@ -293,6 +322,7 @@ onUnload() { console.log("onShow") this.$store.commit("activeChat", -1); + } } @@ -303,6 +333,7 @@ border: #dddddd solid 1px; display: flex; flex-direction: column; + .header { display: flex; justify-content: center; @@ -333,6 +364,7 @@ overflow: hidden; position: relative; background-color: white; + .scroll-box { height: 100%; } @@ -362,7 +394,7 @@ min-height: 85rpx; font-size: 30rpx; box-sizing: border-box; - + .send-text-area { width: 100%; } @@ -411,6 +443,7 @@ .chat-emotion { height: 100%; + .emotion-item-list { display: flex; flex-wrap: wrap; diff --git a/im-uniapp/pages/common/user-info.vue b/im-uniapp/pages/common/user-info.vue index d6c1605..451feaa 100644 --- a/im-uniapp/pages/common/user-info.vue +++ b/im-uniapp/pages/common/user-info.vue @@ -75,6 +75,8 @@ title: "确认删除", content: `确认要删除与 '${this.userInfo.nickName}'的好友关系吗?`, success: ()=> { + if(res.cancel) + return; this.$http({ url: `/friend/delete/${this.userInfo.id}`, method: 'delete' diff --git a/im-uniapp/pages/group/group-edit.vue b/im-uniapp/pages/group/group-edit.vue index aaf075e..d8c8c4e 100644 --- a/im-uniapp/pages/group/group-edit.vue +++ b/im-uniapp/pages/group/group-edit.vue @@ -21,7 +21,6 @@ - diff --git a/im-uniapp/pages/group/group-info.vue b/im-uniapp/pages/group/group-info.vue index be2bdb5..f2b84ed 100644 --- a/im-uniapp/pages/group/group-info.vue +++ b/im-uniapp/pages/group/group-info.vue @@ -100,6 +100,8 @@ title: '确认退出?', content: `退出群聊后将不再接受群里的消息,确认退出吗?`, success: () => { + if(res.cancel) + return; this.$http({ url: `/group/quit/${this.group.id}`, method: 'DELETE' @@ -122,7 +124,9 @@ uni.showModal({ title: '确认解散?', content: `确认要解散群聊'${this.group.name}'吗?`, - success:()=>{ + success:(res)=>{ + if(res.cancel) + return; this.$http({ url: `/group/delete/${this.group.id}`, method: 'delete' diff --git a/im-uniapp/pages/group/group-member.vue b/im-uniapp/pages/group/group-member.vue index d75c024..fabf44f 100644 --- a/im-uniapp/pages/group/group-member.vue +++ b/im-uniapp/pages/group/group-member.vue @@ -39,7 +39,9 @@ uni.showModal({ title: '确认移出?', content: `确定将成员'${member.aliasName}'移出群聊吗?`, - success: () => { + success: (res) => { + if(res.cancel) + return; this.$http({ url: `/group/kick/${this.group.id}?userId=${member.userId}`, method: 'DELETE' diff --git a/im-uniapp/pages/mine/mine-edit.vue b/im-uniapp/pages/mine/mine-edit.vue new file mode 100644 index 0000000..fac9bd2 --- /dev/null +++ b/im-uniapp/pages/mine/mine-edit.vue @@ -0,0 +1,76 @@ + + + + + \ No newline at end of file diff --git a/im-uniapp/pages/mine/mine-password.vue b/im-uniapp/pages/mine/mine-password.vue new file mode 100644 index 0000000..b350f77 --- /dev/null +++ b/im-uniapp/pages/mine/mine-password.vue @@ -0,0 +1,105 @@ + + + + + \ No newline at end of file diff --git a/im-uniapp/pages/mine/mine.vue b/im-uniapp/pages/mine/mine.vue index 4535a81..3747374 100644 --- a/im-uniapp/pages/mine/mine.vue +++ b/im-uniapp/pages/mine/mine.vue @@ -1,22 +1,132 @@ - + .avatar { + display: flex; + justify-content: center; + align-items: center; + width: 160rpx; + height: 160rpx; + + .head-image { + width: 100%; + height: 100%; + border-radius: 10%; + } + } + + .info-item { + display: flex; + align-items: flex-start; + flex-direction: column; + padding-left: 40rpx; + flex: 1; + + .info-primary { + display: flex; + + .info-username { + font-size: 40rpx; + font-weight: 600; + } + } + } + + .info-arrow { + width: 50rpx; + font-size: 30rpx; + font-weight: 600; + } + } + + .line { + margin: 20rpx; + border-bottom: 1px solid #aaaaaa; + } + + .btn-group { + margin: 100rpx; + + .btn { + margin-top: 20rpx; + } + + } + } + \ No newline at end of file