文章目录
- 新增
- AttrController.java
- AttrVo.java
- AttrServiceImpl.java
- AttrAttrgroupRelationEntity.java
- AttrEntity.java
- AttrGroupEntity.java
- 查询
- AttrController.java
- AttrServiceImpl.java
- AttrRespVo.java
- 修改回显
- AttrController.java
- AttrServiceImpl.java
- 修改提交
- AttrController.java
- AttrServiceImpl.java
- baseattr.vue

新增
AttrController.java
@RestController
@RequestMapping("product/attr")
public class AttrController {@Autowiredprivate AttrService attrService;@RequestMapping("/save")public R save(@RequestBody AttrVo attrVo){attrService.saveAttr(attrVo);return R.ok();}}
AttrVo.java
package com.xd.cubemall.product.vo;import lombok.Data;@Data
public class AttrVo {private static final long serialVersionUID = 1L;private Long id;private String name;private Integer searchType;private String icon;private String valueSelect;private Integer attrType;private Long enable;private Integer categoryId;private Integer showDesc;private Long attrGroupId;
}
AttrServiceImpl.java
@Service("attrService")
public class AttrServiceImpl extends ServiceImpl<AttrDao, AttrEntity> implements AttrService {@Autowiredprivate AttrAttrgroupRelationDao attrAttrgroupRelationDao;@Overridepublic void saveAttr(AttrVo attrVo) {AttrEntity attrEntity = new AttrEntity();BeanUtils.copyProperties(attrVo, attrEntity);this.save(attrEntity);AttrAttrgroupRelationEntity attrAttrgroupRelationEntity = new AttrAttrgroupRelationEntity();attrAttrgroupRelationEntity.setAttrId(attrEntity.getId());attrAttrgroupRelationEntity.setAttrGroupId(attrVo.getAttrGroupId());attrAttrgroupRelationDao.insert(attrAttrgroupRelationEntity);}
}
AttrAttrgroupRelationEntity.java
package com.xd.cubemall.product.entity;import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;import java.io.Serializable;
import java.util.Date;
import lombok.Data;
@Data
@TableName("tb_attr_attrgroup_relation")
public class AttrAttrgroupRelationEntity implements Serializable {private static final long serialVersionUID = 1L;@TableIdprivate Long id;private Long attrId;private Long attrGroupId;private Integer attrSort;}
AttrEntity.java
package com.xd.cubemall.product.entity;import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;import java.io.Serializable;
import java.util.Date;
import lombok.Data;
@Data
@TableName("tb_attr")
public class AttrEntity implements Serializable {private static final long serialVersionUID = 1L;@TableIdprivate Long id;private String name;private Integer searchType;private String icon;private String valueSelect;private Integer attrType;private Long enable;private Integer categoryId;private Integer showDesc;}
AttrGroupEntity.java
package com.xd.cubemall.product.entity;import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;import java.io.Serializable;
import java.util.Date;
import lombok.Data;
@Data
@TableName("tb_attr_group")
public class AttrGroupEntity implements Serializable {private static final long serialVersionUID = 1L;@TableIdprivate Long id;private String name;private Integer sort;private String descript;private String icon;private Integer categoryId;@TableField(exist = false)private Long[] categoryPath;
}
查询
AttrController.java
@RestController
@RequestMapping("product/attr")
public class AttrController {@Autowiredprivate AttrService attrService;@RequestMapping("/base/list/{categoryId}")public R list(@RequestParam Map<String, Object> params,@PathVariable("categoryId") Long categoryId){PageUtils page = attrService.queryBaseAttrPage(params, categoryId);return R.ok().put("page", page);}}
AttrServiceImpl.java
@Service("attrService")
public class AttrServiceImpl extends ServiceImpl<AttrDao, AttrEntity> implements AttrService {@Autowiredprivate AttrAttrgroupRelationDao attrAttrgroupRelationDao;@Autowiredprivate AttrGroupDao attrGroupDao;@Autowiredprivate CategoryDao categoryDao;
@Override
public PageUtils queryBaseAttrPage(Map<String, Object> params, Long categoryId) { QueryWrapper<AttrEntity> queryWrapper = new QueryWrapper<>(); if (categoryId != 0) { queryWrapper.eq("category_id", categoryId); } String key = (String) params.get("key"); if (StringUtils.isEmpty(key)){ queryWrapper.and(wrapper -> { wrapper.eq("id", key).or().like("name", key); }); } IPage<AttrEntity> page = this.page( new Query<AttrEntity>().getPage(params), queryWrapper ); PageUtils pageUtils = new PageUtils(page); List<AttrEntity> records = page.getRecords(); List<AttrRespVo> respVos = records.stream().map(attrEntity -> { AttrRespVo attrRespVo = new AttrRespVo(); BeanUtils.copyProperties(attrEntity, attrRespVo); AttrAttrgroupRelationEntity attrAttrgroupRelationEntity = attrAttrgroupRelationDao.selectOne( new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id", attrEntity.getId()) ); if (attrAttrgroupRelationEntity != null) { AttrGroupEntity attrGroupEntity = attrGroupDao.selectById(attrAttrgroupRelationEntity.getAttrGroupId()); if (attrGroupEntity != null) { attrRespVo.setGroupName(attrGroupEntity.getName()); } } CategoryEntity categoryEntity = categoryDao.selectById(attrEntity.getCategoryId()); if (categoryEntity != null) { attrRespVo.setCategoryName(categoryEntity.getName()); } return attrRespVo; }).collect(Collectors.toList()); pageUtils.setList(respVos); return pageUtils;
}
}
AttrRespVo.java
package com.xd.cubemall.product.vo;import lombok.Data;@Data
public class AttrRespVo extends AttrVo{private String categoryName;private String groupName;private Long[] categoryPath;
}
修改回显
AttrController.java
@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id){AttrRespVo attrRespVo = attrService.getAttrInfo(id);return R.ok().put("attr", attrRespVo);}
AttrServiceImpl.java
import com.xd.cubemall.common.utils.PageUtils;
import com.xd.cubemall.common.utils.Query;
import com.xd.cubemall.product.dao.AttrAttrgroupRelationDao;
import com.xd.cubemall.product.dao.AttrGroupDao;
import com.xd.cubemall.product.dao.CategoryDao;
import com.xd.cubemall.product.entity.AttrAttrgroupRelationEntity;
import com.xd.cubemall.product.entity.AttrGroupEntity;
import com.xd.cubemall.product.entity.CategoryEntity;
import com.xd.cubemall.product.service.CategoryService;
import com.xd.cubemall.product.vo.AttrRespVo;
import com.xd.cubemall.product.vo.AttrVo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import com.xd.cubemall.product.dao.AttrDao;
import com.xd.cubemall.product.entity.AttrEntity;
import com.xd.cubemall.product.service.AttrService;@Service("attrService")
public class AttrServiceImpl extends ServiceImpl<AttrDao, AttrEntity> implements AttrService {@Autowiredprivate AttrAttrgroupRelationDao attrAttrgroupRelationDao;@Autowiredprivate AttrGroupDao attrGroupDao;@Autowiredprivate CategoryDao categoryDao;@Autowiredprivate CategoryService categoryService;@Overridepublic AttrRespVo getAttrInfo(Long id) {AttrRespVo attrRespVo = new AttrRespVo();AttrEntity attrEntity = this.getById(id);BeanUtils.copyProperties(attrEntity,attrRespVo);AttrAttrgroupRelationEntity attrAttrgroupRelationEntity = attrAttrgroupRelationDao.selectOne(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id",attrEntity.getId()));if (attrAttrgroupRelationEntity != null) {attrRespVo.setAttrGroupId(attrAttrgroupRelationEntity.getAttrGroupId());AttrGroupEntity attrGroupEntity = attrGroupDao.selectById(attrAttrgroupRelationEntity.getAttrGroupId());if (attrGroupEntity != null) {attrRespVo.setGroupName(attrGroupEntity.getName());}}Long[] categoryPath = categoryService.findCategoryPath(attrEntity.getCategoryId());attrRespVo.setCategoryPath(categoryPath);CategoryEntity categoryEntity = categoryDao.selectById(attrEntity.getCategoryId());if (categoryEntity != null) {attrRespVo.setCategoryName(categoryEntity.getName());}return attrRespVo;}}
修改提交
AttrController.java
@RequestMapping("/update")public R update(@RequestBody AttrVo attrVo){attrService.updateAttr(attrVo);return R.ok();}
AttrServiceImpl.java
@Overridepublic void updateAttr(AttrVo attrVo) {AttrEntity attrEntity = new AttrEntity();BeanUtils.copyProperties(attrVo,attrEntity);this.updateById(attrEntity);AttrAttrgroupRelationEntity attrAttrgroupRelationEntity = new AttrAttrgroupRelationEntity();attrAttrgroupRelationEntity.setAttrId(attrVo.getId());attrAttrgroupRelationEntity.setAttrGroupId(attrVo.getAttrGroupId());Integer count = attrAttrgroupRelationDao.selectCount(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id", attrVo.getId()));if(count > 0){attrAttrgroupRelationDao.update(attrAttrgroupRelationEntity,new UpdateWrapper<AttrAttrgroupRelationEntity>().eq("attr_id",attrVo.getId()));}else {attrAttrgroupRelationDao.insert(attrAttrgroupRelationEntity);}}
baseattr.vue
<template><el-row :gutter="20"><el-col :span="6"><category @tree-node-click="treenodeclick"></category></el-col><el-col :span="18"><div class="mod-config"><el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()"><el-form-item><el-input v-model="dataForm.key" placeholder="参数名" clearable></el-input></el-form-item><el-form-item><el-button @click="getDataList()">查询</el-button><el-button type="success" @click="getAllDataList()">查询全部</el-button><el-buttontype="primary"@click="addOrUpdateHandle()">新增</el-button><el-buttonv-if="isAuth('product:attr:delete')"type="danger"@click="deleteHandle()":disabled="dataListSelections.length <= 0">批量删除</el-button></el-form-item></el-form><el-table:data="dataList"borderv-loading="dataListLoading"@selection-change="selectionChangeHandle"style="width: 100%;"><el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column><el-table-column prop="id" header-align="center" align="center" label="id"></el-table-column><el-table-column prop="name" header-align="center" align="center" label="属性名"></el-table-column><el-table-columnv-if="attrtype == 1"prop="searchType"header-align="center"align="center"label="可检索"><template slot-scope="scope"><i class="el-icon-success" v-if="scope.row.searchType==1"></i><i class="el-icon-error" v-else></i></template></el-table-column><el-table-column prop="valueType" header-align="center" align="center" label="值类型"><template slot-scope="scope"><el-tag type="success" v-if="scope.row.valueType==0">单选</el-tag><el-tag v-else>多选</el-tag></template></el-table-column><el-table-column prop="icon" header-align="center" align="center" label="图标"></el-table-column><el-table-column prop="valueSelect" header-align="center" align="center" label="可选值"><template slot-scope="scope"><el-tooltip placement="top"><div slot="content"><span v-for="(i,index) in scope.row.valueSelect.split(';')" :key="index">{{i}}<br/></span></div><el-tag>{{scope.row.valueSelect.split(";")[0]+" ..."}}</el-tag></el-tooltip></template></el-table-column><el-table-column prop="enable" header-align="center" align="center" label="启用"><template slot-scope="scope"><i class="el-icon-success" v-if="scope.row.enable==1"></i><i class="el-icon-error" v-else></i></template></el-table-column><el-table-column prop="categoryName" header-align="center" align="center" label="所属分类"></el-table-column><el-table-columnv-if="attrtype == 1"prop="groupName"header-align="center"align="center"label="所属分组"></el-table-column><el-table-column v-if="attrtype == 1" prop="showDesc" header-align="center" align="center" label="快速展示"><template slot-scope="scope"><i class="el-icon-success" v-if="scope.row.showDesc==1"></i><i class="el-icon-error" v-else></i></template></el-table-column><el-table-columnfixed="right"header-align="center"align="center"width="150"label="操作"><template slot-scope="scope"><el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">修改</el-button><el-button type="text" size="small" @click="deleteHandle(scope.row.id)">删除</el-button></template></el-table-column></el-table><el-pagination@size-change="sizeChangeHandle"@current-change="currentChangeHandle":current-page="pageIndex":page-sizes="[10, 20, 50, 100]":page-size="pageSize":total="totalPage"layout="total, sizes, prev, pager, next, jumper"></el-pagination><!-- 弹窗, 新增 / 修改 --><add-or-update:type="attrtype"v-if="addOrUpdateVisible"ref="addOrUpdate"@refreshDataList="getDataList"></add-or-update></div></el-col></el-row>
</template><script>
//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
//例如:import 《组件名称》 from '《组件路径》';
import Category from "../common/category";
import AddOrUpdate from "./attr-add-or-update";
export default {//import引入的组件需要注入到对象中才能使用components: { Category, AddOrUpdate },props: {attrtype: {type: Number,default: 1}},data() {return {catId: 0,type: 1,dataForm: {key: ""},dataList: [],pageIndex: 1,pageSize: 10,totalPage: 0,dataListLoading: false,dataListSelections: [],addOrUpdateVisible: false};},activated() {this.getDataList();},methods: {//感知树节点被点击treenodeclick(data, node, component) {if (node.level == 3) {this.catId = data.catId;this.getDataList(); //重新查询}},getAllDataList(){this.catId = 0;this.getDataList();},// 获取数据列表getDataList() {this.dataListLoading = true;let type = this.attrtype == 0 ? "sale" : "base";this.$http({url: this.$http.adornUrl(`/product/attr/${type}/list/${this.catId}`),method: "get",params: this.$http.adornParams({page: this.pageIndex,limit: this.pageSize,key: this.dataForm.key})}).then(({ data }) => {if (data && data.code === 0) {this.dataList = data.page.list;this.totalPage = data.page.totalCount;} else {this.dataList = [];this.totalPage = 0;}this.dataListLoading = false;});},// 每页数sizeChangeHandle(val) {this.pageSize = val;this.pageIndex = 1;this.getDataList();},// 当前页currentChangeHandle(val) {this.pageIndex = val;this.getDataList();},// 多选selectionChangeHandle(val) {this.dataListSelections = val;},// 新增 / 修改addOrUpdateHandle(id) {this.addOrUpdateVisible = true;this.$nextTick(() => {this.$refs.addOrUpdate.init(id);});},// 删除deleteHandle(id) {var ids = id? [id]: this.dataListSelections.map(item => {return item.id;});this.$confirm(`确定对[id=${ids.join(",")}]进行[${id ? "删除" : "批量删除"}]操作?`,"提示",{confirmButtonText: "确定",cancelButtonText: "取消",type: "warning"}).then(() => {this.$http({url: this.$http.adornUrl("/product/attr/delete"),method: "post",data: this.$http.adornData(ids, false)}).then(({ data }) => {if (data && data.code === 0) {this.$message({message: "操作成功",type: "success",duration: 1500,onClose: () => {this.getDataList();}});} else {this.$message.error(data.msg);}});});}}
};
</script>
<style scoped>
</style>