import { useAjax } from "@/Hook/useAjax" import { getRemoteMaterialListApi, getRemoteMaterialTotalApi } from "@/services/adqV3/cloudNew" import React, { useEffect, useRef, useState } from "react" import style from '../cloudNew/index.less' import Search from "./search" import { Button, Card, Checkbox, Divider, Dropdown, Empty, Form, message, Pagination, Popover, Radio, Select, Space, Spin, Statistic, Typography, Image, Tag, Table } from "antd" import { EyeOutlined, SortAscendingOutlined } from "@ant-design/icons" import PlayVideo from "../cloudNew/playVideo" import { formatBytes, formatSecondsToTime } from "@/utils/utils" import { useLocalStorageState, useSize } from "ahooks" import { defaultFiledList, fieldData, showFieldList } from "./const" import Lazyimg from "react-lazyimg-component" import '../cloudNew/global.less' import SaveMaterial from "./saveMaterial" import columns12 from "./tableConfig" import TablePro from "@/components/TablePro" const { Text, Paragraph } = Typography; const Tencent: React.FC = () => { /*******************************/ const ref = useRef(null); const size = useSize(ref); const ref1 = useRef(null); const size1 = useSize(ref1); const [rowNum, setRowNum] = useState(0) const [queryParams, setQueryParams] = useState({ pageNum: 1, pageSize: 50 }) const [searchParams, setSearchParams] = useState>({}) const [checkedFolderList, setCheckedFolderList] = useState([]) const [checkFolderAll, setCheckFolderAll] = useState(false); const [indeterminateFolder, setIndeterminateFolder] = useState(false); const [showField, setShowField] = useLocalStorageState('show-tencent-field', ['material_data.cost', 'material_data.view_count', 'material_data.valid_click_count', 'material_data.order_pv', 'calculate_material_data.order_rate']); const [sortData, setSortData] = useLocalStorageState<{ sortField: string | undefined, sortType: boolean }>('sort-tencent-data', { sortField: undefined, sortType: false }); const [previewData, setPreviewData] = useState<{ visible: boolean, url?: string }>({ visible: false }) const [moveData, setMoveData] = useState<{ visible: boolean, data: any[] }>({ visible: false, data: [] }) const [pageShowType, setPageShowType] = useLocalStorageState<'List' | 'Kanban'>('PAGE_SHOW_TYPE', 'Kanban'); const [totalData, setTotalData] = useState([{ id: 1, preview: '总计' }]) const getRemoteMaterialList = useAjax((params) => getRemoteMaterialListApi(params)) const getRemoteMaterialTotal = useAjax((params) => getRemoteMaterialTotalApi(params)) /*******************************/ useEffect(() => { getList() }, [queryParams, searchParams, sortData, showField, pageShowType]) const getList = () => { let params = { ...queryParams, ...searchParams, columns: showField || [] } if (pageShowType === 'List') { let saveColumns = localStorage.getItem('myAdMonitorConfig1.0.0_云端素材') let fieldList = defaultFiledList if (saveColumns) { fieldList = JSON.parse(saveColumns)?.map((item: { dataIndex: any }) => item.dataIndex).filter((key: string) => !['preview', 'pitcher_name'].includes(key)) } params.columns = fieldList.map(key => fieldData[key as keyof typeof fieldData]) } else { if (sortData?.sortField) { params = { ...params, ...sortData } } } getRemoteMaterialList.run(params) getRemoteMaterialTotal.run(params).then((res: { data: { id: number; preview: string } }) => { if (res) { let data: any = res data.id = 1 data.preview = '总计' setTotalData([data]) } else { setTotalData([{ id: 1, preview: '总计' }]) } }) } // 根据内容宽度计算列数 useEffect(() => { if (size?.width) { let rowNum = Math.floor((size?.width - 26) / 230) setRowNum(rowNum || 1) } }, [size?.width]) // 处理全选按钮状态 useEffect(() => { let data: any[] = getRemoteMaterialList?.data?.records || [] let dataIds = data.map(item => item.preview_url) let selectIds = checkedFolderList.map(item => item.preview_url) if (selectIds.length === 0 || dataIds.length === 0) { setCheckFolderAll(false) setIndeterminateFolder(false); } else if (dataIds.every((element) => selectIds.includes(element))) { setCheckFolderAll(true) setIndeterminateFolder(false); } else if (dataIds.some((element) => selectIds.includes(element))) { setCheckFolderAll(false) setIndeterminateFolder(true); } else { setCheckFolderAll(false) setIndeterminateFolder(false); } }, [checkedFolderList, getRemoteMaterialList?.data?.records]) // 选择 const onCheckboxChange = (checked: boolean, item: any) => { let newCheckedFolderList: any[] = JSON.parse(JSON.stringify(checkedFolderList)) if (checked) { // 选中 newCheckedFolderList.push(item) } else { // 取消 newCheckedFolderList = newCheckedFolderList.filter(i => i.preview_url !== item.preview_url) } setCheckedFolderList(newCheckedFolderList) }; return
{/* 搜索 */} { setSearchParams(value) }} /> {pageShowType === 'Kanban' ?
{ let newCheckedFolderList: any[] = JSON.parse(JSON.stringify(checkedFolderList)) const data: any[] = getRemoteMaterialList?.data?.records if (e.target.checked) { // 全选 newCheckedFolderList.push(...data) newCheckedFolderList = Array.from(new Set(newCheckedFolderList.map(item => JSON.stringify(item)))).map(item => JSON.parse(item)); } else { // 取消全选 const dataIds = data.map(item => item.preview_url) newCheckedFolderList = newCheckedFolderList.filter(i => !dataIds.includes(i.preview_url)) } setCheckedFolderList(newCheckedFolderList) }} indeterminate={indeterminateFolder} checked={checkFolderAll} >全选 已选 {checkedFolderList?.length || 0} 个素材 {checkedFolderList.length > 0 && setCheckedFolderList([])}>清除所有} {sortData?.sortField && 「排序-{showFieldList.find(item => item.field === sortData.sortField)?.label}-{sortData.sortType ? '正序' : '倒序'}」}
{checkedFolderList.length > 0 && }
展示指标}> (option?.label as any)?.toLowerCase().indexOf(input.toLowerCase()) >= 0 } options={showFieldList.filter(item => showField.includes(item.value)).map(item => ({ label: item.label, value: item.field }))} value={sortData.sortField} allowClear onChange={(value) => { setSortData({ ...sortData, sortField: value as any }) }} /> setSortData({ ...sortData, sortType: e.target.value })} buttonStyle="solid"> 正序 倒序
} trigger={['click']} title={自定义展示指标与排序} placement="bottomRight" >
{getRemoteMaterialList?.data?.records?.length > 0 ? item.preview_url)} style={{ width: '100%' }}>
{getRemoteMaterialList?.data?.records.map((item: any, index: number) => { const isSelect = checkedFolderList?.map(item => item.preview_url).includes(item.preview_url) return
onCheckboxChange(e.target.checked, item)} />
{item.source === 'video' ?
{(onPlay) => { e.stopPropagation(); e.preventDefault() onPlay() }} src={require('../../../../../public/image/play.png')} alt="" />}
:
{ e.stopPropagation() setPreviewData({ visible: true, url: item.preview_url }) }}> 预览
}
{item.width}*{item.height}
{item.source === 'video' && item.image_duration_millisecond &&
{formatSecondsToTime(Math.floor(item.image_duration_millisecond / 1000))}
}
} onClick={() => onCheckboxChange(!isSelect, item)} >
{item?.description} {formatBytes(item?.file_size)}
设计师
{item?.create_name || '--'}
{showFieldList.filter(f => showField.includes(f.value)).map(f => { return
{f.label}
{f?.isRate ? : }
})}
投手:{item.pitcher_name}
{ setMoveData({ visible: true, data: [item] }) } }] }}> e.preventDefault()} style={{ fontSize: 11 }}>更多
})}
:
}
{ ref.current?.scrollTo({ top: 0 }) setTimeout(() => setQueryParams({ ...queryParams, pageNum: page, pageSize }), 50) }} showTotal={(total: number) => 共 {total} 条} />
: } refreshAjax={getList} isZj totalData={totalData} config={columns12()} fixed={{ left: 1, right: 0 }} scroll={{ x: 1000, y: size1.height ? size1.height - 270 : 580 }} configName='云端素材' loading={getRemoteMaterialList.loading} ajax={getRemoteMaterialList} page={getRemoteMaterialList?.data?.current || 1} pageSize={getRemoteMaterialList?.data?.size || 20} total={getRemoteMaterialList?.data?.total || 0} dataSource={getRemoteMaterialList?.data?.records?.map((item: any, index: number) => ({ ...item, id: Number(queryParams.pageNum.toString() + (index + '')) }))} onChange={(pagination: any, _: any, sortData: any) => { let { current, pageSize } = pagination let newQueryForm = JSON.parse(JSON.stringify(queryParams)) if (sortData && sortData?.order) { newQueryForm['sortType'] = sortData?.order === 'ascend' ? true : false newQueryForm['sortField'] = sortData?.field } else { delete newQueryForm['sortType'] delete newQueryForm['sortField'] } newQueryForm.pageNum = current || newQueryForm.pageNum newQueryForm.pageSize = pageSize || newQueryForm.pageSize setQueryParams({ ...newQueryForm }) }} />} {/* 预览 */} {previewData.visible && { setPreviewData({ visible: false }) }, }} />} {/* 移动至 */} {moveData.visible && { setMoveData({ visible: false, data: [] }) }} onClose={() => { setMoveData({ visible: false, data: [] }) }} />} } export default Tencent