feat: 系统配置
Some checks failed
构建并部署前端到测试环境 / build-and-deploy (push) Has been cancelled

This commit is contained in:
luo
2026-07-25 14:13:49 +08:00
parent ee508c3e1e
commit dd6bceeeb7
20 changed files with 805 additions and 41 deletions

View File

@@ -113,17 +113,18 @@
<!-- 套餐配置 -->
<div v-if="form.shop_id" class="form-section-title">
<span class="title-text">套餐配置</span>
<span class="title-text">套餐配置</span>
</div>
<template v-if="form.shop_id">
<!-- 选择套餐 -->
<ElFormItem label="选择套餐">
<ElFormItem label="选择套餐" prop="packages">
<ElSelect
v-model="selectedPackageIds"
placeholder="请选择套餐"
style="width: 100%"
multiple
:multiple-limit="100"
filterable
remote
:remote-method="searchPackages"
@@ -142,7 +143,7 @@
:value="pkg.id"
/>
</ElSelect>
<div class="form-tip">选择该授权下包含的套餐</div>
<div class="form-tip">首次创建必须选择 1100 个不重复套餐</div>
</ElFormItem>
<!-- 套餐成本价 -->
@@ -799,6 +800,24 @@
shop_id: [{ required: true, message: '请选择店铺', trigger: 'change' }]
}
baseRules.packages = [
{
validator: (_rule, value, callback) => {
const packageIds = (value || []).map((pkg: { package_id: number }) => pkg.package_id)
if (packageIds.length < 1) {
callback(new Error('请至少选择 1 个套餐'))
} else if (packageIds.length > 100) {
callback(new Error('最多选择 100 个套餐'))
} else if (new Set(packageIds).size !== packageIds.length) {
callback(new Error('套餐不能重复'))
} else {
callback()
}
},
trigger: 'change'
}
]
// 只有启用一次性佣金时才添加佣金验证规则
if (form.enable_one_time_commission) {
// 根据佣金类型添加验证规则
@@ -1092,9 +1111,9 @@
// 移除套餐
const removePackage = (index: number) => {
const removedPackageId = form.packages[index]?.package_id
form.packages.splice(index, 1)
// 同步更新选中的套餐ID
const removedPackageId = form.packages[index]?.package_id
if (removedPackageId) {
const idIndex = selectedPackageIds.value.indexOf(removedPackageId)
if (idIndex > -1) {
@@ -1732,6 +1751,20 @@
cost_price: Math.round((pkg.cost_price ?? 0) * 100)
}))
if (dialogType.value === 'add') {
const packageIds = packageItems.map((pkg: { package_id: number }) => pkg.package_id)
if (packageIds.length < 1 || packageIds.length > 100) {
ElMessage.error('首次创建必须选择 1100 个套餐')
submitLoading.value = false
return
}
if (new Set(packageIds).size !== packageIds.length) {
ElMessage.error('套餐不能重复')
submitLoading.value = false
return
}
}
if (packageItems.length > 0) {
// 验证是否包含赠送套餐
for (const pkg of form.packages) {
@@ -1815,8 +1848,8 @@
let fieldsToValidate: string[] = []
if (currentStep.value === 0) {
// 第一步:验证系列店铺选择
fieldsToValidate = ['series_id', 'shop_id']
// 第一步:验证系列店铺和初始套餐
fieldsToValidate = ['series_id', 'shop_id', 'packages']
}
try {