view.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import xpc from '@/views/components/PictureEditor/images/xpc.svg'
  2. import shanyibu from '@/views/components/PictureEditor/images/shanyibu.png'
  3. import { Loading } from '@element-plus/icons-vue'
  4. export default function() {
  5. return `
  6. <div class="picture-editor-canvas">
  7. <div v-if="!isEmpty" class="canvas-stack">
  8. <div
  9. class="canvas-stack_item"
  10. v-for="(item, idx) in data"
  11. :key="(item.id || item.tpl_url || idx) + '-' + idx"
  12. :ref="'canvasItem-' + idx"
  13. :style="{backgroundColor: item.bg_color || '#fff'}"
  14. >
  15. <div
  16. class="canvas-stack_body"
  17. :class="idx === index ? 'active' : 'inactive'"
  18. :style="canvasBodyStyle(item)"
  19. >
  20. <div class="canvas-stack_controls">
  21. <el-button
  22. v-if="item.canvas_type !== 'model' && item.canvas_type !== 'scene'"
  23. size="small"
  24. class="canvas-stack_switch"
  25. type="primary"
  26. plain
  27. :disabled="idx === index"
  28. @click="handleSelectCanvas(idx)"
  29. >
  30. {{ idx === index ? '正在编辑' : '切换画布' }}
  31. </el-button>
  32. <div class="canvas-stack_sort">
  33. <el-button
  34. text
  35. size="small"
  36. icon="ArrowUp"
  37. @click.stop="handleMoveCanvas(idx, 'up')"
  38. :disabled="idx === 0"
  39. />
  40. <el-button
  41. text
  42. size="small"
  43. icon="ArrowDown"
  44. @click.stop="handleMoveCanvas(idx, 'down')"
  45. :disabled="idx === data.length - 1"
  46. />
  47. </div>
  48. </div>
  49. <!-- 模特图/场景图占位 -->
  50. <template v-if="item.canvas_type === 'model' || item.canvas_type === 'scene'">
  51. <div class="canvas-special-placeholder" :class="item.canvas_type">
  52. <div class="special-placeholder-content">
  53. {{ item.canvas_type === 'model' ? '模特图' : '场景图' }}
  54. </div>
  55. </div>
  56. </template>
  57. <!-- 普通画布 -->
  58. <template v-else>
  59. <div v-if="idx !== index" class="canvas-stack_placeholder" @click="handleSelectCanvas(idx)" style="cursor: pointer;">
  60. <img v-if="item.preview" :src="item.preview" alt="">
  61. <img v-else-if="item.image_path" :src="item.image_path" alt="">
  62. <img v-else-if="item.tpl_url" :src="item.tpl_url" alt="">
  63. <span v-else>点击"切换到此画布"开始编辑</span>
  64. </div>
  65. <template v-else >
  66. <div class="canvas-container" :style="{ position: 'relative' }">
  67. <canvas
  68. :id="'marketing-canvas-' + idx"
  69. :width="item.width"
  70. :height="item.height"
  71. />
  72. <!-- Loading遮罩 -->
  73. <div v-if="loading" class="canvas-loading-overlay">
  74. <div class="canvas-loading-content">
  75. <el-icon class="is-loading">
  76. <Loading />
  77. </el-icon>
  78. <div class="loading-text">正在加载画布...</div>
  79. </div>
  80. </div>
  81. </div>
  82. </template>
  83. </template>
  84. </div>
  85. </div>
  86. </div>
  87. <div v-else class="canvas-stack_empty">暂无画布,请先新增。</div>
  88. </div>
  89. `
  90. }