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:
@@ -322,6 +322,18 @@ export async function listSites(): Promise<Site[]> {
|
||||
return extract(resp).items ?? []
|
||||
}
|
||||
|
||||
export interface DistributionSiteDefaults {
|
||||
default_settlement_hold_days: number
|
||||
}
|
||||
|
||||
// fetchDistributionSiteDefaults 读取新建站点的默认结算冷却天数,供开通表单预填。
|
||||
export async function fetchDistributionSiteDefaults(): Promise<DistributionSiteDefaults> {
|
||||
const resp = await api.get<ApiResponse<DistributionSiteDefaults>>(
|
||||
'/admin/distribution/site-defaults'
|
||||
)
|
||||
return extract(resp)
|
||||
}
|
||||
|
||||
export async function listRules(siteID?: number, mode?: string): Promise<Rule[]> {
|
||||
const resp = await api.get<ApiResponse<{ items: Rule[] }>>('/admin/distribution/rules', {
|
||||
params: { site_id: siteID || undefined, mode: mode || undefined },
|
||||
|
||||
@@ -17,7 +17,7 @@ import {
|
||||
Descriptions,
|
||||
} from 'antd'
|
||||
import { PlusOutlined, ShopOutlined, CopyOutlined } from '@ant-design/icons'
|
||||
import { listSites, onboardSite, type Site, type OnboardSitePayload, type OnboardSiteResult } from '../api'
|
||||
import { listSites, onboardSite, fetchDistributionSiteDefaults, type Site, type OnboardSitePayload, type OnboardSiteResult } from '../api'
|
||||
|
||||
export default function Sites({ isSuperadmin = true }: { isSuperadmin?: boolean }) {
|
||||
const [items, setItems] = useState<Site[]>([])
|
||||
@@ -25,6 +25,7 @@ export default function Sites({ isSuperadmin = true }: { isSuperadmin?: boolean
|
||||
const [modalOpen, setModalOpen] = useState(false)
|
||||
const [submitting, setSubmitting] = useState(false)
|
||||
const [successResult, setSuccessResult] = useState<OnboardSiteResult | null>(null)
|
||||
const [defaultSettlementHoldDays, setDefaultSettlementHoldDays] = useState(7)
|
||||
const [form] = Form.useForm()
|
||||
|
||||
const loadData = () => {
|
||||
@@ -37,6 +38,16 @@ export default function Sites({ isSuperadmin = true }: { isSuperadmin?: boolean
|
||||
|
||||
useEffect(() => {
|
||||
loadData()
|
||||
fetchDistributionSiteDefaults()
|
||||
.then((res) => {
|
||||
const days = res?.default_settlement_hold_days
|
||||
if (typeof days === 'number' && days >= 0 && days <= 365) {
|
||||
setDefaultSettlementHoldDays(days)
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
// 拉取失败时保持内置默认值 7
|
||||
})
|
||||
}, [])
|
||||
|
||||
const handleOpenModal = () => {
|
||||
@@ -46,7 +57,7 @@ export default function Sites({ isSuperadmin = true }: { isSuperadmin?: boolean
|
||||
display_account_enabled: true,
|
||||
tax_enabled: false,
|
||||
tax_rate_bps: 100,
|
||||
settlement_hold_days: 7,
|
||||
settlement_hold_days: defaultSettlementHoldDays,
|
||||
})
|
||||
setModalOpen(true)
|
||||
}
|
||||
@@ -65,7 +76,7 @@ export default function Sites({ isSuperadmin = true }: { isSuperadmin?: boolean
|
||||
display_account_enabled: values.display_account_enabled,
|
||||
tax_enabled: values.tax_enabled,
|
||||
tax_rate_bps: values.tax_enabled ? values.tax_rate_bps : 0,
|
||||
settlement_hold_days: Number(values.settlement_hold_days ?? 7),
|
||||
settlement_hold_days: Number(values.settlement_hold_days ?? defaultSettlementHoldDays),
|
||||
}
|
||||
const res = await onboardSite(payload)
|
||||
message.success('分销站点及分销商管理员开通成功!')
|
||||
|
||||
Reference in New Issue
Block a user