JLBA202505130001_关于吉林银行新建AI智能培训系统的需求_继续开发语音按钮

This commit is contained in:
田岩
2026-03-03 17:58:22 +08:00
parent d307b6b6d7
commit 60e7f272d8
18 changed files with 385 additions and 223 deletions
+83 -62
View File
@@ -1,11 +1,13 @@
import { ErrorCode, ShowErrorTipOptions } from './touch-btn.types';
import { get_base_url } from '@/api/request.js';
import { getToken } from '@/common/common.js';
import { getToken, getPhoneEnvBool } from '@/common/common.js';
const IsAndEnv = getPhoneEnvBool('AND')
// const url = '/trapractice/voiceCallSocket/voiceCall'
// const url = '/traapp/voiceTransSocket/open';
const url = '/traapp/voiceAiModelSocket/open';
// const url = '/traapp/asrAiModelSocket/open';
const url = '/traapp/asrAiModelSocket/open';
const _baseUrl = get_base_url(url).split('http').join('ws');
// const _baseUrl = '';
export const wsUrl = _baseUrl + url + '?summary=' + getToken();
const windowInfo = uni.getWindowInfo();
// 安全区域信息
@@ -17,58 +19,48 @@ export const bottomAreaTopBoundary = safeArea.bottom - btnHeight;
// 屏幕横向分割线
export const horizontalSplitX = safeArea.right / 2;
// 假设你在 Vue3 环境中,ws、wsStatus 是 ref 响应式变量
import { ref } from 'vue';
const ws = ref(null);
const wsStatus = ref(false);
/**
* 封装WebSocket连接为Promise
* @param {string} wsUrl - WebSocket连接地址
* @returns {Promise<UniApp.SocketTask>} 成功时返回WS实例,失败时reject错误信息
*/
export const initWebSocket = (wsUrl: string): Promise<UniApp.SocketTask> => {
return new Promise((resolve, reject) => {
// 1. 创建WS连接
const ws = uni.connectSocket({
url: wsUrl,
fail: (err) => {
console.error('WS连接创建失败:', err);
// 连接创建失败直接reject
reject(new Error(`WS连接创建失败:${err.errMsg || err.message}`));
},
success: () => {
console.log('WS连接创建请求已发送');
}
});
export const initWebSocket = (wsUrl : string) : Promise<UniApp.SocketTask> => {
return new Promise((resolve, reject) => {
// 1. 创建WS连接
const ws = uni.connectSocket({
url: wsUrl,
fail: (err) => {
console.error('WS连接创建失败:', err);
// 连接创建失败直接reject
reject(new Error(`WS连接创建失败:${err.errMsg || err.message}`));
},
success: () => {
}
});
// 2. 监听连接成功(核心:连接成功时resolve,返回WS实例)
const onOpenHandler = (res) => {
resolve(ws);
};
// 2. 监听连接成功(核心:连接成功时resolve,返回WS实例
const onOpenHandler = (res) => {
console.log('ws已连接', res);
// resolve返回WS实例
resolve(ws);
};
// 4. 监听连接错误(出错时reject
const onErrorHandler = (err) => {
console.log('WS连接错误', err);
// reject返回错误信息
reject(new Error(`WS连接错误:${err.errMsg || err.message}`));
};
// 4. 监听连接错误(出错时reject
const onErrorHandler = (err) => {
console.log('WS连接错误', err);
// reject返回错误信息
reject(new Error(`WS连接错误${err.errMsg || err.message}`));
};
// 5. 监听连接关闭(如果在open前关闭,也reject)
const onCloseHandler = (err) => {
console.log('WS连接已关闭', err);
// 连接未成功就关闭,执行reject
reject(new Error(`WS连接已关闭:${err.errMsg || err.message}`));
};
// 绑定监听事件
ws.onOpen(onOpenHandler);
ws.onError(onErrorHandler);
ws.onClose(onCloseHandler);
});
// 5. 监听连接关闭(如果在open前关闭,也reject
const onCloseHandler = (err) => {
console.log('WS连接已关闭', err);
// 连接未成功就关闭,执行reject
reject(new Error(`WS连接已关闭${err.errMsg || err.message}`));
};
// 绑定监听事件
ws.onOpen(onOpenHandler);
ws.onError(onErrorHandler);
ws.onClose(onCloseHandler);
});
};
/**
@@ -78,19 +70,48 @@ export const initWebSocket = (wsUrl: string): Promise<UniApp.SocketTask> => {
* @returns 固定返回false(保持原有返回值类型)
*/
export function showErrorTip(
errorCode: ErrorCode,
options: ShowErrorTipOptions = {}
): boolean {
// 解构可选参数,设置默认延迟时间为200ms
const { delayTime = 200 } = options;
errorCode : ErrorCode,
options : ShowErrorTipOptions = {}
) : boolean {
// 解构可选参数,设置默认延迟时间为200ms
const { delayTime = 200 } = options;
// 延迟显示对应的错误提示
setTimeout(() => {
uni.showToast({
title: errorCode, // 直接使用枚举值作为提示文本
icon: 'none'
});
}, delayTime); // 使用传入的延迟时间(或默认200ms)
// 延迟显示对应的错误提示
setTimeout(() => {
uni.showToast({
title: errorCode, // 直接使用枚举值作为提示文本
icon: 'none'
});
}, delayTime); // 使用传入的延迟时间(或默认200ms)
return false;
}
/**
* 跨平台震动反馈封装(适配安卓/iOS)轻震
* @returns {Promise<boolean>} 是否成功触发震动
*/
export const vibrateLight = () : void => {
// #ifdef APP-PLUS
try {
if (IsAndEnv) {
uni.vibrateShort({
success: function () {
console.log('success');
}
});
} else {
let UIImpactFeedbackGenerator = plus.ios.importClass(
'UIImpactFeedbackGenerator'
)
let impact = new UIImpactFeedbackGenerator()
impact.prepare()
impact.init(1)
impact.impactOccurred()
}
} catch (error) {
console.error('震动功能执行异常:', error);
}
// #endif
}
return false;
}