# 项目结构与入口规则

## 技术栈

- Vue 3 + TypeScript + Vite。
- Element Plus 全量注册，Element Plus 图标在 `src/core/initMain.ts` 中全局注册。
- `@gushen/gushen-common-components` 通过 `instance.use(GsComponents)` 全局注册，并引入组件库 CSS。
- `@gushen/gushen-form-render` 依赖存在，但当前 `src/core/initMain.ts` 中插件注册被注释；使用 `FormRender` 前先确认是否需要启用插件注册。
- 当前 `package.json` 未安装 `@gushen/gushen-work-flow`；流程相关页面主要作为壳层/包装层存在，若要直接使用工作流组件，先补依赖并确认注册方式。

## 关键入口

- 应用入口：`src/main.ts`
- 插件、全局属性、全局组件：`src/core/initMain.ts`
- 本地全局组件：`src/components/global-register.ts`
- 路由：`src/router/index.ts`
- 动态菜单与路由守卫：`src/permission.ts`
- 页面：`src/views`
- API：`src/api`
- 语言包：`src/lang`、`src/lang/modules`

## 代码风格

- 新增 Vue 页面优先使用 Vue 3 `script setup lang="ts"`；维护旧页面时可沿用 Options API。
- 新增业务代码不要使用 `// @ts-nocheck`。
- `ref([])`、`reactive({})`、回调参数要显式类型，避免 `vue-tsc` 隐式 `any`。
- 类型导入使用 `import type`。
- 不要把 `isc-web-ui` 中依赖本地组件的规则照搬到本工程，除非本工程已有同名组件或先补齐组件。

## 路由规则

- 静态路由集中在 `src/router/index.ts` 的 `routes`。
- 主布局子页面放在根路由 `/` 的 `children` 中，常用 meta：`title`、`enTitle`、`icon`、`noCache`、`hideInMenu`、`isBootstrap`。
- 普通业务页优先走后台菜单动态路由：`src/permission.ts` 的 `formatRoutes` 会按 `menuUrl` / `originalAddr` 动态加载 `@/views${componentPath}/index.vue`。
- 新建业务页通常放在 `src/views/{菜单路径}/index.vue`，菜单平台配置 `menuUrl` 后即可加载；不要默认修改 `src/router/index.ts`。
- 只有登录页、首页、消息中心、个人中心等壳内固定页才补 `src/router/index.ts`。
- HTTP 菜单会走 `src/views/third-view.vue` iframe；动态表单菜单通过 `handleDynamicFormRoute` 映射到固定动态表单入口。

## 全局属性

`src/core/initMain.ts` 中注入：

- `this.$http` / `window.$request`：请求工具。
- `this.reqIsSucceed`：统一成功判断。
- `this.$bus`：事件总线。
- `window._config`：运行配置。

新增 Composition API 页面需要使用这些能力时，优先直接 import 对应工具函数；只有维护旧 Options API 页面时才使用 `this.xxx`。
