ElementPermission.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <template>
  2. <div class="element-permission">
  3. <div class="mb-2">
  4. <b>客户可编辑项</b>
  5. </div>
  6. <div class="mb-2">
  7. <el-checkbox-group v-if="eleType == 'text'" v-model="handleElement.permissionsConfig" size="small">
  8. <el-checkbox v-for="perm in textPerms" :key="perm.code" :value="perm.code"
  9. @change="eleChange">
  10. {{ perm.name }}
  11. </el-checkbox>
  12. </el-checkbox-group>
  13. <el-checkbox-group v-if="eleType == 'image'" v-model="handleElement.permissionsConfig" size="small">
  14. <el-checkbox v-for="perm in imagePerms" :key="perm.code" :value="perm.code"
  15. @change="eleChange">
  16. {{ perm.name }}
  17. </el-checkbox>
  18. </el-checkbox-group>
  19. </div>
  20. <el-divider style="margin: 12px 0"/>
  21. <el-row>
  22. <el-col :span="7" class="slider-name"
  23. >元素别名:
  24. </el-col
  25. >
  26. <el-col :span="3"></el-col>
  27. <el-col :span="14">
  28. <el-input v-model="handleElement.itemName" @change="eleChange">
  29. </el-input>
  30. </el-col>
  31. </el-row>
  32. <el-divider style="margin: 12px 0"/>
  33. </div>
  34. </template>
  35. <script lang="ts" setup>
  36. import {computed, ref, watch} from "vue";
  37. import {storeToRefs} from "pinia";
  38. import {useMainStore} from "@/store";
  39. import * as fabric from "fabric";
  40. import useCanvas from "@/views/Canvas/useCanvas";
  41. import {CanvasElement} from "@/types/canvas";
  42. const props = defineProps({
  43. eleType: {
  44. type: String,
  45. required: true,
  46. },
  47. });
  48. const eleName = ref("")
  49. const textPerms = [
  50. {
  51. "name": "文字内容",
  52. "code": "0"
  53. },
  54. {
  55. "name": "字号",
  56. "code": "1"
  57. },
  58. {
  59. "name": "字体",
  60. "code": "2"
  61. },
  62. {
  63. "name": "颜色",
  64. "code": "3"
  65. },
  66. {
  67. "name": "字间距",
  68. "code": "4"
  69. },
  70. {
  71. "name": "元素尺寸",
  72. "code": "5"
  73. },
  74. {
  75. "name": "元素位置",
  76. "code": "6"
  77. }
  78. ]
  79. const imagePerms = [
  80. {
  81. "name": "上传图片",
  82. "code": "0"
  83. },
  84. {
  85. "name": "图片尺寸",
  86. "code": "1"
  87. },
  88. {
  89. "name": "图片位置",
  90. "code": "2"
  91. }
  92. ]
  93. const [canvas] = useCanvas();
  94. const {canvasObject} = storeToRefs(useMainStore());
  95. const handleElement = computed(() => canvasObject.value as CanvasElement);
  96. const eleChange = () => {
  97. if (!handleElement.value) return;
  98. canvas.renderAll();
  99. }
  100. </script>
  101. <style lang="scss" scoped>
  102. .row {
  103. width: 100%;
  104. display: flex;
  105. align-items: center;
  106. margin-bottom: 10px;
  107. }
  108. .switch-wrapper {
  109. text-align: right;
  110. }
  111. .slider {
  112. flex: 3;
  113. }
  114. .slider-name {
  115. display: flex;
  116. align-items: center;
  117. }
  118. .slider-num {
  119. display: flex;
  120. align-items: center;
  121. justify-content: center;
  122. }
  123. </style>