feat:添加秒杀活动管理
parent
f3622d423a
commit
3d47d6744e
@ -0,0 +1,50 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface SeckillActivityVO {
|
||||||
|
id: number
|
||||||
|
spuId: number
|
||||||
|
name: string
|
||||||
|
status: number
|
||||||
|
remark: string
|
||||||
|
startTime: Date
|
||||||
|
endTime: Date
|
||||||
|
sort: number
|
||||||
|
configIds: string
|
||||||
|
orderCount: number
|
||||||
|
userCount: number
|
||||||
|
totalPrice: number
|
||||||
|
totalLimitCount: number
|
||||||
|
singleLimitCount: number
|
||||||
|
stock: number
|
||||||
|
totalStock: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询秒杀活动列表
|
||||||
|
export const getSeckillActivityPage = async (params) => {
|
||||||
|
return await request.get({ url: '/promotion/seckill-activity/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询秒杀活动详情
|
||||||
|
export const getSeckillActivity = async (id: number) => {
|
||||||
|
return await request.get({ url: '/promotion/seckill-activity/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增秒杀活动
|
||||||
|
export const createSeckillActivity = async (data: SeckillActivityVO) => {
|
||||||
|
return await request.post({ url: '/promotion/seckill-activity/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改秒杀活动
|
||||||
|
export const updateSeckillActivity = async (data: SeckillActivityVO) => {
|
||||||
|
return await request.put({ url: '/promotion/seckill-activity/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除秒杀活动
|
||||||
|
export const deleteSeckillActivity = async (id: number) => {
|
||||||
|
return await request.delete({ url: '/promotion/seckill-activity/delete?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出秒杀活动 Excel
|
||||||
|
export const exportSeckillActivityApi = async (params) => {
|
||||||
|
return await request.download({ url: '/promotion/seckill-activity/export-excel', params })
|
||||||
|
}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
import SpuAndSkuSelectForm from './SpuAndSkuSelectForm.vue'
|
||||||
|
|
||||||
|
export { SpuAndSkuSelectForm }
|
||||||
@ -0,0 +1,261 @@
|
|||||||
|
import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
|
||||||
|
import { dateFormatter } from '@/utils/formatTime'
|
||||||
|
import { getListAllSimple } from '@/api/mall/promotion/seckill/seckillConfig'
|
||||||
|
|
||||||
|
// 表单校验
|
||||||
|
export const rules = reactive({
|
||||||
|
spuId: [required],
|
||||||
|
name: [required],
|
||||||
|
startTime: [required],
|
||||||
|
endTime: [required],
|
||||||
|
sort: [required],
|
||||||
|
configIds: [required],
|
||||||
|
totalLimitCount: [required],
|
||||||
|
singleLimitCount: [required],
|
||||||
|
totalStock: [required]
|
||||||
|
})
|
||||||
|
|
||||||
|
// CrudSchema https://doc.iocoder.cn/vue3/crud-schema/
|
||||||
|
const crudSchemas = reactive<CrudSchema[]>([
|
||||||
|
{
|
||||||
|
label: '秒杀活动名称',
|
||||||
|
field: 'name',
|
||||||
|
isSearch: true,
|
||||||
|
form: {
|
||||||
|
colProps: {
|
||||||
|
span: 24
|
||||||
|
}
|
||||||
|
},
|
||||||
|
table: {
|
||||||
|
width: 120
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '活动开始时间',
|
||||||
|
field: 'startTime',
|
||||||
|
formatter: dateFormatter,
|
||||||
|
isSearch: true,
|
||||||
|
search: {
|
||||||
|
component: 'DatePicker',
|
||||||
|
componentProps: {
|
||||||
|
valueFormat: 'YYYY-MM-DD HH:mm:ss',
|
||||||
|
type: 'daterange',
|
||||||
|
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
form: {
|
||||||
|
component: 'DatePicker',
|
||||||
|
componentProps: {
|
||||||
|
type: 'date',
|
||||||
|
valueFormat: 'x'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
table: {
|
||||||
|
width: 300
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '活动结束时间',
|
||||||
|
field: 'endTime',
|
||||||
|
formatter: dateFormatter,
|
||||||
|
isSearch: true,
|
||||||
|
search: {
|
||||||
|
component: 'DatePicker',
|
||||||
|
componentProps: {
|
||||||
|
valueFormat: 'YYYY-MM-DD HH:mm:ss',
|
||||||
|
type: 'daterange',
|
||||||
|
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
form: {
|
||||||
|
component: 'DatePicker',
|
||||||
|
componentProps: {
|
||||||
|
type: 'date',
|
||||||
|
valueFormat: 'x'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
table: {
|
||||||
|
width: 300
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '秒杀时段',
|
||||||
|
field: 'configIds',
|
||||||
|
form: {
|
||||||
|
component: 'Select',
|
||||||
|
componentProps: {
|
||||||
|
multiple: true,
|
||||||
|
optionsAlias: {
|
||||||
|
labelField: 'name',
|
||||||
|
valueField: 'id'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
api: getListAllSimple
|
||||||
|
},
|
||||||
|
table: {
|
||||||
|
width: 300
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '新增订单数',
|
||||||
|
field: 'orderCount',
|
||||||
|
isForm: false,
|
||||||
|
form: {
|
||||||
|
component: 'InputNumber',
|
||||||
|
value: 0
|
||||||
|
},
|
||||||
|
table: {
|
||||||
|
width: 300
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '付款人数',
|
||||||
|
field: 'userCount',
|
||||||
|
isForm: false,
|
||||||
|
form: {
|
||||||
|
component: 'InputNumber',
|
||||||
|
value: 0
|
||||||
|
},
|
||||||
|
table: {
|
||||||
|
width: 300
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '订单实付金额',
|
||||||
|
field: 'totalPrice',
|
||||||
|
isForm: false,
|
||||||
|
form: {
|
||||||
|
component: 'InputNumber',
|
||||||
|
value: 0
|
||||||
|
},
|
||||||
|
table: {
|
||||||
|
width: 300
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '总限购数量',
|
||||||
|
field: 'totalLimitCount',
|
||||||
|
form: {
|
||||||
|
component: 'InputNumber',
|
||||||
|
value: 0
|
||||||
|
},
|
||||||
|
table: {
|
||||||
|
width: 300
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '单次限够数量',
|
||||||
|
field: 'singleLimitCount',
|
||||||
|
form: {
|
||||||
|
component: 'InputNumber',
|
||||||
|
value: 0
|
||||||
|
},
|
||||||
|
table: {
|
||||||
|
width: 300
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '秒杀库存',
|
||||||
|
field: 'stock',
|
||||||
|
isForm: false,
|
||||||
|
form: {
|
||||||
|
component: 'InputNumber',
|
||||||
|
value: 0
|
||||||
|
},
|
||||||
|
table: {
|
||||||
|
width: 300
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '秒杀总库存',
|
||||||
|
field: 'totalStock',
|
||||||
|
form: {
|
||||||
|
component: 'InputNumber',
|
||||||
|
value: 0
|
||||||
|
},
|
||||||
|
table: {
|
||||||
|
width: 300
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '秒杀活动商品',
|
||||||
|
field: 'spuId',
|
||||||
|
form: {
|
||||||
|
colProps: {
|
||||||
|
span: 24
|
||||||
|
}
|
||||||
|
},
|
||||||
|
table: {
|
||||||
|
width: 200
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '创建时间',
|
||||||
|
field: 'createTime',
|
||||||
|
formatter: dateFormatter,
|
||||||
|
search: {
|
||||||
|
component: 'DatePicker',
|
||||||
|
componentProps: {
|
||||||
|
valueFormat: 'YYYY-MM-DD HH:mm:ss',
|
||||||
|
type: 'daterange',
|
||||||
|
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
isForm: false,
|
||||||
|
table: {
|
||||||
|
width: 300
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '排序',
|
||||||
|
field: 'sort',
|
||||||
|
form: {
|
||||||
|
component: 'InputNumber',
|
||||||
|
value: 0
|
||||||
|
},
|
||||||
|
table: {
|
||||||
|
width: 300
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '状态',
|
||||||
|
field: 'status',
|
||||||
|
dictType: DICT_TYPE.COMMON_STATUS,
|
||||||
|
dictClass: 'number',
|
||||||
|
isForm: false,
|
||||||
|
isSearch: true,
|
||||||
|
form: {
|
||||||
|
component: 'Radio'
|
||||||
|
},
|
||||||
|
table: {
|
||||||
|
width: 80
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '备注',
|
||||||
|
field: 'remark',
|
||||||
|
form: {
|
||||||
|
component: 'Input',
|
||||||
|
componentProps: {
|
||||||
|
type: 'textarea',
|
||||||
|
rows: 4
|
||||||
|
},
|
||||||
|
colProps: {
|
||||||
|
span: 24
|
||||||
|
}
|
||||||
|
},
|
||||||
|
table: {
|
||||||
|
width: 300
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '操作',
|
||||||
|
field: 'action',
|
||||||
|
isForm: false,
|
||||||
|
table: {
|
||||||
|
width: 120,
|
||||||
|
fixed: 'right'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
])
|
||||||
|
export const { allSchemas } = useCrudSchemas(crudSchemas)
|
||||||
Loading…
Reference in New Issue