v-uni-app-ui 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -82
- package/dist/v-uni-app-ui.css +1 -0
- package/dist/v-uni-app-ui.es.js +6569 -0
- package/dist/v-uni-app-ui.umd.js +7 -0
- package/package.json +17 -5
- package/components/config/css/basic.scss +0 -19
- package/components/config/interface/basic-type.js +0 -16
- package/components/config/interface/components-interface.ts +0 -0
- package/components/config/interface/monitor/components/input-monitor.js +0 -0
- package/components/config/interface/monitor/property-monitor.ts +0 -136
- package/components/config/interface/props/basic-props.ts +0 -88
- package/components/config/interface/props/components/button-props.ts +0 -85
- package/components/config/interface/props/components/input-props.ts +0 -69
- package/components/config/interface/props/props-tools.ts +0 -64
- package/components/config/style/basic.js +0 -346
- package/components/config/style/component-registry.js +0 -142
- package/components/config/style/components/button-style.js +0 -160
- package/components/config/style/components/input-style.js +0 -98
- package/components/config/style/components-style.js +0 -622
- package/components/config/style/property-mapper.js +0 -377
- package/components/config/style/pseudo-processor.js +0 -213
- package/components/config.js +0 -123
- package/components/icon/iconfont.css +0 -87
- package/components/icon/iconfont.js +0 -1
- package/components/icon/iconfont.json +0 -135
- package/components/icon/iconfont.ttf +0 -0
- package/components/icon/iconfont.woff +0 -0
- package/components/icon/iconfont.woff2 +0 -0
- package/components/layout/v-card/v-card.vue +0 -108
- package/components/layout/v-grid/v-grid.vue +0 -162
- package/components/layout/v-icon-grid/v-icon-grid.vue +0 -195
- package/components/layout/v-infinite-scroll/v-infinite-scroll.vue +0 -172
- package/components/layout/v-list/v-list.vue +0 -43
- package/components/layout/v-row/v-row.vue +0 -142
- package/components/layout/v-waterfall/v-waterfall.vue +0 -79
- package/components/model/compound/v-checkbox-group/v-checkbox-group.vue +0 -96
- package/components/model/compound/v-console/v-console.js +0 -20
- package/components/model/compound/v-console/v-console.vue +0 -299
- package/components/model/compound/v-date-time/v-date-time.vue +0 -261
- package/components/model/compound/v-dialog/v-dialog.vue +0 -178
- package/components/model/compound/v-drum-select-picker/v-drum-select-picker.vue +0 -83
- package/components/model/compound/v-form/v-form.vue +0 -226
- package/components/model/compound/v-form-item/v-form-item.vue +0 -255
- package/components/model/compound/v-image/v-image.vue +0 -357
- package/components/model/compound/v-input-desensitize/v-input-desensitize.vue +0 -101
- package/components/model/compound/v-page/v-page.vue +0 -11
- package/components/model/compound/v-pages/v-pages.vue +0 -141
- package/components/model/compound/v-picker-list/v-picker-list.vue +0 -109
- package/components/model/compound/v-popup/v-popup.vue +0 -151
- package/components/model/compound/v-radio-group/v-radio-group.vue +0 -86
- package/components/model/compound/v-select-picker/v-select-picker.vue +0 -202
- package/components/model/compound/v-series-picker-list/v-series-picker-list.vue +0 -221
- package/components/model/compound/v-series-select-picker/v-series-select-picker.vue +0 -203
- package/components/model/compound/v-switch/v-switch.vue +0 -136
- package/components/model/compound/v-tabs-page/v-tabs-page.vue +0 -138
- package/components/model/native/v-badge/v-badge.vue +0 -143
- package/components/model/native/v-button/v-button.vue +0 -81
- package/components/model/native/v-carousel/v-carousel.vue +0 -138
- package/components/model/native/v-checkbox/v-checkbox.vue +0 -215
- package/components/model/native/v-collapse/v-collapse.vue +0 -190
- package/components/model/native/v-header-navigation-bar/v-header-navigation-bar.vue +0 -92
- package/components/model/native/v-input/v-input.vue +0 -163
- package/components/model/native/v-input-code/v-input-code.vue +0 -146
- package/components/model/native/v-loading/v-loading.vue +0 -206
- package/components/model/native/v-menu/v-menu.vue +0 -222
- package/components/model/native/v-menu-slide/v-menu-slide.vue +0 -364
- package/components/model/native/v-min-loading/v-min-loading.vue +0 -80
- package/components/model/native/v-null/v-null.vue +0 -97
- package/components/model/native/v-overlay/v-overlay.vue +0 -96
- package/components/model/native/v-pull-up-refresh/v-pull-up-refresh.vue +0 -157
- package/components/model/native/v-radio/v-radio.vue +0 -138
- package/components/model/native/v-scroll-list/v-scroll-list.vue +0 -169
- package/components/model/native/v-steps/v-steps.vue +0 -253
- package/components/model/native/v-table/v-table.vue +0 -203
- package/components/model/native/v-tabs/v-tabs.vue +0 -235
- package/components/model/native/v-tag/v-tag.vue +0 -206
- package/components/model/native/v-text/v-text.vue +0 -187
- package/components/model/native/v-textarea/v-textarea.vue +0 -178
- package/components/model/native/v-title/v-title.vue +0 -91
- package/components/model/native/v-toast/info.png +0 -0
- package/components/model/native/v-toast/success.png +0 -0
- package/components/model/native/v-toast/v-toast.vue +0 -198
- package/components/model/native/v-toast/warn.png +0 -0
- package/components/model/native/v-upload-file-button/v-upload-file-button.vue +0 -296
- package/components/model/native/v-video/v-video.vue +0 -175
- package/components/model/native/v-window/v-window.vue +0 -158
- package/components/utils/event-modifiers.ts +0 -139
- package/components/utils/validator.ts +0 -451
- package/index.js +0 -372
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
// 简化 BasicPropsDefinition 类型
|
|
2
|
-
type VuePropDefinition = {
|
|
3
|
-
type: any;
|
|
4
|
-
default?: any;
|
|
5
|
-
required?: boolean;
|
|
6
|
-
validator?: (value: any) => boolean;
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* 通用组件基础 props 定义
|
|
11
|
-
* 所有组件都会自动继承这些 props
|
|
12
|
-
*/
|
|
13
|
-
export const BasicProps = {
|
|
14
|
-
id: {
|
|
15
|
-
type: String,
|
|
16
|
-
default: ''
|
|
17
|
-
},
|
|
18
|
-
className: {
|
|
19
|
-
type: String,
|
|
20
|
-
default: ''
|
|
21
|
-
},
|
|
22
|
-
boxStyle: {
|
|
23
|
-
type: Object,
|
|
24
|
-
default: () => ({})
|
|
25
|
-
},
|
|
26
|
-
style: {
|
|
27
|
-
type: Object,
|
|
28
|
-
default: () => ({})
|
|
29
|
-
},
|
|
30
|
-
accessibility:{
|
|
31
|
-
type:Object,
|
|
32
|
-
default:()=>({})
|
|
33
|
-
}
|
|
34
|
-
} as const;
|
|
35
|
-
|
|
36
|
-
// 获取基础属性的键名类型
|
|
37
|
-
type BasicPropsKeys = keyof typeof BasicProps;
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* 创建扩展基础 props 的验证器
|
|
41
|
-
*/
|
|
42
|
-
export function extendWithBasicProps<T extends Record<string, VuePropDefinition>>(
|
|
43
|
-
componentProps: T,
|
|
44
|
-
options: {
|
|
45
|
-
exclude?: BasicPropsKeys[];
|
|
46
|
-
override?: Partial<Record<BasicPropsKeys, any>>;
|
|
47
|
-
} = {}
|
|
48
|
-
): Record<string, VuePropDefinition> {
|
|
49
|
-
const { exclude = [], override = {} } = options;
|
|
50
|
-
const mergedProps: Record<string, VuePropDefinition> = {};
|
|
51
|
-
|
|
52
|
-
// 添加基础 props
|
|
53
|
-
Object.entries(BasicProps).forEach(([key, value]) => {
|
|
54
|
-
if (!exclude.includes(key as BasicPropsKeys)) {
|
|
55
|
-
const propKey = key as BasicPropsKeys;
|
|
56
|
-
if (override[propKey] !== undefined) {
|
|
57
|
-
// 修复:正确处理覆盖值
|
|
58
|
-
mergedProps[key] = {
|
|
59
|
-
...value,
|
|
60
|
-
default: typeof override[propKey] === 'object' && override[propKey] !== null && 'default' in override[propKey] ? override[propKey].default : override[propKey]
|
|
61
|
-
};
|
|
62
|
-
} else {
|
|
63
|
-
mergedProps[key] = value;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
// 添加组件特定 props
|
|
69
|
-
Object.entries(componentProps).forEach(([key, value]) => {
|
|
70
|
-
mergedProps[key] = value;
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
return mergedProps;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* 从 props 配置中提取类型
|
|
78
|
-
*/
|
|
79
|
-
export type ExtractPropTypes<T> = {
|
|
80
|
-
[K in keyof T]: T[K] extends { type: any } ? (T[K] extends { default?: infer D } ? (D extends () => infer R ? R : D) : any) : any;
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* 创建 Vue 兼容的 props 定义
|
|
85
|
-
*/
|
|
86
|
-
export function createVueProps<T extends Record<string, VuePropDefinition>>(props: T): T {
|
|
87
|
-
return props;
|
|
88
|
-
}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import type { PropType } from 'vue';
|
|
2
|
-
import { extendWithBasicProps, ExtractPropTypes } from '@/components/config/interface/props/basic-props';
|
|
3
|
-
import { BasicType, ButtonShape, BasicSize } from '@/components/config/interface/basic-type.js';
|
|
4
|
-
import { Validators } from '@/components/utils/validator';
|
|
5
|
-
import { PropTools } from '@/components/config/interface/props/props-tools';
|
|
6
|
-
/**
|
|
7
|
-
* 按钮组件 props 定义
|
|
8
|
-
*/
|
|
9
|
-
const buttonProps = extendWithBasicProps(
|
|
10
|
-
{
|
|
11
|
-
//使用PropTools简写
|
|
12
|
-
shape: PropTools.enum<ButtonShape>(['default', 'none', 'circle'], 'default', 'buttonShape'),
|
|
13
|
-
type: {
|
|
14
|
-
type: String as PropType<BasicType>,
|
|
15
|
-
default: 'default',
|
|
16
|
-
validator: Validators.enum(['default', 'success', 'warning', 'info', 'delete'], 'buttonType')
|
|
17
|
-
},
|
|
18
|
-
size: PropTools.enum<BasicSize>(['small', 'medium', 'large'], 'medium', 'buttonSize'),
|
|
19
|
-
disabled: PropTools.boolean(false),
|
|
20
|
-
loading: PropTools.boolean(false),
|
|
21
|
-
plain: PropTools.boolean(false),
|
|
22
|
-
text: PropTools.boolean(false),
|
|
23
|
-
stabilizationTime: {
|
|
24
|
-
type: Number,
|
|
25
|
-
default: 0,
|
|
26
|
-
validator: Validators.numberRange(0, 1_000_000, 'Stabilization time must be between 0 and 1,000,000 ms.')
|
|
27
|
-
},
|
|
28
|
-
debounceTime: {
|
|
29
|
-
type: Number,
|
|
30
|
-
default: 0,
|
|
31
|
-
validator: Validators.numberRange(0, 1_000_000, 'The anti-shake waiting time must be between 0 and 1,000,000 milliseconds.')
|
|
32
|
-
},
|
|
33
|
-
intervalUpdateTime: {
|
|
34
|
-
type: Number,
|
|
35
|
-
default: 1000,
|
|
36
|
-
validator: Validators.numberRange(100, 100_000, 'Interval must be between 100 and 100,000 ms.')
|
|
37
|
-
},
|
|
38
|
-
degressionTime: {
|
|
39
|
-
type: Number,
|
|
40
|
-
default: 1000,
|
|
41
|
-
validator: Validators.numberRange(100, 10_000, 'Degression time must be between 100 and 10,000 ms.')
|
|
42
|
-
},
|
|
43
|
-
resetOnClick: PropTools.boolean(false),
|
|
44
|
-
hoverStartTime: {
|
|
45
|
-
type: Number,
|
|
46
|
-
default: 20,
|
|
47
|
-
validator: Validators.numberRange(10, 10_000, 'hover start time must be between 10 and 10,000 ms.')
|
|
48
|
-
},
|
|
49
|
-
hoverStayTime: {
|
|
50
|
-
type: Number,
|
|
51
|
-
default: 70,
|
|
52
|
-
validator: Validators.numberRange(10, 10_000, 'hover stay time must be between 10 and 10,000 ms.')
|
|
53
|
-
},
|
|
54
|
-
//组合校验
|
|
55
|
-
// customProp: {
|
|
56
|
-
// type: String,
|
|
57
|
-
// default: '',
|
|
58
|
-
// validator: Validators.combine(
|
|
59
|
-
// Validators.required('This field is required.'),
|
|
60
|
-
// Validators.length(3, 20, 'Length must be 3-20 characters.'),
|
|
61
|
-
// Validators.pattern(/^[a-zA-Z0-9_]+$/, 'Only letters, numbers and underscore are allowed.')
|
|
62
|
-
// )
|
|
63
|
-
// }
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
override: {
|
|
67
|
-
id: {
|
|
68
|
-
default: 'VButton'
|
|
69
|
-
},
|
|
70
|
-
className: {
|
|
71
|
-
default: 'v-button'
|
|
72
|
-
},
|
|
73
|
-
boxStyle: {
|
|
74
|
-
default: {
|
|
75
|
-
width: 'auto',
|
|
76
|
-
height: '50rpx',
|
|
77
|
-
padding: '14rpx 2rpx'
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
accessibility: {}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
);
|
|
84
|
-
export default buttonProps;
|
|
85
|
-
export type ButtonProps = ExtractPropTypes<typeof buttonProps>;
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { extendWithBasicProps, ExtractPropTypes } from '@/components/config/interface/props/basic-props';
|
|
2
|
-
import { InputType, BasicSize, BasicHorizontallyPosition } from '@/components/config/interface/basic-type.js';
|
|
3
|
-
import { Validators } from '@/components/utils/validator';
|
|
4
|
-
import { PropTools } from '@/components/config/interface/props/props-tools';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* 文本框组件 props 定义
|
|
8
|
-
*/
|
|
9
|
-
const inputProps = extendWithBasicProps(
|
|
10
|
-
{
|
|
11
|
-
value: PropTools.string(),
|
|
12
|
-
size: PropTools.enum<BasicSize>(['small', 'medium', 'large'], 'medium', 'inputSize'),
|
|
13
|
-
placeholder: PropTools.array(),
|
|
14
|
-
placeholderTimeNumber: {
|
|
15
|
-
type: Number,
|
|
16
|
-
default: 0,
|
|
17
|
-
validator: Validators.numberRange(0, 1_000_000, 'The prompt switching time must be between 0 and 1,000,000 milliseconds.')
|
|
18
|
-
},
|
|
19
|
-
maxlength: {
|
|
20
|
-
type: Number,
|
|
21
|
-
default: -1,
|
|
22
|
-
validator: Validators.numberRange(-1, 1_0000_0000, 'The prompt switching time must be between 0 and 1,000,000 milliseconds.')
|
|
23
|
-
},
|
|
24
|
-
disabled: PropTools.boolean(false),
|
|
25
|
-
type: PropTools.enum<InputType>(
|
|
26
|
-
['text', 'id', 'safe-password', 'password', 'number', 'digit', 'numeric', 'decimal', 'email', 'phone', 'url', 'textarea', 'name', 'search', 'none'],
|
|
27
|
-
'text',
|
|
28
|
-
'inputType'
|
|
29
|
-
),
|
|
30
|
-
isWordCounter: PropTools.boolean(false),
|
|
31
|
-
textPosition: PropTools.enum<BasicHorizontallyPosition>(['left', 'right', 'center'], 'left', 'inputTextPosition'),
|
|
32
|
-
autoFocus: PropTools.boolean(false),
|
|
33
|
-
validators: PropTools.string(),
|
|
34
|
-
placeholderStyle: PropTools.object(),
|
|
35
|
-
cursor: PropTools.number(),
|
|
36
|
-
selectionStart: {
|
|
37
|
-
type: Number,
|
|
38
|
-
default: -1,
|
|
39
|
-
validator: Validators.numberRange(-1, 10_000, 'selection start must be between -1 and 10,000 milliseconds.')
|
|
40
|
-
},
|
|
41
|
-
selectionEnd: {
|
|
42
|
-
type: Number,
|
|
43
|
-
default: -1,
|
|
44
|
-
validator: Validators.numberRange(-1, 10_000, 'selection end must be between -1 and 10,000 milliseconds.')
|
|
45
|
-
},
|
|
46
|
-
isIcon: PropTools.boolean(false),
|
|
47
|
-
hiddenSymbols: PropTools.string('·'),
|
|
48
|
-
randomNumber: PropTools.boolean(false),
|
|
49
|
-
cursorColor: PropTools.string(),
|
|
50
|
-
focus: PropTools.boolean(false),
|
|
51
|
-
autoBlur: PropTools.boolean(false),
|
|
52
|
-
cursorSpacing:PropTools.number(0),
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
override: {
|
|
56
|
-
id: {
|
|
57
|
-
default: 'VInput'
|
|
58
|
-
},
|
|
59
|
-
className: {
|
|
60
|
-
default: 'v-input'
|
|
61
|
-
},
|
|
62
|
-
boxStyle: {
|
|
63
|
-
default: {}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
);
|
|
68
|
-
export default inputProps;
|
|
69
|
-
export type inputProps = ExtractPropTypes<typeof inputProps>;
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { Validators } from '@/components/utils/validator.ts';
|
|
2
|
-
|
|
3
|
-
// 简化类型定义
|
|
4
|
-
type SimplePropDefinition = {
|
|
5
|
-
type: any;
|
|
6
|
-
default?: any;
|
|
7
|
-
required?: boolean;
|
|
8
|
-
validator?: (value: any) => boolean;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
// 简化的属性创建函数
|
|
12
|
-
export function createProp<T>(type: any, defaultValue?: T, validator?: (value: any) => boolean): SimplePropDefinition {
|
|
13
|
-
const prop: SimplePropDefinition = { type };
|
|
14
|
-
|
|
15
|
-
if (defaultValue !== undefined) {
|
|
16
|
-
prop.default = defaultValue;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
if (validator) {
|
|
20
|
-
prop.validator = validator;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
return prop;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// 快捷方法
|
|
27
|
-
export const PropTools = {
|
|
28
|
-
// 基础类型
|
|
29
|
-
string: (defaultValue: string = '', validator?: (value: string) => boolean) => createProp(String, defaultValue, validator),
|
|
30
|
-
|
|
31
|
-
number: (defaultValue: number = 0, validator?: (value: number) => boolean) => createProp(Number, defaultValue, validator),
|
|
32
|
-
|
|
33
|
-
boolean: (defaultValue: boolean = false) => createProp(Boolean, defaultValue),
|
|
34
|
-
|
|
35
|
-
array: <T>(defaultValue: T[] = []) => createProp(Array, () => defaultValue),
|
|
36
|
-
|
|
37
|
-
object: <T extends Record<string, any>>(defaultValue: T = {} as T) => createProp(Object, () => defaultValue),
|
|
38
|
-
|
|
39
|
-
function: <T extends Function>(defaultValue?: T) => createProp(Function, defaultValue),
|
|
40
|
-
|
|
41
|
-
// 枚举类型
|
|
42
|
-
enum: <T extends string>(allowedValues: readonly T[], defaultValue: T, displayName?: string) =>
|
|
43
|
-
createProp(String, defaultValue, Validators.enum(allowedValues, `${displayName || '属性'}必须是以下值之一: ${allowedValues.join(', ')}`)),
|
|
44
|
-
|
|
45
|
-
// 任意类型
|
|
46
|
-
any: (defaultValue: any = null) => createProp(null, defaultValue),
|
|
47
|
-
|
|
48
|
-
// 常用属性
|
|
49
|
-
id: () => createProp(String, ''),
|
|
50
|
-
className: () => createProp(String, ''),
|
|
51
|
-
style: () => createProp(Object, () => ({})),
|
|
52
|
-
|
|
53
|
-
// 带验证的属性
|
|
54
|
-
stringLength: (defaultValue: string = '', min?: number, max?: number) => createProp(String, defaultValue, Validators.length(min, max)),
|
|
55
|
-
|
|
56
|
-
numberRange: (defaultValue: number, min: number, max: number) => createProp(Number, defaultValue, Validators.numberRange(min, max)),
|
|
57
|
-
|
|
58
|
-
// 格式验证
|
|
59
|
-
email: (defaultValue: string = '') => createProp(String, defaultValue, Validators.email()),
|
|
60
|
-
|
|
61
|
-
phoneNumber: (defaultValue: string = '') => createProp(String, defaultValue, Validators.phoneNumber()),
|
|
62
|
-
|
|
63
|
-
url: (defaultValue: string = '') => createProp(String, defaultValue, Validators.url())
|
|
64
|
-
};
|
|
@@ -1,346 +0,0 @@
|
|
|
1
|
-
export const styleConfig = {
|
|
2
|
-
// 基础样式配置
|
|
3
|
-
basic: {
|
|
4
|
-
// 背景颜色 - 按功能分类
|
|
5
|
-
backgroundColor: {
|
|
6
|
-
// 状态类背景色
|
|
7
|
-
default: '#307fff',
|
|
8
|
-
delete: '#ff5e5e',
|
|
9
|
-
success: '#31d283',
|
|
10
|
-
info: '#888888',
|
|
11
|
-
warning: '#fba000',
|
|
12
|
-
reversal: '#ffffff',
|
|
13
|
-
disabled: '#f5f5f5',
|
|
14
|
-
|
|
15
|
-
// 布局背景色
|
|
16
|
-
page: '#f8f8f8', // 页面背景
|
|
17
|
-
card: '#ffffff', // 卡片背景
|
|
18
|
-
section: '#fafafa', // 区域背景
|
|
19
|
-
mask: 'rgba(0, 0, 0, 0.5)', // 遮罩层背景
|
|
20
|
-
|
|
21
|
-
// 交互状态背景色
|
|
22
|
-
hover: '#f0f7ff', // 悬停背景
|
|
23
|
-
active: '#e6f0ff', // 激活背景
|
|
24
|
-
selected: '#307fff', // 选中背景
|
|
25
|
-
focus: 'rgba(48, 127, 255, 0.1)' // 聚焦背景
|
|
26
|
-
},
|
|
27
|
-
|
|
28
|
-
// 字体颜色 - 按语义分类
|
|
29
|
-
fontColor: {
|
|
30
|
-
// 状态类文字色
|
|
31
|
-
default: '#307fff',
|
|
32
|
-
delete: '#ff5e5e',
|
|
33
|
-
success: '#31d283',
|
|
34
|
-
info: '#888888',
|
|
35
|
-
warning: '#fba000',
|
|
36
|
-
reversal: '#ffffff',
|
|
37
|
-
disabled: '#cccccc',
|
|
38
|
-
|
|
39
|
-
// 层级文字色
|
|
40
|
-
primary: '#222222', // 主要文字
|
|
41
|
-
secondary: '#666666', // 次要文字
|
|
42
|
-
tertiary: '#969696', // 辅助文字
|
|
43
|
-
placeholder: '#cccccc', // 占位文字
|
|
44
|
-
description: '#888888', // 描述文字
|
|
45
|
-
|
|
46
|
-
// 特殊文字色
|
|
47
|
-
link: '#307fff', // 链接文字
|
|
48
|
-
error: '#ff5e5e', // 错误文字
|
|
49
|
-
warningText: '#fba000', // 警告文字
|
|
50
|
-
successText: '#31d283' // 成功文字
|
|
51
|
-
},
|
|
52
|
-
|
|
53
|
-
// 字体大小
|
|
54
|
-
fontSize: {
|
|
55
|
-
// 标题类
|
|
56
|
-
extraLargeTitle: '48rpx',
|
|
57
|
-
largeTitle: '42.5rpx',
|
|
58
|
-
mediumTitle: '34.5rpx',
|
|
59
|
-
smallTitle: '31.5rpx',
|
|
60
|
-
extraSmallTitle: '28rpx',
|
|
61
|
-
|
|
62
|
-
// 正文类
|
|
63
|
-
extraLargeText: '32rpx',
|
|
64
|
-
largeText: '29.5rpx',
|
|
65
|
-
mediumText: '25.5rpx',
|
|
66
|
-
smallText: '22.5rpx',
|
|
67
|
-
extraSmallText: '20rpx',
|
|
68
|
-
|
|
69
|
-
// 特殊类
|
|
70
|
-
message: '20.5rpx',
|
|
71
|
-
hint: '18.5rpx',
|
|
72
|
-
caption: '16rpx',
|
|
73
|
-
footnote: '14rpx'
|
|
74
|
-
},
|
|
75
|
-
|
|
76
|
-
// 字体其他属性
|
|
77
|
-
fontOther: {
|
|
78
|
-
fontFamily: "'Noto Sans CJK', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",
|
|
79
|
-
fontWeight: {
|
|
80
|
-
thin: 100,
|
|
81
|
-
light: 300,
|
|
82
|
-
regular: 400,
|
|
83
|
-
medium: 500,
|
|
84
|
-
bold: 700,
|
|
85
|
-
black: 900
|
|
86
|
-
},
|
|
87
|
-
lineHeight: {
|
|
88
|
-
tight: 1.2,
|
|
89
|
-
normal: 1.5,
|
|
90
|
-
relaxed: 1.75,
|
|
91
|
-
loose: 2
|
|
92
|
-
}
|
|
93
|
-
},
|
|
94
|
-
|
|
95
|
-
// 文字间距
|
|
96
|
-
letterSpacing: {
|
|
97
|
-
tight: '-0.5rpx',
|
|
98
|
-
normal: '0rpx',
|
|
99
|
-
wide: '0.5rpx',
|
|
100
|
-
extraWide: '1rpx'
|
|
101
|
-
},
|
|
102
|
-
|
|
103
|
-
// 边框设置
|
|
104
|
-
border: {
|
|
105
|
-
// 边框颜色
|
|
106
|
-
color: {
|
|
107
|
-
default: '#307fff',
|
|
108
|
-
delete: '#ff5e5e',
|
|
109
|
-
success: '#31d283',
|
|
110
|
-
info: '#888888',
|
|
111
|
-
warning: '#fba000',
|
|
112
|
-
divider: '#e0e0e0', // 分割线
|
|
113
|
-
light: '#f0f0f0', // 浅色边框
|
|
114
|
-
dark: '#d9d9d9', // 深色边框
|
|
115
|
-
primary: '#d0d0d0' // 主要边框颜色
|
|
116
|
-
},
|
|
117
|
-
|
|
118
|
-
// 边框宽度
|
|
119
|
-
width: {
|
|
120
|
-
primary: '1rpx', //主要宽度
|
|
121
|
-
secondary: '2rpx', //次要宽度
|
|
122
|
-
medium: '3rpx', //中等
|
|
123
|
-
thick: '7.5rpx' //粗
|
|
124
|
-
},
|
|
125
|
-
|
|
126
|
-
// 边框样式
|
|
127
|
-
style: {
|
|
128
|
-
solid: 'solid',
|
|
129
|
-
dashed: 'dashed',
|
|
130
|
-
dotted: 'dotted'
|
|
131
|
-
}
|
|
132
|
-
},
|
|
133
|
-
|
|
134
|
-
// 圆角设置
|
|
135
|
-
borderRadius: {
|
|
136
|
-
default: '8rpx',
|
|
137
|
-
none: '0',
|
|
138
|
-
extraSmall: '4rpx',
|
|
139
|
-
small: '8rpx',
|
|
140
|
-
medium: '12rpx',
|
|
141
|
-
large: '16rpx',
|
|
142
|
-
extraLarge: '24rpx',
|
|
143
|
-
full: '9999rpx',
|
|
144
|
-
circle: '35rpx'
|
|
145
|
-
},
|
|
146
|
-
|
|
147
|
-
// 透明度
|
|
148
|
-
opacity: {
|
|
149
|
-
// 交互状态
|
|
150
|
-
hover: 0.9,
|
|
151
|
-
active: 0.8,
|
|
152
|
-
click: 0.8,
|
|
153
|
-
disabled: 0.6,
|
|
154
|
-
|
|
155
|
-
// 视觉层次
|
|
156
|
-
subtle: 0.3,
|
|
157
|
-
medium: 0.5,
|
|
158
|
-
strong: 0.7,
|
|
159
|
-
|
|
160
|
-
// 组件
|
|
161
|
-
toast: 0.95,
|
|
162
|
-
mask: 0.4,
|
|
163
|
-
border: 0.3,
|
|
164
|
-
overlay: 0.2
|
|
165
|
-
},
|
|
166
|
-
|
|
167
|
-
// 间距系统
|
|
168
|
-
spacing: {
|
|
169
|
-
// 基础间距
|
|
170
|
-
extraSmall: '4rpx',
|
|
171
|
-
small: '8rpx',
|
|
172
|
-
medium: '12rpx',
|
|
173
|
-
large: '16rpx',
|
|
174
|
-
extraLarge: '24rpx',
|
|
175
|
-
extraExtraLarge: '32rpx',
|
|
176
|
-
superLarge: '48rpx',
|
|
177
|
-
|
|
178
|
-
// 布局间距
|
|
179
|
-
pagePadding: '32rpx',
|
|
180
|
-
cardPadding: '24rpx',
|
|
181
|
-
sectionPadding: '16rpx',
|
|
182
|
-
itemSpacing: '12rpx'
|
|
183
|
-
},
|
|
184
|
-
|
|
185
|
-
// 阴影系统
|
|
186
|
-
shadow: {
|
|
187
|
-
// 层级阴影
|
|
188
|
-
none: 'none',
|
|
189
|
-
small: '0 2rpx 8rpx rgba(0, 0, 0, 0.1)',
|
|
190
|
-
medium: '0 4rpx 12rpx rgba(0, 0, 0, 0.15)',
|
|
191
|
-
large: '0 8rpx 24rpx rgba(0, 0, 0, 0.2)',
|
|
192
|
-
extraLarge: '0 12rpx 48rpx rgba(0, 0, 0, 0.25)',
|
|
193
|
-
|
|
194
|
-
// 特殊阴影
|
|
195
|
-
focus: '0 0 0 3rpx rgba(48, 127, 255, 0.2)',
|
|
196
|
-
inset: 'inset 0 2rpx 4rpx rgba(0, 0, 0, 0.1)',
|
|
197
|
-
|
|
198
|
-
// 颜色阴影
|
|
199
|
-
default: '0 4rpx 12rpx rgba(48, 127, 255, 0.3)',
|
|
200
|
-
success: '0 4rpx 12rpx rgba(49, 210, 131, 0.3)',
|
|
201
|
-
warning: '0 4rpx 12rpx rgba(251, 160, 0, 0.3)',
|
|
202
|
-
info: '0 4rpx 12rpx rgba(0, 0, 0, 0.3)',
|
|
203
|
-
delete: '0 4rpx 12rpx rgba(255, 94, 94, 0.3)'
|
|
204
|
-
},
|
|
205
|
-
|
|
206
|
-
// 动画时长
|
|
207
|
-
animation: {
|
|
208
|
-
duration: {
|
|
209
|
-
instant: '100ms',
|
|
210
|
-
fast: '200ms',
|
|
211
|
-
normal: '300ms',
|
|
212
|
-
slow: '500ms',
|
|
213
|
-
verySlow: '800ms'
|
|
214
|
-
},
|
|
215
|
-
easing: {
|
|
216
|
-
linear: 'linear',
|
|
217
|
-
easeInOut: 'ease-in-out',
|
|
218
|
-
easeOut: 'ease-out',
|
|
219
|
-
easeIn: 'ease-in',
|
|
220
|
-
easeOutCubic: 'cubic-bezier(0.33, 1, 0.68, 1)',
|
|
221
|
-
easeInOutCubic: 'cubic-bezier(0.65, 0, 0.35, 1)',
|
|
222
|
-
easeOutBack: 'cubic-bezier(0.34, 1.56, 0.64, 1)',
|
|
223
|
-
easeInOutBack: 'cubic-bezier(0.68, -0.6, 0.32, 1.6)'
|
|
224
|
-
},
|
|
225
|
-
transition: {
|
|
226
|
-
default: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)'
|
|
227
|
-
},
|
|
228
|
-
},
|
|
229
|
-
|
|
230
|
-
// z-index层级
|
|
231
|
-
zIndex: {
|
|
232
|
-
base: 0,
|
|
233
|
-
content: 10,
|
|
234
|
-
overlay: 100,
|
|
235
|
-
modal: 1000,
|
|
236
|
-
toast: 1100,
|
|
237
|
-
tooltip: 1200,
|
|
238
|
-
dropdown: 1300,
|
|
239
|
-
notification: 1400
|
|
240
|
-
}
|
|
241
|
-
},
|
|
242
|
-
|
|
243
|
-
// 暗黑模式配置
|
|
244
|
-
darkMode: {
|
|
245
|
-
backgroundColor: {
|
|
246
|
-
default: '#307fff',
|
|
247
|
-
delete: '#ff5e5e',
|
|
248
|
-
success: '#31d283',
|
|
249
|
-
info: '#888888',
|
|
250
|
-
warning: '#fba000',
|
|
251
|
-
reversal: '#1a1a1a',
|
|
252
|
-
disabled: '#2a2a2a',
|
|
253
|
-
page: '#121212',
|
|
254
|
-
card: '#1e1e1e',
|
|
255
|
-
section: '#2a2a2a',
|
|
256
|
-
mask: 'rgba(0, 0, 0, 0.7)',
|
|
257
|
-
hover: 'rgba(48, 127, 255, 0.2)',
|
|
258
|
-
active: 'rgba(48, 127, 255, 0.3)',
|
|
259
|
-
selected: '#307fff',
|
|
260
|
-
focus: 'rgba(48, 127, 255, 0.1)'
|
|
261
|
-
},
|
|
262
|
-
fontColor: {
|
|
263
|
-
default: '#307fff',
|
|
264
|
-
delete: '#ff5e5e',
|
|
265
|
-
success: '#31d283',
|
|
266
|
-
info: '#888888',
|
|
267
|
-
warning: '#fba000',
|
|
268
|
-
reversal: '#ffffff',
|
|
269
|
-
disabled: '#555555',
|
|
270
|
-
primary: '#ffffff',
|
|
271
|
-
secondary: '#cccccc',
|
|
272
|
-
tertiary: '#999999',
|
|
273
|
-
placeholder: '#666666',
|
|
274
|
-
description: '#888888',
|
|
275
|
-
link: '#307fff',
|
|
276
|
-
error: '#ff5e5e',
|
|
277
|
-
warningText: '#fba000',
|
|
278
|
-
successText: '#31d283'
|
|
279
|
-
},
|
|
280
|
-
border: {
|
|
281
|
-
color: {
|
|
282
|
-
default: '#307fff',
|
|
283
|
-
delete: '#ff5e5e',
|
|
284
|
-
success: '#31d283',
|
|
285
|
-
info: '#888888',
|
|
286
|
-
warning: '#fba000',
|
|
287
|
-
divider: '#333333',
|
|
288
|
-
light: '#2a2a2a',
|
|
289
|
-
dark: '#444444'
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
},
|
|
293
|
-
|
|
294
|
-
// 响应式断点(基于rpx)
|
|
295
|
-
breakpoints: {
|
|
296
|
-
mobile: '768rpx',
|
|
297
|
-
tablet: '1024rpx',
|
|
298
|
-
desktop: '1280rpx',
|
|
299
|
-
wide: '1440rpx'
|
|
300
|
-
},
|
|
301
|
-
|
|
302
|
-
// 组件特定配置
|
|
303
|
-
components: {
|
|
304
|
-
VButton: {
|
|
305
|
-
height: {
|
|
306
|
-
small: '50rpx',
|
|
307
|
-
medium: '60rpx',
|
|
308
|
-
large: '70rpx'
|
|
309
|
-
},
|
|
310
|
-
padding: {
|
|
311
|
-
small: '14rpx 10rpx',
|
|
312
|
-
medium: '15rpx 15rpx',
|
|
313
|
-
large: '20rpx 20rpx'
|
|
314
|
-
},
|
|
315
|
-
plain: {
|
|
316
|
-
backgroundColor: 'transparent',
|
|
317
|
-
borderWidth: '1rpx'
|
|
318
|
-
},
|
|
319
|
-
text: {
|
|
320
|
-
backgroundColor: 'transparent',
|
|
321
|
-
borderWidth: '0'
|
|
322
|
-
},
|
|
323
|
-
shape: {
|
|
324
|
-
default: {
|
|
325
|
-
width: "1rpx",
|
|
326
|
-
style: 'solid'
|
|
327
|
-
},
|
|
328
|
-
none: {
|
|
329
|
-
width: "1rpx",
|
|
330
|
-
style: 'solid'
|
|
331
|
-
},
|
|
332
|
-
circle: {
|
|
333
|
-
width: "1rpx",
|
|
334
|
-
style: 'solid'
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
},
|
|
338
|
-
VInput: {
|
|
339
|
-
height: {
|
|
340
|
-
small: '50rpx',
|
|
341
|
-
medium: '60rpx',
|
|
342
|
-
large: '70rpx'
|
|
343
|
-
},
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
};
|