فهرست منبع

企微联调完毕

jihuaqiang 2 ماه پیش
والد
کامیت
fa66bd0e7a

+ 1 - 0
src/http/api.ts

@@ -33,6 +33,7 @@ export const saveQwPlanApi = `${import.meta.env.VITE_API_URL}/contentPlatform/pl
 export const getVideoContentCategoryListApi = `${import.meta.env.VITE_API_URL}/contentPlatform/plan/videoContentCategoryList`
 export const getVideoContentCoverFrameListApi = `${import.meta.env.VITE_API_URL}/contentPlatform/plan/videoContentCoverFrameList`
 export const getVideoContentListApi = `${import.meta.env.VITE_API_URL}/contentPlatform/plan/videoContentList`
+export const getShareQrPic = `${import.meta.env.VITE_API_URL}/contentPlatform/plan/qw/getSharePic`
 
 /* 数据统计 */
 export const gzhDataList = `${import.meta.env.VITE_API_URL}/contentPlatform/datastat/gzh`

+ 23 - 4
src/views/publishContent/publishContent.router.tsx

@@ -1,11 +1,30 @@
 import Icon, { DesktopOutlined } from '@ant-design/icons'
 import { AdminRouterItem } from "../../router";
-import WeCom from "./weCom/index";
-import WeGZH from "./weGZH/index";
+import React, { Suspense } from 'react';
 import WeComIcon from "@src/assets/images/publishContent/wxCom.svg?react";
 import WeGZHIcon from "@src/assets/images/publishContent/wxGzh.svg?react";
 import { Outlet } from "react-router-dom";
 
+// Lazy load components
+const WeCom = React.lazy(() => import('./weCom/index'));
+const WeGZH = React.lazy(() => import('./weGZH/index'));
+
+// Loading fallback component
+// eslint-disable-next-line react-refresh/only-export-components
+const LazyLoadingFallback = () => (
+  <div className="flex items-center justify-center h-[50vh]">
+    <div className="text-blue-500 text-xl">加载中...</div>
+  </div>
+);
+
+// Wrapper component with Suspense
+// eslint-disable-next-line react-refresh/only-export-components
+const LazyComponent = ({ Component }: { Component: React.ComponentType<any> }) => (
+  <Suspense fallback={<LazyLoadingFallback />}>
+    <Component />
+  </Suspense>
+);
+
 const demoRoutes: AdminRouterItem[] = [
   {
 		path: 'publishContent',
@@ -19,7 +38,7 @@ const demoRoutes: AdminRouterItem[] = [
 		children: [
 			{
 				path: 'wegzh',
-				element: <WeGZH />,
+				element: <LazyComponent Component={WeGZH} />,
 				meta: {
 					label: "公众号",
 					title: "公众号",
@@ -29,7 +48,7 @@ const demoRoutes: AdminRouterItem[] = [
 			},
 			{
 				path: 'wecom',
-				element: <WeCom />,
+				element: <LazyComponent Component={WeCom} />,
 				meta: {
 					label: "企微",
 					title: "企微",

+ 44 - 43
src/views/publishContent/weCom/components/linkDetailModal/index.tsx

@@ -1,8 +1,12 @@
-import React from 'react';
+import React, { useState } from 'react';
 import { Modal, Table, Button, Space, Tooltip, message, Typography } from 'antd';
 import { CopyOutlined, PlayCircleOutlined, DownloadOutlined, LinkOutlined, QrcodeOutlined } from '@ant-design/icons';
-import { WeVideoItem } from '@src/views/publishContent/weCom/type'; // Assuming type location
+import { WeComPlan } from '@src/views/publishContent/weCom/type'; // Assuming type location
 import copy from 'copy-to-clipboard';
+import { getShareQrPic } from '@src/http/api';
+import http from '@src/http';
+import modal from 'antd/es/modal';
+import VideoPlayModal from '../videoPlayModal';
 // import QRCode from 'qrcode.react'; // Consider adding this dependency if not present
 
 const { Text } = Typography;
@@ -10,27 +14,18 @@ const { Text } = Typography;
 interface LinkDetailModalProps {
   visible: boolean;
   onClose: () => void;
-  videos: WeVideoItem[]; // Use the appropriate type for your video data
+  videos: WeComPlan[]; // Use the appropriate type for your video data
 }
 
 // --- Placeholder Functions (Implement actual logic later) ---
-const playVideo = (video: WeVideoItem) => {
-  message.info(`Playing: ${video.title}`);
-  // Add actual video playback logic, perhaps reusing the player modal
-  if (video.video) {
-     window.open(video.video, '_blank');
-  } else {
-    message.warning('No video URL available.');
-  }
-};
 
-const downloadCover = (video: WeVideoItem) => {
-  message.info(`Downloading cover for: ${video.title}`);
+
+const downloadCover = (video: WeComPlan) => {
   if (video.cover) {
     const link = document.createElement('a');
     link.href = video.cover;
     // Attempt to infer filename, might need refinement
-    const filename = video.cover.substring(video.cover.lastIndexOf('/') + 1) || `cover_${video.videoId}.jpg`;
+    const filename = video.cover.substring(video.cover.lastIndexOf('/') + 1) || `cover_${video.id}.jpg`;
     link.download = filename;
     link.target = '_blank'; // Open in new tab might be safer for some browsers
     link.rel = 'noopener noreferrer';
@@ -42,43 +37,38 @@ const downloadCover = (video: WeVideoItem) => {
   }
 };
 
-const copyPushLink = (video: WeVideoItem & { pushLink?: string }) => {
+const copyPushLink = (video: WeComPlan) => {
   // Assuming video object might have a 'pushLink' property added by the parent component
-  const linkToCopy = video.pushLink || 'Push link not available'; // Updated placeholder
-  if (video.pushLink && copy(linkToCopy)) {
+  const linkToCopy = video.pageUrl || 'Push link not available'; // Updated placeholder
+  if (video.pageUrl && copy(linkToCopy)) {
     message.success('推送链接已复制');
-  } else if (!video.pushLink) {
+  } else if (!video.pageUrl) {
     message.warning('没有可复制的推送链接');
   } else {
     message.error('复制失败');
   }
 };
 
-const showQRCode = (video: WeVideoItem) => {
-  message.info(`Showing QR Code for: ${video.title}`);
-  // Add logic to show QR code, e.g., in another modal or popover
-  // const pushLink = video.pushLink || '';
-  // if (pushLink) {
-  //   Modal.info({
-  //     title: '推送链接二维码',
-  //     content: (
-  //       <div style={{ textAlign: 'center', marginTop: '20px' }}>
-  //         {/* <QRCode value={pushLink} size={200} /> */}
-  //         <p>Scan the QR code</p> {}
-  //       </div>
-  //     ),
-  //     okText: '关闭',
-  //   });
-  // } else {
-  //    message.warning('No push link available for QR code.');
-  // }
-   message.warning('QR Code functionality not yet fully implemented.'); // Placeholder
+const showQRCode = (video: WeComPlan) => {
+  http.get<string>(getShareQrPic, {
+		params: {
+			pageUrl: video.pageUrl,
+		}
+	}).then(res => {
+		modal.info({
+			title: '二维码',
+			content: <img src={res.data} alt="二维码" />,
+		});
+	}).catch(err => {
+		message.error(err.msg || '获取二维码失败');
+	});
 };
 // --- End Placeholder Functions ---
 
 
 const LinkDetailModal: React.FC<LinkDetailModalProps> = ({ visible, onClose, videos }) => {
-
+	const [isVideoPlayModalVisible, setIsVideoPlayModalVisible] = useState<boolean>(false);
+	const [activeVideo, setActiveVideo] = useState<WeComPlan | null>(null);
   const columns = [
     {
       title: '视频标题',
@@ -113,7 +103,7 @@ const LinkDetailModal: React.FC<LinkDetailModalProps> = ({ visible, onClose, vid
     {
       title: '操作',
       key: 'action',
-      render: (_: any, record: WeVideoItem) => (
+      render: (_: any, record: WeComPlan) => (
         <Space wrap size="small">
           <Button type="link" icon={<PlayCircleOutlined />} onClick={() => playVideo(record)} size="small">播放</Button>
           <Button type="link" icon={<DownloadOutlined />} onClick={() => downloadCover(record)} size="small">下载封面</Button>
@@ -122,7 +112,12 @@ const LinkDetailModal: React.FC<LinkDetailModalProps> = ({ visible, onClose, vid
         </Space>
       ),
     },
-  ];
+	];
+	
+	const playVideo = (video: WeComPlan) => {
+		setActiveVideo(video);
+		setIsVideoPlayModalVisible(true);
+	};
 
   return (
     <Modal
@@ -139,10 +134,16 @@ const LinkDetailModal: React.FC<LinkDetailModalProps> = ({ visible, onClose, vid
     >
       <Table
         columns={columns}
-        dataSource={videos.map(v => ({ ...v, key: v.videoId }))} // Ensure each item has a unique key
+        dataSource={videos.map(v => ({ ...v, key: v.id }))} // Ensure each item has a unique key
         pagination={false} // Disable pagination if the list is expected to be short
         size="small"
-      />
+			/>
+			<VideoPlayModal
+				visible={isVideoPlayModalVisible}
+				onClose={() => setIsVideoPlayModalVisible(false)}
+				videoUrl={activeVideo?.video || ''}
+				title={activeVideo?.title || ''}
+			/>
     </Modal>
   );
 };

+ 199 - 0
src/views/publishContent/weCom/components/planDetailModal/index.tsx

@@ -0,0 +1,199 @@
+import React, { useEffect, useState } from 'react';
+import { Modal, Button, Descriptions, Image, Space, Tooltip, message, Typography } from 'antd';
+import { CopyOutlined, PlayCircleOutlined, DownloadOutlined } from '@ant-design/icons';
+import { WeComPlan, WeComPlanType } from '@src/views/publishContent/weCom/type';
+import copy from 'copy-to-clipboard';
+import VideoPlayModal from '../videoPlayModal';
+import { getShareQrPic } from '@src/http/api';
+import http from '@src/http';
+
+const { Text } = Typography;
+
+interface PlanDetailModalProps {
+  visible: boolean;
+  onClose: () => void;
+  planData: WeComPlan | null | undefined; 
+}
+
+const PlanDetailModal: React.FC<PlanDetailModalProps> = ({ visible, onClose, planData }) => {
+	const [isVideoPlayModalVisible, setIsVideoPlayModalVisible] = useState<boolean>(false);
+	const [qrCode, setQrCode] = useState<string>('');
+	
+	useEffect(() => {
+		if (planData?.pageUrl) {
+			getShareQr(planData?.pageUrl || '');
+		}
+	}, [planData]);
+
+  if (!planData) {
+    return null; // Don't render if no data
+	}
+
+	
+	
+	const getShareQr = (pageUrl: string) => {
+		http.get<string>(getShareQrPic, {
+			params: {
+				pageUrl,
+			}
+		}).then(res => {
+			setQrCode(res.data);
+		}).catch(err => {
+			message.error(err.msg || '获取二维码失败');
+		});
+		
+	};
+
+  const handleCopy = (text: string | undefined, successMessage: string) => {
+    if (text && copy(text)) {
+      message.success(successMessage);
+    } else if (!text) {
+      message.warning('没有内容可复制');
+    } else {
+      message.error('复制失败');
+    }
+  };
+
+  const downloadFile = (url: string | undefined, filename: string) => {
+    if (!url) {
+      message.warning('无可用文件下载');
+      return;
+    }
+    const link = document.createElement('a');
+    link.href = url;
+    link.download = filename || url.substring(url.lastIndexOf('/') + 1);
+    link.target = '_blank';
+    link.rel = 'noopener noreferrer';
+    document.body.appendChild(link);
+    link.click();
+    document.body.removeChild(link);
+    message.success('开始下载...');
+  };
+
+  const playVideo = () => {
+    setIsVideoPlayModalVisible(true);
+  }
+
+  // Determine scene text based on plan type (adjust logic if needed)
+  const getSceneText = (plan: WeComPlan) => {
+    if (plan.type === +WeComPlanType.每日推送) {
+      return plan.scene === 0 ? '群发' : '单发';
+    }
+    // Add logic for other plan types if necessary
+    return '自动回复'; // Example placeholder for other types
+  }
+  
+  // Determine publish type text (adjust based on your data model)
+  const getPublishTypeText = (plan: WeComPlan) => {
+     // This field isn't directly in WeComPlan, you might need to fetch/derive it
+     // Returning a placeholder for now.
+     return plan.type === +WeComPlanType.每日推送 ? '每日推送' : '自动回复'; // Example
+  }
+  
+  // Determine account type text (adjust based on your data model)
+  const getAccountTypeText = () => {
+    // This field isn't in WeComPlan, returning placeholder.
+    return '小慧爱厨房'; // Placeholder based on image
+  }
+
+  // Determine account name text (adjust based on your data model)
+  const getAccountNameText = () => {
+      // This field isn't in WeComPlan, returning placeholder.
+      return '企微号'; // Placeholder based on image
+  }
+
+  return (
+    <Modal
+      title="内容详情"
+      open={visible}
+      onCancel={onClose}
+      footer={[
+        <Button key="close" type="primary" onClick={onClose}>
+          关闭
+        </Button>,
+      ]}
+      width={650} // Adjust width as needed
+      destroyOnClose
+    >
+      <Descriptions bordered column={1} size="small" labelStyle={{ width: '120px' }}>
+        <Descriptions.Item label="链接ID">{planData.id}</Descriptions.Item>
+        {/* Placeholder fields based on image - replace with actual data source if available */}
+        <Descriptions.Item label="发布账号类型">{getAccountTypeText()}</Descriptions.Item>
+        <Descriptions.Item label="公众号名称">{getAccountNameText()}</Descriptions.Item>
+        <Descriptions.Item label="发布场景">{getPublishTypeText(planData)}</Descriptions.Item>
+
+        <Descriptions.Item label="场景">{getSceneText(planData)}</Descriptions.Item>
+        <Descriptions.Item label="推送链接">
+          <Space>
+            <Text style={{ maxWidth: 350 }} ellipsis={{ tooltip: planData.pageUrl }}>
+              {planData.pageUrl}
+            </Text>
+            <Tooltip title="复制链接">
+              <Button
+                type="text"
+                icon={<CopyOutlined />}
+                onClick={() => handleCopy(planData.pageUrl, '推送链接已复制')}
+                size="small"
+              />
+            </Tooltip>
+          </Space>
+        </Descriptions.Item>
+        <Descriptions.Item label="视频标题">
+          <Space>
+            <Text style={{ maxWidth: 400 }} ellipsis={{ tooltip: planData.title }}>
+                {planData.title}
+            </Text>
+            <Tooltip title="复制标题">
+              <Button
+                type="text"
+                icon={<CopyOutlined />}
+                onClick={() => handleCopy(planData.title, '标题已复制')}
+                size="small"
+              />
+            </Tooltip>
+          </Space>
+        </Descriptions.Item>
+        <Descriptions.Item label="视频封面">
+          <Space direction="vertical" align="start">
+            <Image 
+              width={150} 
+              src={planData.cover} 
+              alt="视频封面" 
+              referrerPolicy="no-referrer" 
+              placeholder={ <div style={{ width: 150, height: 100, background: '#f0f0f0', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>加载中...</div> }
+             />
+            <Button 
+              type="link" 
+              icon={<DownloadOutlined />} 
+              onClick={() => downloadFile(planData.cover, planData.title + '_cover.jpg')} 
+              size="small"
+            >
+              下载封面
+            </Button>
+          </Space>
+        </Descriptions.Item>
+        <Descriptions.Item label="二维码">
+          {qrCode ? (
+             <Space direction="vertical" align="start">
+                 <img style={{ width: 150, height: 150 }} src={qrCode} alt="二维码" />
+                 {/* You might want to add a logo overlay if needed */}
+             </Space>
+          ) : (
+            <Text type="secondary">无可用链接生成二维码</Text>
+          )}
+        </Descriptions.Item>
+        <Descriptions.Item label="视频内容">
+          <Button type="link" icon={<PlayCircleOutlined />} onClick={playVideo} size="small">播放</Button>
+        </Descriptions.Item>
+			</Descriptions>
+			<VideoPlayModal
+				visible={isVideoPlayModalVisible}
+				onClose={() => setIsVideoPlayModalVisible(false)}
+				videoUrl={planData.video || ''}
+				title={planData.title || ''}
+			/>
+    </Modal>
+  );
+};
+
+export default PlanDetailModal; 

+ 27 - 0
src/views/publishContent/weCom/components/videoPlayModal/index.tsx

@@ -0,0 +1,27 @@
+import React from 'react';
+import { Modal } from 'antd';
+
+interface VideoPlayModalProps {
+  visible: boolean;
+	onClose: () => void;
+	title: string;
+  videoUrl: string;
+}
+
+const VideoPlayModal: React.FC<VideoPlayModalProps> = ({ visible, onClose, title, videoUrl }) => {
+  return (
+    <Modal
+      open={visible}
+      onCancel={onClose}
+      footer={null}
+			destroyOnClose
+			title={title}
+    >
+      <video controls autoPlay className="w-full h-auto max-h-[80vh] block" src={videoUrl}>
+        Your browser does not support the video tag.
+      </video>
+    </Modal>
+  );
+};
+
+export default VideoPlayModal;

+ 60 - 33
src/views/publishContent/weCom/index.tsx

@@ -4,17 +4,15 @@ import type { TableProps } from 'antd';
 import styles from './index.module.css';
 import { WeComPlan, WeComPlanListResponse, WeComPlanType, WeVideoItem } from './type';
 import request from '@src/http/index';
-import { getQwPlanListApi, saveQwPlanApi } from "@src/http/api"
+import { getQwPlanListApi, getShareQrPic, saveQwPlanApi } from "@src/http/api"
 import VideoSelectModal from './components/videoSelectModal';
 import LinkDetailModal from './components/linkDetailModal';
+import PlanDetailModal from './components/planDetailModal';
 import http from '@src/http/index';
-
+import copy from 'copy-to-clipboard';
+import VideoPlayModal from './components/videoPlayModal';
+import modal from 'antd/es/modal';
 // Define a type for the expected API response (adjust if needed based on actual API)
-interface SaveQwPlanResponse {
-	// Assuming the response has a data field containing the created items
-	// And each item is like WeVideoItem but includes a pageUrl
-	createdLinks: (WeVideoItem & { pageUrl: string })[];
-}
 
 const WeGZHContent: React.FC = () => {
 	// 状态管理
@@ -30,8 +28,12 @@ const WeGZHContent: React.FC = () => {
 
 	// State for the new modal
 	const [isLinkDetailModalVisible, setIsLinkDetailModalVisible] = useState<boolean>(false);
-	// State to hold data for the new modal (adjust type if needed)
-	const [createdVideoLinks, setCreatedVideoLinks] = useState<(WeVideoItem & { pushLink?: string })[]>([]);
+	const [createdVideoLinks, setCreatedVideoLinks] = useState<WeComPlan[]>([]);
+	
+	// State for the Plan Detail modal
+	const [isPlanDetailModalVisible, setIsPlanDetailModalVisible] = useState<boolean>(false);
+
+	const [isVideoPlayModalVisible, setIsVideoPlayModalVisible] = useState<boolean>(false);
 
 	const getTableData = (_pageNum?: number) => {
 		setPageNum(_pageNum || 1);
@@ -60,6 +62,7 @@ const WeGZHContent: React.FC = () => {
 			title: '创建时间',
 			dataIndex: 'createTimestamp',
 			key: 'createTimestamp',
+			width: 200,
 			render: (_, record) => {
 				return record.createTimestamp ? new Date(record.createTimestamp).toLocaleString() : '';
 			}
@@ -74,6 +77,7 @@ const WeGZHContent: React.FC = () => {
 			title: '场景',
 			dataIndex: 'scene',
 			key: 'scene',
+			width: 100,
 			render: (_, record) => {
 				if (activeKey === WeComPlanType.每日推送) {
 					return record.scene === 0 ? '群发' : '单发';
@@ -85,27 +89,32 @@ const WeGZHContent: React.FC = () => {
 		{
 			title: '操作',
 			key: 'action',
+			width: 500,
 			render: (_, record) => (
 				<Space size="middle" wrap>
-					<Button type="link" onClick={() => window.open(record.video, '_blank')}>播放</Button>
+					<Button type="link" onClick={() => playVideo(record)}>播放</Button>
 					<Button type="link" onClick={() => downloadFile(record.cover, record.title + '_cover')}>下载封面</Button>
-					<Button type="link" onClick={() => showQrCodeModal(record.pageUrl, record.title)}>二维码</Button>
+					<Button type="link" onClick={() => showQrCodeModal(record.pageUrl)}>二维码</Button>
 					<Button type="link" onClick={() => copyToClipboard(record.pageUrl)}>复制链接</Button>
+					<Button type="link" onClick={() => showDetailModal(record)}>详情</Button>
 				</Space>
 			),
 		},
 	];
 
+	const playVideo = (record: WeComPlan) => {
+		setEditPlanData(record);
+		setIsVideoPlayModalVisible(true);
+	}
+
+	const showDetailModal = (record: WeComPlan) => {
+		setEditPlanData(record);
+		setIsPlanDetailModalVisible(true);
+	}
+
 	const copyToClipboard = (text: string) => {
-		if (text && navigator.clipboard) {
-			navigator.clipboard.writeText(text).then(() => {
-				message.success('链接已复制');
-			}, (err) => {
-				message.error('复制失败: ' + err);
-			});
-		} else {
-			message.warning('无链接可复制或浏览器不支持');
-		}
+		copy(text);
+		message.success('复制成功');
 	};
 
 	const downloadFile = (url: string, filename: string) => {
@@ -124,12 +133,20 @@ const WeGZHContent: React.FC = () => {
 		message.success('开始下载...');
 	};
 
-	const showQrCodeModal = (url: string, title: string) => {
-		if (!url) {
-			message.warning('无链接生成二维码');
-			return;
-		}
-		message.info(`显示 ${title} 的二维码 (功能待实现)`);
+	const showQrCodeModal = (pageUrl: string) => {
+		http.get<string>(getShareQrPic, {
+			params: {
+				pageUrl,
+			}
+		}).then(res => {
+			modal.info({
+				title: '二维码',
+				content: <img src={res.data} alt="二维码" />,
+			});
+		}).catch(err => {
+			message.error(err.msg || '获取二维码失败');
+		});
+		
 	};
 
 	const addPunlishPlan = () => {
@@ -137,17 +154,13 @@ const WeGZHContent: React.FC = () => {
 	}
 
 	const handleOk = (selectedVideos: WeVideoItem[]) => {
-		http.post<SaveQwPlanResponse>(saveQwPlanApi, {
+		http.post<WeComPlan[]>(saveQwPlanApi, {
 			type: +activeKey,
 			videoList: selectedVideos,
 		}).then(res => {			
-			if (res.code === 0 &&res.data && Array.isArray(res.data.createdLinks) && res.data.createdLinks.length > 0) {
-				const linksForModal = res.data.createdLinks.map(item => ({
-					...item,
-					pushLink: item.pageUrl
-				}));
+			if (res.code === 0) {
 				message.success('创建成功');
-				setCreatedVideoLinks(linksForModal);
+				setCreatedVideoLinks(res.data);
 				setIsLinkDetailModalVisible(true);
 				setIsShowAddPunlishPlan(false);
 				getTableData();
@@ -239,6 +252,20 @@ const WeGZHContent: React.FC = () => {
 					onClose={() => setIsLinkDetailModalVisible(false)}
 					videos={createdVideoLinks}
 				/>
+				<PlanDetailModal 
+					visible={isPlanDetailModalVisible}
+					onClose={() => {
+						setIsPlanDetailModalVisible(false);
+						setEditPlanData(undefined);
+					}}
+					planData={editPlanData}
+				/>
+				<VideoPlayModal
+					visible={isVideoPlayModalVisible}
+					onClose={() => setIsVideoPlayModalVisible(false)}
+					videoUrl={editPlanData?.video || ''}
+					title={editPlanData?.title || ''}
+				/>
 			</div>
 		</div>
 	);

+ 1 - 13
src/views/publishContent/weGZH/components/publishPlanModal/index.tsx

@@ -1,5 +1,5 @@
 import React, { useEffect, useState } from 'react';
-import { Modal, Form, Select, Button, Card, Typography, message, Input } from 'antd';
+import { Modal, Form, Select, Button, Card, Typography, message } from 'antd';
 import { CloseOutlined, PlusOutlined, EditOutlined, CaretRightFilled } from '@ant-design/icons';
 import VideoSelectModal from '../videoSelectModal';
 import EditTitleCoverModal from '../editTitleCoverModal';
@@ -27,8 +27,6 @@ const AddPunlishPlanModal: React.FC<AddPunlishPlanModalProps> = ({ visible, isSu
 	const [editingVideo, setEditingVideo] = useState<VideoItem | null>(null); // State for editing modal
 	const { accountOptions } = useAccountOptions();
 
-	const publishStageValue = Form.useWatch('publishStage', form);
-
 	useEffect(() => {
 		if (actionType === 'edit') {
 			form.setFieldsValue(editPlanData);
@@ -146,16 +144,6 @@ const AddPunlishPlanModal: React.FC<AddPunlishPlanModalProps> = ({ visible, isSu
 							<Option value={1}>用户发布</Option>
 						</Select>
 					</Form.Item>
-					<Form.Item
-						name="testInput"
-						label="发布场景"
-						layout="horizontal"
-						labelCol={{ span: 4 }}
-						labelAlign='left'
-						hidden={publishStageValue === 1}
-					>
-						<Input placeholder="请输入" />
-					</Form.Item>
 					<Form.Item
 						name="accountId"
 						label="公众号名称"