useFile.hooks.ts 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import { ref, nextTick } from 'vue'
  2. import { UploadCustomRequestOptions } from 'naive-ui'
  3. import { FileTypeEnum } from '@/enums/fileTypeEnum'
  4. import { readFile, goDialog, JSONParse } from '@/utils'
  5. import { useSync } from '@/views/chart/hooks/useSync.hook'
  6. export const useFile = () => {
  7. const importUploadFileListRef = ref()
  8. const { updateComponent } = useSync()
  9. // 上传-前置
  10. //@ts-ignore
  11. const importBeforeUpload = ({ file }) => {
  12. importUploadFileListRef.value = []
  13. const type = file.file.type
  14. if (type !== FileTypeEnum.JSON && type !== FileTypeEnum.TXT) {
  15. window['$message'].warning('仅支持上传 【JSON】 格式文件,请重新上传!')
  16. return false
  17. }
  18. return true
  19. }
  20. // 上传-导入
  21. const importCustomRequest = (options: UploadCustomRequestOptions) => {
  22. const { file } = options
  23. nextTick(() => {
  24. if (file.file) {
  25. readFile(file.file).then((fileData: any) => {
  26. goDialog({
  27. message: '请选择导入方式:',
  28. positiveText: '新增(可撤回)',
  29. negativeText: '覆盖(不可撤回)',
  30. negativeButtonProps: { type: 'info', ghost: false },
  31. // 新增
  32. onPositiveCallback: async () => {
  33. try {
  34. fileData = JSONParse(fileData)
  35. await updateComponent(fileData, false, true)
  36. window['$message'].success('导入成功!')
  37. } catch (error) {
  38. console.log(error)
  39. window['$message'].error('组件导入失败,请检查文件完整性!')
  40. }
  41. },
  42. // 覆盖
  43. onNegativeCallback: async () => {
  44. try {
  45. fileData = JSONParse(fileData)
  46. await updateComponent(fileData, true, true)
  47. window['$message'].success('导入成功!')
  48. } catch (error) {
  49. console.log(error)
  50. window['$message'].error('组件导入失败,请检查文件完整性!')
  51. }
  52. }
  53. })
  54. })
  55. } else {
  56. window['$message'].error('导入失败,请检查数据或联系管理员!')
  57. }
  58. })
  59. }
  60. return {
  61. importUploadFileListRef,
  62. importBeforeUpload,
  63. importCustomRequest
  64. }
  65. }