hookehuyr

fix(plan): 根据订单ID判断提交成功并统一跳转逻辑

- 修改 PlanFormContainer 成功判断:必须同时满足 code === 1 且有 order_id
- 修正错误信息获取路径:res.data.msg 而非 res.data.message
- 统一所有页面的 handlePlanSubmit 函数,根据实际提交结果跳转
- 移除所有 TODO 注释和模拟提交逻辑

影响文件:
- src/components/plan/PlanFormContainer.vue
- src/pages/index/index.vue
- src/pages/product-center/index.vue
- src/pages/product-detail/index.vue
- src/pages/search/index.vue

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
......@@ -308,7 +308,10 @@ const submit = async () => {
// 调用 API
const res = await addAPI(requestData)
if (res.code === 1) {
// 判断成功:既要 code === 1,也要有 order_id
const isSuccess = res.code === 1 && res.data?.order_id
if (isSuccess) {
Taro.hideLoading()
Taro.showToast({
......@@ -320,7 +323,7 @@ const submit = async () => {
// 发送提交成功事件(携带 order_id)
emit('submit', {
success: true,
order_id: res.data?.order_id,
order_id: res.data.order_id,
product_id: props.product.id,
form_sn: props.product.form_sn
})
......@@ -329,12 +332,20 @@ const submit = async () => {
} else {
Taro.hideLoading()
// 失败时,尝试从 res.data 或 res.msg 中获取错误信息
const errorMsg = res.data?.msg || res.msg || '提交失败,请稍后重试'
Taro.showToast({
title: res.msg || '提交失败',
title: errorMsg,
icon: 'none',
duration: 2000
})
// 返回失败结果(不包含 order_id)
emit('submit', {
success: false
})
return false
}
} catch (error) {
......
......@@ -220,33 +220,36 @@ const openPlanPopup = (productId) => {
/**
* 处理计划书提交
* @description 测试环境:前端不调用后端API,直接跳转到结果页
* 生产环境:需要调用 submitPlanAPI 提交表单数据
* @param {Object} formData - 表单数据
*
* @description 接收 PlanFormContainer 的提交结果事件
* PlanFormContainer 已经调用过 API 并处理了 toast 提示
* 这里根据成功/失败状态跳转到结果页面
* @param {Object} result - 提交结果
* @param {boolean} result.success - 是否成功
* @param {number} result.order_id - 订单 ID
* @param {number} result.product_id - 产品 ID
* @param {string} result.form_sn - 表单标识
*/
const handlePlanSubmit = (formData) => {
console.log('计划书提交:', {
product_id: selectedProduct.value.id,
product_name: selectedProduct.value.product_name,
form_sn: selectedProduct.value.form_sn,
form_data: formData
});
const handlePlanSubmit = (result) => {
console.log('[Home Page] 计划书提交结果:', result);
// 关闭弹窗
showPlanPopup.value = false;
// TODO: 后端接口还没有准备好,暂时不调用API
// 测试完成后需要对接 submitPlanAPI
// const res = await submitPlanAPI({
// product_id: selectedProduct.value.id,
// template: selectedProduct.value.form_sn,
// form_data: formData
// });
// 模拟提交成功,跳转到结果页面
go('/pages/plan-submit-result/index', {
success: 'true'
});
// 构建结果页面参数
const params = {
success: result.success ? 'true' : 'false'
};
// 失败时可以传递错误信息(可选)
if (!result.success) {
params.message = '提交失败,请稍后重试';
}
// 延迟跳转,确保 PlanFormContainer 的 toast 显示完毕
setTimeout(() => {
go('/pages/plan-submit-result/index', params);
}, 500);
};
/**
......
......@@ -500,26 +500,37 @@ const openPlanPopup = (product) => {
/**
* 处理计划书提交
*
* @param {Object} formData - 表单数据
* @description 接收 PlanFormContainer 的提交结果事件
* PlanFormContainer 已经调用过 API 并处理了 toast 提示
* 这里根据成功/失败状态跳转到结果页面
* @param {Object} result - 提交结果
* @param {boolean} result.success - 是否成功
* @param {number} result.order_id - 订单 ID
* @param {number} result.product_id - 产品 ID
* @param {string} result.form_sn - 表单标识
*/
const handlePlanSubmit = (formData) => {
console.log('[Product Center] 计划书提交:', {
product_id: selectedProduct.value.id,
product_name: selectedProduct.value.product_name,
form_sn: selectedProduct.value.form_sn,
form_data: formData
})
const handlePlanSubmit = (result) => {
console.log('[Product Center] 计划书提交结果:', result)
// 关闭弹窗
showPlanPopup.value = false
// TODO: 后端接口还没有准备好,暂时不调用API
// 测试完成后需要对接 submitPlanAPI
// 构建结果页面参数
const params = {
success: result.success ? 'true' : 'false'
}
// 模拟提交成功,跳转到结果页面
Taro.navigateTo({
url: '/pages/plan-submit-result/index?success=true'
})
// 失败时可以传递错误信息(可选)
if (!result.success) {
params.message = '提交失败,请稍后重试'
}
// 延迟跳转,确保 PlanFormContainer 的 toast 显示完毕
setTimeout(() => {
Taro.navigateTo({
url: `/pages/plan-submit-result/index?${new URLSearchParams(params).toString()}`
})
}, 500)
}
</script>
......
......@@ -219,33 +219,37 @@ const openPlanPopup = () => {
/**
* 处理计划书提交
*
* @description 测试环境:前端不调用后端API,直接跳转到结果页
* 生产环境:需要调用 submitPlanAPI 提交表单数据
* @param {Object} formData - 表单数据
* @description 接收 PlanFormContainer 的提交结果事件
* PlanFormContainer 已经调用过 API 并处理了 toast 提示
* 这里根据成功/失败状态跳转到结果页面
* @param {Object} result - 提交结果
* @param {boolean} result.success - 是否成功
* @param {number} result.order_id - 订单 ID(成功时)
* @param {number} result.product_id - 产品 ID
* @param {string} result.form_sn - 表单标识
*/
const handlePlanSubmit = (formData) => {
console.log('计划书提交:', {
product_id: productDetail.value.id,
product_name: productDetail.value.product_name,
form_sn: productDetail.value.form_sn,
form_data: formData
})
const handlePlanSubmit = (result) => {
console.log('[Product Detail] 计划书提交结果:', result)
// 关闭弹窗
showPlanPopup.value = false
// TODO: 后端接口还没有准备好,暂时不调用API
// 测试完成后需要对接 submitPlanAPI
// const res = await submitPlanAPI({
// product_id: productDetail.value.id,
// template: productDetail.value.form_sn,
// form_data: formData
// })
// 构建结果页面参数
const params = {
success: result.success ? 'true' : 'false'
}
// 模拟提交成功,跳转到结果页面
Taro.navigateTo({
url: '/pages/plan-submit-result/index?success=true'
})
// 失败时可以传递错误信息(可选)
if (!result.success) {
params.message = '提交失败,请稍后重试'
}
// 延迟跳转,确保 PlanFormContainer 的 toast 显示完毕
setTimeout(() => {
Taro.navigateTo({
url: `/pages/plan-submit-result/index?${new URLSearchParams(params).toString()}`
})
}, 500)
}
useLoad((options) => {
......
......@@ -460,26 +460,35 @@ const openPlanPopup = (productId) => {
/**
* 处理计划书提交
*
* @param {Object} formData - 表单数据
* @description 接收 PlanFormContainer 的提交结果事件
* PlanFormContainer 已经调用过 API 并处理了 toast 提示
* 这里根据成功/失败状态跳转到结果页面
* @param {Object} result - 提交结果
* @param {boolean} result.success - 是否成功
* @param {number} result.order_id - 订单 ID
* @param {number} result.product_id - 产品 ID
* @param {string} result.form_sn - 表单标识
*/
const handlePlanSubmit = (formData) => {
console.log('计划书提交:', {
product_id: selectedProduct.value.id,
product_name: selectedProduct.value.product_name || selectedProduct.value.name,
form_sn: selectedProduct.value.form_sn,
form_data: formData
})
const handlePlanSubmit = (result) => {
console.log('[Search Page] 计划书提交结果:', result)
// 关闭弹窗
showPlanPopup.value = false
// TODO: 后端接口还没有准备好,暂时不调用API
// 测试完成后需要对接 submitPlanAPI
// 构建结果页面参数
const params = {
success: result.success ? 'true' : 'false'
}
// 失败时可以传递错误信息(可选)
if (!result.success) {
params.message = '提交失败,请稍后重试'
}
// 模拟提交成功,跳转到结果页面
go('/pages/plan-submit-result/index', {
success: 'true'
})
// 延迟跳转,确保 PlanFormContainer 的 toast 显示完毕
setTimeout(() => {
go('/pages/plan-submit-result/index', params)
}, 500)
}
/**
......