@idooel/components 0.0.2-beta.3 → 0.0.2-beta.30

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 (113) hide show
  1. package/README.md +98 -98
  2. package/dist/@idooel/components.esm.js +3622 -1592
  3. package/dist/@idooel/components.umd.js +3676 -1647
  4. package/jsconfig.json +7 -7
  5. package/package.json +64 -50
  6. package/packages/alert/index.js +4 -4
  7. package/packages/alert/src/index.vue +45 -45
  8. package/packages/batch-export/index.js +4 -4
  9. package/packages/batch-export/src/index.vue +104 -104
  10. package/packages/business-components/modal-fsm/index.js +4 -4
  11. package/packages/business-components/modal-fsm/src/index.vue +163 -163
  12. package/packages/business-components/modal-import/index.js +4 -4
  13. package/packages/business-components/modal-import/src/index.vue +222 -139
  14. package/packages/business-components/modal-timeline/index.js +4 -4
  15. package/packages/business-components/modal-timeline/src/index.vue +77 -77
  16. package/packages/business-components/tabs-sub-center/index.js +4 -4
  17. package/packages/business-components/tabs-sub-center/src/index.vue +116 -116
  18. package/packages/button/index.js +4 -4
  19. package/packages/button/src/index.vue +65 -65
  20. package/packages/checkbox/index.js +4 -4
  21. package/packages/checkbox/src/index.vue +52 -52
  22. package/packages/composite-components/button-group/index.js +4 -4
  23. package/packages/composite-components/button-group/src/index.vue +151 -151
  24. package/packages/composite-components/form-attachment/src/index.vue +14 -14
  25. package/packages/composite-components/form-img-crop/index.js +4 -4
  26. package/packages/composite-components/form-img-crop/src/index.vue +131 -131
  27. package/packages/composite-components/modal-confirm/index.js +4 -4
  28. package/packages/composite-components/modal-confirm/src/index.vue +103 -103
  29. package/packages/composite-components/modal-form/index.js +4 -4
  30. package/packages/composite-components/modal-form/src/index.vue +230 -230
  31. package/packages/composite-components/modal-img-crop/index.js +4 -4
  32. package/packages/composite-components/modal-img-crop/src/index.vue +298 -298
  33. package/packages/composite-components/modal-table/index.js +4 -4
  34. package/packages/composite-components/modal-table/src/index.vue +155 -155
  35. package/packages/composite-components/modal-tree/index.js +4 -4
  36. package/packages/composite-components/modal-tree/src/index.vue +75 -75
  37. package/packages/composite-components/search-area/index.js +4 -4
  38. package/packages/composite-components/search-area/src/index.vue +239 -237
  39. package/packages/composite-components/search-area/src/label.vue +35 -35
  40. package/packages/composite-components/select-entity-modal-table/index.js +4 -4
  41. package/packages/composite-components/select-entity-modal-table/src/index.vue +171 -171
  42. package/packages/date/index.js +4 -4
  43. package/packages/date/src/index.vue +112 -112
  44. package/packages/date-range/index.js +4 -4
  45. package/packages/date-range/src/index.vue +47 -47
  46. package/packages/form/index.js +4 -4
  47. package/packages/form/src/index.vue +393 -319
  48. package/packages/icon/index.js +4 -4
  49. package/packages/icon/src/index.vue +31 -31
  50. package/packages/index.js +159 -153
  51. package/packages/input/index.js +4 -4
  52. package/packages/input/src/index.vue +35 -35
  53. package/packages/input-number/index.js +4 -4
  54. package/packages/input-number/src/index.vue +23 -23
  55. package/packages/loading/index.js +4 -4
  56. package/packages/loading/src/index.vue +36 -36
  57. package/packages/meta/provider.js +4 -0
  58. package/packages/modal/index.js +4 -4
  59. package/packages/modal/src/index.vue +184 -184
  60. package/packages/models/form-group-model/index.js +4 -4
  61. package/packages/models/form-group-model/src/index.vue +271 -273
  62. package/packages/models/form-model/index.js +4 -4
  63. package/packages/models/form-model/src/index.vue +236 -232
  64. package/packages/models/step-model/index.js +4 -4
  65. package/packages/models/step-model/src/index.vue +224 -224
  66. package/packages/models/tree-table-model/README.md +0 -0
  67. package/packages/models/tree-table-model/index.js +4 -4
  68. package/packages/models/tree-table-model/src/index.vue +964 -689
  69. package/packages/pagination/index.js +5 -0
  70. package/packages/pagination/src/index.vue +372 -0
  71. package/packages/radio/index.js +4 -4
  72. package/packages/radio/src/index.vue +56 -56
  73. package/packages/select/index.js +4 -4
  74. package/packages/select/src/index.vue +113 -105
  75. package/packages/select-entity/index.js +4 -4
  76. package/packages/select-entity/src/index.vue +119 -119
  77. package/packages/table/index.js +4 -4
  78. package/packages/table/src/action.vue +176 -172
  79. package/packages/table/src/index.vue +605 -319
  80. package/packages/tabs/index.js +4 -4
  81. package/packages/tabs/src/index.vue +55 -55
  82. package/packages/text/index.js +4 -4
  83. package/packages/text/src/index.vue +47 -47
  84. package/packages/text-editor/index.js +4 -4
  85. package/packages/text-editor/src/index.vue +72 -72
  86. package/packages/textarea/index.js +4 -4
  87. package/packages/textarea/src/index.vue +57 -57
  88. package/packages/theme/form.scss +21 -21
  89. package/packages/theme/index.scss +43 -43
  90. package/packages/theme/overrid.scss +7 -7
  91. package/packages/theme/styleClass.scss +2 -2
  92. package/packages/theme/variables.scss +55 -55
  93. package/packages/timeline/index.js +4 -4
  94. package/packages/timeline/src/index.vue +257 -257
  95. package/packages/tpl/index.js +4 -4
  96. package/packages/tpl/src/index.vue +55 -55
  97. package/packages/tree/index.js +4 -4
  98. package/packages/tree/src/TreeNode.vue +29 -29
  99. package/packages/tree/src/index.vue +101 -101
  100. package/packages/tree-select/index.js +4 -4
  101. package/packages/tree-select/src/index.vue +142 -142
  102. package/packages/upload/index.js +4 -4
  103. package/packages/upload/src/index.vue +998 -494
  104. package/packages/utils/README.md +172 -0
  105. package/packages/utils/index.js +66 -62
  106. package/packages/utils/runtime-context/dataPoolAPI.js +501 -0
  107. package/packages/utils/runtime-context/globalDataPool.js +279 -0
  108. package/packages/utils/runtime-context/index.js +76 -0
  109. package/packages/utils/runtime-context/modelSchema.js +174 -0
  110. package/scripts/rollup.config.js +42 -42
  111. package/scripts/rollup.esm.config.js +11 -11
  112. package/scripts/rollup.umd.config.js +17 -14
  113. package/vitest.config.js +17 -0
@@ -0,0 +1,5 @@
1
+ import ElePagination from './src/index.vue'
2
+
3
+ ElePagination.install = Vue => Vue.component(ElePagination.name, ElePagination)
4
+
5
+ export default ElePagination
@@ -0,0 +1,372 @@
1
+ <template>
2
+ <div class="ele-page--wrapper">
3
+ <section class="ele-page--panel">
4
+ <div class="total">
5
+
6
+ <span v-if="!currentTotalLoading">{{ currentTotal }}</span>
7
+ <a-icon v-else type="loading" />
8
+
9
+ </div>
10
+ <div class="page">
11
+ <div class="home" @click="handleClickHome">首页</div>
12
+ <div :class="['page--prev', loading && 'page-disabled', disabledPrev && 'page-disabled']" @click="handleClickPrev">
13
+ <a-icon type="left"></a-icon>
14
+ </div>
15
+ <div class="page--current">
16
+ {{ currentPage }}
17
+ </div>
18
+ <div :class="['page--next', loading && 'page-disabled', disabledNext && 'page-disabled']" @click="handleClickNext">
19
+ <a-icon type="right"></a-icon>
20
+ </div>
21
+ </div>
22
+ <div class="size">
23
+ <a-select v-model="currentPageSize" @change="handleChangePageSize">
24
+ <a-select-option v-for="item in innerPageSizeOptions" :value="item" :key="item">
25
+ {{ item }} 条/页
26
+ </a-select-option>
27
+ </a-select>
28
+ </div>
29
+ </section>
30
+ </div>
31
+ </template>
32
+
33
+ <script>
34
+ import { util } from '@idooel/shared'
35
+ const { toNumber } = util
36
+ export default {
37
+ name: 'ele-pagination',
38
+ props: {
39
+ query: {
40
+ type: Object,
41
+ default: () => ({})
42
+ },
43
+ data: {
44
+ type: Array,
45
+ default: () => ([])
46
+ },
47
+ loading: {
48
+ type: Boolean,
49
+ default: false
50
+ },
51
+ total: {
52
+ type: [String, Number],
53
+ default: 0
54
+ },
55
+ pageSizeOptions: {
56
+ type: Array,
57
+ default: () => ([50, 100, 500, 1000])
58
+ },
59
+ current: {
60
+ type: [Number, String],
61
+ default: 1
62
+ },
63
+ pageSize: {
64
+ type: [Number, String],
65
+ default: 10
66
+ },
67
+ disabledNextButton: {
68
+ type: Boolean,
69
+ default: false
70
+ }
71
+ },
72
+ data () {
73
+ return {
74
+ currentPage: 1,
75
+ currentPageSize: 0,
76
+ disabledPrev: false,
77
+ disabledNext: false,
78
+ currentTotal: 0,
79
+ currentTotalLoading: true,
80
+ cacheQuery: []
81
+ }
82
+ },
83
+ computed: {
84
+ innerPageSizeOptions () {
85
+ const normalized = this.pageSizeOptions
86
+ .map(item => toNumber(item))
87
+ .filter(n => typeof n === 'number' && Number.isFinite(n) && n > 0)
88
+
89
+ // 兜底:避免 a-select option 出现 undefined/空数组
90
+ return normalized.length ? normalized : [10]
91
+ },
92
+ pageQuery () {
93
+ const { currentPage, pageSize } = this.query
94
+ return { currentPage, pageSize }
95
+ }
96
+ },
97
+ watch: {
98
+ current: {
99
+ handler (current) {
100
+ this.syncCurrentFromProps(current)
101
+ },
102
+ immediate: true
103
+ },
104
+ total: {
105
+ handler (total) {
106
+ this.currentTotalLoading = true
107
+ if (typeof total === 'number') {
108
+ this.currentTotal = total
109
+ this.currentTotalLoading = false
110
+ }
111
+ },
112
+ immediate: true
113
+ },
114
+ query: {
115
+ handler (newQuery, oldQuery) {
116
+ // 1s内多次请求合并
117
+ // clearTimeout(this.timer)
118
+ // this.timer = setTimeout(() => {
119
+ // this.requestHandler(this.total, { ...newQuery, ...this.pageQuery })
120
+ // }, 1000)
121
+ }
122
+ },
123
+ data: {
124
+ handler (data) {
125
+ if (!this.currentPageSize) return
126
+ if (data.length != this.currentPageSize) {
127
+ this.disabledNext = true
128
+ } else {
129
+ this.disabledNext = false
130
+ }
131
+ },
132
+ immediate: true
133
+ },
134
+ disabledNextButton: {
135
+ handler (status) {
136
+ this.disabledNext = status
137
+ },
138
+ immediate: true
139
+ },
140
+ pageSize: {
141
+ handler (size) {
142
+ this.syncPageSizeFromProps(size)
143
+ },
144
+ immediate: true
145
+ }
146
+ },
147
+ methods: {
148
+ handleChangePageSize (value) {
149
+ const nextSize = this.normalizePageSize(value, this.currentPageSize || 10)
150
+ if (!nextSize) return
151
+
152
+ this.currentPageSize = nextSize
153
+ // pageSize 变化建议回到第一页,避免页码越界
154
+ this.currentPage = 1
155
+ this.setDisabledPrev(this.currentPage)
156
+
157
+ // 仅用户交互时触发
158
+ this.$emit('showSizeChange', this.currentPage, this.currentPageSize)
159
+ },
160
+ setDisabledNext (status) {
161
+ this.disabledNext = status
162
+ },
163
+ handleClickHome () {
164
+ this.currentPage = 1
165
+ this.setDisabledPrev(this.currentPage)
166
+ // 仅用户交互时触发
167
+ this.$emit('change', this.currentPage, this.currentPageSize)
168
+ },
169
+ setDisabledPrev (currentPage) {
170
+ if (currentPage > 1) {
171
+ this.disabledPrev = false
172
+ } else {
173
+ this.disabledPrev = true
174
+ }
175
+ },
176
+ handleClickPrev () {
177
+ if (this.currentPage > 1) {
178
+ this.currentPage -= 1
179
+ this.setDisabledPrev(this.currentPage)
180
+ // 仅用户交互时触发
181
+ this.$emit('change', this.currentPage, this.currentPageSize)
182
+ }
183
+ },
184
+ handleClickNext () {
185
+ if (this.disabledNext) return
186
+ this.currentPage += 1
187
+ this.setDisabledPrev(this.currentPage)
188
+ // 仅用户交互时触发
189
+ this.$emit('change', this.currentPage, this.currentPageSize)
190
+ },
191
+ normalizePage (value, fallback = 1) {
192
+ const n = toNumber(value)
193
+ if (typeof n !== 'number' || !Number.isFinite(n)) return fallback
194
+ const page = Math.floor(n)
195
+ return page >= 1 ? page : fallback
196
+ },
197
+ normalizePageSize (value, fallback = 10) {
198
+ const n = toNumber(value)
199
+ if (typeof n !== 'number' || !Number.isFinite(n)) return fallback
200
+ const size = Math.floor(n)
201
+ return size >= 1 ? size : fallback
202
+ },
203
+ // props 同步:只更新内部 state,不触发 emit
204
+ syncCurrentFromProps (current) {
205
+ this.currentPage = this.normalizePage(current, 1)
206
+ this.setDisabledPrev(this.currentPage)
207
+ },
208
+ // props 同步:只更新内部 state,不触发 emit
209
+ syncPageSizeFromProps (size) {
210
+ this.currentPageSize = this.normalizePageSize(size, this.currentPageSize || 10)
211
+ }
212
+ },
213
+ destroyed () {
214
+ this.cacheQuery = []
215
+ }
216
+ }
217
+ </script>
218
+ <style lang="scss" scoped>
219
+ @keyframes ani-load-loop {
220
+ 0% {
221
+ transform: rotate(0);
222
+ }
223
+ 50% {
224
+ transform: rotate(180deg);
225
+ }
226
+ 100% {
227
+ transform: rotate(1turn);
228
+ }
229
+ }
230
+ .ele-page--wrapper {
231
+ width: 100%;
232
+ height: 100%;
233
+ background: transparent;
234
+ border-top: unset;
235
+ padding: 0px 16px 16px 16px;
236
+ box-sizing: border-box;
237
+ display: flex;
238
+ flex-direction: row;
239
+ align-items: center;
240
+ justify-content: end;
241
+ /* margin-left: 16px;
242
+ margin-right: 16px; */
243
+ .ele-page--panel {
244
+ width: auto;
245
+ height: 32px;
246
+ display: flex;
247
+ flex-direction: row;
248
+ align-items: center;
249
+ .total {
250
+ .ivu-load-loop {
251
+ color: #409EFF;
252
+ animation: ani-load-loop 1s linear infinite;
253
+ }
254
+ color: rgba(0, 0, 0, 0.88);
255
+ font-family: 'AlibabaPuHuiTi_2_55_Regular';
256
+ font-size: 14px;
257
+ font-weight: 400;
258
+ }
259
+ .page {
260
+ margin-left: 12px;
261
+ display: flex;
262
+ flex-direction: row;
263
+ .home {
264
+ height: auto;
265
+ width: auto;
266
+ color: rgba(0, 0, 0, 0.88);
267
+ padding: 5px 4px 5px 4px;
268
+ text-align: center;
269
+ font-family: 'AlibabaPuHuiTi_2_55_Regular';
270
+ font-size: 14px;
271
+ font-weight: 400;
272
+ border-radius: 2px;
273
+ border: 1px solid rgba(0, 0, 0, 0.16);
274
+ background: #FFF;
275
+ box-sizing: border-box;
276
+ cursor: pointer;
277
+ }
278
+ .page--prev {
279
+ margin-left: 12px;
280
+ cursor: pointer;
281
+ height: 32px;
282
+ width: 32px;
283
+ color: rgba(0, 0, 0, 0.88);
284
+ font-family: 'AlibabaPuHuiTi_2_55_Regular';
285
+ font-size: 14px;
286
+ font-weight: 400;
287
+ border-radius: 2px;
288
+ border: 1px solid rgba(0, 0, 0, 0.16);
289
+ background: #FFF;
290
+ box-sizing: border-box;
291
+ display: flex;
292
+ flex-direction: row;
293
+ align-items: center;
294
+ justify-content: center;
295
+ .ivu-icon-ios-arrow-left {
296
+ font-size: 16px;
297
+ }
298
+ }
299
+ .page--current {
300
+ margin-left: 12px;
301
+ height: 32px;
302
+ width: 32px;
303
+ color: rgba(0, 0, 0, 0.88);
304
+ font-family: 'AlibabaPuHuiTi_2_55_Regular';
305
+ font-size: 14px;
306
+ font-weight: 400;
307
+ border-radius: 2px;
308
+ background: #409EFF;
309
+ box-sizing: border-box;
310
+ display: flex;
311
+ flex-direction: row;
312
+ align-items: center;
313
+ justify-content: center;
314
+ color: #FFF;
315
+ }
316
+ .page--next {
317
+ margin-left: 12px;
318
+ cursor: pointer;
319
+ height: 32px;
320
+ width: 32px;
321
+ color: rgba(0, 0, 0, 0.88);
322
+ font-family: 'AlibabaPuHuiTi_2_55_Regular';
323
+ font-size: 14px;
324
+ font-weight: 400;
325
+ border-radius: 2px;
326
+ border: 1px solid rgba(0, 0, 0, 0.16);
327
+ background: #FFF;
328
+ box-sizing: border-box;
329
+ display: flex;
330
+ flex-direction: row;
331
+ align-items: center;
332
+ justify-content: center;
333
+ .ivu-icon-ios-arrow-right {
334
+ font-size: 16px;
335
+ }
336
+ }
337
+ .page--prev, .page--next {
338
+ &.page-disabled {
339
+ margin-left: 12px;
340
+ height: 32px;
341
+ width: 32px;
342
+ color: rgba(0, 0, 0, 0.88);
343
+ font-family: 'AlibabaPuHuiTi_2_55_Regular';
344
+ font-size: 14px;
345
+ font-weight: 400;
346
+ border-radius: 2px;
347
+ border: 1px solid rgba(0, 0, 0, 0.16);
348
+ background: rgba(0, 0, 0, 0.04);
349
+ box-sizing: border-box;
350
+ display: flex;
351
+ flex-direction: row;
352
+ align-items: center;
353
+ justify-content: center;
354
+ cursor: not-allowed;
355
+ }
356
+ }
357
+ }
358
+ .size {
359
+ width: auto;
360
+ display: flex;
361
+ flex-direction: row;
362
+ margin-left: 12px;
363
+ .ant-select {
364
+ min-width: 91px;
365
+ flex-basis: 91px;
366
+ /* flex-shrink: 0; */
367
+ flex-grow: 1;
368
+ }
369
+ }
370
+ }
371
+ }
372
+ </style>
@@ -1,5 +1,5 @@
1
- import EleRadio from './src/index.vue'
2
-
3
- EleRadio.install = Vue => Vue.component(EleRadio.name, EleRadio)
4
-
1
+ import EleRadio from './src/index.vue'
2
+
3
+ EleRadio.install = Vue => Vue.component(EleRadio.name, EleRadio)
4
+
5
5
  export default EleRadio
@@ -1,57 +1,57 @@
1
- <template>
2
- <a-radio-group :value="value" @change="onChange" :disabled="disabled">
3
- <a-radio v-for="item in dataSource" :key="item.value" :value="item.value">
4
- {{ item.label }}
5
- </a-radio>
6
- </a-radio-group>
7
- </template>
8
-
9
- <script>
10
- export default {
11
- name: 'ele-radio',
12
- model: {
13
- prop: 'value',
14
- event: 'change'
15
- },
16
- props: {
17
- value: {
18
- type: [String, Array, Number]
19
- },
20
- dataSource: {
21
- type: Array,
22
- default: () => []
23
- },
24
- disabled: {
25
- type: Boolean,
26
- default: false
27
- }
28
- },
29
- watch: {
30
- value (val) {
31
- console.log('valvalval', val)
32
- }
33
- },
34
- methods: {
35
- onChange (e) {
36
- this.$emit('change', e.target.value)
37
- this.$emit('input', e.target.value)
38
- }
39
- }
40
- }
41
- </script>
42
- <style lang="scss" scoped>
43
- .ant-radio-group {
44
- text-align: left;
45
- line-height: 32px;
46
- }
47
- .has-error {
48
- .ant-radio-group {
49
- ::v-deep .ant-radio-wrapper {
50
- color: var(--idooel-form-border-err-color);
51
- }
52
- ::v-deep .ant-radio-inner {
53
- border-color: var(--idooel-form-border-err-color);
54
- }
55
- }
56
- }
1
+ <template>
2
+ <a-radio-group :value="value" @change="onChange" :disabled="disabled">
3
+ <a-radio v-for="item in dataSource" :key="item.value" :value="item.value">
4
+ {{ item.label }}
5
+ </a-radio>
6
+ </a-radio-group>
7
+ </template>
8
+
9
+ <script>
10
+ export default {
11
+ name: 'ele-radio',
12
+ model: {
13
+ prop: 'value',
14
+ event: 'change'
15
+ },
16
+ props: {
17
+ value: {
18
+ type: [String, Array, Number]
19
+ },
20
+ dataSource: {
21
+ type: Array,
22
+ default: () => []
23
+ },
24
+ disabled: {
25
+ type: Boolean,
26
+ default: false
27
+ }
28
+ },
29
+ watch: {
30
+ value (val) {
31
+ console.log('valvalval', val)
32
+ }
33
+ },
34
+ methods: {
35
+ onChange (e) {
36
+ this.$emit('change', e.target.value)
37
+ this.$emit('input', e.target.value)
38
+ }
39
+ }
40
+ }
41
+ </script>
42
+ <style lang="scss" scoped>
43
+ .ant-radio-group {
44
+ text-align: left;
45
+ line-height: 32px;
46
+ }
47
+ .has-error {
48
+ .ant-radio-group {
49
+ ::v-deep .ant-radio-wrapper {
50
+ color: var(--idooel-form-border-err-color);
51
+ }
52
+ ::v-deep .ant-radio-inner {
53
+ border-color: var(--idooel-form-border-err-color);
54
+ }
55
+ }
56
+ }
57
57
  </style>
@@ -1,5 +1,5 @@
1
- import EleSelect from './src/index.vue'
2
-
3
- EleSelect.install = Vue => Vue.component(EleSelect.name, EleSelect)
4
-
1
+ import EleSelect from './src/index.vue'
2
+
3
+ EleSelect.install = Vue => Vue.component(EleSelect.name, EleSelect)
4
+
5
5
  export default EleSelect