v3.5.8和v3.5.9版本更新
CI / verify (pull_request) Waiting to run

This commit is contained in:
2026-08-25 09:20:32 +08:00
parent 7304c7a8e1
commit 5935024ea8
101 changed files with 7640 additions and 5364 deletions
@@ -0,0 +1,71 @@
/** HQ 主列表列偏好(按账号存储) */
export const HQ_LIST_COLUMN_KEYS = [
'users',
'wechat-bindings',
'products',
'product-detail-templates',
'orders',
'promo-codes',
'promo-code-users',
'wecom-bots',
'wecom-pushes',
'llm-configs',
'knowledge-bases',
'stores',
'store-package-audits',
'store-ratings',
'store-categories',
'store-accounts',
'store-media',
'cities',
'city-partners',
'city-warehouses',
'fulfillment-providers',
'partners',
'partner-accounts',
'finance-store-bills',
'finance-partner-bills',
'finance-winery-bills',
'finance-logistics-bills',
'finance-store-withdrawals',
'benefit-coupons',
'benefit-ledgers',
'redeem-records',
'redeem-pending',
'deliveries',
'tickets',
'support-tickets',
'dev-plan-versions',
'dev-plan-tasks',
'invoices',
'resources',
'logs-users',
'logs-stores',
'logs-partners',
'logs-hq',
'logs-third-party',
'logs-domain-events',
'logs-wecom-bots',
'hq-accounts',
'test-whitelist',
] as const;
export type HqListColumnKey = (typeof HQ_LIST_COLUMN_KEYS)[number];
export function isHqListColumnKey(value: string): value is HqListColumnKey {
return (HQ_LIST_COLUMN_KEYS as readonly string[]).includes(value);
}
export type HqListColumnPref = {
order: string[];
hidden: string[];
};
export type HqListColumnPrefsMap = Partial<Record<HqListColumnKey, HqListColumnPref>>;
export type SaveHqListColumnPrefsRequest = {
reset?: boolean;
order?: string[];
hidden?: string[];
};
+70 -6
View File
@@ -6,7 +6,12 @@ export const HQ_PERMISSION_CATALOG = [
{ key: 'products', label: '商品管理', group: '业务' },
{ key: 'orders', label: '订单管理', group: '业务' },
{ key: 'promo_codes', label: '推广码', group: '业务' },
{ key: 'stores', label: '门店管理', group: '业务' },
{ key: 'stores', label: '门店列表', group: '业务' },
{ key: 'store_audits', label: '门店审核', group: '业务' },
{ key: 'store_ratings', label: '门店评价', group: '业务' },
{ key: 'store_categories', label: '门店分类', group: '业务' },
{ key: 'store_accounts', label: '门店账户', group: '业务' },
{ key: 'store_media', label: '门店资源', group: '业务' },
{ key: 'partners', label: '开城管理', group: '业务' },
{ key: 'finance', label: '财务', group: '业务' },
{ key: 'benefit', label: '好客权益', group: '业务' },
@@ -26,6 +31,7 @@ export const HQ_PERMISSION_CATALOG = [
{ key: 'users_delete', label: '删除用户', group: '危险操作' },
{ key: 'orders_delete', label: '删除订单', group: '危险操作' },
{ key: 'cities_delete', label: '删除城市', group: '危险操作' },
{ key: 'store_categories_delete', label: '删除门店分类', group: '危险操作' },
{ key: 'hq_permissions', label: '权限分配', group: '管理' },
{ key: 'hq_accounts', label: 'HQ 账户', group: '管理' },
{ key: 'system_settings_feature', label: '功能开关', group: '系统设置' },
@@ -42,6 +48,20 @@ export const HQ_PERMISSION_CATALOG = [
export type HqPermissionKey = (typeof HQ_PERMISSION_CATALOG)[number]['key'];
/** 由原 `stores` 拆出的子权限;存量数据迁移时补齐 */
export const HQ_STORE_SUB_PERMISSION_KEYS = [
'store_audits',
'store_ratings',
'store_categories',
'store_accounts',
'store_media',
] as const satisfies readonly HqPermissionKey[];
export const HQ_STORE_MENU_PERMISSION_KEYS = [
'stores',
...HQ_STORE_SUB_PERMISSION_KEYS,
] as const satisfies readonly HqPermissionKey[];
/** 危险操作:非超管角色默认不含,需在权限分配中显式勾选;超管默认拥有 */
export const HQ_DEBUG_PERMISSION_KEYS = [
'benefit_debug',
@@ -52,6 +72,7 @@ export const HQ_DANGEROUS_PERMISSION_KEYS = [
'users_delete',
'orders_delete',
'cities_delete',
'store_categories_delete',
] as const satisfies readonly HqPermissionKey[];
export function isHqDangerousPermission(key: string): boolean {
@@ -100,19 +121,53 @@ export function expandHqPermissionKeys(keys: string[]): HqPermissionKey[] {
);
}
/** 生效 = (角色 ∪ 追加) − 撤销 */
export function computeHqEffectivePermissionKeys(
roleKeys: string[],
grantKeys: string[],
denyKeys: string[] = [],
): HqPermissionKey[] {
const denied = new Set(denyKeys);
return expandHqPermissionKeys([...roleKeys, ...grantKeys]).filter((k) => !denied.has(k));
}
export function hasAnySystemSettingsPermission(keys: string[]): boolean {
const expanded = expandHqPermissionKeys(keys);
return SYSTEM_SETTINGS_PERMISSION_KEYS.some((k) => expanded.includes(k));
}
export const HQ_ADMIN_ROLES = [
export function hasAnyStoreMenuPermission(keys: string[]): boolean {
return HQ_STORE_MENU_PERMISSION_KEYS.some((k) => keys.includes(k));
}
export const HQ_ADMIN_ROLE_VALUES = [
'SUPER_ADMIN',
'OPS',
'FINANCE',
'CUSTOMER_SERVICE',
'CITY_STORE_SERVICE',
] as const;
export type HqAdminRoleValue = (typeof HQ_ADMIN_ROLE_VALUES)[number];
export const HQ_ADMIN_ROLES: { value: HqAdminRoleValue; label: string }[] = [
{ value: 'SUPER_ADMIN', label: '超级管理员' },
{ value: 'OPS', label: '运营' },
{ value: 'FINANCE', label: '财务' },
{ value: 'CUSTOMER_SERVICE', label: '客服' },
] as const;
{ value: 'CITY_STORE_SERVICE', label: '城市门店服务' },
];
export const HQ_ROLE_DEFAULT_PERMISSIONS: Record<string, HqPermissionKey[]> = {
const OPS_STORE_KEYS: HqPermissionKey[] = [
'stores',
'store_audits',
'store_ratings',
'store_categories',
'store_accounts',
'store_media',
];
export const HQ_ROLE_DEFAULT_PERMISSIONS: Record<HqAdminRoleValue, HqPermissionKey[]> = {
SUPER_ADMIN: [...hqBasePermissionKeys(), ...HQ_DEBUG_PERMISSION_KEYS],
OPS: [
'dashboard',
@@ -121,7 +176,8 @@ export const HQ_ROLE_DEFAULT_PERMISSIONS: Record<string, HqPermissionKey[]> = {
'products',
'orders',
'promo_codes',
'stores',
...OPS_STORE_KEYS,
'store_categories_delete',
'partners',
'benefit',
'deliveries',
@@ -141,7 +197,8 @@ export const HQ_ROLE_DEFAULT_PERMISSIONS: Record<string, HqPermissionKey[]> = {
FINANCE: [
'dashboard',
'orders',
'stores',
...OPS_STORE_KEYS,
'store_categories_delete',
'partners',
'finance',
'benefit',
@@ -160,4 +217,11 @@ export const HQ_ROLE_DEFAULT_PERMISSIONS: Record<string, HqPermissionKey[]> = {
'invoices',
'logs',
],
CITY_STORE_SERVICE: [
'dashboard',
'stores',
'store_audits',
'store_ratings',
'store_categories',
],
};
+1
View File
@@ -19,6 +19,7 @@ export * from './store-info-change';
export * from './partner-log';
export * from './promo';
export * from './hq-permissions';
export * from './hq-list-columns';
export * from './partner';
export * from './shop';
export * from './city-partner';
+4
View File
@@ -3,6 +3,10 @@ export interface AdminListQuery {
pageSize?: number;
}
export interface UpdateAdminUserRequest {
nickname: string;
}
export interface AdminPageResult<T> {
items: T[];
total: number;