feat(distribution): 默认结算冷却天数改为系统配置驱动

新建站点的默认冷却期原先硬编码 7 天(OnboardSite 字面量、DB 列默认、两套前端表单),
改一处要同时动三处。现统一到系统配置键 distribution.default_settlement_hold_days:

- systemconfig 注册该键(默认 7,0=立即释放,0-365 校验),纳入 admin 可见配置
- distribution 建站两条路径(CreateSite 未传值、OnboardSite 缺省)读取该配置,缺失或非法回落 7
- 新增 GET /admin/distribution/site-defaults 暴露当前有效默认值
- Vue / React 站点表单改为运行时拉取,拉取失败保持 7
- DB 列默认值保留作为兜底,站点级 settlement_hold_days 仍可单独覆盖
This commit is contained in:
yml2213
2026-09-10 18:54:23 +08:00
parent dbe9aaabfe
commit e3a75fb2d7
13 changed files with 259 additions and 8 deletions
@@ -119,6 +119,17 @@ export async function fetchDistributionSites() {
return data.data.items ?? []
}
export interface DistributionSiteDefaults {
default_settlement_hold_days: number
}
export async function fetchDistributionSiteDefaults() {
const { data } = await apiClient.get<ApiResponse<DistributionSiteDefaults>>(
'/admin/distribution/site-defaults'
)
return data.data
}
export async function onboardDistributionSite(payload: OnboardDistributionSitePayload) {
const { data } = await apiClient.post<ApiResponse<OnboardDistributionSiteResult>>(
'/admin/distribution/sites/onboard',
@@ -4,6 +4,7 @@ import { ElMessage, type FormInstance, type FormRules } from 'element-plus'
import { Plus, Shop, Link, DocumentCopy, Refresh, Clock } from '@element-plus/icons-vue'
import {
fetchDistributionSites,
fetchDistributionSiteDefaults,
onboardDistributionSite,
syncDistributionSiteAccounts,
updateDistributionSite,
@@ -16,6 +17,7 @@ import { readError } from '@/shared/utils/error'
const loading = ref(false)
const sites = ref<DistributionSite[]>([])
const defaultSettlementHoldDays = ref(7)
const onboardDialogVisible = ref(false)
const submitting = ref(false)
@@ -29,13 +31,13 @@ const settlementSubmitting = ref(false)
const settlementForm = reactive({
site_id: 0,
site_name: '',
settlement_hold_days: 7,
settlement_hold_days: defaultSettlementHoldDays.value,
})
function handleOpenSettlement(row: DistributionSite) {
settlementForm.site_id = row.id
settlementForm.site_name = row.site_name
settlementForm.settlement_hold_days = row.settlement_hold_days ?? 7
settlementForm.settlement_hold_days = row.settlement_hold_days ?? defaultSettlementHoldDays.value
settlementDialogVisible.value = true
}
@@ -63,7 +65,7 @@ const onboardForm = reactive({
admin_password: '',
admin_nickname: '',
member_type: 'operator',
settlement_hold_days: 7,
settlement_hold_days: defaultSettlementHoldDays.value,
display_account_enabled: true,
tax_enabled: false,
tax_rate_bps: 100,
@@ -102,7 +104,7 @@ function handleOpenOnboard() {
onboardForm.admin_password = ''
onboardForm.admin_nickname = ''
onboardForm.member_type = 'operator'
onboardForm.settlement_hold_days = 7
onboardForm.settlement_hold_days = defaultSettlementHoldDays.value
onboardForm.display_account_enabled = true
onboardForm.tax_enabled = false
onboardForm.tax_rate_bps = 100
@@ -171,6 +173,16 @@ async function handleSyncAccounts(row: DistributionSite) {
onMounted(() => {
loadSites()
fetchDistributionSiteDefaults()
.then(res => {
const days = res?.default_settlement_hold_days
if (typeof days === 'number' && days >= 0 && days <= 365) {
defaultSettlementHoldDays.value = days
}
})
.catch(() => {
// 拉取失败时保持内置默认值 7,不弹错误提示
})
})
</script>