Files
hht-tongbo-two/pages/home/home.vue

367 lines
9.2 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="zd_container">
<view class="header"><span class="page_name">首页</span></view>
<view class="zd_content">
<view class="userInfo_wrap">
<view class="userInfo_content">
<view class="userInfo">
<text v-if="userName !== ''" class="p1">{{userName}}</text>
<text class="p2">欢迎进入铜箔手持系统</text>
</view>
<view class="exit" @tap="Quit">
<view class="icon-exit"></view>
<view class="exit-text">退出</view>
</view>
</view>
</view>
<view class="zd-row relative jcflexstart tabs_wrap">
<view class="zd-col-6 tab_active" :style="{'left': (menuList1.length > 0 && menuList2.length > 0 && tab === 2) ? '25%' : '0'}">
<view class="tab_line_active"></view>
</view>
<view v-if="menuList1.length > 0" class="zd-col-6 tab_item" :class="{'tab_item_active': tab === 1}" @tap="changeTab(1)">一期</view>
<view v-if="menuList2.length > 0" class="zd-col-6 tab_item" :class="{'tab_item_active': tab === 2}" @tap="changeTab(2)">二期</view>
</view>
<view class="zd_home_wrapper">
<view class="menu-wrap">
<view class="menu-item" v-for="(e, i) in menuList" :key="i" @tap="toPage1(e)">
<image class="menu-img" :src="require('../../static/image/menu/' + e.path + '.png')" alt="">
<view class="menu-name">{{e.title}}</view>
</view>
</view>
</view>
</view>
<view class="sec_menu_wraper" :class="show ? 'popshow' : 'pophide'">
<view class="pop-title">{{title}}</view>
<view class="sec_menu_w">
<view class="sec_menu-item" :style="{'background-image': 'url(' + require('../../static/image/menu/' + icon + '.png') + ')'}" v-for="(e, i) in secM" :key="i" @click="toPage2(e)">
<view class="menu-name_inner" :class="'bgc_' + (i + 1)">{{e.title}}</view>
</view>
</view>
</view>
<view v-if="show" class="modal" @click.stop="show = false"></view>
</view>
</template>
<script>
import {allAuthority} from '@/utils/mork2.js'
import {authority} from '@/utils/getData2.js'
export default {
data() {
return {
userName: '',
rf_menu0: [],
rf_menu1: [],
menuList: [],
menuList1: [],
menuList2: [],
show: false,
secM: [],
icon: '',
title: '',
tab: this.$store.getters.navTab
};
},
created () {
if (this.$store.getters.userInfo) {
this.userName = JSON.parse(this.$store.getters.userInfo).username
}
this._allAuthority()
},
methods: {
// async _authority () {
// let res = await authority()
// if (res.code === '1') {
// if (res.result.hasOwnProperty('rf_menu0')) {
// this.menuList1 = [...res.result.rf_menu0.sonTree]
// } else {
// this.tab = 2
// }
// if (res.result.hasOwnProperty('rf_menu1')) {
// this.menuList2 = [...res.result.rf_menu1.sonTree]
// } else {
// this.tab = 1
// }
// if (this.tab === 2) {
// this.menuList = [...this.menuList2]
// } else {
// this.menuList = [...this.menuList1]
// }
// } else {
// uni.showToast({
// title: res.desc,
// icon: 'none'
// })
// }
// },
async _allAuthority () {
let res = await allAuthority()
this.rf_menu0 = res.result.rf_menu0.sonTree
this.rf_menu1 = res.result.rf_menu1.sonTree
this._authority()
},
async _authority () {
let res = await authority()
if (res.code === '1') {
if (res.result.hasOwnProperty('rf_menu0')) {
let arr = [...res.result.rf_menu0.sonTree]
let arr1 = this.rf_menu0.filter(item1 =>
arr.some(item2 => item2.title === item1.title)
)
arr1.map(e => {
let carr = []
arr.map(ele => {
if (ele.title === e.title) {
carr = ele.sonTree
}
})
let carr1 = e.sonTree.filter(item1 =>
carr.some(item2 => item2.title === item1.title)
)
e.sonTree = carr1
})
this.menuList1 = arr1
} else {
this.tab = 2
}
if (res.result.hasOwnProperty('rf_menu1')) {
let arr = [...res.result.rf_menu1.sonTree]
let arr1 = this.rf_menu1.filter(item1 =>
arr.some(item2 => item2.title === item1.title)
)
arr1.map(e => {
let carr = []
arr.map(ele => {
if (ele.title === e.title) {
carr = ele.sonTree
}
})
let carr1 = e.sonTree.filter(item1 =>
carr.some(item2 => item2.title === item1.title)
)
e.sonTree = carr1
})
this.menuList2 = arr1
} else {
this.tab = 1
}
if (this.tab === 2) {
this.menuList = [...this.menuList2]
} else {
this.menuList = [...this.menuList1]
}
} else {
uni.showToast({
title: res.desc,
icon: 'none'
})
}
},
changeTab (type) {
if (type === 1) {
this.menuList = [...this.menuList1]
this.tab = 1
} else {
this.menuList = [...this.menuList2]
this.tab = 2
}
this.$store.dispatch('setNavTab', type)
},
toPage1 (e) {
if (e.sonTree.length > 0) {
this.show = true
this.secM = e.sonTree
this.icon = e.path
this.title = e.title
}
},
toPage2 (e) {
let url = e.path
uni.redirectTo({
url: url
})
},
Quit () {
this.$store.dispatch('delUserInfo', '')
uni.redirectTo({
url: '/pages/login/login'
})
}
}
}
</script>
<style lang="stylus" scoped>
@import '../../common/style/mixin.styl';
.header
_fj(center)
position fixed
_wh(100%, calc(var(--status-bar-height) + 88rpx))
z-index 200
padding var(--status-bar-height) 20rpx 0 20rpx
background-color #f6f6f6
.page_name
_font(36rpx, 88rpx, #444,700,center)
.zd_content
padding-top calc(var(--status-bar-height) + 88rpx)
padding-bottom 20rpx
.userInfo_wrap
_wh(100%,173rpx)
padding 0 30rpx
background linear-gradient(to bottom, $red1, $red2)
border-radius 12rpx
margin-bottom 68rpx
.userInfo_content
_fj()
_wh(100%, 100%)
_bis('../../static/image/info_bg.png',auto,100%,right,bottom)
.userInfo
_fj(,flex-start,column)
.p1
_font(34rpx,1,#fff)
padding-bottom 18rpx
.p2
_font(26rpx,1,#fff)
.exit
_fj()
height 48rpx
padding 0 20rpx
border 1px solid #FF967C
border-radius 20rpx
.icon-exit
_wh(22rpx, 22rpx)
_bis('../../static/image/exit.png',22rpx)
.exit-text
_font(24rpx,48rpx,#fff,,right)
padding-left 10rpx
.zd_home_wrapper
width 100%
background-color #fff
border-radius: 0 0 12rpx 12rpx;
padding: 24rpx 14rpx;
margin-bottom: 24rpx;
overflow-y auto
box-shadow 0 4rpx 4rpx 4rpx rgba(180, 182, 186, 0.4)
.menu-wrap
_wh(100%, auto)
_fj(flex-start,flex-start,,wrap)
align-content: flex-start
.menu-item
_fj()
flex-direction column
_wh(30%, auto)
margin-bottom 40rpx
_font(26rpx, 28rpx,#e74f1a,,center)
&:nth-child(3n+2)
margin-left 5%
margin-right 5%
::v-deep .menu-img
_wh(100%, auto)
margin-bottom 16rpx
img
position relative
opacity 1
_wh(55%, auto)
background-color: #f3f5f8
box-shadow 8rpx 6rpx 10rpx 0px rgba(0,0,0,0.1)
padding 16rpx
border-radius 50%
margin 0 auto 0.2rpx
.menu-name
_font(28rpx, 30rpx, #444,,center)
.sec_menu_wraper
position fixed
bottom 0
left 0
width 100%
background-color #f4f5f5
box-shadow 0 -8px 16px 0 rgba(28,31,33,.1)
border-top-left-radius 20rpx
border-top-right-radius 20rpx
z-index 2017
transition all .3s
.modal
position fixed
bottom 0
left 0
_wh(100%, 100%)
background-color rgba(0,0,0,0.8)
z-index 2010
.sec_menu_w
width calc(100% - 76rpx)
margin 30rpx auto 60rpx auto
_fj(flex-start)
flex-wrap wrap
.sec_menu-item
_wh(30%, 120rpx)
margin-bottom 20rpx
border-radius 10rpx
background-size 40% auto
background-position right 90%
background-repeat no-repeat
&:nth-child(3n+2)
margin-left 5%
margin-right 5%
.menu-name_inner
_wh(100%, 100%)
_fj(center)
_font(28rpx, 30rpx, #fff, 700, center)
border-radius 10rpx
padding 10rpx
overflow hidden
.pop-title
margin 60rpx 38rpx 0 38rpx
_font(30rpx, 60rpx, #000,700,center)
.cancel
_wh(calc(100% - 76rpx), 100rpx)
margin 0 auto
padding 20rpx 0
overflow hidden
border-bottom 1px solid #c5c6c7
.bgc_1, .bgc_6
background linear-gradient(to right, rgba(73,102,255,0.8) 0%, rgba(117,142,255,0.8) 100%)
.bgc_2, .bgc_7
background linear-gradient(to right, rgba(254, 168, 20,0.8) 0%, rgba(255, 177, 1,0.8) 100%)
.bgc_3, .bgc_8
background linear-gradient(to right, rgba(0, 228, 153,0.8) 0%, rgba(0, 241, 197,0.8) 100%)
.bgc_4, .bgc_9
background linear-gradient(to right, rgba(162, 86, 171,0.8) 0%, rgba(183,120,190,0.8) 100%)
.bgc_5, .bgc_10
background linear-gradient(to right, rgba(146, 94, 52,0.8) 0%, rgba(162, 116, 79,0.8) 100%)
.tabs_wrap
border-radius 20rpx 20rpx 0 0
background-color #ecedef
margin-top 40rpx
.tab_item
z-index 1
_font(26rpx, 60rpx, #666,,center)
.tab_active
position absolute
bottom -4rpx
height 90rpx
border-radius 20rpx 20rpx 0 0
background-color #fff
box-shadow -4rpx -4rpx 4rpx rgba(180, 182, 186, 0.4)
// box-shadow -3px -3px 3px rgba(28,31,33,.1)
.tab_item_active
font-size 30rpx
color #000
font-weight 700
.tab_line_active
position absolute
left calc(50% - 30rpx)
bottom 0
_wh(60rpx, 6rpx)
background-color $blue
&:before
position absolute
top -6rpx
left 50%
transform translateX(-50%)
content ''
width: 0;
height: 0;
border-left: 6rpx solid transparent;
border-right: 6rpx solid transparent;
border-bottom: 6rpx solid $blue
</style>