- SearchMedia 响应字段在 item.Video 嵌套对象中,修正字段映射 - endpoint 自动补充 https:// 协议前缀 - 移除状态筛选与日期范围筛选(VOD SearchMedia Match 语法不支持)
This commit is contained in:
@@ -5,11 +5,8 @@ import { decrypt } from '../utils/crypto';
|
||||
export interface SearchParams {
|
||||
keyword?: string;
|
||||
cateId?: number;
|
||||
status?: string;
|
||||
pageNo?: number;
|
||||
pageSize?: number;
|
||||
startTime?: string;
|
||||
endTime?: string;
|
||||
sortBy?: string;
|
||||
sortOrder?: 'Asc' | 'Desc';
|
||||
}
|
||||
@@ -22,7 +19,10 @@ export interface SearchResult {
|
||||
}
|
||||
|
||||
export function createVodClient(account: Account): RPCClient {
|
||||
const endpoint = account.endpoint || `vod.${account.region}.aliyuncs.com`;
|
||||
let endpoint = account.endpoint || `vod.${account.region}.aliyuncs.com`;
|
||||
if (!endpoint.startsWith('http://') && !endpoint.startsWith('https://')) {
|
||||
endpoint = `https://${endpoint}`;
|
||||
}
|
||||
return new RPCClient({
|
||||
accessKeyId: account.accessKeyId,
|
||||
accessKeySecret: decrypt(account.accessKeySecret),
|
||||
@@ -35,6 +35,10 @@ export async function searchMedia(client: RPCClient, params: SearchParams): Prom
|
||||
const requestParams: Record<string, unknown> = {
|
||||
PageNo: params.pageNo || 1,
|
||||
PageSize: Math.min(params.pageSize || 20, 100),
|
||||
SearchType: 'video',
|
||||
Fields: 'Title,CoverURL,CreationTime,Status,Duration,Size,CateId,CateName,Tags',
|
||||
SortBy: params.sortBy || 'CreationTime',
|
||||
SortOrder: params.sortOrder || 'Desc',
|
||||
};
|
||||
|
||||
const searchParams: string[] = [];
|
||||
@@ -44,20 +48,9 @@ export async function searchMedia(client: RPCClient, params: SearchParams): Prom
|
||||
if (params.cateId) {
|
||||
searchParams.push(`CateId=${params.cateId}`);
|
||||
}
|
||||
if (params.status) {
|
||||
searchParams.push(`Status='${params.status}'`);
|
||||
}
|
||||
if (params.startTime && params.endTime) {
|
||||
searchParams.push(`CreationTime>${params.startTime}`);
|
||||
searchParams.push(`CreationTime<${params.endTime}`);
|
||||
}
|
||||
|
||||
if (searchParams.length > 0) {
|
||||
requestParams.SearchType = 'video';
|
||||
requestParams.Fields = 'Title,CoverURL,CreationTime,Status,Duration,Size,CateId,CateName,Tags';
|
||||
requestParams.Match = searchParams.join(' and ');
|
||||
requestParams.SortBy = params.sortBy || 'CreationTime';
|
||||
requestParams.SortOrder = params.sortOrder || 'Desc';
|
||||
}
|
||||
|
||||
const action = 'SearchMedia';
|
||||
@@ -67,20 +60,23 @@ export async function searchMedia(client: RPCClient, params: SearchParams): Prom
|
||||
>;
|
||||
|
||||
const mediaListRaw = (response.MediaList as Record<string, unknown>[]) || [];
|
||||
const mediaList = mediaListRaw.map((item) => ({
|
||||
videoId: (item.VideoId || item.MediaId) as string,
|
||||
title: item.Title as string,
|
||||
description: item.Description as string,
|
||||
duration: item.Duration as number,
|
||||
size: item.Size as number,
|
||||
coverURL: item.CoverURL as string,
|
||||
status: item.Status as string,
|
||||
cateId: item.CateId as number,
|
||||
cateName: item.CateName as string,
|
||||
tags: item.Tags as string,
|
||||
creationTime: item.CreationTime as string,
|
||||
modificationTime: item.ModificationTime as string,
|
||||
}));
|
||||
const mediaList = mediaListRaw.map((item) => {
|
||||
const video = (item.Video as Record<string, unknown>) || {};
|
||||
return {
|
||||
videoId: (video.VideoId || item.MediaId) as string,
|
||||
title: video.Title as string,
|
||||
description: video.Description as string,
|
||||
duration: video.Duration as number,
|
||||
size: video.Size as number,
|
||||
coverURL: video.CoverURL as string,
|
||||
status: video.Status as string,
|
||||
cateId: video.CateId as number,
|
||||
cateName: video.CateName as string,
|
||||
tags: video.Tags as string,
|
||||
creationTime: (video.CreationTime || item.CreationTime) as string,
|
||||
modificationTime: video.ModificationTime as string,
|
||||
};
|
||||
});
|
||||
|
||||
return {
|
||||
total: (response.Total as number) || 0,
|
||||
|
||||
@@ -26,11 +26,8 @@ export interface PlayInfo {
|
||||
export interface SearchParams {
|
||||
keyword?: string;
|
||||
cateId?: number;
|
||||
status?: string;
|
||||
pageNo?: number;
|
||||
pageSize?: number;
|
||||
startTime?: string;
|
||||
endTime?: string;
|
||||
sortBy?: string;
|
||||
sortOrder?: 'Asc' | 'Desc';
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ import {
|
||||
Space,
|
||||
Form,
|
||||
Select,
|
||||
DatePicker,
|
||||
message,
|
||||
Modal,
|
||||
Drawer,
|
||||
@@ -21,7 +20,6 @@ import { searchVideos, batchDelete, batchDownload, VideoItem, DownloadResult } f
|
||||
import { listCategories } from '../api/categories';
|
||||
import { useAuthStore } from '../store/auth';
|
||||
|
||||
const { RangePicker } = DatePicker;
|
||||
const { Text } = Typography;
|
||||
|
||||
const formatDuration = (seconds?: number) => {
|
||||
@@ -68,11 +66,6 @@ export default function VideosPage() {
|
||||
|
||||
if (values.keyword) query.keyword = values.keyword;
|
||||
if (values.cateId) query.cateId = values.cateId;
|
||||
if (values.status) query.status = values.status;
|
||||
if (values.dateRange?.[0] && values.dateRange?.[1]) {
|
||||
query.startTime = values.dateRange[0].toISOString();
|
||||
query.endTime = values.dateRange[1].toISOString();
|
||||
}
|
||||
|
||||
const result = await searchVideos(query);
|
||||
setVideos(result.videos);
|
||||
@@ -230,18 +223,6 @@ export default function VideosPage() {
|
||||
))}
|
||||
</Select>
|
||||
</Form.Item>
|
||||
<Form.Item name="status">
|
||||
<Select placeholder="状态" allowClear style={{ width: 120 }}>
|
||||
<Select.Option value="Normal">正常</Select.Option>
|
||||
<Select.Option value="Uploading">上传中</Select.Option>
|
||||
<Select.Option value="Transcoding">转码中</Select.Option>
|
||||
<Select.Option value="Checking">审核中</Select.Option>
|
||||
<Select.Option value="Blocked">屏蔽</Select.Option>
|
||||
</Select>
|
||||
</Form.Item>
|
||||
<Form.Item name="dateRange">
|
||||
<RangePicker showTime />
|
||||
</Form.Item>
|
||||
<Form.Item>
|
||||
<Button type="primary" onClick={handleSearch}>
|
||||
查询
|
||||
|
||||
Reference in New Issue
Block a user