Browse Source

Merge branch 'milestone-20250711-金币前端二期' of http://39.101.133.168:8807/huangqizhen/gold-vue into milestone-20250711-金币前端二期

zhangrenyuan/feature-20250714163943-金币前端二期
ZhangYong 2 weeks ago
parent
commit
22383fe807
  1. 179
      src/views/home.vue

179
src/views/home.vue

@ -1,14 +1,76 @@
<script setup> <script setup>
// //
import {onMounted, ref} from 'vue' import {onMounted, ref} from 'vue'
import {useRouter} from 'vue-router'
import {useRoute, useRouter} from 'vue-router'
import {ElMessage} from 'element-plus' import {ElMessage} from 'element-plus'
import API from '@/util/http' import API from '@/util/http'
import dmmn from '../assets/link.png' import dmmn from '../assets/link.png'
import moment from 'moment' import moment from 'moment'
import ChangePassword from '@/components/changePassword.vue' import ChangePassword from '@/components/changePassword.vue'
//
const route = useRoute()
//
const menuList = ref([])
/**
* 调用 /menu/tree 接口获取菜单数据
*/
const fetchMenuTree = async function() {
try {
const result = await API({ url: '/menu/tree', data: {id: adminData.value.roleId} })
return result.data //
} catch (error) {
console.error('菜单数据请求失败:', error)
return { code: 500, msg: '获取菜单失败' }
}
}
function filterMenu(menuList) {
return menuList
.filter(menu => menu.menuType !== 4)
.map(menu => ({
...menu,
children: menu.children ? filterMenu(menu.children) : []
}))
.sort((a, b) => a.priority - b.priority); // id
}
/**
* 映射菜单名称到路由路径
*/
const getRoutePath = (menu) => {
// keymenuNamevalue
const routeMap = {
'工作台': '/workspace',
'财务审核': '/rechargeAudit',
'充值审核': '/rechargeAudit',
'退款审核': '/refundAudit',
'汇率管理': '/rate',
'消耗管理': '/coinConsume',
'消耗页面': '/coinConsume',
'权限管理': '/permissions',
'充值管理': '/coinRecharge',
'充值页面': '/coinRecharge',
'退款管理': '/coinRefund',
'退款页面': '/coinRefund',
'客户账户明细': '/usergold',
};
// 使id
return routeMap[menu.menuName] || '/workspace'
}
const router = useRouter() const router = useRouter()
const imgrule1 = dmmn const imgrule1 = dmmn
@ -134,8 +196,9 @@ onMounted(async function () {
// //
await getAdminData() await getAdminData()
// //
// await getExportList()
const menus = await fetchMenuTree()
menuList.value = filterMenu(menus)
}) })
// //
const changeDataByArea = (item) => { const changeDataByArea = (item) => {
@ -176,73 +239,61 @@ const openChangePassword = () => {
</div> </div>
<el-card style="min-height: 90%;"> <el-card style="min-height: 90%;">
<el-menu :router="true" class="el-menu-vertical-demo">
<el-menu-item index="/workspace">
<el-icon>
<Folder />
</el-icon>
<span>工作台</span>
</el-menu-item>
<el-sub-menu index="2">
<template #title>
<el-icon>
<Folder />
</el-icon>
<span>财务审核</span>
</template>
<el-menu-item index="/rechargeAudit">充值审核</el-menu-item>
<el-menu-item index="/refundAudit">退款审核</el-menu-item>
</el-sub-menu>
<el-menu-item index="/rate">
<el-icon>
<Folder />
</el-icon>
<span>汇率管理</span>
</el-menu-item>
<el-sub-menu index="4">
<el-menu
:router="true"
class="el-menu-vertical-demo"
:default-active="$route.path"
>
<!-- 递归渲染菜单层级 -->
<template v-for="menu in menuList" :key="menu.id">
<!-- 有子菜单的父级菜单menuType=2 且存在children -->
<el-sub-menu
v-if="menu.children && menu.children.length > 0"
:index="menu.id.toString()"
>
<template #title> <template #title>
<el-icon>
<Folder />
</el-icon>
<span>充值管理</span>
<el-icon><Folder /></el-icon>
<span>{{ menu.menuName }}</span>
</template> </template>
<el-menu-item index="/coinRecharge">金币充值</el-menu-item>
<!-- <el-menu-item index="/beanRecharge">金豆充值</el-menu-item> -->
</el-sub-menu>
<el-sub-menu index="6">
<template #title>
<el-icon>
<Folder />
</el-icon>
<span>消耗管理</span>
</template>
<el-menu-item index="/coinConsume">金币消耗</el-menu-item>
<!-- <el-menu-item index="/beanConsume">金豆消耗</el-menu-item> -->
</el-sub-menu>
<el-sub-menu index="8">
<template #title>
<el-icon>
<Folder />
</el-icon>
<span>退款管理</span>
<!-- 子菜单 -->
<template v-for="child in menu.children" :key="child.id">
<!-- 子菜单为叶子节点无children -->
<el-menu-item
v-if="!child.children || child.children.length === 0"
:index="getRoutePath(child)"
>
<span>{{ child.menuName }}</span>
</el-menu-item>
<!-- 子菜单有下级 -->
<el-sub-menu
v-else
:index="child.id.toString()"
>
<template #title>
<span>{{ child.menuName }}</span>
</template>
<!-- 嵌归 下一级-->
<template v-for="grandChild in child.children" :key="grandChild.id">
<el-menu-item :index="getRoutePath(grandChild)">
<span>{{ grandChild.menuName }}</span>
</el-menu-item>
</template>
</el-sub-menu>
</template> </template>
<el-menu-item index="/coinRefund">金币退款</el-menu-item>
<!-- <el-menu-item index="/beanRefund">金豆退款</el-menu-item> -->
</el-sub-menu> </el-sub-menu>
<el-menu-item index="/usergold">
<el-icon>
<Folder />
</el-icon>
<span>客户账户明细</span>
</el-menu-item>
<el-menu-item index="/permissions">
<el-icon>
<Folder />
</el-icon>
<span>权限管理</span>
<!-- 无子菜单的一级菜单 -->
<el-menu-item
v-else
:index="getRoutePath(menu)"
>
<el-icon><Folder /></el-icon>
<span>{{ menu.menuName }}</span>
</el-menu-item> </el-menu-item>
</template>
</el-menu> </el-menu>
</el-card> </el-card>
</el-aside> </el-aside>
<el-container style="margin-left: 15%; min-width: 180px"> <el-container style="margin-left: 15%; min-width: 180px">

Loading…
Cancel
Save