diff --git a/.agents/skills/mas-plan-schedule/SKILL.md b/.agents/skills/mas-plan-schedule/SKILL.md index fb3ed39345..a0f22299dd 100644 --- a/.agents/skills/mas-plan-schedule/SKILL.md +++ b/.agents/skills/mas-plan-schedule/SKILL.md @@ -8,6 +8,8 @@ description: Use when adding, refactoring, or reviewing AUTO-MAS plan schedule t ## Objective Keep AUTO-MAS plan schedules easy to extend without turning them into a generic field engine. Each schedule type owns its data model, config class, table UI, and account consumption path. Shared code should only cover type registration, API dispatch, list selection, and CRUD orchestration. +`UniversalPlanConfig` describes General scripts only. Keep its documentation and regression tests scoped to that feature; define specialized plan behavior in the owning adapter. + ## Current Architecture Backend has one shared multi-config collection and one lightweight registration table. diff --git a/app/api/plan.py b/app/api/plan.py index 6bf229fe05..d1a03aaeba 100644 --- a/app/api/plan.py +++ b/app/api/plan.py @@ -36,6 +36,9 @@ from app.models.schema import OutBase from app.utils import get_logger +OkwwPlanConfig = ConfigPayload[_config_models.OkwwPlanConfig] +OkwwPlanConfigInput = StrictConfigInput[_config_models.OkwwPlanConfig] + OkNtePlanConfig = ConfigPayload[_config_models.OkNtePlanConfig] OkNtePlanConfigInput = StrictConfigInput[_config_models.OkNtePlanConfig] @@ -58,6 +61,7 @@ "MSSPlanConfig", "UniversalPlanConfig", "OkNtePlanConfig", + "OkwwPlanConfig", ] @@ -67,7 +71,13 @@ class PlanIndexItem(BaseModel): PlanCreateType = Literal[ - "MaaPlan", "MaaEndPlan", "BAAHPlan", "MSSPlan", "UniversalPlan", "OkNtePlan" + "MaaPlan", + "MaaEndPlan", + "BAAHPlan", + "MSSPlan", + "UniversalPlan", + "OkNtePlan", + "OkwwPlan", ] @@ -78,6 +88,7 @@ class PlanIndexItem(BaseModel): | MSSPlanConfig | UniversalPlanConfig | OkNtePlanConfig + | OkwwPlanConfig ) type PlanConfigDataInput = ( MaaPlanConfigInput @@ -86,6 +97,7 @@ class PlanIndexItem(BaseModel): | MSSPlanConfigInput | UniversalPlanConfigInput | OkNtePlanConfigInput + | OkwwPlanConfigInput ) diff --git a/app/core/config/manager.py b/app/core/config/manager.py index 9f3645adce..1e586509fb 100644 --- a/app/core/config/manager.py +++ b/app/core/config/manager.py @@ -92,6 +92,7 @@ OkNtePlanConfig, OkNteUserConfig, OkwwConfig, + OkwwPlanConfig, OkwwUserConfig, PlanConfigType, QueueConfig, @@ -1631,7 +1632,13 @@ async def reorder_user(self, script_id: str, index_list: list[str]) -> None: async def add_plan( self, script: Literal[ - "MaaPlan", "MaaEndPlan", "BAAHPlan", "MSSPlan", "UniversalPlan", "OkNtePlan" + "MaaPlan", + "MaaEndPlan", + "BAAHPlan", + "MSSPlan", + "UniversalPlan", + "OkNtePlan", + "OkwwPlan", ], *, payload: dict[str, Any] | None = None, @@ -1643,7 +1650,8 @@ async def add_plan( | BAAHPlanConfig | MSSPlanConfig | UniversalPlanConfig - | OkNtePlanConfig, + | OkNtePlanConfig + | OkwwPlanConfig, ]: """添加计划表""" diff --git a/app/models/config/__init__.py b/app/models/config/__init__.py index f8a31d3f7c..97c06f5d3c 100644 --- a/app/models/config/__init__.py +++ b/app/models/config/__init__.py @@ -62,6 +62,14 @@ class _PlanRegistration(TypedDict): PLAN_BOOK: dict[str, _PlanRegistration] = { + "OkwwPlanConfig": { + "create_type": "OkwwPlan", + "config_class": OkwwPlanConfig, + "consumer": PLAN_CONSUMER_VALUES[6], + "script_class": OkwwConfig, + "field_group": "Info", + "field_name": "PlanMode", + }, "OkNtePlanConfig": { "create_type": "OkNtePlan", "config_class": OkNtePlanConfig, @@ -74,7 +82,7 @@ class _PlanRegistration(TypedDict): "create_type": "UniversalPlan", "config_class": UniversalPlanConfig, "consumer": PLAN_CONSUMER_VALUES[4], - # 只服务通用脚本:专项各自的整份配置由各自计划承载 + # General 的完整原生配置轮换计划 "script_class": GeneralConfig, "field_group": "Info", "field_name": "PlanMode", diff --git a/app/models/config/plan.py b/app/models/config/plan.py index 728ac5c543..9f37e0ce63 100644 --- a/app/models/config/plan.py +++ b/app/models/config/plan.py @@ -26,7 +26,7 @@ from typing import Annotated, Literal from uuid import UUID -from pydantic import Field +from pydantic import BeforeValidator, ConfigDict, Field, create_model from app.config import ( ConfigGroup, @@ -37,6 +37,7 @@ from .base import DomainEntry from .shared import ( + OkwwTaskFields, default_baah_plan_key, none_as, normalize_baah_plan_key, @@ -680,7 +681,7 @@ def normalize_payload(cls, data): class UniversalPlanConfig(PlanDaysConfig): - """完整原生配置的按日轮换;初版由通用脚本消费。""" + """通用脚本完整原生配置的按日轮换。""" class InfoFields(ConfigGroup): Name: str = Field(default="新通用脚本计划表", description="计划表名称") @@ -767,6 +768,92 @@ class InfoFields(ConfigGroup): Info: InfoFields = Field(default_factory=InfoFields) +# 日常字段只声明一次;计划中的空值表示继承,不把默认值当作当天覆写。 +OkwwPlanKey = create_model( + "OkwwPlanKey", + __config__=ConfigDict(extra="forbid"), + **{ + name: ( + Annotated[field.annotation | None, *metadata] + if ( + metadata := [ + item + for item in field.metadata + if not isinstance(item, BeforeValidator) + ] + ) + else field.annotation | None, + Field(default=None, description=field.description), + ) + for name, field in OkwwTaskFields.model_fields.items() + }, +) + + +class OkwwPlanConfig(WeeklyKeyPlan): + """按日叠加日常体力参数,其他账号配置保持原有来源。""" + + class DayFields(ConfigGroup): + Key: OkwwPlanKey = Field( + default_factory=lambda: OkwwPlanKey( + WhichToFarm="Tacet Suppression", + WhichTacetSuppressionToFarm=1, + WhichForgeryChallengeToFarm=1, + MaterialSelection="Shell Credit", + ), + description="体力计划参数", + ) + + ALL: DayFields = Field(default_factory=DayFields) + Monday: DayFields = Field(default_factory=DayFields) + Tuesday: DayFields = Field(default_factory=DayFields) + Wednesday: DayFields = Field(default_factory=DayFields) + Thursday: DayFields = Field(default_factory=DayFields) + Friday: DayFields = Field(default_factory=DayFields) + Saturday: DayFields = Field(default_factory=DayFields) + Sunday: DayFields = Field(default_factory=DayFields) + Day1: DayFields = Field(default_factory=DayFields) + Day2: DayFields = Field(default_factory=DayFields) + Day3: DayFields = Field(default_factory=DayFields) + Day4: DayFields = Field(default_factory=DayFields) + Day5: DayFields = Field(default_factory=DayFields) + Day6: DayFields = Field(default_factory=DayFields) + Day7: DayFields = Field(default_factory=DayFields) + Day8: DayFields = Field(default_factory=DayFields) + Day9: DayFields = Field(default_factory=DayFields) + Day10: DayFields = Field(default_factory=DayFields) + Day11: DayFields = Field(default_factory=DayFields) + Day12: DayFields = Field(default_factory=DayFields) + Day13: DayFields = Field(default_factory=DayFields) + Day14: DayFields = Field(default_factory=DayFields) + Day15: DayFields = Field(default_factory=DayFields) + Day16: DayFields = Field(default_factory=DayFields) + Day17: DayFields = Field(default_factory=DayFields) + Day18: DayFields = Field(default_factory=DayFields) + Day19: DayFields = Field(default_factory=DayFields) + Day20: DayFields = Field(default_factory=DayFields) + Day21: DayFields = Field(default_factory=DayFields) + Day22: DayFields = Field(default_factory=DayFields) + Day23: DayFields = Field(default_factory=DayFields) + Day24: DayFields = Field(default_factory=DayFields) + Day25: DayFields = Field(default_factory=DayFields) + Day26: DayFields = Field(default_factory=DayFields) + Day27: DayFields = Field(default_factory=DayFields) + Day28: DayFields = Field(default_factory=DayFields) + Day29: DayFields = Field(default_factory=DayFields) + Day30: DayFields = Field(default_factory=DayFields) + Day31: DayFields = Field(default_factory=DayFields) + + class InfoFields(ConfigGroup): + Name: str = Field(default="新 Okww 计划表", description="计划表名称") + Mode: Literal["ALL", "Weekly", "Rotate"] = Field( + default="Weekly", description="计划模式" + ) + RotateDays: int = Field(default=7, ge=1, le=31, description="轮换天数") + + Info: InfoFields = Field(default_factory=InfoFields) + + type PlanConfigType = ( MaaPlanConfig | MaaEndPlanConfig @@ -774,12 +861,14 @@ class InfoFields(ConfigGroup): | MSSPlanConfig | UniversalPlanConfig | OkNtePlanConfig + | OkwwPlanConfig ) __all__ = [ "PlanConfigType", "OkNtePlanConfig", + "OkwwPlanConfig", "UniversalPlanConfig", "WeeklyKeyPlan", "MaaPlanConfig", diff --git a/app/models/config/script.py b/app/models/config/script.py index fe9f864989..e161a1ca0d 100644 --- a/app/models/config/script.py +++ b/app/models/config/script.py @@ -64,11 +64,13 @@ MaaPlanConfig, MSSPlanConfig, OkNtePlanConfig, + OkwwPlanConfig, UniversalPlanConfig, ) from .queue import Webhook from .shared import ( _BGI_LEGACY_SERVERS_TO_RESOURCE, + OkwwTaskFields, SRAProfileName, _migrate_baah_event_first, _migrate_bgi_account_switch_default, @@ -2947,6 +2949,16 @@ class DataFields(ConfigGroup): Data: DataFields = Field(default_factory=DataFields) class InfoFields(ConfigGroup): + PlanMode: Annotated[ + UUID | Literal["Fixed"], + ref( + "PlanConfig", + default="Fixed", + allow_values=("Fixed",), + entry_types=(OkwwPlanConfig,), + ), + ] = Field(default="Fixed", description="固定配置或 Okww 计划表") + Base: Annotated[ Literal["shared", "independent", "native"], legacy( @@ -3044,19 +3056,7 @@ class NotifyFields(ConfigGroup): Notify: NotifyFields = Field(default_factory=NotifyFields) - class TaskFields(ConfigGroup): - AdditionalTasks: list[ - Literal[ - "Check Weekly Garden", - "Auto Farm all Nightmare Nest", - "Merge Echo If discarded > 1000", - "Teleport and Farm 4C Echo", - ] - ] = Field( - default_factory=lambda: ["Check Weekly Garden"], - description="每日任务后运行的附加任务", - ) - + class TaskFields(OkwwTaskFields): IfCustomArguments: bool = Field( default_factory=lambda: False, description="启用自定义启动参数" ) @@ -3065,29 +3065,6 @@ class TaskFields(ConfigGroup): description="自定义启动参数,开启后原样传递给 ok-ww", ) - FarmNightmareNestForDailyEcho: bool = Field( - default_factory=lambda: True, description="使用梦魇巢穴完成日常声骸" - ) - - MaterialSelection: Literal["Resonator EXP", "Weapon EXP", "Shell Credit"] = ( - Field(default_factory=lambda: "Shell Credit", description="模拟领域材料") - ) - - WhichForgeryChallengeToFarm: Annotated[int, Field(ge=1, le=99), none_as(1)] = ( - Field(default_factory=lambda: 1, description="凝素领域序号") - ) - - WhichTacetSuppressionToFarm: Annotated[int, Field(ge=1, le=99), none_as(1)] = ( - Field(default_factory=lambda: 1, description="无音区序号") - ) - - WhichToFarm: Literal[ - "Tacet Suppression", "Forgery Challenge", "Simulation Challenge" - ] = Field( - default_factory=lambda: "Tacet Suppression", - description="每日任务体力用途(仅日常任务且开启覆写常规配置时生效)", - ) - Task: TaskFields = Field(default_factory=TaskFields) Notify_CustomWebhooks: ConfigCollection[Webhook] = collection(Webhook) diff --git a/app/models/config/shared.py b/app/models/config/shared.py index 33d2f7d20f..b3631ec8d9 100644 --- a/app/models/config/shared.py +++ b/app/models/config/shared.py @@ -24,9 +24,11 @@ import json from copy import deepcopy from datetime import datetime, timezone, tzinfo -from typing import TYPE_CHECKING, Annotated, Any, cast +from typing import TYPE_CHECKING, Annotated, Any, Literal, cast -from pydantic import BeforeValidator, TypeAdapter +from pydantic import BeforeValidator, Field, TypeAdapter + +from app.config import ConfigGroup if TYPE_CHECKING: from .script import UserConfigType @@ -536,3 +538,40 @@ def _migrate_baah_event_first(data: dict) -> tuple[dict, bool]: "validate_baah_plan_key", "validate_maaend_plan_key", ] + + +class OkwwTaskFields(ConfigGroup): + AdditionalTasks: list[ + Literal[ + "Check Weekly Garden", + "Auto Farm all Nightmare Nest", + "Merge Echo If discarded > 1000", + "Teleport and Farm 4C Echo", + ] + ] = Field( + default_factory=lambda: ["Check Weekly Garden"], + description="每日任务后运行的附加任务", + ) + + FarmNightmareNestForDailyEcho: bool = Field( + default_factory=lambda: True, description="使用梦魇巢穴完成日常声骸" + ) + + MaterialSelection: Literal["Resonator EXP", "Weapon EXP", "Shell Credit"] = Field( + default_factory=lambda: "Shell Credit", description="模拟领域材料" + ) + + WhichForgeryChallengeToFarm: Annotated[int, Field(ge=1, le=99), none_as(1)] = Field( + default_factory=lambda: 1, description="凝素领域序号" + ) + + WhichTacetSuppressionToFarm: Annotated[int, Field(ge=1, le=99), none_as(1)] = Field( + default_factory=lambda: 1, description="无音区序号" + ) + + WhichToFarm: Literal[ + "Tacet Suppression", "Forgery Challenge", "Simulation Challenge" + ] = Field( + default_factory=lambda: "Tacet Suppression", + description="每日任务体力用途(日常任务按账号覆写或绑定计划生效)", + ) diff --git a/app/models/schema.py b/app/models/schema.py index a98944ceae..3f0fa67410 100644 --- a/app/models/schema.py +++ b/app/models/schema.py @@ -370,7 +370,9 @@ class EmulatorDeleteIn(BaseModel): emulatorId: str = Field(..., description="模拟器 ID") -PlanComboxConsumer = Literal["maa", "maaend", "baah", "mss", "universal", "oknte"] +PlanComboxConsumer = Literal[ + "maa", "maaend", "baah", "mss", "universal", "oknte", "okww" +] class MaaEndAutoEssencePlanKey(BaseModel): diff --git a/app/task/Okww/AutoProxy.py b/app/task/Okww/AutoProxy.py index 56990c2157..0903153e0c 100644 --- a/app/task/Okww/AutoProxy.py +++ b/app/task/Okww/AutoProxy.py @@ -492,19 +492,11 @@ def _apply_mas_overrides(self) -> None: self.script_config_path / "Basic Options.json", {"Exit App when Game Exits": True}, ) - if not self.cur_user_config.Info.IfQuickConfig: - return - _update_json( - self.script_config_path / "DailyTask.json", - { - "Which to Farm": self.cur_user_config.Task.WhichToFarm, - "Which Tacet Suppression to Farm": self.cur_user_config.Task.WhichTacetSuppressionToFarm, - "Which Forgery Challenge to Farm": self.cur_user_config.Task.WhichForgeryChallengeToFarm, - "Material Selection": self.cur_user_config.Task.MaterialSelection, - "Farm Nightmare Nest for Daily Echo": self.cur_user_config.Task.FarmNightmareNestForDailyEcho, - "Additional Tasks to Run After Daily Task": self.cur_user_config.Task.AdditionalTasks, - }, - ) + from .tools.plan import task_config + + task = task_config(self.cur_user_config) + if task: + _update_json(self.script_config_path / "DailyTask.json", task) async def set_okww(self) -> None: """将 MAS 侧 OK-WW 任务配置下发到脚本 working 目录(对齐 General.set_general)。""" diff --git a/app/task/Okww/BatchProxy.py b/app/task/Okww/BatchProxy.py index 3e9598dfb3..6e83885b7d 100644 --- a/app/task/Okww/BatchProxy.py +++ b/app/task/Okww/BatchProxy.py @@ -116,17 +116,10 @@ async def prepare(self): ) if not isinstance(values, dict): raise ValueError(f"日常配置格式错误: {daily}") - if config.Info.IfQuickConfig: - values.update( - { - "Which to Farm": config.Task.WhichToFarm, - "Which Tacet Suppression to Farm": config.Task.WhichTacetSuppressionToFarm, - "Which Forgery Challenge to Farm": config.Task.WhichForgeryChallengeToFarm, - "Material Selection": config.Task.MaterialSelection, - "Farm Nightmare Nest for Daily Echo": config.Task.FarmNightmareNestForDailyEcho, - "Additional Tasks to Run After Daily Task": config.Task.AdditionalTasks, - } - ) + from .tools.plan import task_config + + task = task_config(config) + values.update(task) key = normalize_account_key(config.Info.Id) self.account_users[key] = user self.accounts.append( diff --git a/app/task/Okww/tools/plan.py b/app/task/Okww/tools/plan.py new file mode 100644 index 0000000000..b0a2a2580f --- /dev/null +++ b/app/task/Okww/tools/plan.py @@ -0,0 +1,27 @@ +"""日常计划覆写;未选择的字段继续使用账号本次配置。""" + +from app.core import Config +from app.models.config import OkwwPlanConfig, OkwwUserConfig + + +def task_config(user: OkwwUserConfig) -> dict: + """将账号覆写与当天计划合并,返回供上游消费的日常参数。""" + values = user.Task.model_dump() if user.Info.IfQuickConfig else {} + if user.Info.PlanMode != "Fixed": + plan = Config.PlanConfig[user.Info.PlanMode] + if not isinstance(plan, OkwwPlanConfig): + raise ValueError("所选计划不是 Okww 计划表") + values.update(plan.get_current_key()) + names = { + "WhichToFarm": "Which to Farm", + "WhichTacetSuppressionToFarm": "Which Tacet Suppression to Farm", + "WhichForgeryChallengeToFarm": "Which Forgery Challenge to Farm", + "MaterialSelection": "Material Selection", + "FarmNightmareNestForDailyEcho": "Farm Nightmare Nest for Daily Echo", + "AdditionalTasks": "Additional Tasks to Run After Daily Task", + } + return { + target: values[name] + for name, target in names.items() + if values.get(name) is not None + } diff --git a/app/utils/common/constants.py b/app/utils/common/constants.py index d74877f2e7..e6de018e4f 100644 --- a/app/utils/common/constants.py +++ b/app/utils/common/constants.py @@ -51,7 +51,7 @@ } """配置类型映射表""" -PLAN_CONSUMER_VALUES = ("maa", "maaend", "baah", "mss", "universal", "oknte") +PLAN_CONSUMER_VALUES = ("maa", "maaend", "baah", "mss", "universal", "oknte", "okww") """计划表消费方列表;PLAN_BOOK 按下标引用此项,往中间插入会把已有类型指到别的 消费方,所以新消费方只能追加到末尾(baah 早于 mss 加入,因此排在它前面)""" diff --git a/changelog.d/okww-plan.feat.md b/changelog.d/okww-plan.feat.md new file mode 100644 index 0000000000..80ba4a52fd --- /dev/null +++ b/changelog.d/okww-plan.feat.md @@ -0,0 +1,2 @@ +project: okww +新增可绑定账号的日常计划,支持全局、每周和多天轮换刷本。 diff --git a/frontend/e2e/okww-plan.pw.ts b/frontend/e2e/okww-plan.pw.ts new file mode 100644 index 0000000000..5b5ad43e94 --- /dev/null +++ b/frontend/e2e/okww-plan.pw.ts @@ -0,0 +1,186 @@ +import { expect, test } from './fixtures' +const backend = `http://127.0.0.1:${process.env.AUTO_MAS_E2E_BACKEND_PORT ?? 36174}` + +test.describe('@okww-plan', () => { + test('global, weekly and rotating plans save the selected date only', async ({ app, page }) => { + for (const [mode, group, other] of [ + ['ALL', 'ALL', 'Monday'], + ['Weekly', 'Monday', 'Tuesday'], + ['Rotate', 'Day1', 'Day2'], + ]) { + const created = await ( + await page.request.post(`${backend}/api/plan/add`, { data: { type: 'OkwwPlan' } }) + ).json() + await page.request.post(`${backend}/api/plan/update`, { + data: { planId: created.planId, data: { Info: { Mode: mode, RotateDays: 2 } } }, + }) + await app.goto(`/plans?planId=${created.planId}`) + await page.reload() + const table = page.locator('.okww-plan-table') + const number = table.locator('input[role="spinbutton"]').first() + await expect(number).toHaveValue('1') + const saved = page.waitForResponse(r => r.url().includes('/api/plan/update')) + await number.fill('3') + await number.press('Tab') + expect((await (await saved).json()).code).toBe(200) + await page.reload() + await expect(number).toHaveValue('3') + const result = ( + await ( + await page.request.post(`${backend}/api/plan/get`, { data: { planId: created.planId } }) + ).json() + ).data[created.planId] + expect(result[group].Key.WhichTacetSuppressionToFarm).toBe(3) + expect(result[other].Key.WhichTacetSuppressionToFarm).toBe(1) + await expect( + table.getByRole('button', { name: 'Detailed configuration', exact: true }) + ).toHaveCount(0) + } + }) + test('irrelevant cells show a dash and preserve each farming choice', async ({ app, page }) => { + const created = await ( + await page.request.post(`${backend}/api/plan/add`, { data: { type: 'OkwwPlan' } }) + ).json() + await app.goto(`/plans?planId=${created.planId}`) + const row = page.locator('.okww-plan-table tr.ant-table-row').first() + const cells = row.locator('td') + await expect(cells.nth(3)).toHaveText('—') + const chooseFarm = async (label: string) => { + await row.locator('.ant-select').first().click() + const saved = page.waitForResponse(r => r.url().includes('/api/plan/update')) + await page.getByTitle(label, { exact: true }).click() + expect((await (await saved).json()).code).toBe(200) + } + await chooseFarm('模拟领域') + await expect(cells.nth(2)).toHaveText('—') + await expect(cells.nth(2).locator('input')).toHaveCount(0) + await cells.nth(3).locator('.ant-select').click() + const saved = page.waitForResponse(r => r.url().includes('/api/plan/update')) + await page.getByTitle('武器经验', { exact: true }).click() + await saved + await chooseFarm('凝素领域') + await expect(cells.nth(3)).toHaveText('—') + await expect(cells.nth(2).locator('input')).toHaveValue('1') + await chooseFarm('模拟领域') + await expect(cells.nth(3)).toContainText('武器经验') + await page.reload() + await expect(cells.nth(2)).toHaveText('—') + await expect(cells.nth(3)).toContainText('武器经验') + await expect(row.locator('.ant-select-borderless')).toHaveCount(3) + await page.setViewportSize({ width: 1653, height: 1080 }) + await app.evidence('okww-plan-light') + await app.goto('/settings') + await page.locator('.theme-mode-control').getByText('Dark', { exact: true }).click() + await app.goto(`/plans?planId=${created.planId}`) + await expect(page.locator('html')).toHaveClass(/dark/) + await expect(cells.nth(2)).toHaveText('—') + await app.evidence('okww-plan-dark') + }) + test('failed saves retain drafts and retry', async ({ app, page }) => { + const created = await ( + await page.request.post(`${backend}/api/plan/add`, { data: { type: 'OkwwPlan' } }) + ).json() + await app.goto(`/plans?planId=${created.planId}`) + const number = page.locator('.okww-plan-table input[role="spinbutton"]').first() + await expect(number).toHaveValue('1') + await page.route( + '**/api/plan/update', + route => + route.fulfill({ + status: 200, + json: { code: 400, status: 'error', message: 'Injected save failure' }, + }), + { times: 1 } + ) + await number.fill('5') + await number.press('Tab') + await expect(number).toHaveValue('5') + await expect(page.locator('.okww-plan-table input[role="spinbutton"]').nth(1)).toBeDisabled() + await expect(page.locator('.additional-task-trigger').nth(1)).toBeDisabled() + await page.getByRole('button', { name: 'Retry', exact: true }).click() + await expect(page.getByRole('button', { name: 'Retry', exact: true })).toHaveCount(0) + await page.reload() + await expect(number).toHaveValue('5') + }) + test('daily echo supports on, off and inheritance after reload', async ({ app, page }) => { + const created = await ( + await page.request.post(`${backend}/api/plan/add`, { data: { type: 'OkwwPlan' } }) + ).json() + await app.goto(`/plans?planId=${created.planId}`) + const selector = page + .locator('.okww-plan-table tr.ant-table-row') + .first() + .locator('td') + .nth(4) + .locator('.ant-select') + for (const [label, expected] of [ + ['On', true], + ['Off', false], + ['Inherit', null], + ['On', true], + ['Inherit', null], + ] as const) { + await selector.click() + const saved = page.waitForResponse(r => r.url().includes('/api/plan/update')) + await page.locator('.ant-select-dropdown:visible').getByTitle(label, { exact: true }).click() + expect((await (await saved).json()).code).toBe(200) + await page.reload() + await expect(selector).toContainText(label) + const result = ( + await ( + await page.request.post(`${backend}/api/plan/get`, { data: { planId: created.planId } }) + ).json() + ).data[created.planId] + expect(result.Monday.Key.FarmNightmareNestForDailyEcho).toBe(expected) + } + }) + test('additional task checklist stays open and separates inheritance from tasks', async ({ + app, + page, + }) => { + const created = await ( + await page.request.post(`${backend}/api/plan/add`, { data: { type: 'OkwwPlan' } }) + ).json() + await app.goto(`/plans?planId=${created.planId}`) + const trigger = page.locator('.additional-task-trigger').first() + await expect(trigger).toContainText('Inherit') + await expect(page.locator('.okww-plan-table').getByRole('checkbox')).toHaveCount(0) + await trigger.click() + const editor = page.locator('.ant-popover:visible .additional-task-editor') + const garden = editor.getByRole('checkbox', { name: '检查每周乐园', exact: true }) + const nest = editor.getByRole('checkbox', { name: '自动刷所有梦魇巢穴', exact: true }) + await expect(editor.getByRole('checkbox')).toHaveCount(4) + await garden.check() + await nest.check() + const read = async () => + ( + await ( + await page.request.post(`${backend}/api/plan/get`, { data: { planId: created.planId } }) + ).json() + ).data[created.planId].Monday.Key.AdditionalTasks + await expect.poll(read).toEqual(['Check Weekly Garden', 'Auto Farm all Nightmare Nest']) + await expect(trigger).toContainText('Weekly Garden') + await expect(trigger).toContainText('All Nightmare Nests') + await expect( + page.getByRole('spinbutton', { name: 'Mon Dungeon number (F2)', exact: true }) + ).toBeVisible() + await garden.uncheck() + await nest.uncheck() + await expect.poll(read).toEqual([]) + await expect(trigger).toContainText('Off') + await editor.getByRole('button', { name: 'Inherit', exact: true }).click() + await expect.poll(read).toBeNull() + await page.reload() + await expect(trigger).toContainText('Inherit') + await page.setViewportSize({ width: 1653, height: 1080 }) + await app.evidence('okww-additional-compact') + await trigger.click() + await expect(editor).toBeVisible() + await page + .locator('.ant-popover:visible') + .evaluate(element => + Promise.all(element.getAnimations({ subtree: true }).map(animation => animation.finished)) + ) + await app.evidence('okww-additional-checklist') + }) +}) diff --git a/frontend/electron/services/analyticsCoverage.md b/frontend/electron/services/analyticsCoverage.md index 2bbbc26074..994bf22602 100644 --- a/frontend/electron/services/analyticsCoverage.md +++ b/frontend/electron/services/analyticsCoverage.md @@ -210,4 +210,6 @@ started 未送达时不发送对应 finished。运行 UUID 只留在本机消息 OkNte 日常计划的快捷表格与详细编辑共享当天字段覆写。快捷保存复用计划编辑事件,详细编辑按保存接口结果记录;不采集日常参数或计划标识。 - Okww 原生多账号任务:任务选择保存复用 `useUserApi.updateUser` 的 `config_write_finished`;批次仍按 MAS 用户归属结果,运行结局沿用 `taskAnalytics.ts` 的现有观察边界,不拆分或采集上游账号、任务配置及日志。 +Okww 日常计划复用计划管理及保存事件,账号绑定复用用户配置写入事件;不采集计划内容。 - OK-WW 自定义启动参数的账号保存复用 `useUserApi.updateUser` 的 `config_write_finished`;运行复用既有任务启动和终态事件,不采集参数内容或任务名称。 + diff --git a/frontend/electron/services/analyticsFeaturePolicy.ts b/frontend/electron/services/analyticsFeaturePolicy.ts index 4538314767..c204fff04b 100644 --- a/frontend/electron/services/analyticsFeaturePolicy.ts +++ b/frontend/electron/services/analyticsFeaturePolicy.ts @@ -41,6 +41,7 @@ const plan = [ 'MaaEndPlanConfig', 'BAAHPlanConfig', 'MSSPlanConfig', + 'OkwwPlanConfig', 'OkNtePlanConfig', 'UniversalPlanConfig', 'multi', diff --git a/frontend/src/api/index.ts b/frontend/src/api/index.ts index 7f3a8e40f3..0c0a96291d 100644 --- a/frontend/src/api/index.ts +++ b/frontend/src/api/index.ts @@ -985,6 +985,89 @@ export type { OkwwConfig_InfoInput } from './models/OkwwConfig_InfoInput'; export type { OkwwConfig_Run } from './models/OkwwConfig_Run'; export type { OkwwConfig_RunInput } from './models/OkwwConfig_RunInput'; export type { OkwwConfigInput } from './models/OkwwConfigInput'; +export type { OkwwPlanConfig } from './models/OkwwPlanConfig'; +export type { OkwwPlanConfig_ALL } from './models/OkwwPlanConfig_ALL'; +export type { OkwwPlanConfig_ALLInput } from './models/OkwwPlanConfig_ALLInput'; +export type { OkwwPlanConfig_Day1 } from './models/OkwwPlanConfig_Day1'; +export type { OkwwPlanConfig_Day10 } from './models/OkwwPlanConfig_Day10'; +export type { OkwwPlanConfig_Day10Input } from './models/OkwwPlanConfig_Day10Input'; +export type { OkwwPlanConfig_Day11 } from './models/OkwwPlanConfig_Day11'; +export type { OkwwPlanConfig_Day11Input } from './models/OkwwPlanConfig_Day11Input'; +export type { OkwwPlanConfig_Day12 } from './models/OkwwPlanConfig_Day12'; +export type { OkwwPlanConfig_Day12Input } from './models/OkwwPlanConfig_Day12Input'; +export type { OkwwPlanConfig_Day13 } from './models/OkwwPlanConfig_Day13'; +export type { OkwwPlanConfig_Day13Input } from './models/OkwwPlanConfig_Day13Input'; +export type { OkwwPlanConfig_Day14 } from './models/OkwwPlanConfig_Day14'; +export type { OkwwPlanConfig_Day14Input } from './models/OkwwPlanConfig_Day14Input'; +export type { OkwwPlanConfig_Day15 } from './models/OkwwPlanConfig_Day15'; +export type { OkwwPlanConfig_Day15Input } from './models/OkwwPlanConfig_Day15Input'; +export type { OkwwPlanConfig_Day16 } from './models/OkwwPlanConfig_Day16'; +export type { OkwwPlanConfig_Day16Input } from './models/OkwwPlanConfig_Day16Input'; +export type { OkwwPlanConfig_Day17 } from './models/OkwwPlanConfig_Day17'; +export type { OkwwPlanConfig_Day17Input } from './models/OkwwPlanConfig_Day17Input'; +export type { OkwwPlanConfig_Day18 } from './models/OkwwPlanConfig_Day18'; +export type { OkwwPlanConfig_Day18Input } from './models/OkwwPlanConfig_Day18Input'; +export type { OkwwPlanConfig_Day19 } from './models/OkwwPlanConfig_Day19'; +export type { OkwwPlanConfig_Day19Input } from './models/OkwwPlanConfig_Day19Input'; +export type { OkwwPlanConfig_Day1Input } from './models/OkwwPlanConfig_Day1Input'; +export type { OkwwPlanConfig_Day2 } from './models/OkwwPlanConfig_Day2'; +export type { OkwwPlanConfig_Day20 } from './models/OkwwPlanConfig_Day20'; +export type { OkwwPlanConfig_Day20Input } from './models/OkwwPlanConfig_Day20Input'; +export type { OkwwPlanConfig_Day21 } from './models/OkwwPlanConfig_Day21'; +export type { OkwwPlanConfig_Day21Input } from './models/OkwwPlanConfig_Day21Input'; +export type { OkwwPlanConfig_Day22 } from './models/OkwwPlanConfig_Day22'; +export type { OkwwPlanConfig_Day22Input } from './models/OkwwPlanConfig_Day22Input'; +export type { OkwwPlanConfig_Day23 } from './models/OkwwPlanConfig_Day23'; +export type { OkwwPlanConfig_Day23Input } from './models/OkwwPlanConfig_Day23Input'; +export type { OkwwPlanConfig_Day24 } from './models/OkwwPlanConfig_Day24'; +export type { OkwwPlanConfig_Day24Input } from './models/OkwwPlanConfig_Day24Input'; +export type { OkwwPlanConfig_Day25 } from './models/OkwwPlanConfig_Day25'; +export type { OkwwPlanConfig_Day25Input } from './models/OkwwPlanConfig_Day25Input'; +export type { OkwwPlanConfig_Day26 } from './models/OkwwPlanConfig_Day26'; +export type { OkwwPlanConfig_Day26Input } from './models/OkwwPlanConfig_Day26Input'; +export type { OkwwPlanConfig_Day27 } from './models/OkwwPlanConfig_Day27'; +export type { OkwwPlanConfig_Day27Input } from './models/OkwwPlanConfig_Day27Input'; +export type { OkwwPlanConfig_Day28 } from './models/OkwwPlanConfig_Day28'; +export type { OkwwPlanConfig_Day28Input } from './models/OkwwPlanConfig_Day28Input'; +export type { OkwwPlanConfig_Day29 } from './models/OkwwPlanConfig_Day29'; +export type { OkwwPlanConfig_Day29Input } from './models/OkwwPlanConfig_Day29Input'; +export type { OkwwPlanConfig_Day2Input } from './models/OkwwPlanConfig_Day2Input'; +export type { OkwwPlanConfig_Day3 } from './models/OkwwPlanConfig_Day3'; +export type { OkwwPlanConfig_Day30 } from './models/OkwwPlanConfig_Day30'; +export type { OkwwPlanConfig_Day30Input } from './models/OkwwPlanConfig_Day30Input'; +export type { OkwwPlanConfig_Day31 } from './models/OkwwPlanConfig_Day31'; +export type { OkwwPlanConfig_Day31Input } from './models/OkwwPlanConfig_Day31Input'; +export type { OkwwPlanConfig_Day3Input } from './models/OkwwPlanConfig_Day3Input'; +export type { OkwwPlanConfig_Day4 } from './models/OkwwPlanConfig_Day4'; +export type { OkwwPlanConfig_Day4Input } from './models/OkwwPlanConfig_Day4Input'; +export type { OkwwPlanConfig_Day5 } from './models/OkwwPlanConfig_Day5'; +export type { OkwwPlanConfig_Day5Input } from './models/OkwwPlanConfig_Day5Input'; +export type { OkwwPlanConfig_Day6 } from './models/OkwwPlanConfig_Day6'; +export type { OkwwPlanConfig_Day6Input } from './models/OkwwPlanConfig_Day6Input'; +export type { OkwwPlanConfig_Day7 } from './models/OkwwPlanConfig_Day7'; +export type { OkwwPlanConfig_Day7Input } from './models/OkwwPlanConfig_Day7Input'; +export type { OkwwPlanConfig_Day8 } from './models/OkwwPlanConfig_Day8'; +export type { OkwwPlanConfig_Day8Input } from './models/OkwwPlanConfig_Day8Input'; +export type { OkwwPlanConfig_Day9 } from './models/OkwwPlanConfig_Day9'; +export type { OkwwPlanConfig_Day9Input } from './models/OkwwPlanConfig_Day9Input'; +export type { OkwwPlanConfig_Friday } from './models/OkwwPlanConfig_Friday'; +export type { OkwwPlanConfig_FridayInput } from './models/OkwwPlanConfig_FridayInput'; +export type { OkwwPlanConfig_Info } from './models/OkwwPlanConfig_Info'; +export type { OkwwPlanConfig_InfoInput } from './models/OkwwPlanConfig_InfoInput'; +export type { OkwwPlanConfig_Monday } from './models/OkwwPlanConfig_Monday'; +export type { OkwwPlanConfig_MondayInput } from './models/OkwwPlanConfig_MondayInput'; +export type { OkwwPlanConfig_Saturday } from './models/OkwwPlanConfig_Saturday'; +export type { OkwwPlanConfig_SaturdayInput } from './models/OkwwPlanConfig_SaturdayInput'; +export type { OkwwPlanConfig_Sunday } from './models/OkwwPlanConfig_Sunday'; +export type { OkwwPlanConfig_SundayInput } from './models/OkwwPlanConfig_SundayInput'; +export type { OkwwPlanConfig_Thursday } from './models/OkwwPlanConfig_Thursday'; +export type { OkwwPlanConfig_ThursdayInput } from './models/OkwwPlanConfig_ThursdayInput'; +export type { OkwwPlanConfig_Tuesday } from './models/OkwwPlanConfig_Tuesday'; +export type { OkwwPlanConfig_TuesdayInput } from './models/OkwwPlanConfig_TuesdayInput'; +export type { OkwwPlanConfig_Wednesday } from './models/OkwwPlanConfig_Wednesday'; +export type { OkwwPlanConfig_WednesdayInput } from './models/OkwwPlanConfig_WednesdayInput'; +export type { OkwwPlanConfigInput } from './models/OkwwPlanConfigInput'; +export type { OkwwPlanKey } from './models/OkwwPlanKey'; export type { OkwwUserConfig } from './models/OkwwUserConfig'; export type { OkwwUserConfig_Data } from './models/OkwwUserConfig_Data'; export type { OkwwUserConfig_DataInput } from './models/OkwwUserConfig_DataInput'; diff --git a/frontend/src/api/models/OkwwPlanConfig.ts b/frontend/src/api/models/OkwwPlanConfig.ts new file mode 100644 index 0000000000..f011c5ff54 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig.ts @@ -0,0 +1,87 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanConfig_ALL } from './OkwwPlanConfig_ALL'; +import type { OkwwPlanConfig_Day1 } from './OkwwPlanConfig_Day1'; +import type { OkwwPlanConfig_Day10 } from './OkwwPlanConfig_Day10'; +import type { OkwwPlanConfig_Day11 } from './OkwwPlanConfig_Day11'; +import type { OkwwPlanConfig_Day12 } from './OkwwPlanConfig_Day12'; +import type { OkwwPlanConfig_Day13 } from './OkwwPlanConfig_Day13'; +import type { OkwwPlanConfig_Day14 } from './OkwwPlanConfig_Day14'; +import type { OkwwPlanConfig_Day15 } from './OkwwPlanConfig_Day15'; +import type { OkwwPlanConfig_Day16 } from './OkwwPlanConfig_Day16'; +import type { OkwwPlanConfig_Day17 } from './OkwwPlanConfig_Day17'; +import type { OkwwPlanConfig_Day18 } from './OkwwPlanConfig_Day18'; +import type { OkwwPlanConfig_Day19 } from './OkwwPlanConfig_Day19'; +import type { OkwwPlanConfig_Day2 } from './OkwwPlanConfig_Day2'; +import type { OkwwPlanConfig_Day20 } from './OkwwPlanConfig_Day20'; +import type { OkwwPlanConfig_Day21 } from './OkwwPlanConfig_Day21'; +import type { OkwwPlanConfig_Day22 } from './OkwwPlanConfig_Day22'; +import type { OkwwPlanConfig_Day23 } from './OkwwPlanConfig_Day23'; +import type { OkwwPlanConfig_Day24 } from './OkwwPlanConfig_Day24'; +import type { OkwwPlanConfig_Day25 } from './OkwwPlanConfig_Day25'; +import type { OkwwPlanConfig_Day26 } from './OkwwPlanConfig_Day26'; +import type { OkwwPlanConfig_Day27 } from './OkwwPlanConfig_Day27'; +import type { OkwwPlanConfig_Day28 } from './OkwwPlanConfig_Day28'; +import type { OkwwPlanConfig_Day29 } from './OkwwPlanConfig_Day29'; +import type { OkwwPlanConfig_Day3 } from './OkwwPlanConfig_Day3'; +import type { OkwwPlanConfig_Day30 } from './OkwwPlanConfig_Day30'; +import type { OkwwPlanConfig_Day31 } from './OkwwPlanConfig_Day31'; +import type { OkwwPlanConfig_Day4 } from './OkwwPlanConfig_Day4'; +import type { OkwwPlanConfig_Day5 } from './OkwwPlanConfig_Day5'; +import type { OkwwPlanConfig_Day6 } from './OkwwPlanConfig_Day6'; +import type { OkwwPlanConfig_Day7 } from './OkwwPlanConfig_Day7'; +import type { OkwwPlanConfig_Day8 } from './OkwwPlanConfig_Day8'; +import type { OkwwPlanConfig_Day9 } from './OkwwPlanConfig_Day9'; +import type { OkwwPlanConfig_Friday } from './OkwwPlanConfig_Friday'; +import type { OkwwPlanConfig_Info } from './OkwwPlanConfig_Info'; +import type { OkwwPlanConfig_Monday } from './OkwwPlanConfig_Monday'; +import type { OkwwPlanConfig_Saturday } from './OkwwPlanConfig_Saturday'; +import type { OkwwPlanConfig_Sunday } from './OkwwPlanConfig_Sunday'; +import type { OkwwPlanConfig_Thursday } from './OkwwPlanConfig_Thursday'; +import type { OkwwPlanConfig_Tuesday } from './OkwwPlanConfig_Tuesday'; +import type { OkwwPlanConfig_Wednesday } from './OkwwPlanConfig_Wednesday'; +export type OkwwPlanConfig = { + ALL?: (OkwwPlanConfig_ALL | null); + Monday?: (OkwwPlanConfig_Monday | null); + Tuesday?: (OkwwPlanConfig_Tuesday | null); + Wednesday?: (OkwwPlanConfig_Wednesday | null); + Thursday?: (OkwwPlanConfig_Thursday | null); + Friday?: (OkwwPlanConfig_Friday | null); + Saturday?: (OkwwPlanConfig_Saturday | null); + Sunday?: (OkwwPlanConfig_Sunday | null); + Day1?: (OkwwPlanConfig_Day1 | null); + Day2?: (OkwwPlanConfig_Day2 | null); + Day3?: (OkwwPlanConfig_Day3 | null); + Day4?: (OkwwPlanConfig_Day4 | null); + Day5?: (OkwwPlanConfig_Day5 | null); + Day6?: (OkwwPlanConfig_Day6 | null); + Day7?: (OkwwPlanConfig_Day7 | null); + Day8?: (OkwwPlanConfig_Day8 | null); + Day9?: (OkwwPlanConfig_Day9 | null); + Day10?: (OkwwPlanConfig_Day10 | null); + Day11?: (OkwwPlanConfig_Day11 | null); + Day12?: (OkwwPlanConfig_Day12 | null); + Day13?: (OkwwPlanConfig_Day13 | null); + Day14?: (OkwwPlanConfig_Day14 | null); + Day15?: (OkwwPlanConfig_Day15 | null); + Day16?: (OkwwPlanConfig_Day16 | null); + Day17?: (OkwwPlanConfig_Day17 | null); + Day18?: (OkwwPlanConfig_Day18 | null); + Day19?: (OkwwPlanConfig_Day19 | null); + Day20?: (OkwwPlanConfig_Day20 | null); + Day21?: (OkwwPlanConfig_Day21 | null); + Day22?: (OkwwPlanConfig_Day22 | null); + Day23?: (OkwwPlanConfig_Day23 | null); + Day24?: (OkwwPlanConfig_Day24 | null); + Day25?: (OkwwPlanConfig_Day25 | null); + Day26?: (OkwwPlanConfig_Day26 | null); + Day27?: (OkwwPlanConfig_Day27 | null); + Day28?: (OkwwPlanConfig_Day28 | null); + Day29?: (OkwwPlanConfig_Day29 | null); + Day30?: (OkwwPlanConfig_Day30 | null); + Day31?: (OkwwPlanConfig_Day31 | null); + Info?: (OkwwPlanConfig_Info | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfigInput.ts b/frontend/src/api/models/OkwwPlanConfigInput.ts new file mode 100644 index 0000000000..53de7464d7 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfigInput.ts @@ -0,0 +1,87 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanConfig_ALLInput } from './OkwwPlanConfig_ALLInput'; +import type { OkwwPlanConfig_Day10Input } from './OkwwPlanConfig_Day10Input'; +import type { OkwwPlanConfig_Day11Input } from './OkwwPlanConfig_Day11Input'; +import type { OkwwPlanConfig_Day12Input } from './OkwwPlanConfig_Day12Input'; +import type { OkwwPlanConfig_Day13Input } from './OkwwPlanConfig_Day13Input'; +import type { OkwwPlanConfig_Day14Input } from './OkwwPlanConfig_Day14Input'; +import type { OkwwPlanConfig_Day15Input } from './OkwwPlanConfig_Day15Input'; +import type { OkwwPlanConfig_Day16Input } from './OkwwPlanConfig_Day16Input'; +import type { OkwwPlanConfig_Day17Input } from './OkwwPlanConfig_Day17Input'; +import type { OkwwPlanConfig_Day18Input } from './OkwwPlanConfig_Day18Input'; +import type { OkwwPlanConfig_Day19Input } from './OkwwPlanConfig_Day19Input'; +import type { OkwwPlanConfig_Day1Input } from './OkwwPlanConfig_Day1Input'; +import type { OkwwPlanConfig_Day20Input } from './OkwwPlanConfig_Day20Input'; +import type { OkwwPlanConfig_Day21Input } from './OkwwPlanConfig_Day21Input'; +import type { OkwwPlanConfig_Day22Input } from './OkwwPlanConfig_Day22Input'; +import type { OkwwPlanConfig_Day23Input } from './OkwwPlanConfig_Day23Input'; +import type { OkwwPlanConfig_Day24Input } from './OkwwPlanConfig_Day24Input'; +import type { OkwwPlanConfig_Day25Input } from './OkwwPlanConfig_Day25Input'; +import type { OkwwPlanConfig_Day26Input } from './OkwwPlanConfig_Day26Input'; +import type { OkwwPlanConfig_Day27Input } from './OkwwPlanConfig_Day27Input'; +import type { OkwwPlanConfig_Day28Input } from './OkwwPlanConfig_Day28Input'; +import type { OkwwPlanConfig_Day29Input } from './OkwwPlanConfig_Day29Input'; +import type { OkwwPlanConfig_Day2Input } from './OkwwPlanConfig_Day2Input'; +import type { OkwwPlanConfig_Day30Input } from './OkwwPlanConfig_Day30Input'; +import type { OkwwPlanConfig_Day31Input } from './OkwwPlanConfig_Day31Input'; +import type { OkwwPlanConfig_Day3Input } from './OkwwPlanConfig_Day3Input'; +import type { OkwwPlanConfig_Day4Input } from './OkwwPlanConfig_Day4Input'; +import type { OkwwPlanConfig_Day5Input } from './OkwwPlanConfig_Day5Input'; +import type { OkwwPlanConfig_Day6Input } from './OkwwPlanConfig_Day6Input'; +import type { OkwwPlanConfig_Day7Input } from './OkwwPlanConfig_Day7Input'; +import type { OkwwPlanConfig_Day8Input } from './OkwwPlanConfig_Day8Input'; +import type { OkwwPlanConfig_Day9Input } from './OkwwPlanConfig_Day9Input'; +import type { OkwwPlanConfig_FridayInput } from './OkwwPlanConfig_FridayInput'; +import type { OkwwPlanConfig_InfoInput } from './OkwwPlanConfig_InfoInput'; +import type { OkwwPlanConfig_MondayInput } from './OkwwPlanConfig_MondayInput'; +import type { OkwwPlanConfig_SaturdayInput } from './OkwwPlanConfig_SaturdayInput'; +import type { OkwwPlanConfig_SundayInput } from './OkwwPlanConfig_SundayInput'; +import type { OkwwPlanConfig_ThursdayInput } from './OkwwPlanConfig_ThursdayInput'; +import type { OkwwPlanConfig_TuesdayInput } from './OkwwPlanConfig_TuesdayInput'; +import type { OkwwPlanConfig_WednesdayInput } from './OkwwPlanConfig_WednesdayInput'; +export type OkwwPlanConfigInput = { + ALL?: (OkwwPlanConfig_ALLInput | null); + Monday?: (OkwwPlanConfig_MondayInput | null); + Tuesday?: (OkwwPlanConfig_TuesdayInput | null); + Wednesday?: (OkwwPlanConfig_WednesdayInput | null); + Thursday?: (OkwwPlanConfig_ThursdayInput | null); + Friday?: (OkwwPlanConfig_FridayInput | null); + Saturday?: (OkwwPlanConfig_SaturdayInput | null); + Sunday?: (OkwwPlanConfig_SundayInput | null); + Day1?: (OkwwPlanConfig_Day1Input | null); + Day2?: (OkwwPlanConfig_Day2Input | null); + Day3?: (OkwwPlanConfig_Day3Input | null); + Day4?: (OkwwPlanConfig_Day4Input | null); + Day5?: (OkwwPlanConfig_Day5Input | null); + Day6?: (OkwwPlanConfig_Day6Input | null); + Day7?: (OkwwPlanConfig_Day7Input | null); + Day8?: (OkwwPlanConfig_Day8Input | null); + Day9?: (OkwwPlanConfig_Day9Input | null); + Day10?: (OkwwPlanConfig_Day10Input | null); + Day11?: (OkwwPlanConfig_Day11Input | null); + Day12?: (OkwwPlanConfig_Day12Input | null); + Day13?: (OkwwPlanConfig_Day13Input | null); + Day14?: (OkwwPlanConfig_Day14Input | null); + Day15?: (OkwwPlanConfig_Day15Input | null); + Day16?: (OkwwPlanConfig_Day16Input | null); + Day17?: (OkwwPlanConfig_Day17Input | null); + Day18?: (OkwwPlanConfig_Day18Input | null); + Day19?: (OkwwPlanConfig_Day19Input | null); + Day20?: (OkwwPlanConfig_Day20Input | null); + Day21?: (OkwwPlanConfig_Day21Input | null); + Day22?: (OkwwPlanConfig_Day22Input | null); + Day23?: (OkwwPlanConfig_Day23Input | null); + Day24?: (OkwwPlanConfig_Day24Input | null); + Day25?: (OkwwPlanConfig_Day25Input | null); + Day26?: (OkwwPlanConfig_Day26Input | null); + Day27?: (OkwwPlanConfig_Day27Input | null); + Day28?: (OkwwPlanConfig_Day28Input | null); + Day29?: (OkwwPlanConfig_Day29Input | null); + Day30?: (OkwwPlanConfig_Day30Input | null); + Day31?: (OkwwPlanConfig_Day31Input | null); + Info?: (OkwwPlanConfig_InfoInput | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_ALL.ts b/frontend/src/api/models/OkwwPlanConfig_ALL.ts new file mode 100644 index 0000000000..a1a62a7b88 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_ALL.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_ALL = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_ALLInput.ts b/frontend/src/api/models/OkwwPlanConfig_ALLInput.ts new file mode 100644 index 0000000000..452663052d --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_ALLInput.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_ALLInput = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day1.ts b/frontend/src/api/models/OkwwPlanConfig_Day1.ts new file mode 100644 index 0000000000..fdd402c759 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day1.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day1 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day10.ts b/frontend/src/api/models/OkwwPlanConfig_Day10.ts new file mode 100644 index 0000000000..c1b1dd1839 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day10.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day10 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day10Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day10Input.ts new file mode 100644 index 0000000000..b5992cbb5c --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day10Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day10Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day11.ts b/frontend/src/api/models/OkwwPlanConfig_Day11.ts new file mode 100644 index 0000000000..cee5f2ff98 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day11.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day11 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day11Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day11Input.ts new file mode 100644 index 0000000000..c61d27cb44 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day11Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day11Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day12.ts b/frontend/src/api/models/OkwwPlanConfig_Day12.ts new file mode 100644 index 0000000000..595b88d715 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day12.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day12 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day12Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day12Input.ts new file mode 100644 index 0000000000..0c41534f8c --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day12Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day12Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day13.ts b/frontend/src/api/models/OkwwPlanConfig_Day13.ts new file mode 100644 index 0000000000..3f38395d50 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day13.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day13 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day13Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day13Input.ts new file mode 100644 index 0000000000..0dccb7a2ea --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day13Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day13Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day14.ts b/frontend/src/api/models/OkwwPlanConfig_Day14.ts new file mode 100644 index 0000000000..f26156df4b --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day14.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day14 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day14Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day14Input.ts new file mode 100644 index 0000000000..27fe063cd7 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day14Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day14Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day15.ts b/frontend/src/api/models/OkwwPlanConfig_Day15.ts new file mode 100644 index 0000000000..c456a4dd46 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day15.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day15 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day15Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day15Input.ts new file mode 100644 index 0000000000..142b346a02 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day15Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day15Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day16.ts b/frontend/src/api/models/OkwwPlanConfig_Day16.ts new file mode 100644 index 0000000000..a3a30989ac --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day16.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day16 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day16Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day16Input.ts new file mode 100644 index 0000000000..ce7474921b --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day16Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day16Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day17.ts b/frontend/src/api/models/OkwwPlanConfig_Day17.ts new file mode 100644 index 0000000000..f7429ca499 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day17.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day17 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day17Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day17Input.ts new file mode 100644 index 0000000000..d9b0beb6fb --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day17Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day17Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day18.ts b/frontend/src/api/models/OkwwPlanConfig_Day18.ts new file mode 100644 index 0000000000..d97ed4bf1b --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day18.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day18 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day18Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day18Input.ts new file mode 100644 index 0000000000..a177240200 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day18Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day18Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day19.ts b/frontend/src/api/models/OkwwPlanConfig_Day19.ts new file mode 100644 index 0000000000..af10a56afd --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day19.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day19 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day19Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day19Input.ts new file mode 100644 index 0000000000..6d2a288832 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day19Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day19Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day1Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day1Input.ts new file mode 100644 index 0000000000..d301349472 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day1Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day1Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day2.ts b/frontend/src/api/models/OkwwPlanConfig_Day2.ts new file mode 100644 index 0000000000..f0f73093f8 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day2.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day2 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day20.ts b/frontend/src/api/models/OkwwPlanConfig_Day20.ts new file mode 100644 index 0000000000..875e2c4ce6 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day20.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day20 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day20Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day20Input.ts new file mode 100644 index 0000000000..eb561365f7 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day20Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day20Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day21.ts b/frontend/src/api/models/OkwwPlanConfig_Day21.ts new file mode 100644 index 0000000000..429cfe925c --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day21.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day21 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day21Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day21Input.ts new file mode 100644 index 0000000000..a1e4d15a1f --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day21Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day21Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day22.ts b/frontend/src/api/models/OkwwPlanConfig_Day22.ts new file mode 100644 index 0000000000..cb9bc4ba9e --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day22.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day22 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day22Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day22Input.ts new file mode 100644 index 0000000000..4d3c9a77b5 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day22Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day22Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day23.ts b/frontend/src/api/models/OkwwPlanConfig_Day23.ts new file mode 100644 index 0000000000..444e5b52d2 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day23.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day23 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day23Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day23Input.ts new file mode 100644 index 0000000000..aa302680d6 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day23Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day23Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day24.ts b/frontend/src/api/models/OkwwPlanConfig_Day24.ts new file mode 100644 index 0000000000..1cb580b7f8 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day24.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day24 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day24Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day24Input.ts new file mode 100644 index 0000000000..70abc16e7f --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day24Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day24Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day25.ts b/frontend/src/api/models/OkwwPlanConfig_Day25.ts new file mode 100644 index 0000000000..ae7e5d062b --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day25.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day25 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day25Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day25Input.ts new file mode 100644 index 0000000000..23fc2fb26d --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day25Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day25Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day26.ts b/frontend/src/api/models/OkwwPlanConfig_Day26.ts new file mode 100644 index 0000000000..60b6366c4b --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day26.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day26 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day26Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day26Input.ts new file mode 100644 index 0000000000..167ddc428e --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day26Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day26Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day27.ts b/frontend/src/api/models/OkwwPlanConfig_Day27.ts new file mode 100644 index 0000000000..9bbf2e1803 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day27.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day27 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day27Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day27Input.ts new file mode 100644 index 0000000000..47dbaff632 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day27Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day27Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day28.ts b/frontend/src/api/models/OkwwPlanConfig_Day28.ts new file mode 100644 index 0000000000..a8523c06e5 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day28.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day28 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day28Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day28Input.ts new file mode 100644 index 0000000000..9f5ffce379 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day28Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day28Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day29.ts b/frontend/src/api/models/OkwwPlanConfig_Day29.ts new file mode 100644 index 0000000000..7166807469 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day29.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day29 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day29Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day29Input.ts new file mode 100644 index 0000000000..d21fc06265 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day29Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day29Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day2Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day2Input.ts new file mode 100644 index 0000000000..71447e6afb --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day2Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day2Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day3.ts b/frontend/src/api/models/OkwwPlanConfig_Day3.ts new file mode 100644 index 0000000000..291ba131d5 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day3.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day3 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day30.ts b/frontend/src/api/models/OkwwPlanConfig_Day30.ts new file mode 100644 index 0000000000..a885f9928a --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day30.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day30 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day30Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day30Input.ts new file mode 100644 index 0000000000..5235c3336f --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day30Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day30Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day31.ts b/frontend/src/api/models/OkwwPlanConfig_Day31.ts new file mode 100644 index 0000000000..4655588c59 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day31.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day31 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day31Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day31Input.ts new file mode 100644 index 0000000000..653d8dd654 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day31Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day31Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day3Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day3Input.ts new file mode 100644 index 0000000000..610ab2a82a --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day3Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day3Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day4.ts b/frontend/src/api/models/OkwwPlanConfig_Day4.ts new file mode 100644 index 0000000000..31ef9c4c5e --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day4.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day4 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day4Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day4Input.ts new file mode 100644 index 0000000000..da444307a7 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day4Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day4Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day5.ts b/frontend/src/api/models/OkwwPlanConfig_Day5.ts new file mode 100644 index 0000000000..7de3cfe030 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day5.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day5 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day5Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day5Input.ts new file mode 100644 index 0000000000..08bfed887a --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day5Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day5Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day6.ts b/frontend/src/api/models/OkwwPlanConfig_Day6.ts new file mode 100644 index 0000000000..b0780b8476 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day6.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day6 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day6Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day6Input.ts new file mode 100644 index 0000000000..ce0da2458c --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day6Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day6Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day7.ts b/frontend/src/api/models/OkwwPlanConfig_Day7.ts new file mode 100644 index 0000000000..955863792f --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day7.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day7 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day7Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day7Input.ts new file mode 100644 index 0000000000..75803796bf --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day7Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day7Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day8.ts b/frontend/src/api/models/OkwwPlanConfig_Day8.ts new file mode 100644 index 0000000000..cba0cd5fdb --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day8.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day8 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day8Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day8Input.ts new file mode 100644 index 0000000000..6e11c75be5 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day8Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day8Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day9.ts b/frontend/src/api/models/OkwwPlanConfig_Day9.ts new file mode 100644 index 0000000000..3d6c0f0c51 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day9.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day9 = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Day9Input.ts b/frontend/src/api/models/OkwwPlanConfig_Day9Input.ts new file mode 100644 index 0000000000..ac30006755 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Day9Input.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Day9Input = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Friday.ts b/frontend/src/api/models/OkwwPlanConfig_Friday.ts new file mode 100644 index 0000000000..b637c33b92 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Friday.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Friday = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_FridayInput.ts b/frontend/src/api/models/OkwwPlanConfig_FridayInput.ts new file mode 100644 index 0000000000..38c71c0222 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_FridayInput.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_FridayInput = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Info.ts b/frontend/src/api/models/OkwwPlanConfig_Info.ts new file mode 100644 index 0000000000..6324399c27 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Info.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type OkwwPlanConfig_Info = { + /** + * 计划表名称 + */ + Name?: (string | null); + /** + * 计划模式 + */ + Mode?: ('ALL' | 'Weekly' | 'Rotate' | null); + /** + * 轮换天数 + */ + RotateDays?: (number | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_InfoInput.ts b/frontend/src/api/models/OkwwPlanConfig_InfoInput.ts new file mode 100644 index 0000000000..a9e37db2fa --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_InfoInput.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type OkwwPlanConfig_InfoInput = { + /** + * 计划表名称 + */ + Name?: (string | null); + /** + * 计划模式 + */ + Mode?: ('ALL' | 'Weekly' | 'Rotate' | null); + /** + * 轮换天数 + */ + RotateDays?: (number | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Monday.ts b/frontend/src/api/models/OkwwPlanConfig_Monday.ts new file mode 100644 index 0000000000..6a6b35ee68 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Monday.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Monday = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_MondayInput.ts b/frontend/src/api/models/OkwwPlanConfig_MondayInput.ts new file mode 100644 index 0000000000..74b07e2375 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_MondayInput.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_MondayInput = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Saturday.ts b/frontend/src/api/models/OkwwPlanConfig_Saturday.ts new file mode 100644 index 0000000000..e2df6ac213 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Saturday.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Saturday = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_SaturdayInput.ts b/frontend/src/api/models/OkwwPlanConfig_SaturdayInput.ts new file mode 100644 index 0000000000..c4bccf251f --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_SaturdayInput.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_SaturdayInput = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Sunday.ts b/frontend/src/api/models/OkwwPlanConfig_Sunday.ts new file mode 100644 index 0000000000..d54fb2cff9 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Sunday.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Sunday = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_SundayInput.ts b/frontend/src/api/models/OkwwPlanConfig_SundayInput.ts new file mode 100644 index 0000000000..2c95c4ecc0 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_SundayInput.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_SundayInput = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Thursday.ts b/frontend/src/api/models/OkwwPlanConfig_Thursday.ts new file mode 100644 index 0000000000..1024c90bbb --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Thursday.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Thursday = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_ThursdayInput.ts b/frontend/src/api/models/OkwwPlanConfig_ThursdayInput.ts new file mode 100644 index 0000000000..c7cfe9552d --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_ThursdayInput.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_ThursdayInput = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Tuesday.ts b/frontend/src/api/models/OkwwPlanConfig_Tuesday.ts new file mode 100644 index 0000000000..f351879fc5 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Tuesday.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Tuesday = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_TuesdayInput.ts b/frontend/src/api/models/OkwwPlanConfig_TuesdayInput.ts new file mode 100644 index 0000000000..a53bf3250b --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_TuesdayInput.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_TuesdayInput = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_Wednesday.ts b/frontend/src/api/models/OkwwPlanConfig_Wednesday.ts new file mode 100644 index 0000000000..d903f7794c --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_Wednesday.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_Wednesday = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanConfig_WednesdayInput.ts b/frontend/src/api/models/OkwwPlanConfig_WednesdayInput.ts new file mode 100644 index 0000000000..6db9340da7 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanConfig_WednesdayInput.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { OkwwPlanKey } from './OkwwPlanKey'; +export type OkwwPlanConfig_WednesdayInput = { + /** + * 体力计划参数 + */ + Key?: (OkwwPlanKey | null); +}; + diff --git a/frontend/src/api/models/OkwwPlanKey.ts b/frontend/src/api/models/OkwwPlanKey.ts new file mode 100644 index 0000000000..19835943a7 --- /dev/null +++ b/frontend/src/api/models/OkwwPlanKey.ts @@ -0,0 +1,31 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type OkwwPlanKey = { + /** + * 每日任务后运行的附加任务 + */ + AdditionalTasks?: (Array<'Check Weekly Garden' | 'Auto Farm all Nightmare Nest' | 'Merge Echo If discarded > 1000' | 'Teleport and Farm 4C Echo'> | null); + /** + * 使用梦魇巢穴完成日常声骸 + */ + FarmNightmareNestForDailyEcho?: (boolean | null); + /** + * 模拟领域材料 + */ + MaterialSelection?: ('Resonator EXP' | 'Weapon EXP' | 'Shell Credit' | null); + /** + * 凝素领域序号 + */ + WhichForgeryChallengeToFarm?: (number | null); + /** + * 无音区序号 + */ + WhichTacetSuppressionToFarm?: (number | null); + /** + * 每日任务体力用途(日常任务按账号覆写或绑定计划生效) + */ + WhichToFarm?: ('Tacet Suppression' | 'Forgery Challenge' | 'Simulation Challenge' | null); +}; + diff --git a/frontend/src/api/models/OkwwUserConfig_Info.ts b/frontend/src/api/models/OkwwUserConfig_Info.ts index 97025aa6ad..2c993ca383 100644 --- a/frontend/src/api/models/OkwwUserConfig_Info.ts +++ b/frontend/src/api/models/OkwwUserConfig_Info.ts @@ -3,6 +3,10 @@ /* tslint:disable */ /* eslint-disable */ export type OkwwUserConfig_Info = { + /** + * 固定配置或 Okww 计划表 + */ + PlanMode?: (string | null); /** * base 来源(shared=共享、independent=独立、native=脚本原生配置) */ diff --git a/frontend/src/api/models/OkwwUserConfig_InfoInput.ts b/frontend/src/api/models/OkwwUserConfig_InfoInput.ts index 3a86d049d0..ac19773f72 100644 --- a/frontend/src/api/models/OkwwUserConfig_InfoInput.ts +++ b/frontend/src/api/models/OkwwUserConfig_InfoInput.ts @@ -3,6 +3,10 @@ /* tslint:disable */ /* eslint-disable */ export type OkwwUserConfig_InfoInput = { + /** + * 固定配置或 Okww 计划表 + */ + PlanMode?: (string | null); /** * base 来源(shared=共享、independent=独立、native=脚本原生配置) */ diff --git a/frontend/src/api/models/OkwwUserConfig_Task.ts b/frontend/src/api/models/OkwwUserConfig_Task.ts index 5b68a49e42..8487255c43 100644 --- a/frontend/src/api/models/OkwwUserConfig_Task.ts +++ b/frontend/src/api/models/OkwwUserConfig_Task.ts @@ -7,14 +7,6 @@ export type OkwwUserConfig_Task = { * 每日任务后运行的附加任务 */ AdditionalTasks?: (Array<'Check Weekly Garden' | 'Auto Farm all Nightmare Nest' | 'Merge Echo If discarded > 1000' | 'Teleport and Farm 4C Echo'> | null); - /** - * 启用自定义启动参数 - */ - IfCustomArguments?: (boolean | null); - /** - * 自定义启动参数,开启后原样传递给 ok-ww - */ - CustomArguments?: (string | null); /** * 使用梦魇巢穴完成日常声骸 */ @@ -32,8 +24,16 @@ export type OkwwUserConfig_Task = { */ WhichTacetSuppressionToFarm?: (number | null); /** - * 每日任务体力用途(仅日常任务且开启覆写常规配置时生效) + * 每日任务体力用途(日常任务按账号覆写或绑定计划生效) */ WhichToFarm?: ('Tacet Suppression' | 'Forgery Challenge' | 'Simulation Challenge' | null); + /** + * 启用自定义启动参数 + */ + IfCustomArguments?: (boolean | null); + /** + * 自定义启动参数,开启后原样传递给 ok-ww + */ + CustomArguments?: (string | null); }; diff --git a/frontend/src/api/models/OkwwUserConfig_TaskInput.ts b/frontend/src/api/models/OkwwUserConfig_TaskInput.ts index bad07b7b48..521dbfa497 100644 --- a/frontend/src/api/models/OkwwUserConfig_TaskInput.ts +++ b/frontend/src/api/models/OkwwUserConfig_TaskInput.ts @@ -7,14 +7,6 @@ export type OkwwUserConfig_TaskInput = { * 每日任务后运行的附加任务 */ AdditionalTasks?: (Array<'Check Weekly Garden' | 'Auto Farm all Nightmare Nest' | 'Merge Echo If discarded > 1000' | 'Teleport and Farm 4C Echo'> | null); - /** - * 启用自定义启动参数 - */ - IfCustomArguments?: (boolean | null); - /** - * 自定义启动参数,开启后原样传递给 ok-ww - */ - CustomArguments?: (string | null); /** * 使用梦魇巢穴完成日常声骸 */ @@ -32,8 +24,16 @@ export type OkwwUserConfig_TaskInput = { */ WhichTacetSuppressionToFarm?: (number | null); /** - * 每日任务体力用途(仅日常任务且开启覆写常规配置时生效) + * 每日任务体力用途(日常任务按账号覆写或绑定计划生效) */ WhichToFarm?: ('Tacet Suppression' | 'Forgery Challenge' | 'Simulation Challenge' | null); + /** + * 启用自定义启动参数 + */ + IfCustomArguments?: (boolean | null); + /** + * 自定义启动参数,开启后原样传递给 ok-ww + */ + CustomArguments?: (string | null); }; diff --git a/frontend/src/api/models/PlanComboxIn.ts b/frontend/src/api/models/PlanComboxIn.ts index 21700ae90a..fd3620760a 100644 --- a/frontend/src/api/models/PlanComboxIn.ts +++ b/frontend/src/api/models/PlanComboxIn.ts @@ -19,6 +19,7 @@ export namespace PlanComboxIn { MSS = 'mss', UNIVERSAL = 'universal', OKNTE = 'oknte', + OKWW = 'okww', } } diff --git a/frontend/src/api/models/PlanConfigData.ts b/frontend/src/api/models/PlanConfigData.ts index 29b39a0da8..83ae84d462 100644 --- a/frontend/src/api/models/PlanConfigData.ts +++ b/frontend/src/api/models/PlanConfigData.ts @@ -7,6 +7,7 @@ import type { MaaEndPlanConfig } from './MaaEndPlanConfig'; import type { MaaPlanConfig } from './MaaPlanConfig'; import type { MSSPlanConfig } from './MSSPlanConfig'; import type { OkNtePlanConfig } from './OkNtePlanConfig'; +import type { OkwwPlanConfig } from './OkwwPlanConfig'; import type { UniversalPlanConfig } from './UniversalPlanConfig'; -export type PlanConfigData = (MaaPlanConfig | MaaEndPlanConfig | BAAHPlanConfig | MSSPlanConfig | UniversalPlanConfig | OkNtePlanConfig); +export type PlanConfigData = (MaaPlanConfig | MaaEndPlanConfig | BAAHPlanConfig | MSSPlanConfig | UniversalPlanConfig | OkNtePlanConfig | OkwwPlanConfig); diff --git a/frontend/src/api/models/PlanConfigDataInput.ts b/frontend/src/api/models/PlanConfigDataInput.ts index c0098630ab..e4df0003af 100644 --- a/frontend/src/api/models/PlanConfigDataInput.ts +++ b/frontend/src/api/models/PlanConfigDataInput.ts @@ -7,6 +7,7 @@ import type { MaaEndPlanConfigInput } from './MaaEndPlanConfigInput'; import type { MaaPlanConfigInput } from './MaaPlanConfigInput'; import type { MSSPlanConfigInput } from './MSSPlanConfigInput'; import type { OkNtePlanConfigInput } from './OkNtePlanConfigInput'; +import type { OkwwPlanConfigInput } from './OkwwPlanConfigInput'; import type { UniversalPlanConfigInput } from './UniversalPlanConfigInput'; -export type PlanConfigDataInput = (MaaPlanConfigInput | MaaEndPlanConfigInput | BAAHPlanConfigInput | MSSPlanConfigInput | UniversalPlanConfigInput | OkNtePlanConfigInput); +export type PlanConfigDataInput = (MaaPlanConfigInput | MaaEndPlanConfigInput | BAAHPlanConfigInput | MSSPlanConfigInput | UniversalPlanConfigInput | OkNtePlanConfigInput | OkwwPlanConfigInput); diff --git a/frontend/src/api/models/PlanCreateIn.ts b/frontend/src/api/models/PlanCreateIn.ts index 0d05d613d5..4bb0da532a 100644 --- a/frontend/src/api/models/PlanCreateIn.ts +++ b/frontend/src/api/models/PlanCreateIn.ts @@ -14,6 +14,7 @@ export namespace PlanCreateIn { MSSPLAN = 'MSSPlan', UNIVERSAL_PLAN = 'UniversalPlan', OK_NTE_PLAN = 'OkNtePlan', + OKWW_PLAN = 'OkwwPlan', } } diff --git a/frontend/src/api/models/PlanIndexItem.ts b/frontend/src/api/models/PlanIndexItem.ts index 940b445a42..1028fbedc6 100644 --- a/frontend/src/api/models/PlanIndexItem.ts +++ b/frontend/src/api/models/PlanIndexItem.ts @@ -23,6 +23,7 @@ export namespace PlanIndexItem { MSSPLAN_CONFIG = 'MSSPlanConfig', UNIVERSAL_PLAN_CONFIG = 'UniversalPlanConfig', OK_NTE_PLAN_CONFIG = 'OkNtePlanConfig', + OKWW_PLAN_CONFIG = 'OkwwPlanConfig', } } diff --git a/frontend/src/types/analytics.d.ts b/frontend/src/types/analytics.d.ts index 980d474fa8..e952b6ee2a 100644 --- a/frontend/src/types/analytics.d.ts +++ b/frontend/src/types/analytics.d.ts @@ -11,6 +11,7 @@ export type AnalyticsPlanType = | 'MaaEndPlanConfig' | 'BAAHPlanConfig' | 'MSSPlanConfig' + | 'OkwwPlanConfig' | 'OkNtePlanConfig' | 'UniversalPlanConfig' | 'multi' diff --git a/frontend/src/utils/okwwTaskOptions.ts b/frontend/src/utils/okwwTaskOptions.ts new file mode 100644 index 0000000000..ac4d5050f4 --- /dev/null +++ b/frontend/src/utils/okwwTaskOptions.ts @@ -0,0 +1,34 @@ +export const farmOptions = [ + { label: '无音区', value: 'Tacet Suppression' }, + { label: '凝素领域', value: 'Forgery Challenge' }, + { label: '模拟领域', value: 'Simulation Challenge' }, +] + +export const materialOptions = [ + { label: '共鸣者经验', value: 'Resonator EXP' }, + { label: '武器经验', value: 'Weapon EXP' }, + { label: '贝币', value: 'Shell Credit' }, +] + +export const additionalTaskOptions = [ + { + label: '检查每周乐园', + shortLabelKey: 'core.plan.okww.taskSummary.garden', + value: 'Check Weekly Garden', + }, + { + label: '自动刷所有梦魇巢穴', + shortLabelKey: 'core.plan.okww.taskSummary.nightmare', + value: 'Auto Farm all Nightmare Nest', + }, + { + label: '已弃置声骸超过 1000 时融合', + shortLabelKey: 'core.plan.okww.taskSummary.merge', + value: 'Merge Echo If discarded > 1000', + }, + { + label: '传送并刷取 4C 声骸', + shortLabelKey: 'core.plan.okww.taskSummary.echo', + value: 'Teleport and Farm 4C Echo', + }, +] diff --git a/frontend/src/utils/planTypeRegistry.ts b/frontend/src/utils/planTypeRegistry.ts index e4eb5524e8..ca55cef89e 100644 --- a/frontend/src/utils/planTypeRegistry.ts +++ b/frontend/src/utils/planTypeRegistry.ts @@ -10,6 +10,7 @@ type PlanCreateType = PlanCreateIn.type export type PlanConfigData = PlanGetOut['data'][string] export const PLAN_CONFIG_TYPES = { + OKWW: PlanIndexItem.type.OKWW_PLAN_CONFIG, OKNTE: PlanIndexItem.type.OK_NTE_PLAN_CONFIG, UNIVERSAL: PlanIndexItem.type.UNIVERSAL_PLAN_CONFIG, MAA: PlanIndexItem.type.MAA_PLAN_CONFIG, @@ -49,6 +50,16 @@ interface PlanTypeDescriptor { // ==================== 注册表 ==================== export const PLAN_TYPE_REGISTRY: Record = { + [PLAN_CONFIG_TYPES.OKWW]: { + configType: PLAN_CONFIG_TYPES.OKWW, + createType: PlanCreateIn.type.OKWW_PLAN, + displayNameKey: 'core.plan.type.okww', + defaultName: '新 Okww 计划表', + selectorTag: 'Okww', + reloadAfterSave: false, + supportsSimpleView: false, + tableComponent: defineAsyncComponent(() => import('@/views/plan/tables/OkwwPlanTable.vue')), + }, [PLAN_CONFIG_TYPES.OKNTE]: { configType: PLAN_CONFIG_TYPES.OKNTE, createType: PlanCreateIn.type.OK_NTE_PLAN, diff --git a/frontend/src/views/EditView/User/OkwwUserEdit.vue b/frontend/src/views/EditView/User/OkwwUserEdit.vue index 121120603f..831b91d289 100644 --- a/frontend/src/views/EditView/User/OkwwUserEdit.vue +++ b/frontend/src/views/EditView/User/OkwwUserEdit.vue @@ -178,22 +178,14 @@ - -

{{ t('core.edit.taskConfiguration') }}

- - - - {{ t('core.edit.configRestoreTitle') }} - - -
- @@ -252,8 +244,9 @@ diff --git a/frontend/src/views/EditView/User/components/OkwwTaskConfigSection.vue b/frontend/src/views/EditView/User/components/OkwwTaskConfigSection.vue index 532b2b1825..dcb90b2040 100644 --- a/frontend/src/views/EditView/User/components/OkwwTaskConfigSection.vue +++ b/frontend/src/views/EditView/User/components/OkwwTaskConfigSection.vue @@ -80,6 +80,7 @@ diff --git a/frontend/src/views/plan/components/UniversalPlanCreateDialog.vue b/frontend/src/views/plan/components/UniversalPlanCreateDialog.vue index 6ccb8b717e..6fac287c81 100644 --- a/frontend/src/views/plan/components/UniversalPlanCreateDialog.vue +++ b/frontend/src/views/plan/components/UniversalPlanCreateDialog.vue @@ -26,7 +26,7 @@ import { ref, watch } from 'vue' import { useI18n } from 'vue-i18n' import { useScriptApi } from '@/composables/useScriptApi' const { t } = useI18n() -// 通用脚本计划表只服务通用脚本;专项各自用自己的计划表 +// 通用脚本计划表仅供 General 使用 const UNIVERSAL_PLAN_SCRIPT_TYPE = 'General' const props = defineProps<{ activePlanId: string; creating?: boolean }>() const emit = defineEmits<{ create: [scriptId: string] }>() diff --git a/frontend/src/views/plan/tables/OkwwPlanTable.vue b/frontend/src/views/plan/tables/OkwwPlanTable.vue new file mode 100644 index 0000000000..362a4616e7 --- /dev/null +++ b/frontend/src/views/plan/tables/OkwwPlanTable.vue @@ -0,0 +1,282 @@ + + + diff --git a/res/i18n/en.json b/res/i18n/en.json index 1c9dccf8aa..e68dd98926 100644 --- a/res/i18n/en.json +++ b/res/i18n/en.json @@ -4890,6 +4890,16 @@ "core.comp.downloadFamilypink": "Pink", "core.comp.downloadGradientSpeed": "Gradient speed", "core.comp.downloadGradientContrast": "Color variation", + "core.plan.okww.farm": "Stamina farming", + "core.plan.okww.number": "Dungeon number (F2)", + "core.plan.okww.material": "Simulation materials", + "core.plan.okww.nightmare": "Daily echo from Nightmare Nest", + "core.plan.okww.additional": "Additional daily tasks", + "core.plan.okww.taskSummary.garden": "Weekly Garden", + "core.plan.okww.taskSummary.nightmare": "All Nightmare Nests", + "core.plan.okww.taskSummary.merge": "Merge discarded echoes", + "core.plan.okww.taskSummary.echo": "Teleport and farm 4C echoes", + "core.plan.type.okww": "Okww plan", "core.plan.type.oknte": "OkNte plan", "core.plan.oknte.priority": "Daily plan overrides are applied after account configuration. Detailed edits are saved to the selected day.", "core.plan.oknte.detail": "Detailed configuration", diff --git a/res/i18n/ja.json b/res/i18n/ja.json index 35d89218b4..9d8e299961 100644 --- a/res/i18n/ja.json +++ b/res/i18n/ja.json @@ -4890,6 +4890,16 @@ "core.comp.downloadFamilypink": "ピンク系", "core.comp.downloadGradientSpeed": "変化速度", "core.comp.downloadGradientContrast": "色差の強さ", + "core.plan.okww.farm": "スタミナ消費先", + "core.plan.okww.number": "ダンジョン番号(F2)", + "core.plan.okww.material": "模擬領域の素材", + "core.plan.okww.nightmare": "悪夢の巣で日課の音骸を獲得", + "core.plan.okww.additional": "追加の日課タスク", + "core.plan.okww.taskSummary.garden": "週替わり楽園", + "core.plan.okww.taskSummary.nightmare": "すべての悪夢の巣", + "core.plan.okww.taskSummary.merge": "破棄音骸の融合", + "core.plan.okww.taskSummary.echo": "転送して4C音骸を周回", + "core.plan.type.okww": "Okww 計画表", "core.plan.type.oknte": "OkNte プラン", "core.plan.oknte.priority": "当日プランはアカウント設定の後に適用します。詳細設定は当日のプランに保存します。", "core.plan.oknte.detail": "詳細設定", diff --git a/res/i18n/zh_CN.json b/res/i18n/zh_CN.json index 770a243c0b..85491b603f 100644 --- a/res/i18n/zh_CN.json +++ b/res/i18n/zh_CN.json @@ -4890,6 +4890,16 @@ "core.comp.downloadFamilypink": "粉色系", "core.comp.downloadGradientSpeed": "渐变速率", "core.comp.downloadGradientContrast": "色差程度", + "core.plan.okww.farm": "消耗体力刷取", + "core.plan.okww.number": "副本序号(F2)", + "core.plan.okww.material": "模拟领域材料", + "core.plan.okww.nightmare": "梦魇巢穴日常声骸", + "core.plan.okww.additional": "日常附加任务", + "core.plan.okww.taskSummary.garden": "每周乐园", + "core.plan.okww.taskSummary.nightmare": "全部梦魇巢穴", + "core.plan.okww.taskSummary.merge": "融合弃置声骸", + "core.plan.okww.taskSummary.echo": "传送刷 4C 声骸", + "core.plan.type.okww": "Okww 计划表", "core.plan.type.oknte": "OkNte 计划表", "core.plan.oknte.priority": "当天计划会在账号基础配置和常规覆写之后生效;详细配置仅保存到当天计划。", "core.plan.oknte.detail": "详细配置", diff --git a/tests/task/test_okww_plan.py b/tests/task/test_okww_plan.py new file mode 100644 index 0000000000..6047d3d62b --- /dev/null +++ b/tests/task/test_okww_plan.py @@ -0,0 +1,162 @@ +"""日常计划按日下发,保留账号固定配置及原生额外参数。""" + +import json +from types import SimpleNamespace +from uuid import uuid4 + +import pytest + +from app.models.config import OkwwPlanConfig, OkwwUserConfig +from app.task.Okww.tools.plan import task_config + + +def test_fixed_mode_respects_quick_config(): + user = OkwwUserConfig() + assert task_config(user)["Which to Farm"] == user.Task.WhichToFarm + user.Info.IfQuickConfig = False + assert task_config(user) == {} + + +@pytest.mark.parametrize( + "mode,group", [("ALL", "ALL"), ("Weekly", "Monday"), ("Rotate", "Day31")] +) +def test_plan_overrides_without_mutating_account(monkeypatch, mode, group): + from app.task.Okww.tools import plan as module + + plan = OkwwPlanConfig() + plan.Info.Mode = mode + plan.Info.RotateDays = 31 + monkeypatch.setattr(type(plan), "current_group", lambda self, now: group) + getattr(plan, group).Key.WhichToFarm = "Forgery Challenge" + user = OkwwUserConfig() + uid = uuid4() + user.Info.PlanMode = uid + user.Info.IfQuickConfig = False + monkeypatch.setattr(module, "Config", SimpleNamespace(PlanConfig={str(uid): plan})) + before = user.Task.model_dump() + assert task_config(user)["Which to Farm"] == "Forgery Challenge" + assert user.Task.model_dump() == before + + +def test_single_runtime_preserves_unrelated_native_settings(monkeypatch, tmp_path): + from app.task.Okww.AutoProxy import AutoProxyTask + from app.task.Okww.tools import plan as module + + plan = OkwwPlanConfig() + plan.Info.Mode = "ALL" + plan.ALL.Key.WhichToFarm = "Simulation Challenge" + user = OkwwUserConfig() + uid = uuid4() + user.Info.PlanMode = uid + user.Info.IfQuickConfig = False + monkeypatch.setattr(module, "Config", SimpleNamespace(PlanConfig={str(uid): plan})) + target = tmp_path / "DailyTask.json" + target.write_text(json.dumps({"extra": "preserved"})) + proxy = AutoProxyTask.__new__(AutoProxyTask) + proxy.cur_user_config = user + proxy.script_config_path = tmp_path + proxy._apply_mas_overrides() + values = json.loads(target.read_text(encoding="utf-8")) + assert values["Which to Farm"] == "Simulation Challenge" + assert values["extra"] == "preserved" + + +@pytest.mark.asyncio +async def test_plan_api_saves_only_selected_day(isolated_app_paths, monkeypatch): + import httpx + from fastapi import FastAPI + + from app.api.plan import router + from app.config import ConfigCollection + + plans = ConfigCollection.build([OkwwPlanConfig]) + await plans.activate() + monkeypatch.setattr(isolated_app_paths, "PlanConfig", plans) + app = FastAPI() + app.include_router(router) + async with httpx.AsyncClient( + transport=httpx.ASGITransport(app=app), base_url="http://test" + ) as client: + response = ( + await client.post("/api/plan/add", json={"type": "OkwwPlan"}) + ).json() + assert response["code"] == 200 + uid = response["planId"] + saved = ( + await client.post( + "/api/plan/update", + json={ + "planId": uid, + "data": { + "Monday": {"Key": {"WhichToFarm": "Simulation Challenge"}} + }, + }, + ) + ).json() + assert saved["code"] == 200 + assert plans[uid].Monday.Key.WhichToFarm == "Simulation Challenge" + assert plans[uid].Tuesday.Key.WhichToFarm == "Tacet Suppression" + invalid = await client.post( + "/api/plan/update", + json={ + "planId": uid, + "data": {"Monday": {"Key": {"WhichForgeryChallengeToFarm": 100}}}, + }, + ) + assert invalid.status_code == 422 + + +def test_plan_inherits_account_values_and_can_override_false_and_empty(monkeypatch): + from app.task.Okww.tools import plan as module + + plan = OkwwPlanConfig() + plan.Info.Mode = "ALL" + plan.ALL.Key.FarmNightmareNestForDailyEcho = False + plan.ALL.Key.AdditionalTasks = [] + user = OkwwUserConfig() + uid = uuid4() + user.Info.PlanMode = uid + user.Task.WhichToFarm = "Simulation Challenge" + user.Task.MaterialSelection = "Weapon EXP" + plan.ALL.Key.WhichToFarm = None + plan.ALL.Key.MaterialSelection = None + monkeypatch.setattr(module, "Config", SimpleNamespace(PlanConfig={str(uid): plan})) + values = task_config(user) + assert values["Which to Farm"] == "Simulation Challenge" + assert values["Material Selection"] == "Weapon EXP" + assert values["Farm Nightmare Nest for Daily Echo"] is False + assert values["Additional Tasks to Run After Daily Task"] == [] + user.Info.IfQuickConfig = False + values = task_config(user) + assert "Which to Farm" not in values + assert "Material Selection" not in values + assert values["Farm Nightmare Nest for Daily Echo"] is False + + +def test_numeric_inheritance_is_not_coerced_to_default(): + plan = OkwwPlanConfig.model_validate( + { + "Monday": { + "Key": { + "WhichTacetSuppressionToFarm": None, + "WhichForgeryChallengeToFarm": None, + } + } + } + ) + assert plan.Monday.Key.WhichTacetSuppressionToFarm is None + assert plan.Monday.Key.WhichForgeryChallengeToFarm is None + + +def test_custom_start_arguments_are_not_daily_plan_fields(): + from app.models.config.plan import OkwwPlanKey + + user = OkwwUserConfig() + user.Task.IfCustomArguments = True + user.Task.CustomArguments = "-t FarmEchoTask" + values = task_config(user) + assert values["Which to Farm"] == user.Task.WhichToFarm + assert "IfCustomArguments" not in OkwwPlanKey.model_fields + assert "CustomArguments" not in OkwwPlanKey.model_fields + assert "IfCustomArguments" not in values + assert "CustomArguments" not in values diff --git a/tests/task/test_universal_plan.py b/tests/task/test_universal_plan.py index 67421626db..f374400a6c 100644 --- a/tests/task/test_universal_plan.py +++ b/tests/task/test_universal_plan.py @@ -101,17 +101,8 @@ def test_first_save_from_empty_template_succeeds(tmp_path): def test_universal_plan_general_only(): - """通用脚本计划表只绑通用脚本;OkNte 使用独立专项计划。""" - - from app.models.config import ( - PLAN_BOOK, - GeneralConfig, - OkNteUserConfig, - OkwwUserConfig, - ) + """通用计划登记到 General,账号默认使用固定配置。""" + from app.models.config import PLAN_BOOK, GeneralConfig assert PLAN_BOOK["UniversalPlanConfig"]["script_class"] is GeneralConfig assert GeneralUserConfig().Info.PlanMode == "Fixed" - assert OkNteUserConfig().Info.PlanMode == "Fixed" - for user_cls in (OkwwUserConfig,): - assert "PlanMode" not in type(user_cls().Info).model_fields