refactor(会员): 会员档位目录移除无用的 sort_order,统一按 rank 排序

- module-runtime catalog.rs:RuntimeProfileMembershipPlanRecord 与种子目录去掉 sort_order,目录单测改为按 rank 断言
- module-runtime domain.rs/commands.rs:后台改价入参与构建函数去掉 sort_order
- spacetime-module profile.rs:profile_membership_plan 表结构去掉排序列,membership_plan_records 改按 rank 升序读取
- shared-contracts runtime.rs:ProfileMembershipPlanResponse 与 AdminUpsertProfileMembershipPlanRequest 移除 sortOrder
- spacetime-client:客户端签名、mapper 与 module_bindings 同步移除 sortOrder
- api-server runtime_profile.rs:响应构建与测试夹具去掉 sortOrder
- admin-web:AdminMembershipPlanPage 移除「排序」输入,档位列表改为按 rank 排序,契约类型同步
- packages/shared:ProfileMembershipPlanRecord 去掉 sortOrder,充值弹层改为直接沿用后端的 rank 顺序
- docs:泥点三池与会员计费后端设计同步目录字段与后台能力说明

Co-authored-by: Junie <junie@jetbrains.com>
This commit is contained in:
2026-10-03 13:14:04 +08:00
parent e5de57f7f8
commit 16f92f2110
17 changed files with 19 additions and 76 deletions
-2
View File
@@ -795,7 +795,6 @@ export interface ProfileMembershipPlanAdminResponse {
modelAccess: ProfileMembershipModelAccess;
/** 并发上限;`128` 表示不设上限。 */
concurrentJobLimit: number;
sortOrder: number;
enabled: boolean;
}
@@ -813,7 +812,6 @@ export interface AdminUpsertProfileMembershipPlanRequest {
modelAccess: ProfileMembershipModelAccess;
concurrentJobLimit: number;
enabled: boolean;
sortOrder: number;
}
export interface ProfileWalletConfigAdminResponse {
@@ -68,7 +68,6 @@ export function AdminMembershipPlanPage({
useState<ProfileMembershipModelAccess>('basic');
const [concurrentJobLimit, setConcurrentJobLimit] = useState('1');
const [enabled, setEnabled] = useState(false);
const [sortOrder, setSortOrder] = useState('0');
const [rankLabel, setRankLabel] = useState('0');
const [isLoading, setIsLoading] = useState(false);
const [isSaving, setIsSaving] = useState(false);
@@ -143,7 +142,6 @@ export function AdminMembershipPlanPage({
modelAccess,
concurrentJobLimit: normalizedConcurrentJobLimit,
enabled,
sortOrder: parseInteger(sortOrder),
});
onResultChange(response);
upsertEntry(response);
@@ -171,7 +169,6 @@ export function AdminMembershipPlanPage({
setModelAccess(entry.modelAccess);
setConcurrentJobLimit(String(entry.concurrentJobLimit));
setEnabled(entry.enabled);
setSortOrder(String(entry.sortOrder));
setRankLabel(String(entry.rank));
}
@@ -185,7 +182,6 @@ export function AdminMembershipPlanPage({
setModelAccess('basic');
setConcurrentJobLimit('1');
setEnabled(false);
setSortOrder('0');
setRankLabel('');
}
@@ -316,13 +312,6 @@ export function AdminMembershipPlanPage({
))}
</select>
</AdminField>
<AdminField label="排序">
<input
inputMode="numeric"
value={sortOrder}
onChange={(event) => setSortOrder(event.target.value)}
/>
</AdminField>
</AdminFormRow>
{!isPurchasable ? (
@@ -350,7 +339,8 @@ export function AdminMembershipPlanPage({
key: 'plan',
label: '档位',
sortable: true,
sortValue: (entry) => entry.sortOrder,
sortDescription: '按升级基准 rank',
sortValue: (entry) => entry.rank,
},
{
key: 'price',
@@ -433,12 +423,7 @@ export function AdminMembershipPlanPage({
}
function sortPlanEntries(entries: ProfileMembershipPlanAdminResponse[]) {
return [...entries].sort((left, right) => {
if (left.sortOrder !== right.sortOrder) {
return left.sortOrder - right.sortOrder;
}
return left.rank - right.rank;
});
return [...entries].sort((left, right) => left.rank - right.rank);
}
function formatPlanLimits(entry: ProfileMembershipPlanAdminResponse) {