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">&#xe848;</i>
+                                </div>
+                                <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset">
+                                    <i class="layui-icon">&#xe79b;</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">&#xe7a5;</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