1
0

feat: 增强模板条件渲染表达式支持

使用 simpleeval 库替换原有的简单正则匹配,支持复杂的条件表达式评估。新增 ConditionEvaluator 类处理条件逻辑,支持比较运算、逻辑运算、成员测试、数学计算和内置函数,同时保持向后兼容性。
This commit is contained in:
2026-03-03 17:28:23 +08:00
parent 01a93ce13b
commit 16ca9d77cd
16 changed files with 1437 additions and 31 deletions

View File

@@ -65,22 +65,53 @@ Template system 提供可复用的幻灯片布局和样式定义。模板包含
### Requirement: 系统必须支持条件渲染
系统 SHALL 支持基于变量值的条件渲染,通过 `visible` 字段控制元素是否显示。
系统 SHALL 支持基于变量值的条件渲染,通过 `visible` 字段控制元素是否显示。条件表达式使用 simpleeval 引擎评估,支持复杂的逻辑判断、比较运算、成员测试和数学计算。
#### Scenario: 显示满足条件的元素
- **WHEN** 元素定义了 `visible: "{subtitle != ''}\"`,且用户提供了非空的 subtitle
- **WHEN** 元素定义了 `visible: "{count > 0}"`,且用户提供的 count 大于 0
- **THEN** 系统渲染该元素
#### Scenario: 隐藏不满足条件的元素
- **WHEN** 元素定义了 `visible: "{subtitle != ''}\"`,但用户提供的 subtitle 为空字符串
- **WHEN** 元素定义了 `visible: "{count > 0}"`,但用户提供的 count 等于 0
- **THEN** 系统跳过该元素,不渲染到幻灯片中
#### Scenario: 复杂逻辑条件
- **WHEN** 元素定义了 `visible: "{count > 0 and status == 'active'}"`,且两个条件都满足
- **THEN** 系统渲染该元素
#### Scenario: 成员测试条件
- **WHEN** 元素定义了 `visible: "{status in ['draft', 'review']}"`,且 status 为 "draft"
- **THEN** 系统渲染该元素
#### Scenario: 数学运算条件
- **WHEN** 元素定义了 `visible: "{(price * discount) > 50}"`,且计算结果大于 50
- **THEN** 系统渲染该元素
#### Scenario: 条件表达式语法错误
- **WHEN** visible 字段包含无效的条件表达式
- **THEN** 系统抛出错误,提示条件表达式格式错误
- **WHEN** visible 字段包含无效的条件表达式(如 `{count > }`
- **THEN** 系统抛出错误,提示"条件表达式语法错误",并显示具体的语法问题
#### Scenario: 条件表达式中的变量未定义
- **WHEN** visible 字段引用了未定义的变量(如 `{undefined_var > 0}`
- **THEN** 系统抛出错误,提示"条件表达式中的变量未定义: undefined_var",并列出可用变量
#### Scenario: 条件表达式使用不支持的函数
- **WHEN** visible 字段使用了不在白名单中的函数(如 `{eval(code)}`
- **THEN** 系统抛出错误,提示"条件表达式中使用了不支持的函数: eval"
#### Scenario: 向后兼容的简单表达式
- **WHEN** 元素定义了 `visible: "{subtitle != ''}"`(旧语法格式)
- **THEN** 系统使用新的 simpleeval 引擎正确评估该表达式
### Requirement: 模板文件必须可从指定目录加载