CP解绑金币
This commit is contained in:
parent
e4147ec2fa
commit
0730d0609a
@ -33,6 +33,14 @@ interface CpLevelConfig {
|
|||||||
requiredIntimacyValue: number;
|
requiredIntimacyValue: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RelationType = 'BROTHER' | 'CP' | 'SISTERS';
|
||||||
|
|
||||||
|
const relationTypeOptions: Array<{ label: string; value: RelationType }> = [
|
||||||
|
{ label: 'CP', value: 'CP' },
|
||||||
|
{ label: 'Brother', value: 'BROTHER' },
|
||||||
|
{ label: 'Sisters', value: 'SISTERS' },
|
||||||
|
];
|
||||||
|
|
||||||
function defaultLevel(level: number): CpLevelConfig {
|
function defaultLevel(level: number): CpLevelConfig {
|
||||||
return {
|
return {
|
||||||
cabinConfigId: null,
|
cabinConfigId: null,
|
||||||
@ -46,6 +54,14 @@ function defaultLevels() {
|
|||||||
return Array.from({ length: 5 }, (_, index) => defaultLevel(index + 1));
|
return Array.from({ length: 5 }, (_, index) => defaultLevel(index + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function defaultDismissConsumeGolds(): Record<RelationType, number> {
|
||||||
|
return {
|
||||||
|
BROTHER: 0,
|
||||||
|
CP: 0,
|
||||||
|
SISTERS: 0,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
const accessStore = useAccessStore();
|
const accessStore = useAccessStore();
|
||||||
const sysOriginOptions = computed(() => {
|
const sysOriginOptions = computed(() => {
|
||||||
const options = getAllowedSysOrigins(accessStore.accessCodes || []);
|
const options = getAllowedSysOrigins(accessStore.accessCodes || []);
|
||||||
@ -68,6 +84,7 @@ const columns = [
|
|||||||
|
|
||||||
const form = reactive({
|
const form = reactive({
|
||||||
configured: false,
|
configured: false,
|
||||||
|
dismissConsumeGolds: defaultDismissConsumeGolds(),
|
||||||
sysOrigin: '',
|
sysOrigin: '',
|
||||||
levels: defaultLevels(),
|
levels: defaultLevels(),
|
||||||
});
|
});
|
||||||
@ -96,10 +113,16 @@ function normalizeLevels(levels: Array<Record<string, any>> | undefined) {
|
|||||||
|
|
||||||
function applyConfig(result: Record<string, any> | null | undefined) {
|
function applyConfig(result: Record<string, any> | null | undefined) {
|
||||||
const value = result ?? {};
|
const value = result ?? {};
|
||||||
|
const dismissConsumeGolds = value.dismissConsumeGolds || {};
|
||||||
form.configured = Boolean(value.configured);
|
form.configured = Boolean(value.configured);
|
||||||
form.sysOrigin = String(
|
form.sysOrigin = String(
|
||||||
value.sysOrigin || form.sysOrigin || sysOriginOptions.value[0]?.value || '',
|
value.sysOrigin || form.sysOrigin || sysOriginOptions.value[0]?.value || '',
|
||||||
);
|
);
|
||||||
|
form.dismissConsumeGolds = {
|
||||||
|
BROTHER: Number(dismissConsumeGolds.BROTHER || 0),
|
||||||
|
CP: Number(dismissConsumeGolds.CP || 0),
|
||||||
|
SISTERS: Number(dismissConsumeGolds.SISTERS || 0),
|
||||||
|
};
|
||||||
form.levels = normalizeLevels(value.levels);
|
form.levels = normalizeLevels(value.levels);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,6 +140,13 @@ async function loadConfig() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function validateLevels() {
|
function validateLevels() {
|
||||||
|
for (const item of relationTypeOptions) {
|
||||||
|
const gold = Number(form.dismissConsumeGolds[item.value] || 0);
|
||||||
|
if (gold < 0) {
|
||||||
|
message.error(`${item.label} 解绑金币不能小于 0`);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
let previous = -1;
|
let previous = -1;
|
||||||
for (const item of form.levels) {
|
for (const item of form.levels) {
|
||||||
const requiredValue = Number(item.requiredIntimacyValue || 0);
|
const requiredValue = Number(item.requiredIntimacyValue || 0);
|
||||||
@ -133,6 +163,14 @@ function validateLevels() {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function buildDismissConsumeGolds() {
|
||||||
|
const result = defaultDismissConsumeGolds();
|
||||||
|
for (const item of relationTypeOptions) {
|
||||||
|
result[item.value] = Number(form.dismissConsumeGolds[item.value] || 0);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
async function submitForm() {
|
async function submitForm() {
|
||||||
if (!validateLevels()) {
|
if (!validateLevels()) {
|
||||||
return;
|
return;
|
||||||
@ -141,6 +179,7 @@ async function submitForm() {
|
|||||||
try {
|
try {
|
||||||
await saveResidentCpConfig({
|
await saveResidentCpConfig({
|
||||||
sysOrigin: form.sysOrigin,
|
sysOrigin: form.sysOrigin,
|
||||||
|
dismissConsumeGolds: buildDismissConsumeGolds(),
|
||||||
levels: form.levels.map((item) => ({
|
levels: form.levels.map((item) => ({
|
||||||
cabinConfigId: item.cabinConfigId || null,
|
cabinConfigId: item.cabinConfigId || null,
|
||||||
level: item.level,
|
level: item.level,
|
||||||
@ -160,8 +199,8 @@ function handleSave() {
|
|||||||
async onOk() {
|
async onOk() {
|
||||||
await submitForm();
|
await submitForm();
|
||||||
},
|
},
|
||||||
title: '确认保存 CP 等级积分配置?',
|
title: '确认保存 CP 配置?',
|
||||||
content: '保存后 Flutter 端 CP 权益配置接口会读取新的 5 级亲密值。',
|
content: '保存后 Flutter 端 CP 权益配置接口会读取新的等级亲密值和解绑金币。',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -189,7 +228,7 @@ watch(
|
|||||||
<template>
|
<template>
|
||||||
<Page auto-content-height>
|
<Page auto-content-height>
|
||||||
<Spin :spinning="loading">
|
<Spin :spinning="loading">
|
||||||
<Card :bordered="false" title="CP 等级积分配置">
|
<Card :bordered="false" title="CP 配置">
|
||||||
<Space class="toolbar" wrap>
|
<Space class="toolbar" wrap>
|
||||||
<Select
|
<Select
|
||||||
v-model:value="form.sysOrigin"
|
v-model:value="form.sysOrigin"
|
||||||
@ -208,6 +247,23 @@ watch(
|
|||||||
</Button>
|
</Button>
|
||||||
</Space>
|
</Space>
|
||||||
|
|
||||||
|
<div class="section-title">解绑金币配置</div>
|
||||||
|
<Space class="gold-fields" wrap>
|
||||||
|
<div
|
||||||
|
v-for="item in relationTypeOptions"
|
||||||
|
:key="item.value"
|
||||||
|
class="gold-field"
|
||||||
|
>
|
||||||
|
<div class="field-label">{{ item.label }}</div>
|
||||||
|
<InputNumber
|
||||||
|
v-model:value="form.dismissConsumeGolds[item.value]"
|
||||||
|
:min="0"
|
||||||
|
:precision="0"
|
||||||
|
style="width: 180px"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</Space>
|
||||||
|
|
||||||
<Table
|
<Table
|
||||||
:columns="columns"
|
:columns="columns"
|
||||||
:data-source="form.levels"
|
:data-source="form.levels"
|
||||||
@ -244,4 +300,18 @@ watch(
|
|||||||
.toolbar {
|
.toolbar {
|
||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.section-title {
|
||||||
|
margin: 8px 0 12px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gold-fields {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.field-label {
|
||||||
|
margin-bottom: 6px;
|
||||||
|
color: rgb(80 80 80);
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user