1
This commit is contained in:
@@ -278,19 +278,6 @@
|
||||
width="600px"
|
||||
:close-on-click-modal="false"
|
||||
>
|
||||
<el-alert
|
||||
v-if="tokenStatusChecked && !tokenValid"
|
||||
title="访问令牌未配置或已过期"
|
||||
type="warning"
|
||||
:closable="false"
|
||||
style="margin-bottom: 20px;"
|
||||
>
|
||||
<template slot="default">
|
||||
<p>请先完成授权并保存访问令牌。</p>
|
||||
<p>获取授权URL后,完成授权,从回调页面复制access_token和refresh_token,然后调用设置token接口保存。</p>
|
||||
</template>
|
||||
</el-alert>
|
||||
|
||||
<el-form :model="syncLogisticsForm" label-width="140px">
|
||||
<el-form-item label="文件ID" required>
|
||||
<el-input
|
||||
@@ -340,10 +327,11 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="说明">
|
||||
<div style="font-size: 12px; color: #666; line-height: 1.6;">
|
||||
<p>1. 系统会自动使用后端保存的访问令牌,无需手动输入</p>
|
||||
<p>2. 文件ID和工作表ID可以从腾讯文档URL中获取</p>
|
||||
<p>3. 系统会自动从上次处理的最大行数-100开始读取,避免重复处理历史数据</p>
|
||||
<p>4. 配置会自动保存,下次使用时无需重新填写</p>
|
||||
<p>1. 点击"同步物流"时,如果没有token会自动打开授权页面</p>
|
||||
<p>2. 完成授权后,点击"开始同步"即可自动刷新token并同步数据</p>
|
||||
<p>3. 文件ID和工作表ID可以从腾讯文档URL中获取</p>
|
||||
<p>4. 系统会自动从上次处理的最大行数-100开始读取,避免重复处理历史数据</p>
|
||||
<p>5. 配置会自动保存,下次使用时无需重新填写</p>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
@@ -353,7 +341,6 @@
|
||||
type="primary"
|
||||
:loading="syncLogisticsLoading"
|
||||
@click="handleSyncLogisticsSubmit"
|
||||
:disabled="tokenStatusChecked && !tokenValid"
|
||||
>
|
||||
开始同步
|
||||
</el-button>
|
||||
@@ -364,7 +351,7 @@
|
||||
|
||||
<script>
|
||||
import { listJDOrders, updateJDOrder, delJDOrder, fetchLogisticsManually } from '@/api/system/jdorder'
|
||||
import { fillLogisticsByOrderNo, getTokenStatus } from '@/api/jarvis/tendoc'
|
||||
import { fillLogisticsByOrderNo, getTokenStatus, getTencentDocAuthUrl } from '@/api/jarvis/tendoc'
|
||||
import ListLayout from '@/components/ListLayout'
|
||||
|
||||
export default {
|
||||
@@ -648,9 +635,21 @@ export default {
|
||||
}
|
||||
|
||||
this.currentOrder = row
|
||||
|
||||
// 先检查token状态,如果没有token则自动打开授权页面
|
||||
try {
|
||||
const tokenStatusRes = await getTokenStatus()
|
||||
if (!tokenStatusRes.data || !tokenStatusRes.data.hasToken) {
|
||||
// 没有token,自动打开授权页面
|
||||
await this.openAuthAndWait()
|
||||
}
|
||||
} catch (e) {
|
||||
// 检查失败,也尝试打开授权
|
||||
await this.openAuthAndWait()
|
||||
}
|
||||
|
||||
// 打开配置对话框
|
||||
this.syncLogisticsDialogVisible = true
|
||||
this.tokenStatusChecked = false
|
||||
this.tokenValid = false
|
||||
|
||||
// 从localStorage获取之前保存的配置
|
||||
const savedConfig = localStorage.getItem('tendoc_sync_config')
|
||||
@@ -665,9 +664,58 @@ export default {
|
||||
console.error('解析保存的配置失败', e)
|
||||
}
|
||||
}
|
||||
|
||||
// 检查后端token状态
|
||||
await this.checkTokenStatus()
|
||||
},
|
||||
|
||||
/** 打开授权页面并等待授权完成 */
|
||||
async openAuthAndWait() {
|
||||
try {
|
||||
// 获取授权URL
|
||||
const authUrlRes = await getTencentDocAuthUrl()
|
||||
if (authUrlRes.code !== 200 || !authUrlRes.data) {
|
||||
this.$message.error('获取授权URL失败')
|
||||
return
|
||||
}
|
||||
|
||||
const authUrl = authUrlRes.data
|
||||
|
||||
// 打开授权页面
|
||||
this.$message.info('正在打开授权页面,请完成授权后继续...')
|
||||
const width = 600
|
||||
const height = 700
|
||||
const left = (window.screen.width - width) / 2
|
||||
const top = (window.screen.height - height) / 2
|
||||
|
||||
const authWindow = window.open(
|
||||
authUrl,
|
||||
'腾讯文档授权',
|
||||
`width=${width},height=${height},left=${left},top=${top},resizable=yes,scrollbars=yes`
|
||||
)
|
||||
|
||||
// 轮询检查授权是否完成(通过检查token状态)
|
||||
const checkAuth = setInterval(async () => {
|
||||
if (authWindow.closed) {
|
||||
clearInterval(checkAuth)
|
||||
|
||||
// 等待1秒后检查token状态
|
||||
setTimeout(async () => {
|
||||
try {
|
||||
const tokenStatusRes = await getTokenStatus()
|
||||
if (tokenStatusRes.data && tokenStatusRes.data.hasToken) {
|
||||
this.$message.success('授权成功!')
|
||||
} else {
|
||||
this.$message.warning('授权未完成,请重新尝试')
|
||||
}
|
||||
} catch (e) {
|
||||
this.$message.warning('无法验证授权状态')
|
||||
}
|
||||
}, 1000)
|
||||
}
|
||||
}, 1000)
|
||||
|
||||
} catch (e) {
|
||||
this.$message.error('打开授权页面失败: ' + (e.message || '未知错误'))
|
||||
console.error('打开授权页面失败', e)
|
||||
}
|
||||
},
|
||||
|
||||
/** 检查后端token状态 */
|
||||
@@ -689,11 +737,6 @@ export default {
|
||||
|
||||
/** 同步物流链接 */
|
||||
async handleSyncLogisticsSubmit() {
|
||||
if (!this.tokenValid) {
|
||||
this.$message.warning('访问令牌无效,请先完成授权并保存token')
|
||||
return
|
||||
}
|
||||
|
||||
if (!this.syncLogisticsForm.fileId || !this.syncLogisticsForm.sheetId) {
|
||||
this.$message.warning('请填写文件ID和工作表ID')
|
||||
return
|
||||
@@ -712,7 +755,7 @@ export default {
|
||||
this.syncLogisticsLoading = true
|
||||
try {
|
||||
const params = {
|
||||
// 不再传递accessToken,后端自动获取
|
||||
// 不再传递accessToken,后端自动刷新token
|
||||
fileId: this.syncLogisticsForm.fileId,
|
||||
sheetId: this.syncLogisticsForm.sheetId,
|
||||
headerRow: this.syncLogisticsForm.headerRow || 1
|
||||
@@ -735,10 +778,15 @@ export default {
|
||||
)
|
||||
this.syncLogisticsDialogVisible = false
|
||||
} else {
|
||||
this.$message.error(res.msg || '同步失败')
|
||||
// 如果是因为token问题,提示用户授权
|
||||
if (res.msg && res.msg.includes('授权')) {
|
||||
this.$message.error(res.msg + '。请访问: GET /jarvis/tendoc/authUrl 获取授权URL')
|
||||
} else {
|
||||
this.$message.error(res.msg || '同步失败')
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
this.$message.error('同步失败,请稍后重试')
|
||||
this.$message.error('同步失败,请稍后重试: ' + (e.message || '未知错误'))
|
||||
console.error('同步物流失败', e)
|
||||
} finally {
|
||||
this.syncLogisticsLoading = false
|
||||
|
||||
Reference in New Issue
Block a user