You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
customAgent/src/components/footer-bar-input.vue

1232 lines
58 KiB

<template>
<div class="footer-bar-input before-top" :class="[!associationalWord ? 'footer-overflow' : '', elder ? '' : '']">
<!-- 联想词 -->
<!-- <transition name="draw" v-show="associationalWord"> -->
<div class="associational-word-box" v-if="associationalWord">
<div class="word-cells" v-if="wordList.length > 0">
<a class="word-cell word-cell_access word-cell_example opacity" href="javascript:;"
v-for="(item, index) in wordList" :key="index" @click.stop="lenovoQuery(item.name)"
v-show="doesMatchMessage(item.name)">
<div class="word-cell__bd word-cell_primary">
<p v-html="brightenKeyword(item.name)"></p>
</div>
<span class="word-cell__ft"></span>
</a>
</div>
</div>
<!-- </transition> -->
<!-- 引用消息区块 -->
<div class="quote-preview-box" v-if="quoteMessageObj">
<div class="quote-text van-ellipsis">引用内容:{{ getQuotePreview(quoteMessageObj) }}</div>
<div class="quote-close-icon" @click="closeQuoteMessage">
<span style="
font-size: 18rem;
line-height: 1;
display: inline-block;
padding: 0 4rem;
color: #999;
">&times;</span>
</div>
</div>
<!-- 输入框模块 -->
<div class="input-box flex" :style="{ 'padding-bottom': isNewApp ? '15rem' : '' }">
<!-- <div class="input-box-margin"> -->
<div class="input-btn-box" style="padding-left: 0; padding-right: 10rem; display: flex; align-items: center"
v-if="isElder && asrData.switch == 1" @click="clickMicro">
<img src="@/assets/images/fill-microphone.png" alt="" />
</div>
<div class="input-box-txt">
<div v-if="!soundFlag" style="width: 100%">
<textarea class="input-txt" placeholder="请简要描述您的问题" rows="1" ref="sendMessageArea" v-model="sendMessage"
@input.stop="monitorInputs" @blur.stop="monitorInputsBlur" @focus.stop="monitorInputsFocus($event)"
@keydown.delete="deleteFace($event)" is-pc="移动端" v-if="noTouchStop" :readonly="elderAndOutwork"></textarea>
<textarea class="input-txt" placeholder="请简要描述您的问题" rows="1" ref="sendMessageArea" v-model="sendMessage"
@input.stop="monitorInputs" @blur.stop="monitorInputsBlur" @focus.stop="monitorInputsFocus($event)"
@keydown.delete="deleteFace($event)" @touchend.stop="clickInput" is-pc="移动端" v-else-if="!isPc"
:readonly="elderAndOutwork"></textarea>
<textarea class="input-txt" placeholder="请简要描述您的问题" rows="1" ref="sendMessageArea" v-model="sendMessage"
@input.stop="monitorInputs" @blur.stop="monitorInputsBlur" @focus.stop="monitorInputsFocus($event)"
@keydown.delete="deleteFace($event)" @touchend.stop="clickInput" is-pc="pc端调试模式"
@keydown.stop="listenEnter($event)" required v-else :readonly="elderAndOutwork"></textarea>
</div>
<div v-else @click="clickMicro" style="width: 100%">
<voiceInput refNode="painSpotReason" ref="voiceInputRef" :content="sendMessage" :asrData="asrData"
@handleUpdateContent="onTTSContentUpdate" @isRecorderStart="isRecorderStart" @clickFinish="sayFinish">
</voiceInput>
</div>
<!-- <input
class="input-txt"
type="text"
placeholder="输入您想要问的问题吧~"
ref="sendMessageArea"
v-model="sendMessage"
@input="monitorInputs"
@focus.stop="monitorInputsFocus"
@blur.stop="monitorInputsBlur"
@keydown.delete="deleteFace"
@touchend.stop="clickInput"
@keyup.enter="lineFeed"
/>-->
<!-- <div class="input-box-middle">
</div> -->
<!-- <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" :class="addFlag ? 'add-box' : 'close-box'"
:disabled="sendDisabled || elderAndOutwork" @click.stop="addUpload()"></button>
<button class="btn-item opacity send-box" v-else :disabled="sendDisabled || elderAndOutwork"
@click.stop="clickSendMessage()"></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"> -->
<emoticon-box class="smile-emoticon-box" :class="{ min_heightauto: !smileFlag }"
@onFaceChoose="handleFaceChoose"></emoticon-box>
<!-- </transition> -->
<upload-image ref="uploadImageRef" @image-selected="handleImageSelected" @image-sent="handleImageSent"
@image-failed="handleImageFailed"></upload-image>
<!-- <SoundRecord v-if="soundFlag" @clickFinish="sayFinish"></SoundRecord> -->
<!-- </div> -->
</template>
<script setup>
import {
ref,
computed,
watch,
inject,
onMounted,
onBeforeUnmount,
nextTick,
getCurrentInstance,
} from 'vue'
import { showToast } from 'vant'
import _ from 'lodash'
import uploadImage from '@/components/upload-image.vue'
import EmoticonBox from '@/components/emoticon-box.vue'
import voiceInput from '@/components/TTS.vue'
import { emitter } from '@/utils/mitt'
import utils from '@/utils/utils'
import { _debounce } from '@/utils'
import _Rules from '@/common/checkRules'
import faceJSON from '@/mock/face.json'
import mgcJSON from '@/mock/mgc.json'
import '@/assets/images/fill-microphone.png'
// Vue 2 中 this.$post / this.$xss 挂在全局属性上,<script setup> 中通过 globalProperties 获取
const { appContext } = getCurrentInstance()
const globalProps = appContext.config.globalProperties
const $post = globalProps.$post
const $xss = globalProps.$xss || ((v) => v)
// —— inject(对应原 Vuex mapState)——
const store = inject('appStore', null)
const userId = inject('userId', ref(''))
const sessionId = inject('sessionId', ref(''))
const sendLoading = inject('sendLoading', ref(false))
const source = inject('source', ref(''))
const mescrollContent = inject('mescrollContent', ref(null))
const chatList = inject('chatList', ref([]))
const manualService = inject('manualService', ref('1'))
const userInfo = inject('userInfo', ref({}))
const planCode = inject('planCode', ref(''))
const appentry = inject('appentry', ref(''))
const notitle = inject('notitle', ref(''))
const asrConfig = inject('asrConfig', ref({}))
const elder = inject('elder', ref(false))
// —— 模板引用 ——
const sendMessageArea = ref(null)
const voiceInputRef = ref(null)
const uploadImageRef = ref(null)
// —— 响应式状态(原 data)——
const sendMessage = ref('') // 输入的内容
const smileFlag = ref(true)
const sendFlag = ref(false)
const addFlag = ref(true)
const smileDisabled = ref(false)
const sendDisabled = ref(false)
const associationalWord = ref(false) // 联想词
const cursorFirst = ref('') // 光标前一位的字符
const cursorIndex = ref(0) // 光标位置的索引
const leftBracketIndex = ref(0) // 右括号到左括号的索引
const isDeleteFace = ref(false) // 是否要删掉表情
const deleteFaceTxt = ref('') // 删除的表情
const wordList = ref([])
const oldMessage = ref('')
const facejson = faceJSON
const faceList = ref([])
const imageBoxShow = ref(false)
const onceClick = ref(0) // 初始化一次 只点击一次
const isPc = ref(false) // 是否pc
const emoticonClick = ref(false) // 当前点击的是否是表情
const txtMaxlength = ref(100)
const txtTips = ref(100)
const duolunFloat = ref(true) // 多轮的情况 o5 pdstart
const isNewApp = ref(false) // 是否寿险app
const startCursor = ref(0) // 连续表情输出处理
const endCursor = ref(0) // 连续表情输出处理
const noTouchStop = ref(false) // e办app上@touchend.stop会导致输入框需要长按才能输入
const showRecord = ref(true) // 是否显示录音按钮
const isRecording = ref(false) // 是否正在录音
const soundFlag = ref(false)
const asrData = ref({}) // asr入参
const lastMsg = ref('') // 语音转文字上一次返回的内容
const asrMsg = ref('') // 语音转文字所有内容
const currentMSg = ref('') // 点击语音转文字前输入框当前内容
const quoteMessageObj = ref(null)
let timer = null
const isElder = computed(() => !!elder.value) // 老年人关爱版
// 特定渠道 + 关爱版 + 非人工 时输入框只读
const elderAndOutwork = computed(() => {
return (
(source.value == '95290000' || source.value == '95460000' || source.value == '95830000') &&
isElder.value &&
manualService.value !== '2'
)
})
// —— 初始化(原 created)——
processedEmoji()
// 是否pc端(Vite 中用 import.meta.env.MODE 替代 process.env.NODE_ENV)
isPc.value = ['sit', 'development'].includes(import.meta.env.MODE)
// 是否寿险app
isNewApp.value = source.value == '95290000' && appentry.value == '1'
// e办app 养老金、b2bi渠道
noTouchStop.value = notitle.value === '1'
asrData.value = asrConfig.value || {}
// —— 生命周期(原 mounted)——
// 原 Bus.$on('quoteMessageBus'),迁移后统一走 mitt 的 quoteMessage 事件
function onQuoteMessage(item) {
quoteMessageObj.value = item
sendMessageArea.value && sendMessageArea.value.focus()
}
onMounted(() => {
emitter.on('quoteMessage', onQuoteMessage)
})
onBeforeUnmount(() => {
emitter.off('quoteMessage', onQuoteMessage)
if (timer) clearTimeout(timer)
})
// —— 方法(原 methods)——
// 表情处理
function processedEmoji() {
faceList.value = []
facejson.forEach((item, index) => {
for (let i = 0; i < item.faceList.length; i++) {
const element = `[${item.faceList[i].title}]`
faceList.value.push(element)
}
})
}
function isEmoji(face) {
var isFace = faceList.value.includes(face)
return isFace
}
function deleteFace(e) {
var elInput = sendMessageArea.value // 输入框最新的值
getHeight(elInput) // 处理删除时text的高度
emoticonClick.value = false
associationalWord.value = elInput.value.replace(/(^\s*)|(\s*$)/g, '') ? true : false
const startPos = elInput.selectionStart // input 第0个字符到选中的字符
const endPos = elInput.selectionEnd // 选中的字符到最后的字符
let afterEndPos = endPos
if (startPos === undefined || endPos === undefined) return
if (!elInput.value) return
if (elInput.setSelectionRange) {
if (isDeleteFace.value && leftBracketIndex.value != -1) {
let str = elInput.value
elInput.value = str.replace(/\[.*?\]/g, (item, index) => {
if (endPos === item.length + index && isEmoji(item)) {
e.preventDefault()
afterEndPos -= item.length
elInput.focus()
return ''
} else {
return item
}
})
elInput.selectionStart = afterEndPos
elInput.selectionEnd = afterEndPos
// 重置值
sendMessage.value = elInput.value
}
}
}
function clickInput() {
const elInput = sendMessageArea.value
const startPos = elInput.selectionStart // input 第0个字符到选中的字符
const endPos = elInput.selectionEnd // 选中的字符到最后的字符
onceClick.value++ // 点击次数
emoticonClick.value = false
scrollTopBody()
if (startPos === undefined || endPos === undefined) return
cursorIndex.value = startPos
cursorFirst.value = elInput.value.substring(startPos - 1, startPos)
// 截取光标之前的数据
const cursorBeforeTxt = elInput.value.substring(0, elInput.selectionStart)
isDeleteFace.value = cursorFirst.value != ']' ? false : true
if (cursorFirst.value != ']') return
const leftBracketIdx = cursorBeforeTxt.lastIndexOf('[') // 光标到左括号的索引
leftBracketIndex.value = leftBracketIdx
const deleteFaceTxt = cursorBeforeTxt.substring(leftBracketIdx, elInput.selectionStart + 1)
deleteFaceTxt.value = deleteFaceTxt
}
// 标签切换
function toggleShow() {
smileFlag.value = !smileFlag.value
imageBoxShow.value = true
addFlag.value = true
emoticonClick.value = false
soundFlag.value = false
scrollTopBody()
}
function scrollTopBody() {
setTimeout(() => {
// 滚动到底部
try {
mescrollContent.value.scrollTop = mescrollContent.value.scrollHeight || 0
} catch (error) {
console.log(error)
}
}, 300)
}
function listenEnter(event) {
const elInput = sendMessageArea.value
let elInputValue = $xss(elInput.value.replace(/(^\s*)|(\s*$)/g, ''))
if (event.keyCode == 13 && event.ctrlKey) {
elInput.value += '\n'
getHeight(elInput) // 处理删除时text的高度
} else if (event.keyCode == 13) {
// 避免回车键换行
event.preventDefault()
clickSendMessage() // 发送文本
}
}
// 发送消息
function clickSendMessage() {
// 包含敏感词不允许发送
if (sendMessage.value.includes('***')) {
showToast('有非法字符*,无法提交')
return
}
// 校验是否包含链接
if (_Rules.isContainsLink(sendMessage.value)) {
showToast('为了您的账号安全,请避免在消息中包含链接哦~')
return
}
const elInput = sendMessageArea.value
associationalWord.value = false
let elInputValue = $xss(elInput.value.replace(/(^\s*)|(\s*$)/g, ''))
if (!elInputValue) {
showToast({ message: '输入您想要问的问题吧~', position: 'bottom' })
return
}
if (sendFlag.value) {
let sendParmas = {
reqAndResType: '1', // 1文本 2图片 3问提评价
msgText: elInputValue,
msgSource: manualService.value, // 1机器人 2人工
}
if (quoteMessageObj.value) {
let quoteType = getQuoteType(quoteMessageObj.value)
let quoteMsg = ''
if (quoteType === '2') {
quoteMsg =
quoteMessageObj.value.imgUrl ||
quoteMessageObj.value.imgKey ||
quoteMessageObj.value.msgText ||
''
} else if (quoteType === '3') {
quoteMsg = quoteMessageObj.value.voiceUrl || ''
} else {
quoteMsg = getQuotePreview(quoteMessageObj.value)
}
sendParmas.quoteData = {
quoteMsg: quoteMsg,
quoteId: quoteMessageObj.value.chatId || '',
quoteType: quoteType,
}
closeQuoteMessage() // 清空状态
}
// 发送的消息 存到store
scrollTopBody()
sendFlag.value = !sendFlag.value
emoticonClick.value = false
sendMessage.value = ''
// 机器人走 /liics_api/semantic/qaChat,人工客服沿用 WebSocket。
const request = Number(manualService.value) === 2
? store?.sendmessageContent?.(sendParmas)
: store?.sendingRobot?.(sendParmas)
request?.then((res) => {
duolunFloat.value = !(res?.reqAndResType == '05' && res?.cmd == 'pbstart')
}).catch((err) => {
console.log(err)
})
}
}
function closeQuoteMessage() {
quoteMessageObj.value = null
}
function getQuotePreview(item) {
console.log('引用item====', item)
if (!item) return ''
if (item.voiceUrl || item.voiceNo) {
return '[语音]'
} else if (item.reqAndResType == '2' || item.imgUrl) {
return '[图片]'
} else {
let text = item.msgText || ''
return text.replace(/<[^>]+>/g, '') // 去除可能的 html 标签以纯文本展示
}
}
function getQuoteType(item) {
if (!item) return '1'
if (item.voiceUrl || item.voiceNo) {
return '3'
} else if (item.reqAndResType == '2' || item.imgUrl) {
return '2'
} else {
return '1'
}
}
// 选择的表情处理
function handleFaceChoose(face) {
nextTick(() => {
const elInput = sendMessageArea.value
startCursor.value = elInput.selectionStart || startCursor.value // input 第0个字符到选中的字符
endCursor.value = elInput.selectionEnd || endCursor.value // 选中的字符到最后的字符
emoticonClick.value = true
if (startCursor.value === undefined || endCursor.value === undefined) return
const txt = elInput.value
if (_.isEmpty(txt)) {
startCursor.value = 0
endCursor.value = 0
}
// 将表情添加到选中的光标位置
let result = txt.substring(0, startCursor.value) + face + txt.substring(endCursor.value)
sendMessage.value = result // 赋值给表单中的的字段,先赋值防止安卓端watch监听不到变化
elInput.value = result // 赋值给input的value
smileFlag.value = false
sendFlag.value = true // 添加表情成功改成发送按钮
// 重新定义光标位置
startCursor.value = startCursor.value + face.length
endCursor.value = endCursor.value + face.length
// 删除时用的处理
cursorIndex.value = startCursor.value
cursorFirst.value = elInput.value.substring(startCursor.value - 1, startCursor.value)
// 截取光标之前的数据
const cursorBeforeTxt = elInput.value.substring(0, startCursor.value)
isDeleteFace.value = cursorFirst.value != ']' ? false : true
if (cursorFirst.value != ']') return
const leftBracketIdx = cursorBeforeTxt.lastIndexOf('[') // 光标到左括号的索引
leftBracketIndex.value = leftBracketIdx
deleteFaceTxt.value = cursorBeforeTxt.substring(leftBracketIdx, startCursor.value + 1)
})
}
// 上传图片
function addUpload() {
smileFlag.value = true
emoticonClick.value = false
addFlag.value = true
uploadImageRef.value?.openFilePicker()
}
function handleImageSelected(payload) {
store?.pushImageMessage?.(payload)
scrollTopBody()
}
function handleImageSent(payload) {
store?.updateImageMessage?.(payload.localId, {
imageUrl: payload.imageUrl,
imageKey: payload.imageKey,
uploadStatus: 'success',
})
// liics upload/image returns the follow-up conversation record in res.data.
// Keep it in the chat list after updating the local image bubble.
if (payload.responseData) {
store?.setChatList?.(payload.responseData)
}
addFlag.value = true
imageBoxShow.value = false
scrollTopBody()
}
function handleImageFailed(payload) {
store?.updateImageMessage?.(payload.localId, { uploadStatus: 'failed' })
}
// input焦点事件
function monitorInputsFocus(e) {
const elInput = sendMessageArea.value
associationalWord.value = elInput.value ? true : false
if (utils.isAndroid() == 'isAndroid') {
smileFlag.value = true
addFlag.value = true
setTimeout(() => {
e.target.scrollIntoView(true)
e.target.scrollIntoViewIfNeeded()
// true:元素的顶端将和其所在滚动区的可视区域的顶端对齐; false:底端对齐。
}, 300) // 延时 == 键盘弹起需要时间
} else {
if (!emoticonClick.value) {
smileFlag.value = true
}
// 控制初始化点击输入框 被输入法挡着问题
setTimeout(() => {
addFlag.value = true
e.target.scrollIntoView(true)
e.target.scrollIntoViewIfNeeded()
// true:元素的顶端将和其所在滚动区的可视区域的顶端对齐; false:底端对齐。
}, 300) // 延时 == 键盘弹起需要时间
}
}
// input 失去焦点
function monitorInputsBlur() {
emoticonClick.value = false
const elInput = sendMessageArea.value
// this.associationalWord = false;
// this.smileFlag = true;
// this.addFlag = true;
resilience()
}
function changeMaxLength() {
if (sendMessage.value.length > txtMaxlength.value) {
sendMessage.value = sendMessage.value.slice(0, txtMaxlength.value)
sendMessageArea.value.setAttribute('maxlength', txtMaxlength.value)
// showToast(`不能超过${txtMaxlength.value}个字`)
} else {
sendMessageArea.value.removeAttribute('maxlength')
}
txtTips.value = txtMaxlength.value - sendMessage.value.length
}
// input正在输入
function monitorInputs(e) {
// 处理表情字符串的问题
const elInput = sendMessageArea.value
const startPos = elInput.selectionStart // input 第0个字符到选中的字符
const endPos = elInput.selectionEnd // 选中的字符到最后的字符
// 敏感词替换为***
let mgc = mgcJSON.mgc
const words = _Rules.replaceTaboo(mgc, sendMessage.value)
sendMessage.value = words
// 处理光标问题
if (startPos === undefined || endPos === undefined) return
cursorIndex.value = startPos
cursorFirst.value = elInput.value.substring(startPos - 1, startPos)
// 截取光标之前的数据
const cursorBeforeTxt = elInput.value.substring(0, elInput.selectionStart)
isDeleteFace.value = cursorFirst.value != ']' ? false : true
const leftBracketIdx = cursorBeforeTxt.lastIndexOf('[') // 光标到左括号的索引
leftBracketIndex.value = leftBracketIdx
deleteFaceTxt.value = cursorBeforeTxt.substring(leftBracketIdx, elInput.selectionStart + 1)
}
// 关键字加高亮
function brightenKeyword(val) {
let titleString = val
let keyword = sendMessage.value
if (titleString.length <= 0) {
return ''
}
var reg = new RegExp(keyword, 'gi')
val = val.replace(reg, function (txt) {
return '<font color=#FC5454>' + txt + '</font>'
})
return val
}
function doesMatchMessage(item) {
const elInput = sendMessage.value.toLowerCase()
item = item.toLowerCase()
if (item && item.indexOf(elInput) > -1) {
return true
}
return false
}
function offEmoticonsPic() {
if (!smileFlag.value || !addFlag.value || associationalWord.value) {
emoticonClick.value = false
smileFlag.value = true
addFlag.value = true
associationalWord.value = false
}
}
// 输入框高度
function getHeight(element) {
if (!element) return
timer = setTimeout(() => {
element.style.height = 'auto' // 必须设置为auto
element.style.height = element.scrollHeight + 'px'
}, 20)
}
// 解决微信输入框顶上去下不来问题
function resilience() {
setTimeout(() => {
var scrollHeight = document.documentElement.scrollTop || document.body.scrollTop || 0
window.scrollTo(0, Math.max(scrollHeight - 1, 0))
}, 150)
}
// 点击联想词查询
function lenovoQuery(item) {
const sendParmas = {
reqAndResType: '1',
msgText: item,
msgSource: manualService.value,
questionType: 3,
}
// 发送的消息 存到store
scrollTopBody()
store?.sendingRobot?.(sendParmas).then(() => {
associationalWord.value = false
sendFlag.value = false
sendMessage.value = ''
}).catch((err) => {
console.log(err)
})
}
// 实时获取联想词
const getAssociationalWord = _debounce(function () {
let param = {
category: 5,
source: source.value,
planCode: planCode.value,
keyWord: sendMessage.value,
sceneId: (userInfo.value && userInfo.value.sceneId) || '',
}
if (!sendMessage.value) {
return
}
$post('config/activity', param)
.then((res) => {
if (res.code && res.code != 0) {
wordList.value = ''
return
}
wordList.value = res.data
})
.catch((error) => {
wordList.value = ''
console.log(error)
})
}, 200)
function recordShow() {
showRecord.value = !showRecord.value
smileFlag.value = true
}
// 点击完成
function sayFinish(num) {
soundFlag.value = true
}
// 成功调用录音
function isRecorderStart(isStart) {
if (isStart) {
soundFlag.value = false
} else {
soundFlag.value = true
}
}
function clickMicro() {
console.log('点击了麦克风')
lastMsg.value = sendMessage.value
asrMsg.value = ''
smileFlag.value = true
soundFlag.value = !soundFlag.value
}
// TTS 语音识别内容回填(替代原 :content.sync)
function onTTSContentUpdate(val) {
sendMessage.value = val
}
// 暴露给父组件通过 ref 调用(如 footer-bar.vue 的 offEmoticonsPictures)
defineExpose({
offEmoticonsPic,
})
// —— watch(原 sendMessage 侦听器)——
watch(sendMessage, (newValue, oldValue) => {
oldMessage.value = oldValue
const elInput = sendMessageArea.value
getHeight(elInput)
sendFlag.value = newValue ? true : false
addFlag.value = true
associationalWord.value = newValue ? true : false
// 联想词 人工时不调用联想词
if (elInput && elInput.value && manualService.value != 2) {
if (duolunFloat.value) {
getAssociationalWord()
} else if (chatList.value[chatList.value.length - 1]?.cmd == 'pbend') {
// 防止用户点击的时候, 状态没有更新
duolunFloat.value = true
getAssociationalWord()
} else {
associationalWord.value = false
}
}
changeMaxLength()
})
</script>
<style scoped>
.footer-bar-input {
position: relative;
}
.footer-overflow {
overflow: hidden;
}
.associational-word-box {
width: 100%;
height: auto;
position: absolute;
top: 1rem;
left: 0;
z-index: 10;
-ms-transform: translate(0, -100%);
-webkit-transform: translate(0, -100%);
transform: translate(0, -100%);
background: #ffffff;
box-shadow: 0 -3rem 4rem 0 #eef2f8;
border-radius: 18rem 18rem 0 0;
overflow: hidden;
}
.input-box {
padding: 9.5rem 10rem 9.5rem 15rem;
min-height: 54rem;
-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 {
width: 100%;
height: auto;
min-height: 10rem;
line-height: 10rem;
border-radius: 30rem;
padding: 7.5rem 20rem 7.5rem 15rem;
vertical-align: middle;
margin-right: 5rem;
-webkit-box-sizing: content-box;
box-sizing: content-box;
user-select: text;
-webkit-user-select: text;
-webkit-box-flex: 1;
-ms-flex: 1;
flex: 1;
position: relative;
overflow: hidden;
display: flex;
align-items: center;
background: linear-gradient(111deg, #dcfcff 0%, #ffffffbf 12%, #ffffff 38%);
box-sizing: border-box;
/* border: 1.2px solid; */
border-image: linear-gradient(99deg, #ffffff 4%, #ffffff 88%) 1.2;
backdrop-filter: blur(14px);
box-shadow: 0px 4px 10px 0px rgba(181, 189, 216, 0.3);
z-index: 0;
}
.input-text-tips {
position: absolute;
bottom: 7.5rem;
right: 5rem;
font-size: 9rem;
color: #999;
line-height: 20rem;
}
.input-box-middle {
display: table-cell;
min-height: 20rem;
line-height: 20rem;
vertical-align: middle;
height: 100%;
margin: 7.5rem auto;
}
.input-txt {
box-sizing: border-box;
width: 100%;
/* height: 20rem; */
max-height: 80rem;
line-height: 20rem;
border: 0;
background: transparent;
border-radius: 2rem;
font-family: SourceHanSansCN-Normal;
font-size: 14rem;
color: #333;
letter-spacing: 0;
text-align: justify;
vertical-align: middle;
caret-color: #1988fe;
border: none;
overflow: hidden;
overflow-y: auto;
word-break: break-all;
-webkit-appearance: none;
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
-webkit-overflow-scrolling: touch;
}
textarea:-moz-placeholder,
textarea:-webkit-input-placeholder,
textarea:-ms-input-placeholder {
opacity: 0.5;
font-family: SourceHanSansCN-Normal;
font-size: 14rem;
color: #999999;
letter-spacing: 0;
text-align: justify;
}
/* .input-txt::selection{
background-color: transparent;
} */
.input-btn-box {
width: 30rem;
height: 30rem;
padding: 2.5rem 5rem 0 5rem;
vertical-align: middle;
}
.input-btn-box .btn-box1 {
-ms-flex-negative: 0;
flex-shrink: 0;
-webkit-box-flex: 0;
-ms-flex-positive: 0;
flex-grow: 0;
}
.input-btn-box .btn-box2 {
-ms-flex-negative: 1;
flex-shrink: 1;
-webkit-box-flex: 1;
-ms-flex-positive: 1;
flex-grow: 1;
}
.btn-item {
display: block;
width: 30rem;
height: 30rem;
margin: 0 auto;
transition: transform 0.5s;
-moz-transition: -moz-transform 0.5s;
-webkit-transition: -webkit-transform 0.5s;
-o-transition: -o-transform 0.5s;
}
.btn-item:disabled {
opacity: 0.5;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.smile-box {
background: url('data:image/png;base64,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') no-repeat center;
background-size: 100% auto;
}
.keyboard-box {
background: url('data:image/png;base64,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') no-repeat center;
background-size: 100% auto;
}
.send-box {
background: url('../assets/images/send-button.png') no-repeat center;
background-size: 100% auto;
border: 0;
}
.close-box {
background: url('data:image/png;base64,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') no-repeat center;
background-size: 100% auto;
transform: rotate(135deg);
-webkit-transform: rotate(135deg);
-moz-transform: rotate(135deg);
-o-transform: rotate(135deg);
border: 0;
}
.add-box {
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAAAXNSR0IArs4c6QAAB6lJREFUaAXlm1uIVVUYx7+1Z0YpUSHJtJcoiCHyIVBQQaYzL1KRBVGCl7nomAomQZZvBumbJhEmNOJ4mdERLIIySnpxGoRBUhBSYgq0XrqMGKiYOOOc1f+/zvr27HOZOfucOWc858yGmbX22mut7//b67LX3us7Rsp0bD5jH707JCvEyGJJSiPMNFojC4zIbIs/mkX8DuJ3jJW/cTooAf6sXJo1X84fWmX+Y55SH7BZuqOl285PjshaiH4DcEsRziiqdiPDuAkXcEe+Chqkt6fVDBVVT45CJQFee9g2GSMfWCsvwUZ9DjuTSXqAus+i7n29m0z/ZCpi2UkBr+2yzahjN1pyRZYQI2hkuYL0Pgi+CkuDpk7+QMvdfuYRucP81+6hexuZY0flKdTRCKjnkZxAN1+E82xtRs4Hgew6scH0sXwxR3alMWpZ32MX2mHZD4Fr0rIDEuf9gOqeEciZoxvNjbTrMU82HLGPDydlFW5GK4o0ZcLjBp4yM2THiRbzV8wqw2wFA6/rsi8D9BRqmBupxQLydEOd7Dq2wfwWppcg0n7UPjsyKnsAvzoD/BbA15zsMN8XYqYgYMDugNG9aMZAjcDoOZzs7OkwFzWtHGFLl12SFNi20qz1Q3wSHX8noPdrWr4wFvD27+zMf/+UToC2aYUoeB3GthV6h7V8sSF7GG76QWh5WuuAluOPPSlbDrxi7mvaeGFeYI6n+1a+hpHlWgkK9dU1yJvdbeampk1l2HrczhsdkS8BnQjtGhmYaeT1fPNG2DXDgpEIWzYHbOesF2Tlw4KlPNqmBtz4zlAuGoRaqTlMyxGZ8JnJbowyqZY1MgoD76ILH8xRz5QnHVpiRmB0K7r4z2jpT9ED69gLveb28QSN28KcoFBRmxasJFjVxJANQG2aRs1uctWEjBB5sw8/MXyLwu6GIFPnyU1ma3bOyklZd9h+Dr1bqAh6OXu/mmtCzWpht6jAczYC24fxsr1y0HIroUaA9vEqtXOtQJbM3FnAXEEhk1tUoILrnI39eMksW/R5yxH7InrRP2iVgY1ddnbRFUUKUiO1UrNPnutZIrkiCwimrj9qE2nLRTxnyzEbj1p5G3bmoyWWDcvYQiJNWREnTis0a1GykEnPGaa1cDIpe/QiV1C5xoBen1QYeW1MWpnwMVKoHWqmdi0XZWJaCMxuhs6feuvBSwAu7NRC1RY67akXGQ7oFY7NQ4TAuNPvKxhfBMq9NlZb5QipnQxad5TNAfNLBfo7X945p1u+9Wjmag0dg29lspGRLA7YfZYZ+1LRX+pXvIdx0zxDv7dd7xn9GMY3KBWFrtCt8WoP01g8Y8Cvi3i5Xurg0AX4paLaQVW/Y9FuDUayBu5Tqn9M4KF9Jd/rlVZWDSFZyOS0gpGsASapxRHxfZF4rUTHmMAa+I/kDg4P7Ku1QqkcaUzYEOAs3agX0dqDYbxWIulMjQEmrAXKhq8Bv2u8VkJ+C1cWstZjUHOvxx3JIPWBXDPkC7lk44sAlm8FbanA5nK1ifh72Ll4K5+t6HV00yFsweyOswWDR9NtLUvWehgOX890R0Az5AuxZDsNWLeCyZc3el1hmYb4MgT8i31g5SRYSPB4J18hMv2ayktbs91KK1+hca9buTbutTJfQGsVZZtdmluW86iPez0IbsbVis+iK/k+W+grHruxb1ku9T7BB/aBuDaZry6QoZ6N5sc4ZTyTy0pWdmlubDlgDOo5iMcGPtJhWPYbV1sB//yYdd2YsNgV/KKA4gVl9UyuDFkDDGpuRqcSuItXY4fbmfRMZOUYHnv2Ysuyxng5K0aZBgMMohAYsx/3Z2vqSGMCa4A7cClCmIjEayU6xgTWgA4kWFJisnXPxEXcPKsVUrJgolrkeMBI1oDeMhjMF1wi3Ay4814rwNhcew09GE8jfLkCI1lTCw94yygkpvFWjddA2BIyeEYHTNcgXHjgLzbRzSDMWKURz9Dk5T/wjKlvWlyEY0F+1l1EF6BPRZVyhrIdg3ZnsOmLRqpLIxum732aG916NX0q9LzaQmong+qOsoXAzukLflAuE+4Mlnx7tUC1hU67b11MWeejDm0hsIf6UOFwV5rdPrEmlDDE8Lmh1fFFQOOlCKmZ2rUuOrJpnGEacG+HOQcxp8IM8JahA0l4XqIIJpCPYOdgYGRH3LeeOKadVmjWvGTJ9NpzzyjNwJCbyMn78guiukfMDfGVpd4jjtosRXzzRdtw97L8gIVGwtd3K5gpz2V666W1MDMyA+7MGtwJDAW3+kqgogOMV/JBjQpL7WTIhKX+LGAmun1heLgxzgMVbcHY2JY6q7z/1EaNobKUd15Ol8SsLh0WQgQuCcdQUZtLqzC3JdXpYVNuS0gE0HE44LTr9cwwZwtrJrrzoYYBdw4/KMx+n9FbhuNF8zyskBqc5w40oQvWOR3Q6jRPIGrCFma5aeV6SGBuSM1bKM3sKjzngW6egK/jT3zmpVKm7j9t0jY1qFVqo8Y4G4F5W1grZQhj08N9OAN6+jiIK/i0+gmAQjOk05fzg1J3p+hF7LxjvNTGjzyiXIxzU42uQXhsle1nPFh3f1yKdXdBk1YmaOb5pl77xL17+KVLrf9QKxOc55X6U7z/Ae05Lc3kBh2gAAAAAElFTkSuQmCC') no-repeat center;
background-size: 100% auto;
border: 0;
}
.smile-emoticon-box {
min-height: 0;
height: 0;
background-color: #efefef;
overflow: hidden;
}
.smile-emoticon-box.min_heightauto {
min-height: 245rem;
}
.upload-image {
min-height: 0;
height: 0;
background-color: #fff;
position: relative;
overflow: hidden;
}
.upload-image.min_heightauto {
min-height: 123rem;
}
.draw-enter-active,
.draw-leave-active {
transition: all 0.4s ease;
}
.draw-enter,
.draw-leave-to {
height: 0;
}
.word-cells {
background-color: #ffffff;
line-height: 23rem;
font-size: 15rem;
overflow: hidden;
position: relative;
}
.word-cell_access {
-webkit-tap-highlight-color: rgba(255, 255, 255, 0.3);
color: inherit;
}
.word-cell {
padding: 0 15rem 0 18rem;
position: relative;
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
}
.word-cell:before {
content: ' ';
position: absolute;
left: 0;
top: 0;
right: 0;
height: 1rem;
border-top: 1rem solid rgba(0, 0, 0, 0.1);
color: rgba(0, 0, 0, 0.1);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
left: 16rem;
z-index: 2;
}
.word-cell:first-child::before {
border: 0;
}
.word-cell_example:before {
left: 18rem;
}
.word-cell_access .word-cell__ft {
padding-right: 15rem;
position: relative;
}
.word-cell__bd {
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
}
.word-cell__bd p {
height: 47rem;
text-align: left;
font-family: SourceHanSansCN-Regular;
font-size: 15rem;
color: #717985;
line-height: 47rem;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.word-cell_primary {
-webkit-box-align: start;
-webkit-align-items: flex-start;
align-items: flex-start;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.word-cell__ft {
text-align: right;
color: rgba(0, 0, 0, 0.5);
}
.word-cell_access .word-cell__ft:after {
content: ' ';
width: 12rem;
height: 24rem;
mask-position: 0 0;
mask-repeat: no-repeat;
mask-size: 100%;
background-color: currentColor;
color: rgba(0, 0, 0, 0.3);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
position: absolute;
top: 50%;
right: 0;
margin-top: -12rem;
}
.elder-wrapper .associational-word-box {
box-shadow: 0 -4rem 16rem 0 rgba(25, 28, 104, 0.1);
}
.elder-wrapper .associational-word-box .word-cell__bd p {
font-family: PingFangSC-Regular;
font-size: 20rem;
color: #2c3562;
letter-spacing: 0;
}
.elder-wrapper .input-txt {
font-family: PingFangSC-Medium;
font-size: 16rem;
color: #2c3562;
letter-spacing: 0;
height: 26rem;
max-height: 104rem;
line-height: 26rem;
}
.elder-wrapper .input-box {
align-items: center;
}
.elder-wrapper .input-box .btn-item {
width: 36rem;
height: 36rem;
}
.elder-wrapper .input-btn-box {
width: 36rem;
height: 40rem;
padding: 2.5rem 5rem 0 5rem;
vertical-align: middle;
}
.elder-wrapper .input-box .smile-box {
background: url(data:image/png;base64,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) no-repeat;
background-size: 100%;
}
.elder-wrapper .input-box .send-box {
background: url(data:image/png;base64,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) no-repeat;
background-size: 100%;
}
.elder-wrapper textarea:-moz-placeholder {
font-family: PingFangSC-Medium;
font-size: 20rem;
color: #bfc3d1;
}
.elder-wrapper textarea:-webkit-input-placeholder {
font-family: PingFangSC-Medium;
font-size: 20rem;
color: #bfc3d1;
}
.elder-wrapper textarea:-ms-input-placeholder {
font-family: PingFangSC-Medium;
font-size: 20rem;
color: #bfc3d1;
}
.elder-wrapper .keyboard-box {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGwAAABsCAMAAAC4uKf/AAAAflBMVEUAAAAsNWMtNmNTU304PGksNWIsNWMuOGQuN2Q3RGwtNWIsNWIsNmMsNWMsNmIsNWMsNWMtNmIuNmMuNmMvN2QuN2MwN2QtNWMzPGYsNmItNmMsNmMsNmMsNWMuNmQtN2MtNmMsNWMsN2MuOGMvNmUuNWQwNWUzQGZVVaosNWKh0xYfAAAAKXRSTlMA54gGDfuhMVUJ9d/avrqnlJBpXkE5Jc0c0Mfy7bKAfndtYk1MRzAUA416VbMAAAMeSURBVGje7JbZeqowFIV3mIKVQYYi2lpna97/Bc/3dUdTDQkZOL3yvwogLLOz9gAvXrx48UfMLuk22eTLLFvmm2SbXmbwf4hO1YpJrKpTNLlSU8RMQVw0U+q9J29My1vyDtPQ5syAvJ1iV2tmyNp3d98Je2BeVPWxpV1H22NdFXP2QPINHhw+mYAkTQ9P9E1CmODz4G7B8pcFyvMVBrmey1/2KR2NSTOxqZ32G9FObC+j4EAa36X2s9HSsr/LxSlYU9+04kVkFPPF/YUaLPlinCU1DvuScb4ctRYhGBMunNRqhnxYxj/9YEht7w1CrR1MbF1Cuda8A2u6OVejhrmcca0eHOi5WmaW3SWPYQdOdDySpVE95N6g4AjlLjkY1Hlee1NwJuVVebwHJDy/wAOeb8lor+R1IwQPQl5LxrrpWmtcy+RZg5ZWCqJXIFvQkaPrI/AkQv/nBie2B2/24tT0ViQz8GZGxgwZ4TCxgwnY4eiiPpBm6AdhQNgjJAjxvryW/ngDKoqhohYwmQDvy2upxBbKKGJ2nOEBwmQIvy+vBWfMWFUcT/jCdRqxK948wTCVMJBvGIW1KxhmJY7U1yDCbitFauCnepiIHr83nLQXHAZgMnBAuGh6XgGTUWi68HbwQMV5aNZ4ietnw23VhVEeLwMzBwa3taDWlMfNz7MjPEHMcovc1oLjz/ONppe1jmJ4IXViVU/DwYFah1EpRnGcgSFwEO6sDaIU63A01orZ4iAmwmiLQxiFQWyxN4iwvsOZiWKtt75/UuOao09quVy55BlhHH25kguxj1j8r10rOQEYhmH00UdHSDbo/gv2U+qHKUotU2SwFggkJtYFPmK3YphrnGDF+OUZHpB9Hnh5elrAw2gBJDw8jPBAKsfDqBwgqf7NMIx1YZKK6TcGpt9YWGznOjYvLKBk4g8zyYTFIH2NJgaxzGUHxGSuioBPtyZ0TJckO2ncL6ZklKVagFrmZp5tq2dIJ1ntiiFCRjyiGvzEIq3xnKUc1jExpHrAGo2OK4Tigbi/TpHhS0WjXvlkpVZTtzD0XoVqNBqNf3ABXVBf3qwAlzEAAAAASUVORK5CYII=) no-repeat;
background-size: 100%;
}
.elder-wrapper .add-box {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGwAAABsCAMAAAC4uKf/AAAAgVBMVEUAAAAtNWMsNmI4PGksNWIsNWMtNmMtNmMuNmQvN2MvN2Q7RWwtNWIsNWIsNmMtNmMtNmMuNmMtNmMvN2QtN2UwN2QtNWMsNmIsNWMtNWIsNmMtNmMtNmMsNmIsNWMsNWMtNmMtNmMtN2ItNmMsN2MvOGQuO2IzPGYzQGYzPWYsNWJmp6vtAAAAKnRSTlMA8OkN+KKTa0s6MAj1wL2ef15UQTIlzdDh3dvZx7iyqKWOgndiVyceFBl1hbf5AAACwUlEQVRo3uzX23KqMBQG4B/COQVEQFvPZ23e/wH3DFlTqRuTAGl743cpzvwkWQsWeHl5efklPDlP/E06Wy5n6cafnBOOn8Gi/Vz8Z76PmPWkIvPEE15W2MyL/Teh9ObHsKPMhIGstLGqlTC0Gru6Wy6+eV8HYVRWdV2VURis38U3+Q0jnBxx5/rFFQ+uhe+KO+eEodi2VQK7CE9Eu1b5bBkGSRb3RR0ZFNjxvrxFggGm3ldUyKHBw684b4reQkG8gMEACzxBQvQ0EWSWGG/7TJDJwKyAwxgPFGn6PXSmPc/Z6b+TUyG5FXqqXCEZ32VCR/1Ro7f6g8rK8KjZgrI+McAnpS0YTGxpD2sMUtNObmHgRLVRYaCKquQErZujPeHLIc8PF219OTfo5NRfijec11SA4u1F/ZZDI6bnhqKXU9FIFd1Nz5IYait94bpUQPrmWUGpVG0icehIAO1GllDJ5E2zsWFMLj8zOLEQY8MQ6k/Nlwvj48O4XJqvWLwcJo4YH4ajHF0YninoDzbC6MYLTXnsYCMMO3WJMNkdkZ2wSHYsU152YScMrvLW91RAdsKotPfoNqcjtRNG5TZHJy4aV1thV9Hg6JLI7xTYCoP8xknQ5dxcW9sLWzf/OysG08BeWCAHVkX1hPbCQkV1b7r6Ik5d54EgzgM3jbv6dqN43Zdou3iiB++CtlIxPsjBoULbQfRyQFslxxl0WTbX6o5Zy1iOtrr5bfn3Yf/aNZcbgEEYho7B/pv2UnFDgmCTFylZoFL52X52/cb8DeLa+vmH2nVd5V/Ericm//E0yQKC4PFIOYJItchvhrFwWCaGGTTYXIqBl0cTnNBFFCeNf8VIQZk0AmSFm7rYlhdIi6J2IkRQ4BEq+IkhrTG/RYZ1NxiSDlij6LgCFA/g/jpFhpOKRr3yyU6tpm5haF2F6unp6XkzHxu1R0ZZuA0PAAAAAElFTkSuQmCC) no-repeat;
background-size: 100%;
}
.elder-wrapper .close-box {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGwAAABsCAMAAAC4uKf/AAAAgVBMVEUAAAAtNWMsNmI4PGksNWIsNWMtNmMtNmMuNmQvN2MvN2Q7RWwtNWIsNWIsNmMtNmMtNmMuNmMtNmMvN2QtN2UwN2QtNWMsNmIsNWMtNWIsNmMtNmMtNmMsNmIsNWMsNWMtNmMtNmMtN2ItNmMsN2MvOGQuO2IzPGYzQGYzPWYsNWJmp6vtAAAAKnRSTlMA8OkN+KKTa0s6MAj1wL2ef15UQTIlzdDh3dvZx7iyqKWOgndiVyceFBl1hbf5AAACwUlEQVRo3uzX23KqMBQG4B/COQVEQFvPZ23e/wH3DFlTqRuTAGl743cpzvwkWQsWeHl5efklPDlP/E06Wy5n6cafnBOOn8Gi/Vz8Z76PmPWkIvPEE15W2MyL/Teh9ObHsKPMhIGstLGqlTC0Gru6Wy6+eV8HYVRWdV2VURis38U3+Q0jnBxx5/rFFQ+uhe+KO+eEodi2VQK7CE9Eu1b5bBkGSRb3RR0ZFNjxvrxFggGm3ldUyKHBw684b4reQkG8gMEACzxBQvQ0EWSWGG/7TJDJwKyAwxgPFGn6PXSmPc/Z6b+TUyG5FXqqXCEZ32VCR/1Ro7f6g8rK8KjZgrI+McAnpS0YTGxpD2sMUtNObmHgRLVRYaCKquQErZujPeHLIc8PF219OTfo5NRfijec11SA4u1F/ZZDI6bnhqKXU9FIFd1Nz5IYait94bpUQPrmWUGpVG0icehIAO1GllDJ5E2zsWFMLj8zOLEQY8MQ6k/Nlwvj48O4XJqvWLwcJo4YH4ajHF0YninoDzbC6MYLTXnsYCMMO3WJMNkdkZ2wSHYsU152YScMrvLW91RAdsKotPfoNqcjtRNG5TZHJy4aV1thV9Hg6JLI7xTYCoP8xknQ5dxcW9sLWzf/OysG08BeWCAHVkX1hPbCQkV1b7r6Ik5d54EgzgM3jbv6dqN43Zdou3iiB++CtlIxPsjBoULbQfRyQFslxxl0WTbX6o5Zy1iOtrr5bfn3Yf/aNZcbgEEYho7B/pv2UnFDgmCTFylZoFL52X52/cb8DeLa+vmH2nVd5V/Ericm//E0yQKC4PFIOYJItchvhrFwWCaGGTTYXIqBl0cTnNBFFCeNf8VIQZk0AmSFm7rYlhdIi6J2IkRQ4BEq+IkhrTG/RYZ1NxiSDlij6LgCFA/g/jpFhpOKRr3yyU6tpm5haF2F6unp6XkzHxu1R0ZZuA0PAAAAAElFTkSuQmCC) no-repeat;
background-size: 100%;
}
.elder-wrapper .input-box-txt {
min-height: 44rem;
line-height: 44rem;
background: #eef0f6;
border-radius: 22rem;
padding: 0 35rem 0 18rem;
}
.elder-wrapper .input-box-txt .input-txt {}
.elder-wrapper .input-box-txt .input-text-tips {
bottom: 12rem;
right: 16rem;
font-family: PingFangSC-Regular;
font-size: 14rem;
color: #d0d2db;
}
.quote-preview-box {
line-height: normal;
background-color: #f7f8fa;
padding: 8rem 16rem;
height: 28rem;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 13rem;
color: #666;
border-top: 1rem solid #eee;
border-bottom: 1rem solid #eee;
}
.quote-text {
flex: 1;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.quote-close-icon {
padding-left: 10rem;
cursor: pointer;
display: flex;
align-items: center;
}
</style>