vue-editify 0.1.19 → 0.1.20
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/README.md +3 -3
- package/examples/App.vue +62 -62
- package/examples/main.ts +4 -4
- package/lib/components/button/button.vue.d.ts +11 -11
- package/lib/components/checkbox/checkbox.vue.d.ts +8 -8
- package/lib/components/colors/colors.vue.d.ts +4 -4
- package/lib/components/icon/icon.vue.d.ts +1 -1
- package/lib/components/insertImage/insertImage.vue.d.ts +9 -9
- package/lib/components/insertLink/insertLink.vue.d.ts +2 -2
- package/lib/components/insertTable/insertTable.vue.d.ts +2 -2
- package/lib/components/insertVideo/insertVideo.vue.d.ts +9 -9
- package/lib/components/layer/layer.vue.d.ts +9 -9
- package/lib/components/menu/menu.vue.d.ts +4 -4
- package/lib/components/toolbar/toolbar.vue.d.ts +9 -9
- package/lib/components/tooltip/tooltip.vue.d.ts +1 -1
- package/lib/components/triangle/triangle.vue.d.ts +4 -4
- package/lib/editify/editify.vue.d.ts +68 -68
- package/lib/editify.es.js +35 -24
- package/lib/editify.umd.js +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/style.css +1 -1
- package/package.json +45 -45
- package/src/components/button/button.less +145 -145
- package/src/components/button/button.vue +197 -197
- package/src/components/button/props.ts +95 -95
- package/src/components/checkbox/checkbox.less +84 -84
- package/src/components/checkbox/checkbox.vue +68 -68
- package/src/components/checkbox/props.ts +49 -49
- package/src/components/colors/colors.less +75 -75
- package/src/components/colors/colors.vue +36 -36
- package/src/components/colors/props.ts +29 -29
- package/src/components/icon/icon.less +14 -14
- package/src/components/icon/icon.vue +12 -12
- package/src/components/icon/props.ts +11 -11
- package/src/components/insertImage/insertImage.less +135 -135
- package/src/components/insertImage/insertImage.vue +146 -146
- package/src/components/insertImage/props.ts +43 -43
- package/src/components/insertLink/insertLink.less +64 -64
- package/src/components/insertLink/insertLink.vue +58 -58
- package/src/components/insertLink/props.ts +16 -16
- package/src/components/insertTable/insertTable.less +54 -54
- package/src/components/insertTable/insertTable.vue +85 -85
- package/src/components/insertTable/props.ts +27 -27
- package/src/components/insertVideo/insertVideo.less +135 -135
- package/src/components/insertVideo/insertVideo.vue +146 -146
- package/src/components/insertVideo/props.ts +43 -43
- package/src/components/layer/layer.less +49 -49
- package/src/components/layer/layer.vue +598 -598
- package/src/components/layer/props.ts +71 -71
- package/src/components/menu/menu.less +63 -63
- package/src/components/menu/menu.vue +1569 -1569
- package/src/components/menu/props.ts +17 -17
- package/src/components/toolbar/props.ts +35 -35
- package/src/components/toolbar/toolbar.less +89 -89
- package/src/components/toolbar/toolbar.vue +1101 -1101
- package/src/components/tooltip/props.ts +21 -21
- package/src/components/tooltip/tooltip.less +23 -23
- package/src/components/tooltip/tooltip.vue +37 -37
- package/src/components/triangle/props.ts +26 -26
- package/src/components/triangle/triangle.less +79 -79
- package/src/components/triangle/triangle.vue +65 -65
- package/src/core/function.ts +1150 -1144
- package/src/core/rule.ts +259 -259
- package/src/core/tool.ts +1137 -1137
- package/src/css/base.less +30 -30
- package/src/css/hljs.less +54 -54
- package/src/editify/editify.less +404 -404
- package/src/editify/editify.vue +810 -803
- package/src/editify/props.ts +156 -156
- package/src/hljs/index.ts +197 -197
- package/src/icon/iconfont.css +219 -219
- package/src/index.ts +32 -32
- package/src/locale/en_US.ts +88 -88
- package/src/locale/index.ts +12 -12
- package/src/locale/zh_CN.ts +88 -88
- package/tsconfig.json +27 -27
- package/tsconfig.node.json +11 -11
- package/vite-env.d.ts +1 -1
- package/vite.config.ts +42 -42
@@ -1,197 +1,197 @@
|
|
1
|
-
<template>
|
2
|
-
<div class="editify-button">
|
3
|
-
<div class="editify-button-wrap" :class="{ 'right-border': rightBorder, 'left-border': leftBorder }">
|
4
|
-
<Tooltip :content="title" :disabled="!tooltip">
|
5
|
-
<div ref="btnRef" :style="btnStyle" class="editify-button-el" :class="{ disabled: disabled, active: active }" @mouseenter="status = 'hover'" @mouseleave="status = null" @mousedown="status = 'down'" @mouseup="status = 'hover'" @click="handleClick">
|
6
|
-
<div v-if="type == 'default' || type == 'select'" class="editify-button-slot">
|
7
|
-
<slot></slot>
|
8
|
-
</div>
|
9
|
-
<div v-else-if="type == 'display'">{{ displayLabel }}</div>
|
10
|
-
<Icon v-if="type == 'select' || type == 'display'" value="caret-down" class="editify-button-caret" :class="{ rotate: show }"></Icon>
|
11
|
-
</div>
|
12
|
-
</Tooltip>
|
13
|
-
<Layer ref="layerRef" v-model="show" :node="btnRef" border fade placement="bottom-start" :z-index="12" animation="translate" @show="emits('layerShow')" @shown="emits('layerShown')" @hidden="emits('layerHidden')">
|
14
|
-
<div class="editify-button-layer" :style="{ width: (type == 'select' ? parseSelectConfig.width : parseDisplayConfig.width) + 'px', maxHeight: (type == 'select' ? parseSelectConfig.maxHeight : parseDisplayConfig.maxHeight) + 'px', overflow: hideScroll ? 'visible' : '' }">
|
15
|
-
<slot v-if="$slots.layer" name="layer" :options="cmpOptions"></slot>
|
16
|
-
<div v-else class="editify-button-options">
|
17
|
-
<div @click="select(item)" class="editify-button-option" :class="{ active: type == 'display' ? item.value == parseDisplayConfig.value : false }" :style="item.style || ''" v-for="item in cmpOptions">
|
18
|
-
<slot v-if="$slots.option" name="option" :item="item"></slot>
|
19
|
-
<div class="editify-button-option-flex" v-else>
|
20
|
-
<Icon v-if="item.icon" :value="item.icon"></Icon>
|
21
|
-
<span>{{ item.label }}</span>
|
22
|
-
</div>
|
23
|
-
</div>
|
24
|
-
</div>
|
25
|
-
</div>
|
26
|
-
</Layer>
|
27
|
-
</div>
|
28
|
-
</div>
|
29
|
-
</template>
|
30
|
-
<script setup lang="ts">
|
31
|
-
import Tooltip from '../tooltip/tooltip.vue'
|
32
|
-
import Layer from '../layer/layer.vue'
|
33
|
-
import Icon from '../icon/icon.vue'
|
34
|
-
import { common as DapCommon, color as DapColor } from 'dap-util'
|
35
|
-
import { ButtonDisplayConfigType, ButtonOptionsItemType, ButtonProps, ButtonSelectConfigType } from './props'
|
36
|
-
import { computed, ref } from 'vue'
|
37
|
-
import { ObjectType } from '../../core/tool'
|
38
|
-
|
39
|
-
defineOptions({
|
40
|
-
name: 'Button'
|
41
|
-
})
|
42
|
-
const props = defineProps(ButtonProps)
|
43
|
-
const emits = defineEmits(['operate', 'layerShow', 'layerShown', 'layerHidden'])
|
44
|
-
|
45
|
-
//是否显示浮层
|
46
|
-
const show = ref<boolean>(false)
|
47
|
-
//按钮状态,hover表示悬浮,down表示按下
|
48
|
-
const status = ref<'hover' | 'down' | null>(null)
|
49
|
-
const btnRef = ref<HTMLElement | null>(null)
|
50
|
-
const layerRef = ref<InstanceType<typeof Layer> | null>(null)
|
51
|
-
|
52
|
-
//处理后的select配置
|
53
|
-
const parseSelectConfig = computed<ButtonSelectConfigType>(() => {
|
54
|
-
let options: ButtonOptionsItemType[] = []
|
55
|
-
let width: number | '' = ''
|
56
|
-
let maxHeight: number | '' = ''
|
57
|
-
if (DapCommon.isObject(props.selectConfig)) {
|
58
|
-
if (Array.isArray(props.selectConfig.options)) {
|
59
|
-
options = props.selectConfig.options.map(item => {
|
60
|
-
if (DapCommon.isObject(item)) {
|
61
|
-
return {
|
62
|
-
label: (<ButtonOptionsItemType>item).label,
|
63
|
-
value: (<ButtonOptionsItemType>item).value,
|
64
|
-
icon: (<ButtonOptionsItemType>item).icon,
|
65
|
-
style: (<ButtonOptionsItemType>item).style
|
66
|
-
}
|
67
|
-
}
|
68
|
-
return {
|
69
|
-
label: <string | number>item,
|
70
|
-
value: <string | number>item
|
71
|
-
}
|
72
|
-
})
|
73
|
-
}
|
74
|
-
if (typeof props.selectConfig.width == 'number') {
|
75
|
-
width = props.selectConfig.width
|
76
|
-
}
|
77
|
-
if (typeof props.selectConfig.maxHeight == 'number') {
|
78
|
-
maxHeight = props.selectConfig.maxHeight
|
79
|
-
}
|
80
|
-
}
|
81
|
-
return {
|
82
|
-
options,
|
83
|
-
width,
|
84
|
-
maxHeight
|
85
|
-
}
|
86
|
-
})
|
87
|
-
//处理后的display配置
|
88
|
-
const parseDisplayConfig = computed<ButtonDisplayConfigType>(() => {
|
89
|
-
let options: ButtonOptionsItemType[] = []
|
90
|
-
let width: number | '' = ''
|
91
|
-
let maxHeight: number | '' = ''
|
92
|
-
let value: string | number = ''
|
93
|
-
if (DapCommon.isObject(props.displayConfig)) {
|
94
|
-
if (typeof props.displayConfig.value == 'string' || typeof props.displayConfig.value == 'number') {
|
95
|
-
value = props.displayConfig.value
|
96
|
-
}
|
97
|
-
if (Array.isArray(props.displayConfig.options)) {
|
98
|
-
options = props.displayConfig.options.map(item => {
|
99
|
-
if (DapCommon.isObject(item)) {
|
100
|
-
return {
|
101
|
-
label: (<ButtonOptionsItemType>item).label,
|
102
|
-
value: (<ButtonOptionsItemType>item).value,
|
103
|
-
icon: (<ButtonOptionsItemType>item).icon,
|
104
|
-
style: (<ButtonOptionsItemType>item).style
|
105
|
-
}
|
106
|
-
}
|
107
|
-
return {
|
108
|
-
label: <string | number>item,
|
109
|
-
value: <string | number>item
|
110
|
-
}
|
111
|
-
})
|
112
|
-
let optItem = options.find(item => {
|
113
|
-
return item.value == value
|
114
|
-
})
|
115
|
-
if (!optItem && options[0]) {
|
116
|
-
value = options[0].value!
|
117
|
-
}
|
118
|
-
}
|
119
|
-
if (typeof props.displayConfig.width == 'number') {
|
120
|
-
width = props.displayConfig.width
|
121
|
-
}
|
122
|
-
if (typeof props.displayConfig.maxHeight == 'number') {
|
123
|
-
maxHeight = props.displayConfig.maxHeight
|
124
|
-
}
|
125
|
-
}
|
126
|
-
return {
|
127
|
-
options,
|
128
|
-
width,
|
129
|
-
maxHeight,
|
130
|
-
value
|
131
|
-
}
|
132
|
-
})
|
133
|
-
//渲染的浮层列表数据
|
134
|
-
const cmpOptions = computed<ButtonOptionsItemType[]>(() => {
|
135
|
-
return props.type == 'select' ? <ButtonOptionsItemType[]>parseSelectConfig.value.options : <ButtonOptionsItemType[]>parseDisplayConfig.value.options
|
136
|
-
})
|
137
|
-
//显示在页面的value值对应的label
|
138
|
-
const displayLabel = computed<string | number>(() => {
|
139
|
-
const val = (<ButtonOptionsItemType[]>parseDisplayConfig.value.options).find(item => {
|
140
|
-
return item.value == parseDisplayConfig.value.value
|
141
|
-
})
|
142
|
-
return val ? val.label! : ''
|
143
|
-
})
|
144
|
-
//十六进制颜色转换的rgb颜色数组
|
145
|
-
const parseColor = computed<number[]>(() => {
|
146
|
-
return DapColor.hex2rgb(props.color)
|
147
|
-
})
|
148
|
-
//按钮样式
|
149
|
-
const btnStyle = computed<ObjectType>(() => {
|
150
|
-
if (props.disabled) {
|
151
|
-
return {}
|
152
|
-
}
|
153
|
-
if (props.color) {
|
154
|
-
//激活情况下和鼠标按下状态
|
155
|
-
if (props.active || status.value == 'down') {
|
156
|
-
return {
|
157
|
-
color: props.color,
|
158
|
-
backgroundColor: `rgba(${parseColor.value[0]},${parseColor.value[1]},${parseColor.value[2]},0.15)`
|
159
|
-
}
|
160
|
-
}
|
161
|
-
//鼠标悬浮状态
|
162
|
-
if (status.value == 'hover') {
|
163
|
-
return {
|
164
|
-
color: `rgba(${parseColor.value[0]},${parseColor.value[1]},${parseColor.value[2]},0.9)`,
|
165
|
-
backgroundColor: `rgba(${parseColor.value[0]},${parseColor.value[1]},${parseColor.value[2]},0.05)`
|
166
|
-
}
|
167
|
-
}
|
168
|
-
}
|
169
|
-
return {}
|
170
|
-
})
|
171
|
-
|
172
|
-
//列表选择
|
173
|
-
const select = (item: ButtonOptionsItemType) => {
|
174
|
-
if (props.disabled) {
|
175
|
-
return
|
176
|
-
}
|
177
|
-
emits('operate', props.name, item.value)
|
178
|
-
show.value = false
|
179
|
-
}
|
180
|
-
//按钮点击处理
|
181
|
-
const handleClick = () => {
|
182
|
-
if (props.disabled) {
|
183
|
-
return
|
184
|
-
}
|
185
|
-
if (props.type == 'default') {
|
186
|
-
emits('operate', props.name)
|
187
|
-
} else {
|
188
|
-
show.value = !show.value
|
189
|
-
}
|
190
|
-
}
|
191
|
-
|
192
|
-
defineExpose({
|
193
|
-
show,
|
194
|
-
status
|
195
|
-
})
|
196
|
-
</script>
|
197
|
-
<style scoped src="./button.less"></style>
|
1
|
+
<template>
|
2
|
+
<div class="editify-button">
|
3
|
+
<div class="editify-button-wrap" :class="{ 'right-border': rightBorder, 'left-border': leftBorder }">
|
4
|
+
<Tooltip :content="title" :disabled="!tooltip">
|
5
|
+
<div ref="btnRef" :style="btnStyle" class="editify-button-el" :class="{ disabled: disabled, active: active }" @mouseenter="status = 'hover'" @mouseleave="status = null" @mousedown="status = 'down'" @mouseup="status = 'hover'" @click="handleClick">
|
6
|
+
<div v-if="type == 'default' || type == 'select'" class="editify-button-slot">
|
7
|
+
<slot></slot>
|
8
|
+
</div>
|
9
|
+
<div v-else-if="type == 'display'">{{ displayLabel }}</div>
|
10
|
+
<Icon v-if="type == 'select' || type == 'display'" value="caret-down" class="editify-button-caret" :class="{ rotate: show }"></Icon>
|
11
|
+
</div>
|
12
|
+
</Tooltip>
|
13
|
+
<Layer ref="layerRef" v-model="show" :node="btnRef" border fade placement="bottom-start" :z-index="12" animation="translate" @show="emits('layerShow')" @shown="emits('layerShown')" @hidden="emits('layerHidden')">
|
14
|
+
<div class="editify-button-layer" :style="{ width: (type == 'select' ? parseSelectConfig.width : parseDisplayConfig.width) + 'px', maxHeight: (type == 'select' ? parseSelectConfig.maxHeight : parseDisplayConfig.maxHeight) + 'px', overflow: hideScroll ? 'visible' : '' }">
|
15
|
+
<slot v-if="$slots.layer" name="layer" :options="cmpOptions"></slot>
|
16
|
+
<div v-else class="editify-button-options">
|
17
|
+
<div @click="select(item)" class="editify-button-option" :class="{ active: type == 'display' ? item.value == parseDisplayConfig.value : false }" :style="item.style || ''" v-for="item in cmpOptions">
|
18
|
+
<slot v-if="$slots.option" name="option" :item="item"></slot>
|
19
|
+
<div class="editify-button-option-flex" v-else>
|
20
|
+
<Icon v-if="item.icon" :value="item.icon"></Icon>
|
21
|
+
<span>{{ item.label }}</span>
|
22
|
+
</div>
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
</div>
|
26
|
+
</Layer>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
</template>
|
30
|
+
<script setup lang="ts">
|
31
|
+
import Tooltip from '../tooltip/tooltip.vue'
|
32
|
+
import Layer from '../layer/layer.vue'
|
33
|
+
import Icon from '../icon/icon.vue'
|
34
|
+
import { common as DapCommon, color as DapColor } from 'dap-util'
|
35
|
+
import { ButtonDisplayConfigType, ButtonOptionsItemType, ButtonProps, ButtonSelectConfigType } from './props'
|
36
|
+
import { computed, ref } from 'vue'
|
37
|
+
import { ObjectType } from '../../core/tool'
|
38
|
+
|
39
|
+
defineOptions({
|
40
|
+
name: 'Button'
|
41
|
+
})
|
42
|
+
const props = defineProps(ButtonProps)
|
43
|
+
const emits = defineEmits(['operate', 'layerShow', 'layerShown', 'layerHidden'])
|
44
|
+
|
45
|
+
//是否显示浮层
|
46
|
+
const show = ref<boolean>(false)
|
47
|
+
//按钮状态,hover表示悬浮,down表示按下
|
48
|
+
const status = ref<'hover' | 'down' | null>(null)
|
49
|
+
const btnRef = ref<HTMLElement | null>(null)
|
50
|
+
const layerRef = ref<InstanceType<typeof Layer> | null>(null)
|
51
|
+
|
52
|
+
//处理后的select配置
|
53
|
+
const parseSelectConfig = computed<ButtonSelectConfigType>(() => {
|
54
|
+
let options: ButtonOptionsItemType[] = []
|
55
|
+
let width: number | '' = ''
|
56
|
+
let maxHeight: number | '' = ''
|
57
|
+
if (DapCommon.isObject(props.selectConfig)) {
|
58
|
+
if (Array.isArray(props.selectConfig.options)) {
|
59
|
+
options = props.selectConfig.options.map(item => {
|
60
|
+
if (DapCommon.isObject(item)) {
|
61
|
+
return {
|
62
|
+
label: (<ButtonOptionsItemType>item).label,
|
63
|
+
value: (<ButtonOptionsItemType>item).value,
|
64
|
+
icon: (<ButtonOptionsItemType>item).icon,
|
65
|
+
style: (<ButtonOptionsItemType>item).style
|
66
|
+
}
|
67
|
+
}
|
68
|
+
return {
|
69
|
+
label: <string | number>item,
|
70
|
+
value: <string | number>item
|
71
|
+
}
|
72
|
+
})
|
73
|
+
}
|
74
|
+
if (typeof props.selectConfig.width == 'number') {
|
75
|
+
width = props.selectConfig.width
|
76
|
+
}
|
77
|
+
if (typeof props.selectConfig.maxHeight == 'number') {
|
78
|
+
maxHeight = props.selectConfig.maxHeight
|
79
|
+
}
|
80
|
+
}
|
81
|
+
return {
|
82
|
+
options,
|
83
|
+
width,
|
84
|
+
maxHeight
|
85
|
+
}
|
86
|
+
})
|
87
|
+
//处理后的display配置
|
88
|
+
const parseDisplayConfig = computed<ButtonDisplayConfigType>(() => {
|
89
|
+
let options: ButtonOptionsItemType[] = []
|
90
|
+
let width: number | '' = ''
|
91
|
+
let maxHeight: number | '' = ''
|
92
|
+
let value: string | number = ''
|
93
|
+
if (DapCommon.isObject(props.displayConfig)) {
|
94
|
+
if (typeof props.displayConfig.value == 'string' || typeof props.displayConfig.value == 'number') {
|
95
|
+
value = props.displayConfig.value
|
96
|
+
}
|
97
|
+
if (Array.isArray(props.displayConfig.options)) {
|
98
|
+
options = props.displayConfig.options.map(item => {
|
99
|
+
if (DapCommon.isObject(item)) {
|
100
|
+
return {
|
101
|
+
label: (<ButtonOptionsItemType>item).label,
|
102
|
+
value: (<ButtonOptionsItemType>item).value,
|
103
|
+
icon: (<ButtonOptionsItemType>item).icon,
|
104
|
+
style: (<ButtonOptionsItemType>item).style
|
105
|
+
}
|
106
|
+
}
|
107
|
+
return {
|
108
|
+
label: <string | number>item,
|
109
|
+
value: <string | number>item
|
110
|
+
}
|
111
|
+
})
|
112
|
+
let optItem = options.find(item => {
|
113
|
+
return item.value == value
|
114
|
+
})
|
115
|
+
if (!optItem && options[0]) {
|
116
|
+
value = options[0].value!
|
117
|
+
}
|
118
|
+
}
|
119
|
+
if (typeof props.displayConfig.width == 'number') {
|
120
|
+
width = props.displayConfig.width
|
121
|
+
}
|
122
|
+
if (typeof props.displayConfig.maxHeight == 'number') {
|
123
|
+
maxHeight = props.displayConfig.maxHeight
|
124
|
+
}
|
125
|
+
}
|
126
|
+
return {
|
127
|
+
options,
|
128
|
+
width,
|
129
|
+
maxHeight,
|
130
|
+
value
|
131
|
+
}
|
132
|
+
})
|
133
|
+
//渲染的浮层列表数据
|
134
|
+
const cmpOptions = computed<ButtonOptionsItemType[]>(() => {
|
135
|
+
return props.type == 'select' ? <ButtonOptionsItemType[]>parseSelectConfig.value.options : <ButtonOptionsItemType[]>parseDisplayConfig.value.options
|
136
|
+
})
|
137
|
+
//显示在页面的value值对应的label
|
138
|
+
const displayLabel = computed<string | number>(() => {
|
139
|
+
const val = (<ButtonOptionsItemType[]>parseDisplayConfig.value.options).find(item => {
|
140
|
+
return item.value == parseDisplayConfig.value.value
|
141
|
+
})
|
142
|
+
return val ? val.label! : ''
|
143
|
+
})
|
144
|
+
//十六进制颜色转换的rgb颜色数组
|
145
|
+
const parseColor = computed<number[]>(() => {
|
146
|
+
return DapColor.hex2rgb(props.color)
|
147
|
+
})
|
148
|
+
//按钮样式
|
149
|
+
const btnStyle = computed<ObjectType>(() => {
|
150
|
+
if (props.disabled) {
|
151
|
+
return {}
|
152
|
+
}
|
153
|
+
if (props.color) {
|
154
|
+
//激活情况下和鼠标按下状态
|
155
|
+
if (props.active || status.value == 'down') {
|
156
|
+
return {
|
157
|
+
color: props.color,
|
158
|
+
backgroundColor: `rgba(${parseColor.value[0]},${parseColor.value[1]},${parseColor.value[2]},0.15)`
|
159
|
+
}
|
160
|
+
}
|
161
|
+
//鼠标悬浮状态
|
162
|
+
if (status.value == 'hover') {
|
163
|
+
return {
|
164
|
+
color: `rgba(${parseColor.value[0]},${parseColor.value[1]},${parseColor.value[2]},0.9)`,
|
165
|
+
backgroundColor: `rgba(${parseColor.value[0]},${parseColor.value[1]},${parseColor.value[2]},0.05)`
|
166
|
+
}
|
167
|
+
}
|
168
|
+
}
|
169
|
+
return {}
|
170
|
+
})
|
171
|
+
|
172
|
+
//列表选择
|
173
|
+
const select = (item: ButtonOptionsItemType) => {
|
174
|
+
if (props.disabled) {
|
175
|
+
return
|
176
|
+
}
|
177
|
+
emits('operate', props.name, item.value)
|
178
|
+
show.value = false
|
179
|
+
}
|
180
|
+
//按钮点击处理
|
181
|
+
const handleClick = () => {
|
182
|
+
if (props.disabled) {
|
183
|
+
return
|
184
|
+
}
|
185
|
+
if (props.type == 'default') {
|
186
|
+
emits('operate', props.name)
|
187
|
+
} else {
|
188
|
+
show.value = !show.value
|
189
|
+
}
|
190
|
+
}
|
191
|
+
|
192
|
+
defineExpose({
|
193
|
+
show,
|
194
|
+
status
|
195
|
+
})
|
196
|
+
</script>
|
197
|
+
<style scoped src="./button.less"></style>
|
@@ -1,95 +1,95 @@
|
|
1
|
-
import { ExtractPublicPropTypes, PropType } from 'vue'
|
2
|
-
import { ObjectType } from '../../core/tool'
|
3
|
-
|
4
|
-
export type ButtonTypeType = 'default' | 'select' | 'display'
|
5
|
-
|
6
|
-
export type ButtonOptionsItemType = {
|
7
|
-
label?: string | number
|
8
|
-
value?: string | number
|
9
|
-
icon?: string
|
10
|
-
style?: ObjectType
|
11
|
-
}
|
12
|
-
|
13
|
-
export type ButtonSelectConfigType = {
|
14
|
-
options?: (ButtonOptionsItemType | number | string)[]
|
15
|
-
width?: number | ''
|
16
|
-
maxHeight?: number | ''
|
17
|
-
}
|
18
|
-
|
19
|
-
export type ButtonDisplayConfigType = {
|
20
|
-
options?: (ButtonOptionsItemType | number | string)[]
|
21
|
-
width?: number | ''
|
22
|
-
maxHeight?: number | ''
|
23
|
-
value?: string | number
|
24
|
-
}
|
25
|
-
|
26
|
-
export const ButtonProps = {
|
27
|
-
//按钮类型
|
28
|
-
type: {
|
29
|
-
type: String as PropType<ButtonTypeType>,
|
30
|
-
default: 'default',
|
31
|
-
validator(value: any) {
|
32
|
-
//default表示默认的点击按钮
|
33
|
-
//select表示下拉列表的按钮
|
34
|
-
//display表示显示值的下拉列表按钮
|
35
|
-
return ['default', 'select', 'display'].includes(value)
|
36
|
-
}
|
37
|
-
},
|
38
|
-
//按钮名称,唯一值
|
39
|
-
name: {
|
40
|
-
type: String,
|
41
|
-
default: ''
|
42
|
-
},
|
43
|
-
//按钮提示内容
|
44
|
-
title: {
|
45
|
-
type: String,
|
46
|
-
default: ''
|
47
|
-
},
|
48
|
-
//是否显示工具提示
|
49
|
-
tooltip: {
|
50
|
-
type: Boolean,
|
51
|
-
default: false
|
52
|
-
},
|
53
|
-
//是否显示右侧边框
|
54
|
-
rightBorder: {
|
55
|
-
type: Boolean,
|
56
|
-
default: false
|
57
|
-
},
|
58
|
-
//是否显示左侧边框
|
59
|
-
leftBorder: {
|
60
|
-
type: Boolean,
|
61
|
-
default: false
|
62
|
-
},
|
63
|
-
//主题色,用于按钮悬浮颜色变化使用,仅支持十六进制
|
64
|
-
color: {
|
65
|
-
type: String,
|
66
|
-
default: ''
|
67
|
-
},
|
68
|
-
//是否禁用
|
69
|
-
disabled: {
|
70
|
-
type: Boolean,
|
71
|
-
default: false
|
72
|
-
},
|
73
|
-
//是否激活
|
74
|
-
active: {
|
75
|
-
type: Boolean,
|
76
|
-
default: false
|
77
|
-
},
|
78
|
-
//type=select时的配置
|
79
|
-
selectConfig: {
|
80
|
-
type: Object as PropType<ButtonSelectConfigType>,
|
81
|
-
default: null
|
82
|
-
},
|
83
|
-
//type=display时的配置
|
84
|
-
displayConfig: {
|
85
|
-
type: Object as PropType<ButtonDisplayConfigType>,
|
86
|
-
default: null
|
87
|
-
},
|
88
|
-
//浮层隐藏滚动条
|
89
|
-
hideScroll: {
|
90
|
-
type: Boolean,
|
91
|
-
default: false
|
92
|
-
}
|
93
|
-
}
|
94
|
-
|
95
|
-
export type ButtonPropsType = ExtractPublicPropTypes<typeof ButtonProps>
|
1
|
+
import { ExtractPublicPropTypes, PropType } from 'vue'
|
2
|
+
import { ObjectType } from '../../core/tool'
|
3
|
+
|
4
|
+
export type ButtonTypeType = 'default' | 'select' | 'display'
|
5
|
+
|
6
|
+
export type ButtonOptionsItemType = {
|
7
|
+
label?: string | number
|
8
|
+
value?: string | number
|
9
|
+
icon?: string
|
10
|
+
style?: ObjectType
|
11
|
+
}
|
12
|
+
|
13
|
+
export type ButtonSelectConfigType = {
|
14
|
+
options?: (ButtonOptionsItemType | number | string)[]
|
15
|
+
width?: number | ''
|
16
|
+
maxHeight?: number | ''
|
17
|
+
}
|
18
|
+
|
19
|
+
export type ButtonDisplayConfigType = {
|
20
|
+
options?: (ButtonOptionsItemType | number | string)[]
|
21
|
+
width?: number | ''
|
22
|
+
maxHeight?: number | ''
|
23
|
+
value?: string | number
|
24
|
+
}
|
25
|
+
|
26
|
+
export const ButtonProps = {
|
27
|
+
//按钮类型
|
28
|
+
type: {
|
29
|
+
type: String as PropType<ButtonTypeType>,
|
30
|
+
default: 'default',
|
31
|
+
validator(value: any) {
|
32
|
+
//default表示默认的点击按钮
|
33
|
+
//select表示下拉列表的按钮
|
34
|
+
//display表示显示值的下拉列表按钮
|
35
|
+
return ['default', 'select', 'display'].includes(value)
|
36
|
+
}
|
37
|
+
},
|
38
|
+
//按钮名称,唯一值
|
39
|
+
name: {
|
40
|
+
type: String,
|
41
|
+
default: ''
|
42
|
+
},
|
43
|
+
//按钮提示内容
|
44
|
+
title: {
|
45
|
+
type: String,
|
46
|
+
default: ''
|
47
|
+
},
|
48
|
+
//是否显示工具提示
|
49
|
+
tooltip: {
|
50
|
+
type: Boolean,
|
51
|
+
default: false
|
52
|
+
},
|
53
|
+
//是否显示右侧边框
|
54
|
+
rightBorder: {
|
55
|
+
type: Boolean,
|
56
|
+
default: false
|
57
|
+
},
|
58
|
+
//是否显示左侧边框
|
59
|
+
leftBorder: {
|
60
|
+
type: Boolean,
|
61
|
+
default: false
|
62
|
+
},
|
63
|
+
//主题色,用于按钮悬浮颜色变化使用,仅支持十六进制
|
64
|
+
color: {
|
65
|
+
type: String,
|
66
|
+
default: ''
|
67
|
+
},
|
68
|
+
//是否禁用
|
69
|
+
disabled: {
|
70
|
+
type: Boolean,
|
71
|
+
default: false
|
72
|
+
},
|
73
|
+
//是否激活
|
74
|
+
active: {
|
75
|
+
type: Boolean,
|
76
|
+
default: false
|
77
|
+
},
|
78
|
+
//type=select时的配置
|
79
|
+
selectConfig: {
|
80
|
+
type: Object as PropType<ButtonSelectConfigType>,
|
81
|
+
default: null
|
82
|
+
},
|
83
|
+
//type=display时的配置
|
84
|
+
displayConfig: {
|
85
|
+
type: Object as PropType<ButtonDisplayConfigType>,
|
86
|
+
default: null
|
87
|
+
},
|
88
|
+
//浮层隐藏滚动条
|
89
|
+
hideScroll: {
|
90
|
+
type: Boolean,
|
91
|
+
default: false
|
92
|
+
}
|
93
|
+
}
|
94
|
+
|
95
|
+
export type ButtonPropsType = ExtractPublicPropTypes<typeof ButtonProps>
|