解决MySql布尔型新旧版本兼容问题,采用枚举来表示布尔型的数据表。由正向工程赋值
|
# Cube 协作指令
本指令面向新生命团队(NewLife)开源 Web 快速开发框架 Cube(魔方),帮助 Copilot 在 .NET 项目中正确使用 Cube 进行 Web 管理后台开发。
---
## 1. Cube 定位与边界
### 1.1 技术栈定位
```
NewLife.Core(基础库)
↓
NewLife.XCode(数据中间件)→ xcode.instructions.md
↓
NewLife.Cube(Web 快速开发框架)← 本指令
```
### 1.2 职责边界
| 层级 | 职责 | 指令文件 |
|------|------|---------|
| **NewLife.XCode** | 数据建模、ORM、实体增删改查 | `xcode.instructions.md` |
| **NewLife.Cube** | Web 管理后台、控制器、视图、权限、菜单 | 本指令 |
### 1.3 本指令覆盖范围
**包含**:
- Web 控制器开发与定制
- 列表页、表单页、详情页配置
- 菜单与权限管理
- 魔方区域(Area)管理
**不包含**(由 xcode.instructions.md 负责):
- 数据模型设计(Model.xml)
- 实体类生成
- 数据库 CRUD 底层操作
---
## 2. 快速开始
### 2.1 创建 Cube 项目
```powershell
# 安装模板
dotnet new install NewLife.Templates
# 创建 Web 项目
dotnet new cube -n {系统名}Web
# 添加数据类库引用
dotnet add reference ../Zero.Data/Zero.Data.csproj
```
### 2.2 自动生成控制器
在 Model.xml 中配置 `CubeOutput` 后,执行 `xcode` 会自动生成:
- 区域类(`*Area.cs`)
- 控制器(`*Controller.cs`)
```xml
<Option>
<DisplayName>订单管理</DisplayName>
<CubeOutput>../../OrderWeb/Areas/Order</CubeOutput>
</Option>
```
---
## 3. 控制器开发
### 3.1 控制器基类
| 基类 | 用途 |
|------|------|
| `EntityController<T>` | 标准 CRUD 控制器 |
| `ReadOnlyEntityController<T>` | 只读控制器(日志表等) |
### 3.2 控制器结构
```csharp
[Menu(100, true, Icon = "fa-table")]
[OrderArea]
public class OrderController : EntityController<Order>
{
static OrderController()
{
// 列表字段配置
ListFields.RemoveCreateField().RemoveRemarkField();
// 添加自定义列
//{
// var df = ListFields.AddListField("details", null, "Remark");
// df.DisplayName = "查看明细";
// df.Url = "OrderDetail?orderId={Id}";
//}
}
/// <summary>高级搜索</summary>
protected override IEnumerable<Order> Search(Pager p)
{
var start = p["dtStart"].ToDateTime();
var end = p["dtEnd"].ToDateTime();
var key = p["Q"] + "";
return Order.Search(start, end, key, p);
}
}
```
### 3.3 菜单配置
```csharp
[Menu(100, true, Icon = "fa-table")]
```
| 参数 | 说明 |
|------|------|
| 第一个参数 | 菜单排序(数字越大越靠前) |
| 第二个参数 | 是否可见 |
| `Icon` | Font Awesome 图标 |
---
## 4. 列表页配置
### 4.1 ListFields 配置
```csharp
static OrderController()
{
// 移除字段
ListFields.RemoveField("Id", "CreateUser");
ListFields.RemoveCreateField(); // 移除创建者/创建时间
ListFields.RemoveRemarkField(); // 移除备注
// 添加链接列
{
var df = ListFields.GetField("OrderNo") as ListField;
df.Url = "Order/Detail?id={Id}";
df.Target = "_blank";
}
// 添加操作列
{
var df = ListFields.AddListField("details", null, "Remark");
df.DisplayName = "查看明细";
df.Url = "OrderDetail?orderId={Id}";
df.DataVisible = e => (e as Order).Details > 0;
}
}
```
### 4.2 搜索配置
通过 Model.xml 中的 `ShowIn` 属性控制字段是否出现在搜索区。
---
## 5. 表单页配置
### 5.1 FormFields 配置
```csharp
static OrderController()
{
// 添加表单只读
{
var df = AddFormFields.GetField("OrderNo");
df.ReadOnly = true;
}
}
```
### 5.2 字段分组
通过 Model.xml 中的 `Category` 属性控制字段分组。
---
## 6. 区域(Area)管理
### 6.1 区域类
```csharp
[DisplayName("订单管理")]
public class OrderArea : AreaBase
{
public OrderArea() : base(nameof(OrderArea).TrimEnd("Area")) { }
}
```
### 6.2 目录结构
```
Areas/
└── Order/
├── OrderArea.cs
└── Controllers/
├── OrderController.cs
└── OrderDetailController.cs
```
---
## 7. 权限管理
### 7.1 内置权限
Cube 内置用户、角色、菜单、权限管理,支持:
- 基于角色的访问控制(RBAC)
- 菜单级权限
- 按钮级权限(增删改查导出)
### 7.2 权限检查
```csharp
// 控制器中检查权限
if (!HasPermission("OrderExport"))
{
throw new InvalidOperationException("无导出权限");
}
```
---
## 8. 常用扩展
### 8.1 自定义搜索
```csharp
protected override IEnumerable<Order> Search(Pager p)
{
var status = p["status"].ToInt(-1);
var start = p["dtStart"].ToDateTime();
var end = p["dtEnd"].ToDateTime();
var key = p["Q"] + "";
var where = new WhereExpression();
if (status >= 0) where &= Order._.Status == status;
where &= Order._.CreateTime.Between(start, end);
if (!key.IsNullOrEmpty()) where &= Order._.OrderNo.Contains(key) | Order._.Remark.Contains(key);
return Order.FindAll(where, p);
}
```
### 8.2 导出定制
```csharp
protected override IEnumerable<Order> ExportData(Pager p)
{
p.PageSize = 10000; // 导出数量限制
return Search(p);
}
```
### 8.3 表单保存前处理
```csharp
protected override Int32 OnInsert(Order entity)
{
entity.OrderNo = GenerateOrderNo();
return base.OnInsert(entity);
}
protected override Int32 OnUpdate(Order entity)
{
// 更新前校验
return base.OnUpdate(entity);
}
```
---
## 9. 与 XCode 的协作
1. **数据模型**:在 `xcode.instructions.md` 指导下设计 Model.xml
2. **控制器生成**:配置 `CubeOutput` 后执行 `xcode` 自动生成
3. **定制开发**:在生成的控制器基础上进行业务定制
4. **字段显示**:通过 Model.xml 的 `ShowIn`、`ItemType`、`Category` 控制
---
## 10. Copilot 行为指引
### 10.1 控制器开发时
1. 继承正确的基类(`EntityController` 或 `ReadOnlyEntityController`)
2. 在静态构造函数中配置 `ListFields`
3. 重写 `Search` 方法实现高级搜索
### 10.2 边界意识
- 数据模型和实体操作 → `xcode.instructions.md`
- Web 控制器和界面 → 本指令
- 基础编码规范 → `copilot-instructions.md`
### 10.3 生成代码后
1. 检查控制器是否正确引用实体类
2. 检查区域类是否正确注册
3. 运行项目验证菜单和页面是否正常显示
|