@@ -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[];
|
||||
};
|
||||
@@ -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',
|
||||
],
|
||||
};
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -3,6 +3,10 @@ export interface AdminListQuery {
|
||||
pageSize?: number;
|
||||
}
|
||||
|
||||
export interface UpdateAdminUserRequest {
|
||||
nickname: string;
|
||||
}
|
||||
|
||||
export interface AdminPageResult<T> {
|
||||
items: T[];
|
||||
total: number;
|
||||
|
||||
Reference in New Issue
Block a user