index.vue 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <template>
  2. <RightFillPano>
  3. <ui-group borderBottom>
  4. <template #header>
  5. <Actions class="edit-header" :items="options" single />
  6. </template>
  7. </ui-group>
  8. <ui-group title="测量列表">
  9. <template #icon>
  10. <ui-icon
  11. ctrl
  12. :type="custom.showMeasures ? 'eye-s' : 'eye-n'"
  13. @click="custom.showMeasures = !custom.showMeasures"
  14. />
  15. </template>
  16. <ui-group-option>
  17. <ui-input type="text" width="100%" placeholder="搜索" v-model="keyword">
  18. <template #preIcon>
  19. <ui-icon type="search" />
  20. </template>
  21. </ui-input>
  22. </ui-group-option>
  23. <MeasureSign
  24. v-for="measure in filterMeasures"
  25. :key="measure.id"
  26. :measure="measure"
  27. :selected="selectMeasure === measure"
  28. @delete="deleteMeasure(measure)"
  29. @select="selectMeasure = measure"
  30. />
  31. </ui-group>
  32. </RightFillPano>
  33. <EditMeasure
  34. v-if="editMeasure"
  35. :measure="editMeasure"
  36. @close="editMeasure = null"
  37. @submit="measure => measures.push(measure)"
  38. />
  39. </template>
  40. <script lang="ts" setup>
  41. import MeasureSign from './sign.vue'
  42. import Actions from '@/components/actions/index.vue'
  43. import EditMeasure from './edit.vue'
  44. import { RightFillPano } from '@/layout'
  45. import { computed, ref } from 'vue';
  46. import { custom, showMeasuresStack } from '@/env'
  47. import { measures, MeasureTypeMeta, MeasureType, createMeasure, autoSaveMeasures } from '@/store'
  48. import { useViewStack } from '@/hook'
  49. import type { Measure } from '@/store'
  50. import type { ActionsItem } from '@/components/actions/index.vue'
  51. const keyword = ref('')
  52. const filterMeasures = computed(() => measures.value.filter(measure => measure.desc.includes(keyword.value)))
  53. const selectMeasure = ref<Measure | null>(null)
  54. const editMeasure = ref<Measure | null>(null)
  55. const enterCreateMeasure = (type: MeasureType) => {
  56. editMeasure.value = createMeasure({ type })
  57. }
  58. const options: ActionsItem[] = [
  59. {
  60. icon: MeasureTypeMeta[MeasureType.free].icon,
  61. text: MeasureTypeMeta[MeasureType.free].desc,
  62. action: enterCreateMeasure.bind(null, MeasureType.free)
  63. },
  64. {
  65. icon: MeasureTypeMeta[MeasureType.vertical].icon,
  66. text: MeasureTypeMeta[MeasureType.vertical].desc,
  67. action: enterCreateMeasure.bind(null, MeasureType.vertical)
  68. },
  69. {
  70. icon: MeasureTypeMeta[MeasureType.area].icon,
  71. text: MeasureTypeMeta[MeasureType.area].desc,
  72. action: enterCreateMeasure.bind(null, MeasureType.area)
  73. }
  74. ]
  75. const deleteMeasure = (measure: Measure) => {
  76. const index = measures.value.indexOf(measure)
  77. measures.value.splice(index, 1)
  78. }
  79. useViewStack(() => showMeasuresStack.push(ref(true)))
  80. useViewStack(autoSaveMeasures)
  81. </script>