You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cz-hjjc-budget/docs/payment-template-element-ty...

252 lines
7.2 KiB

4 months ago
# 付款模板元素类型整理文档
## 概述
本文档整理了付款模板元素设置页面(`/settings/payment-template-element-settings`)中支持的所有元素类型及其使用规则。
## 元素类型type
付款模板元素支持以下4种类型
### 1. 审批流程approval_flow
- **类型值**: `approval_flow`
- **显示标签**: 审批流程
- **标签颜色**: `warning`(橙色)
- **用途**: 关联OA模块的自定义模型用于审批流程管理
- **必填字段**:
- `model_id`: 必须关联一个OA模型ID
- **禁用字段**:
- `field_type`: 不需要字段类型
- `options`: 不需要选项配置
- **使用场景**: 当需要关联事前流程的审批记录时使用
### 2. 会议纪要meeting_minutes
- **类型值**: `meeting_minutes`
- **显示标签**: 会议纪要
- **标签颜色**: `success`(绿色)
- **用途**: 用于关联会议纪要记录
- **必填字段**: 无
- **禁用字段**:
- `model_id`: 不能关联模型
- `field_type`: 不需要字段类型
- `options`: 不需要选项配置
- **使用场景**: 当需要关联会议纪要时使用
### 3. 普通表单元素form_element
- **类型值**: `form_element`
- **显示标签**: 普通表单元素
- **标签颜色**: `info`(蓝色)
- **用途**: 用于创建常规的表单输入字段
- **必填字段**:
- `field_type`: 必须选择字段类型(见下方字段类型说明)
- **禁用字段**:
- `model_id`: 不能关联模型
- `options`: 不需要选项配置
- **使用场景**: 当需要创建文本输入、附件上传等常规表单字段时使用
### 4. 勾选清单checklist
- **类型值**: `checklist`
- **显示标签**: 勾选清单
- **标签颜色**: `primary`(主题色)
- **用途**: 用于创建可多选的勾选清单
- **必填字段**:
- `options`: 必须至少配置一个选项JSON数组格式`[{label, value}]`
- **禁用字段**:
- `model_id`: 不能关联模型
- `field_type`: 不需要字段类型
- **使用场景**: 当需要创建可多选的勾选清单时使用
## 字段类型field_type
**注意**: 字段类型仅当元素类型为 `form_element`(普通表单元素)时使用。
### 1. 单行文本single_line_text
- **类型值**: `single_line_text`
- **显示标签**: 单行文本
- **标签颜色**: `primary`(主题色)
- **用途**: 单行文本输入框
### 2. 多行文本multi_line_text
- **类型值**: `multi_line_text`
- **显示标签**: 多行文本
- **标签颜色**: `success`(绿色)
- **用途**: 多行文本输入框(文本域)
### 3. 附件attachment
- **类型值**: `attachment`
- **显示标签**: 附件
- **标签颜色**: `warning`(橙色)
- **用途**: 文件上传字段
## 元素类型与字段的对应关系
| 元素类型 | 是否需要 model_id | 是否需要 field_type | 是否需要 options |
|---------|------------------|-------------------|-----------------|
| approval_flow | ✅ 必填 | ❌ 不需要 | ❌ 不需要 |
| meeting_minutes | ❌ 不能有 | ❌ 不需要 | ❌ 不需要 |
| form_element | ❌ 不能有 | ✅ 必填 | ❌ 不需要 |
| checklist | ❌ 不能有 | ❌ 不需要 | ✅ 必填至少1个 |
## 代码位置
### 前端代码
- **页面组件**: `czemc-budget-execution-frontend/src/views/settings/PaymentTemplateElementSettings.vue`
- **类型标签映射函数**: `getElementTypeLabel()` (第272-280行)
- **类型标签颜色映射函数**: `getTypeTagType()` (第283-291行)
- **字段类型标签映射函数**: `getFieldTypeLabel()` (第294-301行)
- **字段类型标签颜色映射函数**: `getFieldTypeTagType()` (第304-311行)
### 后端代码
- **控制器**: `backend/Modules/Budget/app/Http/Controllers/Api/PaymentTemplateElementController.php`
- **模型**: `backend/Modules/Budget/app/Models/PaymentTemplateElement.php`
- **数据库表**: `budget_payment_template_elements`
- **迁移文件**:
- `backend/Modules/Budget/database/migrations/2025_12_15_145312_create_payment_template_elements_table.php`
- `backend/Modules/Budget/database/migrations/2025_12_17_144831_add_field_type_to_payment_template_elements_table.php`
- `backend/Modules/Budget/database/migrations/2025_12_22_000001_add_options_to_payment_template_elements_table.php`
## 验证规则
### 前端验证
前端在 `formRules` 中定义了以下验证规则:
1. **元素类型验证**:
- `type`: 必填,必须选择元素类型
2. **勾选清单验证**:
- `options`: 当类型为 `checklist` 时,必须至少添加一个选项,且选项值不能重复
3. **普通表单元素验证**:
- `field_type`: 当类型为 `form_element` 时,必须选择字段类型
4. **审批流程验证**:
- `model_id`: 当类型为 `approval_flow` 时,必须选择关联模型
### 后端验证
后端在 `PaymentTemplateElementController` 中定义了以下验证规则:
1. **类型验证**:
```php
'type' => 'required|in:approval_flow,meeting_minutes,form_element,checklist'
```
2. **字段类型验证**:
```php
'field_type' => 'nullable|in:single_line_text,multi_line_text,attachment'
```
3. **业务规则验证**:
- 审批流程必须提供 `model_id`
- 会议纪要不能有 `model_id`
- 普通表单元素必须提供 `field_type`,且不能有 `model_id`
- 勾选清单必须提供 `options`至少1个且不能有 `model_id``field_type`
## 使用示例
### 创建审批流程元素
```javascript
{
name: "合同审批流程",
type: "approval_flow",
model_id: 123, // OA模型ID
description: "关联合同审批流程",
sort_order: 1,
is_active: true
}
```
### 创建会议纪要元素
```javascript
{
name: "会议纪要",
type: "meeting_minutes",
description: "关联会议纪要",
sort_order: 2,
is_active: true
}
```
### 创建普通表单元素
```javascript
{
name: "备注说明",
type: "form_element",
field_type: "multi_line_text", // 多行文本
description: "备注说明字段",
sort_order: 3,
is_active: true
}
```
### 创建勾选清单元素
```javascript
{
name: "验收清单",
type: "checklist",
options: [
{ label: "材料齐全", value: "材料齐全" },
{ label: "质量合格", value: "质量合格" },
{ label: "手续完备", value: "手续完备" }
],
description: "验收检查清单",
sort_order: 4,
is_active: true
}
```
## 注意事项
1. **类型切换**: 当切换元素类型时,系统会自动清除不相关的字段(如 `model_id`、`field_type`、`options`
2. **选项格式**: 勾选清单的 `options` 必须是 JSON 数组格式,每个选项包含 `label``value` 字段,且 `value` 不能重复
3. **字段类型限制**: 字段类型(`field_type`)仅在元素类型为 `form_element` 时有效
4. **模型关联**: 审批流程类型必须关联一个有效的OA模型`is_sub = 0` 的非子表单模型)
5. **数据存储**:
- `options` 字段以 JSON 格式存储在数据库中
- `is_active` 字段在数据库中为布尔类型,前端使用 1/0 进行转换
## 更新记录
- **2025-01-XX**: 初始文档创建,整理所有元素类型定义和使用规则
- **2025-01-XX**: 补充 `checklist` 类型到前端表单选择器和筛选器中
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago