sh-view 2.8.1 → 2.8.3
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.
- package/.eslintrc.js +25 -20
- package/other.js +8 -8
- package/package.json +9 -6
- package/packages/components/index.js +91 -91
- package/packages/components/sh-alert/alert.ts +30 -0
- package/packages/components/sh-alert/index.vue +143 -168
- package/packages/components/sh-badge/index.vue +242 -242
- package/packages/components/sh-calendar/index.vue +650 -650
- package/packages/components/sh-card/index.vue +148 -148
- package/packages/components/sh-code-editor/index.vue +19 -19
- package/packages/components/sh-col/index.vue +92 -92
- package/packages/components/sh-corner/index.vue +230 -230
- package/packages/components/sh-count-to/index.vue +131 -131
- package/packages/components/sh-date/index.vue +301 -301
- package/packages/components/sh-drawer/index.vue +579 -579
- package/packages/components/sh-drawer/scrollbar.js +78 -78
- package/packages/components/sh-empty/index.vue +42 -42
- package/packages/components/sh-form/js/props.js +76 -76
- package/packages/components/sh-form/js/useForm.js +229 -229
- package/packages/components/sh-header/index.vue +261 -260
- package/packages/components/sh-icon/css/default/ionicons.svg +869 -869
- package/packages/components/sh-icon/css/font/iconfont.json +247 -247
- package/packages/components/sh-icon/index.vue +41 -41
- package/packages/components/sh-image/index.vue +133 -133
- package/packages/components/sh-list/index.vue +146 -146
- package/packages/components/sh-loading/index.vue +53 -53
- package/packages/components/sh-modal/index.vue +188 -188
- package/packages/components/sh-noticebar/index.vue +215 -215
- package/packages/components/sh-poptip/index.vue +597 -597
- package/packages/components/sh-progress/index.vue +276 -276
- package/packages/components/sh-pull-refresh/index.vue +289 -289
- package/packages/components/sh-result/index.vue +114 -114
- package/packages/components/sh-row/index.vue +66 -66
- package/packages/components/sh-split/components/trigger.vue +33 -33
- package/packages/components/sh-split/index.vue +342 -342
- package/packages/components/sh-table/components/importModal.vue +363 -363
- package/packages/components/sh-table/components/sh-column.vue +68 -68
- package/packages/components/sh-table/js/excel_to_json.js +313 -313
- package/packages/components/sh-table/js/props.js +305 -305
- package/packages/components/sh-table/js/tableMethods.js +167 -167
- package/packages/components/sh-table/js/useTable.js +636 -636
- package/packages/components/sh-table/table.vue +217 -217
- package/packages/components/sh-tabs/index.vue +426 -426
- package/packages/components/sh-tag/index.vue +168 -168
- package/packages/components/sh-toolbar/index.vue +182 -182
- package/packages/components/sh-tree/components/table-tree.vue +289 -289
- package/packages/components/sh-tree/mixin/treeProps.js +122 -122
- package/packages/components/sh-upload/index.vue +535 -535
- package/packages/components/sh-water-fall/index.vue +80 -80
- package/packages/components/sh-water-mark/index.vue +96 -96
- package/packages/css/index.js +4 -4
- package/packages/directive/index.js +19 -19
- package/packages/directive/module/click-out.js +14 -14
- package/packages/directive/module/draggable.js +42 -42
- package/packages/directive/module/line-clamp.js +22 -22
- package/packages/directive/module/prevent-click.js +18 -18
- package/packages/directive/module/resize.js +14 -14
- package/packages/directive/module/ripple.js +166 -166
- package/packages/index.js +39 -39
- package/packages/mixin/index.js +86 -86
- package/packages/other/sh-cron-modal/components/cron-content.vue +294 -294
- package/packages/other/sh-cron-modal/index.vue +81 -81
- package/packages/other/sh-cron-modal/mixin/cron-emits.js +1 -1
- package/packages/other/sh-cron-modal/mixin/cron-props.js +9 -9
- package/packages/other/sh-cron-modal/tabs/cron-week-box.vue +126 -126
- package/packages/other/sh-menu/index.vue +326 -326
- package/packages/other/sh-menu/menu-group-content.vue +136 -136
- package/packages/other/sh-menu/menu-item-content.vue +71 -71
- package/packages/other/sh-menu-card/index.vue +250 -250
- package/packages/other/sh-menu-card/menu-box.vue +87 -87
- package/packages/other/sh-preview/components/sh-excel.vue +163 -163
- package/packages/other/sh-preview/js/data-hook.js +41 -41
- package/packages/other/sh-preview/js/data-props.js +15 -15
- package/packages/other/sh-system-tip/index.vue +115 -115
- package/packages/utils/resize.js +69 -70
- package/packages/utils/transfer-queue.js +12 -12
- package/packages/vxeTable/index.js +193 -184
- package/packages/vxeTable/plugins/export.js +450 -450
- package/packages/vxeTable/render/cell/vxe-render-img.vue +27 -27
- package/packages/vxeTable/render/cell/vxe-render-table.vue +51 -51
- package/packages/vxeTable/render/cell/vxe-render-time.vue +44 -44
- package/packages/vxeTable/render/cell/vxe-render-tree.vue +70 -70
- package/packages/vxeTable/render/filters/vxe-filter-input.vue +26 -26
- package/packages/vxeTable/render/filters/vxe-filter-time.vue +26 -26
- package/packages/vxeTable/render/globalRenders.jsx +514 -514
- package/packages/vxeTable/render/mixin/cell-hooks.js +198 -198
- package/packages/vxeTable/render/mixin/cell-props.js +23 -23
- package/packages/vxeTable/render/mixin/filter-hooks.js +46 -46
- package/tsconfig.json +25 -0
- package/types/component.d.ts +1 -0
- package/types/index.ts +0 -0
|
@@ -1,148 +1,148 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="sh-card" :class="classes">
|
|
3
|
-
<div v-if="title || slots.title || slots.extra" class="sh-card-head" :style="styles">
|
|
4
|
-
<slot name="head">
|
|
5
|
-
<div v-if="title || slots.title" class="sh-card-head-title">
|
|
6
|
-
<sh-icon v-if="icon" :type="icon" :size="iconSize" :color="color" class="sh-card-head-icon"></sh-icon>
|
|
7
|
-
<slot name="title">{{ title }}</slot>
|
|
8
|
-
</div>
|
|
9
|
-
<div v-if="slots.extra" class="sh-card-head-extra"><slot name="extra"></slot></div>
|
|
10
|
-
</slot>
|
|
11
|
-
</div>
|
|
12
|
-
<div v-if="slots.default" class="sh-card-body" :style="styles">
|
|
13
|
-
<slot></slot>
|
|
14
|
-
</div>
|
|
15
|
-
<div v-if="slots.foot" class="sh-card-foot" :style="styles">
|
|
16
|
-
<slot name="foot"></slot>
|
|
17
|
-
</div>
|
|
18
|
-
</div>
|
|
19
|
-
</template>
|
|
20
|
-
|
|
21
|
-
<script>
|
|
22
|
-
import { defineComponent, computed } from 'vue'
|
|
23
|
-
export default defineComponent({
|
|
24
|
-
name: 'ShCard',
|
|
25
|
-
props: {
|
|
26
|
-
border: {
|
|
27
|
-
type: Boolean,
|
|
28
|
-
default: true
|
|
29
|
-
},
|
|
30
|
-
shadow: {
|
|
31
|
-
type: Boolean,
|
|
32
|
-
default: false
|
|
33
|
-
},
|
|
34
|
-
padding: {
|
|
35
|
-
type: Number,
|
|
36
|
-
default: 10
|
|
37
|
-
},
|
|
38
|
-
title: {
|
|
39
|
-
type: String
|
|
40
|
-
},
|
|
41
|
-
color: {
|
|
42
|
-
type: String
|
|
43
|
-
},
|
|
44
|
-
icon: {
|
|
45
|
-
type: String,
|
|
46
|
-
default: ''
|
|
47
|
-
},
|
|
48
|
-
iconSize: {
|
|
49
|
-
type: Number,
|
|
50
|
-
default: 20
|
|
51
|
-
},
|
|
52
|
-
size: {
|
|
53
|
-
type: String,
|
|
54
|
-
default: 'default' // large / medium / small / mini
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
setup(props, context) {
|
|
58
|
-
const { slots } = context
|
|
59
|
-
|
|
60
|
-
const classes = computed(() => {
|
|
61
|
-
return {
|
|
62
|
-
border: props.border,
|
|
63
|
-
shadow: props.shadow,
|
|
64
|
-
[props.size]: props.size
|
|
65
|
-
}
|
|
66
|
-
})
|
|
67
|
-
const styles = computed(() => {
|
|
68
|
-
return {
|
|
69
|
-
padding: `${props.padding}px`
|
|
70
|
-
}
|
|
71
|
-
})
|
|
72
|
-
|
|
73
|
-
return {
|
|
74
|
-
classes,
|
|
75
|
-
styles,
|
|
76
|
-
slots
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
})
|
|
80
|
-
</script>
|
|
81
|
-
|
|
82
|
-
<style lang="scss" scoped>
|
|
83
|
-
@mixin layoutFlex {
|
|
84
|
-
display: flex;
|
|
85
|
-
width: 100%;
|
|
86
|
-
align-items: center;
|
|
87
|
-
flex-wrap: wrap;
|
|
88
|
-
}
|
|
89
|
-
.sh-card {
|
|
90
|
-
display: block;
|
|
91
|
-
border-radius: var(--vxe-border-radius);
|
|
92
|
-
background-color: var(--vxe-table-body-background-color);
|
|
93
|
-
.sh-card-head {
|
|
94
|
-
@include layoutFlex;
|
|
95
|
-
.sh-card-head-title {
|
|
96
|
-
flex: 1;
|
|
97
|
-
display: block;
|
|
98
|
-
overflow: hidden;
|
|
99
|
-
text-overflow: ellipsis;
|
|
100
|
-
white-space: nowrap;
|
|
101
|
-
.sh-card-head-icon {
|
|
102
|
-
margin-right: 10px;
|
|
103
|
-
color: var(--vxe-primary-color);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
.sh-card-head-extra {
|
|
107
|
-
@include layoutFlex;
|
|
108
|
-
flex: 0;
|
|
109
|
-
display: inline-flex;
|
|
110
|
-
white-space: nowrap;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
.sh-card-body {
|
|
114
|
-
display: block;
|
|
115
|
-
border-top: 1px solid var(--vxe-table-border-color);
|
|
116
|
-
}
|
|
117
|
-
.sh-card-foot {
|
|
118
|
-
@include layoutFlex;
|
|
119
|
-
border-top: 1px solid var(--vxe-table-border-color);
|
|
120
|
-
}
|
|
121
|
-
&.large {
|
|
122
|
-
.sh-card-head .sh-card-head-title {
|
|
123
|
-
font-size: 1.2rem;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
&.medium {
|
|
127
|
-
.sh-card-head .sh-card-head-title {
|
|
128
|
-
font-size: 1rem;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
&.small {
|
|
132
|
-
.sh-card-head .sh-card-head-title {
|
|
133
|
-
font-size: 0.9285rem;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
&.mini {
|
|
137
|
-
.sh-card-head .sh-card-head-title {
|
|
138
|
-
font-size: 0.8571rem;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
&.border {
|
|
142
|
-
border: 1px solid var(--vxe-table-border-color);
|
|
143
|
-
}
|
|
144
|
-
&.shadow {
|
|
145
|
-
box-shadow: var(--box-shadow);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
</style>
|
|
1
|
+
<template>
|
|
2
|
+
<div class="sh-card" :class="classes">
|
|
3
|
+
<div v-if="title || slots.title || slots.extra" class="sh-card-head" :style="styles">
|
|
4
|
+
<slot name="head">
|
|
5
|
+
<div v-if="title || slots.title" class="sh-card-head-title">
|
|
6
|
+
<sh-icon v-if="icon" :type="icon" :size="iconSize" :color="color" class="sh-card-head-icon"></sh-icon>
|
|
7
|
+
<slot name="title">{{ title }}</slot>
|
|
8
|
+
</div>
|
|
9
|
+
<div v-if="slots.extra" class="sh-card-head-extra"><slot name="extra"></slot></div>
|
|
10
|
+
</slot>
|
|
11
|
+
</div>
|
|
12
|
+
<div v-if="slots.default" class="sh-card-body" :style="styles">
|
|
13
|
+
<slot></slot>
|
|
14
|
+
</div>
|
|
15
|
+
<div v-if="slots.foot" class="sh-card-foot" :style="styles">
|
|
16
|
+
<slot name="foot"></slot>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
</template>
|
|
20
|
+
|
|
21
|
+
<script>
|
|
22
|
+
import { defineComponent, computed } from 'vue'
|
|
23
|
+
export default defineComponent({
|
|
24
|
+
name: 'ShCard',
|
|
25
|
+
props: {
|
|
26
|
+
border: {
|
|
27
|
+
type: Boolean,
|
|
28
|
+
default: true
|
|
29
|
+
},
|
|
30
|
+
shadow: {
|
|
31
|
+
type: Boolean,
|
|
32
|
+
default: false
|
|
33
|
+
},
|
|
34
|
+
padding: {
|
|
35
|
+
type: Number,
|
|
36
|
+
default: 10
|
|
37
|
+
},
|
|
38
|
+
title: {
|
|
39
|
+
type: String
|
|
40
|
+
},
|
|
41
|
+
color: {
|
|
42
|
+
type: String
|
|
43
|
+
},
|
|
44
|
+
icon: {
|
|
45
|
+
type: String,
|
|
46
|
+
default: ''
|
|
47
|
+
},
|
|
48
|
+
iconSize: {
|
|
49
|
+
type: Number,
|
|
50
|
+
default: 20
|
|
51
|
+
},
|
|
52
|
+
size: {
|
|
53
|
+
type: String,
|
|
54
|
+
default: 'default' // large / medium / small / mini
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
setup(props, context) {
|
|
58
|
+
const { slots } = context
|
|
59
|
+
|
|
60
|
+
const classes = computed(() => {
|
|
61
|
+
return {
|
|
62
|
+
border: props.border,
|
|
63
|
+
shadow: props.shadow,
|
|
64
|
+
[props.size]: props.size
|
|
65
|
+
}
|
|
66
|
+
})
|
|
67
|
+
const styles = computed(() => {
|
|
68
|
+
return {
|
|
69
|
+
padding: `${props.padding}px`
|
|
70
|
+
}
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
return {
|
|
74
|
+
classes,
|
|
75
|
+
styles,
|
|
76
|
+
slots
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
})
|
|
80
|
+
</script>
|
|
81
|
+
|
|
82
|
+
<style lang="scss" scoped>
|
|
83
|
+
@mixin layoutFlex {
|
|
84
|
+
display: flex;
|
|
85
|
+
width: 100%;
|
|
86
|
+
align-items: center;
|
|
87
|
+
flex-wrap: wrap;
|
|
88
|
+
}
|
|
89
|
+
.sh-card {
|
|
90
|
+
display: block;
|
|
91
|
+
border-radius: var(--vxe-border-radius);
|
|
92
|
+
background-color: var(--vxe-table-body-background-color);
|
|
93
|
+
.sh-card-head {
|
|
94
|
+
@include layoutFlex;
|
|
95
|
+
.sh-card-head-title {
|
|
96
|
+
flex: 1;
|
|
97
|
+
display: block;
|
|
98
|
+
overflow: hidden;
|
|
99
|
+
text-overflow: ellipsis;
|
|
100
|
+
white-space: nowrap;
|
|
101
|
+
.sh-card-head-icon {
|
|
102
|
+
margin-right: 10px;
|
|
103
|
+
color: var(--vxe-primary-color);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
.sh-card-head-extra {
|
|
107
|
+
@include layoutFlex;
|
|
108
|
+
flex: 0;
|
|
109
|
+
display: inline-flex;
|
|
110
|
+
white-space: nowrap;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
.sh-card-body {
|
|
114
|
+
display: block;
|
|
115
|
+
border-top: 1px solid var(--vxe-table-border-color);
|
|
116
|
+
}
|
|
117
|
+
.sh-card-foot {
|
|
118
|
+
@include layoutFlex;
|
|
119
|
+
border-top: 1px solid var(--vxe-table-border-color);
|
|
120
|
+
}
|
|
121
|
+
&.large {
|
|
122
|
+
.sh-card-head .sh-card-head-title {
|
|
123
|
+
font-size: 1.2rem;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
&.medium {
|
|
127
|
+
.sh-card-head .sh-card-head-title {
|
|
128
|
+
font-size: 1rem;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
&.small {
|
|
132
|
+
.sh-card-head .sh-card-head-title {
|
|
133
|
+
font-size: 0.9285rem;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
&.mini {
|
|
137
|
+
.sh-card-head .sh-card-head-title {
|
|
138
|
+
font-size: 0.8571rem;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
&.border {
|
|
142
|
+
border: 1px solid var(--vxe-table-border-color);
|
|
143
|
+
}
|
|
144
|
+
&.shadow {
|
|
145
|
+
box-shadow: var(--box-shadow);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
</style>
|
|
@@ -80,8 +80,8 @@ export default defineComponent({
|
|
|
80
80
|
setup(props, context) {
|
|
81
81
|
const { emit } = context
|
|
82
82
|
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
let codeEditor = null
|
|
84
|
+
let codeLength = 0
|
|
85
85
|
const codeError = ref(null)
|
|
86
86
|
const codeRef = ref()
|
|
87
87
|
|
|
@@ -94,7 +94,7 @@ export default defineComponent({
|
|
|
94
94
|
})
|
|
95
95
|
const codeExtensions = computed(() => {
|
|
96
96
|
const { mode, disabled, multipleSelection, indent, theme, tab, wrap, extensions } = props
|
|
97
|
-
|
|
97
|
+
const defaultExtensions = [basicSetup, history(), drawSelection(), lineNumbers(), placeholder(props.placeholder), keymap.of([...defaultKeymap, ...historyKeymap])]
|
|
98
98
|
if (['javascript', 'js'].includes(mode.toLowerCase())) {
|
|
99
99
|
defaultExtensions.push(javascript())
|
|
100
100
|
} else if (['mysql', 'sql'].includes(mode.toLowerCase())) {
|
|
@@ -119,22 +119,22 @@ export default defineComponent({
|
|
|
119
119
|
watch(
|
|
120
120
|
() => props.modelValue,
|
|
121
121
|
value => {
|
|
122
|
-
if (codeEditor
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
codeEditor.
|
|
122
|
+
if (codeEditor && !codeEditor.composing) {
|
|
123
|
+
const docLength = codeEditor.state.doc.length
|
|
124
|
+
const docValue = getTransformValue(value)
|
|
125
|
+
codeEditor.dispatch({
|
|
126
126
|
changes: { from: 0, to: docLength, insert: docValue },
|
|
127
|
-
selection: codeEditor.
|
|
127
|
+
selection: codeEditor.state.selection,
|
|
128
128
|
scrollIntoView: true
|
|
129
129
|
})
|
|
130
|
-
codeLength
|
|
130
|
+
codeLength = docLength
|
|
131
131
|
}
|
|
132
132
|
}
|
|
133
133
|
)
|
|
134
134
|
watch(
|
|
135
135
|
() => props.codeExtensions,
|
|
136
136
|
value => {
|
|
137
|
-
codeEditor
|
|
137
|
+
codeEditor?.dispatch({
|
|
138
138
|
effects: StateEffect.reconfigure.of(value)
|
|
139
139
|
})
|
|
140
140
|
},
|
|
@@ -144,12 +144,12 @@ export default defineComponent({
|
|
|
144
144
|
)
|
|
145
145
|
|
|
146
146
|
const codeRender = async () => {
|
|
147
|
-
|
|
148
|
-
|
|
147
|
+
const docValue = getTransformValue(props.modelValue)
|
|
148
|
+
const codeState = EditorState.create({
|
|
149
149
|
doc: docValue,
|
|
150
150
|
extensions: codeExtensions.value
|
|
151
151
|
})
|
|
152
|
-
codeEditor
|
|
152
|
+
codeEditor = new EditorView({
|
|
153
153
|
parent: codeRef.value,
|
|
154
154
|
state: codeState
|
|
155
155
|
})
|
|
@@ -158,7 +158,7 @@ export default defineComponent({
|
|
|
158
158
|
}
|
|
159
159
|
|
|
160
160
|
const focusListener = (state, focusing) => {
|
|
161
|
-
|
|
161
|
+
const valueStr = state.doc.toString()
|
|
162
162
|
if (focusing) {
|
|
163
163
|
dispatchEvent('focus', valueStr)
|
|
164
164
|
} else {
|
|
@@ -169,12 +169,12 @@ export default defineComponent({
|
|
|
169
169
|
|
|
170
170
|
const updateListener = async ({ state, changes, docChanged }) => {
|
|
171
171
|
if (changes.empty || !docChanged) return
|
|
172
|
-
|
|
172
|
+
const valueStr = state.doc.toString()
|
|
173
173
|
dispatchEvent('change', valueStr)
|
|
174
174
|
}
|
|
175
175
|
|
|
176
176
|
const focus = () => {
|
|
177
|
-
codeEditor
|
|
177
|
+
codeEditor && codeEditor.focus()
|
|
178
178
|
}
|
|
179
179
|
|
|
180
180
|
const getTransformValue = (value, out) => {
|
|
@@ -195,7 +195,7 @@ export default defineComponent({
|
|
|
195
195
|
}
|
|
196
196
|
|
|
197
197
|
const dispatchValue = value => {
|
|
198
|
-
|
|
198
|
+
const outValue = getTransformValue(value, true)
|
|
199
199
|
if (codeError.value) return
|
|
200
200
|
emit('update:modelValue', outValue)
|
|
201
201
|
}
|
|
@@ -206,14 +206,14 @@ export default defineComponent({
|
|
|
206
206
|
outValue = getTransformValue(value, true)
|
|
207
207
|
if (codeError.value) return
|
|
208
208
|
}
|
|
209
|
-
emit(type, { $event: codeEditor
|
|
209
|
+
emit(type, { $event: codeEditor, value: outValue || value })
|
|
210
210
|
}
|
|
211
211
|
|
|
212
212
|
onMounted(() => {
|
|
213
213
|
codeRender()
|
|
214
214
|
})
|
|
215
215
|
onUnmounted(() => {
|
|
216
|
-
if (codeEditor
|
|
216
|
+
if (codeEditor) codeEditor.destroy()
|
|
217
217
|
dispatchEvent('destroy', props.modelValue)
|
|
218
218
|
})
|
|
219
219
|
|
|
@@ -1,92 +1,92 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div :class="classes" :style="styles">
|
|
3
|
-
<slot></slot>
|
|
4
|
-
</div>
|
|
5
|
-
</template>
|
|
6
|
-
|
|
7
|
-
<script>
|
|
8
|
-
import { defineComponent, computed, inject } from 'vue'
|
|
9
|
-
import './css/index.scss'
|
|
10
|
-
export default defineComponent({
|
|
11
|
-
name: 'ShCol',
|
|
12
|
-
props: {
|
|
13
|
-
span: [Number, String],
|
|
14
|
-
order: [Number, String],
|
|
15
|
-
offset: [Number, String],
|
|
16
|
-
push: [Number, String],
|
|
17
|
-
pull: [Number, String],
|
|
18
|
-
xs: [Number, Object],
|
|
19
|
-
sm: [Number, Object],
|
|
20
|
-
md: [Number, Object],
|
|
21
|
-
lg: [Number, Object],
|
|
22
|
-
xl: [Number, Object],
|
|
23
|
-
xxl: [Number, Object],
|
|
24
|
-
flex: {
|
|
25
|
-
type: [Number, String],
|
|
26
|
-
default: ''
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
setup(props, context) {
|
|
30
|
-
const prefixCls = 'sh-col'
|
|
31
|
-
const RowInstance = inject('RowInstance')
|
|
32
|
-
|
|
33
|
-
const gutter = computed(() => {
|
|
34
|
-
return RowInstance?.gutter || 0
|
|
35
|
-
})
|
|
36
|
-
const classes = computed(() => {
|
|
37
|
-
let classList = [
|
|
38
|
-
`${prefixCls}`,
|
|
39
|
-
{
|
|
40
|
-
[`${prefixCls}-span-${props.span}`]: props.span,
|
|
41
|
-
[`${prefixCls}-order-${props.order}`]: props.order,
|
|
42
|
-
[`${prefixCls}-offset-${props.offset}`]: props.offset,
|
|
43
|
-
[`${prefixCls}-push-${props.push}`]: props.push,
|
|
44
|
-
[`${prefixCls}-pull-${props.pull}`]: props.pull
|
|
45
|
-
}
|
|
46
|
-
]
|
|
47
|
-
let sizeList = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl']
|
|
48
|
-
sizeList.forEach(size => {
|
|
49
|
-
if (typeof props[size] === 'number') {
|
|
50
|
-
classList.push(`${prefixCls}-span-${size}-${props[size]}`)
|
|
51
|
-
} else if (typeof props[size] === 'object') {
|
|
52
|
-
let sizeProps = props[size]
|
|
53
|
-
Object.keys(sizeProps).forEach(sizeprop => {
|
|
54
|
-
classList.push(`${prefixCls}-${size}-${sizeprop}-${sizeProps[sizeprop]}`)
|
|
55
|
-
})
|
|
56
|
-
}
|
|
57
|
-
})
|
|
58
|
-
return classList
|
|
59
|
-
})
|
|
60
|
-
const styles = computed(() => {
|
|
61
|
-
let style = {}
|
|
62
|
-
if (gutter.value !== 0) {
|
|
63
|
-
style = {
|
|
64
|
-
paddingLeft: gutter.value / 2 + 'px',
|
|
65
|
-
paddingRight: gutter.value / 2 + 'px'
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
if (props.flex) {
|
|
69
|
-
style.flex = parseFlex(props.flex)
|
|
70
|
-
}
|
|
71
|
-
return style
|
|
72
|
-
})
|
|
73
|
-
|
|
74
|
-
const parseFlex = flex => {
|
|
75
|
-
if (typeof flex === 'number') {
|
|
76
|
-
return `${flex} ${flex} auto`
|
|
77
|
-
}
|
|
78
|
-
if (/^\d+(\.\d+)?(px|em|rem|%)$/.test(flex)) {
|
|
79
|
-
return `0 0 ${flex}`
|
|
80
|
-
}
|
|
81
|
-
return flex
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
return {
|
|
85
|
-
classes,
|
|
86
|
-
styles
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
})
|
|
90
|
-
</script>
|
|
91
|
-
|
|
92
|
-
<style scoped lang="scss"></style>
|
|
1
|
+
<template>
|
|
2
|
+
<div :class="classes" :style="styles">
|
|
3
|
+
<slot></slot>
|
|
4
|
+
</div>
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<script>
|
|
8
|
+
import { defineComponent, computed, inject } from 'vue'
|
|
9
|
+
import './css/index.scss'
|
|
10
|
+
export default defineComponent({
|
|
11
|
+
name: 'ShCol',
|
|
12
|
+
props: {
|
|
13
|
+
span: [Number, String],
|
|
14
|
+
order: [Number, String],
|
|
15
|
+
offset: [Number, String],
|
|
16
|
+
push: [Number, String],
|
|
17
|
+
pull: [Number, String],
|
|
18
|
+
xs: [Number, Object],
|
|
19
|
+
sm: [Number, Object],
|
|
20
|
+
md: [Number, Object],
|
|
21
|
+
lg: [Number, Object],
|
|
22
|
+
xl: [Number, Object],
|
|
23
|
+
xxl: [Number, Object],
|
|
24
|
+
flex: {
|
|
25
|
+
type: [Number, String],
|
|
26
|
+
default: ''
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
setup(props, context) {
|
|
30
|
+
const prefixCls = 'sh-col'
|
|
31
|
+
const RowInstance = inject('RowInstance')
|
|
32
|
+
|
|
33
|
+
const gutter = computed(() => {
|
|
34
|
+
return RowInstance?.gutter || 0
|
|
35
|
+
})
|
|
36
|
+
const classes = computed(() => {
|
|
37
|
+
let classList = [
|
|
38
|
+
`${prefixCls}`,
|
|
39
|
+
{
|
|
40
|
+
[`${prefixCls}-span-${props.span}`]: props.span,
|
|
41
|
+
[`${prefixCls}-order-${props.order}`]: props.order,
|
|
42
|
+
[`${prefixCls}-offset-${props.offset}`]: props.offset,
|
|
43
|
+
[`${prefixCls}-push-${props.push}`]: props.push,
|
|
44
|
+
[`${prefixCls}-pull-${props.pull}`]: props.pull
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
let sizeList = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl']
|
|
48
|
+
sizeList.forEach(size => {
|
|
49
|
+
if (typeof props[size] === 'number') {
|
|
50
|
+
classList.push(`${prefixCls}-span-${size}-${props[size]}`)
|
|
51
|
+
} else if (typeof props[size] === 'object') {
|
|
52
|
+
let sizeProps = props[size]
|
|
53
|
+
Object.keys(sizeProps).forEach(sizeprop => {
|
|
54
|
+
classList.push(`${prefixCls}-${size}-${sizeprop}-${sizeProps[sizeprop]}`)
|
|
55
|
+
})
|
|
56
|
+
}
|
|
57
|
+
})
|
|
58
|
+
return classList
|
|
59
|
+
})
|
|
60
|
+
const styles = computed(() => {
|
|
61
|
+
let style = {}
|
|
62
|
+
if (gutter.value !== 0) {
|
|
63
|
+
style = {
|
|
64
|
+
paddingLeft: gutter.value / 2 + 'px',
|
|
65
|
+
paddingRight: gutter.value / 2 + 'px'
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (props.flex) {
|
|
69
|
+
style.flex = parseFlex(props.flex)
|
|
70
|
+
}
|
|
71
|
+
return style
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
const parseFlex = flex => {
|
|
75
|
+
if (typeof flex === 'number') {
|
|
76
|
+
return `${flex} ${flex} auto`
|
|
77
|
+
}
|
|
78
|
+
if (/^\d+(\.\d+)?(px|em|rem|%)$/.test(flex)) {
|
|
79
|
+
return `0 0 ${flex}`
|
|
80
|
+
}
|
|
81
|
+
return flex
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return {
|
|
85
|
+
classes,
|
|
86
|
+
styles
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
})
|
|
90
|
+
</script>
|
|
91
|
+
|
|
92
|
+
<style scoped lang="scss"></style>
|