jsharness 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/.harness/README.md +199 -0
  2. package/.harness/agents/code-reviewer/contract.yaml +64 -0
  3. package/.harness/agents/developer/contract.yaml +72 -0
  4. package/.harness/agents/gate-controller/contract.yaml +64 -0
  5. package/.harness/agents/project-manager/contract.yaml +77 -0
  6. package/.harness/agents/prompt-templates.md +352 -0
  7. package/.harness/agents/requirements-analyst/contract.yaml +64 -0
  8. package/.harness/agents/solution-designer/contract.yaml +75 -0
  9. package/.harness/agents/tester/contract.yaml +92 -0
  10. package/.harness/config/models.yaml +67 -0
  11. package/.harness/dev-map/backend/api-definition.md +131 -0
  12. package/.harness/dev-map/backend/auth-security.md +131 -0
  13. package/.harness/dev-map/backend/conventions-java.md +471 -0
  14. package/.harness/dev-map/backend/conventions.md +192 -0
  15. package/.harness/dev-map/backend/database.md +106 -0
  16. package/.harness/dev-map/backend/structure.md +140 -0
  17. package/.harness/dev-map/decisions.md +275 -0
  18. package/.harness/dev-map/frontend/api-integration.md +139 -0
  19. package/.harness/dev-map/frontend/components.md +178 -0
  20. package/.harness/dev-map/frontend/conventions.md +416 -0
  21. package/.harness/dev-map/frontend/state-management.md +170 -0
  22. package/.harness/dev-map/frontend/structure.md +103 -0
  23. package/.harness/dev-map/overview.md +267 -0
  24. package/.harness/docs/integration-test-plan.md +248 -0
  25. package/.harness/docs/team-guidelines/README.md +161 -0
  26. package/.harness/docs/team-guidelines/arch-team.md +811 -0
  27. package/.harness/docs/team-guidelines/collaboration.md +556 -0
  28. package/.harness/docs/team-guidelines/pm-team.md +337 -0
  29. package/.harness/docs/team-guidelines/qa-team.md +562 -0
  30. package/.harness/docs/team-guidelines/rd-team.md +714 -0
  31. package/.harness/docs/training-materials.md +280 -0
  32. package/.harness/gate/baseline.js +220 -0
  33. package/.harness/gate/checks/build-gates-frontend.js +152 -0
  34. package/.harness/gate/checks/build-gates-java.js +155 -0
  35. package/.harness/gate/checks/build-gates.js +119 -0
  36. package/.harness/gate/checks/engineering-consistency.js +138 -0
  37. package/.harness/gate/checks/security-quality.js +129 -0
  38. package/.harness/gate/checks/static-compliance.js +313 -0
  39. package/.harness/gate/checks/test-compliance.js +114 -0
  40. package/.harness/gate/index.js +315 -0
  41. package/.harness/mcp/config.yaml +435 -0
  42. package/.harness/rules/global/coding-standard.md +232 -0
  43. package/.harness/rules/global/commit-convention.md +165 -0
  44. package/.harness/rules/global/process-discipline.md +192 -0
  45. package/.harness/rules/global/security-baseline.md +306 -0
  46. package/.harness/rules/project/frontend-vue3.md +293 -0
  47. package/.harness/rules/project/java-backend.md +460 -0
  48. package/.harness/rules/project/web-specific.md +231 -0
  49. package/.harness/skills/build.md +192 -0
  50. package/.harness/skills/code-review.md +251 -0
  51. package/.harness/skills/docker-build.md +227 -0
  52. package/.harness/skills/docs-update.md +164 -0
  53. package/.harness/skills/java-build.md +261 -0
  54. package/.harness/skills/lint-check.md +482 -0
  55. package/.harness/skills/task-board-maintenance.md +105 -0
  56. package/.harness/skills/test-api.md +461 -0
  57. package/.harness/skills/test-e2e.md +431 -0
  58. package/.harness/skills/test-unit.md +649 -0
  59. package/.harness/skills/vue-frontend-build.md +344 -0
  60. package/.harness/specs/quality-feedback/implementation-guide.md +350 -0
  61. package/.harness/task-board.md +121 -0
  62. package/.harness/workflow/definition.yaml +504 -0
  63. package/.harness/workflow/validate.js +320 -0
  64. package/.harness/workflow/variants.yaml +253 -0
  65. package/README.md +237 -0
  66. package/bin/jsharness.js +53 -0
  67. package/lib/index.mjs +778 -0
  68. package/package.json +1 -0
@@ -0,0 +1,170 @@
1
+ # 前端分区 — 状态管理方式
2
+
3
+ ## 当前方案
4
+
5
+ 本项目采用 **Pinia** 作为主要状态管理方案(Vue 官方推荐)。
6
+
7
+ ### 为什么选择 Pinia
8
+
9
+ | 对比项 | Vuex 4 | Pinia | 选择原因 |
10
+ |--------|-------|-------|----------|
11
+ | 样板代码 | 多 (mutations/actions) | 极少(无 mutation) | 减少样板代码 |
12
+ | Bundle Size | ~5KB (gzip) | ~1KB (gzip) | 更小的包体积 |
13
+ | TypeScript 支持 | 需要额外装饰器 | 原生推断优秀 | 类型推断更自然 |
14
+ | DevTools | Vue DevTools 原生集成 | Vue DevTools 原生集成 | 足够用 |
15
+ | 学习曲线 | 较陡 | 平极低(与 Composition API 一致) | 降低上手门槛 |
16
+ | Vue3 组合式友好度 | ★★ | ★★★★★ | 与 `<script setup>` 风格一致 |
17
+
18
+ ## Store 结构
19
+
20
+ ```
21
+ stores/
22
+ ├── modules/
23
+ │ ├── useAuthStore.ts # 认证状态(token, user info)
24
+ │ ├── useUIStore.ts # UI 状态(sidebar, theme, modals)
25
+ │ └── useUserStore.ts # 用户相关缓存
26
+ ├── index.ts # Pinia 实例创建与统一导出
27
+ └── types.ts # Store 类型定义
28
+ ```
29
+
30
+ ## Store 编写规范
31
+
32
+ ```typescript
33
+ // stores/modules/useAuthStore.ts
34
+ import { defineStore } from 'pinia';
35
+ import type { User } from '@/types/user';
36
+ import { authService } from '@/api/auth';
37
+
38
+ interface AuthState {
39
+ user: User | null;
40
+ token: string | null;
41
+ isAuthenticated: boolean;
42
+ }
43
+
44
+ export const useAuthStore = defineStore('auth', {
45
+ state: (): AuthState => ({
46
+ user: null,
47
+ token: '',
48
+ isAuthenticated: false,
49
+ }),
50
+
51
+ getters: {
52
+ isLoggedIn: (state): boolean => !!state.token && !!state.user,
53
+ userName: (state): string => state.user?.name ?? '匿名用户',
54
+ userRoles: (state): string[] => state.user?.roles ?? [],
55
+ },
56
+
57
+ actions: {
58
+ async login(credentials: LoginCredentials) {
59
+ const result = await authService.login(credentials);
60
+ this.token = result.accessToken;
61
+ this.user = result.user;
62
+ this.isAuthenticated = true;
63
+ },
64
+
65
+ logout() {
66
+ this.$reset(); // Pinia 内置重置方法
67
+ },
68
+
69
+ updateUser(data: Partial<User>) {
70
+ if (this.user) {
71
+ Object.assign(this.user, data);
72
+ }
73
+ },
74
+ },
75
+ });
76
+ ```
77
+
78
+ ## 数据获取策略
79
+
80
+ ### 服务端状态管理 — Pinia + Composable 封装
81
+
82
+ Vue3 项目使用 **Pinia Store** 管理服务端状态,配合 **Composable** 封装数据获取逻辑:
83
+
84
+ ```typescript
85
+ // composables/useUserList.ts
86
+ import { useAuthStore } from '@/stores/modules/useAuthStore';
87
+
88
+ /**
89
+ * 用户列表 Composable
90
+ * 封装列表查询、分页、刷新等逻辑
91
+ */
92
+ export function useUserList(params?: Ref<UserListParams>) {
93
+ const authStore = useAuthStore();
94
+
95
+ // 响应式数据
96
+ const loading = ref(false);
97
+ const error = ref<Error | null>(null);
98
+
99
+ // 使用 computed 自动追踪参数变化
100
+ const listParams = params || ref({ page: 1, pageSize: 20 });
101
+
102
+ const { data: userList, refresh } = useFetch('/api/v1/users', {
103
+ queryParams: listParams,
104
+ immediate: true,
105
+ });
106
+
107
+ const pagination = computed(() => ({
108
+ page: listParams.value.page,
109
+ pageSize: listParams.value.pageSize,
110
+ total: userList.value?.total ?? 0,
111
+ }));
112
+
113
+ return {
114
+ userList: computed(() => userList.value?.list ?? []),
115
+ pagination,
116
+ loading,
117
+ error,
118
+ refresh,
119
+ changePage: (page: number) => { listParams.value.page = page; },
120
+ };
121
+ }
122
+ ```
123
+
124
+ ### Query Key 设计规范(Pinia Store 模块化)
125
+
126
+ ```typescript
127
+ // 标准:按业务域拆分 Store
128
+ stores/
129
+ ├── modules/
130
+ │ ├── useUserStore.ts # 用户域
131
+ │ ├── useOrderStore.ts # 订单域
132
+ │ ├── useProductStore.ts # 商品域
133
+ │ └── useNotificationStore.ts # 通知域
134
+
135
+ // 层级关系:
136
+ // useUserStore → 管理用户相关所有状态(列表/详情/权限)
137
+ // useOrderStore → 管理订单相关所有状态(列表/详情/统计)
138
+
139
+ // 跨 Store 依赖:
140
+ // useOrderStore 可以调用 useUserStore 的 getter 获取用户信息
141
+ ```
142
+
143
+ ### 缓存策略
144
+
145
+ | 数据类型 | 缓存方式 | 过期策略 | 示例 |
146
+ |---------|---------|---------|------|
147
+ | 用户基本信息 | Pinia State + persist 插件 | 登录时刷新 / 手动 invalidate | 用户名、头像、角色 |
148
+ | 字典/枚举数据 | Pinia State + staleTime | 应用生命周期内有效(不频繁变化) | 性别选项、订单状态码 |
149
+ | 列表数据 | Composable (useFetch) | 组件卸载时释放 / 下拉刷新 | 订单列表、消息列表 |
150
+ | 表单临时状态 | `ref()` / `reactive()` 组件内 | 组件销毁即清除 | 表单输入、弹窗开关 |
151
+
152
+ ## 状态流转图
153
+
154
+ ```
155
+ ┌─────────────┐ API 调用 ┌─────────────────┐ 写入 ┌──────────────┐
156
+ │ Server State │ ◄──────── │ Pinia Store │ ──────► │ Server │
157
+ │ (Pinia) │ 缓存 │ (defineStore) │ │ API │
158
+ └─────────────┘ └─────────────────┘ └──────────────┘
159
+ ▲ │
160
+ │ 读取 │ action
161
+ ┌──────┴──────┐ ▼
162
+ │ Component │ ┌─────────────────┐
163
+ │ (Vue3 SFC) │ ─────────► │ Local State │
164
+ └─────────────┘ 直接访问 │ (ref/reactive) │
165
+ ┌───┴─────────────────┴───┐
166
+ │ URL Route (vue-router) │
167
+ │ DOM Ref │
168
+ │ Local component state │
169
+ └─────────────────────────┘
170
+ ```
@@ -0,0 +1,103 @@
1
+ # 前端分区 — 目录结构与路由约定
2
+
3
+ ## 目录结构详情
4
+
5
+ ```
6
+ src/
7
+ ├── app/ # Next.js App Router(页面与布局)
8
+ │ ├── layout.tsx # 根布局(Header/Footer/Provider)
9
+ │ ├── page.tsx # 首页 (/)
10
+ │ ├── loading.tsx # 全局 Loading 态
11
+ │ ├── error.tsx # 全局错误边界
12
+ │ ├── not-found.tsx # 404 页面
13
+ │ │
14
+ │ ├── (auth)/ # 认证页面组(不含 Header)
15
+ │ │ ├── layout.tsx # Auth Layout(简洁版)
16
+ │ │ ├── login/page.tsx # 登录页 (/login)
17
+ │ │ ├── register/page.tsx # 注册页 (/register)
18
+ │ │ └── forgot-password/page.tsx # 忘记密码 (/forgot-password)
19
+ │ │
20
+ │ ├── (dashboard)/ # 看板页面组(含侧边栏)
21
+ │ │ ├── layout.tsx # Dashboard Layout
22
+ │ │ ├── page.tsx # 看板首页 (/dashboard)
23
+ │ │ ├── settings/page.tsx # 设置页 (/dashboard/settings)
24
+ │ │ └── profile/page.tsx # 个人资料 (/dashboard/profile)
25
+ │ │
26
+ │ └── api/ # API Routes
27
+ │ ├── auth/
28
+ │ │ └── [...nextauth]/route.ts # NextAuth 处理
29
+ │ ├── users/route.ts # 用户 API
30
+ │ └── [feature]/route.ts # 功能 API
31
+
32
+ ├── components/
33
+ │ ├── ui/ # [通用 UI 组件](./components.md)
34
+ │ │ ├── button/
35
+ │ │ ├── input/
36
+ │ │ ├── modal/
37
+ │ │ ├── table/
38
+ │ │ └── index.ts # 统一导出
39
+ │ │
40
+ │ ├── features/ # [业务功能组件](./components.md)
41
+ │ │ ├── user-card/
42
+ │ │ ├── data-chart/
43
+ │ │ └── ...
44
+ │ │
45
+ │ └── layouts/ # 布局组件
46
+ │ ├── MainLayout.tsx
47
+ │ ├── AuthLayout.tsx
48
+ │ └── DashboardLayout.tsx
49
+
50
+ ├── lib/ # 库级配置
51
+ │ ├── api-client.ts # [API 调用客户端](./api-integration.md)
52
+ │ ├── auth.ts # 认证工具
53
+ │ └── utils.ts # 通用工具函数
54
+
55
+ ├── hooks/ # 自定义 Hooks
56
+ │ ├── use-auth.ts # 认证 Hook
57
+ │ ├── use-api.ts # API 请求 Hook
58
+ │ └── use-debounce.ts # 防抖 Hook
59
+
60
+ └── types/ # TypeScript 类型定义
61
+ ├── user.ts
62
+ ├── api.ts
63
+ └── index.ts
64
+ ```
65
+
66
+ ## 路由约定
67
+
68
+ ### URL 格式规范
69
+
70
+ ```
71
+ # 页面路由
72
+ /login → 登录
73
+ /dashboard → 看板首页
74
+ /dashboard/settings/:tab → 设置(带 Tab 参数)
75
+ /users/[id] → 用户详情(动态路由)
76
+ /users/[id]/edit → 编辑用户
77
+
78
+ # API 路由
79
+ /api/v1/users → 用户列表 (GET) / 创建用户 (POST)
80
+ /api/v1/users/:id → 用户详情 (GET) / 更新 (PUT) / 删除 (DELETE)
81
+
82
+ # 路径命名规则
83
+ - 使用 kebab-case: /user-profile, /order-history
84
+ - 动态参数使用方括号: /[id], /:slug
85
+ - 可选搜索参数用 ? 分隔: /orders?status=pending&page=1
86
+ ```
87
+
88
+ ### 路由分组规则
89
+
90
+ | 分组名 | 路由前缀 | 共享布局 | 特征 |
91
+ |--------|----------|----------|------|
92
+ | `(auth)` | `/login`, `/register`, ... | AuthLayout | 无导航栏,居中表单 |
93
+ | `(dashboard)` | `/dashboard/*` | DashboardLayout | 含侧边栏,需认证 |
94
+ | `(public)` | `/`, `/about`, ... | MainLayout | 公开访问,含导航栏 |
95
+ | `(admin)` | `/admin/*` | AdminLayout | 管理后台,需管理员权限 |
96
+
97
+ ### 中间件顺序
98
+
99
+ ```
100
+ 请求进入 → i18n 检测 → 认证检查 → 权限校验 → 数据预取 → 页面渲染
101
+ ↓ 不通过
102
+ 重定向到登录/403
103
+ ```
@@ -0,0 +1,267 @@
1
+ # dev-map — 项目开发导航地图
2
+
3
+ > **维护原则:谁改代码谁更新地图。** 地图过期会导致 AI 引用错误信息,影响整体开发效率。
4
+ > **最后更新**: 2026-05-21 (对齐 java-backend.md + frontend-vue3.md 规则)
5
+
6
+ ---
7
+
8
+ ## 一句话描述
9
+
10
+ {项目名称} 是一个面向 {目标用户} 的 **Vue3 + Spring Boot(MyBatis-Plus)** 全栈应用,提供 {核心价值主张}。
11
+
12
+ ## 技术栈速查
13
+
14
+ ### 前端层
15
+
16
+ | 层 | 技术 | 版本 | 用途 |
17
+ |----|------|------|------|
18
+ | UI 框架 | Vue 3 + Composition API | ^3.4.x | 响应式渲染(强制 `<script setup>`) |
19
+ | 构建工具 | Vite | ^5.x | 开发服务器 / 打包 |
20
+ | 状态管理 | Pinia | ^2.x | 跨组件状态(官方推荐) |
21
+ | UI 组件库 | Element Plus | ^2.x | 企业级 UI 组件 |
22
+ | CSS 方案 | SCSS (scoped) | - | 样式系统 |
23
+ | HTTP 客户端 | Axios | ^1.x | API 调用(拦截器封装) |
24
+ | 路由管理 | Vue Router | ^4.x | 页面路由(懒加载) |
25
+ | 测试框架 | Vitest | ^1.x | 单元测试 |
26
+ | 包管理器 | pnpm | 9.x | 依赖管理 |
27
+
28
+ ### 后端层 (Java — com.jieshun)
29
+
30
+ | 层 | 技术 | 版本 | 用途 |
31
+ |----|------|------|------|
32
+ | 运行时 | JDK (Virtual Threads) | 21 | Java 环境,虚拟线程并发 |
33
+ | 框架 | Spring Boot | 3.2.x | 服务端框架 |
34
+ | ORM / 数据访问 | **MyBatis-Plus** | 3.5.x | SQL 映射(Mapper 接口 + XML)|
35
+ | 数据库 | MySQL | 8.0+ | 主数据存储(utf8mb4)|
36
+ | 缓存 | Redis + Redisson | 5.x / 6.x | 缓存(仅缓存用途)/ 分布式锁 |
37
+ | 配置中心 / 注册中心 | **Nacos** | 2.x | 动态配置拉取 / 服务发现 |
38
+ | 认证 | JWT + Opaque Refresh Token | - | 身份验证 (Spring Security) |
39
+ | API 文档 | **Knife4j (Swagger/OpenAPI 3)** | - | 接口文档自动生成(@Tag/@Operation)|
40
+ | 工具简化 | Lombok | 1.18.x | @Data/@RequiredArgsConstructor 等 |
41
+ | 工具库 | Hutool | 5.x | 通用工具(按需引入)|
42
+ | 加密 | 国密 SM4 + bcrypt | - | 敏感数据加密 / 密码哈希 |
43
+ | 容器测试 | Testcontainers | - | MySQL/Redis 集成测试隔离 |
44
+
45
+ ### 质量保障工具链
46
+
47
+ | 维度 | 工具 | 说明 |
48
+ |------|------|------|
49
+ | 单元测试 | JUnit 5 + Mockito 5 | Java 测试框架 + Mock |
50
+ | 覆盖率 | JaCoCo | Maven 插件集成,0% 文件告警,行覆盖率 ≥80% |
51
+ | 代码风格 | Checkstyle 10.x | Google/Sun 规则集(checkstyle.xml)|
52
+ | 复杂度扫描 | PMD 7.x | 圈复杂度 / 代码异味(pmd-ruleset.xml)|
53
+ | Bug 模式检测 | SpotBugs 4.8+ | NPE / 资源泄漏等 Bug 模式 |
54
+ | 持续质检 | SonarQube 9.9+ LTS | Quality Gate 阻断 + 技术债追踪 |
55
+ | API 测试 | REST Assured 5.x | DSL 风格接口测试(MockMvc 对接)|
56
+ | 服务端 Mock | WireMock 3.x | 下游依赖 Stub / 契约测试基础 |
57
+ | 分页插件 | MyBatis-Plus PageHelper | 分页拦截器自动追加 LIMIT |
58
+ | 前端 Lint | ESLint + Prettier | TS / 代码格式检查 |
59
+ | 前端构建 | TypeScript (tsc) | 类型严格检查(strict mode)|
60
+
61
+ ### 基础设施
62
+
63
+ | 层 | 技术 | 用途 |
64
+ |----|------|------|
65
+ | CI/CD | Jenkins (Maven Pipeline) | 自动化构建部署 |
66
+ | 容器化 | Docker + Docker Compose | 本地开发(MySQL + Redis + App)|
67
+ | 编排 | Kubernetes (可选) | 生产环境运行时 |
68
+ | 制品库 | Nexus / Artifactory | Maven 依赖代理 |
69
+
70
+ ## 目录结构概览
71
+
72
+ ```
73
+ project-root/ # 项目根目录
74
+
75
+ ├── backend/ # ══════ Java 后端微服务 ══════
76
+ │ ├── pom.xml # 父 POM(统一依赖版本管理)
77
+ │ │
78
+ │ ├── app/ # 启动入口模块
79
+ │ │ ├── pom.xml
80
+ │ │ └── src/main/java/com/jieshun/app/
81
+ │ │ ├── JscicdApplication.java # @SpringBootApplication
82
+ │ │ └── config/ # 启动级配置(WebMvcConfig 等)
83
+ │ │
84
+ │ ├── domain/ # 业务核心模块(最重)
85
+ │ │ ├── pom.xml
86
+ │ │ └── src/main/java/com/jieshun/domain/
87
+ │ │ ├── controller/ # Controller 层(只做路由+校验+权限)
88
+ │ │ │ ├── admin/ # 后台管理 Controller
89
+ │ │ │ │ └── UserController.java
90
+ │ │ │ └── app/ # 用户侧 Controller(C 端)
91
+ │ │ │ └── AppUserController.java
92
+ │ │ ├── service/ # Service 层(业务编排)
93
+ │ │ │ ├── UserService.java # 接口定义
94
+ │ │ │ └── impl/ # 实现类子包(禁止放接口)
95
+ │ │ │ └── UserServiceImpl.java
96
+ │ │ ├── mapper/ # Mapper 层(纯接口,SQL 在 XML)
97
+ │ │ │ ├── UserMapper.java # 不继承 BaseMapper
98
+ │ │ │ └── xml/ # MyBatis XML 映射文件
99
+ │ │ │ └── UserMapper.xml
100
+ │ │ ├── data/ # 数据对象层
101
+ │ │ │ ├── entity/ # DO(@TableName 映射)
102
+ │ │ │ │ └── UserDO.java
103
+ │ │ │ ├── vo/ # 视图对象
104
+ │ │ │ │ ├── UserRespVO.java # 响应对象(脱敏后返回前端)
105
+ │ │ │ │ └── UserCreateReqVO.java # 请求对象(JSR303 校验)
106
+ │ │ │ └── dto/ # 数据传输对象(跨层传递)
107
+ │ │ │ └── UserDTO.java
108
+ │ │ └── enums/ # 枚举定义
109
+ │ │ └── UserStatusEnum.java
110
+ │ │
111
+ │ ├── integration/ # 第三方集成模块
112
+ │ │ ├── pom.xml
113
+ │ │ └── src/main/java/com/jieshun/integration/
114
+ │ │ ├── client/ # 外部 API 客户端
115
+ │ │ │ └── sms/SmsClient.java
116
+ │ │ └── mq/ # 消息队列
117
+ │ │ └── producer/MqProducer.java
118
+ │ │
119
+ │ ├── common/ # 公共工具模块
120
+ │ │ ├── pom.xml
121
+ │ │ └── src/main/java/com/jieshun/common/
122
+ │ │ ├── constant/ # 常量
123
+ │ │ │ ├── ErrorCodeConstants.java # 错误码枚举(7 个段)
124
+ │ │ │ └── RedisKeyConstants.java # Redis Key + TTL 定义
125
+ │ │ ├── exception/ # 异常定义
126
+ │ │ │ └── JscicdBizException.java # 业务异常基类
127
+ │ │ ├── util/ # 工具类
128
+ │ │ └── enums/ # 通用枚举
129
+ │ │
130
+ │ ├── src/test/java/ # 单元测试 / 集成测试(JaCoCo 收集)
131
+ │ └── src/main/resources/ # 全局资源
132
+ │ ├── bootstrap.yml # 本地最小配置(仅 Nacos 地址)
133
+ │ ├── application.yml # 主配置
134
+ │ └── mapper/ # MyBatis XML
135
+ │ └── user/UserMapper.xml
136
+
137
+ ├── frontend/ # ══════ Vue3 前端项目 ══════
138
+ │ ├── package.json
139
+ │ ├── vite.config.ts
140
+ │ ├── tsconfig.json
141
+ │ ├── index.html
142
+ │ │
143
+ │ └── src/
144
+ │ ├── api/ # API 接口封装层
145
+ │ │ ├── client.ts # Axios 实例(拦截器/Token注入/统一错误处理)
146
+ │ │ ├── modules/ # 按业务模块拆分的 API 调用
147
+ │ │ │ └── user.ts # UserAPI = { page(), create(), ... }
148
+ │ │ └── types/ # API TS 类型定义
149
+ │ │ └── user.d.ts # ReqVO / RespVO 类型
150
+ │ │
151
+ │ ├── assets/ # 静态资源
152
+ │ │ ├── styles/ # 全局样式(variables.css / reset.css / global.css)
153
+ │ │ └── images/ # 图片资源
154
+ │ │
155
+ │ ├── components/ # 可复用组件
156
+ │ │ ├── ui/ # 通用 UI 组件(无业务逻辑)
157
+ │ │ │ ├── Button/Button.vue
158
+ │ │ │ └── Modal/
159
+ │ │ └── business/ # 业务组件(含业务逻辑)
160
+ │ │ └── UserProfileCard/
161
+ │ │
162
+ │ ├── pages/ # 页面级组件(路由对应,懒加载)
163
+ │ │ ├── user/
164
+ │ │ │ ├── UserList.vue # 列表页
165
+ │ │ │ ├── UserDetail.vue # 详情页
166
+ │ │ │ └── UserCreate.vue # 创建/编辑页
167
+ │ │ └── dashboard/
168
+ │ │
169
+ │ ├── router/ # 路由配置
170
+ │ │ ├── index.ts # 路由实例 + 首屏
171
+ │ │ ├── routes/ # 按模块拆分的路由定义
172
+ │ │ │ ├── user.ts
173
+ │ │ │ └── dashboard.ts
174
+ │ │ └── guards/ # 导航守卫(权限校验/登录拦截)
175
+ │ │ └── auth.ts
176
+ │ │
177
+ │ ├── store/ # Pinia Store
178
+ │ │ ├── index.ts # Store 入口
179
+ │ │ └── modules/ # 按业务模块拆分
180
+ │ │ ├── user.ts # useUserStore
181
+ │ │ └── app.ts # useAppStore
182
+ │ │
183
+ │ ├── types/ # 全局共享 TS 类型
184
+ │ │ ├── user.d.ts
185
+ │ │ ├── api.d.ts
186
+ │ │ └── env.d.ts
187
+ │ │
188
+ │ ├── utils/ # 工具函数
189
+ │ │ ├── format.ts
190
+ │ │ ├── request.ts
191
+ │ │ └── storage.ts
192
+ │ │
193
+ │ ├── composables/ # 组合式函数(Vue3 Hooks)
194
+ │ │ ├── useAuth.ts
195
+ │ │ ├── usePagination.ts
196
+ │ │ └── usePermission.ts
197
+ │ │
198
+ │ ├── layouts/ # 布局组件
199
+ │ │ ├── DefaultLayout.vue # 默认布局(Header + Sidebar + Content)
200
+ │ │ └── BlankLayout.vue # 空白布局(登录页等)
201
+ │ │
202
+ │ └── App.vue # 根组件
203
+
204
+ ├── checkstyle.xml # Checkstyle 规则集
205
+ ├── pmd-ruleset.xml # PMD 规则集
206
+
207
+ ├── .harness/ # ══════ Harness Engineering 规范体系 ══════
208
+ │ ├── gate/checks/ # 门禁(路由器 + build-gates-frontend.js + build-gates-java.js)
209
+ │ ├── skills/ # 技能文档(build/test-unit/lint-check/test-api/test-e2e 双章节)
210
+ │ ├── workflow/definition.yaml # 工作流定义(条件引用 java-build | vue-frontend-build)
211
+ │ ├── mcp/config.yaml # MCP 工具注册(SonarQube/Maven/Jenkins)
212
+ │ ├── agents/ # Agent 契约(输出含 .java / *Test.java)
213
+ │ ├── rules/project/ # 项目规则集
214
+ │ │ ├── java-backend.md # 后端规范(四层架构/Mapper/XML/SM4/Nacos/VT)
215
+ │ │ └── frontend-vue3.md # 前端规范(Composition API/Pinia/Element Plus/TS)
216
+ │ └── dev-map/ # 本文档所在位置
217
+
218
+ ├── docker-compose.yml # 本地开发容器编排(MySQL 8 + Redis + App Server)
219
+ ├── tests/ # E2E / 手动测试用例
220
+ └── files/ # 外部参考文档源
221
+ ```
222
+
223
+ > **后端基础包名**: `com.jieshun`(禁止 `com.jscicd` 或 `com.example`)
224
+ > **后端依赖方向**: controller → service → mapper → database(禁止反向/跨层跳跃)
225
+ > **前端强制要求**: Composition API `<script setup lang="ts">`,禁止 Options API
226
+
227
+ ## 功能域落点表
228
+
229
+ | 功能域 | 前端页面目录 | 后端模块路径 | 说明 |
230
+ |--------|-------------|------------|------|
231
+ | 用户管理 | `frontend/src/pages/user/` | `backend/domain/controller/app/` + `service/user/` | 注册 / 登录 / 个人信息 |
232
+ | 用户管理(后台) | `frontend/src/pages/admin/user/` | `backend/domain/controller/admin/user/` | 后台用户 CRUD / 分页 |
233
+ | 认证授权 | `frontend/src/pages/auth/` | `backend/domain/security/` + `integration/client/sms/` | JWT 双 Token / 短验证码 / OAuth |
234
+ | 核心业务 A | `frontend/src/pages/{domain-a}/` | `backend/domain/service/{domainA}/` + `mapper/{domainA}/` | 待填充 |
235
+ | 核心业务 B | `frontend/src/pages/{domain-b}/` | `backend/domain/service/{domainB}/` + `mapper/{domainB}/` | 待填充 |
236
+ | 系统管理 | `frontend/src/pages/admin/` | `backend/domain/controller/admin/` + `common/enums/` | 后台管理 / 字典 / 角色 |
237
+ | 公共基础 | `frontend/src/components/ui/` | `backend/common/(constant/exception/util)` | 通用组件 / 错误码 / 异常 / 工具 |
238
+
239
+ ## 各分区入口指引
240
+
241
+ | 分区 | 文件路径 | 内容概要 |
242
+ |------|----------|----------|
243
+ | 🖥️ 前端分区 | [frontend/](./frontend/) | 目录结构、组件规范、状态管理(Pinia)、编码惯例([conventions.md](./frontend/conventions.md))、Vite配置、Element Plus用法 |
244
+ | 🔧 后端分区 (Java) | [backend/](./backend/) | Maven 四层模块(app/domain/integration/common)、MyBatis-Plus Mapper+XML、REST API 规范(@Tag/@Operation)、安全机制(SM4/脱敏)、Nacos 配置、JDK21 虚拟线程、Java 编码惯例([conventions-java.md](./backend/conventions-java.md)) |
245
+ | 🏗️ 基础设施分区 | [infra/](./infra/) | CI/CD (Jenkins Maven Pipeline)、Docker Compose、环境变量、监控 |
246
+ | 📝 决策记录 | [decisions.md](./decisions.md) | 技术决策 ADR(含双技术栈架构/Gate分流/Workflow去路由/Java工具链选型/Pinia选型等)|
247
+
248
+ ### Harness 流程规范索引
249
+
250
+ | 规范层级 | 入口 | 与本项目的对应关系 |
251
+ |---------|------|-------------------|
252
+ | ⚡ Gate 门禁 | `.harness/gate/checks/` | 自动检测 pom.xml→Java门禁(build-gates-java.js: mvn compile/test/checkstyle/spotbugs/jacoco) / package.json→前端门禁(build-gates-frontend.js: tsc/npm/eslint/audit) |
253
+ | 📘 Skills 技能 | `.harness/skills/` | test-unit(JUnit5+Mockito+JaCoCo)/lint-check(Checkstyle+PMD+SpotBugs+SonarQube)/test-api(REST Assured+WireMock)/test-e2e(Testcontainers+Spring Profiles) 均含 Java 章节;build 已废弃→分流到 java-build / vue-frontend-build |
254
+ | 🔄 Workflow | `.harness/workflow/definition.yaml` | 条件引用 `java-build \| vue-frontend-build`;output_formats 含 .java;rules 引用 java-backend.md + frontend-vue3.md |
255
+ | 🤖 Agents | `.harness/agents/` | Developer contract 输出格式含 .java / *Test.java;编码流程含双技术栈说明;质量要求双列(前端标准/后端Java标准)|
256
+ | 🔌 MCP 工具 | `.harness/mcp/config.yaml` | 注册 SonarQube(metrics/quality_gate)、Maven(dependency_info/central_search)、Jenkins(maven_job_status) 工具定义 |
257
+ | 📋 Rules | `.harness/rules/project/` | **java-backend.md**(四层架构/9种类后缀/Mapper纯接口/SM4加密/Nacos/VT/22项审查清单) + **frontend-vue3.md**(Composition API强制/Pinia/Element Plus/TS类型安全/7项禁止清单) 双规则集 |
258
+
259
+ ## 维护纪律
260
+
261
+ 1. **新增功能域** → 更新「功能域落点表」+ 对应分区文档
262
+ 2. **修改目录结构** → 同步更新「目录结构概览」和对应分区文档
263
+ 3. **技术选型变更** → 在 decisions.md 中记录 ADR
264
+ 4. **新增 Maven 插件** → 同步更新「质量保障工具链」表 + skills 相关章节
265
+ 5. **Gate/Skill 变更** → 同步更新「Harness 流程规范索引」表
266
+ 6. **每次版本发布** → 检查所有文档是否与代码一致
267
+ 7. **Rules 规则修订** → 同步刷新 tech stack 表和目录结构中对应的描述