@idooel/components 0.0.0 → 0.0.1-beta.1

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 (32) hide show
  1. package/dist/@idooel/components.esm.js +2634 -0
  2. package/dist/@idooel/components.umd.js +1019 -179
  3. package/package.json +44 -41
  4. package/packages/button/index.js +4 -4
  5. package/packages/button/src/index.vue +54 -24
  6. package/packages/composite-components/button-group/index.js +4 -4
  7. package/packages/composite-components/button-group/src/index.vue +50 -46
  8. package/packages/composite-components/search-area/index.js +4 -4
  9. package/packages/composite-components/search-area/src/index.vue +171 -128
  10. package/packages/composite-components/search-area/src/label.vue +35 -35
  11. package/packages/date/index.js +4 -4
  12. package/packages/date/src/index.vue +39 -39
  13. package/packages/index.js +50 -49
  14. package/packages/input/index.js +4 -4
  15. package/packages/input/src/index.vue +23 -23
  16. package/packages/select/index.js +4 -4
  17. package/packages/select/src/index.vue +34 -34
  18. package/packages/table/index.js +4 -4
  19. package/packages/table/src/action.vue +131 -44
  20. package/packages/table/src/index.vue +157 -88
  21. package/packages/theme/index.scss +12 -0
  22. package/packages/theme/variables.scss +34 -0
  23. package/packages/tpl/index.js +4 -4
  24. package/packages/tpl/src/index.vue +50 -39
  25. package/packages/tree/index.js +4 -4
  26. package/packages/tree/src/TreeNode.vue +29 -29
  27. package/packages/tree/src/index.vue +101 -96
  28. package/packages/tree-table-model/index.js +4 -4
  29. package/packages/tree-table-model/src/index.vue +306 -289
  30. package/scripts/rollup.config.js +35 -41
  31. package/scripts/rollup.esm.config.js +12 -0
  32. package/scripts/rollup.umd.config.js +14 -14
@@ -1,290 +1,307 @@
1
- <template>
2
- <section class="model__tree-table">
3
- <section :ref="modelTreeWrapper" class="model__tree--wrapper">
4
- <ele-tree
5
- :tree-data="treeData"
6
- :defaultExpandedKeys="defaultExpandedKeys"
7
- :defaultSelectedKeys="defaultSelectedKeys"
8
- @select="selectTreeNode"
9
- :replace-fields="treeMeta.replaceFields || replaceFields">
10
- </ele-tree>
11
- </section>
12
- <section :ref="modelTableWrapper" class="model__table--wrapper">
13
- <ele-search-area :ref="searchArea" @search="onSearch" :data-source="searchMeta.elements"></ele-search-area>
14
- <ele-button-group :ref="buttonGroup" @click="handleClickButtonGroup" style="margin-top: 16px" :data-source="getButtonGroupElements"></ele-button-group>
15
- <ele-table
16
- v-on="$listeners"
17
- :loading="loading"
18
- :columns="columns"
19
- :total="total"
20
- :actions="actions"
21
- :pageSize="pageSize"
22
- :pageSizeOptions="pageSizeOptions"
23
- :data-source="tableData"
24
- @change-page="onChangePage"
25
- style="margin-top: 8px;"
26
- ></ele-table>
27
- </section>
28
- </section>
29
- </template>
30
-
31
- <script>
32
- import EleTree from '../../tree/src/index.vue'
33
- import EleTable from '../../table/src/index.vue'
34
- import EleSearchArea from '../../composite-components/search-area/src/index.vue'
35
- import EleButtonGroup from '../../composite-components/button-group/src/index.vue'
36
- import { type, net } from '@idooel/shared'
37
- import { v4 as uuidv4 } from 'uuid'
38
- export default {
39
- name: 'ele-tree-table-model',
40
- components: {
41
- EleTree,
42
- EleTable,
43
- EleSearchArea,
44
- EleButtonGroup
45
- },
46
- props: {
47
- treeMeta: {
48
- type: Object,
49
- default: () => ({})
50
- },
51
- searchMeta: {
52
- type: Object,
53
- default: () => ({})
54
- },
55
- buttonGroupMeta: {
56
- typeof: Object,
57
- default: () => ({})
58
- },
59
- tableMeta: {
60
- type: Object,
61
- default: () => ({})
62
- }
63
- },
64
- data () {
65
- return {
66
- treeData: [],
67
- tableData: [],
68
- defaultExpandedKeys: [],
69
- defaultSelectedKeys: [],
70
- replaceFields: {
71
- title: 'title',
72
- children: 'children',
73
- key: 'id'
74
- },
75
- loading: false,
76
- total: 0,
77
- tableQuerys: {},
78
- resizeObserverModelTableWrapper: null,
79
- modelTableWrapperHeight: 0,
80
- currentTreeNodeData: {}
81
- }
82
- },
83
- computed: {
84
- buttonGroup () {
85
- return uuidv4()
86
- },
87
- searchArea () {
88
- return uuidv4()
89
- },
90
- modelTreeWrapper () {
91
- return uuidv4()
92
- },
93
- modelTableWrapper () {
94
- return uuidv4()
95
- },
96
- actions () {
97
- const { operations } = this.tableMeta
98
- return operations.elements
99
- },
100
- pageSize () {
101
- const { page = {} } = this.tableMeta
102
- return page.pageSize || 10
103
- },
104
- pageSizeOptions () {
105
- const { page = {} } = this.tableMeta
106
- return page.pageSizeOptions || ['10', '20', '30', '40']
107
- },
108
- columns () {
109
- const { columns, operations } = this.tableMeta
110
- if (type.get(columns) === 'array') {
111
- const columnsOptions = columns.map(item => {
112
- if (item.render) {
113
- return {
114
- title: item.title,
115
- dataIndex: item.dataIndex,
116
- width: item.width,
117
- align: item.align,
118
- fixed: item.fixed,
119
- customRender: (text, record, index) => {
120
- const { $createElement } = this
121
- return item.render.call(this, { h: $createElement, ctx: this }, typeof text == 'string' ? text : text[item.dataIndex], record, index)
122
- }
123
- }
124
- }
125
- return {
126
- title: item.title,
127
- dataIndex: item.dataIndex,
128
- width: item.width,
129
- align: item.align,
130
- fixed: item.fixed
131
- }
132
- })
133
- if (operations) {
134
- return [
135
- ...columnsOptions,
136
- {
137
- title: '操作',
138
- width: operations.width,
139
- key: 'action',
140
- fixed: 'right',
141
- scopedSlots: { customRender: 'action' }
142
- }
143
- ]
144
- }
145
- return columnsOptions
146
- } else {
147
- console.error('Error: columns is invalid, please check it')
148
- return []
149
- }
150
- },
151
- getButtonGroupElements () {
152
- const { elements } = this.buttonGroupMeta
153
- if (type.get(elements) === 'function') {
154
- return elements.call(this)
155
- } else if (type.get(elements) === 'array') {
156
- return elements
157
- } else {
158
- return []
159
- }
160
- }
161
- },
162
- async created () {
163
- this.treeData = await this.requestTreeData()
164
- const [defaultTreeNode = {}] = this.treeData
165
- this.defaultExpandedKeys = [defaultTreeNode[this.replaceFields.key]]
166
- this.defaultSelectedKeys = [defaultTreeNode[this.replaceFields.key]]
167
- const { fieldMap } = this.tableMeta
168
- this.currentTreeNodeData = defaultTreeNode
169
- this.tableData = await this.requestTableData(this.execTableFieldMap(fieldMap, defaultTreeNode))
170
- },
171
- methods: {
172
- handleClickButtonGroup (props) {
173
- const { eventName } = props
174
- this.$emit(eventName, { currentTreeNode: this.currentTreeNodeData })
175
- },
176
- watchViewPort () {
177
- const modelTableWrapper = this.$refs[this.modelTableWrapper]
178
- console.log(modelTableWrapper.getBoundingClientRect())
179
- const { top } = modelTableWrapper.getBoundingClientRect()
180
- this.$refs[this.modelTreeWrapper].style.height = `calc(100vh - ${top}px)`
181
- },
182
- async onSearch (props) {
183
- this.tableQuerys = Object.assign(this.tableQuerys, props)
184
- this.tableData = await this.requestTableData()
185
- },
186
- execTableFieldMap (fieldMap = {}, props) {
187
- let ret = {}
188
- const keys = Object.keys(fieldMap)
189
- keys.forEach(key => {
190
- const field = fieldMap[key]
191
- ret[field] = props[key]
192
- })
193
- return ret
194
- },
195
- async selectTreeNode (selectedKeys, e) {
196
- const { fieldMap } = this.tableMeta
197
- this.currentTreeNodeData = e.node.$vnode.data.props.dataRef
198
- const execFieldMapRet = this.execTableFieldMap(fieldMap, e.node.$vnode.data.props.dataRef)
199
- this.tableData = await this.requestTableData(execFieldMapRet)
200
- },
201
- async requestTreeData () {
202
- const { url, requestType } = this.treeMeta
203
- const ret = await net.get(
204
- url
205
- ).then(resp => {
206
- const { data } = resp || {}
207
- return data
208
- })
209
- return ret
210
- },
211
- async onChangePage (page, pageSize) {
212
- this.tableData = await this.requestTableData({ currentPage: page, pageSize })
213
- },
214
- async requestTableData (props = {}) {
215
- const { url, requestType, page = {} } = this.tableMeta
216
- const { pageSize = 10 } = page
217
- this.tableQuerys = Object.assign(this.tableQuerys, { currentPage: 1, pageSize }, props)
218
- const ret = await net.get(
219
- url,
220
- this.tableQuerys
221
- ).then(resp => {
222
- const { data = [], count } = resp || {}
223
- this.total = count
224
- return data.map(item => {
225
- return {
226
- key: uuidv4(),
227
- ...item
228
- }
229
- })
230
- })
231
- return ret
232
- },
233
- refreshTreeStatus (props = {}) {},
234
- refreshTableStatus (props = {}) {},
235
- getModelTableWrapperHeight () {},
236
- setModelTreeWrapperHeight (height) {
237
- this.$refs[this.modelTreeWrapper].style.height = height
238
- },
239
- setModelTableWrapperHeight () {
240
- const { top } = this.$refs[this.modelTableWrapper].getBoundingClientRect()
241
- const height = `calc(100vh - ${top}px)`
242
- this.$refs[this.modelTableWrapper].style.height = height
243
- this.setModelTreeWrapperHeight(height)
244
- },
245
- getSearchAreaHeight () {
246
- return this.$refs[this.searchArea].$el.clientHeight
247
- },
248
- getButtonGroupHeight () {
249
- return this.$refs[this.buttonGroup].$el.clientHeight
250
- }
251
- },
252
- mounted () {
253
- //TODO
254
- // this.setModelTableWrapperHeight()
255
- // this.resizeObserverModelTableWrapper = new ResizeObserver(entries => {
256
- // for (let entry of entries) {
257
- // this.modelTableWrapperHeight = entry.contentRect.height
258
- // console.log('this.modelTableWrapperHeight:', this.modelTableWrapperHeight)
259
- // console.log('getSearchAreaHeight', this.getSearchAreaHeight())
260
- // console.log('getButtonGroupHeight', this.getButtonGroupHeight())
261
- // const tableHeight = this.modelTableWrapperHeight - this.getSearchAreaHeight() - this.getButtonGroupHeight()
262
- // console.log('tableHeight', tableHeight)
263
- // }
264
- // })
265
- // this.resizeObserverModelTableWrapper.observe(this.$refs[this.modelTableWrapper])
266
- }
267
- }
268
- </script>
269
-
270
- <style lang="scss" scoped>
271
- .model__tree-table {
272
- background: transparent;
273
- display: flex;
274
- flex-direction: row;
275
- width: 100%;
276
- .model__tree--wrapper {
277
- width: 240px;
278
- background: #fff;
279
- flex-shrink: 0;
280
- padding: 16px;
281
- box-sizing: border-box;
282
- margin-right: 16px;
283
- overflow-y: auto;
284
- }
285
- .model__table--wrapper {
286
- min-width: 0;
287
- background: #fff;
288
- }
289
- }
1
+ <template>
2
+ <section class="model__tree-table">
3
+ <section class="model__tree-table--container">
4
+ <div class="model__tree--title"></div>
5
+ <section :ref="modelTreeWrapper" class="model__tree--wrapper">
6
+ <ele-tree
7
+ :tree-data="treeData"
8
+ :defaultExpandedKeys="defaultExpandedKeys"
9
+ :defaultSelectedKeys="defaultSelectedKeys"
10
+ @select="selectTreeNode"
11
+ :replace-fields="treeMeta.replaceFields || replaceFields">
12
+ </ele-tree>
13
+ </section>
14
+ </section>
15
+ <section class="model__table--container">
16
+ <div class="model__table--title"></div>
17
+ <section :ref="modelTableWrapper" class="model__table--wrapper">
18
+ <ele-search-area :ref="searchArea" @search="onSearch" :data-source="searchMeta.elements"></ele-search-area>
19
+ <ele-button-group v-on="$listeners" :ref="buttonGroup" @click="handleClickButtonGroup" style="margin-top: 16px" :data-source="getButtonGroupElements"></ele-button-group>
20
+ <ele-table
21
+ v-on="$listeners"
22
+ :loading="loading"
23
+ :columns="columns"
24
+ :total="total"
25
+ :actions="actions"
26
+ :pageSize="pageSize"
27
+ :pageSizeOptions="pageSizeOptions"
28
+ :data-source="tableData"
29
+ @change-page="onChangePage"
30
+ style="margin-top: 8px;"
31
+ ></ele-table>
32
+ </section>
33
+ </section>
34
+ </section>
35
+ </template>
36
+
37
+ <script>
38
+ import EleTree from '../../tree/src/index.vue'
39
+ import EleTable from '../../table/src/index.vue'
40
+ import EleSearchArea from '../../composite-components/search-area/src/index.vue'
41
+ import EleButtonGroup from '../../composite-components/button-group/src/index.vue'
42
+ import { type, net } from '@idooel/shared'
43
+ import { v4 as uuidv4 } from 'uuid'
44
+ export default {
45
+ name: 'ele-tree-table-model',
46
+ components: {
47
+ EleTree,
48
+ EleTable,
49
+ EleSearchArea,
50
+ EleButtonGroup
51
+ },
52
+ props: {
53
+ treeMeta: {
54
+ type: Object,
55
+ default: () => ({})
56
+ },
57
+ searchMeta: {
58
+ type: Object,
59
+ default: () => ({})
60
+ },
61
+ buttonGroupMeta: {
62
+ typeof: Object,
63
+ default: () => ({})
64
+ },
65
+ tableMeta: {
66
+ type: Object,
67
+ default: () => ({})
68
+ }
69
+ },
70
+ provide () {
71
+ return {
72
+ requestTreeData: this.requestTreeData,
73
+ requestTableData: this.requestTableData
74
+ }
75
+ },
76
+ data () {
77
+ return {
78
+ treeData: [],
79
+ tableData: [],
80
+ defaultExpandedKeys: [],
81
+ defaultSelectedKeys: [],
82
+ replaceFields: {
83
+ title: 'title',
84
+ children: 'children',
85
+ key: 'id'
86
+ },
87
+ loading: false,
88
+ total: 0,
89
+ tableQuerys: {},
90
+ resizeObserverModelTableWrapper: null,
91
+ modelTableWrapperHeight: 0,
92
+ currentTreeNodeData: {}
93
+ }
94
+ },
95
+ computed: {
96
+ buttonGroup () {
97
+ return uuidv4()
98
+ },
99
+ searchArea () {
100
+ return uuidv4()
101
+ },
102
+ modelTreeWrapper () {
103
+ return uuidv4()
104
+ },
105
+ modelTableWrapper () {
106
+ return uuidv4()
107
+ },
108
+ actions () {
109
+ const { operations } = this.tableMeta
110
+ return operations.elements
111
+ },
112
+ pageSize () {
113
+ const { page = {} } = this.tableMeta
114
+ return page.pageSize || 10
115
+ },
116
+ pageSizeOptions () {
117
+ const { page = {} } = this.tableMeta
118
+ return page.pageSizeOptions || ['10', '20', '30', '40']
119
+ },
120
+ columns () {
121
+ const { columns, operations } = this.tableMeta
122
+ if (type.get(columns) === 'array') {
123
+ const columnsOptions = columns.map(item => {
124
+ if (item.render) {
125
+ return {
126
+ title: item.title,
127
+ dataIndex: item.dataIndex,
128
+ width: item.width,
129
+ align: item.align,
130
+ fixed: item.fixed,
131
+ customRender: (text, record, index) => {
132
+ const { $createElement } = this
133
+ return item.render.call(this, { h: $createElement, ctx: this }, typeof text == 'string' ? text : text[item.dataIndex], record, index)
134
+ }
135
+ }
136
+ }
137
+ return {
138
+ title: item.title,
139
+ dataIndex: item.dataIndex,
140
+ width: item.width,
141
+ align: item.align,
142
+ fixed: item.fixed
143
+ }
144
+ })
145
+ if (operations) {
146
+ return [
147
+ ...columnsOptions,
148
+ {
149
+ title: '操作',
150
+ width: operations.width,
151
+ key: 'action',
152
+ fixed: 'right',
153
+ scopedSlots: { customRender: 'action' }
154
+ }
155
+ ]
156
+ }
157
+ return columnsOptions
158
+ } else {
159
+ console.error('Error: columns is invalid, please check it')
160
+ return []
161
+ }
162
+ },
163
+ getButtonGroupElements () {
164
+ const { elements } = this.buttonGroupMeta
165
+ if (type.get(elements) === 'function') {
166
+ return elements.call(this)
167
+ } else if (type.get(elements) === 'array') {
168
+ return elements
169
+ } else {
170
+ return []
171
+ }
172
+ }
173
+ },
174
+ async created () {
175
+ this.treeData = await this.requestTreeData()
176
+ const [defaultTreeNode = {}] = this.treeData
177
+ this.defaultExpandedKeys = [defaultTreeNode[this.replaceFields.key]]
178
+ this.defaultSelectedKeys = [defaultTreeNode[this.replaceFields.key]]
179
+ const { fieldMap } = this.tableMeta
180
+ this.currentTreeNodeData = defaultTreeNode
181
+ this.tableData = await this.requestTableData(this.execTableFieldMap(fieldMap, defaultTreeNode))
182
+ },
183
+ methods: {
184
+ handleClickButtonGroup (props) {
185
+ const { eventName } = props
186
+ this.$emit(eventName, { currentTreeNode: this.currentTreeNodeData })
187
+ },
188
+ watchViewPort () {
189
+ const modelTableWrapper = this.$refs[this.modelTableWrapper]
190
+ console.log(modelTableWrapper.getBoundingClientRect())
191
+ const { top } = modelTableWrapper.getBoundingClientRect()
192
+ this.$refs[this.modelTreeWrapper].style.height = `calc(100vh - ${top}px)`
193
+ },
194
+ async onSearch (props) {
195
+ this.tableQuerys = Object.assign(this.tableQuerys, props)
196
+ this.tableData = await this.requestTableData()
197
+ },
198
+ execTableFieldMap (fieldMap = {}, props) {
199
+ let ret = {}
200
+ const keys = Object.keys(fieldMap)
201
+ keys.forEach(key => {
202
+ const field = fieldMap[key]
203
+ ret[field] = props[key]
204
+ })
205
+ return ret
206
+ },
207
+ async selectTreeNode (selectedKeys, e) {
208
+ const { fieldMap } = this.tableMeta
209
+ this.currentTreeNodeData = e.node.$vnode.data.props.dataRef
210
+ const execFieldMapRet = this.execTableFieldMap(fieldMap, e.node.$vnode.data.props.dataRef)
211
+ this.tableData = await this.requestTableData(execFieldMapRet)
212
+ },
213
+ async requestTreeData () {
214
+ const { url, requestType } = this.treeMeta
215
+ const ret = await net.get(
216
+ url
217
+ ).then(resp => {
218
+ const { data } = resp || {}
219
+ return data
220
+ })
221
+ return ret
222
+ },
223
+ async onChangePage (page, pageSize) {
224
+ this.tableData = await this.requestTableData({ currentPage: page, pageSize })
225
+ },
226
+ async requestTableData (props = {}) {
227
+ const { url, requestType, page = {} } = this.tableMeta
228
+ const { pageSize = 10 } = page
229
+ this.tableQuerys = Object.assign(this.tableQuerys, { currentPage: 1, pageSize }, props)
230
+ const ret = await net.get(
231
+ url,
232
+ this.tableQuerys
233
+ ).then(resp => {
234
+ const { data = [], count } = resp || {}
235
+ this.total = count
236
+ return data.map(item => {
237
+ return {
238
+ key: uuidv4(),
239
+ ...item
240
+ }
241
+ })
242
+ })
243
+ return ret
244
+ },
245
+ refreshTreeStatus (props = {}) {},
246
+ refreshTableStatus (props = {}) {},
247
+ getModelTableWrapperHeight () {},
248
+ setModelTreeWrapperHeight (height) {
249
+ this.$refs[this.modelTreeWrapper].style.height = height
250
+ },
251
+ setModelTableWrapperHeight () {
252
+ const { top } = this.$refs[this.modelTableWrapper].getBoundingClientRect()
253
+ const height = `calc(100vh - ${top}px)`
254
+ this.$refs[this.modelTableWrapper].style.height = height
255
+ this.setModelTreeWrapperHeight(height)
256
+ },
257
+ getSearchAreaHeight () {
258
+ return this.$refs[this.searchArea].$el.clientHeight
259
+ },
260
+ getButtonGroupHeight () {
261
+ return this.$refs[this.buttonGroup].$el.clientHeight
262
+ }
263
+ },
264
+ mounted () {
265
+ //TODO
266
+ // this.setModelTableWrapperHeight()
267
+ // this.resizeObserverModelTableWrapper = new ResizeObserver(entries => {
268
+ // for (let entry of entries) {
269
+ // this.modelTableWrapperHeight = entry.contentRect.height
270
+ // console.log('this.modelTableWrapperHeight:', this.modelTableWrapperHeight)
271
+ // console.log('getSearchAreaHeight', this.getSearchAreaHeight())
272
+ // console.log('getButtonGroupHeight', this.getButtonGroupHeight())
273
+ // const tableHeight = this.modelTableWrapperHeight - this.getSearchAreaHeight() - this.getButtonGroupHeight()
274
+ // console.log('tableHeight', tableHeight)
275
+ // }
276
+ // })
277
+ // this.resizeObserverModelTableWrapper.observe(this.$refs[this.modelTableWrapper])
278
+ }
279
+ }
280
+ </script>
281
+
282
+ <style lang="scss" scoped>
283
+ .model__tree-table {
284
+ background: transparent;
285
+ display: flex;
286
+ flex-direction: row;
287
+ width: 100%;
288
+ .model__tree-table--container {
289
+ .model__tree--wrapper {
290
+ width: 240px;
291
+ background: #fff;
292
+ flex-shrink: 0;
293
+ padding: 16px;
294
+ box-sizing: border-box;
295
+ margin-right: 16px;
296
+ overflow-y: auto;
297
+ }
298
+ }
299
+ .model__table--container {
300
+ min-width: 0;
301
+ background: #fff;
302
+ .model__table--wrapper {
303
+ background: #fff;
304
+ }
305
+ }
306
+ }
290
307
  </style>