Browse Source

前端代码格式化(使用vscode默认格式)

master
xsx 1 year ago
parent
commit
d0e684907f
  1. 1
      .gitignore
  2. 6
      README.md
  3. 2
      im-web/src/App.vue
  4. 4
      im-web/src/components/chat/ChatBox.vue
  5. 15
      im-web/src/components/chat/ChatGroupSide.vue
  6. 9
      im-web/src/components/chat/ChatHistory.vue
  7. 6
      im-web/src/components/chat/ChatItem.vue
  8. 1
      im-web/src/components/chat/ChatRecord.vue
  9. 7
      im-web/src/components/common/FileUpload.vue
  10. 1
      im-web/src/components/common/HeadImage.vue
  11. 6
      im-web/src/components/common/UserInfo.vue
  12. 21
      im-web/src/components/friend/AddFriend.vue
  13. 8
      im-web/src/components/group/AddGroupMember.vue
  14. 1
      im-web/src/components/group/GroupItem.vue
  15. 4
      im-web/src/components/group/GroupMember.vue
  16. 4
      im-web/src/components/group/GroupMemberItem.vue
  17. 4
      im-web/src/components/group/GroupMemberSelector.vue
  18. 2
      im-web/src/components/rtc/RtcGroupJoin.vue
  19. 3
      im-web/src/components/rtc/RtcPrivateAcceptor.vue
  20. 16
      im-web/src/components/rtc/RtcPrivateVideo.vue
  21. 8
      im-web/src/components/setting/Setting.vue
  22. 136
      im-web/src/utils/directive/dialogDrag.js
  23. 16
      im-web/src/view/Group.vue
  24. 8
      im-web/src/view/Home.vue
  25. 1
      im-web/src/view/Login.vue
  26. 19
      im-web/src/view/Register.vue
  27. BIN
      截图/交流群2.png

1
.gitignore

@ -12,4 +12,3 @@
/im-web/dist/
/im-uniapp/node_modules/
/im-uniapp/package-lock.json
/im-uniapp/unpackage/

6
README.md

@ -122,9 +122,9 @@ https://www.yuque.com/u1475064/mufu2a/vn5u10ephxh9sau8
![输入图片说明](%E6%88%AA%E5%9B%BE/app/2.jpg)
#### 加入交流群
1群目前已满员,扫码进入2群:
![输入图片说明](%E6%88%AA%E5%9B%BE/%E4%BA%A4%E6%B5%81%E7%BE%A42.png)
群1: 741174521(已满)
群2: 937470451(已满)
群3:
欢迎进群与小伙们一起交流, **申请加群前请务必先star哦**

2
im-web/src/App.vue

@ -12,7 +12,6 @@ export default {
</script>
<style lang="scss">
#app {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
@ -22,5 +21,4 @@ export default {
color: var(--im-text-color);
font-family: var(--im-font-family);
}
</style>

4
im-web/src/components/chat/ChatBox.vue

@ -61,7 +61,8 @@
<ChatInput :ownerId="group.ownerId" ref="chatInputEditor" :group-members="groupMembers"
@submit="sendMessage" />
<div class="send-btn-area">
<el-button type="primary" icon="el-icon-s-promotion" @click="notifySend()">发送</el-button>
<el-button type="primary" icon="el-icon-s-promotion"
@click="notifySend()">发送</el-button>
</div>
</div>
</el-footer>
@ -831,4 +832,3 @@
}
</style>

15
im-web/src/components/chat/ChatGroupSide.vue

@ -13,13 +13,11 @@
</div>
<div class="invite-member-text">邀请</div>
<add-group-member :visible="showAddGroupMember" :groupId="group.id" :members="groupMembers"
@reload="$emit('reload')"
@close="showAddGroupMember=false"></add-group-member>
@reload="$emit('reload')" @close="showAddGroupMember = false"></add-group-member>
</div>
<div v-for="(member) in groupMembers" :key="member.id">
<group-member class="group-side-member" v-show="!member.quit && member.showNickName.includes(searchText)"
:member="member"
:showDel="false"></group-member>
:member="member" :showDel="false"></group-member>
</div>
</div>
<el-divider v-if="!group.quit" content-position="center"></el-divider>
@ -34,12 +32,10 @@
<el-input v-model="group.notice" disabled type="textarea" maxlength="1024"></el-input>
</el-form-item>
<el-form-item label="备注">
<el-input v-model="group.remarkGroupName" :disabled="!editing"
maxlength="20"></el-input>
<el-input v-model="group.remarkGroupName" :disabled="!editing" maxlength="20"></el-input>
</el-form-item>
<el-form-item label="我在本群的昵称">
<el-input v-model="group.remarkNickName" :disabled="!editing" maxlength="20"
></el-input>
<el-input v-model="group.remarkNickName" :disabled="!editing" maxlength="20"></el-input>
</el-form-item>
<div v-show="!group.quit" class="btn-group">
<el-button v-if="editing" type="success" @click="onSaveGroup()">保存</el-button>
@ -217,7 +213,8 @@ export default {
}
}
.el-input__inner, .el-textarea__inner {
.el-input__inner,
.el-textarea__inner {
color: var(--im-text-color) !important;
}

9
im-web/src/components/chat/ChatHistory.vue

@ -1,12 +1,11 @@
<template>
<el-drawer title="聊天历史记录" size="700px" :visible.sync="visible" direction="rtl" :before-close="onClose">
<div class="chat-history" v-loading="loading"
element-loading-text="拼命加载中">
<div class="chat-history" v-loading="loading" element-loading-text="拼命加载中">
<el-scrollbar class="chat-history-scrollbar" ref="scrollbar" id="historyScrollbar">
<ul>
<li v-for="(msgInfo, idx) in messages" :key="idx">
<chat-message-item :mode="2" :mine="msgInfo.sendId == mine.id" :headImage="headImage(msgInfo)" :showName="showName(msgInfo)"
:msgInfo="msgInfo" :menu="false">
<chat-message-item :mode="2" :mine="msgInfo.sendId == mine.id" :headImage="headImage(msgInfo)"
:showName="showName(msgInfo)" :msgInfo="msgInfo" :menu="false">
</chat-message-item>
</li>
</ul>
@ -155,9 +154,11 @@
.chat-history-scrollbar {
flex: 1;
.el-scrollbar__thumb {
background-color: #555555;
}
ul {
padding: 20px;

6
im-web/src/components/chat/ChatItem.vue

@ -11,9 +11,7 @@
<div>{{ chat.showName }}</div>
<el-tag v-if="chat.type == 'GROUP'" size="mini" effect="dark"></el-tag>
</div>
<div class="chat-time-text">{{ showTime }}</div>
</div>
<div class="chat-content">
<div class="chat-at-text">{{ atText }}</div>
@ -21,8 +19,8 @@
<div class="chat-content-text" v-html="$emo.transform(chat.lastContent)"></div>
</div>
</div>
<right-menu v-show="rightMenu.show" :pos="rightMenu.pos" :items="rightMenu.items" @close="rightMenu.show=false"
@select="onSelectMenu"></right-menu>
<right-menu v-show="rightMenu.show" :pos="rightMenu.pos" :items="rightMenu.items"
@close="rightMenu.show = false" @select="onSelectMenu"></right-menu>
</div>
</template>

1
im-web/src/components/chat/ChatRecord.vue

@ -20,7 +20,6 @@
<el-button round type="primary" v-show="state == 'COMPLETE'" @click="onSendRecord()">立即发送</el-button>
</el-row>
</el-dialog>
</template>
<script>

7
im-web/src/components/common/FileUpload.vue

@ -1,6 +1,6 @@
<template>
<el-upload :action="'#'" :http-request="onFileUpload" :accept="fileTypes==null?'':fileTypes.join(',')" :show-file-list="false"
:disabled="disabled" :before-upload="beforeUpload" :multiple="true">
<el-upload :action="'#'" :http-request="onFileUpload" :accept="fileTypes == null ? '' : fileTypes.join(',')"
:show-file-list="false" :disabled="disabled" :before-upload="beforeUpload" :multiple="true">
<slot></slot>
</el-upload>
</template>
@ -99,5 +99,4 @@
}
</script>
<style>
</style>
<style></style>

1
im-web/src/components/common/HeadImage.vue

@ -17,7 +17,6 @@
colors: ["#5daa31", "#c7515a", "#e03697", "#85029b",
"#c9b455", "#326eb6"
]
}
},
props: {

6
im-web/src/components/common/UserInfo.vue

@ -3,9 +3,8 @@
<div class="user-info" :style="{ left: pos.x + 'px', top: pos.y + 'px' }" @click.stop>
<div class="user-info-box">
<div class="avatar">
<head-image :name="user.nickName" :url="user.headImageThumb" :size="70"
:online="user.online" radius="10%"
@click.native="showFullImage()"> </head-image>
<head-image :name="user.nickName" :url="user.headImageThumb" :size="70" :online="user.online"
radius="10%" @click.native="showFullImage()"> </head-image>
</div>
<div>
<el-descriptions :column="1" :title="user.userName" class="user-info-items">
@ -15,7 +14,6 @@
</el-descriptions-item>
</el-descriptions>
</div>
</div>
<el-divider content-position="center"></el-divider>
<div class="user-btn-group">

21
im-web/src/components/friend/AddFriend.vue

@ -1,28 +1,28 @@
<template>
<el-dialog title="添加好友" :visible.sync="dialogVisible" width="400px" :before-close="onClose" custom-class="add-friend-dialog">
<el-input placeholder="输入用户名或昵称按下enter搜索,最多展示20条" class="input-with-select" v-model="searchText" size="small" @keyup.enter.native="onSearch()">
<i class="el-icon-search el-input__icon" slot="suffix"
@click="onSearch()"> </i>
<el-dialog title="添加好友" :visible.sync="dialogVisible" width="400px" :before-close="onClose"
custom-class="add-friend-dialog">
<el-input placeholder="输入用户名或昵称按下enter搜索,最多展示20条" class="input-with-select" v-model="searchText" size="small"
@keyup.enter.native="onSearch()">
<i class="el-icon-search el-input__icon" slot="suffix" @click="onSearch()"> </i>
</el-input>
<el-scrollbar style="height:400px">
<div v-for="(user) in users" :key="user.id" v-show="user.id != $store.state.userStore.userInfo.id">
<div class="item">
<div class="avatar">
<head-image :name="user.nickName"
:url="user.headImage"
:online="user.online"
></head-image>
<head-image :name="user.nickName" :url="user.headImage" :online="user.online"></head-image>
</div>
<div class="add-friend-text">
<div class="text-user-name">
<div>{{ user.userName }}</div>
<div :class="user.online ? 'online-status online':'online-status'">{{ user.online?"[在线]":"[离线]"}}</div>
<div :class="user.online ? 'online-status online' : 'online-status'">{{
user.online ? "[在线]" :"[离线]"}}</div>
</div>
<div class="text-nick-name">
<div>昵称:{{ user.nickName }}</div>
</div>
</div>
<el-button type="success" size="mini" v-show="!isFriend(user.id)" @click="onAddFriend(user)">添加</el-button>
<el-button type="success" size="mini" v-show="!isFriend(user.id)"
@click="onAddFriend(user)">添加</el-button>
<el-button type="info" size="mini" v-show="isFriend(user.id)" plain disabled>已添加</el-button>
</div>
</div>
@ -122,6 +122,7 @@
.online-status {
font-size: 12px;
font-weight: 600;
&.online {
color: #5fb878;
}

8
im-web/src/components/group/AddGroupMember.vue

@ -10,8 +10,7 @@
<el-scrollbar style="height:400px;">
<div v-for="(friend, index) in friends" :key="friend.id">
<friend-item v-show="friend.nickName.includes(searchText)" :showDelete="false"
@click.native="onSwitchCheck(friend)" :menu="false" :friend="friend" :index="index"
:active="false">
@click.native="onSwitchCheck(friend)" :menu="false" :friend="friend" :index="index" :active="false">
<el-checkbox :disabled="friend.disabled" @click.native.stop="" class="agm-friend-checkbox"
v-model="friend.isCheck" size="medium"></el-checkbox>
</friend-item>
@ -23,8 +22,8 @@
<div class="agm-select-tip"> 已勾选{{ checkCount }}位好友</div>
<el-scrollbar style="height:400px;">
<div v-for="(friend, index) in friends" :key="friend.id">
<friend-item v-if="friend.isCheck && !friend.disabled" :friend="friend" :index="index"
:active="false" @del="onRemoveFriend(friend,index)" :menu="false">
<friend-item v-if="friend.isCheck && !friend.disabled" :friend="friend" :index="index" :active="false"
@del="onRemoveFriend(friend, index)" :menu="false">
</friend-item>
</div>
</el-scrollbar>
@ -173,7 +172,6 @@ export default {
line-height: 40px;
text-indent: 6px;
color: var(--im-text-color-light)
}
}
}

1
im-web/src/components/group/GroupItem.vue

@ -28,7 +28,6 @@
type: Boolean
}
}
}
</script>

4
im-web/src/components/group/GroupMember.vue

@ -1,7 +1,6 @@
<template>
<div class="group-member">
<head-image :id="member.userId" :name="member.showNickName"
:url="member.headImage" :size="38"
<head-image :id="member.userId" :name="member.showNickName" :url="member.headImage" :size="38"
:online="member.online">
<div v-if="showDel" @click.stop="onDelete()" class="btn-kick el-icon-error"></div>
</head-image>
@ -41,6 +40,7 @@
flex-direction: column;
align-items: center;
width: 50px;
.member-name {
font-size: 12px;
text-align: center;

4
im-web/src/components/group/GroupMemberItem.vue

@ -1,8 +1,8 @@
<template>
<div class="group-member-item" :style="{ 'height': height + 'px' }">
<div class="member-avatar">
<head-image :size="headImageSize" :name="member.showNickName"
:url="member.headImage" :online="member.online"> </head-image>
<head-image :size="headImageSize" :name="member.showNickName" :url="member.headImage"
:online="member.online"> </head-image>
</div>
<div class="member-name" :style="{ 'line-height': height + 'px' }">
<div>{{ member.showNickName }}</div>

4
im-web/src/components/group/GroupMemberSelector.vue

@ -7,8 +7,8 @@
</el-input>
<el-scrollbar style="height:400px;">
<div v-for="m in members" :key="m.userId">
<group-member-item v-show="!m.quit&&m.showNickName.includes(searchText)"
:member="m" @click.native="onClickMember(m)">
<group-member-item v-show="!m.quit && m.showNickName.includes(searchText)" :member="m"
@click.native="onClickMember(m)">
<el-checkbox :disabled="m.locked" v-model="m.checked" @change="onChange(m)"
@click.native.stop=""></el-checkbox>
</group-member-item>

2
im-web/src/components/rtc/RtcGroupJoin.vue

@ -84,6 +84,7 @@
.rtc-group-join {
height: 260px;
padding: 10px;
.host-info {
display: flex;
flex-direction: column;
@ -100,6 +101,7 @@
.users-info {
font-size: 16px;
margin-top: 20px;
.user-list {
display: flex;
padding: 5px 5px;

3
im-web/src/components/rtc/RtcPrivateAcceptor.vue

@ -1,6 +1,7 @@
<template>
<div class="rtc-private-acceptor">
<head-image :id="friend.id" :name="friend.nickName" :url="friend.headImage" :size="100" :isShowUserInfo="false"></head-image>
<head-image :id="friend.id" :name="friend.nickName" :url="friend.headImage" :size="100"
:isShowUserInfo="false"></head-image>
<div class="acceptor-text">
{{ tip }}
</div>

16
im-web/src/components/rtc/RtcPrivateVideo.vue

@ -1,15 +1,7 @@
<template>
<div>
<el-dialog
v-dialogDrag
top="5vh"
custom-class="rtc-private-video-dialog"
:title="title"
:width="width"
:visible.sync="showRoom"
:close-on-click-modal="false"
:close-on-press-escape="false"
:before-close="onQuit">
<el-dialog v-dialogDrag top="5vh" custom-class="rtc-private-video-dialog" :title="title" :width="width"
:visible.sync="showRoom" :close-on-click-modal="false" :close-on-press-escape="false" :before-close="onQuit">
<div class="rtc-private-video">
<div v-show="isVideo" class="rtc-video-box">
<div class="rtc-video-friend" v-loading="!isChating" element-loading-text="等待对方接听..."
@ -31,8 +23,7 @@
</head-image>
</div>
<div class="rtc-control-bar">
<div title="取消" class="icon iconfont icon-phone-reject reject"
style="color: red;" @click="onQuit()"></div>
<div title="取消" class="icon iconfont icon-phone-reject reject" style="color: red;" @click="onQuit()"></div>
</div>
</div>
</el-dialog>
@ -504,5 +495,4 @@ export default {
}
}
}
</style>

8
im-web/src/components/setting/Setting.vue

@ -2,12 +2,8 @@
<el-dialog class="setting" title="设置" :visible.sync="visible" width="420px" :before-close="onClose">
<el-form :model="userInfo" label-width="80px" :rules="rules" ref="settingForm" size="small">
<el-form-item label="头像" style="margin-bottom: 0 !important;">
<file-upload class="avatar-uploader"
:action="imageAction"
:showLoading="true"
:maxSize="maxSize"
@success="onUploadSuccess"
:fileTypes="['image/jpeg', 'image/png', 'image/jpg','image/webp']">
<file-upload class="avatar-uploader" :action="imageAction" :showLoading="true" :maxSize="maxSize"
@success="onUploadSuccess" :fileTypes="['image/jpeg', 'image/png', 'image/jpg', 'image/webp']">
<img v-if="userInfo.headImage" :src="userInfo.headImage" class="avatar">
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</file-upload>

136
im-web/src/utils/directive/dialogDrag.js

@ -1,72 +1,72 @@
import Vue from 'vue'
 
// v-dialogDrag: 弹窗拖拽
Vue.directive('dialogDrag', {
  bind (el, binding, vnode, oldVnode) {
    const dialogHeaderEl = el.querySelector('.el-dialog__header')
    const dragDom = el.querySelector('.el-dialog')
    dialogHeaderEl.style.cursor = 'move'
 
    // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
    const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null)
 
    dialogHeaderEl.onmousedown = (e) => {
      // 鼠标按下,计算当前元素距离可视区的距离
      const disX = e.clientX - dialogHeaderEl.offsetLeft
      const disY = e.clientY - dialogHeaderEl.offsetTop
      const screenWidth = document.body.clientWidth; // body当前宽度
      const screenHeight = document.documentElement.clientHeight; // 可见区域高度(应为body高度,可某些环境下无法获取)
      const dragDomWidth = dragDom.offsetWidth; // 对话框宽度
      const dragDomheight = dragDom.offsetHeight; // 对话框高度
      const minDragDomLeft = dragDom.offsetLeft;
      const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth;
      const minDragDomTop = dragDom.offsetTop;
      const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomheight;
 
      // 获取到的值带px 正则匹配替换
      let styL, styT
 
      // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
      if (sty.left.includes('%')) {
        styL = +document.body.clientWidth * (+sty.left.replace(/\%/g, '') / 100)
        styT = +document.body.clientHeight * (+sty.top.replace(/\%/g, '') / 100)
      } else {
        styL = +sty.left.replace(/\px/g, '')
        styT = +sty.top.replace(/\px/g, '')
      }
 
      document.onmousemove = function (e) {
        // 获取body的页面可视宽高
        // var clientHeight = document.documentElement.clientHeight || document.body.clientHeight
        // var clientWidth = document.documentElement.clientWidth || document.body.clientWidth
 
        // 通过事件委托,计算移动的距离
        var l = e.clientX - disX
        var t = e.clientY - disY
 
        // 边界处理
        if (-l > minDragDomLeft) {
          l = -minDragDomLeft;
        } else if (l > maxDragDomLeft) {
          l = maxDragDomLeft;
        }
        if (-t > minDragDomTop) {
          t = -minDragDomTop;
        } else if (t > maxDragDomTop) {
          t = maxDragDomTop;
        }
        // 移动当前元素
        dragDom.style.left = `${l + styL}px`
        dragDom.style.top = `${t + styT}px`
 
        // 将此时的位置传出去
        // binding.value({x:e.pageX,y:e.pageY})
      }
 
      document.onmouseup = function (e) {
        document.onmousemove = null
        document.onmouseup = null
      }
    }
  }
bind(el, binding, vnode, oldVnode) {
const dialogHeaderEl = el.querySelector('.el-dialog__header')
const dragDom = el.querySelector('.el-dialog')
dialogHeaderEl.style.cursor = 'move'
// 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null)
dialogHeaderEl.onmousedown = (e) => {
// 鼠标按下,计算当前元素距离可视区的距离
const disX = e.clientX - dialogHeaderEl.offsetLeft
const disY = e.clientY - dialogHeaderEl.offsetTop
const screenWidth = document.body.clientWidth; // body当前宽度
const screenHeight = document.documentElement.clientHeight; // 可见区域高度(应为body高度,可某些环境下无法获取)
const dragDomWidth = dragDom.offsetWidth; // 对话框宽度
const dragDomheight = dragDom.offsetHeight; // 对话框高度
const minDragDomLeft = dragDom.offsetLeft;
const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth;
const minDragDomTop = dragDom.offsetTop;
const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomheight;
// 获取到的值带px 正则匹配替换
let styL, styT
// 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
if (sty.left.includes('%')) {
styL = +document.body.clientWidth * (+sty.left.replace(/\%/g, '') / 100)
styT = +document.body.clientHeight * (+sty.top.replace(/\%/g, '') / 100)
} else {
styL = +sty.left.replace(/\px/g, '')
styT = +sty.top.replace(/\px/g, '')
}
document.onmousemove = function (e) {
// 获取body的页面可视宽高
// var clientHeight = document.documentElement.clientHeight || document.body.clientHeight
// var clientWidth = document.documentElement.clientWidth || document.body.clientWidth
// 通过事件委托,计算移动的距离
var l = e.clientX - disX
var t = e.clientY - disY
// 边界处理
if (-l > minDragDomLeft) {
l = -minDragDomLeft;
} else if (l > maxDragDomLeft) {
l = maxDragDomLeft;
}
if (-t > minDragDomTop) {
t = -minDragDomTop;
} else if (t > maxDragDomTop) {
t = maxDragDomTop;
}
// 移动当前元素
dragDom.style.left = `${l + styL}px`
dragDom.style.top = `${t + styT}px`
// 将此时的位置传出去
// binding.value({x:e.pageX,y:e.pageY})
}
document.onmouseup = function (e) {
document.onmousemove = null
document.onmouseup = null
}
}
}
})

16
im-web/src/view/Group.vue

@ -23,8 +23,8 @@
<div v-show="activeGroup.id">
<div class="group-info">
<div>
<file-upload v-show="isOwner" class="avatar-uploader" :action="imageAction"
:showLoading="true" :maxSize="maxSize" @success="onUploadSuccess"
<file-upload v-show="isOwner" class="avatar-uploader" :action="imageAction" :showLoading="true"
:maxSize="maxSize" @success="onUploadSuccess"
:fileTypes="['image/jpeg', 'image/png', 'image/jpg', 'image/webp']">
<img v-if="activeGroup.headImage" :src="activeGroup.headImage" class="avatar">
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
@ -32,8 +32,7 @@
<head-image v-show="!isOwner" class="avatar" :size="160" :url="activeGroup.headImage"
:name="activeGroup.showGroupName" radius="10%">
</head-image>
<el-button class="send-btn" icon="el-icon-position" type="primary"
@click="onSendMessage()">发消息
<el-button class="send-btn" icon="el-icon-position" type="primary" @click="onSendMessage()">发消息
</el-button>
</div>
<el-form class="group-form" label-width="130px" :model="activeGroup" :rules="rules" size="small"
@ -53,8 +52,8 @@
:placeholder="$store.state.userStore.userInfo.nickName"></el-input>
</el-form-item>
<el-form-item label="群公告">
<el-input v-model="activeGroup.notice" :disabled="!isOwner" type="textarea" :rows="3"
maxlength="1024" placeholder="群主未设置"></el-input>
<el-input v-model="activeGroup.notice" :disabled="!isOwner" type="textarea" :rows="3" maxlength="1024"
placeholder="群主未设置"></el-input>
</el-form-item>
<div>
<el-button type="warning" v-show="isOwner" @click="onInviteMember()">邀请</el-button>
@ -75,9 +74,8 @@
<i class="el-icon-plus"></i>
</div>
<div class="invite-member-text">邀请</div>
<add-group-member :visible="showAddGroupMember" :groupId="activeGroup.id"
:members="groupMembers" @reload="loadGroupMembers"
@close="onCloseAddGroupMember"></add-group-member>
<add-group-member :visible="showAddGroupMember" :groupId="activeGroup.id" :members="groupMembers"
@reload="loadGroupMembers" @close="onCloseAddGroupMember"></add-group-member>
</div>
</div>
</div>

8
im-web/src/view/Home.vue

@ -5,10 +5,8 @@
<div class="navi-bar-box">
<div class="top">
<div class="user-head-image">
<head-image :name="$store.state.userStore.userInfo.nickName"
:size="38"
:url="$store.state.userStore.userInfo.headImageThumb"
@click.native="showSettingDialog = true">
<head-image :name="$store.state.userStore.userInfo.nickName" :size="38"
:url="$store.state.userStore.userInfo.headImageThumb" @click.native="showSettingDialog = true">
</head-image>
</div>
@ -509,6 +507,4 @@ export default {
text-align: center;
}
}
</style>

1
im-web/src/view/Login.vue

@ -13,7 +13,6 @@
<el-form-item label="用户名" prop="userName">
<el-input type="userName" v-model="loginForm.userName" autocomplete="off"
placeholder="用户名"></el-input>
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input type="password" v-model="loginForm.password" autocomplete="off"

19
im-web/src/view/Register.vue

@ -1,22 +1,27 @@
<template>
<el-container class="register-view">
<div>
<el-form :model="registerForm" status-icon :rules="rules" ref="registerForm" label-width="80px" class="web-ruleForm">
<el-form :model="registerForm" status-icon :rules="rules" ref="registerForm" label-width="80px"
class="web-ruleForm">
<div class="register-brand">
<img class="logo" src="../../public/logo.png" />
<div>欢迎成为盒子IM的用户</div>
</div>
<el-form-item label="用户名" prop="userName">
<el-input type="userName" v-model="registerForm.userName" autocomplete="off" placeholder="用户名(登录使用)"></el-input>
<el-input type="userName" v-model="registerForm.userName" autocomplete="off"
placeholder="用户名(登录使用)"></el-input>
</el-form-item>
<el-form-item label="昵称" prop="nickName">
<el-input type="nickName" v-model="registerForm.nickName" autocomplete="off" placeholder="昵称"></el-input>
<el-input type="nickName" v-model="registerForm.nickName" autocomplete="off"
placeholder="昵称"></el-input>
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input type="password" v-model="registerForm.password" autocomplete="off" placeholder="密码"></el-input>
<el-input type="password" v-model="registerForm.password" autocomplete="off"
placeholder="密码"></el-input>
</el-form-item>
<el-form-item label="确认密码" prop="confirmPassword">
<el-input type="password" v-model="registerForm.confirmPassword" autocomplete="off" placeholder="确认密码"></el-input>
<el-input type="password" v-model="registerForm.confirmPassword" autocomplete="off"
placeholder="确认密码"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('registerForm')">注册</el-button>
@ -167,8 +172,4 @@
}
}
}
</style>

BIN
截图/交流群2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

Loading…
Cancel
Save