fix: WeChat login Content-Type header, ASR tiny model, re-upload mini-program v1.0.11
This commit is contained in:
@@ -27,6 +27,8 @@
|
||||
ref="dhRef"
|
||||
:text="aiSpeechText"
|
||||
:audio-url="aiAudioUrl"
|
||||
:amplitude-data="aiAmplitudeData"
|
||||
:position="position"
|
||||
:auto-play="true"
|
||||
@speaking-start="onAvatarSpeaking"
|
||||
@speaking-end="onAvatarSilent"
|
||||
@@ -53,7 +55,7 @@
|
||||
</scroll-view>
|
||||
|
||||
<view class="input-bar" v-if="!isComplete">
|
||||
<view class="mic-btn" :class="{ recording: isRecording }" @touchstart="startRecord" @touchend="stopRecord" @touchcancel="stopRecord">
|
||||
<view class="mic-btn" :class="{ recording: isRecording }" @touchstart="startRecord" @touchend="stopRecord" @touchcancel="stopRecord" @mousedown="startRecord" @mouseup="stopRecord" @mouseleave="stopRecord">
|
||||
<text class="mic-icon">🎤</text>
|
||||
</view>
|
||||
<view class="input-box">
|
||||
@@ -89,6 +91,7 @@ const position = ref('')
|
||||
const avatarMode = ref(true)
|
||||
const aiSpeechText = ref('')
|
||||
const aiAudioUrl = ref('')
|
||||
const aiAmplitudeData = ref([])
|
||||
const isSpeaking = ref(false)
|
||||
const dhRef = ref(null)
|
||||
const isRecording = ref(false)
|
||||
@@ -179,8 +182,8 @@ const sendAnswer = async () => {
|
||||
if (res.statusCode === 200 && res.data?.messages) {
|
||||
const aiMsg = res.data.messages.find(m => m.role === 'ai')
|
||||
messages.value.push(...res.data.messages)
|
||||
if (avatarMode.value && aiMsg) {
|
||||
await speakAiText(aiMsg.content, res.data.ttsHash)
|
||||
if (avatarMode.value && aiMsg) {
|
||||
await speakAiText(aiMsg.content, res.data.ttsHash, res.data.ttsAmplitude)
|
||||
}
|
||||
answeredCount.value = res.data.questionCount || answeredCount.value + 1
|
||||
if (res.data.ttsHash && !avatarMode.value) {
|
||||
@@ -195,8 +198,9 @@ const sendAnswer = async () => {
|
||||
}
|
||||
}
|
||||
|
||||
async function speakAiText(text, ttsHash) {
|
||||
async function speakAiText(text, ttsHash, ttsAmplitude) {
|
||||
aiSpeechText.value = text
|
||||
aiAmplitudeData.value = ttsAmplitude || []
|
||||
if (ttsHash) {
|
||||
aiAudioUrl.value = api(API_ENDPOINTS.TTS.AUDIO(ttsHash))
|
||||
} else {
|
||||
@@ -208,6 +212,7 @@ async function speakAiText(text, ttsHash) {
|
||||
})
|
||||
if (synthRes.statusCode === 200 && synthRes.data?.hash) {
|
||||
aiAudioUrl.value = api(API_ENDPOINTS.TTS.AUDIO(synthRes.data.hash))
|
||||
aiAmplitudeData.value = synthRes.data?.amplitudeData || []
|
||||
}
|
||||
} catch {}
|
||||
}
|
||||
@@ -252,11 +257,12 @@ function stopRecord() {
|
||||
const audioPath = res.tempFilePath
|
||||
try {
|
||||
const uploadRes = await uni.uploadFile({
|
||||
url: api('/asr/recognize'),
|
||||
url: api(API_ENDPOINTS.TTS.ASR),
|
||||
filePath: audioPath,
|
||||
name: 'audio',
|
||||
header: { 'Authorization': `Bearer ${token.value}` },
|
||||
})
|
||||
console.log('[ASR] upload response:', uploadRes.statusCode, typeof uploadRes.data === 'string' ? uploadRes.data.slice(0, 200) : JSON.stringify(uploadRes.data).slice(0, 200))
|
||||
if (uploadRes.statusCode === 200 && uploadRes.data) {
|
||||
const data = typeof uploadRes.data === 'string' ? JSON.parse(uploadRes.data) : uploadRes.data
|
||||
if (data.text) {
|
||||
@@ -265,7 +271,9 @@ function stopRecord() {
|
||||
return
|
||||
}
|
||||
}
|
||||
} catch {}
|
||||
} catch (e) {
|
||||
console.error('[ASR] upload error:', e?.message || e)
|
||||
}
|
||||
uni.showToast({ title: '语音识别失败,请手动输入', icon: 'none' })
|
||||
})
|
||||
}
|
||||
|
||||
@@ -286,12 +286,25 @@ const doWxLogin = async () => {
|
||||
// #ifdef MP-WEIXIN
|
||||
wxLoading.value = true
|
||||
try {
|
||||
const { code } = await uni.login()
|
||||
const res = await uni.request({ url: api('/user/wx-login'), method: 'POST', data: { code } })
|
||||
const wxResp = await uni.login()
|
||||
console.log('[wxLogin] uni.login success:', JSON.stringify(wxResp).slice(0, 300))
|
||||
const { code, errMsg } = wxResp
|
||||
if (!code) { console.error('[wxLogin] no code:', errMsg); showToast('获取微信凭证失败'); return }
|
||||
const res = await uni.request({
|
||||
url: api('/user/wx-login'), method: 'POST',
|
||||
header: { 'Content-Type': 'application/json' },
|
||||
data: { code },
|
||||
})
|
||||
console.log('[wxLogin] server response:', res.statusCode, JSON.stringify(res.data).slice(0, 500))
|
||||
if (res.statusCode === 200 && res.data?.token) {
|
||||
loginSuccess(res.data)
|
||||
} else { showToast('微信登录失败') }
|
||||
} catch { showToast('微信登录失败') }
|
||||
} else {
|
||||
showToast(res.data?.message || `登录失败(${res.statusCode})`)
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('[wxLogin] error:', JSON.stringify(e).slice(0, 500))
|
||||
showToast('微信登录失败')
|
||||
}
|
||||
finally { wxLoading.value = false }
|
||||
// #endif
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user