sh-view 2.1.0 → 2.3.0

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 (128) hide show
  1. package/package.json +9 -13
  2. package/packages/components/global-components/sh-alert/index.vue +175 -173
  3. package/packages/components/global-components/sh-badge/index.vue +57 -43
  4. package/packages/components/global-components/sh-card/index.vue +24 -16
  5. package/packages/components/global-components/sh-code-editor/index.vue +250 -260
  6. package/packages/components/global-components/sh-col/index.vue +44 -36
  7. package/packages/components/global-components/sh-corner/index.vue +230 -228
  8. package/packages/components/global-components/sh-count-to/index.vue +60 -51
  9. package/packages/components/global-components/sh-drawer/index.vue +209 -182
  10. package/packages/components/global-components/sh-drawer/scrollbar.js +44 -42
  11. package/packages/components/global-components/sh-empty/index.vue +0 -1
  12. package/packages/components/global-components/sh-form/form.vue +110 -0
  13. package/packages/components/global-components/sh-form/js/props.js +76 -63
  14. package/packages/components/global-components/sh-form/js/useForm.js +236 -0
  15. package/packages/components/global-components/sh-form/query.vue +70 -0
  16. package/packages/components/global-components/sh-header/index.vue +35 -50
  17. package/packages/components/global-components/sh-icon/css/index.scss +44 -0
  18. package/packages/components/global-components/sh-icon/index.vue +24 -11
  19. package/packages/components/global-components/sh-image/index.vue +47 -38
  20. package/packages/components/global-components/sh-list/index.vue +42 -37
  21. package/packages/components/global-components/sh-loading/index.vue +12 -8
  22. package/packages/components/global-components/sh-modal/index.vue +49 -40
  23. package/packages/components/global-components/sh-noticebar/index.vue +68 -54
  24. package/packages/components/global-components/sh-poptip/index.vue +247 -130
  25. package/packages/components/global-components/sh-progress/index.vue +71 -69
  26. package/packages/components/global-components/sh-pull-refresh/index.vue +156 -157
  27. package/packages/components/global-components/sh-result/index.vue +37 -28
  28. package/packages/components/global-components/sh-row/index.vue +21 -18
  29. package/packages/components/global-components/sh-split/index.vue +115 -109
  30. package/packages/components/global-components/sh-table/components/importModal.vue +95 -86
  31. package/packages/components/global-components/sh-table/components/sh-column.vue +62 -0
  32. package/packages/components/global-components/sh-table/{index.vue → grid.vue} +34 -145
  33. package/packages/components/global-components/sh-table/js/tableMethods.js +175 -0
  34. package/packages/components/global-components/sh-table/js/useTable.js +592 -0
  35. package/packages/components/global-components/sh-table/table.vue +266 -0
  36. package/packages/components/global-components/sh-tabs/index.vue +118 -93
  37. package/packages/components/global-components/sh-tag/index.vue +52 -51
  38. package/packages/components/global-components/sh-toolbar/index.vue +53 -47
  39. package/packages/components/global-components/sh-tree/components/table-tree.vue +152 -139
  40. package/packages/components/global-components/sh-tree/index.vue +218 -195
  41. package/packages/components/global-components/sh-tree/mixin/treeProps.js +118 -120
  42. package/packages/components/global-components/sh-upload/index.vue +308 -51
  43. package/packages/components/global-components/sh-water-fall/index.vue +4 -11
  44. package/packages/components/index.js +5 -3
  45. package/packages/components/other-components/sh-cron-modal/components/cron-content.vue +140 -129
  46. package/packages/components/other-components/sh-cron-modal/css/index.scss +0 -5
  47. package/packages/components/other-components/sh-cron-modal/index.vue +81 -67
  48. package/packages/components/other-components/sh-cron-modal/mixin/cron-emits.js +1 -0
  49. package/packages/components/other-components/sh-cron-modal/mixin/cron-hooks.js +179 -0
  50. package/packages/components/other-components/sh-cron-modal/mixin/cron-props.js +9 -0
  51. package/packages/components/other-components/sh-cron-modal/tabs/cron-day-box.vue +101 -92
  52. package/packages/components/other-components/sh-cron-modal/tabs/cron-hour-box.vue +68 -56
  53. package/packages/components/other-components/sh-cron-modal/tabs/cron-minute-box.vue +68 -56
  54. package/packages/components/other-components/sh-cron-modal/tabs/cron-month-box.vue +68 -56
  55. package/packages/components/other-components/sh-cron-modal/tabs/cron-second-box.vue +68 -56
  56. package/packages/components/other-components/sh-cron-modal/tabs/cron-week-box.vue +126 -115
  57. package/packages/components/other-components/sh-cron-modal/tabs/cron-year-box.vue +59 -46
  58. package/packages/components/other-components/sh-menu/index.vue +73 -60
  59. package/packages/components/other-components/sh-menu/menu-group-content.vue +71 -59
  60. package/packages/components/other-components/sh-menu/menu-item-content.vue +40 -30
  61. package/packages/components/other-components/sh-menu-card/index.vue +70 -64
  62. package/packages/components/other-components/sh-menu-card/menu-box.vue +50 -44
  63. package/packages/components/other-components/sh-preview/components/sh-excel.vue +182 -0
  64. package/packages/components/other-components/sh-preview/components/sh-word.vue +73 -0
  65. package/packages/components/other-components/sh-preview/index.vue +86 -85
  66. package/packages/components/other-components/sh-preview/js/data-hook.js +37 -0
  67. package/packages/components/other-components/sh-preview/js/data-props.js +11 -0
  68. package/packages/components/other-components/sh-system-tip/index.vue +28 -24
  69. package/packages/css/index.js +4 -4
  70. package/packages/directive/module/prevent-click.js +1 -1
  71. package/packages/directive/module/resize.js +11 -154
  72. package/packages/index.js +39 -39
  73. package/packages/mixin/index.js +86 -87
  74. package/packages/vxeTable/render/cell/vxe-render-checkbox.vue +14 -5
  75. package/packages/vxeTable/render/cell/vxe-render-checkgroup.vue +43 -36
  76. package/packages/vxeTable/render/cell/vxe-render-code.vue +14 -5
  77. package/packages/vxeTable/render/cell/vxe-render-goption.vue +34 -24
  78. package/packages/vxeTable/render/cell/vxe-render-href.vue +21 -11
  79. package/packages/vxeTable/render/cell/vxe-render-img.vue +16 -10
  80. package/packages/vxeTable/render/cell/vxe-render-input.vue +83 -79
  81. package/packages/vxeTable/render/cell/vxe-render-money.vue +14 -6
  82. package/packages/vxeTable/render/cell/vxe-render-progress.vue +28 -19
  83. package/packages/vxeTable/render/cell/vxe-render-radio.vue +14 -5
  84. package/packages/vxeTable/render/cell/vxe-render-radiogroup.vue +43 -36
  85. package/packages/vxeTable/render/cell/vxe-render-select.vue +44 -36
  86. package/packages/vxeTable/render/cell/vxe-render-switch.vue +14 -5
  87. package/packages/vxeTable/render/cell/vxe-render-table.vue +51 -78
  88. package/packages/vxeTable/render/cell/vxe-render-textarea.vue +14 -5
  89. package/packages/vxeTable/render/cell/vxe-render-time.vue +23 -13
  90. package/packages/vxeTable/render/cell/vxe-render-tree.vue +23 -27
  91. package/packages/vxeTable/render/cell/vxe-render-upload.vue +11 -7
  92. package/packages/vxeTable/render/filters/vxe-filter-input.vue +25 -43
  93. package/packages/vxeTable/render/footer/vxe-footer-input.vue +23 -13
  94. package/packages/vxeTable/render/footer/vxe-footer-money.vue +30 -20
  95. package/packages/vxeTable/render/globalRenders.jsx +1 -1
  96. package/packages/vxeTable/render/header/vxe-header-money.vue +31 -21
  97. package/packages/vxeTable/render/mixin/cell-hooks.js +162 -0
  98. package/packages/vxeTable/render/mixin/cell-props.js +23 -0
  99. package/packages/vxeTable/render/mixin/filter-hooks.js +28 -0
  100. package/packages/components/global-components/sh-form/components/form-item.vue +0 -25
  101. package/packages/components/global-components/sh-form/css/index.scss +0 -55
  102. package/packages/components/global-components/sh-form/index.vue +0 -114
  103. package/packages/components/global-components/sh-form/js/methods.js +0 -146
  104. package/packages/components/global-components/sh-form/mixin/defaultData.js +0 -32
  105. package/packages/components/global-components/sh-icon/css/default/index.scss +0 -27
  106. package/packages/components/global-components/sh-icon/css/font/index.scss +0 -16
  107. package/packages/components/global-components/sh-icon/icon-default.vue +0 -32
  108. package/packages/components/global-components/sh-icon/icon-font.vue +0 -32
  109. package/packages/components/global-components/sh-poptip/popper.js +0 -115
  110. package/packages/components/global-components/sh-query/index.vue +0 -317
  111. package/packages/components/global-components/sh-table/js/methods.js +0 -549
  112. package/packages/components/global-components/sh-table/mixin/defaultData.js +0 -94
  113. package/packages/components/global-components/sh-upload/js/mixin.js +0 -257
  114. package/packages/components/other-components/sh-cron-modal/mixin/cron-box.js +0 -169
  115. package/packages/vxeTable/render/mixin/cell-mixin.js +0 -195
  116. /package/packages/components/global-components/sh-icon/css/default/{fonts/ionicons.svg → ionicons.svg} +0 -0
  117. /package/packages/components/global-components/sh-icon/css/default/{fonts/ionicons.ttf → ionicons.ttf} +0 -0
  118. /package/packages/components/global-components/sh-icon/css/default/{fonts/ionicons.woff → ionicons.woff} +0 -0
  119. /package/packages/components/global-components/sh-icon/css/default/{fonts/ionicons.woff2 → ionicons.woff2} +0 -0
  120. /package/packages/components/global-components/sh-icon/css/font/{fonts/iconfont.js → iconfont.js} +0 -0
  121. /package/packages/components/global-components/sh-icon/css/font/{fonts/iconfont.json → iconfont.json} +0 -0
  122. /package/packages/components/global-components/sh-icon/css/font/{fonts/iconfont.ttf → iconfont.ttf} +0 -0
  123. /package/packages/components/global-components/sh-icon/css/font/{fonts/iconfont.woff → iconfont.woff} +0 -0
  124. /package/packages/components/global-components/sh-icon/css/font/{fonts/iconfont.woff2 → iconfont.woff2} +0 -0
  125. /package/packages/{assets/css → css}/animated.scss +0 -0
  126. /package/packages/{assets/css → css}/loader.scss +0 -0
  127. /package/packages/{assets/css → css}/main.scss +0 -0
  128. /package/packages/{assets/css → css}/theme.scss +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sh-view",
3
- "version": "2.1.0",
3
+ "version": "2.3.0",
4
4
  "description": "基于vxe-table二次封装",
5
5
  "main": "packages/index.js",
6
6
  "scripts": {
@@ -18,35 +18,32 @@
18
18
  "@codemirror/lang-json": "^6.0.1",
19
19
  "@codemirror/lang-sql": "^6.5.2",
20
20
  "@tinymce/tinymce-vue": "^5.0.0",
21
- "@vue-office/docx": "^1.2.3",
22
- "@vue-office/excel": "^1.2.7",
23
- "@vue-office/pdf": "^1.2.6",
24
21
  "babel-polyfill": "^6.26.0",
25
22
  "codemirror": "^6.0.1",
26
- "core-js": "^3.32.0",
23
+ "core-js": "^3.32.2",
27
24
  "countup.js": "^1.9.3",
28
25
  "cron-parser": "^4.8.1",
26
+ "docx-preview": "^0.1.18",
29
27
  "exceljs": "^4.3.0",
30
28
  "jspdf": "^2.5.1",
31
29
  "jszip": "^3.10.1",
32
30
  "popper.js": "^1.16.1",
33
- "sh-tools": "^1.5.0",
31
+ "resize-observer-polyfill": "^1.5.1",
32
+ "sh-tools": "^1.6.0",
34
33
  "tinymce": "^5.10.5",
35
34
  "vue": "^3.3.4",
36
- "vue-demi": "^0.13.11",
37
35
  "vue-masonry": "^0.16.0",
38
- "vue-router": "^4.2.2",
39
- "vuex": "^4.1.0",
40
- "vxe-table": "^4.5.8",
36
+ "vue-router": "^4.2.4",
37
+ "vxe-table": "^4.5.9",
41
38
  "vxe-table-plugin-export-pdf": "^3.0.4",
42
39
  "vxe-table-plugin-export-xlsx": "^3.0.5",
40
+ "x-data-spreadsheet": "^1.1.9",
43
41
  "xe-clipboard": "^1.10.2",
44
- "xe-utils": "^3.5.11"
42
+ "xe-utils": "^3.5.13"
45
43
  },
46
44
  "devDependencies": {
47
45
  "@babel/core": "^7.12.16",
48
46
  "@babel/eslint-parser": "^7.12.16",
49
- "@babel/plugin-proposal-object-rest-spread": "^7.20.7",
50
47
  "@vue/cli-plugin-babel": "~5.0.8",
51
48
  "@vue/cli-plugin-eslint": "~5.0.8",
52
49
  "@vue/cli-plugin-router": "~5.0.8",
@@ -58,7 +55,6 @@
58
55
  "eslint-config-prettier": "^8.3.0",
59
56
  "eslint-plugin-prettier": "^4.0.0",
60
57
  "eslint-plugin-vue": "^8.0.3",
61
- "html-webpack-tags-plugin": "^3.0.2",
62
58
  "node-polyfill-webpack-plugin": "^2.0.1",
63
59
  "prettier": "^2.4.1",
64
60
  "sass": "^1.32.7",
@@ -1,173 +1,175 @@
1
- <template>
2
- <transition :name="fade ? 'fade' : ''">
3
- <div v-if="!closed" class="sh-alert" :class="classes">
4
- <div v-if="showIcon" class="sh-alert-icon">
5
- <slot name="icon">
6
- <sh-icon :type="iconType"></sh-icon>
7
- </slot>
8
- </div>
9
- <div class="sh-alert-content">
10
- <slot>{{ title }}</slot>
11
- <div class="sh-alert-desc">
12
- <slot name="content">{{ content }}</slot>
13
- </div>
14
- </div>
15
- <a v-if="closable" class="sh-alert-close" @click="close">
16
- <slot name="close"><sh-icon type="ios-close"></sh-icon></slot>
17
- </a>
18
- </div>
19
- </transition>
20
- </template>
21
-
22
- <script>
23
- export default {
24
- name: 'ShAlert',
25
- props: {
26
- type: {
27
- type: String,
28
- default: 'info' // 'success', 'info', 'warning', 'error'
29
- },
30
- title: {
31
- type: String
32
- },
33
- content: {
34
- type: String
35
- },
36
- closable: {
37
- type: Boolean,
38
- default: false
39
- },
40
- showIcon: {
41
- type: Boolean,
42
- default: false
43
- },
44
- fade: {
45
- type: Boolean,
46
- default: true
47
- },
48
- block: {
49
- type: Boolean
50
- }
51
- },
52
- emits: ['close'],
53
- data() {
54
- return {
55
- closed: false
56
- }
57
- },
58
- computed: {
59
- isDesc() {
60
- return this.$slots.content
61
- },
62
- iconType() {
63
- let type = ''
64
- switch (this.type) {
65
- case 'success':
66
- type = 'ios-checkmark-circle'
67
- break
68
- case 'info':
69
- type = 'ios-information-circle'
70
- break
71
- case 'warning':
72
- type = 'ios-alert'
73
- break
74
- case 'error':
75
- type = 'ios-close-circle'
76
- break
77
- }
78
- if (this.isDesc) type += '-outline'
79
- return type
80
- },
81
- classes() {
82
- return {
83
- [`${this.type}`]: true,
84
- block: this.block,
85
- desc: this.isDesc
86
- }
87
- }
88
- },
89
- methods: {
90
- close(e) {
91
- this.closed = true
92
- this.$emit('close', e)
93
- }
94
- }
95
- }
96
- </script>
97
-
98
- <style scoped lang="scss">
99
- $base-font-size: 14px;
100
- $medium-font-size: 16px;
101
- $large-font-size: 18px;
102
-
103
- @mixin iconBase {
104
- padding: 0 5px;
105
- font-size: $medium-font-size;
106
- line-height: 1;
107
- }
108
-
109
- .sh-alert {
110
- position: relative;
111
- border-radius: var(--vxe-border-radius);
112
- color: var(--vxe-font-color);
113
- display: inline-flex;
114
- align-items: center;
115
- padding: 5px;
116
- margin-bottom: 10px;
117
- &.block {
118
- display: flex;
119
- }
120
- &.desc {
121
- font-size: $large-font-size;
122
- .sh-alert-icon,
123
- .sh-alert-close {
124
- font-size: 24px;
125
- padding: 0 10px;
126
- }
127
- .sh-alert-content {
128
- padding: 0 10px;
129
- }
130
- }
131
- &-icon {
132
- @include iconBase;
133
- }
134
- &-content {
135
- flex: 1;
136
- .sh-alert-desc {
137
- font-size: $base-font-size;
138
- }
139
- }
140
- &-close {
141
- @include iconBase;
142
- cursor: pointer;
143
- }
144
- &.success {
145
- border: 1px solid var(--vxe-success-color);
146
- background-color: #edfff3;
147
- .sh-alert-icon {
148
- color: var(--vxe-success-color);
149
- }
150
- }
151
- &.info {
152
- border: 1px solid var(--vxe-info-color);
153
- background-color: #f0faff;
154
- .sh-alert-icon {
155
- color: var(--vxe-info-color);
156
- }
157
- }
158
- &.warning {
159
- border: 1px solid var(--vxe-warning-color);
160
- background-color: #fff9e6;
161
- .sh-alert-icon {
162
- color: var(--vxe-warning-color);
163
- }
164
- }
165
- &.error {
166
- border: 1px solid var(--vxe-danger-color);
167
- background-color: #ffefe6;
168
- .sh-alert-icon {
169
- color: var(--vxe-danger-color);
170
- }
171
- }
172
- }
173
- </style>
1
+ <template>
2
+ <transition :name="fade ? 'fade' : ''">
3
+ <div v-if="!closed" class="sh-alert" :class="classes">
4
+ <div v-if="showIcon" class="sh-alert-icon">
5
+ <slot name="icon">
6
+ <sh-icon :type="iconType"></sh-icon>
7
+ </slot>
8
+ </div>
9
+ <div class="sh-alert-content">
10
+ <slot>{{ title }}</slot>
11
+ <div class="sh-alert-desc">
12
+ <slot name="content">{{ content }}</slot>
13
+ </div>
14
+ </div>
15
+ <a v-if="closable" class="sh-alert-close" @click="close">
16
+ <slot name="close"><sh-icon type="ios-close"></sh-icon></slot>
17
+ </a>
18
+ </div>
19
+ </transition>
20
+ </template>
21
+
22
+ <script>
23
+ import { defineComponent, ref, computed } from 'vue'
24
+ export default defineComponent({
25
+ name: 'ShAlert',
26
+ props: {
27
+ type: {
28
+ type: String,
29
+ default: 'info' // 'success', 'info', 'warning', 'error'
30
+ },
31
+ title: {
32
+ type: String
33
+ },
34
+ content: {
35
+ type: String
36
+ },
37
+ closable: {
38
+ type: Boolean,
39
+ default: false
40
+ },
41
+ showIcon: {
42
+ type: Boolean,
43
+ default: false
44
+ },
45
+ fade: {
46
+ type: Boolean,
47
+ default: true
48
+ },
49
+ block: {
50
+ type: Boolean
51
+ }
52
+ },
53
+ emits: ['close'],
54
+ setup(props, context) {
55
+ const { slots, emit } = context
56
+ const closed = ref(false)
57
+
58
+ const isDesc = computed(() => !!slots.content)
59
+ const iconType = computed(() => {
60
+ let type = ''
61
+ switch (props.type) {
62
+ case 'success':
63
+ type = 'ios-checkmark-circle'
64
+ break
65
+ case 'info':
66
+ type = 'ios-information-circle'
67
+ break
68
+ case 'warning':
69
+ type = 'ios-alert'
70
+ break
71
+ case 'error':
72
+ type = 'ios-close-circle'
73
+ break
74
+ }
75
+ if (isDesc.value) type += '-outline'
76
+ return type
77
+ })
78
+ const classes = computed(() => {
79
+ return {
80
+ [`${props.type}`]: true,
81
+ block: props.block,
82
+ desc: isDesc.value
83
+ }
84
+ })
85
+
86
+ const close = e => {
87
+ closed.value = true
88
+ emit('close', e)
89
+ }
90
+ return {
91
+ closed,
92
+ classes,
93
+ iconType,
94
+ close
95
+ }
96
+ }
97
+ })
98
+ </script>
99
+
100
+ <style scoped lang="scss">
101
+ $base-font-size: 14px;
102
+ $medium-font-size: 16px;
103
+ $large-font-size: 18px;
104
+
105
+ @mixin iconBase {
106
+ padding: 0 5px;
107
+ font-size: $medium-font-size;
108
+ line-height: 1;
109
+ }
110
+
111
+ .sh-alert {
112
+ position: relative;
113
+ border-radius: var(--vxe-border-radius);
114
+ color: var(--vxe-font-color);
115
+ display: inline-flex;
116
+ align-items: center;
117
+ padding: 5px;
118
+ margin-bottom: 10px;
119
+ &.block {
120
+ display: flex;
121
+ }
122
+ &.desc {
123
+ font-size: $large-font-size;
124
+ .sh-alert-icon,
125
+ .sh-alert-close {
126
+ font-size: 24px;
127
+ padding: 0 10px;
128
+ }
129
+ .sh-alert-content {
130
+ padding: 0 10px;
131
+ }
132
+ }
133
+ &-icon {
134
+ @include iconBase;
135
+ }
136
+ &-content {
137
+ flex: 1;
138
+ .sh-alert-desc {
139
+ font-size: $base-font-size;
140
+ }
141
+ }
142
+ &-close {
143
+ @include iconBase;
144
+ cursor: pointer;
145
+ }
146
+ &.success {
147
+ border: 1px solid var(--vxe-success-color);
148
+ background-color: #edfff3;
149
+ .sh-alert-icon {
150
+ color: var(--vxe-success-color);
151
+ }
152
+ }
153
+ &.info {
154
+ border: 1px solid var(--vxe-info-color);
155
+ background-color: #f0faff;
156
+ .sh-alert-icon {
157
+ color: var(--vxe-info-color);
158
+ }
159
+ }
160
+ &.warning {
161
+ border: 1px solid var(--vxe-warning-color);
162
+ background-color: #fff9e6;
163
+ .sh-alert-icon {
164
+ color: var(--vxe-warning-color);
165
+ }
166
+ }
167
+ &.error {
168
+ border: 1px solid var(--vxe-danger-color);
169
+ background-color: #ffefe6;
170
+ .sh-alert-icon {
171
+ color: var(--vxe-danger-color);
172
+ }
173
+ }
174
+ }
175
+ </style>
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <span v-if="dot" ref="badge" class="sh-badge">
3
3
  <slot></slot>
4
- <sup v-show="badge" class="sh-badge-dot" :style="styles"></sup>
4
+ <sup v-show="hasBadge" class="sh-badge-dot" :style="styles"></sup>
5
5
  </span>
6
6
  <span v-else-if="status || color" ref="badge" class="sh-badge sh-badge-status">
7
7
  <span :class="statusClasses" :style="statusStyles"></span>
@@ -11,15 +11,16 @@
11
11
  </span>
12
12
  <span v-else ref="badge" class="sh-badge">
13
13
  <slot></slot>
14
- <sup v-if="$slots.count" :style="styles" class="sh-badge-count sh-badge-count-custom" :class="className"><slot name="count"></slot></sup>
15
- <sup v-else-if="hasCount" v-show="badge" class="sh-badge-count" :style="styles" :class="countClasses">
14
+ <sup v-if="slots.count" :style="styles" class="sh-badge-count sh-badge-count-custom" :class="className"><slot name="count"></slot></sup>
15
+ <sup v-else-if="hasCount" v-show="hasBadge" class="sh-badge-count" :style="styles" :class="countClasses">
16
16
  <slot name="text">{{ finalCount }}</slot>
17
17
  </sup>
18
18
  </span>
19
19
  </template>
20
20
 
21
21
  <script>
22
- export default {
22
+ import { defineComponent, computed } from 'vue'
23
+ export default defineComponent({
23
24
  name: 'ShBadge',
24
25
  props: {
25
26
  count: Number,
@@ -36,61 +37,74 @@ export default {
36
37
  offset: Array,
37
38
  color: String
38
39
  },
39
- computed: {
40
- countClasses() {
40
+ setup(props, context) {
41
+ const { slots } = context
42
+
43
+ const alone = computed(() => {
44
+ return slots.default === undefined
45
+ })
46
+ const countClasses = computed(() => {
41
47
  return {
42
- [`${this.className}`]: !!this.className,
43
- [`sh-badge-count-alone`]: this.alone,
44
- [`sh-badge-count-${this.type}`]: !!this.type
48
+ [`${props.className}`]: !!props.className,
49
+ [`sh-badge-count-alone`]: alone.value,
50
+ [`sh-badge-count-${props.type}`]: !!props.type
45
51
  }
46
- },
47
- statusClasses() {
52
+ })
53
+ const statusClasses = computed(() => {
48
54
  return {
49
55
  [`sh-badge-status-dot`]: true,
50
- [`sh-badge-status-${this.status}`]: !!this.status
56
+ [`sh-badge-status-${props.status}`]: !!props.status
51
57
  }
52
- },
53
- statusStyles() {
54
- return { backgroundColor: this.color }
55
- },
56
- styles() {
58
+ })
59
+ const statusStyles = computed(() => {
60
+ return { backgroundColor: props.color }
61
+ })
62
+ const styles = computed(() => {
57
63
  const style = {}
58
- if (this.offset && this.offset.length === 2) {
59
- style['margin-top'] = `${this.offset[0]}px`
60
- style['margin-right'] = `${this.offset[1]}px`
64
+ if (props.offset && props.offset.length === 2) {
65
+ style['margin-top'] = `${props.offset[0]}px`
66
+ style['margin-right'] = `${props.offset[1]}px`
61
67
  }
62
68
  return style
63
- },
64
- finalCount() {
65
- if (this.text) return this.text
66
- return parseInt(this.count) >= parseInt(this.overflowCount) ? `${this.overflowCount}+` : this.count
67
- },
68
- badge() {
69
- let status = false
70
- if (this.count) {
71
- status = !(parseInt(this.count) === 0)
69
+ })
70
+ const finalCount = computed(() => {
71
+ if (props.text) return props.text
72
+ return parseInt(props.count) >= parseInt(props.overflowCount) ? `${props.overflowCount}+` : props.count
73
+ })
74
+ const hasBadge = computed(() => {
75
+ if (props.count) {
76
+ status = !(parseInt(props.count) === 0)
72
77
  }
73
- if (this.dot) {
78
+ if (props.dot) {
74
79
  status = true
75
- if (this.count !== null) {
76
- if (parseInt(this.count) === 0) {
80
+ if (props.count !== null) {
81
+ if (parseInt(props.count) === 0) {
77
82
  status = false
78
83
  }
79
84
  }
80
85
  }
81
- if (this.text !== '') status = true
82
- return status || this.showZero
83
- },
84
- hasCount() {
85
- if (this.count || this.text !== '') return true
86
- if (this.showZero && parseInt(this.count) === 0) return true
87
- else return false
88
- },
89
- alone() {
90
- return this.$slots.default === undefined
86
+ if (props.text !== '') status = true
87
+ return status || props.showZero
88
+ })
89
+ const hasCount = computed(() => {
90
+ if (props.count || props.text !== '') return true
91
+ if (props.showZero && parseInt(props.count) === 0) return true
92
+ return false
93
+ })
94
+
95
+ return {
96
+ alone,
97
+ countClasses,
98
+ statusClasses,
99
+ statusStyles,
100
+ styles,
101
+ finalCount,
102
+ hasBadge,
103
+ hasCount,
104
+ slots
91
105
  }
92
106
  }
93
- }
107
+ })
94
108
  </script>
95
109
 
96
110
  <style scoped lang="scss">
@@ -1,27 +1,27 @@
1
1
  <template>
2
2
  <div class="sh-card" :class="classes">
3
- <div v-if="title || $slots.title || $slots.extra" class="sh-card-head" :style="styles">
3
+ <div v-if="title || slots.title || slots.extra" class="sh-card-head" :style="styles">
4
4
  <slot name="head">
5
- <div v-if="title || $slots.title" class="sh-card-head-title">
5
+ <div v-if="title || slots.title" class="sh-card-head-title">
6
6
  <sh-icon v-if="icon" :type="icon" :size="iconSize" :color="color" class="sh-card-head-icon"></sh-icon>
7
7
  <slot name="title">{{ title }}</slot>
8
8
  </div>
9
- <div v-if="$slots.extra" class="sh-card-head-extra"><slot name="extra"></slot></div>
9
+ <div v-if="slots.extra" class="sh-card-head-extra"><slot name="extra"></slot></div>
10
10
  </slot>
11
11
  </div>
12
- <div v-if="$slots.default" class="sh-card-body" :style="styles">
12
+ <div v-if="slots.default" class="sh-card-body" :style="styles">
13
13
  <slot></slot>
14
14
  </div>
15
- <div v-if="$slots.foot" class="sh-card-foot" :style="styles">
15
+ <div v-if="slots.foot" class="sh-card-foot" :style="styles">
16
16
  <slot name="foot"></slot>
17
17
  </div>
18
18
  </div>
19
19
  </template>
20
20
 
21
21
  <script>
22
- export default {
22
+ import { defineComponent, computed } from 'vue'
23
+ export default defineComponent({
23
24
  name: 'ShCard',
24
- components: {},
25
25
  props: {
26
26
  border: {
27
27
  type: Boolean,
@@ -54,21 +54,29 @@ export default {
54
54
  default: 'default' // large / medium / small / mini
55
55
  }
56
56
  },
57
- computed: {
58
- classes() {
57
+ setup(props, context) {
58
+ const { slots } = context
59
+
60
+ const classes = computed(() => {
59
61
  return {
60
- border: this.border,
61
- shadow: this.shadow,
62
- [this.size]: this.size
62
+ border: props.border,
63
+ shadow: props.shadow,
64
+ [props.size]: props.size
63
65
  }
64
- },
65
- styles() {
66
+ })
67
+ const styles = computed(() => {
66
68
  return {
67
- padding: `${this.padding}px`
69
+ padding: `${props.padding}px`
68
70
  }
71
+ })
72
+
73
+ return {
74
+ classes,
75
+ styles,
76
+ slots
69
77
  }
70
78
  }
71
- }
79
+ })
72
80
  </script>
73
81
 
74
82
  <style lang="scss" scoped>