create-jnrs-vue 1.2.35 → 1.2.37
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.
- package/README.md +3 -3
- package/jnrs-vue/.env.development +2 -2
- package/jnrs-vue/AGENTS.md +0 -0
- package/jnrs-vue/README.md +6 -11
- package/jnrs-vue/components.d.ts +5 -3
- package/jnrs-vue/package.json +11 -4
- package/jnrs-vue/public/system/menu.json +28 -21
- package/jnrs-vue/src/api/business/index.ts +69 -0
- package/jnrs-vue/src/api/common/index.ts +3 -2
- package/jnrs-vue/src/api/examples/portfolio-management/portfolio.ts +163 -0
- package/jnrs-vue/src/api/examples/portfolio-management/program.ts +149 -0
- package/jnrs-vue/src/api/examples/portfolio-management/project.ts +125 -0
- package/jnrs-vue/src/api/examples/program-management/index.ts +143 -0
- package/jnrs-vue/src/api/examples/program-management/sub-project.ts +125 -0
- package/jnrs-vue/src/api/{demos/project.ts → examples/project-management/index.ts} +75 -25
- package/jnrs-vue/src/api/{demos → examples/project-management}/manager.ts +1 -1
- package/jnrs-vue/src/api/request.ts +1 -1
- package/jnrs-vue/src/api/system/index.ts +1 -1
- package/jnrs-vue/src/assets/styles/root.scss +5 -0
- package/jnrs-vue/src/components/common/DictTag.vue +12 -6
- package/jnrs-vue/src/components/common/ImageView.vue +19 -27
- package/jnrs-vue/src/components/common/PdfView.vue +19 -26
- package/jnrs-vue/src/components/select/SelectManager.vue +1 -1
- package/jnrs-vue/src/composables/useDateRangeField.ts +30 -0
- package/jnrs-vue/src/utils/field.ts +73 -0
- package/jnrs-vue/src/utils/file.ts +5 -40
- package/jnrs-vue/src/utils/index.ts +1 -0
- package/jnrs-vue/src/utils/packages.ts +10 -8
- package/jnrs-vue/src/views/businessPlayground/EditDialog.vue +137 -0
- package/jnrs-vue/src/views/businessPlayground/index.vue +90 -0
- package/jnrs-vue/src/views/{demos → examples}/playground/RequestPage.vue +3 -1
- package/jnrs-vue/src/views/examples/portfolio-management/index.vue +65 -0
- package/jnrs-vue/src/views/examples/portfolio-management/portfolioTree/editDialog.vue +155 -0
- package/jnrs-vue/src/views/examples/portfolio-management/portfolioTree/index.vue +257 -0
- package/jnrs-vue/src/views/examples/portfolio-management/programList/editDialog.vue +167 -0
- package/jnrs-vue/src/views/examples/portfolio-management/programList/index.vue +225 -0
- package/jnrs-vue/src/views/examples/portfolio-management/projectList/editDialog.vue +177 -0
- package/jnrs-vue/src/views/examples/portfolio-management/projectList/index.vue +159 -0
- package/jnrs-vue/src/views/examples/program-management/index.vue +48 -0
- package/jnrs-vue/src/views/examples/program-management/mainPage/editDialog.vue +201 -0
- package/jnrs-vue/src/views/examples/program-management/mainPage/index.vue +218 -0
- package/jnrs-vue/src/views/examples/program-management/subPage/editDialog.vue +202 -0
- package/jnrs-vue/src/views/examples/program-management/subPage/index.vue +182 -0
- package/jnrs-vue/src/views/{demos/crud → examples/project-management}/EditDialog.vue +86 -53
- package/jnrs-vue/src/views/{demos/crud → examples/project-management}/index.vue +107 -35
- package/jnrs-vue/src/views/home/index.vue +2 -2
- package/jnrs-vue/viteMockServe/fail.ts +2 -2
- package/jnrs-vue/viteMockServe/index.ts +254 -7
- package/jnrs-vue/viteMockServe/json/dictRes.json +11 -1
- package/jnrs-vue/viteMockServe/json/{loginRes_admin.json → loginResAdmin.json} +20 -0
- package/jnrs-vue/viteMockServe/json/programListRes.json +81 -0
- package/jnrs-vue/viteMockServe/json/projectListRes.json +34 -31
- package/jnrs-vue/viteMockServe/json/subProjectListRes.json +221 -0
- package/jnrs-vue/viteMockServe/success.ts +8 -8
- package/package.json +1 -1
- package/jnrs-vue/AGENTS/RULES_API.md +0 -91
- package/jnrs-vue/AGENTS/RULES_BASE.md +0 -10
- package/jnrs-vue/AGENTS/RULES_COMMON.md +0 -6
- package/jnrs-vue/AGENTS/RULES_CRUD.md +0 -53
- package/jnrs-vue/AGENTS/RULES_DEPENDENCIES.md +0 -11
- package/jnrs-vue/AGENTS/RULES_MENU.md +0 -593
- /package/jnrs-vue/src/views/{demos → examples}/playground/index.vue +0 -0
- /package/jnrs-vue/viteMockServe/json/{loginRes_user.json → loginResUser.json} +0 -0
package/README.md
CHANGED
|
@@ -36,9 +36,9 @@ pnpm add create-jnrs-vue
|
|
|
36
36
|
- 前置准备
|
|
37
37
|
- 将业务功能原型图作为生成前端代码的参考图
|
|
38
38
|
- 从 api 工具(如 ApiFox) 中导出 openapi 文档,或接入其提供的 MCP 服务
|
|
39
|
-
- 使用 AI Agent 读取并分析当前 `README.md` 文件及 `/AGENTS/
|
|
39
|
+
- 使用 AI Agent 读取并分析当前 `README.md` 文件及 `/AGENTS/README_BASE.md` 文件并作为 IDE AI Agent 的记忆
|
|
40
40
|
- 预置提示词
|
|
41
|
-
- 保存记忆:`读取并分析当前 README.md 文件及 /AGENTS/
|
|
41
|
+
- 保存记忆:`读取并分析当前 README.md 文件及 /AGENTS/README_BASE.md 文件并作为 IDE AI Agent 的记忆`
|
|
42
42
|
- 生成菜单:`根据提供的菜单原型图,生成菜单`
|
|
43
43
|
- 生成服务文件:`根据提供的 openapi 文档或 MCP 服务,生成API 服务文件`
|
|
44
44
|
- 生成增删改查页面文件:`根据提供的界面原型图,生成增删改查页面文件`
|
|
@@ -47,7 +47,7 @@ pnpm add create-jnrs-vue
|
|
|
47
47
|
|
|
48
48
|
```Text
|
|
49
49
|
jnrs-vue/
|
|
50
|
-
├── AGENTS/
|
|
50
|
+
├── AGENTS/ # AI Agent 规则与提示词
|
|
51
51
|
├── viteMockServe/ # Mock 服务配置
|
|
52
52
|
├── public/ # 静态资源
|
|
53
53
|
├── src/ # 源码目录
|
|
@@ -4,8 +4,8 @@ ENV = 'development'
|
|
|
4
4
|
VITE_USE_MOCK = true
|
|
5
5
|
|
|
6
6
|
# 后端接口基地址 - 开发环境
|
|
7
|
-
|
|
8
|
-
VITE_BASE_URL = '192.168.1.50:5001'
|
|
7
|
+
VITE_BASE_URL = '192.168.1.6:5001'
|
|
8
|
+
# VITE_BASE_URL = '192.168.1.50:5001'
|
|
9
9
|
|
|
10
10
|
# 应用运行主机(置空默认为 localhost)
|
|
11
11
|
VITE_APP_HOST = ''
|
|
File without changes
|
package/jnrs-vue/README.md
CHANGED
|
@@ -19,22 +19,16 @@ pnpm build
|
|
|
19
19
|
## 🤖 AI Agent 使用说明
|
|
20
20
|
|
|
21
21
|
- 前置准备
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
- 使用 AI Agent 读取并分析当前 `README.md` 文件及 `/AGENTS/RULES_BASE.md` 文件并作为 IDE AI Agent 的记忆
|
|
25
|
-
- 预置提示词
|
|
26
|
-
- 保存记忆:`读取并分析当前 README.md 文件及 /AGENTS/RULES_BASE.md 文件并作为 IDE AI Agent 的记忆`
|
|
27
|
-
- 生成菜单:`根据提供的菜单原型图,生成菜单`
|
|
28
|
-
- 生成服务文件:`根据提供的 openapi 文档或 MCP 服务,生成API 服务文件`
|
|
29
|
-
- 生成增删改查页面文件:`根据提供的界面原型图,生成增删改查页面文件`
|
|
22
|
+
- 必须:从接口管理工具(如 ApiFox)中导出 OAS 文件(如 openapi.json)放入 skills 目录下
|
|
23
|
+
- 可选:将业务功能原型图作为生成前端代码的参考文件,调用多模态能力
|
|
30
24
|
|
|
31
25
|
#### 项目结构
|
|
32
26
|
|
|
33
27
|
```Text
|
|
34
28
|
jnrs-vue/
|
|
35
|
-
├──
|
|
36
|
-
├── viteMockServe/ # Mock
|
|
37
|
-
├── public/ #
|
|
29
|
+
├── skills/ # AI Agent 项目级技能目录
|
|
30
|
+
├── viteMockServe/ # Mock 服务配置目录
|
|
31
|
+
├── public/ # 静态资源目录
|
|
38
32
|
├── src/ # 源码目录
|
|
39
33
|
│ ├── components/ # Vue 组件
|
|
40
34
|
│ ├── composables/ # 组合式函数
|
|
@@ -55,6 +49,7 @@ jnrs-vue/
|
|
|
55
49
|
├── auto-imports.d.ts # 自动导入类型声明
|
|
56
50
|
├── components.d.ts # 全局组件类型声明
|
|
57
51
|
├── README.md # 项目文档
|
|
52
|
+
├── AGENTS.md # AI Agent 规则与提示词
|
|
58
53
|
├── .env.development # 开发环境变量
|
|
59
54
|
├── .env.production # 生产环境变量
|
|
60
55
|
├── .gitignore # Git 忽略规则
|
package/jnrs-vue/components.d.ts
CHANGED
|
@@ -19,11 +19,12 @@ declare module 'vue' {
|
|
|
19
19
|
ElCard: typeof import('element-plus/es')['ElCard']
|
|
20
20
|
ElCascader: typeof import('element-plus/es')['ElCascader']
|
|
21
21
|
ElCol: typeof import('element-plus/es')['ElCol']
|
|
22
|
-
ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
|
|
23
22
|
ElContainer: typeof import('element-plus/es')['ElContainer']
|
|
24
23
|
ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
|
|
25
24
|
ElDatePickerPanel: typeof import('element-plus/es')['ElDatePickerPanel']
|
|
26
|
-
|
|
25
|
+
ElDropdown: typeof import('element-plus/es')['ElDropdown']
|
|
26
|
+
ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
|
|
27
|
+
ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
|
|
27
28
|
ElForm: typeof import('element-plus/es')['ElForm']
|
|
28
29
|
ElFormItem: typeof import('element-plus/es')['ElFormItem']
|
|
29
30
|
ElHeader: typeof import('element-plus/es')['ElHeader']
|
|
@@ -35,16 +36,17 @@ declare module 'vue' {
|
|
|
35
36
|
ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
|
|
36
37
|
ElOption: typeof import('element-plus/es')['ElOption']
|
|
37
38
|
ElPopover: typeof import('element-plus/es')['ElPopover']
|
|
39
|
+
ElProgress: typeof import('element-plus/es')['ElProgress']
|
|
38
40
|
ElRow: typeof import('element-plus/es')['ElRow']
|
|
39
41
|
ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
|
|
40
42
|
ElSelect: typeof import('element-plus/es')['ElSelect']
|
|
41
43
|
ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
|
|
42
44
|
ElSwitch: typeof import('element-plus/es')['ElSwitch']
|
|
43
|
-
ElTable: typeof import('element-plus/es')['ElTable']
|
|
44
45
|
ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
|
|
45
46
|
ElTabPane: typeof import('element-plus/es')['ElTabPane']
|
|
46
47
|
ElTabs: typeof import('element-plus/es')['ElTabs']
|
|
47
48
|
ElTag: typeof import('element-plus/es')['ElTag']
|
|
49
|
+
ElTree: typeof import('element-plus/es')['ElTree']
|
|
48
50
|
ElWatermark: typeof import('element-plus/es')['ElWatermark']
|
|
49
51
|
}
|
|
50
52
|
export interface GlobalDirectives {
|
package/jnrs-vue/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jnrs-vue",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.37",
|
|
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.
|
|
23
|
-
"@jnrs/shared": "1.1.
|
|
24
|
-
"@jnrs/vue-core": "1.2.
|
|
22
|
+
"@jnrs/lingshu-smart": "2.2.30",
|
|
23
|
+
"@jnrs/shared": "1.1.31",
|
|
24
|
+
"@jnrs/vue-core": "1.2.25",
|
|
25
25
|
"@vueuse/core": "^14.1.0",
|
|
26
26
|
"element-plus": "^2.13.3",
|
|
27
27
|
"pinia": "^3.0.4",
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"vue-i18n": "^11.2.8"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
|
+
"@jnrs/skills": "1.0.2",
|
|
33
34
|
"@tsconfig/node22": "^22.0.5",
|
|
34
35
|
"@types/node": "^22.19.1",
|
|
35
36
|
"@typescript-eslint/parser": "^8.48.1",
|
|
@@ -52,5 +53,11 @@
|
|
|
52
53
|
"vite-plugin-mock": "^3.0.2",
|
|
53
54
|
"vite-plugin-vue-devtools": "^8.0.5",
|
|
54
55
|
"vue-tsc": "^3.1.5"
|
|
56
|
+
},
|
|
57
|
+
"pnpm": {
|
|
58
|
+
"onlyBuiltDependencies": [
|
|
59
|
+
"@parcel/watcher",
|
|
60
|
+
"esbuild"
|
|
61
|
+
]
|
|
55
62
|
}
|
|
56
63
|
}
|
|
@@ -10,22 +10,40 @@
|
|
|
10
10
|
},
|
|
11
11
|
"children": [
|
|
12
12
|
{
|
|
13
|
-
"path": "/playground",
|
|
14
|
-
"name": "
|
|
13
|
+
"path": "/examples/playground",
|
|
14
|
+
"name": "examplesPlayground",
|
|
15
15
|
"meta": {
|
|
16
16
|
"title": "基础功能测试",
|
|
17
17
|
"todoCount": 8
|
|
18
18
|
},
|
|
19
|
-
"component": "/
|
|
19
|
+
"component": "/examples/playground/index"
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
|
-
"path": "/
|
|
23
|
-
"name": "
|
|
22
|
+
"path": "/examples/project-management",
|
|
23
|
+
"name": "examplesProjectManagement",
|
|
24
24
|
"meta": {
|
|
25
25
|
"title": "项目管理",
|
|
26
26
|
"todoCount": 0
|
|
27
27
|
},
|
|
28
|
-
"component": "/
|
|
28
|
+
"component": "/examples/project-management/index"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"path": "/examples/program-management",
|
|
32
|
+
"name": "examplesProgramManagement",
|
|
33
|
+
"meta": {
|
|
34
|
+
"title": "项目集管理",
|
|
35
|
+
"todoCount": 0
|
|
36
|
+
},
|
|
37
|
+
"component": "/examples/program-management/index"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"path": "/examples/portfolio-management",
|
|
41
|
+
"name": "examplesPortfolioManagement",
|
|
42
|
+
"meta": {
|
|
43
|
+
"title": "项目组合管理",
|
|
44
|
+
"todoCount": 0
|
|
45
|
+
},
|
|
46
|
+
"component": "/examples/portfolio-management/index"
|
|
29
47
|
}
|
|
30
48
|
]
|
|
31
49
|
},
|
|
@@ -40,7 +58,6 @@
|
|
|
40
58
|
"name": "lingshuSmartEditorPage",
|
|
41
59
|
"meta": {
|
|
42
60
|
"title": "编辑器",
|
|
43
|
-
"icon": "Operation",
|
|
44
61
|
"noAuth": true,
|
|
45
62
|
"global": true
|
|
46
63
|
},
|
|
@@ -51,7 +68,6 @@
|
|
|
51
68
|
"name": "lingshuSmartPreviewPage",
|
|
52
69
|
"meta": {
|
|
53
70
|
"title": "看板",
|
|
54
|
-
"icon": "Platform",
|
|
55
71
|
"noAuth": true,
|
|
56
72
|
"global": true
|
|
57
73
|
},
|
|
@@ -81,25 +97,16 @@
|
|
|
81
97
|
"name": "systemMine",
|
|
82
98
|
"meta": {
|
|
83
99
|
"title": "个人中心",
|
|
84
|
-
"permissions": ["
|
|
100
|
+
"permissions": ["systemMine:view", "systemMine:edit"]
|
|
85
101
|
},
|
|
86
102
|
"component": "/system/mine/index"
|
|
87
103
|
},
|
|
88
|
-
{
|
|
89
|
-
"path": "/system/user",
|
|
90
|
-
"name": "systemUser",
|
|
91
|
-
"meta": {
|
|
92
|
-
"title": "用户管理",
|
|
93
|
-
"permissions": ["user:view", "user:edit"]
|
|
94
|
-
},
|
|
95
|
-
"component": "/system/user/index"
|
|
96
|
-
},
|
|
97
104
|
{
|
|
98
105
|
"path": "/system/role",
|
|
99
106
|
"name": "systemRole",
|
|
100
107
|
"meta": {
|
|
101
108
|
"title": "角色管理",
|
|
102
|
-
"permissions": ["
|
|
109
|
+
"permissions": ["systemRole:view", "systemRole:edit"]
|
|
103
110
|
},
|
|
104
111
|
"component": "/system/role/index"
|
|
105
112
|
},
|
|
@@ -108,7 +115,7 @@
|
|
|
108
115
|
"name": "systemDict",
|
|
109
116
|
"meta": {
|
|
110
117
|
"title": "字典管理",
|
|
111
|
-
"permissions": ["
|
|
118
|
+
"permissions": ["systemDict:view", "systemDict:edit"]
|
|
112
119
|
},
|
|
113
120
|
"component": "/system/dict/index"
|
|
114
121
|
},
|
|
@@ -117,7 +124,7 @@
|
|
|
117
124
|
"name": "systemMenu",
|
|
118
125
|
"meta": {
|
|
119
126
|
"title": "菜单管理",
|
|
120
|
-
"permissions": ["
|
|
127
|
+
"permissions": ["systemMenu:view", "systemMenu:edit"]
|
|
121
128
|
},
|
|
122
129
|
"component": "/system/menu/index"
|
|
123
130
|
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @Author : TanRui
|
|
3
|
+
* @WeChat : Tan578853789
|
|
4
|
+
* @File : business/index.ts
|
|
5
|
+
* @Date : 2026/05/25
|
|
6
|
+
* @Desc. : 业务功能测试模块接口文档
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { IBlobItem } from '@jnrs/shared'
|
|
10
|
+
import type { IPagination, IPageTableData, IFile } from '@/types'
|
|
11
|
+
import { axiosRequest } from '../request'
|
|
12
|
+
import { objectToFormData } from '@/utils'
|
|
13
|
+
|
|
14
|
+
export interface ProcessItem extends IFile {
|
|
15
|
+
id?: number
|
|
16
|
+
productName?: string
|
|
17
|
+
productCode?: string
|
|
18
|
+
height?: number
|
|
19
|
+
isProcessCompleteness?: boolean
|
|
20
|
+
imageDocumentId?: unknown
|
|
21
|
+
attachmentDocumentId?: unknown
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface SaveProcessRequest {
|
|
25
|
+
/** ID 编号 */
|
|
26
|
+
id?: number
|
|
27
|
+
productName: string
|
|
28
|
+
productCode: string
|
|
29
|
+
height: number
|
|
30
|
+
orginAttachmentName?: string
|
|
31
|
+
/** 文件 */
|
|
32
|
+
newAttachmentFile: []
|
|
33
|
+
orginImageNames?: string[]
|
|
34
|
+
/** 图片 */
|
|
35
|
+
newImageFiles: []
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* 列表
|
|
40
|
+
*/
|
|
41
|
+
export const getProductManagementProcessListApi = (params: IPagination): Promise<IPageTableData<ProcessItem>> => {
|
|
42
|
+
return axiosRequest({
|
|
43
|
+
url: '/product/process',
|
|
44
|
+
method: 'get',
|
|
45
|
+
params
|
|
46
|
+
})
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* 新建/编辑
|
|
51
|
+
*/
|
|
52
|
+
export const saveProductManagementProcessApi = (data: SaveProcessRequest): Promise<void> => {
|
|
53
|
+
return axiosRequest({
|
|
54
|
+
url: '/product/process',
|
|
55
|
+
method: 'post',
|
|
56
|
+
data: objectToFormData(data)
|
|
57
|
+
})
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* 齐套检查 导出
|
|
62
|
+
*/
|
|
63
|
+
export const getStandardLoadKitCheckExportApi = (): Promise<IBlobItem> => {
|
|
64
|
+
return axiosRequest({
|
|
65
|
+
url: '/order/completeness-check/export',
|
|
66
|
+
method: 'get',
|
|
67
|
+
responseType: 'blob'
|
|
68
|
+
})
|
|
69
|
+
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { axiosRequest } from '../request'
|
|
2
|
+
import type { IBlobItem } from '@jnrs/shared'
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* axios 方式下载文件
|
|
5
6
|
* @param uniqueFileName 文件唯一名称(列表中一般是在 item.attachmentDocument/imageDocument.attachments[].uniqueFileName)
|
|
6
7
|
* @returns Blob
|
|
7
8
|
*/
|
|
8
|
-
export const
|
|
9
|
+
export const fileDownloadApi = (uniqueFileName: string): Promise<IBlobItem> => {
|
|
9
10
|
return axiosRequest({
|
|
10
11
|
url: '/files/' + uniqueFileName,
|
|
11
12
|
method: 'get',
|
|
@@ -18,7 +19,7 @@ export const FileApi = (uniqueFileName: string): Promise<Blob> => {
|
|
|
18
19
|
* Fetch 方式下载文件
|
|
19
20
|
*/
|
|
20
21
|
// import { useFetch } from '@vueuse/core'
|
|
21
|
-
// export const
|
|
22
|
+
// export const fileDownloadApi = (uniqueFileName: string) => {
|
|
22
23
|
// return useFetch(`/files/${uniqueFileName}`, {
|
|
23
24
|
// method: 'get',
|
|
24
25
|
// headers: {
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @File : portfolio-management/portfolio.ts
|
|
3
|
+
* @Desc. : 项目组合模块接口文档(左侧树)
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { IFullResponse } from '@jnrs/shared'
|
|
7
|
+
import { axiosRequest } from '../../request'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* 项目组合 - 详情
|
|
11
|
+
*/
|
|
12
|
+
export interface Portfolio {
|
|
13
|
+
id: number
|
|
14
|
+
/** 组合名称 */
|
|
15
|
+
name: string
|
|
16
|
+
/** 排序 */
|
|
17
|
+
sequence: number
|
|
18
|
+
/** 是否有子组合 */
|
|
19
|
+
hasSubPortfolio: boolean
|
|
20
|
+
/** 描述 */
|
|
21
|
+
description: string
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* 项目组合 - 新增
|
|
26
|
+
*/
|
|
27
|
+
export interface AddPortfolio {
|
|
28
|
+
/** 组合名称 */
|
|
29
|
+
name: string
|
|
30
|
+
/** 描述 */
|
|
31
|
+
description: string
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* 项目组合 - 上方新增
|
|
36
|
+
*/
|
|
37
|
+
export interface UpSideAddPortfolio {
|
|
38
|
+
targetPortfolioId: number
|
|
39
|
+
name: string
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* 项目组合 - 下方新增
|
|
44
|
+
*/
|
|
45
|
+
export interface DownSideAddPortfolio {
|
|
46
|
+
targetPortfolioId: number
|
|
47
|
+
name: string
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* 项目组合 - 子组合新增
|
|
52
|
+
*/
|
|
53
|
+
export interface InnerAddPortfolio {
|
|
54
|
+
targetPortfolioId: number
|
|
55
|
+
name: string
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* 项目组合 - 修改
|
|
60
|
+
*/
|
|
61
|
+
export interface UpdatePortfolio {
|
|
62
|
+
id: number
|
|
63
|
+
name: string
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* 项目组合 - 列表
|
|
68
|
+
*/
|
|
69
|
+
export const portfolioListApi = (parentId?: number): Promise<Portfolio[]> => {
|
|
70
|
+
return axiosRequest({
|
|
71
|
+
url: '/agentic/portfolio/list',
|
|
72
|
+
method: 'get',
|
|
73
|
+
params: { parentId }
|
|
74
|
+
})
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* 项目组合 - 最外侧新增
|
|
79
|
+
*/
|
|
80
|
+
export const addPortfolioApi = (data: AddPortfolio) => {
|
|
81
|
+
return axiosRequest({
|
|
82
|
+
url: '/agentic/portfolio/save',
|
|
83
|
+
method: 'post',
|
|
84
|
+
data
|
|
85
|
+
})
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* 项目组合 - 上方新增
|
|
90
|
+
*/
|
|
91
|
+
export const upSideAddPortfolioApi = (data: UpSideAddPortfolio) => {
|
|
92
|
+
return axiosRequest({
|
|
93
|
+
url: '/agentic/portfolio/upSideAdd',
|
|
94
|
+
method: 'post',
|
|
95
|
+
data
|
|
96
|
+
})
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* 项目组合 - 下方新增
|
|
101
|
+
*/
|
|
102
|
+
export const downSideAddPortfolioApi = (data: DownSideAddPortfolio) => {
|
|
103
|
+
return axiosRequest({
|
|
104
|
+
url: '/agentic/portfolio/downSideAdd',
|
|
105
|
+
method: 'post',
|
|
106
|
+
data
|
|
107
|
+
})
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* 项目组合 - 子组合新增
|
|
112
|
+
*/
|
|
113
|
+
export const innerAddPortfolioApi = (data: InnerAddPortfolio) => {
|
|
114
|
+
return axiosRequest({
|
|
115
|
+
url: '/agentic/portfolio/innerAdd',
|
|
116
|
+
method: 'post',
|
|
117
|
+
data
|
|
118
|
+
})
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* 项目组合 - 修改
|
|
123
|
+
*/
|
|
124
|
+
export const updatePortfolioApi = (data: UpdatePortfolio) => {
|
|
125
|
+
return axiosRequest({
|
|
126
|
+
url: '/agentic/portfolio/update',
|
|
127
|
+
method: 'put',
|
|
128
|
+
data
|
|
129
|
+
})
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* 项目组合 - 上移
|
|
134
|
+
*/
|
|
135
|
+
export const moveUpPortfolioApi = (data: { targetPortfolioId: number }) => {
|
|
136
|
+
return axiosRequest({
|
|
137
|
+
url: '/agentic/portfolio/moveUp',
|
|
138
|
+
method: 'put',
|
|
139
|
+
data
|
|
140
|
+
})
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* 项目组合 - 下移
|
|
145
|
+
*/
|
|
146
|
+
export const moveDownPortfolioApi = (data: { targetPortfolioId: number }) => {
|
|
147
|
+
return axiosRequest({
|
|
148
|
+
url: '/agentic/portfolio/moveDown',
|
|
149
|
+
method: 'put',
|
|
150
|
+
data
|
|
151
|
+
})
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* 项目组合 - 删除
|
|
156
|
+
*/
|
|
157
|
+
export const deletePortfolioApi = (id: number): Promise<IFullResponse<unknown>> => {
|
|
158
|
+
return axiosRequest({
|
|
159
|
+
url: `/agentic/portfolio/delete/${id}`,
|
|
160
|
+
method: 'delete',
|
|
161
|
+
returnFullResponse: true
|
|
162
|
+
})
|
|
163
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @File : portfolio-management/program.ts
|
|
3
|
+
* @Desc. : 项目集模块接口文档(中间表格,归属项目组合)
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { IFullResponse } from '@jnrs/shared'
|
|
7
|
+
import type { IPagination, IPageTableData } from '@/types'
|
|
8
|
+
import { axiosRequest } from '../../request'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* 项目集(归属组合) - 详情
|
|
12
|
+
*/
|
|
13
|
+
export interface PortfolioProgram {
|
|
14
|
+
id: string
|
|
15
|
+
/** 项目组合Id */
|
|
16
|
+
portfolioId: number
|
|
17
|
+
/** 项目集编码 */
|
|
18
|
+
code: number
|
|
19
|
+
/** 项目集名称 */
|
|
20
|
+
name: string
|
|
21
|
+
/** 项目集描述 */
|
|
22
|
+
description: string
|
|
23
|
+
/** 项目经理Id */
|
|
24
|
+
managerId: number
|
|
25
|
+
/** 项目经理名称 */
|
|
26
|
+
managerName: string
|
|
27
|
+
/** 预算 */
|
|
28
|
+
budget: number
|
|
29
|
+
/** 开始日期 */
|
|
30
|
+
startDate: string
|
|
31
|
+
/** 结束日期 */
|
|
32
|
+
endDate: string
|
|
33
|
+
/**
|
|
34
|
+
* 项目集状态
|
|
35
|
+
* @dict programStatus
|
|
36
|
+
* @enumValues [0, 1, 2]
|
|
37
|
+
*/
|
|
38
|
+
programStatus: number
|
|
39
|
+
/**
|
|
40
|
+
* 启用状态
|
|
41
|
+
* @independentModification portfolioProgramEnableApi
|
|
42
|
+
*/
|
|
43
|
+
enable: boolean
|
|
44
|
+
/** 项目数量 */
|
|
45
|
+
projectCount: number
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* 项目集(归属组合) - 新增
|
|
50
|
+
*/
|
|
51
|
+
export interface AddPortfolioProgram {
|
|
52
|
+
portfolioId?: number
|
|
53
|
+
code: number
|
|
54
|
+
name: string
|
|
55
|
+
description: string
|
|
56
|
+
/**
|
|
57
|
+
* 项目经理
|
|
58
|
+
* @useSelectComponent SelectManager
|
|
59
|
+
*/
|
|
60
|
+
managerId?: Record<string, unknown> | number
|
|
61
|
+
budget: number
|
|
62
|
+
startDate: string
|
|
63
|
+
endDate: string
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* 项目集(归属组合) - 修改
|
|
68
|
+
*/
|
|
69
|
+
export interface UpdatePortfolioProgram extends AddPortfolioProgram {
|
|
70
|
+
id: string
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* 项目集(归属组合) - 启用/禁用
|
|
75
|
+
*/
|
|
76
|
+
export interface PortfolioProgramEnable {
|
|
77
|
+
id: string
|
|
78
|
+
enable: boolean
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* 项目集(归属组合) - 查询
|
|
83
|
+
*/
|
|
84
|
+
export interface PortfolioProgramQuery extends IPagination {
|
|
85
|
+
/**
|
|
86
|
+
* 项目组合Id
|
|
87
|
+
* @foreignKey portfolioId
|
|
88
|
+
*/
|
|
89
|
+
portfolioId?: number
|
|
90
|
+
code?: string
|
|
91
|
+
name?: string
|
|
92
|
+
managerId?: number
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* 项目集(归属组合) - 列表数据
|
|
97
|
+
*/
|
|
98
|
+
export const portfolioProgramTableApi = (params?: PortfolioProgramQuery): Promise<IPageTableData<PortfolioProgram>> => {
|
|
99
|
+
return axiosRequest({
|
|
100
|
+
url: '/agentic/portfolio-program/list',
|
|
101
|
+
method: 'get',
|
|
102
|
+
params
|
|
103
|
+
})
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* 项目集(归属组合) - 新增
|
|
108
|
+
*/
|
|
109
|
+
export const addPortfolioProgramApi = (data: AddPortfolioProgram) => {
|
|
110
|
+
return axiosRequest({
|
|
111
|
+
url: '/agentic/portfolio-program/save',
|
|
112
|
+
method: 'post',
|
|
113
|
+
data
|
|
114
|
+
})
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* 项目集(归属组合) - 修改
|
|
119
|
+
*/
|
|
120
|
+
export const editPortfolioProgramApi = (data: UpdatePortfolioProgram) => {
|
|
121
|
+
return axiosRequest({
|
|
122
|
+
url: '/agentic/portfolio-program/save',
|
|
123
|
+
method: 'post',
|
|
124
|
+
data
|
|
125
|
+
})
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* 项目集(归属组合) - 删除
|
|
130
|
+
*/
|
|
131
|
+
export const deletePortfolioProgramApi = (id: string): Promise<IFullResponse<unknown>> => {
|
|
132
|
+
return axiosRequest({
|
|
133
|
+
url: `/agentic/portfolio-program/delete/${id}`,
|
|
134
|
+
method: 'delete',
|
|
135
|
+
returnFullResponse: true
|
|
136
|
+
})
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* 项目集(归属组合) - 启用/禁用
|
|
141
|
+
*/
|
|
142
|
+
export const portfolioProgramEnableApi = (data: PortfolioProgramEnable) => {
|
|
143
|
+
return axiosRequest({
|
|
144
|
+
url: '/agentic/portfolio-program/enable',
|
|
145
|
+
method: 'put',
|
|
146
|
+
data,
|
|
147
|
+
returnFullResponse: true
|
|
148
|
+
})
|
|
149
|
+
}
|