197 lines
4.1 KiB
Vue
197 lines
4.1 KiB
Vue
<template>
|
|
<view :class="{'gray':store.isgray==1}">
|
|
<view class="nav"></view>
|
|
<view class="placeholder"></view>
|
|
<!-- <view class="drag" v-if="listorder?.length"> //20240929 yzq 注释 这部分是拖拽组件
|
|
<view class="title">
|
|
{{ listtitle}}
|
|
</view>
|
|
<l-drag :list="listorder" @change="change" :column="4" gridHeight="100px">
|
|
<template #grid="{active, content}">
|
|
<view class="inner f-col aic" :class="{'active': active}" @click="jump(content.path)">
|
|
<view class="img f-row aic">
|
|
<image :src="`../../static/office/${content.meta.icon}.png`" mode=""></image>
|
|
</view>
|
|
<view class="text">
|
|
{{content?.meta.title}}
|
|
</view>
|
|
</view>
|
|
</template>
|
|
</l-drag>
|
|
</view> -->
|
|
<view class="title f-col aic" style="padding-top: 30rpx;" v-if="!listorder?.length&&!arr?.length">
|
|
暂无权限,请联系管理员!
|
|
</view>
|
|
|
|
<view class="content">
|
|
<view class="list" v-if="arr?.length">
|
|
<view class="item" v-for="item,i in arr" :key="i">
|
|
<view class="title">
|
|
{{item.meta.title}}
|
|
</view>
|
|
<view class="info_box f-row aic">
|
|
<view class="info f-col aic" @click="jump(e.path)" v-for="e,i in item.children" :key="i">
|
|
<view class="img f-row aic">
|
|
<image :src="`../../static/office/${e.meta.icon}.png`"></image>
|
|
</view>
|
|
<view class="text">
|
|
{{e.meta.title}}
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
</template>
|
|
|
|
<script setup>
|
|
import {
|
|
ref
|
|
} from 'vue';
|
|
import {
|
|
beforeJump
|
|
} from '@/utils/index.js';
|
|
import {
|
|
onLoad
|
|
} from '@dcloudio/uni-app';
|
|
import {
|
|
getUserPermissionApi
|
|
} from '@/api/login.js';
|
|
import {
|
|
useStore
|
|
} from '@/store';
|
|
const store = useStore();
|
|
|
|
const list = new Array(7).fill(0).map((v, i) => i);
|
|
// 拖拽后新的数据
|
|
const newList = ref([])
|
|
const change = v => newList.value = v
|
|
|
|
const res = wx.getSystemInfoSync();
|
|
const statusHeight = res.statusBarHeight; //状态栏高度
|
|
const cusnavbarheight = (statusHeight + 44) + "px";
|
|
const jump = (url) => {
|
|
beforeJump(url, () => {
|
|
uni.navigateTo({
|
|
url
|
|
})
|
|
})
|
|
}
|
|
onLoad(() => {
|
|
getUserPermission()
|
|
})
|
|
const arr = ref([])
|
|
const listorder = ref([]) //拖动排序传递数据
|
|
const listtitle = ref([]) //拖动排序的title
|
|
const getUserPermission = () => {
|
|
getUserPermissionApi({
|
|
token: store.token,
|
|
type: 'mobile'
|
|
}).then((res) => {
|
|
if (res.success) {
|
|
let data = res.result.menu
|
|
data.map(item => item.children = item?.children.filter(e => e?.meta?.icon))
|
|
data = data.filter(item => item?.children?.length)
|
|
listtitle.value = data[0]?.meta?.title
|
|
// arr.value = data.slice(1, data?.length)
|
|
arr.value = data;
|
|
listorder.value = data.slice(0, 1)[0]?.children
|
|
}
|
|
}).catch((err) => {
|
|
console.log(err);
|
|
})
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.drag {
|
|
background: #FFFFFF;
|
|
box-shadow: 0rpx 2rpx 4rpx 0rpx rgba(0, 0, 0, 0.5);
|
|
border-radius: 16rpx;
|
|
margin: 24rpx 30rpx 0 30rpx;
|
|
|
|
.title {
|
|
font-size: 28rpx;
|
|
color: #333333;
|
|
padding: 30rpx 0 0 30rpx;
|
|
}
|
|
}
|
|
|
|
.inner {
|
|
image {
|
|
width: 98rpx;
|
|
height: 98rpx;
|
|
background-color: #efefef;
|
|
}
|
|
|
|
.text {
|
|
font-size: 28rpx;
|
|
color: #333333;
|
|
margin-top: 20rpx;
|
|
}
|
|
}
|
|
|
|
.placeholder {
|
|
height: v-bind(cusnavbarheight);
|
|
}
|
|
|
|
.nav {
|
|
width: calc(100% - 60rpx);
|
|
padding: 0 30rpx;
|
|
height: v-bind(cusnavbarheight);
|
|
|
|
font-size: 24rpx;
|
|
color: #FFFFFF;
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
z-index: 99;
|
|
background-image: url('../../static/my/navbg.png');
|
|
background-repeat: no-repeat;
|
|
background-size: 750rpx 458rpx;
|
|
}
|
|
|
|
.content {
|
|
padding: 0 30rpx 20rpx 30rpx;
|
|
}
|
|
|
|
.list {
|
|
margin-bottom: 24rpx;
|
|
|
|
.item {
|
|
background: #FFFFFF;
|
|
box-shadow: 0rpx 2rpx 4rpx 0rpx rgba(0, 0, 0, 0.5);
|
|
border-radius: 16rpx;
|
|
padding: 30rpx 0;
|
|
margin-top: 24rpx;
|
|
|
|
.title {
|
|
font-size: 28rpx;
|
|
color: #333333;
|
|
padding-left: 30rpx;
|
|
}
|
|
}
|
|
|
|
image {
|
|
width: 98rpx;
|
|
height: 98rpx;
|
|
}
|
|
|
|
.info_box {
|
|
flex-wrap: wrap;
|
|
|
|
.info {
|
|
margin-top: 40rpx;
|
|
width: 25%;
|
|
|
|
.text {
|
|
font-size: 28rpx;
|
|
color: #333333;
|
|
margin-top: 20rpx;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style> |