Vue项目功能模块的业务逻辑

一.什么是业务逻辑

我们可以先简单理解一下业务逻辑。不同的项目有不同的功能,不同的功能需要不同的实现,实现这些核心功能的代码就叫业务逻辑。所以说业务逻辑是指一个实体单元为了向另一个实体单元提供服务,应该具备的规则与流程。

二.Vue项目中的模块业务

1. 权限管理功能模块的业务逻辑

  1. 首先是页面框架。明确这个权限管理模块分为三个页面,分别是员工管理,角色管理,菜单管理。
    (1)实现员工管理页面
    01 获取员工的数据(其中有员工列表和搜索框),定义一个获取员工列表以及删除员工管理的api方法,可以多次调用
    02 渲染员工管理页面的数据
    其中user_group 对应的是角色
    在这里插入图片描述(2)实现角色管理页面
    01 定义角色管理的api
    02 定义角色管理的路由
    03 渲染角色
    permission 对应的该角色的权限
    在这里插入图片描述

    (3)实现菜单管理页面
    01 定义菜单管理的api
    02 定义菜单管理的路由
    03 渲染菜单
    其中id 与角色的permission对应在这里插入图片描述

  2. 菜单的渲染是如何实现的
    01 用户登录,获取token
    02 请求用户的菜单(带上token)
    03 存储在vuex中存储菜单
    04 admin页面根据vuex中store的menus来动态的渲染菜单

  3. 动态路由(实现了动态路由,也就实现动态权限菜单)
    01 获取后端给到菜单信息
    02 把菜单映射为路由配置
    03 通过router.addRoute() 动态添加路由

  4. 如何动态的把菜单,路由,角色联动(重要)
    01 编辑员工时候,能够指定不同的角色

在这里插入图片描述

02 编辑角色时候,可以给每个角色不同的菜单与权限

在这里插入图片描述

03 对所有的菜单进行增删改查

在这里插入图片描述

04 用户登录时候
(1)后端通过token来识别当前用户拿到用的角色,通过角色拿到用户的权限与菜单
(2)前端把菜单存储在vuex里面并渲染出来
(3)前端根据菜单通过addRoute方法动态的更新路由

2. 订单管理模块的业务逻辑(子菜单无限分类

订单管理分为订单列表,订单设置,退款申请等,他与上一个的不同就是,他的侧边栏是无限分类的,可以无限点开,点击一项展开一项。下图就是一个子菜单无限分类的简单案例。
在这里插入图片描述

  1. 将菜单存储在vuex
    01 定义permission权限模块,里面设置api等方法
    02 在adminVue获取菜单
    03 在侧边栏渲染菜单
  2. 新创建一个subMenu组件,形成递归嵌套。然后在subMenu组件引用subMenu实现无限分类
  3. 根据用户自动切换菜单
    服务器是根据用户传递的token判断当前用户的

三. 实现上述业务逻辑的代码

  1. 定义方法的api
// 导入request
import request from '@/utils/request.js'
// 导出登录方法
export function GetStaffList(data){
    return request.get("/api/user",{params:data})
}
export function DelStaff(id){
    return request.delete("/api/user/"+id)
}

// 导出获取用户组件的角色
export function GetUserGroup(data){
    return request.get("/api/yp/user_group",{params:data})
}

// 定义菜单管理的api
export function GetMenu(data){
    return request.get("/api/yp/permission",{params:data})
}

// 获取当前用户的菜单
export function GetUserMenu(data){
    return request.get("/api/yp/user_permission",{params:data})
}

  1. 子菜单无限分类的组件代码
<template>
    <template v-for="item in children" :key="item.id">
            <!-- 没有子菜单就是菜单项 -->
            <el-sub-menu v-if="item.children" :index="item.path">
                <template #title>                    
                    <span>{{item.name}}</span>
                </template>  
                <!-- 形成了递归嵌套 -->
                <SubMenu :children="item.children"></SubMenu>          
            </el-sub-menu>
            <el-menu-item :index="item.path" v-else>
            <span>{{item.name}}</span>
            </el-menu-item>
    </template>
</template>
<script>
export default {
    // 默认有子选项children 默认值是[]
    props:{
        children:{type:Array,default:()=>[]}
    }
}
</script>
  1. 员工管理的代码
<template>
    <div>
        <h1>员工管理</h1>
        <el-form :inline="true"  ref="searchRef"   :model="searchObj"  >
            <el-form-item label="id" prop="id">
                <el-input v-model="searchObj.id"  />
            </el-form-item>           
            <el-form-item>
                <el-button type="primary" @click="getStaffList">查询</el-button>
                <el-button type="primary" @click="resetSearch()">重置</el-button>
            </el-form-item>
        </el-form>
        <el-table :data="staffList" style="width: 100%">
            <el-table-column prop="id" label="账号" width="180" />
            <el-table-column prop="name" label="真实姓名" width="180" />
            <el-table-column prop="shop" label="所属门店" />
            <el-table-column prop="tel" label="手机号" />
            <el-table-column prop="user_group" label="角色id" />
            <el-table-column prop="gname" label="角色" />
            <el-table-column prop="state" label="状态" />
            <el-table-column prop="lastTime" label="最后登录时间" />
            <el-table-column prop="address" label="操作">
                <template #default="scope">
                    <span>编辑</span> <span  @click="delStaff(scope.row)">删除</span>
                </template>
            </el-table-column>
        </el-table>
    </div>
</template>
<script setup>
// 导入api方法
import { GetStaffList,DelStaff} from '@/api/permission.js'
// 导入响应式创建方法
import { ref } from 'vue'
// 定义引用对象
const searchRef = ref();
// 定义搜索条件
var searchObj = ref({id:'',order:'asc'})
// 定义员工列表
var staffList = ref([]);
// 执行获取员工列表方法
getStaffList();
// 定义获取员工列表的方法(需要多次使用)
function getStaffList() {
    // 使用api方法
    GetStaffList(searchObj.value)
        .then(res => {
            if (res.data.code == 0) {
                staffList.value = res.data.data;
            } else {
                alert(res.data.msg || "员工列表获取失败")
            }

        })
}
// 重置
function resetSearch(){
    searchRef.value.resetFields()
    getStaffList();
}
// type导入不用
// import type { FormInstance, FormRules } from 'element-plus'
// 带泛型的去掉泛型<> 对象或数组的类型
// const ruleFormRef = ref<FormInstance>()   =>  const ruleFormRef = ref()
// 带类型的函数去掉类型  :代表参数的类型
/* 
const resetForm = (formEl: FormInstance | undefined) => {
  if (!formEl) return
  formEl.resetFields()
}
=>    */  
/* 
const resetForm = (formEl) => {
  if (!formEl) return
  formEl.resetFields()
}
*/  
function delStaff(row){
    // 正常情况应该会有个弹框
    DelStaff(row.id)
    .then(res=>{
        if(res.data.code==0){
            getStaffList() //重新获取员工列表
        }else{
            alert(res.data.msg)
        }
    })
}
</script>
  1. 角色管理的代码
<template>
    <div>
        角色管理
        <el-table :data="userGroup.reverse()" style="width: 100%">
            <el-table-column prop="id" label="id" />
            <el-table-column prop="name" label="名称"  />
            <el-table-column prop="ranges" label="范围" />
            <el-table-column prop="description" label="描述" width="480"  />
            <el-table-column prop="permission" label="权限" width="480"  />
            <el-table-column prop="address" label="操作">
                <template #default="scope">
                    <span  @click="editGroup(scope.row)">操作</span>
                </template>
            </el-table-column>
        </el-table>
    </div>
</template>
<script setup>
// 导入获取用组的api
import {GetUserGroup} from '@/api/permission'
// 导入引用对象
import {ref} from 'vue'
// 定义用户组件数据
const userGroup = ref([]);
// 获取用户组
GetUserGroup({size:30,order:'asc'})
.then(res=>{
    if(res.data.code==0){
        // 更新用户组信息
        userGroup.value = res.data.data;
    }else{
        alert(res.data.msg)
    }
})
// 定义操作api
function editGroup(row){
    console.log(row)
}
</script>
  1. 菜单管理的代码
<template>
    <div>
        菜单管理
        <!-- 有children的时候默认会有子表格 -->
        <el-table :data="menuList" style="width: 100%"  
         row-key="id">
            <el-table-column type="selection" width="55" />
            <el-table-column prop="id" label="id" />
            <el-table-column prop="name" label="名称"  />
            <el-table-column prop="icon" label="图表" />
            <el-table-column prop="path" label="URL" />
            <el-table-column prop="des" label="描述" />
            <el-table-column prop="component" label="组件" />
        </el-table>
    </div>
</template>
<script setup>
// 获取菜单api
import  {GetMenu} from '@/api/permission'
import {ref} from 'vue';
const menuList = ref([]);
GetMenu()
.then(res=>{
    if(res.data.code==0){
        menuList.value = res.data.list;
    }else{
        alert("菜单获取失败");
    }
})
</script>

以上就是个人vue项目功能模块的业务逻辑的简单介绍,希望对你有所帮助哈。有问题欢迎大家讨论,一起加油哦。在这里插入图片描述

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java项目中,常见的业务逻辑代码括但不限于以下几个方面: 1. 数据库操作:包括数据库的连接、查询、入、更新、删除等操作。可以使用JDBC或者ORM框架(如Hibernate、MyBatis)来实现。 2. 业务逻辑处理:根据具体的业务需求,进行数据处理、计算、验证等操作。这部分代码通常包括条件判断、循环、数据转换等。 3. 事务管理:对于需要保证数据一致性的操作,需要使用事务管理来确保操作的原子性、一致性、隔离性和持久性。可以使用Spring框架提供的事务管理功能。 4. 异常处理:对于可能出现的异常情况,需要进行合理的异常处理。可以使用try-catch语句块来捕获异常,并进行相应的处理或者抛出自定义异常。 5. 日志记录:在业务逻辑代码中,通常需要记录一些关键信息或者错误信息,以便后续排查问题。可以使用日志框架(如Log4j、Logback)来记录日志。 6. 接口调用:如果项目需要与其他系统进行交互,可能需要编写接口调用的代码。可以使用HTTP客户端(如HttpClient)或者WebService框架(如CXF)来实现接口调用。 7. 定时任务:对于需要定时执行的任务,可以使用定时任务框架(如Quartz)来实现。定时任务可以用于数据同步、数据清理等场景。 8. 缓存处理:为了提高系统性能,可以使用缓存来存储一些频繁访问的数据。常见的缓存框架有Redis、Ehcache等。 以上是常见的业务逻辑代码,具体的业务逻辑代码会根据项目需求和业务场景的不同而有所差异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值