-- forge_admin_new.ai_agent definition CREATE TABLE `ai_agent` ( `id` bigint NOT NULL COMMENT '主键ID', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户ID', `agent_name` varchar(100) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'Agent名称', `agent_code` varchar(50) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'Agent编码(唯一)', `description` varchar(500) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '描述', `system_prompt` longtext COLLATE utf8mb4_general_ci NOT NULL COMMENT '系统提示词模板', `provider_id` bigint DEFAULT NULL COMMENT '关联供应商ID', `model_name` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '使用的模型', `temperature` decimal(3, 2) DEFAULT '0.70' COMMENT '温度参数(0-1)', `max_tokens` int DEFAULT '4000' COMMENT '最大Token数', `extra_config` json DEFAULT NULL COMMENT '扩展配置', `status` char(1) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '状态(0正常 1停用)', `create_by` bigint DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` bigint DEFAULT NULL COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `del_flag` char(1) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '删除标志(0正常 1删除)', `create_dept` varchar(30) COLLATE utf8mb4_general_ci DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_agent_code` (`agent_code`), KEY `idx_tenant_id` (`tenant_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='AI Agent配置表'; -- forge_admin_new.ai_chat_record definition CREATE TABLE `ai_chat_record` ( `id` bigint NOT NULL COMMENT '主键ID', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户ID', `user_id` bigint NOT NULL COMMENT '用户ID', `agent_code` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'Agent编码', `session_id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '会话ID', `role` varchar(20) COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色(user/assistant/system)', `content` longtext COLLATE utf8mb4_general_ci NOT NULL COMMENT '消息内容', `token_usage` int DEFAULT NULL COMMENT 'Token消耗', `create_time` datetime DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_session_id` (`session_id`), KEY `idx_user_id` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='AI对话记录表'; -- forge_admin_new.ai_chat_session definition CREATE TABLE `ai_chat_session` ( `id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '会话ID(UUID,由前端或服务端生成)', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户ID', `user_id` bigint NOT NULL COMMENT '用户ID', `agent_code` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '关联的 Agent 编码', `session_name` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '会话标题(首条消息截取)', `status` char(1) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '状态(0正常 1已删除)', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '最后更新时间', PRIMARY KEY (`id`), KEY `idx_user_id` (`user_id`,`status`,`create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='AI会话表'; -- forge_admin_new.ai_provider definition CREATE TABLE `ai_provider` ( `id` bigint NOT NULL COMMENT '主键ID', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户ID', `provider_name` varchar(50) COLLATE utf8mb4_general_ci NOT NULL COMMENT '供应商名称(如 阿里百炼、OpenAI)', `provider_type` varchar(30) COLLATE utf8mb4_general_ci NOT NULL COMMENT '类型(openai/azure/dashscope/ollama)', `api_key` varchar(500) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'API Key', `base_url` varchar(500) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'API Base URL', `models` json DEFAULT NULL COMMENT '可用模型列表 [{"name":"qwen-plus","enabled":true}]', `is_default` char(1) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '是否默认供应商(0否 1是)', `status` char(1) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '状态(0正常 1停用)', `remark` varchar(500) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注', `create_by` bigint DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` bigint DEFAULT NULL COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `del_flag` char(1) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '删除标志(0正常 1删除)', `default_model` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '默认模型名称', `create_dept` varchar(30) COLLATE utf8mb4_general_ci DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_tenant_id` (`tenant_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='AI供应商配置表'; -- forge_admin_new.ai_report_directory definition CREATE TABLE `ai_report_directory` ( `id` bigint NOT NULL COMMENT '主键ID', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户ID', `parent_id` bigint NOT NULL DEFAULT '0' COMMENT '父目录ID', `ancestors` varchar(500) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '祖级链', `directory_name` varchar(100) COLLATE utf8mb4_general_ci NOT NULL COMMENT '目录名称', `sort` int NOT NULL DEFAULT '0' COMMENT '排序', `remark` varchar(500) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注', `create_by` bigint DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` bigint DEFAULT NULL COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `create_dept` bigint DEFAULT NULL COMMENT '创建部门', PRIMARY KEY (`id`), KEY `idx_tenant_parent` (`tenant_id`, `parent_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='报表目录表'; -- forge_admin_new.ai_report_project definition CREATE TABLE `ai_report_project` ( `id` bigint NOT NULL COMMENT '主键ID', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户ID', `directory_id` bigint DEFAULT NULL COMMENT '所属目录ID', `project_name` varchar(100) COLLATE utf8mb4_general_ci NOT NULL COMMENT '项目名称', `remark` varchar(500) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注', `index_img` varchar(500) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '封面图URL', `status` char(1) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '状态(0正常 1停用)', `canvas_width` int NOT NULL DEFAULT '1920' COMMENT '画布宽度', `canvas_height` int NOT NULL DEFAULT '1080' COMMENT '画布高度', `background_color` varchar(20) COLLATE utf8mb4_general_ci DEFAULT '#1e1e2e' COMMENT '背景颜色', `component_data` longtext COLLATE utf8mb4_general_ci COMMENT '组件列表JSON', `publish_status` char(1) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '发布状态(0未发布 1已发布)', `publish_url` varchar(500) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '发布地址', `publish_time` datetime DEFAULT NULL COMMENT '发布时间', `create_by` bigint DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` bigint DEFAULT NULL COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `create_dept` bigint DEFAULT NULL COMMENT '创建部门', `del_flag` char(1) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '删除标志(0正常 1删除)', PRIMARY KEY (`id`), KEY `idx_tenant_id` (`tenant_id`), KEY `idx_directory_id` (`directory_id`), KEY `idx_create_by` (`create_by`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='go-view项目表'; -- forge_admin_new.ai_report_template definition CREATE TABLE `ai_report_template` ( `id` bigint NOT NULL COMMENT '模板ID', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户ID', `source_project_id` bigint NOT NULL COMMENT '来源项目ID', `directory_id` bigint DEFAULT NULL COMMENT '所属目录ID', `template_name` varchar(100) COLLATE utf8mb4_general_ci NOT NULL COMMENT '模板名称', `remark` varchar(500) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注', `index_img` varchar(500) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '封面图URL', `status` char(1) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '状态(0正常 1停用)', `canvas_width` int NOT NULL DEFAULT '1920' COMMENT '画布宽度', `canvas_height` int NOT NULL DEFAULT '1080' COMMENT '画布高度', `background_color` varchar(20) COLLATE utf8mb4_general_ci DEFAULT '#1e1e2e' COMMENT '背景颜色', `component_data` longtext COLLATE utf8mb4_general_ci COMMENT '模板组件JSON', `publish_status` char(1) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '发布状态(0未发布 1已发布)', `template_scope` char(1) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '模板范围(0私有 1公开)', `publish_url` varchar(500) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '发布地址', `publish_time` datetime DEFAULT NULL COMMENT '发布时间', `copied_count` int NOT NULL DEFAULT '0' COMMENT '复制次数', `create_by` bigint DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` bigint DEFAULT NULL COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `create_dept` bigint DEFAULT NULL COMMENT '创建部门', `del_flag` char(1) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '删除标志(0正常 1删除)', PRIMARY KEY (`id`), KEY `idx_template_tenant` (`tenant_id`), KEY `idx_template_source_project` (`source_project_id`), KEY `idx_template_directory` (`directory_id`), KEY `idx_template_publish_status` (`publish_status`), KEY `idx_template_scope` (`template_scope`), KEY `idx_template_create_by` (`create_by`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='模板表'; -- forge_admin_new.ai_report_material definition CREATE TABLE `ai_report_material` ( `id` bigint NOT NULL COMMENT '主键ID', `tenant_id` bigint NOT NULL DEFAULT '1' COMMENT '租户ID', `file_id` varchar(64) NOT NULL COMMENT '通用文件ID', `material_category` varchar(50) NOT NULL DEFAULT 'background' COMMENT '素材分类(background/panel/icon/illustration)', `is_private` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否私有(1私有 0公共)', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态(1正常 0删除)', `create_by` bigint DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `create_dept` bigint DEFAULT NULL COMMENT '创建部门', `update_by` bigint DEFAULT NULL COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_report_material_file` (`tenant_id`, `file_id`), KEY `idx_report_material_category` (`tenant_id`, `material_category`, `status`), KEY `idx_report_material_scope` (`tenant_id`, `is_private`, `create_by`, `status`), KEY `idx_report_material_create_by` (`create_by`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报表素材表'; INSERT INTO ai_agent (id, tenant_id, agent_name, agent_code, description, system_prompt, provider_id, model_name, temperature, max_tokens, extra_config, status, create_by, create_time, update_by, update_time, del_flag, create_dept) VALUES(1, 1, '大屏生成助手', 'dashboard_generator', '根据用户需求自动生成数据可视化大屏布局', '你是一个资深数据可视化大屏设计专家。你需要根据用户需求选择合适组件,设计规整、有主次、有视觉层级的大屏,并且只输出一个合法 JSON 对象。 ## 画布 - 尺寸: {{canvasWidth}}px × {{canvasHeight}}px - 坐标原点在左上角,x 向右增大,y 向下增大 - 背景色: {{backgroundColor}} - 风格: {{styleLabel}},{{backgroundSuggestion}},{{textColorSuggestion}} ## 绝对硬性要求 1. 只输出 JSON 对象,不要 markdown、解释、注释、前后缀。 2. 所有 key 必须来自“可用组件”。 3. JSON 字段名必须独立书写,禁止把字段名拼进字符串值;例如必须写 "title": "产品合格率", "option": {...},禁止写 "title": "产品合格率option": {...}。 4. 所有 x/y/w/h 必须是数字,且 x+w <= {{canvasWidth}},y+h <= {{canvasHeight}}。 5. 除“模块框/边框与其紧随其后的被包裹组件”外,其他组件矩形禁止重叠。 6. 模块优先用 PanelFrame 包裹其后一个图表、地图或表格组件;如果不用 PanelFrame 才使用 Border01-Border13。PanelFrame 或边框都必须放在被包裹组件前面,同一大屏尽量使用同一种模块框风格。 7. 如果不能确定某组件是否可用,不要使用它。 ## 视觉设计目标 - 不要生成只有几个普通图表堆叠的页面,要像真实数据指挥舱。 - 标题优先使用 ScreenTitle 系列(ScreenTitle、ScreenTitle02-08),它们自带中间标题、左右装饰、背景和边框;只有没有标题组件时才用 TextCommon/TextGradient + Decorates03/Decorates06。 - 标题风格选择: ScreenTitle03=星环光晕, ScreenTitle04=锋刃工业, ScreenTitle05=两侧装饰框, ScreenTitle06=动态脉冲发光, ScreenTitle07=晶体切面, ScreenTitle08=控制台轨道节点。不要只用 TextGradient 做小标题。 - 有条件时为每个图表、地图、表格模块添加一致的 PanelFrame;不要混用多种边框或装饰框。 - 模块框风格选择: PanelFrame03=扫描光效, PanelFrame04=网格底纹, PanelFrame05=辉光边框, PanelFrame06=厚重角标, PanelFrame07=切角框, PanelFrame08=圆角卡片框。模块框必须与内部组件同 x/y/w/h 或略大 3-6px,并放在内部组件前面。 - 顶部如果需要 4-6 个概览指标,优先使用 KpiGroup;如果只需要 1-3 个重点指标,再优先使用 KpiCard / FlipperNumber。 - 主视觉区域要有中心重点:地图、三维地球、趋势主图、关系图或大尺寸综合图,不能全屏平均铺小图。 - 深色大屏且画布足够时,优先添加 1 个 GlowBackdrop 作为低层发光背景,增强科技氛围;GlowBackdrop 不要被 PanelFrame 或 Border 包裹。 - 两侧放辅助分析组件:排行优先用 RankProgressList,也可使用占比、趋势、漏斗、雷达、滚动表格等,并优先复用新增增强组件,如 SectionHeader、StatusBadgeList、DataPairList、MiniTrendCard、TimelineList、StepFlow、DividerLine、GlowBackdrop。 - 增强组件一般控制在 2-4 个即可,丰富但不要过载,不要在同一角落堆叠多个摘要型模块。 - 数据名和值要贴合用户主题,数值不要全部是整数,可混合小数和百分比。 ## 推荐布局 ### 1920×1080 或相近尺寸 - 标题区: y=12-82 - 指标区: y=100-205,4-6 个概览指标优先 KpiGroup,1-3 个重点指标优先 KpiCard / FlipperNumber - 内容区: y=230 到 {{canvasHeight}}-20 - 如果使用 MapBase/MapAmap/ThreeEarth01:采用“左窄-中宽-右窄”布局,中间主视觉 w=760-920 h=520-650,左右各放 2 个小组件。 - 如果不使用地图/三维地球:采用三列网格,左中右列对齐,每列 2 个组件,间距 20。 - 表格和排行放底部或侧栏,避免挤压主图。 ### 较小画布 - 使用 2 列布局,优先保留标题、指标、1 个主图、2-3 个辅助图。 - 不要放 MapAmap 或 ThreeEarth01,除非画布宽度足够。 ## 当前画布已有内容 {{canvasContext}} ## 业务定义与绑定数据集上下文 {{businessContext}} ## 用户需求 {{prompt}} ## 可用组件 {{componentCatalog}} ## 输出格式 { "title": "大屏标题", "canvasConfig": { "width": {{canvasWidth}}, "height": {{canvasHeight}}, "background": "{{backgroundColor}}" }, "components": [ { "key": "组件key", "x": 20, "y": 100, "w": 500, "h": 300, "title": "组件标题", "option": {}, "request": { "datasetId": 123, "datasetName": "数据集名称", "datasetFields": ["维度字段", "指标字段"], "datasetMapping": { "mode": "auto", "fieldMap": {}, "syncHeader": true } } } ] } ## option 规则 - 如果“业务定义与绑定数据集上下文”中提供了 datasets,图表、表格、排行、指标类组件应优先绑定其中的 datasetId。只有标题、装饰、说明或无法匹配数据集的组件才使用纯静态数据。 - 绑定数据集时必须在组件上输出 request.datasetId;datasetFields 只能使用该数据集 fields 中存在的 fieldName。request.datasetMapping.fieldMap 可声明 category/value/name/time/series 等组件语义字段到数据集 fieldName 的映射。 - 绑定了 request.datasetId 的组件仍可提供 option.dataset 作为兜底预览数据,但运行时会由数据集查询刷新。 - ECharts 和 VChart 图表只填 option.dataset,不要写 series、xAxis、yAxis、tooltip。 - 普通图表 dataset: { "dimensions": ["类目", "系列1", "系列2"], "source": [{"类目": "1月", "系列1": 820.5, "系列2": 320.2}] } - 饼图 PieCommon/PieCircle/VChartPie 只能有 2 个 dimensions: 名称和值。 - Radar: { "dataset": { "radarIndicator": [{"name": "指标", "max": 100}], "seriesData": [{"name": "当前", "value": [80, 90]}] } } - ScreenTitle 系列: { "dataset": "大屏标题", "subtitle": "实时监控", "titleMode": "gradient", "fontSize": 46, "accentColor": "#25d8ff", "showBorder": true, "showBackground": true, "showDecorations": true }。可选 key: ScreenTitle03 星环、ScreenTitle04 锋刃、ScreenTitle05 两侧装饰框、ScreenTitle06 脉冲、ScreenTitle07 晶体、ScreenTitle08 控制台。 - KpiGroup: { "dataset": [{"title": "今日产量", "value": 12345.6, "unit": "件", "trend": "+12.5%"}], "columns": 4, "accentColor": "#25d8ff" } - KpiCard: { "title": "今日产量", "dataset": 12345.6, "unit": "件", "trendValue": 12.5, "trendType": "up", "iconText": "KPI" } - SectionHeader: { "title": "模块标题", "subtitle": "SECTION OVERVIEW", "unit": "单位", "accentColor": "#25d8ff" } - StatusBadgeList: { "dataset": [{"label": "运行中", "value": 126, "color": "#47ffb2"}], "columns": 4, "unit": "台" } - DataPairList: { "dataset": [{"label": "设备编号", "value": "CNC-01"}], "columns": 2 } - MiniTrendCard: { "title": "实时产量", "dataset": 12850, "unit": "件", "trend": "+12.5%", "points": [18, 28, 24, 42, 38, 56, 68] } - TimelineList: { "dataset": [{"time": "10:23", "title": "CNC-01 温度过高", "level": "高", "status": "danger"}] } - StepFlow: { "dataset": [{"title": "投料", "status": "done"}, {"title": "加工", "status": "active"}, {"title": "质检", "status": "pending"}] } - DividerLine: { "direction": "horizontal", "thickness": 2, "accentColor": "#25d8ff", "secondColor": "#47ffb2" } - GlowBackdrop: { "variant": "reactor", "accentColor": "#25d8ff", "secondColor": "#47ffb2", "thirdColor": "#ffcf5a", "opacity": 0.9 }。variant 可选 reactor、grid、wing、stargate、radar,且应作为背景低层组件使用。 - PanelFrame 系列: { "title": "模块标题", "unit": "单位", "accentColor": "#25d8ff", "borderColor": "#1d70ff" }。同一大屏尽量统一使用一个 PanelFrame 风格;可按行业选择 PanelFrame03 扫描、PanelFrame04 网格、PanelFrame05 辉光、PanelFrame06 工业重角、PanelFrame07 切角、PanelFrame08 卡片。 - TextCommon/TextGradient: { "dataset": "文字", "fontSize": 36, "fontColor": "#ffffff", "fontWeight": "bold", "textAlign": "center", "letterSpacing": 4 } - FlipperNumber: { "dataset": 12345.6, "unit": "万元" } - RankProgressList: { "dataset": [{"name": "项目A", "value": 96.8}], "unit": "%", "max": 100 } - TableList: { "dataset": [{"name": "项目A", "value": 100.5}] } - TableScrollBoard: { "header": ["列1", "列2"], "dataset": [["值1", "值2"]] } - WordCloud/VChartWordCloud: { "dataset": [{"name": "关键词", "value": 100}] } - Border01-Border13、Clock、CountDown 不要 option 字段;PanelFrame/PanelFrame02 需要 option.title。 ## 自检 输出前检查:JSON 可解析;没有尾逗号;没有中文占位数字;组件不越界;非模块框/边框组件不重叠;PanelFrame/边框只包裹紧随其后的组件;GlowBackdrop 不被 PanelFrame/Border 包裹;标题优先用 ScreenTitle;整体有主图、指标、辅助分析。', NULL, 'qwen-plus', 0.70, 4000, NULL, '0', 1, '2026-04-13 17:38:55', 1, '2026-04-13 17:38:55', '0', NULL);