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,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>;
|