feat(admin): album management pages with members and categories
Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -232,7 +232,8 @@
|
||||
},
|
||||
"albums": {
|
||||
"title": "Albums",
|
||||
"manage": "Album Management"
|
||||
"manage": "Album Management",
|
||||
"detail": "Album Detail"
|
||||
}
|
||||
},
|
||||
"table": {
|
||||
@@ -264,11 +265,186 @@
|
||||
"headerBackground": "Header BG"
|
||||
},
|
||||
"albumsManage": {
|
||||
"placeholder": "Album management is under construction (list/upload/member management arrive in later P1b tasks)"
|
||||
"list": {
|
||||
"title": "Album List",
|
||||
"create": "New Album",
|
||||
"loadMore": "Load More",
|
||||
"noMore": "All loaded",
|
||||
"empty": "No albums yet — click \"New Album\" to create one",
|
||||
"loadFailed": "Failed to load albums",
|
||||
"retry": "Retry",
|
||||
"colTitle": "Title",
|
||||
"colToken": "Public Token",
|
||||
"colStatus": "Status",
|
||||
"colSwitches": "Switches",
|
||||
"colStartAt": "Start",
|
||||
"colEndAt": "End",
|
||||
"colActions": "Actions",
|
||||
"copyToken": "Copy public token",
|
||||
"copied": "Copied",
|
||||
"statusActive": "Active",
|
||||
"statusOffline": "Offline",
|
||||
"switchUpload": "Upload",
|
||||
"switchPublic": "Public",
|
||||
"switchDownload": "Download",
|
||||
"switchOriginal": "Original",
|
||||
"on": "On",
|
||||
"off": "Off",
|
||||
"actionEdit": "Edit",
|
||||
"actionMembers": "Members",
|
||||
"actionDetail": "Detail",
|
||||
"endAtUndecided": "TBD"
|
||||
},
|
||||
"form": {
|
||||
"createTitle": "New Album",
|
||||
"editTitle": "Edit Album",
|
||||
"tabZh": "Chinese (zh-CN)",
|
||||
"tabEn": "English (en)",
|
||||
"fieldTitle": "Title",
|
||||
"fieldDescription": "Description",
|
||||
"fieldVenue": "Venue",
|
||||
"fieldAddress": "Address",
|
||||
"fieldDefaultLocale": "Default Locale",
|
||||
"fieldStartAt": "Start Time",
|
||||
"fieldEndAt": "End Time",
|
||||
"fieldTimezone": "Timezone (IANA)",
|
||||
"fieldSwitches": "Switches",
|
||||
"switchUpload": "Allow uploads",
|
||||
"switchPublic": "Publicly visible",
|
||||
"switchDownload": "Allow download (browse)",
|
||||
"switchOriginal": "Allow original download",
|
||||
"translationsReplaceHint": "Saving fully replaces all translations: entries without a title will be removed, and the default locale entry is required.",
|
||||
"createSuccess": "Album created",
|
||||
"updateSuccess": "Album updated",
|
||||
"submit": "Save",
|
||||
"cancel": "Cancel",
|
||||
"errors": {
|
||||
"startAtRequired": "Start time is required",
|
||||
"defaultLocaleMissing": "Title for the default locale ({locale}) is required",
|
||||
"titleRequired": "Title is required",
|
||||
"titleRequiredWithFields": "Title is required when other fields of this locale are filled",
|
||||
"endAtNotAfterStartAt": "End time must be later than start time"
|
||||
}
|
||||
},
|
||||
"detail": {
|
||||
"back": "Back to List",
|
||||
"edit": "Edit Album",
|
||||
"basicInfo": "Basic Info",
|
||||
"banner": "Banner",
|
||||
"tabPhotos": "Photos",
|
||||
"tabMembers": "Members",
|
||||
"tabCategories": "Categories",
|
||||
"loadFailed": "Failed to load album",
|
||||
"retry": "Retry",
|
||||
"fieldTitle": "Title",
|
||||
"fieldToken": "Public Token",
|
||||
"fieldStatus": "Status",
|
||||
"fieldTimezone": "Timezone",
|
||||
"fieldStartAt": "Start",
|
||||
"fieldEndAt": "End",
|
||||
"fieldCreatedAt": "Created",
|
||||
"fieldUpdatedAt": "Updated"
|
||||
},
|
||||
"banner": {
|
||||
"kind": "Asset Kind",
|
||||
"kindBanner": "Banner",
|
||||
"kindCover": "Cover",
|
||||
"kindLogo": "Logo",
|
||||
"locale": "Locale (optional)",
|
||||
"localeNone": "Locale-independent",
|
||||
"pick": "Choose Image",
|
||||
"pickHint": "jpg / png / heic — uploaded directly to object storage, then verified",
|
||||
"stageInitializing": "Initializing upload session…",
|
||||
"stageUploading": "Uploading…",
|
||||
"stageCompleting": "Verifying…",
|
||||
"stageDone": "Effective",
|
||||
"stageError": "Upload failed",
|
||||
"reupload": "Upload Again",
|
||||
"preview": "Preview (signed URL, valid until {expiresAt})",
|
||||
"invalidType": "Only jpg / png / heic images are supported"
|
||||
},
|
||||
"members": {
|
||||
"title": "Album Members",
|
||||
"searchPlaceholder": "Type an account prefix (min 2 chars) to search",
|
||||
"searching": "Searching…",
|
||||
"noMatch": "No matching account",
|
||||
"invite": "Invite",
|
||||
"invited": "Member added",
|
||||
"removed": "Member removed",
|
||||
"removeConfirm": "Remove member \"{account}\"?",
|
||||
"colAccount": "Account",
|
||||
"colDisplayName": "Name",
|
||||
"colRole": "Role",
|
||||
"colActions": "Actions",
|
||||
"roleOwner": "Owner",
|
||||
"roleCollaborator": "Collaborator",
|
||||
"remove": "Remove",
|
||||
"empty": "No members"
|
||||
},
|
||||
"categories": {
|
||||
"title": "Categories",
|
||||
"create": "New Category",
|
||||
"edit": "Edit Category",
|
||||
"colSort": "Sort",
|
||||
"colZh": "Chinese Name",
|
||||
"colEn": "English Name",
|
||||
"colActions": "Actions",
|
||||
"fieldSort": "Sort Order (ascending)",
|
||||
"fieldNameZh": "Chinese Name",
|
||||
"fieldNameEn": "English Name",
|
||||
"nameRequired": "At least one locale name is required",
|
||||
"delete": "Delete",
|
||||
"createSuccess": "Category created",
|
||||
"updateSuccess": "Category updated",
|
||||
"deleteConfirm": "Delete category \"{name}\"?",
|
||||
"deleteSuccess": "Category deleted",
|
||||
"empty": "No categories",
|
||||
"submit": "Save",
|
||||
"cancel": "Cancel"
|
||||
},
|
||||
"photos": {
|
||||
"title": "Photo Management",
|
||||
"filterVisibility": "Visibility",
|
||||
"visibilityAll": "All",
|
||||
"filterCategory": "Category",
|
||||
"categoryAll": "All Categories",
|
||||
"uncategorized": "Uncategorized",
|
||||
"colState": "State",
|
||||
"colVisibility": "Visibility",
|
||||
"colSize": "Size",
|
||||
"colUploader": "Uploader",
|
||||
"colUploadedAt": "Uploaded",
|
||||
"colActions": "Actions",
|
||||
"statePendingUpload": "Pending Upload",
|
||||
"stateUploaded": "Uploaded",
|
||||
"stateProcessing": "Processing",
|
||||
"stateReady": "Ready",
|
||||
"stateProcessingFailed": "Processing Failed",
|
||||
"visibilityUnpublished": "Unpublished",
|
||||
"visibilityPublished": "Published",
|
||||
"visibilityHidden": "Hidden",
|
||||
"visibilityDeleted": "Deleted",
|
||||
"hide": "Hide",
|
||||
"restore": "Restore",
|
||||
"delete": "Delete",
|
||||
"hideConfirm": "Hide this photo? It becomes invisible to the public immediately.",
|
||||
"restoreConfirm": "Restore this photo to public?",
|
||||
"deleteConfirm": "Delete this photo? (soft delete, cannot be restored here)",
|
||||
"hidden": "Photo hidden",
|
||||
"restored": "Photo restored",
|
||||
"deleted": "Photo deleted",
|
||||
"empty": "No photos"
|
||||
}
|
||||
},
|
||||
"apiMsg": {
|
||||
"AUTH_INVALID_CREDENTIALS": "Invalid account or password",
|
||||
"AUTH_RATE_LIMITED": "Too many failed login attempts; try again later",
|
||||
"VALIDATION_FAILED": "Request validation failed"
|
||||
"VALIDATION_FAILED": "Request validation failed",
|
||||
"MEMBER_CONFLICT": "This user is already a member",
|
||||
"ALBUM_NOT_FOUND": "Album not found or not visible",
|
||||
"PHOTO_NOT_FOUND": "Photo not found",
|
||||
"UPLOAD_VERIFY_FAILED": "Upload verification failed, please retry",
|
||||
"UPLOAD_SESSION_CONFLICT": "Upload session conflict, please start over",
|
||||
"ALBUM_UPLOAD_DISABLED": "Upload is disabled for this album"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -232,7 +232,8 @@
|
||||
},
|
||||
"albums": {
|
||||
"title": "相册管理",
|
||||
"manage": "相册管理"
|
||||
"manage": "相册管理",
|
||||
"detail": "相册详情"
|
||||
}
|
||||
},
|
||||
"table": {
|
||||
@@ -264,11 +265,186 @@
|
||||
"headerBackground": "表头背景"
|
||||
},
|
||||
"albumsManage": {
|
||||
"placeholder": "相册管理功能建设中(P1b 后续任务接入列表/上传/成员管理)"
|
||||
"list": {
|
||||
"title": "相册列表",
|
||||
"create": "新建相册",
|
||||
"loadMore": "加载更多",
|
||||
"noMore": "已全部加载",
|
||||
"empty": "暂无相册,点击「新建相册」创建",
|
||||
"loadFailed": "列表加载失败",
|
||||
"retry": "重试",
|
||||
"colTitle": "标题",
|
||||
"colToken": "公开令牌",
|
||||
"colStatus": "状态",
|
||||
"colSwitches": "功能开关",
|
||||
"colStartAt": "开始时间",
|
||||
"colEndAt": "结束时间",
|
||||
"colActions": "操作",
|
||||
"copyToken": "复制公开令牌",
|
||||
"copied": "已复制",
|
||||
"statusActive": "活跃",
|
||||
"statusOffline": "下线",
|
||||
"switchUpload": "上传",
|
||||
"switchPublic": "公开",
|
||||
"switchDownload": "下载",
|
||||
"switchOriginal": "原图",
|
||||
"on": "开",
|
||||
"off": "关",
|
||||
"actionEdit": "编辑",
|
||||
"actionMembers": "成员",
|
||||
"actionDetail": "详情",
|
||||
"endAtUndecided": "未定"
|
||||
},
|
||||
"form": {
|
||||
"createTitle": "新建相册",
|
||||
"editTitle": "编辑相册",
|
||||
"tabZh": "中文(zh-CN)",
|
||||
"tabEn": "英文(en)",
|
||||
"fieldTitle": "标题",
|
||||
"fieldDescription": "描述",
|
||||
"fieldVenue": "场地名称",
|
||||
"fieldAddress": "场地地址",
|
||||
"fieldDefaultLocale": "默认语言",
|
||||
"fieldStartAt": "开始时间",
|
||||
"fieldEndAt": "结束时间",
|
||||
"fieldTimezone": "时区(IANA)",
|
||||
"fieldSwitches": "功能开关",
|
||||
"switchUpload": "允许上传",
|
||||
"switchPublic": "公开可见",
|
||||
"switchDownload": "允许下载浏览版",
|
||||
"switchOriginal": "允许下载原图",
|
||||
"translationsReplaceHint": "保存将全量替换多语言内容:未填标题的语言条目会被移除,且必须保留默认语言条目。",
|
||||
"createSuccess": "相册已创建",
|
||||
"updateSuccess": "相册已更新",
|
||||
"submit": "保存",
|
||||
"cancel": "取消",
|
||||
"errors": {
|
||||
"startAtRequired": "开始时间必填",
|
||||
"defaultLocaleMissing": "默认语言({locale})的标题必填",
|
||||
"titleRequired": "标题必填",
|
||||
"titleRequiredWithFields": "该语言已填写其他字段,标题也必填",
|
||||
"endAtNotAfterStartAt": "结束时间必须晚于开始时间"
|
||||
}
|
||||
},
|
||||
"detail": {
|
||||
"back": "返回列表",
|
||||
"edit": "编辑相册",
|
||||
"basicInfo": "基础信息",
|
||||
"banner": "宣传图(Banner)",
|
||||
"tabPhotos": "照片管理",
|
||||
"tabMembers": "成员管理",
|
||||
"tabCategories": "分类管理",
|
||||
"loadFailed": "相册加载失败",
|
||||
"retry": "重试",
|
||||
"fieldTitle": "标题",
|
||||
"fieldToken": "公开令牌",
|
||||
"fieldStatus": "状态",
|
||||
"fieldTimezone": "时区",
|
||||
"fieldStartAt": "开始时间",
|
||||
"fieldEndAt": "结束时间",
|
||||
"fieldCreatedAt": "创建时间",
|
||||
"fieldUpdatedAt": "更新时间"
|
||||
},
|
||||
"banner": {
|
||||
"kind": "资产类型",
|
||||
"kindBanner": "宣传图(banner)",
|
||||
"kindCover": "封面(cover)",
|
||||
"kindLogo": "Logo",
|
||||
"locale": "语言(可选)",
|
||||
"localeNone": "语言无关",
|
||||
"pick": "选择图片",
|
||||
"pickHint": "jpg / png / heic,直传对象存储后核验生效",
|
||||
"stageInitializing": "初始化上传会话…",
|
||||
"stageUploading": "上传中…",
|
||||
"stageCompleting": "核验中…",
|
||||
"stageDone": "已生效",
|
||||
"stageError": "上传失败",
|
||||
"reupload": "重新上传",
|
||||
"preview": "当前预览(签名 URL,{expiresAt} 前有效)",
|
||||
"invalidType": "仅支持 jpg / png / heic 图片"
|
||||
},
|
||||
"members": {
|
||||
"title": "相册成员",
|
||||
"searchPlaceholder": "输入账号前缀(至少 2 字符)搜索",
|
||||
"searching": "搜索中…",
|
||||
"noMatch": "无匹配账号",
|
||||
"invite": "邀请",
|
||||
"invited": "成员已添加",
|
||||
"removed": "成员已移除",
|
||||
"removeConfirm": "确定移除成员「{account}」?",
|
||||
"colAccount": "账号",
|
||||
"colDisplayName": "姓名",
|
||||
"colRole": "角色",
|
||||
"colActions": "操作",
|
||||
"roleOwner": "创建者",
|
||||
"roleCollaborator": "协作者",
|
||||
"remove": "移除",
|
||||
"empty": "暂无成员"
|
||||
},
|
||||
"categories": {
|
||||
"title": "分类管理",
|
||||
"create": "新建分类",
|
||||
"edit": "编辑分类",
|
||||
"colSort": "排序",
|
||||
"colZh": "中文名",
|
||||
"colEn": "英文名",
|
||||
"colActions": "操作",
|
||||
"fieldSort": "排序序号(升序)",
|
||||
"fieldNameZh": "中文名",
|
||||
"fieldNameEn": "英文名",
|
||||
"nameRequired": "至少填写一个语言的名称",
|
||||
"delete": "删除",
|
||||
"createSuccess": "分类已创建",
|
||||
"updateSuccess": "分类已更新",
|
||||
"deleteConfirm": "确定删除分类「{name}」?",
|
||||
"deleteSuccess": "分类已删除",
|
||||
"empty": "暂无分类",
|
||||
"submit": "保存",
|
||||
"cancel": "取消"
|
||||
},
|
||||
"photos": {
|
||||
"title": "照片管理",
|
||||
"filterVisibility": "可见性",
|
||||
"visibilityAll": "全部",
|
||||
"filterCategory": "分类",
|
||||
"categoryAll": "全部分类",
|
||||
"uncategorized": "未分类",
|
||||
"colState": "处理状态",
|
||||
"colVisibility": "可见性",
|
||||
"colSize": "尺寸/大小",
|
||||
"colUploader": "上传人",
|
||||
"colUploadedAt": "上传时间",
|
||||
"colActions": "操作",
|
||||
"statePendingUpload": "待上传",
|
||||
"stateUploaded": "已上传",
|
||||
"stateProcessing": "处理中",
|
||||
"stateReady": "就绪",
|
||||
"stateProcessingFailed": "处理失败",
|
||||
"visibilityUnpublished": "未发布",
|
||||
"visibilityPublished": "已发布",
|
||||
"visibilityHidden": "已隐藏",
|
||||
"visibilityDeleted": "已删除",
|
||||
"hide": "隐藏",
|
||||
"restore": "恢复发布",
|
||||
"delete": "删除",
|
||||
"hideConfirm": "确定隐藏该照片?隐藏后公开端即刻不可见。",
|
||||
"restoreConfirm": "确定恢复发布该照片?",
|
||||
"deleteConfirm": "确定删除该照片?(软删除,管理端不可恢复)",
|
||||
"hidden": "照片已隐藏",
|
||||
"restored": "照片已恢复发布",
|
||||
"deleted": "照片已删除",
|
||||
"empty": "暂无照片"
|
||||
}
|
||||
},
|
||||
"apiMsg": {
|
||||
"AUTH_INVALID_CREDENTIALS": "账号或密码错误",
|
||||
"AUTH_RATE_LIMITED": "登录失败次数过多,请稍后再试",
|
||||
"VALIDATION_FAILED": "请求参数校验失败"
|
||||
"VALIDATION_FAILED": "请求参数校验失败",
|
||||
"MEMBER_CONFLICT": "该用户已是相册成员",
|
||||
"ALBUM_NOT_FOUND": "相册不存在或不可见",
|
||||
"PHOTO_NOT_FOUND": "照片不存在",
|
||||
"UPLOAD_VERIFY_FAILED": "上传核验失败,请重试",
|
||||
"UPLOAD_SESSION_CONFLICT": "上传会话状态冲突,请重新开始",
|
||||
"ALBUM_UPLOAD_DISABLED": "该相册已关闭上传"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user