Files
platforms/frontend/platform_admin/src/api/resources.ts

61 lines
7.9 KiB
TypeScript
Raw Normal View History

export type ResourceMode = 'writable' | 'readonly' | 'append_only';
export type ResourcePageKind = 'list' | 'tree' | 'dashboard';
export type ResourceField = { key: string; label: string; required?: boolean };
export type ResourceUiDefinition = { key: string; name: string; resource: string; title: string; mode: ResourceMode; pageKind: ResourcePageKind; fields: ResourceField[] };
const fields: ResourceField[] = [{ key: 'name', label: '名称' }, { key: 'status', label: '状态' }];
/** Exact front-end representation of the platform HTTP resource contract. */
export const resources: ResourceUiDefinition[] = [
{ key: 'overview', name: 'overview', resource: '/dashboard/overview', title: 'overview', mode: 'readonly', pageKind: 'dashboard', fields },
{ key: 'gas-basic', name: 'gas_basic', resource: '/gas/gas_basic', title: 'gas_basic', mode: 'writable', pageKind: 'list', fields },
{ key: 'gas-account', name: 'gas_account', resource: '/gas/gas_account', title: 'gas_account', mode: 'writable', pageKind: 'list', fields },
{ key: 'delivery-basic', name: 'delivery_basic', resource: '/delivery/delivery_basic', title: 'delivery_basic', mode: 'writable', pageKind: 'list', fields },
{ key: 'delivery-account', name: 'delivery_account', resource: '/delivery/delivery_account', title: 'delivery_account', mode: 'writable', pageKind: 'list', fields },
{ key: 'delivery-task', name: 'delivery_task', resource: '/delivery/delivery_task', title: 'delivery_task', mode: 'writable', pageKind: 'list', fields },
{ key: 'delivery-track', name: 'delivery_track', resource: '/delivery/delivery_track', title: 'delivery_track', mode: 'writable', pageKind: 'list', fields },
{ key: 'delivery-track-point', name: 'delivery_track_point', resource: '/delivery/delivery_track_point', title: 'delivery_track_point', mode: 'writable', pageKind: 'list', fields },
{ key: 'staff-account', name: 'staff_account', resource: '/staff/account', title: 'staff_account', mode: 'writable', pageKind: 'list', fields },
{ key: 'staff-credential', name: 'staff_credential', resource: '/staff/credential', title: 'staff_credential', mode: 'writable', pageKind: 'list', fields },
{ key: 'user-account', name: 'user_account', resource: '/user/account', title: 'user_account', mode: 'writable', pageKind: 'list', fields },
{ key: 'user-address', name: 'user_address', resource: '/user/address', title: 'user_address', mode: 'writable', pageKind: 'list', fields },
{ key: 'user-service-relation', name: 'user_service_relation', resource: '/user/service_relation', title: 'user_service_relation', mode: 'writable', pageKind: 'list', fields },
{ key: 'dev-smart-cylinder-valve', name: 'dev_smart_cylinder_valve', resource: '/device/dev_smart_cylinder_valve', title: 'dev_smart_cylinder_valve', mode: 'writable', pageKind: 'list', fields },
{ key: 'dev-device-binding', name: 'dev_device_binding', resource: '/device/dev_device_binding', title: 'dev_device_binding', mode: 'writable', pageKind: 'list', fields },
{ key: 'dev-telemetry', name: 'dev_telemetry', resource: '/device/dev_telemetry', title: 'dev_telemetry', mode: 'readonly', pageKind: 'list', fields },
{ key: 'saf-rule', name: 'saf_rule', resource: '/safety/saf_rule', title: 'saf_rule', mode: 'writable', pageKind: 'list', fields },
{ key: 'saf-event', name: 'saf_event', resource: '/safety/saf_event', title: 'saf_event', mode: 'writable', pageKind: 'list', fields },
{ key: 'saf-inspection', name: 'saf_inspection', resource: '/safety/saf_inspection', title: 'saf_inspection', mode: 'writable', pageKind: 'list', fields },
{ key: 'ec-category', name: 'ec_category', resource: '/ec/ec_category', title: 'ec_category', mode: 'writable', pageKind: 'list', fields },
{ key: 'ec-product', name: 'ec_product', resource: '/ec/ec_product', title: 'ec_product', mode: 'writable', pageKind: 'list', fields },
{ key: 'ec-product-attribute', name: 'ec_product_attribute', resource: '/ec/ec_product_attribute', title: 'ec_product_attribute', mode: 'writable', pageKind: 'list', fields },
{ key: 'ec-product-image', name: 'ec_product_image', resource: '/ec/ec_product_image', title: 'ec_product_image', mode: 'writable', pageKind: 'list', fields },
{ key: 'ec-cart', name: 'ec_cart', resource: '/ec/ec_cart', title: 'ec_cart', mode: 'writable', pageKind: 'list', fields },
{ key: 'ec-order', name: 'ec_order', resource: '/ec/ec_order', title: 'ec_order', mode: 'writable', pageKind: 'list', fields },
{ key: 'ec-order-item', name: 'ec_order_item', resource: '/ec/ec_order_item', title: 'ec_order_item', mode: 'writable', pageKind: 'list', fields },
{ key: 'ec-review', name: 'ec_review', resource: '/ec/ec_review', title: 'ec_review', mode: 'writable', pageKind: 'list', fields },
{ key: 'fin-payment', name: 'fin_payment', resource: '/finance/fin_payment', title: 'fin_payment', mode: 'writable', pageKind: 'list', fields },
{ key: 'fin-settlement', name: 'fin_settlement', resource: '/finance/fin_settlement', title: 'fin_settlement', mode: 'writable', pageKind: 'list', fields },
{ key: 'fin-reconciliation', name: 'fin_reconciliation', resource: '/finance/fin_reconciliation', title: 'fin_reconciliation', mode: 'writable', pageKind: 'list', fields },
{ key: 'cnt-content', name: 'cnt_content', resource: '/content/cnt_content', title: 'cnt_content', mode: 'writable', pageKind: 'list', fields },
{ key: 'ntf-template', name: 'ntf_template', resource: '/notification/ntf_template', title: 'ntf_template', mode: 'writable', pageKind: 'list', fields },
{ key: 'cs-ticket', name: 'cs_ticket', resource: '/customer_service/cs_ticket', title: 'cs_ticket', mode: 'writable', pageKind: 'list', fields },
{ key: 'platfrom-account', name: 'platfrom_account', resource: '/platform/platfrom_account', title: 'platfrom_account', mode: 'writable', pageKind: 'list', fields },
{ key: 'platform-role', name: 'platform_role', resource: '/platform/platform_role', title: 'platform_role', mode: 'writable', pageKind: 'list', fields },
{ key: 'platform-menu', name: 'platform_menu', resource: '/platform/platform_menu', title: 'platform_menu', mode: 'writable', pageKind: 'tree', fields },
{ key: 'wallet', name: 'wallet', resource: '/wallet/wallet', title: 'wallet', mode: 'readonly', pageKind: 'list', fields },
{ key: 'wallet-ledger', name: 'wallet_ledger', resource: '/wallet/wallet_ledger', title: 'wallet_ledger', mode: 'readonly', pageKind: 'list', fields },
{ key: 'wallet-recharge', name: 'wallet_recharge', resource: '/wallet/wallet_recharge', title: 'wallet_recharge', mode: 'readonly', pageKind: 'list', fields },
{ key: 'wallet-withdrawal', name: 'wallet_withdrawal', resource: '/wallet/wallet_withdrawal', title: 'wallet_withdrawal', mode: 'readonly', pageKind: 'list', fields },
{ key: 'report', name: 'report', resource: '/report/report', title: 'report', mode: 'readonly', pageKind: 'list', fields },
{ key: 'report-item', name: 'report_item', resource: '/report/report_item', title: 'report_item', mode: 'readonly', pageKind: 'list', fields },
{ key: 'report-metric-snapshot', name: 'report_metric_snapshot', resource: '/report/report_metric_snapshot', title: 'report_metric_snapshot', mode: 'readonly', pageKind: 'list', fields },
{ key: 'aud-operation-log', name: 'aud_operation_log', resource: '/audit/aud_operation_log', title: 'aud_operation_log', mode: 'readonly', pageKind: 'list', fields },
{ key: 'aud-export-log', name: 'aud_export_log', resource: '/audit/aud_export_log', title: 'aud_export_log', mode: 'readonly', pageKind: 'list', fields },
{ key: 'aud-approval', name: 'aud_approval', resource: '/audit/aud_approval', title: 'aud_approval', mode: 'readonly', pageKind: 'list', fields },
];
export const resourceByName = Object.fromEntries(resources.map((definition) => [definition.resource, definition])) as Record<string, ResourceUiDefinition>;
export function getResource(resourcePath: string): ResourceUiDefinition {
const definition = resourceByName[resourcePath];
if (!definition) throw new Error('Unknown resource: ' + resourcePath);
return definition;
}