1014 行
40 KiB
HTML
1014 行
40 KiB
HTML
<style>
|
||
#shopro-kefu-container .el-dialog {
|
||
width: 900px;
|
||
}
|
||
|
||
#shopro-kefu-container .el-dialog__body,
|
||
#shopro-kefu-container .el-dialog__header {
|
||
padding: 0 !important;
|
||
}
|
||
|
||
#shopro-kefu-container .el-dialog__header {
|
||
background: #FBFBFB;
|
||
}
|
||
|
||
#shopro-kefu-container .el-image {
|
||
width: 100%;
|
||
height: 100%;
|
||
border-radius: 19px;
|
||
}
|
||
|
||
#shopro-kefu-container .image-slot {
|
||
width: 100%;
|
||
height: 100%;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
}
|
||
|
||
.ellipsis-item {
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
display: -webkit-box;
|
||
-webkit-line-clamp: 1;
|
||
-webkit-box-orient: vertical;
|
||
}
|
||
|
||
.shopro-chat-goods-title {
|
||
width: 144px;
|
||
}
|
||
|
||
.display-flex {
|
||
display: flex;
|
||
}
|
||
|
||
.scrollbar-containering::-webkit-scrollbar {
|
||
width: 6px;
|
||
background: #F4F4F4;
|
||
}
|
||
|
||
.scrollbar-containering::-webkit-scrollbar-thumb {
|
||
width: 6px;
|
||
background: #e6e6e6;
|
||
height: 20px;
|
||
border-radius: 3px;
|
||
}
|
||
|
||
.el-textarea__inner::-webkit-scrollbar {
|
||
width: 4px;
|
||
background: #F4F4F4;
|
||
}
|
||
|
||
.el-textarea__inner::-webkit-scrollbar-thumb {
|
||
width: 4px;
|
||
background: #e6e6e6;
|
||
height: 20px;
|
||
border-radius: 3px;
|
||
}
|
||
|
||
|
||
.shopro-kefu-container-shake {
|
||
animation: shopro-shake 1s;
|
||
-o-animation: shopro-shake 1s;
|
||
-webkit-animation: shopro-shake 1s;
|
||
-moz-animation: shopro-shake 1s;
|
||
}
|
||
|
||
@keyframes shopro-shake {
|
||
|
||
0%,
|
||
100% {
|
||
-webkit-transform: translateX(0);
|
||
}
|
||
|
||
10%,
|
||
30%,
|
||
50%,
|
||
70%,
|
||
90% {
|
||
-webkit-transform: translateX(-5px);
|
||
}
|
||
|
||
20%,
|
||
40%,
|
||
60%,
|
||
80% {
|
||
-webkit-transform: translateX(5px);
|
||
}
|
||
}
|
||
|
||
@keyframes dyeing {
|
||
0% {
|
||
-moz-box-shadow: 0 0 0 0 rgba(119, 97, 251, 0.5);
|
||
box-shadow: 0 0 0 0 rgba(119, 97, 251, 0.5);
|
||
}
|
||
|
||
70% {
|
||
-moz-box-shadow: 0 0 0 10px rgba(119, 97, 251, 0);
|
||
box-shadow: 0 0 0 10px rgba(119, 97, 251, 0);
|
||
}
|
||
|
||
100% {
|
||
-moz-box-shadow: 0 0 0 0 rgba(119, 97, 251, 0);
|
||
;
|
||
box-shadow: 0 0 0 0 rgba(119, 97, 251, 0);
|
||
;
|
||
}
|
||
}
|
||
|
||
#shopro-kefu-button {
|
||
position: absolute;
|
||
top: 80%;
|
||
right: 20px;
|
||
width: 50px;
|
||
height: 50px;
|
||
z-index: 2000;
|
||
cursor: pointer;
|
||
border-radius: 25px;
|
||
background: #7761FB url(/assets/addons/shopro/img/chat/menu.gif) center no-repeat;
|
||
background-size: 30px 27px;
|
||
animation: dyeing 2s infinite;
|
||
}
|
||
|
||
.shopro-kefu-title {
|
||
display: flex;
|
||
align-items: center;
|
||
/* justify-content: space-between; */
|
||
padding: 0 18px;
|
||
height: 50px;
|
||
border-bottom: 1px solid #e6e6e6;
|
||
}
|
||
|
||
.shopro-kefu-title-avatar {
|
||
width: 28px;
|
||
height: 28px;
|
||
border: 1px solid #E6E6E6;
|
||
border-radius: 14px;
|
||
margin-right: 12px
|
||
}
|
||
|
||
.shopro-kefu-title-name {
|
||
margin-right: 16px;
|
||
color: #534C70;
|
||
font-size: 14px;
|
||
}
|
||
|
||
.shopro-kefu-title-line {
|
||
width: 80px
|
||
}
|
||
|
||
.shopro-kefu-content {
|
||
height: 657px;
|
||
display: flex;
|
||
}
|
||
|
||
.chater-left {
|
||
height: 100%;
|
||
width: 303px;
|
||
border-right: 1px solid #F4F4F4;
|
||
display: flex;
|
||
flex-direction: column;
|
||
}
|
||
|
||
.chater-header {
|
||
display: flex;
|
||
width: 300px;
|
||
height: 38px;
|
||
border-bottom: 1px solid #F4F4F4;
|
||
}
|
||
|
||
.chater-header-item {
|
||
width: 100px;
|
||
height: 38px;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
cursor: pointer;
|
||
font-size: 12px;
|
||
}
|
||
|
||
.chater-header-item-active {
|
||
width: 84px;
|
||
height: 26px;
|
||
background: rgba(157, 96, 255, 0.2);
|
||
border-radius: 18px;
|
||
line-height: 26px;
|
||
text-align: center;
|
||
font-size: 12px;
|
||
color: #7438D5;
|
||
}
|
||
|
||
.chater-header-container {
|
||
flex: 1;
|
||
overflow: auto;
|
||
background: #F9F9F9;
|
||
}
|
||
|
||
.chater-header-list {
|
||
padding: 8px 10px 13px 0px;
|
||
border-bottom: 1px solid #F4F4F4;
|
||
cursor: pointer;
|
||
background: #fff;
|
||
}
|
||
|
||
.chater-header-list:hover {
|
||
/* background: #EBDFFF; */
|
||
}
|
||
|
||
.chater-header-list:hover .chater-el-icon-close i {
|
||
display: block;
|
||
}
|
||
|
||
.chater-header-list-active,
|
||
.chater-header-list-offline-active {
|
||
background: #EBDFFF;
|
||
}
|
||
|
||
.offline-status {
|
||
margin: 0 6px;
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
.offline-status .line-status-offline {
|
||
color: #ED655F;
|
||
}
|
||
|
||
.offline-status .line-status-online {
|
||
color: #7438D5;
|
||
}
|
||
|
||
.chater-el-icon-close {
|
||
font-size: 10px;
|
||
width: 22px;
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
}
|
||
|
||
.chater-el-icon-close i {
|
||
display: none;
|
||
}
|
||
|
||
.chater-el-icon-close:hover {
|
||
color: #A268FF;
|
||
}
|
||
|
||
.chater-header-list-image {
|
||
width: 40px;
|
||
height: 40px;
|
||
background: #C4C4C4;
|
||
border: 1px solid #E6E6E6;
|
||
margin-right: 10px;
|
||
border-radius: 20px;
|
||
}
|
||
|
||
.chater-header-list-image img {
|
||
width: 100%;
|
||
height: 100%;
|
||
border-radius: 20px;
|
||
}
|
||
|
||
.chater-header-list-message {
|
||
flex: 1;
|
||
display: flex;
|
||
flex-direction: column;
|
||
justify-content: center;
|
||
}
|
||
|
||
.chater-header-list-message-1 {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
line-height: 14px;
|
||
margin-bottom: 6px
|
||
}
|
||
|
||
.chater-header-list-message-2 {
|
||
line-height: 12px;
|
||
font-size: 12px;
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
}
|
||
|
||
.chater-right {
|
||
flex: 1;
|
||
position: relative;
|
||
}
|
||
|
||
.shopro-chat-container {
|
||
height: 517px;
|
||
padding: 20px;
|
||
overflow: auto;
|
||
}
|
||
|
||
.shopro-chat-container-item {
|
||
display: flex;
|
||
margin-bottom: 42px;
|
||
}
|
||
|
||
.shopro-chat-container-item-system {
|
||
width: 100%;
|
||
}
|
||
|
||
.shopro-chat-container-item-image {
|
||
width: 38px;
|
||
height: 38px;
|
||
border: 1px solid #E6E6E6;
|
||
border-radius: 19px;
|
||
margin-right: 14px
|
||
}
|
||
|
||
.shopro-chat-container-item-image-1 {
|
||
width: 38px;
|
||
height: 38px;
|
||
border: 1px solid #E6E6E6;
|
||
border-radius: 19px;
|
||
margin-left: 14px
|
||
}
|
||
|
||
.shopro-chat-container-item-message {
|
||
background: #F6F6F6;
|
||
border-radius: 6px 6px 6px 0px;
|
||
max-width: 432px;
|
||
}
|
||
|
||
.shopro-chat-container-item-message-1 {
|
||
max-width: 432px;
|
||
border-radius: 6px 6px 0px 6px;
|
||
color: #444;
|
||
background: #ECE1FF;
|
||
}
|
||
|
||
.shopro-chat-container-item-message-text {
|
||
padding: 10px;
|
||
line-height: 18px;
|
||
}
|
||
|
||
.shopro-chat-container-item-message-text img {
|
||
width: 100%;
|
||
}
|
||
|
||
.shopro-send-container {
|
||
width: 100%;
|
||
height: 140px;
|
||
padding: 0 24px 0 16px;
|
||
border-top: 1px solid #e6e6e6;
|
||
}
|
||
|
||
.shopro-send-tip-container {
|
||
height: 42px;
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
|
||
.shopro-send-tip-item {
|
||
width: 18px;
|
||
height: 18px;
|
||
margin-right: 12px;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.shopro-send-textarea {
|
||
height: 44px;
|
||
overflow: auto;
|
||
}
|
||
|
||
.shopro-send-textarea::-webkit-scrollbar {
|
||
width: 6px;
|
||
}
|
||
|
||
.shopro-send-textarea::-webkit-scrollbar-thumb {
|
||
width: 6px;
|
||
background: #ccc;
|
||
height: 20px;
|
||
border-radius: 3px;
|
||
}
|
||
|
||
.shopro-send-textarea textarea {
|
||
height: 44px;
|
||
width: 554px !important;
|
||
border: none;
|
||
margin: 0px;
|
||
}
|
||
|
||
.shopro-send-textarea textarea:focus {
|
||
border: none !important;
|
||
}
|
||
|
||
.shopro-send-button-container {
|
||
padding: 12px 0;
|
||
height: 64px
|
||
}
|
||
|
||
.shopro-send-button {
|
||
width: 78px;
|
||
height: 30px;
|
||
line-height: 30px;
|
||
text-align: center;
|
||
font-size: 13px;
|
||
color: #fff;
|
||
background: #7438D5;
|
||
border-radius: 4px;
|
||
float: right;
|
||
cursor: pointer;
|
||
}
|
||
|
||
|
||
#inputFile {
|
||
display: none;
|
||
}
|
||
|
||
.shopro-chat-goods-item {
|
||
min-width: 240px;
|
||
height: 60px;
|
||
/* background: #FFFFFF; */
|
||
/* border: 1px solid #E6E6E6; */
|
||
border-radius: 4px;
|
||
padding: 8px;
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
|
||
.shopro-chat-goods-image {
|
||
width: 44px;
|
||
height: 44px;
|
||
border: 1px solid #E6E6E6;
|
||
border-radius: 3px;
|
||
margin-right: 10px;
|
||
}
|
||
|
||
.shopro-chat-goods-image .el-image,
|
||
.shopro-chat-image {
|
||
position: relative;
|
||
border-radius: 3px !important;
|
||
}
|
||
|
||
.shopro-chat-goods-message {
|
||
display: flex;
|
||
flex-direction: column;
|
||
justify-content: space-between;
|
||
flex: 1;
|
||
height: 100%;
|
||
}
|
||
|
||
.shopro-chat-goods-bodys {
|
||
justify-content: space-between;
|
||
height: 20px;
|
||
}
|
||
|
||
.customer-service {
|
||
color: #fff;
|
||
justify-content: flex-end;
|
||
}
|
||
|
||
.customer-user {
|
||
color: #444;
|
||
justify-content: flex-start;
|
||
}
|
||
|
||
.customer-system {
|
||
justify-content: center;
|
||
}
|
||
|
||
.shopro-chat-system {
|
||
height: 30px;
|
||
line-height: 30px;
|
||
padding: 0 10px;
|
||
border-radius: 10px;
|
||
background: #f9f9f9;
|
||
}
|
||
|
||
.shopro-chat-emoji-container {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
height: 150px;
|
||
overflow: auto;
|
||
padding: 10px 10px 5px;
|
||
}
|
||
|
||
.shopro-chat-emoji-image {
|
||
width: 24px;
|
||
height: 24px;
|
||
/* border: 1px solid #E6E6E6; */
|
||
border-radius: 3px;
|
||
margin-right: 10px;
|
||
margin-bottom: 5px;
|
||
}
|
||
|
||
.shopro-chat-emoji-image:nth-of-type(6n) {
|
||
margin-right: 0px;
|
||
}
|
||
|
||
.shopro-send-pre,
|
||
.shopro-send-pre:focus,
|
||
.shopro-send-pre:default {
|
||
border: none !important;
|
||
outline: none;
|
||
background: none;
|
||
height: 44px;
|
||
padding: 0;
|
||
}
|
||
|
||
.message-dot {
|
||
padding: 4px 7px;
|
||
border-radius: 10px;
|
||
text-align: center;
|
||
background: #F15847;
|
||
color: #fff;
|
||
}
|
||
|
||
.common-words-item,
|
||
.common-words-item-tip {
|
||
cursor: pointer;
|
||
height: 30px;
|
||
line-height: 30px;
|
||
padding: 0 12px;
|
||
border-bottom: 1px solid #e6e6e6;
|
||
color: #666;
|
||
}
|
||
|
||
.common-words-item-tip {
|
||
height: 40px;
|
||
line-height: 40px;
|
||
border-bottom: none;
|
||
}
|
||
|
||
.common-words-item:hover {
|
||
background: #F7F7FC;
|
||
}
|
||
|
||
.no-more-data {
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
margin-bottom: 22px;
|
||
}
|
||
|
||
.shopro-chat-order-item {
|
||
cursor: pointer;
|
||
}
|
||
|
||
.shopro-chat-order-title {
|
||
height: 30px;
|
||
line-height: 30px;
|
||
border-bottom: 1px solid #e6e6e6;
|
||
padding: 0 10px;
|
||
}
|
||
|
||
#shopro-kefu-container .el-dialog__headerbtn {
|
||
height: 50px;
|
||
top: 0;
|
||
}
|
||
|
||
.shopro-kefu-title-line input,
|
||
.shopro-kefu-title-line .el-input__inner {
|
||
border: none;
|
||
background-color: #FBFBFB;
|
||
color: inherit;
|
||
}
|
||
|
||
#shopro-kefu-button .message-dot {
|
||
width: 14px;
|
||
height: 14px;
|
||
border-radius: 7px;
|
||
float: right;
|
||
}
|
||
|
||
.el-popover {
|
||
padding: 0;
|
||
}
|
||
|
||
.el-popover-common-words {
|
||
max-height: 150px;
|
||
overflow-y: auto;
|
||
font-size: 12px;
|
||
}
|
||
|
||
.emoji {
|
||
width: 20px !important;
|
||
height: 20px !important;
|
||
margin: 0 2px;
|
||
}
|
||
|
||
.el-icon-loading {
|
||
color: #7438D5;
|
||
font-size: 20px;
|
||
position: absolute;
|
||
top: 50%;
|
||
left: 50%;
|
||
margin-left: -10px;
|
||
margin-top: -10px;
|
||
}
|
||
|
||
.shopro-chat-container-item-message .el-icon-loading {
|
||
color: #999;
|
||
}
|
||
|
||
.transfer-item {
|
||
width: 160px;
|
||
background: #fff;
|
||
font-size: 12px;
|
||
}
|
||
|
||
.transfer-item .el-input__inner {
|
||
padding: 0 10px;
|
||
}
|
||
|
||
.el-dialog__wrapper {
|
||
overflow: hidden;
|
||
}
|
||
|
||
.specific-createtime {
|
||
width: 100%;
|
||
display: flex;
|
||
justify-content: center;
|
||
margin-bottom: 6px;
|
||
}
|
||
|
||
.specific-createtime .createtime-item {
|
||
width: 160px;
|
||
border-radius: 10px;
|
||
height: 20px;
|
||
line-height: 20px;
|
||
background: #f6f6f6;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
color: #777;
|
||
}
|
||
|
||
label {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
.error-tip-popover.el-popover {
|
||
padding: 12px 16px;
|
||
border: 1px solid #e6e6e6;
|
||
}
|
||
|
||
.error-tip-popover.el-popper[x-placement^=left] .popper__arrow {
|
||
border-left-color: #e6e6e6;
|
||
}
|
||
|
||
.kefu-access-status {
|
||
position: absolute;
|
||
top: 20px;
|
||
left: 16px;
|
||
width: 565px;
|
||
height: 42px;
|
||
background: #FFFCF7;
|
||
box-shadow: 0px 2px 12px rgba(0, 0, 0, 0.1);
|
||
border-radius: 4px;
|
||
padding: 0 16px;
|
||
font-size: 14px;
|
||
color: #F0AF41;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
z-index: 100;
|
||
}
|
||
|
||
.kefu-access-status-left i {
|
||
margin-right: 8px;
|
||
}
|
||
|
||
.shopro-nosend-container {
|
||
padding: 16px;
|
||
font-size: 17px;
|
||
color: #D1D1D1;
|
||
}
|
||
|
||
#shopro-kefu-container .shopro-chat-container-icon {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
flex-direction: column;
|
||
}
|
||
|
||
#shopro-kefu-container .shopro-chat-container-icon .el-image {
|
||
width: 146px;
|
||
height: 146px;
|
||
}
|
||
|
||
.shopro-chat-container-tip {
|
||
font-size: 16px;
|
||
color: #999999;
|
||
margin-top: 30px;
|
||
}
|
||
</style>
|
||
|
||
<script type="text/x-template" id="chatTemp" style="position: relative;">
|
||
|
||
<div id="shopro-kefu-container" class="">
|
||
<el-popover
|
||
popper-class="error-tip-popover"
|
||
placement="left"
|
||
width="264"
|
||
trigger="manual"
|
||
v-model="errorTipVisible">
|
||
<div>客服连接失败,请点击 <span style="cursor: pointer;color: #7438D5;" @click="linkWebSocket(passvalue.wsUri, passvalue.token, passvalue.expire_time, passvalue.customer_service_id)">重新连接</span><i style="margin-left:10px;cursor: pointer" class="el-icon-close" @click="closeErrorTipVisible"></i></div>
|
||
<div slot="reference" id="shopro-kefu-button" ref="shoproKefuButtonRef" v-show="isButtonShow" @mousedown="moveKefu" @click="openDialog()">
|
||
<div v-if="kefuButtonvisible && !dialogVisible" class="message-dot"></div>
|
||
</div>
|
||
</el-popover>
|
||
|
||
<el-dialog :visible.sync="dialogVisible" :before-close="handleClose" :custom-class="shoproKefuShake?'shopro-kefu-container-shake':''" v-dialogDrag>
|
||
<span slot="title">
|
||
<div class="shopro-kefu-title" ref="shoproKefuTitleRef" v-if="adminData.customer_service" @click.stop="closerightShowId">
|
||
<img class="shopro-kefu-title-avatar" :src="adminData.customer_service.avatar?Fast.api.cdnurl(adminData.customer_service.avatar):'/assets/addons/shopro/img/chat/default.png'">
|
||
<div class="shopro-kefu-title-name">客服-{{adminData.customer_service.name}}</div>
|
||
<div class="shopro-kefu-title-line" v-if="relink==1">
|
||
<el-select v-model="lineStatus" size="mini" placeholder="" @change="changeLineStatus" :style="{color:lineStatus=='online'?'#7438D5':(lineStatus=='offline'?'#ED655F':'#666666')}">
|
||
<el-option v-for="line in lineOptions" :key="line.value" :label="line.label" :value="line.value">
|
||
<span :style="{color: line.color}">{{ line.label }}</span>
|
||
</el-option>
|
||
</el-select>
|
||
</div>
|
||
<div v-if="relink==0">
|
||
网络断开中,请点击 <span style="cursor: pointer;color: #7438D5;" @click="linkWebSocket(passvalue.wsUri, passvalue.token, passvalue.expire_time, passvalue.customer_service_id)">重新连接</span>
|
||
</div>
|
||
</div>
|
||
</span>
|
||
<div class="shopro-kefu-content" @click.stop="closerightShowId">
|
||
<div class="chater-left">
|
||
<div class="chater-header">
|
||
<div class="chater-header-item"
|
||
v-for="(chater,chaterIndex) in liaoData" @click="changeGroup(chaterIndex)">
|
||
<span v-if="groupIndex!=chaterIndex">{{chater.title}}</span>
|
||
<div class="chater-header-item-active" v-if="groupIndex==chaterIndex">{{chater.title}}</div>
|
||
</div>
|
||
</div>
|
||
<div class="chater-header-container scrollbar-containering">
|
||
<div class="chater-header-list" v-if="openGroupList.length>0"
|
||
v-for="(group,gIndex) in openGroupList" :class="[(user_offline.includes(group.session_id) && isChatingId==group.session_id)?'chater-header-list-offline-active':'',((user_offline.includes(group.session_id) && isChatingId!=group.session_id)) ?'chater-header-list-offline':'',((!user_offline.includes(group.session_id)) && isChatingId==group.session_id)?'chater-header-list-active':'']" @click.stop="selectChating(group.session_id,gIndex,true,group)"
|
||
@contextmenu.prevent="show($event,group.session_id,gIndex)">
|
||
<div class="display-flex">
|
||
<div class="chater-el-icon-close" @click.stop="deleteChating(group.session_id,gIndex,true)">
|
||
<i class="el-icon-close"></i>
|
||
</div>
|
||
<div class="chater-header-list-image">
|
||
<img :src="group.avatar?Fast.api.cdnurl(group.avatar):'/assets/addons/shopro/img/chat/user-default.png'" />
|
||
</div>
|
||
<div class="chater-header-list-message">
|
||
<div class="chater-header-list-message-1">
|
||
<div class="display-flex" style="flex:1">
|
||
<div class="ellipsis-item">{{group.nickname}}</div>
|
||
<div class="offline-status">
|
||
<span v-if="user_offline.includes(group.session_id)" class="line-status-offline">离线</span>
|
||
<span v-else class="line-status-online">在线</span>
|
||
</div>
|
||
</div>
|
||
<div style="font-size:12px;flex-shrink: 0;" v-if="group.last_message">
|
||
{{timeFilter(group.last_message.createtime*1000)}}
|
||
</div>
|
||
</div>
|
||
<div class="chater-header-list-message-2">
|
||
<div class="display-flex">
|
||
<!-- <div v-if="user_offline.includes(group.session_id)" class="offline-status">{{user_offline.includes(group.session_id)?'离线':''}}</div> -->
|
||
<div v-if="group.last_message">
|
||
<div v-if="group.last_message.message_type=='text'">
|
||
[文本]
|
||
</div>
|
||
<div v-if="group.last_message.message_type=='image'">[图片]</div>
|
||
<div v-if="group.last_message.message_type=='goods'">[商品]</div>
|
||
<div v-if="group.last_message.message_type=='order'">[订单]</div>
|
||
</div>
|
||
</div>
|
||
<div class="message-dot" v-if="group.message_unread_num">{{group.message_unread_num>99?'99+':group.message_unread_num}}</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<!-- 右键 -->
|
||
<div :style="{position:'fixed',top:rightShowPosition.top,left:rightShowPosition.left,zIndex:1}" v-if="rightShowId==group.session_id">
|
||
<el-select class="transfer-item" v-model="transferAdminList" placeholder="请选择转接客服人员" @change="transferKfu" size="small">
|
||
<el-option
|
||
v-for="item in changeKefuList"
|
||
:key="item.id"
|
||
:label="item.name"
|
||
:value="item.id">
|
||
</el-option>
|
||
</el-select>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="chater-right">
|
||
<!-- 弹出提示 -->
|
||
<div v-if="kefuAccessStatus" class="kefu-access-status">
|
||
<div class="kefu-access-status-left">
|
||
<i class="el-icon-warning"></i>
|
||
{{kefuAccessTip}}
|
||
</div>
|
||
<i class="el-icon-close" @click="closeKefuAccessStatus"></i>
|
||
</div>
|
||
<div v-show="!isChatingId" class="shopro-chat-container scrollbar-containering shopro-chat-container-icon">
|
||
<el-image src="/assets/addons/shopro/img/chat/chat-icon.png" fit="contain">
|
||
<div slot="error" class="image-slot">
|
||
<i class="el-icon-picture-outline"></i>
|
||
</div>
|
||
</el-image>
|
||
<div class="shopro-chat-container-tip">
|
||
暂时没有会话哦!
|
||
</div>
|
||
</div>
|
||
<div v-show="isChatingId" class="shopro-chat-container scrollbar-containering" ref="shoproChatContainerRef">
|
||
<div class="no-more-data" v-if="message_num<10">没有更多数据了</div>
|
||
<template v-if="isChatingId">
|
||
<div class="shopro-chat-container-item"
|
||
:class="[specific.sender_identify=='customer_service'?'customer-service':'customer-user',specific.message_type=='system'?'customer-system':'']"
|
||
v-for="(specific,specificindex) in specificChatMessage" style="flex-direction: column;">
|
||
<template v-if="specific.message_type=='system'">
|
||
<div class="shopro-chat-system">{{specific.message}}<div>
|
||
</template>
|
||
<template v-if="specific.sender_identify=='user' && specific.message_type!='system'">
|
||
<template>
|
||
<div class="specific-createtime" v-if="specificindex>0 && specific.createtime-specificChatMessage[specificindex-1].createtime>300">
|
||
<div class="createtime-item">
|
||
{{Moment(specific.createtime*1000).format('YYYY-MM-DD HH:mm:ss')}}
|
||
</div>
|
||
</div>
|
||
<div class="specific-createtime" v-if="specificindex==0 && specific.createtime">
|
||
<div class="createtime-item">
|
||
{{Moment(specific.createtime*1000).format('YYYY-MM-DD HH:mm:ss')}}
|
||
</div>
|
||
</div>
|
||
</template>
|
||
<div class="display-flex">
|
||
<div class="shopro-chat-container-item-image">
|
||
<el-image v-if="specific.identify"
|
||
:src="specific.identify.avatar?Fast.api.cdnurl(specific.identify.avatar):'/assets/addons/shopro/img/chat/user-default.png'"
|
||
fit="cover">
|
||
<div slot="error" class="image-slot">
|
||
<i class="el-icon-picture-outline"></i>
|
||
</div>
|
||
</el-image>
|
||
</div>
|
||
<div class="shopro-chat-container-item-message">
|
||
<!--type='text' -->
|
||
<div class="shopro-chat-container-item-message-text" v-if="specific.message_type=='text'" v-html="specific.message"></div>
|
||
<!--type='image' -->
|
||
<div class="shopro-chat-container-item-message-text shopro-chat-image" :style="{width:!specific.hidden?'30px':''}" v-if="specific.message_type=='image'">
|
||
<i v-if="!specific.hidden" class="el-icon-loading"></i>
|
||
<el-image ref="imageRef" lazy :src="Fast.api.cdnurl(specific.message)" fit="contain" @load="getimageload(specificindex)" @error="imagerror(specificindex)">
|
||
<div slot="error" class="image-slot">
|
||
<i class="el-icon-picture-outline"></i>
|
||
</div>
|
||
</el-image>
|
||
</div>
|
||
<!--type='goods' -->
|
||
<div class="shopro-chat-goods-item" v-if="specific.message_type=='goods'" @click="openGoods(specific.message.id)">
|
||
<div class="shopro-chat-goods-image">
|
||
<el-image
|
||
:src="Fast.api.cdnurl(specific.message.image)"
|
||
fit="contain">
|
||
<div slot="error" class="image-slot">
|
||
<i class="el-icon-picture-outline"></i>
|
||
</div>
|
||
</el-image>
|
||
</div>
|
||
<div class="shopro-chat-goods-message">
|
||
<div class="display-flex">
|
||
<div style="margin-right:10px;">{{specific.message.id}}</div>
|
||
<div class="shopro-chat-goods-title ellipsis-item">{{specific.message.title}}</div>
|
||
</div>
|
||
<div class="shopro-chat-goods-bodys display-flex">
|
||
<div>¥{{specific.message.price}}</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<!--type='order' -->
|
||
<div class="shopro-chat-order-item" v-if="specific.message_type=='order'" @click="openOrder(specific.message.id)">
|
||
<div class="shopro-chat-order-title">订单号:{{specific.message.order_sn}}</div>
|
||
<div class="shopro-chat-goods-item">
|
||
<div class="shopro-chat-goods-image">
|
||
<el-image
|
||
:src="Fast.api.cdnurl(specific.message.image)"
|
||
fit="contain">
|
||
<div slot="error" class="image-slot">
|
||
<i class="el-icon-picture-outline"></i>
|
||
</div>
|
||
</el-image>
|
||
</div>
|
||
<div class="shopro-chat-goods-message">
|
||
<div class="display-flex">
|
||
<div style="margin-right:10px">{{specific.message.id}}</div>
|
||
<div class="shopro-chat-goods-title ellipsis-item">{{specific.message.title}}</div>
|
||
</div>
|
||
<div class="shopro-chat-goods-bodys display-flex">
|
||
<div>¥{{specific.message.price}}</div>
|
||
<div class="shopro-chat-goods-stock">x{{specific.message.num}}</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
<template v-if="specific.sender_identify=='customer_service' && specific.message_type!='system'">
|
||
<div class="specific-createtime" v-if="specificindex>0 && specific.createtime-specificChatMessage[specificindex-1].createtime>300">
|
||
<div class="createtime-item">
|
||
{{Moment(specific.createtime*1000).format('YYYY-MM-DD HH:mm:ss')}}
|
||
</div>
|
||
</div>
|
||
<div class="specific-createtime" v-if="specificindex==0 && specific.createtime">
|
||
<div class="createtime-item">
|
||
{{Moment(specific.createtime*1000).format('YYYY-MM-DD HH:mm:ss')}}
|
||
</div>
|
||
</div>
|
||
<div class="display-flex" style="justify-content: flex-end;">
|
||
<div class="shopro-chat-container-item-message-1">
|
||
<!--type='text' -->
|
||
<div class="shopro-chat-container-item-message-text" v-if="specific.message_type=='text'" v-html="specific.message"></div>
|
||
<!--type='image' -->
|
||
<div class="shopro-chat-container-item-message-text shopro-chat-image" :style="{width:!specific.hidden?'30px':''}" v-if="specific.message_type=='image' && specific.message">
|
||
<i v-if="!specific.hidden" class="el-icon-loading"></i>
|
||
<el-image ref="imageRef" lazy :src="Fast.api.cdnurl(specific.message)" fit="contain" @load="getimageload(specificindex)" @error="imagerror(specificindex)">
|
||
<div slot="error" class="image-slot">
|
||
<i class="el-icon-picture-outline"></i>
|
||
</div>
|
||
</el-image>
|
||
</div>
|
||
<div class="shopro-chat-goods-item" v-if="specific.message_type=='goods'" @click="openGoods(specific.message.id)">
|
||
<div class="shopro-chat-goods-image">
|
||
<el-image
|
||
:src="Fast.api.cdnurl(specific.message.image)"
|
||
fit="contain">
|
||
<div slot="error" class="image-slot">
|
||
<i class="el-icon-picture-outline"></i>
|
||
</div>
|
||
</el-image>
|
||
</div>
|
||
<div class="shopro-chat-goods-message">
|
||
<div class="display-flex">
|
||
<div style="margin-right:10px">{{specific.message.id}}</div>
|
||
<div class="shopro-chat-goods-title ellipsis-item">{{specific.message.title}}</div>
|
||
</div>
|
||
<div class="shopro-chat-goods-bodys display-flex">
|
||
<div>¥{{specific.message.price}}</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="shopro-chat-container-item-image-1">
|
||
<el-image v-if="specific.identify"
|
||
:src="specific.identify.avatar?Fast.api.cdnurl(specific.identify.avatar):'/assets/addons/shopro/img/chat/default.png'"
|
||
fit="cover">
|
||
<div slot="error" class="image-slot">
|
||
<i class="el-icon-picture-outline"></i>
|
||
</div>
|
||
</el-image>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
</div>
|
||
</template>
|
||
</div>
|
||
<div class="shopro-send-container shopro-nosend-container" v-show="isChatingId && kefuAccessStatusSend">
|
||
暂时无法与之会话
|
||
</div>
|
||
<div class="shopro-send-container" v-show="isChatingId && !kefuAccessStatusSend">
|
||
<div class="shopro-send-tip-container">
|
||
<el-popover placement="top-start" width="222" v-model="emojivisible">
|
||
<div class="scrollbar-containering shopro-chat-emoji-container" style="">
|
||
<div class="shopro-chat-emoji-image" v-for="emoji in emoji_list" @click="selectEmoji(emoji)">
|
||
<el-image
|
||
:src="'/assets/addons/shopro/img/emoji/'+emoji.file"
|
||
fit="contain">
|
||
<div slot="error" class="image-slot">
|
||
<i class="el-icon-picture-outline"></i>
|
||
</div>
|
||
</el-image>
|
||
</div>
|
||
</div>
|
||
<img class="shopro-send-tip-item" slot="reference" src="/assets/addons/shopro/img/chat/expression.png" />
|
||
</el-popover>
|
||
<el-popover placement="top-start" width="180" v-model="commonWordsvisible">
|
||
<div>
|
||
<div class="common-words-item" v-if="commonWordsList.length==0">赶紧去配置常用语吧~</div>
|
||
<div class="scrollbar-containering el-popover-common-words" v-if="commonWordsList.length>0">
|
||
<div class="common-words-item ellipsis-item" v-for="(words,wordsIndex) in commonWordsList" @click="selectCommonWords(wordsIndex)">{{words.name}}</div>
|
||
</div>
|
||
</div>
|
||
<img class="shopro-send-tip-item" slot="reference" src="/assets/addons/shopro/img/chat/commonWords.png" />
|
||
</el-popover>
|
||
<img class="shopro-send-tip-item" style="margin-top: 4px;" @click="selectGoods()" src="/assets/addons/shopro/img/chat/goods.png" />
|
||
<div class="shopro-send-tip-item">
|
||
<label for="inputFile">
|
||
<img class="shopro-send-tip-item" src="/assets/addons/shopro/img/chat/file.png" />
|
||
</label>
|
||
<input id="inputFile" type="file" @change="addfile" ref="inputFileRef" multiple accept="image/png,image/jpeg,image/gif,image/jpg"/>
|
||
</div>
|
||
</div>
|
||
<div class="shopro-send-textarea scrollbar-containering">
|
||
<div class="shopro-send-pre" v-model="sendMessage" contenteditable @keyup.enter.stop="successMessage(event)"></div>
|
||
</div>
|
||
<div class="shopro-send-button-container">
|
||
<div class="shopro-send-button" @click="successMessage()">发送</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</el-dialog>
|
||
</div>
|
||
</script> |