vue-super-crud 1.7.1 → 1.7.4

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 (273) hide show
  1. package/README.md +42 -10
  2. package/lib/index.css +1 -1
  3. package/lib/super-crud.min.js +2 -2
  4. package/package.json +21 -16
  5. package/src/config/common.js +2 -1
  6. package/src/config/crud.js +3 -3
  7. package/src/index.js +4 -0
  8. package/src/template/formatData.js +75 -87
  9. package/.browserslistrc +0 -3
  10. package/.versionrc.json +0 -36
  11. package/CHANGELOG.md +0 -232
  12. package/babel.config.js +0 -12
  13. package/build/alias.js +0 -10
  14. package/build/build.js +0 -52
  15. package/build/config.js +0 -70
  16. package/deploy.bat +0 -14
  17. package/docs/.vuepress/components/button/base.vue +0 -88
  18. package/docs/.vuepress/components/common/code-format.vue +0 -331
  19. package/docs/.vuepress/components/commonConfig/presetCodeTemplate/base.vue +0 -68
  20. package/docs/.vuepress/components/commonConfig/presetCodeTemplate/customParams.vue +0 -73
  21. package/docs/.vuepress/components/commonConfig/renderType/component.vue +0 -160
  22. package/docs/.vuepress/components/commonConfig/renderType/formatter.vue +0 -49
  23. package/docs/.vuepress/components/commonConfig/renderType/render.vue +0 -91
  24. package/docs/.vuepress/components/commonConfig/renderType/slot.vue +0 -63
  25. package/docs/.vuepress/components/crud/baseUse/baseUse.vue +0 -98
  26. package/docs/.vuepress/components/crud/baseUse/columnAction.vue +0 -72
  27. package/docs/.vuepress/components/crud/baseUse/columnWidth.vue +0 -107
  28. package/docs/.vuepress/components/crud/baseUse/handleRow.vue +0 -65
  29. package/docs/.vuepress/components/crud/baseUse/height.vue +0 -82
  30. package/docs/.vuepress/components/crud/baseUse/index.vue +0 -54
  31. package/docs/.vuepress/components/crud/baseUse/loading.vue +0 -70
  32. package/docs/.vuepress/components/crud/baseUse/pagination.vue +0 -108
  33. package/docs/.vuepress/components/crud/baseUse/selection.vue +0 -114
  34. package/docs/.vuepress/components/crud/baseUse/summaryMethod.vue +0 -118
  35. package/docs/.vuepress/components/crud/baseUse/title.vue +0 -54
  36. package/docs/.vuepress/components/crud/baseUse/toolbar.vue +0 -69
  37. package/docs/.vuepress/components/crud/buttons/common.vue +0 -115
  38. package/docs/.vuepress/components/crud/buttons/fast.vue +0 -82
  39. package/docs/.vuepress/components/crud/contextMenu/base.vue +0 -72
  40. package/docs/.vuepress/components/crud/copy.vue +0 -52
  41. package/docs/.vuepress/components/crud/crudEvents/api.vue +0 -157
  42. package/docs/.vuepress/components/crud/crudEvents/deleteTip.vue +0 -93
  43. package/docs/.vuepress/components/crud/crudEvents/events.vue +0 -188
  44. package/docs/.vuepress/components/crud/dataSort/base.vue +0 -142
  45. package/docs/.vuepress/components/crud/genDynamicColumns/base.vue +0 -53
  46. package/docs/.vuepress/components/crud/genDynamicColumns/dynamicAndFixed.vue +0 -111
  47. package/docs/.vuepress/components/crud/genDynamicColumns/treeDynamic.vue +0 -68
  48. package/docs/.vuepress/components/crud/handleBar/handleRow.vue +0 -65
  49. package/docs/.vuepress/components/crud/handleBar/toolbar.vue +0 -69
  50. package/docs/.vuepress/components/crud/renderType/1.vue +0 -57
  51. package/docs/.vuepress/components/crud/renderType/2.vue +0 -63
  52. package/docs/.vuepress/components/crud/renderType/3.vue +0 -105
  53. package/docs/.vuepress/components/crud/renderType/5.vue +0 -91
  54. package/docs/.vuepress/components/crud/search/1.vue +0 -90
  55. package/docs/.vuepress/components/crud/search/2.vue +0 -78
  56. package/docs/.vuepress/components/crud/search/3.vue +0 -107
  57. package/docs/.vuepress/components/crud/search/base.vue +0 -123
  58. package/docs/.vuepress/components/crud/search/localSearch.vue +0 -124
  59. package/docs/.vuepress/components/crud/search/special.vue +0 -148
  60. package/docs/.vuepress/components/crud/selection/events.vue +0 -47
  61. package/docs/.vuepress/components/crud/selection/pagination.vue +0 -94
  62. package/docs/.vuepress/components/crud/selection/singleSelection.vue +0 -64
  63. package/docs/.vuepress/components/crud/span/base.vue +0 -69
  64. package/docs/.vuepress/components/crud/span/special.vue +0 -75
  65. package/docs/.vuepress/components/crud/summary/base.vue +0 -99
  66. package/docs/.vuepress/components/crud/tableEdit/addDeleteBtn.vue +0 -174
  67. package/docs/.vuepress/components/crud/tableEdit/cellEdit.vue +0 -194
  68. package/docs/.vuepress/components/crud/tableEdit/controlEdit.vue +0 -219
  69. package/docs/.vuepress/components/crud/tableEdit/dialog.vue +0 -172
  70. package/docs/.vuepress/components/crud/tableEdit/free.vue +0 -88
  71. package/docs/.vuepress/components/crud/tableEdit/freeColumn.vue +0 -82
  72. package/docs/.vuepress/components/crud/tableEdit/methods.vue +0 -154
  73. package/docs/.vuepress/components/crud/tableEdit/rowAction.vue +0 -107
  74. package/docs/.vuepress/components/crud/tableEdit/rowBatch.vue +0 -116
  75. package/docs/.vuepress/components/crud/tableEdit/rowClick.vue +0 -98
  76. package/docs/.vuepress/components/crud/validate/base.vue +0 -122
  77. package/docs/.vuepress/components/crud/validate/custom.vue +0 -82
  78. package/docs/.vuepress/components/crud/validate/regulars.vue +0 -88
  79. package/docs/.vuepress/components/crud/validate/relation.vue +0 -91
  80. package/docs/.vuepress/components/crud/validate/tree.vue +0 -82
  81. package/docs/.vuepress/components/dialog/baseUse/base.vue +0 -92
  82. package/docs/.vuepress/components/dialog/baseUse/beforeConfirm.vue +0 -78
  83. package/docs/.vuepress/components/dialog/baseUse/control.vue +0 -79
  84. package/docs/.vuepress/components/dialog/baseUse/drawer.vue +0 -59
  85. package/docs/.vuepress/components/dialog/baseUse/footer.vue +0 -87
  86. package/docs/.vuepress/components/dialog/baseUse/insertSlot.vue +0 -79
  87. package/docs/.vuepress/components/dict/DictLinkage.vue +0 -91
  88. package/docs/.vuepress/components/dict/baseUse.vue +0 -72
  89. package/docs/.vuepress/components/dict/component.vue +0 -82
  90. package/docs/.vuepress/components/dict/localDict.vue +0 -68
  91. package/docs/.vuepress/components/form/baseUse/base.vue +0 -48
  92. package/docs/.vuepress/components/form/baseUse/dataFormat.vue +0 -92
  93. package/docs/.vuepress/components/form/baseUse/deep.vue +0 -57
  94. package/docs/.vuepress/components/form/baseUse/gridLayout.vue +0 -47
  95. package/docs/.vuepress/components/form/baseUse/group.vue +0 -66
  96. package/docs/.vuepress/components/form/baseUse/hidden.vue +0 -40
  97. package/docs/.vuepress/components/form/baseUse/inlineLayout.vue +0 -48
  98. package/docs/.vuepress/components/form/baseUse/label.vue +0 -51
  99. package/docs/.vuepress/components/form/baseUse/tooltip.vue +0 -40
  100. package/docs/.vuepress/components/form/baseUse/validate.vue +0 -52
  101. package/docs/.vuepress/components/form/detail/base.vue +0 -78
  102. package/docs/.vuepress/components/form/detail/border.vue +0 -90
  103. package/docs/.vuepress/components/form/detail/singleDetail.vue +0 -72
  104. package/docs/.vuepress/components/formatData/baseUse.vue +0 -131
  105. package/docs/.vuepress/components/mock/index.js +0 -347
  106. package/docs/.vuepress/components/mockData/custom.vue +0 -69
  107. package/docs/.vuepress/components/mockData/example.vue +0 -290
  108. package/docs/.vuepress/components/positionSlot/base.vue +0 -24
  109. package/docs/.vuepress/components/positionSlot/form.vue +0 -71
  110. package/docs/.vuepress/components/positionSlot/table.vue +0 -85
  111. package/docs/.vuepress/components/tabs/base.vue +0 -57
  112. package/docs/.vuepress/components/temp.js +0 -195
  113. package/docs/.vuepress/config.js +0 -146
  114. package/docs/.vuepress/enhanceApp.js +0 -142
  115. package/docs/.vuepress/public/favicon.ico +0 -0
  116. package/docs/.vuepress/public/super.png +0 -0
  117. package/docs/.vuepress/styles/index.styl +0 -25
  118. package/docs/.vuepress/styles/palette.styl +0 -6
  119. package/docs/README.md +0 -14
  120. package/docs/guide/button/base.md +0 -31
  121. package/docs/guide/commonConfig/jsx.md +0 -166
  122. package/docs/guide/commonConfig/presetCodeTemplate.md +0 -68
  123. package/docs/guide/commonConfig/renderType.md +0 -181
  124. package/docs/guide/crud/baseUse.md +0 -120
  125. package/docs/guide/crud/buttons.md +0 -18
  126. package/docs/guide/crud/config.md +0 -217
  127. package/docs/guide/crud/contextMenu.md +0 -18
  128. package/docs/guide/crud/dataSort.md +0 -66
  129. package/docs/guide/crud/genDynamicColumns.md +0 -145
  130. package/docs/guide/crud/handleBar.md +0 -26
  131. package/docs/guide/crud/renderType.md +0 -4
  132. package/docs/guide/crud/search.md +0 -150
  133. package/docs/guide/crud/selection.md +0 -73
  134. package/docs/guide/crud/span.md +0 -98
  135. package/docs/guide/crud/summary.md +0 -167
  136. package/docs/guide/crud/tableEdit.md +0 -377
  137. package/docs/guide/crud/validate.md +0 -158
  138. package/docs/guide/dialog/baseUse.md +0 -81
  139. package/docs/guide/dict/baseUse.md +0 -174
  140. package/docs/guide/dict/component.md +0 -88
  141. package/docs/guide/dict/config.md +0 -44
  142. package/docs/guide/form/baseUse.md +0 -142
  143. package/docs/guide/form/detail.md +0 -38
  144. package/docs/guide/formatData/baseUse.md +0 -98
  145. package/docs/guide/formatData/config.md +0 -142
  146. package/docs/guide/mockData/base.md +0 -26
  147. package/docs/guide/positionSlot/base.md +0 -41
  148. package/docs/guide/question/base.md +0 -44
  149. package/docs/guide/start/base.md +0 -30
  150. package/docs/guide/tabs/base.md +0 -63
  151. package/examples/App.vue +0 -52
  152. package/examples/Layout/components/AppMain.vue +0 -40
  153. package/examples/Layout/components/Item.vue +0 -29
  154. package/examples/Layout/components/Link.vue +0 -44
  155. package/examples/Layout/components/SidebarItem.vue +0 -93
  156. package/examples/Layout/index.vue +0 -69
  157. package/examples/assets/logo.png +0 -0
  158. package/examples/favicon.ico +0 -0
  159. package/examples/index.html +0 -18
  160. package/examples/main.js +0 -54
  161. package/examples/router/index.js +0 -140
  162. package/examples/store/index.js +0 -0
  163. package/examples/styles/index.scss +0 -63
  164. package/examples/styles/sidebar.scss +0 -226
  165. package/examples/styles/transition.scss +0 -48
  166. package/examples/styles/variables.scss +0 -25
  167. package/examples/views/crud/base.vue +0 -68
  168. package/examples/views/crud/handleRow.vue +0 -84
  169. package/examples/views/crud/search.vue +0 -116
  170. package/examples/views/dashboard/index.vue +0 -244
  171. package/examples/views/dashboard/index1.vue +0 -234
  172. package/examples/views/dashboard/test.vue +0 -9
  173. package/examples/views/formTest/index.vue +0 -168
  174. package/examples/views/nested/menu1/index.vue +0 -7
  175. package/examples/views/nested/menu1/menu1-1/index.vue +0 -7
  176. package/examples/views/nested/menu1/menu1-2/index.vue +0 -7
  177. package/examples/views/nested/menu1/menu1-2/menu1-2-1/index.vue +0 -5
  178. package/examples/views/nested/menu1/menu1-2/menu1-2-2/index.vue +0 -5
  179. package/examples/views/nested/menu1/menu1-3/index.vue +0 -5
  180. package/examples/views/nested/menu2/index.vue +0 -5
  181. package/gulpfile.js +0 -84
  182. package/packages/button/index.vue +0 -189
  183. package/packages/core/components/comp.vue +0 -223
  184. package/packages/core/components/position.vue +0 -135
  185. package/packages/core/components/render.vue +0 -460
  186. package/packages/core/configManager.js +0 -302
  187. package/packages/core/create.js +0 -8
  188. package/packages/core/defaultRender.js +0 -64
  189. package/packages/core/dict/global.js +0 -10
  190. package/packages/core/dict/index.js +0 -432
  191. package/packages/core/dict/mixin.js +0 -94
  192. package/packages/core/event.js +0 -60
  193. package/packages/core/index.js +0 -6
  194. package/packages/core/init.js +0 -122
  195. package/packages/core/mock/genConfig.js +0 -228
  196. package/packages/core/mock/genData.js +0 -422
  197. package/packages/core/mock/index.js +0 -4
  198. package/packages/core/rules.js +0 -111
  199. package/packages/crud/column.vue +0 -205
  200. package/packages/crud/columnAction.vue +0 -207
  201. package/packages/crud/columnCell.vue +0 -146
  202. package/packages/crud/defaultColumn.vue +0 -130
  203. package/packages/crud/drawerColumn.vue +0 -225
  204. package/packages/crud/form.vue +0 -69
  205. package/packages/crud/index.vue +0 -564
  206. package/packages/crud/menuBar.vue +0 -298
  207. package/packages/crud/mixins/cacheHandler.js +0 -36
  208. package/packages/crud/mixins/calcColumnWidth.js +0 -79
  209. package/packages/crud/mixins/calcHeight.js +0 -105
  210. package/packages/crud/mixins/columnHandler.js +0 -128
  211. package/packages/crud/mixins/contextMenu.js +0 -98
  212. package/packages/crud/mixins/dataProcessor.js +0 -202
  213. package/packages/crud/mixins/dialog.js +0 -109
  214. package/packages/crud/mixins/excelHandler.js +0 -150
  215. package/packages/crud/mixins/exposeMethods.js +0 -107
  216. package/packages/crud/mixins/generateDynamicColumns.js +0 -250
  217. package/packages/crud/mixins/props.js +0 -38
  218. package/packages/crud/mixins/searchHandler.js +0 -151
  219. package/packages/crud/mixins/select.js +0 -359
  220. package/packages/crud/mixins/spanMethod.js +0 -288
  221. package/packages/crud/mixins/summary.js +0 -177
  222. package/packages/crud/mixins/tableEdit.js +0 -547
  223. package/packages/crud/mixins/validate.js +0 -219
  224. package/packages/crud/pagination.vue +0 -110
  225. package/packages/crud/search.vue +0 -119
  226. package/packages/crud/searchHeader.vue +0 -231
  227. package/packages/crud/selectBanner.vue +0 -138
  228. package/packages/crud/utils/EditState.js +0 -319
  229. package/packages/crud/utils/excelExport.js +0 -112
  230. package/packages/crud/utils/excelImport.js +0 -112
  231. package/packages/crud/utils/index.js +0 -98
  232. package/packages/dialog/dialog.js +0 -233
  233. package/packages/dialog/dialog.vue +0 -15
  234. package/packages/dialog/index.js +0 -22
  235. package/packages/dict/cascadeFormat.vue +0 -179
  236. package/packages/dict/dateFormat.vue +0 -40
  237. package/packages/dict/form/cascade.vue +0 -61
  238. package/packages/dict/form/checkbox.vue +0 -90
  239. package/packages/dict/form/extendMethod.js +0 -22
  240. package/packages/dict/form/input-base.js +0 -31
  241. package/packages/dict/form/input.js +0 -20
  242. package/packages/dict/form/radio.vue +0 -69
  243. package/packages/dict/form/select.vue +0 -118
  244. package/packages/dict/form/switch.vue +0 -75
  245. package/packages/dict/valueFormat.vue +0 -188
  246. package/packages/directive/dialog/drag.js +0 -86
  247. package/packages/directive/dialog/dragSize.js +0 -42
  248. package/packages/directive/index.js +0 -9
  249. package/packages/directive/insertSlot.js +0 -10
  250. package/packages/form/contextMenu.js +0 -192
  251. package/packages/form/draftDrawer.vue +0 -391
  252. package/packages/form/formAction.vue +0 -97
  253. package/packages/form/formItem.vue +0 -259
  254. package/packages/form/index.vue +0 -451
  255. package/packages/form/props.js +0 -15
  256. package/packages/grid/cell.vue +0 -65
  257. package/packages/grid/index.vue +0 -130
  258. package/packages/group/index.vue +0 -96
  259. package/packages/tabs/index.vue +0 -290
  260. package/packages/tooltip/index.js +0 -9
  261. package/packages/tooltip/tooltip.vue +0 -32
  262. package/packages/tooltip/tooltipComponent.js +0 -38
  263. package/packages/verifyInput/index.vue +0 -131
  264. package/styles/button.scss +0 -3
  265. package/styles/crud.scss +0 -425
  266. package/styles/dialog.scss +0 -95
  267. package/styles/form.scss +0 -532
  268. package/styles/group.scss +0 -78
  269. package/styles/index.scss +0 -94
  270. package/styles/tabs.scss +0 -139
  271. package/styles/verifyInput.scss +0 -56
  272. package/vue-jsx-sync.js +0 -90
  273. package/vue.config.js +0 -54
@@ -1,96 +0,0 @@
1
- <template>
2
- <div
3
- v-if="!hidden"
4
- :class="[b({ header: !isHeader, arrow: disabled, border: border })]"
5
- >
6
- <slot name="tabs" />
7
- <el-collapse v-model="activeName" :value="text" @change="handleChange">
8
- <el-collapse-item :name="1" :disabled="disabled">
9
- <template #title>
10
- <div v-if="$slots.header && !hiddenHeader" :class="[b('header')]">
11
- <slot name="header" />
12
- </div>
13
- <div
14
- v-else-if="(label || icon) && !hiddenHeader"
15
- :class="[b('header')]"
16
- >
17
- <i v-if="icon" :class="[icon, b('icon')]" />
18
- <h1 v-if="label" :class="[b('title'), tag ? b('tag') : '']">
19
- {{ label }}
20
- </h1>
21
- </div>
22
- </template>
23
- <slot />
24
- </el-collapse-item>
25
- </el-collapse>
26
- </div>
27
- </template>
28
-
29
- <script>
30
- import create from "core/create";
31
-
32
- export default create({
33
- name: "group",
34
- data() {
35
- return {
36
- activeName: "",
37
- };
38
- },
39
- props: {
40
- border: {
41
- type: Boolean,
42
- default: true,
43
- },
44
- disabled: {
45
- type: Boolean,
46
- default: false,
47
- },
48
- hiddenHeader: {
49
- type: Boolean,
50
- default: false,
51
- },
52
- collapse: {
53
- type: Boolean,
54
- default: true,
55
- },
56
- icon: {
57
- type: String,
58
- },
59
- hidden: {
60
- type: Boolean,
61
- default: false,
62
- },
63
- label: {
64
- type: String,
65
- },
66
- tag: {
67
- type: Boolean,
68
- default: true,
69
- },
70
- },
71
- watch: {
72
- text(val) {
73
- this.activeName = [val];
74
- },
75
- },
76
- computed: {
77
- text() {
78
- return this.collapse ? 1 : 0;
79
- },
80
- isHeader() {
81
- return (
82
- (this.$slots.header && !this.hiddenHeader) ||
83
- ((this.label || this.icon) && !this.hiddenHeader)
84
- );
85
- },
86
- },
87
- created() {
88
- this.activeName = [this.text];
89
- },
90
- methods: {
91
- handleChange(activeNames) {
92
- this.$emit("change", activeNames);
93
- },
94
- },
95
- });
96
- </script>
@@ -1,290 +0,0 @@
1
- <template>
2
- <div :class="[b(), { [b('border')]: border || $attrs.type === 'card' }]">
3
- <!-- 标签页头部 -->
4
- <el-tabs
5
- v-model="activeName"
6
- v-if="tabList.length"
7
- v-bind="$attrs"
8
- v-on="omitListeners"
9
- @tab-click="handleTabClick"
10
- >
11
- <!-- 全部标签页 -->
12
- <el-tab-pane v-if="all" :label="allConfig.label" name="all" />
13
-
14
- <!-- 动态标签页 -->
15
- <el-tab-pane
16
- v-for="(item, index) in tabList"
17
- :key="getItemKey(item, index)"
18
- :label="getItemLabel(item)"
19
- :name="getItemName(item, index)"
20
- v-bind="getItem(item)"
21
- >
22
- <template #label>
23
- <i v-if="item.icon" :class="item.icon"></i>
24
- <slot
25
- v-if="$scopedSlots[getItemName(item, index) + '-label']"
26
- :name="getItemName(item, index) + '-label'"
27
- v-bind="item"
28
- />
29
- <template v-else>{{ getItemLabel(item) }}</template>
30
- <i
31
- v-if="refresh && cache && activeName === getItemName(item, index)"
32
- class="el-icon-refresh"
33
- :class="{ rotating: isRefreshing }"
34
- title="刷新"
35
- @click.stop="refreshTab(item, index)"
36
- />
37
- </template>
38
- </el-tab-pane>
39
- </el-tabs>
40
-
41
- <!-- 插槽内容 -->
42
- <slot />
43
-
44
- <!-- 标签页内容区 -->
45
- <div :class="[b('content'), { [b('is-refresh')]: isRefreshing }]">
46
- <transition-group name="fade-transform" mode="out-in">
47
- <template v-for="(item, index) in tabList">
48
- <div
49
- v-if="shouldRenderTab(item, index)"
50
- :key="getItemKey(item, index)"
51
- v-show="currentTab === getItemName(item, index)"
52
- class="tab-pane"
53
- :class="{ 'is-active': currentTab === getItemName(item, index) }"
54
- >
55
- <slot
56
- v-if="$scopedSlots[getItemName(item, index)]"
57
- :name="getItemName(item, index)"
58
- />
59
- <Render
60
- v-else
61
- v-bind="item"
62
- :item="item"
63
- :scope="{
64
- row: item.value,
65
- }"
66
- />
67
- </div>
68
- </template>
69
- </transition-group>
70
- </div>
71
- </div>
72
- </template>
73
-
74
- <script>
75
- import { create } from "core";
76
- import { isPlainObject, omit } from "lodash-es";
77
- import Render from "core/components/render";
78
-
79
- export default create({
80
- name: "tabs",
81
-
82
- props: {
83
- value: {},
84
- tabList: {
85
- type: Array,
86
- default: () => [],
87
- },
88
- cache: {
89
- type: Boolean,
90
- default: true,
91
- },
92
- all: [Boolean, Object],
93
- border: Boolean,
94
- cacheActive: {
95
- type: Boolean,
96
- default: true,
97
- },
98
- refresh: {
99
- type: Boolean,
100
- default: false,
101
- },
102
- },
103
- components: {
104
- Render,
105
- },
106
-
107
- data() {
108
- return {
109
- activeName: "",
110
- renderedTabs: new Set(),
111
- currentTab: "",
112
- isRefreshing: false,
113
- scope: { row: {} },
114
- };
115
- },
116
-
117
- computed: {
118
- omitListeners() {
119
- return omit(this.$listeners, ["tab-click", "input"]);
120
- },
121
-
122
- allConfig() {
123
- const defaultConfig = {
124
- label: "全部",
125
- name: null,
126
- };
127
- return isPlainObject(this.all)
128
- ? { ...defaultConfig, ...this.all }
129
- : defaultConfig;
130
- },
131
- },
132
-
133
- watch: {
134
- value: {
135
- handler(val) {
136
- this.initActiveName(val);
137
- },
138
- immediate: true,
139
- },
140
-
141
- activeName: {
142
- handler(val) {
143
- if (!val) return;
144
-
145
- this.handleTabTransition(val);
146
- this.renderedTabs.add(val);
147
-
148
- const emitValue = this.all && val === "all" ? this.allConfig.name : val;
149
- this.$emit("input", emitValue);
150
- },
151
- immediate: true,
152
- },
153
-
154
- tabList: {
155
- handler() {
156
- this.initActiveName(this.value);
157
- },
158
- },
159
- },
160
-
161
- mounted() {
162
- // 从路由中恢复激活的标签
163
- if (this.cacheActive && this.$route?.query.tabActive) {
164
- this.activeName = this.$route.query.tabActive;
165
- }
166
- this.$nextTick(this.updateContentHeight);
167
-
168
- // 创建 ResizeObserver 实例
169
- this.resizeObserver = new ResizeObserver(() => {
170
- this.updateContentHeight();
171
- });
172
-
173
- // 观察活动面板
174
- this.observeActivePane();
175
- },
176
- updated() {
177
- this.$nextTick(this.updateContentHeight);
178
- },
179
-
180
- beforeDestroy() {
181
- // 清理 ResizeObserver
182
- if (this.resizeObserver) {
183
- this.resizeObserver.disconnect();
184
- }
185
- },
186
-
187
- methods: {
188
- handleTabClick(tab) {
189
- this.$nextTick(() => {
190
- if (this.cacheActive) {
191
- this.updateRouteQuery(this.activeName);
192
- }
193
- this.$emit(
194
- "tab-click",
195
- tab,
196
- this.tabList.find(
197
- (item) => this.getItemName(item) === this.activeName
198
- )
199
- );
200
- });
201
- },
202
-
203
- initActiveName(val) {
204
- if (!this.tabList.length) return;
205
-
206
- this.activeName =
207
- val || (this.all && "all") || this.getItemName(this.tabList[0], 0);
208
- },
209
-
210
- getItem(item) {
211
- return isPlainObject(item) ? item : {};
212
- },
213
-
214
- getItemKey(item, index) {
215
- return `${item?.label || index}`;
216
- },
217
-
218
- getItemLabel(item) {
219
- return item?.label || item;
220
- },
221
-
222
- getItemName(item, index) {
223
- return `${item?.name || item?.value || index}`;
224
- },
225
-
226
- shouldRenderTab(item, index) {
227
- const tabName = this.getItemName(item, index);
228
- const shouldCache = item.cache === undefined ? this.cache : item.cache;
229
- return shouldCache
230
- ? this.renderedTabs.has(tabName)
231
- : this.currentTab === tabName;
232
- },
233
-
234
- updateRouteQuery(val) {
235
- if (!this.$route) return;
236
-
237
- this.$router.replace({
238
- path: this.$route.path,
239
- query: {
240
- ...this.$route.query,
241
- tabActive: val,
242
- },
243
- });
244
- },
245
-
246
- async refreshTab(item, index) {
247
- if (this.isRefreshing) return;
248
-
249
- this.$emit("refresh", item, index);
250
- const tabName = this.getItemName(item, index);
251
- this.isRefreshing = true;
252
-
253
- // 移除缓存
254
- this.renderedTabs.delete(tabName);
255
- await this.$nextTick();
256
-
257
- // 重新渲染
258
- setTimeout(() => {
259
- this.renderedTabs.add(tabName);
260
- this.isRefreshing = false;
261
- }, 300);
262
- },
263
- updateContentHeight() {
264
- // 获取当前激活的面板
265
- const activePane = this.$el.querySelector(".tab-pane.is-active");
266
- if (activePane) {
267
- // 获取面板实际高度并设置给容器
268
- const height = activePane.offsetHeight;
269
- const content = this.$el.querySelector(".sc-tabs__content");
270
- if (content) {
271
- content.style.height = `${height}px`;
272
- }
273
- }
274
- },
275
- observeActivePane() {
276
- const activePane = this.$el.querySelector(".tab-pane.is-active");
277
- if (activePane && this.resizeObserver) {
278
- this.resizeObserver.disconnect(); // 先断开之前的观察
279
- this.resizeObserver.observe(activePane); // 观察新的活动面板
280
- }
281
- },
282
-
283
- async handleTabTransition(val) {
284
- this.currentTab = val;
285
- await this.$nextTick();
286
- this.observeActivePane(); // 切换标签页时重新观察
287
- },
288
- },
289
- });
290
- </script>
@@ -1,9 +0,0 @@
1
- import tooltipComponent from "./tooltipComponent.js";
2
-
3
- export default function (options) {
4
- let DialogConstructor = window.Vue.extend(tooltipComponent(options));
5
- let instance = new DialogConstructor();
6
- instance.vm = instance.$mount();
7
- document.body.appendChild(instance.vm.$el);
8
- return instance.vm;
9
- }
@@ -1,32 +0,0 @@
1
- <script>
2
- import tooltip from "./index";
3
- export default {
4
- props: {
5
- hide: {},
6
- },
7
- render(h) {
8
- return !this.hide ? (
9
- <span
10
- class="tooltip-wrapper"
11
- on={{
12
- mouseenter: (e) => {
13
- this.vm = tooltip({
14
- placement: "top",
15
- ...this.$attrs,
16
- target: e.target,
17
- });
18
- this.vm.show();
19
- },
20
- mouseleave: (e) => {
21
- this.vm && this.vm.hide();
22
- },
23
- }}
24
- >
25
- {this.$slots.default}
26
- </span>
27
- ) : (
28
- this.$slots.default
29
- );
30
- },
31
- };
32
- </script>
@@ -1,38 +0,0 @@
1
- import create from "core/create";
2
- export default (options = {}) => {
3
- return create({
4
- name: "tooltip",
5
- methods: {
6
- show() {
7
- if (!options.content) return;
8
- const tooltip = this.$refs.tooltip;
9
- tooltip.referenceElm = options.target;
10
- if (options.overflow) {
11
- const dom = options.target;
12
- const range = document.createRange();
13
- range.setStart(dom, 0);
14
- range.setEnd(dom, dom.childNodes.length);
15
- const rangeWidth = range.getBoundingClientRect().width;
16
- const selfWidth = dom.getBoundingClientRect().width;
17
- const isOverflowing =
18
- rangeWidth > selfWidth || dom.scrollWidth > dom.offsetWidth;
19
- if (!isOverflowing) return;
20
- }
21
- tooltip.setExpectedState(true);
22
- tooltip.handleShowPopper();
23
- },
24
- hide() {
25
- const tooltip = this.$refs.tooltip;
26
- tooltip.setExpectedState(false);
27
- tooltip.handleClosePopper();
28
- this.$destroy();
29
- this.$el.remove();
30
- },
31
- },
32
- render(h) {
33
- return (
34
- <el-tooltip ref="tooltip" props={options} attrs={options}></el-tooltip>
35
- );
36
- },
37
- });
38
- };
@@ -1,131 +0,0 @@
1
- <template>
2
- <div :class="[b(), inputSize ? 'sc-verify-input--' + inputSize : '']">
3
- <input
4
- v-for="(code, index) in codes"
5
- :key="index"
6
- type="number"
7
- min="0"
8
- max="9"
9
- required
10
- ref="codeInput"
11
- v-model="codes[index]"
12
- @keydown="handleKeyDown(index, $event)"
13
- @paste="handlePaste($event)"
14
- :disabled="inputDisabled"
15
- placeholder=""
16
- v-bind="$attrs"
17
- v-on="omitListeners"
18
- />
19
- </div>
20
- </template>
21
-
22
- <script>
23
- import { create } from "core";
24
- import { omit } from "lodash-es";
25
- export default create({
26
- name: "verify-input",
27
- inject: {
28
- elForm: {
29
- default: "",
30
- },
31
- elFormItem: {
32
- default: "",
33
- },
34
- },
35
- props: {
36
- length: {
37
- type: Number,
38
- default: 6,
39
- },
40
- size: String,
41
- disabled: {
42
- type: Boolean,
43
- default: false,
44
- },
45
- allowLetters: {
46
- type: Boolean,
47
- default: false,
48
- },
49
- },
50
- data() {
51
- return {
52
- codes: Array.from({ length: this.length }, () => ""),
53
- timer: null,
54
- };
55
- },
56
- mounted() {
57
- this.$nextTick(() => {
58
- this.$refs.codeInput[0].focus();
59
- });
60
- },
61
- watch: {
62
- value(val) {
63
- this.codes = val.split("");
64
- },
65
- codes(val) {
66
- this.$emit("input", val.join(""));
67
- },
68
- },
69
- computed: {
70
- omitListeners() {
71
- return omit(this.$listeners, ["input"]);
72
- },
73
- _elFormItemSize() {
74
- return (this.elFormItem || {}).elFormItemSize;
75
- },
76
- inputSize() {
77
- return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;
78
- },
79
- inputDisabled() {
80
- return this.disabled || (this.elForm || {}).disabled;
81
- },
82
- },
83
- methods: {
84
- handleKeyDown(index, event) {
85
- if (event.key >= 0 && event.key <= 9) {
86
- this.codes.splice(index, 1, "");
87
- this.timer = setTimeout(() => {
88
- if (index < this.codes.length - 1) {
89
- this.$refs.codeInput[index + 1].focus();
90
- }
91
- }, 10);
92
- } else if (event.key === "Backspace") {
93
- this.timer = setTimeout(() => {
94
- if (index > 0) {
95
- this.$refs.codeInput[index - 1].focus();
96
- }
97
- }, 10);
98
- }
99
- },
100
- handlePaste(event) {
101
- event.preventDefault();
102
- const pastedText = event.clipboardData.getData("text");
103
- const numbers = pastedText
104
- .replace(/[^\d]/g, "")
105
- .split("")
106
- .slice(0, this.length);
107
-
108
- if (numbers.length > 0) {
109
- this.codes = Array.from(
110
- { length: this.length },
111
- (_, index) => numbers[index] || ""
112
- );
113
-
114
- // 如果输入完成,聚焦到最后一个输入框
115
- if (numbers.length >= this.length) {
116
- this.$refs.codeInput[this.length - 1].focus();
117
- } else {
118
- // 否则聚焦到下一个空输入框
119
- this.$refs.codeInput[numbers.length].focus();
120
- }
121
- }
122
- },
123
- focus(index = 0) {
124
- this.$refs.codeInput[index].focus();
125
- },
126
- },
127
- beforeDestroy() {
128
- clearTimeout(this.timer); // 清除定时器
129
- },
130
- });
131
- </script>
@@ -1,3 +0,0 @@
1
- .sc-button + .sc-button {
2
- margin-left: 10px;
3
- }