diff --git a/src/app/(payload)/admin/importMap.js b/src/app/(payload)/admin/importMap.js index 6be7a0d..25424a7 100644 --- a/src/app/(payload)/admin/importMap.js +++ b/src/app/(payload)/admin/importMap.js @@ -1,3 +1,5 @@ +import { ThumbnailCell as ThumbnailCell_a0b2acb813359aec894b6644d7c3bfd2 } from '../../../components/products/ThumbnailCell' +import { ThumbnailAndStatusField as ThumbnailAndStatusField_8fa95ec6265982d11b99fbeb81e24c1c } from '../../../components/products/ThumbnailAndStatusField' import { SyncMedusaButton as SyncMedusaButton_8c90663551920f0510ea531726668adc } from '../../../components/products/SyncMedusaButton' import { default as default_3fd1353246fc8a459244c8dc11f58470 } from '../../../components/products/ProductGridStyler' import { ForceSyncButton as ForceSyncButton_86f9d5df4f20495427521354d06db618 } from '../../../components/products/ForceSyncButton' @@ -5,6 +7,8 @@ import { S3ClientUploadHandler as S3ClientUploadHandler_f97aa6c64367fa259c5bc056 import { CollectionCards as CollectionCards_f9c02e79a4aed9a3924487c0cd4cafb1 } from '@payloadcms/next/rsc' export const importMap = { + "/components/products/ThumbnailCell#ThumbnailCell": ThumbnailCell_a0b2acb813359aec894b6644d7c3bfd2, + "/components/products/ThumbnailAndStatusField#ThumbnailAndStatusField": ThumbnailAndStatusField_8fa95ec6265982d11b99fbeb81e24c1c, "/components/products/SyncMedusaButton#SyncMedusaButton": SyncMedusaButton_8c90663551920f0510ea531726668adc, "/components/products/ProductGridStyler#default": default_3fd1353246fc8a459244c8dc11f58470, "/components/products/ForceSyncButton#ForceSyncButton": ForceSyncButton_86f9d5df4f20495427521354d06db618, diff --git a/src/collections/Products.ts b/src/collections/Products.ts index d10eedd..7e5b423 100644 --- a/src/collections/Products.ts +++ b/src/collections/Products.ts @@ -8,7 +8,7 @@ export const Products: CollectionConfig = { description: '管理 Medusa 商品的详细内容和描述', listSearchableFields: ['title', 'medusaId', 'handle'], pagination: { - defaultLimit: 48, + defaultLimit: 25, }, components: { edit: { @@ -57,6 +57,10 @@ export const Products: CollectionConfig = { admin: { description: '商品缩略图 URL(从 Medusa 同步)', readOnly: true, + components: { + Cell: '/components/products/ThumbnailCell#ThumbnailCell', + Field: '/components/products/ThumbnailAndStatusField#ThumbnailAndStatusField', + }, }, }, { diff --git a/src/components/products/HiddenField.tsx b/src/components/products/HiddenField.tsx new file mode 100644 index 0000000..acb12bc --- /dev/null +++ b/src/components/products/HiddenField.tsx @@ -0,0 +1,7 @@ +'use client' +import type { SelectFieldClientComponent } from 'payload' + +// 隐藏字段(因为在ThumbnailAndStatusField中已经显示和编辑) +export const HiddenField: SelectFieldClientComponent = () => { + return null +} diff --git a/src/components/products/ThumbnailAndStatusField.tsx b/src/components/products/ThumbnailAndStatusField.tsx new file mode 100644 index 0000000..4e030a1 --- /dev/null +++ b/src/components/products/ThumbnailAndStatusField.tsx @@ -0,0 +1,60 @@ +'use client' +import { useFormFields, useField } from '@payloadcms/ui' +import type { TextFieldClientComponent } from 'payload' + +// 并排显示缩略图和状态(带状态选择器) +export const ThumbnailAndStatusField: TextFieldClientComponent = ({ path }) => { + // 获取thumbnail值 + const fields = useFormFields(([fields]) => fields) + const thumbnail = fields.thumbnail?.value + + // 获取status字段的值和setter + const { value: status, setValue: setStatus } = useField({ path: 'status' }) + + const isImage = typeof thumbnail === 'string' && thumbnail.match(/^https?:\/\/.+/) + + return ( +