From ae99a4a7654a6a3d8fd8343c22c415930f0a18cb Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Thu, 09 Feb 2023 11:15:15 +0800 Subject: [PATCH] 后台运费模板功能 --- src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallGoodsService.java | 186 ++++++++ src/main/java/cc/mrbird/febs/mall/mapper/MallCarriageRuleMapper.java | 11 src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java | 6 src/main/resources/mapper/modules/MallCarriageRuleMapper.xml | 19 src/main/java/cc/mrbird/febs/mall/dto/AdminCarriageRuleAddDto.java | 30 + src/main/java/cc/mrbird/febs/mall/controller/AdminMallGoodsController.java | 43 + src/main/java/cc/mrbird/febs/mall/mapper/MallCarriageRuleInfoMapper.java | 13 src/main/resources/mapper/modules/MallCarriageRuleInfoMapper.xml | 25 + src/main/java/cc/mrbird/febs/mall/entity/MallCarriageRule.java | 16 src/main/java/cc/mrbird/febs/mall/vo/AdminMallCarriageRuleInfoVo.java | 22 src/main/java/cc/mrbird/febs/mall/vo/AdminMallCarriageRuleVo.java | 29 + src/main/java/cc/mrbird/febs/mall/entity/MallCarriageRuleInfo.java | 31 + src/main/resources/mapper/modules/MallGoodsMapper.xml | 11 src/main/resources/templates/febs/views/modules/goods/carriageRuleAdd.html | 294 ++++++++++++ src/main/java/cc/mrbird/febs/mall/service/IAdminMallGoodsService.java | 15 src/main/resources/templates/febs/views/modules/mallMember/mallAgentRecord.html | 51 +- src/main/resources/templates/febs/views/modules/goods/carriageRuleUpdate.html | 327 ++++++++++++++ src/main/java/cc/mrbird/febs/mall/dto/AdminCarriageRuleUpdateDto.java | 33 + src/main/java/cc/mrbird/febs/mall/controller/ViewMallGoodsController.java | 29 + src/main/java/cc/mrbird/febs/mall/dto/AdminCarriageRuleAddInfoDto.java | 27 + src/main/resources/templates/febs/views/modules/goods/carriageRuleList.html | 154 ++++++ src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java | 3 22 files changed, 1,344 insertions(+), 31 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallGoodsController.java b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallGoodsController.java index 567ff86..6916488 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallGoodsController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallGoodsController.java @@ -7,11 +7,9 @@ import cc.mrbird.febs.common.entity.QueryRequest; import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; import cc.mrbird.febs.common.utils.OssUtils; -import cc.mrbird.febs.mall.dto.AddMallGoodsDto; -import cc.mrbird.febs.mall.dto.MallGoodsUpdateDto; -import cc.mrbird.febs.mall.dto.RankAwardUpdateDto; -import cc.mrbird.febs.mall.dto.UpMallGoodsDto; +import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.entity.DataDictionaryCustom; +import cc.mrbird.febs.mall.entity.MallCarriageRule; import cc.mrbird.febs.mall.entity.MallGoods; import cc.mrbird.febs.mall.entity.MallGoodsCategory; import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper; @@ -210,5 +208,42 @@ return adminMallGoodsService.deliveryHomeUpdate(adminHomeDeliverySettingVo); } + /** + * 运费模板列表 + */ + @GetMapping("carriageRuleList") + public FebsResponse carriageRuleList(MallCarriageRule mallCarriageRule, QueryRequest request) { + Map<String, Object> data = getDataTable(adminMallGoodsService.getMallCarriageRuleListInPage(mallCarriageRule, request)); + return new FebsResponse().success().data(data); + } + + /** + * 运费模板列表-删除 + */ + @GetMapping("carriageRuleDel/{id}") + @ControllerEndpoint(operation = "运费模板列表-删除", exceptionMessage = "操作失败") + public FebsResponse carriageRuleDel(@NotNull(message = "{required}") @PathVariable Long id) { + return adminMallGoodsService.carriageRuleDelById(id); + } + + /** + * 运费模板列表-新增 + */ + @PostMapping("carriageRuleAdd") + @ControllerEndpoint(operation = " 商品-新增", exceptionMessage = "操作失败") + public FebsResponse carriageRuleAdd(@RequestBody @Valid AdminCarriageRuleAddDto adminCarriageRuleAddDto) { + return adminMallGoodsService.carriageRuleAdd(adminCarriageRuleAddDto); + } + + + /** + * 运费模板列表-更新 + */ + @PostMapping("carriageRuleUpdate") + @ControllerEndpoint(operation = "运费模板列表-更新", exceptionMessage = "操作失败") + public FebsResponse carriageRuleUpdate(@RequestBody @Valid AdminCarriageRuleUpdateDto adminCarriageRuleUpdateDto) { + return adminMallGoodsService.carriageRuleUpdate(adminCarriageRuleUpdateDto); + } + } diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ViewMallGoodsController.java b/src/main/java/cc/mrbird/febs/mall/controller/ViewMallGoodsController.java index 28f8fc8..0e08f13 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ViewMallGoodsController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/ViewMallGoodsController.java @@ -139,4 +139,33 @@ model.addAttribute("homeDeliverySetting", adminHomeDeliverySettingVo); return FebsUtil.view("modules/goods/deliveryHomeUpdate"); } + + /** + * 运费模板列表 + */ + @GetMapping("carriageRuleList") + @RequiresPermissions("carriageRuleList:view") + public String carriageRuleList() { + return FebsUtil.view("modules/goods/carriageRuleList"); + } + + /** + * 运费模板-新增 + */ + @GetMapping("carriageRuleAdd") + @RequiresPermissions("carriageRuleAdd:add") + public String carriageRuleAdd() { + return FebsUtil.view("modules/goods/carriageRuleAdd"); + } + + /** + * 运费模板-编辑-详情 + */ + @GetMapping("carriageRuleUpdate/{id}") + @RequiresPermissions("carriageRuleUpdate:update") + public String carriageRuleUpdate(@PathVariable long id, Model model) { + AdminMallCarriageRuleVo adminMallCarriageRuleVo = mallGoodsService.selectCarriageRuleByRuleId(id); + model.addAttribute("carriageRule", adminMallCarriageRuleVo); + return FebsUtil.view("modules/goods/carriageRuleUpdate"); + } } diff --git a/src/main/java/cc/mrbird/febs/mall/dto/AdminCarriageRuleAddDto.java b/src/main/java/cc/mrbird/febs/mall/dto/AdminCarriageRuleAddDto.java new file mode 100644 index 0000000..41a6bdb --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/dto/AdminCarriageRuleAddDto.java @@ -0,0 +1,30 @@ +package cc.mrbird.febs.mall.dto; + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.List; + +@Data +@ApiModel(value = "AdminCarriageRuleAddDto", description = "运费模板参数类") +public class AdminCarriageRuleAddDto { + //名称 + @NotBlank(message = "标题不能为空") + private String ruleName; + + @NotNull(message = "计价方式不能为空") + private Integer valuationType; + //基本数量 + private BigDecimal basicCntDefault; + //基本价格 + private BigDecimal basicPriceDefault; + //超出的部分的基数数量 + private BigDecimal moreCntDefault; + //超出的部分的基数的价格 + private BigDecimal morePriceDefault; + + private List<AdminCarriageRuleAddInfoDto> adminCarriageRuleAddInfoDtos; +} diff --git a/src/main/java/cc/mrbird/febs/mall/dto/AdminCarriageRuleAddInfoDto.java b/src/main/java/cc/mrbird/febs/mall/dto/AdminCarriageRuleAddInfoDto.java new file mode 100644 index 0000000..c7ea10d --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/dto/AdminCarriageRuleAddInfoDto.java @@ -0,0 +1,27 @@ +package cc.mrbird.febs.mall.dto; + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@ApiModel(value = "AdminCarriageRuleAddInfoDto", description = "运费模板子表参数类") +public class AdminCarriageRuleAddInfoDto { + //模板id + private Long ruleId; + //计价方式(1:按件算 2:按重量算) + private Integer valuationType; + //计价单位(件,KG) + private String valuationUnit; + //指定区域(没有指定区域,则为默认) + private String areaAddress; + //基本数量 + private BigDecimal basicCnt; + //基本价格 + private BigDecimal basicPrice; + //超出的部分的基数数量 + private BigDecimal moreCnt; + //超出的部分的基数的价格 + private BigDecimal morePrice; +} diff --git a/src/main/java/cc/mrbird/febs/mall/dto/AdminCarriageRuleUpdateDto.java b/src/main/java/cc/mrbird/febs/mall/dto/AdminCarriageRuleUpdateDto.java new file mode 100644 index 0000000..83d270a --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/dto/AdminCarriageRuleUpdateDto.java @@ -0,0 +1,33 @@ +package cc.mrbird.febs.mall.dto; + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.List; + +@Data +@ApiModel(value = "AdminCarriageRuleUpdateDto", description = "运费模板更新参数类") +public class AdminCarriageRuleUpdateDto { + + private Long id; + //名称 + @NotBlank(message = "标题不能为空") + private String ruleName; + + @NotNull(message = "计价方式不能为空") + private Integer valuationType; + //基本数量 + private BigDecimal basicCntDefault; + //基本价格 + private BigDecimal basicPriceDefault; + //超出的部分的基数数量 + private BigDecimal moreCntDefault; + //超出的部分的基数的价格 + private BigDecimal morePriceDefault; + + private List<AdminCarriageRuleAddInfoDto> adminCarriageRuleAddInfoDtos; + +} diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallCarriageRule.java b/src/main/java/cc/mrbird/febs/mall/entity/MallCarriageRule.java new file mode 100644 index 0000000..f184250 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallCarriageRule.java @@ -0,0 +1,16 @@ +package cc.mrbird.febs.mall.entity; + +import cc.mrbird.febs.common.entity.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * 运费模板表 + */ +@Data +@TableName("mall_carriage_rule") +public class MallCarriageRule extends BaseEntity { + //名称 + private String name; + +} diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallCarriageRuleInfo.java b/src/main/java/cc/mrbird/febs/mall/entity/MallCarriageRuleInfo.java new file mode 100644 index 0000000..f86567f --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallCarriageRuleInfo.java @@ -0,0 +1,31 @@ +package cc.mrbird.febs.mall.entity; + +import cc.mrbird.febs.common.entity.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 运费模板子表 + */ +@Data +@TableName("mall_carriage_rule_info") +public class MallCarriageRuleInfo extends BaseEntity { + //模板id + private Long ruleId; + //计价方式(1:按件算 2:按重量算) + private Integer valuationType; + //计价单位(件,KG) + private String valuationUnit; + //指定区域(没有指定区域,则为默认) + private String areaAddress; + //基本数量 + private BigDecimal basicCnt; + //基本价格 + private BigDecimal basicPrice; + //超出的部分的基数数量 + private BigDecimal moreCnt; + //超出的部分的基数的价格 + private BigDecimal morePrice; +} diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java b/src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java index 8e4fd1e..eec9a62 100644 --- a/src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallGoods.java @@ -116,5 +116,11 @@ private BigDecimal carriage; private String wxCodeImg; + //运费方式 (1:固定运费 2:运费模板) + private Integer carriageType; + //运费金额 + private BigDecimal carriageAmount; + //运费模板ID + private Long carriageRuleId; } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallCarriageRuleInfoMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallCarriageRuleInfoMapper.java new file mode 100644 index 0000000..c0df060 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallCarriageRuleInfoMapper.java @@ -0,0 +1,13 @@ +package cc.mrbird.febs.mall.mapper; + +import cc.mrbird.febs.mall.entity.MallCarriageRuleInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface MallCarriageRuleInfoMapper extends BaseMapper<MallCarriageRuleInfo> { + + List<MallCarriageRuleInfo> selectMallCarriageRuleInfoByRuleIdAndAreaAddress(@Param("ruleId")long id, @Param("areaAddress")String areaAddress); + +} diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallCarriageRuleMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallCarriageRuleMapper.java new file mode 100644 index 0000000..12b7c52 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallCarriageRuleMapper.java @@ -0,0 +1,11 @@ +package cc.mrbird.febs.mall.mapper; + +import cc.mrbird.febs.mall.entity.MallCarriageRule; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +public interface MallCarriageRuleMapper extends BaseMapper<MallCarriageRule> { + + IPage<MallCarriageRule> selectMallCarriageRuleListInPage(Page<MallCarriageRule> page, MallCarriageRule mallCarriageRule); +} diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java index e0e1c42..23c1079 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java @@ -55,4 +55,7 @@ List<MallGoodsListVo> selectMallGoodsListQueryNoPage(@Param("record")MallGoodsQueryDto queryDto); + List<MallGoods> selectMallGoodsListQueryByRuleId(@Param("id")Long id); + + List<MallGoods> selectMallGoodsListQueryByRuleIdAndIsSale(@Param("id")Long id, @Param("isSale")Integer ishotStateYes); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/IAdminMallGoodsService.java b/src/main/java/cc/mrbird/febs/mall/service/IAdminMallGoodsService.java index 8f50189..494d851 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IAdminMallGoodsService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IAdminMallGoodsService.java @@ -2,9 +2,8 @@ import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.QueryRequest; -import cc.mrbird.febs.mall.dto.AddMallGoodsDto; -import cc.mrbird.febs.mall.dto.MallGoodsUpdateDto; -import cc.mrbird.febs.mall.dto.UpMallGoodsDto; +import cc.mrbird.febs.mall.dto.*; +import cc.mrbird.febs.mall.entity.MallCarriageRule; import cc.mrbird.febs.mall.entity.MallGoods; import cc.mrbird.febs.mall.entity.MallGoodsCategory; import cc.mrbird.febs.mall.vo.*; @@ -42,4 +41,14 @@ IPage<AdminHomeDeliverySettingVo> getDeliveryHomeListInPage(AdminHomeDeliverySettingVo adminHomeDeliverySettingVo, QueryRequest request); FebsResponse deliveryHomeUpdate(AdminHomeDeliverySettingVo adminHomeDeliverySettingVo); + + IPage<MallCarriageRule> getMallCarriageRuleListInPage(MallCarriageRule mallCarriageRule, QueryRequest request); + + FebsResponse carriageRuleDelById(Long id); + + FebsResponse carriageRuleAdd(AdminCarriageRuleAddDto adminCarriageRuleAddDto); + + AdminMallCarriageRuleVo selectCarriageRuleByRuleId(long id); + + FebsResponse carriageRuleUpdate(AdminCarriageRuleUpdateDto adminCarriageRuleUpdateDto); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallGoodsService.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallGoodsService.java index a65ff45..6774b7f 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallGoodsService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallGoodsService.java @@ -13,6 +13,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -39,6 +40,8 @@ private final MallGoodsStyleMapper mallGoodsStyleMapper; private final MallGoodsImagesMapper mallGoodsImagesMapper; private final MallShoppingCartMapper mallShoppingCartMapper; + private final MallCarriageRuleMapper mallCarriageRuleMapper; + private final MallCarriageRuleInfoMapper mallCarriageRuleInfoMapper; @Override public IPage<AdminMallGoodsVo> getCategoryListInPage(MallGoods mallGoods, QueryRequest request) { @@ -525,4 +528,187 @@ dataDictionaryCustomMapper.updateById(dataDictionaryCustom); return new FebsResponse().success(); } + + @Override + public IPage<MallCarriageRule> getMallCarriageRuleListInPage(MallCarriageRule mallCarriageRule, QueryRequest request) { + Page<MallCarriageRule> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<MallCarriageRule> mallCarriageRules = mallCarriageRuleMapper.selectMallCarriageRuleListInPage(page, mallCarriageRule); + return mallCarriageRules; + } + + @Override + @Transactional + public FebsResponse carriageRuleDelById(Long id) { + MallCarriageRule mallCarriageRule = mallCarriageRuleMapper.selectById(id); + if(ObjectUtil.isEmpty(mallCarriageRule)){ + return new FebsResponse().fail().message("操作失败"); + } + List<MallGoods> mallGoods = this.baseMapper.selectMallGoodsListQueryByRuleId(id); + if(CollUtil.isNotEmpty(mallGoods)){ + StringBuffer goodsNameBuffer = new StringBuffer(); + for(MallGoods goods : mallGoods){ + goodsNameBuffer.append(goods.getGoodsName()); + goodsNameBuffer.append(","); + } + return new FebsResponse().fail().message(goodsNameBuffer+"正在使用当前模板,请先编辑商品信息"); + } + QueryWrapper<MallCarriageRuleInfo> objectQueryWrapper = new QueryWrapper<>(); + objectQueryWrapper.eq("rule_id",id); + mallCarriageRuleInfoMapper.delete(objectQueryWrapper); + + mallCarriageRuleMapper.deleteById(id); + return new FebsResponse().success(); + } + + @Override + @Transactional + public FebsResponse carriageRuleAdd(AdminCarriageRuleAddDto adminCarriageRuleAddDto) { + String ruleName = adminCarriageRuleAddDto.getRuleName(); + QueryWrapper<MallCarriageRule> objectQueryWrapper = new QueryWrapper<>(); + objectQueryWrapper.eq("name",ruleName); + List<MallCarriageRule> mallCarriageRules = mallCarriageRuleMapper.selectList(objectQueryWrapper); + if(CollUtil.isNotEmpty(mallCarriageRules)){ + return new FebsResponse().fail().message("标题不能重复"); + } + + MallCarriageRule mallCarriageRule = new MallCarriageRule(); + mallCarriageRule.setName(ruleName); + mallCarriageRuleMapper.insert(mallCarriageRule); + + Long ruleId = mallCarriageRule.getId(); + /** + * 生成默认的运费规则 + */ + MallCarriageRuleInfo mallCarriageRuleInfoDefault = new MallCarriageRuleInfo(); + mallCarriageRuleInfoDefault.setRuleId(ruleId); + //计价方式(1:按件算 2:按重量算) + mallCarriageRuleInfoDefault.setValuationType(adminCarriageRuleAddDto.getValuationType()); + mallCarriageRuleInfoDefault.setValuationUnit( + adminCarriageRuleAddDto.getValuationType() == 1?"件":"千克" + ); + mallCarriageRuleInfoDefault.setBasicCnt(adminCarriageRuleAddDto.getBasicCntDefault()); + mallCarriageRuleInfoDefault.setBasicPrice(adminCarriageRuleAddDto.getBasicPriceDefault()); + mallCarriageRuleInfoDefault.setMoreCnt(adminCarriageRuleAddDto.getMoreCntDefault()); + mallCarriageRuleInfoDefault.setMorePrice(adminCarriageRuleAddDto.getMorePriceDefault()); + mallCarriageRuleInfoMapper.insert(mallCarriageRuleInfoDefault); + + List<AdminCarriageRuleAddInfoDto> adminCarriageRuleAddInfoDtos = adminCarriageRuleAddDto.getAdminCarriageRuleAddInfoDtos(); + if(CollUtil.isNotEmpty(adminCarriageRuleAddInfoDtos)){ + for(AdminCarriageRuleAddInfoDto adminCarriageRuleAddInfoDto : adminCarriageRuleAddInfoDtos){ + MallCarriageRuleInfo mallCarriageRuleInfo = new MallCarriageRuleInfo(); + mallCarriageRuleInfo.setRuleId(ruleId); + mallCarriageRuleInfo.setAreaAddress(adminCarriageRuleAddInfoDto.getAreaAddress()); + //计价方式(1:按件算 2:按重量算) + mallCarriageRuleInfo.setValuationType(adminCarriageRuleAddDto.getValuationType()); + mallCarriageRuleInfo.setValuationUnit( + adminCarriageRuleAddDto.getValuationType() == 1?"件":"千克" + ); + mallCarriageRuleInfo.setBasicCnt(adminCarriageRuleAddInfoDto.getBasicCnt()); + mallCarriageRuleInfo.setBasicPrice(adminCarriageRuleAddInfoDto.getBasicPrice()); + mallCarriageRuleInfo.setMoreCnt(adminCarriageRuleAddInfoDto.getMoreCnt()); + mallCarriageRuleInfo.setMorePrice(adminCarriageRuleAddInfoDto.getMorePrice()); + mallCarriageRuleInfoMapper.insert(mallCarriageRuleInfo); + } + } + return new FebsResponse().success().message("操作成功"); + } + + @Override + public AdminMallCarriageRuleVo selectCarriageRuleByRuleId(long id) { + AdminMallCarriageRuleVo adminMallCarriageRuleVo = new AdminMallCarriageRuleVo(); + + MallCarriageRule mallCarriageRule = mallCarriageRuleMapper.selectById(id); + adminMallCarriageRuleVo.setId(id); + adminMallCarriageRuleVo.setRuleName(mallCarriageRule.getName()); + + List<MallCarriageRuleInfo> mallCarriageRuleInfos = mallCarriageRuleInfoMapper.selectMallCarriageRuleInfoByRuleIdAndAreaAddress(id,null); + if(CollUtil.isNotEmpty(mallCarriageRuleInfos)){ + List<AdminMallCarriageRuleInfoVo> adminCarriageRuleInfoVos = new ArrayList<>(); + for(MallCarriageRuleInfo mallCarriageRuleInfo : mallCarriageRuleInfos){ + if(StrUtil.isNotEmpty(mallCarriageRuleInfo.getAreaAddress())){ + AdminMallCarriageRuleInfoVo adminMallCarriageRuleInfoVo = new AdminMallCarriageRuleInfoVo(); + adminMallCarriageRuleInfoVo.setId(mallCarriageRuleInfo.getId()); + adminMallCarriageRuleInfoVo.setAreaAddress(mallCarriageRuleInfo.getAreaAddress()); + adminMallCarriageRuleInfoVo.setBasicCnt(mallCarriageRuleInfo.getBasicCnt()); + adminMallCarriageRuleInfoVo.setBasicPrice(mallCarriageRuleInfo.getBasicPrice()); + adminMallCarriageRuleInfoVo.setMoreCnt(mallCarriageRuleInfo.getMoreCnt()); + adminMallCarriageRuleInfoVo.setMorePrice(mallCarriageRuleInfo.getMorePrice()); + adminCarriageRuleInfoVos.add(adminMallCarriageRuleInfoVo); + }else{ + //默认规则 + adminMallCarriageRuleVo.setBasicCntDefault(mallCarriageRuleInfo.getBasicCnt()); + adminMallCarriageRuleVo.setBasicPriceDefault(mallCarriageRuleInfo.getBasicPrice()); + adminMallCarriageRuleVo.setMoreCntDefault(mallCarriageRuleInfo.getMoreCnt()); + adminMallCarriageRuleVo.setMorePriceDefault(mallCarriageRuleInfo.getMorePrice()); + adminMallCarriageRuleVo.setValuationType(mallCarriageRuleInfo.getValuationType()); + } + } + adminMallCarriageRuleVo.setAdminCarriageRuleInfoVos(adminCarriageRuleInfoVos); + } + return adminMallCarriageRuleVo; + } + + @Override + @Transactional + public FebsResponse carriageRuleUpdate(AdminCarriageRuleUpdateDto adminCarriageRuleUpdateDto) { + Long id = adminCarriageRuleUpdateDto.getId(); + MallCarriageRule mallCarriageRule = mallCarriageRuleMapper.selectById(id); + if(ObjectUtil.isEmpty(mallCarriageRule)){ + return new FebsResponse().fail().message("运费模板不存在"); + } + + List<MallGoods> mallGoods = this.baseMapper.selectMallGoodsListQueryByRuleIdAndIsSale(id,MallGoods.ISHOT_STATE_YES); + if(CollUtil.isNotEmpty(mallGoods)){ + StringBuffer goodsNameBuffer = new StringBuffer(); + for(MallGoods goods : mallGoods){ + goodsNameBuffer.append(goods.getGoodsName()); + goodsNameBuffer.append(","); + } + return new FebsResponse().fail().message(goodsNameBuffer+"正在使用当前模板,请先下架商品"); + } + //删除现有的所有运费模板子表数据 + List<MallCarriageRuleInfo> mallCarriageRuleInfos = mallCarriageRuleInfoMapper.selectMallCarriageRuleInfoByRuleIdAndAreaAddress(id, null); + if(CollUtil.isNotEmpty(mallCarriageRuleInfos)){ + for(MallCarriageRuleInfo mallCarriageRuleInfo : mallCarriageRuleInfos){ + mallCarriageRuleInfoMapper.deleteById(mallCarriageRuleInfo.getId()); + } + } + + /** + * 生成运费模板子表数据 + */ + MallCarriageRuleInfo mallCarriageRuleInfoDefault = new MallCarriageRuleInfo(); + mallCarriageRuleInfoDefault.setRuleId(id); + //计价方式(1:按件算 2:按重量算) + mallCarriageRuleInfoDefault.setValuationType(adminCarriageRuleUpdateDto.getValuationType()); + mallCarriageRuleInfoDefault.setValuationUnit( + adminCarriageRuleUpdateDto.getValuationType() == 1?"件":"千克" + ); + mallCarriageRuleInfoDefault.setBasicCnt(adminCarriageRuleUpdateDto.getBasicCntDefault()); + mallCarriageRuleInfoDefault.setBasicPrice(adminCarriageRuleUpdateDto.getBasicPriceDefault()); + mallCarriageRuleInfoDefault.setMoreCnt(adminCarriageRuleUpdateDto.getMoreCntDefault()); + mallCarriageRuleInfoDefault.setMorePrice(adminCarriageRuleUpdateDto.getMorePriceDefault()); + mallCarriageRuleInfoMapper.insert(mallCarriageRuleInfoDefault); + + List<AdminCarriageRuleAddInfoDto> adminCarriageRuleAddInfoDtos = adminCarriageRuleUpdateDto.getAdminCarriageRuleAddInfoDtos(); + if(CollUtil.isNotEmpty(adminCarriageRuleAddInfoDtos)){ + for(AdminCarriageRuleAddInfoDto adminCarriageRuleAddInfoDto : adminCarriageRuleAddInfoDtos){ + MallCarriageRuleInfo mallCarriageRuleInfo = new MallCarriageRuleInfo(); + mallCarriageRuleInfo.setRuleId(id); + mallCarriageRuleInfo.setAreaAddress(adminCarriageRuleAddInfoDto.getAreaAddress()); + //计价方式(1:按件算 2:按重量算) + mallCarriageRuleInfo.setValuationType(mallCarriageRuleInfoDefault.getValuationType()); + mallCarriageRuleInfo.setValuationUnit( + mallCarriageRuleInfoDefault.getValuationType() == 1?"件":"千克" + ); + mallCarriageRuleInfo.setBasicCnt(adminCarriageRuleAddInfoDto.getBasicCnt()); + mallCarriageRuleInfo.setBasicPrice(adminCarriageRuleAddInfoDto.getBasicPrice()); + mallCarriageRuleInfo.setMoreCnt(adminCarriageRuleAddInfoDto.getMoreCnt()); + mallCarriageRuleInfo.setMorePrice(adminCarriageRuleAddInfoDto.getMorePrice()); + mallCarriageRuleInfoMapper.insert(mallCarriageRuleInfo); + } + } + + return new FebsResponse().success().message("操作成功"); + } } diff --git a/src/main/java/cc/mrbird/febs/mall/vo/AdminMallCarriageRuleInfoVo.java b/src/main/java/cc/mrbird/febs/mall/vo/AdminMallCarriageRuleInfoVo.java new file mode 100644 index 0000000..9c11595 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/vo/AdminMallCarriageRuleInfoVo.java @@ -0,0 +1,22 @@ +package cc.mrbird.febs.mall.vo; + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@ApiModel(value = "AdminMallCarriageRuleInfoVo", description = "运费模板子表返回参数类") +public class AdminMallCarriageRuleInfoVo { + private Long id; + //指定区域(没有指定区域,则为默认) + private String areaAddress; + //基本数量 + private BigDecimal basicCnt; + //基本价格 + private BigDecimal basicPrice; + //超出的部分的基数数量 + private BigDecimal moreCnt; + //超出的部分的基数的价格 + private BigDecimal morePrice; +} diff --git a/src/main/java/cc/mrbird/febs/mall/vo/AdminMallCarriageRuleVo.java b/src/main/java/cc/mrbird/febs/mall/vo/AdminMallCarriageRuleVo.java new file mode 100644 index 0000000..0d563ae --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/vo/AdminMallCarriageRuleVo.java @@ -0,0 +1,29 @@ +package cc.mrbird.febs.mall.vo; + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +@ApiModel(value = "AdminMallCarriageRuleVo", description = "运费模板返回参数类") +public class AdminMallCarriageRuleVo { + + private Long id; + //名称 + private String ruleName; + + private Integer valuationType; + //基本数量 + private BigDecimal basicCntDefault; + //基本价格 + private BigDecimal basicPriceDefault; + //超出的部分的基数数量 + private BigDecimal moreCntDefault; + //超出的部分的基数的价格 + private BigDecimal morePriceDefault; + + private List<AdminMallCarriageRuleInfoVo> adminCarriageRuleInfoVos; + +} diff --git a/src/main/resources/mapper/modules/MallCarriageRuleInfoMapper.xml b/src/main/resources/mapper/modules/MallCarriageRuleInfoMapper.xml new file mode 100644 index 0000000..bf8afbf --- /dev/null +++ b/src/main/resources/mapper/modules/MallCarriageRuleInfoMapper.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="cc.mrbird.febs.mall.mapper.MallCarriageRuleInfoMapper"> + +<!-- <select id="selectByMemberIdAndState" resultType="cc.mrbird.febs.mall.entity.MallAgentRecord">--> +<!-- select a.* from mall_agent_record a--> +<!-- where a.member_id = #{memberId}--> +<!-- and a.state = #{state}--> +<!-- limit 1--> +<!-- </select>--> + + <select id="selectMallCarriageRuleInfoByRuleIdAndAreaAddress" resultType="cc.mrbird.febs.mall.entity.MallCarriageRuleInfo"> + SELECT + a.* + FROM mall_carriage_rule_info a + <where> + a.rule_id = #{ruleId} + <if test="areaAddress != null and areaAddress != ''"> + and a.area_address like concat('%', #{areaAddress},'%') + </if> + </where> + GROUP BY a.id order by a.CREATED_TIME desc + </select> + +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MallCarriageRuleMapper.xml b/src/main/resources/mapper/modules/MallCarriageRuleMapper.xml new file mode 100644 index 0000000..6c9c76e --- /dev/null +++ b/src/main/resources/mapper/modules/MallCarriageRuleMapper.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="cc.mrbird.febs.mall.mapper.MallCarriageRuleMapper"> + +<!-- <select id="selectByMemberIdAndState" resultType="cc.mrbird.febs.mall.entity.MallAgentRecord">--> +<!-- select a.* from mall_agent_record a--> +<!-- where a.member_id = #{memberId}--> +<!-- and a.state = #{state}--> +<!-- limit 1--> +<!-- </select>--> + + <select id="selectMallCarriageRuleListInPage" resultType="cc.mrbird.febs.mall.entity.MallCarriageRule"> + SELECT + a.* + FROM mall_carriage_rule a + GROUP BY a.id order by a.CREATED_TIME desc + </select> + +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MallGoodsMapper.xml b/src/main/resources/mapper/modules/MallGoodsMapper.xml index faa756b..fbeab66 100644 --- a/src/main/resources/mapper/modules/MallGoodsMapper.xml +++ b/src/main/resources/mapper/modules/MallGoodsMapper.xml @@ -341,4 +341,15 @@ </if> </select> + <select id="selectMallGoodsListQueryByRuleId" resultType="cc.mrbird.febs.mall.entity.MallGoods"> + select a.goods_name from mall_goods a where a.carriage_rule_id = #{id} + </select> + + <select id="selectMallGoodsListQueryByRuleIdAndIsSale" resultType="cc.mrbird.febs.mall.entity.MallGoods"> + select a.goods_name + from mall_goods a + where a.carriage_rule_id = #{id} + and a.is_sale = #{isSale} + </select> + </mapper> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/goods/carriageRuleAdd.html b/src/main/resources/templates/febs/views/modules/goods/carriageRuleAdd.html new file mode 100644 index 0000000..04413db --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/goods/carriageRuleAdd.html @@ -0,0 +1,294 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-carriage-rule-add" lay-title="运费模板新增"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-fluid" id="carriage-rule-add"> + <form class="layui-form" action="" lay-filter="carriage-rule-add-form"> + <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> + <ul class="layui-tab-title"> + <li class="layui-this">运费模板</li> + </ul> + <div class="layui-tab-content"> + <div class="layui-tab-item layui-show"> + <blockquote class="layui-elem-quote blue-border">基本信息</blockquote> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">标题:</label> + <div class="layui-input-block"> + <input type="text" name="ruleName" lay-verify="required" placeholder="" autocomplete="off" class="layui-input"> + </div> + </div> + </div> + + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">计价方式:</label> + <div class="layui-input-block"> + <input type="radio" name="valuationType" value="1" title="按件算" checked /> + <input type="radio" name="valuationType" value="2" title="按重量算" /> + </div> + </div> + + <blockquote class="layui-elem-quote blue-border">默认规则</blockquote> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">默认运费:</label> + <div class="layui-input-inline" style="width: 80px"> + <input type="text" name="basicCntDefault" lay-verify="required" autocomplete="off" class="layui-input" > + </div> + <div class="layui-form-mid">件内,</div> + <div class="layui-input-inline" style="width: 80px"> + <input type="text" name="basicPriceDefault" lay-verify="required" autocomplete="off" class="layui-input" > + </div> + <div class="layui-form-mid">元,</div> + <div class="layui-form-mid">每增加</div> + <div class="layui-input-inline" style="width: 80px"> + <input type="text" name="moreCntDefault" lay-verify="required" autocomplete="off" class="layui-input" > + </div> + <div class="layui-form-mid">件,增加运费</div> + <div class="layui-input-inline" style="width: 80px"> + <input type="text" name="morePriceDefault" lay-verify="required" autocomplete="off" class="layui-input" > + </div> + <div class="layui-form-mid">元。</div> + </div> + <div class="layui-form-item multi-rule-table"> + <div class="layui-row layui-col-space10 layui-form-item"> + <blockquote class="layui-elem-quote blue-border">为指定省份设置运费</blockquote> + + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">指定省份:</label> + <div class="layui-input-block"> + <div id="province-set"></div> + </div> + </div> + <div class="layui-col-lg6"> + <button type="button" class="layui-btn layui-btn-normal layui-btn" id="test3" >添加</button> + </div> + </div> + + <div class="layui-form-item"> + <div class="layui-input-block"> + <table id="multiRule" lay-filter="multiRule"></table> + </div> + </div> + </div> + </div> + </div> + </div> + <div class="layui-form-item febs-hide"> + <button class="layui-btn" lay-submit="" lay-filter="carriage-rule-add-form-submit" id="submit">保存</button> + </div> + </form> + </div> + </div> + </div> +</div> +<style> + .blue-border { + border-left-color: #2db7f5; + font-size: 18px; + } +</style> +<script type="text/html" id="toolbar"> + <div class="layui-btn-container"> + <button class="layui-btn layui-btn-danger layui-btn-sm" type="button" lay-event="delSku">删除</button> + </div> +</script> +<!-- 表格操作栏 end --> +<script data-th-inline="javascript"> + layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree','dropdown', 'laydate', 'layedit', 'upload', 'element', 'table', 'xmSelect'], function () { + var $ = layui.jquery, + febs = layui.febs, + layer = layui.layer, + table = layui.table, + formSelects = layui.formSelects, + treeSelect = layui.treeSelect, + form = layui.form, + laydate = layui.laydate, + eleTree = layui.eleTree, + $view = $('#carriage-rule-add'), + layedit = layui.layedit, + upload = layui.upload, + validate = layui.validate, + element = layui.element; + + form.render(); + + formSelects.render(); + + var provinceSet = xmSelect.render({ + el: '#province-set', + toolbar: { + show: true, + list: [ 'ALL', 'CLEAR', 'REVERSE' ] + }, + filterable: true, + data: [ + {name: '北京市',value: 1,selected:false}, + {name: '天津市',value: 2,selected:false}, + {name: '河北省',value: 3,selected:false}, + {name: '山西省',value: 4,selected:false}, + {name: '辽宁省',value: 5,selected:false}, + + {name: '吉林省',value: 6,selected:false}, + {name: '黑龙江省',value: 7,selected:false}, + {name: '上海市',value: 8,selected:false}, + {name: '江苏省',value: 9,selected:false}, + {name: '浙江省',value: 10,selected:false}, + + {name: '安徽省',value: 11,selected:false}, + {name: '福建省',value: 12,selected:false}, + {name: '江西省',value: 13,selected:false}, + {name: '山东省',value: 14,selected:false}, + {name: '河南省',value: 15,selected:false}, + + {name: '湖北省',value: 16,selected:false}, + {name: '湖南省',value: 17,selected:false}, + {name: '广东省',value: 18,selected:false}, + {name: '广西壮族自治区',value: 19,selected:false}, + {name: '海南省',value: 20,selected:false}, + + {name: '重庆市',value: 21,selected:false}, + {name: '四川省',value: 22,selected:false}, + {name: '贵州省',value: 23,selected:false}, + {name: '云南省',value: 24,selected:false}, + {name: '西藏自治区',value: 25,selected:false}, + + {name: '陕西省',value: 26,selected:false}, + {name: '甘肃省',value: 27,selected:false}, + {name: '青海省',value: 28,selected:false}, + {name: '宁夏回族自治区',value: 29,selected:false}, + {name: '内蒙古自治区',value: 30,selected:false}, + + {name: '新疆维吾尔自治区',value: 31,selected:false}, + {name: '台湾省',value: 32,selected:false}, + {name: '香港特别行政区',value: 33,selected:false}, + {name: '澳门特别行政区',value: 34,selected:false}, + ], + }) + + $('#test3').on('click', function (){ + let provinceChoice = provinceSet.getValue('name'); + if(provinceChoice == null || provinceChoice == ""){ + febs.alert.warn('指定省份不能为空'); + return false; + } + let provinceChoiceStr = ""; + console.log(provinceChoice); + for (let i = 0; i < provinceChoice.length; i++) { + provinceChoiceStr = provinceChoiceStr + provinceChoice[i]+","; + } + + console.log(provinceChoiceStr); + let data = {}; + data.areaAddress = provinceChoiceStr; + data.basicCnt = 1; + data.basicPrice = 1; + data.moreCnt = 1; + data.morePrice = 1; + addTableDate(data); + }); + + var ruleData=[]; + var tableIns = table.render({ + elem: '#multiRule' + ,limit:999 + ,toolbar:"#toolbar" + ,defaultToolbar:[] + ,cols: [ + [ + ,{align: 'center', title: '请选择', colspan: 2} + ,{field:'areaAddress', title:'指定省份', width:400, rowspan: 2,align: 'center'} + ,{align: 'center', title: '规则( 2 件内,2 元,每 1 增加件,增加运费 1 元。)', colspan: 4} + ], + [ //表头 + {type: 'checkbox', rowspan: 2,align: 'center' } + ,{field: 'index', title: '序号', width:100, rowspan: 2,align: 'center'} + ,{field: 'basicCnt', title: '件内', width:200,edit:'text'} + ,{field: 'basicPrice', title: '运费', width:200,edit:'text'} + ,{field: 'moreCnt', title: '每增加', width:200,edit:'text'} + ,{field: 'morePrice', title: '增加运费', width:200,edit:'text'} + ]] + ,data: [] + }); + + table.on('toolbar(multiRule)', function(obj){ + var data = obj.data; + var hasData = table.cache['multiRule']; + var checkData = table.checkStatus('multiRule').data; + + if (checkData.length <= 0) { + febs.alert.warn('请选择删除数据'); + return; + } + if(obj.event === 'delSku'){ + for (let i = 0; i < checkData.length; i++) { + var delData = checkData[i]; + for (let j = 0; j < hasData.length; j++) { + if (hasData[j].index == delData.index) { + hasData.splice(j, 1); + break; + } + } + } + + for (let i = 0; i < hasData.length; i++) { + hasData[i].index = i + 1; + } + + ruleData=hasData; + reloadTable(hasData); + } + }); + + function addTableDate(data) { + var hasData = table.cache['multiRule']; + + data.index = hasData.length + 1; + ruleData.push(data); + + reloadTable(ruleData); + return data.index; + } + + function reloadTable(data) { + table.reload('multiRule', { + data : data + }); + } + + table.on('edit(multiRule)', function(obj){ + var value = obj.value //得到修改后的值 + ,data = obj.data //得到所在行所有键值 + ,field = obj.field; //得到字段 + + for (let i = 0; i < ruleData.length; i++) { + if (ruleData[i].index == data.index) { + ruleData[i] = data; + } + } + }); + + form.on('submit(carriage-rule-add-form-submit)', function (data) { + data.field.adminCarriageRuleAddInfoDtos = ruleData; + $.ajax({ + 'url':ctx + 'admin/goods/carriageRuleAdd', + 'type':'post', + 'dataType':'json', + 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式 + 'traditional': true,//ajax传递数组必须添加属性 + 'data':JSON.stringify(data.field), + 'success':function (data) { + if(data.code==200){ + layer.closeAll(); + febs.alert.success(data.message); + $('#febs-carriage-rule').find('#reset').click(); + }else{ + febs.alert.warn(data.message); + } + }, + 'error':function () { + febs.alert.warn('服务器繁忙'); + } + }) + return false; + }); + }); +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/goods/carriageRuleList.html b/src/main/resources/templates/febs/views/modules/goods/carriageRuleList.html new file mode 100644 index 0000000..3c4c3a1 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/goods/carriageRuleList.html @@ -0,0 +1,154 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-carriage-rule" lay-title="运费模板管理"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-card"> + <div class="layui-card-body febs-table-full"> + <form class="layui-form layui-table-form" lay-filter="user-table-form"> + <div class="layui-row"> + <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area"> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="add"> + 新增 + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query"> + <i class="layui-icon"></i> + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset"> + <i class="layui-icon"></i> + </div> + </div> + </div> + </form> + <table lay-filter="carriageRuleTable" lay-data="{id: 'carriageRuleTable'}"></table> + <style type="text/css"> + .layui-table-cell{ + text-align:center; + height: auto; + white-space: nowrap; /*文本不会换行,在同一行显示*/ + overflow: hidden; /*超出隐藏*/ + text-overflow: ellipsis; /*省略号显示*/ + } + .layui-table img{ + max-width:100px + } + </style> + </div> + </div> + </div> + </div> +</div> +<!-- 表格操作栏 start --> +<script type="text/html" id="user-option"> + <span shiro:lacksPermission="user:view,user:update,user:delete"> + <span class="layui-badge-dot febs-bg-orange"></span> 无权限 + </span> + <a lay-event="edit" shiro:hasPermission="user:update"><i + class="layui-icon febs-edit-area febs-blue"></i></a> +</script> +<style> + .layui-form-onswitch { + background-color: #5FB878 !important; + } +</style> +<!-- 表格操作栏 end --> +<script data-th-inline="none" type="text/javascript"> + // 引入组件并初始化 + layui.use([ 'jquery', 'form', 'table', 'febs'], function () { + var $ = layui.jquery, + febs = layui.febs, + form = layui.form, + table = layui.table, + $view = $('#febs-carriage-rule'), + $query = $view.find('#query'), + $reset = $view.find('#reset'), + $searchForm = $view.find('form'), + $add = $view.find('#add'), + sortObject = {field: 'phone', type: null}, + tableIns; + + form.render(); + + // 表格初始化 + initTable(); + + // 初始化表格操作栏各个按钮功能 + table.on('tool(carriageRuleTable)', function (obj) { + var data = obj.data, + layEvent = obj.event; + if (layEvent === 'carriageRuleDel') { + febs.modal.confirm('删除', '确认删除['+data.name+']运费模板?', function () { + carriageRuleDel(data.id); + }); + } + if (layEvent === 'carriageRuleUpdate') { + febs.modal.open('运费模板编辑', 'modules/goods/carriageRuleUpdate/' + data.id, { + btn: ['提交', '取消'], + area:['100%','100%'], + yes: function (index, layero) { + $('#febs-carriage-rule-update').find('#submit').trigger('click'); + }, + btn2: function () { + layer.closeAll(); + } + }); + } + }); + function carriageRuleDel(id) { + febs.get(ctx + 'admin/goods/carriageRuleDel/' + id, null, function () { + febs.alert.success('操作成功'); + $query.click(); + }); + } + + // 查询按钮 + $query.on('click', function () { + var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type}); + tableIns.reload({where: params, page: {curr: 1}}); + }); + + // 刷新按钮 + $reset.on('click', function () { + $searchForm[0].reset(); + sortObject.type = 'null'; + tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject}); + }); + + $add.on('click', function () { + febs.modal.open('运费模板新增', 'modules/goods/carriageRuleAdd/', { + btn: ['提交', '取消'], + area:['100%','100%'], + yes: function (index, layero) { + $('#febs-carriage-rule-add').find('#submit').trigger('click'); + }, + btn2: function () { + layer.closeAll(); + } + }); + }); + + function initTable() { + tableIns = febs.table.init({ + elem: $view.find('table'), + id: 'carriageRuleTable', + url: ctx + 'admin/goods/carriageRuleList', + cols: [[ + {field: 'name', title: '标题', minWidth: 100,align:'left'}, + {field: 'createdTime', title: '创建时间', minWidth: 140,align:'left'}, + {title: '操作', + templet: function (d) { + return '' + + '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="carriageRuleUpdate" shiro:hasPermission="user:update">编辑</button>' + + '<button class="layui-btn layui-btn-normal layui-btn-xs febs-bg-red" lay-event="carriageRuleDel" shiro:hasPermission="user:update">删除</button>' + + },minWidth: 160,align:'center'} + ]] + }); + } + + // 获取查询参数 + function getQueryParams() { + return { + }; + } + + }) +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/goods/carriageRuleUpdate.html b/src/main/resources/templates/febs/views/modules/goods/carriageRuleUpdate.html new file mode 100644 index 0000000..829a14f --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/goods/carriageRuleUpdate.html @@ -0,0 +1,327 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-carriage-rule-update" lay-title="运费模板编辑"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-fluid" id="carriage-rule-update"> + <form class="layui-form" action="" lay-filter="carriage-rule-update-form"> + <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> + <ul class="layui-tab-title"> + <li class="layui-this">运费模板</li> + </ul> + <div class="layui-tab-content"> + <div class="layui-tab-item layui-show"> + <blockquote class="layui-elem-quote blue-border">基本信息</blockquote> + <input type="text" name="id" + placeholder="" autoComplete="off" class="layui-input febs-hide"> + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">标题:</label> + <div class="layui-input-block"> + <input type="text" name="ruleName" lay-verify="required" placeholder="" autocomplete="off" class="layui-input"> + </div> + </div> + </div> + + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">计价方式:</label> + <div class="layui-input-block"> + <input type="radio" name="valuationType" value="1" title="按件算" checked /> + <input type="radio" name="valuationType" value="2" title="按重量算" /> + </div> + </div> + + <blockquote class="layui-elem-quote blue-border">默认规则</blockquote> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">默认运费:</label> + <div class="layui-input-inline" style="width: 80px"> + <input type="text" name="basicCntDefault" lay-verify="required" autocomplete="off" class="layui-input" > + </div> + <div class="layui-form-mid">件内,</div> + <div class="layui-input-inline" style="width: 80px"> + <input type="text" name="basicPriceDefault" lay-verify="required" autocomplete="off" class="layui-input" > + </div> + <div class="layui-form-mid">元,</div> + <div class="layui-form-mid">每增加</div> + <div class="layui-input-inline" style="width: 80px"> + <input type="text" name="moreCntDefault" lay-verify="required" autocomplete="off" class="layui-input" > + </div> + <div class="layui-form-mid">件,增加运费</div> + <div class="layui-input-inline" style="width: 80px"> + <input type="text" name="morePriceDefault" lay-verify="required" autocomplete="off" class="layui-input" > + </div> + <div class="layui-form-mid">元。</div> + </div> + <div class="layui-form-item multi-rule-table"> + <div class="layui-row layui-col-space10 layui-form-item"> + <blockquote class="layui-elem-quote blue-border">为指定省份设置运费</blockquote> + + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">指定省份:</label> + <div class="layui-input-block"> + <div id="province-set"></div> + </div> + </div> + <div class="layui-col-lg6"> + <button type="button" class="layui-btn layui-btn-normal layui-btn" id="test3" >添加</button> + </div> + </div> + + <div class="layui-form-item"> + <div class="layui-input-block"> + <table id="multiRule" lay-filter="multiRule"></table> + </div> + </div> + </div> + </div> + </div> + </div> + <div class="layui-form-item febs-hide"> + <button class="layui-btn" lay-submit="" lay-filter="carriage-rule-update-form-submit" id="submit">保存</button> + </div> + </form> + </div> + </div> + </div> +</div> +<style> + .blue-border { + border-left-color: #2db7f5; + font-size: 18px; + } +</style> +<script type="text/html" id="toolbar"> + <div class="layui-btn-container"> + <button class="layui-btn layui-btn-danger layui-btn-sm" type="button" lay-event="delSku">删除</button> + </div> +</script> +<!-- 表格操作栏 end --> +<script data-th-inline="javascript"> + layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree','dropdown', 'laydate', 'layedit', 'upload', 'element', 'table', 'xmSelect'], function () { + var $ = layui.jquery, + febs = layui.febs, + layer = layui.layer, + table = layui.table, + formSelects = layui.formSelects, + treeSelect = layui.treeSelect, + form = layui.form, + laydate = layui.laydate, + eleTree = layui.eleTree, + $view = $('#carriage-rule-update'), + layedit = layui.layedit, + carriageRule = [[${carriageRule}]], + upload = layui.upload, + validate = layui.validate, + element = layui.element; + + form.render(); + + formSelects.render(); + + var provinceSet = xmSelect.render({ + el: '#province-set', + toolbar: { + show: true, + list: [ 'ALL', 'CLEAR', 'REVERSE' ] + }, + filterable: true, + data: [ + {name: '北京市',value: 1,selected:false}, + {name: '天津市',value: 2,selected:false}, + {name: '河北省',value: 3,selected:false}, + {name: '山西省',value: 4,selected:false}, + {name: '辽宁省',value: 5,selected:false}, + + {name: '吉林省',value: 6,selected:false}, + {name: '黑龙江省',value: 7,selected:false}, + {name: '上海市',value: 8,selected:false}, + {name: '江苏省',value: 9,selected:false}, + {name: '浙江省',value: 10,selected:false}, + + {name: '安徽省',value: 11,selected:false}, + {name: '福建省',value: 12,selected:false}, + {name: '江西省',value: 13,selected:false}, + {name: '山东省',value: 14,selected:false}, + {name: '河南省',value: 15,selected:false}, + + {name: '湖北省',value: 16,selected:false}, + {name: '湖南省',value: 17,selected:false}, + {name: '广东省',value: 18,selected:false}, + {name: '广西壮族自治区',value: 19,selected:false}, + {name: '海南省',value: 20,selected:false}, + + {name: '重庆市',value: 21,selected:false}, + {name: '四川省',value: 22,selected:false}, + {name: '贵州省',value: 23,selected:false}, + {name: '云南省',value: 24,selected:false}, + {name: '西藏自治区',value: 25,selected:false}, + + {name: '陕西省',value: 26,selected:false}, + {name: '甘肃省',value: 27,selected:false}, + {name: '青海省',value: 28,selected:false}, + {name: '宁夏回族自治区',value: 29,selected:false}, + {name: '内蒙古自治区',value: 30,selected:false}, + + {name: '新疆维吾尔自治区',value: 31,selected:false}, + {name: '台湾省',value: 32,selected:false}, + {name: '香港特别行政区',value: 33,selected:false}, + {name: '澳门特别行政区',value: 34,selected:false}, + ], + }) + + $('#test3').on('click', function (){ + let provinceChoice = provinceSet.getValue('name'); + if(provinceChoice == null || provinceChoice == ""){ + febs.alert.warn('指定省份不能为空'); + return false; + } + let provinceChoiceStr = ""; + console.log(provinceChoice); + for (let i = 0; i < provinceChoice.length; i++) { + provinceChoiceStr = provinceChoiceStr + provinceChoice[i]+","; + } + + console.log(provinceChoiceStr); + let data = {}; + data.areaAddress = provinceChoiceStr; + data.basicCnt = 1; + data.basicPrice = 1; + data.moreCnt = 1; + data.morePrice = 1; + addTableDate(data); + }); + + let ruleData=[]; + let tableIns = table.render({ + elem: '#multiRule' + ,limit:999 + ,toolbar:"#toolbar" + ,defaultToolbar:[] + ,cols: [ + [ + ,{align: 'center', title: '请选择', colspan: 2} + ,{field:'areaAddress', title:'指定省份', width:400, rowspan: 2,align: 'center'} + ,{align: 'center', title: '规则( 2 件内,2 元,每 1 增加件,增加运费 1 元。)', colspan: 4} + ], + [ //表头 + {type: 'checkbox', rowspan: 2,align: 'center' } + ,{field: 'index', title: '序号', width:100, rowspan: 2,align: 'center'} + ,{field: 'basicCnt', title: '件内', width:200,edit:'text'} + ,{field: 'basicPrice', title: '运费', width:200,edit:'text'} + ,{field: 'moreCnt', title: '每增加', width:200,edit:'text'} + ,{field: 'morePrice', title: '增加运费', width:200,edit:'text'} + ]] + ,data: [] + }); + + initValue(); + + function initValue() { + form.val("carriage-rule-update-form", { + "id": carriageRule.id, + "ruleName": carriageRule.ruleName, + "valuationType": carriageRule.valuationType, + "basicCntDefault": carriageRule.basicCntDefault, + "basicPriceDefault": carriageRule.basicPriceDefault, + "moreCntDefault": carriageRule.moreCntDefault, + "morePriceDefault": carriageRule.morePriceDefault + }); + let carriageRuleInfos = carriageRule.adminCarriageRuleInfoVos; + if(Array.isArray(carriageRuleInfos) && carriageRuleInfos.length){ + for (let i = 0; i < carriageRuleInfos.length; i++) { + carriageRuleInfos[i].index = i+1; + } + } + if (carriageRuleInfos) { + ruleData = carriageRuleInfos; + reloadTable(carriageRuleInfos); + } + } + + + let delCarriageRuleInfo = []; + table.on('toolbar(multiRule)', function(obj){ + var data = obj.data; + var hasData = table.cache['multiRule']; + var checkData = table.checkStatus('multiRule').data; + + if (checkData.length <= 0) { + febs.alert.warn('请选择删除数据'); + return; + } + if(obj.event === 'delSku'){ + for (let i = 0; i < checkData.length; i++) { + var delData = checkData[i]; + for (let j = 0; j < hasData.length; j++) { + if (hasData[j].index == delData.index) { + if (delData.id) { + delCarriageRuleInfo.push(delData.id); + } + hasData.splice(j, 1); + break; + } + } + } + + for (let i = 0; i < hasData.length; i++) { + hasData[i].index = i + 1; + } + + ruleData=hasData; + reloadTable(hasData); + } + }); + + function addTableDate(data) { + var hasData = table.cache['multiRule']; + + data.index = hasData.length + 1; + ruleData.push(data); + + reloadTable(ruleData); + return data.index; + } + + function reloadTable(data) { + table.reload('multiRule', { + data : data + }); + } + + table.on('edit(multiRule)', function(obj){ + var value = obj.value //得到修改后的值 + ,data = obj.data //得到所在行所有键值 + ,field = obj.field; //得到字段 + + for (let i = 0; i < ruleData.length; i++) { + if (ruleData[i].index == data.index) { + ruleData[i] = data; + } + } + }); + + form.on('submit(carriage-rule-update-form-submit)', function (data) { + data.field.delCarriageRuleInfoIds=delCarriageRuleInfo; + data.field.adminCarriageRuleAddInfoDtos = ruleData; + $.ajax({ + 'url':ctx + 'admin/goods/carriageRuleUpdate', + 'type':'post', + 'dataType':'json', + 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式 + 'traditional': true,//ajax传递数组必须添加属性 + 'data':JSON.stringify(data.field), + 'success':function (data) { + if(data.code==200){ + layer.closeAll(); + febs.alert.success(data.message); + $('#febs-carriage-rule').find('#reset').click(); + }else{ + febs.alert.warn(data.message); + } + }, + 'error':function () { + febs.alert.warn('服务器繁忙'); + } + }) + return false; + }); + }); +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/mallMember/mallAgentRecord.html b/src/main/resources/templates/febs/views/modules/mallMember/mallAgentRecord.html index ed1b52f..9f82c41 100644 --- a/src/main/resources/templates/febs/views/modules/mallMember/mallAgentRecord.html +++ b/src/main/resources/templates/febs/views/modules/mallMember/mallAgentRecord.html @@ -33,19 +33,6 @@ </select> </div> </div> -<!-- <div class="layui-inline">--> -<!-- <label class="layui-form-label layui-form-label-sm">会员类型</label>--> -<!-- <div class="layui-input-inline">--> -<!-- <select name="level">--> -<!-- <option value="">请选择</option>--> -<!-- <option value="FIRST_LEVEL">普通会员</option>--> -<!-- <option value="SECOND_LEVEL">一星</option>--> -<!-- <option value="THIRD_LEVEL">二星</option>--> -<!-- <option value="FOUR_LEVEL">三星</option>--> -<!-- <option value="FIFTH_LEVEL">四星</option>--> -<!-- </select>--> -<!-- </div>--> -<!-- </div>--> </div> </div> <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area"> @@ -145,15 +132,9 @@ url: ctx + 'admin/mallMember/getAgentApplyList', defaultToolbar:[], cols: [[ - {field: 'memberName', title: '微信昵称', minWidth: 150,align:'left'}, - {field: 'name', title: '姓名', minWidth: 100,align:'left'}, - {field: 'phone', title: '电话', minWidth: 100,align:'left'}, - {field: 'province', title: '省', minWidth: 100,align:'left'}, - {field: 'city', title: '市', minWidth: 100,align:'left'}, - {field: 'area', title: '区、县', minWidth: 100,align:'left'}, - {field: 'storeAddress', title: '详细地址', minWidth: 100,align:'left'}, - {field: 'storeName', title: '店铺名称', minWidth: 100,align:'left'}, - {field: 'state', title: '申请状态', + {field:'memberName', title:'微信昵称', width:100, rowspan: 3,align: 'center'} + ,{align: 'center', title: '基本信息', colspan: 7} + ,{field: 'state', title: '申请状态', templet: function (d) { if (d.state === 1) { return '<span style="color:green;">申请中</span>' @@ -164,8 +145,30 @@ }else{ return '' } - }, minWidth: 100,align:'center'}, - {field: 'createdTime', title: '申请时间', minWidth: 180,align:'center'}, + }, minWidth: 100,rowspan: 3,align:'center'}, + ,{field:'createdTime', title:'申请时间', width:100,rowspan: 3,align: 'center'} + ],[ + // {field: 'memberName', title: '微信昵称', minWidth: 150,align:'left'}, + {field: 'name', title: '姓名', minWidth: 100,align:'left'}, + {field: 'phone', title: '电话', minWidth: 100,align:'left'}, + {field: 'province', title: '省', minWidth: 100,align:'left'}, + {field: 'city', title: '市', minWidth: 100,align:'left'}, + {field: 'area', title: '区、县', minWidth: 100,align:'left'}, + {field: 'storeAddress', title: '详细地址', minWidth: 100,align:'left'}, + {field: 'storeName', title: '店铺名称', minWidth: 100,align:'left'}, + // {field: 'state', title: '申请状态', + // templet: function (d) { + // if (d.state === 1) { + // return '<span style="color:green;">申请中</span>' + // }else if (d.state === 2) { + // return '<span style="color:blue;">通过</span>' + // }else if (d.state === 3) { + // return '<span style="color:red;">拒绝</span>' + // }else{ + // return '' + // } + // }, minWidth: 100,align:'center'}, + // {field: 'createdTime', title: '申请时间', minWidth: 180,align:'center'}, {title: '操作', templet: function (d) { if(d.state === 1 ){ -- Gitblit v1.9.1