create-jnrs-vue 2.0.1 → 2.0.3

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 (51) hide show
  1. package/README.md +1 -43
  2. package/jnrs-vue/components.d.ts +1 -0
  3. package/jnrs-vue/package.json +4 -4
  4. package/jnrs-vue/src/api/examples/playground.ts +51 -0
  5. package/jnrs-vue/src/api/examples/portfolio-management/portfolio.ts +10 -10
  6. package/jnrs-vue/src/api/examples/portfolio-management/program.ts +5 -5
  7. package/jnrs-vue/src/api/examples/portfolio-management/project.ts +4 -4
  8. package/jnrs-vue/src/api/examples/program-management/index.ts +5 -5
  9. package/jnrs-vue/src/api/examples/program-management/sub-project.ts +4 -4
  10. package/jnrs-vue/src/api/examples/project-management/index.ts +19 -51
  11. package/jnrs-vue/src/api/examples/project-management/manager.ts +1 -1
  12. package/jnrs-vue/src/components/common/DictSelector.vue +70 -0
  13. package/jnrs-vue/src/components/common/DictTag.vue +8 -2
  14. package/jnrs-vue/src/utils/index.ts +1 -1
  15. package/jnrs-vue/src/views/examples/playground/RequestPage.vue +97 -38
  16. package/jnrs-vue/src/views/examples/playground/index.vue +203 -63
  17. package/jnrs-vue/src/views/examples/portfolio-management/programList/editDialog.vue +10 -0
  18. package/jnrs-vue/src/views/examples/portfolio-management/programList/index.vue +1 -1
  19. package/jnrs-vue/src/views/examples/portfolio-management/projectList/editDialog.vue +12 -9
  20. package/jnrs-vue/src/views/examples/program-management/mainPage/editDialog.vue +15 -19
  21. package/jnrs-vue/src/views/examples/program-management/subPage/editDialog.vue +15 -19
  22. package/jnrs-vue/src/views/examples/project-management/EditDialog.vue +54 -24
  23. package/jnrs-vue/src/views/examples/project-management/index.vue +4 -18
  24. package/jnrs-vue/viteMockServe/auth.mock.ts +41 -0
  25. package/jnrs-vue/viteMockServe/details.mock.ts +12 -0
  26. package/jnrs-vue/viteMockServe/dict.mock.ts +21 -0
  27. package/jnrs-vue/viteMockServe/index.ts +22 -370
  28. package/jnrs-vue/viteMockServe/manager.mock.ts +12 -0
  29. package/jnrs-vue/viteMockServe/portfolio-program.mock.ts +36 -0
  30. package/jnrs-vue/viteMockServe/portfolio-project.mock.ts +28 -0
  31. package/jnrs-vue/viteMockServe/portfolio.mock.ts +109 -0
  32. package/jnrs-vue/viteMockServe/program.mock.ts +45 -0
  33. package/jnrs-vue/viteMockServe/project.mock.ts +58 -0
  34. package/jnrs-vue/viteMockServe/role.mock.ts +12 -0
  35. package/jnrs-vue/viteMockServe/sub-project.mock.ts +34 -0
  36. package/package.json +1 -1
  37. package/jnrs-vue/src/api/business/index.ts +0 -69
  38. package/jnrs-vue/src/utils/field.ts +0 -73
  39. package/jnrs-vue/src/views/businessPlayground/EditDialog.vue +0 -137
  40. package/jnrs-vue/src/views/businessPlayground/index.vue +0 -90
  41. package/jnrs-vue/viteMockServe/json/tableRes.json +0 -390
  42. /package/jnrs-vue/viteMockServe/json/{loginResAdmin.json → auth-login-admin.json} +0 -0
  43. /package/jnrs-vue/viteMockServe/json/{loginResUser.json → auth-login-user.json} +0 -0
  44. /package/jnrs-vue/viteMockServe/json/{detailsRes.json → details.json} +0 -0
  45. /package/jnrs-vue/viteMockServe/json/{dictItemRes.json → dict-detail.json} +0 -0
  46. /package/jnrs-vue/viteMockServe/json/{dictRes.json → dict-list.json} +0 -0
  47. /package/jnrs-vue/viteMockServe/json/{managerRes.json → manager-list.json} +0 -0
  48. /package/jnrs-vue/viteMockServe/json/{programListRes.json → program-list.json} +0 -0
  49. /package/jnrs-vue/viteMockServe/json/{projectListRes.json → project-list.json} +0 -0
  50. /package/jnrs-vue/viteMockServe/json/{roleRes.json → role-list.json} +0 -0
  51. /package/jnrs-vue/viteMockServe/json/{subProjectListRes.json → sub-project-list.json} +0 -0
package/README.md CHANGED
@@ -33,46 +33,4 @@ pnpm add create-jnrs-vue
33
33
 
34
34
  ## 🤖 AI Agent 使用说明
35
35
 
36
- - 前置准备
37
- - 将业务功能原型图作为生成前端代码的参考图
38
- - 从 api 工具(如 ApiFox) 中导出 openapi 文档,或接入其提供的 MCP 服务
39
- - 使用 AI Agent 读取并分析当前 `README.md` 文件及 `/AGENTS/README_BASE.md` 文件并作为 IDE AI Agent 的记忆
40
- - 预置提示词
41
- - 保存记忆:`读取并分析当前 README.md 文件及 /AGENTS/README_BASE.md 文件并作为 IDE AI Agent 的记忆`
42
- - 生成菜单:`根据提供的菜单原型图,生成菜单`
43
- - 生成服务文件:`根据提供的 openapi 文档或 MCP 服务,生成API 服务文件`
44
- - 生成增删改查页面文件:`根据提供的界面原型图,生成增删改查页面文件`
45
-
46
- ## 📂 模板项目主要结构
47
-
48
- ```Text
49
- jnrs-vue/
50
- ├── AGENTS/ # AI Agent 规则与提示词
51
- ├── viteMockServe/ # Mock 服务配置
52
- ├── public/ # 静态资源
53
- ├── src/ # 源码目录
54
- │ ├── components/ # Vue 组件
55
- │ ├── composables/ # 组合式函数
56
- │ ├── layout/ # 布局
57
- │ ├── views/ # 页面视图
58
- │ ├── router/ # 路由配置
59
- │ ├── api/ # 接口定义(已含 request 实例)
60
- │ ├── types/ # 类型定义
61
- │ ├── stores/ # 状态管理
62
- │ ├── utils/ # 工具函数
63
- │ ├── locales/ # 国际化
64
- │ └── main.ts # 应用入口
65
- ├── index.html # HTML 入口文件
66
- ├── eslint.config.js # ESLint 配置文件
67
- ├── package.json # 包管理配置
68
- └── vite.config.ts # Vite 构建配置
69
- ├── tsconfig.json # TypeScript 配置
70
- ├── auto-imports.d.ts # 自动导入类型声明
71
- ├── components.d.ts # 全局组件类型声明
72
- ├── README.md # 项目文档
73
- ├── .env.development # 开发环境变量
74
- ├── .env.production # 生产环境变量
75
- ├── .gitignore # Git 忽略规则
76
- ├── .prettierrc.json # Prettier 格式化配置
77
- ├── .cspell.json # Cspell 拼写检查
78
- ```
36
+ 详见 `jnrs-vue/AGENTS.md`
@@ -11,6 +11,7 @@ export {}
11
11
  /* prettier-ignore */
12
12
  declare module 'vue' {
13
13
  export interface GlobalComponents {
14
+ ElAlert: typeof import('element-plus/es')['ElAlert']
14
15
  ElAside: typeof import('element-plus/es')['ElAside']
15
16
  ElAvatar: typeof import('element-plus/es')['ElAvatar']
16
17
  ElBadge: typeof import('element-plus/es')['ElBadge']
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jnrs-vue",
3
- "version": "1.2.38",
3
+ "version": "1.2.40",
4
4
  "description": "JNRS 信息化管理系统",
5
5
  "author": "talia_tan",
6
6
  "private": true,
@@ -19,8 +19,8 @@
19
19
  },
20
20
  "dependencies": {
21
21
  "@element-plus/icons-vue": "^2.3.2",
22
- "@jnrs/lingshu-smart": "2.2.31",
23
- "@jnrs/shared": "1.1.32",
22
+ "@jnrs/lingshu-smart": "2.2.32",
23
+ "@jnrs/shared": "1.1.33",
24
24
  "@jnrs/vue-core": "1.2.26",
25
25
  "@vueuse/core": "^14.1.0",
26
26
  "element-plus": "^2.13.3",
@@ -30,7 +30,7 @@
30
30
  "vue-i18n": "^11.2.8"
31
31
  },
32
32
  "devDependencies": {
33
- "@jnrs/skills-biz": "*",
33
+ "@jnrs/skills-biz": "1.0.3",
34
34
  "@tsconfig/node22": "^22.0.5",
35
35
  "@types/node": "^22.19.1",
36
36
  "@typescript-eslint/parser": "^8.48.1",
@@ -0,0 +1,51 @@
1
+ /**
2
+ * @Author : TanRui
3
+ * @WeChat : Tan578853789
4
+ * @File : playground.ts
5
+ * @Date : 2026/05/25
6
+ * @Desc. : 测试模块接口文档
7
+ */
8
+
9
+ import { axiosRequest } from '../request'
10
+
11
+ /**
12
+ * 测试 404 错误
13
+ */
14
+ export const NotFoundApi = () => {
15
+ return axiosRequest({
16
+ url: '/notFound',
17
+ method: 'get'
18
+ })
19
+ }
20
+
21
+ /**
22
+ * 测试 不需要权限
23
+ */
24
+ export const NoNeedAuthApi = () => {
25
+ return axiosRequest({
26
+ url: '/auth/no',
27
+ method: 'post',
28
+ noAuth: true // 是否需要权限,默认为 false
29
+ })
30
+ }
31
+
32
+ /**
33
+ * 测试 无权限
34
+ */
35
+ export const NoAuthApi = (showErrorMsg: boolean) => {
36
+ return axiosRequest({
37
+ url: '/auth/no',
38
+ method: 'post',
39
+ showErrorMsg // 是否显示错误信息,默认为 true
40
+ })
41
+ }
42
+
43
+ /**
44
+ * 测试 请求错误
45
+ */
46
+ export const FailApi = () => {
47
+ return axiosRequest({
48
+ url: '/auth/fail',
49
+ method: 'post'
50
+ })
51
+ }
@@ -68,7 +68,7 @@ export interface UpdatePortfolio {
68
68
  */
69
69
  export const portfolioListApi = (parentId?: number): Promise<Portfolio[]> => {
70
70
  return axiosRequest({
71
- url: '/agentic/portfolio/list',
71
+ url: '/examples/portfolio/list',
72
72
  method: 'get',
73
73
  params: { parentId }
74
74
  })
@@ -79,7 +79,7 @@ export const portfolioListApi = (parentId?: number): Promise<Portfolio[]> => {
79
79
  */
80
80
  export const addPortfolioApi = (data: AddPortfolio) => {
81
81
  return axiosRequest({
82
- url: '/agentic/portfolio/save',
82
+ url: '/examples/portfolio/save',
83
83
  method: 'post',
84
84
  data
85
85
  })
@@ -90,7 +90,7 @@ export const addPortfolioApi = (data: AddPortfolio) => {
90
90
  */
91
91
  export const upSideAddPortfolioApi = (data: UpSideAddPortfolio) => {
92
92
  return axiosRequest({
93
- url: '/agentic/portfolio/upSideAdd',
93
+ url: '/examples/portfolio/upSideAdd',
94
94
  method: 'post',
95
95
  data
96
96
  })
@@ -101,7 +101,7 @@ export const upSideAddPortfolioApi = (data: UpSideAddPortfolio) => {
101
101
  */
102
102
  export const downSideAddPortfolioApi = (data: DownSideAddPortfolio) => {
103
103
  return axiosRequest({
104
- url: '/agentic/portfolio/downSideAdd',
104
+ url: '/examples/portfolio/downSideAdd',
105
105
  method: 'post',
106
106
  data
107
107
  })
@@ -112,7 +112,7 @@ export const downSideAddPortfolioApi = (data: DownSideAddPortfolio) => {
112
112
  */
113
113
  export const innerAddPortfolioApi = (data: InnerAddPortfolio) => {
114
114
  return axiosRequest({
115
- url: '/agentic/portfolio/innerAdd',
115
+ url: '/examples/portfolio/innerAdd',
116
116
  method: 'post',
117
117
  data
118
118
  })
@@ -123,7 +123,7 @@ export const innerAddPortfolioApi = (data: InnerAddPortfolio) => {
123
123
  */
124
124
  export const updatePortfolioApi = (data: UpdatePortfolio) => {
125
125
  return axiosRequest({
126
- url: '/agentic/portfolio/update',
126
+ url: '/examples/portfolio/update',
127
127
  method: 'put',
128
128
  data
129
129
  })
@@ -134,7 +134,7 @@ export const updatePortfolioApi = (data: UpdatePortfolio) => {
134
134
  */
135
135
  export const moveUpPortfolioApi = (data: { targetPortfolioId: number }) => {
136
136
  return axiosRequest({
137
- url: '/agentic/portfolio/moveUp',
137
+ url: '/examples/portfolio/moveUp',
138
138
  method: 'put',
139
139
  data
140
140
  })
@@ -145,7 +145,7 @@ export const moveUpPortfolioApi = (data: { targetPortfolioId: number }) => {
145
145
  */
146
146
  export const moveDownPortfolioApi = (data: { targetPortfolioId: number }) => {
147
147
  return axiosRequest({
148
- url: '/agentic/portfolio/moveDown',
148
+ url: '/examples/portfolio/moveDown',
149
149
  method: 'put',
150
150
  data
151
151
  })
@@ -156,8 +156,8 @@ export const moveDownPortfolioApi = (data: { targetPortfolioId: number }) => {
156
156
  */
157
157
  export const deletePortfolioApi = (id: number): Promise<IFullResponse<unknown>> => {
158
158
  return axiosRequest({
159
- url: `/agentic/portfolio/delete/${id}`,
159
+ url: `/examples/portfolio/delete/${id}`,
160
160
  method: 'delete',
161
161
  returnFullResponse: true
162
162
  })
163
- }
163
+ }
@@ -97,7 +97,7 @@ export interface PortfolioProgramQuery extends IPagination {
97
97
  */
98
98
  export const portfolioProgramTableApi = (params?: PortfolioProgramQuery): Promise<IPageTableData<PortfolioProgram>> => {
99
99
  return axiosRequest({
100
- url: '/agentic/portfolio-program/list',
100
+ url: '/examples/portfolio-program/list',
101
101
  method: 'get',
102
102
  params
103
103
  })
@@ -108,7 +108,7 @@ export const portfolioProgramTableApi = (params?: PortfolioProgramQuery): Promis
108
108
  */
109
109
  export const addPortfolioProgramApi = (data: AddPortfolioProgram) => {
110
110
  return axiosRequest({
111
- url: '/agentic/portfolio-program/save',
111
+ url: '/examples/portfolio-program/save',
112
112
  method: 'post',
113
113
  data
114
114
  })
@@ -119,7 +119,7 @@ export const addPortfolioProgramApi = (data: AddPortfolioProgram) => {
119
119
  */
120
120
  export const editPortfolioProgramApi = (data: UpdatePortfolioProgram) => {
121
121
  return axiosRequest({
122
- url: '/agentic/portfolio-program/save',
122
+ url: '/examples/portfolio-program/save',
123
123
  method: 'post',
124
124
  data
125
125
  })
@@ -130,7 +130,7 @@ export const editPortfolioProgramApi = (data: UpdatePortfolioProgram) => {
130
130
  */
131
131
  export const deletePortfolioProgramApi = (id: string): Promise<IFullResponse<unknown>> => {
132
132
  return axiosRequest({
133
- url: `/agentic/portfolio-program/delete/${id}`,
133
+ url: `/examples/portfolio-program/delete/${id}`,
134
134
  method: 'delete',
135
135
  returnFullResponse: true
136
136
  })
@@ -141,7 +141,7 @@ export const deletePortfolioProgramApi = (id: string): Promise<IFullResponse<unk
141
141
  */
142
142
  export const portfolioProgramEnableApi = (data: PortfolioProgramEnable) => {
143
143
  return axiosRequest({
144
- url: '/agentic/portfolio-program/enable',
144
+ url: '/examples/portfolio-program/enable',
145
145
  method: 'put',
146
146
  data,
147
147
  returnFullResponse: true
@@ -86,7 +86,7 @@ export interface PortfolioProjectQuery extends IPagination {
86
86
  */
87
87
  export const portfolioProjectTableApi = (params?: PortfolioProjectQuery): Promise<IPageTableData<PortfolioProject>> => {
88
88
  return axiosRequest({
89
- url: '/agentic/portfolio-project/list',
89
+ url: '/examples/portfolio-project/list',
90
90
  method: 'get',
91
91
  params
92
92
  })
@@ -97,7 +97,7 @@ export const portfolioProjectTableApi = (params?: PortfolioProjectQuery): Promis
97
97
  */
98
98
  export const addPortfolioProjectApi = (data: AddPortfolioProject) => {
99
99
  return axiosRequest({
100
- url: '/agentic/portfolio-project/save',
100
+ url: '/examples/portfolio-project/save',
101
101
  method: 'post',
102
102
  data
103
103
  })
@@ -108,7 +108,7 @@ export const addPortfolioProjectApi = (data: AddPortfolioProject) => {
108
108
  */
109
109
  export const editPortfolioProjectApi = (data: UpdatePortfolioProject) => {
110
110
  return axiosRequest({
111
- url: '/agentic/portfolio-project/save',
111
+ url: '/examples/portfolio-project/save',
112
112
  method: 'post',
113
113
  data
114
114
  })
@@ -119,7 +119,7 @@ export const editPortfolioProjectApi = (data: UpdatePortfolioProject) => {
119
119
  */
120
120
  export const deletePortfolioProjectApi = (id: string) => {
121
121
  return axiosRequest({
122
- url: `/agentic/portfolio-project/delete/${id}`,
122
+ url: `/examples/portfolio-project/delete/${id}`,
123
123
  method: 'delete'
124
124
  })
125
125
  }
@@ -91,7 +91,7 @@ export interface ProgramQuery extends IPagination {
91
91
  */
92
92
  export const programTableApi = (params?: ProgramQuery): Promise<IPageTableData<Program>> => {
93
93
  return axiosRequest({
94
- url: '/agentic/program/list',
94
+ url: '/examples/program/list',
95
95
  method: 'get',
96
96
  params
97
97
  })
@@ -102,7 +102,7 @@ export const programTableApi = (params?: ProgramQuery): Promise<IPageTableData<P
102
102
  */
103
103
  export const addProgramApi = (data: AddProgram) => {
104
104
  return axiosRequest({
105
- url: '/agentic/program/save',
105
+ url: '/examples/program/save',
106
106
  method: 'post',
107
107
  data
108
108
  })
@@ -113,7 +113,7 @@ export const addProgramApi = (data: AddProgram) => {
113
113
  */
114
114
  export const editProgramApi = (data: UpdateProgram) => {
115
115
  return axiosRequest({
116
- url: '/agentic/program/save',
116
+ url: '/examples/program/save',
117
117
  method: 'post',
118
118
  data
119
119
  })
@@ -124,7 +124,7 @@ export const editProgramApi = (data: UpdateProgram) => {
124
124
  */
125
125
  export const deleteProgramApi = (id: string): Promise<IFullResponse<unknown>> => {
126
126
  return axiosRequest({
127
- url: `/agentic/program/delete/${id}`,
127
+ url: `/examples/program/delete/${id}`,
128
128
  method: 'delete',
129
129
  returnFullResponse: true
130
130
  })
@@ -135,7 +135,7 @@ export const deleteProgramApi = (id: string): Promise<IFullResponse<unknown>> =>
135
135
  */
136
136
  export const programEnableApi = (data: ProgramEnable) => {
137
137
  return axiosRequest({
138
- url: '/agentic/program/enable',
138
+ url: '/examples/program/enable',
139
139
  method: 'put',
140
140
  data,
141
141
  returnFullResponse: true
@@ -86,7 +86,7 @@ export interface SubProjectQuery extends IPagination {
86
86
  */
87
87
  export const subProjectTableApi = (params?: SubProjectQuery): Promise<IPageTableData<SubProject>> => {
88
88
  return axiosRequest({
89
- url: '/agentic/sub-project/list',
89
+ url: '/examples/sub-project/list',
90
90
  method: 'get',
91
91
  params
92
92
  })
@@ -97,7 +97,7 @@ export const subProjectTableApi = (params?: SubProjectQuery): Promise<IPageTable
97
97
  */
98
98
  export const addSubProjectApi = (data: AddSubProject) => {
99
99
  return axiosRequest({
100
- url: '/agentic/sub-project/save',
100
+ url: '/examples/sub-project/save',
101
101
  method: 'post',
102
102
  data
103
103
  })
@@ -108,7 +108,7 @@ export const addSubProjectApi = (data: AddSubProject) => {
108
108
  */
109
109
  export const editSubProjectApi = (data: UpdateSubProject) => {
110
110
  return axiosRequest({
111
- url: '/agentic/sub-project/save',
111
+ url: '/examples/sub-project/save',
112
112
  method: 'post',
113
113
  data
114
114
  })
@@ -119,7 +119,7 @@ export const editSubProjectApi = (data: UpdateSubProject) => {
119
119
  */
120
120
  export const deleteSubProjectApi = (id: string) => {
121
121
  return axiosRequest({
122
- url: `/agentic/sub-project/delete/${id}`,
122
+ url: `/examples/sub-project/delete/${id}`,
123
123
  method: 'delete'
124
124
  })
125
125
  }
@@ -132,7 +132,7 @@ export interface ProjectQuery extends IPagination {
132
132
  */
133
133
  export const addProjectApi = (data: AddProject) => {
134
134
  return axiosRequest({
135
- url: '/agentic/project/save',
135
+ url: '/examples/project/save',
136
136
  method: 'post',
137
137
  data: objectToFormData(data)
138
138
  })
@@ -143,7 +143,7 @@ export const addProjectApi = (data: AddProject) => {
143
143
  */
144
144
  export const editProjectApi = (data: UpdateProject) => {
145
145
  return axiosRequest({
146
- url: '/agentic/project/save',
146
+ url: '/examples/project/save',
147
147
  method: 'post',
148
148
  data: objectToFormData(data)
149
149
  })
@@ -154,7 +154,7 @@ export const editProjectApi = (data: UpdateProject) => {
154
154
  */
155
155
  export const updateProjectApi = (data: Project) => {
156
156
  return axiosRequest({
157
- url: '/agentic/project/update',
157
+ url: '/examples/project/update',
158
158
  method: 'put',
159
159
  data
160
160
  })
@@ -165,7 +165,7 @@ export const updateProjectApi = (data: Project) => {
165
165
  */
166
166
  export const deleteProjectApi = (id: string): Promise<IFullResponse<unknown>> => {
167
167
  return axiosRequest({
168
- url: `/agentic/project/delete/${id}`,
168
+ url: `/examples/project/delete/${id}`,
169
169
  method: 'delete',
170
170
  returnFullResponse: true
171
171
  })
@@ -176,7 +176,7 @@ export const deleteProjectApi = (id: string): Promise<IFullResponse<unknown>> =>
176
176
  */
177
177
  export const projectEnableApi = (data: ProjectEnable) => {
178
178
  return axiosRequest({
179
- url: '/agentic/project/enable',
179
+ url: '/examples/project/enable',
180
180
  method: 'put',
181
181
  data,
182
182
  returnFullResponse: true
@@ -188,18 +188,28 @@ export const projectEnableApi = (data: ProjectEnable) => {
188
188
  */
189
189
  export const projectTableApi = (params?: ProjectQuery): Promise<IPageTableData<Project>> => {
190
190
  return axiosRequest({
191
- url: '/agentic/project/list',
191
+ url: '/examples/project/list',
192
192
  method: 'get',
193
193
  params
194
194
  })
195
195
  }
196
196
 
197
+ /**
198
+ * 项目 - 按ID查询详情
199
+ */
200
+ export const getProjectByIdApi = (id: string): Promise<Project> => {
201
+ return axiosRequest({
202
+ url: `/examples/project/detail/${id}`,
203
+ method: 'get'
204
+ })
205
+ }
206
+
197
207
  /**
198
208
  * 下载数据导入模板
199
209
  */
200
210
  export const templateProjectApi = (): Promise<IBlobItem> => {
201
211
  return axiosRequest({
202
- url: '/agentic/project/template',
212
+ url: '/examples/project/template',
203
213
  method: 'post',
204
214
  responseType: 'blob'
205
215
  })
@@ -210,7 +220,7 @@ export const templateProjectApi = (): Promise<IBlobItem> => {
210
220
  */
211
221
  export const importProjectApi = (data: FormData): Promise<IFullResponse<unknown>> => {
212
222
  return axiosRequest({
213
- url: '/agentic/project/import',
223
+ url: '/examples/project/import',
214
224
  method: 'post',
215
225
  data,
216
226
  returnFullResponse: true
@@ -222,51 +232,9 @@ export const importProjectApi = (data: FormData): Promise<IFullResponse<unknown>
222
232
  */
223
233
  export const exportProjectApi = (data: Record<string, unknown>): Promise<IBlobItem> => {
224
234
  return axiosRequest({
225
- url: '/agentic/project/export',
235
+ url: '/examples/project/export',
226
236
  method: 'post',
227
237
  data,
228
238
  responseType: 'blob'
229
239
  })
230
240
  }
231
-
232
- /**
233
- * 测试 404 错误
234
- */
235
- export const NotFoundApi = () => {
236
- return axiosRequest({
237
- url: '/notFound',
238
- method: 'get'
239
- })
240
- }
241
-
242
- /**
243
- * 测试 不需要权限
244
- */
245
- export const NoNeedAuthApi = () => {
246
- return axiosRequest({
247
- url: '/auth/no',
248
- method: 'post',
249
- noAuth: true // 是否需要权限,默认为 false
250
- })
251
- }
252
-
253
- /**
254
- * 测试 无权限
255
- */
256
- export const NoAuthApi = (showErrorMsg: boolean) => {
257
- return axiosRequest({
258
- url: '/auth/no',
259
- method: 'post',
260
- showErrorMsg // 是否显示错误信息,默认为 true
261
- })
262
- }
263
-
264
- /**
265
- * 测试 请求错误
266
- */
267
- export const FailApi = () => {
268
- return axiosRequest({
269
- url: '/auth/fail',
270
- method: 'post'
271
- })
272
- }
@@ -35,7 +35,7 @@ export interface ManagerQuery extends IPagination {
35
35
  */
36
36
  export const ManagerListApi = (params?: ManagerQuery): Promise<IPageTableData<Manager>> => {
37
37
  return axiosRequest({
38
- url: '/agentic/manager/list',
38
+ url: '/examples/manager/list',
39
39
  method: 'get',
40
40
  params
41
41
  })
@@ -0,0 +1,70 @@
1
+ <!--
2
+ @Author : TanRui
3
+ @WeChat : Tan578853789
4
+ @File : DictSelector.vue
5
+ @Date : 2026/07/17
6
+ @Desc. : 字典下拉选择器,选项带背景和文字颜色
7
+ -->
8
+
9
+ <script setup lang="ts">
10
+ import type { IDictItem } from '@/types'
11
+ import { computed } from 'vue'
12
+ import { getDictList } from '@/utils'
13
+ import DictTag from '@/components/common/DictTag.vue'
14
+
15
+ export interface Props {
16
+ /** 字典名称 */
17
+ dictName: string
18
+ /** 选中的值 */
19
+ modelValue?: string | number
20
+ /** 是否可筛选 */
21
+ filterable?: boolean
22
+ /** 占位文本 */
23
+ placeholder?: string
24
+ /** 是否可清空 */
25
+ clearable?: boolean
26
+ /** 宽度 */
27
+ width?: string | number
28
+ /** 是否显示颜色 */
29
+ showColor?: boolean
30
+ }
31
+
32
+ const props = withDefaults(defineProps<Props>(), {
33
+ filterable: true,
34
+ placeholder: '',
35
+ clearable: true,
36
+ width: '100%',
37
+ showColor: true
38
+ })
39
+
40
+ const emit = defineEmits<{
41
+ 'update:modelValue': [value: string | number | undefined]
42
+ }>()
43
+
44
+ const options = computed<IDictItem[]>(() => getDictList(props.dictName))
45
+
46
+ const currentValue = computed({
47
+ get: () => props.modelValue ?? undefined,
48
+ set: (val) => emit('update:modelValue', val)
49
+ })
50
+ </script>
51
+
52
+ <template>
53
+ <el-select
54
+ v-model="currentValue"
55
+ :filterable="filterable"
56
+ :placeholder="placeholder"
57
+ :clearable="clearable"
58
+ :style="{ width: typeof width === 'number' ? width + 'px' : width }"
59
+ >
60
+ <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" class="dict-option">
61
+ <DictTag :dictName="props.dictName" :value="item.value" :height="24" />
62
+ </el-option>
63
+ </el-select>
64
+ </template>
65
+
66
+ <style lang="scss" scoped>
67
+ .dict-option {
68
+ text-align: left;
69
+ }
70
+ </style>
@@ -18,6 +18,10 @@ export interface Props {
18
18
  * 是否使用颜色
19
19
  */
20
20
  showColor?: boolean
21
+ /**
22
+ * 标签高度
23
+ */
24
+ height?: number
21
25
  /**
22
26
  * 是否使用 popover
23
27
  */
@@ -28,7 +32,7 @@ export interface Props {
28
32
  placement?: 'top' | 'top-left' | 'top-right' | 'bottom' | 'bottom-left' | 'bottom-right'
29
33
  }
30
34
 
31
- const { dictName = '', value = '', showColor = true, popover = '' } = defineProps<Props>()
35
+ const { dictName = '', value = '', showColor = true, height = 0, popover = '' } = defineProps<Props>()
32
36
 
33
37
  const computedColor = computed(() => {
34
38
  const c = getDictColor(dictName, value) || 'inherit'
@@ -47,7 +51,9 @@ const computedColor = computed(() => {
47
51
  class="dictTag"
48
52
  :class="{ dictTag_showColor: showColor }"
49
53
  :style="{
50
- backgroundColor: computedColor.backgroundColor
54
+ backgroundColor: computedColor.backgroundColor,
55
+ height: height ? height + 'px' : undefined,
56
+ lineHeight: height ? height + 'px' : undefined
51
57
  }"
52
58
  >
53
59
  <span
@@ -1,6 +1,6 @@
1
1
  export * from './packages'
2
2
  export * from './dict'
3
3
  export * from './file'
4
- export * from './field'
4
+ export { extractFieldId } from '@jnrs/shared'
5
5
  export * from './permissions'
6
6
  export * from './common'