|
@@ -1,73 +1,77 @@
|
|
<template>
|
|
<template>
|
|
- <view class="tabPage" :style="{'min-height':h+'px', 'padding-top':mt+'px'}">
|
|
|
|
- <u-navbar title="创衡正念企业教练" bgColor="#FFFFFF" :titleStyle="{'font-size':'32rpx','font-weight':'bold'}">
|
|
|
|
|
|
+ <view class="page" :style="{'min-height':h+'px', 'padding-top':mt+'px'}">
|
|
|
|
+ <u-navbar title="创衡正念企业教练" bgColor="transparent" :titleStyle="{'font-size':'32rpx','font-weight':'bold'}">
|
|
<view class="u-nav-slot" slot="left" style="display: flex;background-color: transparent;">
|
|
<view class="u-nav-slot" slot="left" style="display: flex;background-color: transparent;">
|
|
- <image src="@/static/history_dialog.png" style="width: 42rpx;height: 42rpx;" @tap="reviewHistory"></image>
|
|
|
|
- <image src="@/static/new_dialog.png" style="width: 42rpx;height: 42rpx;margin-left: 40rpx;" @tap="startNewDialog"></image>
|
|
|
|
|
|
+ <image src="https://transcend.ringzle.com/xiaozhi-app/profile/2025/06/16/ef50e3e8-d0f9-41dd-a4ec-546b157a1de9.png" style="width: 45rpx;height: 45rpx;" @tap="toBack"></image>
|
|
|
|
+ <image src="https://transcend.ringzle.com/xiaozhi-app/profile/2025/06/16/e536bf8e-3b33-4ea8-b60b-7154c6353bec.png" style="width: 42rpx;height: 42rpx;margin-left: 40rpx;" @tap="startNewDialog"></image>
|
|
</view>
|
|
</view>
|
|
</u-navbar>
|
|
</u-navbar>
|
|
- <div class="dialogs container" ref="messageContainer">
|
|
|
|
- <div class="d_answer init">
|
|
|
|
- <div class="da_top adfac">
|
|
|
|
- <image src="@/static/logo.png"></image>
|
|
|
|
- <text>创衡正念企业教练</text>
|
|
|
|
- </div>
|
|
|
|
- <div class="da_content">
|
|
|
|
- Hi,我是企业教练,很高兴遇见你!我随时可以回答您的问题!
|
|
|
|
- </div>
|
|
|
|
|
|
+ <template v-if="dialogList.length===0">
|
|
|
|
+ <div class="welcome">
|
|
|
|
+ <image src="https://transcend.ringzle.com/xiaozhi-app/profile/2025/06/16/5292af4c-977b-4620-a4e4-4aadcd5ad092.png"></image>
|
|
|
|
+ <p>Hi,我是你的AI团队教练助手~</p>
|
|
|
|
+ <p class="tip">任何关于团队、分析报告、教练的问题,你都可以向我提问。我正在快速学习和进化中,有新功能时,我一定第一时间告诉你~ </p>
|
|
</div>
|
|
</div>
|
|
- <div v-for="(item,index) in dialogList" :key="index">
|
|
|
|
- <div class="d_question">
|
|
|
|
- <div class="dq_text">{{ item.question }}</div>
|
|
|
|
- </div>
|
|
|
|
- <div class="d_answer">
|
|
|
|
|
|
+ </template>
|
|
|
|
+ <template v-else>
|
|
|
|
+ <div class="dialogs container" ref="messageContainer">
|
|
|
|
+ <div class="d_answer init">
|
|
<div class="da_top adfac">
|
|
<div class="da_top adfac">
|
|
<image src="@/static/logo.png"></image>
|
|
<image src="@/static/logo.png"></image>
|
|
<text>创衡正念企业教练</text>
|
|
<text>创衡正念企业教练</text>
|
|
</div>
|
|
</div>
|
|
- <div class="da_content">
|
|
|
|
- <u-parse :content="item.answer"></u-parse>
|
|
|
|
- <div class="dc_btns adfacjb" v-if="item.answer">
|
|
|
|
- <div class="db_l">
|
|
|
|
- <image :src="item.copy?require('@/static/copy_active.png'):require('@/static/copy.png')" @tap="toCopy(item,index)"></image>
|
|
|
|
- <image :src="item.upvote?require('@/static/upvote_active.png'):require('@/static/upvote.png')" @tap="toUpvote(item,index)"></image>
|
|
|
|
- <image :src="item.comment?require('@/static/comment_active.png'):require('@/static/comment.png')" @tap="toComment(item,index)"></image>
|
|
|
|
- </div>
|
|
|
|
- <div class="db_r">
|
|
|
|
- <image :src="item.share?require('@/static/share_active.png'):require('@/static/share.png')" @tap="toShare(item,index)"></image>
|
|
|
|
|
|
+ <div class="da_content">Hi,任何关于团队、分析报告、教练的问题,你都可以向我提问~</div>
|
|
|
|
+ </div>
|
|
|
|
+ <div v-for="(item,index) in dialogList" :key="index">
|
|
|
|
+ <div class="d_question">
|
|
|
|
+ <div class="dq_text">{{ item.question }}</div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="d_answer">
|
|
|
|
+ <div class="da_top adfac">
|
|
|
|
+ <image src="@/static/logo.png"></image>
|
|
|
|
+ <text>创衡正念企业教练</text>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="da_content">
|
|
|
|
+ <u-parse :content="item.answer"></u-parse>
|
|
|
|
+ <div class="dc_btns adfacjb" v-if="item.answer">
|
|
|
|
+ <div class="db_l">
|
|
|
|
+ <image :src="item.copy?require('@/static/copy_active.png'):require('@/static/copy.png')" @tap="toCopy(item,index)"></image>
|
|
|
|
+ <image :src="item.upvote?require('@/static/upvote_active.png'):require('@/static/upvote.png')" @tap="toUpvote(item,index)"></image>
|
|
|
|
+ <image :src="item.comment?require('@/static/comment_active.png'):require('@/static/comment.png')" @tap="toComment(item,index)"></image>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="db_r">
|
|
|
|
+ <image :src="item.share?require('@/static/share_active.png'):require('@/static/share.png')" @tap="toShare(item,index)"></image>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- </div>
|
|
|
|
- <div class="ask adfacjb">
|
|
|
|
- <div class="a_l">
|
|
|
|
- <input type="text" v-model="question" placeholder="请输入您的问题" @confirm="sendQuestion" ref="questionInp">
|
|
|
|
|
|
+ </template>
|
|
|
|
+ <div class="ask">
|
|
|
|
+ <div class="a_inp">
|
|
|
|
+ <u-textarea v-model="question" placeholder="请输入您的问题" autoHeight @confirm="sendQuestion"></u-textarea>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="a_btn adfacjb">
|
|
|
|
+ <div class="ab_l adfac">
|
|
|
|
+ <div class="al_pre adfacjc">
|
|
|
|
+ <image src="https://transcend.ringzle.com/xiaozhi-app/profile/2025/06/16/451ac13c-5fdc-4d15-8f35-9f4d238e87c1.png"></image>
|
|
|
|
+ <text>创衡增强</text>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="al_pre adfacjc">
|
|
|
|
+ <image src="https://transcend.ringzle.com/xiaozhi-app/profile/2025/06/16/d4668dcc-1d28-47ff-8bae-84dc6475794b.png"></image>
|
|
|
|
+ <text>联网搜索</text>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="ab_r">
|
|
|
|
+ <image src="https://transcend.ringzle.com/xiaozhi-app/profile/2025/06/16/caf6075c-0967-4c99-a269-ea453537075c.png"></image>
|
|
|
|
+ <image @tap="sendQuestion" src="https://transcend.ringzle.com/xiaozhi-app/profile/2025/06/16/2429556b-54b7-4878-97c0-6b440b546ee4.png"></image>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
- <image class="a_r" src="@/static/send.png" @tap="sendQuestion"></image>
|
|
|
|
</div>
|
|
</div>
|
|
<u-modal :show="commentShow" title="评论" @confirm="commentConfirm" @cancel="commentCancel" @close="commentCancel" :showCancelButton="true">
|
|
<u-modal :show="commentShow" title="评论" @confirm="commentConfirm" @cancel="commentCancel" @close="commentCancel" :showCancelButton="true">
|
|
- <u-textarea v-model="content" placeholder="对于我们的回答您是否不满意,您有更好的答案建议吗?"></u-textarea>
|
|
|
|
|
|
+ <u-textarea v-model="content" placeholder="对于我们的回答您是否不满意,您有更好的答案建议吗?请在此输入."></u-textarea>
|
|
</u-modal>
|
|
</u-modal>
|
|
- <u-popup :show="historyShow" mode="left" @close="historyClose">
|
|
|
|
- <view class="history" :style="{'min-height':h+'px', 'padding-top':mt+'px'}">
|
|
|
|
- <u-navbar title="历史回答" bgColor="#FFFFFF" :titleStyle="{'font-size':'32rpx','font-weight':'bold'}" style="width: 672rpx;">
|
|
|
|
- <view class="u-nav-slot" slot="left" style="display: flex;background-color: transparent;">
|
|
|
|
- <image src="@/static/arrow_left_hei.png" style="width: 40rpx;height: 40rpx;" @tap="historyClose"></image>
|
|
|
|
- </view>
|
|
|
|
- </u-navbar>
|
|
|
|
- <div class="h_list">
|
|
|
|
- <div class="hl_item" v-for="(item,index) in historyList" :key="index">
|
|
|
|
- <div class="hi_date">{{item.date}}</div>
|
|
|
|
- <div class="hl_pre" v-for="(pre,idx) in item.list" :key="idx">
|
|
|
|
- {{pre.name}}
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
- </view>
|
|
|
|
- </u-popup>
|
|
|
|
- <Tabbar :tabbarIndex="0"></Tabbar>
|
|
|
|
</view>
|
|
</view>
|
|
</template>
|
|
</template>
|
|
|
|
|
|
@@ -75,12 +79,11 @@
|
|
var timer = null;
|
|
var timer = null;
|
|
let requestTask = null;
|
|
let requestTask = null;
|
|
import { BaseApi } from '../http/baseApi.js'
|
|
import { BaseApi } from '../http/baseApi.js'
|
|
- import Tabbar from '@/components/CusTabbar/index.vue'
|
|
|
|
import * as TextEncoding from "text-encoding-shim";
|
|
import * as TextEncoding from "text-encoding-shim";
|
|
export default {
|
|
export default {
|
|
- components:{ Tabbar },
|
|
|
|
data(){
|
|
data(){
|
|
return {
|
|
return {
|
|
|
|
+ isDialog:false,
|
|
retryCount: 3, // 最大重试次数
|
|
retryCount: 3, // 最大重试次数
|
|
currentRetry: 0, // 当前重试次数
|
|
currentRetry: 0, // 当前重试次数
|
|
isRequesting: false, // 请求状态锁
|
|
isRequesting: false, // 请求状态锁
|
|
@@ -92,28 +95,13 @@
|
|
commentShow:false,
|
|
commentShow:false,
|
|
content:'',
|
|
content:'',
|
|
cindex:'',
|
|
cindex:'',
|
|
- historyShow:false,
|
|
|
|
- historyList:[
|
|
|
|
- {
|
|
|
|
- date:'今天',
|
|
|
|
- list:[
|
|
|
|
- {name:'教练的标准是什么'},
|
|
|
|
- {name:'教练的标准是什么?'},
|
|
|
|
- ]
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- date:'2025-05-12',
|
|
|
|
- list:[
|
|
|
|
- {name:'小众水果网名创意分享'},
|
|
|
|
- {name:'教练的标准是什么?'},
|
|
|
|
- ]
|
|
|
|
- },
|
|
|
|
- ]
|
|
|
|
}
|
|
}
|
|
},
|
|
},
|
|
methods:{
|
|
methods:{
|
|
- reviewHistory(){
|
|
|
|
- this.historyShow = true;
|
|
|
|
|
|
+ toBack(){
|
|
|
|
+ uni.reLaunch({
|
|
|
|
+ url:'/pages/home'
|
|
|
|
+ })
|
|
},
|
|
},
|
|
startNewDialog(){
|
|
startNewDialog(){
|
|
clearInterval(timer)
|
|
clearInterval(timer)
|
|
@@ -121,9 +109,6 @@
|
|
this.question = '';
|
|
this.question = '';
|
|
this.streamingResponse = '';
|
|
this.streamingResponse = '';
|
|
},
|
|
},
|
|
- historyClose(){
|
|
|
|
- this.historyShow = false;
|
|
|
|
- },
|
|
|
|
// 封装带重试机制的请求方法
|
|
// 封装带重试机制的请求方法
|
|
async sendRequestWithRetry() {
|
|
async sendRequestWithRetry() {
|
|
if (this.isRequesting) return;
|
|
if (this.isRequesting) return;
|
|
@@ -132,7 +117,6 @@
|
|
try {
|
|
try {
|
|
await this._executeRequest();
|
|
await this._executeRequest();
|
|
} catch (error) {
|
|
} catch (error) {
|
|
- console.error('最终请求失败:', error);
|
|
|
|
this.$showToast('请求失败,请稍后重试')
|
|
this.$showToast('请求失败,请稍后重试')
|
|
} finally {
|
|
} finally {
|
|
this.isRequesting = false;
|
|
this.isRequesting = false;
|
|
@@ -140,7 +124,7 @@
|
|
},
|
|
},
|
|
// 实际执行请求的方法
|
|
// 实际执行请求的方法
|
|
_executeRequest() {
|
|
_executeRequest() {
|
|
- return new Promise((resolve, reject) => {
|
|
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
requestTask = uni.request({
|
|
requestTask = uni.request({
|
|
url: `${BaseApi}/core/chat/streamingMessage`,
|
|
url: `${BaseApi}/core/chat/streamingMessage`,
|
|
method: 'POST',
|
|
method: 'POST',
|
|
@@ -172,56 +156,66 @@
|
|
});
|
|
});
|
|
|
|
|
|
requestTask.onChunkReceived(async (res) => {
|
|
requestTask.onChunkReceived(async (res) => {
|
|
- console.log('res',res)
|
|
|
|
const uint8Array = new Uint8Array(res.data);
|
|
const uint8Array = new Uint8Array(res.data);
|
|
- // const decoder = new TextDecoder("utf-8");
|
|
|
|
const decoder = new TextEncoding.TextDecoder("utf-8");
|
|
const decoder = new TextEncoding.TextDecoder("utf-8");
|
|
const decodedString = decoder.decode(uint8Array);
|
|
const decodedString = decoder.decode(uint8Array);
|
|
- let newtext = decodedString.replaceAll('data:','')
|
|
|
|
- newtext = newtext.replace(/\s+/g,'');
|
|
|
|
- if(newtext){
|
|
|
|
- let answer = this.dialogList[this.dialogList.length-1].answer+newtext;
|
|
|
|
- this.$set(this.dialogList[this.dialogList.length-1],'answer',answer);
|
|
|
|
- uni.pageScrollTo({ scrollTop: 99999, duration: 300});
|
|
|
|
|
|
+ try {
|
|
|
|
+ let newtext = decodedString.replaceAll('data:','')
|
|
|
|
+ let ntArr = newtext.split(/\s+/);
|
|
|
|
+ if(ntArr.length){
|
|
|
|
+ ntArr.forEach(n=>{
|
|
|
|
+ if(!n.trim()) return
|
|
|
|
+ let nj = JSON.parse(n);
|
|
|
|
+ if(nj.event=='agent_message'){
|
|
|
|
+ let answer = this.dialogList[this.dialogList.length-1].answer+nj.answer;
|
|
|
|
+ this.$set(this.dialogList[this.dialogList.length-1],'answer',answer);
|
|
|
|
+ this.$set(this.dialogList[this.dialogList.length-1],'id',nj.id);
|
|
|
|
+ this.$set(this.dialogList[this.dialogList.length-1],'task_id',nj.task_id);
|
|
|
|
+ this.$set(this.dialogList[this.dialogList.length-1],'message_id',nj.message_id);
|
|
|
|
+ this.$set(this.dialogList[this.dialogList.length-1],'conversation_id',nj.conversation_id);
|
|
|
|
+ uni.pageScrollTo({ scrollTop: 99999, duration: 300});
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ } catch (e) {
|
|
|
|
+ console.error('解析失败', e, '原始数据:', decodedString);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
- });
|
|
|
|
|
|
+ });
|
|
},
|
|
},
|
|
// 成功处理
|
|
// 成功处理
|
|
_handleSuccess(data) {
|
|
_handleSuccess(data) {
|
|
- if (data) {
|
|
|
|
- this.streamingResponse += data;
|
|
|
|
- console.log(this.streamingResponse,'streamingResponse');
|
|
|
|
- }
|
|
|
|
- this.currentRetry = 0; // 重置重试计数器
|
|
|
|
|
|
+ if (data) {
|
|
|
|
+ this.streamingResponse += data;
|
|
|
|
+ }
|
|
|
|
+ this.currentRetry = 0; // 重置重试计数器
|
|
},
|
|
},
|
|
// 错误处理
|
|
// 错误处理
|
|
_handleError(errorMsg, resolve, reject) {
|
|
_handleError(errorMsg, resolve, reject) {
|
|
- console.error(`请求失败 (${this.currentRetry}/${this.retryCount}):`, errorMsg);
|
|
|
|
- if (this._shouldRetry(errorMsg)) {
|
|
|
|
|
|
+ if (this._shouldRetry(errorMsg)) {
|
|
this.currentRetry++;
|
|
this.currentRetry++;
|
|
setTimeout(() => {
|
|
setTimeout(() => {
|
|
this._executeRequest().then(resolve).catch(reject);
|
|
this._executeRequest().then(resolve).catch(reject);
|
|
}, this._getRetryDelay());
|
|
}, this._getRetryDelay());
|
|
- } else {
|
|
|
|
|
|
+ } else {
|
|
reject(errorMsg);
|
|
reject(errorMsg);
|
|
- }
|
|
|
|
|
|
+ }
|
|
},
|
|
},
|
|
// 判断是否需要重试
|
|
// 判断是否需要重试
|
|
_shouldRetry(errorMsg) {
|
|
_shouldRetry(errorMsg) {
|
|
- const retryableErrors = [
|
|
|
|
|
|
+ const retryableErrors = [
|
|
'timeout',
|
|
'timeout',
|
|
'request:fail',
|
|
'request:fail',
|
|
'Network Error'
|
|
'Network Error'
|
|
- ];
|
|
|
|
- return this.currentRetry < this.retryCount && retryableErrors.some(e => errorMsg.includes(e));
|
|
|
|
|
|
+ ];
|
|
|
|
+ return this.currentRetry < this.retryCount && retryableErrors.some(e => errorMsg.includes(e));
|
|
},
|
|
},
|
|
// 获取指数退避延迟时间
|
|
// 获取指数退避延迟时间
|
|
_getRetryDelay() {
|
|
_getRetryDelay() {
|
|
- return Math.min(1000 * Math.pow(2, this.currentRetry), 10000);
|
|
|
|
|
|
+ return Math.min(1000 * Math.pow(2, this.currentRetry), 10000);
|
|
},
|
|
},
|
|
sendQuestion(){
|
|
sendQuestion(){
|
|
- if(!this.question) return this.$showToast('请输入问题');
|
|
|
|
|
|
+ if(!this.question) return this.$showToast('请输入您的问题');
|
|
let qa = {
|
|
let qa = {
|
|
question:JSON.parse(JSON.stringify(this.question)),
|
|
question:JSON.parse(JSON.stringify(this.question)),
|
|
answer:'',
|
|
answer:'',
|
|
@@ -238,7 +232,15 @@
|
|
})
|
|
})
|
|
},
|
|
},
|
|
toCopy(item,index){
|
|
toCopy(item,index){
|
|
- this.$set(this.dialogList[index],'copy',!this.dialogList[index].copy);
|
|
|
|
|
|
+ uni.setClipboardData({
|
|
|
|
+ data:item.answer,
|
|
|
|
+ success: (res) => {
|
|
|
|
+ this.$showToast('复制成功');
|
|
|
|
+ },
|
|
|
|
+ fail: (err) => {
|
|
|
|
+ this.$showToast('复制失败');
|
|
|
|
+ }
|
|
|
|
+ })
|
|
},
|
|
},
|
|
toUpvote(item,index){
|
|
toUpvote(item,index){
|
|
this.$set(this.dialogList[index],'upvote',!this.dialogList[index].upvote);
|
|
this.$set(this.dialogList[index],'upvote',!this.dialogList[index].upvote);
|
|
@@ -262,60 +264,50 @@
|
|
}
|
|
}
|
|
</script>
|
|
</script>
|
|
|
|
|
|
-<style>
|
|
|
|
- .history .u-navbar .u-status-bar,.history .u-navbar .u-navbar__content{
|
|
|
|
- width: 672rpx !important;
|
|
|
|
- }
|
|
|
|
-</style>
|
|
|
|
<style scoped lang="scss">
|
|
<style scoped lang="scss">
|
|
- .tabPage{
|
|
|
|
- position: relative;
|
|
|
|
- background: #F7F2F6;
|
|
|
|
- display: flex;
|
|
|
|
- flex-direction: column;
|
|
|
|
|
|
+ ::v-deep .u-textarea{
|
|
|
|
+ border: none !important;
|
|
|
|
+ padding: 0 !important;
|
|
|
|
+ }
|
|
|
|
+ ::v-deep .u-textarea textarea{
|
|
|
|
+ min-height: 96rpx !important;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .page{
|
|
|
|
+ background: linear-gradient( 227deg, #EEEFF8 0%, #F6ECF4 100%, #F6ECF4 100%);
|
|
|
|
+ padding: 0 30rpx 302rpx;
|
|
|
|
+ box-sizing: border-box;
|
|
|
|
|
|
- .history{
|
|
|
|
- width: 672rpx;
|
|
|
|
- height: 100vh;
|
|
|
|
- background: #FFFFFF;
|
|
|
|
- box-sizing: border-box;
|
|
|
|
- display: flex;
|
|
|
|
- flex-direction: column;
|
|
|
|
- .h_list{
|
|
|
|
- flex: 1;
|
|
|
|
- width: 100%;
|
|
|
|
- padding: 0 64rpx;
|
|
|
|
- box-sizing: border-box;
|
|
|
|
- margin-top: 20rpx;
|
|
|
|
- overflow-y: auto;
|
|
|
|
- .hl_item{
|
|
|
|
- margin-top: 64rpx;
|
|
|
|
- &:first-child{
|
|
|
|
- margin-top: 0;
|
|
|
|
- }
|
|
|
|
- .hi_date{
|
|
|
|
- font-family: PingFangSC, PingFang SC;
|
|
|
|
- font-weight: 400;
|
|
|
|
- font-size: 30rpx;
|
|
|
|
- color: #A4A4A4;
|
|
|
|
- line-height: 42rpx;
|
|
|
|
- }
|
|
|
|
- .hl_pre{
|
|
|
|
- font-family: PingFangSC, PingFang SC;
|
|
|
|
- font-weight: 400;
|
|
|
|
- font-size: 30rpx;
|
|
|
|
- color: #000000;
|
|
|
|
- line-height: 42rpx;
|
|
|
|
- margin-top: 48rpx;
|
|
|
|
- }
|
|
|
|
|
|
+ .welcome{
|
|
|
|
+ margin-top: 259rpx;
|
|
|
|
+ padding: 0 34rpx;
|
|
|
|
+ image{
|
|
|
|
+ width: 88rpx;
|
|
|
|
+ height: 87rpx;
|
|
|
|
+ margin-left: 20rpx;
|
|
|
|
+ }
|
|
|
|
+ p{
|
|
|
|
+ font-family: PingFang-SC, PingFang-SC;
|
|
|
|
+ font-weight: bold;
|
|
|
|
+ font-size: 36rpx;
|
|
|
|
+ color: #252525;
|
|
|
|
+ line-height: 36rpx;
|
|
|
|
+ margin-top: 36rpx;
|
|
|
|
+ &.tip{
|
|
|
|
+ font-family: PingFangSC, PingFang SC;
|
|
|
|
+ font-weight: 400;
|
|
|
|
+ font-size: 26rpx;
|
|
|
|
+ color: #646464;
|
|
|
|
+ line-height: 40rpx;
|
|
|
|
+ margin-top: 20rpx;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
.dialogs{
|
|
.dialogs{
|
|
width: 100%;
|
|
width: 100%;
|
|
- padding: 34rpx 36rpx 164rpx;
|
|
|
|
- flex: 1;
|
|
|
|
|
|
+ height: calc(100vh - 282rpx);
|
|
|
|
+ padding-top: 34rpx;
|
|
box-sizing: border-box;
|
|
box-sizing: border-box;
|
|
overflow-y: auto;
|
|
overflow-y: auto;
|
|
.d_answer{
|
|
.d_answer{
|
|
@@ -333,7 +325,7 @@
|
|
font-weight: bold;
|
|
font-weight: bold;
|
|
font-size: 30rpx;
|
|
font-size: 30rpx;
|
|
color: #505050;
|
|
color: #505050;
|
|
- line-height: 42rpx;
|
|
|
|
|
|
+ line-height: 48rpx;
|
|
margin-left: 20rpx;
|
|
margin-left: 20rpx;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -367,46 +359,62 @@
|
|
font-weight: 400;
|
|
font-weight: 400;
|
|
font-size: 30rpx;
|
|
font-size: 30rpx;
|
|
color: #FFFFFF;
|
|
color: #FFFFFF;
|
|
- line-height: 42rpx;
|
|
|
|
|
|
+ line-height: 48rpx;
|
|
text-align: right;
|
|
text-align: right;
|
|
padding: 26rpx 30rpx;
|
|
padding: 26rpx 30rpx;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
.ask{
|
|
.ask{
|
|
- width: 100%;
|
|
|
|
- height: 130rpx;
|
|
|
|
|
|
+ width: calc(100% - 60rpx);
|
|
|
|
+ height: 210rpx;
|
|
background: #FFFFFF;
|
|
background: #FFFFFF;
|
|
- padding: 21rpx 30rpx;
|
|
|
|
- box-sizing: border-box;
|
|
|
|
|
|
+ border-radius: 24rpx;
|
|
|
|
+ border: 2rpx solid #F0F2F8;
|
|
position: fixed;
|
|
position: fixed;
|
|
- left: 0;
|
|
|
|
- bottom: 172rpx;
|
|
|
|
- z-index: 2;
|
|
|
|
- .a_l{
|
|
|
|
- width: calc(100% - 102rpx);
|
|
|
|
- height: 88rpx;
|
|
|
|
- padding: 20rpx 30rpx;
|
|
|
|
- box-sizing: border-box;
|
|
|
|
- border-radius: 44rpx;
|
|
|
|
- border: 2rpx solid rgba(131,52,120,0.74);
|
|
|
|
- input{
|
|
|
|
- border: none;
|
|
|
|
- font-family: PingFangSC, PingFang SC;
|
|
|
|
- font-weight: 400;
|
|
|
|
- font-size: 28rpx;
|
|
|
|
- color: #252525;
|
|
|
|
- line-height: 48rpx;
|
|
|
|
- &::placeholder{
|
|
|
|
- color: #808080;
|
|
|
|
|
|
+ left: 30rpx;
|
|
|
|
+ bottom: 72rpx;
|
|
|
|
+ display: flex;
|
|
|
|
+ flex-direction: column;
|
|
|
|
+ padding: 24rpx;
|
|
|
|
+ box-sizing: border-box;
|
|
|
|
+ .a_inp{
|
|
|
|
+ flex: 1;
|
|
|
|
+ overflow-y: auto;
|
|
|
|
+ }
|
|
|
|
+ .a_btn{
|
|
|
|
+ padding-top: 20rpx;
|
|
|
|
+ height: 54rpx;
|
|
|
|
+ .ab_l{
|
|
|
|
+ .al_pre{
|
|
|
|
+ width: 162rpx;
|
|
|
|
+ height: 54rpx;
|
|
|
|
+ background: #FFFFFF;
|
|
|
|
+ border-radius: 27rpx;
|
|
|
|
+ border: 1rpx solid #E0E0E0;
|
|
|
|
+ margin-right: 24rpx;
|
|
|
|
+ image{
|
|
|
|
+ width: 24rpx;
|
|
|
|
+ height: 24rpx;
|
|
|
|
+ }
|
|
|
|
+ text{
|
|
|
|
+ font-family: PingFangSC, PingFang SC;
|
|
|
|
+ font-weight: 400;
|
|
|
|
+ font-size: 22rpx;
|
|
|
|
+ color: #393939;
|
|
|
|
+ line-height: 22rpx;
|
|
|
|
+ margin-left: 10rpx;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ .ab_r{
|
|
|
|
+ image{
|
|
|
|
+ width: 48rpx;
|
|
|
|
+ height: 48rpx;
|
|
|
|
+ margin-left: 30rpx;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- }
|
|
|
|
- .a_r{
|
|
|
|
- width: 72rpx;
|
|
|
|
- height: 72rpx;
|
|
|
|
- border-radius: 36rpx;
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|