Skip to content

Commit 21e8dbf

Browse files
committed
满减送数据对接
1 parent 9591ed7 commit 21e8dbf

File tree

5 files changed

+182
-57
lines changed

5 files changed

+182
-57
lines changed

.env.dev

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ NODE_ENV=development
44
VITE_DEV=true
55

66
# 请求路径
7-
VITE_BASE_URL='http://api-dashboard.yudao.iocoder.cn'
7+
# VITE_BASE_URL='http://api-dashboard.yudao.iocoder.cn'
8+
VITE_BASE_URL='http://dofast.demo.huizhizao.vip:20001'
89

910
# 上传路径
1011
VITE_UPLOAD_URL='http://api-dashboard.yudao.iocoder.cn/admin-api/infra/file/upload'
@@ -34,4 +35,4 @@ VITE_OUT_DIR=dist
3435
VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn'
3536

3637
# 验证码的开关
37-
VITE_APP_CAPTCHA_ENABLE=false
38+
VITE_APP_CAPTCHA_ENABLE=true
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import request from '@/config/axios'
2+
3+
export interface DiscountActivityVO {
4+
id?:number,
5+
name?: string
6+
startTime?:Date
7+
endTime?:Date
8+
remark?:string
9+
conditionType?:number
10+
productScope?:number
11+
productSpuIds?:number[]
12+
rules?:DiscountProductVO[]
13+
}
14+
//优惠规则
15+
export interface DiscountProductVO {
16+
limit: number
17+
discountPrice: number
18+
freeDelivery: boolean
19+
point: number
20+
couponIds: number[]
21+
couponCounts: number[]
22+
}
23+
24+
25+
// 新增满减送活动
26+
export const createRewardActivity = async (data: DiscountActivityVO) => {
27+
return await request.post({ url: '/promotion/reward-activity/create', data })
28+
}
29+
// 更新满减送活动
30+
export const updateRewardActivity = async (data: DiscountActivityVO) => {
31+
return await request.put({ url: '/promotion/reward-activity/update', data })
32+
}
33+
// 查询满减送活动列表
34+
export const getRewardActivityPage = async (params) => {
35+
return await request.get({ url: '/promotion/reward-activity/page', params })
36+
}
37+
// 查询满减送活动详情
38+
export const getReward = async (id:number) => {
39+
return await request.get({ url: '/promotion/reward-activity/get?id='+id, })
40+
}
41+
// 删除限时折扣活动
42+
export const deleteRewardActivity = async (id: number) => {
43+
return await request.delete({ url: '/promotion/reward-activity/delete?id=' + id })
44+
}

src/utils/constants.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -244,15 +244,15 @@ export const CouponTemplateTakeTypeEnum = {
244244
*/
245245
export const PromotionProductScopeEnum = {
246246
ALL: {
247-
scope: 1,
247+
scope: 10,
248248
name: '通用劵'
249249
},
250250
SPU: {
251-
scope: 2,
251+
scope: 20,
252252
name: '商品劵'
253253
},
254254
CATEGORY: {
255-
scope: 3,
255+
scope: 30,
256256
name: '品类劵'
257257
}
258258
}

src/views/mall/promotion/rewardActivity/RewardForm.vue

Lines changed: 120 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,36 @@
3030
</el-radio-group>
3131
</el-form-item>
3232
<el-form-item label="优惠设置">
33-
<!-- TODO 待实现!这个实现下哈 -->
33+
<template v-for="(item,index) in formData.rules" :key="index">
34+
<el-row type="flex">
35+
<el-col :span="24" style="font-weight: bold;display: flex;">活动层级{{ index+1 }}<el-button link type="danger" style="margin-left: auto;" v-if="index!=0" @click="deleteStratum(index)">删除</el-button></el-col>
36+
<e-form :ref="'formRef'+index" :model="item" >
37+
<el-form-item label="优惠门槛:" prop="limit" label-width="100px" style="padding-left: 50px;">满<el-input style="width: 150px;padding:0 10px;" v-model="item.limit" type='number' placeholder="" /> 元
38+
</el-form-item>
39+
<el-form-item label="优惠内容:" label-width="100px" style="padding-left: 50px;">
40+
<el-checkbox-group v-model="rules[index]" style="width:100%">
41+
<el-col :span="24">
42+
<el-checkbox label="订单金额优惠" name="type" />
43+
<el-form-item v-if="rules[index].includes('订单金额优惠')">
44+
减<el-input style="width: 150px;padding:0 20px;" v-model="item.discountPrice" type='number' placeholder="" />元
45+
</el-form-item>
46+
</el-col>
47+
<el-col :span="24"><el-checkbox v-model="item.freeDelivery" label="包邮" name="type" /></el-col>
48+
<el-col :span="24">
49+
<el-checkbox label="送积分" name="type" />
50+
<el-form-item v-if="rules[index].includes('送积分')">
51+
送<el-input style="width: 150px;padding:0 20px;" v-model="item.point" type='number' placeholder="" />积分
52+
</el-form-item>
53+
</el-col>
54+
<!-- 优惠券待处理 也可以参考优惠劵的SpuShowcase-->
55+
<!-- TODO 待实现!-->
56+
<el-col :span="24"><el-checkbox label="送优惠券" name="type" /></el-col>
57+
</el-checkbox-group>
58+
</el-form-item>
59+
</e-form>
60+
</el-row>
61+
</template>
62+
<el-button type="primary" @click="addStratum">添加活动层级</el-button>
3463
</el-form-item>
3564
<el-form-item label="活动商品" prop="productScope">
3665
<el-radio-group v-model="formData.productScope">
@@ -78,7 +107,7 @@
78107
import { getSpuSimpleList } from '@/api/mall/product/spu'
79108
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
80109
import { CommonStatusEnum } from '@/utils/constants'
81-
import * as ProductBrandApi from '@/api/mall/product/brand'
110+
import * as RewardActivityApi from '@/api/mall/promotion/reward/rewardActivity'
82111
import {
83112
PromotionConditionTypeEnum,
84113
PromotionProductScopeEnum,
@@ -112,16 +141,27 @@ const formData = ref({
112141
remark: undefined,
113142
productScope: PromotionProductScopeEnum.ALL.scope,
114143
productSpuIds: undefined,
115-
rules: undefined
144+
rules: [{
145+
limit: undefined,
146+
discountPrice: undefined,
147+
freeDelivery: undefined,
148+
point: undefined,
149+
couponIds: [],
150+
couponCounts: []
151+
}],
116152
})
153+
// 优惠设置
154+
let rules=reactive([]);
155+
// 优惠券列表
156+
117157
const formRules = reactive({
118158
name: [{ required: true, message: '活动名称不能为空', trigger: 'blur' }],
119159
startAndEndTime: [{ required: true, message: '活动时间不能为空', trigger: 'blur' }],
120160
conditionType: [{ required: true, message: '条件类型不能为空', trigger: 'change' }],
121161
productScope: [{ required: true, message: '商品范围不能为空', trigger: 'blur' }],
122162
productSpuIds: [{ required: true, message: '商品范围不能为空', trigger: 'blur' }]
123163
})
124-
const formRef = ref() // 表单 Ref
164+
const formRef = ref([]) // 表单 Ref
125165
126166
/** 打开弹窗 */
127167
const open = async (type: string, id?: number) => {
@@ -133,19 +173,23 @@ const open = async (type: string, id?: number) => {
133173
if (id) {
134174
formLoading.value = true
135175
try {
136-
// formData.value = await ProductBrandApi.getBrand(id)
137-
formData.value = {
138-
conditionType: 10,
139-
description: '',
140-
id: undefined,
141-
name: '测试活动',
142-
picUrl: '',
143-
productScope: 2,
144-
productSpuIds: [634],
145-
remark: '测试备注',
146-
startAndEndTime: [new Date(), new Date('2023-12-31')],
147-
status: 0
176+
let data= await RewardActivityApi.getReward(id);
177+
data.startAndEndTime=[new Date(data.startTime), new Date(data.endTime)];
178+
rules.splice(0,rules.length);
179+
data.rules.forEach((item)=>{
180+
let ars:string[]=reactive([]);
181+
if(item.freeDelivery){
182+
ars.push('包邮')
183+
}
184+
if(item.point){
185+
ars.push('送积分')
186+
}
187+
if(item.discountPrice){
188+
ars.push('订单金额优惠')
148189
}
190+
rules.push(ars)
191+
})
192+
formData.value=data
149193
} finally {
150194
formLoading.value = false
151195
}
@@ -160,18 +204,33 @@ const submitForm = async () => {
160204
if (!formRef) return
161205
const valid = await formRef.value.validate()
162206
if (!valid) return
163-
console.log(formData.value)
164-
message.success('已在控制台打印数据')
165-
return
207+
// 处理下数据兼容接口
208+
formData.value.startTime= +new Date(formData.value.startAndEndTime[0])
209+
formData.value.endTime=+new Date(formData.value.startAndEndTime[1])
210+
console.log(rules)
211+
rules.forEach((item,index)=>{
212+
if(item.includes('包邮')){
213+
formData.value.rules[index].freeDelivery=true;
214+
}else{
215+
formData.value.rules[index].freeDelivery=false;
216+
}
217+
if(!item.includes('送积分')){
218+
formData.value.rules[index].point=undefined;
219+
}
220+
if(!item.includes('订单金额优惠')){
221+
formData.value.rules[index].discountPrice=undefined;
222+
}
223+
})
224+
166225
// 提交请求
167226
formLoading.value = true
168227
try {
169-
const data = formData.value as ProductBrandApi.BrandVO
228+
const data = formData.value as RewardActivityApi.DiscountActivityVO
170229
if (formType.value === 'create') {
171-
await ProductBrandApi.createBrand(data)
230+
await RewardActivityApi.createRewardActivity(data)
172231
message.success(t('common.createSuccess'))
173232
} else {
174-
await ProductBrandApi.updateBrand(data)
233+
await RewardActivityApi.updateRewardActivity(data)
175234
message.success(t('common.updateSuccess'))
176235
}
177236
dialogVisible.value = false
@@ -182,15 +241,50 @@ const submitForm = async () => {
182241
}
183242
}
184243
244+
const addStratum =()=>{
245+
formData.value.rules.push({
246+
limit: undefined,
247+
discountPrice: undefined,
248+
freeDelivery: undefined,
249+
point: undefined,
250+
couponIds: [],
251+
couponCounts: []
252+
})
253+
rules.push([]);
254+
console.log(rules)
255+
}
256+
257+
const deleteStratum=(index)=>{
258+
formData.value.rules.splice(index,1)
259+
rules.splice(index,1)
260+
}
261+
185262
/** 重置表单 */
186263
const resetForm = () => {
187264
formData.value = {
188265
id: undefined,
189-
name: '',
190-
picUrl: '',
191-
status: CommonStatusEnum.ENABLE,
192-
description: ''
266+
name: undefined,
267+
startAndEndTime: undefined,
268+
startTime: undefined,
269+
endTime: undefined,
270+
conditionType: PromotionConditionTypeEnum.PRICE.type,
271+
remark: undefined,
272+
productScope: PromotionProductScopeEnum.ALL.scope,
273+
productSpuIds: undefined,
274+
rules: [{
275+
limit: undefined,
276+
discountPrice: undefined,
277+
freeDelivery: undefined,
278+
point: undefined,
279+
couponIds: [],
280+
couponCounts: []
281+
}],
193282
}
283+
rules.splice(0,rules.length);
284+
rules.push(reactive([]));
285+
// 解决下有时刷新页面第一次点编辑报错
286+
nextTick(()=>{
194287
formRef.value?.resetFields()
288+
})
195289
}
196290
</script>

src/views/mall/promotion/rewardActivity/index.vue

Lines changed: 12 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,13 @@
6565
<el-table-column
6666
label="活动开始时间"
6767
align="center"
68-
prop="sort[0]"
68+
prop="startTime"
6969
:formatter="dateFormatter"
7070
/>
7171
<el-table-column
7272
label="活动结束时间"
7373
align="center"
74-
prop="sort[1]"
74+
prop="endTime"
7575
:formatter="dateFormatter"
7676
/>
7777
<el-table-column label="状态" align="center" prop="status">
@@ -123,6 +123,7 @@
123123
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
124124
import { dateFormatter } from '@/utils/formatTime'
125125
import * as ProductBrandApi from '@/api/mall/product/brand'
126+
import * as RewardActivityApi from '@/api/mall/promotion/reward/rewardActivity'
126127
import RewardForm from './RewardForm.vue'
127128
128129
defineOptions({ name: 'PromotionRewardActivity' })
@@ -146,22 +147,7 @@ const queryFormRef = ref() // 搜索的表单
146147
const getList = async () => {
147148
loading.value = true
148149
try {
149-
// const data = await ProductBrandApi.getBrandParam(queryParams)
150-
const data = {
151-
list: [
152-
{
153-
createTime: 1693463998000,
154-
description: '',
155-
id: 3,
156-
name: '索尼',
157-
picUrl:
158-
'http://127.0.0.1:48080/admin-api/infra/file/4/get/f5b7a536306cd1180a42a2211a8212dc23de6b949d30c30d036caa063042f928.png',
159-
sort: [+new Date(), +new Date('2023-12-31')],
160-
status: 10
161-
}
162-
],
163-
total: 1
164-
}
150+
const data = await RewardActivityApi.getRewardActivityPage(queryParams)
165151
list.value = data.list
166152
total.value = data.total
167153
} finally {
@@ -171,16 +157,16 @@ const getList = async () => {
171157
172158
/** 搜索按钮操作 */
173159
const handleQuery = () => {
174-
console.log(queryParams)
175-
message.success('已打印搜索参数')
176-
return
160+
// console.log(queryParams)
161+
// message.success('已打印搜索参数')
162+
// return
177163
getList()
178164
}
179165
180166
/** 重置按钮操作 */
181167
const resetQuery = () => {
182-
message.success('重置查询表单获取数据')
183-
return
168+
// message.success('重置查询表单获取数据')
169+
// return
184170
queryFormRef.value.resetFields()
185171
handleQuery()
186172
}
@@ -196,10 +182,10 @@ const handleDelete = async (id: number) => {
196182
try {
197183
// 删除的二次确认
198184
await message.delConfirm()
199-
message.success('您以确认删除')
200-
return
185+
// message.success('您以确认删除')
186+
// return
201187
// 发起删除
202-
await ProductBrandApi.deleteBrand(id)
188+
await RewardActivityApi.deleteRewardActivity(id)
203189
message.success(t('common.delSuccess'))
204190
// 刷新列表
205191
await getList()

0 commit comments

Comments
 (0)