|
|
# 计划支出模板设置 - 画布中分组的来源说明
|
|
|
|
|
|
## 页面路径
|
|
|
`http://localhost:3000/#/settings/planned-expenditure-template-settings?categoryId=2`
|
|
|
|
|
|
## 分组来源
|
|
|
|
|
|
画布中显示的分组**来自"事前流程模版设置"页面**(`/settings/pre-approval-template-settings`)。
|
|
|
|
|
|
## 数据流程
|
|
|
|
|
|
### 1. 分组创建和管理
|
|
|
- **位置**: `http://localhost:3000/#/settings/pre-approval-template-settings`
|
|
|
- **页面组件**: `czemc-budget-execution-frontend/src/views/settings/PreApprovalTemplateSettings.vue`
|
|
|
- **功能**:
|
|
|
- 创建分组(分组名称、分组编码、描述、排序、状态)
|
|
|
- 管理分组中的元素(添加、删除、排序)
|
|
|
- 分组数据存储在 `budget_pre_approval_template_groups` 表
|
|
|
|
|
|
### 2. 分组加载到画布
|
|
|
- **位置**: `czemc-budget-execution-frontend/src/views/settings/CanvasSettings.vue`
|
|
|
- **函数**: `loadDefaultTemplateFromGroups()` (第826-897行)
|
|
|
- **调用时机**:
|
|
|
1. 当分类没有保存的模板配置时
|
|
|
2. 当加载模板配置失败时
|
|
|
3. 作为默认配置来源
|
|
|
|
|
|
### 3. 加载流程详解
|
|
|
|
|
|
```javascript
|
|
|
// 步骤1: 获取所有启用的分组
|
|
|
const groupsResponse = await preApprovalTemplateGroupAPI.getList({
|
|
|
is_active: 1, // 只获取启用的分组
|
|
|
all: true // 获取所有数据,不分页
|
|
|
})
|
|
|
|
|
|
// 步骤2: 按排序顺序处理分组
|
|
|
const sortedGroups = groups.sort((a, b) => (a.sort_order || 0) - (b.sort_order || 0))
|
|
|
|
|
|
// 步骤3: 遍历每个分组,获取分组中的元素
|
|
|
for (const group of sortedGroups) {
|
|
|
// 获取分组元素
|
|
|
const elementsResponse = await preApprovalTemplateGroupAPI.getElements(group.id)
|
|
|
|
|
|
// 步骤4: 将元素转换为字段配置
|
|
|
const fields = elements.map(element => {
|
|
|
return {
|
|
|
key: `element_${element.element_id}`,
|
|
|
label: element.element_name,
|
|
|
element_type: element.element_type,
|
|
|
required: false,
|
|
|
visible: true,
|
|
|
element_id: element.element_id
|
|
|
}
|
|
|
})
|
|
|
|
|
|
// 步骤5: 使用分组编码或ID作为配置的key,分组名称作为title
|
|
|
const sectionKey = group.code || `group_${group.id}`
|
|
|
config[sectionKey] = {
|
|
|
title: group.name, // 分组名称作为画布区域的标题
|
|
|
fields: fields, // 分组中的元素作为字段
|
|
|
group_id: group.id, // 保存分组ID
|
|
|
group_code: group.code // 保存分组编码
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
## 数据结构
|
|
|
|
|
|
### 分组数据结构(来自事前流程模版设置)
|
|
|
```javascript
|
|
|
{
|
|
|
id: 1,
|
|
|
name: "上会记录", // 分组名称
|
|
|
code: "GROUP_MJ8EE28T_JV", // 分组编码
|
|
|
description: "描述信息",
|
|
|
sort_order: 0, // 排序顺序
|
|
|
is_active: 1 // 是否启用
|
|
|
}
|
|
|
```
|
|
|
|
|
|
### 画布配置结构(转换后)
|
|
|
```javascript
|
|
|
{
|
|
|
"GROUP_MJ8EE28T_JV": { // 使用分组编码作为key
|
|
|
"title": "上会记录", // 分组名称
|
|
|
"fields": [ // 分组中的元素
|
|
|
{
|
|
|
"key": "element_1",
|
|
|
"label": "项目名称",
|
|
|
"element_type": "text",
|
|
|
"required": false,
|
|
|
"visible": true,
|
|
|
"element_id": 1
|
|
|
},
|
|
|
// ... 更多元素
|
|
|
],
|
|
|
"group_id": 1, // 分组ID
|
|
|
"group_code": "GROUP_MJ8EE28T_JV" // 分组编码
|
|
|
}
|
|
|
// ... 更多分组
|
|
|
}
|
|
|
```
|
|
|
|
|
|
## 关键API接口
|
|
|
|
|
|
### 1. 获取分组列表
|
|
|
- **API**: `GET /budget/pre-approval-template-groups`
|
|
|
- **参数**: `{ is_active: 1, all: true }`
|
|
|
- **返回**: 所有启用的分组列表
|
|
|
|
|
|
### 2. 获取分组元素
|
|
|
- **API**: `GET /budget/pre-approval-template-groups/{groupId}/elements`
|
|
|
- **返回**: 分组中的元素列表(包含元素名称、类型、排序等)
|
|
|
|
|
|
## 数据库表关系
|
|
|
|
|
|
```
|
|
|
budget_pre_approval_template_groups (分组表)
|
|
|
├── id
|
|
|
├── name (分组名称)
|
|
|
├── code (分组编码)
|
|
|
├── sort_order (排序)
|
|
|
└── is_active (是否启用)
|
|
|
|
|
|
budget_pre_approval_template_group_elements (分组元素关联表)
|
|
|
├── group_id (关联分组)
|
|
|
├── element_id (关联元素)
|
|
|
├── sort_order (元素在分组中的排序)
|
|
|
└── is_active (元素是否启用)
|
|
|
|
|
|
budget_template_elements (元素表)
|
|
|
├── id
|
|
|
├── name (元素名称)
|
|
|
├── type (元素类型)
|
|
|
├── category (元素分类)
|
|
|
└── ...
|
|
|
```
|
|
|
|
|
|
## 注意事项
|
|
|
|
|
|
1. **分组必须启用**: 只有 `is_active = 1` 的分组才会被加载到画布中
|
|
|
|
|
|
2. **分组排序**: 分组按照 `sort_order` 字段排序,数值越小越靠前
|
|
|
|
|
|
3. **分组编码**:
|
|
|
- 优先使用分组的 `code` 字段作为画布配置的 key
|
|
|
- 如果 `code` 为空,则使用 `group_{id}` 作为 key
|
|
|
|
|
|
4. **元素来源**: 分组中的元素来自"非直接支付模版元素设置"页面(`/settings/template-element-settings`)
|
|
|
|
|
|
5. **默认配置**: 当分类没有保存的模板配置时,会自动从"事前流程模版设置"获取分组作为默认配置
|
|
|
|
|
|
6. **配置保存**: 画布中的配置可以保存到 `budget_planned_expenditure_templates` 表,保存后下次加载会优先使用保存的配置,而不是从分组获取
|
|
|
|
|
|
## 相关文件
|
|
|
|
|
|
- **画布设置页面**: `czemc-budget-execution-frontend/src/views/settings/CanvasSettings.vue`
|
|
|
- **事前流程模版设置页面**: `czemc-budget-execution-frontend/src/views/settings/PreApprovalTemplateSettings.vue`
|
|
|
- **API定义**: `czemc-budget-execution-frontend/src/utils/api.js` (preApprovalTemplateGroupAPI)
|
|
|
- **后端控制器**: `backend/Modules/Budget/app/Http/Controllers/Api/PreApprovalTemplateGroupController.php`
|
|
|
- **后端模型**: `backend/Modules/Budget/app/Models/PreApprovalTemplateGroup.php`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|