import { useState } from 'react'; import { Button, Form, Image, Input, InputNumber, Modal, Popconfirm, Select, Space, Table, Tag, Typography, message, } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import { request, type Paginated } from '../lib/api'; import { ADMIN_OPTIONS_PAGE_SIZE, MEDIA_TYPE_LABELS, fmtTime } from '../lib/constants'; import { useAdminList } from '../lib/useAdminList'; import OssUpload from '../components/OssUpload'; type Row = { id: string; mediaType: string; url: string; sortOrder: number; createdAt: string; store?: { id: string; name: string }; }; type StoreOption = { id: string; name: string }; export default function StoreMediaPage() { const [form] = Form.useForm(); const [editForm] = Form.useForm(); const [createForm] = Form.useForm(); const [filters, setFilters] = useState>({}); const { data, loading, page, pageSize, setPage, setPageSize, reload } = useAdminList( '/admin/store-media', () => { const qs = new URLSearchParams(); if (filters.storeId) qs.set('storeId', filters.storeId); if (filters.mediaType) qs.set('mediaType', filters.mediaType); return qs; }, [filters], ); const [createOpen, setCreateOpen] = useState(false); const [editOpen, setEditOpen] = useState(false); const [editing, setEditing] = useState(null); const [stores, setStores] = useState([]); async function loadStores() { const res = await request>(`/admin/stores?pageSize=${ADMIN_OPTIONS_PAGE_SIZE}`); setStores(res.items); } const columns: ColumnsType = [ { title: '门店', dataIndex: ['store', 'name'], width: 140 }, { title: '类型', dataIndex: 'mediaType', width: 80, render: (t) => {MEDIA_TYPE_LABELS[t] || t} }, { title: '预览', dataIndex: 'url', width: 100, render: (url, row) => row.mediaType === 'IMAGE' ? : 视频, }, { title: 'URL', dataIndex: 'url', ellipsis: true }, { title: '排序', dataIndex: 'sortOrder', width: 70 }, { title: '创建', dataIndex: 'createdAt', width: 160, render: fmtTime }, { title: '操作', width: 120, render: (_, row) => ( { await request(`/admin/store-media/${row.id}`, { method: 'DELETE' }); message.success('已删除'); void reload(); }}> ), }, ]; return (
门店资源
{ setFilters(v); setPage(1); }}> ({ value: s.id, label: s.name }))} /> ({ value, label }))} /> prev.mediaType !== cur.mediaType}> {({ getFieldValue }) => ( )}
); }