xt-element-ui 1.3.3 → 1.3.4

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 (111) hide show
  1. package/CHANGELOG.md +72 -72
  2. package/LICENSE +21 -21
  3. package/README.md +240 -240
  4. package/docs/README.md +100 -100
  5. package/docs/components/base/xt-button.md +114 -114
  6. package/docs/components/base/xt-card-item.md +104 -104
  7. package/docs/components/base/xt-card.md +108 -108
  8. package/docs/components/base/xt-config-provider.md +199 -199
  9. package/docs/components/base/xt-flex-box.md +115 -115
  10. package/docs/components/base/xt-grid-box.md +302 -302
  11. package/docs/components/base/xt-input.md +150 -150
  12. package/docs/components/base/xt-map-provider.md +23 -23
  13. package/docs/components/base/xt-map.md +331 -331
  14. package/docs/components/base/xt-step-price.md +165 -165
  15. package/docs/components/base/xt-text.md +212 -212
  16. package/docs/components/base/xt-time.md +165 -165
  17. package/docs/components/extend/ex-bar.md +67 -67
  18. package/docs/components/extend/ex-button.md +62 -62
  19. package/docs/components/extend/ex-card.md +86 -86
  20. package/docs/components/extend/ex-chart.md +463 -463
  21. package/docs/components/extend/ex-icon.md +189 -189
  22. package/docs/components/extend/ex-line.md +70 -70
  23. package/docs/components/extend/ex-multi.md +155 -155
  24. package/docs/components/extend/ex-pie.md +69 -69
  25. package/docs/components/extend/ex-select-tree.md +210 -210
  26. package/docs/components/extend/ex-table.md +590 -590
  27. package/docs/components/extend/ex-upload.md +134 -134
  28. package/docs/components/utils/size.md +147 -147
  29. package/docs/components/utils/theme.md +182 -182
  30. package/lib/index.common.js +4112 -4122
  31. package/lib/index.umd.js +4072 -4081
  32. package/lib/index.umd.min.js +3 -3
  33. package/package.json +80 -81
  34. package/src/components/ex-button/index.js +7 -7
  35. package/src/components/ex-button/index.vue +66 -66
  36. package/src/components/ex-button/style/index.scss +67 -67
  37. package/src/components/ex-card/index.js +7 -7
  38. package/src/components/ex-card/index.vue +68 -68
  39. package/src/components/ex-card/style/index.scss +73 -73
  40. package/src/components/ex-chart/index.js +7 -7
  41. package/src/components/ex-chart/index.vue +136 -136
  42. package/src/components/ex-date-picker/index.js +7 -7
  43. package/src/components/ex-icon/index.js +7 -7
  44. package/src/components/ex-icon/index.vue +168 -168
  45. package/src/components/ex-icon/style/index.scss +7 -7
  46. package/src/components/ex-page/index.js +7 -7
  47. package/src/components/ex-select-tree/index.js +7 -7
  48. package/src/components/ex-table/ExTableCell.vue +22 -22
  49. package/src/components/ex-table/index.js +7 -7
  50. package/src/components/ex-table/virtualScrollData.js +35 -35
  51. package/src/components/ex-upload/index.js +7 -7
  52. package/src/components/index.scss +39 -39
  53. package/src/components/xt-button/index.js +7 -7
  54. package/src/components/xt-button/index.vue +97 -97
  55. package/src/components/xt-card/index.js +7 -7
  56. package/src/components/xt-card/style/index.scss +48 -48
  57. package/src/components/xt-card-item/index.js +7 -7
  58. package/src/components/xt-card-item/style/index copy.scss +71 -71
  59. package/src/components/xt-card-item/style/index.scss +82 -82
  60. package/src/components/xt-config-provider/index.js +7 -7
  61. package/src/components/xt-config-provider/index.vue +362 -362
  62. package/src/components/xt-config-provider/style/index.scss +11 -11
  63. package/src/components/xt-flex-box/index.js +7 -7
  64. package/src/components/xt-flex-box/style/index.scss +81 -81
  65. package/src/components/xt-grid-box/index.js +7 -7
  66. package/src/components/xt-grid-box/style/index.scss +92 -92
  67. package/src/components/xt-grid-item/index.js +7 -7
  68. package/src/components/xt-grid-item/index.vue +106 -106
  69. package/src/components/xt-input/index.js +7 -7
  70. package/src/components/xt-input/index.vue +66 -66
  71. package/src/components/xt-input/style/index.scss +84 -84
  72. package/src/components/xt-map/adapters/amap.js +235 -235
  73. package/src/components/xt-map/adapters/baidu.js +254 -254
  74. package/src/components/xt-map/adapters/base.js +267 -267
  75. package/src/components/xt-map/adapters/index.js +29 -29
  76. package/src/components/xt-map/adapters/tianditu.js +242 -242
  77. package/src/components/xt-map/config/xt-map-config.js +197 -197
  78. package/src/components/xt-map/index.js +8 -8
  79. package/src/components/xt-map/index.vue +351 -351
  80. package/src/components/xt-map/loaders/script-loader.js +114 -114
  81. package/src/components/xt-map/provider.vue +200 -200
  82. package/src/components/xt-map/style/index.scss +77 -77
  83. package/src/components/xt-map-provider/index.js +8 -8
  84. package/src/components/xt-step-price/index.js +10 -10
  85. package/src/components/xt-step-price/index.vue +272 -272
  86. package/src/components/xt-step-price/style/index.scss +123 -123
  87. package/src/components/xt-step-price-item/index.js +7 -7
  88. package/src/components/xt-step-price-item/index.vue +187 -187
  89. package/src/components/xt-text/index.js +7 -7
  90. package/src/components/xt-text/index.vue +1 -1
  91. package/src/components/xt-text/style/index.scss +92 -92
  92. package/src/components/xt-time/index.js +7 -7
  93. package/src/components/xt-time/index.vue +313 -313
  94. package/src/components/xt-time/style/index.scss +23 -23
  95. package/src/config/element-registry.js +135 -135
  96. package/src/index.js +162 -178
  97. package/src/styles/css-variables.scss +257 -257
  98. package/src/styles/theme/background.scss +5 -5
  99. package/src/styles/theme/border-radius.scss +3 -3
  100. package/src/styles/theme/borders.scss +3 -3
  101. package/src/styles/theme/colors.scss +101 -101
  102. package/src/styles/theme/component-variables.scss +69 -69
  103. package/src/styles/theme/dark-variables.scss +28 -28
  104. package/src/styles/theme/font.scss +12 -12
  105. package/src/styles/theme/index.scss +11 -11
  106. package/src/styles/theme/shadows.scss +2 -2
  107. package/src/styles/theme/spacing.scss +4 -4
  108. package/src/styles/theme/transitions.scss +2 -2
  109. package/src/styles/theme/typography.scss +4 -4
  110. package/src/styles/variables-export.scss +85 -85
  111. package/src/utils/index.js +191 -202
package/package.json CHANGED
@@ -1,81 +1,80 @@
1
- {
2
- "name": "xt-element-ui",
3
- "version": "1.3.3",
4
- "description": "基于 Vue 2.7 + ElementUI 的企业级组件库,提供丰富的自定义组件和扩展组件",
5
- "main": "lib/index.common.js",
6
- "module": "lib/index.esm.js",
7
- "unpkg": "lib/index.umd.min.js",
8
- "style": "lib/index.css",
9
- "scripts": {
10
- "docs:dev": "vuepress dev docs",
11
- "docs:build": "vuepress build docs",
12
- "dev": "vue-cli-service serve",
13
- "lib": "vue-cli-service build --target lib --name index --dest lib src/index.js",
14
- "prepublishOnly": "npm run lib"
15
- },
16
- "peerDependencies": {
17
- "vue": "^2.6.10"
18
- },
19
- "devDependencies": {
20
- "@vue/cli-service": "~4.5.19",
21
- "sass-loader": "^10.5.2",
22
- "vue": "^2.6.10",
23
- "vuepress": "^1.9.10",
24
- "vuepress-plugin-demo-container": "^0.2.0",
25
- "vuepress-theme-reco": "^1.6.17"
26
- },
27
- "files": [
28
- "lib",
29
- "src",
30
- "README.md",
31
- "CHANGELOG.md",
32
- "docs/components/**/*md",
33
- "docs/README.md"
34
- ],
35
- "dependencies": {
36
- "echarts": "^6.1.0",
37
- "element-ui": "^2.15.14",
38
- "sass": "^1.32.13",
39
- "vue-server-renderer": "^2.7.14",
40
- "xt-element-ui": "^1.3.0"
41
- },
42
- "keywords": [
43
- "vue",
44
- "vue2",
45
- "element-ui",
46
- "element",
47
- "ui",
48
- "components",
49
- "xt-element-ui",
50
- "chart",
51
- "table",
52
- "echarts",
53
- "component-library",
54
- "vue-components",
55
- "admin",
56
- "dashboard"
57
- ],
58
- "author": "XT-Element-UI Contributors",
59
- "license": "MIT",
60
- "bugs": {
61
- "url": "https://github.com/JobWebNie/xt-element-ui/issues"
62
- },
63
- "homepage": "https://jobwebnie.github.io/xt-element-ui/",
64
- "repository": {
65
- "type": "git",
66
- "url": "https://github.com/JobWebNie/xt-element-ui.git"
67
- },
68
- "engines": {
69
- "node": ">=12.0.0",
70
- "npm": ">=6.0.0"
71
- },
72
- "browserslist": [
73
- "> 1%",
74
- "last 2 versions",
75
- "not dead",
76
- "Chrome >= 60",
77
- "Firefox >= 60",
78
- "Safari >= 10.1",
79
- "Edge >= 15"
80
- ]
81
- }
1
+ {
2
+ "name": "xt-element-ui",
3
+ "version": "1.3.4",
4
+ "description": "基于 Vue 2.7 + ElementUI 的企业级组件库,提供丰富的自定义组件和扩展组件",
5
+ "main": "lib/index.common.js",
6
+ "module": "lib/index.esm.js",
7
+ "unpkg": "lib/index.umd.min.js",
8
+ "style": "lib/index.css",
9
+ "scripts": {
10
+ "docs:dev": "vuepress dev docs",
11
+ "docs:build": "vuepress build docs",
12
+ "dev": "vue-cli-service serve",
13
+ "lib": "vue-cli-service build --target lib --name index --dest lib src/index.js",
14
+ "prepublishOnly": "npm run lib"
15
+ },
16
+ "peerDependencies": {
17
+ "vue": "^2.6.10"
18
+ },
19
+ "devDependencies": {
20
+ "@vue/cli-service": "~4.5.19",
21
+ "sass-loader": "^10.5.2",
22
+ "vue": "^2.6.10",
23
+ "vuepress": "^1.9.10",
24
+ "vuepress-plugin-demo-container": "^0.2.0",
25
+ "vuepress-theme-reco": "^1.6.17"
26
+ },
27
+ "files": [
28
+ "lib",
29
+ "src",
30
+ "README.md",
31
+ "CHANGELOG.md",
32
+ "docs/components/**/*md",
33
+ "docs/README.md"
34
+ ],
35
+ "dependencies": {
36
+ "echarts": "^6.1.0",
37
+ "element-ui": "^2.15.14",
38
+ "sass": "^1.32.13",
39
+ "vue-server-renderer": "^2.7.14"
40
+ },
41
+ "keywords": [
42
+ "vue",
43
+ "vue2",
44
+ "element-ui",
45
+ "element",
46
+ "ui",
47
+ "components",
48
+ "xt-element-ui",
49
+ "chart",
50
+ "table",
51
+ "echarts",
52
+ "component-library",
53
+ "vue-components",
54
+ "admin",
55
+ "dashboard"
56
+ ],
57
+ "author": "XT-Element-UI Contributors",
58
+ "license": "MIT",
59
+ "bugs": {
60
+ "url": "https://github.com/JobWebNie/xt-element-ui/issues"
61
+ },
62
+ "homepage": "https://jobwebnie.github.io/xt-element-ui/",
63
+ "repository": {
64
+ "type": "git",
65
+ "url": "https://github.com/JobWebNie/xt-element-ui.git"
66
+ },
67
+ "engines": {
68
+ "node": ">=12.0.0",
69
+ "npm": ">=6.0.0"
70
+ },
71
+ "browserslist": [
72
+ "> 1%",
73
+ "last 2 versions",
74
+ "not dead",
75
+ "Chrome >= 60",
76
+ "Firefox >= 60",
77
+ "Safari >= 10.1",
78
+ "Edge >= 15"
79
+ ]
80
+ }
@@ -1,8 +1,8 @@
1
- import ExButton from './index.vue'
2
-
3
- ExButton.install = function (Vue) {
4
- Vue.component(ExButton.name, ExButton)
5
- }
6
-
7
- export default ExButton
1
+ import ExButton from './index.vue'
2
+
3
+ ExButton.install = function (Vue) {
4
+ Vue.component(ExButton.name, ExButton)
5
+ }
6
+
7
+ export default ExButton
8
8
  export { ExButton }
@@ -1,67 +1,67 @@
1
- <template>
2
- <el-button
3
- class="ex-button"
4
- :class="buttonClasses"
5
- v-bind="$attrs"
6
- @click="handleClick"
7
- >
8
- <slot></slot>
9
- </el-button>
10
- </template>
11
- <script>
12
- export default {
13
- name: 'ExButton',
14
- inheritAttrs: false,
15
- inject: {
16
- xtConfig: {
17
- default: () => ({
18
- theme: 'light',
19
- size: 'medium',
20
- primaryColor: '#1890ff'
21
- })
22
- }
23
- },
24
- props: {
25
- type: {
26
- type: String,
27
- default: 'default',
28
- validator: (val) => ['default', 'primary', 'success', 'warning', 'danger'].includes(val)
29
- },
30
- throttle: {
31
- type: Number,
32
- default: 0
33
- },
34
- size: {
35
- type: String,
36
- default: null,
37
- validator: (val) => !val || ['mini', 'small', 'medium', 'large'].includes(val)
38
- }
39
- },
40
- data() {
41
- return {
42
- lastClickTime: 0
43
- }
44
- },
45
- computed: {
46
- finalSize() {
47
- // 优先使用组件自身的 size,其次继承 XtConfigProvider 的 size,最后使用默认值
48
- return this.size || this.xtConfig.size || 'medium'
49
- },
50
- buttonClasses() {
51
- return [
52
- `ex-button-${this.finalSize}`,
53
- `ex-button-${this.type}`
54
- ]
55
- }
56
- },
57
- methods: {
58
- handleClick() {
59
- if (this.throttle > 0 && Date.now() - this.lastClickTime < this.throttle) {
60
- return
61
- }
62
- this.lastClickTime = Date.now()
63
- this.$emit('click')
64
- }
65
- }
66
- }
1
+ <template>
2
+ <el-button
3
+ class="ex-button"
4
+ :class="buttonClasses"
5
+ v-bind="$attrs"
6
+ @click="handleClick"
7
+ >
8
+ <slot></slot>
9
+ </el-button>
10
+ </template>
11
+ <script>
12
+ export default {
13
+ name: 'ExButton',
14
+ inheritAttrs: false,
15
+ inject: {
16
+ xtConfig: {
17
+ default: () => ({
18
+ theme: 'light',
19
+ size: 'medium',
20
+ primaryColor: '#1890ff'
21
+ })
22
+ }
23
+ },
24
+ props: {
25
+ type: {
26
+ type: String,
27
+ default: 'default',
28
+ validator: (val) => ['default', 'primary', 'success', 'warning', 'danger'].includes(val)
29
+ },
30
+ throttle: {
31
+ type: Number,
32
+ default: 0
33
+ },
34
+ size: {
35
+ type: String,
36
+ default: null,
37
+ validator: (val) => !val || ['mini', 'small', 'medium', 'large'].includes(val)
38
+ }
39
+ },
40
+ data() {
41
+ return {
42
+ lastClickTime: 0
43
+ }
44
+ },
45
+ computed: {
46
+ finalSize() {
47
+ // 优先使用组件自身的 size,其次继承 XtConfigProvider 的 size,最后使用默认值
48
+ return this.size || this.xtConfig.size || 'medium'
49
+ },
50
+ buttonClasses() {
51
+ return [
52
+ `ex-button-${this.finalSize}`,
53
+ `ex-button-${this.type}`
54
+ ]
55
+ }
56
+ },
57
+ methods: {
58
+ handleClick() {
59
+ if (this.throttle > 0 && Date.now() - this.lastClickTime < this.throttle) {
60
+ return
61
+ }
62
+ this.lastClickTime = Date.now()
63
+ this.$emit('click')
64
+ }
65
+ }
66
+ }
67
67
  </script>
@@ -1,67 +1,67 @@
1
- @import '../../../styles/variables.scss';
2
-
3
- .ex-button {
4
- padding: 8px 16px;
5
- border-radius: var(--xt-border-radius-base);
6
- font-size: var(--xt-font-size-base);
7
- border: 1px solid var(--xt-border-color, #dcdfe6);
8
- transition: all 0.3s;
9
- &-default{
10
- background-color: var(--el-bg-color-page, #ffffff);
11
- border: 1px solid var(--xt-border-color, #303133);
12
- color: var(--el-text-color-primary, #303133);
13
- }
14
- &-primary{
15
- background-color: var(--el-color-primary, #ffffff);
16
- border-color: var(--el-color-primary, #ffffff);
17
- color: var(--el-text-color-white, #ffffff);
18
- }
19
- &-success{
20
- background-color: var(--el-color-success, #ffffff);
21
- border-color: var(--el-color-success, #ffffff);
22
- color: var(--el-text-color-white, #ffffff);
23
- }
24
- &-warning{
25
- background-color: var(--el-color-warning, #ffffff);
26
- border-color: var(--el-color-warning, #ffffff);
27
- color: var(--el-text-color-white, #ffffff);
28
- }
29
- &-danger{
30
- background-color: var(--el-color-danger, #ffffff);
31
- border-color: var(--el-color-danger, #ffffff);
32
- color: var(--el-text-color-white, #ffffff);
33
- }
34
- &-info{
35
- background-color: var(--el-color-info, #ffffff);
36
- border-color: var(--el-color-info, #ffffff);
37
- color: var(--el-text-color-white, #ffffff);
38
- }
39
-
40
- &:hover {
41
- opacity: 0.8;
42
- }
43
- }
44
-
45
- /* small size - 字体大小 12px */
46
- .ex-button-mini {
47
- padding: 2px 4px;
48
- font-size: calc(var(--xt-font-size-base) + $xt-font-size-increment-extra-small);
49
- }
50
-
51
- /* small size - 字体大小 14px */
52
- .ex-button-small {
53
- padding: 5px 10px;
54
- font-size: calc(var(--xt-font-size-base) + $xt-font-size-increment-base);
55
- }
56
-
57
- /* medium size - 字体大小 16px */
58
- .ex-button-medium {
59
- padding: 8px 16px;
60
- font-size: calc(var(--xt-font-size-base) + $xt-font-size-increment-medium);
61
- }
62
-
63
- /* large size - 字体大小 18px */
64
- .ex-button-large {
65
- padding: 11px 22px;
66
- font-size: calc(var(--xt-font-size-base) + $xt-font-size-increment-large);
67
- }
1
+ @import '../../../styles/variables.scss';
2
+
3
+ .ex-button {
4
+ padding: 8px 16px;
5
+ border-radius: var(--xt-border-radius-base);
6
+ font-size: var(--xt-font-size-base);
7
+ border: 1px solid var(--xt-border-color, #dcdfe6);
8
+ transition: all 0.3s;
9
+ &-default{
10
+ background-color: var(--el-bg-color-page, #ffffff);
11
+ border: 1px solid var(--xt-border-color, #303133);
12
+ color: var(--el-text-color-primary, #303133);
13
+ }
14
+ &-primary{
15
+ background-color: var(--el-color-primary, #ffffff);
16
+ border-color: var(--el-color-primary, #ffffff);
17
+ color: var(--el-text-color-white, #ffffff);
18
+ }
19
+ &-success{
20
+ background-color: var(--el-color-success, #ffffff);
21
+ border-color: var(--el-color-success, #ffffff);
22
+ color: var(--el-text-color-white, #ffffff);
23
+ }
24
+ &-warning{
25
+ background-color: var(--el-color-warning, #ffffff);
26
+ border-color: var(--el-color-warning, #ffffff);
27
+ color: var(--el-text-color-white, #ffffff);
28
+ }
29
+ &-danger{
30
+ background-color: var(--el-color-danger, #ffffff);
31
+ border-color: var(--el-color-danger, #ffffff);
32
+ color: var(--el-text-color-white, #ffffff);
33
+ }
34
+ &-info{
35
+ background-color: var(--el-color-info, #ffffff);
36
+ border-color: var(--el-color-info, #ffffff);
37
+ color: var(--el-text-color-white, #ffffff);
38
+ }
39
+
40
+ &:hover {
41
+ opacity: 0.8;
42
+ }
43
+ }
44
+
45
+ /* small size - 字体大小 12px */
46
+ .ex-button-mini {
47
+ padding: 2px 4px;
48
+ font-size: calc(var(--xt-font-size-base) + $xt-font-size-increment-extra-small);
49
+ }
50
+
51
+ /* small size - 字体大小 14px */
52
+ .ex-button-small {
53
+ padding: 5px 10px;
54
+ font-size: calc(var(--xt-font-size-base) + $xt-font-size-increment-base);
55
+ }
56
+
57
+ /* medium size - 字体大小 16px */
58
+ .ex-button-medium {
59
+ padding: 8px 16px;
60
+ font-size: calc(var(--xt-font-size-base) + $xt-font-size-increment-medium);
61
+ }
62
+
63
+ /* large size - 字体大小 18px */
64
+ .ex-button-large {
65
+ padding: 11px 22px;
66
+ font-size: calc(var(--xt-font-size-base) + $xt-font-size-increment-large);
67
+ }
@@ -1,7 +1,7 @@
1
- import ExCard from './index.vue'
2
-
3
- ExCard.install = function (Vue) {
4
- Vue.component(ExCard.name, ExCard)
5
- }
6
-
7
- export default ExCard
1
+ import ExCard from './index.vue'
2
+
3
+ ExCard.install = function (Vue) {
4
+ Vue.component(ExCard.name, ExCard)
5
+ }
6
+
7
+ export default ExCard
@@ -1,68 +1,68 @@
1
- <template>
2
- <el-card
3
- class="ex-card"
4
- :class="cardClasses"
5
- v-bind="$attrs"
6
- >
7
- <template #header v-if="$slots.header || title">
8
- <slot name="header">{{ title }}</slot>
9
- </template>
10
- <slot></slot>
11
- </el-card>
12
- </template>
13
-
14
- <script>
15
- export default {
16
- name: 'ExCard',
17
- inheritAttrs: false,
18
- inject: {
19
- xtConfig: {
20
- default: () => ({
21
- theme: 'light',
22
- size: 'medium',
23
- primaryColor: '#1890ff'
24
- })
25
- }
26
- },
27
- props: {
28
- title: {
29
- type: String,
30
- default: ''
31
- },
32
- shadow: {
33
- type: String,
34
- default: 'always',
35
- validator: (val) => ['always', 'hover', 'never'].includes(val)
36
- },
37
- bordered: {
38
- type: Boolean,
39
- default: true
40
- },
41
- bodyClass: {
42
- type: String,
43
- default: ''
44
- },
45
- size: {
46
- type: String,
47
- default: null,
48
- validator: (val) => !val || ['small', 'medium', 'large'].includes(val)
49
- }
50
- },
51
- computed: {
52
- finalSize() {
53
- // 优先使用组件自身的 size,其次继承 XtConfigProvider 的 size,最后使用默认值
54
- return this.size || this.xtConfig.size || 'medium'
55
- },
56
- cardClasses() {
57
- return [
58
- `ex-card-${this.shadow}`,
59
- `ex-card-${this.finalSize}`,
60
- {
61
- 'ex-card-no-border': !this.bordered,
62
- [this.bodyClass]: this.bodyClass
63
- }
64
- ]
65
- }
66
- }
67
- }
68
- </script>
1
+ <template>
2
+ <el-card
3
+ class="ex-card"
4
+ :class="cardClasses"
5
+ v-bind="$attrs"
6
+ >
7
+ <template #header v-if="$slots.header || title">
8
+ <slot name="header">{{ title }}</slot>
9
+ </template>
10
+ <slot></slot>
11
+ </el-card>
12
+ </template>
13
+
14
+ <script>
15
+ export default {
16
+ name: 'ExCard',
17
+ inheritAttrs: false,
18
+ inject: {
19
+ xtConfig: {
20
+ default: () => ({
21
+ theme: 'light',
22
+ size: 'medium',
23
+ primaryColor: '#1890ff'
24
+ })
25
+ }
26
+ },
27
+ props: {
28
+ title: {
29
+ type: String,
30
+ default: ''
31
+ },
32
+ shadow: {
33
+ type: String,
34
+ default: 'always',
35
+ validator: (val) => ['always', 'hover', 'never'].includes(val)
36
+ },
37
+ bordered: {
38
+ type: Boolean,
39
+ default: true
40
+ },
41
+ bodyClass: {
42
+ type: String,
43
+ default: ''
44
+ },
45
+ size: {
46
+ type: String,
47
+ default: null,
48
+ validator: (val) => !val || ['small', 'medium', 'large'].includes(val)
49
+ }
50
+ },
51
+ computed: {
52
+ finalSize() {
53
+ // 优先使用组件自身的 size,其次继承 XtConfigProvider 的 size,最后使用默认值
54
+ return this.size || this.xtConfig.size || 'medium'
55
+ },
56
+ cardClasses() {
57
+ return [
58
+ `ex-card-${this.shadow}`,
59
+ `ex-card-${this.finalSize}`,
60
+ {
61
+ 'ex-card-no-border': !this.bordered,
62
+ [this.bodyClass]: this.bodyClass
63
+ }
64
+ ]
65
+ }
66
+ }
67
+ }
68
+ </script>