fileOperationPlugins.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /**
  2. * 以服务的方式,将对文件的一些操作挂载到 Vue 上
  3. * @description 各个服务的参数传递查看服务封装对应目录下的 index.js 文件,里面注明了需要传递的参数
  4. */
  5. import { defineAsyncComponent } from 'vue'
  6. /**
  7. * 动态引入操作文件的弹窗组件
  8. */
  9. const importDialog = (path) => {
  10. return defineAsyncComponent(() => import(`@/views/myResource/file/dialog/${path}/index.js`))
  11. }
  12. /**
  13. * 服务挂载到 Vue - $openDialog,各个服务的名称为其对应的文件夹的名称
  14. * @description 例如,创建文件夹功能:服务封装路径 'views/myResource/file/dialog/addFolder' ,则如下:
  15. * 在 *.vue 文件中,使用 this.$openDialog.addFolder 调用创建文件夹服务
  16. * 在 *.js 文件中,需要先在文件顶部引入 Vue ,即 import Vue from 'vue' ,然后使用 Vue.property.$openDialog.addFolder 调用创建文件夹服务
  17. */
  18. const dialogModules = import.meta.glob('@/views/myResource/file/dialog/*/index.js', { eager: true })
  19. const openDialog = Object.keys(dialogModules).reduce((acc, path) => {
  20. const moduleName = path.split('/').slice(-2)[0]
  21. acc[moduleName] = dialogModules[path].default
  22. return acc
  23. }, {})
  24. /**
  25. * 动态添加操作文件的遮罩或浮层组件
  26. */
  27. const importBox = (path) => {
  28. return defineAsyncComponent(() => import(`@/views/myResource/file/box/${path}/index.js`))
  29. }
  30. /**
  31. * 服务挂载到 Vue - $openBox,各个服务的名称为其对应的文件夹的名称
  32. * @description 例如,图片预览功能:服务封装路径 'views/myResource/file/box/imgPreview' ,则如下:
  33. * 在 *.vue 文件中,使用 this.$openBox.imgPreview 调用图片预览服务
  34. * 在 *.js 文件中,需要先在文件顶部引入 Vue ,即 import Vue from 'vue' ,然后使用 Vue.property.$openBox.imgPreview 调用图片预览服务
  35. */
  36. const boxModules = import.meta.glob('@/views/myResource/file/box/*/index.js', { eager: true })
  37. const openBox = Object.keys(boxModules).reduce((acc, path) => {
  38. const moduleName = path.split('/').slice(-2)[0]
  39. acc[moduleName] = boxModules[path].default
  40. return acc
  41. }, {})
  42. export default { openDialog, openBox }