xrk-components 0.3.0 → 0.3.1
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 +73 -28
- package/lib/index.umd.js +73 -28
- package/package.json +1 -1
- package/lib/packages/base/button/button.d.ts +0 -124
- package/lib/packages/base/button/index.d.ts +0 -18
- package/lib/packages/base/checkbox/checkbox-button.d.ts +0 -85
- package/lib/packages/base/checkbox/checkbox-group.d.ts +0 -83
- package/lib/packages/base/checkbox/checkbox.d.ts +0 -102
- package/lib/packages/base/checkbox/index.d.ts +0 -44
- package/lib/packages/base/date-picker/date-picker.d.ts +0 -227
- package/lib/packages/base/date-picker/index.d.ts +0 -34
- package/lib/packages/base/dialog/dialog.d.ts +0 -212
- package/lib/packages/base/dialog/index.d.ts +0 -30
- package/lib/packages/base/form/form-item.d.ts +0 -87
- package/lib/packages/base/form/form.d.ts +0 -128
- package/lib/packages/base/form/index.d.ts +0 -30
- package/lib/packages/base/input/index.d.ts +0 -44
- package/lib/packages/base/input/input.d.ts +0 -284
- package/lib/packages/base/pagination/index.d.ts +0 -18
- package/lib/packages/base/pagination/pagination.d.ts +0 -95
- package/lib/packages/base/radio/index.d.ts +0 -37
- package/lib/packages/base/radio/radio-button.d.ts +0 -51
- package/lib/packages/base/radio/radio-group.d.ts +0 -59
- package/lib/packages/base/radio/radio.d.ts +0 -68
- package/lib/packages/base/select/index.d.ts +0 -39
- package/lib/packages/base/select/select.d.ts +0 -240
- package/lib/packages/base/switch/index.d.ts +0 -17
- package/lib/packages/base/switch/switch.d.ts +0 -114
- package/lib/packages/base/table/hooks/use-table.d.ts +0 -2
- package/lib/packages/base/table/index.d.ts +0 -5
- package/lib/packages/base/table/store/index.d.ts +0 -8
- package/lib/packages/base/table/table-column.d.ts +0 -291
- package/lib/packages/base/table/table.d.ts +0 -190
- package/lib/packages/base/table/types/type.d.ts +0 -111
- package/lib/packages/base/tag/index.d.ts +0 -38
- package/lib/packages/base/tag/tag-group.d.ts +0 -138
- package/lib/packages/base/tag/tag.d.ts +0 -81
- package/lib/packages/base/tool-tip/index.d.ts +0 -14
- package/lib/packages/base/tool-tip/tool-tip.d.ts +0 -106
- package/lib/packages/components.d.ts +0 -14
- package/lib/packages/functions.d.ts +0 -3
- package/lib/packages/index.d.ts +0 -10
- package/lib/packages/types.d.ts +0 -15
- package/lib/packages/xrk/search/hooks/use-search.d.ts +0 -45
- package/lib/packages/xrk/search/index.d.ts +0 -9
- package/lib/packages/xrk/search/search.d.ts +0 -59
- package/lib/packages/xrk/search/types/type.d.ts +0 -61
- package/lib/packages/xrk/table/hooks/use-table.d.ts +0 -6
- package/lib/packages/xrk/table/index.d.ts +0 -3
- package/lib/packages/xrk/table/table.d.ts +0 -63
- package/lib/packages/xrk/table/types/type.d.ts +0 -21
- package/lib/tools/check.d.ts +0 -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/styles/element/index.scss +0 -5
- package/styles/element/mixin.scss +0 -40
- package/tools/check.ts +0 -9
|
@@ -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>;
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
* @Description: 考虑currentPage 和 pageSize 使用双向绑定,使父组件可修改页码 和 每页数量
|
|
3
|
-
父组件如果同时修改这两个属性,会导致同时触发size-change 和 current-change(最终可能会导致父组件的回调混乱)
|
|
4
|
-
所以不使用双向绑定,还是使用父调子的 setPageInfo 方法来设置
|
|
5
|
-
然后父通过子的 getPageInfo 方法来获取 currentPage 和 pageSize 属性
|
|
6
|
-
* @Date: 2022-06-28 17:21:55
|
|
7
|
-
-->
|
|
8
|
-
<template>
|
|
9
|
-
<el-pagination
|
|
10
|
-
class="base-pagination"
|
|
11
|
-
:small="small"
|
|
12
|
-
:page-size="_pageSize"
|
|
13
|
-
:current-page="_currentPage"
|
|
14
|
-
:layout="_layout"
|
|
15
|
-
:total="total"
|
|
16
|
-
:pagerCount="pagerCount"
|
|
17
|
-
:pageSizes="pageSizes"
|
|
18
|
-
:hideOnSinglePage="hideOnSinglePage"
|
|
19
|
-
@size-change="handleSizeChange"
|
|
20
|
-
@current-change="handleCurrenChange"
|
|
21
|
-
></el-pagination>
|
|
22
|
-
</template>
|
|
23
|
-
|
|
24
|
-
<script lang="tsx">
|
|
25
|
-
export default {
|
|
26
|
-
name: 'base-pagination'
|
|
27
|
-
};
|
|
28
|
-
</script>
|
|
29
|
-
|
|
30
|
-
<script lang="tsx" setup>
|
|
31
|
-
import { ElPagination } from 'element-plus';
|
|
32
|
-
import { withDefaults, ref, computed } from 'vue';
|
|
33
|
-
import { PaginationInfoType } from './index';
|
|
34
|
-
|
|
35
|
-
const props = withDefaults(
|
|
36
|
-
defineProps<{
|
|
37
|
-
small?: boolean;
|
|
38
|
-
currentPage?: number; // 当前页数
|
|
39
|
-
pageSize?: number; // 每页显示条目个数
|
|
40
|
-
total?: number; // 总条目数
|
|
41
|
-
pagerCount?: number; // 设置最大页码按钮数。 页码按钮的数量,当总页数超过该值时会折叠
|
|
42
|
-
pageSizes?: Array<number>; // 每页显示个数选择器的选项设置
|
|
43
|
-
hideOnSinglePage?: boolean; // 只有一页时是否隐藏
|
|
44
|
-
layout?: Array<
|
|
45
|
-
'sizes' | 'prev' | 'pager' | 'next' | 'jumper' | '->' | 'total' | 'slot'
|
|
46
|
-
>; // 组件布局,子组件名
|
|
47
|
-
}>(),
|
|
48
|
-
{
|
|
49
|
-
small: true,
|
|
50
|
-
pageSize: 15,
|
|
51
|
-
pagerCount: 7,
|
|
52
|
-
currentPage: 1,
|
|
53
|
-
pageSizes: () => [15, 60, 100],
|
|
54
|
-
hideOnSinglePage: false,
|
|
55
|
-
layout: () => ['total', 'sizes', 'prev', 'pager', 'next', 'jumper']
|
|
56
|
-
}
|
|
57
|
-
);
|
|
58
|
-
|
|
59
|
-
const emits = defineEmits<{
|
|
60
|
-
(event: 'size-change', paginationInfo: PaginationInfoType): void;
|
|
61
|
-
(event: 'current-change', paginationInfo: PaginationInfoType): void;
|
|
62
|
-
// (event: 'update:currentPage', currentPage: number): void;
|
|
63
|
-
// (event: 'update:pageSize', pageSize: number): void;
|
|
64
|
-
}>();
|
|
65
|
-
|
|
66
|
-
const _pageSize = ref<number>(props.pageSize);
|
|
67
|
-
const _currentPage = ref<number>(props.currentPage);
|
|
68
|
-
const _layout = ref<string>(
|
|
69
|
-
Array.isArray(props.layout) ? props.layout.join(',') : props.layout
|
|
70
|
-
);
|
|
71
|
-
const maxPage = computed(() => Math.ceil((props.total || 0) / _pageSize.value));
|
|
72
|
-
|
|
73
|
-
const setCurrentPage = (newCurrentPage: number) => {
|
|
74
|
-
if (!newCurrentPage || newCurrentPage == _currentPage.value) return;
|
|
75
|
-
if (newCurrentPage > maxPage.value) {
|
|
76
|
-
// 设置的页码超过最大页码
|
|
77
|
-
console.warn(`currentPage ${newCurrentPage} 大于最大页码 ${maxPage.value}`);
|
|
78
|
-
} else {
|
|
79
|
-
_currentPage.value = newCurrentPage;
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
const setPageSize = (newPageSize: number) => {
|
|
84
|
-
if (!newPageSize || newPageSize == _pageSize.value) return;
|
|
85
|
-
if (props.pageSizes.includes(newPageSize)) {
|
|
86
|
-
_pageSize.value = newPageSize;
|
|
87
|
-
} else {
|
|
88
|
-
console.warn(
|
|
89
|
-
`pageSize ${newPageSize} 不在 pageSizes ${props.pageSizes} 中`
|
|
90
|
-
);
|
|
91
|
-
}
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
// watch(
|
|
95
|
-
// () => [props.currentPage, props.pageSize],
|
|
96
|
-
// ([newCurrentPage, newPageSize]) => {
|
|
97
|
-
// if (newCurrentPage > maxPage.value) {
|
|
98
|
-
// // 设置的页码超过最大页码
|
|
99
|
-
// emits('update:currentPage', _currentPage.value);
|
|
100
|
-
// console.warn(
|
|
101
|
-
// `currentPage ${newCurrentPage} 大于最大页码 ${maxPage.value}`
|
|
102
|
-
// );
|
|
103
|
-
// } else {
|
|
104
|
-
// _currentPage.value = newCurrentPage;
|
|
105
|
-
// }
|
|
106
|
-
|
|
107
|
-
// if (props.pageSizes.includes(newPageSize)) {
|
|
108
|
-
// _pageSize.value = newPageSize;
|
|
109
|
-
// } else {
|
|
110
|
-
// emits('update:pageSize', _pageSize.value);
|
|
111
|
-
// console.warn(
|
|
112
|
-
// `pageSize ${newPageSize} 不在 pageSizes ${props.pageSizes} 中`
|
|
113
|
-
// );
|
|
114
|
-
// }
|
|
115
|
-
// }
|
|
116
|
-
// );
|
|
117
|
-
|
|
118
|
-
const handleSizeChange = (pageSize: number) => {
|
|
119
|
-
_pageSize.value = pageSize;
|
|
120
|
-
// emits('update:pageSize', pageSize);
|
|
121
|
-
if (maxPage.value >= _currentPage.value) {
|
|
122
|
-
// 组件不会再次触发size-change事件,没有这个判断,会导致同事触发size-change 和 size-change
|
|
123
|
-
emits('size-change', {
|
|
124
|
-
pageSize: pageSize,
|
|
125
|
-
currentPage: _currentPage.value
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
};
|
|
129
|
-
const handleCurrenChange = (currentPage: number) => {
|
|
130
|
-
_currentPage.value = currentPage;
|
|
131
|
-
// emits('update:currentPage', currentPage);
|
|
132
|
-
emits('current-change', {
|
|
133
|
-
pageSize: _pageSize.value,
|
|
134
|
-
currentPage: currentPage
|
|
135
|
-
});
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
defineExpose({
|
|
139
|
-
// 父组件调用,修改组件内页面显示,不会触发emits事件。
|
|
140
|
-
setPageInfo: (info: { pageSize: number; currentPage: number }) => {
|
|
141
|
-
setPageSize(info.pageSize);
|
|
142
|
-
setCurrentPage(info.currentPage);
|
|
143
|
-
},
|
|
144
|
-
getPageInfo: () => ({
|
|
145
|
-
pageSize: _pageSize.value,
|
|
146
|
-
currentPage: _currentPage.value
|
|
147
|
-
})
|
|
148
|
-
});
|
|
149
|
-
</script>
|
|
150
|
-
|
|
151
|
-
<style lang="scss" scoped>
|
|
152
|
-
.base-pagination {
|
|
153
|
-
justify-content: center;
|
|
154
|
-
::v-deep {
|
|
155
|
-
.el-input__suffix {
|
|
156
|
-
right: 12px;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
</style>
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* @Description:
|
|
3
|
-
* @Date: 2022-07-01 10:29:26
|
|
4
|
-
*/
|
|
5
|
-
import { DefineComponent } from 'vue';
|
|
6
|
-
import _BaseRadioButton from './radio-button.vue';
|
|
7
|
-
import _BaseRadioGroup from './radio-group.vue';
|
|
8
|
-
import _BaseRadio from './radio.vue';
|
|
9
|
-
|
|
10
|
-
export type BaseRadioButtonProps = {
|
|
11
|
-
modelValue?: any; // 选中项绑定值
|
|
12
|
-
size?: 'large' | 'default' | 'small'; // Radio 的尺寸
|
|
13
|
-
name?: string; // 生 name 属性
|
|
14
|
-
label?: string | number | boolean; // 单选框对应的值
|
|
15
|
-
disabled?: boolean; // 是否禁用单选框
|
|
16
|
-
|
|
17
|
-
onChange?: (activeValue: any) => void;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
export type BaseRadioGroupProps = {
|
|
21
|
-
modelValue?: any; // 绑定值
|
|
22
|
-
size?: 'large' | 'default' | 'small'; // 单选框组尺寸
|
|
23
|
-
textColor?: string; // 按钮形式的 Radio 激活时的文本颜色
|
|
24
|
-
fill?: string; // 按钮形式的 Radio 激活时的填充色和边框色
|
|
25
|
-
disabled?: boolean; // 是否禁用
|
|
26
|
-
checkBefore?: (activeValue: any, done: Function) => void;
|
|
27
|
-
|
|
28
|
-
onChange?: (activeValue: any) => void;
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
export type BaseRadioProps = {
|
|
32
|
-
modelValue?: any; // 选中项绑定值
|
|
33
|
-
size?: 'large' | 'default' | 'small'; // Radio 的尺寸
|
|
34
|
-
name?: string; // 生 name 属性
|
|
35
|
-
label?: string | number | boolean; // 单选框对应的值
|
|
36
|
-
disabled?: boolean; // 是否禁用单选框
|
|
37
|
-
border?: boolean; // 是否显示边框
|
|
38
|
-
checkBefore?: (activeValue: any, done: Function) => void;
|
|
39
|
-
|
|
40
|
-
onChange?: (activeValue: any) => void;
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
export const BaseRadioButton =
|
|
44
|
-
_BaseRadioButton as DefineComponent<BaseRadioButtonProps>;
|
|
45
|
-
|
|
46
|
-
export const BaseRadioGroup =
|
|
47
|
-
_BaseRadioGroup as DefineComponent<BaseRadioGroupProps>;
|
|
48
|
-
|
|
49
|
-
export const BaseRadio = _BaseRadio as DefineComponent<BaseRadioProps>;
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
* @Description:
|
|
3
|
-
* @Date: 2022-06-21 11:16:37
|
|
4
|
-
-->
|
|
5
|
-
<template>
|
|
6
|
-
<el-radio-button
|
|
7
|
-
:model-value="modelValue"
|
|
8
|
-
:disabled="disabled"
|
|
9
|
-
:name="name"
|
|
10
|
-
:label="label"
|
|
11
|
-
:size="size"
|
|
12
|
-
@change="handleChange"
|
|
13
|
-
>
|
|
14
|
-
<slot></slot>
|
|
15
|
-
</el-radio-button>
|
|
16
|
-
</template>
|
|
17
|
-
|
|
18
|
-
<script lang="tsx">
|
|
19
|
-
export default {
|
|
20
|
-
name: 'base-radio-button'
|
|
21
|
-
};
|
|
22
|
-
</script>
|
|
23
|
-
|
|
24
|
-
<script lang="tsx" setup>
|
|
25
|
-
import { ElRadioButton } from 'element-plus';
|
|
26
|
-
|
|
27
|
-
defineProps<{
|
|
28
|
-
modelValue?: any; // 选中项绑定值
|
|
29
|
-
size?: 'large' | 'default' | 'small'; // Radio 的尺寸
|
|
30
|
-
name?: string; // 生 name 属性
|
|
31
|
-
label?: string | number | boolean; // 单选框对应的值
|
|
32
|
-
disabled?: boolean; // 是否禁用单选框
|
|
33
|
-
}>();
|
|
34
|
-
|
|
35
|
-
const emits = defineEmits<{
|
|
36
|
-
(event: 'change', activeValue: any): void;
|
|
37
|
-
(event: 'update:modelValue', activeValue: any): void;
|
|
38
|
-
}>();
|
|
39
|
-
|
|
40
|
-
const handleChange = (activeValue: any) => {
|
|
41
|
-
emits('update:modelValue', activeValue);
|
|
42
|
-
emits('change', activeValue);
|
|
43
|
-
};
|
|
44
|
-
</script>
|
|
45
|
-
|
|
46
|
-
<style lang="scss" scoped></style>
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
* @Description:
|
|
3
|
-
* @Date: 2022-06-21 11:16:37
|
|
4
|
-
-->
|
|
5
|
-
<template>
|
|
6
|
-
<el-radio-group
|
|
7
|
-
class="base-radio-group"
|
|
8
|
-
:model-value="modelValue"
|
|
9
|
-
:size="size"
|
|
10
|
-
:disabled="disabled"
|
|
11
|
-
:text-color="textColor"
|
|
12
|
-
:fill="fill"
|
|
13
|
-
@change="handleChange"
|
|
14
|
-
>
|
|
15
|
-
<div style="display: inline-block" v-loading="_loading">
|
|
16
|
-
<slot></slot>
|
|
17
|
-
</div>
|
|
18
|
-
</el-radio-group>
|
|
19
|
-
</template>
|
|
20
|
-
|
|
21
|
-
<script lang="tsx">
|
|
22
|
-
export default {
|
|
23
|
-
name: 'base-radio-group'
|
|
24
|
-
};
|
|
25
|
-
</script>
|
|
26
|
-
|
|
27
|
-
<script lang="tsx" setup>
|
|
28
|
-
import { ref } from 'vue';
|
|
29
|
-
import { ElRadioGroup, vLoading as _vLoading } from 'element-plus';
|
|
30
|
-
import { isFunction } from '../../../tools/check';
|
|
31
|
-
|
|
32
|
-
const vLoading = _vLoading;
|
|
33
|
-
const props = defineProps<{
|
|
34
|
-
modelValue?: any; // 绑定值
|
|
35
|
-
size?: 'large' | 'default' | 'small'; // 单选框组尺寸
|
|
36
|
-
textColor?: string; // 按钮形式的 Radio 激活时的文本颜色
|
|
37
|
-
fill?: string; // 按钮形式的 Radio 激活时的填充色和边框色
|
|
38
|
-
disabled?: boolean; // 是否禁用
|
|
39
|
-
checkBefore?: (activeValue: any, done: Function) => void;
|
|
40
|
-
}>();
|
|
41
|
-
|
|
42
|
-
const emits = defineEmits<{
|
|
43
|
-
(event: 'change', activeValue: any): void;
|
|
44
|
-
(event: 'update:modelValue', activeValue: any): void;
|
|
45
|
-
}>();
|
|
46
|
-
|
|
47
|
-
const _loading = ref(false);
|
|
48
|
-
const handleChange = async (activeValue: any) => {
|
|
49
|
-
if (_loading.value) return;
|
|
50
|
-
_loading.value = true;
|
|
51
|
-
try {
|
|
52
|
-
if (
|
|
53
|
-
(props.modelValue?.length || 0) < activeValue?.length &&
|
|
54
|
-
isFunction(props.checkBefore)
|
|
55
|
-
) {
|
|
56
|
-
await props.checkBefore(activeValue, () => {
|
|
57
|
-
emits('update:modelValue', activeValue);
|
|
58
|
-
emits('change', activeValue);
|
|
59
|
-
});
|
|
60
|
-
} else {
|
|
61
|
-
emits('update:modelValue', activeValue);
|
|
62
|
-
emits('change', activeValue);
|
|
63
|
-
}
|
|
64
|
-
} catch (error) {}
|
|
65
|
-
_loading.value = false;
|
|
66
|
-
};
|
|
67
|
-
</script>
|
|
68
|
-
|
|
69
|
-
<style lang="scss" scoped>
|
|
70
|
-
.base-radio-group {
|
|
71
|
-
::v-deep {
|
|
72
|
-
.xrk-loading-spinner .circular {
|
|
73
|
-
width: 20px;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
</style>
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
* @Description:
|
|
3
|
-
* @Date: 2022-06-21 11:16:37
|
|
4
|
-
-->
|
|
5
|
-
<template>
|
|
6
|
-
<el-radio
|
|
7
|
-
class="base-radio"
|
|
8
|
-
:model-value="modelValue"
|
|
9
|
-
:size="size"
|
|
10
|
-
:name="name"
|
|
11
|
-
:label="label"
|
|
12
|
-
:disabled="disabled"
|
|
13
|
-
:border="border"
|
|
14
|
-
@change="handleChange"
|
|
15
|
-
>
|
|
16
|
-
<slot></slot>
|
|
17
|
-
</el-radio>
|
|
18
|
-
</template>
|
|
19
|
-
|
|
20
|
-
<script lang="tsx">
|
|
21
|
-
export default {
|
|
22
|
-
name: 'base-radio'
|
|
23
|
-
};
|
|
24
|
-
</script>
|
|
25
|
-
|
|
26
|
-
<script lang="tsx" setup>
|
|
27
|
-
import { ref } from 'vue';
|
|
28
|
-
import { ElRadio } from 'element-plus';
|
|
29
|
-
import { isFunction } from '../../../tools/check';
|
|
30
|
-
|
|
31
|
-
const props = defineProps<{
|
|
32
|
-
modelValue?: any; // 选中项绑定值
|
|
33
|
-
size?: 'large' | 'default' | 'small'; // Radio 的尺寸
|
|
34
|
-
name?: string; // 生 name 属性
|
|
35
|
-
label?: string | number | boolean; // 单选框对应的值
|
|
36
|
-
disabled?: boolean; // 是否禁用单选框
|
|
37
|
-
border?: boolean; // 是否显示边框
|
|
38
|
-
|
|
39
|
-
checkBefore?: (activeValue: any, done: Function) => void;
|
|
40
|
-
}>();
|
|
41
|
-
|
|
42
|
-
const emits = defineEmits<{
|
|
43
|
-
(event: 'change', activeValue: any): void;
|
|
44
|
-
(event: 'update:modelValue', activeValue: any): void;
|
|
45
|
-
}>();
|
|
46
|
-
|
|
47
|
-
const _loading = ref(false);
|
|
48
|
-
const handleChange = async (activeValue: any) => {
|
|
49
|
-
if (_loading.value) return;
|
|
50
|
-
_loading.value = true;
|
|
51
|
-
try {
|
|
52
|
-
if (activeValue && isFunction(props.checkBefore)) {
|
|
53
|
-
await props.checkBefore(activeValue, () => {
|
|
54
|
-
emits('update:modelValue', activeValue);
|
|
55
|
-
emits('change', activeValue);
|
|
56
|
-
});
|
|
57
|
-
} else {
|
|
58
|
-
emits('update:modelValue', activeValue);
|
|
59
|
-
emits('change', activeValue);
|
|
60
|
-
}
|
|
61
|
-
} catch (error) {}
|
|
62
|
-
_loading.value = false;
|
|
63
|
-
};
|
|
64
|
-
</script>
|
|
65
|
-
|
|
66
|
-
<style lang="scss" scoped>
|
|
67
|
-
.base-radio {
|
|
68
|
-
::v-deep {
|
|
69
|
-
.xrk-loading-spinner .circular {
|
|
70
|
-
width: 20px;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
</style>
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* @Description:
|
|
3
|
-
* @Date: 2022-06-29 18:18:19
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { DefineComponent } from 'vue';
|
|
7
|
-
import _BaseSelect from './select.vue';
|
|
8
|
-
|
|
9
|
-
export type SelectOptionType = {
|
|
10
|
-
label: string;
|
|
11
|
-
value?: string | number;
|
|
12
|
-
disabled?: boolean;
|
|
13
|
-
options?: Array<SelectOptionType>;
|
|
14
|
-
};
|
|
15
|
-
export type SelectValueType =
|
|
16
|
-
| string
|
|
17
|
-
| number
|
|
18
|
-
| boolean
|
|
19
|
-
| SelectOptionType
|
|
20
|
-
| null
|
|
21
|
-
| undefined;
|
|
22
|
-
|
|
23
|
-
export interface BaseSelectProps {
|
|
24
|
-
init?: boolean; // 初始化组件时 执行 remoteMethod 方法
|
|
25
|
-
filterUseRemote?: boolean; // 使用远程搜索
|
|
26
|
-
options?: Array<SelectOptionType>; // 下拉选项
|
|
27
|
-
group?: boolean; // 是否分组
|
|
28
|
-
labelKey?: string;
|
|
29
|
-
valueKey?: string;
|
|
30
|
-
optionsKey?: string;
|
|
31
|
-
|
|
32
|
-
modelValue?:
|
|
33
|
-
| SelectValueType
|
|
34
|
-
| Array<string | number | boolean | SelectOptionType | null | undefined>; // 选中项绑定值
|
|
35
|
-
multiple?: boolean; // 是否多选
|
|
36
|
-
disabled?: boolean; // 是否禁用
|
|
37
|
-
size?: 'large' | 'default' | 'small'; // 输入框尺寸
|
|
38
|
-
clearable?: boolean; // 是否可以清空选项
|
|
39
|
-
collapseTags?: boolean; // 多选时是否将选中值按文字的形式展示
|
|
40
|
-
collapseTagsTooltip?: boolean; // 当鼠标悬停于折叠标签的文本时,是否显示所有选中的标签。 要使用此属性,collapse-tags属性必须设定为 true
|
|
41
|
-
multipleLimit?: number; // multiple 属性设置为 true 时,代表多选场景下用户最多可以选择的项目数, 为 0 则不限制
|
|
42
|
-
placeholder?: string; // 占位文字
|
|
43
|
-
filterable?: boolean; // Select 组件是否可筛选
|
|
44
|
-
allowCreate?: boolean; // 是否允许用户创建新条目, 只有当 filterable 设置为 true 时才会生效。
|
|
45
|
-
fitInputWidth?: boolean; // 下拉框的宽度是否与输入框相同
|
|
46
|
-
filterMethod?: (searchVal: string) => Array<SelectValueType>; // 自定义筛选方法
|
|
47
|
-
|
|
48
|
-
remoteMethod?: Function; // 远程方法
|
|
49
|
-
loadingText?: string; // 从服务器加载内容时显示的文本
|
|
50
|
-
noMatchText?: string; // 搜索条件无匹配时显示的文字,也可以使用 empty 插槽设置
|
|
51
|
-
noDataText?: string; // 无选项时显示的文字,也可以使用 empty 插槽设置自定义内容
|
|
52
|
-
|
|
53
|
-
onChange?: (
|
|
54
|
-
value: SelectValueType,
|
|
55
|
-
SelectOption: Array<SelectOptionType>
|
|
56
|
-
) => void;
|
|
57
|
-
onRemoveTag?: (value: SelectValueType) => void;
|
|
58
|
-
onVisibleChange?: (visibleStatus: boolean) => void;
|
|
59
|
-
onClear?: () => void;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
export const BaseSelect = _BaseSelect as DefineComponent<BaseSelectProps>;
|