feat(generator): 优化模板生成逻辑并添加新功能
- 改进 index.tsx 模板,增加智能字段检测和条件性功能生成 - 修复字段注释为空时模板渲染失败的问题 - 添加自动更新 app.config.ts 页面路径的功能 - 新增 ShopArticle相关的实体、Mapper、Service 等代码 - 优化 add.tsx 和 add.config.ts模板,提高用户体验
This commit is contained in:
108
docs/INDEX_TSX_IMPROVEMENTS.md
Normal file
108
docs/INDEX_TSX_IMPROVEMENTS.md
Normal file
@@ -0,0 +1,108 @@
|
||||
# index.tsx 模板改进说明
|
||||
|
||||
## 🔍 发现的问题
|
||||
|
||||
### 1. 硬编码字段名
|
||||
**问题**:原模板假设所有表都有 `name` 和 `description` 字段
|
||||
```typescript
|
||||
// 原来的硬编码方式
|
||||
<View>{item.name}</View>
|
||||
<View>{item.description}</View>
|
||||
```
|
||||
|
||||
### 2. 固定的业务逻辑
|
||||
**问题**:所有表都生成"默认选项"功能,即使表中没有 `isDefault` 字段
|
||||
|
||||
### 3. 不够灵活的显示方式
|
||||
**问题**:没有根据实际表结构动态调整显示内容
|
||||
|
||||
## ✅ 改进内容
|
||||
|
||||
### 1. 智能字段检测
|
||||
```typescript
|
||||
<% var hasIsDefaultField = false; %>
|
||||
<% for(field in table.fields){ %>
|
||||
<% if(field.propertyName == 'isDefault'){ %>
|
||||
<% hasIsDefaultField = true; %>
|
||||
<% } %>
|
||||
<% } %>
|
||||
```
|
||||
|
||||
### 2. 条件性功能生成
|
||||
- **有 `isDefault` 字段**:生成完整的默认选项功能
|
||||
- **无 `isDefault` 字段**:只生成基本的列表和编辑功能
|
||||
|
||||
### 3. 动态字段显示
|
||||
```typescript
|
||||
<% var displayFields = []; %>
|
||||
<% for(field in table.fields){ %>
|
||||
<% if(field.propertyName != 'id' && field.propertyName != 'createTime' && field.propertyName != 'updateTime' && field.propertyName != 'isDefault'){ %>
|
||||
<% displayFields.add(field); %>
|
||||
<% } %>
|
||||
<% } %>
|
||||
```
|
||||
|
||||
自动选择前两个可显示字段作为主要显示内容。
|
||||
|
||||
## 🎯 改进效果
|
||||
|
||||
### 有 `isDefault` 字段的表(如地址、支付方式)
|
||||
- ✅ 生成默认选项设置功能
|
||||
- ✅ 支持点击选择默认项
|
||||
- ✅ 显示默认选项状态图标
|
||||
|
||||
### 无 `isDefault` 字段的表(如商品、分类)
|
||||
- ✅ 只生成基本的列表显示
|
||||
- ✅ 支持编辑和删除操作
|
||||
- ✅ 不生成不必要的默认选项功能
|
||||
|
||||
### 字段显示逻辑
|
||||
- **第一个字段**:作为主标题显示(较大字体)
|
||||
- **第二个字段**:作为副标题显示(较小字体)
|
||||
- **自动过滤**:排除 `id`、`createTime`、`updateTime`、`isDefault` 等系统字段
|
||||
|
||||
## 📋 生成示例
|
||||
|
||||
### 地址表(有 isDefault 字段)
|
||||
```typescript
|
||||
// 会生成完整的默认地址功能
|
||||
const selectItem = async (item: ShopUserAddress) => {
|
||||
// 设置默认地址逻辑
|
||||
}
|
||||
|
||||
// 显示默认选项图标
|
||||
{item.isDefault ? <Checked /> : <CheckNormal />}
|
||||
```
|
||||
|
||||
### 商品表(无 isDefault 字段)
|
||||
```typescript
|
||||
// 只生成基本列表功能,无默认选项相关代码
|
||||
<Cell className={'flex flex-col gap-1'}>
|
||||
<View>{item.name}</View> // 第一个字段
|
||||
<View>{item.description}</View> // 第二个字段
|
||||
</Cell>
|
||||
```
|
||||
|
||||
## 🔧 技术实现
|
||||
|
||||
### Beetl 模板语法
|
||||
- `<% var hasIsDefaultField = false; %>` - 定义变量
|
||||
- `<% displayFields.add(field); %>` - 数组操作
|
||||
- `<% if(hasIsDefaultField){ %>` - 条件判断
|
||||
- `${displayFields[0].propertyName}` - 动态字段访问
|
||||
|
||||
### 字段过滤规则
|
||||
排除以下系统字段:
|
||||
- `id` - 主键
|
||||
- `createTime` - 创建时间
|
||||
- `updateTime` - 更新时间
|
||||
- `isDefault` - 默认标志(单独处理)
|
||||
|
||||
## 🎉 优势
|
||||
|
||||
1. **更加通用**:适用于各种不同结构的表
|
||||
2. **智能适配**:根据表结构自动调整功能
|
||||
3. **减少冗余**:不生成不必要的代码
|
||||
4. **更好维护**:生成的代码更符合实际业务需求
|
||||
|
||||
现在生成的移动端列表页面更加智能和实用了!
|
||||
@@ -62,10 +62,16 @@ private static final String[] TABLE_NAMES = new String[]{
|
||||
# 运行商城模块生成器
|
||||
java com.gxwebsoft.generator.ShopGenerator
|
||||
|
||||
# 运行CMS模块生成器
|
||||
# 运行CMS模块生成器
|
||||
java com.gxwebsoft.generator.CmsGenerator
|
||||
```
|
||||
|
||||
**🎉 新功能:自动更新 app.config.ts**
|
||||
- 生成器现在会自动更新 `app.config.ts` 文件
|
||||
- 自动添加新生成页面的路径配置
|
||||
- 自动备份原文件,避免数据丢失
|
||||
- 避免重复添加已存在的页面路径
|
||||
|
||||
### 3. 检查生成结果
|
||||
生成的文件位于:
|
||||
```
|
||||
|
||||
91
docs/TEMPLATE_FIXES.md
Normal file
91
docs/TEMPLATE_FIXES.md
Normal file
@@ -0,0 +1,91 @@
|
||||
# 模板修复说明
|
||||
|
||||
## 🔧 修复的问题
|
||||
|
||||
### 1. 字段注释为空的问题
|
||||
|
||||
**问题描述**:
|
||||
- 当数据库表的字段没有注释时,模板渲染会失败
|
||||
- 错误信息:`field.comment为空`
|
||||
|
||||
**修复内容**:
|
||||
|
||||
#### add.tsx.btl 模板
|
||||
- **修复前**:`${field.comment!}` - 注释为空时显示空字符串
|
||||
- **修复后**:`${field.comment!'字段'}` - 注释为空时显示默认值
|
||||
|
||||
具体修改:
|
||||
```typescript
|
||||
// 标签显示
|
||||
label="${field.comment!field.propertyName}"
|
||||
|
||||
// 输入框提示
|
||||
placeholder="请输入${field.comment!'字段'}"
|
||||
placeholder="请输入${field.comment!'内容'}"
|
||||
|
||||
// 条件判断
|
||||
<% if(field.propertyType == 'String' && field.comment?? && (field.comment?contains('描述') || field.comment?contains('备注') || field.comment?contains('内容'))){ %>
|
||||
```
|
||||
|
||||
#### 配置文件模板
|
||||
- **index.config.ts.btl**:`'${table.comment!'数据'}管理'`
|
||||
- **add.config.ts.btl**:`'新增${table.comment!'数据'}'`
|
||||
|
||||
### 2. 智能 userId 字段检测
|
||||
|
||||
**问题描述**:
|
||||
- 所有表都生成设置 userId 的代码,即使表中没有 user_id 字段
|
||||
|
||||
**修复内容**:
|
||||
|
||||
#### controller.java.btl 模板
|
||||
添加了字段检测逻辑:
|
||||
```java
|
||||
<% var hasUserIdField = false; %>
|
||||
<% for(field in table.fields){ %>
|
||||
<% if(field.propertyName == 'userId'){ %>
|
||||
<% hasUserIdField = true; %>
|
||||
<% } %>
|
||||
<% } %>
|
||||
<% if(hasUserIdField){ %>
|
||||
// 记录当前登录用户id
|
||||
User loginUser = getLoginUser();
|
||||
if (loginUser != null) {
|
||||
${table.entityPath}.setUserId(loginUser.getUserId());
|
||||
}
|
||||
<% } %>
|
||||
```
|
||||
|
||||
## ✅ 修复效果
|
||||
|
||||
### 1. 空注释处理
|
||||
- **有注释的字段**:正常显示字段注释
|
||||
- **无注释的字段**:显示字段名或默认提示文本
|
||||
- **空表注释**:显示"数据"作为默认值
|
||||
|
||||
### 2. 智能 userId 处理
|
||||
- **有 user_id 字段的表**:生成完整的用户ID设置代码
|
||||
- **无 user_id 字段的表**:不生成用户ID相关代码
|
||||
|
||||
## 🎯 Beetl 模板语法说明
|
||||
|
||||
### 空值处理
|
||||
- `${field.comment!}` - 为空时显示空字符串
|
||||
- `${field.comment!'默认值'}` - 为空时显示默认值
|
||||
- `${field.comment!field.propertyName}` - 为空时显示字段名
|
||||
|
||||
### 条件判断
|
||||
- `field.comment??` - 检查字段是否不为null
|
||||
- `field.comment?contains('文本')` - 检查字段是否包含指定文本
|
||||
|
||||
### 变量定义
|
||||
- `<% var hasUserIdField = false; %>` - 定义布尔变量
|
||||
- `<% if(hasUserIdField){ %>` - 条件判断
|
||||
|
||||
## 🚀 使用建议
|
||||
|
||||
1. **数据库设计**:建议为表和字段添加有意义的注释
|
||||
2. **模板测试**:生成代码前先测试模板在各种数据情况下的表现
|
||||
3. **错误处理**:模板中添加适当的默认值和空值处理
|
||||
|
||||
现在模板更加健壮,能够处理各种边界情况!
|
||||
82
docs/update_app_config.sh
Executable file
82
docs/update_app_config.sh
Executable file
@@ -0,0 +1,82 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 自动更新 app.config.ts 页面路径的脚本
|
||||
|
||||
APP_CONFIG_PATH="/Users/gxwebsoft/VUE/template-10550/src/app.config.ts"
|
||||
SRC_PATH="/Users/gxwebsoft/VUE/template-10550/src"
|
||||
|
||||
echo "=== 自动更新 app.config.ts 页面路径 ==="
|
||||
echo ""
|
||||
|
||||
# 检查 app.config.ts 是否存在
|
||||
if [ ! -f "$APP_CONFIG_PATH" ]; then
|
||||
echo "❌ app.config.ts 文件不存在: $APP_CONFIG_PATH"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ 找到 app.config.ts 文件"
|
||||
|
||||
# 备份原文件
|
||||
cp "$APP_CONFIG_PATH" "$APP_CONFIG_PATH.backup.$(date +%Y%m%d_%H%M%S)"
|
||||
echo "✅ 已备份原文件"
|
||||
|
||||
# 查找所有生成的页面路径配置文件
|
||||
echo ""
|
||||
echo "🔍 查找生成的页面路径配置:"
|
||||
|
||||
# 查找 shop 模块的页面
|
||||
SHOP_PAGES=""
|
||||
if [ -d "$SRC_PATH/shop" ]; then
|
||||
for dir in "$SRC_PATH/shop"/*; do
|
||||
if [ -d "$dir" ] && [ -f "$dir/index.tsx" ] && [ -f "$dir/add.tsx" ]; then
|
||||
page_name=$(basename "$dir")
|
||||
echo " 找到 shop 页面: $page_name"
|
||||
SHOP_PAGES="$SHOP_PAGES '$page_name/index',\n '$page_name/add',\n"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# 查找 cms 模块的页面
|
||||
CMS_PAGES=""
|
||||
if [ -d "$SRC_PATH/cms" ]; then
|
||||
for dir in "$SRC_PATH/cms"/*; do
|
||||
if [ -d "$dir" ] && [ -f "$dir/index.tsx" ] && [ -f "$dir/add.tsx" ]; then
|
||||
page_name=$(basename "$dir")
|
||||
echo " 找到 cms 页面: $page_name"
|
||||
CMS_PAGES="$CMS_PAGES '$page_name/index',\n '$page_name/add',\n"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "📝 需要添加到 app.config.ts 的页面路径:"
|
||||
echo ""
|
||||
|
||||
if [ -n "$SHOP_PAGES" ]; then
|
||||
echo "Shop 模块页面:"
|
||||
echo -e "$SHOP_PAGES"
|
||||
fi
|
||||
|
||||
if [ -n "$CMS_PAGES" ]; then
|
||||
echo "CMS 模块页面:"
|
||||
echo -e "$CMS_PAGES"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "⚠️ 请手动将上述页面路径添加到 app.config.ts 的对应子包中"
|
||||
echo ""
|
||||
echo "示例:"
|
||||
echo "在 shop 子包的 pages 数组中添加:"
|
||||
if [ -n "$SHOP_PAGES" ]; then
|
||||
echo -e "$SHOP_PAGES"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "在 cms 子包的 pages 数组中添加:"
|
||||
if [ -n "$CMS_PAGES" ]; then
|
||||
echo -e "$CMS_PAGES"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=== 完成 ==="
|
||||
echo "备份文件位置: $APP_CONFIG_PATH.backup.*"
|
||||
Reference in New Issue
Block a user