measures.vue 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <template>
  2. <Measure
  3. v-for="measure in list.concat(baseLines)"
  4. :key="measure.id"
  5. :data="measure"
  6. @change-points="points => changePoints(measure, points)"
  7. @blur="() => active = active === measure ? null : active"
  8. @focus="() => active = measure"
  9. />
  10. <div ref="menu" @touchstart.stop class="action-menus">
  11. <ActionMenus
  12. v-if="active"
  13. :menus="activeActionMenus"
  14. dire="row"
  15. />
  16. </div>
  17. </template>
  18. <script setup lang="ts">
  19. import { list, MeasureAtom } from '@/store/measure'
  20. import { baseLines } from '@/store/baseLine'
  21. import Measure from './measure.vue'
  22. import {ref} from "vue";
  23. import ActionsPanel from "@/views/scene/covers/actions.vue";
  24. import {customMap} from "@/hook";
  25. import ActionMenus from "@/components/group-button/index.vue";
  26. import * as process from "process";
  27. const active = ref<MeasureAtom>()
  28. const getStore = (item: MeasureAtom) =>
  29. ~list.value.indexOf(item)
  30. ? list.value
  31. : ~baseLines.value.indexOf(item)
  32. ? baseLines.value
  33. : null
  34. const activeActionMenus = [
  35. {
  36. key: "delete",
  37. icon: "del",
  38. text: "删除",
  39. color: "#FF4D4F",
  40. iconColor: "#fff",
  41. onClick() {
  42. console.log('aa')
  43. const store = getStore(active.value)
  44. if (store) {
  45. store.splice(store.indexOf(active.value), 1)
  46. }
  47. active.value = null
  48. }
  49. }
  50. ]
  51. const changePoints = (measure, points) => {
  52. measure.points = points.map(point => ({...point}))
  53. }
  54. </script>
  55. <style scoped>
  56. .action-menus {
  57. position: absolute;
  58. bottom: var(--boundMargin);
  59. left: 50%;
  60. transform: translateX(-50%);
  61. display: flex;
  62. z-index: 2;
  63. .menus {
  64. position: static;
  65. }
  66. }
  67. </style>