feat(invitation): 支持分销站点自主配置返利比例与权限隔离

- 后端新增分站专属配置及审计接口(/api/distribution/invitation-config 等),基于分站管理员严格鉴权隔离
- 分销独立后台新增「邀请返利设置」页面(Invitations.tsx),支持分站管理员自主开启/调整返利比例并查看本站流水
- 主站后台邀请接口路径补齐 /admin 前缀,解决 404/401 鉴权作用域问题
- 验证方式:backend 单元测试全数通过,distribution-admin 类型与构建检查通过
This commit is contained in:
yml2213
2026-10-10 13:47:53 +08:00
parent 984433f866
commit 7cddbe9463
8 changed files with 799 additions and 7 deletions
@@ -126,7 +126,7 @@ async function loadInvitations() {
params.distribution_site_id = invitationQuery.distribution_site_id
}
const { data } = await apiClient.get('/invitations', { params })
const { data } = await apiClient.get('/admin/invitations', { params })
invitations.value = data.data.items || []
invitationsTotal.value = data.data.total || 0
} catch (err) {
@@ -150,7 +150,7 @@ async function loadRebates() {
params.distribution_site_id = rebateQuery.distribution_site_id
}
const { data } = await apiClient.get('/invitations/rebates', { params })
const { data } = await apiClient.get('/admin/invitations/rebates', { params })
rebates.value = data.data.items || []
rebatesTotal.value = data.data.total || 0
} catch (err) {
@@ -231,6 +231,14 @@ function cycleLabel(cycle: string) {
</el-select>
<el-button :icon="Refresh" circle @click="loadConfig" />
</div>
<div v-if="selectedSiteId === 0" class="site-desc-hint">
💡
说明:当前配置为【主站平台订单默认分成比例】(分站未设置专属比例时作为全局兜底)。各加盟分销站可在其专属【分销后台】中自主调整属于该分站的返利比例,分成支出由分站自身收益承担。
</div>
<div v-else class="site-desc-hint">
💡
说明:当前正在为指定分销站维护专属返利比例(该分站管理员亦可在其独立分销后台中自主设置,分成支出由该分站自身收益承担)。
</div>
</div>
<div v-loading="loadingConfig" class="config-form-body">
@@ -507,9 +515,19 @@ function cycleLabel(cycle: string) {
display: flex;
align-items: center;
gap: 12px;
padding-bottom: 18px;
padding-bottom: 14px;
border-bottom: 1px solid #f1f5f9;
margin-bottom: 20px;
margin-bottom: 14px;
}
.site-desc-hint {
font-size: 13px;
color: #475569;
background: #f8fafc;
border-left: 3px solid #3b82f6;
padding: 8px 12px;
border-radius: 4px;
margin-bottom: 18px;
}
.rate-input-box {