@idooel/components 0.0.0 → 0.0.1-beta.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 (60) hide show
  1. package/dist/@idooel/components.esm.js +4551 -0
  2. package/dist/@idooel/components.umd.js +3305 -547
  3. package/package.json +45 -41
  4. package/packages/attachment/index.js +0 -0
  5. package/packages/attachment/src/index.vue +15 -0
  6. package/packages/batch-export/index.js +5 -0
  7. package/packages/batch-export/src/index.vue +15 -0
  8. package/packages/button/index.js +4 -4
  9. package/packages/button/src/index.vue +54 -24
  10. package/packages/checkbox/index.js +5 -0
  11. package/packages/checkbox/src/index.vue +44 -0
  12. package/packages/composite-components/button-group/index.js +4 -4
  13. package/packages/composite-components/button-group/src/index.vue +45 -46
  14. package/packages/composite-components/search-area/index.js +4 -4
  15. package/packages/composite-components/search-area/src/index.vue +206 -128
  16. package/packages/composite-components/search-area/src/label.vue +35 -35
  17. package/packages/date/index.js +4 -4
  18. package/packages/date/src/index.vue +39 -39
  19. package/packages/form/index.js +5 -0
  20. package/packages/form/src/index.vue +119 -0
  21. package/packages/form-model/index.js +5 -0
  22. package/packages/form-model/src/index.vue +139 -0
  23. package/packages/icon/index.js +5 -0
  24. package/packages/icon/src/index.vue +32 -0
  25. package/packages/index.js +73 -49
  26. package/packages/input/index.js +4 -4
  27. package/packages/input/src/index.vue +27 -23
  28. package/packages/input-number/index.js +5 -0
  29. package/packages/input-number/src/index.vue +24 -0
  30. package/packages/modal/index.js +5 -0
  31. package/packages/modal/src/index.vue +129 -0
  32. package/packages/radio/index.js +5 -0
  33. package/packages/radio/src/index.vue +48 -0
  34. package/packages/select/index.js +4 -4
  35. package/packages/select/src/index.vue +34 -34
  36. package/packages/select-entity/index.js +5 -0
  37. package/packages/select-entity/src/index.vue +114 -0
  38. package/packages/table/index.js +4 -4
  39. package/packages/table/src/action.vue +131 -44
  40. package/packages/table/src/index.vue +157 -88
  41. package/packages/text/index.js +5 -0
  42. package/packages/text/src/index.vue +15 -0
  43. package/packages/textarea/index.js +5 -0
  44. package/packages/textarea/src/index.vue +49 -0
  45. package/packages/theme/form.scss +24 -0
  46. package/packages/theme/index.scss +24 -0
  47. package/packages/theme/variables.scss +56 -0
  48. package/packages/tpl/index.js +4 -4
  49. package/packages/tpl/src/index.vue +50 -39
  50. package/packages/tree/index.js +4 -4
  51. package/packages/tree/src/TreeNode.vue +29 -29
  52. package/packages/tree/src/index.vue +101 -96
  53. package/packages/tree-table-model/index.js +4 -4
  54. package/packages/tree-table-model/src/index.vue +314 -289
  55. package/packages/upload/index.js +5 -0
  56. package/packages/upload/src/index.vue +351 -0
  57. package/packages/utils/index.js +4 -0
  58. package/scripts/rollup.config.js +35 -41
  59. package/scripts/rollup.esm.config.js +12 -0
  60. package/scripts/rollup.umd.config.js +14 -14
@@ -1,129 +1,207 @@
1
- <template>
2
- <div class="search-area__wrapper">
3
- <a-row :gutter="gutter">
4
- <a-col :span="item.span || span" v-for="(item, idx) in innerDataSource" :key="idx">
5
- <div v-if="item.type == '_action'" class="search-area__item search-area--action">
6
- <ele-button icon="search" type="primary" @click="handleClickSearch">查询</ele-button>
7
- <ele-button style="margin-left:8px;" icon="reload" @click="handleClickReset">重置</ele-button>
8
- </div>
9
- <div v-else class="search-area__item">
10
- <template v-if="item.type == 'Input'">
11
- <Label :label="item.label"></Label>
12
- <ele-input v-model="item._value"></ele-input>
13
- </template>
14
- <template v-else-if="item.type == 'Select'">
15
- <Label :label="item.label"></Label>
16
- <ele-select v-model="item._value" :data-source="item.optionList"></ele-select>
17
- </template>
18
- <template v-else-if="item.type == 'DatePicker'">
19
- <Label :label="item.label"></Label>
20
- <ele-date v-model="item._value" :format="item.format"></ele-date>
21
- </template>
22
- </div>
23
- </a-col>
24
- </a-row>
25
- </div>
26
- </template>
27
-
28
- <script>
29
- import EleInput from '../../../input/src/index.vue'
30
- import EleSelect from '../../../select/src/index.vue'
31
- import ELeButton from '../../../button/src/index.vue'
32
- import EleDate from '../../../date/src/index.vue'
33
- import Label from './label.vue'
34
- import moment from 'moment'
35
- export default {
36
- name: 'ele-search-area',
37
- components: {
38
- EleInput,
39
- EleSelect,
40
- ELeButton,
41
- Label,
42
- EleDate
43
- },
44
- props: {
45
- gutter: {
46
- type: [Number, Array, Object],
47
- default: () => ([
48
- 16, 8
49
- ])
50
- },
51
- span: {
52
- type: Number,
53
- default: 8
54
- },
55
- dataSource: {
56
- type: Array,
57
- required: true
58
- }
59
- },
60
- computed: {
61
- actionColOffset () {
62
- return ((24 / this.span) - 1) * this.span
63
- },
64
- innerDataSource () {
65
- return [...this.dataSource, { type: '_action' }]
66
- }
67
- },
68
- methods: {
69
- handleClickSearch () {
70
- const querys = this.extractValues()
71
- this.$emit('search', querys)
72
- },
73
- extractValues () {
74
- let ret = {}
75
- this.innerDataSource.filter(item => item.type !== '_action').forEach(item => {
76
- switch (item.type) {
77
- case 'DatePicker':
78
- ret[item.name] = moment(item._value).isValid() ? moment(item._value).format(item.format) : null
79
- break
80
- default:
81
- ret[item.name] = item._value
82
- break
83
- }
84
- })
85
- return ret
86
- },
87
- handleClickReset () {
88
- this.innerDataSource.filter(item => item.type !== '_action').forEach(item => {
89
- switch (item.type) {
90
- case 'Select':
91
- this.$set(item, '_value', null)
92
- break
93
- case 'DatePicker':
94
- this.$set(item, '_value', null)
95
- break
96
- default:
97
- this.$set(item, '_value', null)
98
- break
99
- }
100
- })
101
- //TODO defaultValue
102
- const querys = this.extractValues()
103
- this.$emit('search', querys)
104
- },
105
- onChangeSelect (value, props) {
106
- this.$set(props, '_value', value)
107
- }
108
- }
109
- }
110
- </script>
111
-
112
- <style lang="scss" scoped>
113
- .search-area__wrapper {
114
- padding-top: 16px;
115
- padding-left: 16px;
116
- padding-right: 16px;
117
- ::v-deep .ant-col {
118
- &:last-child {
119
- float: right;
120
- }
121
- }
122
- .search-area__item {
123
- height: 32px;
124
- display: flex;
125
- flex-direction: row;
126
- align-items: center;
127
- }
128
- }
1
+ <template>
2
+ <div class="search-area__wrapper">
3
+ <a-row :gutter="gutter">
4
+ <template v-for="(item, idx) in innerDataSource">
5
+ <a-col v-if="item._show" :span="item.span || span" :key="idx">
6
+ <div v-if="item.type == '_action'" class="search-area__item search-area--action">
7
+ <ele-button icon="search" type="primary" @click="handleClickSearch">查询</ele-button>
8
+ <ele-button style="margin-left:8px;" icon="reload" @click="handleClickReset">重置</ele-button>
9
+ <div class="expand-collapse" @click="handleClickExpandCollapse">
10
+ <span class="expand-collapse__text">{{ isExpand ? '收起' : '展开' }}</span>
11
+ <span class="expand-collapse__icon">
12
+ <a-icon v-if="isExpand" type="up" />
13
+ <a-icon v-else type="down" />
14
+ </span>
15
+ </div>
16
+ </div>
17
+ <div v-else class="search-area__item">
18
+ <template v-if="item.type == 'Input'">
19
+ <Label :label="item.label"></Label>
20
+ <ele-input v-model="item._value"></ele-input>
21
+ </template>
22
+ <template v-else-if="item.type == 'Select'">
23
+ <Label :label="item.label"></Label>
24
+ <ele-select v-model="item._value" :data-source="item.optionList"></ele-select>
25
+ </template>
26
+ <template v-else-if="item.type == 'DatePicker'">
27
+ <Label :label="item.label"></Label>
28
+ <ele-date v-model="item._value" :format="item.format"></ele-date>
29
+ </template>
30
+ </div>
31
+ </a-col>
32
+ </template>
33
+ </a-row>
34
+ </div>
35
+ </template>
36
+
37
+ <script>
38
+ import EleInput from '../../../input/src/index.vue'
39
+ import EleSelect from '../../../select/src/index.vue'
40
+ import ELeButton from '../../../button/src/index.vue'
41
+ import EleDate from '../../../date/src/index.vue'
42
+ import Label from './label.vue'
43
+ import moment from 'moment'
44
+ import { parse } from '@idooel/expression'
45
+ export default {
46
+ name: 'ele-search-area',
47
+ components: {
48
+ EleInput,
49
+ EleSelect,
50
+ ELeButton,
51
+ Label,
52
+ EleDate
53
+ },
54
+ props: {
55
+ gutter: {
56
+ type: [Number, Array, Object],
57
+ default: () => ([
58
+ 16, 8
59
+ ])
60
+ },
61
+ span: {
62
+ type: Number,
63
+ default: 8
64
+ },
65
+ dataSource: {
66
+ type: Array,
67
+ required: true
68
+ }
69
+ },
70
+ data() {
71
+ return {
72
+ isExpand: false
73
+ }
74
+ },
75
+ computed: {
76
+ cuttingFormula () {
77
+ return (24 / this.span - 1)
78
+ },
79
+ buildDataSource () {
80
+ return this.controlDisplayByFormula(this.mapDefaultValueToValue())
81
+ },
82
+ innerDataSource () {
83
+ return [ ...this.buildDataSource, { type: '_action', _show: true }]
84
+ }
85
+ },
86
+ created() {},
87
+ methods: {
88
+ controlDisplayByFormula (dataSource = []) {
89
+ if (this.isExpand) {
90
+ dataSource.forEach(item => {
91
+ this.$set(item, '_show', true)
92
+ })
93
+ } else {
94
+ dataSource.forEach((item, idx) => {
95
+ if (idx < this.cuttingFormula) {
96
+ this.$set(item, '_show', true)
97
+ } else {
98
+ this.$set(item, '_show', false)
99
+ }
100
+ })
101
+ }
102
+ return dataSource
103
+ },
104
+ buildDefaultValue (arg) {
105
+ if (!arg || arg.charAt(0) !== '_') return arg
106
+ return parse(arg, {
107
+ _route: this.$route.query
108
+ })
109
+ },
110
+ mapDefaultValueToValue () {
111
+ this.dataSource.forEach(props => {
112
+ this.$set(props, '_show', this.isExpand)
113
+ if (props.defaultValue) {
114
+ this.$set(props, '_value', this.buildDefaultValue(props.defaultValue))
115
+ }
116
+ })
117
+ return this.dataSource
118
+ },
119
+ handleClickExpandCollapse () {
120
+ this.isExpand = !this.isExpand
121
+ },
122
+ handleClickSearch () {
123
+ const querys = this.extractValues()
124
+ this.$emit('search', querys)
125
+ },
126
+ extractValues () {
127
+ let ret = {}
128
+ this.innerDataSource.filter(item => item.type !== '_action').forEach(item => {
129
+ switch (item.type) {
130
+ case 'DatePicker':
131
+ ret[item.name] = typeof item._value == 'undefined' ? undefined : moment(item._value).format(item.format)
132
+ break
133
+ default:
134
+ ret[item.name] = item._value
135
+ break
136
+ }
137
+ })
138
+ return ret
139
+ },
140
+ handleClickReset () {
141
+ this.innerDataSource.filter(item => item.type !== '_action').forEach(item => {
142
+ const { defaultValue } = item
143
+ switch (item.type) {
144
+ case 'Select':
145
+ defaultValue && this.$set(item, '_value', this.buildDefaultValue(defaultValue))
146
+ !defaultValue && this.$set(item, '_value', null)
147
+ break
148
+ case 'DatePicker':
149
+ defaultValue && this.$set(item, '_value', this.buildDefaultValue(defaultValue))
150
+ !defaultValue && this.$set(item, '_value', undefined)
151
+ break
152
+ default:
153
+ defaultValue && this.$set(item, '_value', this.buildDefaultValue(defaultValue))
154
+ !defaultValue && this.$set(item, '_value', null)
155
+ break
156
+ }
157
+ })
158
+ //TODO defaultValue
159
+ const querys = this.extractValues()
160
+ this.$emit('search', querys)
161
+ },
162
+ onChangeSelect (value, props) {
163
+ this.$set(props, '_value', value)
164
+ }
165
+ }
166
+ }
167
+ </script>
168
+
169
+ <style lang="scss" scoped>
170
+ .search-area__wrapper {
171
+ padding-top: 16px;
172
+ padding-left: 16px;
173
+ padding-right: 16px;
174
+ ::v-deep .ant-col {
175
+ &:last-child {
176
+ float: right;
177
+ }
178
+ }
179
+ .search-area__item {
180
+ height: 32px;
181
+ display: flex;
182
+ flex-direction: row;
183
+ align-items: center;
184
+ &.search-area--action {
185
+ justify-content: end;
186
+ }
187
+ .expand-collapse {
188
+ margin-left: 8px;
189
+ height: 32px;
190
+ padding: 4px 16px;
191
+ color: var(--idooel-primary-color);
192
+ display: flex;
193
+ flex-direction: row;
194
+ align-items: center;
195
+ justify-content: center;
196
+ cursor: pointer;
197
+ .expand-collapse__text {
198
+ font-size: 14px;
199
+ }
200
+ .expand-collapse__icon {
201
+ font-size: 16px;
202
+ margin-left: 8px;
203
+ }
204
+ }
205
+ }
206
+ }
129
207
  </style>
@@ -1,36 +1,36 @@
1
- <template>
2
- <div class="g-search__label">
3
- <span class="label__title">{{ label }}</span>
4
- <span class="label__suffix">:</span>
5
- </div>
6
- </template>
7
-
8
- <script>
9
- export default {
10
- props: {
11
- label: {
12
- type: String
13
- }
14
- }
15
- }
16
- </script>
17
-
18
- <style lang="scss" scoped>
19
- .g-search__label {
20
- /* width: 69px; */
21
- flex-basis: 69px;
22
- height: 32px;
23
- display: flex;
24
- flex-direction: row;
25
- align-items: center;
26
- justify-content: space-between;
27
- .label__title, .label__suffix {
28
- font-size: 14px;
29
- color: rgba(0, 0, 0, 0.88);
30
- white-space: nowrap;
31
- }
32
- .label__suffix {
33
- margin-left: 4px;
34
- }
35
- }
1
+ <template>
2
+ <div class="g-search__label">
3
+ <span class="label__title">{{ label }}</span>
4
+ <span class="label__suffix">:</span>
5
+ </div>
6
+ </template>
7
+
8
+ <script>
9
+ export default {
10
+ props: {
11
+ label: {
12
+ type: String
13
+ }
14
+ }
15
+ }
16
+ </script>
17
+
18
+ <style lang="scss" scoped>
19
+ .g-search__label {
20
+ /* width: 69px; */
21
+ flex-basis: 69px;
22
+ height: 32px;
23
+ display: flex;
24
+ flex-direction: row;
25
+ align-items: center;
26
+ justify-content: space-between;
27
+ .label__title, .label__suffix {
28
+ font-size: 14px;
29
+ color: rgba(0, 0, 0, 0.88);
30
+ white-space: nowrap;
31
+ }
32
+ .label__suffix {
33
+ margin-left: 4px;
34
+ }
35
+ }
36
36
  </style>
@@ -1,5 +1,5 @@
1
- import EleDate from './src/index.vue'
2
-
3
- EleDate.install = Vue => Vue.component(EleDate.name, EleDate)
4
-
1
+ import EleDate from './src/index.vue'
2
+
3
+ EleDate.install = Vue => Vue.component(EleDate.name, EleDate)
4
+
5
5
  export default EleDate
@@ -1,40 +1,40 @@
1
- <template>
2
- <a-date-picker
3
- style="width: 100%;"
4
- mode="year"
5
- :open="open"
6
- :value="value"
7
- @focus="onFocus"
8
- @panelChange="onPanelChange"
9
- :format="format">
10
- </a-date-picker>
11
- </template>
12
-
13
- <script>
14
- export default {
15
- name: 'ele-date',
16
- props: {
17
- value: {
18
- type: Object
19
- },
20
- format: {
21
- type: String,
22
- default: 'YYYY/MM/DD'
23
- }
24
- },
25
- data () {
26
- return {
27
- open: false
28
- }
29
- },
30
- methods: {
31
- onFocus () {
32
- this.open = true
33
- },
34
- onPanelChange (value, mode) {
35
- this.$emit('input', value)
36
- this.open = false
37
- }
38
- }
39
- }
1
+ <template>
2
+ <a-date-picker
3
+ style="width: 100%;"
4
+ mode="year"
5
+ :open="open"
6
+ :value="value"
7
+ @focus="onFocus"
8
+ @panelChange="onPanelChange"
9
+ :format="format">
10
+ </a-date-picker>
11
+ </template>
12
+
13
+ <script>
14
+ export default {
15
+ name: 'ele-date',
16
+ props: {
17
+ value: {
18
+ type: Object
19
+ },
20
+ format: {
21
+ type: String,
22
+ default: 'YYYY/MM/DD'
23
+ }
24
+ },
25
+ data () {
26
+ return {
27
+ open: false
28
+ }
29
+ },
30
+ methods: {
31
+ onFocus () {
32
+ this.open = true
33
+ },
34
+ onPanelChange (value, mode) {
35
+ this.$emit('input', value)
36
+ this.open = false
37
+ }
38
+ }
39
+ }
40
40
  </script>
@@ -0,0 +1,5 @@
1
+ import EleForm from './src/index.vue'
2
+
3
+ EleForm.install = Vue => Vue.component(EleForm.name, EleForm)
4
+
5
+ export default EleForm
@@ -0,0 +1,119 @@
1
+ <template>
2
+ <div class="ele__form--wrapper">
3
+ <a-form :form="form" layout="vertical" class="ant-advanced-search-form">
4
+ <a-row :gutter="24">
5
+ <a-col :span="ele.span" v-for="ele in elements" :key="ele.name">
6
+ <template v-if="ele.type == 'Input'">
7
+ <a-form-item :label="`${ele.label}:`">
8
+ <ele-input :max-length="ele.maxLength" v-decorator="[ele.name, { rules: ele.rules }]" style="width:100%;"></ele-input>
9
+ </a-form-item>
10
+ </template>
11
+ <template v-else-if="ele.type == 'Textarea'">
12
+ <a-form-item :label="`${ele.label}:`">
13
+ <ele-textarea
14
+ @on-change="onChangeTextarea($event, ele)"
15
+ :max-length="ele.maxLength"
16
+ :autosize="ele.autosize"
17
+ :allow-clear="ele.allowClear"
18
+ :placeholder="ele.placeholder"
19
+ v-decorator="[ele.name, { rules: ele.rules }]"
20
+ style="width:100%;">
21
+ </ele-textarea>
22
+ </a-form-item>
23
+ </template>
24
+ <template v-else-if="ele.type == 'Select'">
25
+ <a-form-item :label="`${ele.label}:`">
26
+ <ele-select :data-source="ele.optionList" v-decorator="[ele.name, { rules: ele.rules }]" style="width:100%;"></ele-select>
27
+ </a-form-item>
28
+ </template>
29
+ <template v-else-if="ele.type == 'ele-upload'">
30
+ <a-form-item :label="`${ele.label}:`">
31
+ <ele-upload v-decorator="[ele.name, { rules: ele.rules }]" style="width:100%;"></ele-upload>
32
+ </a-form-item>
33
+ </template>
34
+ <template v-else-if="ele.type == 'SelectEntity'">
35
+ <a-form-item :label="`${ele.label}:`">
36
+ <ele-select-entity v-decorator="[ele.name, { rules: ele.rules }]" style="width:100%;"></ele-select-entity>
37
+ </a-form-item>
38
+ </template>
39
+ <template v-else-if="ele.type == 'InputNumber'">
40
+ <a-form-item :label="`${ele.label}:`">
41
+ <ele-input-number :precision="ele.precision" v-decorator="[ele.name, { rules: ele.rules }]" v-bind="ele.props" style="width:100%;"></ele-input-number>
42
+ </a-form-item>
43
+ </template>
44
+ <template v-else-if="ele.type == 'Checkbox'">
45
+ <a-form-item :label="`${ele.label}:`">
46
+ <ele-checkbox :data-source="ele.optionList" v-decorator="[ele.name, { rules: ele.rules }]" style="width:100%;"></ele-checkbox>
47
+ </a-form-item>
48
+ </template>
49
+ <template v-else-if="ele.type == 'Radio'">
50
+ <a-form-item :label="`${ele.label}:`">
51
+ <ele-radio :data-source="ele.optionList" v-decorator="[ele.name, { rules: ele.rules }]" style="width:100%;"></ele-radio>
52
+ </a-form-item>
53
+ </template>
54
+ </a-col>
55
+ </a-row>
56
+ </a-form>
57
+ </div>
58
+ </template>
59
+
60
+ <script>
61
+ import EleSelect from '../../select/src/index.vue'
62
+ import EleInput from '../../input/src/index.vue'
63
+ import EleTextarea from '../../textarea/src/index.vue'
64
+ import EleUpload from '../../upload/src/index.vue'
65
+ import EleSelectEntity from '../../select-entity/src/index.vue'
66
+ import EleInputNumber from '../../input-number/src/index.vue'
67
+ import EleCheckbox from '../../checkbox/src/index.vue'
68
+ import EleRadio from '../../radio/src/index.vue'
69
+ export default {
70
+ name: 'ele-form',
71
+ components: {
72
+ EleSelect,
73
+ EleInput,
74
+ EleTextarea,
75
+ EleUpload,
76
+ EleSelectEntity,
77
+ EleInputNumber,
78
+ EleCheckbox,
79
+ EleRadio
80
+ },
81
+ props: {
82
+ elements: {
83
+ type: Array,
84
+ default: () => []
85
+ }
86
+ },
87
+ data () {
88
+ return {
89
+ some: '1',
90
+ form: this.$form.createForm(this, { name: 'coordinated' })
91
+ }
92
+ },
93
+ methods: {
94
+ onChangeTextarea (value, props) {
95
+ this.setFieldsValue({ [props.name]: value })
96
+ },
97
+ validateFields () {
98
+ let ret = false
99
+ this.form.validateFields((error, values) => {
100
+ ret = !error
101
+ })
102
+ return ret
103
+ },
104
+ setFieldsValue (props = {}) {
105
+ this.form.setFieldsValue(props)
106
+ },
107
+ getFieldsValue () {
108
+ return this.form.getFieldsValue()
109
+ }
110
+ }
111
+ }
112
+ </script>
113
+
114
+ <style lang="scss" scoped>
115
+ .ele__form--wrapper {
116
+ .ant-form-item {
117
+ }
118
+ }
119
+ </style>
@@ -0,0 +1,5 @@
1
+ import EleFormPageModel from './src/index.vue'
2
+
3
+ EleFormPageModel.install = Vue => Vue.component(EleFormPageModel.name, EleFormPageModel)
4
+
5
+ export default EleFormPageModel