compass.vue 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <template>
  2. <el-form-item label="角度:">
  3. <!-- <el-slider
  4. style="width: 100px"
  5. :model-value="value"
  6. :format-tooltip="(val) => `${val}°`"
  7. @update:model-value="val => setRotate(val as number, false)"
  8. :min="0"
  9. @change="() => setRotate(value as number, true)"
  10. :max="360"
  11. /> -->
  12. <div class="last-layout">
  13. <el-input-number
  14. :model-value="value || 0"
  15. placeholder="0"
  16. step-strictly
  17. :step="1"
  18. @update:model-value="val => setRotate(val as number, false)"
  19. :min="0"
  20. :max="360"
  21. >
  22. </el-input-number>
  23. <span class="last-t">°</span>
  24. </div>
  25. </el-form-item>
  26. </template>
  27. <script setup lang="ts">
  28. import { ref } from "vue";
  29. import { BoardShape } from "../board";
  30. const props = defineProps<{ shape: BoardShape }>();
  31. const emit = defineEmits<{ (e: "blur"): void }>();
  32. const value = ref<number>(props.shape.data.rotate);
  33. const setRotate = (edg: number, save: boolean) => {
  34. edg = parseInt((edg || 0).toString());
  35. if (edg !== value.value) {
  36. value.value = edg;
  37. props.shape.setRotate(edg, true);
  38. }
  39. };
  40. </script>
  41. <style lang="scss" scoped>
  42. .last-layout {
  43. position: relative;
  44. }
  45. .last-t {
  46. z-index: 1;
  47. position: absolute;
  48. transform: translateX(-40px);
  49. }
  50. </style>