gbmake-payload/src/payload.config.ts

91 lines
3.1 KiB
TypeScript

import { postgresAdapter } from '@payloadcms/db-postgres'
import { lexicalEditor } from '@payloadcms/richtext-lexical'
import path from 'path'
import { buildConfig } from 'payload'
import { fileURLToPath } from 'url'
import sharp from 'sharp'
import { Users } from './collections/Users'
import { Media } from './collections/Media'
import { Products } from './collections/Products'
import { PreorderProducts } from './collections/PreorderProducts'
import { Announcements } from './collections/Announcements'
import { Articles } from './collections/Articles'
import { Logs } from './collections/Logs'
import { DisassemblyPages } from './collections/disassembly/DisassemblyPages'
import { DisassemblyComponents } from './collections/disassembly/DisassemblyComponents'
import { DisassemblyLinkedProducts } from './collections/disassembly/DisassemblyLinkedProducts'
import { AdminSettings } from './globals/AdminSettings'
import { LogsManager } from './globals/LogsManager'
import { HeroSlider } from './globals/HeroSlider'
import { ProductRecommendations } from './globals/ProductRecommendations'
import { SiteAccess } from './globals/SiteAccess'
import { s3Storage } from '@payloadcms/storage-s3'
import { en } from '@payloadcms/translations/languages/en'
import { zh } from '@payloadcms/translations/languages/zh'
// 导入自定义翻译
import enProducts from './translations/en/products.json'
import zhProducts from './translations/zh/products.json'
const filename = fileURLToPath(import.meta.url)
const dirname = path.dirname(filename)
export default buildConfig({
admin: {
user: Users.slug,
importMap: {
baseDir: path.resolve(dirname),
},
},
i18n: {
supportedLanguages: {
en: {
...en,
...enProducts,
},
zh: {
...zh,
...zhProducts,
},
},
fallbackLanguage: 'zh',
},
collections: [Users, Media, Products, PreorderProducts, Announcements, Articles, Logs, DisassemblyPages, DisassemblyComponents, DisassemblyLinkedProducts],
globals: [AdminSettings, LogsManager, HeroSlider, ProductRecommendations, SiteAccess],
editor: lexicalEditor(),
secret: process.env.PAYLOAD_SECRET || '',
typescript: {
outputFile: path.resolve(dirname, 'payload-types.ts'),
},
db: postgresAdapter({
pool: {
connectionString: process.env.DATABASE_URL || '',
},
migrationDir: path.resolve(dirname, 'migrations'),
}),
sharp,
plugins: [
// Cloudflare R2 Storage via S3 API
s3Storage({
collections: {
media: {
disableLocalStorage: true,
generateFileURL: ({ filename }) => {
return `${process.env.CLOUDFLARE_R2_PUBLIC_URL}/${filename}`
},
},
},
bucket: process.env.CLOUDFLARE_R2_BUCKET || '',
config: {
credentials: {
accessKeyId: process.env.CLOUDFLARE_R2_ACCESS_KEY_ID || '',
secretAccessKey: process.env.CLOUDFLARE_R2_SECRET_ACCESS_KEY || '',
},
region: process.env.CLOUDFLARE_R2_REGION || 'auto',
endpoint: process.env.CLOUDFLARE_R2_ENDPOINT || '',
},
}),
],
})