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>
|