@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
@@ -1,24 +1,30 @@
1
1
  <template>
2
- <div class="g-table__wrapper">
2
+ <div class="g-table__wrapper" :style="wrapperStyle" :class="{ 'g-table--no-scroll-y': !needScrollY }">
3
3
  <a-table
4
+ :bordered="bordered"
5
+ :class="[isNoData && 'g-table__no-data']"
4
6
  :pagination="false"
5
7
  :loading="loading"
6
- :columns="columns"
8
+ size="middle"
9
+ :columns="innerColumns"
10
+ :row-selection="rowSelection"
7
11
  :row-class-name="setRowClassName"
8
12
  :data-source="dataSource"
9
- :scroll="{ x: 1500, y: 500 }">
13
+ :scroll="getScroll">
10
14
  <template slot="action" slot-scope="record">
11
15
  <Actions v-on="$listeners" :data-source="actions" :record="record"></Actions>
12
16
  </template>
13
17
  </a-table>
14
18
  <div class="g-table__pagination">
15
19
  <a-pagination
16
- :show-total="total => `共 ${total} 条数据`"
20
+ :show-total="all => `共 ${all} 条数据`"
17
21
  show-size-changer
18
22
  show-quick-jumper
19
- :pageSize="pageSize"
23
+ :pageSize="innerPageSize"
24
+ :current="innerCurrentPage"
20
25
  :pageSizeOptions="pageSizeOptions"
21
- @change="onChangePagination"
26
+ @change="onChangePagination"
27
+ @showSizeChange="onShowSizeChange"
22
28
  :total="total">
23
29
  </a-pagination>
24
30
  </div>
@@ -33,6 +39,27 @@ export default {
33
39
  Actions
34
40
  },
35
41
  props: {
42
+ // ant table wrapper
43
+ height: {
44
+ type: Number
45
+ },
46
+ width: {
47
+ type: Number
48
+ },
49
+ x: {
50
+ type: Number,
51
+ default: 1200
52
+ },
53
+ y: {
54
+ type: Number,
55
+ default: 200
56
+ },
57
+ scroll: {
58
+ type: Object
59
+ },
60
+ rowSelection: {
61
+ type: Object
62
+ },
36
63
  actions: {
37
64
  type: Array,
38
65
  default: () => []
@@ -60,30 +87,234 @@ export default {
60
87
  pageSizeOptions: {
61
88
  type: Array,
62
89
  default: () => ['10', '20', '30', '40']
90
+ },
91
+ bordered: {
92
+ type: Boolean,
93
+ default: true
94
+ }
95
+ },
96
+ data() {
97
+ return {
98
+ tableHeaderHeight: 0,
99
+ paginationHeight: 0,
100
+ innerPageSize: 10,
101
+ innerCurrentPage: 1,
102
+ tableContentHeight: 0,
103
+ obs: []
104
+ }
105
+ },
106
+ computed: {
107
+ wrapperStyle () {
108
+ // 外层容器样式:确保分页始终可见,表格充满剩余空间
109
+ if (!this.height) return {}
110
+ return { height: `${this.height}px` }
111
+ },
112
+ needScrollY () {
113
+ // 判断是否需要 y 轴滚动:基于数据行数与可用高度预估
114
+ if (!this.height) return false
115
+
116
+ const availableHeight = this.getScrollHeightByHeight
117
+ if (availableHeight <= 0) return false
118
+
119
+ // 预估每行高度(包含边框),antd 默认约 54px
120
+ const estimatedRowHeight = 54
121
+ const estimatedTableHeight = this.dataSource.length * estimatedRowHeight
122
+
123
+ return estimatedTableHeight > availableHeight
124
+ },
125
+ innerColumns () {
126
+ return this.columns.filter(col => !Object.keys(col).includes('multiple'))
127
+ },
128
+ isNoData () {
129
+ return !this.dataSource.length
130
+ },
131
+ getScrollHeightByHeight () {
132
+ // 始终返回可用的剩余高度,让表格内容不足时也能占满容器
133
+ return this.height - this.tableHeaderHeight - this.paginationHeight
134
+ },
135
+ isFlexColumn () {
136
+ return this.columns.every(col => !col.width)
137
+ },
138
+ getScroll () {
139
+ if (this.scroll) {
140
+ return this.scroll
141
+ } else {
142
+ const baseX = this.isFlexColumn ? 0 : (this.width > this.x ? 0 : this.x)
143
+ if (this.height) {
144
+ // 计算表体可用高度
145
+ const availableHeight = this.tableHeaderHeight && this.paginationHeight
146
+ ? this.getScrollHeightByHeight
147
+ : this.height - 100 // 预估值,给表头和分页留空间
148
+
149
+ if (availableHeight > 50) { // 确保有足够的最小高度
150
+ console.log('Table scroll config:', { x: baseX, y: availableHeight, height: this.height, headerHeight: this.tableHeaderHeight, paginationHeight: this.paginationHeight })
151
+ return { x: baseX, y: availableHeight }
152
+ }
153
+ }
154
+ return { x: baseX }
155
+ }
156
+ }
157
+ },
158
+ watch: {
159
+ pageSize: {
160
+ handler (pageSize) {
161
+ this.innerPageSize = pageSize
162
+ },
163
+ immediate: true
63
164
  }
64
165
  },
65
166
  methods: {
167
+ onShowSizeChange (current, pageSize) {
168
+ this.innerCurrentPage = current
169
+ this.innerPageSize = pageSize
170
+ this.$emit('change-page', current, pageSize)
171
+ },
172
+ setPaginationHeight () {
173
+ this.$nextTick(() => {
174
+ const { height } = document.querySelector('.g-table__pagination').getBoundingClientRect()
175
+ this.paginationHeight = height
176
+ })
177
+ },
178
+ setTableHeaderHeight () {
179
+ this.$nextTick(() => {
180
+ const el = document.querySelector('.ant-table-header')
181
+ if (!el) return
182
+ const { height } = el.getBoundingClientRect()
183
+ this.tableHeaderHeight = height
184
+ })
185
+ },
186
+ setTableTbodyHeight () {
187
+ // 简化:仅需要获取表头高度,不再依赖表体高度的动态监听
188
+ this.$nextTick(() => {
189
+ this.setTableHeaderHeight()
190
+ })
191
+ },
66
192
  setRowClassName (record, idx) {
67
193
  return idx % 2 === 0 ? 'g-table__row--even' : 'g-table__row--odd'
68
194
  },
69
- onChangePagination (page, pagrSize) {
70
- this.$emit('change-page', page, pagrSize)
195
+ onChangePagination (page, pageSize) {
196
+ this.innerCurrentPage = page
197
+ this.innerPageSize = pageSize
198
+ this.$emit('change-page', page, pageSize)
71
199
  }
200
+ },
201
+ mounted() {
202
+ this.$nextTick(() => {
203
+ this.setPaginationHeight()
204
+ setTimeout(() => {
205
+ this.setTableTbodyHeight()
206
+ // 再测一次分页高度,确保初次渲染完成后数值准确
207
+ this.setPaginationHeight()
208
+ }, 200)
209
+ })
210
+ },
211
+ destroyed () {
212
+ this.obs.forEach(ob => ob.disconnect())
72
213
  }
73
214
  }
74
215
  </script>
75
216
 
76
217
  <style lang="scss" scoped>
77
218
  .g-table__wrapper {
78
- padding: 16px;
79
- padding-top: unset;
80
- .g-table__row--even {}
81
- .g-table__row--odd {}
219
+ /* 外层采用列布局,确保分页始终可见,表格充满剩余空间 */
220
+ display: flex;
221
+ flex-direction: column;
222
+ overflow: hidden;
223
+
224
+ /* 表格区域占满剩余空间,启用纵向滚动 */
225
+ ::v-deep .ant-table-wrapper {
226
+ flex: 1 1 auto;
227
+ min-height: 0;
228
+ display: flex;
229
+ flex-direction: column;
230
+ }
231
+
232
+ ::v-deep .ant-spin-nested-loading {
233
+ flex: 1 1 auto;
234
+ min-height: 0;
235
+ display: flex;
236
+ flex-direction: column;
237
+ }
238
+
239
+ ::v-deep .ant-spin-container {
240
+ flex: 1 1 auto;
241
+ min-height: 0;
242
+ display: flex;
243
+ flex-direction: column;
244
+ }
245
+
246
+ ::v-deep .ant-table {
247
+ flex: 1 1 auto;
248
+ min-height: 0;
249
+ display: flex;
250
+ flex-direction: column;
251
+ }
252
+
253
+ /* 确保表体能够正常纵向滚动 */
254
+ ::v-deep .ant-table-content {
255
+ flex: 1 1 auto;
256
+ min-height: 0;
257
+ overflow: hidden;
258
+ }
259
+
260
+ ::v-deep .ant-table-scroll {
261
+ height: 100%;
262
+ display: flex;
263
+ flex-direction: column;
264
+ }
265
+
266
+ ::v-deep .ant-table-header {
267
+ flex: 0 0 auto;
268
+ overflow: hidden;
269
+ }
270
+ ::v-deep .ant-table-fixed {
271
+ .ant-table-tbody {
272
+ .g-table__row--odd {
273
+ &.ant-table-row-hover {
274
+ td {
275
+ background-color: var(--idooel-row-hover-color);
276
+ }
277
+ .ant-table-selection-column {
278
+ background-color: var(--idooel-row-hover-color) !important;
279
+ }
280
+ .ant-table-row-cell-break-word {
281
+ background-color: var(--idooel-row-hover-color) !important;
282
+ }
283
+ }
284
+ td {
285
+ background-color: var(--idooel-row-odd-color);
286
+ }
287
+ .ant-table-selection-column {
288
+ background-color: var(--idooel-row-odd-color) !important;
289
+ }
290
+ .ant-table-row-cell-break-word {
291
+ background-color: var(--idooel-row-odd-color) !important;
292
+ }
293
+ }
294
+ }
295
+ .ant-table-thead {
296
+ background: rgba(0, 0, 0, 0.03) !important;
297
+ }
298
+ }
299
+
300
+ ::v-deep .ant-table-body {
301
+ flex: 1 1 auto;
302
+ overflow: auto !important;
303
+ /* 确保滚动条稳定,避免列宽抖动 */
304
+ scrollbar-gutter: stable;
305
+ }
306
+
307
+ /* 分页区域固定在底部,不被挤出视口 */
82
308
  .g-table__pagination {
83
- margin-top: 8px;
309
+ flex: 0 0 auto;
84
310
  display: flex;
85
311
  flex-direction: row;
86
312
  justify-content: end;
313
+ border-top: unset;
314
+ padding-top: 8px;
315
+ padding-bottom: 8px;
316
+ background: #fff;
317
+ z-index: 999;
87
318
  }
88
319
  }
89
320
  </style>
@@ -0,0 +1,5 @@
1
+ import EleTabs from './src/index.vue'
2
+
3
+ EleTabs.install = Vue => Vue.component(EleTabs.name, EleTabs)
4
+
5
+ export default EleTabs
@@ -0,0 +1,56 @@
1
+ <template>
2
+ <div>
3
+ <a-tabs :default-active-key="activeKey" :tabBarGutter="tabBarGutter" :tabBarStyle="tabBarStyle" @change="changeHandle">
4
+ <a-tab-pane v-for="(item, index) in tabsList" :key="index" :tab="item.tabName" :disabled="item.disabled">
5
+ <template #tab>
6
+ <component v-if="item.renderHeader" :is="item.renderHeader" ></component>
7
+ <span v-else>{{ item.tabName }}</span>
8
+ </template>
9
+ <component :is="item.content"></component>
10
+ </a-tab-pane>
11
+ </a-tabs>
12
+ </div>
13
+ </template>
14
+
15
+ <script>
16
+ export default {
17
+ name: 'ele-tabs',
18
+ components: {},
19
+ model: {
20
+ prop: 'value',
21
+ event: 'change'
22
+ },
23
+ props: {
24
+ activeKey: {
25
+ type: Number,
26
+ default: 0
27
+ },
28
+ tabsList: {
29
+ type: Array,
30
+ default () {
31
+ return []
32
+ }
33
+ },
34
+ tabBarStyle: {
35
+ type: Object,
36
+ default () {
37
+ return {}
38
+ }
39
+ },
40
+ tabBarGutter: {
41
+ type: Number
42
+ }
43
+ },
44
+ methods: {
45
+ changeHandle (key) {
46
+ this.$emit('changeActiveKey', key)
47
+ }
48
+ }
49
+ }
50
+ </script>
51
+
52
+ <style lang="scss" scoped>
53
+ ::v-deep .ant-tabs-nav-scroll {
54
+ float: left !important;
55
+ }
56
+ </style>
@@ -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,48 @@
1
+ <template>
2
+ <div :class="['ele-text__wrapper', type]">
3
+ <ele-icon theme="filled" :type="icon"></ele-icon>
4
+ <span class="message">{{ message }}</span>
5
+ </div>
6
+ </template>
7
+
8
+ <script>
9
+ export default {
10
+ name: 'ele-text',
11
+ props: {
12
+ type: {
13
+ String,
14
+ // default success error warning info
15
+ default: 'default'
16
+ },
17
+ message: {
18
+ type: String
19
+ }
20
+ },
21
+ computed: {
22
+ icon() {
23
+ return 'info-circle'
24
+ }
25
+ },
26
+ }
27
+ </script>
28
+
29
+ <style lang="scss" scoped>
30
+ //
31
+ .ele-text__wrapper {
32
+ display: flex;
33
+ flex-direction: row;
34
+ align-items: center;
35
+ &.default {
36
+ .anticon, .message {
37
+ color: var(--idoole-black-064);
38
+ }
39
+ }
40
+ .anticon {
41
+ font-size: 16px;
42
+ }
43
+ .message {
44
+ font-size: 14px;
45
+ margin-left: 4px;
46
+ }
47
+ }
48
+ </style>
@@ -0,0 +1,5 @@
1
+ import EleTextEditor from './src/index.vue'
2
+
3
+ EleTextEditor.install = Vue => Vue.component(EleTextEditor.name, EleTextEditor)
4
+
5
+ export default EleTextEditor
@@ -0,0 +1,73 @@
1
+ <template>
2
+ <div class="ele-editor__wrapper" :style="{width: editorWidth, height: editorHeight}">
3
+ <Vueditor :ref="getVueditor" :style="{width: editorWidth, height: editorHeight}"></Vueditor>
4
+ <div class="ele-editor__bottom">
5
+ <span>{{ innerContent.length }}字</span>
6
+ </div>
7
+ </div>
8
+ </template>
9
+
10
+ <script>
11
+ import { v4 as uuidv4 } from 'uuid'
12
+ export default {
13
+ name: 'ele-text-editor',
14
+ props: {
15
+ editorWidth: {
16
+ type: String
17
+ },
18
+ editorHeight: {
19
+ type: String
20
+ },
21
+ maxLength: {
22
+ type: Number,
23
+ default () {
24
+ return 10
25
+ }
26
+ }
27
+ },
28
+ data() {
29
+ return {
30
+ editorConfig: {},
31
+ textEditorRef: null
32
+ }
33
+ },
34
+ computed: {
35
+ innerContent () {
36
+ let content = this.textEditorRef ? this.textEditorRef.getContent() : ''
37
+ if (this.textEditorRef && content.length > this.maxLength) {
38
+ content = content.substring(0, this.maxLength)
39
+ this.$nextTick(() => {
40
+ this.textEditorRef.setContent(content)
41
+ })
42
+ }
43
+ this.$emit('input', content)
44
+ return content
45
+ },
46
+ getVueditor () {
47
+ return uuidv4()
48
+ }
49
+ },
50
+ watch: {},
51
+ methods: {},
52
+ mounted () {
53
+ this.textEditorRef = this.$refs[this.getVueditor]
54
+ }
55
+ }
56
+ </script>
57
+
58
+ <style lang="scss" scoped>
59
+ .ele-editor__bottom {
60
+ height: 40px;
61
+ padding: 8px 20px 8px 8px;
62
+ border: 1px solid var(--idooel-form-title-border-color);
63
+ border-top: 0px;
64
+ span {
65
+ color: var(--idoole-black-088);
66
+ text-align: right;
67
+ font-size: 12px;
68
+ line-height: 20px;
69
+ width: 100%;
70
+ display: inline-block;
71
+ }
72
+ }
73
+ </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,58 @@
1
+ <template>
2
+ <a-textarea
3
+ :value="value"
4
+ :disabled="disabled"
5
+ :auto-size="autosize"
6
+ :max-length="maxLength"
7
+ :placeholder="placeholder"
8
+ :allow-clear="allowClear"
9
+ @change="onChange">
10
+ </a-textarea>
11
+ </template>
12
+
13
+ <script>
14
+ export default {
15
+ name: 'ele-textarea',
16
+ model: {
17
+ prop: 'value',
18
+ event: 'change'
19
+ },
20
+ props: {
21
+ maxLength: {
22
+ type: Number
23
+ },
24
+ placeholder: {
25
+ type: String
26
+ },
27
+ allowClear: {
28
+ type: Boolean,
29
+ default: false
30
+ },
31
+ autosize: {
32
+ type: [Boolean, Object],
33
+ default: () => ({
34
+ minRows: 4,
35
+ maxRows: 4
36
+ })
37
+ },
38
+ value: {
39
+ type: String
40
+ },
41
+ disabled: {
42
+ type: Boolean,
43
+ default: false
44
+ }
45
+ },
46
+ methods: {
47
+ onChange (e) {
48
+ const value = e.target.value
49
+ this.$emit('change', value)
50
+ this.$emit('input', value)
51
+ }
52
+ }
53
+ }
54
+ </script>
55
+
56
+ <style scoped>
57
+
58
+ </style>
@@ -0,0 +1,22 @@
1
+ .has-error {
2
+ .ele-upload__wrapper {
3
+ .ele-upload__inner {
4
+ border-color: $error-06;
5
+ .ele-upload__area {
6
+ .ele-upload__area--icon {
7
+ .anticon-cloud-upload {
8
+ color: $error-06;
9
+ }
10
+ }
11
+ .ele-upload__area--text {
12
+ .ele-upload__message {
13
+ color: $error-06;
14
+ }
15
+ .ele-upload__ext {
16
+ color: $error-03;
17
+ }
18
+ }
19
+ }
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,44 @@
1
+ @import 'variables.scss';
2
+ @import 'form.scss';
3
+ @import 'styleClass.scss';
4
+
5
+ $primary: $primary-06;
6
+
7
+ :root {
8
+ --idooel-primary-color: #{$primary};
9
+ --idoole-black-02: #{$black-02};
10
+ --idoole-black-06: #{$black-06};
11
+ --idoole-black-07: #{$black-07};
12
+ --idoole-black-064: #{$black-07};
13
+ --idoole-black-088: #{$black-08};
14
+ --idoole-black-016: #{$black-04};
15
+ --idooel-disabled-border-color: #{$black-04};
16
+
17
+ --idoole-success-06: #{$success-06};
18
+ --idoole-warning-06: #{$warning-06};
19
+ --idoole-error-06: #{$error-06};
20
+ //Table
21
+ --idooel-border-width: 2;
22
+ --idooel-border-color: #53a8ff;
23
+ --idooel-column-border-width: 1;
24
+ --idooel-column-border-color: #d9ecff;
25
+ --idooel-row-odd-color: #{$black-02};
26
+ --idooel-row-even-color: #FFF;
27
+ --idooel-row-hover-color: #{$primary-01};
28
+
29
+ //Form
30
+ --idooel-form-title-border-color: #{$black-04};
31
+ --idooel-form-upload-bg-color: #{$black-01};
32
+ --idooel-form-upload-border-hover-color: #{$primary-05};
33
+ --idooel-form-border-radius: #{$border-radius-base}px;
34
+ --idooel-form-border-err-color: #{$error-06};
35
+
36
+ //Link
37
+ --idooel-link-06: #{$link-06};
38
+ --idooel-link-03: #{$link-03};
39
+
40
+ //img-crop
41
+ --idooel-img-crop-err-color: #{$error-03};
42
+ }
43
+
44
+ @import './overrid.scss';
@@ -0,0 +1,8 @@
1
+ .ant-input-disabled {
2
+ border-color: var(--idooel-disabled-border-color) !important;
3
+ }
4
+ .ant-select-disabled {
5
+ .ant-select-selection {
6
+ border-color: var(--idooel-disabled-border-color) !important;
7
+ }
8
+ }
@@ -0,0 +1,3 @@
1
+ .margin-t-8 {
2
+ margin-top: 8px;
3
+ }