支付功能+bugfix

Change-Id: I91a87ee5cb22aebe7ca8fc28722102c6f49f4c31
diff --git a/src/pages/UserCenter/index.tsx b/src/pages/UserCenter/index.tsx
index 13de6ad..4e2b5dc 100644
--- a/src/pages/UserCenter/index.tsx
+++ b/src/pages/UserCenter/index.tsx
@@ -99,6 +99,7 @@
   const [editCoverImageUrl, setEditCoverImageUrl] = useState<string>('');
   const [currentPayment, setCurrentPayment] = useState<PaymentRecord | null>(null);
   const [isEditingPromotion, setIsEditingPromotion] = useState(false);
+  const [currentPublishingPostId, setCurrentPublishingPostId] = useState<number | null>(null); // 跟踪当前正在发布的帖子ID
 
   useEffect(() => {
     if (activeTab === 'myPosts') {
@@ -171,25 +172,64 @@
 
   const handlePublishPost = async (values: PostFormData) => {
     try {
-      if (values.promotionPlan && selectedPromotion) {
-        // 如果选择了推广,创建支付记录
-        const paymentResponse = await createPayment({
-          postId: 0, // 新帖子,暂时设为0,后端会处理
-          planId: selectedPromotion.id,
-          amount: selectedPromotion.price
-        });
-        
-        if (paymentResponse.code === 200) {
-          setCurrentPayment(paymentResponse.data);
-        setPaymentModalVisible(true);
-        return;
+      // 如果选择了推广计划
+      if (values.promotionPlan) {
+        const selectedPlan = promotionPlans.find(p => p.id === values.promotionPlan);
+        if (selectedPlan) {
+          setSelectedPromotion(selectedPlan);
+          
+          let postId = currentPublishingPostId;
+          
+          // 如果还没有创建帖子,先创建帖子
+          if (!postId) {
+            const postData = {
+              title: values.title,
+              content: values.content,
+              summary: values.summary,
+              tags: Array.isArray(values.tags) ? values.tags.join(',') : values.tags,
+              coverImage: coverImageUrl || undefined
+              // 注意:这里不包含promotionPlan,等支付成功后再更新
+            };
+            
+            const publishResponse = await publishPost(postData);
+            if (publishResponse.code === 200) {
+              postId = publishResponse.data?.postId;
+              if (postId) {
+                setCurrentPublishingPostId(postId); // 保存已创建的帖子ID
+              } else {
+                message.error('帖子发布成功但无法获取帖子ID');
+                return;
+              }
+            } else {
+              message.error(publishResponse.msg || '帖子发布失败');
+              return;
+            }
+          }
+          
+          // 使用帖子ID创建支付记录
+          if (postId) {
+            const paymentResponse = await createPayment({
+              postId: postId,
+              planId: selectedPlan.id,
+              amount: selectedPlan.price
+            });
+            
+            if (paymentResponse.code === 200) {
+              setCurrentPayment(paymentResponse.data);
+              setPaymentModalVisible(true);
+              return;
+            } else {
+              message.error(paymentResponse.msg || '创建支付记录失败');
+              return;
+            }
+          }
         } else {
-          message.error(paymentResponse.msg || '创建支付记录失败');
+          message.error('无效的推广计划');
           return;
         }
       }
       
-      // 直接发布帖子
+      // 直接发布帖子(没有选择推广)
       await submitPost(values);
     } catch (error) {
       message.error('发布帖子失败');
@@ -201,12 +241,15 @@
       // 处理标签格式
       const tagsString = Array.isArray(values.tags) ? values.tags.join(',') : values.tags;
       
+      // 如果有选择的推广计划,使用推广计划ID,否则使用表单中的值
+      const promotionPlanId = selectedPromotion?.id || values.promotionPlan;
+      
       const postData = {
         title: values.title,
         content: values.content,
         summary: values.summary,
         tags: tagsString,
-        promotionPlan: values.promotionPlan,
+        promotionPlan: promotionPlanId,
         coverImage: coverImageUrl || undefined
       };
       
@@ -353,7 +396,7 @@
       const response = await confirmPayment(currentPayment.paymentId);
       if (response.code === 200) {
         message.success('支付成功,推广已生效');
-    setPaymentModalVisible(false);
+        setPaymentModalVisible(false);
         setCurrentPayment(null);
         
         // 如果是编辑模式,完成帖子更新
@@ -361,14 +404,16 @@
           const values = editForm.getFieldsValue();
           const tagsString = Array.isArray(values.tags) ? values.tags.join(',') : values.tags;
           await updatePostDirectly(values, tagsString);
-        } else {
-          // 如果是发布模式
-    setPublishModalVisible(false);
-    form.resetFields();
-    setSelectedPromotion(null);
+        } else if (publishModalVisible) {
+          // 如果是发布模式,支付成功后关闭所有弹窗,刷新帖子列表,清空状态
+          setPublishModalVisible(false);
+          form.resetFields();
           setCoverImageUrl('');
-    fetchMyPosts();
+          setCurrentPublishingPostId(null); // 清空已创建的帖子ID
+          fetchMyPosts();
         }
+        
+        setSelectedPromotion(null);
       } else {
         message.error(response.msg || '支付确认失败');
       }
@@ -386,6 +431,17 @@
       setPaymentModalVisible(false);
       setCurrentPayment(null);
       setSelectedPromotion(null);
+      
+      // 如果是发布模式,支付取消后返回发布页面(不关闭发布弹窗)
+      // 保持currentPublishingPostId,用户可以重新支付
+      // 如果是编辑模式,关闭编辑弹窗
+      if (editModalVisible) {
+        setEditModalVisible(false);
+        editForm.resetFields();
+        setCurrentEditPost(null);
+        setEditCoverImageUrl('');
+        setIsEditingPromotion(false);
+      }
     } catch (error) {
       console.error('取消支付失败:', error);
       setPaymentModalVisible(false);
@@ -432,6 +488,17 @@
   };
 
   const handleCancelPublish = async () => {
+    // 如果有已创建的帖子但还没有支付成功,需要删除这个帖子
+    if (currentPublishingPostId) {
+      try {
+        await deletePost(currentPublishingPostId);
+        message.info('已取消发布并删除草稿帖子');
+      } catch (error) {
+        console.error('删除草稿帖子失败:', error);
+        message.warning('取消发布成功,但删除草稿帖子失败');
+      }
+    }
+    
     // 如果有上传的图片但没有发布帖子,删除图片
     if (coverImageUrl) {
       try {
@@ -448,6 +515,7 @@
     form.resetFields();
     setSelectedPromotion(null);
     setCoverImageUrl('');
+    setCurrentPublishingPostId(null); // 清空已创建的帖子ID
   };
 
   const uploadButton = (