Skip to content

Commit 5a9764c

Browse files
committed
member: 分销配置
1 parent 1302089 commit 5a9764c

File tree

4 files changed

+202
-42
lines changed

4 files changed

+202
-42
lines changed

src/api/member/point/config/index.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@ export interface ConfigVO {
66
tradeDeductUnitPrice: number
77
tradeDeductMaxPrice: number
88
tradeGivePoint: number
9+
brokerageEnabled: boolean
10+
brokerageEnabledCondition: number
11+
brokerageBindMode: number
12+
brokeragePostUrls: string[]
13+
brokerageFirstPercent: number
14+
brokerageSecondPercent: number
15+
brokerageWithdrawMinPrice: number
16+
brokerageBankNames: number[]
17+
brokerageFrozenDays: number
18+
brokerageWithdrawType: number[]
919
}
1020

1121
// 查询积分设置详情

src/utils/constants.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,3 +272,30 @@ export const PromotionDiscountTypeEnum = {
272272
name: '折扣'
273273
}
274274
}
275+
276+
/**
277+
* 分销关系绑定模式枚举
278+
*/
279+
export const BrokerageBindModeEnum = {
280+
ANYTIME: {
281+
mode: 0,
282+
name: '没有推广人'
283+
},
284+
REGISTER: {
285+
mode: 1,
286+
name: '新用户'
287+
}
288+
}
289+
/**
290+
* 分佣模式枚举
291+
*/
292+
export const BrokerageEnabledConditionEnum = {
293+
ALL: {
294+
condition: 0,
295+
name: '人人分销'
296+
},
297+
ADMIN: {
298+
condition: 1,
299+
name: '指定分销'
300+
}
301+
}

src/utils/dict.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,10 @@ export enum DICT_TYPE {
143143

144144
// ========== MALL - 会员模块 ==========
145145
MEMBER_POINT_BIZ_TYPE = 'member_point_biz_type', // 积分的业务类型
146+
BROKERAGE_ENABLED_CONDITION = 'brokerage_enabled_condition', // 分佣模式
147+
BROKERAGE_BIND_MODE = 'brokerage_bind_mode', // 分销关系绑定模式
148+
BROKERAGE_BANK_NAME = 'brokerage_bank_name', // 佣金提现银行
149+
BROKERAGE_WITHDRAW_TYPE = 'brokerage_withdraw_type', // 佣金冻结时间
146150

147151
// ========== MALL - 商品模块 ==========
148152
PRODUCT_UNIT = 'product_unit', // 商品单位

src/views/member/point/config/index.vue

Lines changed: 161 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -10,47 +10,149 @@
1010
<el-form-item label="hideId" v-show="false">
1111
<el-input v-model="formData.id" />
1212
</el-form-item>
13-
<el-form-item label="积分抵扣" prop="tradeDeductEnable" class="item-bottom">
14-
<el-switch v-model="formData.tradeDeductEnable" style="user-select: none" />
15-
</el-form-item>
16-
<el-form-item>
17-
<el-text class="mx-1" size="small" type="info">下单积分是否抵用订单金额</el-text>
18-
</el-form-item>
19-
<el-form-item label="积分抵扣" prop="tradeDeductUnitPrice" class="item-bottom">
20-
<el-input-number
21-
v-model="computedTradeDeductUnitPrice"
22-
placeholder="请输入积分抵扣金额"
23-
style="width: 300px"
24-
:precision="2"
25-
/>
26-
</el-form-item>
27-
<el-form-item>
28-
<el-text class="mx-1" size="small" type="info">
29-
积分抵用比例(1 积分抵多少金额),单位:元
30-
</el-text>
31-
</el-form-item>
32-
<el-form-item label="积分抵扣最大值" prop="tradeDeductMaxPrice" class="item-bottom">
33-
<el-input-number
34-
v-model="formData.tradeDeductMaxPrice"
35-
placeholder="请输入积分抵扣最大值"
36-
style="width: 300px"
37-
/>
38-
</el-form-item>
39-
<el-form-item>
40-
<el-text class="mx-1" size="small" type="info">单次下单积分使用上限,0 不限制</el-text>
41-
</el-form-item>
42-
<el-form-item label="1 元赠送多少分" prop="tradeGivePoint" class="item-bottom">
43-
<el-input-number
44-
v-model="formData.tradeGivePoint"
45-
placeholder="请输入 1 元赠送多少积分"
46-
style="width: 300px"
47-
/>
48-
</el-form-item>
49-
<el-form-item>
50-
<el-text class="mx-1" size="small" type="info">
51-
下单支付金额按比例赠送积分(实际支付 1 元赠送多少积分)
52-
</el-text>
53-
</el-form-item>
13+
14+
<el-tabs>
15+
<el-tab-pane label="积分">
16+
<el-form-item label="积分抵扣" prop="tradeDeductEnable" class="item-bottom">
17+
<el-switch v-model="formData.tradeDeductEnable" style="user-select: none" />
18+
<el-text class="w-full" size="small" type="info">下单积分是否抵用订单金额</el-text>
19+
</el-form-item>
20+
<el-form-item label="积分抵扣" prop="tradeDeductUnitPrice">
21+
<el-input-number
22+
v-model="computedTradeDeductUnitPrice"
23+
placeholder="请输入积分抵扣金额"
24+
:precision="2"
25+
/>
26+
<el-text class="w-full" size="small" type="info">
27+
积分抵用比例(1 积分抵多少金额),单位:元
28+
</el-text>
29+
</el-form-item>
30+
<el-form-item label="积分抵扣最大值" prop="tradeDeductMaxPrice">
31+
<el-input-number
32+
v-model="formData.tradeDeductMaxPrice"
33+
placeholder="请输入积分抵扣最大值"
34+
/>
35+
<el-text class="w-full" size="small" type="info">
36+
单次下单积分使用上限,0 不限制
37+
</el-text>
38+
</el-form-item>
39+
<el-form-item label="1 元赠送多少分" prop="tradeGivePoint">
40+
<el-input-number
41+
v-model="formData.tradeGivePoint"
42+
placeholder="请输入 1 元赠送多少积分"
43+
/>
44+
<el-text class="w-full" size="small" type="info">
45+
下单支付金额按比例赠送积分(实际支付 1 元赠送多少积分)
46+
</el-text>
47+
</el-form-item>
48+
</el-tab-pane>
49+
<el-tab-pane label="分销">
50+
<el-form-item label="分佣启用" prop="brokerageEnabled">
51+
<el-switch v-model="formData.brokerageEnabled" style="user-select: none" />
52+
<el-text class="w-full" size="small" type="info"> 商城是否开启分销模式 </el-text>
53+
</el-form-item>
54+
<el-form-item label="分佣模式" prop="brokerageEnabledCondition">
55+
<el-radio-group v-model="formData.brokerageEnabledCondition">
56+
<el-radio
57+
v-for="dict in getIntDictOptions(DICT_TYPE.BROKERAGE_ENABLED_CONDITION)"
58+
:key="dict.value"
59+
:label="dict.value"
60+
>
61+
{{ dict.label }}
62+
</el-radio>
63+
</el-radio-group>
64+
<el-text class="w-full" size="small" type="info">
65+
人人分销:每个用户都可以成为推广员
66+
</el-text>
67+
<el-text class="w-full" size="small" type="info">
68+
指定分销:仅可在后台手动设置推广员
69+
</el-text>
70+
</el-form-item>
71+
<el-form-item label="分销关系绑定" prop="brokerageBindMode">
72+
<el-radio-group v-model="formData.brokerageBindMode">
73+
<el-radio
74+
v-for="dict in getIntDictOptions(DICT_TYPE.BROKERAGE_BIND_MODE)"
75+
:key="dict.value"
76+
:label="dict.value"
77+
>
78+
{{ dict.label }}
79+
</el-radio>
80+
</el-radio-group>
81+
<el-text class="w-full" size="small" type="info">
82+
没有推广人:只要用户没有推广人,随时都可以绑定推广关系
83+
</el-text>
84+
<el-text class="w-full" size="small" type="info">
85+
新用户:只有新用户注册时或首次进入系统时才可以绑定推广关系
86+
</el-text>
87+
</el-form-item>
88+
<el-form-item label="分销海报图">
89+
<UploadImgs v-model="formData.brokeragePostUrls" width="75px" height="125px" />
90+
<el-text class="w-full" size="small" type="info">
91+
个人中心分销海报图片,建议尺寸600x1000
92+
</el-text>
93+
</el-form-item>
94+
<el-form-item label="一级返佣比例" prop="brokerageFirstPercent">
95+
<el-input-number
96+
v-model="formData.brokerageFirstPercent"
97+
placeholder="请输入一级返佣比例"
98+
/>
99+
<el-text class="w-full" size="small" type="info">
100+
订单交易成功后给推广人返佣的百分比
101+
</el-text>
102+
</el-form-item>
103+
<el-form-item label="二级返佣比例" prop="brokerageSecondPercent">
104+
<el-input-number
105+
v-model="formData.brokerageSecondPercent"
106+
placeholder="请输入二级返佣比例"
107+
/>
108+
<el-text class="w-full" size="small" type="info">
109+
订单交易成功后给推广人的推荐人返佣的百分比
110+
</el-text>
111+
</el-form-item>
112+
<el-form-item label="佣金冻结天数" prop="brokerageFrozenDays">
113+
<el-input-number
114+
v-model="formData.brokerageFrozenDays"
115+
placeholder="请输入佣金冻结天数"
116+
/>
117+
<el-text class="w-full" size="small" type="info">
118+
防止用户退款,佣金被提现了,所以需要设置佣金冻结时间,单位:天
119+
</el-text>
120+
</el-form-item>
121+
<el-form-item label="提现最低金额" prop="brokerageWithdrawMinPrice">
122+
<el-input-number
123+
v-model="formData.brokerageWithdrawMinPrice"
124+
placeholder="请输入用户提现最低金额"
125+
/>
126+
<el-text class="w-full" size="small" type="info">
127+
用户提现最低金额限制,单位:元
128+
</el-text>
129+
</el-form-item>
130+
<el-form-item label="提现方式" prop="brokerageWithdrawType">
131+
<el-checkbox-group v-model="formData.brokerageWithdrawType">
132+
<el-checkbox
133+
v-for="dict in getIntDictOptions(DICT_TYPE.BROKERAGE_WITHDRAW_TYPE)"
134+
:key="dict.value"
135+
:label="dict.value"
136+
>
137+
{{ dict.label }}
138+
</el-checkbox>
139+
</el-checkbox-group>
140+
<el-text class="w-full" size="small" type="info"> 商城开通提现的付款方式 </el-text>
141+
</el-form-item>
142+
<el-form-item label="提现银行" prop="brokerageBankNames">
143+
<el-select v-model="formData.brokerageBankNames" placeholder="请选择提现银行" multiple>
144+
<el-option
145+
v-for="dict in getIntDictOptions(DICT_TYPE.BROKERAGE_BANK_NAME)"
146+
:key="dict.value"
147+
:label="dict.label"
148+
:value="dict.value"
149+
/>
150+
</el-select>
151+
<el-text class="w-full" size="small" type="info"> 商城开通提现的银行列表 </el-text>
152+
</el-form-item>
153+
</el-tab-pane>
154+
</el-tabs>
155+
54156
<el-form-item>
55157
<el-button type="primary" @click="onSubmit">保存</el-button>
56158
</el-form-item>
@@ -59,6 +161,8 @@
59161
</template>
60162
<script lang="ts" setup>
61163
import * as ConfigApi from '@/api/member/point/config'
164+
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
165+
import { BrokerageBindModeEnum, BrokerageEnabledConditionEnum } from '@/utils/constants'
62166
63167
defineOptions({ name: 'MemberPointConfig' })
64168
@@ -68,10 +172,21 @@ const message = useMessage() // 消息弹窗
68172
const dialogVisible = ref(false) // 弹窗的是否展示
69173
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
70174
const formData = ref({
175+
id: undefined,
71176
tradeDeductEnable: true,
72177
tradeDeductUnitPrice: 0,
73178
tradeDeductMaxPrice: 0,
74-
tradeGivePoint: 0
179+
tradeGivePoint: 0,
180+
brokerageEnabled: true,
181+
brokerageEnabledCondition: BrokerageEnabledConditionEnum.ALL.condition,
182+
brokerageBindMode: BrokerageBindModeEnum.ANYTIME.mode,
183+
brokeragePostUrls: [],
184+
brokerageFirstPercent: 0,
185+
brokerageSecondPercent: 0,
186+
brokerageWithdrawMinPrice: 0,
187+
brokerageBankNames: [],
188+
brokerageFrozenDays: 0,
189+
brokerageWithdrawType: []
75190
})
76191
77192
// 创建一个计算属性,用于将 tradeDeductUnitPrice 显示为带两位小数的形式
@@ -95,6 +210,9 @@ const onSubmit = async () => {
95210
formLoading.value = true
96211
try {
97212
const data = formData.value as unknown as ConfigApi.ConfigVO
213+
data.brokeragePostUrls = formData.value.brokeragePostUrls.map((item: any) => {
214+
return item?.url ? item.url : item
215+
})
98216
await ConfigApi.saveConfig(data)
99217
message.success(t('common.updateSuccess'))
100218
dialogVisible.value = false
@@ -110,6 +228,7 @@ const getConfig = async () => {
110228
if (data === null) {
111229
return
112230
}
231+
data.brokeragePostUrls = data.brokeragePostUrls.map((url) => ({ url }))
113232
formData.value = data
114233
} finally {
115234
}

0 commit comments

Comments
 (0)