生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
应使用语义化表单结构:用包裹筛选区,分组并配说明,等控件设合法name属性;范围筛选统一用min_price/max_price,JS校验逻辑;内必须嵌套,配合FormData提取数据、form.reset()重置,并确保无障碍支持。

为什么不用 div 堆筛选项
直接用一堆 包 或 ,后续 JS 拿值要写一堆 querySelector 魔术选择器,重置时还得手动清空每个字段。更麻烦的是,屏幕阅读器无法识别“这是价格筛选区”“这是分类多选区”,无障碍直接掉档。语义化不是为了好看,是让结构自带含义,方便提取、重置、读取。
推荐做法:
- 整个筛选区域包在
里——这样 form.reset() 才能真正还原所有字段初始值
- 每个逻辑字段组(如“价格区间”“标签筛选”)用
包裹,并配 说明用途
-
这种写法虽不标准(name 不是 fieldset 的合法属性),但可作为 JS 定位依据;真正起作用的是内部 input 的 name
- 多选标签用
,别用 class 模拟,否则 FormData 拿不到
怎么组织 price_range 这类范围型字段
范围筛选不是两个独立输入框,而是一个语义整体。用户改了“最低价”,系统不该立刻丢弃“最高价”的值,也不该让两个输入框各自提交为 min_price=100 和 max_price=500 却不校验逻辑(比如 min > max)。
实操建议:
- 把两个
input 放进同一个 ,并统一加 data-field="range" 标记便于 JS 统一处理
- 使用
name="min_price" 和 name="max_price" —— 后端接口通常也按这个 key 接收,避免 JS 再做映射
- 不要设
required 在单个输入框上,而是由 JS 在提交前校验:若任一有值,则两个都应有效且 min
- 如果允许“只设上限”或“只设下限”,后端需支持
min_price=null 或忽略该字段,前端别硬塞默认值(如 min_price=0)干扰业务语义
筛选弹窗里
或 ,后续 JS 拿值要写一堆 querySelector 魔术选择器,重置时还得手动清空每个字段。更麻烦的是,屏幕阅读器无法识别“这是价格筛选区”“这是分类多选区”,无障碍直接掉档。语义化不是为了好看,是让结构自带含义,方便提取、重置、读取。
推荐做法:
- 整个筛选区域包在
里——这样form.reset()才能真正还原所有字段初始值 - 每个逻辑字段组(如“价格区间”“标签筛选”)用
包裹,并配说明用途 -
这种写法虽不标准(name不是fieldset的合法属性),但可作为 JS 定位依据;真正起作用的是内部input的name - 多选标签用
,别用 class 模拟,否则 FormData 拿不到
怎么组织 price_range 这类范围型字段
范围筛选不是两个独立输入框,而是一个语义整体。用户改了“最低价”,系统不该立刻丢弃“最高价”的值,也不该让两个输入框各自提交为 min_price=100 和 max_price=500 却不校验逻辑(比如 min > max)。
实操建议:
- 把两个
input放进同一个,并统一加data-field="range"标记便于 JS 统一处理 - 使用
name="min_price"和name="max_price"—— 后端接口通常也按这个 key 接收,避免 JS 再做映射 - 不要设
required在单个输入框上,而是由 JS 在提交前校验:若任一有值,则两个都应有效且min - 如果允许“只设上限”或“只设下限”,后端需支持
min_price=null或忽略该字段,前端别硬塞默认值(如min_price=0)干扰业务语义
筛选弹窗里
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










