fix: simplify badge resource form

This commit is contained in:
zhx 2026-05-16 22:36:25 +08:00
parent 5260a674ae
commit 1b835ba52d

View File

@ -25,7 +25,6 @@ import {
import {
BADGE_DISPLAY_TYPE_OPTIONS,
BADGE_TYPE_OPTIONS,
NOBLE_VIP_OPTIONS,
PROPS_RESOURCE_CONFIG_TYPES,
} from '../shared';
@ -56,14 +55,10 @@ const form = reactive<Record<string, any>>({
adminFree: false,
amount: '',
badgeDisplayType: 'SHORT',
badgeKey: '',
badgeLevel: '',
badgeType: 'ACTIVITY',
code: '',
cover: '',
expand: '',
id: '',
milestone: '',
name: '',
notSelectUrl: '',
sourceUrl: '',
@ -103,12 +98,6 @@ const nobleVipNameOptions = NOBLE_VIP_OPTIONS.map((item) => ({
label: item.name,
value: item.value as any,
}));
const badgeTypeOptions = BADGE_TYPE_OPTIONS.filter((item) =>
['VIP', 'ACHIEVEMENT', 'ACTIVITY'].includes(String(item.value)),
).map((item) => ({
label: item.name,
value: item.value as any,
}));
const badgeDisplayTypeOptions = BADGE_DISPLAY_TYPE_OPTIONS.map((item) => ({
label: item.name,
value: item.value as any,
@ -127,31 +116,17 @@ function parseBadgeExpand(value: unknown) {
function applyBadgeExpand(value: unknown) {
const expand = parseBadgeExpand(value);
form.badgeKey = expand.badgeKey ?? '';
form.badgeLevel = expand.badgeLevel ?? '';
form.badgeType = expand.badgeType || 'ACTIVITY';
form.badgeDisplayType = normalizeBadgeDisplayType(
expand.badgeDisplayType || expand.displayType,
form.badgeType,
expand.badgeType,
);
form.milestone = expand.milestone ?? '';
form.notSelectUrl = expand.notSelectUrl ?? '';
}
function buildBadgeExpand() {
const expand: Record<string, any> = {
badgeDisplayType: normalizeBadgeDisplayType(form.badgeDisplayType, form.badgeType),
badgeType: form.badgeType || 'ACTIVITY',
badgeDisplayType: normalizeBadgeDisplayType(form.badgeDisplayType),
};
if (String(form.badgeKey || '').trim()) {
expand.badgeKey = String(form.badgeKey).trim();
}
if (String(form.badgeLevel || '').trim()) {
expand.badgeLevel = Number(form.badgeLevel);
}
if (String(form.milestone || '').trim()) {
expand.milestone = Number(form.milestone);
}
if (String(form.notSelectUrl || '').trim()) {
expand.notSelectUrl = String(form.notSelectUrl).trim();
}
@ -170,14 +145,10 @@ function resetForm() {
form.adminFree = false;
form.amount = '';
form.badgeDisplayType = 'SHORT';
form.badgeKey = '';
form.badgeLevel = '';
form.badgeType = 'ACTIVITY';
form.code = '';
form.cover = '';
form.expand = '';
form.id = '';
form.milestone = '';
form.name = '';
form.notSelectUrl = '';
form.sourceUrl = '';
@ -229,9 +200,6 @@ watch(
form.sourceUrl = '';
form.expand = '';
}
if (value === 'BADGE' && !form.badgeType) {
form.badgeType = 'ACTIVITY';
}
if (value === 'BADGE' && !form.badgeDisplayType) {
form.badgeDisplayType = 'SHORT';
}
@ -307,30 +275,10 @@ function validateForm() {
message.warning('请选择类型');
return false;
}
if (form.type === 'BADGE' && !form.badgeType) {
message.warning('请选择徽章类型');
return false;
}
if (form.type === 'BADGE' && !form.badgeDisplayType) {
message.warning('请选择徽章展示形态');
return false;
}
if (
form.type === 'BADGE' &&
String(form.badgeLevel || '').trim() &&
Number.isNaN(Number(form.badgeLevel))
) {
message.warning('请输入正确的徽章等级');
return false;
}
if (
form.type === 'BADGE' &&
String(form.milestone || '').trim() &&
Number.isNaN(Number(form.milestone))
) {
message.warning('请输入正确的成就里程碑');
return false;
}
if (!String(form.cover || '').trim()) {
message.warning('请上传封面');
return false;
@ -418,22 +366,6 @@ async function handleSubmit() {
option-label-prop="label"
/>
</FormItem>
<FormItem label="徽章类型">
<Select
v-model:value="form.badgeType"
:options="badgeTypeOptions"
option-label-prop="label"
/>
</FormItem>
<FormItem label="徽章等级">
<Input v-model:value="form.badgeLevel" placeholder="无等级可填 0" />
</FormItem>
<FormItem label="徽章 Key">
<Input v-model:value="form.badgeKey" placeholder="不填则使用编码" />
</FormItem>
<FormItem label="成就里程碑">
<Input v-model:value="form.milestone" placeholder="活动徽章可不填" />
</FormItem>
</template>
<FormItem label="封面">
<input