| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | <template>  <!-- TODO-jj: 点击遮罩关闭 -->  <view>    <view v-if="data?.show === 1">      <uni-fab        ref="fabRef"        :pattern="state.pattern"        :content="state.content"        horizontal="right"        vertical="bottom"        :direction="state.direction"        @trigger="trigger"        @fabClick="fabClick"        :popMenu="true"      ></uni-fab>    </view>    <view :class="state.show ? 'float-bg' : ''" @click="onTap"></view>  </view></template><script setup>  import sheep from '@/sheep';  import { computed, reactive, ref, unref, getCurrentInstance } from 'vue';  import { onBackPress } from '@dcloudio/uni-app';  const data = computed(() => sheep.$store('app').template.basic?.floatMenu);  const state = reactive({    pattern: [],    content: [],    direction: '',    show: false,  });  const fabRef = ref(null);  const vm = getCurrentInstance();  if (data.value?.mode === 1) {    state.direction = 'vertical';  } else {    state.direction = 'horizontal';  }  data.value?.list.forEach((i) => {    if (data.value?.isText === 0) {      state.content.push({ iconPath: sheep.$url.cdn(i.src), url: i.url });    } else {      state.content.push({ iconPath: sheep.$url.cdn(i.src), text: i.title.text + '', url: i.url });    }    state.pattern.push({ color: i.title.color });  });  function trigger(e) {    sheep.$router.go(e.item.url);  }  function onTap() {    if (state.show) {      state.show = false;      vm.refs.fabRef.close();    } else {      state.show = true;      vm.refs.fabRef.open();    }  }  function fabClick() {    state.show = !state.show;  }  onBackPress(() => {    if (unref(fabRef).isShow) {      unref(fabRef).close();      return true;    } else {      return false;    }  });</script><style lang="scss" scoped>  .float-bg {    position: fixed;    left: 0;    top: 0;    z-index: 11;    width: 100%;    height: 100%;    background-color: rgba(#000000, 0.4);  }</style>
 |