namespace Admin.NET.Plugin.AiDOP.Entity.S8;
///
/// S8 大屏卡片内容配置。描述"哪个页面的哪个卡片显示什么"。
/// UI 视觉层保持现状,本表仅承载卡片的数据绑定与统计口径配置。
/// 采用"全局基线 + 工厂可覆盖"策略:tenant_id=0 / factory_id=0 表示全局默认。
///
[SugarTable("ado_s8_dashboard_cell_config", "S8 大屏卡片配置")]
[SugarIndex("uk_ado_s8_dashboard_cell_config_tenant_factory_page_cell", nameof(TenantId), OrderByType.Asc, nameof(FactoryId), OrderByType.Asc, nameof(PageCode), OrderByType.Asc, nameof(CellCode), OrderByType.Asc, IsUnique = true)]
[SugarIndex("idx_ado_s8_dashboard_cell_config_page_enabled_sort", nameof(PageCode), OrderByType.Asc, nameof(Enabled), OrderByType.Asc, nameof(SortNo), OrderByType.Asc)]
public class AdoS8DashboardCellConfig
{
[SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = true, ColumnDataType = "bigint")]
public long Id { get; set; }
[SugarColumn(ColumnName = "tenant_id", ColumnDataType = "bigint")]
public long TenantId { get; set; }
[SugarColumn(ColumnName = "factory_id", ColumnDataType = "bigint")]
public long FactoryId { get; set; }
/// 归属页面:OVERVIEW / DELIVERY / PRODUCTION / SUPPLY
[SugarColumn(ColumnName = "page_code", Length = 32)]
public string PageCode { get; set; } = string.Empty;
/// 卡片编码,页面内唯一。与前端视觉结构中的稳定锚点(grid-item i、v-for key)对齐。
[SugarColumn(ColumnName = "cell_code", Length = 64)]
public string CellCode { get; set; } = string.Empty;
/// 卡片标题(覆盖前端默认;留空时前端使用组件内默认标题)
[SugarColumn(ColumnName = "cell_title", Length = 128, IsNullable = true)]
public string? CellTitle { get; set; }
/// 绑定类型:EXCEPTION_TYPE(绑单个异常类型) / AGGREGATE(按域聚合) / CUSTOM(保持现有逻辑)
[SugarColumn(ColumnName = "binding_type", Length = 16)]
public string BindingType { get; set; } = "CUSTOM";
/// binding_type=EXCEPTION_TYPE 时使用,关联 ado_s8_exception_type.type_code
[SugarColumn(ColumnName = "exception_type_code", Length = 64, IsNullable = true)]
public string? ExceptionTypeCode { get; set; }
/// binding_type=AGGREGATE 时使用:DOMAIN_DELIVERY / DOMAIN_PRODUCTION / DOMAIN_SUPPLY / ALL
[SugarColumn(ColumnName = "aggregate_scope", Length = 32, IsNullable = true)]
public string? AggregateScope { get; set; }
/// 统计指标:OPEN_COUNT / FREQUENCY / AVG_DURATION / CLOSE_RATE
[SugarColumn(ColumnName = "stat_metric", Length = 16)]
public string StatMetric { get; set; } = "OPEN_COUNT";
/// 时间窗:TODAY / LAST_24H / LAST_7D / LAST_30D
[SugarColumn(ColumnName = "time_window", Length = 16)]
public string TimeWindow { get; set; } = "LAST_24H";
/// 额外筛选表达式(按部门、订单范围等),留给后续扩展
[SugarColumn(ColumnName = "filter_expression", Length = 1000, IsNullable = true)]
public string? FilterExpression { get; set; }
/// 部门聚合维度:OWNER(责任部门,默认) / OCCUR(发生部门)。仅 binding_type=AGGREGATE 且聚合含部门时生效。
[SugarColumn(ColumnName = "dept_group_by", Length = 8)]
public string DeptGroupBy { get; set; } = "OWNER";
[SugarColumn(ColumnName = "enabled", ColumnDataType = "boolean")]
public bool Enabled { get; set; } = true;
[SugarColumn(ColumnName = "sort_no")]
public int SortNo { get; set; }
// ─── G-09 一期:页面结构配置字段(仅驱动 page-config 前端渲染,不影响查询主链) ───
/// 前端图标 key(对应 @element-plus/icons-vue 组件名,如 ShoppingBag)
[SugarColumn(ColumnName = "icon", Length = 64, IsNullable = true)]
public string? Icon { get; set; }
/// 主布局区域:MODULES / ANALYSIS / SIDEBAR
[SugarColumn(ColumnName = "layout_area", Length = 16)]
public string LayoutArea { get; set; } = "ANALYSIS";
/// 展示形态:STAGE_CARD / CATEGORY_CARD / CATEGORY_COMPACT / DEPT_CLUSTER / CUSTOM
[SugarColumn(ColumnName = "display_mode", Length = 32)]
public string DisplayMode { get; set; } = "CATEGORY_CARD";
/// ANALYSIS 卡是否在 sidebar 以 compact 形式镜像展示。G-09 一期仅入表预留,本期不消费、DTO 不返回。
[SugarColumn(ColumnName = "show_in_sidebar", ColumnDataType = "boolean")]
public bool ShowInSidebar { get; set; } = false;
/// 备注
[SugarColumn(ColumnName = "remark", Length = 500, IsNullable = true)]
public string? Remark { get; set; }
[SugarColumn(ColumnName = "created_at")]
public DateTime CreatedAt { get; set; } = DateTime.Now;
[SugarColumn(ColumnName = "updated_at", IsNullable = true)]
public DateTime? UpdatedAt { get; set; }
}