zq-perSliderMenu #103

Merged
zhangqi merged 4 commits from zq-perSliderMenu into master 3 weeks ago
  1. 2
      src/components/GuipTable.vue
  2. 14
      src/components/SetLeftMenu.vue
  3. 28
      src/main.js
  4. 106
      src/store/index.js
  5. 4
      src/style/theme/common.scss
  6. 6
      src/views/agent/payCertSetting.vue
  7. 6
      src/views/agent/payInfoSetting.vue
  8. 18
      src/views/agent/payList.vue
  9. 6
      src/views/agent/paySetting.vue

2
src/components/GuipTable.vue

@ -39,7 +39,7 @@
</el-table-column>
</template>
</el-table>
<div v-if="tableData.length === 0" class="custom-empty">
<div v-if="tableData && tableData.length === 0" class="custom-empty">
<img :src="emptyImg" alt="无数据" />
<p>暂无数据</p>
</div>

14
src/components/SetLeftMenu.vue

@ -58,8 +58,14 @@ export default {
}
},
mounted() {
this.activeFloor = this.menuList[this.curIndex]?.list?.[0]?.desc || this.menuList[this.curIndex]?.list?.[0]?.path;
this.componentsName = this.menuList[this.curIndex]?.list?.[0]?.componentsName;
let curItem = this.menuList[this.curIndex];
//
if(!curItem.list || !curItem.list.length){
this.activeFloor = curItem.path
}else{
this.activeFloor = curItem?.list?.[0]?.desc || curItem?.list?.[0]?.path;
}
this.componentsName = curItem?.list?.[0]?.componentsName;
this.$nextTick(() => {
//
this.scrollContainer = document.querySelector('.main-content') ||
@ -160,7 +166,7 @@ export default {
// }
gotoPath(item) {
let path = item.path;
this.activeFloor = null
this.activeFloor = path
if (!path) {
this.curIndex = 0;
return;
@ -185,7 +191,7 @@ export default {
setActiveCur(item1, item,index) {
this.curIndex = index;
let componentsName = item1.componentsName;
let componentsName = item1?.componentsName;
//
if(componentsName){
this.activeFloor = componentsName;

28
src/main.js

@ -19,8 +19,36 @@ import clipboard from '@/utils/dirClipBoard';
import { modernCopyToClipboard } from '@/utils/clipboard';
//登陆
import { autoLoginByToken } from '@/utils/login'
function filterByPermission(data, targetPermission) {
return data.filter(item => {
// 检查主项权限
const hasMainPermission = item.permission?.includes(targetPermission);
// 检查子项权限(如果存在list)
const hasChildPermission = item.list?.some(
child => child.permission?.includes(targetPermission)
);
return hasMainPermission || hasChildPermission;
}).map(item => {
// 深拷贝避免污染原数据
const newItem = JSON.parse(JSON.stringify(item));
// 过滤子项
if (newItem.list) {
newItem.list = newItem.list.filter(
child => child.permission?.includes(targetPermission)
);
}
return newItem;
});
}
// 复制
Vue.prototype.$copy = modernCopyToClipboard;
Vue.prototype.$filterByPermission = filterByPermission;
Vue.prototype.$loadingFn = LoadingService;
Vue.config.productionTip = false;
// 请求

106
src/store/index.js

@ -11,6 +11,83 @@ export default new Vuex.Store({
showHeader: false,
showHeaderRight: false,
menuList: [], //目录菜单
// secondMenu:{
// '1': {
// type: '1',
// name: '万方数字哈哈哈哈',
// is_select: false,
// list: [
// {
// type: '29',
// name: '万方通用版44生生世世生生世世',
// is_select: true,
// //componentsName:'1-1'
// },
// {
// type: '30',
// name: '通用说播版44',
// is_select: false,
// //componentsName:'1-2'
// },
// {
// type: '32',
// name: '本科通用版44',
// is_select: false,
// //componentsName:'1-3'
// },
// ]
// },
// '3': {
// type: '3',
// name: '万方个哥哥个',
// is_select: true,
// list: [
// {
// type: '6',
// name: '万方通用版a salads asides33',
// is_select: true,
// //componentsName:'2-2'
// },
// {
// type: '27',
// name: '通用说播版33',
// is_select: true,
// //componentsName:'2-3'
// },
// {
// type: '109',
// name: '本科通用版33',
// is_select: true,
// //componentsName:'2-4'
// },
// ]
// },
// '6': {
// type: '6',
// name: '万方',
// is_select: true,
// list: [
// {
// type: '10',
// name: '万方通用版11',
// is_select: false,
// //componentsName:'3-4'
// },
// {
// type: '11',
// name: '通用说播版11',
// is_select: true,
// //componentsName:'3-5'
// },
// {
// type: '105',
// name: '本科通用版11',
// is_select: false,
// //componentsName:'3-4'
// },
// ]
// },
// },
secondMenu:{},//第三种侧边栏 -- 可折叠、 切换显示
showBreadcrumb: false, //是否展示面包屑
breadRightText: '', //是否展示面包屑
@ -436,7 +513,8 @@ export default new Vuex.Store({
path: '/agent/payInfoSetting',
img:'site/pay.svg',
imgActive: require('@/assets/site/sitebase_active.svg'),
list: []
list: [],
permission:[0,4,11,2]
},
{
name: '钱款交易',
@ -446,17 +524,20 @@ export default new Vuex.Store({
list: [
{
name: '管理证书',
desc: 'siteMessage1'
desc: 'siteMessage1',
permission:[2]
},
{
name: '平台退款',
desc: 'siteMessage2'
desc: 'siteMessage2',
permission:[3,2]
},
{
name: '分账管理',
desc: 'siteMessage3'
desc: 'siteMessage3',
permission:[2]
},
]
],
},
{
name: '支付设置',
@ -466,15 +547,18 @@ export default new Vuex.Store({
list: [
{
name: '支付客服',
desc: 'siteMessage4'
desc: 'siteMessage4',
permission:[2]
},
{
name: '启停收款方式',
desc: 'siteMessage5'
desc: 'siteMessage5',
permission:[0,4,11,3,2],
},
{
name: '移除收款方式',
desc: 'siteMessage6'
desc: 'siteMessage6',
permission:[0,4,11,3,2],
},
]
},
@ -565,7 +649,11 @@ export default new Vuex.Store({
state.componentsName = name;
},
SET_SLIDER_MENU(state,type){
state.slidermenu = state[type]
if(typeof(type) == 'string'){
state.slidermenu = state[type]
}else{
state.slidermenu = type
}
},
SET_SECOND_MENU(state,data){
state.secondMenu = data && JSON.parse(JSON.stringify(data))

4
src/style/theme/common.scss

@ -213,6 +213,10 @@ body {
.el-table__body-wrapper::-webkit-scrollbar-thumb {
background: #c1c1c1;
border-radius: 3px;
transition: all .3s;
&:hover{
background: #6B7280;
}
}
@keyframes fadeInOut {

6
src/views/agent/payCertSetting.vue

@ -320,11 +320,13 @@ export default {
}
},
computed: {
...mapState(['pageTitle']) // VuexshowSidebar
...mapState(['pageTitle','paySettingData']) // VuexshowSidebar
},
created() {
const {payType} = this.$route.query
store.commit('SET_CUSTOMIZE', true);
store.commit('SET_SLIDER_MENU', 'paySettingData');
const data = this.$filterByPermission(this.paySettingData,Number(payType))
store.commit('SET_SLIDER_MENU', data);
},
mounted() {
store.commit('SET_PAGETITLE', '支付授权');

6
src/views/agent/payInfoSetting.vue

@ -219,11 +219,13 @@ export default {
}
},
computed: {
...mapState(['pageTitle']) // VuexshowSidebar
...mapState(['pageTitle','paySettingData']) // VuexshowSidebar
},
created() {
const {payType} = this.$route.query
store.commit('SET_CUSTOMIZE', true);
store.commit('SET_SLIDER_MENU', 'paySettingData');
const data = this.$filterByPermission(this.paySettingData,Number(payType))
store.commit('SET_SLIDER_MENU', data);
},
mounted() {
store.commit('SET_PAGETITLE', '支付授权');

18
src/views/agent/payList.vue

@ -54,7 +54,7 @@
<el-table-column label="操作" fixed="right" min-width="30px">
<template slot-scope="scope">
<div class="flex">
<el-button @click="paySetting(scope.row)" type="text">设置</el-button>
<el-button @click="paySetting(scope.row,payTypeAlipay)" type="text">设置</el-button>
</div>
</template>
</el-table-column>
@ -109,7 +109,7 @@
<el-table-column label="操作" fixed="right" min-width="30px">
<template slot-scope="scope">
<div class="flex">
<el-button @click="paySetting(scope.row)" type="text">设置</el-button>
<el-button @click="paySetting(scope.row,payTypeWeixin)" type="text">设置</el-button>
</div>
</template>
</el-table-column>
@ -161,7 +161,7 @@
<el-table-column label="操作" fixed="right" min-width="30px">
<template slot-scope="scope">
<div class="flex">
<el-button @click="paySetting(scope.row)" type="text">设置</el-button>
<el-button @click="paySetting(scope.row,payTypeTaoBao)" type="text">设置</el-button>
</div>
</template>
</el-table-column>
@ -214,7 +214,7 @@
<el-table-column label="操作" fixed="right" min-width="30px">
<template slot-scope="scope">
<div class="flex">
<el-button @click="paySetting(scope.row)" type="text">设置</el-button>
<el-button @click="paySetting(scope.row,payTypePdd)" type="text">设置</el-button>
</div>
</template>
</el-table-column>
@ -266,7 +266,7 @@
<el-table-column label="操作" fixed="right" min-width="30px">
<template slot-scope="scope">
<div class="flex">
<el-button @click="paySetting(scope.row)" type="text">设置</el-button>
<el-button @click="paySetting(scope.row,payTypeJingdong)" type="text">设置</el-button>
</div>
</template>
</el-table-column>
@ -408,6 +408,7 @@ import GuipInput from '@/components/GuipInput.vue';
import GuipSwitch from '@/components/GuipSwitch.vue';
import GuipDialog from '@/components/GuipDialog.vue';
import GuipTable from '@/components/GuipTable.vue';
import { mapState } from 'vuex';
//
const PAY_TYPE_TAOBAO = 0; //
@ -485,6 +486,7 @@ export default {
}
},
computed: {
...mapState(['paySettingData']) // VuexshowSidebar
},
mounted() {
@ -699,8 +701,10 @@ export default {
handleClick(tab, event) {
console.log(tab, event);
},
paySetting(row) {
window.open('/agent/payInfoSetting?payid='+row.payid, '_blank');
paySetting(row,payType) {
console.log(typeof(payType),'===payType');
const data = this.$filterByPermission(this.paySettingData,Number(payType))
window.open(data[0].path + '?payid='+row.payid + '&payType=' + payType, '_blank');
}
},

6
src/views/agent/paySetting.vue

@ -92,11 +92,13 @@ export default {
}
},
computed: {
...mapState(['pageTitle']) // VuexshowSidebar
...mapState(['pageTitle','paySettingData']) // VuexshowSidebar
},
created() {
const {payType} = this.$route.query
store.commit('SET_CUSTOMIZE', true);
store.commit('SET_SLIDER_MENU', 'paySettingData');
const data = this.$filterByPermission(this.paySettingData,Number(payType))
store.commit('SET_SLIDER_MENU', data);
},
mounted() {
store.commit('SET_PAGETITLE', '支付授权');

Loading…
Cancel
Save