作者 左学珍

消息滚到到最底部,长按复制,上次回答未结束,不允许输入消息

@@ -10,6 +10,10 @@ @@ -10,6 +10,10 @@
10 { 10 {
11 "launchtype" : "local" 11 "launchtype" : "local"
12 }, 12 },
  13 + "mp-weixin" :
  14 + {
  15 + "launchtype" : "local"
  16 + },
13 "type" : "uniCloud" 17 "type" : "uniCloud"
14 } 18 }
15 ] 19 ]
@@ -35,12 +35,11 @@ @@ -35,12 +35,11 @@
35 const res = await getLogin(code, uid) 35 const res = await getLogin(code, uid)
36 uni.setStorageSync('token', res.data.token) 36 uni.setStorageSync('token', res.data.token)
37 console.log('getLogin', res) 37 console.log('getLogin', res)
38 - // 保存数据  
39 } catch (err) { 38 } catch (err) {
40 uni.showToast({ title: err, icon: 'none' }) 39 uni.showToast({ title: err, icon: 'none' })
41 console.log('错误', err) 40 console.log('错误', err)
42 } 41 }
43 - }, 42 + }
44 }, 43 },
45 onShow: function() { 44 onShow: function() {
46 console.log('App Show') 45 console.log('App Show')
1 <template> 1 <template>
2 - <view class="bottomBar">  
3 - <view class="barBox">  
4 - <!-- 自定义底部按钮 -->  
5 - <slot>  
6 - <!-- 默认显示 -->  
7 - <view class="cancel" v-if="!isLastRecord" @click="leftClick">{{leftBtnText}}</view>  
8 - <view class="save" @click="rightClick">{{rightBtnText}}</view>  
9 - </slot> 2 + <view class="bottom-wrap">
  3 + <view class="bottomBar">
  4 + <view class="barBox">
  5 + <!-- 自定义底部按钮 -->
  6 + <slot>
  7 + <!-- 默认显示 -->
  8 + <view class="cancel" v-if="!isLastRecord" @click="leftClick">{{leftBtnText}}</view>
  9 + <view class="save" @click="rightClick">{{rightBtnText}}</view>
  10 + </slot>
  11 + </view>
10 </view> 12 </view>
11 </view> 13 </view>
12 </template> 14 </template>
@@ -56,7 +58,8 @@ @@ -56,7 +58,8 @@
56 .bottomBar { 58 .bottomBar {
57 position: fixed; 59 position: fixed;
58 z-index: v-bind(zIndex); 60 z-index: v-bind(zIndex);
59 - left: 0; 61 + left: 50%;
  62 + transform: translateX(-50%);
60 right: 0; 63 right: 0;
61 bottom: 0; 64 bottom: 0;
62 height: v-bind(height); 65 height: v-bind(height);
@@ -30,7 +30,9 @@ @@ -30,7 +30,9 @@
30 <template v-if="userinfo.is_vip==0"> 30 <template v-if="userinfo.is_vip==0">
31 <image src="/static/images/vip-bg.png" class="vip-bg" @click="toMember"></image> 31 <image src="/static/images/vip-bg.png" class="vip-bg" @click="toMember"></image>
32 </template> 32 </template>
33 - <view class="clear-all" @click="clearAll">清除聊天记录</view> 33 + <view class="clearall-wrap">
  34 + <view class="clear-all" @click="clearAll">清除聊天记录</view>
  35 + </view>
34 <image class="tips" src="/static/images/button.png" mode=""></image> 36 <image class="tips" src="/static/images/button.png" mode=""></image>
35 </view> 37 </view>
36 </u-popup> 38 </u-popup>
@@ -174,7 +176,17 @@ @@ -174,7 +176,17 @@
174 height: 89rpx; 176 height: 89rpx;
175 } 177 }
176 178
  179 + .clearall-wrap {
  180 + @include flexCj(center);
  181 + }
  182 +
177 .clear-all { 183 .clear-all {
  184 + width: 216rpx;
  185 + height: 56rpx;
  186 + border-radius: 12rpx;
  187 + line-height: 56rpx;
  188 + color: #000 !important;
  189 + background: linear-gradient(90deg, #fce4c7ff 0%, #e0a879ff 100%);
178 text-align: center; 190 text-align: center;
179 color: #ffffff8c; 191 color: #ffffff8c;
180 margin-top: 60rpx; 192 margin-top: 60rpx;
1 <template> 1 <template>
2 - <show-time />  
3 <view class="inquire-group"> 2 <view class="inquire-group">
4 <image class="avatar" :src="projectConfig.Al_avatar"></image> 3 <image class="avatar" :src="projectConfig.Al_avatar"></image>
5 <view class="group-wrap"> 4 <view class="group-wrap">
6 - <view class="group-item" v-for="item in recommendList" :key="item.id" @click="clickKeywordSearch(item.title)"> 5 + <view class="group-item" v-for="item in recommendList" :key="item.id" @click="clickKeywordSearch(item.content)">
7 <view class="item-title">{{item.title}} </view> 6 <view class="item-title">{{item.title}} </view>
8 <view class="item-content">{{item.content}}</view> 7 <view class="item-content">{{item.content}}</view>
9 </view> 8 </view>
@@ -17,13 +16,24 @@ @@ -17,13 +16,24 @@
17 </view> 16 </view>
18 </view> 17 </view>
19 <show-time /> 18 <show-time />
20 - <view class="dialogue-wrap" v-for="(item,index) in chatLog" :key="index" ref="messageListContainer"> 19 + <view class="text-guide">
  20 + <view class="top-text">
  21 + 如需使用电脑版,可在电脑微信打开小程序
  22 + </view>
  23 + 防止迷路,请尽量、尽量、尽量关注公众号
  24 + <view class="bottom-text">
  25 + 左下角菜单点击添加客服获取更多精彩内容
  26 + </view>
  27 + </view>
  28 + <show-time />
  29 + <view class="dialogue-wrap" v-for="(item,index) in chatLog" :key="index">
21 <show-time /> 30 <show-time />
22 - <view class="response-group inquire-group"> 31 + <view class="response-group inquire-group" v-if="item.message">
23 <view class="dialogue answer-inner"> 32 <view class="dialogue answer-inner">
24 <view class="top answer-name">{{userinfo.nickname}}</view> 33 <view class="top answer-name">{{userinfo.nickname}}</view>
25 - <text selectable="true">  
26 - <view class="answer-dialogue">{{item.message }}</view> 34 + <text class="answer-dialogue" @click="longpressCopy(item.message)">
  35 + {{item.message }}
  36 + <!-- <u-tooltip text="复制" overlay> </u-tooltip> -->
27 </text> 37 </text>
28 </view> 38 </view>
29 <image class="avatar" style="margin-right: 0;" :src="userinfo.avatar"></image> 39 <image class="avatar" style="margin-right: 0;" :src="userinfo.avatar"></image>
@@ -33,16 +43,14 @@ @@ -33,16 +43,14 @@
33 <image class="avatar" :src="projectConfig.Al_avatar"></image> 43 <image class="avatar" :src="projectConfig.Al_avatar"></image>
34 <view class="dialogue"> 44 <view class="dialogue">
35 <view class="top">{{projectConfig.Al_name}}</view> 45 <view class="top">{{projectConfig.Al_name}}</view>
36 - <text selectable="true">  
37 - <view class="inquire">{{item.response}}</view>  
38 - </text> 46 + <text class="inquire" @click="longpressCopy(item.response)">{{item.response}}</text>
39 </view> 47 </view>
40 </view> 48 </view>
41 </view> 49 </view>
42 </template> 50 </template>
43 51
44 <script setup> 52 <script setup>
45 - import { ref, watch, nextTick } from 'vue' 53 + import { ref } from 'vue'
46 import showTime from '@/components/show-time.vue' 54 import showTime from '@/components/show-time.vue'
47 import { getRecorm } from '@/services/modules/home.js' 55 import { getRecorm } from '@/services/modules/home.js'
48 56
@@ -67,44 +75,40 @@ @@ -67,44 +75,40 @@
67 emits('clickKeywordSearch', item) 75 emits('clickKeywordSearch', item)
68 } 76 }
69 77
70 - const recommendList = ref([]) 78 + function longpressCopy(message) {
  79 + // navigator.clipboard.writeText(message).then(() => {
  80 + // uni.showToast({ title: '复制成功', icon: 'none' })
  81 + // }).catch(() => {
  82 + // console.log("复制失败");
  83 + // })
  84 + uni.setClipboardData({
  85 + data: message,
  86 + success: () => {
  87 + uni.showToast({
  88 + title: '复制成功'
  89 + })
  90 + console.log('success');
  91 + }
  92 + })
  93 + }
71 94
  95 + const recommendList = ref([])
72 async function fetchRecorm() { 96 async function fetchRecorm() {
73 const res = await getRecorm() 97 const res = await getRecorm()
74 recommendList.value = res.data 98 recommendList.value = res.data
75 // console.log('获取推荐文案', res) 99 // console.log('获取推荐文案', res)
76 } 100 }
77 -  
78 -  
79 - // const messageListContainer = ref(null);  
80 -  
81 - // watch(  
82 - // () => props.chatLog,  
83 - // (newVal) => {  
84 - // nextTick(() => {  
85 - // console.log(messageListContainer.value)  
86 - // messageListContainer.value[newVal.length - 1].scrollIntoView(); // 关键代码  
87 - // });  
88 - // }, {  
89 - // deep: true,  
90 - // }  
91 - // )  
92 - // // 在视图加载后将页面滚动到底部  
93 - // const scrollToBottom = () => {  
94 - // // 获取消息列表容器的DOM元素  
95 - // const container = messageListContainer.value;  
96 - // // 在下一个DOM更新周期中执行滚动  
97 - // nextTick(() => {  
98 - // container.scrollTop = container.scrollHeight;  
99 - // })  
100 - // }  
101 -  
102 - // defineExpose({  
103 - // scrollToBottom  
104 - // })  
105 </script> 101 </script>
106 102
107 <style lang="scss"> 103 <style lang="scss">
  104 + .text-guide {
  105 + text-align: center;
  106 +
  107 + .top-text {
  108 + margin-bottom: 20rpx;
  109 + }
  110 + }
  111 +
108 .inquire-group { 112 .inquire-group {
109 @include flex(); 113 @include flex();
110 114
@@ -120,6 +124,7 @@ @@ -120,6 +124,7 @@
120 } 124 }
121 125
122 .inquire { 126 .inquire {
  127 + display: block;
123 word-break: break-all; 128 word-break: break-all;
124 width: 462rpx; 129 width: 462rpx;
125 padding: 32rpx; 130 padding: 32rpx;
@@ -170,6 +175,7 @@ @@ -170,6 +175,7 @@
170 } 175 }
171 176
172 .answer-dialogue { 177 .answer-dialogue {
  178 + display: block;
173 word-break: break-all; 179 word-break: break-all;
174 width: 416rpx; 180 width: 416rpx;
175 padding: 32rpx; 181 padding: 32rpx;
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 { 9 {
10 "path": "pages/index/index", 10 "path": "pages/index/index",
11 "style": { 11 "style": {
12 - "navigationBarTitleText": "Ai小问答", 12 + "navigationBarTitleText": "#000001技术局",
13 "backgroundColor": "#000" 13 "backgroundColor": "#000"
14 } 14 }
15 }, { 15 }, {
@@ -18,13 +18,20 @@ @@ -18,13 +18,20 @@
18 "navigationBarTitleText": "会员权益", 18 "navigationBarTitleText": "会员权益",
19 "enablePullDownRefresh": false 19 "enablePullDownRefresh": false
20 } 20 }
  21 + }, {
  22 + "path": "pages/tests/tests",
  23 + "style": {
  24 + "navigationBarTitleText": "",
  25 + "enablePullDownRefresh": false
  26 + }
21 } 27 }
22 ], 28 ],
23 "globalStyle": { 29 "globalStyle": {
24 "navigationBarTextStyle": "black", 30 "navigationBarTextStyle": "black",
25 "navigationBarTitleText": "uni-app", 31 "navigationBarTitleText": "uni-app",
26 "navigationBarBackgroundColor": "#F8F8F8", 32 "navigationBarBackgroundColor": "#F8F8F8",
27 - "backgroundColor": "#060606" 33 + "backgroundColor": "#060606",
  34 + "navigationStyle": "custom"
28 }, 35 },
29 "uniIdRouter": {} 36 "uniIdRouter": {}
30 } 37 }
1 <template> 1 <template>
2 <view class="content"> 2 <view class="content">
3 - <scroll-view scroll-y scroll-x show-scrollbar scroll-with-animation :style="{  
4 - paddingBottom: '20px',  
5 - height: screenHeight - bottomHeight - statusbarHeight - 148 + 'px',  
6 - position: 'relative'  
7 - }" class="scrollView" :scroll-top="scrollTopHeight" :scroll-into-view="getScrollView">  
8 - <view id="scroll-view-content">  
9 - <dialogue :chatLog="chatLog" :projectConfig="projectConfig" :userinfo="userinfo" ref="dialogueRef"  
10 - @clickKeywordSearch="clickKeywordSearch" />  
11 - </view>  
12 - </scroll-view> 3 + <dialogue :chatLog="chatLog" :projectConfig=" projectConfig" :userinfo="userinfo"
  4 + @clickKeywordSearch="clickKeywordSearch" />
13 <bottom-bar bgColor="#151419" :height="height"> 5 <bottom-bar bgColor="#151419" :height="height">
14 <view class="bottom-wrap"> 6 <view class="bottom-wrap">
15 <image class="menu-icon" src="/static/images/menu.png" @click="isShowPopup=true"></image> 7 <image class="menu-icon" src="/static/images/menu.png" @click="isShowPopup=true"></image>
16 - <u-search placeholder="请输入消息..." v-model="dialogueVal" shape="square" bgColor="#242228"  
17 - :actionStyle="{color:'#f7dcbd'}" @search="fetchStartConversation(dialogueVal)" actionText="发送"  
18 - @custom="fetchStartConversation(dialogueVal)"></u-search> 8 + <u-search placeholder="请输入信息..." v-model="dialogueVal" searchIconSize="0" shape="square" bgColor="#242228"
  9 + :actionStyle="{color:'#f7dcbd'}" :disabled="disabled" @search="fetchStartConversation(dialogueVal)"
  10 + actionText="发送" color="#fff" placeholderColor="#fff" @custom="fetchStartConversation(dialogueVal)"></u-search>
19 </view> 11 </view>
20 </bottom-bar> 12 </bottom-bar>
21 <bottom-popup :isShow=" isShowPopup" @closePopup="isShowPopup=false" :userinfo="userinfo" 13 <bottom-popup :isShow=" isShowPopup" @closePopup="isShowPopup=false" :userinfo="userinfo"
@@ -26,7 +18,7 @@ @@ -26,7 +18,7 @@
26 <script setup> 18 <script setup>
27 import { EventSourcePolyfill } from 'event-source-polyfill'; 19 import { EventSourcePolyfill } from 'event-source-polyfill';
28 20
29 - import { computed, ref, watchEffect } from 'vue' 21 + import { computed, nextTick, ref, watchEffect } from 'vue'
30 import { onLoad } from '@dcloudio/uni-app' 22 import { onLoad } from '@dcloudio/uni-app'
31 import dialogue from '@/components/dialogue.vue' 23 import dialogue from '@/components/dialogue.vue'
32 import bottomBar from '@/components/bottom-bar/bottom-bar.vue' 24 import bottomBar from '@/components/bottom-bar/bottom-bar.vue'
@@ -41,8 +33,8 @@ @@ -41,8 +33,8 @@
41 const isShowPopup = ref(false) 33 const isShowPopup = ref(false)
42 const userinfo = ref() 34 const userinfo = ref()
43 const projectConfig = ref() 35 const projectConfig = ref()
44 - const dialogueRef = ref()  
45 const height = ref('104rpx') 36 const height = ref('104rpx')
  37 + const disabled = ref(false)
46 watchEffect(() => { 38 watchEffect(() => {
47 if (uni.getStorageSync('token')) { 39 if (uni.getStorageSync('token')) {
48 fetchRecord() 40 fetchRecord()
@@ -50,11 +42,31 @@ @@ -50,11 +42,31 @@
50 fetchConfig() 42 fetchConfig()
51 } 43 }
52 }) 44 })
  45 +
  46 + function getElementScollTop() {
  47 + nextTick(() => {
  48 + setTimeout(() => {
  49 + uni.pageScrollTo({
  50 + scrollTop: 99999999999999999999, //滚动到页面的目标位置(单位px)
  51 + })
  52 + }, 200)
  53 + })
  54 + }
  55 +
  56 + nextTick(() => {
  57 + setTimeout(() => {
  58 + uni.pageScrollTo({
  59 + scrollTop: 99999999999999999999, //滚动到页面的目标位置(单位px)
  60 + })
  61 + }, 200)
  62 + })
  63 +
53 const chatLog = ref([]) 64 const chatLog = ref([])
54 65
55 async function fetchStartConversation(message) { 66 async function fetchStartConversation(message) {
56 if (!message || isNull(message)) return showToast('请输入消息,消息不能为空哦~') 67 if (!message || isNull(message)) return showToast('请输入消息,消息不能为空哦~')
57 chatLog.value.push({ message: dialogueVal.value, response: '' }) 68 chatLog.value.push({ message: dialogueVal.value, response: '' })
  69 + getElementScollTop()
58 let source = new EventSourcePolyfill( 70 let source = new EventSourcePolyfill(
59 `http://aladmin.shs.broing.cn/api/message/sendText2?message=${message}`, { 71 `http://aladmin.shs.broing.cn/api/message/sendText2?message=${message}`, {
60 headers: { 72 headers: {
@@ -64,44 +76,30 @@ @@ -64,44 +76,30 @@
64 } 76 }
65 }) 77 })
66 source.onopen = function(e) { 78 source.onopen = function(e) {
  79 + getElementScollTop()
  80 + disabled.value = true
67 // console.log('开始流式监听', e) 81 // console.log('开始流式监听', e)
68 }; 82 };
69 source.onmessage = function(event) { 83 source.onmessage = function(event) {
70 - console.log('onmessage', event.data) 84 + disabled.value = true
  85 + // console.log('onmessage', event.data)
71 chatLog.value[chatLog.value.length - 1].response = chatLog.value[chatLog.value.length - 1].response.concat( 86 chatLog.value[chatLog.value.length - 1].response = chatLog.value[chatLog.value.length - 1].response.concat(
72 event.data).replaceAll('<br/>', ' ').replaceAll('undefined', ' ') 87 event.data).replaceAll('<br/>', ' ').replaceAll('undefined', ' ')
73 }; 88 };
74 89
75 source.onerror = function(err) { 90 source.onerror = function(err) {
  91 + getElementScollTop()
  92 + disabled.value = false
76 source.close(); 93 source.close();
77 }; 94 };
78 95
79 dialogueVal.value = '' 96 dialogueVal.value = ''
80 fetchUserinfo() 97 fetchUserinfo()
81 - if (res.msg === '您的会话次数不足') showToast(`${res.msg}`)  
82 - }  
83 -  
84 - onLoad(() => {  
85 - uni.getSystemInfo({  
86 - success: function(res) {  
87 - console.log(res, '------------')  
88 - }  
89 - })  
90 - })  
91 -  
92 - // 页面滚动到底部  
93 - function scrollToBottom() {  
94 - uni.createSelectorQuery().in(s).select('#scroll-view-content').boundingClientRect((res) => {  
95 - let top = res.height - (s.screenHeight - s.bottomHeight - 140);  
96 - if (top > 0) {  
97 - this.scrollTopHeight = top;  
98 - }  
99 - }).exec()  
100 } 98 }
101 99
102 // 点击关键词进行搜索 100 // 点击关键词进行搜索
103 function clickKeywordSearch(e) { 101 function clickKeywordSearch(e) {
104 - dialogueVal.value = e 102 + // dialogueVal.value = e
105 fetchStartConversation(e) 103 fetchStartConversation(e)
106 } 104 }
107 105
@@ -138,23 +136,17 @@ @@ -138,23 +136,17 @@
138 136
139 <style lang="scss"> 137 <style lang="scss">
140 page { 138 page {
141 - padding-bottom: 208rpx;  
142 - 139 + padding-bottom: 104rpx;
143 } 140 }
144 141
145 - .scrollView {  
146 - position: fixed;  
147 - right: 0px;  
148 - left: 0;  
149 - top: 0;  
150 - /* padding-left: 10px;  
151 - padding-right: 10px;  
152 - padding-top: 10px; */  
153 - width: auto; 142 + ::v-deep .u-popup__content {
  143 + background: #000 !important;
  144 + margin: 0 auto;
154 } 145 }
155 146
156 .content { 147 .content {
157 @include wrap(); 148 @include wrap();
  149 + overflow: scroll;
158 height: auto !important; 150 height: auto !important;
159 margin-top: 40rpx; 151 margin-top: 40rpx;
160 } 152 }
1 <template> 1 <template>
2 <view class="member"> 2 <view class="member">
3 <view class="rights">会员权益:问答无次数限制</view> 3 <view class="rights">会员权益:问答无次数限制</view>
4 - <image class="qr-code" show-menu-by-longpress :src="server_qr" mode=""></image> 4 + <image class="qr-code" show-menu-by-longpress :src="server_qr" mode="aspectFill"></image>
5 <view class="">长按识别二维码添加客服微信开通会员</view> 5 <view class="">长按识别二维码添加客服微信开通会员</view>
6 </view> 6 </view>
7 </template> 7 </template>
@@ -23,7 +23,7 @@ @@ -23,7 +23,7 @@
23 } 23 }
24 24
25 .qr-code { 25 .qr-code {
26 - @include common-icon-wh(200rpx); 26 + width: 400rpx;
27 margin: 40rpx 0; 27 margin: 40rpx 0;
28 } 28 }
29 </style> 29 </style>
1 -*{margin:0;-webkit-tap-highlight-color:transparent}html,body{-webkit-user-select:none;user-select:none;width:100%;height:100%}body,uni-page-body{background-color:var(--UI-BG-0);color:var(--UI-FG-0)}body{overflow-x:hidden;font-size:16px}uni-app,uni-page,uni-page-wrapper,uni-page-body{display:block;box-sizing:border-box;width:100%}uni-page-wrapper{position:relative}#app,uni-app,uni-page,uni-page-wrapper{height:100%}.uni-mask{position:fixed;z-index:999;top:0;right:0;left:0;bottom:0;background:rgba(0,0,0,.5)}.uni-fade-enter-active,.uni-fade-leave-active{transition-duration:.25s;transition-property:opacity;transition-timing-function:ease}.uni-fade-enter-from,.uni-fade-leave-active{opacity:0}.uni-loading,uni-button[loading]:before{background-color:transparent;background-image:url(data:image/svg+xml;base64,\ PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=);background-repeat:no-repeat}.uni-loading{width:20px;height:20px;display:inline-block;vertical-align:middle;animation:uni-loading 1s steps(12,end) infinite;background-size:100%}@keyframes uni-loading{0%{transform:rotate3d(0,0,1,0)}to{transform:rotate3d(0,0,1,360deg)}}html{--primary-color: #007aff;--UI-BG: #fff;--UI-BG-1: #f7f7f7;--UI-BG-2: #fff;--UI-BG-3: #f7f7f7;--UI-BG-4: #4c4c4c;--UI-BG-5: #fff;--UI-FG: #000;--UI-FG-0: rgba(0, 0, 0, .9);--UI-FG-HALF: rgba(0, 0, 0, .9);--UI-FG-1: rgba(0, 0, 0, .5);--UI-FG-2: rgba(0, 0, 0, .3);--UI-FG-3: rgba(0, 0, 0, .1)}body:after{position:fixed;content:"";left:-1000px;top:-1000px;animation:shadow-preload .1s;animation-delay:3s}@keyframes shadow-preload{0%{background-image:url(https://cdn.dcloud.net.cn/img/shadow-grey.png)}to{background-image:url(https://cdn.dcloud.net.cn/img/shadow-grey.png)}}.uni-async-error{position:absolute;left:0;right:0;top:0;bottom:0;color:#999;padding:100px 10px;text-align:center}.uni-async-loading{box-sizing:border-box;width:100%;padding:50px;text-align:center}.uni-async-loading .uni-loading{width:30px;height:30px}uni-page-head{display:block;box-sizing:border-box}.uni-page-head{position:fixed;left:var(--window-left);right:var(--window-right);height:44px;height:calc(44px + constant(safe-area-inset-top));height:calc(44px + env(safe-area-inset-top));padding:7px 3px;padding-top:calc(7px + constant(safe-area-inset-top));padding-top:calc(7px + env(safe-area-inset-top));display:flex;overflow:hidden;justify-content:space-between;box-sizing:border-box;z-index:998;color:#fff;background-color:#000;transition-property:all}.uni-page-head *{box-sizing:border-box}.uni-page-head .uni-btn-icon{overflow:hidden;min-width:1em;font-style:normal}.uni-page-head-titlePenetrate,.uni-page-head-titlePenetrate .uni-page-head-bd,.uni-page-head-titlePenetrate .uni-page-head-bd *{pointer-events:none}.uni-page-head-titlePenetrate *{pointer-events:auto}.uni-page-head.uni-page-head-transparent .uni-page-head-ft>div{justify-content:center}.uni-page-head~.uni-placeholder{width:100%;height:44px;height:calc(44px + constant(safe-area-inset-top));height:calc(44px + env(safe-area-inset-top))}.uni-placeholder-titlePenetrate{pointer-events:none}.uni-page-head-hd{display:flex;align-items:center;font-size:16px}.uni-page-head-bd{position:absolute;left:70px;right:70px;min-width:0;-webkit-user-select:auto;user-select:auto}.uni-page-head-btn{position:relative;width:auto;margin:0 2px;word-break:keep-all;white-space:pre;cursor:pointer}.uni-page-head-btn svg{margin-top:-2px}.uni-page-head-transparent .uni-page-head-btn{display:flex;align-items:center;width:32px;height:32px;border-radius:50%;background-color:rgba(0,0,0,.5)}.uni-page-head-btn-red-dot:after{content:attr(badge-text);position:absolute;right:0;top:0;background-color:red;color:#fff;width:18px;height:18px;line-height:18px;border-radius:18px;overflow:hidden;transform:scale(.5) translate(40%,-40%);transform-origin:100% 0}.uni-page-head-btn-red-dot[badge-text]:after{font-size:12px;width:auto;min-width:18px;max-width:42px;text-align:center;padding:0 3px;transform:scale(.7) translate(40%,-40%)}.uni-page-head-btn-select svg{vertical-align:middle;margin-left:2px;transform:rotate(270deg) scale(.8)}.uni-page-head-search{position:relative;display:flex;flex:1;margin:0 2px;line-height:30px;font-size:15px}.uni-page-head-search-input{width:100%;height:100%;padding-left:34px;text-align:left}.uni-page-head-search-placeholder{position:absolute;max-width:100%;height:100%;padding-left:34px;overflow:hidden;word-break:keep-all;white-space:pre}.uni-page-head-search-placeholder-right{right:0}.uni-page-head-search-placeholder-center{left:50%;transform:translate(-50%)}.uni-page-head-search-icon{position:absolute;top:0;left:2px;width:30px;height:30px;display:flex;justify-content:center;align-items:center}.uni-page-head-ft{display:flex;align-items:center;flex-direction:row-reverse;font-size:13px}.uni-page-head__title{font-weight:700;font-size:16px;line-height:30px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.uni-page-head__title .uni-loading{width:16px;height:16px;margin-top:-3px}.uni-page-head__title .uni-page-head__title_image{width:auto;height:26px;vertical-align:middle}.uni-page-head-shadow{overflow:visible}.uni-page-head-shadow:after{content:"";position:absolute;left:0;right:0;top:100%;height:5px;background-size:100% 100%}.uni-page-head-shadow-grey:after{background-image:url(https://cdn.dcloud.net.cn/img/shadow-grey.png)}.uni-page-head-shadow-blue:after{background-image:url(https://cdn.dcloud.net.cn/img/shadow-blue.png)}.uni-page-head-shadow-green:after{background-image:url(https://cdn.dcloud.net.cn/img/shadow-green.png)}.uni-page-head-shadow-orange:after{background-image:url(https://cdn.dcloud.net.cn/img/shadow-orange.png)}.uni-page-head-shadow-red:after{background-image:url(https://cdn.dcloud.net.cn/img/shadow-red.png)}.uni-page-head-shadow-yellow:after{background-image:url(https://cdn.dcloud.net.cn/img/shadow-yellow.png)}uni-page-head[uni-page-head-type=default]~uni-page-wrapper{height:calc(100% - 44px);height:calc(100% - 44px - constant(safe-area-inset-top));height:calc(100% - 44px - env(safe-area-inset-top))}.u-line-1{display:-webkit-box!important;overflow:hidden;text-overflow:ellipsis;word-break:break-all;-webkit-line-clamp:1;-webkit-box-orient:vertical!important}.u-line-2{display:-webkit-box!important;overflow:hidden;text-overflow:ellipsis;word-break:break-all;-webkit-line-clamp:2;-webkit-box-orient:vertical!important}.u-line-3{display:-webkit-box!important;overflow:hidden;text-overflow:ellipsis;word-break:break-all;-webkit-line-clamp:3;-webkit-box-orient:vertical!important}.u-line-4{display:-webkit-box!important;overflow:hidden;text-overflow:ellipsis;word-break:break-all;-webkit-line-clamp:4;-webkit-box-orient:vertical!important}.u-line-5{display:-webkit-box!important;overflow:hidden;text-overflow:ellipsis;word-break:break-all;-webkit-line-clamp:5;-webkit-box-orient:vertical!important}.u-border{border-width:.5px!important;border-color:#dadbde!important;border-style:solid}.u-border-top{border-top-width:.5px!important;border-color:#dadbde!important;border-top-style:solid}.u-border-left{border-left-width:.5px!important;border-color:#dadbde!important;border-left-style:solid}.u-border-right{border-right-width:.5px!important;border-color:#dadbde!important;border-right-style:solid}.u-border-bottom{border-bottom-width:.5px!important;border-color:#dadbde!important;border-bottom-style:solid}.u-border-top-bottom{border-top-width:.5px!important;border-bottom-width:.5px!important;border-color:#dadbde!important;border-top-style:solid;border-bottom-style:solid}.u-reset-button{padding:0;background-color:transparent;font-size:inherit;line-height:inherit;color:inherit}.u-reset-button:after{border:none}.u-hover-class{opacity:.7}.u-primary-light{color:#ecf5ff}.u-warning-light{color:#fdf6ec}.u-success-light{color:#f5fff0}.u-error-light{color:#fef0f0}.u-info-light{color:#f4f4f5}.u-primary-light-bg{background-color:#ecf5ff}.u-warning-light-bg{background-color:#fdf6ec}.u-success-light-bg{background-color:#f5fff0}.u-error-light-bg{background-color:#fef0f0}.u-info-light-bg{background-color:#f4f4f5}.u-primary-dark{color:#398ade}.u-warning-dark{color:#f1a532}.u-success-dark{color:#53c21d}.u-error-dark{color:#e45656}.u-info-dark{color:#767a82}.u-primary-dark-bg{background-color:#398ade}.u-warning-dark-bg{background-color:#f1a532}.u-success-dark-bg{background-color:#53c21d}.u-error-dark-bg{background-color:#e45656}.u-info-dark-bg{background-color:#767a82}.u-primary-disabled{color:#9acafc}.u-warning-disabled{color:#f9d39b}.u-success-disabled{color:#a9e08f}.u-error-disabled{color:#f7b2b2}.u-info-disabled{color:#c4c6c9}.u-primary{color:#3c9cff}.u-warning{color:#f9ae3d}.u-success{color:#5ac725}.u-error{color:#f56c6c}.u-info{color:#909399}.u-primary-bg{background-color:#3c9cff}.u-warning-bg{background-color:#f9ae3d}.u-success-bg{background-color:#5ac725}.u-error-bg{background-color:#f56c6c}.u-info-bg{background-color:#909399}.u-main-color{color:#303133}.u-content-color{color:#606266}.u-tips-color{color:#909193}.u-light-color{color:#c0c4cc}.u-safe-area-inset-top{padding-top:0;padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top)}.u-safe-area-inset-right{padding-right:0;padding-right:constant(safe-area-inset-right);padding-right:env(safe-area-inset-right)}.u-safe-area-inset-bottom{padding-bottom:0;padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.u-safe-area-inset-left{padding-left:0;padding-left:constant(safe-area-inset-left);padding-left:env(safe-area-inset-left)}uni-toast{z-index:10090}uni-toast .uni-toast{z-index:10090}::-webkit-scrollbar{display:none;width:0!important;height:0!important;-webkit-appearance:none;background:transparent}uni-page-body{background-color:#000;font-size:.875rem;color:#fff}body{background-color:#000}  
1 -.member[data-v-c8dd4856]{display:flex;align-items:center;flex-direction:column;margin-top:1rem}.qr-code[data-v-c8dd4856]{width:6.25rem;height:6.25rem;margin:1.25rem 0}  
1 -uni-image{width:320px;height:240px;display:inline-block;overflow:hidden;position:relative}uni-image[hidden]{display:none}uni-image>div{width:100%;height:100%;background-repeat:no-repeat}uni-image>img{-webkit-touch-callout:none;user-select:none;display:block;position:absolute;top:0;left:0;width:100%;height:100%;opacity:0}uni-image>.uni-image-will-change{will-change:transform}uni-input{display:block;font-size:16px;line-height:1.4em;height:1.4em;min-height:1.4em;overflow:hidden}uni-input[hidden]{display:none}.uni-input-wrapper,.uni-input-placeholder,.uni-input-form,.uni-input-input{outline:none;border:none;padding:0;margin:0;text-decoration:inherit}.uni-input-wrapper,.uni-input-form{display:flex;position:relative;width:100%;height:100%;flex-direction:column;justify-content:center}.uni-input-placeholder,.uni-input-input{width:100%}.uni-input-placeholder{position:absolute;top:auto!important;left:0;color:gray;overflow:hidden;text-overflow:clip;white-space:pre;word-break:keep-all;pointer-events:none;line-height:inherit}.uni-input-input{position:relative;display:block;height:100%;background:none;color:inherit;opacity:1;font:inherit;line-height:inherit;letter-spacing:inherit;text-align:inherit;text-indent:inherit;text-transform:inherit;text-shadow:inherit}.uni-input-input[type=search]::-webkit-search-cancel-button,.uni-input-input[type=search]::-webkit-search-decoration{display:none}.uni-input-input::-webkit-outer-spin-button,.uni-input-input::-webkit-inner-spin-button{appearance:none;margin:0}.uni-input-input[type=number]{-moz-appearance:textfield}.uni-input-input:disabled{-webkit-text-fill-color:currentcolor}@keyframes once-show{0%{top:0}}uni-resize-sensor,uni-resize-sensor>div{position:absolute;left:0;top:0;right:0;bottom:0;overflow:hidden}uni-resize-sensor{display:block;z-index:-1;visibility:hidden;animation:once-show 1ms}uni-resize-sensor>div>div{position:absolute;left:0;top:0}uni-resize-sensor>div:first-child>div{width:100000px;height:100000px}uni-resize-sensor>div:last-child>div{width:200%;height:200%}uni-scroll-view{display:block;width:100%}uni-scroll-view[hidden]{display:none}.uni-scroll-view{position:relative;-webkit-overflow-scrolling:touch;width:100%;height:100%;max-height:inherit}.uni-scroll-view-content{width:100%;height:100%}.uni-scroll-view-refresher{position:relative;overflow:hidden}.uni-scroll-view-refresh{position:absolute;top:0;left:0;right:0;bottom:0;display:flex;flex-direction:row;justify-content:center;align-items:center}.uni-scroll-view-refresh-inner{display:flex;align-items:center;justify-content:center;line-height:0;width:40px;height:40px;border-radius:50%;background-color:#fff;box-shadow:0 1px 6px rgba(0,0,0,.118),0 1px 4px rgba(0,0,0,.118)}.uni-scroll-view-refresh__spinner{transform-origin:center center;animation:uni-scroll-view-refresh-rotate 2s linear infinite}.uni-scroll-view-refresh__spinner>circle{stroke:currentColor;stroke-linecap:round;animation:uni-scroll-view-refresh-dash 2s linear infinite}@keyframes uni-scroll-view-refresh-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes uni-scroll-view-refresh-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}uni-text[selectable]{cursor:auto;user-select:text}uni-text{white-space:pre-line}uni-view{display:block}uni-view[hidden]{display:none}uni-toast{position:fixed;top:0;right:0;bottom:0;left:0;z-index:999;display:block;box-sizing:border-box;pointer-events:none;font-size:16px}.uni-sample-toast{position:fixed;z-index:999;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;max-width:80%}.uni-simple-toast__text{display:inline-block;vertical-align:middle;color:#fff;background-color:rgba(17,17,17,.7);padding:10px 20px;border-radius:5px;font-size:13px;text-align:center;max-width:100%;word-break:break-all;white-space:normal}uni-toast .uni-mask{pointer-events:auto}.uni-toast{position:fixed;z-index:999;width:8em;top:50%;left:50%;transform:translate(-50%,-50%);background:rgba(17,17,17,.7);text-align:center;border-radius:5px;color:#fff}.uni-toast *{box-sizing:border-box}.uni-toast__icon{margin:20px 0 0;width:38px!important;height:38px!important;vertical-align:baseline!important}.uni-icon_toast{margin:15px 0 0}.uni-icon_toast.uni-icon-success-no-circle:before{color:#fff;font-size:55px}.uni-icon_toast.uni-loading{margin:20px 0 0;width:38px;height:38px;vertical-align:baseline}.uni-toast__content{margin:0 0 15px}@media (prefers-color-scheme: dark){.uni-toast{background-color:#606060;color:var(--UI-FG-0)}}  
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <html lang="en"> 2 <html lang="en">
3 <head> 3 <head>
4 - <link rel="stylesheet" href="/assets/uni.2bbffe23.css"> 4 + <link rel="stylesheet" href="/assets/uni.9400faf2.css">
5 5
6 <meta charset="UTF-8" /> 6 <meta charset="UTF-8" />
7 <script> 7 <script>
@@ -14,8 +14,8 @@ @@ -14,8 +14,8 @@
14 <title>AI-interlocution</title> 14 <title>AI-interlocution</title>
15 <!--preload-links--> 15 <!--preload-links-->
16 <!--app-context--> 16 <!--app-context-->
17 - <script type="module" crossorigin src="/assets/index-0dc6814a.js"></script>  
18 - <link rel="stylesheet" href="/assets/index-d909d437.css"> 17 + <script type="module" crossorigin src="/assets/index-752cd467.js"></script>
  18 + <link rel="stylesheet" href="/assets/index-ce5725ae.css">
19 </head> 19 </head>
20 <body> 20 <body>
21 <div id="app"><!--app-html--></div> 21 <div id="app"><!--app-html--></div>