diff --git a/apps/shop-admin/app.vue b/apps/shop-admin/app.vue index 282b631..664ddb0 100644 --- a/apps/shop-admin/app.vue +++ b/apps/shop-admin/app.vue @@ -27,6 +27,7 @@ watchEffect(() => { {{ $t("nav.invoices") }} {{ $t("nav.coupons") }} {{ $t("nav.flashSales") }} + {{ $t("nav.groupBuying") }}
diff --git a/apps/shop-admin/locales-extra.ts b/apps/shop-admin/locales-extra.ts index de47042..d4d4e30 100644 --- a/apps/shop-admin/locales-extra.ts +++ b/apps/shop-admin/locales-extra.ts @@ -7,6 +7,7 @@ export const enExtra = { nav: { coupons: "Coupons", flashSales: "Flash sales", + groupBuying: "Group buying", }, shop: { dashboardTitle: "Merchant dashboard", @@ -117,6 +118,33 @@ export const enExtra = { flashStockInvalid: "Reserved stock cannot be negative.", flashLimitInvalid: "Per-customer limit must be a positive integer.", flashWindowInvalid: "End must not precede start.", + groupBuyingList: "Group buying", + newGroupActivity: "New activity", + editGroupActivity: "Edit activity", + groupNameEn: "Name (English)", + groupNameZh: "Name (中文)", + groupDescriptionEn: "Description (English)", + groupDescriptionZh: "Description (中文)", + groupSku: "SKU", + groupPrice: "Group price (minor units)", + groupRequiredMembers: "Required paid members", + groupLifetimeHours: "Group lifetime (hours)", + groupStartsAt: "Starts at", + groupEndsAt: "Ends at", + groupEnabled: "Enabled", + createGroupActivity: "Create activity", + updateGroupActivity: "Update activity", + groupActivitySaved: "Activity saved.", + groupOpenGroups: "Open groups", + groupNoOpenGroups: "No open groups.", + groupPaidMembers: "Joined", + groupExpiresAt: "Expires", + groupNameRequired: "Both language names are required.", + groupSkuRequired: "Choose a SKU.", + groupPriceInvalid: "Group price must be a positive integer.", + groupMembersInvalid: "At least two paid members are required.", + groupLifetimeInvalid: "Group lifetime must be a positive number of hours.", + groupWindowInvalid: "End must not precede start.", }, } as Record; @@ -127,6 +155,7 @@ export const zhExtra = { nav: { coupons: "优惠券", flashSales: "秒杀", + groupBuying: "拼团", }, shop: { dashboardTitle: "商家仪表盘", @@ -237,5 +266,32 @@ export const zhExtra = { flashStockInvalid: "活动库存不能为负数。", flashLimitInvalid: "每人限购必须为正整数。", flashWindowInvalid: "结束时间不能早于开始时间。", + groupBuyingList: "拼团活动", + newGroupActivity: "新建活动", + editGroupActivity: "编辑活动", + groupNameEn: "名称(英文)", + groupNameZh: "名称(中文)", + groupDescriptionEn: "描述(英文)", + groupDescriptionZh: "描述(中文)", + groupSku: "SKU", + groupPrice: "拼团价(最小单位)", + groupRequiredMembers: "成团人数", + groupLifetimeHours: "团有效期(小时)", + groupStartsAt: "开始时间", + groupEndsAt: "结束时间", + groupEnabled: "启用", + createGroupActivity: "创建活动", + updateGroupActivity: "更新活动", + groupActivitySaved: "活动已保存。", + groupOpenGroups: "进行中的团", + groupNoOpenGroups: "暂无进行中的团。", + groupPaidMembers: "已参团", + groupExpiresAt: "到期", + groupNameRequired: "中英文名称均为必填项。", + groupSkuRequired: "请选择 SKU。", + groupPriceInvalid: "拼团价必须为正整数。", + groupMembersInvalid: "成团人数至少为 2。", + groupLifetimeInvalid: "团有效期必须为正数小时。", + groupWindowInvalid: "结束时间不能早于开始时间。", }, } as Record; diff --git a/apps/shop-admin/pages/group-buying.vue b/apps/shop-admin/pages/group-buying.vue new file mode 100644 index 0000000..6104fe9 --- /dev/null +++ b/apps/shop-admin/pages/group-buying.vue @@ -0,0 +1,356 @@ + + + + +