Skip to content

Commit 35664d1

Browse files
committed
trade: 增加交易中心配置表
1 parent 73f8cef commit 35664d1

File tree

4 files changed

+235
-139
lines changed

4 files changed

+235
-139
lines changed

src/api/mall/trade/config/index.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import request from '@/config/axios'
2+
3+
export interface ConfigVO {
4+
brokerageEnabled: boolean
5+
brokerageEnabledCondition: number
6+
brokerageBindMode: number
7+
brokeragePostUrls: string
8+
brokerageFirstPercent: number
9+
brokerageSecondPercent: number
10+
brokerageWithdrawMinPrice: number
11+
brokerageBankNames: string
12+
brokerageFrozenDays: number
13+
brokerageWithdrawType: string
14+
}
15+
16+
// 查询交易中心配置详情
17+
export const getTradeConfig = async () => {
18+
return await request.get({ url: `/trade/config/get` })
19+
}
20+
21+
// 保存交易中心配置
22+
export const saveTradeConfig = async (data: ConfigVO) => {
23+
return await request.put({ url: `/trade/config/save`, data })
24+
}

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

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,6 @@ 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[]
199
}
2010

2111
// 查询积分设置详情

src/views/mall/trade/config/index.vue

Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
1+
<template>
2+
<ContentWrap>
3+
<el-form
4+
ref="formRef"
5+
:model="formData"
6+
:rules="formRules"
7+
label-width="120px"
8+
v-loading="formLoading"
9+
>
10+
<el-form-item label="hideId" v-show="false">
11+
<el-input v-model="formData.id" />
12+
</el-form-item>
13+
14+
<el-tabs>
15+
<el-tab-pane label="分销">
16+
<el-form-item label="分佣启用" prop="brokerageEnabled">
17+
<el-switch v-model="formData.brokerageEnabled" 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="brokerageEnabledCondition">
21+
<el-radio-group v-model="formData.brokerageEnabledCondition">
22+
<el-radio
23+
v-for="dict in getIntDictOptions(DICT_TYPE.BROKERAGE_ENABLED_CONDITION)"
24+
:key="dict.value"
25+
:label="dict.value"
26+
>
27+
{{ dict.label }}
28+
</el-radio>
29+
</el-radio-group>
30+
<el-text class="w-full" size="small" type="info">
31+
人人分销:每个用户都可以成为推广员
32+
</el-text>
33+
<el-text class="w-full" size="small" type="info">
34+
指定分销:仅可在后台手动设置推广员
35+
</el-text>
36+
</el-form-item>
37+
<el-form-item label="分销关系绑定" prop="brokerageBindMode">
38+
<el-radio-group v-model="formData.brokerageBindMode">
39+
<el-radio
40+
v-for="dict in getIntDictOptions(DICT_TYPE.BROKERAGE_BIND_MODE)"
41+
:key="dict.value"
42+
:label="dict.value"
43+
>
44+
{{ dict.label }}
45+
</el-radio>
46+
</el-radio-group>
47+
<el-text class="w-full" size="small" type="info">
48+
没有推广人:只要用户没有推广人,随时都可以绑定推广关系
49+
</el-text>
50+
<el-text class="w-full" size="small" type="info">
51+
新用户:只有新用户注册时或首次进入系统时才可以绑定推广关系
52+
</el-text>
53+
</el-form-item>
54+
<el-form-item label="分销海报图">
55+
<UploadImgs v-model="formData.brokeragePostUrls" width="75px" height="125px" />
56+
<el-text class="w-full" size="small" type="info">
57+
个人中心分销海报图片,建议尺寸600x1000
58+
</el-text>
59+
</el-form-item>
60+
<el-form-item label="一级返佣比例" prop="brokerageFirstPercent">
61+
<el-input-number
62+
v-model="formData.brokerageFirstPercent"
63+
placeholder="请输入一级返佣比例"
64+
/>
65+
<el-text class="w-full" size="small" type="info">
66+
订单交易成功后给推广人返佣的百分比
67+
</el-text>
68+
</el-form-item>
69+
<el-form-item label="二级返佣比例" prop="brokerageSecondPercent">
70+
<el-input-number
71+
v-model="formData.brokerageSecondPercent"
72+
placeholder="请输入二级返佣比例"
73+
/>
74+
<el-text class="w-full" size="small" type="info">
75+
订单交易成功后给推广人的推荐人返佣的百分比
76+
</el-text>
77+
</el-form-item>
78+
<el-form-item label="佣金冻结天数" prop="brokerageFrozenDays">
79+
<el-input-number
80+
v-model="formData.brokerageFrozenDays"
81+
placeholder="请输入佣金冻结天数"
82+
/>
83+
<el-text class="w-full" size="small" type="info">
84+
防止用户退款,佣金被提现了,所以需要设置佣金冻结时间,单位:天
85+
</el-text>
86+
</el-form-item>
87+
<el-form-item label="提现最低金额" prop="brokerageWithdrawMinPrice">
88+
<el-input-number
89+
v-model="formData.brokerageWithdrawMinPrice"
90+
placeholder="请输入用户提现最低金额"
91+
/>
92+
<el-text class="w-full" size="small" type="info">
93+
用户提现最低金额限制,单位:元
94+
</el-text>
95+
</el-form-item>
96+
<el-form-item label="提现方式" prop="brokerageWithdrawType">
97+
<el-checkbox-group v-model="formData.brokerageWithdrawType">
98+
<el-checkbox
99+
v-for="dict in getIntDictOptions(DICT_TYPE.BROKERAGE_WITHDRAW_TYPE)"
100+
:key="dict.value"
101+
:label="dict.value"
102+
>
103+
{{ dict.label }}
104+
</el-checkbox>
105+
</el-checkbox-group>
106+
<el-text class="w-full" size="small" type="info"> 商城开通提现的付款方式 </el-text>
107+
</el-form-item>
108+
<el-form-item label="提现银行" prop="brokerageBankNames">
109+
<el-select v-model="formData.brokerageBankNames" placeholder="请选择提现银行" multiple>
110+
<el-option
111+
v-for="dict in getIntDictOptions(DICT_TYPE.BROKERAGE_BANK_NAME)"
112+
:key="dict.value"
113+
:label="dict.label"
114+
:value="dict.value"
115+
/>
116+
</el-select>
117+
<el-text class="w-full" size="small" type="info"> 商城开通提现的银行列表 </el-text>
118+
</el-form-item>
119+
</el-tab-pane>
120+
</el-tabs>
121+
122+
<el-form-item>
123+
<el-button type="primary" @click="submitForm" :loading="formLoading"> 保存 </el-button>
124+
</el-form-item>
125+
</el-form>
126+
</ContentWrap>
127+
</template>
128+
129+
<script setup lang="ts">
130+
import * as ConfigApi from '@/api/mall/trade/config'
131+
import { BrokerageBindModeEnum, BrokerageEnabledConditionEnum } from '@/utils/constants'
132+
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
133+
134+
defineOptions({ name: 'TradeConfig' })
135+
136+
const message = useMessage() // 消息弹窗
137+
138+
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
139+
const formRef = ref()
140+
const formData = ref({
141+
brokerageEnabled: true,
142+
brokerageEnabledCondition: BrokerageEnabledConditionEnum.ALL.condition,
143+
brokerageBindMode: BrokerageBindModeEnum.ANYTIME.mode,
144+
brokeragePostUrls: [],
145+
brokerageFirstPercent: 0,
146+
brokerageSecondPercent: 0,
147+
brokerageWithdrawMinPrice: 0,
148+
brokerageBankNames: [],
149+
brokerageFrozenDays: 0,
150+
brokerageWithdrawType: []
151+
})
152+
const formRules = reactive({
153+
brokerageEnabledCondition: [{ required: true, message: '分佣模式不能为空', trigger: 'blur' }],
154+
brokerageBindMode: [{ required: true, message: '分销关系绑定模式不能为空', trigger: 'blur' }],
155+
brokerageFirstPercent: [{ required: true, message: '一级返佣比例不能为空', trigger: 'blur' }],
156+
brokerageSecondPercent: [{ required: true, message: '二级返佣比例不能为空', trigger: 'blur' }],
157+
brokerageWithdrawMinPrice: [
158+
{ required: true, message: '用户提现最低金额不能为空', trigger: 'blur' }
159+
],
160+
brokerageBankNames: [{ required: true, message: '提现银行不能为空', trigger: 'blur' }],
161+
brokerageFrozenDays: [{ required: true, message: '佣金冻结时间不能为空', trigger: 'blur' }],
162+
brokerageWithdrawType: [
163+
{
164+
required: true,
165+
message: '提现方式不能为空',
166+
trigger: 'change'
167+
}
168+
]
169+
})
170+
171+
const submitForm = async () => {
172+
if (formLoading.value) return
173+
// 校验表单
174+
if (!formRef) return
175+
const valid = await formRef.value.validate()
176+
if (!valid) return
177+
// 提交请求
178+
formLoading.value = true
179+
try {
180+
const data = formData.value as unknown as ConfigApi.ConfigVO
181+
data.brokeragePostUrls = formData.value.brokeragePostUrls.map((item: any) => {
182+
return item?.url ? item.url : item
183+
})
184+
await ConfigApi.saveTradeConfig(data)
185+
message.success('保存成功')
186+
} finally {
187+
formLoading.value = false
188+
}
189+
}
190+
191+
/** 查询交易中心配置 */
192+
const getConfig = async () => {
193+
formLoading.value = true
194+
try {
195+
const data = await ConfigApi.getTradeConfig()
196+
if (data != null) {
197+
data.brokeragePostUrls = data.brokeragePostUrls.map((url) => ({ url }))
198+
formData.value = data
199+
}
200+
} finally {
201+
formLoading.value = false
202+
}
203+
}
204+
205+
/** 初始化 **/
206+
onMounted(() => {
207+
getConfig()
208+
})
209+
</script>

0 commit comments

Comments
 (0)