# Architect Mode Rules (Non-Obvious Only)

## Architecture Overview

- Vue 3 SPA with dynamic route loading from server
- Pinia stores: `app`, `user`, `tab-bar` (see [`src/store/`](src/store/))
- Two-layer route guard: user login check + permission check

## Dynamic Route System

- Server menu fetched in [`app store`](src/store/modules/app/index.ts) via `fetchServerMenuConfig()`
- Routes registered dynamically in [`permission.ts`](src/router/guard/permission.ts)
- Uses `isMenuLoading`/`isMenuLoaded` flags to prevent duplicate loads

## API Architecture

- Two axios instances for different auth patterns:
  - [`request.ts`](src/api/request.ts): Workspace header + custom token format
  - [`interceptor.ts`](src/api/interceptor.ts): Bearer token + code 20000 validation
- Choose based on backend API requirements

## API Response Format

- Standard response structure: `{code: 0, details: {data: [...], total: number}}`
- Success code is `0`, NOT `200` or `20000`
- `request.ts` returns `response.data` directly
- Access list data via `response.details.data`
- Access total count via `response.details.total`

## State Management

- [`SafeStorage`](src/utils/safeStorage.ts) required for all localStorage access
- Supports TTL expiry and type-safe keys via enum

## Component Patterns

- Global components registered in [`components/index.ts`](src/components/index.ts)
- ECharts modules manually imported for bundle size optimization
- Use `SearchTable` composite component for list pages

## Directory Structure

```
src/
  api/           # API layer (ops/ for business, module/ for auth)
  components/    # Global reusable components
  hooks/         # Composition functions
  router/        # Route config and guards
  store/         # Pinia stores
  utils/         # Utility functions
  views/ops/     # Main business modules
    pages/
      dc/        # Data center management
      monitor/   # Monitoring modules
      netarch/   # Network architecture
      report/    # Reports
      system-settings/ # System config
```

## Module Creation Checklist

1. Create API file in `src/api/ops/`
2. Create page directory in `src/views/ops/pages/`
3. Create `config/columns.ts` for table config
4. Create `config/search-form.ts` for search config
5. Create main `index.vue` with SearchTable
6. Create `components/FormDialog.vue` for CRUD
7. Create `components/Detail.vue` for detail view
