import React, { useEffect, useState } from 'react'; import { Space, Table, Button, Input, Select, Tabs, message } from 'antd'; 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, 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) const TableHeight = window.innerHeight - 380; const WeGZHContent: React.FC = () => { // 状态管理 const [videoTitle, setVideoTitle] = useState(''); const [selectedPublisher, setSelectedPublisher] = useState(); const [isShowAddPunlishPlan, setIsShowAddPunlishPlan] = useState(false); const [editPlanData, setEditPlanData] = useState(); const [activeKey, setActiveKey] = useState(WeComPlanType.每日推送); const [tableData, setTableData] = useState([]); const [totalSize, setTotalSize] = useState(0); const [pageNum, setPageNum] = useState(1); // State for the new modal const [isLinkDetailModalVisible, setIsLinkDetailModalVisible] = useState(false); const [createdVideoLinks, setCreatedVideoLinks] = useState([]); // State for the Plan Detail modal const [isPlanDetailModalVisible, setIsPlanDetailModalVisible] = useState(false); const [isVideoPlayModalVisible, setIsVideoPlayModalVisible] = useState(false); const getTableData = (_pageNum?: number) => { setPageNum(_pageNum || 1); request.post(getQwPlanListApi, { pageNum: _pageNum || pageNum, pageSize: 10, scene: selectedPublisher, title: videoTitle, type: +activeKey, } ).then(res => { setTableData(res.data.objs || []); setTotalSize(res.data.totalSize); }).catch(err => { message.error(err.msg || '获取数据失败'); }); } useEffect(() => { getTableData(1); }, [activeKey]); // 表格列配置 const columns: TableProps['columns'] = [ { title: '创建时间', dataIndex: 'createTimestamp', key: 'createTimestamp', width: 200, render: (_, record) => { return record.createTimestamp ? new Date(record.createTimestamp).toLocaleString() : ''; } }, { title: '视频标题', dataIndex: 'title', key: 'title', ellipsis: true, }, { title: '场景', dataIndex: 'scene', key: 'scene', width: 100, render: (_, record) => { if (activeKey === WeComPlanType.每日推送) { return record.scene === 0 ? '群发' : '单发'; } else { return '自动回复'; } } }, { title: '操作', key: 'action', width: 500, render: (_, record) => ( ), }, ]; const playVideo = (record: WeComPlan) => { setEditPlanData(record); setIsVideoPlayModalVisible(true); } const showDetailModal = (record: WeComPlan) => { setEditPlanData(record); setIsPlanDetailModalVisible(true); } const copyToClipboard = (text: string) => { copy(text); message.success('复制成功'); }; const downloadFile = (url: string, 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 showQrCodeModal = (pageUrl: string) => { http.get(getShareQrPic, { params: { pageUrl, } }).then(res => { modal.info({ title: '二维码', content: 二维码, }); }).catch(err => { message.error(err.msg || '获取二维码失败'); }); }; const addPunlishPlan = () => { setIsShowAddPunlishPlan(true); } const handleOk = (selectedVideos: WeVideoItem[]) => { http.post(saveQwPlanApi, { type: +activeKey, videoList: selectedVideos, }).then(res => { if (res.code === 0) { message.success('创建成功'); setCreatedVideoLinks(res.data); setIsLinkDetailModalVisible(true); setIsShowAddPunlishPlan(false); getTableData(); } else { message.error(res.msg || '创建失败'); } }).catch(err => { message.error(err.msg || '创建失败'); }); } return (
企业微信内容库
{/* 搜索区域 */}
视频标题: getTableData(1)} onChange={e => setVideoTitle(e.target.value)} />
场景: