@opentiny/vue-docs 3.28.0 → 3.30.0

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 (287) hide show
  1. package/demos/apis/action-menu.js +22 -0
  2. package/demos/apis/alert.js +19 -22
  3. package/demos/apis/button-group.js +15 -0
  4. package/demos/apis/calendar-view.js +5 -5
  5. package/demos/apis/cascader-view.js +5 -5
  6. package/demos/apis/dialog-box.js +39 -38
  7. package/demos/apis/drawer.js +31 -0
  8. package/demos/apis/dropdown.js +39 -1
  9. package/demos/apis/filter-panel.js +21 -1
  10. package/demos/apis/fluent-editor.js +30 -0
  11. package/demos/apis/form.js +11 -0
  12. package/demos/apis/fullscreen.js +10 -11
  13. package/demos/apis/grid.js +131 -16
  14. package/demos/apis/guide.js +14 -0
  15. package/demos/apis/link.js +11 -0
  16. package/demos/apis/message.js +48 -22
  17. package/demos/apis/modal.js +34 -31
  18. package/demos/apis/notify.js +13 -13
  19. package/demos/apis/rate.js +15 -0
  20. package/demos/apis/search-box.js +343 -0
  21. package/demos/apis/select.js +14 -2
  22. package/demos/apis/tag-input.js +182 -0
  23. package/demos/apis/tree.js +23 -23
  24. package/demos/mobile-first/app/button-group/display-mode.vue +31 -0
  25. package/demos/mobile-first/app/button-group/webdoc/button-group.js +13 -0
  26. package/demos/mobile-first/app/calendar-view/webdoc/calendar-view.js +5 -4
  27. package/demos/mobile-first/app/modal/webdoc/modal.js +2 -1
  28. package/demos/pc/app/alert/center.spec.ts +8 -0
  29. package/demos/pc/app/alert/custom-close.spec.ts +39 -9
  30. package/demos/pc/app/alert/icon.spec.ts +18 -7
  31. package/demos/pc/app/alert/show-icon.spec.ts +1 -1
  32. package/demos/pc/app/anchor/webdoc/anchor.js +1 -0
  33. package/demos/pc/app/base-select/copy-multi.spec.ts +1 -1
  34. package/demos/pc/app/button-group/display-mode-composition-api.vue +23 -0
  35. package/demos/pc/app/button-group/display-mode.spec.ts +0 -0
  36. package/demos/pc/app/button-group/display-mode.vue +31 -0
  37. package/demos/pc/app/button-group/sup-composition-api.vue +1 -0
  38. package/demos/pc/app/button-group/sup.vue +1 -0
  39. package/demos/pc/app/button-group/webdoc/button-group.js +14 -0
  40. package/demos/pc/app/calendar-view/calendar-event.spec.ts +1 -1
  41. package/demos/pc/app/calendar-view/custom-day-bg-color.vue +10 -0
  42. package/demos/pc/app/calendar-view/webdoc/calendar-view.js +4 -4
  43. package/demos/pc/app/cascader/filter-mode-composition-api.vue +2 -2
  44. package/demos/pc/app/checkbox/checked-composition-api.vue +3 -3
  45. package/demos/pc/app/checkbox/checked.vue +3 -3
  46. package/demos/pc/app/date-picker/align.spec.ts +10 -13
  47. package/demos/pc/app/date-picker/clear.spec.ts +3 -3
  48. package/demos/pc/app/date-picker/default-value.spec.ts +4 -4
  49. package/demos/pc/app/date-picker/events.spec.ts +2 -2
  50. package/demos/pc/app/date-picker/format.spec.ts +3 -3
  51. package/demos/pc/app/date-picker/now.spec.ts +4 -4
  52. package/demos/pc/app/date-picker/shortcuts.spec.ts +1 -1
  53. package/demos/pc/app/date-picker/slot.spec.ts +5 -5
  54. package/demos/pc/app/dialog-box/basic-usage.spec.ts +5 -5
  55. package/demos/pc/app/dialog-box/form-in-dialog.spec.ts +1 -2
  56. package/demos/pc/app/drawer/basic-usage.spec.ts +4 -3
  57. package/demos/pc/app/drawer/close-on-press-escape.spec.ts +4 -2
  58. package/demos/pc/app/drawer/placement.spec.ts +4 -4
  59. package/demos/pc/app/drawer/show-header.spec.ts +3 -2
  60. package/demos/pc/app/drawer/webdoc/drawer.js +3 -2
  61. package/demos/pc/app/dropdown/show-icon-composition-api.vue +1 -1
  62. package/demos/pc/app/dropdown/show-icon.vue +1 -1
  63. package/demos/pc/app/dropdown/tip-composition-api.vue +5 -2
  64. package/demos/pc/app/dropdown/tip.vue +5 -2
  65. package/demos/pc/app/dropdown/webdoc/dropdown.js +2 -2
  66. package/demos/pc/app/filter-panel/size-composition-api.vue +58 -0
  67. package/demos/pc/app/filter-panel/size.spec.ts +23 -0
  68. package/demos/pc/app/filter-panel/size.vue +68 -0
  69. package/demos/pc/app/filter-panel/webdoc/filter-panel.js +13 -0
  70. package/demos/pc/app/flowchart/basic-usage-composition-api.vue +10 -260
  71. package/demos/pc/app/flowchart/basic-usage.spec.ts +2 -1
  72. package/demos/pc/app/flowchart/basic-usage.vue +4 -249
  73. package/demos/pc/app/flowchart/slots-composition-api.vue +182 -0
  74. package/demos/pc/app/flowchart/slots.spec.ts +24 -0
  75. package/demos/pc/app/flowchart/slots.vue +193 -0
  76. package/demos/pc/app/flowchart/webdoc/flowchart.js +14 -2
  77. package/demos/pc/app/form/basic-usage.spec.ts +6 -4
  78. package/demos/pc/app/form/custom-validation-string-length-composition-api.vue +38 -0
  79. package/demos/pc/app/form/custom-validation-string-length.spec.ts +18 -0
  80. package/demos/pc/app/form/custom-validation-string-length.vue +28 -13
  81. package/demos/pc/app/form/group-form-composition-api.vue +2 -2
  82. package/demos/pc/app/form/group-form.vue +2 -2
  83. package/demos/pc/app/grid/filter/advanced-filter-composition-api.vue +1 -1
  84. package/demos/pc/app/grid/filter/advanced-filter.spec.js +1 -0
  85. package/demos/pc/app/grid/filter/advanced-filter.vue +1 -1
  86. package/demos/pc/app/grid/filter/custom-filter-composition-api.vue +46 -23
  87. package/demos/pc/app/grid/filter/custom-filter.spec.js +1 -1
  88. package/demos/pc/app/grid/filter/custom-filter.vue +47 -24
  89. package/demos/pc/app/grid/filter/default-filter-composition-api.vue +5 -1
  90. package/demos/pc/app/grid/filter/default-filter.spec.ts +1 -0
  91. package/demos/pc/app/grid/filter/default-filter.vue +4 -1
  92. package/demos/pc/app/grid/filter/filter-label-value-composition-api.vue +71 -0
  93. package/demos/pc/app/grid/filter/filter-label-value.spec.ts +27 -0
  94. package/demos/pc/app/grid/filter/filter-label-value.vue +78 -0
  95. package/demos/pc/app/grid/filter/input-filter-custom-component-composition-api.vue +116 -0
  96. package/demos/pc/app/grid/filter/input-filter-custom-component.spec.ts +20 -0
  97. package/demos/pc/app/grid/filter/input-filter-custom-component.vue +126 -0
  98. package/demos/pc/app/grid/filter/layout-order-filter-composition-api.vue +114 -0
  99. package/demos/pc/app/grid/filter/layout-order-filter.spec.ts +31 -0
  100. package/demos/pc/app/grid/filter/layout-order-filter.vue +123 -0
  101. package/demos/pc/app/grid/toolbar/custom-toolbar.spec.js +1 -1
  102. package/demos/pc/app/grid/webdoc/grid-filter.js +89 -40
  103. package/demos/pc/app/guide/show-close-composition-api.vue +77 -0
  104. package/demos/pc/app/guide/show-close.spec.ts +37 -0
  105. package/demos/pc/app/guide/show-close.vue +84 -0
  106. package/demos/pc/app/guide/webdoc/guide.js +12 -0
  107. package/demos/pc/app/icon/advance-icons.js +108 -2
  108. package/demos/pc/app/icon/advance-usage-composition-api.vue +26 -1
  109. package/demos/pc/app/icon/advance-usage.vue +27 -1
  110. package/demos/pc/app/icon/webdoc/icon.js +5 -3
  111. package/demos/pc/app/input/resize.spec.ts +2 -2
  112. package/demos/pc/app/link/custom-icon-composition-api.vue +1 -1
  113. package/demos/pc/app/link/custom-icon.vue +1 -1
  114. package/demos/pc/app/link/target-composition-api.vue +24 -0
  115. package/demos/pc/app/link/target.spec.ts +41 -0
  116. package/demos/pc/app/link/target.vue +30 -0
  117. package/demos/pc/app/link/webdoc/link.js +14 -0
  118. package/demos/pc/app/message/basic-usage-composition-api.vue +48 -0
  119. package/demos/pc/app/message/basic-usage.spec.ts +27 -0
  120. package/demos/pc/app/message/basic-usage.vue +50 -0
  121. package/demos/pc/app/message/message-close-composition-api.vue +25 -0
  122. package/demos/pc/app/message/message-close.spec.ts +9 -0
  123. package/demos/pc/app/message/message-close.vue +32 -0
  124. package/demos/pc/app/message/message-duration-composition-api.vue +25 -0
  125. package/demos/pc/app/message/message-duration.spec.ts +9 -0
  126. package/demos/pc/app/message/message-duration.vue +32 -0
  127. package/demos/pc/app/message/prevent-duplicate-composition-api.vue +25 -0
  128. package/demos/pc/app/message/prevent-duplicate.spec.ts +9 -0
  129. package/demos/pc/app/message/prevent-duplicate.vue +32 -0
  130. package/demos/pc/app/message/webdoc/message.cn.md +7 -0
  131. package/demos/pc/app/message/webdoc/message.en.md +7 -0
  132. package/demos/pc/app/message/webdoc/message.js +56 -0
  133. package/demos/pc/app/modal/basic-usage.spec.ts +3 -3
  134. package/demos/pc/app/modal/modal-footer-composition-api.vue +3 -3
  135. package/demos/pc/app/modal/modal-footer.spec.ts +9 -4
  136. package/demos/pc/app/modal/modal-footer.vue +3 -3
  137. package/demos/pc/app/modal/modal-header.spec.ts +2 -2
  138. package/demos/pc/app/modal/modal-size.spec.ts +2 -2
  139. package/demos/pc/app/modal/status.spec.ts +22 -15
  140. package/demos/pc/app/nav-menu/overflow.spec.ts +1 -1
  141. package/demos/pc/app/popconfirm/custom-class.spec.ts +0 -1
  142. package/demos/pc/app/popconfirm/slot-message.spec.ts +10 -2
  143. package/demos/pc/app/popconfirm/trigger.spec.ts +16 -12
  144. package/demos/pc/app/popover/basic-usage.spec.js +3 -8
  145. package/demos/pc/app/popover/custom-popper.spec.js +2 -2
  146. package/demos/pc/app/popover/delay.spec.js +2 -2
  147. package/demos/pc/app/popover/disabled.spec.js +2 -2
  148. package/demos/pc/app/popover/events.spec.js +1 -1
  149. package/demos/pc/app/popover/ignore-boundaries.spec.js +2 -3
  150. package/demos/pc/app/popover/offset.spec.js +17 -31
  151. package/demos/pc/app/radio/dynamic-disable-composition-api.vue +3 -3
  152. package/demos/pc/app/radio/dynamic-disable.vue +2 -2
  153. package/demos/pc/app/rate/clearable-composition-api.vue +20 -0
  154. package/demos/pc/app/rate/clearable.spec.js +74 -0
  155. package/demos/pc/app/rate/clearable.vue +28 -0
  156. package/demos/pc/app/rate/webdoc/rate.js +12 -0
  157. package/demos/pc/app/search/events.spec.ts +1 -1
  158. package/demos/pc/app/search-box/append-to-body-composition-api.vue +300 -0
  159. package/demos/pc/app/search-box/append-to-body.vue +308 -0
  160. package/demos/pc/app/search-box/auto-match-composition-api.vue +162 -0
  161. package/demos/pc/app/search-box/auto-match.vue +170 -0
  162. package/demos/pc/app/search-box/basic-usage-composition-api.vue +269 -0
  163. package/demos/pc/app/search-box/basic-usage.vue +277 -0
  164. package/demos/pc/app/search-box/custom-panel-composition-api.vue +63 -0
  165. package/demos/pc/app/search-box/custom-panel.vue +72 -0
  166. package/demos/pc/app/search-box/default-field-composition-api.vue +163 -0
  167. package/demos/pc/app/search-box/default-field.vue +171 -0
  168. package/demos/pc/app/search-box/editable-composition-api.vue +311 -0
  169. package/demos/pc/app/search-box/editable.vue +320 -0
  170. package/demos/pc/app/search-box/empty-placeholder-composition-api.vue +162 -0
  171. package/demos/pc/app/search-box/empty-placeholder.vue +170 -0
  172. package/demos/pc/app/search-box/events-composition-api.vue +169 -0
  173. package/demos/pc/app/search-box/events.vue +173 -0
  174. package/demos/pc/app/search-box/group-key-composition-api.vue +257 -0
  175. package/demos/pc/app/search-box/group-key.vue +266 -0
  176. package/demos/pc/app/search-box/help-composition-api.vue +166 -0
  177. package/demos/pc/app/search-box/help.vue +175 -0
  178. package/demos/pc/app/search-box/id-map-key-composition-api.vue +131 -0
  179. package/demos/pc/app/search-box/id-map-key.vue +140 -0
  180. package/demos/pc/app/search-box/item-placeholder-composition-api.vue +119 -0
  181. package/demos/pc/app/search-box/item-placeholder.vue +127 -0
  182. package/demos/pc/app/search-box/max-length-composition-api.vue +29 -0
  183. package/demos/pc/app/search-box/max-length.vue +38 -0
  184. package/demos/pc/app/search-box/max-time-length-composition-api.vue +53 -0
  185. package/demos/pc/app/search-box/max-time-length.vue +62 -0
  186. package/demos/pc/app/search-box/merge-tag-composition-api.vue +59 -0
  187. package/demos/pc/app/search-box/merge-tag.vue +68 -0
  188. package/demos/pc/app/search-box/panel-max-height-composition-api.vue +162 -0
  189. package/demos/pc/app/search-box/panel-max-height.vue +170 -0
  190. package/demos/pc/app/search-box/potential-match-composition-api.vue +193 -0
  191. package/demos/pc/app/search-box/potential-match.vue +201 -0
  192. package/demos/pc/app/search-box/settings-composition-api.vue +163 -0
  193. package/demos/pc/app/search-box/settings.vue +171 -0
  194. package/demos/pc/app/search-box/size-composition-api.vue +162 -0
  195. package/demos/pc/app/search-box/size.vue +170 -0
  196. package/demos/pc/app/search-box/split-input-value-composition-api.vue +162 -0
  197. package/demos/pc/app/search-box/split-input-value.vue +170 -0
  198. package/demos/pc/app/search-box/suffix-icon-composition-api.vue +209 -0
  199. package/demos/pc/app/search-box/suffix-icon.vue +219 -0
  200. package/demos/pc/app/search-box/v-model-composition-api.vue +174 -0
  201. package/demos/pc/app/search-box/v-model.vue +182 -0
  202. package/demos/pc/app/search-box/webdoc/search-box.cn.md +7 -0
  203. package/demos/pc/app/search-box/webdoc/search-box.en.md +7 -0
  204. package/demos/pc/app/search-box/webdoc/search-box.js +257 -0
  205. package/demos/pc/app/select/copy-multi.spec.ts +1 -1
  206. package/demos/pc/app/select-wrapper/copy-multi.spec.ts +2 -1
  207. package/demos/pc/app/tabs/basic-usage.spec.ts +2 -2
  208. package/demos/pc/app/tabs/more-show-all.spec.ts +2 -1
  209. package/demos/pc/app/tabs/tabs-events-close-composition-api.vue +8 -2
  210. package/demos/pc/app/tabs/tabs-events-close.vue +8 -2
  211. package/demos/pc/app/tabs/tooltip-composition-api.vue +1 -1
  212. package/demos/pc/app/tag/basic-usage.spec.ts +1 -1
  213. package/demos/pc/app/tag/color-border.spec.ts +2 -2
  214. package/demos/pc/app/tag/max-width.spec.ts +1 -1
  215. package/demos/pc/app/tag/size.spec.ts +3 -3
  216. package/demos/pc/app/tag/slot-default.spec.ts +3 -3
  217. package/demos/pc/app/tag-group/basic-usage.spec.js +5 -5
  218. package/demos/pc/app/tag-group/tag-group-effect.spec.js +10 -10
  219. package/demos/pc/app/tag-group/tag-group-event.spec.js +1 -1
  220. package/demos/pc/app/tag-input/basic-usage-composition-api.vue +29 -0
  221. package/demos/pc/app/tag-input/basic-usage.spec.ts +0 -0
  222. package/demos/pc/app/tag-input/basic-usage.vue +38 -0
  223. package/demos/pc/app/tag-input/clearable-tag-composition-api.vue +20 -0
  224. package/demos/pc/app/tag-input/clearable-tag.vue +27 -0
  225. package/demos/pc/app/tag-input/collapsed-tag-composition-api.vue +20 -0
  226. package/demos/pc/app/tag-input/collapsed-tag.vue +28 -0
  227. package/demos/pc/app/tag-input/disabled-readonly-composition-api.vue +20 -0
  228. package/demos/pc/app/tag-input/disabled-readonly.vue +29 -0
  229. package/demos/pc/app/tag-input/draggable-tag-composition-api.vue +12 -0
  230. package/demos/pc/app/tag-input/draggable-tag.spec.ts +0 -0
  231. package/demos/pc/app/tag-input/draggable-tag.vue +20 -0
  232. package/demos/pc/app/tag-input/max-composition-api.vue +20 -0
  233. package/demos/pc/app/tag-input/max.vue +28 -0
  234. package/demos/pc/app/tag-input/prefix-suffix-composition-api.vue +26 -0
  235. package/demos/pc/app/tag-input/prefix-suffix.vue +34 -0
  236. package/demos/pc/app/tag-input/separator-tag-composition-api.vue +20 -0
  237. package/demos/pc/app/tag-input/separator-tag.vue +28 -0
  238. package/demos/pc/app/tag-input/webdoc/tag-input.cn.md +7 -0
  239. package/demos/pc/app/tag-input/webdoc/tag-input.en.md +7 -0
  240. package/demos/pc/app/tag-input/webdoc/tag-input.js +107 -0
  241. package/demos/pc/app/time-picker/basic-usage.spec.ts +5 -4
  242. package/demos/pc/app/time-picker/clearable.spec.ts +5 -4
  243. package/demos/pc/app/time-picker/default-value.spec.ts +2 -2
  244. package/demos/pc/app/time-picker/disabled.spec.ts +4 -3
  245. package/demos/pc/app/time-picker/format.spec.ts +8 -11
  246. package/demos/pc/app/time-picker/is-range.spec.ts +4 -3
  247. package/demos/pc/app/time-picker/name.spec.ts +1 -1
  248. package/demos/pc/app/time-picker/placeholder.spec.ts +3 -3
  249. package/demos/pc/app/time-picker/popper-class.spec.ts +1 -1
  250. package/demos/pc/app/time-picker/size.spec.ts +2 -1
  251. package/demos/pc/app/time-select/basic-usage.spec.ts +1 -1
  252. package/demos/pc/app/time-select/clear-icon.spec.ts +1 -2
  253. package/demos/pc/app/time-select/focus.spec.ts +1 -1
  254. package/demos/pc/app/time-select/picker-options.spec.ts +2 -1
  255. package/demos/pc/app/time-select/range-placeholder.spec.ts +2 -2
  256. package/demos/pc/app/time-select/size-medium.spec.ts +3 -3
  257. package/demos/pc/app/tooltip/delay.spec.js +7 -9
  258. package/demos/pc/app/tooltip/offset.spec.js +0 -2
  259. package/demos/pc/app/tooltip/popper-options.spec.js +2 -1
  260. package/demos/pc/app/user-head/color-composition-api.vue +2 -1
  261. package/demos/pc/menus.js +6 -4
  262. package/demos/pc/webdoc/changelog-en.md +370 -176
  263. package/demos/pc/webdoc/changelog.md +177 -219
  264. package/demos/pc/webdoc/develop-demo-en.md +13 -13
  265. package/demos/pc/webdoc/import-components.md +1 -1
  266. package/demos/pc/webdoc/introduce.md +2 -0
  267. package/demos/pc/webdoc/skills-en.md +107 -0
  268. package/demos/pc/webdoc/skills.md +107 -0
  269. package/demos/pc/webdoc/theme-en.md +82 -79
  270. package/demos/pc/webdoc/v3.28.0-release-article.md +943 -0
  271. package/demos/saas/menus.js +1 -0
  272. package/package.json +21 -20
  273. package/playground/App.vue +12 -6
  274. package/playground/shims/vue-search-box.mjs +154 -0
  275. package/public/static/css/mobile-dark-theme.css +1 -0
  276. package/src/i18n/index.js +1 -2
  277. package/src/main.js +8 -5
  278. package/src/style.css +5 -0
  279. package/src/views/components-doc/common.vue +0 -25
  280. package/src/views/components-doc/mobile.vue +49 -2
  281. package/vite.config.ts +3 -2
  282. package/vite.extend.ts +65 -0
  283. package/demos/pc/app/grid/webdoc/grid-ai-agent.js +0 -23
  284. package/demos/pc/webdoc/mcp-en.md +0 -101
  285. package/demos/pc/webdoc/mcp.md +0 -101
  286. package/src/components/mcp-docs.vue +0 -33
  287. package/src/composable/useTinyRemoter.ts +0 -176
@@ -1,176 +1,27 @@
1
1
  <template>
2
2
  <div class="tiny-demo">
3
- <button @click="toggleStatus">切换状态</button>
4
3
  <tiny-flowchart
5
- ref="chartRef"
6
- :data="chartData"
7
- :config="chartConfig"
4
+ ref="chart"
5
+ :data="chartDataRaw"
6
+ :config="chartConfigRaw"
8
7
  @click-node="onClickNode"
9
8
  @click-link="onClickLink"
10
9
  @click-blank="onClickBlank"
11
10
  >
12
- <template #content="params">
13
- <handler-list class="custom-handler-list" :params="params" />
14
- </template>
15
11
  </tiny-flowchart>
16
12
  </div>
17
13
  </template>
18
14
 
19
15
  <script setup>
20
- import { ref } from 'vue'
21
- import { TinyModal, TinyPopover, Flowchart } from '@opentiny/vue'
22
- import { iconYes, iconPanelMini, iconChevronDown, iconChevronUp } from '@opentiny/vue-icon'
16
+ import { TinyModal, TinyFlowchart } from '@opentiny/vue'
17
+ import { hooks } from '@opentiny/vue-common'
23
18
 
24
- const { createNode, createLink, createItem, createConfig } = Flowchart
25
-
26
- const HandlerDropdown = {
27
- template: `<div class="tiny-handler-dropdown">
28
- <div v-for="(handler, i) in params.node.info.items" :key="i" class="tiny-handler-dropdown-item">
29
- <div class="item-icon">
30
- <div :style="iconStyle(handler)">
31
- <tiny-icon-yes v-if="check(handler)"></tiny-icon-yes>
32
- <tiny-icon-pane v-else></tiny-icon-pane>
33
- </div>
34
- </div>
35
- <div class="item-status">{{ handler.status }}</div>
36
- <div class="item-head">
37
- <img :src="params.allItem[handler.key]" :style="imgStyle" />
38
- </div>
39
- <div class="item-name">{{ handler.name }}</div>
40
- <div class="item-key">{{ handler.key }}</div>
41
- <div class="item-role">{{ handler.role }}</div>
42
- <div class="item-date">{{ handler.date }}</div>
43
- </div>
44
- </div>`,
45
- name: 'TinyHandlerDropdown',
46
- components: {
47
- TinyIconYes: iconYes(),
48
- TinyIconPane: iconPanelMini()
49
- },
50
- props: {
51
- params: Object
52
- },
53
- computed: {
54
- imgStyle() {
55
- return 'width:16px;height:16px;border-radius:50%;'
56
- }
57
- },
58
- methods: {
59
- check(handler) {
60
- const { params } = this
61
- return typeof params.config.checkItemStatus === 'function' && params.config.checkItemStatus(handler)
62
- },
63
- iconStyle(handler) {
64
- const color = this.check(handler)
65
- ? 'border-color:#52c41a;background:#52c41a;'
66
- : 'border-color:#40a9ff;background:#40a9ff;'
67
- return (
68
- this.imgStyle +
69
- 'display:flex;align-items:center;justify-content:center;' +
70
- 'border-width:1px;border-style:solid;' +
71
- color
72
- )
73
- }
74
- }
75
- }
76
-
77
- const HandlerList = {
78
- template: `<tiny-popover
79
- placement="bottom-start"
80
- title=""
81
- v-model="params.showPop"
82
- width="220"
83
- trigger="manual"
84
- popper-class="demo-popover-class1"
85
- :visible-arrow="false"
86
- >
87
- <handler-dropdown class="custom-handler-dropdown" :params="params" />
88
- <template #reference>
89
- <div
90
- class="tiny-handler-list"
91
- :class="'name-' + params.node.name"
92
- :style="'border:1px solid ' + params.config.listBorderColor"
93
- >
94
- <div class="tiny-handler-list__heads" :style="'width:' + headWidth + 'px'">
95
- <img
96
- v-for="(item, i) in heads"
97
- class="tiny-handler-list__head-img"
98
- :key="i"
99
- :src="item.head"
100
- :style="item.style"
101
- />
102
- </div>
103
- <div
104
- class="tiny-handler-list__icon"
105
- :style="'width:' + params.config.listIconSize + 'px;fill:' + params.config.listIconColor"
106
- @click="toggleStatus"
107
- >
108
- <tiny-icon-up v-if="params.dropdowns[params.node.name]"></tiny-icon-up>
109
- <tiny-icon-down v-else></tiny-icon-down>
110
- </div>
111
- </div>
112
- </template>
113
- </tiny-popover>`,
114
- name: 'TinyHandlerList',
115
- components: {
116
- TinyIconDown: iconChevronDown(),
117
- TinyIconUp: iconChevronUp(),
118
- HandlerDropdown,
119
- TinyPopover
120
- },
121
- props: {
122
- params: Object
123
- },
124
- computed: {
125
- headWidth() {
126
- const { params } = this
127
-
128
- return params.config.listWidth - 6 - params.config.listIconSize
129
- },
130
- heads() {
131
- const { params, headWidth } = this
132
- const { allItem, node, config } = params
133
- const { headSize } = config
134
- const { info } = node
135
- const { items } = info
136
- const imgStyle = `width:${headSize}px;height:${headSize}px`
137
- const res = []
138
-
139
- items.forEach(({ key }, i) => {
140
- let left
141
-
142
- if (items.length > 1) {
143
- left = Math.floor(((headWidth - headSize) / (items.length - 1)) * i)
144
- } else if (items.length === 1) {
145
- left = Math.floor(headWidth / 2)
146
- }
147
-
148
- const style = `${imgStyle};left:${left}px`
149
-
150
- res.push({ head: allItem[key], style })
151
- })
152
-
153
- return res
154
- }
155
- },
156
- methods: {
157
- toggleStatus() {
158
- const { params } = this
159
- params.dropdowns[params.node.name] = !params.dropdowns[params.node.name]
160
- }
161
- }
162
- }
163
-
164
- const handlers = [
165
- createItem('WX100001', '张三', '转审人', '已转审', '很好', '2018-08-20 12:00', ''),
166
- createItem('WX100002', '李四', '主管', '已转审', '非常好', '2018-08-20 12:00', ''),
167
- createItem('WX100003', '王五', '主管', '处理中', '', '', '')
168
- ]
19
+ const { createNode, createLink, createConfig } = TinyFlowchart
169
20
 
170
21
  const chartData = {
171
22
  nodes: [
172
23
  createNode('1', 1, '基础信息', '2018.08.02', [], 1, 0),
173
- createNode('2', 1, '调职补偿', '2018.08.02', handlers, 0, 2),
24
+ createNode('2', 1, '调职补偿', '2018.08.02', [], 0, 2),
174
25
  createNode('3', 1, '汇总调职补偿', '', [], 1, 4),
175
26
  createNode('4', 3, '启动精算', '', [], 4, 5),
176
27
  createNode('5', 3, '复核精算', '', [], 4, 6),
@@ -209,23 +60,9 @@ chartConfig.headUrl = `${import.meta.env.VITE_APP_BUILD_BASE_URL}static/images/m
209
60
  chartConfig.checkItemStatus = (item) => ~['已转审', '已同意'].indexOf(item.status)
210
61
  chartConfig.adjustPos = (afterNode) => afterNode.raw.name === '2' && (afterNode.y += 1)
211
62
 
212
- const nodeFail = chartData.nodes[chartData.nodes.length - 1]
213
- const linkDash = chartData.links[chartData.links.length - 1]
214
-
215
- const flag = ref(false)
216
- const chartRef = ref()
217
- const TinyFlowchart = Flowchart
218
-
219
- function toggleStatus() {
220
- flag.value = !flag.value
221
- // 1.更改数据
222
- nodeFail.info.status = flag.value ? 1 : 4
223
- linkDash.info.style = flag.value ? 'solid' : 'dash'
224
- linkDash.info.status = flag.value ? 1 : 3
225
- chartConfig.anchor = flag.value ? 'left' : 'center'
226
- // 2.刷新流程图
227
- chartRef.value.refresh()
228
- }
63
+ // 使用 markRaw 避免大数据对象被 Vue 深度响应式代理,提升性能
64
+ const chartDataRaw = hooks.markRaw(chartData)
65
+ const chartConfigRaw = hooks.markRaw(chartConfig)
229
66
 
230
67
  function onClickNode(_afterNode, _e) {
231
68
  TinyModal.message('click-node')
@@ -239,90 +76,3 @@ function onClickBlank(_param, _e) {
239
76
  TinyModal.message('click-blank')
240
77
  }
241
78
  </script>
242
-
243
- <style scoped>
244
- /* HandlerList */
245
- .tiny-handler-list {
246
- width: calc(100% - 2px);
247
- height: 100%;
248
- border-radius: 3px;
249
- position: relative;
250
- }
251
- .tiny-handler-list__heads {
252
- position: absolute;
253
- top: 1px;
254
- left: 1px;
255
- height: calc(100% - 2px);
256
- }
257
- .tiny-handler-list__icon {
258
- position: absolute;
259
- top: 1px;
260
- right: 1px;
261
- height: calc(100% - 2px);
262
- display: flex;
263
- align-items: center;
264
- justify-content: center;
265
- font-size: 14px;
266
- }
267
- .tiny-handler-list__head-img {
268
- border-radius: 50%;
269
- position: absolute;
270
- }
271
- /* HandlerDropdown */
272
- .tiny-handler-dropdown {
273
- width: auto;
274
- height: auto;
275
- padding: 6px;
276
- text-align: initial;
277
- cursor: pointer;
278
- }
279
- .tiny-handler-dropdown-item + .tiny-handler-dropdown-item {
280
- margin-top: 6px;
281
- padding-top: 6px;
282
- border-top: 1px dashed #999;
283
- }
284
- .tiny-handler-dropdown-item {
285
- font-size: 12px;
286
- display: grid;
287
- gap: 4px;
288
- grid-template-rows: repeat(3, 20px);
289
- grid-template-columns: 20px 20px 40px auto 40px;
290
- grid-template-areas:
291
- 'icon status status status status'
292
- '. head name key role'
293
- '. date date date date';
294
- align-items: center;
295
- justify-content: start;
296
- }
297
- .tiny-handler-dropdown-item .item-icon {
298
- grid-area: icon;
299
- }
300
- .tiny-handler-dropdown-item .item-status {
301
- grid-area: status;
302
- font-weight: bold;
303
- }
304
- .tiny-handler-dropdown-item .item-head {
305
- grid-area: head;
306
- }
307
- .tiny-handler-dropdown-item .item-name {
308
- grid-area: name;
309
- }
310
- .tiny-handler-dropdown-item .item-key {
311
- grid-area: key;
312
- }
313
- .tiny-handler-dropdown-item .item-role {
314
- grid-area: role;
315
- background: #d9d9d9;
316
- }
317
- .tiny-handler-dropdown-item .item-date {
318
- grid-area: date;
319
- color: #999;
320
- }
321
- .tiny-handler-dropdown-item .item-icon .tiny-svg {
322
- fill: #fff;
323
- }
324
- .tiny-popover.demo-popover-class1.tiny-popper[x-placement^='bottom'] {
325
- margin-top: 2px;
326
- padding: 0;
327
- }
328
- </style>
@@ -4,7 +4,8 @@ test('基本用法', async ({ page }) => {
4
4
  page.on('pageerror', (exception) => expect(exception).toBeNull())
5
5
  await page.goto('flowchart#basic-usage')
6
6
 
7
- const flowchart = page.locator('.pc-demo .tiny-flow-chart')
7
+ const preview = page.locator('#basic-usage')
8
+ const flowchart = preview.locator('.tiny-flow-chart')
8
9
  const nodes = flowchart.locator('.tiny-flow-chart__node-icon-wrapper')
9
10
  await expect(flowchart).toBeVisible()
10
11
  await expect(flowchart).toHaveCSS('width', '1024px')
@@ -1,6 +1,5 @@
1
1
  <template>
2
2
  <div class="tiny-demo">
3
- <button @click="toggleStatus">切换状态</button>
4
3
  <tiny-flowchart
5
4
  ref="chart"
6
5
  :data="chartData"
@@ -9,157 +8,15 @@
9
8
  @click-link="onClickLink"
10
9
  @click-blank="onClickBlank"
11
10
  >
12
- <template #content="params">
13
- <handler-list class="custom-handler-list" :params="params" />
14
- </template>
15
11
  </tiny-flowchart>
16
12
  </div>
17
13
  </template>
18
14
 
19
15
  <script>
20
- import { TinyModal, TinyPopover, Flowchart } from '@opentiny/vue'
16
+ import { TinyModal, TinyFlowchart } from '@opentiny/vue'
21
17
  import { hooks } from '@opentiny/vue-common'
22
- import { iconYes, iconPanelMini, iconChevronDown, iconChevronUp } from '@opentiny/vue-icon'
23
18
 
24
- const { createNode, createLink, createItem, createConfig } = Flowchart
25
-
26
- const HandlerDropdown = {
27
- template: `<div class="tiny-handler-dropdown">
28
- <div v-for="(handler, i) in params.node.info.items" :key="i" class="tiny-handler-dropdown-item">
29
- <div class="item-icon">
30
- <div :style="iconStyle(handler)">
31
- <icon-yes v-if="check(handler)"></icon-yes>
32
- <icon-pane v-else></icon-pane>
33
- </div>
34
- </div>
35
- <div class="item-status">{{ handler.status }}</div>
36
- <div class="item-head">
37
- <img :src="params.allItem[handler.key]" :style="imgStyle" />
38
- </div>
39
- <div class="item-name">{{ handler.name }}</div>
40
- <div class="item-key">{{ handler.key }}</div>
41
- <div class="item-role">{{ handler.role }}</div>
42
- <div class="item-date">{{ handler.date }}</div>
43
- </div>
44
- </div>`,
45
- name: 'TinyHandlerDropdown',
46
- components: {
47
- IconYes: iconYes(),
48
- IconPane: iconPanelMini()
49
- },
50
- props: {
51
- params: Object
52
- },
53
- computed: {
54
- imgStyle() {
55
- return 'width:16px;height:16px;border-radius:50%;'
56
- }
57
- },
58
- methods: {
59
- check(handler) {
60
- const { params } = this
61
- return typeof params.config.checkItemStatus === 'function' && params.config.checkItemStatus(handler)
62
- },
63
- iconStyle(handler) {
64
- const color = this.check(handler)
65
- ? 'border-color:#52c41a;background:#52c41a;'
66
- : 'border-color:#40a9ff;background:#40a9ff;'
67
- return (
68
- this.imgStyle +
69
- 'display:flex;align-items:center;justify-content:center;' +
70
- 'border-width:1px;border-style:solid;' +
71
- color
72
- )
73
- }
74
- }
75
- }
76
-
77
- const HandlerList = {
78
- template: `<tiny-popover
79
- placement="bottom-start"
80
- title=""
81
- v-model="params.showPop"
82
- width="220"
83
- trigger="manual"
84
- popper-class="demo-popover-class1"
85
- :visible-arrow="false"
86
- >
87
- <handler-dropdown class="custom-handler-dropdown" :params="params" />
88
- <template #reference>
89
- <div
90
- class="tiny-handler-list"
91
- :class="'name-' + params.node.name"
92
- :style="'border:1px solid ' + params.config.listBorderColor"
93
- >
94
- <div class="tiny-handler-list__heads" :style="'width:' + headWidth + 'px'">
95
- <img
96
- v-for="(item, i) in heads"
97
- class="tiny-handler-list__head-img"
98
- :key="i"
99
- :src="item.head"
100
- :style="item.style"
101
- />
102
- </div>
103
- <div
104
- class="tiny-handler-list__icon"
105
- :style="'width:' + params.config.listIconSize + 'px;fill:' + params.config.listIconColor"
106
- @click="toggleStatus"
107
- >
108
- <icon-up v-if="params.dropdowns[params.node.name]"></icon-up>
109
- <icon-down v-else></icon-down>
110
- </div>
111
- </div>
112
- </template>
113
- </tiny-popover>`,
114
- name: 'TinyHandlerList',
115
- components: {
116
- IconDown: iconChevronDown(),
117
- IconUp: iconChevronUp(),
118
- HandlerDropdown,
119
- TinyPopover
120
- },
121
- props: {
122
- params: Object
123
- },
124
- computed: {
125
- headWidth() {
126
- const { params } = this
127
-
128
- return params.config.listWidth - 6 - params.config.listIconSize
129
- },
130
- heads() {
131
- const { params, headWidth } = this
132
- const { allItem, node, config } = params
133
- const { headSize } = config
134
- const { info } = node
135
- const { items } = info
136
- const imgStyle = `width:${headSize}px;height:${headSize}px`
137
- const res = []
138
-
139
- items.forEach(({ key }, i) => {
140
- let left
141
-
142
- if (items.length > 1) {
143
- left = Math.floor(((headWidth - headSize) / (items.length - 1)) * i)
144
- } else if (items.length === 1) {
145
- left = Math.floor(headWidth / 2)
146
- }
147
-
148
- const style = `${imgStyle};left:${left}px`
149
-
150
- res.push({ head: allItem[key], style })
151
- })
152
-
153
- return res
154
- }
155
- },
156
- methods: {
157
- toggleStatus() {
158
- const { params } = this
159
- params.dropdowns[params.node.name] = !params.dropdowns[params.node.name]
160
- }
161
- }
162
- }
19
+ const { createNode, createLink, createItem, createConfig } = TinyFlowchart
163
20
 
164
21
  const handlers = [
165
22
  createItem('WX100001', '张三', '转审人', '已转审', '很好', '2018-08-20 12:00', ''),
@@ -209,32 +66,17 @@ chartConfig.headUrl = `${import.meta.env.VITE_APP_BUILD_BASE_URL}static/images/m
209
66
  chartConfig.checkItemStatus = (item) => ~['已转审', '已同意'].indexOf(item.status)
210
67
  chartConfig.adjustPos = (afterNode) => afterNode.raw.name === '2' && (afterNode.y += 1)
211
68
 
212
- const nodeFail = chartData.nodes[chartData.nodes.length - 1]
213
- const linkDash = chartData.links[chartData.links.length - 1]
214
-
215
69
  export default {
216
70
  components: {
217
- TinyFlowchart: Flowchart,
218
- HandlerList
71
+ TinyFlowchart
219
72
  },
220
73
  data() {
221
74
  return {
222
75
  chartData: hooks.markRaw(chartData),
223
- chartConfig: hooks.markRaw(chartConfig),
224
- flag: false
76
+ chartConfig: hooks.markRaw(chartConfig)
225
77
  }
226
78
  },
227
79
  methods: {
228
- toggleStatus() {
229
- this.flag = !this.flag
230
- // 1.更改数据
231
- nodeFail.info.status = this.flag ? 1 : 4
232
- linkDash.info.style = this.flag ? 'solid' : 'dash'
233
- linkDash.info.status = this.flag ? 1 : 3
234
- chartConfig.anchor = this.flag ? 'left' : 'center'
235
- // 2.刷新流程图
236
- this.$refs.chart.refresh()
237
- },
238
80
  onClickNode(_afterNode, _e) {
239
81
  TinyModal.message('click-node')
240
82
  },
@@ -247,90 +89,3 @@ export default {
247
89
  }
248
90
  }
249
91
  </script>
250
-
251
- <style scoped>
252
- /* HandlerList */
253
- .tiny-handler-list {
254
- width: calc(100% - 2px);
255
- height: 100%;
256
- border-radius: 3px;
257
- position: relative;
258
- }
259
- .tiny-handler-list__heads {
260
- position: absolute;
261
- top: 1px;
262
- left: 1px;
263
- height: calc(100% - 2px);
264
- }
265
- .tiny-handler-list__icon {
266
- position: absolute;
267
- top: 1px;
268
- right: 1px;
269
- height: calc(100% - 2px);
270
- display: flex;
271
- align-items: center;
272
- justify-content: center;
273
- font-size: 14px;
274
- }
275
- .tiny-handler-list__head-img {
276
- border-radius: 50%;
277
- position: absolute;
278
- }
279
- /* HandlerDropdown */
280
- .tiny-handler-dropdown {
281
- width: auto;
282
- height: auto;
283
- padding: 6px;
284
- text-align: initial;
285
- cursor: pointer;
286
- }
287
- .tiny-handler-dropdown-item + .tiny-handler-dropdown-item {
288
- margin-top: 6px;
289
- padding-top: 6px;
290
- border-top: 1px dashed #999;
291
- }
292
- .tiny-handler-dropdown-item {
293
- font-size: 12px;
294
- display: grid;
295
- gap: 4px;
296
- grid-template-rows: repeat(3, 20px);
297
- grid-template-columns: 20px 20px 40px auto 40px;
298
- grid-template-areas:
299
- 'icon status status status status'
300
- '. head name key role'
301
- '. date date date date';
302
- align-items: center;
303
- justify-content: start;
304
- }
305
- .tiny-handler-dropdown-item .item-icon {
306
- grid-area: icon;
307
- }
308
- .tiny-handler-dropdown-item .item-status {
309
- grid-area: status;
310
- font-weight: bold;
311
- }
312
- .tiny-handler-dropdown-item .item-head {
313
- grid-area: head;
314
- }
315
- .tiny-handler-dropdown-item .item-name {
316
- grid-area: name;
317
- }
318
- .tiny-handler-dropdown-item .item-key {
319
- grid-area: key;
320
- }
321
- .tiny-handler-dropdown-item .item-role {
322
- grid-area: role;
323
- background: #d9d9d9;
324
- }
325
- .tiny-handler-dropdown-item .item-date {
326
- grid-area: date;
327
- color: #999;
328
- }
329
- .tiny-handler-dropdown-item .item-icon .tiny-svg {
330
- fill: #fff;
331
- }
332
- .tiny-popover.demo-popover-class1.tiny-popper[x-placement^='bottom'] {
333
- margin-top: 2px;
334
- padding: 0;
335
- }
336
- </style>