@idooel/components 0.0.1-beta.1 → 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 (40) hide show
  1. package/dist/@idooel/components.esm.js +2295 -378
  2. package/dist/@idooel/components.umd.js +2306 -388
  3. package/package.json +3 -2
  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/checkbox/index.js +5 -0
  9. package/packages/checkbox/src/index.vue +44 -0
  10. package/packages/composite-components/button-group/src/index.vue +0 -5
  11. package/packages/composite-components/search-area/src/index.vue +75 -40
  12. package/packages/form/index.js +5 -0
  13. package/packages/form/src/index.vue +119 -0
  14. package/packages/form-model/index.js +5 -0
  15. package/packages/form-model/src/index.vue +139 -0
  16. package/packages/icon/index.js +5 -0
  17. package/packages/icon/src/index.vue +32 -0
  18. package/packages/index.js +25 -2
  19. package/packages/input/src/index.vue +5 -1
  20. package/packages/input-number/index.js +5 -0
  21. package/packages/input-number/src/index.vue +24 -0
  22. package/packages/modal/index.js +5 -0
  23. package/packages/modal/src/index.vue +129 -0
  24. package/packages/radio/index.js +5 -0
  25. package/packages/radio/src/index.vue +48 -0
  26. package/packages/select-entity/index.js +5 -0
  27. package/packages/select-entity/src/index.vue +114 -0
  28. package/packages/table/src/action.vue +1 -1
  29. package/packages/text/index.js +5 -0
  30. package/packages/text/src/index.vue +15 -0
  31. package/packages/textarea/index.js +5 -0
  32. package/packages/textarea/src/index.vue +49 -0
  33. package/packages/theme/form.scss +24 -0
  34. package/packages/theme/index.scss +12 -0
  35. package/packages/theme/variables.scss +23 -1
  36. package/packages/tree-table-model/src/index.vue +35 -27
  37. package/packages/upload/index.js +5 -0
  38. package/packages/upload/src/index.vue +351 -0
  39. package/packages/utils/index.js +4 -0
  40. package/scripts/rollup.config.js +1 -1
@@ -0,0 +1,24 @@
1
+ <template>
2
+ <div>
3
+ <a-input-number v-bind="$attrs" :value="value" :precision="precision" @change="onChange" style="width: 100%;"></a-input-number>
4
+ </div>
5
+ </template>
6
+
7
+ <script>
8
+ export default {
9
+ name: 'ele-input-number',
10
+ props: {
11
+ precision: {
12
+ type: Number
13
+ },
14
+ value: {
15
+ type: [Number, String]
16
+ }
17
+ },
18
+ methods: {
19
+ onChange (value) {
20
+ this.$emit('change', value)
21
+ }
22
+ }
23
+ }
24
+ </script>
@@ -0,0 +1,5 @@
1
+ import EleModal from './src/index.vue'
2
+
3
+ EleModal.install = Vue => Vue.component(EleModal.name, EleModal)
4
+
5
+ export default EleModal
@@ -0,0 +1,129 @@
1
+ <template>
2
+ <a-modal
3
+ :title="title"
4
+ :cancelText="cancelText"
5
+ :okText="okText"
6
+ :closable="closable"
7
+ v-model:visible="showModal"
8
+ :width="width"
9
+ :keyboard="false"
10
+ :maskClosable="maskClosable"
11
+ :dialogStyle="{ top: `${upDownDistance[size]}px` }"
12
+ :bodyStyle="{ maxHeight: maxheight, overflowY: 'auto' }"
13
+ :footer="showFooter ? undefined : null"
14
+ @cancel="handleCancel"
15
+ @ok="handleOk"
16
+ >
17
+ <slot></slot>
18
+ <template slot="footer">
19
+ <slot name="footer"></slot>
20
+ </template>
21
+ </a-modal>
22
+ </template>
23
+ <script>
24
+ export default {
25
+ name: 'ele-modal',
26
+ props: {
27
+ value: {
28
+ type: Boolean,
29
+ default: false
30
+ },
31
+ title: {
32
+ type: String,
33
+ default: '标题'
34
+ },
35
+ cancelText: {
36
+ type: String,
37
+ default: '关闭'
38
+ },
39
+ okText: {
40
+ type: String,
41
+ default: '确定'
42
+ },
43
+ size: {
44
+ type: String,
45
+ default: 'small'
46
+ },
47
+ map: {
48
+ type: Object,
49
+ default () {
50
+ return {}
51
+ }
52
+ },
53
+ closable: {
54
+ type: Boolean,
55
+ default: true
56
+ },
57
+ maskClosable: {
58
+ type: Boolean,
59
+ default: false
60
+ },
61
+ showFooter: {
62
+ type: Boolean,
63
+ default: true
64
+ },
65
+ footer: {
66
+ type: Function,
67
+ default: null
68
+ },
69
+ onlyClose: {
70
+ type: Boolean,
71
+ default: false
72
+ }
73
+ },
74
+ watch: {
75
+ value (newVal) {
76
+ this.$nextTick(() => {
77
+ this.showModal = newVal
78
+ })
79
+ }
80
+ },
81
+ computed: {
82
+ width () {
83
+ return this.map[this.size]
84
+ },
85
+ maxheight () {
86
+ return `calc(100vh - ${this.upDownDistance[this.size] * 2 + (this.title ? 55 : 0) + (this.showFooter ? 53 : 0) }px`
87
+ }
88
+ },
89
+ data () {
90
+ return {
91
+ showModal: false
92
+ }
93
+ },
94
+ created () {
95
+ let defaultMap = {
96
+ small: 480,
97
+ middle: 768,
98
+ big: 1200
99
+ }
100
+ this.upDownDistance = {
101
+ small: 80,
102
+ middle: 80,
103
+ big: 40
104
+ }
105
+ this.map = Object.assign(this.map, defaultMap)
106
+ },
107
+ methods: {
108
+ openModal () {
109
+ this.showModal = true
110
+ this.removeHidden()
111
+ },
112
+ handleCancel () {
113
+ this.showModal = false
114
+ this.removeHidden()
115
+ console.log('on-cancel')
116
+ this.$emit('cancel')
117
+ this.$emit('input', this.showModal)
118
+ },
119
+ handleOk () {
120
+ console.log('on-ok')
121
+ this.$emit('ok')
122
+ },
123
+ removeHidden () {
124
+ let ishidden = document.body.style.overflow === 'hidden'
125
+ ishidden && (document.body.style.overflow = 'initial')
126
+ }
127
+ }
128
+ }
129
+ </script>
@@ -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
@@ -0,0 +1,48 @@
1
+ <template>
2
+ <a-radio-group :defaultValue="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
+ props: {
13
+ value: {
14
+ type: [String, Array, Number]
15
+ },
16
+ dataSource: {
17
+ type: Array,
18
+ default: () => []
19
+ },
20
+ disabled: {
21
+ type: Boolean,
22
+ default: false
23
+ }
24
+ },
25
+ methods: {
26
+ onChange (e) {
27
+ this.$emit('change', e.target.value)
28
+ this.$emit('input', e.target.value)
29
+ }
30
+ }
31
+ }
32
+ </script>
33
+ <style lang="scss" scoped>
34
+ .ant-radio-group {
35
+ text-align: left;
36
+ line-height: 32px;
37
+ }
38
+ .has-error {
39
+ .ant-radio-group {
40
+ ::v-deep .ant-radio-wrapper {
41
+ color: var(--idooel-form-border-err-color);
42
+ }
43
+ ::v-deep .ant-radio-inner {
44
+ border-color: var(--idooel-form-border-err-color);
45
+ }
46
+ }
47
+ }
48
+ </style>
@@ -0,0 +1,5 @@
1
+ import EleSelectEntity from './src/index.vue'
2
+
3
+ EleSelectEntity.install = Vue => Vue.component(EleSelectEntity.name, EleSelectEntity)
4
+
5
+ export default EleSelectEntity
@@ -0,0 +1,114 @@
1
+ <template>
2
+ <div class="g-select-entity__wrapper" :class="disabled ? 'g-select-entity__disabled' : ''">
3
+ <span class="select-entity__input">
4
+ <a-tag
5
+ v-for="(item, inx) in getValueList()"
6
+ :key="item.value"
7
+ :closable="!disabled && !getIsMaxCount()"
8
+ @close="onClose(...arguments, inx)"
9
+ >
10
+ {{ item.label }}
11
+ </a-tag>
12
+ <a-tag v-if="getIsMaxCount()">......</a-tag>
13
+ </span>
14
+ <span class="select-entity__addon" @click="onChange">{{ addonAfter }}</span>
15
+ <slot></slot>
16
+ </div>
17
+ </template>
18
+
19
+ <script>
20
+ export default {
21
+ name: 'ele-select-entity',
22
+ props: {
23
+ value: {
24
+ type: [Array, Object]
25
+ },
26
+ multiple: {
27
+ type: Boolean,
28
+ default: true
29
+ },
30
+ maxCount: {
31
+ type: Number,
32
+ default: 7
33
+ },
34
+ disabled: {
35
+ type: Boolean,
36
+ default: false
37
+ },
38
+ addonAfter: {
39
+ type: String,
40
+ default: '选择'
41
+ }
42
+ },
43
+ methods: {
44
+ getValueList () {
45
+ if (this.value) {
46
+ if (this.multiple) {
47
+ return this.getIsMaxCount() ? this.value.slice(0, this.maxCount) : this.value
48
+ }
49
+ return [this.value]
50
+ }
51
+ return []
52
+ },
53
+ getIsMaxCount () {
54
+ if (this.value && this.multiple) {
55
+ return this.value.length >= this.maxCount
56
+ }
57
+ return false
58
+ },
59
+ onChange () {
60
+ if (this.disabled) return
61
+ this.$emit('change', this.value)
62
+ },
63
+ onClose (e, inx) {
64
+ e = window.event || e
65
+ e.preventDefault()
66
+ if (!this.multiple) {
67
+ this.$emit('change', null)
68
+ return
69
+ }
70
+ this.value.splice(inx, 1)
71
+ this.$emit('change', this.value)
72
+ }
73
+ }
74
+ }
75
+ </script>
76
+
77
+ <style lang="scss" scoped>
78
+ .g-select-entity__wrapper {
79
+ font-size: 14px;
80
+ line-height: 30px;
81
+ position: relative;
82
+ width: 100%;
83
+ display: flex;
84
+ color: var(--idoole-black-07);
85
+ border-radius: 4px;
86
+ border: 1px solid var(--idooel-form-title-border-color);
87
+ &:hover {
88
+ border-color: var(--idooel-primary-color);
89
+ }
90
+ .select-entity__input {
91
+ padding: 0 11px;
92
+ background-color: #fff;
93
+ border-radius: 4px;
94
+ flex-grow: 1;
95
+ min-height: 30px;
96
+ text-align: left;
97
+ }
98
+ .select-entity__addon {
99
+ padding: 0 11px;
100
+ color: var(--idoole-black-07);
101
+ background-color: var(--idoole-black-02);
102
+ border-left: 1px solid var(--idooel-form-title-border-color);
103
+ cursor: pointer;
104
+ min-height: 30px;
105
+ white-space: nowrap;
106
+ }
107
+ }
108
+ .has-error .g-select-entity__wrapper {
109
+ border-color: var(--idooel-form-border-err-color);
110
+ }
111
+ .g-select-entity__disabled .select-entity__input {
112
+ background-color: var(--idoole-black-02);
113
+ }
114
+ </style>
@@ -2,7 +2,7 @@
2
2
  <div class="g-table__action">
3
3
  <div class="table-action__item" v-for="(item, idx) in execOperationExpression(dataSource)" :key="idx">
4
4
  <template v-if="item.type == 'text'">
5
- <span>{{ item.label }}</span>
5
+ <span @click="handleClickText(item)">{{ item.label }}</span>
6
6
  </template>
7
7
  <template v-else-if="item.type == 'dropdown'">
8
8
  <a-dropdown>
@@ -0,0 +1,5 @@
1
+ import EleText from './src/index.vue'
2
+
3
+ EleText.install = Vue => Vue.component(EleText.name, EleText)
4
+
5
+ export default EleText
@@ -0,0 +1,15 @@
1
+ <template>
2
+ <div>
3
+ text
4
+ </div>
5
+ </template>
6
+
7
+ <script>
8
+ export default {
9
+ name: 'g-text'
10
+ }
11
+ </script>
12
+
13
+ <style scoped>
14
+
15
+ </style>
@@ -0,0 +1,5 @@
1
+ import EleTextarea from './src/index.vue'
2
+
3
+ EleTextarea.install = Vue => Vue.component(EleTextarea.name, EleTextarea)
4
+
5
+ export default EleTextarea
@@ -0,0 +1,49 @@
1
+ <template>
2
+ <a-textarea
3
+ :value="value"
4
+ :auto-size="autosize"
5
+ :max-length="maxLength"
6
+ :placeholder="placeholder"
7
+ :allow-clear="allowClear"
8
+ @change="onChange">
9
+ </a-textarea>
10
+ </template>
11
+
12
+ <script>
13
+ export default {
14
+ name: 'ele-textarea',
15
+ props: {
16
+ maxLength: {
17
+ type: Number
18
+ },
19
+ placeholder: {
20
+ type: String
21
+ },
22
+ allowClear: {
23
+ type: Boolean,
24
+ default: false
25
+ },
26
+ autosize: {
27
+ type: [Boolean, Object],
28
+ default: () => ({
29
+ minRows: 4,
30
+ maxRows: 4
31
+ })
32
+ },
33
+ value: {
34
+ type: String
35
+ }
36
+ },
37
+ methods: {
38
+ onChange (e) {
39
+ const value = e.target.value
40
+ this.$emit('on-change', value)
41
+ this.$emit('input', value)
42
+ }
43
+ }
44
+ }
45
+ </script>
46
+
47
+ <style scoped>
48
+
49
+ </style>
@@ -0,0 +1,24 @@
1
+ .has-error {
2
+ .ele-upload__wrapper {
3
+ .file-uploads {
4
+ label {
5
+ border-color: $error-06;
6
+ }
7
+ .ele-upload__area {
8
+ .ele-upload__area--icon {
9
+ .anticon-cloud-upload {
10
+ color: $error-06;
11
+ }
12
+ }
13
+ .ele-upload__area--text {
14
+ .ele-upload__message {
15
+ color: $error-06;
16
+ }
17
+ .ele-upload__ext {
18
+ color: $error-03;
19
+ }
20
+ }
21
+ }
22
+ }
23
+ }
24
+ }
@@ -1,12 +1,24 @@
1
1
  @import 'variables.scss';
2
+ @import 'form.scss';
2
3
 
3
4
  $primary: $primary-06;
4
5
 
5
6
  :root {
6
7
  --idooel-primary-color: #{$primary};
8
+ --idoole-black-02: #{$black-02};
9
+ --idoole-black-06: #{$black-06};
10
+ --idoole-black-07: #{$black-07};
11
+ --idoole-black-008: #{$black-08};
7
12
  //Table
8
13
  --idooel-border-width: 2;
9
14
  --idooel-border-color: #53a8ff;
10
15
  --idooel-column-border-width: 1;
11
16
  --idooel-column-border-color: #d9ecff;
17
+
18
+ //Form
19
+ --idooel-form-title-border-color: #{$black-04};
20
+ --idooel-form-upload-bg-color: #{$black-01};
21
+ --idooel-form-upload-border-hover-color: #{$primary-05};
22
+ --idooel-form-border-radius: #{$border-radius-base}px;
23
+ --idooel-form-border-err-color: #{$error-06};
12
24
  }
@@ -31,4 +31,26 @@ $success-01: #F6FFED;
31
31
  $success-03: #B7EB8F;
32
32
  $success-05: #73D13D;
33
33
  $success-06: #52C41A;
34
- $success-07: #389E0D;
34
+ $success-07: #389E0D;
35
+
36
+ //White
37
+ $black-01: rgba(0, 0, 0, 0.02);
38
+ $black-02: rgba(0, 0, 0, 0.04);
39
+ $black-03: rgba(0, 0, 0, 0.08);
40
+ $black-04: rgba(0, 0, 0, 0.16);
41
+ $black-05: rgba(0, 0, 0, 0.24);
42
+ $black-06: rgba(0, 0, 0, 0.44);
43
+ $black-07: rgba(0, 0, 0, 0.64);
44
+ $black-08: rgba(0, 0, 0, 0.88);
45
+
46
+ //Black
47
+ $white-01: rgba(255, 255, 255, 0.04);
48
+ $white-02: rgba(255, 255, 255, 0.08);
49
+ $white-03: rgba(255, 255, 255, 0.16);
50
+ $white-04: rgba(255, 255, 255, 0.24);
51
+ $white-05: rgba(255, 255, 255, 0.44);
52
+ $white-06: rgba(255, 255, 255, 0.64);
53
+ $white-07: rgba(255, 255, 255, 0.88);
54
+ $white-08: #fff;
55
+
56
+ $border-radius-base: 2;
@@ -1,6 +1,6 @@
1
1
  <template>
2
- <section class="model__tree-table">
3
- <section class="model__tree-table--container">
2
+ <section class="ele model__tree-table">
3
+ <section class="model__tree-table--container" v-if="showTree">
4
4
  <div class="model__tree--title"></div>
5
5
  <section :ref="modelTreeWrapper" class="model__tree--wrapper">
6
6
  <ele-tree
@@ -93,6 +93,9 @@ export default {
93
93
  }
94
94
  },
95
95
  computed: {
96
+ showTree () {
97
+ return !!Object.keys(this.treeMeta).length
98
+ },
96
99
  buttonGroup () {
97
100
  return uuidv4()
98
101
  },
@@ -172,13 +175,15 @@ export default {
172
175
  }
173
176
  },
174
177
  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]]
178
+ if (this.showTree) {
179
+ this.treeData = await this.requestTreeData()
180
+ const [defaultTreeNode = {}] = this.treeData
181
+ this.defaultExpandedKeys = [defaultTreeNode[this.replaceFields.key]]
182
+ this.defaultSelectedKeys = [defaultTreeNode[this.replaceFields.key]]
183
+ this.currentTreeNodeData = defaultTreeNode
184
+ }
179
185
  const { fieldMap } = this.tableMeta
180
- this.currentTreeNodeData = defaultTreeNode
181
- this.tableData = await this.requestTableData(this.execTableFieldMap(fieldMap, defaultTreeNode))
186
+ this.tableData = await this.requestTableData(this.execTableFieldMap(fieldMap, this.currentTreeNodeData))
182
187
  },
183
188
  methods: {
184
189
  handleClickButtonGroup (props) {
@@ -280,27 +285,30 @@ export default {
280
285
  </script>
281
286
 
282
287
  <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;
288
+ .ele {
289
+ &.model__tree-table {
290
+ background: transparent;
291
+ display: flex;
292
+ flex-direction: row;
293
+ width: 100%;
294
+ .model__tree-table--container {
295
+ .model__tree--wrapper {
296
+ width: 240px;
297
+ background: #fff;
298
+ flex-shrink: 0;
299
+ padding: 16px;
300
+ box-sizing: border-box;
301
+ margin-right: 16px;
302
+ overflow-y: auto;
303
+ }
297
304
  }
298
- }
299
- .model__table--container {
300
- min-width: 0;
301
- background: #fff;
302
- .model__table--wrapper {
305
+ .model__table--container {
306
+ width: 100%;
307
+ min-width: 0;
303
308
  background: #fff;
309
+ .model__table--wrapper {
310
+ background: #fff;
311
+ }
304
312
  }
305
313
  }
306
314
  }
@@ -0,0 +1,5 @@
1
+ import EleUpload from './src/index.vue'
2
+
3
+ EleUpload.install = Vue => Vue.component(EleUpload.name, EleUpload)
4
+
5
+ export default EleUpload