Browse Source

组件更新

pull/2/head
pengda 1 month ago
parent
commit
bea80334ee
  1. 124
      src/components/super/RankingLeftMenu.vue
  2. 13
      src/router/index.js

124
src/components/super/RankingLeftMenu.vue

@ -1,101 +1,75 @@
<template> <template>
<aside class="sidebar"> <aside class="sidebar">
<ul> <ul>
<li v-for="(item, index) in menuList" :key="item.path"> <li v-for="item in menuList" :key="item.path">
<div :class="[$route.path == item.path ? 'active' : '', 'flex', $route.path == item.path ? curIndex = index : '']"> <div class="flex">
<img v-if="$route.path == item.path" :src="item.imgActive" alt=""> <img :src="item.imgActive" alt="">
<img v-else :src="item.img" alt="">
{{ item.name }} {{ item.name }}
</div> </div>
<p :class="['flex', activeFloor == item1.desc ? 'curActive' : '']" <p :class="['flex', $route.path == item1.path ? 'curActive' : '']" v-for="(item1) in item.list"
v-for="(item1) in item.list" @click="setActiveCur(item1.desc, item1)" :key="item1.name">{{ item1.name }}</p> @click="setActiveCur(item1.desc, item1)" :key="item1.name">{{ item1.name }}</p>
</li> </li>
</ul> </ul>
</aside> </aside>
</template> </template>
<script> <script>
// :class="[$route.path != item.path ? 'not-point' : '', 'flex', activeFloor == item1.desc ? 'curActive' : '']" import {mapState} from 'vuex';
import { mapState } from 'vuex';
import store from '../../store'; import store from '../../store';
export default { export default {
name: 'Sidebar', name: 'Sidebar',
props: { props: {},
// menuList: {
// type: Array,
// required: true
// },
// activeFloor:{
// type:String
// },
// curIndex:{
// type:Number
// }
},
data() { data() {
return { return {
activeFloor: null,
curIndex: 0,
scrollLock: false,
menuList: [ menuList: [
{ {
name: '总利润', name: '总利润',
img: require('@/assets/super/ranking-menu.svg'),
imgActive: require('@/assets/super/ranking-menu.svg'), imgActive: require('@/assets/super/ranking-menu.svg'),
list: [ list: [
{ {
name: '年排行', name: '年排行',
path: '/super/ranking/yearProfit', path: '/super/ranking/yearProfit',
desc: 'siteMessage1'
}, },
{ {
name: '月排行', name: '月排行',
path: '/super/ranking/monthProfit', path: '/super/ranking/monthProfit',
desc: 'siteMessage2'
}, },
] ]
}, },
{ {
name: '产品', name: '产品',
img: require('@/assets/super/ranking-menu.svg'),
imgActive: require('@/assets/super/ranking-menu.svg'), imgActive: require('@/assets/super/ranking-menu.svg'),
list: [ list: [
{ {
name: '毛利润排行', name: '毛利润排行',
path: '/super/ranking/checkProfit', path: '/super/ranking/checkProfit',
desc: 'siteMessage4'
}, },
{ {
name: '订单数排行', name: '订单数排行',
path: '/super/ranking/checkOrdernum', path: '/super/ranking/checkOrdernum',
desc: 'siteMessage5'
}, },
{ {
name: '退单数排行', name: '退单数排行',
path: '/super/ranking/checkRefund', path: '/super/ranking/checkRefund',
desc: 'siteMessage6'
}, },
] ]
}, },
{ {
name: '代理商', name: '代理商',
img: require('@/assets/super/ranking-menu.svg'),
imgActive: require('@/assets/super/ranking-menu.svg'), imgActive: require('@/assets/super/ranking-menu.svg'),
list: [ list: [
{ {
name: '毛利润排行', name: '毛利润排行',
path: '/super/ranking/agentProfit', path: '/super/ranking/agentProfit',
desc: 'siteMessage9'
}, },
{ {
name: '充值排行', name: '充值排行',
path: '/super/ranking/agentRecharge', path: '/super/ranking/agentRecharge',
desc: 'siteMessage10'
}, },
{ {
name: '新加盟', name: '新加盟',
path: '/super/ranking/agentNew', path: '/super/ranking/agentNew',
desc: 'siteMessage11'
}, },
] ]
}, },
@ -103,77 +77,29 @@ export default {
} }
}, },
mounted() { mounted() {
// console.log(this.curIndex,'this.curIndex');
this.activeFloor = this.menuList[this.curIndex]['list'][0]['desc'];
this.calculateFloorOffsets();
this.$nextTick(() => {
// console.log(this.$parent.$refs.scrollContainer, 'this.$refs.scrollContainer--');
})
this.$parent.$refs.scrollContainer.addEventListener('scroll', this.handleScroll);
}, },
created() { created() {
// console.log(this.$parent.$refs.scrollContainer,'this.$refs.sc--rollContainer--');
}, },
computed: { computed: {
...mapState(['pageTitle']) // VuexshowSidebar ...mapState(['pageTitle']) // VuexshowSidebar
}, },
beforeDestroy() { beforeDestroy() {
this.$parent.$refs.scrollContainer.removeEventListener('scroll', this.handleScroll);
}, },
methods: { methods: {
calculateFloorOffsets() { setActiveCur(dom, item) {
this.menuList.forEach(item => { if (this.$route.path != item.path) {
item.list.forEach(every => {
const el = document.getElementById(every.desc);
if (el) {
every.offsetTop = el.offsetTop;
}
})
});
},
handleScroll() {
if (this.scrollLock) return
const scrollContainer = this.$parent.$refs.scrollContainer;
const scrollHeight = scrollContainer.scrollTop;
let activeFloor = this.menuList[this.curIndex]['list'][0]['desc'];
this.menuList[this.curIndex]['list'].forEach(item => {
if (scrollHeight + 72 >= item.offsetTop) {
activeFloor = item.desc; // ID
} else {
return false; //
}
});
this.activeFloor = activeFloor; //
},
setActiveCur(dom,item) {
if(this.$route.path != item.path){
this.$router.push(item.path) this.$router.push(item.path)
store.commit('SET_PAGETITLE', item.name); store.commit('SET_PAGETITLE', item.name);
} }
setTimeout(()=>{ setTimeout(() => {
this.activeFloor = dom;
this.setHighActive(dom) this.setHighActive(dom)
},500) }, 500)
},
gotoPath(path,index) {
if(this.$route.path != path){
this.curIndex = index
this.scrollLock = false;
this.handleScroll()
//
const dom = document.getElementById('main-content')
if (dom) {
dom.scrollTop = 0
}
this.$router.push(path)
}
}, },
setHighActive(dom) { setHighActive(dom) {
this.scrollLock = true;
const ele = document.getElementById(dom) const ele = document.getElementById(dom)
if(!ele)return if (!ele) return
ele.classList.add('ceshi') ele.classList.add('ceshi')
ele.scrollIntoView({ behavior: 'smooth', block: 'start' }) ele.scrollIntoView({behavior: 'smooth', block: 'start'})
setTimeout(() => { setTimeout(() => {
ele.classList.remove('ceshi') ele.classList.remove('ceshi')
}, 1000) }, 1000)
@ -191,10 +117,6 @@ export default {
box-shadow: 0px 0px 11px 2px rgba(147, 147, 147, 0.11); box-shadow: 0px 0px 11px 2px rgba(147, 147, 147, 0.11);
} }
.ceshi {
// animation: fadeInOut 2s infinite;
}
ul { ul {
list-style: none; list-style: none;
padding: 0; padding: 0;
@ -240,18 +162,6 @@ li {
} }
} }
/* {
display: block;
padding: 8px 12px;
text-decoration: none;
color: #333;
border-radius: 4px;
} */
/*
:hover {
background: #e0e0e0;
} */
.active { .active {
font-weight: bold; font-weight: bold;
letter-spacing: 0.08em; letter-spacing: 0.08em;
@ -261,10 +171,4 @@ li {
.item-active { .item-active {
color: #006AFF; color: #006AFF;
} }
/*
.exact-active {
background: #1976d2;
color: white;
} */
</style> </style>

13
src/router/index.js

@ -121,7 +121,6 @@ const routes = [{
{ {
path: '/super/ranking', path: '/super/ranking',
name: '站点设置',
component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/Ranking.vue'), component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/Ranking.vue'),
children: [ children: [
{ {
@ -143,37 +142,37 @@ const routes = [{
}, },
{ {
path: 'checkProfit', path: 'checkProfit',
name: '毛利润排行', name: '产品毛利润排行',
component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankBatchList.vue'), component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankBatchList.vue'),
props: {pageTitle:'产品 - 毛利润排行', rank_type: 1, type: 'check_type'} props: {pageTitle:'产品 - 毛利润排行', rank_type: 1, type: 'check_type'}
}, },
{ {
path: 'checkOrdernum', path: 'checkOrdernum',
name: '订单数排行', name: '产品订单数排行',
component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankBatchList.vue'), component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankBatchList.vue'),
props: {pageTitle:'产品 - 订单数排行', rank_type: 2, type: 'check_type'} props: {pageTitle:'产品 - 订单数排行', rank_type: 2, type: 'check_type'}
}, },
{ {
path: 'checkRefund', path: 'checkRefund',
name: '退单数排行', name: '产品退单数排行',
component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankList.vue'), component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankList.vue'),
props: {pageTitle:'产品 - 退单数排行', rank_type: 3, type: 'check_type'} props: {pageTitle:'产品 - 退单数排行', rank_type: 3, type: 'check_type'}
}, },
{ {
path: 'agentProfit', path: 'agentProfit',
name: '毛利润排行', name: '代理商毛利润排行',
component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankBatchList.vue'), component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankBatchList.vue'),
props: {pageTitle:'代理商 - 毛利润排行', rank_type: 1, type: 'agent'} props: {pageTitle:'代理商 - 毛利润排行', rank_type: 1, type: 'agent'}
}, },
{ {
path: 'agentRecharge', path: 'agentRecharge',
name: '充值排行', name: '代理商充值排行',
component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankBatchList.vue'), component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankBatchList.vue'),
props: {pageTitle:'代理商 - 充值排行', rank_type: 4, type: 'agent'} props: {pageTitle:'代理商 - 充值排行', rank_type: 4, type: 'agent'}
}, },
{ {
path: 'agentNew', path: 'agentNew',
name: '新加盟', name: '代理商新加盟',
component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankDetail.vue'), component: () => import( /* webpackChunkName: "Ranking" */ '../views/super/Ranking/RankDetail.vue'),
props: {pageTitle:'代理商 - 新加盟', type: 'agentnew', showDateSelect: false} props: {pageTitle:'代理商 - 新加盟', type: 'agentnew', showDateSelect: false}
}, },

Loading…
Cancel
Save