mirror of
https://github.com/cool-team-official/cool-admin-vue.git
synced 2024-11-01 14:10:27 +08:00
优化
This commit is contained in:
parent
8fbe09c133
commit
a1790e65f5
@ -12,7 +12,7 @@
|
|||||||
"@vue/composition-api": "^1.0.0-rc.5",
|
"@vue/composition-api": "^1.0.0-rc.5",
|
||||||
"axios": "^0.21.1",
|
"axios": "^0.21.1",
|
||||||
"cl-admin": "^1.5.3",
|
"cl-admin": "^1.5.3",
|
||||||
"cl-admin-crud": "^1.6.4",
|
"cl-admin-crud": "^1.6.5",
|
||||||
"cl-admin-theme": "^0.0.5",
|
"cl-admin-theme": "^0.0.5",
|
||||||
"clipboard": "^2.0.7",
|
"clipboard": "^2.0.7",
|
||||||
"codemirror": "^5.59.4",
|
"codemirror": "^5.59.4",
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="cl-avatar" :class="[size, shape]" :style="[style2]">
|
<div class="cl-avatar" :class="[size, shape]" :style="[style]">
|
||||||
<el-image :src="src" alt="">
|
<el-image :src="src" alt="">
|
||||||
<div slot="error" class="image-slot">
|
<div slot="error" class="image-slot">
|
||||||
<i class="el-icon-picture-outline"></i>
|
<i class="el-icon-picture-outline"></i>
|
||||||
@ -9,6 +9,8 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import { isNumber } from "cl-admin/utils";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "cl-avatar",
|
name: "cl-avatar",
|
||||||
|
|
||||||
@ -24,17 +26,13 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
data() {
|
computed: {
|
||||||
return {
|
style() {
|
||||||
style2: {}
|
const size = isNumber(this.size) ? this.size + "px" : this.size;
|
||||||
};
|
|
||||||
},
|
|
||||||
|
|
||||||
mounted() {
|
return {
|
||||||
if (typeof this.size == "number") {
|
height: size,
|
||||||
this.style2 = {
|
width: size
|
||||||
height: this.size + "px",
|
|
||||||
width: this.size + "px"
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,14 +13,14 @@
|
|||||||
accept="image/*"
|
accept="image/*"
|
||||||
list-type
|
list-type
|
||||||
:before-upload="
|
:before-upload="
|
||||||
f => {
|
file => {
|
||||||
onBeforeUpload(f, 'image');
|
onBeforeUpload(file, 'image');
|
||||||
}
|
}
|
||||||
"
|
"
|
||||||
:on-progress="onUploadProgress"
|
:on-progress="onUploadProgress"
|
||||||
:on-success="
|
:on-success="
|
||||||
(r, f) => {
|
(res, file) => {
|
||||||
onUploadSuccess(r, f, 'image');
|
onUploadSuccess(res, file, 'image');
|
||||||
}
|
}
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
@ -33,14 +33,14 @@
|
|||||||
accept="video/*"
|
accept="video/*"
|
||||||
list-type
|
list-type
|
||||||
:before-upload="
|
:before-upload="
|
||||||
f => {
|
file => {
|
||||||
onBeforeUpload(f, 'video');
|
onBeforeUpload(file, 'video');
|
||||||
}
|
}
|
||||||
"
|
"
|
||||||
:on-progress="onUploadProgress"
|
:on-progress="onUploadProgress"
|
||||||
:on-success="
|
:on-success="
|
||||||
(r, f) => {
|
(res, file) => {
|
||||||
onUploadSuccess(r, f, 'video');
|
onUploadSuccess(res, file, 'video');
|
||||||
}
|
}
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
@ -53,7 +53,7 @@
|
|||||||
<!-- 输入框,发送按钮 -->
|
<!-- 输入框,发送按钮 -->
|
||||||
<div class="cl-chat-input__content">
|
<div class="cl-chat-input__content">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="value"
|
v-model="text"
|
||||||
placeholder="请描述您想咨询的问题"
|
placeholder="请描述您想咨询的问题"
|
||||||
type="textarea"
|
type="textarea"
|
||||||
resize="none"
|
resize="none"
|
||||||
@ -61,7 +61,7 @@
|
|||||||
@keyup.enter.native="onTextSend"
|
@keyup.enter.native="onTextSend"
|
||||||
></el-input>
|
></el-input>
|
||||||
|
|
||||||
<el-button type="primary" size="mini" :disabled="!value" @click="onTextSend"
|
<el-button type="primary" size="mini" :disabled="!text" @click="onTextSend"
|
||||||
>发送</el-button
|
>发送</el-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
@ -69,7 +69,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mapGetters } from "vuex";
|
import { mapMutations } from "vuex";
|
||||||
import Emoji from "./emoji";
|
import Emoji from "./emoji";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@ -81,20 +81,19 @@ export default {
|
|||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
value: "",
|
text: "",
|
||||||
emoji: {
|
emoji: {
|
||||||
visible: false
|
visible: false
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
|
||||||
...mapGetters(["session", "messageList"])
|
|
||||||
},
|
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
|
...mapMutations(["UPDATE_SESSION", "UPDATE_MESSAGE", "APPEND_MESSAGE_LIST"]),
|
||||||
|
|
||||||
// 上传前,获取图片预览地址
|
// 上传前,获取图片预览地址
|
||||||
onBeforeUpload(file, key) {
|
onBeforeUpload(file, key) {
|
||||||
|
// 先添加到列表中,等待上传
|
||||||
const next = (options = {}) => {
|
const next = (options = {}) => {
|
||||||
const data = {
|
const data = {
|
||||||
content: {
|
content: {
|
||||||
@ -111,17 +110,37 @@ export default {
|
|||||||
this.append(data);
|
this.append(data);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 图片预览
|
||||||
if (key == "image") {
|
if (key == "image") {
|
||||||
const fileReader = new FileReader();
|
const fileReader = new FileReader();
|
||||||
|
|
||||||
fileReader.onload = e => {
|
fileReader.onload = e => {
|
||||||
|
const imageUrl = e.target.result;
|
||||||
|
const image = new Image();
|
||||||
|
|
||||||
|
image.onload = () => {
|
||||||
|
let height = 0;
|
||||||
|
let width = 0;
|
||||||
|
|
||||||
|
if (image.width > 200) {
|
||||||
|
width = 200;
|
||||||
|
height = (image.height * 200) / image.width;
|
||||||
|
}
|
||||||
|
|
||||||
next({
|
next({
|
||||||
content: {
|
content: {
|
||||||
imageUrl: e.target.result
|
imageUrl
|
||||||
|
},
|
||||||
|
style: {
|
||||||
|
height: height + "px",
|
||||||
|
width: width + "px"
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
image.src = imageUrl;
|
||||||
|
};
|
||||||
|
|
||||||
fileReader.readAsDataURL(file);
|
fileReader.readAsDataURL(file);
|
||||||
} else {
|
} else {
|
||||||
next();
|
next();
|
||||||
@ -130,41 +149,44 @@ export default {
|
|||||||
|
|
||||||
// 上传中
|
// 上传中
|
||||||
onUploadProgress(e, file) {
|
onUploadProgress(e, file) {
|
||||||
const item = this.messageList.find(e => e.uid == file.uid);
|
this.UPDATE_MESSAGE({
|
||||||
|
file,
|
||||||
if (item) {
|
data: {
|
||||||
item.progress = e.percent + "%";
|
progress: e.percent + "%"
|
||||||
}
|
}
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
// 上传成功
|
// 上传成功
|
||||||
onUploadSuccess(res, file, key) {
|
onUploadSuccess(res, file, key) {
|
||||||
const item = this.messageList.find(e => e.uid == file.uid);
|
this.UPDATE_MESSAGE({
|
||||||
|
file,
|
||||||
if (item) {
|
data: {
|
||||||
item.loading = false;
|
loading: false,
|
||||||
item.content[`${key}Url`] = res.data;
|
content: {
|
||||||
|
[`${key}Url`]: res.data
|
||||||
this.send(item);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
callback: this.send
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
// 发送文本内容
|
// 发送文本内容
|
||||||
onTextSend() {
|
onTextSend() {
|
||||||
if (this.value) {
|
if (this.text) {
|
||||||
if (this.value.replace(/\n/g, "") !== "") {
|
if (this.text.replace(/\n/g, "") !== "") {
|
||||||
const data = {
|
const data = {
|
||||||
type: 0,
|
type: 0,
|
||||||
contentType: 0,
|
contentType: 0,
|
||||||
content: {
|
content: {
|
||||||
text: this.value
|
text: this.text
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
this.send(data, true);
|
this.send(data, true);
|
||||||
|
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.value = "";
|
this.text = "";
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -215,11 +237,12 @@ export default {
|
|||||||
|
|
||||||
// 发送消息
|
// 发送消息
|
||||||
send(data, isAppend) {
|
send(data, isAppend) {
|
||||||
const { id, userId } = this.session;
|
const { id, userId } = this.$store.getters.session;
|
||||||
|
|
||||||
// 更新消息
|
// 更新会话消息
|
||||||
this.$store.commit("UPDATE_SESSION", data);
|
this.UPDATE_SESSION(data);
|
||||||
|
|
||||||
|
// 发送消息
|
||||||
if (this.chat.socket) {
|
if (this.chat.socket) {
|
||||||
this.chat.socket.emit(`user@${userId}`, {
|
this.chat.socket.emit(`user@${userId}`, {
|
||||||
contentType: data.contentType,
|
contentType: data.contentType,
|
||||||
@ -229,6 +252,7 @@ export default {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 是否添加到列表中
|
||||||
if (isAppend) {
|
if (isAppend) {
|
||||||
this.append(data);
|
this.append(data);
|
||||||
}
|
}
|
||||||
@ -236,7 +260,7 @@ export default {
|
|||||||
|
|
||||||
// 追加消息
|
// 追加消息
|
||||||
append(data) {
|
append(data) {
|
||||||
this.$store.commit("APPEND_MESSAGE_LIST", data);
|
this.APPEND_MESSAGE_LIST(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -18,39 +18,8 @@ export default {
|
|||||||
|
|
||||||
// 追加数据
|
// 追加数据
|
||||||
APPEND_MESSAGE_LIST(state, data) {
|
APPEND_MESSAGE_LIST(state, data) {
|
||||||
const next = options => {
|
state.list.push(data);
|
||||||
state.list.push({
|
|
||||||
...data,
|
|
||||||
...options
|
|
||||||
});
|
|
||||||
eventBus.$emit("message.scrollToBottom");
|
eventBus.$emit("message.scrollToBottom");
|
||||||
};
|
|
||||||
|
|
||||||
// 图片预览、大小处理
|
|
||||||
if (data.contentType === 1) {
|
|
||||||
const image = new Image();
|
|
||||||
|
|
||||||
image.onload = () => {
|
|
||||||
let height = 0;
|
|
||||||
let width = 0;
|
|
||||||
|
|
||||||
if (image.width > 200) {
|
|
||||||
width = 200;
|
|
||||||
height = (image.height * 200) / image.width;
|
|
||||||
}
|
|
||||||
|
|
||||||
next({
|
|
||||||
style: {
|
|
||||||
height: height + "px",
|
|
||||||
width: width + "px"
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
image.src = data.content.imageUrl;
|
|
||||||
} else {
|
|
||||||
next();
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// 追加数据到头部
|
// 追加数据到头部
|
||||||
@ -62,6 +31,23 @@ export default {
|
|||||||
// 清空列表
|
// 清空列表
|
||||||
CLEAR_MESSAGE_LIST(state) {
|
CLEAR_MESSAGE_LIST(state) {
|
||||||
state.list = [];
|
state.list = [];
|
||||||
|
},
|
||||||
|
|
||||||
|
// 更新消息数据
|
||||||
|
UPDATE_MESSAGE(state, { file, data, callback }) {
|
||||||
|
let item = null;
|
||||||
|
|
||||||
|
if (file) {
|
||||||
|
item = state.list.find(e => e.uid === file.uid);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item) {
|
||||||
|
if (data) {
|
||||||
|
Object.assign(item, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (callback) callback(item);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -853,7 +853,6 @@ export default {
|
|||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
position: relative;
|
position: relative;
|
||||||
background-color: #f7f7f7;
|
|
||||||
|
|
||||||
ul {
|
ul {
|
||||||
li {
|
li {
|
||||||
|
Loading…
Reference in New Issue
Block a user