@das-fed/upf-ui 6.4.0-dev.312 → 6.4.0-dev.313

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/front-end/i18n/front-end-page/dasui_en-US.js +1 -1
  2. package/front-end/i18n/front-end-page/dasui_zh-CN.js +1 -1
  3. package/front-end/i18n/front-end-page/dasui_zh-MO.js +1 -1
  4. package/package.json +7 -7
  5. package/packages/business-components/ai-panel/{index-BdLFU3HT.js → index-C1XseEkL.js} +1 -1
  6. package/packages/business-components/ai-panel/index-C1XseEkL.js.gz +0 -0
  7. package/packages/business-components/ai-panel/{index-Cc1_Wpca.js → index-_XzaXcle.js} +1136 -1154
  8. package/packages/business-components/ai-panel/index-_XzaXcle.js.gz +0 -0
  9. package/packages/business-components/ai-panel/index.js +1 -1
  10. package/packages/business-components/ai-panel/src/dasAI/hooks/audio.d.ts +1 -1
  11. package/packages/business-components/app-container/index.js +56 -56
  12. package/packages/business-components/app-container/index.js.gz +0 -0
  13. package/packages/business-components/area-phone-select/index.d.ts +30 -30
  14. package/packages/business-components/area-phone-select/index.js +87 -87
  15. package/packages/business-components/area-phone-select/index.js.gz +0 -0
  16. package/packages/business-components/area-phone-select/src/area-popover/index.vue.d.ts +4 -4
  17. package/packages/business-components/change-enterprises/index.js +20 -20
  18. package/packages/business-components/change-enterprises/index.js.gz +0 -0
  19. package/packages/business-components/change-pwd/index.js +15 -15
  20. package/packages/business-components/change-pwd/index.js.gz +0 -0
  21. package/packages/business-components/change-pwd/src/hooks/use-changePwd.d.ts +14 -14
  22. package/packages/business-components/currency-page/index.js +39 -39
  23. package/packages/business-components/currency-page/index.js.gz +0 -0
  24. package/packages/business-components/device-panel/index.js +46 -46
  25. package/packages/business-components/device-panel/index.js.gz +0 -0
  26. package/packages/business-components/device-panel/style.css +1 -1
  27. package/packages/business-components/device-panel/style.css.gz +0 -0
  28. package/packages/business-components/export-button/index.js +92 -92
  29. package/packages/business-components/export-button/index.js.gz +0 -0
  30. package/packages/business-components/import-button/index.js +171 -171
  31. package/packages/business-components/import-button/index.js.gz +0 -0
  32. package/packages/business-components/layout-breadcrumb/index.js +42 -42
  33. package/packages/business-components/layout-breadcrumb/index.js.gz +0 -0
  34. package/packages/business-components/model-table-dialog/index.d.ts +4 -4
  35. package/packages/business-components/model-table-dialog/index.js +233 -233
  36. package/packages/business-components/model-table-dialog/index.js.gz +0 -0
  37. package/packages/business-components/payment/index.js +44 -44
  38. package/packages/business-components/payment/index.js.gz +0 -0
  39. package/packages/business-components/process-form/index.js +939 -939
  40. package/packages/business-components/process-form/index.js.gz +0 -0
  41. package/packages/business-components/process-form/src/hooks/useForm.d.ts +14 -14
  42. package/packages/business-components/process-log/index.js +331 -331
  43. package/packages/business-components/process-log/index.js.gz +0 -0
  44. package/packages/business-components/process-log/style.css +1 -1
  45. package/packages/business-components/process-log/style.css.gz +0 -0
  46. package/packages/business-components/process-search-form/hooks/useSearchOptions.d.ts +4 -4
  47. package/packages/business-components/process-table/index.d.ts +14 -14
  48. package/packages/business-components/upload-file/index.js +43 -43
  49. package/packages/business-components/upload-file/index.js.gz +0 -0
  50. package/packages/business-components/upload-file/style.css +1 -1
  51. package/packages/business-components/urgent-panel/index.js +340 -340
  52. package/packages/business-components/urgent-panel/index.js.gz +0 -0
  53. package/packages/business-components/video-dialog/index.js +17 -17
  54. package/packages/business-components/video-dialog/index.js.gz +0 -0
  55. package/packages/business-components/video-dialog/style.css +1 -1
  56. package/packages/business-components/video-dialog/style.css.gz +0 -0
  57. package/packages/components/alert/index.d.ts +4 -4
  58. package/packages/components/alert/index.js +5 -5
  59. package/packages/components/alert/index.js.gz +0 -0
  60. package/packages/components/audio-video/index.js +141 -141
  61. package/packages/components/audio-video/index.js.gz +0 -0
  62. package/packages/components/autocomplete/index.d.ts +6 -6
  63. package/packages/components/autocomplete/index.js +162 -162
  64. package/packages/components/autocomplete/index.js.gz +0 -0
  65. package/packages/components/autocomplete/style.css +1 -1
  66. package/packages/components/autocomplete/style.css.gz +0 -0
  67. package/packages/components/breadcrumb/index.js +37 -37
  68. package/packages/components/breadcrumb/index.js.gz +0 -0
  69. package/packages/components/button/index.js +223 -223
  70. package/packages/components/button/index.js.gz +0 -0
  71. package/packages/components/calendar/index.js +164 -164
  72. package/packages/components/calendar/index.js.gz +0 -0
  73. package/packages/components/cascader/index.d.ts +8 -8
  74. package/packages/components/cascader/index.js +89 -89
  75. package/packages/components/cascader/index.js.gz +0 -0
  76. package/packages/components/cascader/style.css +1 -1
  77. package/packages/components/cascader/style.css.gz +0 -0
  78. package/packages/components/checkbox/index.d.ts +12 -12
  79. package/packages/components/checkbox/index.js +180 -180
  80. package/packages/components/checkbox/index.js.gz +0 -0
  81. package/packages/components/checkbox/style.css +1 -1
  82. package/packages/components/checkbox/style.css.gz +0 -0
  83. package/packages/components/collapse-panel/index.js +12 -12
  84. package/packages/components/collapse-panel/index.js.gz +0 -0
  85. package/packages/components/collaspe/index.d.ts +4 -4
  86. package/packages/components/collaspe/index.js +22 -22
  87. package/packages/components/collaspe/index.js.gz +0 -0
  88. package/packages/components/custom-search-item/index.d.ts +4 -4
  89. package/packages/components/custom-search-item/index.js +36 -36
  90. package/packages/components/custom-search-item/index.js.gz +0 -0
  91. package/packages/components/date-picker/index.js +658 -658
  92. package/packages/components/date-picker/index.js.gz +0 -0
  93. package/packages/components/date-picker/style.css +1 -1
  94. package/packages/components/date-picker/style.css.gz +0 -0
  95. package/packages/components/dimple-layout/index.js +31 -73
  96. package/packages/components/dimple-layout/index.js.gz +0 -0
  97. package/packages/components/dropdown/index.js +33 -33
  98. package/packages/components/dropdown/index.js.gz +0 -0
  99. package/packages/components/edit-table/index.d.ts +4 -4
  100. package/packages/components/edit-table/index.js +190 -190
  101. package/packages/components/edit-table/index.js.gz +0 -0
  102. package/packages/components/empty/index.js +29 -29
  103. package/packages/components/empty/index.js.gz +0 -0
  104. package/packages/components/error-overlay-model/index.js +31 -31
  105. package/packages/components/error-overlay-model/index.js.gz +0 -0
  106. package/packages/components/form/index.d.ts +14 -14
  107. package/packages/components/form/index.js +23 -23
  108. package/packages/components/form/index.js.gz +0 -0
  109. package/packages/components/form-item/index.js +771 -771
  110. package/packages/components/form-item/index.js.gz +0 -0
  111. package/packages/components/form-item/style.css +1 -1
  112. package/packages/components/form-item/style.css.gz +0 -0
  113. package/packages/components/image-upload/index.js +90 -90
  114. package/packages/components/image-upload/index.js.gz +0 -0
  115. package/packages/components/image-viewer/index.js +418 -418
  116. package/packages/components/image-viewer/index.js.gz +0 -0
  117. package/packages/components/infinite-scroll/index.d.ts +1 -3
  118. package/packages/components/infinite-scroll/index.js +509 -509
  119. package/packages/components/infinite-scroll/index.js.gz +0 -0
  120. package/packages/components/infinite-scroll/src/index.vue.d.ts +1 -3
  121. package/packages/components/input/index.js +544 -544
  122. package/packages/components/input/index.js.gz +0 -0
  123. package/packages/components/input/src/index.vue.d.ts +2 -2
  124. package/packages/components/input/style.css +1 -1
  125. package/packages/components/input/style.css.gz +0 -0
  126. package/packages/components/input-dialog-select/index.js +82 -82
  127. package/packages/components/input-dialog-select/index.js.gz +0 -0
  128. package/packages/components/input-number/index.js +103 -103
  129. package/packages/components/input-number/index.js.gz +0 -0
  130. package/packages/components/input-number/style.css +1 -1
  131. package/packages/components/input-number/style.css.gz +0 -0
  132. package/packages/components/live-player/index.d.ts +4 -4
  133. package/packages/components/loading/index.js +1 -1
  134. package/packages/components/loading/index.js.gz +0 -0
  135. package/packages/components/menu-aside/index.js +600 -600
  136. package/packages/components/menu-aside/index.js.gz +0 -0
  137. package/packages/components/menu-header/index.js +17 -17
  138. package/packages/components/menu-header/index.js.gz +0 -0
  139. package/packages/components/pagination/index.js +91 -91
  140. package/packages/components/pagination/index.js.gz +0 -0
  141. package/packages/components/pagination/style.css +1 -1
  142. package/packages/components/pagination/style.css.gz +0 -0
  143. package/packages/components/popover/index.d.ts +4 -4
  144. package/packages/components/popover/index.js +33 -33
  145. package/packages/components/popover/index.js.gz +0 -0
  146. package/packages/components/popup-mask/index.js +13 -13
  147. package/packages/components/popup-mask/index.js.gz +0 -0
  148. package/packages/components/progress/index.js +93 -93
  149. package/packages/components/progress/index.js.gz +0 -0
  150. package/packages/components/progress/style.css +1 -1
  151. package/packages/components/progress/style.css.gz +0 -0
  152. package/packages/components/radio/index.d.ts +10 -10
  153. package/packages/components/radio/index.js +175 -175
  154. package/packages/components/radio/index.js.gz +0 -0
  155. package/packages/components/rich-editor/index.js +234 -234
  156. package/packages/components/rich-editor/index.js.gz +0 -0
  157. package/packages/components/scrollbar/index.js +2 -2
  158. package/packages/components/scrollbar/index.js.gz +0 -0
  159. package/packages/components/search/index.js +68 -68
  160. package/packages/components/search/index.js.gz +0 -0
  161. package/packages/components/search-form/index.js +933 -933
  162. package/packages/components/search-form/index.js.gz +0 -0
  163. package/packages/components/search-form/skills/DasSearchForm/345/215/207/347/272/247/346/214/207/345/215/227.md +111 -113
  164. package/packages/components/search-form/skills/das-search-form-toolbar-migration/SKILL.md +40 -31
  165. package/packages/components/search-form/skills/das-search-form-toolbar-migration//350/277/201/347/247/273/350/246/201/347/202/271/344/270/216/345/270/270/350/247/201/351/227/256/351/242/230.md +64 -29
  166. package/packages/components/search-form/style.css +1 -1
  167. package/packages/components/search-form/style.css.gz +0 -0
  168. package/packages/components/select/index.js +225 -225
  169. package/packages/components/select/index.js.gz +0 -0
  170. package/packages/components/select-input/index.js +78 -78
  171. package/packages/components/select-input/index.js.gz +0 -0
  172. package/packages/components/select-list/index.js +430 -430
  173. package/packages/components/select-list/index.js.gz +0 -0
  174. package/packages/components/select-list/style.css +1 -1
  175. package/packages/components/select-list/style.css.gz +0 -0
  176. package/packages/components/special-range-picker-month/index.js +140 -140
  177. package/packages/components/special-range-picker-month/index.js.gz +0 -0
  178. package/packages/components/special-range-picker-month/style.css +1 -1
  179. package/packages/components/special-range-picker-month/style.css.gz +0 -0
  180. package/packages/components/special-range-picker-year/index.js +169 -169
  181. package/packages/components/special-range-picker-year/index.js.gz +0 -0
  182. package/packages/components/special-range-picker-year/style.css +1 -1
  183. package/packages/components/special-range-picker-year/style.css.gz +0 -0
  184. package/packages/components/spin/index.js +37 -37
  185. package/packages/components/spin/index.js.gz +0 -0
  186. package/packages/components/split-panel/index.d.ts +8 -8
  187. package/packages/components/split-panel/index.js +27 -27
  188. package/packages/components/split-panel/index.js.gz +0 -0
  189. package/packages/components/switch/style.css +1 -1
  190. package/packages/components/switch/style.css.gz +0 -0
  191. package/packages/components/table/index.d.ts +103 -103
  192. package/packages/components/table/index.js +1869 -1869
  193. package/packages/components/table/index.js.gz +0 -0
  194. package/packages/components/table/src/Table.vue.d.ts +9 -9
  195. package/packages/components/tabs/index.js +101 -101
  196. package/packages/components/tabs/index.js.gz +0 -0
  197. package/packages/components/time-line/index.js +35 -35
  198. package/packages/components/time-line/index.js.gz +0 -0
  199. package/packages/components/tooltip/index.d.ts +6 -6
  200. package/packages/components/tooltip/index.js +62 -62
  201. package/packages/components/tooltip/index.js.gz +0 -0
  202. package/packages/components/tooltip/style.css +1 -1
  203. package/packages/components/tooltip/style.css.gz +0 -0
  204. package/packages/components/tree/index.js +426 -426
  205. package/packages/components/tree/index.js.gz +0 -0
  206. package/packages/components/tree-select/index.js +220 -220
  207. package/packages/components/tree-select/index.js.gz +0 -0
  208. package/packages/components/tree-select/src/App.vue.d.ts +12 -12
  209. package/packages/components/tree-select/src/hooks/use-tree-select.d.ts +12 -12
  210. package/packages/components/tree-table/index.d.ts +2 -2
  211. package/packages/components/tree-table/index.js +181 -181
  212. package/packages/components/tree-table/index.js.gz +0 -0
  213. package/packages/components/tree-v2/index.js +1308 -1308
  214. package/packages/components/tree-v2/index.js.gz +0 -0
  215. package/packages/components/tree-v2/src/App.vue.d.ts +141 -143
  216. package/packages/components/tree-v2/style.css +1 -1
  217. package/packages/components/tree-v2/style.css.gz +0 -0
  218. package/packages/components/upload/index.js +98 -98
  219. package/packages/components/upload/index.js.gz +0 -0
  220. package/packages/components/virtual-tree/index.js +62 -62
  221. package/packages/components/virtual-tree/index.js.gz +0 -0
  222. package/packages/components/virtual-tree/src/App.vue.d.ts +140 -140
  223. package/release-meta.json +4 -4
  224. package/packages/business-components/ai-panel/index-BdLFU3HT.js.gz +0 -0
  225. package/packages/business-components/ai-panel/index-Cc1_Wpca.js.gz +0 -0
@@ -1,141 +1,139 @@
1
1
  # DasSearchForm 升级指南
2
2
 
3
- 本文以当前最新 `DasSearchForm` 实现为准,说明从旧版表单迁移到工具栏布局、接入园区/楼栋通用筛选,以及保证业务请求时序正确的完整方式。它不是某个业务页面的复制模板;示例中的 `options`、列表接口和业务字段必须替换为目标页面自己的实现。
3
+ 本文随 `@das-fed/upf-ui` 发布,供 AI 根据业务页面路径和页面目标完成 DasSearchForm 迁移。业务方不需要重复描述组件内部实现;AI 必须检查运行项目实际安装的包及页面请求链路。
4
4
 
5
- ## 1. 这次改动解决了什么
5
+ ## 业务最短提问
6
6
 
7
- 新版 toolbar 不只是换布局,核心变化是把多园区空间筛选抽离成公共能力,弥补之前的项目切换:
8
-
9
- 1. 业务原本接口的请求参数保持不变。页面需要按空间过滤时才配置空间控件;不需要空间过滤时不配置,组件不会请求园区数据,也不会生成空间条件。
10
- 2. 公共请求层会把 `park(园区)`、`building(园区下空间)` 提升到 URL query;后端统一从 query 读取,POST/GET 等请求保持同一约定。
11
- 3. 园区变化时先清空旧楼栋和普通筛选状态,加载新园区对应空间数据后再提交查询;楼栋实际变化后提交一次最新查询。
12
- 6. `spaceChange` 只用于通知空间状态变化,不应在其中再次请求业务列表;业务查询统一使用 `@confirm`。
13
-
14
- ## 2. 迁移前后
15
-
16
- ### 旧版
17
-
18
- ```vue
19
- <DasSearchForm ref="searchFormRef" :options="options" @confirm="searchData" />
7
+ ```text
8
+ 请按当前项目实际安装的 @das-fed/upf-ui search-form skills,升级
9
+ <相对项目根目录的页面路径> 中的 DasSearchForm。保留页面现有业务筛选和请求行为,
10
+ 按页面设计决定是否使用园区/楼栋筛选;空间参数由组件/公共请求层处理,业务 handler 和 payload
11
+ 不处理 park/building。检查首次查询、日期、重置、分页时序,完成必要修改和验证,
12
+ 并报告改动及未验证项。
20
13
  ```
21
14
 
22
- 旧版默认是 `legacy`,字段可能按历史配置自动触发查询。迁移前应盘点字段回调、日期/重复规则、弹窗提交、分页和导出的所有请求路径。
23
-
24
- ### toolbar 版
15
+ 示例:
25
16
 
26
- ```vue
27
- <DasSearchForm
28
- ref="searchFormRef"
29
- layout-mode="toolbar"
30
- :options="options"
31
- :space-config="{
32
- visible: true,
33
- showPark: true,
34
- showBuilding: true,
35
- defaultPark: true,
36
- parkMultiple: true,
37
- buildingMultiple: false,
38
- }"
39
- @confirm="searchData"
40
- @reset="resetAuxiliary"
41
- @space-change="handleSpaceChange"
42
- @space-error="handleSpaceError"
43
- />
17
+ ```text
18
+ 请按当前项目实际安装的 @das-fed/upf-ui search-form skills,升级
19
+ src/views/myMeeting/pages/home/hooks/use-search/Search.vue 中的 DasSearchForm。保留页面现有
20
+ 业务筛选和请求行为,按页面设计决定是否使用园区/楼栋筛选;空间参数由组件/公共请求层处理,
21
+ 业务 handler 和 payload 不处理 park/building。检查首次查询、日期、重置、分页时序,完成必要修改
22
+ 和验证,并报告改动及未验证项。
44
23
  ```
45
24
 
46
- toolbar 中普通字段变化只更新字段并执行字段回调,不自动提交列表查询;点击查询、调用实例 `confirm()`,以及空间初始化/园区联动完成后的内部确认会触发 `confirm`。字段回调中不要保留会造成重复列表请求的逻辑。
47
-
48
- ## 3. Props 与空间配置
49
-
50
- 以下是 toolbar 相关公共 Props:
51
-
52
- | Prop | 默认值 | 说明 |
53
- | --- | --- | --- |
54
- | `layoutMode` | `legacy` | 传 `toolbar` 启用新版;不传不改变旧页面。 |
55
- | `options` | `[]` | 普通筛选字段配置,可为 `null`。为空时不渲染普通筛选区域及查询/重置按钮,但空间控件仍可独立显示。 |
56
- | `spaceConfig` | `{}` | 控制园区/楼栋显示、选择模式、默认值和数据源。 |
57
- | `spaceValue` | 空空间值 | 受控空间状态,结构为 `{ parkIds: [], buildingIds: [] }`;推荐使用 `v-model:space-value` 接收组件变更。 |
58
- | `searchOrder` | `last` | toolbar 普通字段的排列策略,不改变请求参数。 |
59
-
60
- ### `spaceConfig`
61
-
62
- | 字段 | 默认值 | 行为 |
63
- | --- | --- | --- |
64
- | `visible` | `false` | 空间能力总开关。关闭时不显示内置控件、不加载默认园区数据,也不输出 `park/building`。 |
65
- | `showPark` | 跟随 `visible` | 是否显示园区下拉;关闭时 `confirm` 不输出 `park`。 |
66
- | `showBuilding` | 跟随 `visible` | 是否显示楼栋/空间树;关闭时 `confirm` 不输出 `building`。 |
67
- | `defaultPark` | `true` | 园区列表加载后且外部没有有效园区值时,是否自动选中第一项。关闭时不补默认园区,但仍会完成空间初始化并提交一次不带默认 `park` 的首次查询。 |
68
- | `parkMultiple` | `true` | 园区是否多选。多选时 `confirm.park` 为 ID 数组;单选时为单个 ID 或空字符串。 |
69
- | `buildingMultiple` | `false` | 楼栋/空间是否多选。`confirm.building` 始终是 ID 数组。 |
70
- | `size` | `small` | 同时控制园区和楼栋控件尺寸。 |
71
- | `load` | 默认数据源 | 自定义 `(signal) => Promise<{ parks, buildings }>`,提供后替代默认空间请求;应遵守 `AbortSignal`。 |
25
+ 若截图/需求已明确空间控件行为,可只追加一句,例如“页面仅展示单选园区,不展示楼栋”。如果页面现状和设计均无法判断是否需要空间过滤,AI 只追问这个关键问题,不擅自开启空间筛选。
72
26
 
73
- ### 配置边界
27
+ ## AI 执行约定
74
28
 
75
- - 只有 `visible=true` 且至少一个空间控件启用时,组件才需要完成空间初始化并建立首次查询。
76
- - `visible=true, showPark=false, showBuilding=true` 时,默认楼栋树缺少当前园区上下文;需要业务通过 `load` 返回完整可用树,不能期待组件自动选择全部园区。
77
- - 仅显示园区时仍会加载园区列表;不显示楼栋时不会请求楼栋详情或空间树。
78
- - 没有任何空间控件时,组件不初始化园区数据,不影响普通业务查询的首次加载。
29
+ 1. 从启动项目 `package.json` 所在目录定位 `node_modules/@das-fed/upf-ui/packages/components/search-form/skills/`,先读取本指南、`das-search-form-toolbar-migration/SKILL.md` 和 `迁移要点与常见问题.md`。不要默认从 monorepo 根或另一个 checkout 读取依赖资料。
30
+ 2. 核对该项目 manifest 声明版本、锁文件解析版本和实际安装包目录/文件。只有运行项目实际解析到的包可证明其使用版本;三者不一致时明确报告,不得只凭截图或 lockfile 推断运行时能力。
31
+ 3. 若已安装包缺少所需 API/行为,说明版本阻塞并停止使用该 API;不得臆造 prop、复制其它 checkout 的源码到业务目录或静默升级依赖。未经明确要求,不修改 UPF 版本、锁文件或发布配置。
32
+ 4. 阅读目标 Search.vue、父级搜索状态、表格/分页查询、API 模块和页面设计,盘点普通字段、默认值、权限条件、日期/周期转换、异步回调、初始请求及所有列表查询入口。根据页面需求判定空间控件是否应启用。
33
+ 5. 尽量仅修改当前页面查询链路,保留原业务筛选语义。按影响执行定向类型检查/测试/构建。要求 Chrome 时,用外部 Chrome 检查目标页面和 Network;不能运行时明确说明,不得以单测代替浏览器验证。
79
34
 
80
- ## 4. confirm、spaceChange 与请求时序
35
+ ## 新旧布局
81
36
 
82
- ### `confirm(formValues, selectedSpace)`
37
+ `layoutMode` 支持 `legacy` 和 `toolbar`,默认 `legacy`;不设置时旧页面保持旧模式。只有页面明确采用新版工具栏时才设置 `layout-mode="toolbar"`。
83
38
 
84
- `confirm` 是业务列表查询的唯一推荐入口:
85
-
86
- - `formValues` 是当前提交快照,包含普通字段和当前可见空间字段。
87
- - 园区控件显示时字段名为 `park`;多选为数组,单选为标量,无选择时分别为 `[]` 或 `''`。
88
- - 楼栋控件显示时字段名为 `building`,值为楼栋/楼层/空间 ID 数组。
89
- - 控件隐藏时对应字段被省略,不是 `undefined` 或空数组。
90
- - `selectedSpace` 是内部空间状态快照,结构为 `parkIds/buildingIds`,主要用于受控同步和调试;业务请求优先读取第一个参数。
91
-
92
- 组件保证以下时序:
93
-
94
- 1. 空间初始化未完成时,查询按钮和 `confirm()` 都不会提交业务查询。
95
- 2. 初始化完成后只提交一次首次查询;`defaultPark` 只决定是否补选第一项,不决定是否跳过首次查询。
96
- 3. 园区切换会先发布新园区并清空楼栋,再加载新园区空间数据,最后用最新空间快照确认。
97
- 4. 楼栋选择实际改变后确认一次;同一个值被控件重复回写时不会再次确认。
98
- 5. 选择已加载节点不会额外请求业务列表以外的空间详情;展开未加载节点可能触发合法的楼栋子节点懒加载。
39
+ ```vue
40
+ <das-search-form layout-mode="toolbar" :options="options" @confirm="searchData" />
41
+ ```
99
42
 
100
- ### `spaceChange`
43
+ Toolbar 普通字段变化本身不自动查询。按钮查询、实例 `confirm()`、重置后的内部确认及空间初始化/选择联动会触发 `confirm`。迁移时要检查旧字段回调、父级首次查询和表格挂载顺序,避免重复或漏查。
101
44
 
102
- `spaceChange` 在空间状态实际变化时触发,参数是复制后的 `{ parkIds, buildingIds }`。它适合:
45
+ ## 公共参数合同
103
46
 
104
- - 同步父组件的 `spaceValue`;
105
- - 更新页面标题、权限或其它依赖空间的 UI 状态;
47
+ - `@confirm` 第一个参数 `formValues` 是普通筛选快照,不含空间条件。第二个参数 `selectedSpace` 是可选 UI 状态 `{ parkIds, buildingIds }`,用于受控展示等场景;通常业务无需消费它。
48
+ - `park`、`building` 是后端从 URL query 读取的通用空间条件,不是业务 DTO 字段。业务 Search.vue、搜索状态、handler、分页状态、请求 payload 不定义、映射或兼容 `park`、`building`、`parkIds`、`buildingIds`。
49
+ - 当前页面空间控件可见且初始化完成时,search-form 提供该页面的最新空间值;公共 `createService` 在发出 GET/POST 前把它们加入 query,数组用逗号序列化,并从 JSON body 删除同名键。
50
+ - 业务照常使用现有 `createService`。不在业务层拼 URL/query,不把空间值复制到 body。显式 query 中同名参数优先于自动公共空间值,但业务不应依此实现空间处理。
51
+ - 不配置空间控件时组件不请求园区数据、不主动注入空间条件,也不从其它页面/Tab 继承旧值。当前 createService 仍会把历史业务 JSON body 中已有的 `park/building` 移到 query;迁移后的业务因此必须删除这些字段,才能满足“空间条件不参与”的契约。不要为不需要园区过滤的页面强制启用空间筛选。
52
+ - 控件隐藏时对应空间键不注入;控件可见但未选择时保留空值语义(数组序列化为空字符串),与键缺失不同。
53
+ - `spaceValue` 内部 UI 状态可使用 `parkIds/buildingIds`,这不代表业务接口可以使用这些字段。
106
54
 
107
- 不要在 `spaceChange` 中直接调用业务列表接口,也不要再手动调用 `confirm`。空间选择完成后的业务查询由组件统一触发 `confirm`。
55
+ 正确的业务 handler 只映射业务字段:
108
56
 
57
+ ```ts
58
+ function searchData(values: Record<string, any>) {
59
+ requestList({ params: { pageIndex: pageIndex.value, pageSize: pageSize.value }, data: mapBusinessFields(values) })
60
+ }
61
+ ```
109
62
 
110
- ## 5. reset 与实例方法
63
+ `requestList` 应沿用页面既有 `createService` API。不要读取第二个参数并将空间字段合入 `data` 或 `params`。
111
64
 
112
- `DasSearchForm` 对外转发以下实例方法:
65
+ ## Props 与空间配置
113
66
 
114
- | 方法 | 用途 |
115
- | --- | --- |
116
- | `confirm()` | 等待字段异步回调完成后提交当前查询快照。空间未初始化完成时不会提交。 |
117
- | `resetSearch()` | 恢复 `options` 的初始值,触发一次 `reset`,随后提交一次确认;默认保留园区/楼栋。 |
118
- | `closeSearch(target)` | 清理指定普通筛选字段并触发 `clearSearch`;不修改空间状态。 |
119
- | `treeSelectResetLazyLoad(key)` | 重置指定普通树选择字段的懒加载状态。 |
120
- | `getCollapseStatus()` | 读取 toolbar 展开/收起状态。 |
67
+ | Prop | 行为 |
68
+ | ------------- | -------------------------------------------------------------------------------------- |
69
+ | `layoutMode` | `legacy` / `toolbar`,默认 `legacy`。 |
70
+ | `options` | 普通筛选项,允许 `null`;空数组时普通筛选区及查询/重置按钮隐藏,空间控件仍可单独显示。 |
71
+ | `spaceConfig` | 默认 `{}`;只有实际需要空间条件时设置 `visible: true`。 |
72
+ | `spaceValue` | 可选受控 UI 值 `{ parkIds: [], buildingIds: [] }`,不是业务请求参数。 |
73
+ | `searchOrder` | `last` 默认将搜索输入类字段置后;`original` 保留原顺序。 |
121
74
 
75
+ `spaceConfig`:
122
76
 
123
- ## 6. 典型边界场景
77
+ | 字段 | 默认/说明 |
78
+ | ------------------ | -------------------------------------------------------------------------------------------------------- |
79
+ | `visible` | 默认 false。空间控件及数据加载总开关。 |
80
+ | `showPark` | 默认显示;关闭时不显示园区控件、不注入 `park`。 |
81
+ | `showBuilding` | 默认显示;关闭时不显示楼栋/空间控件、不注入 `building`。 |
82
+ | `defaultPark` | 默认 true;只决定是否自动选第一园区,不取消初始化和首次确认。false 时可见 `park` 是空值。 |
83
+ | `parkMultiple` | 默认 true;false 为单选园区。 |
84
+ | `buildingMultiple` | 默认 false;控制楼栋/空间单选或多选。 |
85
+ | `size` | `small`、`middle`、`large`,默认 `small`。 |
86
+ | `load` | 自定义 `(signal) => Promise<{ parks, buildings }>`,完全替代默认空间数据加载,须返回完整数据并处理取消。 |
124
87
 
125
- | 场景 | 预期行为 |
126
- | --- | --- |
127
- | 无空间控件、无默认值 | 不请求园区数据;普通表单按业务自己的查询时机提交。 |
128
- | 仅园区控件、`defaultPark=true` | 加载园区列表,自动选首项,初始化完成后查询一次,query 带 `park`。 |
129
- | 仅园区控件、`defaultPark=false` | 加载园区列表但不选首项,初始化完成后查询一次,query 不带有效 `park`。 |
130
- | 园区和楼栋控件、默认值开启 | 首园区确定、楼栋数据加载完成后才首次查询;不会先发空 `park` 请求。 |
131
- | 园区和楼栋控件、默认值关闭 | 不补园区;仍完成初始化并首次查询一次,后续用户选择园区/楼栋再查询。 |
132
- | 切换园区 | 清空旧楼栋和普通筛选,加载新空间后查询一次,query 使用新 `park`。 |
133
- | 选择楼栋 | query 同时带稳定的 `park` 和最新 `building`;重复回写不重复请求。 |
134
- | 未配置园区/楼栋但业务接口可用 | 不产生空间字段;后端按通用接口逻辑处理,不强行关联园区。 |
88
+ ```vue
89
+ <!-- 仅按园区过滤,不展示楼栋 -->
90
+ <das-search-form
91
+ layout-mode="toolbar"
92
+ :options="options"
93
+ :space-config="{ visible: true, showPark: true, showBuilding: false, parkMultiple: false }"
94
+ @confirm="searchData"
95
+ />
135
96
 
136
- ## 7. 其他说明
97
+ <!-- 按园区和楼栋/空间过滤 -->
98
+ <das-search-form
99
+ layout-mode="toolbar"
100
+ :options="options"
101
+ :space-config="{ visible: true, showPark: true, showBuilding: true, defaultPark: true }"
102
+ @confirm="searchData"
103
+ />
137
104
 
138
- - 未配置 `layout-mode` 的旧页面行为不变。
139
- - `park/building` 只在对应控件显示且有配置时出现.
140
- - Network 中业务接口的 `park/building` 在 query中包含这两个字段。
105
+ <!-- 不需要空间过滤 -->
106
+ <das-search-form layout-mode="toolbar" :options="options" @confirm="searchData" />
107
+ ```
141
108
 
109
+ 若 `showPark=false, showBuilding=true`,默认数据源没有园区上下文,须由自定义 `load` 提供完整楼栋树。
110
+
111
+ ## 查询时序与事件
112
+
113
+ - 启用空间后,首次业务确认等待园区列表/自定义数据加载;启用默认园区时先确定选择。显示楼栋时等待楼栋初始化流程结束后再确认;楼栋加载错误通过 `spaceError` 报告,当前实现可能以空楼栋值继续首次确认,需结合目标已安装版本和业务要求验证。
114
+ - `defaultPark: false` 仍完成空间初始化并首次确认一次;它只关闭首项默认选择。
115
+ - 园区变化由组件清空旧楼栋和普通筛选,加载新空间后确认一次;楼栋实际值变化后确认一次。重复写回相同值不应重复查询。
116
+ - `spaceChange` 只用于 `{ parkIds, buildingIds }` UI 状态同步/界面联动,不能在此请求业务列表或手动调用 `confirm`。
117
+ - `spaceError` 是空间加载错误诊断。不能把空间初始化失败当作成功的空值状态而盲发首次业务查询。楼栋加载错误的具体确认行为需以实际安装版本为准。
118
+ - `resetSearch()` 重置普通字段,触发 `reset` 并内部确认一次,默认保留空间值。reset handler 和表格 watcher 不应再各发一遍。
119
+ - 表格可能晚于 Search.vue 异步挂载,应能立即消费已经提交的搜索状态/ready 状态;不要额外保留无条件 `onMounted` 列表查询。
120
+ - 日期/周期字段回调若自己触发业务请求,要与 toolbar confirm 协调,保证每次用户动作只有预期的一条列表查询路径。
121
+ - 公共空间 query 对当前可见页面生效。缓存 Tab 隐藏/返回时要验证来源切换,不得把另一页面的空间值带入请求。
122
+
123
+ ## 暴露方法
124
+
125
+ | 方法 | 用途 |
126
+ | ------------------------------ | ------------------------------------------------ |
127
+ | `confirm()` | 提交普通筛选快照,等待异步字段和空间初始化门禁。 |
128
+ | `resetSearch()` | 重置普通筛选并确认,保留空间值。 |
129
+ | `closeSearch(target)` | 清理指定普通筛选字段并触发 `clearSearch`。 |
130
+ | `treeSelectResetLazyLoad(key)` | 重置普通树筛选项的懒加载。 |
131
+ | `getCollapseStatus()` | 读取工具栏展开状态。 |
132
+
133
+ ## 页面验收
134
+
135
+ - 确认是否启用 toolbar 与空间筛选,并以页面 UI/业务需求为依据。
136
+ - 检查首次进入、筛选、日期/周期、重置、分页、Tab 首次进入及缓存返回的请求次数和 initiator。
137
+ - 若启用空间,确认园区/楼栋变化各只触发预期请求,query 稳定使用最新可见值。
138
+ - Network 中空间值只在 query;JSON body 只有业务字段。隐藏空间控件或无空间配置,且业务 body 已移除历史空间字段时,不应出现空间键。
139
+ - 报告运行的检查、Chrome 是否完成及未验证项。
@@ -5,13 +5,33 @@ description: 将业务页面的 DasSearchForm 迁移到 toolbar 布局,并接
5
5
 
6
6
  # DasSearchForm Toolbar 迁移 Skill
7
7
 
8
+ ## 业务最短提问
9
+
10
+ 业务通常只需提供目标页面路径及空间控件期望,AI 应自行检查当前启动项目安装的版本、随包指南、页面链路和请求实现:
11
+
12
+ ```text
13
+ 按当前项目实际安装的 @das-fed/upf-ui search-form skills,升级 <页面路径> 中的 DasSearchForm。
14
+ 保留页面现有业务筛选和请求行为,按页面设计决定是否使用园区/楼栋筛选;空间参数由组件/公共请求层处理,
15
+ 业务 handler 和 payload 不处理 park/building。检查首次查询、日期、重置、分页时序,完成必要修改和验证,
16
+ 并报告改动及未验证项。
17
+ ```
18
+
19
+ 业务只需补充截图/明确行为(例如“只展示单选园区,不展示楼栋”)。若空间过滤需求无法从页面/设计确定,先追问,不得猜测。
20
+
21
+ ## 版本和资料核对
22
+
23
+ 1. 从启动项目的 `package.json` 所在目录读取 `node_modules/@das-fed/upf-ui/packages/components/search-form/skills/` 下的主指南、本 Skill 和常见问题。不要误读 monorepo 根或另一个 checkout 的包。
24
+ 2. 分别核对 `package.json` 声明、lockfile 解析和实际安装目录/文件。仅实际运行项目解析到的安装包能证明其能力;版本不一致时明确说明,不凭 lockfile 或截图推断。
25
+ 3. 已安装版本不含所需 API 时,报告版本阻塞并停止该 API 迁移;不得臆造 prop、从其它源码副本拷贝实现或擅自升级依赖。未经要求不改版本和 lockfile。
26
+ 4. 文档与目标已安装包的公开类型/导出/实现不符时,以安装包为准并报告冲突。
27
+
8
28
  ## 先理解公共契约
9
29
 
10
30
  本 Skill 的核心不是把 `legacy` 改成 `toolbar`,而是把空间筛选从业务请求参数中抽离:
11
31
 
12
32
  - 业务 JSON payload 不定义 `park`、`building`;需要空间过滤时才配置空间控件。
13
- - Toolbar 内部状态为 `parkIds`、`buildingIds`;`confirm` 对外映射为 `park`、`building`。
14
- - `createService` 在发送前把这两个字段放进 query,并从 JSON body 删除;后端统一从 query 读取。
33
+ - Toolbar 内部空间 UI 状态为 `parkIds`、`buildingIds`;`confirm` 第一参数只包含普通筛选快照,第二参数(如有)是 UI 空间状态,不是业务请求 DTO。
34
+ - `createService` 从当前可见 search-form 来源获取空间值,在发送前放进 query,并从 JSON body 删除;后端统一从 query 读取。
15
35
  - `spaceChange` 只通知空间状态变化;业务列表请求只从 `@confirm` 触发。
16
36
  - 空间初始化、园区切换和楼栋变化都必须保证 query 使用稳定的最新空间值,不能通过业务页面 watcher 另行补请求。
17
37
 
@@ -29,23 +49,23 @@ description: 将业务页面的 DasSearchForm 迁移到 toolbar 布局,并接
29
49
  1. 读取目标页面和真实 API,盘点普通字段、异步字段回调、分页、日期/重复规则、弹窗提交和所有列表请求路径。
30
50
  2. 确认页面是否需要空间筛选。无空间筛选时不要配置 `spaceConfig.visible`,也不要为通用接口强行补 `park/building`。
31
51
  3. 若需要空间筛选,逐项确认 `visible`、`showPark`、`showBuilding`、`defaultPark`、`parkMultiple`、`buildingMultiple` 和是否自定义 `load`。
32
- 4. 显式设置 `layout-mode="toolbar"`,优先保留原 `options`、字段 key/value、业务 handler 和页面辅助状态。
33
- 5. 在 `@confirm` 中读取快照;不要在 `spaceChange`、字段 `change` 回调或 `@reset` 中重复请求列表。
34
- 6. 使用 `createService` 发送请求,不在业务 API 中手动拼 `park/building` query,也不保留旧 `parkIds/buildingIds` 兼容字段。
35
- 7. 验证首次进入、默认值开关、园区切换、楼栋选择、重置、分页和快速重复操作的请求次数与参数。
52
+ 4. 仅在页面实际采用新版布局时设置 `layout-mode="toolbar"`;保留原 `options`、字段 key/value、业务 handler 和页面辅助状态。
53
+ 5. `@confirm` 只处理普通字段;不要在业务层处理空间字段,也不要在 `spaceChange`、字段 `change` 回调或 `@reset` 中重复请求。
54
+ 6. 使用 `createService` 发送请求;不在业务 API 手动拼 `park/building` query,不在业务 DTO 保留 `park/building/parkIds/buildingIds`。
55
+ 7. 盘点父级首次查询、日期回调、表格挂载、reset 和分页;验证首次进入、默认值、园区/楼栋、重置和 Tab 返回的请求次数与参数。
36
56
 
37
57
  ## 空间配置决策
38
58
 
39
- | 配置 | 默认 | 关键含义 |
40
- | --- | --- | --- |
41
- | `visible` | `false` | 总开关;关闭时不加载默认园区数据。 |
42
- | `showPark` | 跟随 `visible` | 显示园区并决定是否输出 `park`。 |
43
- | `showBuilding` | 跟随 `visible` | 显示空间树并决定是否输出 `building`。 |
44
- | `defaultPark` | `true` | 是否自动选中首园区;关闭不等于跳过首次查询。 |
45
- | `parkMultiple` | `true` | 园区多选模式。 |
46
- | `buildingMultiple` | `false` | 楼栋/空间多选模式。 |
47
- | `size` | `small` | 空间控件尺寸。 |
48
- | `load` | 默认数据源 | 返回 `{ parks, buildings }` 的自定义数据适配器。 |
59
+ | 配置 | 默认 | 关键含义 |
60
+ | ------------------ | -------------- | ------------------------------------------------ |
61
+ | `visible` | `false` | 总开关;关闭时不加载默认园区数据。 |
62
+ | `showPark` | 跟随 `visible` | 显示园区并决定是否输出 `park`。 |
63
+ | `showBuilding` | 跟随 `visible` | 显示空间树并决定是否输出 `building`。 |
64
+ | `defaultPark` | `true` | 是否自动选中首园区;关闭不等于跳过首次查询。 |
65
+ | `parkMultiple` | `true` | 园区多选模式。 |
66
+ | `buildingMultiple` | `false` | 楼栋/空间多选模式。 |
67
+ | `size` | `small` | 空间控件尺寸。 |
68
+ | `load` | 默认数据源 | 返回 `{ parks, buildings }` 的自定义数据适配器。 |
49
69
 
50
70
  重要边界:
51
71
 
@@ -57,10 +77,10 @@ description: 将业务页面的 DasSearchForm 迁移到 toolbar 布局,并接
57
77
 
58
78
  ## 事件与方法
59
79
 
60
- - `@confirm="searchData"`:唯一推荐的业务查询入口,参数为 `(formValues, selectedSpace)`。
80
+ - `@confirm="searchData"`:toolbar 业务查询入口;第一参数是普通筛选快照,第二参数(若有)是 UI 空间快照,不是 API DTO。
61
81
  - `@reset="resetAuxiliary"`:清理业务页面在组件外维护的辅助状态;组件随后自动确认一次。
62
82
  - `@space-change="handleSpaceChange"`:接收 `{ parkIds, buildingIds }` 状态快照,只做同步或 UI 联动,不发列表请求。
63
- - `@space-error="handleSpaceError"`:空间数据加载失败诊断入口;失败时组件不会拿空空间条件抢先查询。
83
+ - `@space-error="handleSpaceError"`:空间加载错误诊断入口。园区列表初始化失败会阻止首次确认;楼栋树加载错误当前会报告错误并可能继续用空 building 确认,须按已安装版本验证。
64
84
  - `v-model:space-value`:需要受控空间状态时使用,值结构为 `{ parkIds, buildingIds }`。
65
85
  - `confirm()`:等待字段异步回调和空间门禁后提交查询。
66
86
  - `resetSearch()`:恢复普通字段、触发 reset 并确认,默认保留空间值。
@@ -89,25 +109,14 @@ description: 将业务页面的 DasSearchForm 迁移到 toolbar 布局,并接
89
109
  />
90
110
  ```
91
111
 
92
- ```ts
93
- function searchData(values: Record<string, any>) {
94
- const data = { ...mapBusinessFields(values) }
95
- if (Object.prototype.hasOwnProperty.call(values, 'park')) data.park = values.park
96
- if (Object.prototype.hasOwnProperty.call(values, 'building')) data.building = values.building
97
-
98
- requestList({ params: { project: projectId }, data })
99
- }
100
- ```
101
-
102
- `park` 单选是标量、多选是数组;`building` 是 ID 数组。不要在这里把字段改回 `parkIds/buildingIds`,也不要手动同时放入 query 和 body。
112
+ 业务 handler 只映射普通筛选字段,沿用既有 `createService` API;不要从 `values` 读取空间字段,不要把第二参数并入 payload/query。空间 UI 值由组件和公共请求层处理。
103
113
 
104
114
  ## 验收清单
105
115
 
106
- - 首次空间初始化只提交一次业务查询,且不会先发空 `park` 的请求。
116
+ - 首次空间初始化只提交一次业务查询,且不会在空间初始化完成前发送请求;控件可见但无选择时对应 query 值为空。
107
117
  - 园区切换后旧楼栋被清空;新空间数据完成后 query 使用新 `park`。
108
118
  - 楼栋选择后 query 同时包含最新 `park` 和 `building`,相同值重复回写不重复请求。
109
119
  - `park/building` 在 query,JSON body 不包含它们;未配置空间控件的业务不出现这些字段。
110
120
  - reset、字段变化、分页和业务回调不会各自重复请求。
111
121
  - `options=null/[]` 时普通过滤区域和按钮隐藏,但空间控件仍可独立工作。
112
122
  - 运行定向测试、受影响包类型检查和真实页面 Chrome 验证;未验证项必须在结论中说明。
113
-
@@ -1,47 +1,82 @@
1
1
  # DasSearchForm Toolbar 迁移要点与常见问题
2
2
 
3
- ## 参数边界
3
+ ## 一句话理解
4
4
 
5
- `park`、`building` 是跨业务的通用 query 条件,不是业务 payload 字段。只有页面配置并展示对应空间控件时,`confirm` 才会输出对应字段;未配置时组件不请求园区数据,也不生成空字段。
5
+ 业务只负责普通筛选与业务请求;页面是否配置并展示园区/楼栋控件决定空间过滤是否启用;空间值由 search-form 和公共 `createService` 请求层写入 URL query,业务 `confirm`、handler、payload 不处理空间字段。
6
6
 
7
- 业务使用 `createService` 发送请求即可:公共请求层会把数组参数按逗号放入 query,并从 JSON body 删除 `park/building`。后端无论 POST 还是 GET 都从 query 读取。不要在业务层自行拼接认证头、URL 或重复拆装空间参数。
7
+ ## 业务只给页面路径时,AI 应做什么
8
8
 
9
- ## 最容易误解的行为
9
+ 1. 从启动应用 `package.json` 所在目录读取当前安装包随附的 search-form skills,并核对 manifest、lockfile 及实际安装包版本。
10
+ 2. 读取目标 Search.vue、父级搜索状态、列表/分页组件和 API,梳理首次加载、`@confirm`、watch、日期回调、reset、分页和 Tab 缓存请求路径。
11
+ 3. 根据页面 UI/需求判定是否要空间过滤。行为不明确时先追问,不擅自添加园区控件。
12
+ 4. 保留普通筛选和业务映射,消除旧首次请求与 toolbar 自动确认、日期回调与 confirm 等重复/遗漏请求。
13
+ 5. 按影响验证并说明证据;要求 Chrome 时需实际查看页面及 Network,不可用时明确写出。
10
14
 
11
- ### `defaultPark=false` 是否意味着没有首次请求?
15
+ 业务方最短提示词见主指南“业务最短提问”。一般只需提供页面路径和必要的 UI 期望,不必复述公共参数实现规则。
12
16
 
13
- 不是。它只关闭“自动选择园区列表第一项”,不关闭空间初始化,也不关闭首次业务查询。组件仍会完成初始化并提交一次 `confirm`,此时没有有效默认园区,业务请求不应带有效 `park`。
17
+ ## 空间行为速查
14
18
 
15
- ### 为什么不能在 `spaceChange` 中请求列表?
19
+ | 页面需求 | 配置与行为 |
20
+ | --------------------- | --------------------------------------------------------------------------------------- |
21
+ | 不按园区/楼栋过滤 | 不启用空间控件;不加载园区、不创建空间 query。 |
22
+ | 只按园区过滤 | `visible: true, showPark: true, showBuilding: false`;园区初始化稳定后才首次确认。 |
23
+ | 按园区和楼栋/空间过滤 | `visible: true, showPark: true, showBuilding: true`;等待园区和所需空间数据就绪后确认。 |
24
+ | 显示楼栋但不显示园区 | 用自定义 `load` 返回完整且有关联信息的楼栋树;默认数据源没有园区上下文。 |
25
+ | 不自动选择首园区 | `defaultPark: false`;仍会初始化和首次确认,可见 park query 是空值语义。 |
16
26
 
17
- `spaceChange` 发生在内部空间状态发布时,适合做受控同步和 UI 联动;园区切换还需要等待楼栋数据加载,楼栋选择也可能发生重复回写。若业务在这里请求,会与组件自己的 `confirm` 竞争,产生空条件请求、重复请求或页面闪烁。列表请求统一放在 `@confirm`。
27
+ 控件隐藏时组件不注入对应条件。控件可见但未选择时,当前实现保留空值语义,数组经请求层序列化为空字符串;这不同于字段不存在。无空间控件页面不继承其它页面/Tab 的空间值。注意 createService 还会兼容地把调用方旧 JSON body 里的 park/building 移到 query;无空间过滤的业务需移除 body 中遗留字段,不能只看 UI 是否有控件。
18
28
 
19
- ### 楼栋选择为什么现在会查询?
29
+ ## 正确的业务请求方式
20
30
 
21
- 楼栋是业务过滤条件。选择值实际变化后,toolbar 会用最新 `park/building` 快照确认一次;同一值重复回写会被组件忽略。展开未加载节点触发的是空间子节点懒加载,不等同于业务列表查询。
31
+ handler 只构造业务字段并沿用项目现有 `createService`:
22
32
 
23
- ### 为什么首次请求不应该先发一次空 `park`?
33
+ ```ts
34
+ function searchData(values: Record<string, any>) {
35
+ const data = mapBusinessFields(values)
36
+ requestList({ params: { pageIndex: pageIndex.value, pageSize: pageSize.value }, data })
37
+ }
38
+ ```
24
39
 
25
- 园区是全局通用条件,业务接口可能依赖它。toolbar 对空间初始化增加了门禁:园区列表、默认值和必要的楼栋数据完成后才允许首次 `confirm`,避免先展示错误结果再被第二次响应覆盖。
40
+ 不要读取 confirm 的第二个空间 UI 参数,也不要将 park/building 合入 data 或 params。公共请求层会对 GET/POST 注入当前可见页面的空间 query、将数组逗号序列化,并从 JSON body 删除空间字段。
26
41
 
27
- ## 快速排查
42
+ ## 常见问题
28
43
 
29
- 1. 看 `spaceConfig.visible/showPark/showBuilding` 是否与页面实际显示一致。
30
- 2. 看 `defaultPark` 是否被显式关闭,以及业务是否接受首次无 `park` 查询。
31
- 3. 看业务是否在 `spaceChange`、字段 change 回调、watcher 和 `@confirm` 中重复请求。
32
- 4. 看 Network:`park/building` 应在 query,request payload 不应包含它们。
33
- 5. 看是否误用了旧 `parkIds/buildingIds`。它们只属于组件内部 `spaceValue`,不是对外业务参数。
34
- 6. `showPark=false` 但楼栋为空时,检查自定义 `load` 是否提供了完整楼栋树和园区归属。
44
+ ### `defaultPark=false` 是否不再有首次查询?
35
45
 
36
- ## 预期请求次数
46
+ 不是。它只关闭自动选第一项;空间控件仍会完成初始化,并首次确认一次。可见园区控件未选择时对应 query 为空值。不要为了跳过默认选择而在业务层重新控制首次请求。
37
47
 
38
- | 操作 | 预期业务列表请求 |
39
- | --- | ---: |
40
- | 无空间控件首次进入 | 按业务原有逻辑 |
41
- | 空间控件首次初始化 | 1 |
42
- | 园区切换 | 1,等待新空间数据完成后发送 |
43
- | 楼栋实际变化 | 1 |
44
- | 楼栋重复回写同一值 | 0 |
45
- | toolbar 重置 | 1 |
46
- | 仅展开未加载楼栋节点 | 0,只有空间子节点请求 |
48
+ ### 为什么不能在 `spaceChange` 请求列表?
47
49
 
50
+ 该事件通知 `{ parkIds, buildingIds }` 的 UI 状态变化。园区切换还要等待空间树加载;在此事件请求会与组件自己的 confirm 竞争,造成空条件、重复请求或闪烁。它只用于受控 UI 同步/界面联动,列表请求走 `@confirm`。
51
+
52
+ ### 园区/楼栋变更后谁负责查询?
53
+
54
+ 组件在园区切换并完成新空间加载后确认一次;楼栋实际值变化后确认一次。同值重复回写不应重复确认。展开未加载节点可能产生空间子节点请求,那不是业务列表请求。楼栋树加载错误会触发 `spaceError`;当前实现可能继续以空 building 确认,目标业务不能接受该行为时应基于实际版本复现并报告,不应默认为园区列表失败的阻断语义。
55
+
56
+ ### 页面显示园区,Network 却没有 park?
57
+
58
+ 依次检查:实际运行的 `@das-fed/upf-ui`/`upf-utils` 版本和导入解析路径;空间控件是否在当前可见页面注册;公共请求是否经过 `createService`;首次请求是否在 ready 之前发出;是否有多份搜索组件/缓存 Tab 导致来源不匹配。不要先在业务 handler 手工加 park,那会掩盖根因并违反参数合同。
59
+
60
+ ### 首次结果错误后又刷新/闪一下?
61
+
62
+ 在 Network 检查是否同时有父级无条件 `onMounted`、表格初次加载、日期回调和 toolbar 首次 confirm。空间首次请求必须等组件初始化完成;异步表格晚挂载时 watcher 应立即消费已存在的 search/ready 状态,不要增加第二条无条件查询。
63
+
64
+ ### 怎么避免日期、重置或分页重复请求?
65
+
66
+ 追踪一次用户动作对应的 Network initiator:日期 change/debounce、confirm handler、父级 watcher、reset handler、分页回调是否各自发请求。迁移后保留单一业务查询链,reset 后由组件确认一次,分页通过同一公共请求层读取当前 query。
67
+
68
+ ## 禁止模式
69
+
70
+ - 业务 DTO/payload/search state 中出现 `park`、`building`、`parkIds`、`buildingIds`。
71
+ - 在 `spaceChange`、字段 change、watch 或 reset 中补业务列表请求,与组件自动确认竞争。
72
+ - 无视页面需求无条件打开 `spaceConfig.visible`。
73
+ - 依据另一个 checkout 的源码、截图或 lockfile 猜测实际安装包 API。
74
+ - 同时保留旧页面首次请求与 toolbar 自动首次确认。
75
+
76
+ ## 验收清单
77
+
78
+ - 说明页面是否启用 toolbar/空间控件及依据。
79
+ - 首次进入、搜索、日期、reset、分页、Tab 首次进入/返回的业务请求次数符合预期。
80
+ - 启用空间时园区/楼栋变化只发生预期查询,query 对应当前页面最新值。
81
+ - Network 中空间条件只在 query,JSON body 只含业务字段;无空间配置时无空间 query。
82
+ - 列出已做的 typecheck/test/build/Chrome 验证及未验证项。
@@ -1 +1 @@
1
- .das-input-select-search-container[data-v-46325d2a]{display:flex;align-items:center}.das-input-select-search-container .label[data-v-46325d2a]{color:var(--upf-text-secondary, var(--das-ui-search-form-filter-font-color, #666666));margin-right:8px;font-size:var(--das-ui-font-size-sm);text-align:right;max-width:84px;text-overflow:ellipsis;overflow:hidden;display:flex;align-items:center;white-space:nowrap;justify-content:flex-end}.das-input-select-search-container-en .label[data-v-46325d2a]{max-width:170px!important;width:170px!important}[data-v-6cc33b4e] .das-ui-date-range-picker{margin-left:16px}[data-v-6cc33b4e] .das-ui-date-range-picker .ant-picker{height:var(--das-date-range-control-height)}[data-v-6cc33b4e] .das-ui-select .ant-select-selection-item{text-align:right}.das-select-date-select-container{width:120px}.optional-select-item{margin-right:8px}.optional-select-item .ant-select-selection-item{text-align:left!important}.das-select-date-range{display:flex;align-items:center}.das-select-date-range .label{color:var(--upf-text-secondary, var(--das-ui-search-form-filter-font-color, #666666));margin-right:8px;font-size:var(--das-ui-font-size-sm);max-width:84px;text-overflow:ellipsis;overflow:hidden;display:flex;align-items:center;white-space:nowrap;justify-content:flex-end}.das-select-date-range .das-ui-date-range-picker{margin-left:0!important}.das-select-date-range .das-ui-select{margin-right:12px}.das-select-date-range-en-filter .label{max-width:170px!important;width:170px!important}.das-select-date-range-en-nonefilter .label{max-width:90px!important;width:90px!important}.das-ui-search-form[data-v-29e1a756]{width:100%;box-sizing:border-box}.das-ui-search-form.expand-hasbtn-padding[data-v-29e1a756]{padding-bottom:10px}.das-ui-search-form.packup-hasbtn-padding[data-v-29e1a756]{padding-bottom:14px}.das-ui-search-form.packup-nobtn-padding[data-v-29e1a756]{padding-bottom:2px}.das-ui-search-form.nofilter-hasbtn-padding[data-v-29e1a756]{padding-bottom:14px}.das-ui-search-form.expand-nobtn-padding[data-v-29e1a756]{padding-bottom:0}.das-ui-search-form .search-content[data-v-29e1a756]{width:100%;display:flex;justify-content:space-between;padding-top:8px;box-sizing:border-box;align-items:flex-end}.das-ui-search-form .search-form-left[data-v-29e1a756]{display:flex;flex:1;align-items:flex-end!important}.das-ui-search-form .search-form-left.align-center[data-v-29e1a756]{align-items:center}.das-ui-search-form .search-form-left .search-title[data-v-29e1a756]{font-size:var(--das-ui-font-size-lg, 16px);color:var(--upf-text-primary, var(--das-ui-search-form-font-color, #212121));line-height:26px;font-weight:600;margin-right:16px}.das-ui-search-form .search-form-left .search-selected-content[data-v-29e1a756]{display:flex;flex:1;align-items:flex-end}.das-ui-search-form .search-form-left .search-selected-content .label[data-v-29e1a756]{min-width:60px;font-size:var(--das-ui-font-size-sm);color:var(--upf-text-secondary, var(--das-ui-search-form-tip-color, #999999));line-height:24px}.das-ui-search-form .search-form-right[data-v-29e1a756]{display:flex}.das-ui-search-form .search-form-right.filter-panel-left[data-v-29e1a756]{margin-left:80px}.das-ui-search-form .search-form-right .margin-filter[data-v-29e1a756]{margin-right:132px}.das-ui-search-form .search-form-right .filter-handle-status[data-v-29e1a756]{display:flex;align-items:center;color:var(--upf-color-primary, var(--das-ui-search-form-primary-color, #5582f3));cursor:pointer}.das-ui-search-form .search-form-right .filter-handle-status .status[data-v-29e1a756]{margin-right:5px;font-size:var(--das-ui-font-size-sm)}.das-ui-search-form .search-form-right .filter-handle-status .arrowTransform[data-v-29e1a756]{transition:.2s;transform-origin:center;transform:rotate(180deg)}.das-ui-search-form .search-form-right .filter-handle-status .arrowTransformReturn[data-v-29e1a756]{transition:.2s;transform-origin:center;transform:rotate(0)}.das-ui-search-form .filter-content[data-v-29e1a756]{width:100%;height:auto;background-color:#fafafa;padding:0 12px;box-sizing:border-box;border:1px solid #d9d9d9;border-radius:2px;margin-top:12px}.das-ui-search-form .filter-content.horizontal-filter-content[data-v-29e1a756]{max-height:200px;padding:0 40px!important}.das-ui-search-form .filter-content.horizontal-filter-content .filter-scroll-content[data-v-29e1a756]{width:100%;height:100%}.das-ui-search-form .filter-content.horizontal-filter-content[data-v-29e1a756] .das-ui-form-item-label{max-width:84px}.das-ui-search-form .filter-content.horizontal-filter-content[data-v-29e1a756] .das-ui-form-item-label .label{max-width:84px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.das-ui-search-form .filter-content .filter-item[data-v-29e1a756]{flex:0 0 calc(var(--v3664c71f) - 30px)!important}.das-ui-search-form .filter-content .filter-item.das-select-date-range[data-v-29e1a756]{margin-right:var(--v5c27986e)}.filter-line[data-v-29e1a756]{width:100%;height:16px;background-color:transparent}.das-ui-search-form .treeSelect-item{align-items:flex-start!important}.das-ui-search-form .treeSelect-item .das-ui-form-item-label{margin-top:2px}.das-ui-search-form .align-left-filter-content .das-ui-form{flex-direction:row!important;min-height:32px;align-items:flex-end!important;align-content:flex-end!important}.das-ui-search-form .align-left-filter-content .das-ui-form .das-ui-form-item{margin-bottom:0!important;margin-right:20px!important}.das-ui-search-form .align-left-filter-content .das-ui-form .das-ui-form-item .das-ui-form-item-label{color:var(--upf-text-secondary, var(--das-ui-search-form-filter-font-color, #666666))}.das-ui-search-form .search-selected-content .tag-content .el-tag__content{display:flex!important}.das-ui-search-form .search-selected-content .tag-content .das-ui-tag{margin-left:5px;background-color:#fff}.das-ui-search-form .search-selected-content .tag-content .das-ui-tag .el-tag{height:24px!important}.das-ui-search-form .search-selected-content .tag-content .das-ui-tag .el-tag .el-tag__close{color:var(--upf-text-secondary, var(--das-ui-search-form-filter-font-color, #666666))}.das-ui-search-form .out-filter-content{margin-right:58px}.das-ui-search-form .out-filter-content.no-fileter-panel{margin-right:0}.das-ui-search-form .out-filter-content .das-ui-form{flex-direction:row!important}.das-ui-search-form .out-filter-content .das-ui-form .das-ui-form-item{margin-bottom:0!important;margin-right:10px!important}.das-ui-search-form .out-filter-content .das-ui-form .das-ui-form-item .das-ui-form-item-label{margin-right:10px!important}.das-ui-search-form .filter-content .das-ui-form-item{height:40px;margin-bottom:0!important;border-bottom:1px solid var(--upf-border-color, var(--das-ui-search-form-filter-border-color, #d9d9d9))}.das-ui-search-form .filter-content .das-ui-form-item:last-of-type{border-bottom:0}.das-ui-search-form .filter-content .das-ui-form-item .das-ui-form-item-label{margin-right:24px!important}.das-ui-search-form .filter-content .das-ui-form-item .das-ui-form-item-label .label{color:var(--upf-text-secondary, var(--das-ui-search-form-filter-font-color, #666666))}.das-ui-search-form .filter-content .das-ui-form-item.child-form-item{width:auto!important}.das-ui-search-form .filter-content .das-ui-form-item.child-form-item .das-ui-form-item-label{display:none}.das-ui-search-form .filter-content.horizontal-filter-content .das-ui-form .das-select-date-range.filter-item,.das-ui-search-form .filter-content.horizontal-filter-content .das-ui-form .das-input-select-search-container.filter-input-select-item{margin-top:16px!important}.das-ui-search-form .filter-content.horizontal-filter-content .das-ui-form .das-input-select-search-container.filter-input-select-item{margin-right:var(--v5c27986e)}.das-ui-search-form .filter-content.horizontal-filter-content .das-ui-form .das-input-select-search-container.filter-input-select-item .filter-input-select-item{margin-right:0!important}.das-ui-search-form .filter-content.horizontal-filter-content .das-ui-form .das-ui-form-item{height:auto;border:none;margin-right:var(--v5c27986e);margin-top:16px!important}.das-ui-search-form .filter-content.horizontal-filter-content .das-ui-form .das-ui-form-item .das-ui-form-item-label{margin-right:8px!important}.das-ui-search-form.das-ui-search-form-en-filter .das-ui-form-item-label,.das-ui-search-form.das-ui-search-form-en-filter .das-ui-form-item-label .label{max-width:170px!important;width:170px!important}.das-ui-search-form.das-ui-search-form-en-filter .align-left-filter-content .das-ui-form-item-label{width:auto!important}.das-ui-search-form.das-ui-search-form-en-filter .das-ui-form-item-label{max-width:170px!important;width:170px!important}.das-ui-search-form.das-ui-search-form-en-filter .das-ui-form-item-label .label{max-width:170px!important}.das-ui-search-form.das-ui-search-form-en-nonefilter .align-left-filter-content .das-ui-form-item-label{width:auto!important}.das-ui-search-form.das-ui-search-form-en-nonefilter .das-ui-form-item-label{max-width:120px!important;width:120px!important}.das-ui-search-form.das-ui-search-form-en-nonefilter .das-ui-form-item-label .label{max-width:120px!important}.das-search-form-toolbar[data-v-cc75fba7]{width:100%;min-width:0}.toolbar-heading[data-v-cc75fba7]{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:8px 0 12px}.toolbar-heading strong[data-v-cc75fba7]{font-size:14px;font-weight:600}.toolbar-heading-right[data-v-cc75fba7]{margin-left:auto}.toolbar-panel[data-v-cc75fba7]{position:relative;background:var(--upf-bg-secondary, #fafafa);border:1px solid var(--upf-border-color, #e5e5e5);overflow-x:auto;overflow-y:hidden;box-sizing:border-box}.toolbar-fields[data-v-cc75fba7]{position:static}.toolbar-field[data-v-cc75fba7]{position:absolute;display:flex;align-items:center;gap:8px;width:280px;min-height:32px;box-sizing:border-box}.toolbar-label[data-v-cc75fba7]{flex:0 0 72px;width:72px;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:right}.toolbar-control[data-v-cc75fba7]{flex:0 0 200px;width:200px}.toolbar-range[data-v-cc75fba7]{width:504px}.toolbar-range .toolbar-control[data-v-cc75fba7]{flex-basis:424px;width:424px}.toolbar-range-select[data-v-cc75fba7]{width:724px}.toolbar-range-select .toolbar-control[data-v-cc75fba7]{flex-basis:644px;width:644px}.toolbar-actions[data-v-cc75fba7]{position:absolute;right:20px;display:flex;align-items:center;gap:12px;white-space:nowrap}[data-v-cc75fba7] .toolbar-actions .das-ui-button:not(:first-child){background:#fff;color:var(--upf-text-secondary, #666);border-color:var(--upf-border-color, #ddd)}.toolbar-expand[data-v-cc75fba7]{display:flex;align-items:center;gap:4px;border:0;padding:0;color:var(--upf-color-primary, #5582f3);background:transparent;cursor:pointer;font-size:12px}[data-v-cc75fba7] .das-ui-form-item{margin:0!important;width:200px!important;flex:none!important}[data-v-cc75fba7] .das-ui-form-item-label{display:none}[data-v-cc75fba7] .das-ui-form-container{width:200px!important;min-width:200px!important}[data-v-cc75fba7] .das-ui-form-container>div,[data-v-cc75fba7] .das-ui-select,[data-v-cc75fba7] .das-ui-tree-select,[data-v-cc75fba7] .ant-picker{box-sizing:border-box}[data-v-cc75fba7] .das-ui-select,[data-v-cc75fba7] .das-ui-tree-select,[data-v-cc75fba7] .das-ui-input,[data-v-cc75fba7] .das-ui-input-dialog-select,[data-v-cc75fba7] .ant-picker{width:200px!important;min-width:200px!important;max-width:200px!important}[data-v-cc75fba7] .das-select-date-range{width:max-content}[data-v-cc75fba7] .das-select-date-range>div:first-child{flex-shrink:0}[data-v-cc75fba7] .das-select-date-range .das-ui-select{margin-right:20px}[data-v-cc75fba7] .das-ui-date-range-picker{display:flex;flex-wrap:nowrap!important;align-items:center;width:424px!important}[data-v-cc75fba7] .das-ui-date-range-picker .das-ui-date-picker{flex:0 0 200px;width:200px!important}[data-v-cc75fba7] .date-range-separator{flex:0 0 24px;width:24px;margin:0!important;text-align:center}[data-v-cc75fba7] .ant-select-selector{flex-wrap:nowrap!important;overflow:hidden}[data-v-cc75fba7] .toolbar-heading>.das-ui-select .ant-select-selection-overflow-item:not(.ant-select-selection-overflow-item-rest){display:flex;align-items:center;transform:translateY(1px)}[data-v-cc75fba7] .toolbar-heading>.das-ui-select .ant-select-selector>[data-overlayscrollbars-viewport]{overflow-y:hidden!important}[data-v-cc75fba7] .toolbar-heading>.das-ui-select .os-scrollbar-vertical{display:none!important}[data-v-cc75fba7] .das-ui-form{padding:0!important}
1
+ .das-input-select-search-container[data-v-46325d2a]{display:flex;align-items:center}.das-input-select-search-container .label[data-v-46325d2a]{color:var(--upf-text-secondary, var(--das-ui-search-form-filter-font-color, #666666));margin-right:8px;font-size:var(--das-ui-font-size-sm);text-align:right;max-width:84px;text-overflow:ellipsis;overflow:hidden;display:flex;align-items:center;white-space:nowrap;justify-content:flex-end}.das-input-select-search-container-en .label[data-v-46325d2a]{max-width:170px!important;width:170px!important}[data-v-6cc33b4e] .das-ui-date-range-picker{margin-left:16px}[data-v-6cc33b4e] .das-ui-date-range-picker .ant-picker{height:var(--das-date-range-control-height)}[data-v-6cc33b4e] .das-ui-select .ant-select-selection-item{text-align:right}.das-select-date-select-container{width:120px}.optional-select-item{margin-right:8px}.optional-select-item .ant-select-selection-item{text-align:left!important}.das-select-date-range{display:flex;align-items:center}.das-select-date-range .label{color:var(--upf-text-secondary, var(--das-ui-search-form-filter-font-color, #666666));margin-right:8px;font-size:var(--das-ui-font-size-sm);max-width:84px;text-overflow:ellipsis;overflow:hidden;display:flex;align-items:center;white-space:nowrap;justify-content:flex-end}.das-select-date-range .das-ui-date-range-picker{margin-left:0!important}.das-select-date-range .das-ui-select{margin-right:12px}.das-select-date-range-en-filter .label{max-width:170px!important;width:170px!important}.das-select-date-range-en-nonefilter .label{max-width:90px!important;width:90px!important}.das-ui-search-form[data-v-29e1a756]{width:100%;box-sizing:border-box}.das-ui-search-form.expand-hasbtn-padding[data-v-29e1a756]{padding-bottom:10px}.das-ui-search-form.packup-hasbtn-padding[data-v-29e1a756]{padding-bottom:14px}.das-ui-search-form.packup-nobtn-padding[data-v-29e1a756]{padding-bottom:2px}.das-ui-search-form.nofilter-hasbtn-padding[data-v-29e1a756]{padding-bottom:14px}.das-ui-search-form.expand-nobtn-padding[data-v-29e1a756]{padding-bottom:0}.das-ui-search-form .search-content[data-v-29e1a756]{width:100%;display:flex;justify-content:space-between;padding-top:8px;box-sizing:border-box;align-items:flex-end}.das-ui-search-form .search-form-left[data-v-29e1a756]{display:flex;flex:1;align-items:flex-end!important}.das-ui-search-form .search-form-left.align-center[data-v-29e1a756]{align-items:center}.das-ui-search-form .search-form-left .search-title[data-v-29e1a756]{font-size:var(--das-ui-font-size-lg, 16px);color:var(--upf-text-primary, var(--das-ui-search-form-font-color, #212121));line-height:26px;font-weight:600;margin-right:16px}.das-ui-search-form .search-form-left .search-selected-content[data-v-29e1a756]{display:flex;flex:1;align-items:flex-end}.das-ui-search-form .search-form-left .search-selected-content .label[data-v-29e1a756]{min-width:60px;font-size:var(--das-ui-font-size-sm);color:var(--upf-text-secondary, var(--das-ui-search-form-tip-color, #999999));line-height:24px}.das-ui-search-form .search-form-right[data-v-29e1a756]{display:flex}.das-ui-search-form .search-form-right.filter-panel-left[data-v-29e1a756]{margin-left:80px}.das-ui-search-form .search-form-right .margin-filter[data-v-29e1a756]{margin-right:132px}.das-ui-search-form .search-form-right .filter-handle-status[data-v-29e1a756]{display:flex;align-items:center;color:var(--upf-color-primary, var(--das-ui-search-form-primary-color, #5582f3));cursor:pointer}.das-ui-search-form .search-form-right .filter-handle-status .status[data-v-29e1a756]{margin-right:5px;font-size:var(--das-ui-font-size-sm)}.das-ui-search-form .search-form-right .filter-handle-status .arrowTransform[data-v-29e1a756]{transition:.2s;transform-origin:center;transform:rotate(180deg)}.das-ui-search-form .search-form-right .filter-handle-status .arrowTransformReturn[data-v-29e1a756]{transition:.2s;transform-origin:center;transform:rotate(0)}.das-ui-search-form .filter-content[data-v-29e1a756]{width:100%;height:auto;background-color:#fafafa;padding:0 12px;box-sizing:border-box;border:1px solid #d9d9d9;border-radius:2px;margin-top:12px}.das-ui-search-form .filter-content.horizontal-filter-content[data-v-29e1a756]{max-height:200px;padding:0 40px!important}.das-ui-search-form .filter-content.horizontal-filter-content .filter-scroll-content[data-v-29e1a756]{width:100%;height:100%}.das-ui-search-form .filter-content.horizontal-filter-content[data-v-29e1a756] .das-ui-form-item-label{max-width:84px}.das-ui-search-form .filter-content.horizontal-filter-content[data-v-29e1a756] .das-ui-form-item-label .label{max-width:84px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.das-ui-search-form .filter-content .filter-item[data-v-29e1a756]{flex:0 0 calc(var(--3664c71f) - 30px)!important}.das-ui-search-form .filter-content .filter-item.das-select-date-range[data-v-29e1a756]{margin-right:var(--5c27986e)}.filter-line[data-v-29e1a756]{width:100%;height:16px;background-color:transparent}.das-ui-search-form .treeSelect-item{align-items:flex-start!important}.das-ui-search-form .treeSelect-item .das-ui-form-item-label{margin-top:2px}.das-ui-search-form .align-left-filter-content .das-ui-form{flex-direction:row!important;min-height:32px;align-items:flex-end!important;align-content:flex-end!important}.das-ui-search-form .align-left-filter-content .das-ui-form .das-ui-form-item{margin-bottom:0!important;margin-right:20px!important}.das-ui-search-form .align-left-filter-content .das-ui-form .das-ui-form-item .das-ui-form-item-label{color:var(--upf-text-secondary, var(--das-ui-search-form-filter-font-color, #666666))}.das-ui-search-form .search-selected-content .tag-content .el-tag__content{display:flex!important}.das-ui-search-form .search-selected-content .tag-content .das-ui-tag{margin-left:5px;background-color:#fff}.das-ui-search-form .search-selected-content .tag-content .das-ui-tag .el-tag{height:24px!important}.das-ui-search-form .search-selected-content .tag-content .das-ui-tag .el-tag .el-tag__close{color:var(--upf-text-secondary, var(--das-ui-search-form-filter-font-color, #666666))}.das-ui-search-form .out-filter-content{margin-right:58px}.das-ui-search-form .out-filter-content.no-fileter-panel{margin-right:0}.das-ui-search-form .out-filter-content .das-ui-form{flex-direction:row!important}.das-ui-search-form .out-filter-content .das-ui-form .das-ui-form-item{margin-bottom:0!important;margin-right:10px!important}.das-ui-search-form .out-filter-content .das-ui-form .das-ui-form-item .das-ui-form-item-label{margin-right:10px!important}.das-ui-search-form .filter-content .das-ui-form-item{height:40px;margin-bottom:0!important;border-bottom:1px solid var(--upf-border-color, var(--das-ui-search-form-filter-border-color, #d9d9d9))}.das-ui-search-form .filter-content .das-ui-form-item:last-of-type{border-bottom:0}.das-ui-search-form .filter-content .das-ui-form-item .das-ui-form-item-label{margin-right:24px!important}.das-ui-search-form .filter-content .das-ui-form-item .das-ui-form-item-label .label{color:var(--upf-text-secondary, var(--das-ui-search-form-filter-font-color, #666666))}.das-ui-search-form .filter-content .das-ui-form-item.child-form-item{width:auto!important}.das-ui-search-form .filter-content .das-ui-form-item.child-form-item .das-ui-form-item-label{display:none}.das-ui-search-form .filter-content.horizontal-filter-content .das-ui-form .das-select-date-range.filter-item,.das-ui-search-form .filter-content.horizontal-filter-content .das-ui-form .das-input-select-search-container.filter-input-select-item{margin-top:16px!important}.das-ui-search-form .filter-content.horizontal-filter-content .das-ui-form .das-input-select-search-container.filter-input-select-item{margin-right:var(--5c27986e)}.das-ui-search-form .filter-content.horizontal-filter-content .das-ui-form .das-input-select-search-container.filter-input-select-item .filter-input-select-item{margin-right:0!important}.das-ui-search-form .filter-content.horizontal-filter-content .das-ui-form .das-ui-form-item{height:auto;border:none;margin-right:var(--5c27986e);margin-top:16px!important}.das-ui-search-form .filter-content.horizontal-filter-content .das-ui-form .das-ui-form-item .das-ui-form-item-label{margin-right:8px!important}.das-ui-search-form.das-ui-search-form-en-filter .das-ui-form-item-label,.das-ui-search-form.das-ui-search-form-en-filter .das-ui-form-item-label .label{max-width:170px!important;width:170px!important}.das-ui-search-form.das-ui-search-form-en-filter .align-left-filter-content .das-ui-form-item-label{width:auto!important}.das-ui-search-form.das-ui-search-form-en-filter .das-ui-form-item-label{max-width:170px!important;width:170px!important}.das-ui-search-form.das-ui-search-form-en-filter .das-ui-form-item-label .label{max-width:170px!important}.das-ui-search-form.das-ui-search-form-en-nonefilter .align-left-filter-content .das-ui-form-item-label{width:auto!important}.das-ui-search-form.das-ui-search-form-en-nonefilter .das-ui-form-item-label{max-width:120px!important;width:120px!important}.das-ui-search-form.das-ui-search-form-en-nonefilter .das-ui-form-item-label .label{max-width:120px!important}.das-search-form-toolbar[data-v-cc75fba7]{width:100%;min-width:0}.toolbar-heading[data-v-cc75fba7]{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:8px 0 12px}.toolbar-heading strong[data-v-cc75fba7]{font-size:14px;font-weight:600}.toolbar-heading-right[data-v-cc75fba7]{margin-left:auto}.toolbar-panel[data-v-cc75fba7]{position:relative;background:var(--upf-bg-secondary, #fafafa);border:1px solid var(--upf-border-color, #e5e5e5);overflow-x:auto;overflow-y:hidden;box-sizing:border-box}.toolbar-fields[data-v-cc75fba7]{position:static}.toolbar-field[data-v-cc75fba7]{position:absolute;display:flex;align-items:center;gap:8px;width:280px;min-height:32px;box-sizing:border-box}.toolbar-label[data-v-cc75fba7]{flex:0 0 72px;width:72px;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:right}.toolbar-control[data-v-cc75fba7]{flex:0 0 200px;width:200px}.toolbar-range[data-v-cc75fba7]{width:504px}.toolbar-range .toolbar-control[data-v-cc75fba7]{flex-basis:424px;width:424px}.toolbar-range-select[data-v-cc75fba7]{width:724px}.toolbar-range-select .toolbar-control[data-v-cc75fba7]{flex-basis:644px;width:644px}.toolbar-actions[data-v-cc75fba7]{position:absolute;right:20px;display:flex;align-items:center;gap:12px;white-space:nowrap}[data-v-cc75fba7] .toolbar-actions .das-ui-button:not(:first-child){background:#fff;color:var(--upf-text-secondary, #666);border-color:var(--upf-border-color, #ddd)}.toolbar-expand[data-v-cc75fba7]{display:flex;align-items:center;gap:4px;border:0;padding:0;color:var(--upf-color-primary, #5582f3);background:transparent;cursor:pointer;font-size:12px}[data-v-cc75fba7] .das-ui-form-item{margin:0!important;width:200px!important;flex:none!important}[data-v-cc75fba7] .das-ui-form-item-label{display:none}[data-v-cc75fba7] .das-ui-form-container{width:200px!important;min-width:200px!important}[data-v-cc75fba7] .das-ui-form-container>div,[data-v-cc75fba7] .das-ui-select,[data-v-cc75fba7] .das-ui-tree-select,[data-v-cc75fba7] .ant-picker{box-sizing:border-box}[data-v-cc75fba7] .das-ui-select,[data-v-cc75fba7] .das-ui-tree-select,[data-v-cc75fba7] .das-ui-input,[data-v-cc75fba7] .das-ui-input-dialog-select,[data-v-cc75fba7] .ant-picker{width:200px!important;min-width:200px!important;max-width:200px!important}[data-v-cc75fba7] .das-select-date-range{width:max-content}[data-v-cc75fba7] .das-select-date-range>div:first-child{flex-shrink:0}[data-v-cc75fba7] .das-select-date-range .das-ui-select{margin-right:20px}[data-v-cc75fba7] .das-ui-date-range-picker{display:flex;flex-wrap:nowrap!important;align-items:center;width:424px!important}[data-v-cc75fba7] .das-ui-date-range-picker .das-ui-date-picker{flex:0 0 200px;width:200px!important}[data-v-cc75fba7] .date-range-separator{flex:0 0 24px;width:24px;margin:0!important;text-align:center}[data-v-cc75fba7] .ant-select-selector{flex-wrap:nowrap!important;overflow:hidden}[data-v-cc75fba7] .toolbar-heading>.das-ui-select .ant-select-selection-overflow-item:not(.ant-select-selection-overflow-item-rest){display:flex;align-items:center;transform:translateY(1px)}[data-v-cc75fba7] .toolbar-heading>.das-ui-select .ant-select-selector>[data-overlayscrollbars-viewport]{overflow-y:hidden!important}[data-v-cc75fba7] .toolbar-heading>.das-ui-select .os-scrollbar-vertical{display:none!important}[data-v-cc75fba7] .das-ui-form{padding:0!important}