import type { CollectionConfig } from 'payload' import { logAfterChange, logAfterDelete } from '../../hooks/logAction' import { cacheAfterChange, cacheAfterDelete } from '../../hooks/cacheInvalidation' /** * 第二层 - 拆解区域 * * 位于拆解页(DisassemblyPages)与拆解组件(DisassemblyComponents)之间。 * 每个区域拥有独立的装配主图(区域总览图)和所属组件列表。 * * 完整数据层级: * DisassemblyPages (第一层 — 拆解页) * └─ DisassemblyAreas (第二层 — 拆解区域) ← 本集合 * └─ DisassemblyComponents (第三层 — 拆解组件) * └─ DisassemblyLinkedProducts (第四层 — 关联商品) * * 区域预览:编辑页底部内嵌 DisassemblyAreaViewer(ui 字段), * 以 DisassemblyPages.html 的工业草稿风格展示装配主图 + 组件节点。 */ export const DisassemblyAreas: CollectionConfig = { slug: 'disassembly-areas', admin: { useAsTitle: 'name', hidden: true, description: '拆解页的区域层(仅通过可视化编辑器管理)', defaultColumns: ['name', 'page', 'updatedAt'], pagination: { defaultLimit: 50, }, }, access: { read: () => true, create: ({ req: { user } }) => !!user, update: ({ req: { user } }) => !!user, delete: ({ req: { user } }) => !!user, }, hooks: { afterChange: [logAfterChange, cacheAfterChange], afterDelete: [logAfterDelete, cacheAfterDelete], }, fields: [ // 区域名称 { name: 'name', label: '区域名称', type: 'text', required: true, admin: { description: '例如:主板区域、上盖区域、按键组', }, }, // 所属拆解页 { name: 'page', label: '所属拆解页', type: 'relationship', relationTo: 'disassembly-pages', required: true, admin: { description: '该区域归属的顶层拆解页(如 GBA、GBC)', }, }, // 装配大图(在预览中显示于中央) { name: 'mainImage', label: '装配大图', type: 'upload', relationTo: 'media', admin: { description: '该区域的整体装配图,在区域预览中显示于中央(大图)', }, }, // 缩略小图(在列表预览卡片中使用) { name: 'thumbnailImage', label: '缩略小图', type: 'upload', relationTo: 'media', admin: { description: '该区域的缩略图,用于列表预览卡片(小图)', }, }, // 拆解组件列表(第三层) { name: 'components', label: '拆解组件', type: 'relationship', relationTo: 'disassembly-components', hasMany: true, }, ], }