@smartos-lib/components 1.7.0 → 1.8.0-beta.0
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/.eslintrc-auto-import.json +0 -3
- package/dist/smart-docx-editor/index.js +2 -2
- package/dist/smart-file-preview/index.js +2 -2
- package/dist/smart-upload/index.d.ts +12 -1
- package/dist/smart-upload/index.js +2 -800
- package/package.json +1 -1
- package/src/composables/useNaiveTheme.ts +1 -54
- package/src/shared/naiveThemeOverrides.ts +54 -0
- package/src/web-components/smart-upload/index.ts +34 -1
- package/src/web-components/smart-upload/index.vue +24 -3
- package/src/web-components/smart-upload/types.ts +8 -0
- package/types/auto-imports.d.ts +0 -9
package/package.json
CHANGED
@@ -1,58 +1,5 @@
|
|
1
|
-
import type { GlobalThemeOverrides } from 'naive-ui';
|
2
1
|
import { darkTheme, dateZhCN, zhCN } from 'naive-ui';
|
3
|
-
import {
|
4
|
-
import { colors, fontFamily } from '@/shared/unocss.theme';
|
5
|
-
|
6
|
-
/** 通用主题变量覆盖 */
|
7
|
-
export const commonOverrides: GlobalThemeOverrides = {
|
8
|
-
common: {
|
9
|
-
// 默认字体
|
10
|
-
fontFamily: fontFamily.sans,
|
11
|
-
// 等宽字体
|
12
|
-
fontFamilyMono: fontFamily.mono,
|
13
|
-
|
14
|
-
// Primary 颜色
|
15
|
-
primaryColor: colors.primary,
|
16
|
-
primaryColorHover: colors['primary-hover'],
|
17
|
-
primaryColorPressed: colors['primary-active'],
|
18
|
-
primaryColorSuppl: colors.primary,
|
19
|
-
// Info 颜色
|
20
|
-
infoColor: colors.info,
|
21
|
-
infoColorHover: colors['info-hover'],
|
22
|
-
infoColorPressed: colors['info-active'],
|
23
|
-
infoColorSuppl: colors.info,
|
24
|
-
// Success 颜色
|
25
|
-
successColor: colors.success,
|
26
|
-
successColorHover: colors['success-hover'],
|
27
|
-
successColorPressed: colors['success-active'],
|
28
|
-
successColorSuppl: colors.success,
|
29
|
-
// Warning 颜色
|
30
|
-
warningColor: colors.warning,
|
31
|
-
warningColorHover: colors['warning-hover'],
|
32
|
-
warningColorPressed: colors['warning-active'],
|
33
|
-
warningColorSuppl: colors.warning,
|
34
|
-
// Error 颜色
|
35
|
-
errorColor: colors.error,
|
36
|
-
errorColorHover: colors['error-hover'],
|
37
|
-
errorColorPressed: colors['error-active'],
|
38
|
-
errorColorSuppl: colors.error,
|
39
|
-
},
|
40
|
-
};
|
41
|
-
|
42
|
-
/** 亮色主题变量覆盖 */
|
43
|
-
export const lightThemeOverrides: GlobalThemeOverrides = deepMerge({}, commonOverrides, {
|
44
|
-
|
45
|
-
});
|
46
|
-
/** 深色主题变量覆盖 */
|
47
|
-
export const darkThemeOverrides: GlobalThemeOverrides = deepMerge({}, commonOverrides, {
|
48
|
-
Button: {
|
49
|
-
textColorPrimary: '#FFF',
|
50
|
-
textColorHoverPrimary: '#FFF',
|
51
|
-
textColorPressedPrimary: '#FFF',
|
52
|
-
textColorFocusPrimary: '#FFF',
|
53
|
-
textColorDisabledPrimary: '#FFF',
|
54
|
-
},
|
55
|
-
});
|
2
|
+
import { darkThemeOverrides, lightThemeOverrides } from '@/shared/naiveThemeOverrides';
|
56
3
|
|
57
4
|
export const useNaiveTheme = createSharedComposable(() => {
|
58
5
|
const themeStore = useThemeStore();
|
@@ -0,0 +1,54 @@
|
|
1
|
+
import type { GlobalThemeOverrides } from 'naive-ui';
|
2
|
+
import { deepMerge } from 'mixte';
|
3
|
+
import { colors, fontFamily } from './unocss.theme';
|
4
|
+
|
5
|
+
/** 通用主题变量覆盖 */
|
6
|
+
export const commonOverrides: GlobalThemeOverrides = {
|
7
|
+
common: {
|
8
|
+
// 默认字体
|
9
|
+
fontFamily: fontFamily.sans,
|
10
|
+
// 等宽字体
|
11
|
+
fontFamilyMono: fontFamily.mono,
|
12
|
+
|
13
|
+
// Primary 颜色
|
14
|
+
primaryColor: colors.primary,
|
15
|
+
primaryColorHover: colors['primary-hover'],
|
16
|
+
primaryColorPressed: colors['primary-active'],
|
17
|
+
primaryColorSuppl: colors.primary,
|
18
|
+
// Info 颜色
|
19
|
+
infoColor: colors.info,
|
20
|
+
infoColorHover: colors['info-hover'],
|
21
|
+
infoColorPressed: colors['info-active'],
|
22
|
+
infoColorSuppl: colors.info,
|
23
|
+
// Success 颜色
|
24
|
+
successColor: colors.success,
|
25
|
+
successColorHover: colors['success-hover'],
|
26
|
+
successColorPressed: colors['success-active'],
|
27
|
+
successColorSuppl: colors.success,
|
28
|
+
// Warning 颜色
|
29
|
+
warningColor: colors.warning,
|
30
|
+
warningColorHover: colors['warning-hover'],
|
31
|
+
warningColorPressed: colors['warning-active'],
|
32
|
+
warningColorSuppl: colors.warning,
|
33
|
+
// Error 颜色
|
34
|
+
errorColor: colors.error,
|
35
|
+
errorColorHover: colors['error-hover'],
|
36
|
+
errorColorPressed: colors['error-active'],
|
37
|
+
errorColorSuppl: colors.error,
|
38
|
+
},
|
39
|
+
};
|
40
|
+
|
41
|
+
/** 亮色主题变量覆盖 */
|
42
|
+
export const lightThemeOverrides: GlobalThemeOverrides = deepMerge({}, commonOverrides, {
|
43
|
+
|
44
|
+
});
|
45
|
+
/** 深色主题变量覆盖 */
|
46
|
+
export const darkThemeOverrides: GlobalThemeOverrides = deepMerge({}, commonOverrides, {
|
47
|
+
Button: {
|
48
|
+
textColorPrimary: '#FFF',
|
49
|
+
textColorHoverPrimary: '#FFF',
|
50
|
+
textColorPressedPrimary: '#FFF',
|
51
|
+
textColorFocusPrimary: '#FFF',
|
52
|
+
textColorDisabledPrimary: '#FFF',
|
53
|
+
},
|
54
|
+
});
|
@@ -1,5 +1,38 @@
|
|
1
|
+
import type { NUpload, UploadFileInfo } from 'naive-ui';
|
2
|
+
import { defineCustomElement } from 'vue';
|
1
3
|
import VueComponent from './index.vue';
|
2
4
|
import { tag } from './info';
|
3
5
|
import { defineCustomElements } from '@/utils/defineCustomElements';
|
6
|
+
import { getCustomElementExposed } from '@/utils/callCustomElementExposed';
|
4
7
|
|
5
|
-
|
8
|
+
type UploadRef = InstanceType<typeof NUpload>;
|
9
|
+
|
10
|
+
// 组件转为 Vue 自定义元素
|
11
|
+
const VueCustomElement = defineCustomElement(VueComponent);
|
12
|
+
|
13
|
+
// 暴露组件属性/方法
|
14
|
+
Object.assign(VueCustomElement.prototype, {
|
15
|
+
getUploadRef() {
|
16
|
+
return (getCustomElementExposed(this, 'uploadRef') as Ref<UploadRef>).value;
|
17
|
+
},
|
18
|
+
getFileList() {
|
19
|
+
return (getCustomElementExposed(this, 'fileList') as Ref<UploadFileInfo[]>).value;
|
20
|
+
},
|
21
|
+
submit() {
|
22
|
+
return this.getUploadRef().submit();
|
23
|
+
},
|
24
|
+
clear() {
|
25
|
+
return this.getUploadRef().clear();
|
26
|
+
},
|
27
|
+
});
|
28
|
+
|
29
|
+
// 注册组件
|
30
|
+
defineCustomElements(tag, VueCustomElement);
|
31
|
+
|
32
|
+
// 暴露组件类型
|
33
|
+
export type SmartUploadElement = typeof VueCustomElement & {
|
34
|
+
getUploadRef: () => UploadRef
|
35
|
+
getFileList: () => UploadFileInfo[]
|
36
|
+
submit: UploadRef['submit']
|
37
|
+
clear: UploadRef['clear']
|
38
|
+
};
|
@@ -1,7 +1,8 @@
|
|
1
1
|
<template>
|
2
2
|
<NConfigProvider :cls-prefix="classPrefix" :theme-overrides="commonOverrides" :locale="zhCN" abstract>
|
3
3
|
<NUpload
|
4
|
-
|
4
|
+
ref="uploadRef"
|
5
|
+
v-bind="bindProps"
|
5
6
|
v-model:file-list="fileList"
|
6
7
|
:custom-request="customRequest"
|
7
8
|
@remove="onRemoved"
|
@@ -19,14 +20,21 @@
|
|
19
20
|
import { NButton, NConfigProvider, NUpload, zhCN } from 'naive-ui';
|
20
21
|
import { getConfigProvider } from '@smartos-lib/core';
|
21
22
|
import type { Props } from './types';
|
23
|
+
import { commonOverrides } from '@/shared/naiveThemeOverrides';
|
22
24
|
|
23
25
|
const props = defineProps<Props>();
|
24
26
|
const list = defineModel<UploadFieldValueItem[]>('fileList', {
|
25
27
|
default: () => [],
|
26
28
|
});
|
27
29
|
|
30
|
+
const uploadRef = ref<InstanceType<typeof NUpload>>();
|
31
|
+
|
28
32
|
const { classPrefix } = useSmart();
|
29
33
|
|
34
|
+
const bindProps = reactiveOmit(props, [
|
35
|
+
'beforeUpload',
|
36
|
+
]);
|
37
|
+
|
30
38
|
/** 内部维护的文件列表 */
|
31
39
|
const fileList = ref<UploadFileInfo[]>(
|
32
40
|
list.value.map(({ fileName: url }) => ({ id: url, name: url, url, status: 'finished' })),
|
@@ -35,11 +43,12 @@
|
|
35
43
|
/** 自定义上传 */
|
36
44
|
function customRequest({ file, onFinish, onError, onProgress }: UploadCustomRequestOptions) {
|
37
45
|
const originFile = file.file as File;
|
46
|
+
const beforeUpload = props.beforeUpload ?? (c => c);
|
38
47
|
|
39
48
|
const form = new FormData();
|
40
49
|
form.set('file', originFile);
|
41
50
|
|
42
|
-
|
51
|
+
const config = beforeUpload({
|
43
52
|
method: 'post',
|
44
53
|
url: '/admin/sys-file/upload',
|
45
54
|
data: form,
|
@@ -49,14 +58,21 @@
|
|
49
58
|
onUploadProgress({ loaded, total }) {
|
50
59
|
onProgress({ percent: total ? Math.ceil((loaded / total) * 100) : 0 });
|
51
60
|
},
|
52
|
-
})
|
61
|
+
});
|
62
|
+
|
63
|
+
getConfigProvider('request')!(config)
|
53
64
|
.then((res) => {
|
54
65
|
const data = res.data.data;
|
55
66
|
|
56
67
|
file.url = data.url;
|
68
|
+
file.status = 'finished';
|
57
69
|
onFinish();
|
58
70
|
|
59
71
|
nextTick(() => {
|
72
|
+
// fix: 手动上传完成时, fileList 中的文件信息不会更新
|
73
|
+
if (!props.defaultUpload)
|
74
|
+
fileList.value.splice(fileList.value.findIndex(({ id }) => id === file.id), 1, file);
|
75
|
+
|
60
76
|
list.value.includes(data.url) || list.value.push({ fileName: data.url, originalFileName: originFile.name });
|
61
77
|
});
|
62
78
|
})
|
@@ -98,4 +114,9 @@
|
|
98
114
|
i++;
|
99
115
|
}
|
100
116
|
});
|
117
|
+
|
118
|
+
defineExpose({
|
119
|
+
uploadRef,
|
120
|
+
fileList,
|
121
|
+
});
|
101
122
|
</script>
|
@@ -1,6 +1,12 @@
|
|
1
|
+
import type { AxiosRequestConfig } from 'axios';
|
1
2
|
import type { UploadProps } from 'naive-ui';
|
2
3
|
|
3
4
|
export interface Props {
|
5
|
+
/** 发起请求前的钩子, 用于修改请求配置 */
|
6
|
+
beforeUpload?: <T extends AxiosRequestConfig>(config: T) => T
|
7
|
+
|
8
|
+
/* ------------------ 以下为 NaiveUI 上传组件原有 Props ------------------ */
|
9
|
+
|
4
10
|
accept?: UploadProps['accept']
|
5
11
|
defaultFileList?: UploadProps['defaultFileList']
|
6
12
|
defaultUpload?: UploadProps['defaultUpload']
|
@@ -25,4 +31,6 @@ export interface Props {
|
|
25
31
|
showTrigger?: UploadProps['showTrigger']
|
26
32
|
triggerClass?: UploadProps['triggerClass']
|
27
33
|
triggerStyle?: UploadProps['triggerStyle']
|
34
|
+
onError?: UploadProps['onError']
|
35
|
+
onFinish?: UploadProps['onFinish']
|
28
36
|
};
|
package/types/auto-imports.d.ts
CHANGED
@@ -8,7 +8,6 @@ declare global {
|
|
8
8
|
const EffectScope: typeof import('vue')['EffectScope']
|
9
9
|
const asyncComputed: typeof import('@vueuse/core')['asyncComputed']
|
10
10
|
const autoResetRef: typeof import('@vueuse/core')['autoResetRef']
|
11
|
-
const commonOverrides: typeof import('../src/composables/useNaiveTheme')['commonOverrides']
|
12
11
|
const computed: typeof import('vue')['computed']
|
13
12
|
const computedAsync: typeof import('@vueuse/core')['computedAsync']
|
14
13
|
const computedEager: typeof import('@vueuse/core')['computedEager']
|
@@ -29,7 +28,6 @@ declare global {
|
|
29
28
|
const createTemplatePromise: typeof import('@vueuse/core')['createTemplatePromise']
|
30
29
|
const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn']
|
31
30
|
const customRef: typeof import('vue')['customRef']
|
32
|
-
const darkThemeOverrides: typeof import('../src/composables/useNaiveTheme')['darkThemeOverrides']
|
33
31
|
const debouncedRef: typeof import('@vueuse/core')['debouncedRef']
|
34
32
|
const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch']
|
35
33
|
const deepUnref: typeof import('@mixte/use')['deepUnref']
|
@@ -49,7 +47,6 @@ declare global {
|
|
49
47
|
const isReactive: typeof import('vue')['isReactive']
|
50
48
|
const isReadonly: typeof import('vue')['isReadonly']
|
51
49
|
const isRef: typeof import('vue')['isRef']
|
52
|
-
const lightThemeOverrides: typeof import('../src/composables/useNaiveTheme')['lightThemeOverrides']
|
53
50
|
const logicAnd: typeof import('@vueuse/math')['logicAnd']
|
54
51
|
const logicNot: typeof import('@vueuse/math')['logicNot']
|
55
52
|
const logicOr: typeof import('@vueuse/math')['logicOr']
|
@@ -336,7 +333,6 @@ declare module 'vue' {
|
|
336
333
|
readonly EffectScope: UnwrapRef<typeof import('vue')['EffectScope']>
|
337
334
|
readonly asyncComputed: UnwrapRef<typeof import('@vueuse/core')['asyncComputed']>
|
338
335
|
readonly autoResetRef: UnwrapRef<typeof import('@vueuse/core')['autoResetRef']>
|
339
|
-
readonly commonOverrides: UnwrapRef<typeof import('../src/composables/useNaiveTheme')['commonOverrides']>
|
340
336
|
readonly computed: UnwrapRef<typeof import('vue')['computed']>
|
341
337
|
readonly computedAsync: UnwrapRef<typeof import('@vueuse/core')['computedAsync']>
|
342
338
|
readonly computedEager: UnwrapRef<typeof import('@vueuse/core')['computedEager']>
|
@@ -357,7 +353,6 @@ declare module 'vue' {
|
|
357
353
|
readonly createTemplatePromise: UnwrapRef<typeof import('@vueuse/core')['createTemplatePromise']>
|
358
354
|
readonly createUnrefFn: UnwrapRef<typeof import('@vueuse/core')['createUnrefFn']>
|
359
355
|
readonly customRef: UnwrapRef<typeof import('vue')['customRef']>
|
360
|
-
readonly darkThemeOverrides: UnwrapRef<typeof import('../src/composables/useNaiveTheme')['darkThemeOverrides']>
|
361
356
|
readonly debouncedRef: UnwrapRef<typeof import('@vueuse/core')['debouncedRef']>
|
362
357
|
readonly debouncedWatch: UnwrapRef<typeof import('@vueuse/core')['debouncedWatch']>
|
363
358
|
readonly deepUnref: UnwrapRef<typeof import('@mixte/use')['deepUnref']>
|
@@ -377,7 +372,6 @@ declare module 'vue' {
|
|
377
372
|
readonly isReactive: UnwrapRef<typeof import('vue')['isReactive']>
|
378
373
|
readonly isReadonly: UnwrapRef<typeof import('vue')['isReadonly']>
|
379
374
|
readonly isRef: UnwrapRef<typeof import('vue')['isRef']>
|
380
|
-
readonly lightThemeOverrides: UnwrapRef<typeof import('../src/composables/useNaiveTheme')['lightThemeOverrides']>
|
381
375
|
readonly logicAnd: UnwrapRef<typeof import('@vueuse/math')['logicAnd']>
|
382
376
|
readonly logicNot: UnwrapRef<typeof import('@vueuse/math')['logicNot']>
|
383
377
|
readonly logicOr: UnwrapRef<typeof import('@vueuse/math')['logicOr']>
|
@@ -657,7 +651,6 @@ declare module '@vue/runtime-core' {
|
|
657
651
|
readonly EffectScope: UnwrapRef<typeof import('vue')['EffectScope']>
|
658
652
|
readonly asyncComputed: UnwrapRef<typeof import('@vueuse/core')['asyncComputed']>
|
659
653
|
readonly autoResetRef: UnwrapRef<typeof import('@vueuse/core')['autoResetRef']>
|
660
|
-
readonly commonOverrides: UnwrapRef<typeof import('../src/composables/useNaiveTheme')['commonOverrides']>
|
661
654
|
readonly computed: UnwrapRef<typeof import('vue')['computed']>
|
662
655
|
readonly computedAsync: UnwrapRef<typeof import('@vueuse/core')['computedAsync']>
|
663
656
|
readonly computedEager: UnwrapRef<typeof import('@vueuse/core')['computedEager']>
|
@@ -678,7 +671,6 @@ declare module '@vue/runtime-core' {
|
|
678
671
|
readonly createTemplatePromise: UnwrapRef<typeof import('@vueuse/core')['createTemplatePromise']>
|
679
672
|
readonly createUnrefFn: UnwrapRef<typeof import('@vueuse/core')['createUnrefFn']>
|
680
673
|
readonly customRef: UnwrapRef<typeof import('vue')['customRef']>
|
681
|
-
readonly darkThemeOverrides: UnwrapRef<typeof import('../src/composables/useNaiveTheme')['darkThemeOverrides']>
|
682
674
|
readonly debouncedRef: UnwrapRef<typeof import('@vueuse/core')['debouncedRef']>
|
683
675
|
readonly debouncedWatch: UnwrapRef<typeof import('@vueuse/core')['debouncedWatch']>
|
684
676
|
readonly deepUnref: UnwrapRef<typeof import('@mixte/use')['deepUnref']>
|
@@ -698,7 +690,6 @@ declare module '@vue/runtime-core' {
|
|
698
690
|
readonly isReactive: UnwrapRef<typeof import('vue')['isReactive']>
|
699
691
|
readonly isReadonly: UnwrapRef<typeof import('vue')['isReadonly']>
|
700
692
|
readonly isRef: UnwrapRef<typeof import('vue')['isRef']>
|
701
|
-
readonly lightThemeOverrides: UnwrapRef<typeof import('../src/composables/useNaiveTheme')['lightThemeOverrides']>
|
702
693
|
readonly logicAnd: UnwrapRef<typeof import('@vueuse/math')['logicAnd']>
|
703
694
|
readonly logicNot: UnwrapRef<typeof import('@vueuse/math')['logicNot']>
|
704
695
|
readonly logicOr: UnwrapRef<typeof import('@vueuse/math')['logicOr']>
|