wupengfei
2025-02-18 a261170567648a5b425077049835ce8b7fb0c466
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,
  };
}