自定义页面
更新自定义页面配置与组件
更新自定义页面配置与组件
鉴权方式
AppKey + Sign 是应用密钥鉴权,由管理员创建,用于以应用管理员身份访问应用数据。
版本
请求地址
Path 参数
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
page_id | string | 是 |
Header 参数
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
HAP-Appkey | string | 是 | HAP应用密钥 |
HAP-Sign | string | 是 | HAP签名 |
Body 参数
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
components | object[] | 是 | 页面组件列表,全量替换。页面采用 48 列栅格(x + w 不得超过 48)。并排在同一 y 的组件必须同高。推荐高度:section 2,filter 3 |
components.componentType | string | 是 | 组件类型 discriminator。支持:chart / section / text / html / view / carousel / button / tab / container / filtersGroup。其它值会返回 430001 参数错误。tab 与 container 为父容器,其子组件通过 parentSectionId(和 tab 子组件的 parentTabId)挂入。 可选值: "chart""section""text""html""view""carousel""button""tab""container""filtersGroup" |
components.name | string | 否 | componentType=section 时为分段标题(必填);componentType=chart 时为统计图显示名(必填)。其它类型请使用 config 内的字段,不要填此字段。 |
components.description | string | 否 | [chart] 可选。顶层组件说明。 |
components.componentId | string | 否 | 仅对 tab / container 有意义——必填,调用方生成的 UUID(如 UUIDv4),供子组件通过 parentSectionId / parentTabId 引用,本次请求内全局唯一。其它 componentType 包括 chart 一律留空:chart 一定走 config 内联新建,不支持挂载已有统计图。 |
components.parentSectionId | string | 否 | 仅挂到 container 容器下的子组件填:该 container 的 componentId。顶层组件 / tab 子组件 / container 自身均留空。parentSectionId 与 parentTabId 最多填一个。 |
components.parentTabId | string | 否 | 仅挂到 tab 容器下的子组件填:目标子标签页的 config.tabs[].tabId(tabId 本次请求内全局唯一)。顶层组件 / container 子组件 / tab 自身均留空。parentSectionId 与 parentTabId 最多填一个。 |
components.position | object | 是 | 组件在 48 列栅格中的位置。x + w 不得超过 48。 |
components.position.x | integer | 是 | 列起始位置(从 0 开始)。 |
components.position.y | integer | 是 | 行起始位置(从 0 开始)。组件按 y 值从小到大纵向排列。 |
components.position.w | integer | 是 | 宽度(列数)。推荐:section / view / carousel / button 通栏 48;chart 12(四分之一)或 24(半宽);text / html 24(并排)。 |
components.position.h | integer | 是 | 高度(行数)。推荐:section 2,button 3 |
components.config | object | 否 | 组件类型专属配置。字段集合按 componentType 决定,每个字段 description 前缀[chart] / [text] / [html] / [view] / [carousel] / [button] / [tab] / [container] / [filtersGroup] 标明适用范围;只填对应类型需要的字段,其它字段留空。componentType=section 时无 config,用顶层 name 传分段标题。tab / container 的 UUID 在顶层 componentId 传入(见 componentId 说明);tab 还必填 config.tabs[]。 |
components.config.title | string | 否 | [view] 可选 组件标题(默认取视图名);[carousel] 可选 主标题字段 ID;[button] 可选 组件标题;[tab] 可选 标签页组件显示名;[container] 可选 卡片容器显示名。 |
components.config.content | string | 否 | [text] 必填。富文本 HTML 片段(支持基本 HTML 标签)。 |
components.config.url | string | 否 | [html] 必填 iframe 外链 URL,必须 http:// 或 https:// 开头;[carousel] 条件必填(action=2 时),跳转链接字段 ID。 |
components.config.worksheetId | string | 否 | [chart] 必填;[view] 必填;[carousel] 必填。工作表 ID 或别名。 |
components.config.viewId | string | 否 | [chart] [view] [carousel] 类型组件必填。视图 ID。 |
components.config.objectId | string | 否 | [chart] 必填;[view] 必填。页面对象 ID,必须由调用方生成 UUID(如 UUIDv4),并与 filtersGroup.filters[].objectControls[].objectId 保持一致;不要使用 chartId 或 viewId。 |
components.config.chartType | string | 否 | [chart] 必填。与 create_chart 支持值一致:columnChart / barChart / lineChart / pieChart / radarChart / funnelChart / dualAxisChart / pivotTable / regionMap / numberChart / symmetricBarChart / scatterChart / wordCloud / gaugeChart / progressChart / rankingChart / worldMap。 |
components.config.dataScope | string | 否 | [chart] 必填。permission=仅可见数据;all=全部数据。 |
components.config.timeFieldId | string | 否 | [chart] 可选。时间筛选字段 ID;不传时默认 ctime。 |
components.config.timeRange | string | 否 | [chart] 可选 时间范围;不传时默认 currentMonth(本月)。取值同 create_chart。 |
components.config.customDynamicRange | object | 否 | [chart] 仅当 timeRange=customDynamicRange 时必填。结构同 create_chart。 |
components.config.customDynamicRange.from | object | 否 | — |
components.config.customDynamicRange.from.type | string | 是 | — |
components.config.customDynamicRange.from.value | integer | 否 | — |
components.config.customDynamicRange.from.unit | string | 否 | — |
components.config.customDynamicRange.to | object | 否 | — |
components.config.customDynamicRange.to.type | string | 是 | — |
components.config.customDynamicRange.to.value | integer | 否 | — |
components.config.customDynamicRange.to.unit | string | 否 | — |
components.config.customRange | object | 否 | [chart] 仅当 timeRange=customRange 时必填。 |
components.config.customRange.startDate | string | 否 | 开始日期,格式 yyyy/MM/dd。 |
components.config.customRange.endDate | string | 否 | 结束日期,格式 yyyy/MM/dd。 |
components.config.dimension | object[] | 否 | [chart] 非 pivotTable 维度字段。第 1 个为 X 轴维度,第 2 个为系列维度。对 regionMap 而言,granularity 控制数据按省/市/区县聚合;地图底图展示范围和聚焦区域由 mapScope+ mapRegionCode 控制。 |
components.config.dimension.field | string | 是 | — |
components.config.dimension.granularity | integer | 否 | 日期:1=日,2=周,3=月,4=季度,5=年;地区:1=省,2=市,3=区/县。这里控制的是数据聚合层级,不等同于地图底图展示范围。 |
components.config.dimension.includeEmpty | boolean | 否 | — |
components.config.rows | object[] | 否 | [chart] 仅 pivotTable 使用。 |
components.config.rows.field | string | 是 | — |
components.config.columns | object[] | 否 | [chart] 仅 pivotTable 使用。 |
components.config.columns.field | string | 是 | — |
components.config.values | object[] | 否 | [chart] 指标列表。聚合方式:COUNT / DISTINCTCOUNT / SUM / MIN / MAX / AVG。 |
components.config.values.field | string | 是 | 字段 ID;计数用 rowid。 |
components.config.values.aggregation | string | 是 | — |
components.config.values.displayName | string | 否 | — |
components.config.rightValues | object[] | 否 | [chart] 仅 dualAxisChart / symmetricBarChart 使用。 |
components.config.rightValues.field | string | 是 | — |
components.config.rightValues.aggregation | string | 是 | — |
components.config.targetValues | object[] | 否 | [chart] 仅 progressChart 使用。 |
components.config.targetValues.field | string | 是 | — |
components.config.targetValues.aggregation | string | 是 | — |
components.config.gaugeMin | string | 否 | [chart] gaugeChart 必填,最小值字符串。 |
components.config.gaugeMax | string | 否 | [chart] gaugeChart 必填,最大值字符串。 |
components.config.mapScope | string | 否 | [chart] 仅 chartType=regionMap 时使用。地图展示范围:country=全国(默认,等同于不传);province=聚焦单个省级区域;city=聚焦单个市级区域。 可选值: "country""province""city" |
components.config.mapRegionCode | string | 否 | [chart] 仅 chartType=regionMap 时使用,需与 mapScope 配合:mapScope=country 时不传或传空字符串;mapScope=province 时必填,传 6 位省级代码且后 4 位为 0000;mapScope=city 时必填,传 6 位市级代码且后 2 位为 00。直辖市及特别行政区即使传在 mapScope=province 下,也按城市级范围处理。 |
components.config.filtersGroupId | string | 否 | [filtersGroup] 可选 筛选器组 ID。新建筛选器组时可传空字符串。 |
components.config.name | string | 否 | [filtersGroup] 可选 筛选器组名称。 |
components.config.enableBtn | boolean | 否 | [filtersGroup] 是否启用筛选按钮。 |
components.config.filters | object[] | 否 | [filtersGroup] 筛选器列表。一个 filtersGroup 组件内可以配置多个筛选。 |
components.config.filters.filterId | string | 是 | 筛选项 ID。更新已有筛选时传已有 ID;新建时可传调用方生成的 UUID。 |
components.config.filters.name | string | 是 | 筛选器字段名称。 |
components.config.filters.global | boolean | 否 | 是否全局搜索/筛选。 |
components.config.filters.dataType | integer | 是 | 筛选字段的控件/数据类型。 |
components.config.filters.filterType | integer | 是 | 筛选方式。 |
components.config.filters.objectControls | object[] | 是 | 该筛选作用的图表或视图组件。 |
components.config.filters.objectControls.objectId | string | 是 | 目标对象 ID,必须使用目标 chart/view 组件 config.objectId 中传入的 UUID;不要使用 chartId 或 viewId。 |
components.config.filters.objectControls.type | integer | 是 | 目标对象类型:1=图表,2=视图。 |
components.config.filters.objectControls.worksheetId | string | 是 | 目标对象所在工作表 ID。 |
components.config.filters.objectControls.controlId | string | 是 | 目标对象中用于筛选的字段/control ID。 |
components.config.filters.advancedSetting | object | 否 | 高级配置,例如 allowscan。 |
components.config.filters.values | string[] | 否 | 多值筛选的默认选中值。 |
components.config.filters.value | string | 否 | 单值筛选的默认值。 |
components.config.filters.minValue | string | 否 | 范围筛选的默认最小值。 |
components.config.filters.maxValue | string | 否 | 范围筛选的默认最大值。 |
components.config.filters.controlId | string | 是 | 当前筛选来源字段/control ID。 |
components.config.appId | string | 否 | [filtersGroup] 应用 ID。 |
components.config.customPageId | string | 否 | [filtersGroup] 自定义页面 ID。 |
components.config.filter | object | 否 | 筛选器对象,用于定义统计图数据查询的过滤条件。 filter 的根节点必须始终为 group,不能直接传 condition。即使只有一个筛选条件,也必须使用 group 包裹,并通过 children 传入 condition。 Filter 结构
注意事项
使用示例示例 1:单个筛选条件也必须使用 group 包裹
示例 2:简单筛选条件查询所有 1 月份入职、姓“张”的职员:
示例 3:多层筛选组查询华北区市场部/销售部,1 月入职且姓“张”的职员: |
components.config.filter.type | string | 否 | — 可选值: "group""condition" |
components.config.filter.logic | string | 否 | — 可选值: "AND""OR" |
components.config.filter.children | object[] | 否 | — |
components.config.filter.field | string | 否 | 必须传入 Field ID。注意:当字段结构来自 Markdown 格式时,如果字段 ID 中包含 "(isTitle)",该标记仅用于表示此字段是标题字段,不属于字段 ID 的一部分。在传参时应移除 "(isTitle)",仅保留真实字段 ID。 |
components.config.filter.operator | string | 否 | 支持的筛选运算符: 比较运算符:
为空运算符:
可选值: "eq""ne""gt""ge""lt""le""in""notin""contains""notcontains""concurrent""belongsto""notbelongsto""startswith""notstartswith""endswith""notendswith""between""notbetween""isempty""isnotempty" |
components.config.filter.value | object | 否 | 筛选值。根据运算符不同,可传字符串、数字或数组。
|
components.config.sorts | object[] | 否 | [chart] 可选 排序配置。 |
components.config.sorts.field | string | 是 | — |
components.config.sorts.isAsc | boolean | 否 | — |
components.config.limit | integer | 否 | [chart] 可选 返回条数上限(rankingChart / wordCloud 推荐)。 |
components.config.image | string | 否 | [carousel] 必填。图片字段 ID(附件字段)。 |
components.config.subTitle | string | 否 | [carousel] 可选 副标题字段 ID。 |
components.config.count | integer | 否 | [carousel]、[button]组件必填,未填写时不能成功创建。[carousel] 表示展示条数,默认 5;[button] 表示Web 端每行按钮数, 默认6。 |
components.config.action | integer | 否 | [carousel] 点击动作:1=打开记录,2=打开链接(需 url),3=预览图片。 |
components.config.openMode | integer | 否 | [carousel] 打开方式:1=当前页面,2=新页面,3=弹窗。action=2 时生效。 |
components.config.explain | string | 否 | [button] 可选 说明文字,显示在按钮组上方。 |
components.config.style | integer | 否 | [button] 按钮风格:1=实心矩形(默认),2=圆角矩形,3=虚线。 |
components.config.width | integer | 否 | [button] 按钮宽度:1=文字自适应(默认),2=平分整行。 |
components.config.mobileCount | integer | 否 | [button] 类型组件必填,未填写时不能成功创建。表示移动端每行按钮数,默认2。 |
components.config.buttons | object[] | 否 | [button] 必填。按钮列表,至少 1 个。仅支持 action=1~4 简单跳转,不支持 5(扫码)/ 6(业务流程)。 |
components.config.buttons.name | string | 是 | 按钮文字,必填。 |
components.config.buttons.action | integer | 是 | 动作:1=新建记录(value=worksheetId),2=打开视图(value=worksheetId,需传 viewId),3=打开自定义页面(value=customPageId),4=打开链接(value=外链 URL)。必填。 |
components.config.buttons.value | string | 是 | 语义随 action:1/2=worksheetId;3=customPageId;4=外链 URL。必填。 |
components.config.buttons.viewId | string | 否 | action=2 时必填。 |
components.config.buttons.openMode | integer | 否 | 1=当前页面(默认),2=新页面。 |
components.config.buttons.color | string | 是 | 按钮颜色,必填且不能为空。必须传十六进制颜色值,如 #2196f3;不要省略或传空字符串。 |
components.config.buttons.icon | string | 否 | 按钮图标 key。 |
components.config.tabs | object[] | 否 | [tab] 必填。子标签页列表,至少 1 项。每项 tabId 由调用方生成 UUID,本次请求内全局唯一;子组件通过顶层 parentTabId 指向具体子标签页。 |
components.config.tabs.tabId | string | 是 | 子标签页 UUID,调用方生成,本次请求内全局唯一。 |
components.config.tabs.name | string | 是 | 子标签页显示名,必填。 |
components.config.showName | boolean | 否 | [tab] 可选;[container] 可选。是否显示标题。 |
components.config.showType | integer | 否 | [tab] 可选;[container] 可选。显示方式:1=透明,2=卡片。 |
components.config.showBorder | boolean | 否 | [tab] 可选;[container] 可选。是否显示组件边框。 |
components.config.heightType | integer | 否 | [tab] 可选;[container] 可选。高度类型:1=自适应,2=固定。 |
响应参数
200保存成功| 名称 | 类型 | 描述 |
|---|---|---|
success | boolean | 是否调用成功 |
error_code | integer | 错误代码 |
error_msg | string | 错误消息 |
data | object | — |
data.page_id | string | 自定义页面 ID |
data.components | object[] | 已保存的页面组件列表 |
data.components.componentId | string | 组件 ID |
curl -X PUT "https://example.com/v3/app/custom-pages/page_id" \ -H "HAP-Appkey: {{HAP-Appkey}}" \ -H "HAP-Sign: {{HAP-Sign}}" \ -H "Content-Type: application/json" \ -d '{ "components": [ { "componentType": "chart", "name": "异星生物数量分布", "description": "展示异星生物数量分布", "position": { "x": 0, "y": 0, "w": 24, "h": 8 }, "config": { "worksheetId": "worksheet_id", "viewId": "view_id", "objectId": "550e8400-e29b-41d4-a716-446655440000", "chartType": "columnChart", "dataScope": "permission" } } ] }'{ "success": true, "data": { "page_id": "page_001", "components": [ { "componentId": "component_001" }, { "componentId": "component_002" } ] }}