create-jnrs-vue 1.2.25 → 1.2.27

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jnrs-vue",
3
- "version": "1.2.25",
3
+ "version": "1.2.27",
4
4
  "description": "JNRS 信息化管理系统",
5
5
  "author": "talia_tan",
6
6
  "private": true,
@@ -19,9 +19,9 @@
19
19
  },
20
20
  "dependencies": {
21
21
  "@element-plus/icons-vue": "^2.3.2",
22
- "@jnrs/lingshu-smart": "2.2.6",
23
- "@jnrs/shared": "1.1.18",
24
- "@jnrs/vue-core": "1.2.13",
22
+ "@jnrs/lingshu-smart": "2.2.7",
23
+ "@jnrs/shared": "1.1.23",
24
+ "@jnrs/vue-core": "1.2.15",
25
25
  "@vueuse/core": "^14.1.0",
26
26
  "element-plus": "^2.13.3",
27
27
  "pinia": "^3.0.4",
@@ -27,6 +27,15 @@
27
27
  },
28
28
  "component": "/demos/simpleTable/index"
29
29
  },
30
+ {
31
+ "path": "/compositionTable",
32
+ "name": "compositionTable",
33
+ "meta": {
34
+ "title": "简单数据表格 - 组合式",
35
+ "todoCount": 0
36
+ },
37
+ "component": "/demos/compositionTable/index"
38
+ },
30
39
  {
31
40
  "path": "/crud",
32
41
  "name": "Crud",
@@ -36,6 +45,15 @@
36
45
  },
37
46
  "component": "/demos/crud/index"
38
47
  },
48
+ {
49
+ "path": "/compositionCrud",
50
+ "name": "compositionCrud",
51
+ "meta": {
52
+ "title": "完整增删改查 - 组合式",
53
+ "todoCount": 0
54
+ },
55
+ "component": "/demos/compositionCrud/index"
56
+ },
39
57
  {
40
58
  "path": "/testRedirect",
41
59
  "name": "TestRedirect",
@@ -0,0 +1,159 @@
1
+ /**
2
+ * @Author : TanRui
3
+ * @WeChat : Tan578853789
4
+ * @File : project/ai_agent_context.ts
5
+ * @Date : 2026/03/01
6
+ * @Desc. : 示例模块接口文档(对于标准业务功能可作为 AI Agent 上下文)
7
+ */
8
+
9
+ import type {
10
+ // 列表数据及数据总数
11
+ IPageTableData,
12
+ // 分页
13
+ IPagination,
14
+ // 附件
15
+ IFile
16
+ } from '@/types'
17
+ import {
18
+ // axios 请求方法泛型拓展封装
19
+ axiosRequest
20
+ } from '../request'
21
+ import {
22
+ // 将对象转为 FormData
23
+ objectToFormData
24
+ } from '@/utils'
25
+
26
+ export interface Project extends IFile {
27
+ id: string
28
+ programCode: string
29
+ program: string
30
+ code: string
31
+ name: string
32
+ description: string
33
+ projectType?: '敏捷型' | '瀑布型' | '混合型'
34
+ manager: string
35
+ budget: number
36
+ plannedStartDate: string
37
+ plannedFinishDate: string
38
+ progress: string
39
+ status: '进行中' | '已完成' | '未开始' | '已暂停'
40
+ }
41
+
42
+ type ProjectReadOnly =
43
+ | 'programCode'
44
+ | 'program'
45
+ | 'code'
46
+ | 'manager'
47
+ | 'plannedFinishDate'
48
+ | 'progress'
49
+ | 'status'
50
+ | 'imageDocument'
51
+ | 'attachmentDocument'
52
+
53
+ export type EditProject = Omit<Project, ProjectReadOnly> & {
54
+ newAttachmentFile: []
55
+ newImageFiles: []
56
+ }
57
+
58
+ export interface ProjectQuery extends IPagination {
59
+ code?: string
60
+ projectType?: '敏捷型' | '瀑布型' | '混合型'
61
+ manager?: string
62
+ }
63
+
64
+ /**
65
+ * 项目 - 列表数据
66
+ */
67
+ export const ProjectListApi = (params?: ProjectQuery): Promise<IPageTableData<Project>> => {
68
+ return axiosRequest({
69
+ url: '/project/table',
70
+ method: 'get',
71
+ params
72
+ })
73
+ }
74
+
75
+ /**
76
+ * 项目 - 详情数据
77
+ */
78
+ export const DataApiTest = (params: { id: string }): Promise<Project> => {
79
+ return axiosRequest({
80
+ url: '/project/info',
81
+ method: 'get',
82
+ params
83
+ })
84
+ }
85
+
86
+ /**
87
+ * 项目 - 新增
88
+ */
89
+ export const CreateProjectApi = (data: Omit<Project, 'id'>) => {
90
+ return axiosRequest({
91
+ url: '/project/save',
92
+ method: 'post',
93
+ data
94
+ })
95
+ }
96
+
97
+ /**
98
+ * 项目 - 编辑
99
+ */
100
+ export const EditProjectApi = (data: EditProject) => {
101
+ return axiosRequest({
102
+ url: '/project/save',
103
+ method: 'post',
104
+ data: objectToFormData(data) // 请求体如果为 formData 类型,使用 objectToFormData 方法转换
105
+ })
106
+ }
107
+
108
+ /**
109
+ * 项目 - 更新
110
+ */
111
+ export const UpdateProjectApi = (data: Project) => {
112
+ return axiosRequest({
113
+ url: '/project/update',
114
+ method: 'put',
115
+ data
116
+ })
117
+ }
118
+
119
+ /**
120
+ * 项目 - 删除
121
+ */
122
+ export const DeleteProjectApi = (id: string) => {
123
+ return axiosRequest({
124
+ url: `/project/delete/${id}`,
125
+ method: 'delete'
126
+ })
127
+ }
128
+
129
+ /**
130
+ * 项目 - 导入
131
+ */
132
+ export const ImportDataApi = (data: FormData) => {
133
+ return axiosRequest({
134
+ url: '/project/import',
135
+ method: 'post',
136
+ data
137
+ })
138
+ }
139
+
140
+ /**
141
+ * 项目 - 导出
142
+ */
143
+ export const ExportApi = (data: Record<string, unknown>): Promise<Blob> => {
144
+ return axiosRequest({
145
+ url: '/project/export',
146
+ method: 'post',
147
+ data
148
+ })
149
+ }
150
+
151
+ /**
152
+ * 项目 - 文件下载
153
+ */
154
+ export const DownloadFileApi = (): Promise<Blob> => {
155
+ return axiosRequest({
156
+ url: '/project/files',
157
+ method: 'post'
158
+ })
159
+ }
@@ -3,10 +3,10 @@
3
3
  * @WeChat : Tan578853789
4
4
  * @File : demos/index.ts
5
5
  * @Date : 2026/03/01
6
- * @Desc. : 示例模块接口文档(可作为 AI Agent 上下文来源)
6
+ * @Desc. : 示例模块接口文档(非标业务功能人工编码参考)
7
7
  */
8
8
 
9
- import type { IBusinessResponse } from '@jnrs/shared'
9
+ import type { IFullResponse } from '@jnrs/shared'
10
10
  import type { IPagination, IPageTableData, IFile, IUser } from '@/types'
11
11
  import { axiosRequest } from '../request'
12
12
  import { objectToFormData } from '@/utils'
@@ -15,7 +15,7 @@ import { objectToFormData } from '@/utils'
15
15
  * 项目 - 详情
16
16
  */
17
17
  export interface Project extends IFile {
18
- id: string
18
+ id: number
19
19
  programCode: string
20
20
  program: string
21
21
  code: string
@@ -31,10 +31,9 @@ export interface Project extends IFile {
31
31
  }
32
32
 
33
33
  /**
34
- * 新增项目 - 忽略字段
34
+ * 创建时不能修改的属性
35
35
  */
36
- type CreateProjectOmit =
37
- | 'id'
36
+ type ProjectReadOnly =
38
37
  | 'programCode'
39
38
  | 'program'
40
39
  | 'code'
@@ -48,8 +47,7 @@ type CreateProjectOmit =
48
47
  /**
49
48
  * 项目 - 创建
50
49
  */
51
- export type EditProject = Omit<Project, CreateProjectOmit> & {
52
- id?: string
50
+ export type EditProject = Omit<Project, ProjectReadOnly> & {
53
51
  managerId?: Record<string, unknown> | number
54
52
  newAttachmentFile: []
55
53
  newImageFiles: []
@@ -62,27 +60,24 @@ export interface ProjectQuery extends IPagination {
62
60
  code?: string
63
61
  projectType?: '敏捷型' | '瀑布型' | '混合型'
64
62
  manager?: string
63
+ plannedStartDate?: string
65
64
  }
66
65
 
67
66
  // 测试 获取数据
68
- export const DataApiTest = (id: string): Promise<IUser> => {
67
+ export const DataApiTest = (params: { id: string }): Promise<IUser> => {
69
68
  return axiosRequest({
70
69
  url: '/auth/user-info',
71
70
  method: 'get',
72
- params: {
73
- id
74
- }
71
+ params
75
72
  })
76
73
  }
77
74
 
78
75
  // 测试 获取全量数据
79
- export const FullDataApiTest = (id: string): Promise<IBusinessResponse<IUser>> => {
76
+ export const FullDataApiTest = (params: { id: string }): Promise<IFullResponse<IUser>> => {
80
77
  return axiosRequest({
81
78
  url: '/auth/user-info',
82
79
  method: 'get',
83
- params: {
84
- id
85
- },
80
+ params,
86
81
  returnFullResponse: true // 需要返回完整响应数据时使用该选项
87
82
  })
88
83
  }
@@ -104,19 +99,18 @@ export const NoNeedAuthApi = () => {
104
99
  return axiosRequest({
105
100
  url: '/auth/no',
106
101
  method: 'post',
107
- noAuth: true
102
+ noAuth: true // 是否需要权限,默认为 false
108
103
  })
109
104
  }
110
105
 
111
106
  /**
112
107
  * 测试 无权限
113
- * @param showErrorMsg 是否显示错误信息
114
108
  */
115
109
  export const NoAuthApi = (showErrorMsg: boolean) => {
116
110
  return axiosRequest({
117
111
  url: '/auth/no',
118
112
  method: 'post',
119
- showErrorMsg
113
+ showErrorMsg // 是否显示错误信息,默认为 true
120
114
  })
121
115
  }
122
116
 
@@ -137,7 +131,7 @@ export const EditProjectApi = (data: EditProject) => {
137
131
  return axiosRequest({
138
132
  url: '/demos/save',
139
133
  method: 'post',
140
- data: objectToFormData(data) // 包含文件上传类需使用 formData 类型
134
+ data: objectToFormData(data) // 请求体如果为 formData 类型,使用 objectToFormData 方法转换
141
135
  })
142
136
  }
143
137
 
@@ -155,7 +149,7 @@ export const UpdateProjectApi = (data: Project) => {
155
149
  /**
156
150
  * 删除数据
157
151
  */
158
- export const DeleteProjectApi = (id: string) => {
152
+ export const DeleteProjectApi = (id: number) => {
159
153
  return axiosRequest({
160
154
  url: `/demos/delete/${id}`,
161
155
  method: 'delete'
@@ -164,11 +158,11 @@ export const DeleteProjectApi = (id: string) => {
164
158
  /**
165
159
  * 列表数据
166
160
  */
167
- export const ProjectListApi = (data?: ProjectQuery): Promise<IPageTableData<Project>> => {
161
+ export const ProjectListApi = (params?: ProjectQuery): Promise<IPageTableData<Project>> => {
168
162
  return axiosRequest({
169
163
  url: '/demos/table',
170
164
  method: 'get',
171
- data
165
+ params
172
166
  })
173
167
  }
174
168
 
@@ -203,3 +197,17 @@ export const ExportApi = (data: Record<string, unknown>): Promise<Blob> => {
203
197
  data
204
198
  })
205
199
  }
200
+
201
+ /**
202
+ * axios 方式下载文件
203
+ * @param uniqueFileName 文件唯一名称(列表中一般是在 item.attachmentDocument/imageDocument.attachments[].uniqueFileName)
204
+ * @returns Blob
205
+ */
206
+ export const FileApi = (uniqueFileName: string): Promise<Blob> => {
207
+ return axiosRequest({
208
+ url: '/files/' + uniqueFileName,
209
+ method: 'get',
210
+ responseType: 'blob', // 响应类型为 blob
211
+ showErrorMsg: false // 不显示错误信息
212
+ })
213
+ }
@@ -6,7 +6,7 @@
6
6
  * @Desc. : axios 网络请求实例
7
7
  */
8
8
 
9
- import type { IBusinessRequest, IBusinessResponse } from '@jnrs/shared'
9
+ import type { IBusinessRequest, IFullResponse } from '@jnrs/shared'
10
10
  import { createAxiosInstance } from '@jnrs/shared/request'
11
11
  import { useMockStore } from '@jnrs/vue-core/pinia'
12
12
  import { useAuthStore } from '@/stores'
@@ -32,7 +32,7 @@ const axiosInstance = createAxiosInstance({
32
32
  * @param options 请求配置项
33
33
  * @returns Promise<T> 响应数据
34
34
  */
35
- const axiosRequest = <T = IBusinessResponse>(options: IBusinessRequest): Promise<T> => {
35
+ const axiosRequest = <T = IFullResponse>(options: IBusinessRequest): Promise<T> => {
36
36
  if (!axiosInstance) {
37
37
  throw new Error('请先调用 createRequest 初始化 axios 实例')
38
38
  }
@@ -12,7 +12,7 @@ import { getDictLabel, getDictColor } from '@/utils'
12
12
 
13
13
  export interface Props {
14
14
  dictName: string
15
- value: string | number
15
+ value?: string | number
16
16
  /**
17
17
  * 是否使用颜色
18
18
  */