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,144 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
* @Description:
|
|
3
|
-
* @Date: 2022-06-21 11:17:01
|
|
4
|
-
-->
|
|
5
|
-
<template>
|
|
6
|
-
<el-date-picker
|
|
7
|
-
v-model="dateValue"
|
|
8
|
-
:readonly="readonly"
|
|
9
|
-
:disabled="disabled"
|
|
10
|
-
:size="size"
|
|
11
|
-
:editable="editable"
|
|
12
|
-
:clearable="clearable"
|
|
13
|
-
:placeholder="placeholder"
|
|
14
|
-
:start-placeholder="startPlaceholder"
|
|
15
|
-
:end-placeholder="endPlaceholder"
|
|
16
|
-
:type="type"
|
|
17
|
-
:format="format"
|
|
18
|
-
:popper-class="popperClass"
|
|
19
|
-
:range-separator="rangeSeparator"
|
|
20
|
-
:default-value="defaultValue"
|
|
21
|
-
:default-time="defaultTime"
|
|
22
|
-
:value-format="valueFormat"
|
|
23
|
-
:unlink-panels="unlinkPanels"
|
|
24
|
-
:prefix-icon="prefixIcon"
|
|
25
|
-
:clear-icon="clearIcon"
|
|
26
|
-
:validate-event="validateEvent"
|
|
27
|
-
:disabled-date="_disabledDate"
|
|
28
|
-
:shortcuts="shortcuts"
|
|
29
|
-
:cell-class-name="cellClassName"
|
|
30
|
-
:teleported="teleported"
|
|
31
|
-
@change="handleChange"
|
|
32
|
-
@visible-change="handleVisibleChange"
|
|
33
|
-
@calendar-change="handleCalendarChange"
|
|
34
|
-
></el-date-picker>
|
|
35
|
-
</template>
|
|
36
|
-
|
|
37
|
-
<script lang="tsx">
|
|
38
|
-
export default {
|
|
39
|
-
name: 'base-date-picker'
|
|
40
|
-
};
|
|
41
|
-
</script>
|
|
42
|
-
<script lang="tsx" setup>
|
|
43
|
-
import { withDefaults, ref, Component, computed, watch } from 'vue';
|
|
44
|
-
import { ElDatePicker } from 'element-plus';
|
|
45
|
-
import { isFunction } from '../../../tools/check';
|
|
46
|
-
import { BaseDatePickerProps } from './index';
|
|
47
|
-
|
|
48
|
-
const _props = withDefaults(
|
|
49
|
-
defineProps<{
|
|
50
|
-
modelValue?: any; // 选中项绑定值
|
|
51
|
-
readonly?: boolean; // 只读
|
|
52
|
-
disabled?: boolean; // 禁用
|
|
53
|
-
size?: 'large' | 'default' | 'small'; // 输入框尺寸
|
|
54
|
-
editable?: boolean; // 文本框可输入
|
|
55
|
-
clearable?: boolean; // 是否显示清除按钮
|
|
56
|
-
placeholder?: string; // 非范围选择时的占位内容
|
|
57
|
-
startPlaceholder?: string; // 范围选择时开始日期的占位内容
|
|
58
|
-
endPlaceholder?: string; // 范围选择时结束日期的占位内容
|
|
59
|
-
type?:
|
|
60
|
-
| 'year'
|
|
61
|
-
| 'month'
|
|
62
|
-
| 'date'
|
|
63
|
-
| 'dates'
|
|
64
|
-
| 'datetime'
|
|
65
|
-
| 'week'
|
|
66
|
-
| 'datetimerange'
|
|
67
|
-
| 'daterange'
|
|
68
|
-
| 'monthrange'; // 显示类型
|
|
69
|
-
format?: string; // 显示在输入框中的格式
|
|
70
|
-
popperClass?: string; // DatePicker 下拉框的类名
|
|
71
|
-
rangeSeparator?: string; // 选择范围时的分隔符
|
|
72
|
-
defaultValue?: any; // 可选,选择器打开时默认显示的时间
|
|
73
|
-
defaultTime?: any; // 范围选择时选中日期所使用的当日内具体时刻
|
|
74
|
-
valueFormat?: string; // 可选,绑定值的格式。 不指定则绑定值为 Date 对象
|
|
75
|
-
unlinkPanels?: boolean; // 在范围选择器里取消两个日期面板之间的联动
|
|
76
|
-
prefixIcon?: any; // 自定义前缀图标
|
|
77
|
-
clearIcon?: any; // 自定义清除图标
|
|
78
|
-
validateEvent?: boolean; // 输入时是否触发表单的校验
|
|
79
|
-
disabledDate?: (date: Date, startDt: Date | null) => boolean; // 一个用来判断该日期是否被禁用的函数,接受一个 Date 对象作为参数。 应该返回一个 Boolean 值。
|
|
80
|
-
shortcuts?: any; // 设置快捷选项,需要传入数组对象
|
|
81
|
-
cellClassName?: (date: Date) => string; // 设置自定义类名
|
|
82
|
-
teleported?: boolean; // 是否将 date-picker 的下拉列表插入至 body 元素
|
|
83
|
-
}>(),
|
|
84
|
-
{
|
|
85
|
-
type: 'date',
|
|
86
|
-
placeholder: '请选择日期',
|
|
87
|
-
startPlaceholder: '请选择开始日期',
|
|
88
|
-
endPlaceholder: '请选择结束日期',
|
|
89
|
-
teleported: true,
|
|
90
|
-
clearable: true
|
|
91
|
-
}
|
|
92
|
-
);
|
|
93
|
-
|
|
94
|
-
const props = _props as Readonly<BaseDatePickerProps>;
|
|
95
|
-
|
|
96
|
-
const emits = defineEmits<{
|
|
97
|
-
(event: 'change', activeValue: any): void;
|
|
98
|
-
(event: 'visibleChange', visibility: boolean): void;
|
|
99
|
-
(event: 'calendarChange', val: [Date, Date | null]): void;
|
|
100
|
-
(event: 'update:modelValue', activeValue: any): void;
|
|
101
|
-
}>();
|
|
102
|
-
|
|
103
|
-
// 越过类型不匹配导致的ts报错
|
|
104
|
-
const defaultTime = computed(() => props.defaultTime) as any;
|
|
105
|
-
|
|
106
|
-
const valueFormat = computed(
|
|
107
|
-
() =>
|
|
108
|
-
props.valueFormat ||
|
|
109
|
-
(props.type &&
|
|
110
|
-
(['datetime', 'datetimerange'].includes(props.type)
|
|
111
|
-
? 'YYYY-MM-DD HH:mm:ss'
|
|
112
|
-
: 'YYYY-MM-DD'))
|
|
113
|
-
);
|
|
114
|
-
|
|
115
|
-
const startDt = ref<Date | null>(null);
|
|
116
|
-
const dateValue = ref<any>(props.modelValue);
|
|
117
|
-
// 父组件值发生改变时,同步dateValue
|
|
118
|
-
watch(
|
|
119
|
-
() => props.modelValue,
|
|
120
|
-
newV => {
|
|
121
|
-
dateValue.value = newV;
|
|
122
|
-
}
|
|
123
|
-
);
|
|
124
|
-
|
|
125
|
-
const _disabledDate = (date: Date) => {
|
|
126
|
-
if (isFunction(props?.disabledDate)) {
|
|
127
|
-
return props?.disabledDate?.(date, startDt.value);
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
const handleChange: any = (val: typeof props.modelValue) => {
|
|
132
|
-
emits('update:modelValue', val);
|
|
133
|
-
emits('change', val);
|
|
134
|
-
};
|
|
135
|
-
const handleVisibleChange: any = (visibility: boolean) => {
|
|
136
|
-
emits('visibleChange', visibility);
|
|
137
|
-
};
|
|
138
|
-
const handleCalendarChange: any = (val: [Date, Date | null]) => {
|
|
139
|
-
startDt.value = val[0];
|
|
140
|
-
emits('calendarChange', val);
|
|
141
|
-
};
|
|
142
|
-
</script>
|
|
143
|
-
|
|
144
|
-
<style lang="scss" scoped></style>
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* @Description:
|
|
3
|
-
* @Date: 2022-06-29 19:10:13
|
|
4
|
-
*/
|
|
5
|
-
import { Component, DefineComponent } from 'vue';
|
|
6
|
-
import _BaseDatePicker from './date-picker.vue';
|
|
7
|
-
|
|
8
|
-
export type BaseDatePickerProps = {
|
|
9
|
-
modelValue?: string | Date | Array<Date | string>; // 选中项绑定值
|
|
10
|
-
readonly?: boolean; // 只读
|
|
11
|
-
disabled?: boolean; // 禁用
|
|
12
|
-
size?: 'large' | 'default' | 'small'; // 输入框尺寸
|
|
13
|
-
editable?: boolean; // 文本框可输入
|
|
14
|
-
clearable?: boolean; // 是否显示清除按钮
|
|
15
|
-
placeholder?: string; // 非范围选择时的占位内容
|
|
16
|
-
startPlaceholder?: string; // 范围选择时开始日期的占位内容
|
|
17
|
-
endPlaceholder?: string; // 范围选择时结束日期的占位内容
|
|
18
|
-
type?:
|
|
19
|
-
| 'year'
|
|
20
|
-
| 'month'
|
|
21
|
-
| 'date'
|
|
22
|
-
| 'dates'
|
|
23
|
-
| 'datetime'
|
|
24
|
-
| 'week'
|
|
25
|
-
| 'datetimerange'
|
|
26
|
-
| 'daterange'
|
|
27
|
-
| 'monthrange'; // 显示类型
|
|
28
|
-
format?: string; // 显示在输入框中的格式
|
|
29
|
-
popperClass?: string; // DatePicker 下拉框的类名
|
|
30
|
-
rangeSeparator?: string; // 选择范围时的分隔符
|
|
31
|
-
defaultValue?: Date; // 可选,选择器打开时默认显示的时间
|
|
32
|
-
defaultTime?: Array<Date>; // 范围选择时选中日期所使用的当日内具体时刻
|
|
33
|
-
valueFormat?: string; // 可选,绑定值的格式。 不指定则绑定值为 Date 对象
|
|
34
|
-
unlinkPanels?: boolean; // 在范围选择器里取消两个日期面板之间的联动
|
|
35
|
-
prefixIcon?: string | Component; // 自定义前缀图标
|
|
36
|
-
clearIcon?: string | Component; // 自定义清除图标
|
|
37
|
-
validateEvent?: boolean; // 输入时是否触发表单的校验
|
|
38
|
-
disabledDate?: (date: Date, startDt: Date | null) => boolean; // 一个用来判断该日期是否被禁用的函数,接受一个 Date 对象作为参数。 应该返回一个 Boolean 值。
|
|
39
|
-
shortcuts?: Array<{
|
|
40
|
-
text: string;
|
|
41
|
-
value: Date | (() => void);
|
|
42
|
-
}>; // 设置快捷选项,需要传入数组对象
|
|
43
|
-
cellClassName?: (date: Date) => string; // 设置自定义类名
|
|
44
|
-
teleported?: boolean; // 是否将 date-picker 的下拉列表插入至 body 元素
|
|
45
|
-
|
|
46
|
-
onChange?: (activeValue: any) => void;
|
|
47
|
-
onVisibleChange?: (visibility: boolean) => void;
|
|
48
|
-
onCalendarChange?: (val: [Date, Date | null]) => void;
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
export const BaseDatePicker =
|
|
52
|
-
_BaseDatePicker as DefineComponent<BaseDatePickerProps>;
|
|
@@ -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>;
|