This commit is contained in:
2025-11-07 18:16:05 +08:00
parent 5b607c8031
commit b79d074705

View File

@@ -122,7 +122,7 @@
</template> </template>
<script> <script>
import { generatePromotionContent, replaceUrlsWithGiftCoupons } from '@/api/system/jdorder' import { generatePromotionContent, createGiftCoupon, transferWithGift } from '@/api/system/jdorder'
export default { export default {
name: 'BatchGiftCoupon', name: 'BatchGiftCoupon',
@@ -216,15 +216,31 @@ export default {
this.result = null this.result = null
try { try {
// 使用第一个URL查询商品信息 // 为每个URL单独处理查询商品 → 创建礼金 → 转链
const firstUrl = this.detectedUrls[0] let replacedContent = this.content
this.progress = 10 const replacements = []
this.progressText = '正在查询商品信息...' let successCount = 0
this.progressDetail = `正在查询商品: ${firstUrl.substring(0, 50)}...`
const queryRes = await generatePromotionContent({ promotionContent: firstUrl }) for (let i = 0; i < this.detectedUrls.length; i++) {
const originalUrl = this.detectedUrls[i]
this.progress = Math.floor(10 + (i / this.detectedUrls.length) * 80)
this.progressText = `正在处理第 ${i + 1}/${this.detectedUrls.length} 个商品...`
this.progressDetail = `URL: ${originalUrl.substring(0, 50)}...`
try {
// 1. 查询商品信息
const queryRes = await generatePromotionContent({ promotionContent: originalUrl })
if (!queryRes || queryRes.code !== 200) {
replacements.push({
originalUrl,
newUrl: originalUrl,
success: false,
error: '查询商品信息失败'
})
continue
}
if (queryRes && queryRes.code === 200) {
let parsed = null let parsed = null
let resultStr = queryRes.data || queryRes.msg let resultStr = queryRes.data || queryRes.msg
@@ -234,7 +250,7 @@ export default {
parsed = resultStr parsed = resultStr
} }
// 提取第一个商品信息 // 提取商品信息
let product = null let product = null
if (Array.isArray(parsed) && parsed.length > 0) { if (Array.isArray(parsed) && parsed.length > 0) {
product = parsed[0] product = parsed[0]
@@ -249,18 +265,17 @@ export default {
} }
if (!product) { if (!product) {
this.$modal.msgError('无法从URL中提取商品信息请检查链接是否正确') replacements.push({
this.processing = false originalUrl,
return newUrl: originalUrl,
success: false,
error: '无法提取商品信息'
})
continue
} }
this.progress = 30 // 2. 创建礼金券
this.progressText = '正在批量创建礼金券...' const createParams = {
this.progressDetail = `准备创建 ${this.detectedUrls.length} 张礼金券,请耐心等待...`
// 构建请求参数
const params = {
content: this.content,
amount: this.form.amount, amount: this.form.amount,
quantity: this.form.quantity, quantity: this.form.quantity,
owner: this.form.owner || 'g', owner: this.form.owner || 'g',
@@ -271,45 +286,109 @@ export default {
const isPop = this.form.owner === 'pop' const isPop = this.form.owner === 'pop'
if (isPop) { if (isPop) {
if (product.materialUrl) { if (product.materialUrl) {
params.materialUrl = product.materialUrl createParams.materialUrl = product.materialUrl
} else if ((product.skuId || product.skuid) && /^\d+$/.test(String(product.skuId || product.skuid))) { } else if ((product.skuId || product.skuid) && /^\d+$/.test(String(product.skuId || product.skuid))) {
params.skuId = String(product.skuId || product.skuid) createParams.skuId = String(product.skuId || product.skuid)
} }
} else { } else {
const skuIdValue = product.skuId || product.skuid const skuIdValue = product.skuId || product.skuid
if (skuIdValue && /^\d+$/.test(String(skuIdValue))) { if (skuIdValue && /^\d+$/.test(String(skuIdValue))) {
params.skuId = String(skuIdValue) createParams.skuId = String(skuIdValue)
} else if (product.materialUrl) { } else if (product.materialUrl) {
params.materialUrl = product.materialUrl createParams.materialUrl = product.materialUrl
} }
} }
console.log('批量替换请求参数:', params) const createRes = await createGiftCoupon(createParams)
// 调用替换接口 if (!createRes || createRes.code !== 200 || !createRes.data) {
this.progress = 40 replacements.push({
const res = await replaceUrlsWithGiftCoupons(params) originalUrl,
newUrl: originalUrl,
success: false,
error: '创建礼金失败'
})
continue
}
this.progress = 80 const giftCouponKey = typeof createRes.data === 'object' ? createRes.data.giftCouponKey : null
this.progressText = '正在处理结果...'
if (res && res.code === 200 && res.data) { if (!giftCouponKey) {
this.result = res.data replacements.push({
this.progress = 100 originalUrl,
this.progressStatus = 'success' newUrl: originalUrl,
this.progressText = '完成!' success: false,
this.progressDetail = `成功替换 ${this.result.replacedCount || 0} / ${this.result.totalUrls || 0} 个URL` error: '礼金Key为空'
})
continue
}
this.$modal.msgSuccess(`✅ 批量替换完成!成功 ${this.result.replacedCount || 0} / ${this.result.totalUrls || 0}`) // 3. 转链(带礼金)
const transferParams = {
materialUrl: originalUrl,
giftCouponKey: giftCouponKey
}
const transferRes = await transferWithGift(transferParams)
if (transferRes && transferRes.code === 200 && transferRes.data) {
const shortUrl = typeof transferRes.data === 'object' ? transferRes.data.shortURL : transferRes.data
if (shortUrl) {
// 替换文本中的URL
replacedContent = replacedContent.replace(originalUrl, shortUrl)
replacements.push({
originalUrl,
newUrl: shortUrl,
success: true,
giftCouponKey: giftCouponKey
})
successCount++
} else { } else {
this.progress = 100 replacements.push({
this.progressStatus = 'exception' originalUrl,
this.progressText = '失败' newUrl: originalUrl,
this.progressDetail = res.msg || '未知错误' success: false,
this.$modal.msgError('批量替换失败:' + (res.msg || '未知错误')) error: '转链失败'
})
} }
} else { } else {
this.$modal.msgError('查询商品信息失败:' + (queryRes.msg || '未知错误')) replacements.push({
originalUrl,
newUrl: originalUrl,
success: false,
error: '转链接口调用失败'
})
}
} catch (e) {
console.error(`处理URL失败: ${originalUrl}`, e)
replacements.push({
originalUrl,
newUrl: originalUrl,
success: false,
error: e.message || '未知错误'
})
}
}
// 构建结果
this.result = {
replacedContent: replacedContent,
originalContent: this.content,
replacements: replacements,
totalUrls: this.detectedUrls.length,
replacedCount: successCount
}
this.progress = 100
this.progressStatus = successCount === this.detectedUrls.length ? 'success' : (successCount > 0 ? 'warning' : 'exception')
this.progressText = successCount === this.detectedUrls.length ? '完成!' : '部分成功'
this.progressDetail = `成功替换 ${successCount} / ${this.detectedUrls.length} 个URL`
if (successCount > 0) {
this.$modal.msgSuccess(`✅ 批量替换完成!成功 ${successCount} / ${this.detectedUrls.length}`)
} else {
this.$modal.msgError('批量替换失败所有URL处理均失败')
} }
} catch (e) { } catch (e) {
console.error('批量替换异常', e) console.error('批量替换异常', e)