提交部分调整的

master
jiangjunjie 2 weeks ago
parent a46b274612
commit eebb5a920b
  1. BIN
      src/assets/images/send-button.png
  2. 136
      src/components/chat-new.vue
  3. 2
      src/components/emoticon-box.vue
  4. 101
      src/components/footer-bar-input.vue
  5. 2
      src/components/history-content.vue
  6. 2
      src/components/quick-access.vue
  7. 2
      src/components/send-message.vue
  8. 2
      src/components/text-content.vue
  9. 2
      src/components/text-folding.vue
  10. 10
      src/main.js
  11. 2
      src/utils/socket.js
  12. 4
      src/views/chat.vue

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

@ -1,8 +1,14 @@
<script setup>
import { ref, onMounted } from 'vue'
import { ref, computed, inject, watch, nextTick } from 'vue'
import footerBarInput from '@/components/footer-bar-input.vue'
import { messageSend } from '@/utils/api'
defineOptions({
name: 'chat-new',
})
const store = inject('appStore', null)
const chatArr = inject('chatArr', ref([]))
const isChatLoading = inject('isChatLoading', ref(false))
const mainContainerRef = ref(null)
const welcomeWord = ref('下午好,张先生')
const welcomeSubWord = ref('我是您的服务管家皮卡丘')
const abstractList = ref([
@ -32,11 +38,44 @@ const abstractList = ref([
},
])
const askList = ref(['贷款到期可以先还利息吗?', '查询已交费总额', '保单能领多少钱?'])
function getItemText(item) {
return item?.message?.[0]?.options?.label || ''
}
const showTyping = computed(
() =>
isChatLoading.value &&
chatArr.value.length > 0 &&
chatArr.value[chatArr.value.length - 1].type === 'user',
)
function sendText(text) {
if (!text) return
store?.pushUserMessage?.(text)
messageSend(text).catch((err) => {
console.log(err)
store?.pushUserMessage?.('服务异常,请您稍后再试~', 'bot')
})
}
function handleAskClick(item) {
sendText(item)
}
watch(
() => chatArr.value.length,
async () => {
await nextTick()
const el = mainContainerRef.value
if (el) el.scrollTop = el.scrollHeight
},
)
</script>
<template>
<div class="chat-new">
<div class="main-container">
<div class="main-container" ref="mainContainerRef">
<div class="welcome-con">
<div class="welcome-title">{{ welcomeWord }}</div>
<div class="sub-title">{{ welcomeSubWord }}</div>
@ -75,12 +114,32 @@ const askList = ref(['贷款到期可以先还利息吗?', '查询已交费总
</div>
</div>
<div class="ask-con">
<div class="item" v-for="(item, index) in askList" :key="index">
<div
class="item"
v-for="(item, index) in askList"
:key="index"
@click="handleAskClick(item)"
>
<div class="icon"><span>#</span></div>
<span>{{ item }}</span>
<img src="@/assets/images/chat/line.svg" alt="" />
</div>
</div>
<div class="message-con" v-if="chatArr.length || showTyping">
<div
v-for="(item, index) in chatArr"
:key="index"
:class="['msg-item', item.type === 'user' ? 'from-user' : 'from-bot']"
>
<div class="bubble">{{ getItemText(item) }}</div>
</div>
<div class="msg-item from-bot" v-if="showTyping">
<div class="bubble typing"><span></span><span></span><span></span></div>
</div>
</div>
</div>
<div class="chat-footer">
<footer-bar-input />
</div>
</div>
</template>
@ -97,6 +156,13 @@ const askList = ref(['贷款到期可以先还利息吗?', '查询已交费总
display: flex;
flex-direction: column;
padding: 12rem;
.chat-footer {
flex-shrink: 0;
margin: 12rem -12rem -12rem;
background: #ffffff;
padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom);
}
.main-container {
flex: 1;
overflow: auto;
@ -343,6 +409,70 @@ const askList = ref(['贷款到期可以先还利息吗?', '查询已交费总
}
}
}
.message-con {
display: flex;
flex-direction: column;
gap: 12rem;
margin-top: 16rem;
.msg-item {
display: flex;
.bubble {
max-width: 80%;
padding: 10rem 14rem;
font-family: PingFang SC;
font-size: 14rem;
font-weight: normal;
line-height: 20rem;
letter-spacing: 0rem;
color: #17204d;
word-break: break-all;
}
}
.from-user {
justify-content: flex-end;
.bubble {
background: linear-gradient(266deg, #025cea 0%, #3f8cf8 100%);
color: #ffffff;
border-radius: 12rem 12rem 4rem 12rem;
}
}
.from-bot {
justify-content: flex-start;
.bubble {
background: #fcfdfd;
box-shadow: 0rem 4rem 10rem 0rem #e7effd;
border-radius: 12rem 12rem 12rem 4rem;
}
}
.typing {
display: flex;
align-items: center;
gap: 5rem;
span {
width: 6rem;
height: 6rem;
border-radius: 50%;
background: #7e849f;
animation: typing-blink 1s infinite;
&:nth-child(2) {
animation-delay: 0.2s;
}
&:nth-child(3) {
animation-delay: 0.4s;
}
}
}
@keyframes typing-blink {
0%,
80%,
100% {
opacity: 0.2;
}
40% {
opacity: 1;
}
}
}
}
}
</style>

@ -10,7 +10,7 @@ import faceJSON from '@/mock/face.json'
const elder = inject('elder', false)
const publicPath = ref(process.env.VUE_APP_SRC)
const publicPath = ref(import.meta.env.BASE_URL)
const active = ref(0)
const faceData = ref(faceJSON)
const faceIndex = ref(0)

@ -41,6 +41,7 @@
</div>
<!-- 输入框模块 -->
<div class="input-box flex" :style="{ 'padding-bottom': isNewApp ? '15px' : '' }">
<!-- <div class="input-box-margin"> -->
<div
class="input-btn-box"
style="padding-left: 0px; padding-right: 10px; display: flex; align-items: center"
@ -50,7 +51,7 @@
<img src="@/assets/images/fill-microphone.png" alt="" />
</div>
<div class="input-box-txt">
<div v-if="!soundFlag">
<div v-if="!soundFlag" style="width: 100%">
<textarea
class="input-txt"
placeholder="请简要描述您的问题"
@ -101,7 +102,7 @@
></textarea>
</div>
<div v-else @click="clickMicro">
<div v-else @click="clickMicro" style="width: 100%">
<voiceInput
refNode="painSpotReason"
ref="voiceInputRef"
@ -110,7 +111,8 @@
@handleUpdateContent="onTTSContentUpdate"
@isRecorderStart="isRecorderStart"
@clickFinish="sayFinish"
></voiceInput>
>
</voiceInput>
</div>
<!-- <input
@ -129,17 +131,8 @@
<!-- <div class="input-box-middle">
</div> -->
<span v-show="!soundFlag" class="input-text-tips">{{ txtTips }}</span>
</div>
<!-- <div v-if="false" class="input-btn-box btn-box1">
<button
class="btn-item opacity"
:class="smileFlag ? 'smile-box' : 'keyboard-box'"
:disabled="smileDisabled || elderAndOutwork"
@click.stop="toggleShow()"
></button>
</div> -->
<div class="input-btn-box btn-box2">
<!-- <span v-show="!soundFlag" class="input-text-tips">{{ txtTips }}</span> -->
<div class="input-btn-box btn-box2" style="flex-shrink: 0">
<button
class="btn-item opacity"
v-if="!sendFlag"
@ -155,6 +148,16 @@
></button>
</div>
</div>
<!-- <div v-if="false" class="input-btn-box btn-box1">
<button
class="btn-item opacity"
:class="smileFlag ? 'smile-box' : 'keyboard-box'"
:disabled="smileDisabled || elderAndOutwork"
@click.stop="toggleShow()"
></button>
</div> -->
</div>
</div>
<!-- 表情符号 -->
<!-- <transition name="draw"> -->
@ -172,7 +175,7 @@
<!-- </transition> -->
<!-- <SoundRecord v-if="soundFlag" @clickFinish="sayFinish"></SoundRecord> -->
</div>
<!-- </div> -->
</template>
<script setup>
@ -191,6 +194,7 @@ import _ from 'lodash'
import uploadImage from '@/components/upload-image.vue'
import EmoticonBox from '@/components/emoticon-box.vue'
import voiceInput from '@/components/TTS.vue'
import { messageSend } from '@/utils/api'
import { emitter } from '@/utils/mitt'
import utils from '@/utils/utils'
import { _debounce } from '@/utils'
@ -476,36 +480,13 @@ function clickSendMessage() {
emoticonClick.value = false
sendMessage.value = ''
// 调用机器人
if (manualService.value == 1) {
store
?.dispatch?.('sendingRobot', sendParmas)
.then((res) => {
if (res.reqAndResType == '05' && res.cmd == 'pbstart') {
duolunFloat.value = false
} else {
duolunFloat.value = true
}
})
.catch((err) => {
console.log(err)
})
// 人工
} else if (manualService.value == 2) {
store
?.dispatch?.('sendmessageContent', sendParmas)
.then((res) => {
if (res.reqAndResType == '05' && res.cmd == 'pbstart') {
duolunFloat.value = false
} else {
duolunFloat.value = true
}
})
.catch((err) => {
// 新架构:用户消息卡片入 chatArr,USER_TEXT 事件发送,机器人回复经 SSE 下发
store?.pushUserMessage?.(elInputValue)
messageSend(elInputValue).catch((err) => {
console.log(err)
store?.pushUserMessage?.('服务异常,请您稍后再试~', 'bot')
})
}
}
}
function closeQuoteMessage() {
@ -720,25 +701,16 @@ function resilience() {
// 点击联想词查询
function lenovoQuery(item) {
let sendParmas = {
reqAndResType: '1', // 1文本 2图片 3问提评价
msgText: item,
msgSource: manualService.value, // 1机器人 2人工
questionType: 3,
}
// 发送的消息 存到store
scrollTopBody()
store
?.dispatch?.('sendingRobot', sendParmas)
.then((res) => {
associationalWord.value = false
sendFlag.value = false
sendMessage.value = ''
})
.catch((err) => {
store?.pushUserMessage?.(item)
messageSend(item).catch((err) => {
console.log(err)
store?.pushUserMessage?.('服务异常,请您稍后再试~', 'bot')
})
}
@ -868,6 +840,11 @@ watch(sendMessage, (newValue, oldValue) => {
-webkit-box-sizing: border-box;
box-sizing: border-box;
align-content: flex-start;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
background-color: #ebf1ff;
}
.input-box-txt {
@ -875,8 +852,8 @@ watch(sendMessage, (newValue, oldValue) => {
height: auto;
min-height: 10px;
line-height: 10px;
background: #eef2f8;
border-radius: 2px;
background: #fff;
border-radius: 30px;
padding: 7.5px 20px 7.5px 15px;
vertical-align: middle;
margin-right: 5px;
@ -889,6 +866,8 @@ watch(sendMessage, (newValue, oldValue) => {
flex: 1;
position: relative;
overflow: hidden;
display: flex;
align-items: center;
}
.input-text-tips {
@ -912,7 +891,7 @@ watch(sendMessage, (newValue, oldValue) => {
.input-txt {
box-sizing: border-box;
width: 100%;
height: 20px;
/* height: 20px; */
max-height: 80px;
line-height: 20px;
border: 0;
@ -1004,9 +983,9 @@ textarea:-ms-input-placeholder {
}
.send-box {
background: url('data:image/png;base64,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')
no-repeat center;
background: url('../assets/images/send-button.png') no-repeat center;
background-size: 100% auto;
border: 0;
}
.close-box {
@ -1017,12 +996,14 @@ textarea:-ms-input-placeholder {
-webkit-transform: rotate(135deg);
-moz-transform: rotate(135deg);
-o-transform: rotate(135deg);
border: 0;
}
.add-box {
background: url('data:image/png;base64,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')
no-repeat center;
background-size: 100% auto;
border: 0;
}
.smile-emoticon-box {

@ -29,7 +29,7 @@ const userInfo = inject('userInfo', ref({}))
const headerAvatar = inject('headerAvatar', ref({}))
const elder = inject('elder', false)
const publicPath = process.env.VUE_APP_SRC
const publicPath = import.meta.env.BASE_URL
const expressionProcessing = ref({})
const bigExpressionProcessing = ref({})

@ -153,7 +153,7 @@ function getIconUrl(content) {
}
function isProd() {
return process.env.NODE_ENV === 'production'
return import.meta.env.PROD
}
const isBtnsubmit = ref(true)

@ -65,7 +65,7 @@ const sendLoading = inject('sendLoading', ref(false))
const integratedUser = inject('integratedUser', ref(false))
const facejson = faceJSON
const publicPath = process.env.VUE_APP_SRC
const publicPath = import.meta.env.BASE_URL
const expressionProcessing = ref({})
const bigExpressionProcessing = ref({})

@ -58,7 +58,7 @@ const mescrollContent = inject('mescrollContent', ref(null))
const manualService = inject('manualService', ref('1'))
const sendLoading = inject('sendLoading', ref(false))
const publicPath = process.env.VUE_APP_SRC
const publicPath = import.meta.env.BASE_URL
const showTotal = ref(true)
const exchangeButton = ref(true)
const showExchangeButton = ref(false)

@ -89,7 +89,7 @@ const mescrollContent = inject('mescrollContent', ref(null))
const manualService = inject('manualService', ref('1'))
const sendLoading = inject('sendLoading', ref(false))
const publicPath = process.env.VUE_APP_SRC
const publicPath = import.meta.env.BASE_URL
const showTotal = ref(true)
const exchangeButton = ref(true)
const showExchangeButton = ref(false)

@ -8,7 +8,9 @@ import pinia from './store'
import Vant from 'vant'
import 'vant/lib/index.css'
import Vue3Lazyload from 'vue3-lazyload'
import "@/assets/font/iconfont.css"
import { Post } from './utils/https'
import xss from 'xss'
import '@/assets/font/iconfont.css'
const shouldEnableVConsole = import.meta.env.VITE_ENABLE_TEST === 'true'
@ -19,7 +21,7 @@ const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/
)
const currentHostname = window.location.hostname
const shouldShowVConsole = enableVConsoleDomains.includes(currentHostname)
if ((shouldShowVConsole || shouldEnableVConsole && isMobile)) {
if (shouldShowVConsole || (shouldEnableVConsole && isMobile)) {
import('vconsole').then(({ default: VConsole }) => {
new VConsole()
})
@ -63,4 +65,8 @@ app.use(router)
app.use(createPinia())
app.use(Vant)
// Vue2 全局挂载的 this.$post / this.$xss,迁移后在 globalProperties 上注册
app.config.globalProperties.$post = Post
app.config.globalProperties.$xss = (val) => xss(val)
app.mount('#app')

@ -38,7 +38,7 @@ document.setTitle = function (title) {
document.title = title;
var iframe = document.createElement('iframe');
iframe.src = `${process.env.BASE_URL}favicon.ico`;
iframe.src = `${import.meta.env.BASE_URL}favicon.ico`;
iframe.style.display = 'none';
iframe.onload = function () {
setTimeout(function () {

@ -1,11 +1,11 @@
<template>
<div>
<chat-main
<!-- <chat-main
v-if="isToken"
:tokenExist="isToken"
:isWX="isWX"
:lostChatInfoNum="lostChatInfoNum"
/>
/> -->
<chat-new />
<!-- <human-appraise-popup /> -->
</div>

Loading…
Cancel
Save