四时宝库

程序员的知识宝库

Ruoyi-Vue商城/第三章:商品分类前后端源代码拆解

1、界面操作

系统登录

左侧菜单->商品管理->商品分类

新增:填写分类名称,分类图片,状态,排序,上级分类完,点击确认保存。

2、前端实现代码

2.1、顶部搜索栏(页面样式)

代码路径:shop/cate/index.vue

搜索栏目那里拆分为两部分,第一部分是输入搜索框,第二部分是操作按钮,包括新增,修改,删错,导出按钮功能,详细如下截图。

<div class="head-container">
  <div v-if="crud.props.searchToggle">
    <!-- 搜索 -->
    <el-input v-model="query.cateName" clearable size="small" placeholder="输入分类名称搜索" style="width: 200px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
    <rrOperation :crud="crud" />
  </div>
  <crudOperation :permission="permission" />
</div>

如上述第2行代码,判断crud.props.searchToggle是否显示,如果显示,则显示搜索输入框,否则不现实

如上述第7行代码,引入crudOperation组件。其中组件:permission是入参变量,将权限数据送入组件,组件根据权限判断是否显示增加,修改,删错,导出的按钮。如下是引入组件的声明,需要声明引入才能正常使用。

import crudOperation from '@crud/CRUD.operation'
components: { Treeselect, crudOperation, rrOperation, udOperation, picUpload, MaterialList },

components:组件是拥有一定功能多个html标签的集合体,是对html标签的封装。

2.2、菜单树列表(页面样式)

如下图,商品分类是以树的方式进行显示,包含上下级的

<el-table ref="table" v-loading="crud.loading" :tree-props="{children: 'children', hasChildren: 'hasChildren'}" :data="crud.data" row-key="id" @select="crud.selectChange" @select-all="crud.selectAllChange" @selection-change="crud.selectionChangeHandler">
  <el-table-column :selectable="checkboxT" type="selection" width="55" />
  <el-table-column v-if="columns.visible('cateName')" label="名称" prop="cateName" />
  <el-table-column v-if="columns.visible('isShow')" label="状态" align="center" prop="isShow">
    <template slot-scope="scope">
      <div>
        <el-tag v-if="scope.row.isShow === 1" :type="''">显示</el-tag>
        <el-tag v-else :type=" 'info' ">隐藏</el-tag>
      </div>
    </template>
  </el-table-column>
  <el-table-column v-if="columns.visible('sort')" label="排序" prop="sort" sortable/>
  <el-table-column v-permission="['admin','YXSTORECATEGORY_EDIT','YXSTORECATEGORY_DELETE']" label="操作" width="130px" align="center" fixed="right">
    <template slot-scope="scope">
      <udOperation
        :data="scope.row"
        :permission="permission"
        msg="确定删除吗,如果存在下级节点则一并删除,此操作不能撤销!"
      />
    </template>
  </el-table-column>
</el-table>

如上述代码第1行,使用el-table标签,显示表格

:tree-props解析:element官网提示设置tree-props为{children: ‘children’,hasChildren: ‘hasChildren’},data数据需要设置children和hasChildren属性,row-key也绑定了数据的唯一值变量id

在el-table中,支持树类型的数据的显示。当 row 中包含 children 字段时,被视为树形数据。渲染树形数据时,必须要指定 row-key。支持子节点数据异步加载。

设置 Table 的 lazy 属性为 true 与加载函数 load 。通过指定 row 中的 hasChildren 字段来指定哪些行是包含子节点。children 与 hasChildren 都可以通过 tree-props 配置。

default-expand-all属性表示默认展开,不需要展开可以删除。row-key="id" 和 row里面的属性有children字段(即数据里面需要有children字段) 是必须的,:tree-props="{children: ‘children’,hasChildren: ‘hasChildren’}可有可无。

如果不是懒加载的话,后端不要设置hasChildren 这个属性,要不然树形不能显示;

如果是懒加载,则需要设置hasChildren字段。

2.3、数据来源(获取数据事件)

如上述,已经将界面的元素定义好,现在需要动态获取数据。

系统架构封装了CRUD的方法,在页面加载的时候进行操作。

// crud交由presenter持有
const defaultCrud = CRUD({ title: '分类', url: 'api/yxStoreCategory', sort: 'sort,desc', crudMethod: { ...crudDept }})

其中URL就是请求后台的接口路径

crudMethod 请求的方法对应crudDept,对应引入的api如下

import crudDept from '@/api/yxStoreCategory'

具体api代码如下

export function getCates(params) {
  return request({
    url: 'api/yxStoreCategory',
    method: 'get',
    params
  })
}

2、java的api实现代码

代码目录:


@Log("查询商品分类")
@ApiOperation(value = "查询商品分类")
@GetMapping(value = "/yxStoreCategory")
@PreAuthorize("hasAnyRole('admin','YXSTORECATEGORY_ALL','YXSTORECATEGORY_SELECT')")
public ResponseEntity getYxStoreCategorys(YxStoreCategoryQueryCriteria criteria, Pageable pageable){
    List<YxStoreCategoryDto> categoryDTOList = yxStoreCategoryService.queryAll(criteria);
    return new ResponseEntity<>(yxStoreCategoryService.buildTree(categoryDTOList),HttpStatus.OK);
}

如上述第4行代码,对外提供restfule接口,提供get的方法,接口方法为yxStoreCategory

如上述第5行代码,@PreAuthorize注解,判断当前登录用户是否拥有权限。

如上述第6行代码,
YxStoreCategoryQueryCriteria criteria 将前端请求的json参数,转换存入criteria对象。Pageable pageable是分页处理

如上述第7行,执行查询sql语句。sql查询使用mybatis-plus封装的selectList。

List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);

计划

1、ruoyi-flowable-plus工作流拆解

2、ruoyi-flowable-plus如何快速开发

3、电商项目源代码拆解

4、JEECG低代码开发平台

请关注我,本星球会持续推出更多的开源项目代码解析,如有更好的意见请留言回复或者私信。运行不起来可以联系我

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接