From 9f04b8e34bcdc504d1b7735b84680ab25b53fe9e Mon Sep 17 00:00:00 2001
From: zhangshuai <17275882479@163.com>
Date: Fri, 20 Oct 2023 20:51:18 +0800
Subject: [PATCH] =?UTF-8?q?=E9=99=90=E6=97=B6=E6=8A=98=E6=89=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
(cherry picked from commit 9f77514c17cc5a45726db905d1c415948cce1a6e)
---
.../promotion/discount/discountActivity.ts | 60 +++++
.../discountActivity/DiscountActivityForm.vue | 175 +++++++++++++
.../discountActivity/discountActivity.data.ts | 118 +++++++++
.../mall/promotion/discountActivity/index.vue | 237 ++++++++++++++++++
4 files changed, 590 insertions(+)
create mode 100644 src/api/mall/promotion/discount/discountActivity.ts
create mode 100644 src/views/mall/promotion/discountActivity/DiscountActivityForm.vue
create mode 100644 src/views/mall/promotion/discountActivity/discountActivity.data.ts
create mode 100644 src/views/mall/promotion/discountActivity/index.vue
diff --git a/src/api/mall/promotion/discount/discountActivity.ts b/src/api/mall/promotion/discount/discountActivity.ts
new file mode 100644
index 00000000..e755c1bd
--- /dev/null
+++ b/src/api/mall/promotion/discount/discountActivity.ts
@@ -0,0 +1,60 @@
+import request from '@/config/axios'
+import { Sku, Spu } from '@/api/mall/product/spu'
+
+export interface DiscountActivityVO {
+ id?: number
+ spuId?: number
+ name?: string
+ status?: number
+ remark?: string
+ startTime?: Date
+ endTime?: Date
+ products?: DiscountProductVO[]
+}
+// 限时折扣相关 属性
+export interface DiscountProductVO {
+ spuId: number
+ skuId: number
+ discountType: number
+ discountPercent: number
+ discountPrice: number
+}
+
+// 扩展 Sku 配置
+export type SkuExtension = Sku & {
+ productConfig: DiscountProductVO
+}
+
+export interface SpuExtension extends Spu {
+ skus: SkuExtension[] // 重写类型
+}
+
+// 查询限时折扣活动列表
+export const getDiscountActivityPage = async (params) => {
+ return await request.get({ url: '/promotion/discount-activity/page', params })
+}
+
+// 查询限时折扣活动详情
+export const getDiscountActivity = async (id: number) => {
+ return await request.get({ url: '/promotion/discount-activity/get?id=' + id })
+}
+
+// 新增限时折扣活动
+export const createDiscountActivity = async (data: DiscountActivityVO) => {
+ return await request.post({ url: '/promotion/discount-activity/create', data })
+}
+
+// 修改限时折扣活动
+export const updateDiscountActivity = async (data: DiscountActivityVO) => {
+ return await request.put({ url: '/promotion/discount-activity/update', data })
+}
+
+// 关闭限时折扣活动
+export const closeDiscountActivity = async (id: number) => {
+ return await request.put({ url: '/promotion/discount-activity/close?id=' + id })
+}
+
+// 删除限时折扣活动
+export const deleteDiscountActivity = async (id: number) => {
+ return await request.delete({ url: '/promotion/discount-activity/delete?id=' + id })
+}
diff --git a/src/views/mall/promotion/discountActivity/DiscountActivityForm.vue b/src/views/mall/promotion/discountActivity/DiscountActivityForm.vue
new file mode 100644
index 00000000..7db05426
--- /dev/null
+++ b/src/views/mall/promotion/discountActivity/DiscountActivityForm.vue
@@ -0,0 +1,175 @@
+
+
+
+
+
diff --git a/src/views/mall/promotion/discountActivity/discountActivity.data.ts b/src/views/mall/promotion/discountActivity/discountActivity.data.ts
new file mode 100644
index 00000000..abc1bc9e
--- /dev/null
+++ b/src/views/mall/promotion/discountActivity/discountActivity.data.ts
@@ -0,0 +1,118 @@
+import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
+import { dateFormatter2 } from '@/utils/formatTime'
+
+// 表单校验
+export const rules = reactive({
+ spuId: [required],
+ name: [required],
+ startTime: [required],
+ endTime: [required],
+ discountType: [required]
+})
+
+// CrudSchema https://doc.iocoder.cn/vue3/crud-schema/
+const crudSchemas = reactive([
+ {
+ label: '活动名称',
+ field: 'name',
+ isSearch: true,
+ form: {
+ colProps: {
+ span: 24
+ }
+ },
+ table: {
+ width: 120
+ }
+ },
+ {
+ label: '活动开始时间',
+ field: 'startTime',
+ formatter: dateFormatter2,
+ isSearch: true,
+ search: {
+ component: 'DatePicker',
+ componentProps: {
+ valueFormat: 'YYYY-MM-DD',
+ type: 'daterange'
+ }
+ },
+ form: {
+ component: 'DatePicker',
+ componentProps: {
+ type: 'date',
+ valueFormat: 'x'
+ }
+ },
+ table: {
+ width: 120
+ }
+ },
+ {
+ label: '活动结束时间',
+ field: 'endTime',
+ formatter: dateFormatter2,
+ isSearch: true,
+ search: {
+ component: 'DatePicker',
+ componentProps: {
+ valueFormat: 'YYYY-MM-DD',
+ type: 'daterange'
+ }
+ },
+ form: {
+ component: 'DatePicker',
+ componentProps: {
+ type: 'date',
+ valueFormat: 'x'
+ }
+ },
+ table: {
+ width: 120
+ }
+ },
+ {
+ label: '优惠类型',
+ field: 'discountType',
+ dictType: DICT_TYPE.PROMOTION_DISCOUNT_TYPE,
+ dictClass: 'number',
+ isSearch: true,
+ form: {
+ component: 'Radio',
+ value: 1
+ }
+ },
+ {
+ label: '活动商品',
+ field: 'spuId',
+ isTable: true,
+ isSearch: false,
+ form: {
+ colProps: {
+ span: 24
+ }
+ },
+ table: {
+ width: 300
+ }
+ },
+ {
+ label: '备注',
+ field: 'remark',
+ isSearch: false,
+ form: {
+ component: 'Input',
+ componentProps: {
+ type: 'textarea',
+ rows: 4
+ },
+ colProps: {
+ span: 24
+ }
+ },
+ table: {
+ width: 300
+ }
+ }
+])
+export const { allSchemas } = useCrudSchemas(crudSchemas)
diff --git a/src/views/mall/promotion/discountActivity/index.vue b/src/views/mall/promotion/discountActivity/index.vue
new file mode 100644
index 00000000..b7dd5c20
--- /dev/null
+++ b/src/views/mall/promotion/discountActivity/index.vue
@@ -0,0 +1,237 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+ 新增活动
+
+
+
+
+
+
+
+
+
+
+
+ {{ formatDate(scope.row.startTime, 'YYYY-MM-DD') }}
+ ~ {{ formatDate(scope.row.endTime, 'YYYY-MM-DD') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+
+
+ 关闭
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+