xrk-components 0.3.0 → 0.3.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/lib/index.css +7 -2
- package/lib/index.esm.js +107 -46
- package/lib/index.umd.js +107 -46
- package/lib/packages/base/button/index.d.ts +1 -1
- package/lib/packages/base/dialog/dialog.d.ts +11 -0
- package/lib/packages/base/dialog/index.d.ts +4 -3
- package/lib/packages/base/select/index.d.ts +4 -1
- package/lib/packages/xrk/table/table.d.ts +0 -13
- package/lib/packages/xrk/table/types/type.d.ts +2 -2
- package/package.json +1 -1
- package/packages/base/button/button.vue +0 -83
- package/packages/base/button/index.ts +0 -26
- package/packages/base/checkbox/checkbox-button.vue +0 -54
- package/packages/base/checkbox/checkbox-group.vue +0 -85
- package/packages/base/checkbox/checkbox.vue +0 -85
- package/packages/base/checkbox/index.ts +0 -62
- package/packages/base/date-picker/date-picker.vue +0 -144
- package/packages/base/date-picker/index.ts +0 -52
- package/packages/base/dialog/dialog.vue +0 -214
- package/packages/base/dialog/index.ts +0 -57
- package/packages/base/form/form-item.vue +0 -57
- package/packages/base/form/form.vue +0 -70
- package/packages/base/form/index.ts +0 -39
- package/packages/base/input/index.ts +0 -50
- package/packages/base/input/input.vue +0 -175
- package/packages/base/pagination/index.ts +0 -30
- package/packages/base/pagination/pagination.vue +0 -160
- package/packages/base/radio/index.ts +0 -49
- package/packages/base/radio/radio-button.vue +0 -46
- package/packages/base/radio/radio-group.vue +0 -77
- package/packages/base/radio/radio.vue +0 -74
- package/packages/base/select/index.ts +0 -62
- package/packages/base/select/select.vue +0 -258
- package/packages/base/switch/index.ts +0 -26
- package/packages/base/switch/switch.vue +0 -103
- package/packages/base/table/hooks/use-table.ts +0 -15
- package/packages/base/table/index.ts +0 -16
- package/packages/base/table/store/index.ts +0 -35
- package/packages/base/table/table-column.vue +0 -351
- package/packages/base/table/table.vue +0 -168
- package/packages/base/table/types/type.ts +0 -123
- package/packages/base/tag/index.ts +0 -52
- package/packages/base/tag/tag-group.vue +0 -182
- package/packages/base/tag/tag.vue +0 -54
- package/packages/base/tool-tip/index.ts +0 -30
- package/packages/base/tool-tip/tool-tip.vue +0 -108
- package/packages/components.ts +0 -33
- package/packages/functions.ts +0 -16
- package/packages/index.ts +0 -30
- package/packages/types.ts +0 -54
- package/packages/xrk/search/hooks/use-search.ts +0 -96
- package/packages/xrk/search/index.ts +0 -22
- package/packages/xrk/search/search.vue +0 -197
- package/packages/xrk/search/types/type.ts +0 -95
- package/packages/xrk/table/hooks/use-table.tsx +0 -34
- package/packages/xrk/table/index.ts +0 -10
- package/packages/xrk/table/table.vue +0 -218
- package/packages/xrk/table/types/type.ts +0 -31
- package/rollup.config.js +0 -59
- package/styles/element/index.scss +0 -5
- package/styles/element/mixin.scss +0 -40
- package/tools/check.ts +0 -9
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
* @Description:
|
|
3
|
-
* @Date: 2022-07-05 10:11:16
|
|
4
|
-
-->
|
|
5
|
-
<template>
|
|
6
|
-
<el-dialog
|
|
7
|
-
:custom-class="customClass"
|
|
8
|
-
:modelValue="show"
|
|
9
|
-
:closeOnClickModal="closeOnClickModal"
|
|
10
|
-
:closeOnPressEscape="closeOnPressEscape"
|
|
11
|
-
:appendToBody="appendToBody"
|
|
12
|
-
:destroyOnClose="destroyOnClose"
|
|
13
|
-
:center="center"
|
|
14
|
-
:width="width"
|
|
15
|
-
:showClose="showClose"
|
|
16
|
-
:before-close="hanldeBeforeClose"
|
|
17
|
-
@closed="handleClosed"
|
|
18
|
-
>
|
|
19
|
-
<template v-slot:header>
|
|
20
|
-
<base-dialog-render
|
|
21
|
-
v-if="titleRender"
|
|
22
|
-
:render="titleRender"
|
|
23
|
-
></base-dialog-render>
|
|
24
|
-
<span v-else-if="title">{{ title }}</span>
|
|
25
|
-
<template v-else>
|
|
26
|
-
<slot name="header"></slot>
|
|
27
|
-
</template>
|
|
28
|
-
</template>
|
|
29
|
-
|
|
30
|
-
<base-dialog-render
|
|
31
|
-
v-if="contentRender"
|
|
32
|
-
:render="contentRender"
|
|
33
|
-
></base-dialog-render>
|
|
34
|
-
<template v-else>
|
|
35
|
-
<slot></slot>
|
|
36
|
-
</template>
|
|
37
|
-
|
|
38
|
-
<template v-slot:footer>
|
|
39
|
-
<base-dialog-render
|
|
40
|
-
v-if="footerRender"
|
|
41
|
-
:render="footerRender"
|
|
42
|
-
></base-dialog-render>
|
|
43
|
-
<div v-else>
|
|
44
|
-
<base-button
|
|
45
|
-
v-if="cancelBtnConfig.show"
|
|
46
|
-
v-bind="cancelBtnConfig"
|
|
47
|
-
:click="handleCancelClick"
|
|
48
|
-
>
|
|
49
|
-
{{ cancelBtnConfig.content }}
|
|
50
|
-
</base-button>
|
|
51
|
-
<base-button
|
|
52
|
-
v-if="confirmBtnConfig.show"
|
|
53
|
-
v-bind="confirmBtnConfig"
|
|
54
|
-
:click="handleConfirmClick"
|
|
55
|
-
>
|
|
56
|
-
{{ confirmBtnConfig.content }}
|
|
57
|
-
</base-button>
|
|
58
|
-
</div>
|
|
59
|
-
</template>
|
|
60
|
-
</el-dialog>
|
|
61
|
-
</template>
|
|
62
|
-
|
|
63
|
-
<script lang="tsx">
|
|
64
|
-
export default {
|
|
65
|
-
name: 'base-dialog'
|
|
66
|
-
};
|
|
67
|
-
</script>
|
|
68
|
-
<script lang="tsx" setup>
|
|
69
|
-
import { ElDialog } from 'element-plus';
|
|
70
|
-
import { BaseButton } from '../button';
|
|
71
|
-
import { Component, computed, defineComponent, ref, watch } from 'vue';
|
|
72
|
-
import { check } from 'xrk-tools';
|
|
73
|
-
import { BaseDialogProps } from './index';
|
|
74
|
-
import { isFunction } from '../../../tools/check';
|
|
75
|
-
const _props = withDefaults(
|
|
76
|
-
defineProps<{
|
|
77
|
-
modelValue?: boolean;
|
|
78
|
-
closeOnClickModal?: boolean;
|
|
79
|
-
closeOnPressEscape?: boolean;
|
|
80
|
-
appendToBody?: boolean;
|
|
81
|
-
destroyOnClose?: boolean;
|
|
82
|
-
center?: boolean;
|
|
83
|
-
showClose?: boolean;
|
|
84
|
-
beforeClose?: (done: Function) => Promise<void> | void;
|
|
85
|
-
beforeCancel?: (done: Function) => Promise<void> | void;
|
|
86
|
-
beforeConfirm?: (done: Function) => Promise<void> | void;
|
|
87
|
-
|
|
88
|
-
customClass?: string;
|
|
89
|
-
width?: string | number;
|
|
90
|
-
title?: string;
|
|
91
|
-
content?: string;
|
|
92
|
-
titleRender?: () => Component;
|
|
93
|
-
contentRender?: () => Component;
|
|
94
|
-
footerRender?: () => Component;
|
|
95
|
-
|
|
96
|
-
confirmBtnConfig?: any;
|
|
97
|
-
cancelBtnConfig?: any;
|
|
98
|
-
}>(),
|
|
99
|
-
{
|
|
100
|
-
title: '提示',
|
|
101
|
-
width: '50%',
|
|
102
|
-
customClass: '_base-dialog',
|
|
103
|
-
modelValue: true,
|
|
104
|
-
closeOnClickModal: false,
|
|
105
|
-
closeOnPressEscape: false,
|
|
106
|
-
destroyOnClose: true,
|
|
107
|
-
appendToBody: true,
|
|
108
|
-
showClose: false,
|
|
109
|
-
center: true,
|
|
110
|
-
cancelBtnConfig: () => ({ show: true, content: '取消', plain: true }),
|
|
111
|
-
confirmBtnConfig: () => ({ show: true, content: '确定' })
|
|
112
|
-
}
|
|
113
|
-
);
|
|
114
|
-
|
|
115
|
-
const props = _props as Readonly<BaseDialogProps>;
|
|
116
|
-
|
|
117
|
-
const emits = defineEmits<{
|
|
118
|
-
(event: 'update:modelValue', activeValue: any): void;
|
|
119
|
-
(event: 'close'): void;
|
|
120
|
-
}>();
|
|
121
|
-
|
|
122
|
-
const show = ref<boolean>(props.modelValue || false);
|
|
123
|
-
watch(
|
|
124
|
-
() => props.modelValue,
|
|
125
|
-
newV => {
|
|
126
|
-
show.value = newV || false;
|
|
127
|
-
}
|
|
128
|
-
);
|
|
129
|
-
|
|
130
|
-
const BaseDialogRender = defineComponent({
|
|
131
|
-
name: 'dialog-render',
|
|
132
|
-
props: {
|
|
133
|
-
render: Function
|
|
134
|
-
},
|
|
135
|
-
render: (ctx: { render: Function }) => {
|
|
136
|
-
return ctx.render ? ctx.render() : '';
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
const hanldeBeforeClose = async (done: Function) => {
|
|
141
|
-
if (isFunction(props.beforeClose)) {
|
|
142
|
-
await props.beforeClose(done);
|
|
143
|
-
} else {
|
|
144
|
-
done();
|
|
145
|
-
}
|
|
146
|
-
emits('close');
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
const handleClosed = () => {
|
|
150
|
-
emits('update:modelValue', !props.modelValue);
|
|
151
|
-
};
|
|
152
|
-
|
|
153
|
-
const handleCancelClick = async () => {
|
|
154
|
-
if (isFunction(props.beforeCancel)) {
|
|
155
|
-
await props.beforeCancel(() => {
|
|
156
|
-
show.value = false;
|
|
157
|
-
});
|
|
158
|
-
} else {
|
|
159
|
-
show.value = false;
|
|
160
|
-
}
|
|
161
|
-
emits('close');
|
|
162
|
-
};
|
|
163
|
-
|
|
164
|
-
const handleConfirmClick = async () => {
|
|
165
|
-
if (isFunction(props.beforeConfirm)) {
|
|
166
|
-
await props.beforeConfirm(() => {
|
|
167
|
-
show.value = false;
|
|
168
|
-
});
|
|
169
|
-
} else {
|
|
170
|
-
show.value = false;
|
|
171
|
-
}
|
|
172
|
-
emits('close');
|
|
173
|
-
};
|
|
174
|
-
</script>
|
|
175
|
-
|
|
176
|
-
<style lang="scss">
|
|
177
|
-
.el-popup-parent--hidden {
|
|
178
|
-
overflow: hidden;
|
|
179
|
-
}
|
|
180
|
-
._base-dialog {
|
|
181
|
-
--xrk-dialog-border-radius: 4px !important;
|
|
182
|
-
max-height: 80vh;
|
|
183
|
-
overflow: hidden;
|
|
184
|
-
margin-top: 0 !important;
|
|
185
|
-
margin-bottom: 0 !important;
|
|
186
|
-
top: 50%;
|
|
187
|
-
transform: translateY(-50%);
|
|
188
|
-
display: flex;
|
|
189
|
-
flex-direction: column;
|
|
190
|
-
.xrk-dialog__header {
|
|
191
|
-
font-size: 18px;
|
|
192
|
-
font-weight: 500;
|
|
193
|
-
color: #303133;
|
|
194
|
-
line-height: 1.4;
|
|
195
|
-
margin-right: 0;
|
|
196
|
-
}
|
|
197
|
-
.xrk-dialog__body {
|
|
198
|
-
height: 100%;
|
|
199
|
-
overflow-y: auto;
|
|
200
|
-
padding: 25px var(--xrk-dialog-padding-primary) !important;
|
|
201
|
-
&::-webkit-scrollbar {
|
|
202
|
-
width: 6px;
|
|
203
|
-
}
|
|
204
|
-
&::-webkit-scrollbar-thumb {
|
|
205
|
-
background-color: #0003;
|
|
206
|
-
border-radius: 10px;
|
|
207
|
-
transition: all 0.2s ease-in-out;
|
|
208
|
-
}
|
|
209
|
-
&::-webkit-scrollbar-track {
|
|
210
|
-
border-radius: 10px;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
</style>
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* @Description:
|
|
3
|
-
* @Date: 2022-07-05 10:17:03
|
|
4
|
-
*/
|
|
5
|
-
import { Component, DefineComponent, h, render } from 'vue';
|
|
6
|
-
import { BaseButtonProps } from '../button';
|
|
7
|
-
import _BaseDialog from './dialog.vue';
|
|
8
|
-
|
|
9
|
-
export type BaseDialogProps = {
|
|
10
|
-
modelValue?: boolean;
|
|
11
|
-
closeOnClickModal?: boolean;
|
|
12
|
-
closeOnPressEscape?: boolean;
|
|
13
|
-
appendToBody?: boolean;
|
|
14
|
-
destroyOnClose?: boolean;
|
|
15
|
-
center?: boolean;
|
|
16
|
-
showClose?: boolean;
|
|
17
|
-
beforeClose?: (done: Function) => Promise<void> | void;
|
|
18
|
-
beforeCancel?: (done: Function) => Promise<void> | void;
|
|
19
|
-
beforeConfirm?: (done: Function) => Promise<void> | void;
|
|
20
|
-
|
|
21
|
-
customClass?: string;
|
|
22
|
-
width?: string | number;
|
|
23
|
-
title?: string;
|
|
24
|
-
content?: string;
|
|
25
|
-
titleRender?: () => Component;
|
|
26
|
-
contentRender?: () => Component;
|
|
27
|
-
footerRender?: () => Component;
|
|
28
|
-
|
|
29
|
-
confirmBtnConfig?: DialogBtnConfigProps;
|
|
30
|
-
cancelBtnConfig?: DialogBtnConfigProps;
|
|
31
|
-
|
|
32
|
-
onClose?: () => Promise<void> | void;
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
export interface DialogBtnConfigProps extends BaseButtonProps {
|
|
36
|
-
show?: boolean;
|
|
37
|
-
content?: string;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export const BaseDialog = _BaseDialog as DefineComponent<BaseDialogProps>;
|
|
41
|
-
|
|
42
|
-
export const createDialog = (config?: BaseDialogProps) => {
|
|
43
|
-
const container = document.createElement('div');
|
|
44
|
-
render(
|
|
45
|
-
h(_BaseDialog, {
|
|
46
|
-
modelValue: true,
|
|
47
|
-
...(config || {}),
|
|
48
|
-
appendToBody: false,
|
|
49
|
-
onClose: async () => {
|
|
50
|
-
await config?.onClose?.();
|
|
51
|
-
document.querySelector('body')?.removeChild(container);
|
|
52
|
-
}
|
|
53
|
-
}),
|
|
54
|
-
container
|
|
55
|
-
);
|
|
56
|
-
document.querySelector('body')?.appendChild(container);
|
|
57
|
-
};
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
* @Description:
|
|
3
|
-
* @Date: 2022-06-29 14:51:11
|
|
4
|
-
-->
|
|
5
|
-
<template>
|
|
6
|
-
<el-form-item
|
|
7
|
-
ref="BaseFormItem"
|
|
8
|
-
:prop="prop"
|
|
9
|
-
:label="label"
|
|
10
|
-
:labelWidth="labelWidth"
|
|
11
|
-
:required="required"
|
|
12
|
-
:rules="rules"
|
|
13
|
-
:error="error"
|
|
14
|
-
:showMessage="showMessage"
|
|
15
|
-
:inlineMessage="inlineMessage"
|
|
16
|
-
:size="size"
|
|
17
|
-
>
|
|
18
|
-
<slot></slot>
|
|
19
|
-
</el-form-item>
|
|
20
|
-
</template>
|
|
21
|
-
|
|
22
|
-
<script lang="tsx">
|
|
23
|
-
export default {
|
|
24
|
-
name: 'base-form-item'
|
|
25
|
-
};
|
|
26
|
-
</script>
|
|
27
|
-
<script lang="tsx" setup>
|
|
28
|
-
import { ElFormItem, FormItemRule } from 'element-plus';
|
|
29
|
-
import { withDefaults, ref } from 'vue';
|
|
30
|
-
|
|
31
|
-
withDefaults(
|
|
32
|
-
defineProps<{
|
|
33
|
-
prop: any; // model 的键名。 它可以是一个路径数组(例如 ['a', 'b', 0])。
|
|
34
|
-
label?: string; // 标签文本
|
|
35
|
-
labelWidth?: string | number | 'auto'; // 标签的长度,例如 '50px'。 作为 Form 直接子元素的 form-item 会继承该值。 可以使用 auto
|
|
36
|
-
required?: boolean; // 是否为必填项,如不设置,则会根据校验规则确认
|
|
37
|
-
rules?: any; // 表单验证规则
|
|
38
|
-
error?: string; // 表单域验证错误时的提示信息。设置该值会导致表单验证状态变为 error,并显示该错误信息。
|
|
39
|
-
showMessage?: boolean; // 是否显示校验错误信息
|
|
40
|
-
inlineMessage?: boolean; // 是否以行内形式展示校验信息
|
|
41
|
-
size?: 'large' | 'default' | 'small'; // 用于控制该表单内组件的尺寸
|
|
42
|
-
}>(),
|
|
43
|
-
{
|
|
44
|
-
labelWidth: 'auto',
|
|
45
|
-
showMessage: true
|
|
46
|
-
}
|
|
47
|
-
);
|
|
48
|
-
|
|
49
|
-
const BaseFormItem = ref<any>(null);
|
|
50
|
-
|
|
51
|
-
defineExpose({
|
|
52
|
-
resetField: BaseFormItem.value?.resetField,
|
|
53
|
-
clearValidate: BaseFormItem.value?.clearValidate
|
|
54
|
-
});
|
|
55
|
-
</script>
|
|
56
|
-
|
|
57
|
-
<style lang="scss" scoped></style>
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
* @Description:
|
|
3
|
-
* @Date: 2022-06-29 14:51:11
|
|
4
|
-
-->
|
|
5
|
-
<template>
|
|
6
|
-
<el-form
|
|
7
|
-
ref="BaseForm"
|
|
8
|
-
:model="model"
|
|
9
|
-
:rules="rules"
|
|
10
|
-
:inline="inline"
|
|
11
|
-
:labelPosition="labelPosition"
|
|
12
|
-
:labelWidth="labelWidth"
|
|
13
|
-
:labelSuffix="labelSuffix"
|
|
14
|
-
:hideRequiredAsterisk="hideRequiredAsterisk"
|
|
15
|
-
:showMessage="showMessage"
|
|
16
|
-
:inlineMessage="inlineMessage"
|
|
17
|
-
:statusIcon="statusIcon"
|
|
18
|
-
:validateOnRuleChange="validateOnRuleChange"
|
|
19
|
-
:size="size"
|
|
20
|
-
:disabled="disabled"
|
|
21
|
-
>
|
|
22
|
-
<slot></slot>
|
|
23
|
-
</el-form>
|
|
24
|
-
</template>
|
|
25
|
-
|
|
26
|
-
<script lang="tsx">
|
|
27
|
-
export default {
|
|
28
|
-
name: 'base-form'
|
|
29
|
-
};
|
|
30
|
-
</script>
|
|
31
|
-
<script lang="tsx" setup>
|
|
32
|
-
import { ElForm, FormRules } from 'element-plus';
|
|
33
|
-
import { withDefaults, ref } from 'vue';
|
|
34
|
-
|
|
35
|
-
withDefaults(
|
|
36
|
-
defineProps<{
|
|
37
|
-
model: any; // 表单数据对象
|
|
38
|
-
rules?: any; // 表单验证规则
|
|
39
|
-
inline?: boolean; // 行内表单模式
|
|
40
|
-
labelPosition?: 'left' | 'right' | 'top'; // 表单域标签的位置, 当设置为 left 或 right 时,则也需要设置 label-width 属性
|
|
41
|
-
labelWidth?: string | number | 'auto'; // 标签的长度,例如 '50px'。 作为 Form 直接子元素的 form-item 会继承该值。 可以使用 auto
|
|
42
|
-
labelSuffix?: string; // 表单域标签的后缀
|
|
43
|
-
hideRequiredAsterisk?: boolean; // 是否显示必填字段的标签旁边的红色星号
|
|
44
|
-
showMessage?: boolean; // 是否显示校验错误信息
|
|
45
|
-
inlineMessage?: boolean; // 是否以行内形式展示校验信息
|
|
46
|
-
statusIcon?: boolean; // 是否在输入框中显示校验结果反馈图标
|
|
47
|
-
validateOnRuleChange?: boolean; // 是否在 rules 属性改变后立即触发一次验证
|
|
48
|
-
size?: 'large' | 'default' | 'small'; // 用于控制该表单内组件的尺寸
|
|
49
|
-
disabled?: boolean; // 是否禁用该表单内的所有组件。 如果设置为 true, 它将覆盖内部组件的 disabled 属性
|
|
50
|
-
}>(),
|
|
51
|
-
{
|
|
52
|
-
labelPosition: 'left',
|
|
53
|
-
labelWidth: 'auto',
|
|
54
|
-
showMessage: true,
|
|
55
|
-
validateOnRuleChange: true
|
|
56
|
-
}
|
|
57
|
-
);
|
|
58
|
-
|
|
59
|
-
const BaseForm = ref<any>(null);
|
|
60
|
-
|
|
61
|
-
defineExpose({
|
|
62
|
-
validate: BaseForm.value?.validate,
|
|
63
|
-
validateField: BaseForm.value?.validateField,
|
|
64
|
-
resetFields: BaseForm.value?.resetFields,
|
|
65
|
-
scrollToField: BaseForm.value?.scrollToField,
|
|
66
|
-
clearValidate: BaseForm.value?.clearValidate
|
|
67
|
-
});
|
|
68
|
-
</script>
|
|
69
|
-
|
|
70
|
-
<style lang="scss" scoped></style>
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* @Description:
|
|
3
|
-
* @Date: 2022-07-01 11:09:32
|
|
4
|
-
*/
|
|
5
|
-
import { FormItemRule, FormRules } from 'element-plus';
|
|
6
|
-
|
|
7
|
-
import _BaseForm from './form.vue';
|
|
8
|
-
import _BaseFormItem from './form-item.vue';
|
|
9
|
-
import { DefineComponent } from 'vue';
|
|
10
|
-
|
|
11
|
-
export type BaseFormProps = {
|
|
12
|
-
model: Record<string, any>; // 表单数据对象
|
|
13
|
-
rules?: FormRules; // 表单验证规则
|
|
14
|
-
inline?: boolean; // 行内表单模式
|
|
15
|
-
labelPosition?: 'left' | 'right' | 'top'; // 表单域标签的位置, 当设置为 left 或 right 时,则也需要设置 label-width 属性
|
|
16
|
-
labelWidth?: string | number | 'auto'; // 标签的长度,例如 '50px'。 作为 Form 直接子元素的 form-item 会继承该值。 可以使用 auto
|
|
17
|
-
labelSuffix?: string; // 表单域标签的后缀
|
|
18
|
-
hideRequiredAsterisk?: boolean; // 是否显示必填字段的标签旁边的红色星号
|
|
19
|
-
showMessage?: boolean; // 是否显示校验错误信息
|
|
20
|
-
inlineMessage?: boolean; // 是否以行内形式展示校验信息
|
|
21
|
-
statusIcon?: boolean; // 是否在输入框中显示校验结果反馈图标
|
|
22
|
-
validateOnRuleChange?: boolean; // 是否在 rules 属性改变后立即触发一次验证
|
|
23
|
-
size?: 'large' | 'default' | 'small'; // 用于控制该表单内组件的尺寸
|
|
24
|
-
disabled?: boolean; // 是否禁用该表单内的所有组件。 如果设置为 true, 它将覆盖内部组件的 disabled 属性
|
|
25
|
-
};
|
|
26
|
-
export type BaseFormItemProps = {
|
|
27
|
-
prop: string | Array<string>; // model 的键名。 它可以是一个路径数组(例如 ['a', 'b', 0])。
|
|
28
|
-
label?: string; // 标签文本
|
|
29
|
-
labelWidth?: string | number | 'auto'; // 标签的长度,例如 '50px'。 作为 Form 直接子元素的 form-item 会继承该值。 可以使用 auto
|
|
30
|
-
required?: boolean; // 是否为必填项,如不设置,则会根据校验规则确认
|
|
31
|
-
rules?: FormItemRule | Array<FormItemRule>; // 表单验证规则
|
|
32
|
-
error?: string; // 表单域验证错误时的提示信息。设置该值会导致表单验证状态变为 error,并显示该错误信息。
|
|
33
|
-
showMessage?: boolean; // 是否显示校验错误信息
|
|
34
|
-
inlineMessage?: boolean; // 是否以行内形式展示校验信息
|
|
35
|
-
size?: 'large' | 'default' | 'small'; // 用于控制该表单内组件的尺寸
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
export const BaseFormItem = _BaseFormItem as DefineComponent<BaseFormItemProps>;
|
|
39
|
-
export const BaseForm = _BaseForm as DefineComponent<BaseFormProps>;
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* @Description:
|
|
3
|
-
* @Date: 2022-06-30 22:57:42
|
|
4
|
-
*/
|
|
5
|
-
import { Component, CSSProperties, DefineComponent } from 'vue';
|
|
6
|
-
import _BaseInput from './input.vue';
|
|
7
|
-
|
|
8
|
-
export interface BaseInputProps {
|
|
9
|
-
modelValue?: string | number; // 选中项绑定值
|
|
10
|
-
type?: 'text' | 'textarea' | 'password' | 'number'; // 类型
|
|
11
|
-
maxlength?: string | number; // 最大输入长度
|
|
12
|
-
minlength?: string | number; // 原生属性,最小输入长度
|
|
13
|
-
showWordLimit?: boolean; // 是否显示输入字数统计,只在 type = "text" 或 type = "textarea" 时有效
|
|
14
|
-
placeholder?: string; // 输入框占位文本
|
|
15
|
-
clearable?: boolean; // 是否可清空
|
|
16
|
-
formatter?: (value: string | number) => string; // 指定输入值的格式。(只有当 type 是"text"时才能工作)
|
|
17
|
-
parser?: (value: string) => string; // 指定从格式化器输入中提取的值。(仅当 type 是"text"时才起作用)
|
|
18
|
-
showPassword?: boolean; // 是否显示切换密码图标
|
|
19
|
-
disabled?: boolean; // 是否禁用
|
|
20
|
-
size?: 'large' | 'default' | 'small'; // 输入框尺寸,只在 type 不为 'textarea' 时有效
|
|
21
|
-
prefixIcon?: string | Component; // 自定义前缀图标
|
|
22
|
-
suffixIcon?: string | Component; // 自定义后缀图标
|
|
23
|
-
rows?: number; // 输入框行数,仅 type 为 'textarea' 时有效
|
|
24
|
-
autosize?: boolean | { minRows?: number; maxRows?: number }; // textarea 高度是否自适应,仅 type 为 'textarea' 时生效。 可以接受一个对象,比如: { minRows: 2, maxRows: 6 }
|
|
25
|
-
autocomplete?: string; // 原生 autocomplete 属性
|
|
26
|
-
name?: string; // 等价于原生 input name 属性
|
|
27
|
-
readonly?: boolean; // 原生 readonly 属性,是否只读
|
|
28
|
-
max?: number; // 原生 max 属性,设置最大值
|
|
29
|
-
min?: number; // 原生属性,设置最小值
|
|
30
|
-
step?: number; // 原生属性,设置输入字段的合法数字间隔
|
|
31
|
-
resize?: 'none' | 'both' | 'horizontal' | 'vertical'; // 控制是否能被用户缩放
|
|
32
|
-
autofocus?: boolean; // 原生属性,自动获取焦点
|
|
33
|
-
form?: string; // 原生属性
|
|
34
|
-
label?: string; // 标签文本
|
|
35
|
-
tabindex?: string | number; // 输入框的 tabindex
|
|
36
|
-
validateEvent?: boolean; // 输入时是否触发表单的校验
|
|
37
|
-
inputStyle?: CSSProperties; // input 元素或 textarea 元素的 style
|
|
38
|
-
|
|
39
|
-
inputRewrite?: (value: string | number) => string | Promise<string>; // 输入时处理输入值
|
|
40
|
-
changeRewrite?: (value: string | number) => string | Promise<string>; // 发生改变时处理输入值
|
|
41
|
-
|
|
42
|
-
onBlur?: (events: Event) => void;
|
|
43
|
-
onFocus?: (events: Event) => void;
|
|
44
|
-
onKeyup?: (events: Event) => void;
|
|
45
|
-
onChange?: (value?: string | number | KeyboardEvent) => void;
|
|
46
|
-
onInput?: (value?: string | number | KeyboardEvent) => void;
|
|
47
|
-
onClear?: () => void;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export const BaseInput = _BaseInput as DefineComponent<BaseInputProps>;
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
* @Description:
|
|
3
|
-
* @Date: 2022-06-21 11:16:15
|
|
4
|
-
-->
|
|
5
|
-
<template>
|
|
6
|
-
<el-input
|
|
7
|
-
class="base-input"
|
|
8
|
-
:type="type"
|
|
9
|
-
:model-value="modelValue"
|
|
10
|
-
:minlength="minlength"
|
|
11
|
-
:maxlength="maxlength"
|
|
12
|
-
:show-word-limit="showWordLimit"
|
|
13
|
-
:placeholder="placeholder"
|
|
14
|
-
:clearable="clearable"
|
|
15
|
-
:formatter="formatter"
|
|
16
|
-
:parser="parser"
|
|
17
|
-
:show-password="showPassword"
|
|
18
|
-
:disabled="disabled"
|
|
19
|
-
:size="size"
|
|
20
|
-
:prefix-icon="prefixIcon"
|
|
21
|
-
:suffix-icon="suffixIcon"
|
|
22
|
-
:rows="rows"
|
|
23
|
-
:autosize="autosize"
|
|
24
|
-
:autocomplete="autocomplete"
|
|
25
|
-
:name="name"
|
|
26
|
-
:readonly="readonly"
|
|
27
|
-
:max="max"
|
|
28
|
-
:min="min"
|
|
29
|
-
:step="step"
|
|
30
|
-
:resize="resize"
|
|
31
|
-
:autofocus="autofocus"
|
|
32
|
-
:form="form"
|
|
33
|
-
:label="label"
|
|
34
|
-
:tabindex="tabindex"
|
|
35
|
-
:validate-event="validateEvent"
|
|
36
|
-
:input-style="inputStyle"
|
|
37
|
-
ref="BaseInputRef"
|
|
38
|
-
@blur="handleBlur"
|
|
39
|
-
@focus="handleFocus"
|
|
40
|
-
@input="handleInput"
|
|
41
|
-
@change="handleChange"
|
|
42
|
-
@clear="handleClear"
|
|
43
|
-
@keyup.enter="handleKeyupEnter"
|
|
44
|
-
></el-input>
|
|
45
|
-
</template>
|
|
46
|
-
|
|
47
|
-
<script lang="tsx">
|
|
48
|
-
export default {
|
|
49
|
-
name: 'base-input'
|
|
50
|
-
};
|
|
51
|
-
</script>
|
|
52
|
-
|
|
53
|
-
<script lang="tsx" setup>
|
|
54
|
-
import { withDefaults, ref, Component, CSSProperties } from 'vue';
|
|
55
|
-
import { ElInput } from 'element-plus';
|
|
56
|
-
import { isFunction } from '../../../tools/check';
|
|
57
|
-
import { BaseInputProps } from './index';
|
|
58
|
-
|
|
59
|
-
const _props = withDefaults(
|
|
60
|
-
defineProps<{
|
|
61
|
-
modelValue?: string | number; // 选中项绑定值
|
|
62
|
-
type?: 'text' | 'textarea' | 'password' | 'number'; // 类型
|
|
63
|
-
maxlength?: string | number; // 最大输入长度
|
|
64
|
-
minlength?: string | number; // 原生属性,最小输入长度
|
|
65
|
-
showWordLimit?: boolean; // 是否显示输入字数统计,只在 type = "text" 或 type = "textarea" 时有效
|
|
66
|
-
placeholder?: string; // 输入框占位文本
|
|
67
|
-
clearable?: boolean; // 是否可清空
|
|
68
|
-
formatter?: (value: string | number) => string; // 指定输入值的格式。(只有当 type 是"text"时才能工作)
|
|
69
|
-
parser?: (value: string) => string; // 指定从格式化器输入中提取的值。(仅当 type 是"text"时才起作用)
|
|
70
|
-
showPassword?: boolean; // 是否显示切换密码图标
|
|
71
|
-
disabled?: boolean; // 是否禁用
|
|
72
|
-
size?: 'large' | 'default' | 'small'; // 输入框尺寸,只在 type 不为 'textarea' 时有效
|
|
73
|
-
prefixIcon?: any; // 自定义前缀图标
|
|
74
|
-
suffixIcon?: any; // 自定义后缀图标
|
|
75
|
-
rows?: number; // 输入框行数,仅 type 为 'textarea' 时有效
|
|
76
|
-
autosize?: any; // textarea 高度是否自适应,仅 type 为 'textarea' 时生效。 可以接受一个对象,比如: { minRows: 2, maxRows: 6 }
|
|
77
|
-
autocomplete?: string; // 原生 autocomplete 属性
|
|
78
|
-
name?: string; // 等价于原生 input name 属性
|
|
79
|
-
readonly?: boolean; // 原生 readonly 属性,是否只读
|
|
80
|
-
max?: number; // 原生 max 属性,设置最大值
|
|
81
|
-
min?: number; // 原生属性,设置最小值
|
|
82
|
-
step?: number; // 原生属性,设置输入字段的合法数字间隔
|
|
83
|
-
resize?: 'none' | 'both' | 'horizontal' | 'vertical'; // 控制是否能被用户缩放
|
|
84
|
-
autofocus?: boolean; // 原生属性,自动获取焦点
|
|
85
|
-
form?: string; // 原生属性
|
|
86
|
-
label?: string; // 标签文本
|
|
87
|
-
tabindex?: string | number; // 输入框的 tabindex
|
|
88
|
-
validateEvent?: boolean; // 输入时是否触发表单的校验
|
|
89
|
-
inputStyle?: any; // input 元素或 textarea 元素的 style
|
|
90
|
-
|
|
91
|
-
inputRewrite?: any; // 输入时处理输入值
|
|
92
|
-
changeRewrite?: any; // 发生改变时处理输入值
|
|
93
|
-
}>(),
|
|
94
|
-
{
|
|
95
|
-
type: 'text',
|
|
96
|
-
rows: 2,
|
|
97
|
-
autocomplete: 'off',
|
|
98
|
-
placeholder: '请输入',
|
|
99
|
-
validateEvent: true
|
|
100
|
-
}
|
|
101
|
-
);
|
|
102
|
-
|
|
103
|
-
const props = _props as Readonly<BaseInputProps>;
|
|
104
|
-
|
|
105
|
-
const emits = defineEmits<{
|
|
106
|
-
(event: 'update:modelValue', value: string | number): void;
|
|
107
|
-
(event: 'blur', events: Event): void;
|
|
108
|
-
(event: 'focus', events: Event): void;
|
|
109
|
-
(event: 'keyup', events: KeyboardEvent): void;
|
|
110
|
-
(event: 'change', value?: string | number | KeyboardEvent): void;
|
|
111
|
-
(event: 'input', value?: string | number | KeyboardEvent): void;
|
|
112
|
-
(event: 'clear'): void;
|
|
113
|
-
}>();
|
|
114
|
-
|
|
115
|
-
const updateValue = (value: string | number) => {
|
|
116
|
-
emits('update:modelValue', value); // 更新父级v-model绑定变量的值;
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
const handleBlur = (event: Event) => {
|
|
120
|
-
emits('blur', event);
|
|
121
|
-
};
|
|
122
|
-
const handleFocus = (event: Event) => {
|
|
123
|
-
emits('focus', event);
|
|
124
|
-
};
|
|
125
|
-
const handleChange = async (value: string | number) => {
|
|
126
|
-
const _value = (
|
|
127
|
-
isFunction(props.changeRewrite) ? await props.changeRewrite?.(value) : value
|
|
128
|
-
) as string | number;
|
|
129
|
-
updateValue(_value);
|
|
130
|
-
emits('change', _value);
|
|
131
|
-
};
|
|
132
|
-
const handleInput = async (value: string | number) => {
|
|
133
|
-
const _value = (
|
|
134
|
-
isFunction(props.inputRewrite) ? await props.inputRewrite?.(value) : value
|
|
135
|
-
) as string | number;
|
|
136
|
-
updateValue(_value);
|
|
137
|
-
emits('input', _value);
|
|
138
|
-
};
|
|
139
|
-
const handleClear = () => {
|
|
140
|
-
emits('clear');
|
|
141
|
-
};
|
|
142
|
-
const handleKeyupEnter = (event: KeyboardEvent) => {
|
|
143
|
-
emits('keyup', event);
|
|
144
|
-
};
|
|
145
|
-
|
|
146
|
-
const BaseInputRef = ref<{
|
|
147
|
-
focus: Function;
|
|
148
|
-
blur: Function;
|
|
149
|
-
select: Function;
|
|
150
|
-
} | null>(null);
|
|
151
|
-
|
|
152
|
-
defineExpose({
|
|
153
|
-
focus: () => {
|
|
154
|
-
BaseInputRef.value?.focus?.();
|
|
155
|
-
},
|
|
156
|
-
blur: () => {
|
|
157
|
-
BaseInputRef.value?.blur?.();
|
|
158
|
-
},
|
|
159
|
-
select: () => {
|
|
160
|
-
BaseInputRef.value?.select?.();
|
|
161
|
-
}
|
|
162
|
-
});
|
|
163
|
-
</script>
|
|
164
|
-
|
|
165
|
-
<style lang="scss" scoped>
|
|
166
|
-
.base-input {
|
|
167
|
-
::v-deep input::-webkit-outer-spin-button,
|
|
168
|
-
::v-deep input::-webkit-inner-spin-button {
|
|
169
|
-
-webkit-appearance: none !important;
|
|
170
|
-
}
|
|
171
|
-
::v-deep input[type='‘number’'] {
|
|
172
|
-
-moz-appearance: textfield !important;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
</style>
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* @Description:
|
|
3
|
-
* @Date: 2022-07-01 11:12:14
|
|
4
|
-
*/
|
|
5
|
-
import { DefineComponent } from 'vue';
|
|
6
|
-
import _BasePagination from './pagination.vue';
|
|
7
|
-
|
|
8
|
-
export type PaginationInfoType = {
|
|
9
|
-
pageSize: number;
|
|
10
|
-
currentPage: number;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
export type BasePaginationProps = {
|
|
14
|
-
small?: boolean;
|
|
15
|
-
currentPage?: number; // 当前页数
|
|
16
|
-
pageSize?: number; // 每页显示条目个数
|
|
17
|
-
total?: number; // 总条目数
|
|
18
|
-
pagerCount?: number; // 设置最大页码按钮数。 页码按钮的数量,当总页数超过该值时会折叠
|
|
19
|
-
pageSizes?: Array<number>; // 每页显示个数选择器的选项设置
|
|
20
|
-
hideOnSinglePage?: boolean; // 只有一页时是否隐藏
|
|
21
|
-
layout?: Array<
|
|
22
|
-
'sizes' | 'prev' | 'pager' | 'next' | 'jumper' | '->' | 'total' | 'slot'
|
|
23
|
-
>; // 组件布局,子组件名
|
|
24
|
-
|
|
25
|
-
onSizeChange?: (paginationInfo: PaginationInfoType) => void;
|
|
26
|
-
onCurrentChange?: (paginationInfo: PaginationInfoType) => void;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export const BasePagination =
|
|
30
|
-
_BasePagination as DefineComponent<BasePaginationProps>;
|