index.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /*
  2. * @Author: 贺永胜
  3. * @Date: 2020-04-22 15:40:42
  4. * @公众号: 百里青山
  5. * @LastEditors: 贺永胜
  6. * @LastEditTime: 2022-07-21 16:21:47
  7. * @Descripttion:
  8. */
  9. import VueToast from "./hevue-img-preview.vue";
  10. let imgApp
  11. let hevueImgPreviewConfig
  12. let instance
  13. let vueVersion
  14. const ImgPreview = (options = {}) => {
  15. if (typeof options === 'string') {
  16. options = {
  17. url: options
  18. };
  19. }
  20. // 优先采取局部配置,其次采取全局配置
  21. Object.keys(hevueImgPreviewConfig).map(name => {
  22. if ( options[name] == undefined) {
  23. options[name] = hevueImgPreviewConfig[name]
  24. }
  25. })
  26. if (vueVersion > 2) {
  27. if (!imgApp.hevueImgPreviewInstalled) {
  28. const parent = document.createElement('div')
  29. instance = imgApp.mount(parent)
  30. imgApp.hevueImgPreviewInstalled = true
  31. let dom = instance.$el
  32. document.body.appendChild(dom)
  33. }
  34. Object.keys(options).map(name => {
  35. instance[name] = options[name]
  36. })
  37. } else {
  38. instance = new imgApp({
  39. data: options
  40. })
  41. instance.$mount()
  42. let dom = instance.$el
  43. document.body.appendChild(dom)
  44. }
  45. instance.show()
  46. return instance
  47. }
  48. const install = async (app, opts = {}) => {
  49. hevueImgPreviewConfig = opts
  50. vueVersion = app.version.split(".")[0]
  51. if (vueVersion > 2) {
  52. let {createApp} = await import("vue");
  53. imgApp = createApp(VueToast)
  54. app.config.globalProperties.$hevueImgPreview = ImgPreview;
  55. } else {
  56. let _vue = await (await import("vue")).default;
  57. imgApp = _vue.extend(VueToast)
  58. _vue.prototype.$hevueImgPreview = ImgPreview;
  59. }
  60. };
  61. if (typeof window !== "undefined" && window.Vue) {
  62. install(window.Vue)
  63. }
  64. export default install;