Compare commits
4 Commits
cf2a3ba19a
...
cf17633556
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cf17633556 | ||
| b062ec7522 | |||
| 35abfea922 | |||
| 6fc01a1bd5 |
194
manifest.json
194
manifest.json
@ -1,102 +1,102 @@
|
|||||||
{
|
{
|
||||||
"name": "YGTianmuCS",
|
"name" : "YGTianmuCS",
|
||||||
"appid": "__UNI__BB03E8A",
|
"appid" : "__UNI__BB03E8A",
|
||||||
"description": "",
|
"description" : "",
|
||||||
"versionName": "1.0.0",
|
"versionName" : "1.0.0",
|
||||||
"versionCode": "100",
|
"versionCode" : "100",
|
||||||
"transformPx": false,
|
"transformPx" : false,
|
||||||
/* 5+App特有相关 */
|
/* 5+App特有相关 */
|
||||||
"app-plus": {
|
"app-plus" : {
|
||||||
"usingComponents": true,
|
"usingComponents" : true,
|
||||||
"nvueStyleCompiler": "uni-app",
|
"nvueStyleCompiler" : "uni-app",
|
||||||
"compilerVersion": 3,
|
"compilerVersion" : 3,
|
||||||
"splashscreen": {
|
"splashscreen" : {
|
||||||
"alwaysShowBeforeRender": true,
|
"alwaysShowBeforeRender" : true,
|
||||||
"waiting": true,
|
"waiting" : true,
|
||||||
"autoclose": true,
|
"autoclose" : true,
|
||||||
"delay": 0
|
"delay" : 0
|
||||||
|
},
|
||||||
|
"safearea" : {
|
||||||
|
"bottom" : {
|
||||||
|
"offset" : "auto" // 自动适配安全区域
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/* 模块配置 */
|
||||||
|
"modules" : {},
|
||||||
|
/* 应用发布信息 */
|
||||||
|
"distribute" : {
|
||||||
|
/* android打包配置 */
|
||||||
|
"android" : {
|
||||||
|
"permissions" : [
|
||||||
|
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
|
||||||
|
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
||||||
|
"<uses-feature android:name=\"android.hardware.camera\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
/* ios打包配置 */
|
||||||
|
"ios" : {},
|
||||||
|
/* SDK配置 */
|
||||||
|
"sdkConfigs" : {
|
||||||
|
"oauth" : {}
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"safearea": {
|
/* 快应用特有相关 */
|
||||||
"bottom": {
|
"quickapp" : {},
|
||||||
"offset": "auto" // 自动适配安全区域
|
/* 小程序特有相关 */
|
||||||
}
|
"mp-weixin" : {
|
||||||
|
"appid" : "wx23f86d809ae80259",
|
||||||
|
"setting" : {
|
||||||
|
"urlCheck" : false
|
||||||
|
},
|
||||||
|
"usingComponents" : true,
|
||||||
|
"requiredPrivateInfos" : [ "getLocation" ],
|
||||||
|
"permission" : {
|
||||||
|
"scope.userLocation" : {
|
||||||
|
"desc" : "用于获取当前所在城市信息"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"plugins" : {
|
||||||
|
"WechatSI" : {
|
||||||
|
"version" : "0.3.6",
|
||||||
|
"provider" : "wx069ba97219f66d99"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"__usePrivacyCheck__" : true
|
||||||
},
|
},
|
||||||
/* 模块配置 */
|
"mp-alipay" : {
|
||||||
"modules": {},
|
"usingComponents" : true
|
||||||
/* 应用发布信息 */
|
},
|
||||||
"distribute": {
|
"mp-baidu" : {
|
||||||
/* android打包配置 */
|
"usingComponents" : true
|
||||||
"android": {
|
},
|
||||||
"permissions": [
|
"mp-toutiao" : {
|
||||||
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
|
"usingComponents" : true,
|
||||||
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
|
"usePrivacyCheck" : true
|
||||||
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
|
},
|
||||||
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
|
"uniStatistics" : {
|
||||||
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
|
"enable" : false
|
||||||
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
|
},
|
||||||
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
|
"vueVersion" : "3",
|
||||||
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
|
"h5" : {
|
||||||
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
|
"router" : {
|
||||||
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
|
"base" : "./",
|
||||||
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
|
"mode" : "hash"
|
||||||
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
|
},
|
||||||
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
"devServer" : {
|
||||||
"<uses-feature android:name=\"android.hardware.camera\"/>",
|
"https" : false
|
||||||
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
|
}
|
||||||
]
|
|
||||||
},
|
|
||||||
/* ios打包配置 */
|
|
||||||
"ios": {},
|
|
||||||
/* SDK配置 */
|
|
||||||
"sdkConfigs": {
|
|
||||||
"oauth": {}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
|
||||||
/* 快应用特有相关 */
|
|
||||||
"quickapp": {},
|
|
||||||
/* 小程序特有相关 */
|
|
||||||
"mp-weixin": {
|
|
||||||
"appid": "wx5e79df5996572539",
|
|
||||||
"setting": {
|
|
||||||
"urlCheck": false
|
|
||||||
},
|
|
||||||
"usingComponents": true,
|
|
||||||
"requiredPrivateInfos": ["getLocation"],
|
|
||||||
"permission": {
|
|
||||||
"scope.userLocation": {
|
|
||||||
"desc": "用于获取当前所在城市信息"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"plugins": {
|
|
||||||
"WechatSI": {
|
|
||||||
"version": "0.3.6",
|
|
||||||
"provider": "wx069ba97219f66d99"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"__usePrivacyCheck__": true
|
|
||||||
},
|
|
||||||
"mp-alipay": {
|
|
||||||
"usingComponents": true
|
|
||||||
},
|
|
||||||
"mp-baidu": {
|
|
||||||
"usingComponents": true
|
|
||||||
},
|
|
||||||
"mp-toutiao": {
|
|
||||||
"usingComponents": true,
|
|
||||||
"usePrivacyCheck": true
|
|
||||||
},
|
|
||||||
"uniStatistics": {
|
|
||||||
"enable": false
|
|
||||||
},
|
|
||||||
"vueVersion": "3",
|
|
||||||
"h5": {
|
|
||||||
"router": {
|
|
||||||
"base": "./",
|
|
||||||
"mode": "hash"
|
|
||||||
},
|
|
||||||
"devServer": {
|
|
||||||
"https": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -97,12 +97,12 @@
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<ActivityListComponent
|
<ActivityListComponent
|
||||||
v-if="mainPageDataModel.activityList.length > 0"
|
v-if="mainPageDataModel.activityList && mainPageDataModel.activityList.length > 0"
|
||||||
:activityList="mainPageDataModel.activityList"
|
:activityList="mainPageDataModel.activityList"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<RecommendPostsComponent
|
<RecommendPostsComponent
|
||||||
v-if="mainPageDataModel.recommendTheme.length > 0"
|
v-if="mainPageDataModel.recommendTheme && mainPageDataModel.recommendTheme.length > 0"
|
||||||
:recommendThemeList="mainPageDataModel.recommendTheme"
|
:recommendThemeList="mainPageDataModel.recommendTheme"
|
||||||
/>
|
/>
|
||||||
</ChatCardOther>
|
</ChatCardOther>
|
||||||
@ -256,8 +256,9 @@ const handleScrollToLower = () => {};
|
|||||||
// 滚动到底部 - 优化版本,确保打字机效果始终可见
|
// 滚动到底部 - 优化版本,确保打字机效果始终可见
|
||||||
const scrollToBottom = () => {
|
const scrollToBottom = () => {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
|
// 使用更大的值确保滚动到真正的底部
|
||||||
scrollTop.value = 99999;
|
scrollTop.value = 99999;
|
||||||
// 强制触发滚动更新
|
// 强制触发滚动更新,增加延迟确保DOM更新完成
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
scrollTop.value = scrollTop.value + Math.random();
|
scrollTop.value = scrollTop.value + Math.random();
|
||||||
}, 10);
|
}, 10);
|
||||||
@ -353,15 +354,6 @@ onMounted(async () => {
|
|||||||
addNoticeListener();
|
addNoticeListener();
|
||||||
initTypewriterManager();
|
initTypewriterManager();
|
||||||
initWebSocket();
|
initWebSocket();
|
||||||
uni.getProvider({
|
|
||||||
service: "oauth",
|
|
||||||
success: (res) => {
|
|
||||||
console.log("getProvider success", res);
|
|
||||||
},
|
|
||||||
fail: (err) => {
|
|
||||||
console.log("getProvider fail", err);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("页面初始化错误:", error);
|
console.error("页面初始化错误:", error);
|
||||||
}
|
}
|
||||||
@ -393,9 +385,9 @@ const getMainPageData = async () => {
|
|||||||
const sceneId = appStore.sceneId || "";
|
const sceneId = appStore.sceneId || "";
|
||||||
const res = await mainPageData(sceneId);
|
const res = await mainPageData(sceneId);
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
|
initData();
|
||||||
mainPageDataModel.value = res.data;
|
mainPageDataModel.value = res.data;
|
||||||
agentId.value = res.data.agentId;
|
agentId.value = res.data.agentId;
|
||||||
initData();
|
|
||||||
setTimeoutScrollToBottom();
|
setTimeoutScrollToBottom();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -538,7 +530,6 @@ const initTypewriterManager = () => {
|
|||||||
typewriterManager.setCallbacks({
|
typewriterManager.setCallbacks({
|
||||||
// 每个字符打字时的回调
|
// 每个字符打字时的回调
|
||||||
onCharacterTyped: (displayedContent) => {
|
onCharacterTyped: (displayedContent) => {
|
||||||
// 只有在用户没有滚动时才自动滚动到底部
|
|
||||||
scrollToBottom();
|
scrollToBottom();
|
||||||
},
|
},
|
||||||
// 内容更新时的回调
|
// 内容更新时的回调
|
||||||
@ -671,30 +662,38 @@ const stopRequest = () => {
|
|||||||
// 发送中断消息给服务器 (messageType=2)
|
// 发送中断消息给服务器 (messageType=2)
|
||||||
sendWebSocketMessage(2, "stop_request", { silent: true });
|
sendWebSocketMessage(2, "stop_request", { silent: true });
|
||||||
|
|
||||||
// 停止打字机效果
|
// 停止打字机效果并保留当前内容
|
||||||
if (typewriterManager) {
|
if (typewriterManager) {
|
||||||
typewriterManager.stopTypewriter();
|
// 获取当前已显示的内容
|
||||||
}
|
const currentStatus = typewriterManager.getStatus();
|
||||||
|
const currentDisplayedContent = currentStatus.displayedContent;
|
||||||
|
|
||||||
// 重置会话状态和消息状态
|
// 使用新的方法停止并保留当前内容
|
||||||
isSessionActive.value = false;
|
typewriterManager.stopAndKeepCurrent();
|
||||||
resetMessageState();
|
|
||||||
|
|
||||||
// 更新最后一条AI消息的状态
|
// 更新最后一条AI消息的状态
|
||||||
const aiMsgIndex = chatMsgList.value.length - 1;
|
const aiMsgIndex = chatMsgList.value.length - 1;
|
||||||
if (
|
|
||||||
chatMsgList.value[aiMsgIndex] &&
|
|
||||||
chatMsgList.value[aiMsgIndex].msgType === MessageRole.AI
|
|
||||||
) {
|
|
||||||
chatMsgList.value[aiMsgIndex].isLoading = false;
|
|
||||||
if (
|
if (
|
||||||
!chatMsgList.value[aiMsgIndex].msg ||
|
chatMsgList.value[aiMsgIndex] &&
|
||||||
chatMsgList.value[aiMsgIndex].msg.startsWith("加载中")
|
chatMsgList.value[aiMsgIndex].msgType === MessageRole.AI
|
||||||
) {
|
) {
|
||||||
chatMsgList.value[aiMsgIndex].msg = "请求已停止";
|
chatMsgList.value[aiMsgIndex].isLoading = false;
|
||||||
|
// 如果有已显示的内容,使用已显示的内容,否则显示停止消息
|
||||||
|
if (
|
||||||
|
currentDisplayedContent &&
|
||||||
|
currentDisplayedContent.trim() &&
|
||||||
|
!currentDisplayedContent.startsWith("加载中")
|
||||||
|
) {
|
||||||
|
chatMsgList.value[aiMsgIndex].msg = currentDisplayedContent;
|
||||||
|
} else {
|
||||||
|
chatMsgList.value[aiMsgIndex].msg = "请求已停止";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 重置会话状态(但不重置消息状态,保留已显示内容)
|
||||||
|
isSessionActive.value = false;
|
||||||
|
|
||||||
console.log("请求已停止,状态已重置");
|
console.log("请求已停止,状态已重置");
|
||||||
|
|
||||||
setTimeoutScrollToBottom();
|
setTimeoutScrollToBottom();
|
||||||
|
|||||||
@ -60,7 +60,7 @@ const initData = () => {
|
|||||||
icon: "/static/quick/quick_icon_call.png",
|
icon: "/static/quick/quick_icon_call.png",
|
||||||
title: "反馈意见",
|
title: "反馈意见",
|
||||||
content: "有意见告诉朵朵",
|
content: "有意见告诉朵朵",
|
||||||
type: "Command.createWorkOrder",
|
type: "Command.feedbackCard",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"appid": "wx5e79df5996572539",
|
"appid": "wx23f86d809ae80259",
|
||||||
"compileType": "miniprogram",
|
"compileType": "miniprogram",
|
||||||
"libVersion": "3.8.10",
|
"libVersion": "3.8.10",
|
||||||
"packOptions": {
|
"packOptions": {
|
||||||
|
|||||||
@ -7,8 +7,8 @@ class TypewriterManager {
|
|||||||
// 配置选项
|
// 配置选项
|
||||||
this.options = {
|
this.options = {
|
||||||
typingSpeed: 50, // 打字速度(毫秒)
|
typingSpeed: 50, // 打字速度(毫秒)
|
||||||
cursorText: '', // 光标样式
|
cursorText: "", // 光标样式
|
||||||
...options
|
...options,
|
||||||
};
|
};
|
||||||
|
|
||||||
// 状态变量
|
// 状态变量
|
||||||
@ -41,7 +41,7 @@ class TypewriterManager {
|
|||||||
* @param {string} content - 要添加的内容
|
* @param {string} content - 要添加的内容
|
||||||
*/
|
*/
|
||||||
addContent(content) {
|
addContent(content) {
|
||||||
if (typeof content !== 'string') {
|
if (typeof content !== "string") {
|
||||||
content = String(content);
|
content = String(content);
|
||||||
}
|
}
|
||||||
this.currentMessageContent += content;
|
this.currentMessageContent += content;
|
||||||
@ -70,9 +70,13 @@ class TypewriterManager {
|
|||||||
_typeNextChar() {
|
_typeNextChar() {
|
||||||
// 如果已显示内容长度小于完整内容长度,继续打字
|
// 如果已显示内容长度小于完整内容长度,继续打字
|
||||||
if (this.displayedContent.length < this.currentMessageContent.length) {
|
if (this.displayedContent.length < this.currentMessageContent.length) {
|
||||||
|
const nextLength = Math.min(
|
||||||
|
this.displayedContent.length + 1,
|
||||||
|
this.currentMessageContent.length
|
||||||
|
);
|
||||||
this.displayedContent = this.currentMessageContent.substring(
|
this.displayedContent = this.currentMessageContent.substring(
|
||||||
0,
|
0,
|
||||||
this.displayedContent.length + 1
|
nextLength
|
||||||
);
|
);
|
||||||
|
|
||||||
const displayContent = this.displayedContent;
|
const displayContent = this.displayedContent;
|
||||||
@ -92,7 +96,6 @@ class TypewriterManager {
|
|||||||
this.typewriterTimer = setTimeout(() => {
|
this.typewriterTimer = setTimeout(() => {
|
||||||
this._typeNextChar();
|
this._typeNextChar();
|
||||||
}, delay);
|
}, delay);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// 打字完成,移除光标
|
// 打字完成,移除光标
|
||||||
if (this.onContentUpdate) {
|
if (this.onContentUpdate) {
|
||||||
@ -119,6 +122,21 @@ class TypewriterManager {
|
|||||||
this.isTyping = false;
|
this.isTyping = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 停止打字机效果并保留当前显示的内容
|
||||||
|
* 与stopTypewriter不同,这个方法会将当前显示的内容设为最终内容
|
||||||
|
*/
|
||||||
|
stopAndKeepCurrent() {
|
||||||
|
this.stopTypewriter();
|
||||||
|
// 将当前显示的内容设为完整内容,避免后续添加更多内容
|
||||||
|
this.currentMessageContent = this.displayedContent;
|
||||||
|
|
||||||
|
// 调用完成回调
|
||||||
|
if (this.onTypingComplete) {
|
||||||
|
this.onTypingComplete(this.displayedContent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 重置打字机状态
|
* 重置打字机状态
|
||||||
*/
|
*/
|
||||||
@ -137,9 +155,10 @@ class TypewriterManager {
|
|||||||
isTyping: this.isTyping,
|
isTyping: this.isTyping,
|
||||||
currentContent: this.currentMessageContent,
|
currentContent: this.currentMessageContent,
|
||||||
displayedContent: this.displayedContent,
|
displayedContent: this.displayedContent,
|
||||||
progress: this.currentMessageContent.length > 0
|
progress:
|
||||||
? this.displayedContent.length / this.currentMessageContent.length
|
this.currentMessageContent.length > 0
|
||||||
: 0
|
? this.displayedContent.length / this.currentMessageContent.length
|
||||||
|
: 0,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user