@idooel/components 0.0.1 → 0.0.2

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 (107) hide show
  1. package/README.md +99 -0
  2. package/dist/@idooel/components.esm.js +13956 -1882
  3. package/dist/@idooel/components.umd.js +14000 -1891
  4. package/jsconfig.json +8 -0
  5. package/package.json +12 -6
  6. package/packages/alert/index.js +5 -0
  7. package/packages/alert/src/index.vue +46 -0
  8. package/packages/batch-export/index.js +5 -0
  9. package/packages/batch-export/src/index.vue +105 -0
  10. package/packages/business-components/modal-fsm/index.js +5 -0
  11. package/packages/business-components/modal-fsm/src/index.vue +164 -0
  12. package/packages/business-components/modal-import/index.js +5 -0
  13. package/packages/business-components/modal-import/src/index.vue +140 -0
  14. package/packages/business-components/modal-timeline/index.js +5 -0
  15. package/packages/business-components/modal-timeline/src/index.vue +78 -0
  16. package/packages/business-components/tabs-sub-center/index.js +5 -0
  17. package/packages/business-components/tabs-sub-center/src/index.vue +117 -0
  18. package/packages/button/index.js +4 -4
  19. package/packages/button/src/index.vue +65 -24
  20. package/packages/checkbox/index.js +5 -0
  21. package/packages/checkbox/src/index.vue +53 -0
  22. package/packages/composite-components/button-group/index.js +4 -4
  23. package/packages/composite-components/button-group/src/index.vue +151 -46
  24. package/packages/composite-components/form-attachment/src/index.vue +15 -0
  25. package/packages/composite-components/form-img-crop/index.js +5 -0
  26. package/packages/composite-components/form-img-crop/src/index.vue +121 -0
  27. package/packages/composite-components/modal-confirm/index.js +5 -0
  28. package/packages/composite-components/modal-confirm/src/index.vue +104 -0
  29. package/packages/composite-components/modal-form/index.js +5 -0
  30. package/packages/composite-components/modal-form/src/index.vue +231 -0
  31. package/packages/composite-components/modal-img-crop/index.js +5 -0
  32. package/packages/composite-components/modal-img-crop/src/index.vue +299 -0
  33. package/packages/composite-components/modal-table/index.js +5 -0
  34. package/packages/composite-components/modal-table/src/index.vue +156 -0
  35. package/packages/composite-components/modal-table-transfer/index.js +0 -0
  36. package/packages/composite-components/modal-tree/index.js +5 -0
  37. package/packages/composite-components/modal-tree/src/index.vue +76 -0
  38. package/packages/composite-components/search-area/index.js +4 -4
  39. package/packages/composite-components/search-area/src/index.vue +237 -128
  40. package/packages/composite-components/search-area/src/label.vue +35 -35
  41. package/packages/composite-components/select-entity-modal-table/index.js +5 -0
  42. package/packages/composite-components/select-entity-modal-table/src/index.vue +172 -0
  43. package/packages/composite-components/table-transfer/index.js +0 -0
  44. package/packages/date/index.js +4 -4
  45. package/packages/date/src/index.vue +113 -40
  46. package/packages/date-range/index.js +5 -0
  47. package/packages/date-range/src/index.vue +47 -0
  48. package/packages/form/index.js +5 -0
  49. package/packages/form/src/index.vue +319 -0
  50. package/packages/icon/index.js +5 -0
  51. package/packages/icon/src/index.vue +32 -0
  52. package/packages/index.js +153 -50
  53. package/packages/input/index.js +4 -4
  54. package/packages/input/src/index.vue +35 -23
  55. package/packages/input-number/index.js +5 -0
  56. package/packages/input-number/src/index.vue +24 -0
  57. package/packages/loading/index.js +5 -0
  58. package/packages/loading/src/index.vue +37 -0
  59. package/packages/modal/index.js +5 -0
  60. package/packages/modal/src/index.vue +185 -0
  61. package/packages/models/form-group-model/index.js +5 -0
  62. package/packages/models/form-group-model/src/index.vue +274 -0
  63. package/packages/models/form-model/index.js +5 -0
  64. package/packages/models/form-model/src/index.vue +233 -0
  65. package/packages/models/step-model/index.js +5 -0
  66. package/packages/models/step-model/src/index.vue +224 -0
  67. package/packages/{tree-table-model → models/tree-table-model}/index.js +4 -4
  68. package/packages/models/tree-table-model/src/index.vue +689 -0
  69. package/packages/radio/index.js +5 -0
  70. package/packages/radio/src/index.vue +57 -0
  71. package/packages/select/index.js +4 -4
  72. package/packages/select/src/index.vue +105 -34
  73. package/packages/select-entity/index.js +5 -0
  74. package/packages/select-entity/src/index.vue +120 -0
  75. package/packages/table/index.js +4 -4
  76. package/packages/table/src/action.vue +172 -103
  77. package/packages/table/src/index.vue +289 -88
  78. package/packages/tabs/index.js +5 -0
  79. package/packages/tabs/src/index.vue +56 -0
  80. package/packages/text/index.js +5 -0
  81. package/packages/text/src/index.vue +48 -0
  82. package/packages/text-editor/index.js +5 -0
  83. package/packages/text-editor/src/index.vue +73 -0
  84. package/packages/textarea/index.js +5 -0
  85. package/packages/textarea/src/index.vue +58 -0
  86. package/packages/theme/form.scss +22 -0
  87. package/packages/theme/index.scss +43 -0
  88. package/packages/theme/overrid.scss +8 -0
  89. package/packages/theme/styleClass.scss +3 -0
  90. package/packages/theme/variables.scss +56 -0
  91. package/packages/timeline/index.js +5 -0
  92. package/packages/timeline/src/index.vue +258 -0
  93. package/packages/tpl/index.js +4 -4
  94. package/packages/tpl/src/index.vue +56 -47
  95. package/packages/tree/index.js +4 -4
  96. package/packages/tree/src/TreeNode.vue +29 -29
  97. package/packages/tree/src/index.vue +101 -96
  98. package/packages/tree-select/index.js +5 -0
  99. package/packages/tree-select/src/index.vue +143 -0
  100. package/packages/upload/index.js +5 -0
  101. package/packages/upload/src/index.vue +445 -0
  102. package/packages/utils/index.js +63 -0
  103. package/scripts/rollup.config.js +42 -35
  104. package/scripts/rollup.esm.config.js +11 -11
  105. package/scripts/rollup.umd.config.js +14 -14
  106. package/packages/tree-table-model/src/index.vue +0 -290
  107. /package/packages/{tree-table-model/README.md → composite-components/form-attachment/index.js} +0 -0
@@ -0,0 +1,689 @@
1
+ <template>
2
+ <section class="ele model__tree-table">
3
+ <section class="model__tree-table--container" v-if="showTree">
4
+ <div class="model__tree--title"></div>
5
+ <section :ref="modelTreeWrapper" class="model__tree--wrapper" :style="{height: `${treeWrapperHeight}px`}">
6
+ <ele-tree
7
+ :tree-data="treeData"
8
+ :defaultExpandedKeys="defaultExpandedKeys"
9
+ :defaultSelectedKeys="defaultSelectedKeys"
10
+ @select="selectTreeNode"
11
+ :replace-fields="mapFields">
12
+ </ele-tree>
13
+ </section>
14
+ </section>
15
+ <section class="model__table--container" :ref="modelTableContainerRef">
16
+ <div class="model__table--title" v-if="title">
17
+ <template v-if="titleMode">
18
+ <div :class="[`model__table-title--${titleMode}`]"></div>
19
+ </template>
20
+ <template v-else>
21
+ <div class="model__table-title--text">{{ title }}</div>
22
+ </template>
23
+ </div>
24
+ <section :ref="modelTableWrapper" class="model__table--wrapper">
25
+ <ele-search-area :ref="searchArea" @search="onSearch" :data-source="searchMeta.elements"></ele-search-area>
26
+ <div class="button-row__area">
27
+ <ele-button-group class="model-table__button-group" v-on="overrideButtonGroupEvent" :ref="buttonGroup" @click="handleClickButtonGroup" :data-source="getButtonGroupElements"></ele-button-group>
28
+ <slot name="tags"></slot>
29
+ <slot v-if="$slots['sub-center']" name="sub-center"></slot>
30
+ </div>
31
+ <ele-table
32
+ v-on="overrideTableEvent"
33
+ :ref="tableRef"
34
+ :row-selection="rowSelection"
35
+ :loading="loading"
36
+ :columns="columns"
37
+ :total="total"
38
+ :x="x"
39
+ :y="y"
40
+ :bordered="setBorder"
41
+ :height="tableHeight"
42
+ :width="tableWidth"
43
+ :actions="actions"
44
+ :pageSize="pageSize"
45
+ :pageSizeOptions="pageSizeOptions"
46
+ :data-source="tableData"
47
+ @change-page="onChangePage"
48
+ ></ele-table>
49
+ </section>
50
+ </section>
51
+ <ele-modal-form v-model="modalFormValue" v-on="overrideModalFormEvent" :meta="modalFormMeta"></ele-modal-form>
52
+ <ele-modal-fsm v-model="showFsmModal" :contextProp="fsmContextProp" :meta="fsmMeta" @cancel="handleCloseFsmModal"></ele-modal-fsm>
53
+ <ele-modal-table
54
+ :meta="modalTableMeta"
55
+ v-model="modalTableValue"
56
+ v-on="overrideModalTableEvent"
57
+ ></ele-modal-table>
58
+ </section>
59
+ </template>
60
+
61
+ <script>
62
+ import { type, net, util } from '@idooel/shared'
63
+ import { v4 as uuidv4 } from 'uuid'
64
+ import { BUILT_IN_EVENT_NAMES, RESERVE_EVENT_NAMES, parseFieldMap, BUILT_IN_TRIGGER, CONTEXT } from '../../../utils'
65
+ export default {
66
+ name: 'ele-tree-table-model',
67
+ props: {
68
+ title: {
69
+ type: [Object, String]
70
+ },
71
+ overHeight: {
72
+ type: Number,
73
+ default: 0
74
+ },
75
+ treeMeta: {
76
+ type: Object,
77
+ default: () => ({})
78
+ },
79
+ searchMeta: {
80
+ type: Object,
81
+ default: () => ({})
82
+ },
83
+ buttonGroupMeta: {
84
+ typeof: Object,
85
+ default: () => ({})
86
+ },
87
+ tableMeta: {
88
+ type: Object,
89
+ default: () => ({})
90
+ },
91
+ createMeta: {
92
+ type: Object
93
+ },
94
+ editMeta: {
95
+ type: Object
96
+ }
97
+ },
98
+ provide () {
99
+ return {
100
+ requestTreeData: this.requestTreeData,
101
+ requestTableData: this.requestTableData,
102
+ [CONTEXT]: () => {
103
+ return {
104
+ exposed: this.exposed
105
+ }
106
+ }
107
+ }
108
+ },
109
+ data () {
110
+ return {
111
+ tableHeight: 0,
112
+ tableWidth: 0,
113
+ modalFormMeta: {},
114
+ modalFormValue: false,
115
+ treeData: [],
116
+ tableData: [],
117
+ defaultExpandedKeys: [],
118
+ defaultSelectedKeys: [],
119
+ replaceFields: {
120
+ title: 'title',
121
+ children: 'children',
122
+ key: 'id'
123
+ },
124
+ loading: false,
125
+ total: 0,
126
+ tableQuerys: {},
127
+ resizeObserverModelTableWrapper: null,
128
+ modelTableWrapperHeight: 0,
129
+ currentTreeNodeData: {},
130
+ currentRowData: {},
131
+ treeWrapperHeight: 0,
132
+ currentTableSelection: this.currentTableMode == 'radio' ? {} : [],
133
+ showFsmModal: false,
134
+ fsmMeta: {},
135
+ fsmContextProp: {},
136
+ modalTableValue: false,
137
+ modalTableMeta: {}
138
+ }
139
+ },
140
+ computed: {
141
+ setBorder () {
142
+ return this.tableMeta.bordered === false ? false : true
143
+ },
144
+ rowSelection () {
145
+ if (!this.currentTableMode) return void 0
146
+ return {
147
+ columnTitle: this.currentSelectionColumn.columnTitle,
148
+ fixed: true,
149
+ type: this.currentTableMode,
150
+ onChange: this.onChangeTableSelection
151
+ }
152
+ },
153
+ currentSelectionColumn () {
154
+ const { multiple } = this.tableMeta
155
+ const target = this.columns.find(item => Object.keys(item).includes('multiple'))
156
+ const isGlobalExistMultiple = Object.keys(this.tableMeta).includes('multiple')
157
+ if (target) {
158
+ return target
159
+ } else if (isGlobalExistMultiple) {
160
+ return { multiple }
161
+ }
162
+ return void 0
163
+ },
164
+ x () {
165
+ const { x } = this.tableMeta
166
+ return x
167
+ },
168
+ y () {
169
+ const { y } = this.tableMeta
170
+ return y
171
+ },
172
+ currentTableMode () {
173
+ if (!this.currentSelectionColumn) return void 0
174
+ const { multiple } = this.currentSelectionColumn
175
+ if (type.isBool(multiple)) {
176
+ if (multiple) {
177
+ return 'checkbox'
178
+ } else {
179
+ return 'radio'
180
+ }
181
+ } else {
182
+ return void 0
183
+ }
184
+ },
185
+ modelTableContainerRef () {
186
+ return uuidv4()
187
+ },
188
+ titleMode () {
189
+ if (type.isObject(this.title)) {
190
+ const { mode = '' } = this.title
191
+ return mode
192
+ }
193
+ return void 0
194
+ },
195
+ tableRef () {
196
+ return uuidv4()
197
+ },
198
+ exposed () {
199
+ return {
200
+ showModalForm: this.showModalForm,
201
+ closeModalForm: this.closeModalForm,
202
+ showModalTable: this.showModalTable,
203
+ closeModalTable: this.closeModalTable,
204
+ currentTableSelection: this.currentTableSelection,
205
+ currentTreeNode: this.currentTreeNodeData,
206
+ requestTableData: this.requestTableData,
207
+ refreshTreeData: this.refreshTreeData,
208
+ querys: this.tableQuerys,
209
+ currentRowData: this.currentRowData,
210
+ getCurrentRowData: this.getCurrentRowData,
211
+ setCurrentRowData: this.setCurrentRowData,
212
+ setCurrentTableSelection: this.setCurrentTableSelection,
213
+ getCurrentTableSelection: this.getCurrentTableSelection,
214
+ cleanCurrentModelEffect: this.cleanCurrentModelEffect,
215
+ route: this.$route,
216
+ _route: this.$route.query,
217
+ _routeMeta: this.$route.meta
218
+ }
219
+ },
220
+ overrideTableEvent () {
221
+ const events = this.actions.reduce((ret, action) => {
222
+ ret[action.eventName || action.key] = (e) => {
223
+ this.setCurrentRowData(e.exposed.currentRowData)
224
+ const { target } = action
225
+ const targetMeta = this.findMetaByKey(target)
226
+ const { mode } = targetMeta
227
+ mode && this.dispatchTrigger({ mode, record: e.exposed.currentRowData, modeMeta: targetMeta })
228
+ this.$emit(action.eventName || action.key, { ...e, currentTreeNode: this.currentTreeNodeData, exposed: { ...this.exposed, ...e.exposed } })
229
+ }
230
+ return ret
231
+ }, {})
232
+ return {
233
+ ...this.$listeners,
234
+ ...events,
235
+ [BUILT_IN_EVENT_NAMES.EDIT]: this[BUILT_IN_EVENT_NAMES.EDIT],
236
+ [BUILT_IN_EVENT_NAMES.SUBMIT]: this[BUILT_IN_EVENT_NAMES.SUBMIT]
237
+ }
238
+ },
239
+ overrideModalFormEvent () {
240
+ const { footerMeta } = this.modalFormMeta
241
+ const { elements = [] } = footerMeta || {}
242
+ const eles = type.isFunction(elements) ? elements.call(this) : elements
243
+ const events = eles.reduce((ret, ele) => {
244
+ ret[ele.eventName] = (e = {}) => {
245
+ if (ele.eventName === 'cancel') {
246
+ this.closeModalForm()
247
+ } else {
248
+ const { exposed = {} } = e
249
+ this.$emit(`${ele.eventName || ele.key}`, { ...e, currentTreeNode: this.currentTreeNodeData, exposed: Object.assign({}, exposed )})
250
+ }
251
+ }
252
+ return ret
253
+ }, {})
254
+ return {
255
+ ...events
256
+ }
257
+ },
258
+ overrideModalTableEvent () {
259
+ const { footerMeta } = this.modalTableMeta
260
+ const { elements = [] } = footerMeta || {}
261
+ const eles = type.isFunction(elements) ? elements.call(this) : elements
262
+ const events = eles.reduce((ret, ele) => {
263
+ ret[ele.eventName] = (e = {}) => {
264
+ if (ele.eventName === 'cancel') {
265
+ this.closeModalTable()
266
+ } else {
267
+ const { exposed = {} } = e
268
+ this.$emit(`${ele.eventName || ele.key}`, { ...e, currentTreeNode: this.currentTreeNodeData, exposed: Object.assign({}, exposed )})
269
+ }
270
+ }
271
+ return ret
272
+ }, {})
273
+ return {
274
+ ...events,
275
+ exposed: this.exposed
276
+ }
277
+ },
278
+ overrideButtonGroupEvent () {
279
+ const events = this.getButtonGroupElements.reduce((ret, ele) => {
280
+ ret[ele.eventName] = (e) => {
281
+ this.$emit(ele.eventName || 'click', { ...e, currentTreeNode: this.currentTreeNodeData, exposed: Object.assign({}, e.exposed || {}, this.exposed)})
282
+ }
283
+ return ret
284
+ }, {})
285
+ return {
286
+ ...this.$listeners,
287
+ ...events,
288
+ [BUILT_IN_EVENT_NAMES.CREATE]: this[BUILT_IN_EVENT_NAMES.CREATE],
289
+ exposed: this.exposed
290
+ }
291
+ },
292
+ showTree () {
293
+ return !!Object.keys(this.treeMeta).length
294
+ },
295
+ buttonGroup () {
296
+ return uuidv4()
297
+ },
298
+ searchArea () {
299
+ return uuidv4()
300
+ },
301
+ modelTreeWrapper () {
302
+ return uuidv4()
303
+ },
304
+ modelTableWrapper () {
305
+ return uuidv4()
306
+ },
307
+ actions () {
308
+ const { operations } = this.tableMeta
309
+ if (operations) {
310
+ return operations.elements
311
+ } else {
312
+ return []
313
+ }
314
+ },
315
+ pageSize () {
316
+ const { page = {} } = this.tableMeta
317
+ return page.pageSize || 10
318
+ },
319
+ pageSizeOptions () {
320
+ const { page = {} } = this.tableMeta
321
+ return page.pageSizeOptions || ['10', '20', '30', '40']
322
+ },
323
+ columns () {
324
+ const { columns, operations } = this.tableMeta
325
+ if (type.get(columns) === 'array') {
326
+ const columnsOptions = columns.map(item => {
327
+ const { mode = 'text' } = item
328
+ if (item.render) {
329
+ return {
330
+ ...item,
331
+ customRender: (text, record, index) => {
332
+ const { $createElement } = this
333
+ return item.render.call(this,
334
+ { h: $createElement, ctx: this },
335
+ text ? typeof text == 'object' ? text[item.dataIndex] : text : '',
336
+ record, index)
337
+ }
338
+ }
339
+ } else if (mode !== BUILT_IN_TRIGGER.TEXT) {
340
+ const { [`${mode}Meta`]: modeMeta } = item
341
+ return {
342
+ ...item,
343
+ customRender: (text, record, index) => {
344
+ return <span onClick={() => this.dispatchTrigger({ mode, record, modeMeta, index })} class={ mode }>{ text }</span>
345
+ }
346
+ }
347
+ }
348
+ return {
349
+ ...item
350
+ }
351
+ })
352
+ if (operations) {
353
+ return [
354
+ ...columnsOptions,
355
+ {
356
+ title: '操作',
357
+ width: operations.width,
358
+ key: 'action',
359
+ fixed: 'right',
360
+ scopedSlots: { customRender: 'action' }
361
+ }
362
+ ]
363
+ }
364
+ return columnsOptions
365
+ } else {
366
+ console.error('Error: columns is invalid, please check it')
367
+ return []
368
+ }
369
+ },
370
+ getButtonGroupElements () {
371
+ const { elements } = this.buttonGroupMeta
372
+ if (type.get(elements) === 'function') {
373
+ return elements.call(this)
374
+ } else if (type.get(elements) === 'array') {
375
+ return elements
376
+ } else {
377
+ return []
378
+ }
379
+ },
380
+ mapFields () {
381
+ const { replaceFields = {} } = this.treeMeta
382
+ const mapFields = type.isEmpty(replaceFields) ? this.replaceFields : replaceFields
383
+ return mapFields
384
+ }
385
+ },
386
+ async created () {
387
+ if (this.showTree) {
388
+ this.treeData = await this.requestTreeData()
389
+ const [defaultTreeNode = {}] = this.treeData
390
+ this.defaultExpandedKeys = [defaultTreeNode[this.mapFields.key]]
391
+ this.defaultSelectedKeys = [defaultTreeNode[this.mapFields.key]]
392
+ this.currentTreeNodeData = defaultTreeNode
393
+ }
394
+ const { params = {}, fieldMap = {}, overrideInit = false } = this.tableMeta
395
+ const ctx = { ...this.currentTreeNodeData, _route: this.$route.query }
396
+ const initQuerys = Object.assign({}, params, parseFieldMap(fieldMap, ctx))
397
+ if (overrideInit) {
398
+ this.$emit(RESERVE_EVENT_NAMES.INIT, { ...this.exposed })
399
+ } else {
400
+ this.tableData = await this.requestTableData(initQuerys)
401
+ }
402
+ },
403
+ methods: {
404
+ async refreshTreeData () {
405
+ this.treeData = await this.requestTreeData()
406
+ const [defaultTreeNode = {}] = this.treeData
407
+ this.defaultExpandedKeys = [defaultTreeNode[this.mapFields.key]]
408
+ this.defaultSelectedKeys = [defaultTreeNode[this.mapFields.key]]
409
+ this.currentTreeNodeData = defaultTreeNode
410
+ },
411
+ dispatchTrigger ({ mode, record = {}, modeMeta = { } }) {
412
+ switch (mode) {
413
+ case BUILT_IN_TRIGGER.FSM:
414
+ this[`${BUILT_IN_TRIGGER.FSM}Trigger`](record, modeMeta = type.isEmpty(modeMeta) ? {
415
+ url: 'api-fsm/workbench/fsm/auditFlow',
416
+ requestType: 'GET',
417
+ fieldMap: {
418
+ modelCode: 'modelCode',
419
+ businessId: 'businessId'
420
+ }
421
+ } : modeMeta)
422
+ break
423
+ case BUILT_IN_TRIGGER.ELE_MODAL_FORM:
424
+ this.modalFormMeta = modeMeta
425
+ this.showModalForm(modeMeta)
426
+ break
427
+ case BUILT_IN_TRIGGER.ELE_MODAL_TABLE:
428
+ this.modalTableMeta = modeMeta
429
+ this.showModalTable(modeMeta)
430
+ break
431
+ default:
432
+ break
433
+ }
434
+ },
435
+ handleCloseFsmModal () {
436
+ this.showFsmModal = false
437
+ },
438
+ [`${BUILT_IN_TRIGGER.FSM}Trigger`] (record, meta) {
439
+ this.fsmMeta = meta
440
+ this.fsmContextProp = record
441
+ this.showFsmModal = true
442
+ },
443
+ onChangeTableSelection (_, selectedRows = []) {
444
+ if (this.currentTableMode === 'radio') {
445
+ this.setCurrentTableSelection(selectedRows)
446
+ this.$emit('on-change-table-selection', this.currentTableSelection)
447
+ this.$emit('x:refresh-exposed', { exposed: this.exposed })
448
+ } else {
449
+ this.setCurrentTableSelection(selectedRows)
450
+ this.$emit('on-change-table-selection', this.currentTableSelection)
451
+ this.$emit('x:refresh-exposed', { exposed: this.exposed })
452
+ }
453
+ },
454
+ setCurrentTableSelection (props = {}) {
455
+ if (this.currentTableMode === 'radio') {
456
+ this.$set(this, 'currentTableSelection', (type.isArray(props) && props.length > 0) ? props[0] : type.isObject(props) ? props : {})
457
+ } else {
458
+ this.$set(this, 'currentTableSelection', type.isArray(props) ? props : [])
459
+ }
460
+ },
461
+ getCurrentTableSelection () {
462
+ return this.currentTableSelection
463
+ },
464
+ setCurrentRowData (props = {}) {
465
+ this.currentRowData = props
466
+ },
467
+ getCurrentRowData () {
468
+ return this.currentRowData
469
+ },
470
+ cleanCurrentModelEffect () {
471
+ this.setCurrentTableSelection()
472
+ this.setCurrentRowData({})
473
+ },
474
+ [BUILT_IN_EVENT_NAMES.SUBMIT] (props = {}) {
475
+ this.cleanCurrentModelEffect()
476
+ this.requestTableData()
477
+ },
478
+ [BUILT_IN_EVENT_NAMES.EDIT] (props = {}) {
479
+ const { record = {} } = props
480
+ this.currentRowData = record
481
+ this.setCurrentRowData(record)
482
+ this.modalFormMeta = this.editMeta
483
+ this.modalFormValue = true
484
+ },
485
+ [BUILT_IN_EVENT_NAMES.CREATE] () {
486
+ this.modalFormMeta = this.createMeta
487
+ this.modalFormValue = true
488
+ },
489
+ showModalForm (modeMeta = {}) {
490
+ if (type.isStr(modeMeta)) {
491
+ const targetMeta = this.findMetaByKey(modeMeta)
492
+ this.modalFormMeta = targetMeta
493
+ } else {
494
+ this.modalFormMeta = modeMeta
495
+ }
496
+ this.modalFormValue = true
497
+ },
498
+ showModalTable (modeMeta = {}) {
499
+ console.log('showModalTable', modeMeta)
500
+ if (type.isStr(modeMeta)) {
501
+ const targetMeta = this.findMetaByKey(modeMeta)
502
+ this.modalTableMeta = targetMeta
503
+ } else {
504
+ this.modalTableMeta = modeMeta
505
+ }
506
+ this.modalTableValue = true
507
+ },
508
+ closeModalForm () {
509
+ this.modalFormValue = false
510
+ },
511
+ closeModalTable () {
512
+ console.log('closeModalTable')
513
+ this.modalTableValue = false
514
+ },
515
+ findMetaByKey (key) {
516
+ return this.$attrs[key] || {}
517
+ },
518
+ handleClickButtonGroup (props) {
519
+ const { eventName, target } = props
520
+ const targetMeta = this.findMetaByKey(target)
521
+ const { mode } = targetMeta
522
+ mode && this.dispatchTrigger({ mode, modeMeta: targetMeta })
523
+ this.$emit(eventName || 'click', { currentTreeNode: this.currentTreeNodeData })
524
+ },
525
+ watchViewPort () {
526
+ const modelTableWrapper = this.$refs[this.modelTableWrapper]
527
+ const { top } = modelTableWrapper.getBoundingClientRect()
528
+ this.$refs[this.modelTreeWrapper].style.height = `calc(100vh - ${top}px)`
529
+ },
530
+ async onSearch (props) {
531
+ const { overrideInit = false } = this.tableMeta
532
+ this.tableQuerys = Object.assign(this.tableQuerys, props)
533
+ if (overrideInit) {
534
+ this.$emit(RESERVE_EVENT_NAMES.TREE_CHANGE, { ...this.exposed })
535
+ } else {
536
+ this.tableData = await this.requestTableData()
537
+ }
538
+ },
539
+ async selectTreeNode (selectedKeys, e) {
540
+ const { fieldMap } = this.tableMeta
541
+ this.currentTreeNodeData = e.node.$vnode.data.props.dataRef || {}
542
+ //@deprecated '_' namespace is deprecated, please use 'exposed' instead
543
+ const execFieldMapRet = parseFieldMap(fieldMap, { ...this.currentTreeNodeData, exposed: this.exposed, _route: this.exposed._route })
544
+ const { overrideInit = false } = this.tableMeta
545
+ if (overrideInit) {
546
+ this.$emit(RESERVE_EVENT_NAMES.TREE_CHANGE, { ...this.exposed })
547
+ } else {
548
+ this.tableData = await this.requestTableData(execFieldMapRet)
549
+ }
550
+ },
551
+ async requestTreeData () {
552
+ const { url, requestType = 'GET', params = {}, fieldMap = {} } = this.treeMeta
553
+ const fieldMapRet = parseFieldMap(fieldMap, { ...this.currentTreeNodeData, _route: this.$route.query })
554
+ const ret = await net[requestType.toLowerCase()](
555
+ url,
556
+ { ...params, ...fieldMapRet }
557
+ ).then(resp => {
558
+ const { data } = resp || {}
559
+ return data
560
+ })
561
+ return ret
562
+ },
563
+ async onChangePage (page, pageSize) {
564
+ this.tableData = await this.requestTableData({ currentPage: page, pageSize })
565
+ },
566
+ async requestTableData (props = {}) {
567
+ const { url, requestType = 'GET', page = {} } = this.tableMeta
568
+ const { pageSize = 10 } = page
569
+ this.tableQuerys = Object.assign(this.tableQuerys, { currentPage: 1, pageSize }, props)
570
+ this.$emit(RESERVE_EVENT_NAMES.WATCH, { ...this.exposed })
571
+ this.loading = true
572
+ const ret = await net[requestType.toLowerCase()](
573
+ url,
574
+ this.tableQuerys
575
+ ).then(resp => {
576
+ const { data = [], count } = resp || {}
577
+ this.total = count
578
+ this.loading = false
579
+ return (data || []).map(item => {
580
+ delete item.children
581
+ return {
582
+ key: uuidv4(),
583
+ ...item
584
+ }
585
+ })
586
+ })
587
+ this.cleanCurrentModelEffect()
588
+ this.tableData = ret
589
+ return ret
590
+ },
591
+ refreshTreeStatus (props = {}) {},
592
+ refreshTableStatus (props = {}) {},
593
+ calculateTableHeight () {
594
+ const currentViewportHeight = window.innerHeight
595
+ const tableRef = this.$refs[this.tableRef]
596
+ const { top: tableToTop, width } = tableRef.$el.getBoundingClientRect()
597
+ this.tableWidth = width
598
+ this.tableHeight = currentViewportHeight - tableToTop - this.overHeight
599
+ },
600
+ calculateTreeHeight () {
601
+ if (!this.showTree) return
602
+ const modelTableContainerRef = this.$refs[this.modelTableContainerRef]
603
+ const { height } = modelTableContainerRef.getBoundingClientRect()
604
+ this.treeWrapperHeight = height
605
+ }
606
+ },
607
+ mounted () {
608
+ this.calculateTableHeight()
609
+ this.$nextTick(() => {
610
+ this.calculateTreeHeight()
611
+ })
612
+ this.resizeObserverModelTableWrapper = new ResizeObserver(entries => {
613
+ for (const _ of entries) {
614
+ requestAnimationFrame(() => {
615
+ this.calculateTableHeight()
616
+ })
617
+ }
618
+ })
619
+ this.resizeObserverModelTableWrapper.observe(this.$refs[this.modelTableWrapper])
620
+ },
621
+ destroyed () {
622
+ this.resizeObserverModelTableWrapper.disconnect()
623
+ }
624
+ }
625
+ </script>
626
+
627
+ <style lang="scss" scoped>
628
+ .ele {
629
+ &.model__tree-table {
630
+ background: transparent;
631
+ display: flex;
632
+ flex-direction: row;
633
+ width: 100%;
634
+ .model__tree-table--container {
635
+ .model__tree--wrapper {
636
+ width: 240px;
637
+ background: #fff;
638
+ flex-shrink: 0;
639
+ padding: 16px;
640
+ box-sizing: border-box;
641
+ margin-right: 16px;
642
+ overflow-y: auto;
643
+ }
644
+ }
645
+ .model__table--container {
646
+ width: 100%;
647
+ min-width: 0;
648
+ background: #fff;
649
+ .model__table--title {
650
+ .model__table-title--bar {
651
+ width: 100%;
652
+ height: 8px;
653
+ background: var(--idooel-primary-color);
654
+ border-top-left-radius: 4px;
655
+ border-top-right-radius: 4px;
656
+ }
657
+ .model__table-title--text {
658
+ text-align: left;
659
+ padding: 16px;
660
+ font-size: 16px;
661
+ font-weight: bold;
662
+ background: #fff;
663
+ border-bottom: 1px solid;
664
+ border-color: var(--idoole-black-016);
665
+ }
666
+ }
667
+ .model__table--wrapper {
668
+ background: #fff;
669
+ .button-row__area {
670
+ width: 100%;
671
+ display: flex;
672
+ flex-direction: row;
673
+ align-items: center;
674
+ justify-content: space-between;
675
+ padding-top: 16px;
676
+ padding-bottom: 8px;
677
+ padding-right: 16px;
678
+ }
679
+ .g-table__wrapper {
680
+ .fsm {
681
+ cursor: pointer;
682
+ color: var(--idooel-primary-color);
683
+ }
684
+ }
685
+ }
686
+ }
687
+ }
688
+ }
689
+ </style>
@@ -0,0 +1,5 @@
1
+ import EleRadio from './src/index.vue'
2
+
3
+ EleRadio.install = Vue => Vue.component(EleRadio.name, EleRadio)
4
+
5
+ export default EleRadio