@idooel/components 0.0.1 → 0.0.2-beta.10

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 (96) hide show
  1. package/README.md +99 -0
  2. package/dist/@idooel/components.esm.js +13639 -1388
  3. package/dist/@idooel/components.umd.js +13682 -1397
  4. package/jsconfig.json +8 -0
  5. package/package.json +58 -44
  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/src/index.vue +43 -2
  19. package/packages/checkbox/index.js +5 -0
  20. package/packages/checkbox/src/index.vue +53 -0
  21. package/packages/composite-components/button-group/src/index.vue +119 -14
  22. package/packages/composite-components/form-attachment/src/index.vue +15 -0
  23. package/packages/composite-components/form-img-crop/index.js +5 -0
  24. package/packages/composite-components/form-img-crop/src/index.vue +132 -0
  25. package/packages/composite-components/modal-confirm/index.js +5 -0
  26. package/packages/composite-components/modal-confirm/src/index.vue +104 -0
  27. package/packages/composite-components/modal-form/index.js +5 -0
  28. package/packages/composite-components/modal-form/src/index.vue +231 -0
  29. package/packages/composite-components/modal-img-crop/index.js +5 -0
  30. package/packages/composite-components/modal-img-crop/src/index.vue +299 -0
  31. package/packages/composite-components/modal-table/index.js +5 -0
  32. package/packages/composite-components/modal-table/src/index.vue +156 -0
  33. package/packages/composite-components/modal-table-transfer/index.js +0 -0
  34. package/packages/composite-components/modal-tree/index.js +5 -0
  35. package/packages/composite-components/modal-tree/src/index.vue +76 -0
  36. package/packages/composite-components/search-area/src/index.vue +145 -36
  37. package/packages/composite-components/select-entity-modal-table/index.js +5 -0
  38. package/packages/composite-components/select-entity-modal-table/src/index.vue +172 -0
  39. package/packages/composite-components/table-transfer/index.js +0 -0
  40. package/packages/date/src/index.vue +87 -14
  41. package/packages/date-range/index.js +5 -0
  42. package/packages/date-range/src/index.vue +47 -0
  43. package/packages/form/index.js +5 -0
  44. package/packages/form/src/index.vue +320 -0
  45. package/packages/icon/index.js +5 -0
  46. package/packages/icon/src/index.vue +32 -0
  47. package/packages/index.js +109 -6
  48. package/packages/input/src/index.vue +13 -1
  49. package/packages/input-number/index.js +5 -0
  50. package/packages/input-number/src/index.vue +24 -0
  51. package/packages/loading/index.js +5 -0
  52. package/packages/loading/src/index.vue +37 -0
  53. package/packages/modal/index.js +5 -0
  54. package/packages/modal/src/index.vue +185 -0
  55. package/packages/models/form-group-model/index.js +5 -0
  56. package/packages/models/form-group-model/src/index.vue +274 -0
  57. package/packages/models/form-model/index.js +5 -0
  58. package/packages/models/form-model/src/index.vue +237 -0
  59. package/packages/models/step-model/index.js +5 -0
  60. package/packages/models/step-model/src/index.vue +224 -0
  61. package/packages/models/tree-table-model/src/index.vue +689 -0
  62. package/packages/radio/index.js +5 -0
  63. package/packages/radio/src/index.vue +57 -0
  64. package/packages/select/src/index.vue +73 -2
  65. package/packages/select-entity/index.js +5 -0
  66. package/packages/select-entity/src/index.vue +120 -0
  67. package/packages/table/src/action.vue +81 -12
  68. package/packages/table/src/index.vue +244 -13
  69. package/packages/tabs/index.js +5 -0
  70. package/packages/tabs/src/index.vue +56 -0
  71. package/packages/text/index.js +5 -0
  72. package/packages/text/src/index.vue +48 -0
  73. package/packages/text-editor/index.js +5 -0
  74. package/packages/text-editor/src/index.vue +73 -0
  75. package/packages/textarea/index.js +5 -0
  76. package/packages/textarea/src/index.vue +58 -0
  77. package/packages/theme/form.scss +22 -0
  78. package/packages/theme/index.scss +44 -0
  79. package/packages/theme/overrid.scss +8 -0
  80. package/packages/theme/styleClass.scss +3 -0
  81. package/packages/theme/variables.scss +56 -0
  82. package/packages/timeline/index.js +5 -0
  83. package/packages/timeline/src/index.vue +258 -0
  84. package/packages/tpl/src/index.vue +12 -3
  85. package/packages/tree/src/index.vue +32 -27
  86. package/packages/tree-select/index.js +5 -0
  87. package/packages/tree-select/src/index.vue +143 -0
  88. package/packages/upload/index.js +5 -0
  89. package/packages/upload/src/index.vue +997 -0
  90. package/packages/utils/index.js +63 -0
  91. package/scripts/rollup.config.js +18 -11
  92. package/scripts/rollup.umd.config.js +3 -1
  93. package/vitest.config.js +17 -0
  94. package/packages/tree-table-model/src/index.vue +0 -290
  95. /package/packages/{tree-table-model/README.md → composite-components/form-attachment/index.js} +0 -0
  96. /package/packages/{tree-table-model → models/tree-table-model}/index.js +0 -0
@@ -0,0 +1,63 @@
1
+ import { parse } from '@idooel/expression'
2
+
3
+ export const NAMESPACE = '__idooel__ele__'
4
+ export const CONTEXT = '__idooel__ele__context__'
5
+ export const EXPOSED = 'exposed'
6
+
7
+ export const AREA_NAMES = {
8
+ BUTTON_GROUP: 'BUTTON_GROUP'
9
+ }
10
+
11
+ export const BUILT_IN_EVENT_NAMES = {
12
+ SUBMIT: 'submit',
13
+ CANCEL: 'cancel',
14
+ INCREASE: 'increase',
15
+ DELETE: 'delete',
16
+ NEXT: 'next',
17
+ PREVIOUS: 'previous',
18
+ // create, edit, view are reserved for table cru in the current version
19
+ CREATE: 'create',
20
+ EDIT: 'edit',
21
+ VIEW: 'view'
22
+ }
23
+ export const BUILT_IN_METHODS_NAMES = {
24
+ CLOSE_MODAL: 'closeModal',
25
+ SUBMIT_FORM: 'submitForm',
26
+ //TODO: not use
27
+ REFRESH_TABLE: 'refreshTable',
28
+ CLEAN_EFFECT: 'cleanEffect'
29
+ }
30
+
31
+ export const BUILT_IN_TRIGGER = {
32
+ // default it's not a trigger
33
+ TEXT: 'text',
34
+ //状态机触发器
35
+ FSM: 'fsm',
36
+ ELE_MODAL_FORM: 'ele-modal-form',
37
+ ELE_MODAL_TABLE: 'ele-modal-table'
38
+ }
39
+ export const PAGE_STATUS = {
40
+ CREATE: 'create',
41
+ //TODO implement edit and view
42
+ EDIT: 'edit',
43
+ VIEW: 'view'
44
+ }
45
+ export const RESERVE_EVENT_NAMES = {
46
+ //global event
47
+ INIT: 'init',
48
+ WATCH: 'watch',
49
+ //form event
50
+ WATCH_FORM_STATUS: 'watch-form-status',
51
+ INIT_FORM: 'init-form',
52
+ //table event
53
+ SEARCH: 'search',
54
+ TREE_CHANGE: 'tree-change'
55
+ }
56
+
57
+ export const parseFieldMap = (fieldMap = {}, dataSource = {}) => {
58
+ let ret = {}
59
+ Object.keys(fieldMap).forEach((key) => {
60
+ ret[fieldMap[key]] = parse(key, dataSource)
61
+ })
62
+ return ret
63
+ }
@@ -5,32 +5,39 @@ import strip from '@rollup/plugin-strip'
5
5
  import vue from 'rollup-plugin-vue'
6
6
  import postcss from 'rollup-plugin-postcss'
7
7
  import postcssImport from 'postcss-import'
8
- import babel from 'rollup-plugin-babel'
8
+ import { babel } from '@rollup/plugin-babel'
9
+ import alias from '@rollup/plugin-alias'
10
+ import { resolve } from 'path'
9
11
 
10
12
  //TODO: bundle all packages in future
11
13
 
12
14
  /** @type { import('rollup').RollupOptions } */
13
15
  export default {
14
16
  input: 'packages/index.js',
15
- external: ['vue', '@idooel/shared'],
17
+ external: ['vue', '@idooel/shared', '@idooel/expression', 'vue-upload-component', 'moment'],
16
18
  plugins: [
17
19
  nodeResolve(),
18
- babel({
19
- exclude: 'node_modules/**'
20
- }),
21
20
  vue({
22
21
  css: true,
23
22
  compileTemplate: true
24
23
  }),
24
+ alias({
25
+ entries: [
26
+ { find: '@/utils', replacement: resolve(__dirname, '../packages/utils') }
27
+ ]
28
+ }),
29
+ babel({
30
+ babelHelpers: 'bundled',
31
+ presets: ['@vue/babel-preset-jsx'],
32
+ extensions: ['.js', '.jsx', '.es', '.es6', '.mjs', '.vue'],
33
+ filter: id=>{
34
+ return /(\.js|\.jsx|\.es6|\.es|\.mjs)$/.test(id) && !/node_modules/.test(id)
35
+ }
36
+ }),
25
37
  postcss({
26
- extensions: ['.css'],
38
+ extensions: ['.css', '.scss'],
27
39
  extract: true,
28
40
  plugins: [postcssImport()]
29
41
  })
30
- // terser(),
31
- // strip({
32
- // functions: ['console.log', 'assert.*', 'debug', 'alert'],
33
- // sourceMap: true
34
- // })
35
42
  ]
36
43
  }
@@ -8,7 +8,9 @@ export default {
8
8
  file: main,
9
9
  format: 'umd',
10
10
  globals: {
11
- vue: 'Vue'
11
+ vue: 'Vue',
12
+ '@idooel/shared': '@idooel/shared',
13
+ '@idooel/expression': '@idooel/expression'
12
14
  },
13
15
  exports: 'named'
14
16
  }
@@ -0,0 +1,17 @@
1
+ import { defineConfig } from 'vitest/config'
2
+ import vue from '@vitejs/plugin-vue2'
3
+ import path from 'path'
4
+
5
+ export default defineConfig({
6
+ plugins: [vue()],
7
+ resolve: {
8
+ alias: {
9
+ '@': path.resolve(__dirname, 'packages')
10
+ }
11
+ },
12
+ test: {
13
+ environment: 'jsdom',
14
+ globals: true,
15
+ setupFiles: ['__tests__/setup.js']
16
+ }
17
+ })
@@ -1,290 +0,0 @@
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
- }
290
- </style>