Administrator
6 days ago a834ccd8dfef154b3164b83104a6cbd4837f81b3
feat(system): 添加国家运费配置功能

- 在 AdminSystemController 中添加国家运费相关接口
- 实现国家运费列表、保存、删除功能
- 在 ApiMallOrderController 中添加获取国家运费接口
- 创建 CountryDeliveryDto 数据传输对象
- 创建 MallCountryDelivery 实体类和相关映射
- 实现 IMallCountryDeliveryService 接口及其实现类
- 添加国家运费配置数据库表和初始数据
- 创建前端国家运费管理页面模板
- 在 ViewSystemController 中添加国家运费配置页面路由
8 files added
3 files modified
470 ■■■■■ changed files
sql/mall_country_delivery.sql 40 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java 21 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/dependentStation/ApiMallOrderController.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/CountryDeliveryDto.java 36 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallCountryDelivery.java 33 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallCountryDeliveryMapper.java 12 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IMallCountryDeliveryService.java 24 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/MallCountryDeliveryServiceImpl.java 92 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallCountryDeliveryMapper.xml 19 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/system/countryDeliveryList.html 176 ●●●●● patch | view | raw | blame | history
sql/mall_country_delivery.sql
New file
@@ -0,0 +1,40 @@
-- ============================================================
-- 国家运费配置表
-- ============================================================
DROP TABLE IF EXISTS mall_country_delivery;
CREATE TABLE mall_country_delivery (
    ID           BIGINT       NOT NULL AUTO_INCREMENT  COMMENT '主键',
    REVISION     INT          DEFAULT 1                COMMENT '乐观锁',
    CREATED_BY   VARCHAR(32)  DEFAULT 'system'         COMMENT '创建人',
    CREATED_TIME DATETIME     DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    UPDATED_BY   VARCHAR(32)  DEFAULT 'system'         COMMENT '更新人',
    UPDATED_TIME DATETIME     DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    COUNTRY_CODE VARCHAR(10)  NOT NULL                 COMMENT '国家编码(ISO 3166-1,如 CN/US/JP)',
    COUNTRY_NAME VARCHAR(64)  NOT NULL                 COMMENT '国家名称(中文)',
    SHIPPING_FEE DECIMAL(10,2) NOT NULL DEFAULT 0.00   COMMENT '运费(元)',
    STATUS       INT          DEFAULT 1                COMMENT '状态:1-启用,0-禁用',
    REMARK       VARCHAR(255)                          COMMENT '备注',
    PRIMARY KEY (ID),
    UNIQUE KEY uk_country_code (COUNTRY_CODE)
) COMMENT = '国家运费配置表';
-- ----------------------------
-- 默认数据
-- ----------------------------
INSERT INTO mall_country_delivery (COUNTRY_CODE, COUNTRY_NAME, SHIPPING_FEE, STATUS, REMARK) VALUES
('CN', '中国',   0.00, 1, '国内免运费'),
('US', '美国',  59.00, 1, NULL),
('JP', '日本',  35.00, 1, NULL),
('KR', '韩国',  30.00, 1, NULL),
('GB', '英国',  50.00, 1, NULL),
('DE', '德国',  50.00, 1, NULL),
('FR', '法国',  50.00, 1, NULL),
('AU', '澳大利亚', 55.00, 1, NULL),
('CA', '加拿大',  55.00, 1, NULL),
('SG', '新加坡',  28.00, 1, NULL);
-- ============================================================
-- 菜单注册 SQL(通过后台菜单管理页面操作,或直接执行)
-- ============================================================
-- INSERT INTO t_menu (MENU_NAME, URL, PERMS, ICON, TYPE, PARENT_ID, ORDER_NUM, CREATED_TIME)
-- VALUES ('国家运费设置', 'modules/system/countryDeliveryList', 'countryDelivery:view', 'layui-icon-template-1', 0, {系统设置菜单ID}, 13, NOW());
src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java
@@ -8,6 +8,7 @@
import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper;
import cc.mrbird.febs.mall.service.ICommonService;
import cc.mrbird.febs.mall.service.IMallCountryDeliveryService;
import cc.mrbird.febs.mall.service.ISystemService;
import cc.mrbird.febs.pay.model.HeaderDto;
import cc.mrbird.febs.pay.service.WxFaPiaoService;
@@ -23,6 +24,8 @@
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -50,6 +53,7 @@
    private final ICommonService commonService;
    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
    private final WxFaPiaoService wxFaPiaoService;
    private final IMallCountryDeliveryService countryDeliveryService;
    @PostMapping(value = "/bonusSystemSetting")
    public FebsResponse bonusSystemSetting(@RequestBody Map<String, Object> map) {
@@ -125,6 +129,23 @@
        return new FebsResponse().success().message("保存成功");
    }
    @GetMapping(value = "/countryDeliveryList")
    public FebsResponse countryDeliveryList() {
        return countryDeliveryService.list();
    }
    @PostMapping(value = "/countryDeliverySave")
    @ControllerEndpoint(operation = "保存国家运费配置")
    public FebsResponse countryDeliverySave(@Validated CountryDeliveryDto dto) {
        return countryDeliveryService.saveOrUpdate(dto);
    }
    @GetMapping(value = "/countryDeliveryDelete/{id}")
    @ControllerEndpoint(operation = "删除国家运费配置")
    public FebsResponse countryDeliveryDelete(@PathVariable Long id) {
        return countryDeliveryService.delete(id);
    }
    @PostMapping(value = "/agentAmountSetSetting")
    public FebsResponse agentAmountSetSetting(AdminAgentAmountDto adminAgentAmountDto) {
        DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java
@@ -176,4 +176,10 @@
        model.addAttribute("salesService", dto);
        return FebsUtil.view("modules/system/salesService");
    }
    @GetMapping("countryDeliveryList")
    @RequiresPermissions("countryDelivery:view")
    public String countryDeliveryList() {
        return FebsUtil.view("modules/system/countryDeliveryList");
    }
}
src/main/java/cc/mrbird/febs/mall/controller/dependentStation/ApiMallOrderController.java
@@ -6,6 +6,7 @@
import cc.mrbird.febs.mall.dto.*;
import cc.mrbird.febs.mall.entity.MallOrderInfo;
import cc.mrbird.febs.mall.service.IApiMallOrderInfoService;
import cc.mrbird.febs.mall.service.IMallCountryDeliveryService;
import cc.mrbird.febs.mall.vo.ApiOrderPayVo;
import cc.mrbird.febs.mall.vo.OrderDetailVo;
import cc.mrbird.febs.mall.vo.OrderListVo;
@@ -40,6 +41,7 @@
    private final IApiMallOrderInfoService mallOrderInfoService;
    private final IXcxPayService iXcxPayService;
    private final LwPayService lwPayService;
    private final IMallCountryDeliveryService countryDeliveryService;
    @ApiOperation(value = "创建订单--验证是否允许创建", notes = "创建订单--验证是否允许创建")
    @PostMapping(value = "/createOrderVerify")
@@ -254,4 +256,13 @@
        return "redirect:/pages/payResult?orderNo=" + orderId + "&code=" + returncode;
    }
    @ApiOperation(value = "根据国家编码查询运费", notes = "根据国家编码查询对应运费")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success")
    })
    @GetMapping(value = "/getShippingFee")
    public FebsResponse getShippingFee(@RequestParam String countryCode) {
        return countryDeliveryService.getShippingFeeByCountryCode(countryCode);
    }
}
src/main/java/cc/mrbird/febs/mall/dto/CountryDeliveryDto.java
New file
@@ -0,0 +1,36 @@
package cc.mrbird.febs.mall.dto;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
 * 国家运费配置 DTO
 *
 * @author auto-generated
 */
@Data
public class CountryDeliveryDto {
    private Long id;
    /** 国家编码 */
    @NotBlank(message = "国家编码不能为空")
    private String countryCode;
    /** 国家名称 */
    @NotBlank(message = "国家名称不能为空")
    private String countryName;
    /** 运费 */
    @NotNull(message = "运费不能为空")
    private BigDecimal shippingFee;
    /** 状态 */
    private Integer status;
    /** 备注 */
    private String remark;
}
src/main/java/cc/mrbird/febs/mall/entity/MallCountryDelivery.java
New file
@@ -0,0 +1,33 @@
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;
/**
 * 国家运费配置表
 *
 * @author auto-generated
 * @date 2026-06-22
 */
@Data
@TableName("mall_country_delivery")
public class MallCountryDelivery extends BaseEntity {
    /** 国家编码(如 CN, US, JP) */
    private String countryCode;
    /** 国家名称(中文) */
    private String countryName;
    /** 运费(元) */
    private BigDecimal shippingFee;
    /** 状态:1-启用,0-禁用 */
    private Integer status;
    /** 备注 */
    private String remark;
}
src/main/java/cc/mrbird/febs/mall/mapper/MallCountryDeliveryMapper.java
New file
@@ -0,0 +1,12 @@
package cc.mrbird.febs.mall.mapper;
import cc.mrbird.febs.mall.entity.MallCountryDelivery;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * 国家运费配置 Mapper
 *
 * @author auto-generated
 */
public interface MallCountryDeliveryMapper extends BaseMapper<MallCountryDelivery> {
}
src/main/java/cc/mrbird/febs/mall/service/IMallCountryDeliveryService.java
New file
@@ -0,0 +1,24 @@
package cc.mrbird.febs.mall.service;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.mall.dto.CountryDeliveryDto;
/**
 * 国家运费配置 Service 接口
 *
 * @author auto-generated
 */
public interface IMallCountryDeliveryService {
    /** 列表查询 */
    FebsResponse list();
    /** 新增/更新 */
    FebsResponse saveOrUpdate(CountryDeliveryDto dto);
    /** 删除 */
    FebsResponse delete(Long id);
    /** 根据国家编码查询运费 */
    FebsResponse getShippingFeeByCountryCode(String countryCode);
}
src/main/java/cc/mrbird/febs/mall/service/impl/MallCountryDeliveryServiceImpl.java
New file
@@ -0,0 +1,92 @@
package cc.mrbird.febs.mall.service.impl;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.mall.dto.CountryDeliveryDto;
import cc.mrbird.febs.mall.entity.MallCountryDelivery;
import cc.mrbird.febs.mall.mapper.MallCountryDeliveryMapper;
import cc.mrbird.febs.mall.service.IMallCountryDeliveryService;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List;
/**
 * 国家运费配置 Service 实现
 *
 * @author auto-generated
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class MallCountryDeliveryServiceImpl implements IMallCountryDeliveryService {
    private final MallCountryDeliveryMapper mallCountryDeliveryMapper;
    @Override
    public FebsResponse list() {
        List<MallCountryDelivery> list = mallCountryDeliveryMapper.selectList(
                Wrappers.lambdaQuery(MallCountryDelivery.class)
                        .orderByAsc(MallCountryDelivery::getCountryCode)
        );
        return new FebsResponse().success().data(list);
    }
    @Override
    public FebsResponse saveOrUpdate(CountryDeliveryDto dto) {
        MallCountryDelivery entity = new MallCountryDelivery();
        entity.setCountryCode(dto.getCountryCode().toUpperCase());
        entity.setCountryName(dto.getCountryName());
        entity.setShippingFee(dto.getShippingFee());
        entity.setStatus(dto.getStatus() != null ? dto.getStatus() : 1);
        entity.setRemark(dto.getRemark());
        if (dto.getId() != null) {
            // 更新
            entity.setId(dto.getId());
            mallCountryDeliveryMapper.updateById(entity);
            log.info("更新国家运费配置: countryCode={}, fee={}", entity.getCountryCode(), entity.getShippingFee());
        } else {
            // 新增前检查编码是否重复
            MallCountryDelivery exist = mallCountryDeliveryMapper.selectOne(
                    Wrappers.lambdaQuery(MallCountryDelivery.class)
                            .eq(MallCountryDelivery::getCountryCode, entity.getCountryCode())
            );
            if (exist != null) {
                return new FebsResponse().fail().message("国家编码 " + entity.getCountryCode() + " 已存在");
            }
            mallCountryDeliveryMapper.insert(entity);
            log.info("新增国家运费配置: countryCode={}, fee={}", entity.getCountryCode(), entity.getShippingFee());
        }
        return new FebsResponse().success().message("保存成功");
    }
    @Override
    public FebsResponse delete(Long id) {
        mallCountryDeliveryMapper.deleteById(id);
        return new FebsResponse().success().message("删除成功");
    }
    @Override
    public FebsResponse getShippingFeeByCountryCode(String countryCode) {
        if (StrUtil.isBlank(countryCode)) {
            return new FebsResponse().fail().message("国家编码不能为空");
        }
        MallCountryDelivery delivery = mallCountryDeliveryMapper.selectOne(
                Wrappers.lambdaQuery(MallCountryDelivery.class)
                        .eq(MallCountryDelivery::getCountryCode, countryCode.toUpperCase())
                        .eq(MallCountryDelivery::getStatus, 1)
        );
        if (delivery == null) {
            // 没有配置则返回默认运费 0(可根据业务调整)
            return new FebsResponse().success().data(BigDecimal.ZERO);
        }
        return new FebsResponse().success().data(delivery.getShippingFee());
    }
}
src/main/resources/mapper/modules/MallCountryDeliveryMapper.xml
New file
@@ -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.MallCountryDeliveryMapper">
    <resultMap id="BaseResultMap" type="cc.mrbird.febs.mall.entity.MallCountryDelivery">
        <id column="ID" jdbcType="BIGINT" property="id"/>
        <result column="REVISION" jdbcType="INTEGER" property="revision"/>
        <result column="CREATED_BY" jdbcType="VARCHAR" property="createdBy"/>
        <result column="CREATED_TIME" jdbcType="TIMESTAMP" property="createdTime"/>
        <result column="UPDATED_BY" jdbcType="VARCHAR" property="updatedBy"/>
        <result column="UPDATED_TIME" jdbcType="TIMESTAMP" property="updatedTime"/>
        <result column="COUNTRY_CODE" jdbcType="VARCHAR" property="countryCode"/>
        <result column="COUNTRY_NAME" jdbcType="VARCHAR" property="countryName"/>
        <result column="SHIPPING_FEE" jdbcType="DECIMAL" property="shippingFee"/>
        <result column="STATUS" jdbcType="INTEGER" property="status"/>
        <result column="REMARK" jdbcType="VARCHAR" property="remark"/>
    </resultMap>
</mapper>
src/main/resources/templates/febs/views/modules/system/countryDeliveryList.html
New file
@@ -0,0 +1,176 @@
<div class="layui-fluid layui-anim febs-anim" id="country-delivery-list" 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="country-delivery-table-form">
                        <div class="layui-row">
                            <div class="layui-col-md10">
                                <div class="layui-form-item">
                                    <button class="layui-btn layui-btn-normal" type="button" id="add-btn">
                                        <i class="layui-icon">&#xe654;</i> 新增
                                    </button>
                                </div>
                            </div>
                            <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="reset">
                                    <i class="layui-icon">&#xe79b;</i>
                                </div>
                            </div>
                        </div>
                    </form>
                    <table lay-filter="countryDeliveryTable" lay-data="{id: 'countryDeliveryTable'}"></table>
                </div>
            </div>
        </div>
    </div>
</div>
<!-- 表格操作栏 -->
<script type="text/html" id="country-delivery-option">
    <a lay-event="edit"><i class="layui-icon febs-edit-area febs-blue">&#xe7a5;</i></a>
    <a lay-event="del"><i class="layui-icon febs-edit-area febs-red">&#xe640;</i></a>
</script>
<style>
    .layui-form-label { width: 120px; }
    .layui-form-item .layui-input-block { margin-left: 150px; }
</style>
<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,
            layer = layui.layer,
            $view = $('#country-delivery-list'),
            $reset = $view.find('#reset'),
            $addBtn = $view.find('#add-btn'),
            tableIns;
        form.render();
        initTable();
        // 表格操作
        table.on('tool(countryDeliveryTable)', function (obj) {
            var data = obj.data,
                layEvent = obj.event;
            if (layEvent === 'edit') {
                openEditModal(data);
            } else if (layEvent === 'del') {
                layer.confirm('确定删除该国家的运费配置吗?', function (index) {
                    febs.get(ctx + 'admin/system/countryDeliveryDelete/' + data.id, {}, function () {
                        layer.close(index);
                        febs.alert.success('删除成功');
                        tableIns.reload();
                    });
                });
            }
        });
        // 新增按钮
        $addBtn.on('click', function () {
            openEditModal(null);
        });
        // 刷新按钮
        $reset.on('click', function () {
            tableIns.reload();
        });
        // 初始化表格
        function initTable() {
            tableIns = febs.table.init({
                elem: $view.find('table'),
                id: 'countryDeliveryTable',
                url: ctx + 'admin/system/countryDeliveryList',
                cols: [[
                    {field: 'countryCode', title: '国家编码', width: 120, align: 'center'},
                    {field: 'countryName', title: '国家名称', width: 150, align: 'center'},
                    {field: 'shippingFee', title: '运费(元)', width: 120, align: 'center'},
                    {field: 'status', title: '状态', width: 80, align: 'center',
                        templet: function (d) {
                            return d.status === 1 ? '<span class="layui-badge layui-bg-green">启用</span>'
                                : '<span class="layui-badge">禁用</span>';
                        }
                    },
                    {field: 'remark', title: '备注', minWidth: 150, align: 'left'},
                    {title: '操作', templet: '#country-delivery-option', width: 120, align: 'center'}
                ]]
            });
        }
        // 打开编辑弹窗
        function openEditModal(data) {
            var title = data ? '编辑国家运费' : '新增国家运费';
            var html = '<div style="padding:20px 25px 0 0;">' +
                '<form class="layui-form" lay-filter="country-delivery-form">' +
                (data ? '<div class="layui-form-item febs-hide"><label class="layui-form-label">ID</label><div class="layui-input-block"><input type="text" name="id" value="' + data.id + '"></div></div>' : '') +
                '  <div class="layui-form-item">' +
                '    <label class="layui-form-label febs-form-item-require">国家编码</label>' +
                '    <div class="layui-input-block">' +
                '      <input type="text" name="countryCode" class="layui-input" ' + (data ? 'value="' + data.countryCode + '"' : 'placeholder="如 CN, US, JP"') + ' lay-verify="required">' +
                '      <div class="layui-form-mid layui-word-aux">ISO国家编码,如CN/US/JP</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="text" name="countryName" class="layui-input" ' + (data ? 'value="' + (data.countryName || '') + '"' : 'placeholder="中文名称"') + ' lay-verify="required">' +
                '    </div>' +
                '  </div>' +
                '  <div class="layui-form-item">' +
                '    <label class="layui-form-label febs-form-item-require">运费(元)</label>' +
                '    <div class="layui-input-block">' +
                '      <input type="number" name="shippingFee" class="layui-input" ' + (data ? 'value="' + data.shippingFee + '"' : 'placeholder="运费金额"') + ' lay-verify="required|number">' +
                '    </div>' +
                '  </div>' +
                '  <div class="layui-form-item">' +
                '    <label class="layui-form-label">状态</label>' +
                '    <div class="layui-input-block">' +
                '      <input type="radio" name="status" value="1" title="启用" ' + (!data || data.status === 1 ? 'checked' : '') + '>' +
                '      <input type="radio" name="status" value="0" title="禁用" ' + (data && data.status === 0 ? 'checked' : '') + '>' +
                '    </div>' +
                '  </div>' +
                '  <div class="layui-form-item">' +
                '    <label class="layui-form-label">备注</label>' +
                '    <div class="layui-input-block">' +
                '      <input type="text" name="remark" class="layui-input" ' + (data && data.remark ? 'value="' + data.remark + '"' : '') + '>' +
                '    </div>' +
                '  </div>' +
                '</form></div>';
            var layerIndex = layer.open({
                type: 1,
                title: title,
                area: ['500px', '420px'],
                content: html,
                btn: ['保存', '取消'],
                yes: function (index, layero) {
                    var formObj = $(layero).find('form');
                    var fieldData = {};
                    formObj.find('input[name]').each(function () {
                        var name = $(this).attr('name');
                        var type = $(this).attr('type');
                        if (type === 'radio' && !$(this).prop('checked')) return;
                        if (type !== 'radio') {
                            fieldData[name] = $(this).val();
                        } else {
                            fieldData[name] = $(this).val();
                        }
                    });
                    // radio
                    var statusVal = formObj.find('input[name="status"]:checked').val();
                    fieldData.status = statusVal;
                    febs.post(ctx + 'admin/system/countryDeliverySave', fieldData, function (res) {
                        layer.close(index);
                        febs.alert.success('保存成功');
                        tableIns.reload();
                    });
                },
                btn2: function () {
                    layer.closeAll();
                }
            });
        }
    });
</script>