1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
| import { chooseMedia, ChooseMediaOptions, ChooseFileItem } from '@12333/utils';
| import _ from 'lodash';
| import Taro from '@tarojs/taro';
| import { FileItem } from '@nutui/nutui-taro/dist/types/__VUE/uploader/type';
| import { ref } from 'vue';
|
| export type UseChooseOptions = {
| defaultFileList?: FileItem[];
| };
|
| export function useChooseMedia(options: UseChooseOptions = {}) {
| const { defaultFileList = [] } = options;
| const innerFiles = ref<ChooseFileItem[]>(
| defaultFileList.map((x) => ({
| ...x,
| previewUrl: x.url,
| }))
| );
|
| function choose(chooseOptions: ChooseMediaOptions) {
| chooseMedia({
| ...chooseOptions,
| onSuccess(result, ossRes, { file }) {
| innerFiles.value = innerFiles.value.map((x) => {
| if (x.uid === file.uid) {
| // console.log('file: ', file);
| // console.log('ossRes.url: ', ossRes.url);
| return {
| ...x,
| status: 'success',
| message: 'success',
| url: ossRes.url,
| path: ossRes.path,
| };
| } else {
| return { ...x };
| }
| });
| },
| onStart(fileList) {
| // console.log('fileList: ', fileList);
| innerFiles.value.push(...fileList);
| },
| onFail(e, { file }) {
| innerFiles.value = innerFiles.value.map((x) => {
| if (x.uid === file.uid) {
| return {
| ...x,
| status: 'error',
| message: '上传失败',
| };
| } else {
| return { ...x };
| }
| });
| },
| });
| }
|
| const actions = {
| remove: (index: number) => {
| innerFiles.value = innerFiles.value.filter((_, i) => i != index);
| },
| };
|
| return {
| files: innerFiles,
| choose,
| actions,
| };
| }
|
|