This commit is contained in:
@@ -58,21 +58,42 @@ export function getDingtalkPlatform(): string {
|
||||
}
|
||||
|
||||
/**
|
||||
* 等待钉钉SDK就绪
|
||||
* 等待钉钉SDK就绪(带超时)
|
||||
*/
|
||||
export function waitDingtalkReady(): Promise<void> {
|
||||
export function waitDingtalkReady(timeout: number = 5000): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!window.dd) {
|
||||
reject(new Error('钉钉SDK未加载'))
|
||||
return
|
||||
}
|
||||
|
||||
let resolved = false
|
||||
|
||||
// 超时处理
|
||||
const timer = setTimeout(() => {
|
||||
if (!resolved) {
|
||||
resolved = true
|
||||
console.warn('钉钉SDK就绪超时,尝试继续执行')
|
||||
resolve() // 超时后也尝试继续,可能SDK已经就绪
|
||||
}
|
||||
}, timeout)
|
||||
|
||||
window.dd.ready(() => {
|
||||
resolve()
|
||||
if (!resolved) {
|
||||
resolved = true
|
||||
clearTimeout(timer)
|
||||
console.log('钉钉SDK就绪')
|
||||
resolve()
|
||||
}
|
||||
})
|
||||
|
||||
window.dd.error((err) => {
|
||||
reject(err)
|
||||
if (!resolved) {
|
||||
resolved = true
|
||||
clearTimeout(timer)
|
||||
console.error('钉钉SDK错误:', err)
|
||||
reject(err)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@@ -245,8 +245,10 @@ const handleDingtalkLoginSuccess = (response: any) => {
|
||||
* 钉钉免密登录(在钉钉环境中自动触发)
|
||||
*/
|
||||
const autoDingtalkLogin = async () => {
|
||||
console.log('[钉钉登录] 开始自动登录流程')
|
||||
|
||||
if (!dingtalkConfig.corp_id) {
|
||||
console.warn('钉钉CorpId未配置')
|
||||
console.warn('[钉钉登录] CorpId未配置')
|
||||
return
|
||||
}
|
||||
|
||||
@@ -254,13 +256,19 @@ const autoDingtalkLogin = async () => {
|
||||
|
||||
try {
|
||||
// 等待钉钉SDK就绪
|
||||
console.log('[钉钉登录] 等待SDK就绪...')
|
||||
await waitDingtalkReady()
|
||||
console.log('[钉钉登录] SDK已就绪')
|
||||
|
||||
// 获取免登授权码
|
||||
console.log('[钉钉登录] 获取授权码...')
|
||||
const code = await getAuthCode(dingtalkConfig.corp_id)
|
||||
console.log('[钉钉登录] 授权码获取成功')
|
||||
|
||||
// 调用登录API
|
||||
console.log('[钉钉登录] 调用登录API...')
|
||||
const response = await dingtalkLogin({ code })
|
||||
console.log('[钉钉登录] API响应:', response)
|
||||
|
||||
if (response.code === 200) {
|
||||
handleDingtalkLoginSuccess(response)
|
||||
@@ -268,8 +276,8 @@ const autoDingtalkLogin = async () => {
|
||||
ElMessage.error(response.message || '钉钉登录失败')
|
||||
}
|
||||
} catch (error: any) {
|
||||
console.error('钉钉自动登录失败:', error)
|
||||
ElMessage.warning('钉钉自动登录失败,请使用账号密码登录')
|
||||
console.error('[钉钉登录] 自动登录失败:', error)
|
||||
ElMessage.warning(error.message || '钉钉自动登录失败,请使用账号密码登录')
|
||||
} finally {
|
||||
dingtalkLoading.value = false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user