Browse Source

Merge branch 'zhangrenyuan/feature-20250728113353-金币前端三期' into milestone-20250728-金币前端三期

zhangrenyuan/feature-20250728113353-金币前端三期
zhangrenyuan 3 weeks ago
parent
commit
e1f5cb249f
  1. 38
      src/router/index.js
  2. 11
      src/views/consume/addBeanConsume.vue
  3. 11
      src/views/consume/articleVideo.vue
  4. 136
      src/views/consume/beanConsume.vue
  5. 11
      src/views/consume/dieHardFan.vue
  6. 11
      src/views/consume/liveStream.vue

38
src/router/index.js

@ -79,6 +79,44 @@ const routes = [
}
]
},
// 金豆消耗
{
path: '/beanConsume',
name: "beanConsume",
component: () => import("../views/consume/beanConsume.vue"),
meta: {permissionId: 6},
children: [
// 金豆新增消耗
{
path: 'add',
name: "addBeanConsume",
component: () => import("../views/consume/addBeanConsume.vue"),
meta: {permissionId: 23} // 对应"提交金豆消耗"id=?
},
// 直播
{
path: 'live',
name: "liveStream",
component: () => import("../views/consume/liveStream.vue"),
meta: {permissionId: 24} // 对应"直播"id=?
},
// 铁粉
{
path: 'fan',
name: "dieHardFan",
component: () => import("../views/consume/dieHardFan.vue"),
meta: {permissionId: 25} // 对应"铁粉"id=?
},
// 文章视频
{
path: 'article',
name: "articleVideo",
component: () => import("../views/consume/articleVideo.vue"),
meta: {permissionId: 26} // 对应"文章视频"id=?
}
]
},
// 汇率管理
{

11
src/views/consume/addBeanConsume.vue

@ -0,0 +1,11 @@
<script setup lang="ts">
</script>
<template>
<div>addBeanConsume</div>
</template>
<style scoped>
</style>

11
src/views/consume/articleVideo.vue

@ -0,0 +1,11 @@
<script setup lang="ts">
</script>
<template>
<div>article videos</div>
</template>
<style scoped>
</style>

136
src/views/consume/beanConsume.vue

@ -1,11 +1,137 @@
<script setup lang="ts">
<template>
<div>
<!-- 这里放置标签切换的按钮 -->
<el-button-group>
<!-- 切换后状态显示 primary 样式否则是默认样式 -->
<el-button
:type="activeTab === 'add' ? 'primary' : 'default'"
@click="goToAdd"
class="uniform-btn"
>
新增消耗
</el-button>
<el-button
:type="activeTab === 'live' ? 'primary' : 'default'"
@click="goToLive"
class="uniform-btn"
>
直播
</el-button>
<el-button
:type="activeTab === 'fan' ? 'primary' : 'default'"
@click="goToFan"
class="uniform-btn"
>
铁粉
</el-button>
<el-button
:type="activeTab === 'article' ? 'primary' : 'default'"
@click="goToArticle"
class="uniform-btn"
>
文章/视频
</el-button>
</el-button-group>
<!-- 渲染子路由组件 -->
<router-view></router-view>
</div>
</template>
</script>
<script setup>
import {onMounted, ref, watch} from 'vue';
import {useRouter, useRoute} from 'vue-router';
import {storeToRefs} from "pinia";
import {useAdminStore} from "@/store/index.js";
<template>
const router = useRouter();//
const route = useRoute();//
// activeTab
const activeTab = ref(route.name === 'liveStream' ? 'live' : 'add');
//coinConsumeDetaildetailadd
//coinConsumeadd
const adminStore = useAdminStore();
const {menuTree} = storeToRefs(adminStore);
</template>
const goToAdd = () => {
// activeTab add
activeTab.value = 'add';
router.push({name: 'addBeanConsume'});
};
<style scoped>
const goToLive = () => {
// activeTab live
activeTab.value = 'live';
router.push({name: 'liveStream'});
};
const goToFan = () => {
// activeTab fan
activeTab.value = 'fan';
router.push({name: 'dieHardFan'});
};
const goToArticle = () => {
// activeTab article
activeTab.value = 'article';
router.push({name: 'articleVideo'});
};
//
const navigateTo = (name) => {
activeTab.value = name;
if (name === 'add') {
router.push({name: 'addBeanConsume'});
} else if (name === 'live') {
router.push({name: 'liveStream'});
} else if (name === 'fan') {
router.push({name: 'dieHardFan'});
} else if (name === 'article') {
router.push({name: 'articleVideo'});
}
};
// menuName
const hasMenuPermission = (tree, targetName) => {
for (const node of tree) {
if (node.menuName === targetName) return true;
if (node.children && hasMenuPermission(node.children, targetName)) return true;
}
return false;
};
//
const getDefaultRoute = () => {
if (!menuTree.value) return 'add';
const hasRecharge = hasMenuPermission(menuTree.value, '提交金豆消耗');
return hasRecharge ? 'add' : 'live';
};
//
watch(() => route.name, (newName) => {
if (newName === 'add' || newName === 'live') {
activeTab.value = newName;
} else if (newName === 'beanConsume') {
const defaultRoute = getDefaultRoute();
navigateTo(defaultRoute);
}
});
//
onMounted(() => {
if (route.name === 'beanConsume') {
const defaultRoute = getDefaultRoute();
navigateTo(defaultRoute);
} else {
//
if (route.name === 'add' || route.name === 'live') {
activeTab.value = route.name;
}
}
});
</script>
<style scoped>
.uniform-btn {
width: 120px;
}
</style>

11
src/views/consume/dieHardFan.vue

@ -0,0 +1,11 @@
<script setup lang="ts">
</script>
<template>
<div>die-hard fans</div>
</template>
<style scoped>
</style>

11
src/views/consume/liveStream.vue

@ -0,0 +1,11 @@
<script setup lang="ts">
</script>
<template>
<div>live stream</div>
</template>
<style scoped>
</style>
Loading…
Cancel
Save